From elfring@users.sourceforge.net Wed Jul 1 02:50:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 80C097F86 for ; Wed, 1 Jul 2015 02:50:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 663BB8F8035 for ; Wed, 1 Jul 2015 00:50:14 -0700 (PDT) X-ASG-Debug-ID: 1435737011-04bdf04c7d19b720001-NocioJ Received: from mout.web.de (mout.web.de [212.227.15.3]) by cuda.sgi.com with ESMTP id bkcU1QrTGe4bPByt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 00:50:12 -0700 (PDT) X-Barracuda-Envelope-From: elfring@users.sourceforge.net X-Barracuda-Apparent-Source-IP: 212.227.15.3 Received: from [192.168.1.2] ([78.48.178.123]) by smtp.web.de (mrweb004) with ESMTPSA (Nemesis) id 0LwU2B-1YzQBd2Udb-018MNF; Wed, 01 Jul 2015 09:50:06 +0200 Message-ID: <55939BA8.1090400@users.sourceforge.net> Date: Wed, 01 Jul 2015 09:50:00 +0200 From: SF Markus Elfring User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com, LKML , kernel-janitors@vger.kernel.org, Julia Lawall Subject: Re: XFS: Fine-tuning for checks before the function call "xfs_qm_dqrele"? References: <530CD2C4.4050903@users.sourceforge.net> <530CF8FF.8080600@users.sourceforge.net> <530DD06F.4090703@users.sourceforge.net> <5317A59D.4@users.sourceforge.net> <5479F823.60900@users.sourceforge.net> <20141130230904.GF16151@dastard> <558D1833.3080009@users.sourceforge.net> <20150629214355.GE7943@dastard> X-ASG-Orig-Subj: Re: XFS: Fine-tuning for checks before the function call "xfs_qm_dqrele"? In-Reply-To: <20150629214355.GE7943@dastard> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:EGtZZzp/w/b1kzWc1SjreoE4mI+x6rmeNuPCaKHTZkG6gPomKAy tvJPoOH/vM522/H26uOU+yO76pFiEmJmBNfzQlTE+V+pw3magREtM8RJ6z9Ux9oD445Q8rt TR1aNsiBNFta3QTsem3CL0bJVep6bdg44fzlHAt2ay26R0x9CTOzj4RbjBotUbvLeWe8x9/ e92ESvmEK7++GSInqlUiw== X-UI-Out-Filterresults: notjunk:1;V01:K0:tMfjTxOIgJw=:/hqXGBZJRITeVEXzXtk4mM nOHXdPYYoHlMTgcaBLkFugQdZ6gB2SrlLYkN7hVwEjUWfEDdi4gr8b/yJ6O6hPyQlLlgMsNS+ LEY38dSql/loztpPsobUHxaMaNT1RVCu2JwVU2MbtUStCq9TJgqVP/OsIa2q+ru/xhwh8s8GJ smvD9YnLqhavBqeipiY0EJRYwQrpdLEQsE3LhAVMmaJ78rZrQegNG3dy06DMPywK1iCFGU8Lg 6j66JyNzOYTkutuqzZ/2pp9QYeHLaoXoHN+GSJYKJD3P6seLJiZ0U7DaZG/dFV8gbHHg7tQRZ pyxRKwIMFFYGW5vyK4/nbLuvEbD8DFMICpvwGq5XDdpHbwWEcQFaWMTmIhVdZK5IK8To1CqpK pJcJP3jdyXAyYCaEreN9iXh24ZYWFooW6JPIOlivn7/W01nd7vrYEbwaScCoYAvuvepIoq9mW rVpIgCMm75THOSRD8G4stIE2SGnAC7V0gDFuVpj6XiYEypcCSedM5DQuuPkAi87CcOEkAGGx4 JQhsNzjYg3hhXAQlzM22SWJ5M7oRzFoTCYn2tTqiR+D2FM21Juubx9Z52Y2ijFtIMNAQcJXxT NtWZsG44mYVBvSHFfuByAZeRlOv8EQEH/IFl4K8itHcow5ZMI1b1j+uyWXBBPg5c17m3kDKLZ eWbr43H61pQWIabogStDGlBLZ+PMVlraSE+jiPOHc38th+OEXviFA25AnMA6cjk8ViZY= X-Barracuda-Connect: mout.web.de[212.227.15.3] X-Barracuda-Start-Time: 1435737012 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20348 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > xfs_dqrele_inode() gets called on every inode in the inode cache, > and this change results in a cacheline in every inode being dirtied > even if they don't have dquots attached. Given the inode cache can > hold tens to hundreds of millions of inodes on large machines, we > don't want to dirty any cachelines we don't need to while walking > the inode cache and releasing dquots... Would it make sense to annotate checks before such function calls as "LIKELY"? Regards, Markus From jtulak@redhat.com Wed Jul 1 03:30:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 696CB7F96 for ; Wed, 1 Jul 2015 03:30:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5BD2A304051 for ; Wed, 1 Jul 2015 01:30:44 -0700 (PDT) X-ASG-Debug-ID: 1435739425-04cb6c2dca1a0920001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id Z7xRTdeIl8gpPyx8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 01:30:25 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t618UN1H002632; Wed, 1 Jul 2015 04:30:23 -0400 Date: Wed, 1 Jul 2015 04:30:23 -0400 (EDT) From: Jan Tulak To: Brian Foster Cc: Dave Chinner , Dave Chinner , xfs@oss.sgi.com Message-ID: <489067631.22126950.1435739423385.JavaMail.zimbra@redhat.com> In-Reply-To: <20150630112739.GB60188@bfoster.bfoster> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-14-git-send-email-jtulak@redhat.com> <20150626171730.GI40750@bfoster.bfoster> <20150630035736.GJ7943@dastard> <20150630112739.GB60188@bfoster.bfoster> Subject: Re: [PATCH 13/17] mkfs: encode conflicts into parsing table MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 13/17] mkfs: encode conflicts into parsing table Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.36.6.112] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: mkfs: encode conflicts into parsing table Thread-Index: 7Hyp+dTUmtCQwTYk26zhGV3qNgNaXA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1435739425 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20349 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > From: "Brian Foster" > To: "Dave Chinner" > Cc: "Jan =C5=A4ul=C3=A1k" , "Dave Chinner" , xfs@oss.sgi.com > Sent: Tuesday, June 30, 2015 1:27:40 PM > Subject: Re: [PATCH 13/17] mkfs: encode conflicts into parsing table >=20 > On Tue, Jun 30, 2015 at 01:57:36PM +1000, Dave Chinner wrote: > > On Fri, Jun 26, 2015 at 01:17:31PM -0400, Brian Foster wrote: > > > On Fri, Jun 19, 2015 at 01:02:02PM +0200, Jan =C5=A4ul=C3=A1k wrote: > > > > From: Dave Chinner > > > >=20 > > > > Many options conflict, so we need to specify which options conflict > > > > with each other in a generic manner. We already have a "seen" > > > > variable used for respecification detection, so we can also use thi= s > > > > code conflict detection. Hence add a "conflicts" array to the sub > > > > options parameter definition. > > ..... > > > > @@ -2020,7 +2027,7 @@ _("cannot specify both -m crc=3D1 and -n > > > > ftype\n")); > > > > =09=09=09=09=09=09 &value)) { > > > > =09=09=09=09case S_LOG: > > > > =09=09=09=09case S_SECTLOG: > > > > -=09=09=09=09=09if (ssflag || lssflag) > > > > +=09=09=09=09=09if (lssflag) > > > > =09=09=09=09=09=09conflict('s', subopts, > > > > =09=09=09=09=09=09=09 S_SECTSIZE, S_SECTLOG); > > > > =09=09=09=09=09sectorlog =3D getnum(value, &sopts, > > > > @@ -2032,7 +2039,7 @@ _("cannot specify both -m crc=3D1 and -n > > > > ftype\n")); > > > > =09=09=09=09=09break; > > > > =09=09=09=09case S_SIZE: > > > > =09=09=09=09case S_SECTSIZE: > > > > -=09=09=09=09=09if (slflag || lslflag) > > > > +=09=09=09=09=09if (lslflag) > > > > =09=09=09=09=09=09conflict('s', subopts, S_SECTLOG, > > > > =09=09=09=09=09=09=09 S_SECTSIZE); > > >=20 > > > Hmm.. so is the limitation here that we can't do generic conflict > > > detection across different option structs? If so, I suppose that's no= t > > > the end of the world. The cleanup is still well worth it. > >=20 > > I just never got around to coding it in a generic fashion - I didn't > > finish the entire patchset back when I originally wrote it.... > >=20 >=20 > Ok. Well I don't know if Jan is up for adding that or what. :) I > wouldn't be against getting this in as is so it isn't held off longer. > It still needs a comment though. ;) >=20 > > > I wonder if we > > > still need to set lslflag/lssflag in either of the above cases, thoug= h. > > > It seems like the generic detection should handle it..? > >=20 > > In the end it would look at the relevant ->seen flag to determine > > if there was a cross-option-struct conflict. Essentially, the > > conflict definition needs to define conflicts via a {group, option} > > tuple rather than just the {option} it uses now... > >=20 >=20 > Sure. Not a huge deal, but to be clear my comment here was with respect > to the fact that we set lslflag and lssflag in those two > S_SECTLOG/S_SECTSIZE blocks. I suspect we still need the flag for the > L_SECT* conflict, but it looks like the generic code now handles the > conflict within the 's' group of options. In other words, we have > duplicate handling of the S_SECTLOG/S_SECTSIZE conflict after this > patch. >=20 > Brian >=20 I'm for making it all in the generic code, if you are asking that. :-)=20 Thanks for pointing out the possible duplicate handling, I will check it. (= And thanks for all the others notices, too. :-)) > > -Dave. > > -- > > Dave Chinner > > david@fromorbit.com > >=20 --=20 Jan Tulak jtulak@redhat.com From returns.14.7003996@smtpgm.com Wed Jul 1 03:43:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D1ADC7F99 for ; Wed, 1 Jul 2015 03:43:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 98581304043 for ; Wed, 1 Jul 2015 01:43:04 -0700 (PDT) X-ASG-Debug-ID: 1435740179-04bdf04c7e19c690001-NocioJ Received: from mailer195.gate82.rs.smtp.com (mailer195.gate82.rs.smtp.com [74.91.82.195]) by cuda.sgi.com with ESMTP id zYMxwdzMeQj8PzsF for ; Wed, 01 Jul 2015 01:43:00 -0700 (PDT) X-Barracuda-Envelope-From: returns.14.7003996@smtpgm.com X-Barracuda-Apparent-Source-IP: 74.91.82.195 X-MSFBL: eGZzQG9zcy5zZ2kuY29tQDc0XzkxXzgyXzE5NUBidXNodmVsZHRzYWZhcmlfZGVk aWNhdGVkX3Bvb2xA DKIM-Signature: v=1; a=rsa-sha256; d=smtp.com; s=smtpcomcustomers; c=relaxed/simple; q=dns/txt; i=@smtp.com; t=1435740179; h=From:Subject:To:Date:MIME-Version:Content-Type; bh=bGD02TQVQNASXmNb16dGlpsdcC5SRoJ7npbzjohklVs=; b=CFiitUK+X/YHvK/KHpNrZK30+gPej55SfHF79DKzi6Qa1/hz9pUuc0XPGEuV9Wd5 hCN3DqbepU9l2JIg1YkNu2Gw/KQwixJPMonu8G3v1usWsCuv0UpI6AgFVsesHOzh s7AvbqZEA7G2byJKBL8WuPjMAY08Tv/G47Fmbse2y7Q=; Received: from [23.96.192.49] ([23.96.192.49:31986] helo=RD000D3A6104BD) by rs-ord-gm-mta05-3.smtp.com (envelope-from ) (ecelerity 3.6.7.46655 r(Core:3.6.7.0)) with ESMTPA id 50/F6-01782-318A3955; Wed, 01 Jul 2015 08:42:59 +0000 Reply-To: "Busveldt Safaris" Message-ID: <50.F6.01782.318A3955@rs-ord-gm-mta05-3.smtp.com> From: "Busveldt Safaris" To: Subject: Re: Winter breakaway in the Bushveld Date: Wed, 01 Jul 2015 08:42:59 GMT X-ASG-Orig-Subj: Re: Winter breakaway in the Bushveld X-Mailer: OpenSmtp.net MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 X-SMTPCOM-Tracking-Number: 1e00845e-d2ef-4e59-b86b-cb711b74aecb X-SMTPCOM-Sender-ID: 7003996 Feedback-ID: 7003996:SMTPCOM X-Barracuda-Connect: mailer195.gate82.rs.smtp.com[74.91.82.195] X-Barracuda-Start-Time: 1435740180 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20349 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h bC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhl YWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg Y2hhcnNldD11dGYtOCIgLz4NCjx0aXRsZT5ad2FoaWxpIC0gT2N0b2JlciAyMDE0IEhhbGYgUHJp Y2UgU2FsZTwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnJlZHAxIHsJZm9udC1m YW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIiwgIkx1Y2lkYSBHcmFuZGUiLCBzYW5zLXNlcmlm Ow0KCWZvbnQtc2l6ZTogMTRweDsNCglmb250LXdlaWdodDogDQoJY29sb3I6ICNGRkY7CQkJY29s b3I6ICNGMDA7DQp9DQoucmVkcDEgewlmb250LWZhbWlseTogIkx1Y2lkYSBTYW5zIFVuaWNvZGUi LCAiTHVjaWRhIEdyYW5kZSIsIHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOiAxNHB4Ow0KCWZvbnQt d2VpZ2h0OiANCgljb2xvcjogI0ZGRjsJCQljb2xvcjogI0YwMDsNCn0NCi5yZWRwMSB7CWZvbnQt ZmFtaWx5OiAiTHVjaWRhIFNhbnMgVW5pY29kZSIsICJMdWNpZGEgR3JhbmRlIiwgc2Fucy1zZXJp ZjsNCglmb250LXNpemU6IDE0cHg7DQoJZm9udC13ZWlnaHQ6IA0KCWNvbG9yOiAjRkZGOwkJCWNv bG9yOiAjRjAwOw0KfQ0KPC9zdHlsZT4NCjwvaGVhZD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ DQpoMSB7DQoJZm9udC1mYW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIiwgIkx1Y2lkYSBHcmFu ZGUiLCBzYW5zLXNlcmlmOw0KCWZvbnQtc2l6ZTogMzBweDsNCglmb250LXdlaWdodDogYm9sZDsN Cgljb2xvcjogI0ZGRjsNCg0KfQ0KYm9keXsNCgliYWNrZ3JvdW5kLWNvbG9yOiNmZmY7DQoJYmFj a2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXkNCn0NCmgyIHsNCglmb250LWZhbWlseTogIkx1Y2lkYSBT YW5zIFVuaWNvZGUiLCAiTHVjaWRhIEdyYW5kZSIsIHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOiAx OHB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOyANCgljb2xvcjogI0ZGRjsNCn0NCnAgew0KCWZvbnQt ZmFtaWx5OiAiTHVjaWRhIFNhbnMgVW5pY29kZSIsICJMdWNpZGEgR3JhbmRlIiwgc2Fucy1zZXJp ZjsNCglmb250LXNpemU6IDE2cHg7DQoJZm9udC13ZWlnaHQ6IA0KCWNvbG9yOiAjRkZGOw0KfQ0K DQoucmVkcCB7DQoJZm9udC1mYW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIiwgIkx1Y2lkYSBH cmFuZGUiLCBzYW5zLXNlcmlmOw0KCWZvbnQtc2l6ZTogMTRweDsNCglmb250LXdlaWdodDogDQoJ Y29sb3I6ICNGRkY7CQkJY29sb3I6ICNGMDA7DQp9DQphOmxpbmsgew0KCWNvbG9yOiAjRkZGOw0K fQ0KYTp2aXNpdGVkIHsNCgljb2xvcjogI0ZGRjsNCn0NCmE6aG92ZXIgew0KCWNvbG9yOiAjQzYw Ow0KfQ0KPC9zdHlsZT4NCjxib2R5PjxpbWcgYWx0PScnIHNyYz0naHR0cDovL2lzLmNpbmNvLnB1 cmxzbWFpbC5jb20vL3NpdGUvcy9vLmFzcHg/SGl0SUQ9MTQzNTc0MDA5MDI4NyZFbUlEPTEzMTQ5 ODYyJlN0SUQ9NDc4OTMmU0lEPTE0Jk5JRD02ODk2MTUmRW1haWw9eGZzQG9zcy5zZ2kuY29tJyBi b3JkZXI9JzAnIHdpZHRoPScxJyBoZWlnaHQ9JzEnPjxpbWcgYWx0PScnIHNyYz0naHR0cDovL2lz LmNpbmNvLnB1cmxzbWFpbC5jb20vL1JXQ29kZS9jbGljay5hc3A/SGl0SUQ9MTQzNTc0MDA5MDI4 NyZFbUlEPTEzMTQ5ODYyJlN0SUQ9NDc4OTMmU0lEPTE0Jk5JRD02ODk2MTUmRW1haWw9eGZzQG9z cy5zZ2kuY29tJyBib3JkZXI9JzAnIHdpZHRoPScxJyBoZWlnaHQ9JzEnPjxzdHlsZSAgdHlwZT0i dGV4dC9jc3MiPmJvZHkge2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWFyZ2luLXRvcDogMHB4ICFp bXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDBweCAhaW1wb3J0YW50OyBwYWRkaW5nOjBweCAhaW1w b3J0YW50OyBtc28tbWFyZ2luLXRvcC1hbHQ6MHB4ICFpbXBvcnRhbnQ7IG1zby1tYXJnaW4tYm90 dG9tLWFsdDowcHggIWltcG9ydGFudDsgbXNvLXBhZGRpbmctYWx0OiAwcHggMHB4IDBweCAwcHgg IWltcG9ydGFudDt9IEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDQ4MHB4KSB7 IC5mdWxsX3dpZHRoeyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9IH08L3N0eWxlPg0KCTx0YWJs ZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0i MCI+DQogICAgDQogICAgICA8dGJvZHk+PHRyPg0KICAgICAgICAJPHRkIGFsaWduPSJsZWZ0Ij48 aW1nIGFsdD0iIiBzcmM9Imh0dHA6Ly93d3cuendhaGlsaS5jby56YS9tYWlsZXJzL2hhbGYtcHJp Y2UvMS5wbmciIC8+PGJyIC8+PGJyIC8+PC90ZD4NCiAgICAgIDwvdHI+DQogICAgICANCiAgICAg IA0KICAgCSAgPHRyPg0KICAgICAgICAJPHRkIGFsaWduPSJjZW50ZXIiPjxpbWcgYWx0PSIiIHNy Yz0iaHR0cDovL3d3dy56d2FoaWxpLmNvLnphL21haWxlcnMvaGFsZi1wcmljZS8yLnBuZyIgLz48 YnIgLz48YnIgLz48L3RkPg0KICAgICAgPC90cj4NCiAgICAgIA0KICAgIAkNCiAgICAgIDx0cj4N CiAgICAgICAgCTx0ZCBhbGlnbj0iY2VudGVyIj48aW1nIGFsdD0iIiBzcmM9Imh0dHA6Ly93d3cu endhaGlsaS5jby56YS9tYWlsZXJzL2hhbGYtcHJpY2UvMy5wbmciIC8+PGJyIC8+PGJyIC8+PC90 ZD4NCiAgICAgIDwvdHI+DQogICAgICANCiAgICAgIA0KICAgCSAgPHRyPg0KICAgICAgICAJPHRk IGFsaWduPSJjZW50ZXIiPjxwPjxpbWcgYWx0PSIiIHNyYz0iaHR0cDovL3d3dy56d2FoaWxpLmNv LnphL21haWxlcnMvaGFsZi1wcmljZS80LnBuZyIgLz48YnIgLz48L3A+PGRpdj48c3BhbiBzdHls ZT0iZm9udC1mYW1pbHk6IEFyaWFsOyBmb250LXNpemU6IDEwcHQ7Ij48c3Ryb25nPlRlcm1zIGFu ZCBDb25kaXRpb25zIGFwcGx5IC0mbmJzcDtPZmZlciB2YWxpZCB0aWxsJm5ic3A7MzEgSnVseSAy MDE1LiZuYnNwOyZuYnNwOzwvc3Ryb25nPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 IEFyaWFsOyBmb250LXNpemU6IDEwcHQ7Ij48c3Ryb25nPk1pbiAyIG5pZ2h0cyBzdGF5IHJlcXVp cmVkLiZuYnNwOyZuYnNwOyZuYnNwOzwvc3Ryb25nPjwvc3Bhbj48L2Rpdj48ZGl2PiZuYnNwOzwv ZGl2PjwvdGQ+DQogICAgICA8L3RyPg0KICAgICAgDQogICAgICANCiAgICAgIA0KICAgCSAgPHRy Pg0KICAgICAgICAJPHRkIGFsaWduPSJjZW50ZXIiPjxpbWcgYWx0PSIiIHNyYz0iaHR0cDovL3d3 dy56d2FoaWxpLmNvLnphL21haWxlcnMvd2VsbC1kZXNlcnZlZC1idXNoYnJlYWsvNS5wbmciIHVz ZW1hcD0iI01hcE1hcCIgLz4NCiAgICAgICAgICAgIDxtYXAgbmFtZT0iTWFwTWFwIiBpZD0iTWFw TWFwIj48YXJlYSBocmVmPSJodHRwOi8vd3d3Lnp3YWhpbGkuY28uemEvIiBzaGFwZT0icmVjdCIg Y29vcmRzPSI0OTUsMzQsNjUzLDQ4IiAvPg0KICAgICAgICAJICAgIDxhcmVhIGhyZWY9Im1haWx0 bzpyZXNlcnZhdGlvbnNAendhaGlsaS5jby56YSIgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTg5LDMy LDQxNCw0OCIgLz4NCiAgICAgICAgPC9tYXA+PC90ZD4NCiAgICAgIDwvdHI+ICAgICAgICAgICAg ICAgICANCiAgICAgIA0KICAgICAgICAgICAgIA0KPC90Ym9keT48L3RhYmxlPg0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlICBiZ2NvbG9yPSIjRkZGRkZGIiAg c3R5bGU9Im1pbi13aWR0aDogMTAwJTsgd2lkdGg6IDEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRp bmc9IjAiIGNlbGxzcGFjaW5nPSIwIiAgd2lkdGg9IjEwMCUiPjx0cj48dGQ+PHRhYmxlICBiZ2Nv bG9yPSIjRkZGRkZGIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJtaW4td2lkdGg6IDEwMCU7IHdpZHRo OiAxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgIHdpZHRo PSIxMDAlIj48dHI+PHRkPjx0YWJsZSBhbGlnbj0iQ2VudGVyIiBiZ2NvbG9yPSIjRkZGRkZGIiBi b3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIHN0 eWxlPSJ3aWR0aDoxMDAlO21pbi13aWR0aDoxMDAlO3BhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXM7 YmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOyI+PHRyIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHRkIHdp ZHRoPSIyMCIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8L3Rk Pjx0ZCBhbGlnbj0iQ2VudGVyIiB2YWxpZ249InRvcCIgIGNsYXNzPSJmb290ZXJDb250ZW50IiBz dHlsZT0id2lkdGg6OTklOyI+IDxkaXYgaWQ9ImZvb3RlckxpbmtzIiBzdHlsZT0iZGlzcGxheTpi bG9jayAhaW1wb3J0YW50OyB3aWR0aDoxMDAlOyBtYXJnaW4tdG9wOiAxMHB4Ij48YSBocmVmPSJo dHRwOi8vaXMuY2luY28ucHVybHNtYWlsLmNvbS9SV0NvZGUvc3Vic2NyaWJlLmFzcD9Nb2RlPXVu c3Vic2NyaWJlJlNpdGVJRD00Nzg5MyZTSUQ9MTQmRW1haWw9eGZzQG9zcy5zZ2kuY29tJmhpdGlk PTE0MzU3NDAwOTAyODcmdG9rZW49MmQyN2NmNmQxMjVjMTAxNDc3ZjU3NTI2ZGVjMDFmMDNlYTZh MmY2ZiIgdGFyZ2V0PSJuZXciIGNsYXNzPSJmb290ZXJDbGljayIgc3R5bGU9ImNvbG9yOiAjMzMz MzMzOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O2Zv bnQtZmFtaWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdo dDpOb3JtYWwiPnVuc3Vic2NyaWJlPC9hPjxmb250IGlkPSJyZW1vdmVNYWluIiBzdHlsZT0iY29s b3I6ICMzMzMzMzM7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZGlzcGxheTogaW5saW5lICFpbXBvcnRh bnQ7Zm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQt d2VpZ2h0Ok5vcm1hbCI+IHwgPC9mb250PiA8YSBocmVmPSJodHRwOi8vaXMuY2luY28ucHVybHNt YWlsLmNvbS9SV0NvZGUvc3Vic2NyaWJlLmFzcD9Nb2RlPXVwZGF0ZSZTaXRlSUQ9NDc4OTMmU0lE PTE0JkVtYWlsPXhmc0Bvc3Muc2dpLmNvbSZoaXRpZD0xNDM1NzQwMDkwMjg3JnRva2VuPTJkMjdj ZjZkMTI1YzEwMTQ3N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYiIHRhcmdldD0ibmV3IiBjbGFzcz0i Zm9vdGVyQ2xpY2siIHN0eWxlPSJjb2xvcjogIzMzMzMzMzsgdGV4dC1kZWNvcmF0aW9uOiBub25l OyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsgZm9udC1zaXpl OjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj4gdXBkYXRlIHByb2ZpbGU8 L2E+IDxmb250IGlkPSJyZW1vdmVNYWluIiBzdHlsZT0iY29sb3I6ICMzMzMzMzM7IGZvbnQtc3R5 bGU6IG5vcm1hbDsgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5OlRpbWVz OyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwiPiB8IDwv Zm9udD4gPGEgaHJlZj0iaHR0cDovL2lzLmNpbmNvLnB1cmxzbWFpbC5jb20vc2l0ZS9mb3J3YXJk X3RvX2ZyaWVuZC5hc3B4P1NpdGVJRD00Nzg5MyZTSUQ9MTQmU2VjdGlvbj02ODk2MTUmaGl0aWQ9 MTQzNTc0MDA5MDI4NyZGcm9tRW1haWw9eGZzQG9zcy5zZ2kuY29tJnRva2VuPTJkMjdjZjZkMTI1 YzEwMTQ3N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYmRW1haWxJRD0xMzE0OTg2MiIgdGFyZ2V0PSJu ZXciIGNsYXNzPSJmb290ZXJDbGljayIgc3R5bGU9ImNvbG9yOiAjMzMzMzMzOyB0ZXh0LWRlY29y YXRpb246IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5OlRpbWVz OyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwiPmZvcndh cmQ8L2E+PGZvbnQgaWQ9InJlbW92ZU1haW4iIHN0eWxlPSJmb250LXN0eWxlOiBub3JtYWw7IGRp c3BsYXk6aW5saW5lICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7 IGNvbG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+IHwgPC9mb250PiA8YSBocmVmPSJo dHRwOi8vaXMuY2luY28ucHVybHNtYWlsLmNvbS9SV0NvZGUvc3Vic2NyaWJlLmFzcD9TaXRlSUQ9 NDc4OTMmU0lEPTE0JkVtYWlsPXhmc0Bvc3Muc2dpLmNvbSZoaXRpZD0xNDM1NzQwMDkwMjg3JnRv a2VuPTJkMjdjZjZkMTI1YzEwMTQ3N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYiICB0YXJnZXQ9Im5l dyIgY2xhc3M9ImZvb3RlckNsaWNrIiBzdHlsZT0iY29sb3I6ICMzMzMzMzM7dGV4dC1kZWNvcmF0 aW9uOiBub25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsg Zm9udC1zaXplOjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj5zdWJzY3Jp YmU8L2E+PC9kaXY+PC90ZD48dGQgd2lkdGg9IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0i d2lkdGg6MjBweDsiPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIyMCIgYmdjb2xvcj0i I0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8L3RkPjx0ZCBhdD0iMSIgYWxpZ249 IkNlbnRlciIgdmFsaWduPSJ0b3AiIHN0eWxlPSIiIGNsYXNzPSJmb290ZXJDb250ZW50Ij48dGFi bGUgYWxpZ249IkNlbnRlciI+PHRyPjx0ZCBzdHlsZT0iRGlzcGxheTogaW5saW5lLWJsb2NrO3dp ZHRoOjEwMCUiPjxkaXYgYXQ9IjEiIHN0eWxlPSJEaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6 MTAwJSI+PGRpdiBhdD0iMSIgYWxpZ249J0NlbnRlcic+PGEgc3R5bGU9J2Rpc3BsYXk6aW5saW5l LWJsb2NrOyd0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0cDovL2lzLmNp bmNvLnB1cmxzbWFpbC5jb20vc3NwdWJsaXNoLmFzcHg/U0lEPTE0JlNlY3Rpb25JRD02ODk2MTUm U2l0ZUlEPTQ3ODkzJkVtYWlsSUQ9MTMxNDk4NjImSGl0SUQ9MTQzNTc0MDA5MDI4NyZTU0xpbmtJ RD0yMSZ0b2tlbj0yZDI3Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiB0aXRs ZT0iUHVibGljbHkgKzEiPjxpbWcgc3R5bGU9J2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRh bnQ7IGJvcmRlcjogbm9uZTsnIGJvcmRlcj0nMCcgaHNwYWNlPSc1JyB2c3BhY2U9JzUnIHNyYz0i aHR0cDovL2lzLmNpbmNvLnB1cmxzbWFpbC5jb20vaW1hZ2VzL2xvZ29fZ29vZ2xlcGx1c19zLnBu ZyIgdGl0bGU9IlB1YmxpY2x5ICsxIiBhbHQ9IlB1YmxpY2x5ICsxIiBib3JkZXI9IjAiLz48L2E+ Jm5ic3A7Jm5ic3A7PGEgc3R5bGU9J2Rpc3BsYXk6aW5saW5lLWJsb2NrOyd0YXJnZXQ9Il9ibGFu ayIgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0cDovL2lzLmNpbmNvLnB1cmxzbWFpbC5jb20vc3Nw dWJsaXNoLmFzcHg/U0lEPTE0JlNlY3Rpb25JRD02ODk2MTUmU2l0ZUlEPTQ3ODkzJkVtYWlsSUQ9 MTMxNDk4NjImSGl0SUQ9MTQzNTc0MDA5MDI4NyZTU0xpbmtJRD0zJnRva2VuPTJkMjdjZjZkMTI1 YzEwMTQ3N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYiIHRpdGxlPSJUd2VldCBUaGlzIj48aW1nIHN0 eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50OyBib3JkZXI6IG5vbmU7JyBib3Jk ZXI9JzAnIGhzcGFjZT0nNScgdnNwYWNlPSc1JyBzcmM9Imh0dHA6Ly9pcy5jaW5jby5wdXJsc21h aWwuY29tL2ltYWdlcy9sb2dvX3R3aXR0ZXJfcy5wbmciIHRpdGxlPSJUd2VldCBUaGlzIiBhbHQ9 IlR3ZWV0IFRoaXMiIGJvcmRlcj0iMCIvPjwvYT4mbmJzcDsmbmJzcDs8YSBzdHlsZT0nZGlzcGxh eTppbmxpbmUtYmxvY2s7J3RhcmdldD0iX2JsYW5rIiByZWw9Im5vZm9sbG93IiBocmVmPSJodHRw Oi8vaXMuY2luY28ucHVybHNtYWlsLmNvbS9zc3B1Ymxpc2guYXNweD9TSUQ9MTQmU2VjdGlvbklE PTY4OTYxNSZTaXRlSUQ9NDc4OTMmRW1haWxJRD0xMzE0OTg2MiZIaXRJRD0xNDM1NzQwMDkwMjg3 JlNTTGlua0lEPTEmdG9rZW49MmQyN2NmNmQxMjVjMTAxNDc3ZjU3NTI2ZGVjMDFmMDNlYTZhMmY2 ZiIgdGl0bGU9IkZhY2Vib29rIj48aW1nIHN0eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jayAhaW1w b3J0YW50OyBib3JkZXI6IG5vbmU7JyBib3JkZXI9JzAnIGhzcGFjZT0nNScgdnNwYWNlPSc1JyBz cmM9Imh0dHA6Ly9pcy5jaW5jby5wdXJsc21haWwuY29tL2ltYWdlcy9sb2dvX2ZhY2Vib29rX3Mu cG5nIiB0aXRsZT0iRmFjZWJvb2siIGFsdD0iRmFjZWJvb2siIGJvcmRlcj0iMCIvPjwvYT4mbmJz cDsmbmJzcDs8YSBzdHlsZT0nZGlzcGxheTppbmxpbmUtYmxvY2s7J3RhcmdldD0iX2JsYW5rIiBy ZWw9Im5vZm9sbG93IiBocmVmPSJodHRwOi8vaXMuY2luY28ucHVybHNtYWlsLmNvbS9zc3B1Ymxp c2guYXNweD9TSUQ9MTQmU2VjdGlvbklEPTY4OTYxNSZTaXRlSUQ9NDc4OTMmRW1haWxJRD0xMzE0 OTg2MiZIaXRJRD0xNDM1NzQwMDkwMjg3JlNTTGlua0lEPTIwJnRva2VuPTJkMjdjZjZkMTI1YzEw MTQ3N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYiIHRpdGxlPSJsaW5rZWRpbiI+PGltZyBzdHlsZT0n ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgYm9yZGVyOiBub25lOycgYm9yZGVyPScw JyBoc3BhY2U9JzUnIHZzcGFjZT0nNScgc3JjPSJodHRwOi8vaXMuY2luY28ucHVybHNtYWlsLmNv bS9pbWFnZXMvbG9nb19saW5rZWRpbl9zLnBuZyIgdGl0bGU9IkxpbmtlZElOIiBhbHQ9Ikxpbmtl ZEluIiBib3JkZXI9IjAiLz48L2E+Jm5ic3A7Jm5ic3A7PGEgc3R5bGU9J2Rpc3BsYXk6aW5saW5l LWJsb2NrOyd0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0cDovL2lzLmNp bmNvLnB1cmxzbWFpbC5jb20vc3NwdWJsaXNoLmFzcHg/U0lEPTE0JlNlY3Rpb25JRD02ODk2MTUm U2l0ZUlEPTQ3ODkzJkVtYWlsSUQ9MTMxNDk4NjImSGl0SUQ9MTQzNTc0MDA5MDI4NyZTU0xpbmtJ RD0yMiZ0b2tlbj0yZDI3Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiB0aXRs ZT0icGludGVyZXN0Ij48aW1nIHN0eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50 OyBib3JkZXI6IG5vbmU7JyBib3JkZXI9JzAnIGhzcGFjZT0nNScgdnNwYWNlPSc1JyBzcmM9Imh0 dHA6Ly9pcy5jaW5jby5wdXJsc21haWwuY29tL2ltYWdlcy9sb2dvX3BpbnRlcmVzdF9zLnBuZyIg dGl0bGU9IlBpbnRlcmVzdCIgYWx0PSJQaW50ZXJlc3QiIGJvcmRlcj0iMCIvPjwvYT4mbmJzcDsm bmJzcDs8L2Rpdj48L2RpdiA+PC90ZCA+PC90cj48L3RhYmxlPjwvdGQ+PHRkIHdpZHRoPSIyMCIg Ymdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8L3RkPjwvdHI+PHRy Pjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5i c3A7PC90ZD48dGQgYWxpZ249IkNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJhZGRyZXNzQm9v a0NvcHkiIHN0eWxlPSJkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5OlRpbWVz OyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWw7Ij48Zm9u dCBzdHlsZT0iZm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7 IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+VGhpcyBlbWFpbCB3YXMgc2VudCB0byAgPGEgaHJlZj0iIyIg c3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTtmb250LWZhbWlseTpUaW1lczsgZm9udC1zaXpl OjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj4geGZzQG9zcy5zZ2kuY29t IDwvYT4gYnkgIDxhIGhyZWY9IiMiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7Zm9udC1m YW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0Ok5v cm1hbCI+cmVzZXJ2YXRpb25zQGJ1c2h2ZWxkdHNhZmFyaS5jb208L2E+PC9mb250PjwvdGQ+PHRk IHdpZHRoPSIyMCIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8 L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0 aDoyMHB4OyI+Jm5ic3A7PC90ZD48dGQgYWxpZ249IkNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNz PSJhZGRyZXNzQm9va0NvcHkiIHN0eWxlPSJkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O2ZvbnQt ZmFtaWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpO b3JtYWw7Ij48Zm9udCBzdHlsZT0iZm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNv bG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+MTU0IEVkd2FyZCBBdmVudWUsJm5ic3A7 Q2VudHVyaW9uLCZuYnNwOzAxNTcsJm5ic3A7U291dGggQWZyaWNhPC9mb250PjwvdGQ+PHRkIHdp ZHRoPSIyMCIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8L3Rk PjwvdHI+PHRyPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoy MHB4OyI+Jm5ic3A7PC90ZD48dGQgYWxpZ249IkNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJh ZGRyZXNzQm9va0NvcHkiIHN0eWxlPSJkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O2ZvbnQtZmFt aWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3Jt YWwiPjxmb250IHN0eWxlPSJmb250LWZhbWlseTpUaW1lczsgZm9udC1zaXplOjhweDsgY29sb3I6 IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj5JIGRpZCBub3QgZ2l2ZSBteSBwZXJtaXNzaW9u IHRvIHRoaXMgc2VuZGVyPGEgaHJlZj0iaHR0cDovL2lzLmNpbmNvLnB1cmxzbWFpbC5jb20vc2l0 ZS9yZXBvcnRhYnVzZS5hc3B4P3N0aWQ9NDc4OTMmaGl0aWQ9MTQzNTc0MDA5MDI4NyZzZWM9Njg5 NjE1JmVtYWlsPXhmc0Bvc3Muc2dpLmNvbSZFbUlEPTEzMTQ5ODYyJlNJRD0xNCZ0b2tlbj0yZDI3 Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiAgc3R5bGU9J3RleHQtZGVjb3Jh dGlvbjpub25lJyA+PGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5OlRpbWVzOyBmb250LXNpemU6OHB4 OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwiPiBjbGljayBoZXJlIHRvIHJlcG9y dC48L2E+PC9mb250PjwvZm9udD48L3RkPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYi IHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48L3RyPjx0ciB3aWR0aD0iMTAwIiBoZWln aHQ9IjE1cHgiPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoy MHB4OyI+Jm5ic3A7PC90ZD48dGQgYWxpZ249IkNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJh ZGRyZXNzQm9va0NvcHkiIHN0eWxlPSJkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O2ZvbnQtZmFt aWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3Jt YWwhaW1wb3J0YW50OyI+PGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5OlRpbWVzOyBmb250LXNpemU6 OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwiPjxhIGhyZWY9Imh0dHA6Ly9p cy5jaW5jby5wdXJsc21haWwuY29tL2hvbWUvci5hc3A/U0lEPTE1NjgmRz0yIiB0YXJnZXQ9Im5l dyIgc3R5bGU9ImZvbnQtZmFtaWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgw OyBmb250LXdlaWdodDpOb3JtYWwiPjxpbWcgIHZzcGFjZT0iNSIgc3R5bGU9InZlcnRpY2FsLWFs aWduOnRvcDsgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7 IiBzcmM9Imh0dHA6Ly9pcy5jaW5jby5wdXJsc21haWwuY29tLy9pbWFnZXMvZ3JhcGhpY21haWxj b3phL3phXzI0X2dtX3Bvd2VyZWRieV9sb2dvLmdpZj9TSUQ9MTU2OCIgYWx0PSJodHRwOi8vaXMu Y2luY28ucHVybHNtYWlsLmNvbS9ob21lL3IuYXNwP1NJRD0xNTY4Jkc9MiIgYm9yZGVyPSIwIj48 L2E+PC90ZD48dGQgd2lkdGg9IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MjBw eDsiPiZuYnNwOzwvdGQ+PC90cj48dGQgd2lkdGg9IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHls ZT0id2lkdGg6MjBweDsiPiZuYnNwOzwvdGQ+PHRyIGhlaWdodD0nMicgc3R5bGU9ImhlaWdodD01 Ij48dGQ+Jm5ic3A7PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPjx0ZCB3aWR0aD0iMjAiIGJnY29s b3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48L3RhYmxlPjwvdGQ+ PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+I291 dGxvb2sgYXtwYWRkaW5nOiAwO30uUmVhZE1zZ0JvZHl7d2lkdGg6IDEwMCU7fS5FeHRlcm5hbENs YXNze3dpZHRoOiAxMDAlO31ib2R5e21hcmdpbjogMDtwYWRkaW5nOiAwO31pbWd7Ym9yZGVyOiAw O2xpbmUtaGVpZ2h0OiAxMDAlOyBvdXRsaW5lOiBub25lO3RleHQtZGVjb3JhdGlvbjogbm9uZTt9 dGFibGUsIHRke21zby10YWJsZS1sc3BhY2U6IDBwdDttc28tdGFibGUtcnNwYWNlOiAwcHQ7fSB0 YWJsZSwgdGQuYWRkcmVzc0Jvb2tDb3B5e3BhZGRpbmc6IDA7fSAjYm9keVRhYmxlLCAjYm9keUNl bGx7aGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7bWFyZ2luOiAwO3BhZGRpbmc6IDA7d2lkdGg6IDEw MCUgIWltcG9ydGFudDt9I2JvZHlDZWxse3BhZGRpbmctdG9wOiAwO3BhZGRpbmctcmlnaHQ6IDIw cHg7cGFkZGluZy1ib3R0b206IDIwcHg7cGFkZGluZy1sZWZ0OiAyMHB4O30jdGVtcGxhdGVDb250 YWluZXJ7d2lkdGg6IDEwMCU7fS8qQHRhYiBQYWdlQHNlY3Rpb24gYmFja2dyb3VuZCBjb2xvckB0 aXAgU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB5b3VyIGVtYWlsLiBZb3UgbWF5IHdhbnQg dG8gY2hvb3NlIGEgY29sb3IgdGhhdCBtYXRjaGVzIHlvdXIgY29tcGFueSdzIGJyYW5kaW5nLkB0 aGVtZSBwYWdlKi9ib2R5LCAjYm9keVRhYmxley8qQGVkaXRhYmxlKi9iYWNrZ3JvdW5kLWNvbG9y OiAjZmZmZmZmO310YWJsZSNmb290ZXJMaW5rc3tmb250LXNpemU6IDE0cHg7d2lkdGg6IDEwMCU7 dGV4dC1hbGlnbjogY2VudGVyO310YWJsZSNmb290ZXJMaW5rcyB0ZCwgYS5mb290ZXJDbGlja3tj b2xvcjogIzMzMzMzMzt9dGFibGUjZm9vdGVyTGlua3MgdGR7cGFkZGluZy10b3A6IDEwcHg7Y29s b3I6ICMzMzMzMzM7cGFkZGluZy1ib3R0b206IDEwcHg7fSAgQG1lZGlhIG9ubHkgc2NyZWVuIGFu ZCAobWF4LXdpZHRoOiA0ODBweCl7Ym9keSwgdGFibGUsIHRkLCBwLCBhLCBsaSwgYmxvY2txdW90 ZXstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmUgIWltcG9ydGFudDt9ICBib2R5e3dpZHRo OiBhdXRvICFpbXBvcnRhbnQ7fSB0ZFtpZD1ib2R5Q2VsbF17cGFkZGluZzogMTBweDt9IC8qQHRh YiBNb2JpbGUgU3R5bGVzQHNlY3Rpb24gdGVtcGxhdGUgd2lkdGhAdGlwIE1ha2UgdGhlIHRlbXBs YXRlIGZsdWlkIGZvciBwb3J0cmFpdCBvciBsYW5kc2NhcGUgdmlldyBhZGFwdGFiaWxpdHkuIElm IGEgZmx1aWQgbGF5b3V0IGRvZXNuJ3Qgd29yaywgc2V0IHdpZHRoIHRvIDMwMHB4IGluc3RlYWQu Ki8gICAgdGFibGVbaWQ9dGVtcGxhdGVDb250YWluZXJdey8qQHRhYiBNb2JpbGUgU3R5bGVzQHNl Y3Rpb24gdGVtcGxhdGUgd2lkdGhAdGlwIE1ha2UgdGhlIHRlbXBsYXRlIGZsdWlkIGZvciBwb3J0 cmFpdCBvciBsYW5kc2NhcGUgdmlldyBhZGFwdGFiaWxpdHkuIElmIGEgZmx1aWQgbGF5b3V0IGRv ZXNuJ3Qgd29yaywgc2V0IHdpZHRoIHRvIDMwMHB4IGluc3RlYWQuKi9tYXgtd2lkdGg6IDYwMHB4 ICFpbXBvcnRhbnQ7IC8qQGVkaXRhYmxlKi93aWR0aDogMTAwJSAhaW1wb3J0YW50O30gLypAdGFi IE1vYmlsZSBTdHlsZXNAc2VjdGlvbiBoZWFkaW5nIDFAdGlwIE1ha2UgdGhlIGZpcnN0LWxldmVs IGhlYWRpbmdzIGxhcmdlciBpbiBzaXplIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkgb24gc21hbGwg c2NyZWVucy4qLyAgICBoMXsvKkBlZGl0YWJsZSovZm9udC1zaXplOiAzNnB4ICFpbXBvcnRhbnQ7 IC8qQGVkaXRhYmxlKi9saW5lLWhlaWdodDogMTAwJSAhaW1wb3J0YW50O30gLypAdGFiIE1vYmls ZSBTdHlsZXNAc2VjdGlvbiBoZWFkaW5nIDJAdGlwIE1ha2UgdGhlIHNlY29uZC1sZXZlbCBoZWFk aW5ncyBsYXJnZXIgaW4gc2l6ZSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IG9uIHNtYWxsIHNjcmVl bnMuKi8gICAgaDJ7LypAZWRpdGFibGUqL2ZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OyAvKkBl ZGl0YWJsZSovbGluZS1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDt9IC8qQHRhYiBNb2JpbGUgU3R5 bGVzQHNlY3Rpb24gaGVhZGluZyAzQHRpcCBNYWtlIHRoZSB0aGlyZC1sZXZlbCBoZWFkaW5ncyBs YXJnZXIgaW4gc2l6ZSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IG9uIHNtYWxsIHNjcmVlbnMuKi8g ICAgaDN7LypAZWRpdGFibGUqL2ZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50OyAvKkBlZGl0YWJs ZSovbGluZS1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDt9IC8qQHRhYiBNb2JpbGUgU3R5bGVzQHNl Y3Rpb24gaGVhZGluZyA0QHRpcCBNYWtlIHRoZSBmb3VydGgtbGV2ZWwgaGVhZGluZ3MgbGFyZ2Vy IGluIHNpemUgZm9yIGJldHRlciByZWFkYWJpbGl0eSBvbiBzbWFsbCBzY3JlZW5zLiovICAgIGg0 ey8qQGVkaXRhYmxlKi9mb250LXNpemU6IDE0cHggIWltcG9ydGFudDsgLypAZWRpdGFibGUqL2xp bmUtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7fSB0YWJsZVtpZD10ZW1wbGF0ZVByZWhlYWRlcl17 ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30gZm9udFtpZD1yZW1vdmVNYWluXXtkaXNwbGF5OiBu b25lICFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOiBub25lO30gdGFibGVbaWQ9dGVtcGxhdGVI ZWFkZXJde3dpZHRoOiAxMDAlICFpbXBvcnRhbnQ7cGFkZGluZzogNXB4O30gLypAdGFiIE1vYmls ZSBTdHlsZXNAc2VjdGlvbiBoZWFkZXIgdGV4dEB0aXAgTWFrZSB0aGUgaGVhZGVyIGNvbnRlbnQg dGV4dCBsYXJnZXIgaW4gc2l6ZSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IG9uIHNtYWxsIHNjcmVl bnMuKi8gICAgdGRbY2xhc3M9aGVhZGVyQ29udGVudF17LypAZWRpdGFibGUqL2ZvbnQtc2l6ZTog MThweCAhaW1wb3J0YW50OyAvKkBlZGl0YWJsZSovbGluZS1oZWlnaHQ6IDEyNSUgIWltcG9ydGFu dDt9IC8qQHRhYiBNb2JpbGUgU3R5bGVzQHNlY3Rpb24gYm9keSB0ZXh0QHRpcCBNYWtlIHRoZSBi b2R5IGNvbnRlbnQgdGV4dCBsYXJnZXIgaW4gc2l6ZSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IG9u IHNtYWxsIHNjcmVlbnMuKi8gICAgdGRbY2xhc3M9Ym9keUNvbnRlbnRdey8qQGVkaXRhYmxlKi9m b250LXNpemU6IDE4cHggIWltcG9ydGFudDsgLypAZWRpdGFibGUqL2xpbmUtaGVpZ2h0OiAxMjUl ICFpbXBvcnRhbnQ7fSAvKkB0YWIgTW9iaWxlIFN0eWxlc0BzZWN0aW9uIGZvb3RlciB0ZXh0QHRp cCBNYWtlIHRoZSBmb290ZXIgY29udGVudCB0ZXh0IGxhcmdlciBpbiBzaXplIGZvciBiZXR0ZXIg cmVhZGFiaWxpdHkgb24gc21hbGwgc2NyZWVucy4qLyAgICB0ZFtjbGFzcz1jXXsvKkBlZGl0YWJs ZSovZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7IC8qQGVkaXRhYmxlKi9saW5lLWhlaWdodDog MTUwJSAhaW1wb3J0YW50O30gdGRbY2xhc3M9Zm9vdGVyQ29udGVudF0gYXtkaXNwbGF5OiBpbmxp bmUtYmxvY2sgIWltcG9ydGFudDsgfX0gc3Bhbi55c2hvcnRjdXRzIHtjb2xvcjojMDAwfSBzcGFu LnlzaG9ydGN1dHM6aG92ZXIsICBzcGFuLnlzaG9ydGN1dHM6YWN0aXZlLCBzcGFuLnlzaG9ydGN1 dHM6Zm9jdXMge3RleHQtZGVjb3JhdGlvbjpub25lOyBjb2xvcjojMDAwOyBiYWNrZ3JvdW5kLWNv bG9yOm5vbmU7IGJvcmRlcjpub25lfSAgICpbcm9sZXw9Im1haW4iXXtwYWRkaW5nOjBweCAhaW1w b3J0YW50O3dpZHRoOjEwMCUgIWltcG9ydGFudDttYXJnaW46MHB4ICFpbXBvcnRhbnQ7fS5tc2ct Ym9keSBpbm5lcnt3aWR0aDoxMDAlICFpbXBvcnRhbnQ7IHBhZGRpbmc6MHB4ICFpbXBvcnRhbnQ7 bWFyZ2luOjBweCAhaW1wb3J0YW50OyBsZWZ0OjBweCAhaW1wb3J0YW50O30ubXNnLWJvZHkge3dp ZHRoOjEwMCUgIWltcG9ydGFudDsgcGFkZGluZzowcHggIWltcG9ydGFudDttYXJnaW46MHB4ICFp bXBvcnRhbnQ7IGxlZnQ6MHB4OyAhaW1wb3J0YW50fS5pbm5lcnt3aWR0aDoxMDAlICFpbXBvcnRh bnQ7IHBhZGRpbmc6MHB4ICFpbXBvcnRhbnQgO21hcmdpbjowcHggIWltcG9ydGFudDsgbGVmdDow cHggIWltcG9ydGFudDsgfSA8L3N0eWxlPjwvYm9keT48L2h0bWw+ From vuong.do@csplegal.com Wed Jul 1 04:48:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 742FB7F96 for ; Wed, 1 Jul 2015 04:48:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B97ADAC001 for ; Wed, 1 Jul 2015 02:48:18 -0700 (PDT) X-ASG-Debug-ID: 1435744091-04cbb06d1719c350001-NocioJ Received: from ns47.webhostsg.com (ns47.webhostsg.com [203.117.178.69]) by cuda.sgi.com with ESMTP id vHDV38YKTNgiENlW (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 02:48:12 -0700 (PDT) X-Barracuda-Envelope-From: vuong.do@csplegal.com X-Barracuda-Apparent-Source-IP: 203.117.178.69 Received: from [118.70.177.113] (port=55947 helo=MinhVuongPC) by ns47.webhostsg.com with esmtpa (Exim 4.80.1) (envelope-from ) id 1ZAEM6-0001aV-8J for xfs@oss.sgi.com; Wed, 01 Jul 2015 17:30:58 +0800 From: "Minh Vuong" To: Subject: =?UTF-8?Q?Th=C6=B0_gi=E1=BB=9Bi_thi=E1=BB=87u_Skyline_Serviced_?= =?UTF-8?Q?Offices?= Date: Wed, 1 Jul 2015 16:29:52 +0700 X-ASG-Orig-Subj: =?UTF-8?Q?Th=C6=B0_gi=E1=BB=9Bi_thi=E1=BB=87u_Skyline_Serviced_?= =?UTF-8?Q?Offices?= Message-ID: <043101d0b3e0$a2a31f70$e7e95e50$@csplegal.com> MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_000_0432_01D0B41B.4F035700" X-Mailer: Microsoft Outlook 15.0 Thread-Index: AdCzzhW4EwGNhEzRTdSp6JzfU4iMHw== Content-Language: en-us X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - ns47.webhostsg.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - csplegal.com X-Get-Message-Sender-Via: ns47.webhostsg.com: authenticated_id: vuong.do@csplegal.com X-Source: X-Source-Args: X-Source-Dir: X-Barracuda-Connect: ns47.webhostsg.com[203.117.178.69] X-Barracuda-Start-Time: 1435744092 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20350 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 HTML_MESSAGE BODY: HTML included in message This is a multipart message in MIME format. ------=_NextPart_000_0432_01D0B41B.4F035700 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0433_01D0B41B.4F035700" ------=_NextPart_001_0433_01D0B41B.4F035700 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 WGluIGNow6BvIFF1w70gduG7iywgDQoNCiANCg0KQ2jDum5nIHTDtGkgeGluIMSRxrDhu6NjIGdp 4bubaSB0aGnhu4d1IG3hu5l0IGdp4bqjaSBwaMOhcCB2xINuIHBow7JuZyBt4bubaSB2w6AgaGnh u4duIMSR4bqhaSwgVsSCTiBQSMOSTkcgROG7ikNIIFbhu6QgU0tZTElORSB04bqhaSBIw6AgTuG7 mWkuDQoNCiANCg0KR2nhu50gxJHDonkgduG7m2kgbeG7mXQgbmfDom4gc8OhY2ggdGjhuqVwIFF1 w70gduG7iyBjxaluZyBjw7MgdGjhu4MgY8OzIG3hu5l0IG7GoWkgbMOgbSB2aeG7h2MgaGnhu4du IMSR4bqhaSBjw7MgdOG6p20gbmjDrG4gxJHhurlwIHThu6sgdOG6p25nIGNhbyBuaOG6pXQgY+G7 p2EgbeG7mXQgdMOyYSBuaMOgIHRpw6p1IGNodeG6qW4gcXXhu5FjIHThur8gdOG6oWkgdHJ1bmcg dMOibSBIw6AgbuG7mWkhIE5nb8OgaSByYSBRdcO9IHbhu4sgY8Wpbmcga2jDtG5nIHBo4bqjaSBi 4bqtbiB0w6JtIHbhu4EgY8OhYyBjaGkgcGjDrSBow6BuaCBjaMOtbmggdsOgIGzhu4UgdMOibi4g U0tZTElORSBjdW5nIGPhuqVwIHbEg24gcGjDsm5nIGzDoG0gdmnhu4djIGNobyAxLTEwIG5nxrDh u51pIGPDsyB0aOG7gyB2w6BvIGLhuqV0IGvhu7MgbMO6YyBuw6BvIHbhu5tpIHRo4budaSBo4bqh biB0aHXDqiBy4bqldCBsaW5oIGhv4bqhdC4gU0tZTElORSBjxaluZyBjdW5nIGPhuqVwIGPDoWMg Z2nhuqNpIHBow6FwIHbEg24gcGjDsm5nIOG6o28vIHbEg24gcGjDsm5nIGxpbmggaG/huqF0IHbD oCBjw6FjIGThu4tjaCB24bulIGjhu5cgdHLhu6MgZG9hbmggbmdoaeG7h3Aga2jDoWMgxJHhu4Mg cGjDuSBo4bujcCB24bubaSBi4bqldCBr4buzIG3DtCBow6xuaCBraW5oIGRvYW5oIG7DoG8uDQoN CiANCg0KQ2jDum5nIHTDtGkgaHkgduG7jW5nIGPDsyB0aOG7gyBjdW5nIGPhuqVwIGNobyBRdcO9 IHbhu4sgdGjDqm0gc+G7sSBs4buxYSBjaOG7jW4ga2hpIGPhuqduIHTDrG0gdsSDbiBwaMOybmcu IE5o4buvbmcgdOG6rXAgZmlsZSDEkcOtbmgga8OobSBz4bq9IGN1bmcgY+G6pXAgY2hvIFF1w70g duG7iyBjw6FjIHRow7RuZyB0aW4gY8ahIGLhuqNuLCBuZ2/DoGkgcmEgxJHhu4MgYmnhur90IHRo w6ptIHRow7RuZyB0aW4gY2hpIHRp4bq/dCB2dWkgbMOybmcgdGhhbSBraOG6o28gdOG6oWkgd2Vi c2l0ZSAgPGh0dHA6Ly93d3cuc2t5bGluZXNlcnZpY2Vkb2ZmaWNlcy5jb20+IHd3dy5za3lsaW5l c2VydmljZWRvZmZpY2VzLmNvbSBob+G6t2MgZ+G7jWkgxJFp4buHbiBjaG8gY2jDum5nIHTDtGkg ODQ0LTczMDA5MTg4LCBjaMO6bmcgdMO0aSB4aW4gxJHGsOG7o2MgZ2nhuqNpIMSRw6FwIG3hu41p IHRo4bqvYyBt4bqvYy4gDQoNCiANCg0KQ2jDum5nIHTDtGkgeGluIGNow6JuIHRow6BuaCBj4bqj bSDGoW4uDQoNCiANCg0KIA0KDQpUcsOibiB0cuG7jW5nLA0KDQogDQoNCkRhbmcgVGh1IFRyYW5n IChNcykNCg0KU2FsZXMgRXhlY3V0aXZlDQoNCiANCg0KDQoNCiANCg0KNTMgUXVhbmcgVHJ1bmcg U3RyZWV0IHwgIzE3LTAxIFByaW1lIENlbnRyZSB8IEhhaSBCYSBUcnVuZyBEaXN0cmljdCB8IEhh bm9pLCBWaWV0bmFtIHwNCg0KVGVsOiAoODQ0KSA3MzAwIDkxODggfCBGYXg6ICg4NDQpIDM5NDMg NzIwOCB8IE1vYmlsZTogKDg0KSAwMTY0NCA4MzIgMjE2IHwNCg0KV2Vic2l0ZTogIDxodHRwOi8v c2t5bGluZXNlcnZpY2Vkb2ZmaWNlcy5jb20+IGh0dHA6Ly9za3lsaW5lc2VydmljZWRvZmZpY2Vz LmNvbQ0KDQo= ------=_NextPart_001_0433_01D0B41B.4F035700 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Xin ch=C3=A0o Qu=C3=BD = v=E1=BB=8B,

 

Ch=C3=BAng t=C3=B4i xin = =C4=91=C6=B0=E1=BB=A3c gi=E1=BB=9Bi thi=E1=BB=87u m=E1=BB=99t = gi=E1=BA=A3i ph=C3=A1p v=C4=83n ph=C3=B2ng m=E1=BB=9Bi v=C3=A0 = hi=E1=BB=87n =C4=91=E1=BA=A1i, V=C4=82N PH=C3=92NG D=E1=BB=8ACH = V=E1=BB=A4 SKYLINE t=E1=BA=A1i H=C3=A0 = N=E1=BB=99i.

 

Gi=E1=BB=9D = =C4=91=C3=A2y v=E1=BB=9Bi m=E1=BB=99t ng=C3=A2n s=C3=A1ch th=E1=BA=A5p = Qu=C3=BD v=E1=BB=8B c=C5=A9ng c=C3=B3 th=E1=BB=83 c=C3=B3 m=E1=BB=99t = n=C6=A1i l=C3=A0m vi=E1=BB=87c hi=E1=BB=87n =C4=91=E1=BA=A1i c=C3=B3 = t=E1=BA=A7m nh=C3=ACn =C4=91=E1=BA=B9p t=E1=BB=AB t=E1=BA=A7ng cao = nh=E1=BA=A5t c=E1=BB=A7a m=E1=BB=99t t=C3=B2a nh=C3=A0 ti=C3=AAu = chu=E1=BA=A9n qu=E1=BB=91c t=E1=BA=BF t=E1=BA=A1i trung t=C3=A2m H=C3=A0 = n=E1=BB=99i! Ngo=C3=A0i ra Qu=C3=BD v=E1=BB=8B c=C5=A9ng kh=C3=B4ng = ph=E1=BA=A3i b=E1=BA=ADn t=C3=A2m v=E1=BB=81 c=C3=A1c chi ph=C3=AD = h=C3=A0nh ch=C3=ADnh v=C3=A0 l=E1=BB=85 t=C3=A2n. SKYLINE cung = c=E1=BA=A5p v=C4=83n ph=C3=B2ng l=C3=A0m vi=E1=BB=87c cho 1-10 = ng=C6=B0=E1=BB=9Di c=C3=B3 th=E1=BB=83 v=C3=A0o b=E1=BA=A5t k=E1=BB=B3 = l=C3=BAc n=C3=A0o v=E1=BB=9Bi th=E1=BB=9Di h=E1=BA=A1n thu=C3=AA = r=E1=BA=A5t linh ho=E1=BA=A1t. SKYLINE c=C5=A9ng cung c=E1=BA=A5p = c=C3=A1c gi=E1=BA=A3i ph=C3=A1p v=C4=83n ph=C3=B2ng =E1=BA=A3o/ v=C4=83n = ph=C3=B2ng linh ho=E1=BA=A1t v=C3=A0 c=C3=A1c d=E1=BB=8Bch v=E1=BB=A5 = h=E1=BB=97 tr=E1=BB=A3 doanh nghi=E1=BB=87p kh=C3=A1c =C4=91=E1=BB=83 = ph=C3=B9 h=E1=BB=A3p v=E1=BB=9Bi b=E1=BA=A5t k=E1=BB=B3 m=C3=B4 = h=C3=ACnh kinh doanh n=C3=A0o.

 <= /span>

Ch=C3=BAng = t=C3=B4i hy v=E1=BB=8Dng c=C3=B3 th=E1=BB=83 cung c=E1=BA=A5p cho = Qu=C3=BD v=E1=BB=8B th=C3=AAm s=E1=BB=B1 l=E1=BB=B1a ch=E1=BB=8Dn khi = c=E1=BA=A7n t=C3=ACm v=C4=83n ph=C3=B2ng. Nh=E1=BB=AFng t=E1=BA=ADp file = =C4=91=C3=ADnh k=C3=A8m s=E1=BA=BD cung c=E1=BA=A5p cho Qu=C3=BD = v=E1=BB=8B c=C3=A1c th=C3=B4ng tin c=C6=A1 b=E1=BA=A3n, ngo=C3=A0i ra = =C4=91=E1=BB=83 bi=E1=BA=BFt th=C3=AAm th=C3=B4ng tin chi ti=E1=BA=BFt = vui l=C3=B2ng tham kh=E1=BA=A3o t=E1=BA=A1i website www.skylineservicedoffices.com= ho=E1=BA=B7c g=E1=BB=8Di =C4=91i=E1=BB=87n cho ch=C3=BAng = t=C3=B4i 844-73009188, = ch=C3=BAng t=C3=B4i xin =C4=91=C6=B0=E1=BB=A3c gi=E1=BA=A3i = =C4=91=C3=A1p m=E1=BB=8Di th=E1=BA=AFc m=E1=BA=AFc. =

 <= /span>

Ch=C3=BAng = t=C3=B4i xin ch=C3=A2n th=C3=A0nh c=E1=BA=A3m = =C6=A1n.

 <= /span>

 <= /span>

Tr=C3=A2n = tr=E1=BB=8Dng,

 

Dang Thu Trang = (Ms)

Sales = Executive

 

 

53 Quang Trung = Street | #17-01 Prime Centre | Hai Ba Trung District | Hanoi, Vietnam = |

Tel: (844) 7300 = 9188 | Fax: (844) 3943 7208 | Mobile: (84) 01644 832 216 = |

Website: = http://skylinese= rvicedoffices.com

------=_NextPart_001_0433_01D0B41B.4F035700-- ------=_NextPart_000_0432_01D0B41B.4F035700 Content-Type: image/png; name="image001.png" Content-Transfer-Encoding: base64 Content-ID: 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 AAAAAElFTkSuQmCC ------=_NextPart_000_0432_01D0B41B.4F035700-- From nyjacotyj@korea.com Wed Jul 1 07:04:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3ABC77F6A for ; Wed, 1 Jul 2015 07:04:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2C4558F8033 for ; Wed, 1 Jul 2015 05:04:32 -0700 (PDT) X-ASG-Debug-ID: 1435752255-04cb6c2dc81a80b0003-NocioJ Received: from r-smtp6.korea.com ([14.163.147.52]) by cuda.sgi.com with ESMTP id aqUEwhGOeAtqiBpu for ; Wed, 01 Jul 2015 05:04:28 -0700 (PDT) X-Barracuda-Envelope-From: nyjacotyj@korea.com X-Barracuda-Apparent-Source-IP: 14.163.147.52 Message-ID: <84205D99A6D22BD1732B6B4F2D5DE337@R-SMTP6.KOREA.COM> From: "=?utf-8?B?VGF4IGFuZCBGaW5hbmNl?=" To: Subject: =?utf-8?B?0KHRhdC10LzRiyDQvdCw0LvQvtCz0L7QstC+0Lkg0Y3QutC+0L3QvtC8?= =?utf-8?B?0LjQuA==?= Date: Wed, 1 Jul 2015 15:04:25 +0300 X-ASG-Orig-Subj: =?utf-8?B?0KHRhdC10LzRiyDQvdCw0LvQvtCz0L7QstC+0Lkg0Y3QutC+0L3QvtC8?= =?utf-8?B?0LjQuA==?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_00BA_01D0B40F.3803D9F0" X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Mailer: Microsoft Windows Live Mail 15.4.3555.308 X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308 X-Barracuda-Connect: UNKNOWN[14.163.147.52] X-Barracuda-Start-Time: 1435752267 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.66 X-Barracuda-Spam-Status: No, SCORE=1.66 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20352 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 MIME. ------=_NextPart_000_00BA_01D0B40F.3803D9F0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable =20 =20 06 - 07 =D0=B8=D1=8E=D0=BB=D1=8F 2015 =D0=B3.=20 =D0=A1=D0=A5=D0=95=D0=9C=D0=AB = =D0=9D=D0=90=D0=9B=D0=9E=D0=93=D0=9E=D0=92=D0=9E=D0=99 = =D0=AD=D0=9A=D0=9E=D0=9D=D0=9E=D0=9C=D0=98=D0=98:=20 =D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7 = =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2 =D0=B8 = =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0= =B8. =D0=A6=D0=B5=D0=BB=D0=B8: = =D0=9F=D1=80=D0=B8=D0=BE=D0=B1=D1=80=D0=B5=D1=81=D1=82=D0=B8 = =D1=83=D0=BC=D0=B5=D0=BD=D0=B8=D1=8F =D0=B8 = =D0=BD=D0=B0=D0=B2=D1=8B=D0=BA=D0=B8 =D0=B2 = =D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D0=BA=D0=B0=D0=BA =D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B0 =D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8 = =D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0= =BD=D0=B8=D1=8F; =D0=BE=D0=B1=D1=81=D1=83=D0=B4=D0=B8=D1=82=D1=8C = =D0=BF=D0=BE=D0=B4=D1=85=D0=BE=D0=B4=D1=8B =D0=BA = =D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=B8. =D0=9E=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BF=D1=80=D0=BE=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F c 10:00 = =D0=B4=D0=BE 17:30 =D0=90=D0=B4=D1=80=D0=B5=D1=81: =D0=B3. = =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B0, =D1=83=D0=BB. = =D0=91=D0=B0=D1=83=D0=BC=D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F, =D0=B4.6, = =D0=91.=D0=A6. =C2=AB=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=9F=D0=BB=D0=B0=D0=B7=D0=B0=C2=BB. =D0=92=D1=81=D1=8F = =D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D1=8F =D0=B8 = =D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F: =D0=BA=D0=BE=D0=B4 =D0=B3=D0=BE=D1=80=D0=BE=D0=B4=D0=B0 (495) = =D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD: 961 =E2=80=93 00 =E2=80=93 = 38. =20 =20 =20 * * * = =D0=A1=D0=BE=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F = =D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0 = =D0=B7=D0=B0=D0=BD=D1=8F=D1=82=D0=B8=D0=B9: * * * 1. =D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D1=8C = =C2=AB=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=81=D1=85=D0=B5=D0=BC=C2=BB =D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8. =D0=98=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2. = =D0=9D=D0=B5=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=BD=D0= =BE=D1=81=D1=82=D1=8C = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D0=BE=D0=B4=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1= =81=D1=82=D0=B2=D0=B0 =D0=BA=D0=B0=D0=BA = =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2. = =D0=9D=D0=B0=D1=80=D1=83=D1=88=D0=B5=D0=BD=D0=B8=D0=B5 = =D1=84=D0=B8=D1=81=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 = =D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D0=B9 = =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0 = =D0=BA=D0=B0=D0=BA =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2. = =D0=A1=D0=BF=D0=BE=D1=81=D0=BE=D0=B1=D1=8B = =D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=D0=BE=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0= =B2=D0=B8=D1=8F = =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0 = =D0=BD=D0=B0=D1=80=D1=83=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC = =D1=84=D0=B8=D1=81=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=B5=D1=81=D0=B0. 2. =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D1=81=D0=BD=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=9D=D0=94=D0=A1. =D0=9C=D0=BD=D0=B8=D0=BC=D1=8B=D0=B5 =D0=B8 = =D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5 = =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D1=8B. =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D1=83=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F = =D0=9D=D0=94=D0=A1 =D1=81 =D0=B0=D0=B2=D0=B0=D0=BD=D1=81=D0=BE=D0=B2 = (=D0=97=D0=B0=D0=B9=D0=BC=D1=8B + =D0=B7=D0=B0=D1=87=D0=B5=D1=82, = =D1=84=D0=B8=D0=BD=D0=B0=D0=BD=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0= =B8=D0=B5 =D1=87=D0=B5=D1=80=D0=B5=D0=B7 = =D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B8=D1=85 =D0=BB=D0=B8=D1=86 =D0=B8 = =D0=B4=D1=80.). =D0=9A=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8 = =D1=81 = =D0=B2=D0=BE=D0=B7=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC = =D0=B7=D0=B0=D1=82=D1=80=D0=B0=D1=82. = =D0=93=D1=80=D0=B0=D0=B6=D0=B4=D0=B0=D0=BD=D1=81=D0=BA=D0=BE-=D0=BF=D1=80= =D0=B0=D0=B2=D0=BE=D0=B2=D0=B0=D1=8F = =D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=BF=D1=80=D0=B5=D1=82=D0=B0=D1=86=D0=B8=D1= =8F =D0=B8 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8. =D0=92=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5 = =D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D1=8B. = =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=B0 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=B1=D0=B0=D0=B7=D1=8B =D1=81 = =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E = =D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 = =D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=BE=D0=B2. =D0=9F=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B0 = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=B0 = =D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE = =D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B8 = =D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B0. = =C2=AB=D0=94=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=C2=BB = =D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=D0=B0 =D1=81 = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5=D0=BC =D0=BB=D1=8C=D0=B3=D0=BE=D1=82=D0=BD=D1=8B=D1=85 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=BE=D0=B2. = =D0=A1=D1=85=D0=B5=D0=BC=D1=8B, =D0=BE = =D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85 = =D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B0=D0=B5=D1= =82 =D0=A4=D0=9D=D0=A1. =D0=98=D0=BD=D1=8B=D0=B5 = =D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8 = (=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8= =D0=B5 = =D1=80=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0= =BE=D0=BD=D0=BD=D1=8B=D1=85 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80, = =C2=AB=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B0=C2=BB = =D0=BF=D1=80=D0=B0=D0=B2=D0=B0 =D0=BD=D0=B0 = =D0=B2=D1=8B=D1=87=D0=B5=D1=82 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0 = =D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BF=D1=80=D0=B5=D0=B5=D0=BC=D0=BD=D0=B8=D0= =BA=D1=83 =D0=B8 =D0=BF=D1=80.). 3. =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D1=83 =D0=BD=D0=B0 = =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D1=8C. = =D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 = =D0=B0=D1=83=D1=82=D1=81=D0=BE=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=BE=D0=B2=D1= =8B=D1=85 =D1=82=D0=B5=D1=85=D0=BD=D0=BE=D0=BB=D0=BE=D0=B3=D0=B8=D0=B9 = (=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=82=D0=BD=D0=B0=D1=8F = =D0=B0=D1=80=D0=B5=D0=BD=D0=B4=D0=B0 = =D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D1=8B=D1=85 = =D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2, = =D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0 = =D0=B4=D0=B0=D0=B2=D0=B0=D0=BB=D1=8C=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0= =BE =D1=81=D1=8B=D1=80=D1=8C=D1=8F, =D0=B2=D1=8B=D0=B2=D0=BE=D0=B4 = =D1=82=D0=BE=D1=80=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9 =D0=BD=D0=B0 = =D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=B0 =D0=B8 =D0=B4=D1=80.). = =D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 =D1=80=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0- =D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D1=8B=D1=85 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80 = =D0=BF=D1=80=D0=B8=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD=D0=B8=D1= =8F =D0=B8 =D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F. = =D0=A2=D0=B8=D0=BF=D0=B8=D1=87=D0=BD=D1=8B=D0=B5 = =D0=B7=D0=B0=D0=B1=D0=BB=D1=83=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F. = =D0=91=D0=B5=D0=B7=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B5 = =D0=BF=D1=80=D0=B5=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BA=D1=80=D0=B5=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D1=81=D0=BA=D0=BE=D0=B9 = =D0=B7=D0=B0=D0=B4=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D0= =B8. =D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8 = =D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D0=B8=D1=8F =D0=BA = =D1=80=D0=B0=D1=81=D1=85=D0=BE=D0=B4=D0=B0=D0=BC =D1=83=D0=B1=D1=8B=D1=82=D0=BA=D0=BE=D0=B2 =D0=BE=D1=82 = =D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F = =D0=B1=D0=B5=D0=B7=D0=BD=D0=B0=D0=B4=D0=B5=D0=B6=D0=BD=D1=8B=D1=85 = =D0=B4=D0=BE=D0=BB=D0=B3=D0=BE=D0=B2. = =D0=9D=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5 = =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D1=81 = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=BE=D0=BC =D0=B8 = =D0=B8=D0=BD=D1=8B=D0=BC=D0=B8 = =D1=81=D0=BE=D0=B1=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=D0=B8 = =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B0=D0=BC=D0=B8. = =D0=92=D1=8B=D0=BF=D0=BB=D0=B0=D1=82=D1=8B = =D0=B0=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B5=D1=80=D0=B0=D0=BC. = =D0=90=D0=B3=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5. =D0=A0=D0=B8=D1=81=D0=BA=D0=B8 = =D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B2=D0=B0=D0=BB=D0=B8=D1=84=D0=B8=D0=BA=D0= =B0=D1=86=D0=B8=D0=B8. = =D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9 = =D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D1=8B =D0=BB=D0=B8=D1=86 = =D0=B2 = =D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D1=82=D0=B2=D0= =B0=D1=85. = =D0=9F=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D0=B8 =D0=B2 = =D0=BB=D1=8C=D0=B3=D0=BE=D1=82=D0=BD=D1=83=D1=8E =D0=B7=D0=BE=D0=BD=D1=83 =D0=B7=D0=B0 =D1=81=D1=87=D0=B5=D1=82 = =D0=BC=D0=B0=D0=BD=D0=B8=D0=BF=D1=83=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0= =BD=D0=B8=D1=8F =D1=86=D0=B5=D0=BD=D0=B0=D0=BC=D0=B8. = =D0=9E=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D0=B4=D0=BB=D1=8F = =D0=BF=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B7=D0=B8=D0=B9 =D0=BA = =D1=86=D0=B5=D0=BD=D0=B0=D0=BC =D0=B4=D0=BB=D1=8F = =D1=86=D0=B5=D0=BB=D0=B5=D0=B9 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE- =D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F. = =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D1=81 = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5=D0=BC = =D0=BC=D0=B5=D0=B6=D0=B4=D1=83=D0=BD=D0=B0=D1=80=D0=BE=D0=B4=D0=BD=D0=BE=D0= =B3=D0=BE =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0, =D0=BE =D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85 = =D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B0=D0=B5=D1= =82 =D0=9E=D0=AD=D0=A1=D0=A0 = (=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8). = =D0=9F=D0=BE=D0=BB=D0=B8=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5 = =D1=82=D1=80=D0=B5=D0=BD=D0=B4=D1=8B =D0=B2 = =D0=BC=D0=B5=D0=B6=D0=B4=D1=83=D0=BD=D0=B0=D1=80=D0=BE=D0=B4=D0=BD=D0=BE=D0= =BC =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=BC = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8 = (=D0=BE=D1=86=D0=B5=D0=BD=D0=BA=D0=B0 = =D0=BF=D0=B5=D1=80=D1=81=D0=BF=D0=B5=D0=BA=D1=82=D0=B8=D0=B2). 4. =D0=AD=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D1=8F =D0=BD=D0=B0 = =D1=81=D1=82=D1=80=D0=B0=D1=85=D0=BE=D0=B2=D1=8B=D1=85 = =D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=D1=85. = =D0=9F=D0=BE=D0=BF=D1=83=D0=BB=D1=8F=D1=80=D0=BD=D1=8B=D0=B5 = =D0=B8=D0=B4=D0=B5=D0=B8 =D0=B8 =D0=BD=D0=BE=D0=B2=D1=8B=D0=B5 = =C2=AB=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=C2= =BB. =D0=A0=D0=B8=D1=81=D0=BA=D0=B8 = =D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B2=D0=B0=D0=BB=D0=B8=D1=84=D0=B8=D0=BA=D0= =B0=D1=86=D0=B8=D0=B8 =D0=B8 =D0=B8=D0=BD=D1=8B=D0=B5 = =D0=BE=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F. =D0=9E=D0=B1=D1=89=D0=B8=D0=B5 = =D1=81=D0=BE=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE = =D0=BE=D0=B1=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC=D0=BE=D0=B9 = =D0=B1=D0=B0=D0=B7=D1=8B, = =D0=BF=D0=BE=D1=82=D1=80=D0=B5=D0=B1=D0=BD=D0=BE=D1=81=D1=82=D0=B8 = =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0 = =D0=B2 = =D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1= =89=D0=B8=D1=85 = =D0=BF=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=D1=85 = (=D0=BE=D1=86=D0=B5=D0=BD=D0=BA=D0=B0 = =C2=AB=D1=82=D1=80=D0=B5=D0=BD=D0=B4=D0=BE=D0=B2=C2=BB). = =D0=A2=D0=B5=D1=85=D0=BD=D0=BE=D0=BB=D0=BE=D0=B3=D0=B8=D0=B8 = =D0=B0=D1=83=D1=82=D1=81=D0=BE=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=B0 = =D0=B2 = =C2=AB=D0=B7=D0=B0=D1=80=D0=BF=D0=BB=D0=B0=D1=82=D0=BD=D1=8B=D1=85=C2=BB =D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=D1=85. = =D0=90=D1=83=D1=82=D1=81=D0=BE=D1=80=D1=81=D0=B8=D0=BD=D0=B3 =D1=81 = =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC=D0=B8 = =D0=B4=D0=B8=D0=B2=D0=B8=D0=B4=D0=B5=D0=BD=D0=B4=D0=BE=D0=B2. = =D0=94=D0=B8=D1=81=D0=BA=D0=BE=D0=BD=D1=82=D0=BD=D1=8B=D0=B5 =D0=B8 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=BD=D1=82=D0=BD=D1=8B=D0=B5 = (=D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5) = =D1=81=D1=85=D0=B5=D0=BC=D1=8B. = =D0=90=D0=B3=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 =D1=81 =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC=D0=B8 = =D0=B4=D0=B8=D0=B2=D0=B8=D0=B4=D0=B5=D0=BD=D0=B4=D0=BD=D1=8B=D1=85 = =D0=B2=D1=8B=D0=BF=D0=BB=D0=B0=D1=82. = =D0=94=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D1=80=D0=BD=D1=8B=D0=B5 = =C2=AB=D0=BA=D0=BE=D0=BC=D0=BF=D0=B5=D0=BD=D1=81=D0=B0=D1=86=D0=B8=D0=B8=C2= =BB =D0=B8 = =D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8 =C2=AB=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B0 =D0=B7=D0=B0 = =D1=84=D0=B8=D0=B7=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5 = =D0=BB=D0=B8=D1=86=D0=BE=C2=BB. = =D0=9A=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8 = =C2=AB=D0=B4=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D1=80 =D0=B2 = =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83 = =D1=84=D0=B8=D0=B7=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0=BE = =D0=BB=D0=B8=D1=86=D0=B0=C2=BB. = =D0=92=D1=8B=D0=BF=D0=BB=D0=B0=D1=82=D1=8B =D0=B7=D0=B0 =D1=81=D1=87=D0=B5=D1=82 =D1=87=D0=B8=D1=81=D1=82=D0=BE=D0=B9 = =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D0=B8 =D0=BF=D0=BE = =D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC, = =D0=BD=D0=B5 = =D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D1=83=D1=8E=D1=89=D0=B8=D0=BC = =D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0 = =D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F.=20 5. = =C2=AB=D0=90=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=C2= =BB =D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D1=8B, = =D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D0=BC=D1=8B=D0=B5 = =D0=B4=D0=BB=D1=8F =D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F = =D0=B4=D1=80=D1=83=D0=B3=D0=B8=D1=85 =D0=B7=D0=B0=D0=B4=D0=B0=D1=87. = =D0=9E=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C = =D0=B4=D0=BB=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=BB=D1= =8C=D1=89=D0=B8=D0=BA=D0=BE=D0=B2. =D0=A4=D0=B8=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D0=B9 =D0=B8 = =C2=AB=D0=BD=D0=B5=D0=BF=D1=80=D0=BE=D0=B7=D1=80=D0=B0=D1=87=D0=BD=D1=8B=D0= =B9=C2=BB =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82 =D0=B2 = =D1=85=D0=BE=D0=B7=D1=8F=D0=B9=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D0= =B9 = =D0=B4=D0=B5=D1=8F=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=BB=D1= =8C=D1=89=D0=B8=D0=BA=D0=BE=D0=B2. =C2=AB=D0=A1=D0=B5=D1=80=D1=8B=D0=B5 = =D1=81=D0=BF=D1=83=D1=82=D0=BD=D0=B8=D0=BA=D0=B8=C2=BB, = =C2=AB=D0=BF=D1=80=D0=BE=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=C2=BB, = =C2=AB=D0=BE=D0=B4=D0=BD=D0=BE=D0=B4=D0=BD=D0=B5=D0=B2=D0=BA=D0=B8=C2=BB,= = =D0=BD=D0=B5=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0= =B8=D0=B5 = =D1=85=D0=BE=D0=B7=D1=8F=D0=B9=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B=D0= =B5 =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D0=B8 = =D0=B4=D1=80. = =D0=A3=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BD=D0=BE-=D0=BF=D1=80=D0=B0=D0=B2= =D0=BE=D0=B2=D1=8B=D0=B5 =D1=80=D0=B8=D1=81=D0=BA=D0=B8 =D1=83 = =D1=80=D1=83=D0=BA=D0=BE=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8F,= =D0=B2=D0=BE=D0=B7=D0=BD=D0=B8=D0=BA=D0=B0=D1=8E=D1=89=D0=B8=D0=B5 = =D0=BF=D1=80=D0=B8 = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B8 =D1=84=D0=B8=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE = =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD- =D1=82=D0=B0. = =D0=9D=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8 =D0=BF=D1=80=D0=B8 = =D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5 =D1=81 = =D0=BD=D0=B5=D0=B4=D0=BE=D0=B1=D1=80=D0=BE=D1=81=D0=BE=D0=B2=D0=B5=D1=81=D1= =82=D0=BD=D1=8B=D0=BC = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=BE=D0=BC.= =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 = =D0=BB=D0=B8=D0=BA=D0=B2=D0=B8=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82- =D0=B2=D0=B0 =D0=B8 =D0=B4=D0=B5=D0=BD=D0=B5=D0=B3. = =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D0=B7=D0=B0=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BB=D0=B8=D0=BA=D0=B2=D0=B8=D0=B4=D0=BD=D1=8B=D1=85 = =D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BE=D0=B2. = =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 =D0=B4=D0=B5=D0=BD=D0=B5=D0=B3 =D1=81 = =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E = =D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE = =D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=B0. =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 = =D0=BB=D0=B8=D0=BA=D0=B2=D0=B8=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B0 =D1=81 = =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E = =D1=80=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0= =BE=D0=BD=D0=BD=D1=8B=D1=85 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80. = =D0=9D=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B5 = =D0=B1=D0=B0=D0=BD=D0=BA=D1=80=D0=BE=D1=82=D1=81=D1=82=D0=B2=D0=BE =D0=B8 = =C2=AB=D0=B1=D1=80=D0=BE=D1=88=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5 = =D1=84=D0=B8=D1=80=D0=BC=D1=8B=C2=BB - =D0=BA=D0=B0=D0=BA = =D1=81=D0=BF=D0=BE=D1=81=D0=BE=D0=B1 =D0=BD=D0=B5 = =D0=BF=D0=BB=D0=B0=D1=82=D0=B8=D1=82=D1=8C = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=B8. = =D0=9E=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D1= =81=D1=82=D1=8C = =D1=83=D1=87=D1=80=D0=B5=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=B9 = =D0=B8 =D1=80=D1=83=D0=BA=D0=BE=D0=B2=D0=BE- =D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=B9 = =D0=BF=D1=80=D0=B5=D0=B4=D0=BF=D1=80=D0=B8=D1=8F=D1=82=D0=B8=D1=8F. = =D0=A0=D0=B5=D1=82=D1=80=D0=BE=D1=81=D0=BF=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0= =BD=D0=BE=D0=B5 = =D0=BE=D1=81=D0=BF=D0=B0=D1=80=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 = =D1=81=D0=B4=D0=B5=D0=BB=D0=BE=D0=BA = =D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80=D1=81=D0=BD=D1=8B=D0=BC = =D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F=D1=8E=D1=89=D0=B8=D0=BC. = =D0=9F=D1=80=D0=B8=D0=BD=D1=83=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0= =BE=D0=B5 = =D0=BE=D0=B1=D0=B5=D1=81=D1=86=D0=B5=D0=BD=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=B0 = =D0=B4=D0=BE=D1=87=D0=B5=D1=80=D0=BD=D0=B8=D1=85 = =D0=BA=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D0=B9. = =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=BE=D0=B2 =D0=B2 = =D0=B4=D1=80=D1=83=D0=B3=D1=83=D1=8E = =D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=83. =D0=A2=D0=B5=D1=85=D0=BD=D0=BE=D0=BB=D0=BE=D0=B3=D0=B8=D0=B8 = =C2=AB=D0=BE=D0=B1=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D0=B2=D0=B0=D0=BD=D0= =B8=D1=8F=C2=BB =D0=B4=D0=B5=D0=BD=D0=B5=D0=B3. = =D0=9D=D0=B5=D1=83=D1=87=D1=82=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5 = =D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B8 = =D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B0. = =D0=91=D0=B0=D0=BD=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B5 = =D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B8, =D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8F =D0=B8 = =D0=BF=D1=80=D0=BE=D1=87=D0=B5=D0=B5. =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =C2=AB=D0=BA=D1=80=D1=83=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=C2=BB = =D0=B8 = =C2=AB=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D1=80=D0=B5=D1=81=D1=82=D0=BD=D0=BE=D0= =B3=D0=BE=C2=BB =D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=B0. = -------------------------------------------------------------------------= ---- =D0=A3=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B5 = =D1=81=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D1=82: 22800=D1=80. =D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9 = =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F!!! (=D0=B2=D1=85=D0=BE=D0=B4=D0=B8=D1=82 = =D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9 = =D0=BC=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=B0=D0=BB, = =D0=BE=D0=B1=D0=B5=D0=B4=D1=8B, = =D0=BA=D0=BE=D1=84=D0=B5-=D0=BF=D0=B0=D1=83=D0=B7=D1=8B, = =D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82) =20 =20 ------=_NextPart_000_00BA_01D0B40F.3803D9F0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable
           


 06 - 07 = =D0=B8=D1=8E=D0=BB=D1=8F 2015 =D0=B3.=20

=D0=A1=D0=A5=D0=95=D0=9C=D0=AB = =D0=9D=D0=90=D0=9B=D0=9E=D0=93=D0=9E=D0=92=D0=9E=D0=99 = =D0=AD=D0=9A=D0=9E=D0=9D=D0=9E=D0=9C=D0=98=D0=98:=20
=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7 = =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2 =D0=B8 = =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0= =B8.

=D0=A6=D0=B5=D0=BB=D0=B8: = =D0=9F=D1=80=D0=B8=D0=BE=D0=B1=D1=80=D0=B5=D1=81=D1=82=D0=B8 = =D1=83=D0=BC=D0=B5=D0=BD=D0=B8=D1=8F =D0=B8 = =D0=BD=D0=B0=D0=B2=D1=8B=D0=BA=D0=B8 =D0=B2 = =D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B8=20 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D0=BA=D0=B0=D0=BA = =D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B0
=D0=BE=D0=BF=D1=82=D0= =B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8 = =D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F=20 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0= =BD=D0=B8=D1=8F; =D0=BE=D0=B1=D1=81=D1=83=D0=B4=D0=B8=D1=82=D1=8C = =D0=BF=D0=BE=D0=B4=D1=85=D0=BE=D0=B4=D1=8B =D0=BA = =D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9=20 =D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=B8.

=D0=9E=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BF=D1=80=D0=BE=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F c 10:00 =D0=B4=D0=BE 17:30

=D0=90=D0=B4=D1=80=D0=B5=D1=81: =D0=B3.=20 =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B0, =D1=83=D0=BB. = =D0=91=D0=B0=D1=83=D0=BC=D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F, =D0=B4.6, = =D0=91.=D0=A6. =C2=AB=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=9F=D0=BB=D0=B0=D0=B7=D0=B0=C2=BB.

=D0=92=D1=81=D1=8F = =D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D0=B0=D1=8F=20 =D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D1=8F = =D0=B8 = =D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F:
=D0= =BA=D0=BE=D0=B4 =D0=B3=D0=BE=D1=80=D0=BE=D0=B4=D0=B0 (495) = =D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD: 961 =E2=80=93 00 =E2=80=93=20 38.
 

       
           =             &= nbsp;           &n= bsp;     =20    * * * = =D0=A1=D0=BE=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F = =D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0 = =D0=B7=D0=B0=D0=BD=D1=8F=D1=82=D0=B8=D0=B9: * *=20 *

1. = =D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20 =C2=AB=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=81=D1=85=D0=B5=D0=BC=C2=BB =D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8.
=D0=98=D1=81=D1=82=D0=BE=D1=87=D0=BD= =D0=B8=D0=BA=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2.=20 = =D0=9D=D0=B5=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=BD=D0= =BE=D1=81=D1=82=D1=8C = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D0=BE=D0=B4=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1= =81=D1=82=D0=B2=D0=B0 =D0=BA=D0=B0=D0=BA = =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA
=D0=BD=D0=B0=D0=BB=D0= =BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85=20 =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2. = =D0=9D=D0=B0=D1=80=D1=83=D1=88=D0=B5=D0=BD=D0=B8=D0=B5 = =D1=84=D0=B8=D1=81=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 = =D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D0=B9 = =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0 = =D0=BA=D0=B0=D0=BA =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=20 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85
=D1=80=D0=B8=D1= =81=D0=BA=D0=BE=D0=B2. =D0=A1=D0=BF=D0=BE=D1=81=D0=BE=D0=B1=D1=8B = =D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2=D0=BE=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0= =B2=D0=B8=D1=8F = =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0 = =D0=BD=D0=B0=D1=80=D1=83=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=20 =D1=84=D0=B8=D1=81=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=B5=D1=81=D0=B0.

2.=20 =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D1=81=D0=BD=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=9D=D0=94=D0=A1. =D0=9C=D0=BD=D0=B8=D0=BC=D1=8B=D0=B5 =D0=B8 = =D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20 =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D1=8B.

=D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D1=83=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F = =D0=9D=D0=94=D0=A1 =D1=81=20 =D0=B0=D0=B2=D0=B0=D0=BD=D1=81=D0=BE=D0=B2 = (=D0=97=D0=B0=D0=B9=D0=BC=D1=8B + =D0=B7=D0=B0=D1=87=D0=B5=D1=82, = =D1=84=D0=B8=D0=BD=D0=B0=D0=BD=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0= =B8=D0=B5 =D1=87=D0=B5=D1=80=D0=B5=D0=B7 = =D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B8=D1=85 =D0=BB=D0=B8=D1=86 =D0=B8=20 = =D0=B4=D1=80.).
=D0=9A=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86= =D0=B8=D0=B8 =D1=81 = =D0=B2=D0=BE=D0=B7=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC = =D0=B7=D0=B0=D1=82=D1=80=D0=B0=D1=82. = =D0=93=D1=80=D0=B0=D0=B6=D0=B4=D0=B0=D0=BD=D1=81=D0=BA=D0=BE-=D0=BF=D1=80= =D0=B0=D0=B2=D0=BE=D0=B2=D0=B0=D1=8F=20 = =D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=BF=D1=80=D0=B5=D1=82=D0=B0=D1=86=D0=B8=D1= =8F =D0=B8 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8.
=D0=92=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1= =8C=D0=BD=D1=8B=D0=B5 =D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D1=8B. = =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=B0=20 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=B1=D0=B0=D0=B7=D1=8B =D1=81 = =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E = =D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 = =D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=BE=D0=B2.
=D0=9F=D1=80=D0=BE=D0= =B4=D0=B0=D0=B6=D0=B0 =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=B0 = =D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20 =D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B8 = =D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B0. = =C2=AB=D0=94=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=C2=BB = =D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=D0=B0 =D1=81 = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5=D0=BC = =D0=BB=D1=8C=D0=B3=D0=BE=D1=82=D0=BD=D1=8B=D1=85
=D0=BD=D0=B0=D0=BB=D0= =BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85=20 =D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=BE=D0=B2. = =D0=A1=D1=85=D0=B5=D0=BC=D1=8B, =D0=BE = =D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85 = =D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B0=D0=B5=D1= =82 =D0=A4=D0=9D=D0=A1. =D0=98=D0=BD=D1=8B=D0=B5 = =D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8=20 = (=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8= =D0=B5
=D1=80=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1= =86=D0=B8=D0=BE=D0=BD=D0=BD=D1=8B=D1=85 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80, = =C2=AB=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B0=C2=BB = =D0=BF=D1=80=D0=B0=D0=B2=D0=B0 =D0=BD=D0=B0 = =D0=B2=D1=8B=D1=87=D0=B5=D1=82=20 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0 = =D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BF=D1=80=D0=B5=D0=B5=D0=BC=D0=BD=D0=B8=D0= =BA=D1=83 =D0=B8 =D0=BF=D1=80.).

3. = =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D1=83 =D0=BD=D0=B0=20 =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D1=8C.

=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD= =D0=B8=D0=B5=20 = =D0=B0=D1=83=D1=82=D1=81=D0=BE=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=BE=D0=B2=D1= =8B=D1=85 =D1=82=D0=B5=D1=85=D0=BD=D0=BE=D0=BB=D0=BE=D0=B3=D0=B8=D0=B9 = (=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=82=D0=BD=D0=B0=D1=8F = =D0=B0=D1=80=D0=B5=D0=BD=D0=B4=D0=B0 = =D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D1=8B=D1=85 = =D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2,=20 = =D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0
=D0= =B4=D0=B0=D0=B2=D0=B0=D0=BB=D1=8C=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0=BE= =D1=81=D1=8B=D1=80=D1=8C=D1=8F, =D0=B2=D1=8B=D0=B2=D0=BE=D0=B4 = =D1=82=D0=BE=D1=80=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9 =D0=BD=D0=B0 = =D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=B0 =D0=B8=20 =D0=B4=D1=80.). = =D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 = =D1=80=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0-
=D1=86=D0= =B8=D0=BE=D0=BD=D0=BD=D1=8B=D1=85 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80 = =D0=BF=D1=80=D0=B8=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD=D0=B8=D1= =8F =D0=B8=20 =D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F. = =D0=A2=D0=B8=D0=BF=D0=B8=D1=87=D0=BD=D1=8B=D0=B5 = =D0=B7=D0=B0=D0=B1=D0=BB=D1=83=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F.
=D0= =91=D0=B5=D0=B7=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B5 = =D0=BF=D1=80=D0=B5=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BA=D1=80=D0=B5=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D1=81=D0=BA=D0=BE=D0=B9 = = =D0=B7=D0=B0=D0=B4=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D0= =B8. =D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8 = =D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D0=B8=D1=8F =D0=BA = =D1=80=D0=B0=D1=81=D1=85=D0=BE=D0=B4=D0=B0=D0=BC
=D1=83=D0=B1=D1=8B=D1= =82=D0=BA=D0=BE=D0=B2 =D0=BE=D1=82 = =D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20 =D0=B1=D0=B5=D0=B7=D0=BD=D0=B0=D0=B4=D0=B5=D0=B6=D0=BD=D1=8B=D1=85 = =D0=B4=D0=BE=D0=BB=D0=B3=D0=BE=D0=B2. = =D0=9D=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5 = =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D1=81 = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=BE=D0=BC =D0=B8 = =D0=B8=D0=BD=D1=8B=D0=BC=D0=B8
=D1=81=D0=BE=D0=B1=D1=81=D1=82=D0=B2=D0= =B5=D0=BD=D0=BD=D1=8B=D0=BC=D0=B8=20 = =D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B0=D0=BC=D0=B8. = =D0=92=D1=8B=D0=BF=D0=BB=D0=B0=D1=82=D1=8B = =D0=B0=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B5=D1=80=D0=B0=D0=BC. = =D0=90=D0=B3=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5. =D0=A0=D0=B8=D1=81=D0=BA=D0=B8=20 = =D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B2=D0=B0=D0=BB=D0=B8=D1=84=D0=B8=D0=BA=D0= =B0=D1=86=D0=B8=D0=B8.
=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE= =D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 = =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9 = =D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D1=8B =D0=BB=D0=B8=D1=86 = =D0=B2 = =D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D1=82=D0=B2=D0= =B0=D1=85.=20 =D0=9F=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D0=B8 =D0=B2 = =D0=BB=D1=8C=D0=B3=D0=BE=D1=82=D0=BD=D1=83=D1=8E
=D0=B7=D0=BE=D0=BD=D1= =83 =D0=B7=D0=B0 =D1=81=D1=87=D0=B5=D1=82 = =D0=BC=D0=B0=D0=BD=D0=B8=D0=BF=D1=83=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0= =BD=D0=B8=D1=8F =D1=86=D0=B5=D0=BD=D0=B0=D0=BC=D0=B8.=20 =D0=9E=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D0=B4=D0=BB=D1=8F = =D0=BF=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B7=D0=B8=D0=B9 =D0=BA = =D1=86=D0=B5=D0=BD=D0=B0=D0=BC =D0=B4=D0=BB=D1=8F = =D1=86=D0=B5=D0=BB=D0=B5=D0=B9 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE-
=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0= =B5=D0=BD=D0=B8=D1=8F. =D0=A1=D1=85=D0=B5=D0=BC=D1=8B=20 =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D1=81 = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5=D0=BC = =D0=BC=D0=B5=D0=B6=D0=B4=D1=83=D0=BD=D0=B0=D1=80=D0=BE=D0=B4=D0=BD=D0=BE=D0= =B3=D0=BE =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0,=20 =D0=BE
=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85 = =D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B0=D0=B5=D1= =82 =D0=9E=D0=AD=D0=A1=D0=A0 = (=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8). = =D0=9F=D0=BE=D0=BB=D0=B8=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5 = =D1=82=D1=80=D0=B5=D0=BD=D0=B4=D1=8B =D0=B2=20 = =D0=BC=D0=B5=D0=B6=D0=B4=D1=83=D0=BD=D0=B0=D1=80=D0=BE=D0=B4=D0=BD=D0=BE=D0= =BC
=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=BC = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8 = (=D0=BE=D1=86=D0=B5=D0=BD=D0=BA=D0=B0=20 = =D0=BF=D0=B5=D1=80=D1=81=D0=BF=D0=B5=D0=BA=D1=82=D0=B8=D0=B2).
=
4. = =D0=AD=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D1=8F =D0=BD=D0=B0=20 =D1=81=D1=82=D1=80=D0=B0=D1=85=D0=BE=D0=B2=D1=8B=D1=85 = =D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=D1=85. = =D0=9F=D0=BE=D0=BF=D1=83=D0=BB=D1=8F=D1=80=D0=BD=D1=8B=D0=B5 = =D0=B8=D0=B4=D0=B5=D0=B8 =D0=B8 =D0=BD=D0=BE=D0=B2=D1=8B=D0=B5 = =C2=AB=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=C2= =BB.=20 = =D0=A0=D0=B8=D1=81=D0=BA=D0=B8
=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B2=D0= =B0=D0=BB=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8 =D0=B8 = =D0=B8=D0=BD=D1=8B=D0=B5 = =D0=BE=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F.
<= BR>=D0=9E=D0=B1=D1=89=D0=B8=D0=B5 = =D1=81=D0=BE=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE = =D0=BE=D0=B1=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D0=BC=D0=BE=D0=B9 = =D0=B1=D0=B0=D0=B7=D1=8B,=20 =D0=BF=D0=BE=D1=82=D1=80=D0=B5=D0=B1=D0=BD=D0=BE=D1=81=D1=82=D0=B8 = =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0 = =D0=B2
=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1= =83=D1=8E=D1=89=D0=B8=D1=85 = =D0=BF=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=D1=85 = (=D0=BE=D1=86=D0=B5=D0=BD=D0=BA=D0=B0=20 =C2=AB=D1=82=D1=80=D0=B5=D0=BD=D0=B4=D0=BE=D0=B2=C2=BB). = =D0=A2=D0=B5=D1=85=D0=BD=D0=BE=D0=BB=D0=BE=D0=B3=D0=B8=D0=B8 = =D0=B0=D1=83=D1=82=D1=81=D0=BE=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=B0 = =D0=B2 = =C2=AB=D0=B7=D0=B0=D1=80=D0=BF=D0=BB=D0=B0=D1=82=D0=BD=D1=8B=D1=85=C2=BB<= BR>=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=D1=85. = =D0=90=D1=83=D1=82=D1=81=D0=BE=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20 =D1=81 = =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC=D0=B8 = =D0=B4=D0=B8=D0=B2=D0=B8=D0=B4=D0=B5=D0=BD=D0=B4=D0=BE=D0=B2. = =D0=94=D0=B8=D1=81=D0=BA=D0=BE=D0=BD=D1=82=D0=BD=D1=8B=D0=B5 =D0=B8 = =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=BD=D1=82=D0=BD=D1=8B=D0=B5 = (=D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5)=20 = =D1=81=D1=85=D0=B5=D0=BC=D1=8B.
=D0=90=D0=B3=D0=B5=D0=BD=D1=82=D0=B8=D1= =80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 =D1=81 = =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC=D0=B8 = =D0=B4=D0=B8=D0=B2=D0=B8=D0=B4=D0=B5=D0=BD=D0=B4=D0=BD=D1=8B=D1=85 = =D0=B2=D1=8B=D0=BF=D0=BB=D0=B0=D1=82. = =D0=94=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D1=80=D0=BD=D1=8B=D0=B5=20 = =C2=AB=D0=BA=D0=BE=D0=BC=D0=BF=D0=B5=D0=BD=D1=81=D0=B0=D1=86=D0=B8=D0=B8=C2= =BB =D0=B8 = =D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8
=C2= =AB=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B0 =D0=B7=D0=B0 = =D1=84=D0=B8=D0=B7=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5 = =D0=BB=D0=B8=D1=86=D0=BE=C2=BB. = =D0=9A=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B8=20 =C2=AB=D0=B4=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D1=80 =D0=B2 = =D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83 = =D1=84=D0=B8=D0=B7=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0=BE = =D0=BB=D0=B8=D1=86=D0=B0=C2=BB. = =D0=92=D1=8B=D0=BF=D0=BB=D0=B0=D1=82=D1=8B = =D0=B7=D0=B0
=D1=81=D1=87=D0=B5=D1=82 = =D1=87=D0=B8=D1=81=D1=82=D0=BE=D0=B9 = =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D0=B8 =D0=BF=D0=BE=20 =D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC, = =D0=BD=D0=B5 = =D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D1=83=D1=8E=D1=89=D0=B8=D0=BC = =D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0 = =D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F. =

5. = =C2=AB=D0=90=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=C2= =BB =D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D1=8B, = =D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D0=BC=D1=8B=D0=B5 = =D0=B4=D0=BB=D1=8F =D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20 =D0=B4=D1=80=D1=83=D0=B3=D0=B8=D1=85 = =D0=B7=D0=B0=D0=B4=D0=B0=D1=87. = =D0=9E=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C = =D0=B4=D0=BB=D1=8F
=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BF=D0=BB=D0= =B0=D1=82=D0=B5=D0=BB=D1=8C=D1=89=D0=B8=D0=BA=D0=BE=D0=B2.

= =D0=A4=D0=B8=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D0=B9 =D0=B8 = =C2=AB=D0=BD=D0=B5=D0=BF=D1=80=D0=BE=D0=B7=D1=80=D0=B0=D1=87=D0=BD=D1=8B=D0= =B9=C2=BB =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82 =D0=B2 = =D1=85=D0=BE=D0=B7=D1=8F=D0=B9=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D0= =B9=20 = =D0=B4=D0=B5=D1=8F=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=BB=D1= =8C=D1=89=D0=B8=D0=BA=D0=BE=D0=B2.
=C2=AB=D0=A1=D0=B5=D1=80=D1=8B=D0=B5= =D1=81=D0=BF=D1=83=D1=82=D0=BD=D0=B8=D0=BA=D0=B8=C2=BB, = =C2=AB=D0=BF=D1=80=D0=BE=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=C2=BB,=20 = =C2=AB=D0=BE=D0=B4=D0=BD=D0=BE=D0=B4=D0=BD=D0=B5=D0=B2=D0=BA=D0=B8=C2=BB,= = =D0=BD=D0=B5=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0= =B8=D0=B5 = =D1=85=D0=BE=D0=B7=D1=8F=D0=B9=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B=D0= =B5 =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D0=B8=20 = =D0=B4=D1=80.
=D0=A3=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BD=D0=BE-=D0=BF=D1= =80=D0=B0=D0=B2=D0=BE=D0=B2=D1=8B=D0=B5 =D1=80=D0=B8=D1=81=D0=BA=D0=B8 = =D1=83 = =D1=80=D1=83=D0=BA=D0=BE=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8F,= =D0=B2=D0=BE=D0=B7=D0=BD=D0=B8=D0=BA=D0=B0=D1=8E=D1=89=D0=B8=D0=B5 = =D0=BF=D1=80=D0=B8=20 = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B8 =D1=84=D0=B8=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE = =D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD-
=D1=82=D0=B0. = =D0=9D=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8 =D0=BF=D1=80=D0=B8 = =D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5 =D1=81=20 = =D0=BD=D0=B5=D0=B4=D0=BE=D0=B1=D1=80=D0=BE=D1=81=D0=BE=D0=B2=D0=B5=D1=81=D1= =82=D0=BD=D1=8B=D0=BC = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=BE=D0=BC.= =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 = =D0=BB=D0=B8=D0=BA=D0=B2=D0=B8=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82-
=D0=B2=D0=B0 =D0=B8 = =D0=B4=D0=B5=D0=BD=D0=B5=D0=B3.=20 =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D0=B7=D0=B0=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BB=D0=B8=D0=BA=D0=B2=D0=B8=D0=B4=D0=BD=D1=8B=D1=85 = =D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BE=D0=B2. = =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 =D0=B4=D0=B5=D0=BD=D0=B5=D0=B3 =D1=81 = =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E = =D0=B2=D0=B5=D0=BA=D1=81=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20 = =D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=B0.
=D0=92=D1=8B=D0=B2=D0=BE=D0= =B4 =D0=BB=D0=B8=D0=BA=D0=B2=D0=B8=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B0 =D1=81 = =D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E = =D1=80=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0= =BE=D0=BD=D0=BD=D1=8B=D1=85=20 =D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80. = =D0=9D=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B5 = =D0=B1=D0=B0=D0=BD=D0=BA=D1=80=D0=BE=D1=82=D1=81=D1=82=D0=B2=D0=BE
=D0= =B8 =C2=AB=D0=B1=D1=80=D0=BE=D1=88=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5 = =D1=84=D0=B8=D1=80=D0=BC=D1=8B=C2=BB - =D0=BA=D0=B0=D0=BA = =D1=81=D0=BF=D0=BE=D1=81=D0=BE=D0=B1 =D0=BD=D0=B5=20 =D0=BF=D0=BB=D0=B0=D1=82=D0=B8=D1=82=D1=8C = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=B8. = =D0=9E=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D1= =81=D1=82=D1=8C = =D1=83=D1=87=D1=80=D0=B5=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=B9 = =D0=B8 = =D1=80=D1=83=D0=BA=D0=BE=D0=B2=D0=BE-
=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D0= =B5=D0=B9=20 = =D0=BF=D1=80=D0=B5=D0=B4=D0=BF=D1=80=D0=B8=D1=8F=D1=82=D0=B8=D1=8F. = =D0=A0=D0=B5=D1=82=D1=80=D0=BE=D1=81=D0=BF=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0= =BD=D0=BE=D0=B5 = =D0=BE=D1=81=D0=BF=D0=B0=D1=80=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 = =D1=81=D0=B4=D0=B5=D0=BB=D0=BE=D0=BA = =D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80=D1=81=D0=BD=D1=8B=D0=BC=20 = =D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F=D1=8E=D1=89=D0=B8=D0=BC.
=D0= =9F=D1=80=D0=B8=D0=BD=D1=83=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE= =D0=B5 = =D0=BE=D0=B1=D0=B5=D1=81=D1=86=D0=B5=D0=BD=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0= =B5 =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=B0 = =D0=B4=D0=BE=D1=87=D0=B5=D1=80=D0=BD=D0=B8=D1=85 = =D0=BA=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D0=B9.=20 =D0=92=D1=8B=D0=B2=D0=BE=D0=B4 = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=BE=D0=B2 =D0=B2 = =D0=B4=D1=80=D1=83=D0=B3=D1=83=D1=8E = =D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=83.
=D0=A2=D0=B5=D1=85=D0=BD=D0=BE=D0= =BB=D0=BE=D0=B3=D0=B8=D0=B8 = =C2=AB=D0=BE=D0=B1=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D0=B2=D0=B0=D0=BD=D0= =B8=D1=8F=C2=BB =D0=B4=D0=B5=D0=BD=D0=B5=D0=B3.=20 =D0=9D=D0=B5=D1=83=D1=87=D1=82=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5 = =D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B8 = =D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B0. = =D0=91=D0=B0=D0=BD=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B5 = =D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B8,
=D0=B2=D0=B5=D0=BA=D1= =81=D0=B5=D0=BB=D1=8F =D0=B8 =D0=BF=D1=80=D0=BE=D1=87=D0=B5=D0=B5.=20 =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =C2=AB=D0=BA=D1=80=D1=83=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=C2=BB = =D0=B8 = =C2=AB=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D1=80=D0=B5=D1=81=D1=82=D0=BD=D0=BE=D0= =B3=D0=BE=C2=BB =D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20 = =D0=BA=D0=B0=D0=BF=D0=B8=D1=82=D0=B0=D0=BB=D0=B0.
   &n= bsp;           &nb= sp;           &nbs= p; =20   =20 = -------------------------------------------------------------------------= ----
=D0=A3=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B5=20 =D1=81=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D1=82: = 22800=D1=80.
=D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9=20 = =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F!!!
(=D0=B2=D1=85=D0=BE=D0=B4=D0=B8=D1=82 = =D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9 = =D0=BC=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=B0=D0=BB, = =D0=BE=D0=B1=D0=B5=D0=B4=D1=8B, = =D0=BA=D0=BE=D1=84=D0=B5-=D0=BF=D0=B0=D1=83=D0=B7=D1=8B,=20 = =D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82)=                
------=_NextPart_000_00BA_01D0B40F.3803D9F0-- From magogo200@gmail.com Wed Jul 1 09:33:18 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,HTML_MESSAGE,T_DKIM_INVALID,T_FILL_THIS_FORM_SHORT autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C3F7E7FA6 for ; Wed, 1 Jul 2015 09:33:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id B47E58F8049 for ; Wed, 1 Jul 2015 07:33:15 -0700 (PDT) X-ASG-Debug-ID: 1435761188-04cb6c2dc91ad690001-NocioJ Received: from mail-la0-f44.google.com (mail-la0-f44.google.com [209.85.215.44]) by cuda.sgi.com with ESMTP id V6GF4M6jWOTUfIs4 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 Jul 2015 07:33:09 -0700 (PDT) X-Barracuda-Envelope-From: magogo200@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.44] Received: by lagx9 with SMTP id x9so42007048lag.1 for ; Wed, 01 Jul 2015 07:33:07 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.215.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=tgsm7FGTJ+/si9zq+afJ/prlk4gO/R+Scxxl8mk6L2k=; b=fXNYKUzjBc6Bz0N4EesXMBvKNtfQXv/t66UysGsKCDfi8q5qDZPgPlGHejgeZwPUT6 sZDGSltAKEspKyzp8fmwYaWU07mXm82+596zQcRqr7++5l7/ir8NG3FjFgFfy4TPaqOL eMBkFsINuf7dZca9QXD7rfG+v3NLA5/Gob7YX0i1EMZbuqkpibv08hPZTS7cUPxTDDMD uikk30OgGJyE3AAyqyUHXe2kIqLMCqBTa/xf8rnxzUzg/12+/uKcW9fXZt6KZu0lUG5G 3ZcR1whk6exM32e6KToD7fwC/Hmnx5O3PRf2SmGeZ+yCDMQeQRsvoFx6uGITmYgj7UYs FVdA== X-Received: by 10.112.170.167 with SMTP id an7mr25698243lbc.103.1435761187539; Wed, 01 Jul 2015 07:33:07 -0700 (PDT) MIME-Version: 1.0 Received: by 10.25.28.204 with HTTP; Wed, 1 Jul 2015 07:32:48 -0700 (PDT) From: Tal Maoz Date: Wed, 1 Jul 2015 17:32:48 +0300 Message-ID: Subject: Kernel oops when using XFS To: xfs@oss.sgi.com X-ASG-Orig-Subj: Kernel oops when using XFS Content-Type: multipart/alternative; boundary=001a11c368cc90cf0a0519d133dd X-Barracuda-Connect: mail-la0-f44.google.com[209.85.215.44] X-Barracuda-Start-Time: 1435761188 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20355 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c368cc90cf0a0519d133dd Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hey all, I=E2=80=99m using XFS on a Ubuntu 14.04.1 x84_64 machine and getting kernel= oops messages from the XFS module almost daily. My machine is a 6-core Core-i7 with 24GB RAM, an mdadm software raid5 over 4 disks with an XFS fs on it. Here is a typical error message: [Wed Jul 1 07:14:30 2015] XFS (md1p3): Access to block zero in inode 70952984 start_block: 0 start_off: 0 blkcnt: 5 extent-state: 0 lastx: 8 [Wed Jul 1 07:14:30 2015] XFS (md1p3): xfs_dabuf_map: bno 8388608 dir: inode 70952984 [Wed Jul 1 07:14:30 2015] XFS (md1p3): [00] br_startoff 8388608 br_startblock -2 br_blockcount 1 br_state 0 [Wed Jul 1 07:14:30 2015] XFS (md1p3): Internal error xfs_da_do_buf(1) at line 2521 of file /build/buildd/linux-lts-utopic-3.16.0/fs/xfs/xfs_da_btree.c. Caller xfs_da_read_buf+0x50/0xf0 [xfs] [Wed Jul 1 07:14:30 2015] CPU: 11 PID: 12649 Comm: updatedb.mlocat Tainted: P B OE 3.16.0-36-generic #48~14.04.1-Ubuntu [Wed Jul 1 07:14:30 2015] Hardware name: MSI MS-7666/Big Bang-XPower (MS-7666), BIOS V1.6 03/29/2011 [Wed Jul 1 07:14:30 2015] ffff88018fa1fa40 ffff88018fa1f9e0 ffffffff81764a5f ffff8806199f0000 [Wed Jul 1 07:14:30 2015] ffff88018fa1f9f8 ffffffffc076e1eb ffffffffc07a27e0 ffff88018fa1fa88 [Wed Jul 1 07:14:30 2015] ffffffffc07a186f ffff880100000000 ffff880598a36c00 ffff88018fa1fac0 [Wed Jul 1 07:14:30 2015] Call Trace: [Wed Jul 1 07:14:30 2015] [] dump_stack+0x45/0x56 [Wed Jul 1 07:14:30 2015] [] xfs_error_report+0x3b/0x40 [xfs] [Wed Jul 1 07:14:30 2015] [] ? xfs_da_read_buf+0x50/0xf0 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_dabuf_map.constprop.16+0x16f/0x370 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_da_read_buf+0x50/0xf0 [xfs] [Wed Jul 1 07:14:30 2015] [] ? __ext4_handle_dirty_metadata+0x8b/0x200 [Wed Jul 1 07:14:30 2015] [] xfs_da3_node_read+0x23/0xd0 [xfs] [Wed Jul 1 07:14:30 2015] [] ? kmem_zone_alloc+0x77/0x100 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_da3_node_lookup_int+0x66/0x2e0 [xfs] [Wed Jul 1 07:14:30 2015] [] ? kmem_zone_alloc+0x77/0x100 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_dir2_node_lookup+0x3e/0x150 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_dir_lookup+0x175/0x190 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_lookup+0x9e/0x100 [xfs= ] [Wed Jul 1 07:14:30 2015] [] xfs_vn_lookup+0x5b/0xa0 [xfs] [Wed Jul 1 07:14:30 2015] [] lookup_real+0x1d/0x50 [Wed Jul 1 07:14:30 2015] [] __lookup_hash+0x33/0x40 [Wed Jul 1 07:14:30 2015] [] lookup_slow+0x42/0xa7 [Wed Jul 1 07:14:30 2015] [] path_lookupat+0x725/0x790 [Wed Jul 1 07:14:30 2015] [] ? kmem_cache_alloc+0x35/0x1e0 [Wed Jul 1 07:14:30 2015] [] ? getname_flags+0x4f/0x1a0 [Wed Jul 1 07:14:30 2015] [] filename_lookup+0x2b/0xc0 [Wed Jul 1 07:14:30 2015] [] user_path_at_empty+0x54/0x90 [Wed Jul 1 07:14:30 2015] [] ? from_kgid_munged+0x12/0x20 [Wed Jul 1 07:14:30 2015] [] ? cp_new_stat+0x13d/0x160 [Wed Jul 1 07:14:30 2015] [] user_path_at+0x11/0x20 [Wed Jul 1 07:14:30 2015] [] vfs_fstatat+0x50/0xa0 [Wed Jul 1 07:14:30 2015] [] SYSC_newlstat+0x22/0x40 [Wed Jul 1 07:14:30 2015] [] ? SyS_poll+0x65/0x100 [Wed Jul 1 07:14:30 2015] [] SyS_newlstat+0xe/0x10 [Wed Jul 1 07:14:30 2015] [] system_call_fastpath+0x1a/0x1f [Wed Jul 1 07:14:30 2015] XFS (md1p3): xfs_dabuf_map: bno 8388608 dir: inode 58804025388 [Wed Jul 1 07:14:30 2015] XFS (md1p3): [00] br_startoff 8388608 br_startblock -2 br_blockcount 1 br_state 0 [Wed Jul 1 07:14:30 2015] XFS (md1p3): Internal error xfs_da_do_buf(1) at line 2521 of file /build/buildd/linux-lts-utopic-3.16.0/fs/xfs/xfs_da_btree.c. Caller xfs_da_read_buf+0x50/0xf0 [xfs] [Wed Jul 1 07:14:30 2015] CPU: 11 PID: 12649 Comm: updatedb.mlocat Tainted: P B OE 3.16.0-36-generic #48~14.04.1-Ubuntu [Wed Jul 1 07:14:30 2015] Hardware name: MSI MS-7666/Big Bang-XPower (MS-7666), BIOS V1.6 03/29/2011 [Wed Jul 1 07:14:30 2015] ffff88018fa1fa40 ffff88018fa1f9e0 ffffffff81764a5f ffff8806199f0000 [Wed Jul 1 07:14:30 2015] ffff88018fa1f9f8 ffffffffc076e1eb ffffffffc07a27e0 ffff88018fa1fa88 [Wed Jul 1 07:14:30 2015] ffffffffc07a186f ffff880100000000 ffff880598a05800 ffff88018fa1fac0 [Wed Jul 1 07:14:30 2015] Call Trace: [Wed Jul 1 07:14:30 2015] [] dump_stack+0x45/0x56 [Wed Jul 1 07:14:30 2015] [] xfs_error_report+0x3b/0x40 [xfs] [Wed Jul 1 07:14:30 2015] [] ? xfs_da_read_buf+0x50/0xf0 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_dabuf_map.constprop.16+0x16f/0x370 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_da_read_buf+0x50/0xf0 [xfs] [Wed Jul 1 07:14:30 2015] [] ? __ext4_handle_dirty_metadata+0x8b/0x200 [Wed Jul 1 07:14:30 2015] [] xfs_da3_node_read+0x23/0xd0 [xfs] [Wed Jul 1 07:14:30 2015] [] ? kmem_zone_alloc+0x77/0x100 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_da3_node_lookup_int+0x66/0x2e0 [xfs] [Wed Jul 1 07:14:30 2015] [] ? kmem_zone_alloc+0x77/0x100 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_dir2_node_lookup+0x3e/0x150 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_dir_lookup+0x175/0x190 [xfs] [Wed Jul 1 07:14:30 2015] [] xfs_lookup+0x9e/0x100 [xfs= ] [Wed Jul 1 07:14:30 2015] [] xfs_vn_lookup+0x5b/0xa0 [xfs] [Wed Jul 1 07:14:30 2015] [] lookup_real+0x1d/0x50 [Wed Jul 1 07:14:30 2015] [] __lookup_hash+0x33/0x40 [Wed Jul 1 07:14:30 2015] [] lookup_slow+0x42/0xa7 [Wed Jul 1 07:14:30 2015] [] path_lookupat+0x725/0x790 [Wed Jul 1 07:14:30 2015] [] ? kmem_cache_alloc+0x35/0x1e0 [Wed Jul 1 07:14:30 2015] [] ? getname_flags+0x4f/0x1a0 [Wed Jul 1 07:14:30 2015] [] filename_lookup+0x2b/0xc0 [Wed Jul 1 07:14:30 2015] [] user_path_at_empty+0x54/0x90 [Wed Jul 1 07:14:30 2015] [] ? from_kgid_munged+0x12/0x20 [Wed Jul 1 07:14:30 2015] [] ? cp_new_stat+0x13d/0x160 [Wed Jul 1 07:14:30 2015] [] user_path_at+0x11/0x20 [Wed Jul 1 07:14:30 2015] [] vfs_fstatat+0x50/0xa0 [Wed Jul 1 07:14:30 2015] [] SYSC_newlstat+0x22/0x40 [Wed Jul 1 07:14:30 2015] [] ? SyS_poll+0x65/0x100 [Wed Jul 1 07:14:30 2015] [] SyS_newlstat+0xe/0x10 [Wed Jul 1 07:14:30 2015] [] system_call_fastpath+0x1a/0x1f I have gathered some information that I hope can help figure out what the problem is. FYI, this sort of problem also happened when I had an Ubuntu 12.04 installed with the same raid configuration: processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 0 cpu cores : 6 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 1 cpu cores : 6 apicid : 2 initial apicid : 2 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 2 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 2 cpu cores : 6 apicid : 4 initial apicid : 4 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 8 cpu cores : 6 apicid : 16 initial apicid : 16 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 4 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 9 cpu cores : 6 apicid : 18 initial apicid : 18 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 5 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 10 cpu cores : 6 apicid : 20 initial apicid : 20 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 6 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 0 cpu cores : 6 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 7 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 1 cpu cores : 6 apicid : 3 initial apicid : 3 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 8 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 2 cpu cores : 6 apicid : 5 initial apicid : 5 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 9 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 8 cpu cores : 6 apicid : 17 initial apicid : 17 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 10 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 9 cpu cores : 6 apicid : 19 initial apicid : 19 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 11 vendor_id : GenuineIntel cpu family : 6 model : 44 model name : Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz stepping : 2 microcode : 0x13 cpu MHz : 1600.000 cache size : 12288 KB physical id : 0 siblings : 12 core id : 10 cpu cores : 6 apicid : 21 initial apicid : 21 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 6925.26 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: # cat /proc/meminfo MemTotal: 24682092 kB MemFree: 2047764 kB MemAvailable: 20897172 kB Buffers: 3521920 kB Cached: 9868000 kB SwapCached: 62592 kB Active: 4884864 kB Inactive: 9530376 kB Active(anon): 623780 kB Inactive(anon): 428400 kB Active(file): 4261084 kB Inactive(file): 9101976 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 50331644 kB SwapFree: 50133220 kB Dirty: 16 kB Writeback: 0 kB AnonPages: 982716 kB Mapped: 161504 kB Shmem: 26864 kB Slab: 6212536 kB SReclaimable: 5739752 kB SUnreclaim: 472784 kB KernelStack: 8896 kB PageTables: 28436 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 62672688 kB Committed_AS: 4013880 kB VmallocTotal: 34359738367 kB VmallocUsed: 410200 kB VmallocChunk: 34359323644 kB HardwareCorrupted: 0 kB AnonHugePages: 153600 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 4109824 kB DirectMap2M: 21047296 kB DirectMap1G: 2097152 kB # modinfo xfs filename: /lib/modules/3.16.0-36-generic/kernel/fs/xfs/xfs.ko license: GPL description: SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled author: Silicon Graphics, Inc. alias: fs-xfs srcversion: 8D6E5FD66A0C62F3CFCD47B depends: libcrc32c intree: Y vermagic: 3.16.0-36-generic SMP mod_unload modversions signer: Magrathea: Glacier signing key sig_key: AC:F6:91:81:39:AD:3F:CA:CC:01:C2:6A:B2:49:09:D5:90:79:A5:78 sig_hashalgo: sha512 # dpkg -l \*xfs\* Desired=3DUnknown/Install/Remove/Purge/Hold | Status=3DNot/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-p= end |/ Err?=3D(none)/Reinst-required (Status,Err: uppercase=3Dbad) ||/ Name Version Architecture Description +++-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D-=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D un xfs (no description available) un xfsdump (no description available) ii xfsprogs 3.1.9ubuntu2 amd64 Utilities for managing the XFS filesystem # xfs_info /raid meta-data=3D/dev/md1p3 isize=3D256 agcount=3D32, agsize=3D67= 869952 blks =3D sectsz=3D4096 attr=3D2 data =3D bsize=3D4096 blocks=3D2171836160, imax= pct=3D5 =3D sunit=3D128 swidth=3D384 blks naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 log =3Dinternal bsize=3D4096 blocks=3D521728, version= =3D2 =3D sectsz=3D4096 sunit=3D1 blks, lazy-coun= t=3D1 realtime =3Dnone extsz=3D4096 blocks=3D0, rtextents=3D0 # mdadm --misc -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Oct 2 14:17:56 2013 Raid Level : raid1 Array Size : 97152 (94.89 MiB 99.48 MB) Used Dev Size : 97152 (94.89 MiB 99.48 MB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Sun Jun 14 11:22:59 2015 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Name : NILinDev:md0 (local to host NILinDev) UUID : 980eb763:71c5c345:2c18c482:7c7e6e89 Events : 333 Number Major Minor RaidDevice State 5 8 2 0 active sync /dev/sda2 1 8 18 1 active sync /dev/sdb2 4 8 34 2 active sync /dev/sdc2 3 8 50 3 active sync /dev/sdd2 # mdadm --misc -D /dev/md1 /dev/md1: Version : 1.2 Creation Time : Thu Feb 26 14:53:18 2015 Raid Level : raid5 Array Size : 8790107136 (8382.90 GiB 9001.07 GB) Used Dev Size : 2930035712 (2794.30 GiB 3000.36 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Wed Jul 1 17:13:45 2015 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : sysresccd:1 UUID : 9bb44645:717e2e8d:0d501dda:66ecba2b Events : 38536 Number Major Minor RaidDevice State 5 8 3 0 active sync /dev/sda3 1 8 19 1 active sync /dev/sdb3 2 8 35 2 active sync /dev/sdc3 4 8 51 3 active sync /dev/sdd3 # parted -s /dev/md1 unit b print Model: Linux Software RAID Array (md) Disk /dev/md1: 9001069707264B Sector size (logical/physical): 512B/4096B Partition Table: gpt Number Start End Size File system Name Flags 1 1048576B 53688139775B 53687091200B ext4 root 2 53688139776B 105227747327B 51539607552B linux-swap(v1) swap 3 105227747328B 9001068658687B 8895840911360B xfs data from /proc/mounts: /dev/md0 /boot ext4 rw,noatime,stripe=3D4,data=3Dordered 0 0 /dev/md1p3 /raid xfs rw,noatime,attr2,inode64,sunit=3D1024,swidth=3D3072,noquota 0 0 What could be the problem? I have another mdadm raid5 array that used to have XFS and gave the same errors. I use it for backup and noticed that each backup from the main array to the second one used to take a long time and gave these errors. I switched from XFS to ext4 and not only did the errors go away (obvisouly...) but the backup time went down from almost 23 hours to 1 hour= ! Thanks, Tal --001a11c368cc90cf0a0519d133dd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PHAgY2xhc3M9IiI+SGV5IGFsbCw8L3A+DQoNCjxwIGNsYXNzPSIiPsKg PC9wPg0KDQo8cCBjbGFzcz0iIj5J4oCZbSB1c2luZyBYRlMgb24gYSBVYnVudHUgMTQuMDQuMSB4 ODRfNjQgbWFjaGluZSBhbmQNCmdldHRpbmcga2VybmVsIG9vcHMgbWVzc2FnZXMgZnJvbSB0aGUg WEZTIG1vZHVsZSBhbG1vc3QgZGFpbHkuPC9wPg0KDQo8cCBjbGFzcz0iIj5NeSBtYWNoaW5lIGlz IGEgNi1jb3JlIENvcmUtaTcgd2l0aCAyNEdCIFJBTSwgYW4gbWRhZG0NCnNvZnR3YXJlIHJhaWQ1 IG92ZXIgNCBkaXNrcyB3aXRoIGFuIFhGUyBmcyBvbiBpdC48L3A+DQoNCjxwIGNsYXNzPSIiPkhl cmUgaXMgYSB0eXBpY2FsIGVycm9yIG1lc3NhZ2U6PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4N Cg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XSBYRlMgKG1kMXAzKTog QWNjZXNzIHRvIGJsb2NrIHplcm8gaW4gaW5vZGUgNzA5NTI5ODQgc3RhcnRfYmxvY2s6DQowIHN0 YXJ0X29mZjogMCBibGtjbnQ6IDUgZXh0ZW50LXN0YXRlOiAwIGxhc3R4OiA4PC9wPg0KDQo8cCBj bGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdIFhGUyAobWQxcDMpOiB4ZnNfZGFi dWZfbWFwOiBibm8gODM4ODYwOCBkaXI6IGlub2RlIDcwOTUyOTg0PC9wPg0KDQo8cCBjbGFzcz0i Ij5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdIFhGUyAobWQxcDMpOiBbMDBdIGJyX3N0YXJ0 b2ZmIDgzODg2MDggYnJfc3RhcnRibG9jayAtMg0KYnJfYmxvY2tjb3VudCAxIGJyX3N0YXRlIDA8 L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV0gWEZTIChtZDFw Myk6IEludGVybmFsIGVycm9yIHhmc19kYV9kb19idWYoMSkgYXQgbGluZSAyNTIxIG9mDQpmaWxl IC9idWlsZC9idWlsZGQvbGludXgtbHRzLXV0b3BpYy0zLjE2LjAvZnMveGZzL3hmc19kYV9idHJl ZS5jLsKgIENhbGxlciB4ZnNfZGFfcmVhZF9idWYrMHg1MC8weGYwIFt4ZnNdPC9wPg0KDQo8cCBj bGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdIENQVTogMTEgUElEOiAxMjY0OSBD b21tOiB1cGRhdGVkYi5tbG9jYXQgVGFpbnRlZDogUMKgwqDCoCBCwqDCoMKgwqDCoA0KT0UgMy4x Ni4wLTM2LWdlbmVyaWMgIzQ4fjE0LjA0LjEtVWJ1bnR1PC9wPg0KDQo8cCBjbGFzcz0iIj5bV2Vk IEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdIEhhcmR3YXJlIG5hbWU6IE1TSSBNUy03NjY2L0JpZyBC YW5nLVhQb3dlciAoTVMtNzY2NiksIEJJT1MgVjEuNg0KMDMvMjkvMjAxMTwvcD4NCg0KPHAgY2xh c3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgIGZmZmY4ODAxOGZhMWZhNDANCmZm ZmY4ODAxOGZhMWY5ZTAgZmZmZmZmZmY4MTc2NGE1ZiBmZmZmODgwNjE5OWYwMDAwPC9wPg0KDQo8 cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqAgZmZmZjg4MDE4ZmExZjlm OA0KZmZmZmZmZmZjMDc2ZTFlYiBmZmZmZmZmZmMwN2EyN2UwIGZmZmY4ODAxOGZhMWZhODg8L3A+ DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoCBmZmZmZmZmZmMw N2ExODZmDQpmZmZmODgwMTAwMDAwMDAwIGZmZmY4ODA1OThhMzZjMDAgZmZmZjg4MDE4ZmExZmFj MDwvcD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XSBDYWxsIFRy YWNlOjwvcD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpb Jmx0O2ZmZmZmZmZmODE3NjRhNWYmZ3Q7XSBkdW1wX3N0YWNrKzB4NDUvMHg1NjwvcD4NCg0KPHAg Y2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmYzA3 NmUxZWImZ3Q7XSB4ZnNfZXJyb3JfcmVwb3J0KzB4M2IvMHg0MCBbeGZzXTwvcD4NCg0KPHAgY2xh c3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmYzA3YTI3 ZTAmZ3Q7XSA/IHhmc19kYV9yZWFkX2J1ZisweDUwLzB4ZjAgW3hmc108L3A+DQoNCjxwIGNsYXNz PSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZmMwN2ExODZm Jmd0O10geGZzX2RhYnVmX21hcC5jb25zdHByb3AuMTYrMHgxNmYvMHgzNzAgW3hmc108L3A+DQoN CjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZm ZmMwN2EyN2UwJmd0O10geGZzX2RhX3JlYWRfYnVmKzB4NTAvMHhmMCBbeGZzXTwvcD4NCg0KPHAg Y2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmODEy ODJlYmImZ3Q7XSA/IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGErMHg4Yi8weDIwMDwvcD4N Cg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZm ZmZmYzA3YTI4YTMmZ3Q7XSB4ZnNfZGEzX25vZGVfcmVhZCsweDIzLzB4ZDAgW3hmc108L3A+DQoN CjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZm ZmMwNzgzZDg3Jmd0O10gPyBrbWVtX3pvbmVfYWxsb2MrMHg3Ny8weDEwMCBbeGZzXTwvcD4NCg0K PHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZm YzA3YTNhMTYmZ3Q7XSB4ZnNfZGEzX25vZGVfbG9va3VwX2ludCsweDY2LzB4MmUwIFt4ZnNdPC9w Pg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZm ZmZmZmZjMDc4M2Q4NyZndDtdID8ga21lbV96b25lX2FsbG9jKzB4NzcvMHgxMDAgW3hmc108L3A+ DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZm ZmZmZmMwN2FkZDBlJmd0O10geGZzX2RpcjJfbm9kZV9sb29rdXArMHgzZS8weDE1MCBbeGZzXTwv cD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2Zm ZmZmZmZmYzA3YTViNTUmZ3Q7XSB4ZnNfZGlyX2xvb2t1cCsweDE3NS8weDE5MCBbeGZzXTwvcD4N Cg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZm ZmZmYzA3YjUyZWUmZ3Q7XSB4ZnNfbG9va3VwKzB4OWUvMHgxMDAgW3hmc108L3A+DQoNCjxwIGNs YXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZmMwNzc5 NDFiJmd0O10geGZzX3ZuX2xvb2t1cCsweDViLzB4YTAgW3hmc108L3A+DQoNCjxwIGNsYXNzPSIi PltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWRkN2RkJmd0 O10gbG9va3VwX3JlYWwrMHgxZC8weDUwPC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDEN CjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTFkZTExMyZndDtdIF9fbG9va3VwX2hh c2grMHgzMy8weDQwPC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIw MTVdwqAgWyZsdDtmZmZmZmZmZjgxNzYxNTNkJmd0O10NCmxvb2t1cF9zbG93KzB4NDIvMHhhNzwv cD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2Zm ZmZmZmZmODExZTI1MDUmZ3Q7XSBwYXRoX2xvb2t1cGF0KzB4NzI1LzB4NzkwPC9wPg0KDQo8cCBj bGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTFi NzVlNSZndDtdID8ga21lbV9jYWNoZV9hbGxvYysweDM1LzB4MWUwPC9wPg0KDQo8cCBjbGFzcz0i Ij5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTFlM2JkZiZn dDtdID8gZ2V0bmFtZV9mbGFncysweDRmLzB4MWEwPC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1 bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTFlMjU5YiZndDtdIGZpbGVu YW1lX2xvb2t1cCsweDJiLzB4YzA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6 MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWU0YTc0Jmd0O10gdXNlcl9wYXRoX2F0X2Vt cHR5KzB4NTQvMHg5MDwvcD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAy MDE1XcKgDQpbJmx0O2ZmZmZmZmZmODEwZmYwYzImZ3Q7XSA/IGZyb21fa2dpZF9tdW5nZWQrMHgx Mi8weDIwPC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDEgMDc6MTQ6MzANCjIwMTVdwqAg WyZsdDtmZmZmZmZmZjgxMWQ5NDRkJmd0O10gPw0KY3BfbmV3X3N0YXQrMHgxM2QvMHgxNjA8L3A+ DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZm ZmZmZjgxMWU0YWMxJmd0O10gdXNlcl9wYXRoX2F0KzB4MTEvMHgyMDwvcD4NCg0KPHAgY2xhc3M9 IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmODExZDhmZjAm Z3Q7XSB2ZnNfZnN0YXRhdCsweDUwLzB4YTA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAg MQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWQ5NGQyJmd0O10gU1lTQ19uZXds c3RhdCsweDIyLzB4NDA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAg MjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWU5NDQ1Jmd0O10gPyBTeVNfcG9sbCsweDY1LzB4MTAw PC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7 ZmZmZmZmZmY4MTFkOTZlZSZndDtdIFN5U19uZXdsc3RhdCsweGUvMHgxMDwvcD4NCg0KPHAgY2xh c3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmODE3NmQx OGQmZ3Q7XSBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDFhLzB4MWY8L3A+DQoNCjxwIGNsYXNzPSIi PltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV0gWEZTIChtZDFwMyk6IHhmc19kYWJ1Zl9tYXA6 IGJubyA4Mzg4NjA4IGRpcjogaW5vZGUgNTg4MDQwMjUzODg8L3A+DQoNCjxwIGNsYXNzPSIiPltX ZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV0gWEZTIChtZDFwMyk6IFswMF0gYnJfc3RhcnRvZmYg ODM4ODYwOCBicl9zdGFydGJsb2NrIC0yDQpicl9ibG9ja2NvdW50IDEgYnJfc3RhdGUgMDwvcD4N Cg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XSBYRlMgKG1kMXAzKTog SW50ZXJuYWwgZXJyb3IgeGZzX2RhX2RvX2J1ZigxKSBhdCBsaW5lIDI1MjEgb2YNCmZpbGUgL2J1 aWxkL2J1aWxkZC9saW51eC1sdHMtdXRvcGljLTMuMTYuMC9mcy94ZnMveGZzX2RhX2J0cmVlLmMu wqAgQ2FsbGVyIHhmc19kYV9yZWFkX2J1ZisweDUwLzB4ZjAgW3hmc108L3A+DQoNCjxwIGNsYXNz PSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV0gQ1BVOiAxMSBQSUQ6IDEyNjQ5IENvbW06 IHVwZGF0ZWRiLm1sb2NhdCBUYWludGVkOiBQwqDCoMKgIELCoMKgwqDCoMKgDQpPRSAzLjE2LjAt MzYtZ2VuZXJpYyAjNDh+MTQuMDQuMS1VYnVudHU8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVs wqAgMQ0KMDc6MTQ6MzAgMjAxNV0gSGFyZHdhcmUgbmFtZTogTVNJIE1TLTc2NjYvQmlnIEJhbmct WFBvd2VyIChNUy03NjY2KSwgQklPUyBWMS42DQowMy8yOS8yMDExPC9wPg0KDQo8cCBjbGFzcz0i Ij5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqAgZmZmZjg4MDE4ZmExZmE0MA0KZmZmZjg4 MDE4ZmExZjllMCBmZmZmZmZmZjgxNzY0YTVmIGZmZmY4ODA2MTk5ZjAwMDA8L3A+DQoNCjxwIGNs YXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoCBmZmZmODgwMThmYTFmOWY4IGZm ZmZmZmZmYzA3NmUxZWINCmZmZmZmZmZmYzA3YTI3ZTAgZmZmZjg4MDE4ZmExZmE4ODwvcD4NCg0K PHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgIGZmZmZmZmZmYzA3YTE4 NmYNCmZmZmY4ODAxMDAwMDAwMDAgZmZmZjg4MDU5OGEwNTgwMCBmZmZmODgwMThmYTFmYWMwPC9w Pg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdIENhbGwgVHJhY2U6 PC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7 ZmZmZmZmZmY4MTc2NGE1ZiZndDtdIGR1bXBfc3RhY2srMHg0NS8weDU2PC9wPg0KDQo8cCBjbGFz cz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmZjMDc2ZTFl YiZndDtdIHhmc19lcnJvcl9yZXBvcnQrMHgzYi8weDQwIFt4ZnNdPC9wPg0KDQo8cCBjbGFzcz0i Ij5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmZjMDdhMjdlMCZn dDtdID8geGZzX2RhX3JlYWRfYnVmKzB4NTAvMHhmMCBbeGZzXTwvcD4NCg0KPHAgY2xhc3M9IiI+ W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmYzA3YTE4NmYmZ3Q7 XSB4ZnNfZGFidWZfbWFwLmNvbnN0cHJvcC4xNisweDE2Zi8weDM3MCBbeGZzXTwvcD4NCg0KPHAg Y2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmYzA3 YTI3ZTAmZ3Q7XSB4ZnNfZGFfcmVhZF9idWYrMHg1MC8weGYwIFt4ZnNdPC9wPg0KDQo8cCBjbGFz cz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTI4MmVi YiZndDtdID8gX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSsweDhiLzB4MjAwPC9wPg0KDQo8 cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmZj MDdhMjhhMyZndDtdIHhmc19kYTNfbm9kZV9yZWFkKzB4MjMvMHhkMCBbeGZzXTwvcD4NCg0KPHAg Y2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmYzA3 ODNkODcmZ3Q7XSA/IGttZW1fem9uZV9hbGxvYysweDc3LzB4MTAwIFt4ZnNdPC9wPg0KDQo8cCBj bGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmZjMDdh M2ExNiZndDtdIHhmc19kYTNfbm9kZV9sb29rdXBfaW50KzB4NjYvMHgyZTAgW3hmc108L3A+DQoN CjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZm ZmMwNzgzZDg3Jmd0O10gPyBrbWVtX3pvbmVfYWxsb2MrMHg3Ny8weDEwMCBbeGZzXTwvcD4NCg0K PHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZm YzA3YWRkMGUmZ3Q7XSB4ZnNfZGlyMl9ub2RlX2xvb2t1cCsweDNlLzB4MTUwIFt4ZnNdPC9wPg0K DQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZm ZmZjMDdhNWI1NSZndDtdIHhmc19kaXJfbG9va3VwKzB4MTc1LzB4MTkwIFt4ZnNdPC9wPg0KDQo8 cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmZj MDdiNTJlZSZndDtdIHhmc19sb29rdXArMHg5ZS8weDEwMCBbeGZzXTwvcD4NCg0KPHAgY2xhc3M9 IiI+W1dlZCBKdWwgwqAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmYzA3Nzk0MWIm Z3Q7XSB4ZnNfdm5fbG9va3VwKzB4NWIvMHhhMCBbeGZzXTwvcD4NCg0KPHAgY2xhc3M9IiI+W1dl ZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmODExZGQ3ZGQmZ3Q7XSBs b29rdXBfcmVhbCsweDFkLzB4NTA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6 MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWRlMTEzJmd0O10gX19sb29rdXBfaGFzaCsw eDMzLzB4NDA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3C oCBbJmx0O2ZmZmZmZmZmODE3NjE1M2QmZ3Q7XQ0KbG9va3VwX3Nsb3crMHg0Mi8weGE3PC9wPg0K DQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZm ZmY4MTFlMjUwNSZndDtdIHBhdGhfbG9va3VwYXQrMHg3MjUvMHg3OTA8L3A+DQoNCjxwIGNsYXNz PSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWI3NWU1 Jmd0O10gPyBrbWVtX2NhY2hlX2FsbG9jKzB4MzUvMHgxZTA8L3A+DQoNCjxwIGNsYXNzPSIiPltX ZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWUzYmRmJmd0O10g PyBnZXRuYW1lX2ZsYWdzKzB4NGYvMHgxYTA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAg MQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZmZmZmZjgxMWUyNTliJmd0O10gZmlsZW5hbWVf bG9va3VwKzB4MmIvMHhjMDwvcD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDoz MCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZmODExZTRhNzQmZ3Q7XSB1c2VyX3BhdGhfYXRfZW1wdHkr MHg1NC8weDkwPC9wPg0KDQo8cCBjbGFzcz0iIj5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVd wqANClsmbHQ7ZmZmZmZmZmY4MTBmZjBjMiZndDtdID8gZnJvbV9rZ2lkX211bmdlZCsweDEyLzB4 MjA8L3A+DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZs dDtmZmZmZmZmZjgxMWQ5NDRkJmd0O10gPyBjcF9uZXdfc3RhdCsweDEzZC8weDE2MDwvcD4NCg0K PHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1XcKgDQpbJmx0O2ZmZmZmZmZm ODExZTRhYzEmZ3Q7XSB1c2VyX3BhdGhfYXQrMHgxMS8weDIwPC9wPg0KDQo8cCBjbGFzcz0iIj5b V2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTFkOGZmMCZndDtd IHZmc19mc3RhdGF0KzB4NTAvMHhhMDwvcD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQow NzoxNDozMCAyMDE1XcKgIFsmbHQ7ZmZmZmZmZmY4MTFkOTRkMiZndDtdDQpTWVNDX25ld2xzdGF0 KzB4MjIvMHg0MDwvcD4NCg0KPHAgY2xhc3M9IiI+W1dlZCBKdWzCoCAxDQowNzoxNDozMCAyMDE1 XcKgDQpbJmx0O2ZmZmZmZmZmODExZTk0NDUmZ3Q7XSA/IFN5U19wb2xsKzB4NjUvMHgxMDA8L3A+ DQoNCjxwIGNsYXNzPSIiPltXZWQgSnVswqAgMQ0KMDc6MTQ6MzAgMjAxNV3CoA0KWyZsdDtmZmZm ZmZmZjgxMWQ5NmVlJmd0O10gU3lTX25ld2xzdGF0KzB4ZS8weDEwPC9wPg0KDQo8cCBjbGFzcz0i Ij5bV2VkIEp1bMKgIDENCjA3OjE0OjMwIDIwMTVdwqANClsmbHQ7ZmZmZmZmZmY4MTc2ZDE4ZCZn dDtdIHN5c3RlbV9jYWxsX2Zhc3RwYXRoKzB4MWEvMHgxZjwvcD4NCg0KPHAgY2xhc3M9IiI+wqA8 L3A+DQoNCjxwIGNsYXNzPSIiPkkgaGF2ZSBnYXRoZXJlZCBzb21lIGluZm9ybWF0aW9uIHRoYXQg SSBob3BlIGNhbiBoZWxwDQpmaWd1cmUgb3V0IHdoYXQgdGhlIHByb2JsZW0gaXMuIEZZSSwgdGhp cyBzb3J0IG9mIHByb2JsZW0gYWxzbyBoYXBwZW5lZCB3aGVuIEkNCmhhZCBhbiBVYnVudHUgMTIu MDQgaW5zdGFsbGVkIHdpdGggdGhlIHNhbWUgcmFpZCBjb25maWd1cmF0aW9uOjwvcD4NCg0KPHAg Y2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPsKgPC9wPg0KDQo8cCBjbGFzcz0iIj5wcm9j ZXNzb3LCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjA8L3A+DQoNCjxwIGNsYXNzPSIiPnZlbmRv cl9pZMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCkdlbnVpbmVJbnRlbDwvcD4NCg0KPHAgY2xhc3M9 IiI+Y3B1IGZhbWlsecKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY8L3A+DQoNCjxwIGNsYXNzPSIi Pm1vZGVswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjQ0PC9wPg0KDQo8 cCBjbGFzcz0iIj5tb2RlbCBuYW1lwqDCoMKgwqDCoCA6DQpJbnRlbChSKSBDb3JlKFRNKSBpNyBD UFXCoMKgwqDCoMKgwqAgWCA5OTDCoCBAIDMuNDdHSHo8L3A+DQoNCjxwIGNsYXNzPSIiPnN0ZXBw aW5nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMjwvcD4NCg0KPHAgY2xhc3M9IiI+bWlj cm9jb2RlwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMHgxMzwvcD4NCg0KPHAgY2xhc3M9IiI+Y3B1 IE1IesKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgOg0KMTYwMC4wMDA8L3A+DQoNCjxwIGNsYXNzPSIiPmNhY2hlIHNpemXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDoNCjEyMjg4IEtCPC9wPg0KDQo8cCBjbGFzcz0iIj5waHlzaWNhbCBpZMKg wqDCoMKgwqDCoMKgwqDCoMKgIDoNCjA8L3A+DQoNCjxwIGNsYXNzPSIiPnNpYmxpbmdzIDogMTI8 L3A+DQoNCjxwIGNsYXNzPSIiPmNvcmUgaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIDoNCjA8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBjb3Jlc8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5hcGljaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA6DQowPC9wPg0KDQo8cCBjbGFzcz0iIj5pbml0aWFsIGFwaWNpZMKg wqDCoMKgwqDCoMKgwqAgOg0KMDwvcD4NCg0KPHAgY2xhc3M9IiI+ZnB1wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0KPHAgY2xhc3M9 IiI+ZnB1X2V4Y2VwdGlvbsKgIDogeWVzPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHVpZCBsZXZlbMKg wqDCoMKgwqDCoMKgwqDCoCA6DQoxMTwvcD4NCg0KPHAgY2xhc3M9IiI+d3DCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQp5ZXM8L3A+DQoNCjxwIGNs YXNzPSIiPmZsYWdzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Og0KZnB1IHZtZSBkZSBwc2UgdHNjIG1zciBwYWUgbWNlIGN4OCBhcGljIHNlcCBtdHJyIHBnZSBt Y2EgY21vdiBwYXQgcHNlMzYgY2xmbHVzaA0KZHRzIGFjcGkgbW14IGZ4c3Igc3NlIHNzZTIgc3Mg aHQgdG0gcGJlIHN5c2NhbGwgbnggcGRwZTFnYiByZHRzY3AgbG0NCmNvbnN0YW50X3RzYyBhcmNo X3BlcmZtb24gcGVicyBidHMgcmVwX2dvb2Qgbm9wbCB4dG9wb2xvZ3kgbm9uc3RvcF90c2MNCmFw ZXJmbXBlcmYgcG5pIHBjbG11bHFkcSBkdGVzNjQgbW9uaXRvciBkc19jcGwgdm14IGVzdCB0bTIg c3NzZTMgY3gxNiB4dHByIHBkY20NCnBjaWQgc3NlNF8xIHNzZTRfMiBwb3BjbnQgYWVzIGxhaGZf bG0gaWRhIGFyYXQgZXBiIGR0aGVybSB0cHJfc2hhZG93IHZubWkNCmZsZXhwcmlvcml0eSBlcHQg dnBpZDwvcD4NCg0KPHAgY2xhc3M9IiI+Ym9nb21pcHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoN CjY5MjUuMjY8L3A+DQoNCjxwIGNsYXNzPSIiPmNsZmx1c2ggc2l6ZcKgwqDCoMKgwqDCoMKgwqDC oCA6DQo2NDwvcD4NCg0KPHAgY2xhc3M9IiI+Y2FjaGVfYWxpZ25tZW50wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0iIj5hZGRyZXNzIHNpemVzwqDCoMKgwqAg Og0KMzYgYml0cyBwaHlzaWNhbCwgNDggYml0cyB2aXJ0dWFsPC9wPg0KDQo8cCBjbGFzcz0iIj5w b3dlciBtYW5hZ2VtZW50OjwvcD4NCg0KPHAgY2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIi PnByb2Nlc3NvcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTwvcD4NCg0KPHAgY2xhc3M9IiI+ dmVuZG9yX2lkwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KR2VudWluZUludGVsPC9wPg0KDQo8cCBj bGFzcz0iIj5jcHUgZmFtaWx5wqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjwvcD4NCg0KPHAgY2xh c3M9IiI+bW9kZWzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNDQ8L3A+ DQoNCjxwIGNsYXNzPSIiPm1vZGVsIG5hbWXCoMKgwqDCoMKgIDoNCkludGVsKFIpIENvcmUoVE0p IGk3IENQVcKgwqDCoMKgwqDCoCBYIDk5MMKgIEAgMy40N0dIejwvcD4NCg0KPHAgY2xhc3M9IiI+ c3RlcHBpbmfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoyPC9wPg0KDQo8cCBjbGFzcz0i Ij5taWNyb2NvZGXCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoweDEzPC9wPg0KDQo8cCBjbGFzcz0i Ij5jcHUgTUh6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA6DQoxNjAwLjAwMDwvcD4NCg0KPHAgY2xhc3M9IiI+Y2FjaGUgc2l6ZcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgOg0KMTIyODggS0I8L3A+DQoNCjxwIGNsYXNzPSIiPnBoeXNpY2Fs IGlkwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMDwvcD4NCg0KPHAgY2xhc3M9IiI+c2libGluZ3Mg OiAxMjwvcD4NCg0KPHAgY2xhc3M9IiI+Y29yZSBpZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgOg0KMTwvcD4NCg0KPHAgY2xhc3M9IiI+Y3B1IGNvcmVzwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDoNCjY8L3A+DQoNCjxwIGNsYXNzPSIiPmFwaWNpZMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjI8L3A+DQoNCjxwIGNsYXNzPSIiPmluaXRpYWwgYXBp Y2lkwqDCoMKgwqDCoMKgwqDCoCA6DQoyPC9wPg0KDQo8cCBjbGFzcz0iIj5mcHXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVzPC9wPg0KDQo8cCBj bGFzcz0iIj5mcHVfZXhjZXB0aW9uwqAgOiB5ZXM8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdWlkIGxl dmVswqDCoMKgwqDCoMKgwqDCoMKgIDoNCjExPC9wPg0KDQo8cCBjbGFzcz0iIj53cMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0K PHAgY2xhc3M9IiI+ZmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA6DQpmcHUgdm1lIGRlIHBzZSB0c2MgbXNyIHBhZSBtY2UgY3g4IGFwaWMgc2VwIG10cnIg cGdlIG1jYSBjbW92IHBhdCBwc2UzNiBjbGZsdXNoDQpkdHMgYWNwaSBtbXggZnhzciBzc2Ugc3Nl MiBzcyBodCB0bSBwYmUgc3lzY2FsbCBueCBwZHBlMWdiIHJkdHNjcCBsbQ0KY29uc3RhbnRfdHNj IGFyY2hfcGVyZm1vbiBwZWJzIGJ0cyByZXBfZ29vZCBub3BsIHh0b3BvbG9neSBub25zdG9wX3Rz Yw0KYXBlcmZtcGVyZiBwbmkgcGNsbXVscWRxIGR0ZXM2NCBtb25pdG9yIGRzX2NwbCB2bXggZXN0 IHRtMiBzc3NlMyBjeDE2IHh0cHIgcGRjbQ0KcGNpZCBzc2U0XzEgc3NlNF8yIHBvcGNudCBhZXMg bGFoZl9sbSBpZGEgYXJhdCBlcGIgZHRoZXJtIHRwcl9zaGFkb3cgdm5taQ0KZmxleHByaW9yaXR5 IGVwdCB2cGlkPC9wPg0KDQo8cCBjbGFzcz0iIj5ib2dvbWlwc8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgOg0KNjkyNS4yNjwvcD4NCg0KPHAgY2xhc3M9IiI+Y2xmbHVzaCBzaXplwqDCoMKgwqDCoMKg wqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0iIj5jYWNoZV9hbGlnbm1lbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmFkZHJlc3Mgc2l6ZXPCoMKg wqDCoCA6DQozNiBiaXRzIHBoeXNpY2FsLCA0OCBiaXRzIHZpcnR1YWw8L3A+DQoNCjxwIGNsYXNz PSIiPnBvd2VyIG1hbmFnZW1lbnQ6PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xh c3M9IiI+cHJvY2Vzc29ywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoyPC9wPg0KDQo8cCBjbGFz cz0iIj52ZW5kb3JfaWTCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQpHZW51aW5lSW50ZWw8L3A+DQoN CjxwIGNsYXNzPSIiPmNwdSBmYW1pbHnCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0KDQo8 cCBjbGFzcz0iIj5tb2RlbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo0 NDwvcD4NCg0KPHAgY2xhc3M9IiI+bW9kZWwgbmFtZcKgwqDCoMKgwqAgOg0KSW50ZWwoUikgQ29y ZShUTSkgaTcgQ1BVwqDCoMKgwqDCoMKgIFggOTkwwqAgQCAzLjQ3R0h6PC9wPg0KDQo8cCBjbGFz cz0iIj5zdGVwcGluZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjI8L3A+DQoNCjxwIGNs YXNzPSIiPm1pY3JvY29kZcKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjB4MTM8L3A+DQoNCjxwIGNs YXNzPSIiPmNwdSBNSHrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIDoNCjE2MDAuMDAwPC9wPg0KDQo8cCBjbGFzcz0iIj5jYWNoZSBzaXpl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxMjI4OCBLQjwvcD4NCg0KPHAgY2xhc3M9IiI+cGh5 c2ljYWwgaWTCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQowPC9wPg0KDQo8cCBjbGFzcz0iIj5zaWJs aW5ncyA6IDEyPC9wPg0KDQo8cCBjbGFzcz0iIj5jb3JlIGlkwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA6DQoyPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgY29yZXPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KNjwvcD4NCg0KPHAgY2xhc3M9IiI+YXBpY2lkwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNDwvcD4NCg0KPHAgY2xhc3M9IiI+aW5pdGlh bCBhcGljaWTCoMKgwqDCoMKgwqDCoMKgIDoNCjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmZwdcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQp5ZXM8L3A+DQoN CjxwIGNsYXNzPSIiPmZwdV9leGNlcHRpb27CoCA6IHllczwvcD4NCg0KPHAgY2xhc3M9IiI+Y3B1 aWQgbGV2ZWzCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTE8L3A+DQoNCjxwIGNsYXNzPSIiPndwwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVzPC9w Pg0KDQo8cCBjbGFzcz0iIj5mbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDoNCmZwdSB2bWUgZGUgcHNlIHRzYyBtc3IgcGFlIG1jZSBjeDggYXBpYyBzZXAg bXRyciBwZ2UgbWNhIGNtb3YgcGF0IHBzZTM2IGNsZmx1c2gNCmR0cyBhY3BpIG1teCBmeHNyIHNz ZSBzc2UyIHNzIGh0IHRtIHBiZSBzeXNjYWxsIG54IHBkcGUxZ2IgcmR0c2NwIGxtDQpjb25zdGFu dF90c2MgYXJjaF9wZXJmbW9uIHBlYnMgYnRzIHJlcF9nb29kIG5vcGwgeHRvcG9sb2d5IG5vbnN0 b3BfdHNjDQphcGVyZm1wZXJmIHBuaSBwY2xtdWxxZHEgZHRlczY0IG1vbml0b3IgZHNfY3BsIHZt eCBlc3QgdG0yIHNzc2UzIGN4MTYgeHRwciBwZGNtDQpwY2lkIHNzZTRfMSBzc2U0XzIgcG9wY250 IGFlcyBsYWhmX2xtIGlkYSBhcmF0IGVwYiBkdGhlcm0gdHByX3NoYWRvdyB2bm1pDQpmbGV4cHJp b3JpdHkgZXB0IHZwaWQ8L3A+DQoNCjxwIGNsYXNzPSIiPmJvZ29taXBzwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA6DQo2OTI1LjI2PC9wPg0KDQo8cCBjbGFzcz0iIj5jbGZsdXNoIHNpemXCoMKgwqDC oMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmNhY2hlX2FsaWdubWVudMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2NDwvcD4NCg0KPHAgY2xhc3M9IiI+YWRkcmVzcyBzaXpl c8KgwqDCoMKgIDoNCjM2IGJpdHMgcGh5c2ljYWwsIDQ4IGJpdHMgdmlydHVhbDwvcD4NCg0KPHAg Y2xhc3M9IiI+cG93ZXIgbWFuYWdlbWVudDo8L3A+DQoNCjxwIGNsYXNzPSIiPsKgPC9wPg0KDQo8 cCBjbGFzcz0iIj5wcm9jZXNzb3LCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjM8L3A+DQoNCjxw IGNsYXNzPSIiPnZlbmRvcl9pZMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCkdlbnVpbmVJbnRlbDwv cD4NCg0KPHAgY2xhc3M9IiI+Y3B1IGZhbWlsecKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY8L3A+ DQoNCjxwIGNsYXNzPSIiPm1vZGVswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDoNCjQ0PC9wPg0KDQo8cCBjbGFzcz0iIj5tb2RlbCBuYW1lwqDCoMKgwqDCoCA6DQpJbnRlbChS KSBDb3JlKFRNKSBpNyBDUFXCoMKgwqDCoMKgwqAgWCA5OTDCoCBAIDMuNDdHSHo8L3A+DQoNCjxw IGNsYXNzPSIiPnN0ZXBwaW5nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMjwvcD4NCg0K PHAgY2xhc3M9IiI+bWljcm9jb2RlwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMHgxMzwvcD4NCg0K PHAgY2xhc3M9IiI+Y3B1IE1IesKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTYwMC4wMDA8L3A+DQoNCjxwIGNsYXNzPSIiPmNhY2hl IHNpemXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjEyMjg4IEtCPC9wPg0KDQo8cCBjbGFzcz0i Ij5waHlzaWNhbCBpZMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjA8L3A+DQoNCjxwIGNsYXNzPSIi PnNpYmxpbmdzIDogMTI8L3A+DQoNCjxwIGNsYXNzPSIiPmNvcmUgaWTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDoNCjg8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBjb3Jlc8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5hcGljaWTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxNjwvcD4NCg0KPHAgY2xhc3M9IiI+ aW5pdGlhbCBhcGljaWTCoMKgwqDCoMKgwqDCoMKgIDoNCjE2PC9wPg0KDQo8cCBjbGFzcz0iIj5m cHXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVz PC9wPg0KDQo8cCBjbGFzcz0iIj5mcHVfZXhjZXB0aW9uwqAgOiB5ZXM8L3A+DQoNCjxwIGNsYXNz PSIiPmNwdWlkIGxldmVswqDCoMKgwqDCoMKgwqDCoMKgIDoNCjExPC9wPg0KDQo8cCBjbGFzcz0i Ij53cMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoN CnllczwvcD4NCg0KPHAgY2xhc3M9IiI+ZmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA6DQpmcHUgdm1lIGRlIHBzZSB0c2MgbXNyIHBhZSBtY2UgY3g4IGFw aWMgc2VwIG10cnIgcGdlIG1jYSBjbW92IHBhdCBwc2UzNiBjbGZsdXNoDQpkdHMgYWNwaSBtbXgg ZnhzciBzc2Ugc3NlMiBzcyBodCB0bSBwYmUgc3lzY2FsbCBueCBwZHBlMWdiIHJkdHNjcCBsbQ0K Y29uc3RhbnRfdHNjIGFyY2hfcGVyZm1vbiBwZWJzIGJ0cyByZXBfZ29vZCBub3BsIHh0b3BvbG9n eSBub25zdG9wX3RzYw0KYXBlcmZtcGVyZiBwbmkgcGNsbXVscWRxIGR0ZXM2NCBtb25pdG9yIGRz X2NwbCB2bXggZXN0IHRtMiBzc3NlMyBjeDE2IHh0cHIgcGRjbQ0KcGNpZCBzc2U0XzEgc3NlNF8y IHBvcGNudCBhZXMgbGFoZl9sbSBpZGEgYXJhdCBlcGIgZHRoZXJtIHRwcl9zaGFkb3cgdm5taQ0K ZmxleHByaW9yaXR5IGVwdCB2cGlkPC9wPg0KDQo8cCBjbGFzcz0iIj5ib2dvbWlwc8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KNjkyNS4yNjwvcD4NCg0KPHAgY2xhc3M9IiI+Y2xmbHVzaCBzaXpl wqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0iIj5jYWNoZV9hbGlnbm1l bnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmFkZHJl c3Mgc2l6ZXPCoMKgwqDCoCA6DQozNiBiaXRzIHBoeXNpY2FsLCA0OCBiaXRzIHZpcnR1YWw8L3A+ DQoNCjxwIGNsYXNzPSIiPnBvd2VyIG1hbmFnZW1lbnQ6PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwv cD4NCg0KPHAgY2xhc3M9IiI+cHJvY2Vzc29ywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo0PC9w Pg0KDQo8cCBjbGFzcz0iIj52ZW5kb3JfaWTCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQpHZW51aW5l SW50ZWw8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBmYW1pbHnCoMKgwqDCoMKgwqDCoMKgwqDCoCA6 DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5tb2RlbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA6DQo0NDwvcD4NCg0KPHAgY2xhc3M9IiI+bW9kZWwgbmFtZcKgwqDCoMKgwqAgOg0K SW50ZWwoUikgQ29yZShUTSkgaTcgQ1BVwqDCoMKgwqDCoMKgIFggOTkwwqAgQCAzLjQ3R0h6PC9w Pg0KDQo8cCBjbGFzcz0iIj5zdGVwcGluZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjI8 L3A+DQoNCjxwIGNsYXNzPSIiPm1pY3JvY29kZcKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjB4MTM8 L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBNSHrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjE2MDAuMDAwPC9wPg0KDQo8cCBjbGFzcz0i Ij5jYWNoZSBzaXplwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxMjI4OCBLQjwvcD4NCg0KPHAg Y2xhc3M9IiI+cGh5c2ljYWwgaWTCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQowPC9wPg0KDQo8cCBj bGFzcz0iIj5zaWJsaW5ncyA6IDEyPC9wPg0KDQo8cCBjbGFzcz0iIj5jb3JlIGlkwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo5PC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgY29y ZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjwvcD4NCg0KPHAgY2xhc3M9IiI+YXBpY2lk wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTg8L3A+DQoNCjxwIGNs YXNzPSIiPmluaXRpYWwgYXBpY2lkwqDCoMKgwqDCoMKgwqDCoCA6DQoxODwvcD4NCg0KPHAgY2xh c3M9IiI+ZnB1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDoNCnllczwvcD4NCg0KPHAgY2xhc3M9IiI+ZnB1X2V4Y2VwdGlvbsKgIDogeWVzPC9wPg0KDQo8 cCBjbGFzcz0iIj5jcHVpZCBsZXZlbMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxMTwvcD4NCg0KPHAg Y2xhc3M9IiI+d3DCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA6DQp5ZXM8L3A+DQoNCjxwIGNsYXNzPSIiPmZsYWdzwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KZnB1IHZtZSBkZSBwc2UgdHNjIG1zciBwYWUgbWNl IGN4OCBhcGljIHNlcCBtdHJyIHBnZSBtY2EgY21vdiBwYXQgcHNlMzYgY2xmbHVzaA0KZHRzIGFj cGkgbW14IGZ4c3Igc3NlIHNzZTIgc3MgaHQgdG0gcGJlIHN5c2NhbGwgbnggcGRwZTFnYiByZHRz Y3AgbG0NCmNvbnN0YW50X3RzYyBhcmNoX3BlcmZtb24gcGVicyBidHMgcmVwX2dvb2Qgbm9wbCB4 dG9wb2xvZ3kgbm9uc3RvcF90c2MNCmFwZXJmbXBlcmYgcG5pIHBjbG11bHFkcSBkdGVzNjQgbW9u aXRvciBkc19jcGwgdm14IGVzdCB0bTIgc3NzZTMgY3gxNiB4dHByIHBkY20NCnBjaWQgc3NlNF8x IHNzZTRfMiBwb3BjbnQgYWVzIGxhaGZfbG0gaWRhIGFyYXQgZXBiIGR0aGVybSB0cHJfc2hhZG93 IHZubWkNCmZsZXhwcmlvcml0eSBlcHQgdnBpZDwvcD4NCg0KPHAgY2xhc3M9IiI+Ym9nb21pcHPC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY5MjUuMjY8L3A+DQoNCjxwIGNsYXNzPSIiPmNsZmx1 c2ggc2l6ZcKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2NDwvcD4NCg0KPHAgY2xhc3M9IiI+Y2FjaGVf YWxpZ25tZW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0i Ij5hZGRyZXNzIHNpemVzwqDCoMKgwqAgOg0KMzYgYml0cyBwaHlzaWNhbCwgNDggYml0cyB2aXJ0 dWFsPC9wPg0KDQo8cCBjbGFzcz0iIj5wb3dlciBtYW5hZ2VtZW50OjwvcD4NCg0KPHAgY2xhc3M9 IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPnByb2Nlc3NvcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Og0KNTwvcD4NCg0KPHAgY2xhc3M9IiI+dmVuZG9yX2lkwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0K R2VudWluZUludGVsPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgZmFtaWx5wqDCoMKgwqDCoMKgwqDC oMKgwqAgOg0KNjwvcD4NCg0KPHAgY2xhc3M9IiI+bW9kZWzCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KNDQ8L3A+DQoNCjxwIGNsYXNzPSIiPm1vZGVsIG5hbWXCoMKgwqDC oMKgIDoNCkludGVsKFIpIENvcmUoVE0pIGk3IENQVcKgwqDCoMKgwqDCoCBYIDk5MMKgIEAgMy40 N0dIejwvcD4NCg0KPHAgY2xhc3M9IiI+c3RlcHBpbmfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA6DQoyPC9wPg0KDQo8cCBjbGFzcz0iIj5taWNyb2NvZGXCoMKgwqDCoMKgwqDCoMKgwqDCoCA6 DQoweDEzPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgTUh6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxNjAwLjAwMDwvcD4NCg0KPHAg Y2xhc3M9IiI+Y2FjaGUgc2l6ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTIyODggS0I8L3A+ DQoNCjxwIGNsYXNzPSIiPnBoeXNpY2FsIGlkwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMDwvcD4N Cg0KPHAgY2xhc3M9IiI+c2libGluZ3MgOiAxMjwvcD4NCg0KPHAgY2xhc3M9IiI+Y29yZSBpZMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTA8L3A+DQoNCjxwIGNsYXNzPSIi PmNwdSBjb3Jlc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0i Ij5hcGljaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoyMDwvcD4N Cg0KPHAgY2xhc3M9IiI+aW5pdGlhbCBhcGljaWTCoMKgwqDCoMKgwqDCoMKgIDoNCjIwPC9wPg0K DQo8cCBjbGFzcz0iIj5mcHXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgOg0KeWVzPC9wPg0KDQo8cCBjbGFzcz0iIj5mcHVfZXhjZXB0aW9uwqAgOiB5ZXM8 L3A+DQoNCjxwIGNsYXNzPSIiPmNwdWlkIGxldmVswqDCoMKgwqDCoMKgwqDCoMKgIDoNCjExPC9w Pg0KDQo8cCBjbGFzcz0iIj53cMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0KPHAgY2xhc3M9IiI+ZmxhZ3PCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQpmcHUgdm1lIGRlIHBzZSB0c2MgbXNy IHBhZSBtY2UgY3g4IGFwaWMgc2VwIG10cnIgcGdlIG1jYSBjbW92IHBhdCBwc2UzNiBjbGZsdXNo DQpkdHMgYWNwaSBtbXggZnhzciBzc2Ugc3NlMiBzcyBodCB0bSBwYmUgc3lzY2FsbCBueCBwZHBl MWdiIHJkdHNjcCBsbQ0KY29uc3RhbnRfdHNjIGFyY2hfcGVyZm1vbiBwZWJzIGJ0cyByZXBfZ29v ZCBub3BsIHh0b3BvbG9neSBub25zdG9wX3RzYw0KYXBlcmZtcGVyZiBwbmkgcGNsbXVscWRxIGR0 ZXM2NCBtb25pdG9yIGRzX2NwbCB2bXggZXN0IHRtMiBzc3NlMyBjeDE2IHh0cHIgcGRjbQ0KcGNp ZCBzc2U0XzEgc3NlNF8yIHBvcGNudCBhZXMgbGFoZl9sbSBpZGEgYXJhdCBlcGIgZHRoZXJtIHRw cl9zaGFkb3cgdm5taQ0KZmxleHByaW9yaXR5IGVwdCB2cGlkPC9wPg0KDQo8cCBjbGFzcz0iIj5i b2dvbWlwc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjkyNS4yNjwvcD4NCg0KPHAgY2xhc3M9 IiI+Y2xmbHVzaCBzaXplwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0i Ij5jYWNoZV9hbGlnbm1lbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxw IGNsYXNzPSIiPmFkZHJlc3Mgc2l6ZXPCoMKgwqDCoCA6DQozNiBiaXRzIHBoeXNpY2FsLCA0OCBi aXRzIHZpcnR1YWw8L3A+DQoNCjxwIGNsYXNzPSIiPnBvd2VyIG1hbmFnZW1lbnQ6PC9wPg0KDQo8 cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xhc3M9IiI+cHJvY2Vzc29ywqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj52ZW5kb3JfaWTCoMKgwqDCoMKgwqDCoMKg wqDCoCA6DQpHZW51aW5lSW50ZWw8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBmYW1pbHnCoMKgwqDC oMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5tb2RlbMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo0NDwvcD4NCg0KPHAgY2xhc3M9IiI+bW9kZWwgbmFt ZcKgwqDCoMKgwqAgOg0KSW50ZWwoUikgQ29yZShUTSkgaTcgQ1BVwqDCoMKgwqDCoMKgIFggOTkw wqAgQCAzLjQ3R0h6PC9wPg0KDQo8cCBjbGFzcz0iIj5zdGVwcGluZ8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDoNCjI8L3A+DQoNCjxwIGNsYXNzPSIiPm1pY3JvY29kZcKgwqDCoMKgwqDCoMKg wqDCoMKgIDoNCjB4MTM8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBNSHrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjE2MDAuMDAwPC9w Pg0KDQo8cCBjbGFzcz0iIj5jYWNoZSBzaXplwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxMjI4 OCBLQjwvcD4NCg0KPHAgY2xhc3M9IiI+cGh5c2ljYWwgaWTCoMKgwqDCoMKgwqDCoMKgwqDCoCA6 DQowPC9wPg0KDQo8cCBjbGFzcz0iIj5zaWJsaW5ncyA6IDEyPC9wPg0KDQo8cCBjbGFzcz0iIj5j b3JlIGlkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQowPC9wPg0KDQo8cCBj bGFzcz0iIj5jcHUgY29yZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjwvcD4NCg0KPHAg Y2xhc3M9IiI+YXBpY2lkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0K MTwvcD4NCg0KPHAgY2xhc3M9IiI+aW5pdGlhbCBhcGljaWTCoMKgwqDCoMKgwqDCoMKgIDoNCjE8 L3A+DQoNCjxwIGNsYXNzPSIiPmZwdcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA6DQp5ZXM8L3A+DQoNCjxwIGNsYXNzPSIiPmZwdV9leGNlcHRpb27CoCA6 IHllczwvcD4NCg0KPHAgY2xhc3M9IiI+Y3B1aWQgbGV2ZWzCoMKgwqDCoMKgwqDCoMKgwqAgOg0K MTE8L3A+DQoNCjxwIGNsYXNzPSIiPndwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVzPC9wPg0KDQo8cCBjbGFzcz0iIj5mbGFnc8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCmZwdSB2bWUgZGUgcHNlIHRz YyBtc3IgcGFlIG1jZSBjeDggYXBpYyBzZXAgbXRyciBwZ2UgbWNhIGNtb3YgcGF0IHBzZTM2IGNs Zmx1c2gNCmR0cyBhY3BpIG1teCBmeHNyIHNzZSBzc2UyIHNzIGh0IHRtIHBiZSBzeXNjYWxsIG54 IHBkcGUxZ2IgcmR0c2NwIGxtDQpjb25zdGFudF90c2MgYXJjaF9wZXJmbW9uIHBlYnMgYnRzIHJl cF9nb29kIG5vcGwgeHRvcG9sb2d5IG5vbnN0b3BfdHNjDQphcGVyZm1wZXJmIHBuaSBwY2xtdWxx ZHEgZHRlczY0IG1vbml0b3IgZHNfY3BsIHZteCBlc3QgdG0yIHNzc2UzIGN4MTYgeHRwciBwZGNt DQpwY2lkIHNzZTRfMSBzc2U0XzIgcG9wY250IGFlcyBsYWhmX2xtIGlkYSBhcmF0IGVwYiBkdGhl cm0gdHByX3NoYWRvdyB2bm1pDQpmbGV4cHJpb3JpdHkgZXB0IHZwaWQ8L3A+DQoNCjxwIGNsYXNz PSIiPmJvZ29taXBzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2OTI1LjI2PC9wPg0KDQo8cCBj bGFzcz0iIj5jbGZsdXNoIHNpemXCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxwIGNs YXNzPSIiPmNhY2hlX2FsaWdubWVudMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2NDwvcD4N Cg0KPHAgY2xhc3M9IiI+YWRkcmVzcyBzaXplc8KgwqDCoMKgIDoNCjM2IGJpdHMgcGh5c2ljYWws IDQ4IGJpdHMgdmlydHVhbDwvcD4NCg0KPHAgY2xhc3M9IiI+cG93ZXIgbWFuYWdlbWVudDo8L3A+ DQoNCjxwIGNsYXNzPSIiPsKgPC9wPg0KDQo8cCBjbGFzcz0iIj5wcm9jZXNzb3LCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDoNCjc8L3A+DQoNCjxwIGNsYXNzPSIiPnZlbmRvcl9pZMKgwqDCoMKgwqDC oMKgwqDCoMKgIDoNCkdlbnVpbmVJbnRlbDwvcD4NCg0KPHAgY2xhc3M9IiI+Y3B1IGZhbWlsecKg wqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY8L3A+DQoNCjxwIGNsYXNzPSIiPm1vZGVswqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjQ0PC9wPg0KDQo8cCBjbGFzcz0iIj5tb2Rl bCBuYW1lwqDCoMKgwqDCoCA6DQpJbnRlbChSKSBDb3JlKFRNKSBpNyBDUFXCoMKgwqDCoMKgwqAg WCA5OTDCoCBAIDMuNDdHSHo8L3A+DQoNCjxwIGNsYXNzPSIiPnN0ZXBwaW5nwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KMjwvcD4NCg0KPHAgY2xhc3M9IiI+bWljcm9jb2RlwqDCoMKgwqDC oMKgwqDCoMKgwqAgOg0KMHgxMzwvcD4NCg0KPHAgY2xhc3M9IiI+Y3B1IE1IesKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTYwMC4w MDA8L3A+DQoNCjxwIGNsYXNzPSIiPmNhY2hlIHNpemXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoN CjEyMjg4IEtCPC9wPg0KDQo8cCBjbGFzcz0iIj5waHlzaWNhbCBpZMKgwqDCoMKgwqDCoMKgwqDC oMKgIDoNCjA8L3A+DQoNCjxwIGNsYXNzPSIiPnNpYmxpbmdzIDogMTI8L3A+DQoNCjxwIGNsYXNz PSIiPmNvcmUgaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjE8L3A+DQoN CjxwIGNsYXNzPSIiPmNwdSBjb3Jlc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0K DQo8cCBjbGFzcz0iIj5hcGljaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA6DQozPC9wPg0KDQo8cCBjbGFzcz0iIj5pbml0aWFsIGFwaWNpZMKgwqDCoMKgwqDCoMKgwqAg Og0KMzwvcD4NCg0KPHAgY2xhc3M9IiI+ZnB1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0KPHAgY2xhc3M9IiI+ZnB1X2V4Y2VwdGlv bsKgIDogeWVzPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHVpZCBsZXZlbMKgwqDCoMKgwqDCoMKgwqDC oCA6DQoxMTwvcD4NCg0KPHAgY2xhc3M9IiI+d3DCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQp5ZXM8L3A+DQoNCjxwIGNsYXNzPSIiPmZsYWdzwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KZnB1IHZtZSBkZSBw c2UgdHNjIG1zciBwYWUgbWNlIGN4OCBhcGljIHNlcCBtdHJyIHBnZSBtY2EgY21vdiBwYXQgcHNl MzYgY2xmbHVzaA0KZHRzIGFjcGkgbW14IGZ4c3Igc3NlIHNzZTIgc3MgaHQgdG0gcGJlIHN5c2Nh bGwgbnggcGRwZTFnYiByZHRzY3AgbG0NCmNvbnN0YW50X3RzYyBhcmNoX3BlcmZtb24gcGVicyBi dHMgcmVwX2dvb2Qgbm9wbCB4dG9wb2xvZ3kgbm9uc3RvcF90c2MNCmFwZXJmbXBlcmYgcG5pIHBj bG11bHFkcSBkdGVzNjQgbW9uaXRvciBkc19jcGwgdm14IGVzdCB0bTIgc3NzZTMgY3gxNiB4dHBy IHBkY20NCnBjaWQgc3NlNF8xIHNzZTRfMiBwb3BjbnQgYWVzIGxhaGZfbG0gaWRhIGFyYXQgZXBi IGR0aGVybSB0cHJfc2hhZG93IHZubWkNCmZsZXhwcmlvcml0eSBlcHQgdnBpZDwvcD4NCg0KPHAg Y2xhc3M9IiI+Ym9nb21pcHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY5MjUuMjY8L3A+DQoN CjxwIGNsYXNzPSIiPmNsZmx1c2ggc2l6ZcKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2NDwvcD4NCg0K PHAgY2xhc3M9IiI+Y2FjaGVfYWxpZ25tZW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY0 PC9wPg0KDQo8cCBjbGFzcz0iIj5hZGRyZXNzIHNpemVzwqDCoMKgwqAgOg0KMzYgYml0cyBwaHlz aWNhbCwgNDggYml0cyB2aXJ0dWFsPC9wPg0KDQo8cCBjbGFzcz0iIj5wb3dlciBtYW5hZ2VtZW50 OjwvcD4NCg0KPHAgY2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPnByb2Nlc3NvcsKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgOg0KODwvcD4NCg0KPHAgY2xhc3M9IiI+dmVuZG9yX2lkwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KR2VudWluZUludGVsPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgZmFt aWx5wqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjwvcD4NCg0KPHAgY2xhc3M9IiI+bW9kZWzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNDQ8L3A+DQoNCjxwIGNsYXNzPSIi Pm1vZGVsIG5hbWXCoMKgwqDCoMKgIDoNCkludGVsKFIpIENvcmUoVE0pIGk3IENQVcKgwqDCoMKg wqDCoCBYIDk5MMKgIEAgMy40N0dIejwvcD4NCg0KPHAgY2xhc3M9IiI+c3RlcHBpbmfCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoyPC9wPg0KDQo8cCBjbGFzcz0iIj5taWNyb2NvZGXCoMKg wqDCoMKgwqDCoMKgwqDCoCA6DQoweDEzPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgTUh6wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQox NjAwLjAwMDwvcD4NCg0KPHAgY2xhc3M9IiI+Y2FjaGUgc2l6ZcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgOg0KMTIyODggS0I8L3A+DQoNCjxwIGNsYXNzPSIiPnBoeXNpY2FsIGlkwqDCoMKgwqDCoMKg wqDCoMKgwqAgOg0KMDwvcD4NCg0KPHAgY2xhc3M9IiI+c2libGluZ3MgOiAxMjwvcD4NCg0KPHAg Y2xhc3M9IiI+Y29yZSBpZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMjwv cD4NCg0KPHAgY2xhc3M9IiI+Y3B1IGNvcmVzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY8 L3A+DQoNCjxwIGNsYXNzPSIiPmFwaWNpZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDoNCjU8L3A+DQoNCjxwIGNsYXNzPSIiPmluaXRpYWwgYXBpY2lkwqDCoMKgwqDCoMKg wqDCoCA6DQo1PC9wPg0KDQo8cCBjbGFzcz0iIj5mcHXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVzPC9wPg0KDQo8cCBjbGFzcz0iIj5mcHVfZXhj ZXB0aW9uwqAgOiB5ZXM8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdWlkIGxldmVswqDCoMKgwqDCoMKg wqDCoMKgIDoNCjExPC9wPg0KDQo8cCBjbGFzcz0iIj53cMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0KPHAgY2xhc3M9IiI+Zmxh Z3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQpmcHUgdm1l IGRlIHBzZSB0c2MgbXNyIHBhZSBtY2UgY3g4IGFwaWMgc2VwIG10cnIgcGdlIG1jYSBjbW92IHBh dCBwc2UzNiBjbGZsdXNoDQpkdHMgYWNwaSBtbXggZnhzciBzc2Ugc3NlMiBzcyBodCB0bSBwYmUg c3lzY2FsbCBueCBwZHBlMWdiIHJkdHNjcCBsbQ0KY29uc3RhbnRfdHNjIGFyY2hfcGVyZm1vbiBw ZWJzIGJ0cyByZXBfZ29vZCBub3BsIHh0b3BvbG9neSBub25zdG9wX3RzYyBhcGVyZm1wZXJmDQpw bmkgcGNsbXVscWRxIGR0ZXM2NCBtb25pdG9yIGRzX2NwbCB2bXggZXN0IHRtMiBzc3NlMyBjeDE2 IHh0cHIgcGRjbSBwY2lkDQpzc2U0XzEgc3NlNF8yIHBvcGNudCBhZXMgbGFoZl9sbSBpZGEgYXJh dCBlcGIgZHRoZXJtIHRwcl9zaGFkb3cgdm5taQ0KZmxleHByaW9yaXR5IGVwdCB2cGlkPC9wPg0K DQo8cCBjbGFzcz0iIj5ib2dvbWlwc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjkyNS4yNjwv cD4NCg0KPHAgY2xhc3M9IiI+Y2xmbHVzaCBzaXplwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY0PC9w Pg0KDQo8cCBjbGFzcz0iIj5jYWNoZV9hbGlnbm1lbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Og0KNjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmFkZHJlc3Mgc2l6ZXPCoMKgwqDCoCA6DQozNiBiaXRz IHBoeXNpY2FsLCA0OCBiaXRzIHZpcnR1YWw8L3A+DQoNCjxwIGNsYXNzPSIiPnBvd2VyIG1hbmFn ZW1lbnQ6PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xhc3M9IiI+cHJvY2Vzc29y wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo5PC9wPg0KDQo8cCBjbGFzcz0iIj52ZW5kb3JfaWTC oMKgwqDCoMKgwqDCoMKgwqDCoCA6DQpHZW51aW5lSW50ZWw8L3A+DQoNCjxwIGNsYXNzPSIiPmNw dSBmYW1pbHnCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5tb2Rl bMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQo0NDwvcD4NCg0KPHAgY2xh c3M9IiI+bW9kZWwgbmFtZcKgwqDCoMKgwqAgOg0KSW50ZWwoUikgQ29yZShUTSkgaTcgQ1BVwqDC oMKgwqDCoMKgIFggOTkwwqAgQCAzLjQ3R0h6PC9wPg0KDQo8cCBjbGFzcz0iIj5zdGVwcGluZ8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjI8L3A+DQoNCjxwIGNsYXNzPSIiPm1pY3JvY29k ZcKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjB4MTM8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBNSHrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDoNCjE2MDAuMDAwPC9wPg0KDQo8cCBjbGFzcz0iIj5jYWNoZSBzaXplwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA6DQoxMjI4OCBLQjwvcD4NCg0KPHAgY2xhc3M9IiI+cGh5c2ljYWwgaWTCoMKgwqDC oMKgwqDCoMKgwqDCoCA6DQowPC9wPg0KDQo8cCBjbGFzcz0iIj5zaWJsaW5ncyA6IDEyPC9wPg0K DQo8cCBjbGFzcz0iIj5jb3JlIGlkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6 DQo4PC9wPg0KDQo8cCBjbGFzcz0iIj5jcHUgY29yZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Og0KNjwvcD4NCg0KPHAgY2xhc3M9IiI+YXBpY2lkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgOg0KMTc8L3A+DQoNCjxwIGNsYXNzPSIiPmluaXRpYWwgYXBpY2lkwqDCoMKg wqDCoMKgwqDCoCA6DQoxNzwvcD4NCg0KPHAgY2xhc3M9IiI+ZnB1wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0KPHAgY2xhc3M9IiI+ ZnB1X2V4Y2VwdGlvbsKgIDogeWVzPC9wPg0KDQo8cCBjbGFzcz0iIj5jcHVpZCBsZXZlbMKgwqDC oMKgwqDCoMKgwqDCoCA6DQoxMTwvcD4NCg0KPHAgY2xhc3M9IiI+d3DCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQp5ZXM8L3A+DQoNCjxwIGNsYXNz PSIiPmZsYWdzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0K ZnB1IHZtZSBkZSBwc2UgdHNjIG1zciBwYWUgbWNlIGN4OCBhcGljIHNlcCBtdHJyIHBnZSBtY2Eg Y21vdiBwYXQgcHNlMzYgY2xmbHVzaA0KZHRzIGFjcGkgbW14IGZ4c3Igc3NlIHNzZTIgc3MgaHQg dG0gcGJlIHN5c2NhbGwgbnggcGRwZTFnYiByZHRzY3AgbG0NCmNvbnN0YW50X3RzYyBhcmNoX3Bl cmZtb24gcGVicyBidHMgcmVwX2dvb2Qgbm9wbCB4dG9wb2xvZ3kgbm9uc3RvcF90c2MNCmFwZXJm bXBlcmYgcG5pIHBjbG11bHFkcSBkdGVzNjQgbW9uaXRvciBkc19jcGwgdm14IGVzdCB0bTIgc3Nz ZTMgY3gxNiB4dHByIHBkY20NCnBjaWQgc3NlNF8xIHNzZTRfMiBwb3BjbnQgYWVzIGxhaGZfbG0g aWRhIGFyYXQgZXBiIGR0aGVybSB0cHJfc2hhZG93IHZubWkNCmZsZXhwcmlvcml0eSBlcHQgdnBp ZDwvcD4NCg0KPHAgY2xhc3M9IiI+Ym9nb21pcHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY5 MjUuMjY8L3A+DQoNCjxwIGNsYXNzPSIiPmNsZmx1c2ggc2l6ZcKgwqDCoMKgwqDCoMKgwqDCoCA6 DQo2NDwvcD4NCg0KPHAgY2xhc3M9IiI+Y2FjaGVfYWxpZ25tZW50wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0iIj5hZGRyZXNzIHNpemVzwqDCoMKgwqAgOg0K MzYgYml0cyBwaHlzaWNhbCwgNDggYml0cyB2aXJ0dWFsPC9wPg0KDQo8cCBjbGFzcz0iIj5wb3dl ciBtYW5hZ2VtZW50OjwvcD4NCg0KPHAgY2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPnBy b2Nlc3NvcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTA8L3A+DQoNCjxwIGNsYXNzPSIiPnZl bmRvcl9pZMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCkdlbnVpbmVJbnRlbDwvcD4NCg0KPHAgY2xh c3M9IiI+Y3B1IGZhbWlsecKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjY8L3A+DQoNCjxwIGNsYXNz PSIiPm1vZGVswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjQ0PC9wPg0K DQo8cCBjbGFzcz0iIj5tb2RlbCBuYW1lwqDCoMKgwqDCoCA6DQpJbnRlbChSKSBDb3JlKFRNKSBp NyBDUFXCoMKgwqDCoMKgwqAgWCA5OTDCoCBAIDMuNDdHSHo8L3A+DQoNCjxwIGNsYXNzPSIiPnN0 ZXBwaW5nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMjwvcD4NCg0KPHAgY2xhc3M9IiI+ bWljcm9jb2RlwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMHgxMzwvcD4NCg0KPHAgY2xhc3M9IiI+ Y3B1IE1IesKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgOg0KMTYwMC4wMDA8L3A+DQoNCjxwIGNsYXNzPSIiPmNhY2hlIHNpemXCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIDoNCjEyMjg4IEtCPC9wPg0KDQo8cCBjbGFzcz0iIj5waHlzaWNhbCBp ZMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCjA8L3A+DQoNCjxwIGNsYXNzPSIiPnNpYmxpbmdzIDog MTI8L3A+DQoNCjxwIGNsYXNzPSIiPmNvcmUgaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDoNCjk8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBjb3Jlc8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5hcGljaWTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxOTwvcD4NCg0KPHAgY2xhc3M9IiI+aW5pdGlhbCBhcGlj aWTCoMKgwqDCoMKgwqDCoMKgIDoNCjE5PC9wPg0KDQo8cCBjbGFzcz0iIj5mcHXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVzPC9wPg0KDQo8cCBj bGFzcz0iIj5mcHVfZXhjZXB0aW9uwqAgOiB5ZXM8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdWlkIGxl dmVswqDCoMKgwqDCoMKgwqDCoMKgIDoNCjExPC9wPg0KDQo8cCBjbGFzcz0iIj53cMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCnllczwvcD4NCg0K PHAgY2xhc3M9IiI+ZmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA6DQpmcHUgdm1lIGRlIHBzZSB0c2MgbXNyIHBhZSBtY2UgY3g4IGFwaWMgc2VwIG10cnIg cGdlIG1jYSBjbW92IHBhdCBwc2UzNiBjbGZsdXNoDQpkdHMgYWNwaSBtbXggZnhzciBzc2Ugc3Nl MiBzcyBodCB0bSBwYmUgc3lzY2FsbCBueCBwZHBlMWdiIHJkdHNjcCBsbQ0KY29uc3RhbnRfdHNj IGFyY2hfcGVyZm1vbiBwZWJzIGJ0cyByZXBfZ29vZCBub3BsIHh0b3BvbG9neSBub25zdG9wX3Rz Yw0KYXBlcmZtcGVyZiBwbmkgcGNsbXVscWRxIGR0ZXM2NCBtb25pdG9yIGRzX2NwbCB2bXggZXN0 IHRtMiBzc3NlMyBjeDE2IHh0cHIgcGRjbQ0KcGNpZCBzc2U0XzEgc3NlNF8yIHBvcGNudCBhZXMg bGFoZl9sbSBpZGEgYXJhdCBlcGIgZHRoZXJtIHRwcl9zaGFkb3cgdm5taQ0KZmxleHByaW9yaXR5 IGVwdCB2cGlkPC9wPg0KDQo8cCBjbGFzcz0iIj5ib2dvbWlwc8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgOg0KNjkyNS4yNjwvcD4NCg0KPHAgY2xhc3M9IiI+Y2xmbHVzaCBzaXplwqDCoMKgwqDCoMKg wqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0iIj5jYWNoZV9hbGlnbm1lbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmFkZHJlc3Mgc2l6ZXPCoMKg wqDCoCA6DQozNiBiaXRzIHBoeXNpY2FsLCA0OCBiaXRzIHZpcnR1YWw8L3A+DQoNCjxwIGNsYXNz PSIiPnBvd2VyIG1hbmFnZW1lbnQ6PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xh c3M9IiI+cHJvY2Vzc29ywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoxMTwvcD4NCg0KPHAgY2xh c3M9IiI+dmVuZG9yX2lkwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KR2VudWluZUludGVsPC9wPg0K DQo8cCBjbGFzcz0iIj5jcHUgZmFtaWx5wqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjwvcD4NCg0K PHAgY2xhc3M9IiI+bW9kZWzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0K NDQ8L3A+DQoNCjxwIGNsYXNzPSIiPm1vZGVsIG5hbWXCoMKgwqDCoMKgIDoNCkludGVsKFIpIENv cmUoVE0pIGk3IENQVcKgwqDCoMKgwqDCoCBYIDk5MMKgIEAgMy40N0dIejwvcD4NCg0KPHAgY2xh c3M9IiI+c3RlcHBpbmfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoyPC9wPg0KDQo8cCBj bGFzcz0iIj5taWNyb2NvZGXCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoweDEzPC9wPg0KDQo8cCBj bGFzcz0iIj5jcHUgTUh6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA6DQoxNjAwLjAwMDwvcD4NCg0KPHAgY2xhc3M9IiI+Y2FjaGUgc2l6 ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMTIyODggS0I8L3A+DQoNCjxwIGNsYXNzPSIiPnBo eXNpY2FsIGlkwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KMDwvcD4NCg0KPHAgY2xhc3M9IiI+c2li bGluZ3MgOiAxMjwvcD4NCg0KPHAgY2xhc3M9IiI+Y29yZSBpZMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgOg0KMTA8L3A+DQoNCjxwIGNsYXNzPSIiPmNwdSBjb3Jlc8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA6DQo2PC9wPg0KDQo8cCBjbGFzcz0iIj5hcGljaWTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6DQoyMTwvcD4NCg0KPHAgY2xhc3M9IiI+aW5p dGlhbCBhcGljaWTCoMKgwqDCoMKgwqDCoMKgIDoNCjIxPC9wPg0KDQo8cCBjbGFzcz0iIj5mcHXC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KeWVzPC9w Pg0KDQo8cCBjbGFzcz0iIj5mcHVfZXhjZXB0aW9uwqAgOiB5ZXM8L3A+DQoNCjxwIGNsYXNzPSIi PmNwdWlkIGxldmVswqDCoMKgwqDCoMKgwqDCoMKgIDoNCjExPC9wPg0KDQo8cCBjbGFzcz0iIj53 cMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDoNCnll czwvcD4NCg0KPHAgY2xhc3M9IiI+ZmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA6DQpmcHUgdm1lIGRlIHBzZSB0c2MgbXNyIHBhZSBtY2UgY3g4IGFwaWMg c2VwIG10cnIgcGdlIG1jYSBjbW92IHBhdCBwc2UzNiBjbGZsdXNoDQpkdHMgYWNwaSBtbXggZnhz ciBzc2Ugc3NlMiBzcyBodCB0bSBwYmUgc3lzY2FsbCBueCBwZHBlMWdiIHJkdHNjcCBsbQ0KY29u c3RhbnRfdHNjIGFyY2hfcGVyZm1vbiBwZWJzIGJ0cyByZXBfZ29vZCBub3BsIHh0b3BvbG9neSBu b25zdG9wX3RzYw0KYXBlcmZtcGVyZiBwbmkgcGNsbXVscWRxIGR0ZXM2NCBtb25pdG9yIGRzX2Nw bCB2bXggZXN0IHRtMiBzc3NlMyBjeDE2IHh0cHIgcGRjbQ0KcGNpZCBzc2U0XzEgc3NlNF8yIHBv cGNudCBhZXMgbGFoZl9sbSBpZGEgYXJhdCBlcGIgZHRoZXJtIHRwcl9zaGFkb3cgdm5taQ0KZmxl eHByaW9yaXR5IGVwdCB2cGlkPC9wPg0KDQo8cCBjbGFzcz0iIj5ib2dvbWlwc8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgOg0KNjkyNS4yNjwvcD4NCg0KPHAgY2xhc3M9IiI+Y2xmbHVzaCBzaXplwqDC oMKgwqDCoMKgwqDCoMKgIDoNCjY0PC9wPg0KDQo8cCBjbGFzcz0iIj5jYWNoZV9hbGlnbm1lbnTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOg0KNjQ8L3A+DQoNCjxwIGNsYXNzPSIiPmFkZHJlc3Mg c2l6ZXPCoMKgwqDCoCA6DQozNiBiaXRzIHBoeXNpY2FsLCA0OCBiaXRzIHZpcnR1YWw8L3A+DQoN CjxwIGNsYXNzPSIiPnBvd2VyIG1hbmFnZW1lbnQ6PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4N Cg0KPHAgY2xhc3M9IiI+IyBjYXQgL3Byb2MvbWVtaW5mbzwvcD4NCg0KPHAgY2xhc3M9IiI+TWVt VG90YWw6wqDCoMKgwqDCoMKgDQoyNDY4MjA5MiBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+TWVtRnJl ZTrCoMKgwqDCoMKgwqDCoMKgDQoyMDQ3NzY0IGtCPC9wPg0KDQo8cCBjbGFzcz0iIj5NZW1BdmFp bGFibGU6wqDCoA0KMjA4OTcxNzIga0I8L3A+DQoNCjxwIGNsYXNzPSIiPkJ1ZmZlcnM6wqDCoMKg wqDCoMKgwqDCoA0KMzUyMTkyMCBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+Q2FjaGVkOsKgwqDCoMKg wqDCoMKgwqDCoA0KOTg2ODAwMCBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+U3dhcENhY2hlZDrCoMKg wqDCoMKgwqDCoA0KNjI1OTIga0I8L3A+DQoNCjxwIGNsYXNzPSIiPkFjdGl2ZTrCoMKgwqDCoMKg wqDCoMKgwqANCjQ4ODQ4NjQga0I8L3A+DQoNCjxwIGNsYXNzPSIiPkluYWN0aXZlOsKgwqDCoMKg wqDCoMKgDQo5NTMwMzc2IGtCPC9wPg0KDQo8cCBjbGFzcz0iIj5BY3RpdmUoYW5vbik6wqDCoMKg wqANCjYyMzc4MCBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+SW5hY3RpdmUoYW5vbik6wqDCoA0KNDI4 NDAwIGtCPC9wPg0KDQo8cCBjbGFzcz0iIj5BY3RpdmUoZmlsZSk6wqDCoMKgDQo0MjYxMDg0IGtC PC9wPg0KDQo8cCBjbGFzcz0iIj5JbmFjdGl2ZShmaWxlKTrCoA0KOTEwMTk3NiBrQjwvcD4NCg0K PHAgY2xhc3M9IiI+VW5ldmljdGFibGU6wqDCoMKgwqDCoMKgwqDCoMKgwqANCjAga0I8L3A+DQoN CjxwIGNsYXNzPSIiPk1sb2NrZWQ6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KMCBrQjwv cD4NCg0KPHAgY2xhc3M9IiI+U3dhcFRvdGFsOsKgwqDCoMKgwqANCjUwMzMxNjQ0IGtCPC9wPg0K DQo8cCBjbGFzcz0iIj5Td2FwRnJlZTrCoMKgwqDCoMKgwqANCjUwMTMzMjIwIGtCPC9wPg0KDQo8 cCBjbGFzcz0iIj5EaXJ0eTrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqANCjE2IGtCPC9w Pg0KDQo8cCBjbGFzcz0iIj5Xcml0ZWJhY2s6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgDQowIGtC PC9wPg0KDQo8cCBjbGFzcz0iIj5Bbm9uUGFnZXM6wqDCoMKgwqDCoMKgwqANCjk4MjcxNiBrQjwv cD4NCg0KPHAgY2xhc3M9IiI+TWFwcGVkOsKgwqDCoMKgwqDCoMKgwqDCoMKgDQoxNjE1MDQga0I8 L3A+DQoNCjxwIGNsYXNzPSIiPlNobWVtOsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KMjY4NjQg a0I8L3A+DQoNCjxwIGNsYXNzPSIiPlNsYWI6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KNjIxMjUz NiBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+U1JlY2xhaW1hYmxlOsKgwqDCoA0KNTczOTc1MiBrQjwv cD4NCg0KPHAgY2xhc3M9IiI+U1VucmVjbGFpbTrCoMKgwqDCoMKgwqANCjQ3Mjc4NCBrQjwvcD4N Cg0KPHAgY2xhc3M9IiI+S2VybmVsU3RhY2s6wqDCoMKgwqDCoMKgwqANCjg4OTYga0I8L3A+DQoN CjxwIGNsYXNzPSIiPlBhZ2VUYWJsZXM6wqDCoMKgwqDCoMKgwqANCjI4NDM2IGtCPC9wPg0KDQo8 cCBjbGFzcz0iIj5ORlNfVW5zdGFibGU6wqDCoMKgwqDCoMKgwqDCoMKgDQowIGtCPC9wPg0KDQo8 cCBjbGFzcz0iIj5Cb3VuY2U6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgDQowIGtCPC9w Pg0KDQo8cCBjbGFzcz0iIj5Xcml0ZWJhY2tUbXA6wqDCoMKgwqDCoMKgwqDCoMKgDQowIGtCPC9w Pg0KDQo8cCBjbGFzcz0iIj5Db21taXRMaW1pdDrCoMKgwqANCjYyNjcyNjg4IGtCPC9wPg0KDQo8 cCBjbGFzcz0iIj5Db21taXR0ZWRfQVM6wqDCoMKgDQo0MDEzODgwIGtCPC9wPg0KDQo8cCBjbGFz cz0iIj5WbWFsbG9jVG90YWw6wqDCoA0KMzQzNTk3MzgzNjcga0I8L3A+DQoNCjxwIGNsYXNzPSIi PlZtYWxsb2NVc2VkOsKgwqDCoMKgwqANCjQxMDIwMCBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+Vm1h bGxvY0NodW5rOsKgwqANCjM0MzU5MzIzNjQ0IGtCPC9wPg0KDQo8cCBjbGFzcz0iIj5IYXJkd2Fy ZUNvcnJ1cHRlZDrCoMKgwqDCoA0KMCBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+QW5vbkh1Z2VQYWdl czrCoMKgwqANCjE1MzYwMCBrQjwvcD4NCg0KPHAgY2xhc3M9IiI+SHVnZVBhZ2VzX1RvdGFsOsKg wqDCoMKgwqDCoA0KMDwvcD4NCg0KPHAgY2xhc3M9IiI+SHVnZVBhZ2VzX0ZyZWU6wqDCoMKgwqDC oMKgwqANCjA8L3A+DQoNCjxwIGNsYXNzPSIiPkh1Z2VQYWdlc19Sc3ZkOsKgwqDCoMKgwqDCoMKg DQowPC9wPg0KDQo8cCBjbGFzcz0iIj5IdWdlUGFnZXNfU3VycDrCoMKgwqDCoMKgwqDCoA0KMDwv cD4NCg0KPHAgY2xhc3M9IiI+SHVnZXBhZ2VzaXplOsKgwqDCoMKgwqDCoA0KMjA0OCBrQjwvcD4N Cg0KPHAgY2xhc3M9IiI+RGlyZWN0TWFwNGs6wqDCoMKgwqANCjQxMDk4MjQga0I8L3A+DQoNCjxw IGNsYXNzPSIiPkRpcmVjdE1hcDJNOsKgwqDCoA0KMjEwNDcyOTYga0I8L3A+DQoNCjxwIGNsYXNz PSIiPkRpcmVjdE1hcDFHOsKgwqDCoMKgDQoyMDk3MTUyIGtCPC9wPg0KDQo8cCBjbGFzcz0iIj7C oDwvcD4NCg0KPHAgY2xhc3M9IiI+IyBtb2RpbmZvIHhmczwvcD4NCg0KPHAgY2xhc3M9IiI+Zmls ZW5hbWU6wqDCoMKgwqDCoMKgDQovbGliL21vZHVsZXMvMy4xNi4wLTM2LWdlbmVyaWMva2VybmVs L2ZzL3hmcy94ZnMua288L3A+DQoNCjxwIGNsYXNzPSIiPmxpY2Vuc2U6wqDCoMKgwqDCoMKgwqAg R1BMPC9wPg0KDQo8cCBjbGFzcz0iIj5kZXNjcmlwdGlvbjrCoMKgwqAgU0dJDQpYRlMgd2l0aCBB Q0xzLCBzZWN1cml0eSBhdHRyaWJ1dGVzLCByZWFsdGltZSwgbGFyZ2UgYmxvY2svaW5vZGUgbnVt YmVycywgbm8NCmRlYnVnIGVuYWJsZWQ8L3A+DQoNCjxwIGNsYXNzPSIiPmF1dGhvcjrCoMKgwqDC oMKgwqDCoMKgDQpTaWxpY29uIEdyYXBoaWNzLCBJbmMuPC9wPg0KDQo8cCBjbGFzcz0iIj5hbGlh czrCoMKgwqDCoMKgwqDCoMKgwqANCmZzLXhmczwvcD4NCg0KPHAgY2xhc3M9IiI+c3JjdmVyc2lv bjrCoMKgwqDCoA0KOEQ2RTVGRDY2QTBDNjJGM0NGQ0Q0N0I8L3A+DQoNCjxwIGNsYXNzPSIiPmRl cGVuZHM6wqDCoMKgwqDCoMKgwqANCmxpYmNyYzMyYzwvcD4NCg0KPHAgY2xhc3M9IiI+aW50cmVl OsKgwqDCoMKgwqDCoMKgwqAgWTwvcD4NCg0KPHAgY2xhc3M9IiI+dmVybWFnaWM6wqDCoMKgwqDC oMKgDQozLjE2LjAtMzYtZ2VuZXJpYyBTTVAgbW9kX3VubG9hZCBtb2R2ZXJzaW9uczwvcD4NCg0K PHAgY2xhc3M9IiI+c2lnbmVyOsKgwqDCoMKgwqDCoMKgwqANCk1hZ3JhdGhlYTogR2xhY2llciBz aWduaW5nIGtleTwvcD4NCg0KPHAgY2xhc3M9IiI+c2lnX2tleTrCoMKgwqDCoMKgwqDCoA0KQUM6 RjY6OTE6ODE6Mzk6QUQ6M0Y6Q0E6Q0M6MDE6QzI6NkE6QjI6NDk6MDk6RDU6OTA6Nzk6QTU6Nzg8 L3A+DQoNCjxwIGNsYXNzPSIiPnNpZ19oYXNoYWxnbzrCoMKgDQpzaGE1MTI8L3A+DQoNCjxwIGNs YXNzPSIiPsKgPC9wPjxwIGNsYXNzPSIiPiMgZHBrZyAtbCBcKnhmc1wqPC9wPjxwIGNsYXNzPSIi PkRlc2lyZWQ9VW5rbm93bi9JbnN0YWxsL1JlbW92ZS9QdXJnZS9Ib2xkPC9wPjxwIGNsYXNzPSIi PnwgU3RhdHVzPU5vdC9JbnN0L0NvbmYtZmlsZXMvVW5wYWNrZWQvaGFsRi1jb25mL0hhbGYtaW5z dC90cmlnLWFXYWl0L1RyaWctcGVuZDwvcD48cCBjbGFzcz0iIj58LyBFcnI/PShub25lKS9SZWlu c3QtcmVxdWlyZWQgKFN0YXR1cyxFcnI6IHVwcGVyY2FzZT1iYWQpPC9wPjxwIGNsYXNzPSIiPnx8 LyBOYW1lIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVmVyc2lvbiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBBcmNoaXRlY3R1cmUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBEZXNj cmlwdGlvbjwvcD48cCBjbGFzcz0iIj4rKystPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvcD48cCBjbGFzcz0iIj51biDCoHhmcyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAmbHQ7bm9uZSZndDsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAmbHQ7bm9uZSZndDsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAobm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlKTwvcD48cCBjbGFzcz0iIj51biDCoHhmc2R1bXAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgJmx0O25vbmUmZ3Q7IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgJmx0O25vbmUmZ3Q7IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KG5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSk8L3A+PHAgY2xhc3M9IiI+PC9wPjxwIGNsYXNzPSIi PmlpIMKgeGZzcHJvZ3MgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAzLjEuOXVidW50dTIgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBhbWQ2NCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBV dGlsaXRpZXMgZm9yIG1hbmFnaW5nIHRoZSBYRlMgZmlsZXN5c3RlbTwvcD48ZGl2Pjxicj48L2Rp dj4NCg0KPHAgY2xhc3M9IiI+IyB4ZnNfaW5mbyAvcmFpZDwvcD4NCg0KPHAgY2xhc3M9IiI+bWV0 YS1kYXRhPS9kZXYvbWQxcDPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXNpemU9MjU2wqDCoMKg IGFnY291bnQ9MzIsIGFnc2l6ZT02Nzg2OTk1MiBibGtzPC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKg wqDCoMKgwqDCoMKgID3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzZWN0c3o9NDA5NsKgIGF0dHI9MjwvcD4NCg0KPHAgY2xhc3M9IiI+ZGF0YcKgwqDCoMKgID3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBic2l6ZT00MDk2wqDC oCBibG9ja3M9MjE3MTgzNjE2MCwgaW1heHBjdD01PC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKgwqDC oMKgwqDCoMKgID3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dW5pdD0xMjjCoMKgwqAgc3dpZHRoPTM4NCBibGtzPC9wPg0KDQo8cCBjbGFzcz0iIj5uYW1pbmfC oMKgID12ZXJzaW9uDQoywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnNpemU9NDA5NsKgwqAg YXNjaWktY2k9MDwvcD4NCg0KPHAgY2xhc3M9IiI+bG9nwqDCoMKgwqDCoA0KPWludGVybmFswqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KYnNpemU9NDA5NsKgwqAgYmxvY2tzPTUyMTcyOCwN CnZlcnNpb249MjwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoMKgwqDCoMKgwqDCoCA9wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VjdHN6PTQwOTbCoCBzdW5pdD0x IGJsa3MsIGxhenktY291bnQ9MTwvcD4NCg0KPHAgY2xhc3M9IiI+cmVhbHRpbWUgPW5vbmXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXh0c3o9NDA5NsKgwqAgYmxvY2tzPTAs IHJ0ZXh0ZW50cz0wPC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xhc3M9IiI+IyBt ZGFkbSAtLW1pc2MgLUQgL2Rldi9tZDA8L3A+DQoNCjxwIGNsYXNzPSIiPi9kZXYvbWQwOjwvcD4N Cg0KPHAgY2xhc3M9IiI+wqDCoMKgwqDCoMKgwqAgVmVyc2lvbiA6DQoxLjI8L3A+DQoNCjxwIGNs YXNzPSIiPsKgIENyZWF0aW9uIFRpbWUgOg0KV2VkIE9jdMKgIDIgMTQ6MTc6NTYgMjAxMzwvcD4N Cg0KPHAgY2xhc3M9IiI+wqDCoMKgwqAgUmFpZCBMZXZlbCA6DQpyYWlkMTwvcD4NCg0KPHAgY2xh c3M9IiI+wqDCoMKgwqAgQXJyYXkgU2l6ZSA6DQo5NzE1MiAoOTQuODkgTWlCIDk5LjQ4IE1CKTwv cD4NCg0KPHAgY2xhc3M9IiI+wqAgVXNlZCBEZXYgU2l6ZSA6DQo5NzE1MiAoOTQuODkgTWlCIDk5 LjQ4IE1CKTwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoCBSYWlkIERldmljZXMgOiA0PC9wPg0KDQo8 cCBjbGFzcz0iIj7CoCBUb3RhbCBEZXZpY2VzIDogNDwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoMKg IFBlcnNpc3RlbmNlIDoNClN1cGVyYmxvY2sgaXMgcGVyc2lzdGVudDwvcD4NCg0KPHAgY2xhc3M9 IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPsKgwqDCoCBVcGRhdGUgVGltZSA6DQpTdW4gSnVuIDE0 IDExOjIyOjU5IDIwMTU8L3A+DQoNCjxwIGNsYXNzPSIiPsKgwqDCoMKgwqDCoMKgwqDCoCBTdGF0 ZSA6DQpjbGVhbjwvcD4NCg0KPHAgY2xhc3M9IiI+wqBBY3RpdmUgRGV2aWNlcyA6IDQ8L3A+DQoN CjxwIGNsYXNzPSIiPldvcmtpbmcgRGV2aWNlcyA6IDQ8L3A+DQoNCjxwIGNsYXNzPSIiPsKgRmFp bGVkIERldmljZXMgOiAwPC9wPg0KDQo8cCBjbGFzcz0iIj7CoCBTcGFyZSBEZXZpY2VzIDogMDwv cD4NCg0KPHAgY2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPsKgwqDCoMKgwqDCoMKgwqDC oMKgIE5hbWUgOg0KTklMaW5EZXY6bWQwwqAgKGxvY2FsIHRvIGhvc3QgTklMaW5EZXYpPC9wPg0K DQo8cCBjbGFzcz0iIj7CoMKgwqDCoMKgwqDCoMKgwqDCoCBVVUlEIDoNCjk4MGViNzYzOjcxYzVj MzQ1OjJjMThjNDgyOjdjN2U2ZTg5PC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKgwqDCoMKgwqDCoMKg IEV2ZW50cyA6DQozMzM8L3A+DQoNCjxwIGNsYXNzPSIiPsKgPC9wPg0KDQo8cCBjbGFzcz0iIj7C oMKgwqAgTnVtYmVywqDCoCBNYWpvcsKgwqANCk1pbm9ywqDCoCBSYWlkRGV2aWNlIFN0YXRlPC9w Pg0KDQo8cCBjbGFzcz0iIj7CoMKgwqDCoMKgwqAgNcKgwqDCoMKgwqDCoCA4wqDCoMKgwqDCoMKg wqANCjLCoMKgwqDCoMKgwqDCoCAwIMKgwqDCoMKgwqBhY3RpdmUgc3luY8KgwqAgL2Rldi9zZGEy PC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKgwqDCoMKgwqAgMcKgwqDCoMKgwqDCoCA4wqDCoMKgwqDC oMKgDQoxOMKgwqDCoMKgwqDCoMKgIDHCoMKgwqDCoMKgIGFjdGl2ZSBzeW5jwqDCoCAvZGV2L3Nk YjI8L3A+DQoNCjxwIGNsYXNzPSIiPsKgwqDCoMKgwqDCoCA0wqDCoMKgwqDCoMKgIDjCoMKgwqDC oMKgwqANCjM0wqDCoMKgwqDCoMKgwqAgMsKgwqDCoMKgwqAgYWN0aXZlIHN5bmPCoMKgIC9kZXYv c2RjMjwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoMKgwqDCoMKgIDPCoMKgwqDCoMKgwqAgOMKgwqDC oMKgwqDCoA0KNTDCoMKgwqDCoMKgwqDCoCAzwqDCoMKgwqDCoCBhY3RpdmUgc3luY8KgwqAgL2Rl di9zZGQyPC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xhc3M9IiI+IyBtZGFkbSAt LW1pc2MgLUQgL2Rldi9tZDE8L3A+DQoNCjxwIGNsYXNzPSIiPi9kZXYvbWQxOjwvcD4NCg0KPHAg Y2xhc3M9IiI+wqDCoMKgwqDCoMKgwqAgVmVyc2lvbiA6DQoxLjI8L3A+DQoNCjxwIGNsYXNzPSIi PsKgIENyZWF0aW9uIFRpbWUgOg0KVGh1IEZlYiAyNiAxNDo1MzoxOCAyMDE1PC9wPg0KDQo8cCBj bGFzcz0iIj7CoMKgwqDCoCBSYWlkIExldmVsIDoNCnJhaWQ1PC9wPg0KDQo8cCBjbGFzcz0iIj7C oMKgwqDCoCBBcnJheSBTaXplIDoNCjg3OTAxMDcxMzYgKDgzODIuOTAgR2lCIDkwMDEuMDcgR0Ip PC9wPg0KDQo8cCBjbGFzcz0iIj7CoCBVc2VkIERldiBTaXplIDoNCjI5MzAwMzU3MTIgKDI3OTQu MzAgR2lCIDMwMDAuMzYgR0IpPC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKgIFJhaWQgRGV2aWNlcyA6 IDQ8L3A+DQoNCjxwIGNsYXNzPSIiPsKgIFRvdGFsIERldmljZXMgOiA0PC9wPg0KDQo8cCBjbGFz cz0iIj7CoMKgwqAgUGVyc2lzdGVuY2UgOg0KU3VwZXJibG9jayBpcyBwZXJzaXN0ZW50PC9wPg0K DQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xhc3M9IiI+wqAgSW50ZW50IEJpdG1hcCA6DQpJ bnRlcm5hbDwvcD4NCg0KPHAgY2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNzPSIiPsKgwqDCoCBV cGRhdGUgVGltZSA6DQpXZWQgSnVswqAgMSAxNzoxMzo0NSAyMDE1PC9wPg0KDQo8cCBjbGFzcz0i Ij7CoMKgwqDCoMKgwqDCoMKgwqAgU3RhdGUgOg0KY2xlYW48L3A+DQoNCjxwIGNsYXNzPSIiPsKg QWN0aXZlIERldmljZXMgOiA0PC9wPg0KDQo8cCBjbGFzcz0iIj5Xb3JraW5nIERldmljZXMgOiA0 PC9wPg0KDQo8cCBjbGFzcz0iIj7CoEZhaWxlZCBEZXZpY2VzIDogMDwvcD4NCg0KPHAgY2xhc3M9 IiI+wqAgU3BhcmUgRGV2aWNlcyA6IDA8L3A+DQoNCjxwIGNsYXNzPSIiPsKgPC9wPg0KDQo8cCBj bGFzcz0iIj7CoMKgwqDCoMKgwqDCoMKgIExheW91dCA6DQpsZWZ0LXN5bW1ldHJpYzwvcD4NCg0K PHAgY2xhc3M9IiI+wqDCoMKgwqAgQ2h1bmsgU2l6ZSA6DQo1MTJLPC9wPg0KDQo8cCBjbGFzcz0i Ij7CoDwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoMKgwqDCoMKgwqDCoMKgwqAgTmFtZSA6DQpzeXNy ZXNjY2Q6MTwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoMKgwqDCoMKgwqDCoMKgwqAgVVVJRCA6DQo5 YmI0NDY0NTo3MTdlMmU4ZDowZDUwMWRkYTo2NmVjYmEyYjwvcD4NCg0KPHAgY2xhc3M9IiI+wqDC oMKgwqDCoMKgwqDCoCBFdmVudHMgOg0KMzg1MzY8L3A+DQoNCjxwIGNsYXNzPSIiPsKgPC9wPg0K DQo8cCBjbGFzcz0iIj7CoMKgwqAgTnVtYmVywqDCoCBNYWpvcsKgwqANCk1pbm9ywqDCoCBSYWlk RGV2aWNlIFN0YXRlPC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKgwqDCoMKgwqAgNcKgwqDCoMKgwqDC oCA4wqDCoMKgwqDCoMKgwqANCjPCoMKgwqDCoMKgwqDCoCAwwqDCoMKgwqDCoCBhY3RpdmUgc3lu Y8KgwqAgL2Rldi9zZGEzPC9wPg0KDQo8cCBjbGFzcz0iIj7CoMKgwqDCoMKgwqAgMcKgwqDCoMKg IMKgwqA4wqDCoMKgwqDCoMKgDQoxOcKgwqDCoMKgwqDCoMKgIDHCoMKgwqDCoMKgIGFjdGl2ZSBz eW5jwqDCoCAvZGV2L3NkYjM8L3A+DQoNCjxwIGNsYXNzPSIiPsKgwqDCoMKgwqDCoCAywqDCoMKg wqDCoMKgIDjCoMKgwqDCoMKgwqANCjM1wqDCoMKgwqDCoMKgwqAgMsKgwqDCoMKgwqAgYWN0aXZl IHN5bmPCoMKgIC9kZXYvc2RjMzwvcD4NCg0KPHAgY2xhc3M9IiI+wqDCoMKgwqDCoMKgIDTCoMKg wqDCoMKgwqAgOMKgwqDCoMKgwqDCoA0KNTHCoMKgwqDCoMKgwqDCoCAzwqDCoMKgwqDCoCBhY3Rp dmUgc3luY8KgwqAgL2Rldi9zZGQzPC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xh c3M9IiI+IyBwYXJ0ZWQgLXMgL2Rldi9tZDEgdW5pdCBiIHByaW50PC9wPg0KDQo8cCBjbGFzcz0i Ij5Nb2RlbDogTGludXggU29mdHdhcmUgUkFJRCBBcnJheSAobWQpPC9wPg0KDQo8cCBjbGFzcz0i Ij5EaXNrIC9kZXYvbWQxOiA5MDAxMDY5NzA3MjY0QjwvcD4NCg0KPHAgY2xhc3M9IiI+U2VjdG9y IHNpemUgKGxvZ2ljYWwvcGh5c2ljYWwpOiA1MTJCLzQwOTZCPC9wPg0KDQo8cCBjbGFzcz0iIj5Q YXJ0aXRpb24gVGFibGU6IGdwdDwvcD4NCg0KPHAgY2xhc3M9IiI+wqA8L3A+DQoNCjxwIGNsYXNz PSIiPk51bWJlcsKgIFN0YXJ0wqDCoMKgwqDCoMKgwqDCoMKgIEVuZMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBTaXplwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGaWxlIHN5c3RlbcKgwqDCoMKgIE5h bWXCoA0KRmxhZ3M8L3A+DQoNCjxwIGNsYXNzPSIiPsKgMcKgwqDCoMKgwqAgMTA0ODU3NkLCoMKg wqDCoMKgwqAgNTM2ODgxMzk3NzVCwqDCoMKgIDUzNjg3MDkxMjAwQsKgwqDCoCBleHQ0wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByb290PC9wPg0KDQo8cCBjbGFzcz0iIj7CoDLCoMKgwqDCoMKgIDUz Njg4MTM5Nzc2QsKgwqAgMTA1MjI3NzQ3MzI3QsKgwqAgNTE1Mzk2MDc1NTJCwqDCoMKgIGxpbnV4 LXN3YXAodjEpwqAgc3dhcDwvcD4NCg0KPHAgY2xhc3M9IiI+wqAzwqDCoMKgwqDCoCAxMDUyMjc3 NDczMjhCwqAgOTAwMTA2ODY1ODY4N0LCoCA4ODk1ODQwOTExMzYwQsKgIHhmc8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkYXRhPC9wPg0KDQo8cCBjbGFzcz0iIj7CoDwvcD4NCg0KPHAgY2xhc3M9 IiI+ZnJvbSAvcHJvYy9tb3VudHM6PC9wPg0KDQo8cCBjbGFzcz0iIj4vZGV2L21kMCAvYm9vdCBl eHQ0IHJ3LG5vYXRpbWUsc3RyaXBlPTQsZGF0YT1vcmRlcmVkIDAgMDwvcD4NCg0KPHAgY2xhc3M9 IiI+L2Rldi9tZDFwMyAvcmFpZCB4ZnMgcncsbm9hdGltZSxhdHRyMixpbm9kZTY0LHN1bml0PTEw MjQsc3dpZHRoPTMwNzIsbm9xdW90YQ0KMCAwPC9wPjxwIGNsYXNzPSIiPjxicj48L3A+PHAgY2xh c3M9IiI+V2hhdCBjb3VsZCBiZSB0aGUgcHJvYmxlbT88L3A+PHAgY2xhc3M9IiI+SSBoYXZlIGFu b3RoZXIgbWRhZG0gcmFpZDUgYXJyYXkgdGhhdCB1c2VkIHRvIGhhdmUgWEZTIGFuZCBnYXZlIHRo ZSBzYW1lIGVycm9ycy4gSSB1c2UgaXQgZm9yIGJhY2t1cCBhbmQgbm90aWNlZCB0aGF0IGVhY2gg YmFja3VwIGZyb20gdGhlIG1haW4gYXJyYXkgdG8gdGhlIHNlY29uZCBvbmUgdXNlZCB0byB0YWtl IGEgbG9uZyB0aW1lIGFuZCBnYXZlIHRoZXNlIGVycm9ycy4gSSBzd2l0Y2hlZCBmcm9tIFhGUyB0 byBleHQ0IGFuZCBub3Qgb25seSBkaWQgdGhlIGVycm9ycyBnbyBhd2F5IChvYnZpc291bHkuLi4p IGJ1dCB0aGUgYmFja3VwIHRpbWUgd2VudCBkb3duIGZyb20gYWxtb3N0IDIzIGhvdXJzIHRvIDEg aG91ciE8L3A+PHAgY2xhc3M9IiI+PGJyPjwvcD48cCBjbGFzcz0iIj5UaGFua3MsPC9wPjxwIGNs YXNzPSIiPlRhbDwvcD48L2Rpdj4NCg== --001a11c368cc90cf0a0519d133dd-- From bfoster@redhat.com Wed Jul 1 10:13:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E84DD7FA7 for ; Wed, 1 Jul 2015 10:13:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D890E8F8052 for ; Wed, 1 Jul 2015 08:13:04 -0700 (PDT) X-ASG-Debug-ID: 1435763583-04cb6c2dc91ae780001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id o1OyfL797kyO4D15 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 08:13:04 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 75623AEF07; Wed, 1 Jul 2015 15:13:03 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t61FD3YM012260; Wed, 1 Jul 2015 11:13:03 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id EAAFE124B3C; Wed, 1 Jul 2015 11:13:01 -0400 (EDT) Date: Wed, 1 Jul 2015 11:13:01 -0400 From: Brian Foster To: Tal Maoz Cc: xfs@oss.sgi.com Subject: Re: Kernel oops when using XFS Message-ID: <20150701151301.GA31994@bfoster.bfoster> X-ASG-Orig-Subj: Re: Kernel oops when using XFS References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1435763584 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 01, 2015 at 05:32:48PM +0300, Tal Maoz wrote: > Hey all, > > > > I’m using XFS on a Ubuntu 14.04.1 x84_64 machine and getting kernel oops > messages from the XFS module almost daily. > > My machine is a 6-core Core-i7 with 24GB RAM, an mdadm software raid5 over > 4 disks with an XFS fs on it. > > Here is a typical error message: > > > > [Wed Jul 1 07:14:30 2015] XFS (md1p3): Access to block zero in inode > 70952984 start_block: 0 start_off: 0 blkcnt: 5 extent-state: 0 lastx: 8 > > [Wed Jul 1 07:14:30 2015] XFS (md1p3): xfs_dabuf_map: bno 8388608 dir: > inode 70952984 > > [Wed Jul 1 07:14:30 2015] XFS (md1p3): [00] br_startoff 8388608 > br_startblock -2 br_blockcount 1 br_state 0 > > [Wed Jul 1 07:14:30 2015] XFS (md1p3): Internal error xfs_da_do_buf(1) at > line 2521 of file > /build/buildd/linux-lts-utopic-3.16.0/fs/xfs/xfs_da_btree.c. Caller > xfs_da_read_buf+0x50/0xf0 [xfs] > This is a distro kernel so we don't exactly know what is or isn't included for upstream patches. The error is likely the check in xfs_dabuf_map() finding a hole when not expected. > [Wed Jul 1 07:14:30 2015] CPU: 11 PID: 12649 Comm: updatedb.mlocat > Tainted: P B OE 3.16.0-36-generic #48~14.04.1-Ubuntu > > [Wed Jul 1 07:14:30 2015] Hardware name: MSI MS-7666/Big Bang-XPower > (MS-7666), BIOS V1.6 03/29/2011 > > [Wed Jul 1 07:14:30 2015] ffff88018fa1fa40 ffff88018fa1f9e0 > ffffffff81764a5f ffff8806199f0000 > > [Wed Jul 1 07:14:30 2015] ffff88018fa1f9f8 ffffffffc076e1eb > ffffffffc07a27e0 ffff88018fa1fa88 > > [Wed Jul 1 07:14:30 2015] ffffffffc07a186f ffff880100000000 > ffff880598a36c00 ffff88018fa1fac0 > > [Wed Jul 1 07:14:30 2015] Call Trace: > > [Wed Jul 1 07:14:30 2015] [] dump_stack+0x45/0x56 > > [Wed Jul 1 07:14:30 2015] [] xfs_error_report+0x3b/0x40 > [xfs] > > [Wed Jul 1 07:14:30 2015] [] ? > xfs_da_read_buf+0x50/0xf0 [xfs] > > [Wed Jul 1 07:14:30 2015] [] > xfs_dabuf_map.constprop.16+0x16f/0x370 [xfs] > > [Wed Jul 1 07:14:30 2015] [] xfs_da_read_buf+0x50/0xf0 > [xfs] > > [Wed Jul 1 07:14:30 2015] [] ? > __ext4_handle_dirty_metadata+0x8b/0x200 > The stack does not appear to be reliable (and the line wrapping makes it difficult to read, fwiw). Note the ext4 frame above in the middle of an XFS trace. You might need to run with a debug variant kernel package to get a reliable stack. ... > > > > I have gathered some information that I hope can help figure out what the > problem is. FYI, this sort of problem also happened when I had an Ubuntu > 12.04 installed with the same raid configuration: > The kernel version and what additional patches might be included from upstream is more relevant than the distro release (I have no idea what kernel runs an Ubuntu 12.04 box). > > > > ... > > What could be the problem? > > I have another mdadm raid5 array that used to have XFS and gave the same > errors. I use it for backup and noticed that each backup from the main > array to the second one used to take a long time and gave these errors. I > switched from XFS to ext4 and not only did the errors go away > (obvisouly...) but the backup time went down from almost 23 hours to 1 hour! > There has been one recent instance of an error similar to above that I'm aware of, but it's just a guess since I don't know what's in your kernel and we don't have an actual stacktrace from the error. If you can determine whether your kernel has the following patch: xfs: xfs_attr_inactive leaves inconsistent attr fork state behind ... without this one: xfs: don't truncate attribute extents if no extents exist ... you might need to include the latter or revert to a kernel prior to the former being introduced. Specifically, these introduced and subsequently fixed a regression that could leave inode extended attribute forks in a weird state. On some tests, I recall seeing xfs_dabuf_map() errors on inode reclaim as a side effect. Also, have you run 'xfs_repair -n' to see if anything is wrong on-disk? Brian > > Thanks, > > Tal > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jtulak@redhat.com Wed Jul 1 11:01:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C6CFE7F51 for ; Wed, 1 Jul 2015 11:01:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A64BA8F8035 for ; Wed, 1 Jul 2015 09:01:05 -0700 (PDT) X-ASG-Debug-ID: 1435766463-04cb6c2dca1af9a0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 8XeGeJxXD0qWuA8l (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 09:01:04 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 7A6858E680; Wed, 1 Jul 2015 16:01:03 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (dhcp-1-112.brq.redhat.com [10.34.1.112]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t61G111l003741; Wed, 1 Jul 2015 12:01:02 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: sandeen@redhat.com, hch@infradead.org Subject: [PATCH] xfsprogs: blkid is now mandatory Date: Wed, 1 Jul 2015 18:01:01 +0200 X-ASG-Orig-Subj: [PATCH] xfsprogs: blkid is now mandatory Message-Id: <1435766461-30961-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1435766464 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Because blkid is here for a long time, I hereby propose a patch for removing support for NOT having blkid. The current support through set of #ifdef is prone to errors like making a patch just in one of the branches, and according to a recent talk between Christoph and Eric, it is not necessary to keep it supported. Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is not defined. It makes blkid required for compilation. Signed-off-by: Jan Tulak --- Makefile | 5 ---- configure.ac | 6 +---- doc/INSTALL | 44 ------------------------------------ include/builddefs.in | 1 - libdisk/Makefile | 4 ---- m4/package_blkid.m4 | 7 +++--- mkfs/Makefile | 21 ++++------------- mkfs/xfs_mkfs.c | 64 ---------------------------------------------------- 8 files changed, 10 insertions(+), 142 deletions(-) diff --git a/Makefile b/Makefile index d04f853..973bd42 100644 --- a/Makefile +++ b/Makefile @@ -66,11 +66,6 @@ io: libxcmd libhandle quota: libxcmd repair: libxlog - -ifneq ($(ENABLE_BLKID), yes) -mkfs: libdisk -endif - ifeq ($(HAVE_BUILDDEFS), yes) include $(BUILDRULES) else diff --git a/configure.ac b/configure.ac index ae17c68..108556b 100644 --- a/configure.ac +++ b/configure.ac @@ -37,10 +37,6 @@ AC_ARG_ENABLE(termcap, test $enable_termcap = yes && libtermcap="-ltermcap",) AC_SUBST(libtermcap) -# AC_HAVE_BLKID_TOPO below wil find the library & check for topo support -AC_ARG_ENABLE(blkid, -[ --enable-blkid=[yes/no] Enable block device id library [default=yes]],, - enable_blkid=yes) AC_ARG_ENABLE(lib64, [ --enable-lib64=[yes/no] Enable lib64 support [default=yes]],, @@ -111,7 +107,7 @@ AC_HAVE_FALLOCATE AC_HAVE_FIEMAP AC_HAVE_PREADV AC_HAVE_SYNC_FILE_RANGE -AC_HAVE_BLKID_TOPO($enable_blkid) +AC_HAVE_BLKID_TOPO(yes) AC_HAVE_READDIR AC_CHECK_SIZEOF([long]) diff --git a/doc/INSTALL b/doc/INSTALL index ba3472b..ae8b64e 100644 --- a/doc/INSTALL +++ b/doc/INSTALL @@ -48,50 +48,6 @@ Linux Instructions before running make or Makepkgs. -Mac OS X Instructions -===================== - -0. Note: since there is no XFS implementation on Mac OS X, you are - severely limited in what you can do. mkfs.xfs(8), xfs_db(8) and - xfs_repair(8) are the only functional tools on this platform, as - they do not interact with the XFS kernel code at all. Still, it - can be useful to have access to these utilities from Mac OS X in - a dual boot configuration, for example. - -1. Configure, build and install the package - - The xfsprogs package uses autoconf/configure and expects a GNU build - environment (your platform must at least have both autoconf, make, - and glibtool). - - You will also need to have built and installed the UUID library which - is provided by the e2fsprogs source package. - - Building libuuid: - - [download; unzip/untar e2fsprogs; cd e2fsprogs] - $ ./configure --prefix=/usr --mandir=/usr/share/man - $ make lib/ext2fs/ext2_types.h - $ cd lib/uuid - $ make - $ su root - # make install - [verify that you now have a /usr/lib/libuuid.a] - - Building xfsprogs: - - [firstly set these environment variables to these values] - TAR=/usr/bin/gnutar - LIBTOOL=/usr/bin/glibtool - INSTALL_GROUP=wheel - LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no" - - $ make - $ su root - # make install - [and optionally, for the development libraries and headers] - # make install-dev - IRIX Instructions ================= diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..e3a546f 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -89,7 +89,6 @@ ENABLE_SHARED = @enable_shared@ ENABLE_GETTEXT = @enable_gettext@ ENABLE_EDITLINE = @enable_editline@ ENABLE_READLINE = @enable_readline@ -ENABLE_BLKID = @enable_blkid@ HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ diff --git a/libdisk/Makefile b/libdisk/Makefile index b058a9f..bbb3c8c 100644 --- a/libdisk/Makefile +++ b/libdisk/Makefile @@ -20,11 +20,7 @@ else LSRCFILES = $(LINUX_DRIVERS) endif -ifneq ($(ENABLE_BLKID), yes) -default: ltdepend $(LTLIBRARY) -else default: -endif include $(BUILDRULES) diff --git a/m4/package_blkid.m4 b/m4/package_blkid.m4 index 44ca2cc..363142c 100644 --- a/m4/package_blkid.m4 +++ b/m4/package_blkid.m4 @@ -11,9 +11,10 @@ AC_DEFUN([AC_HAVE_BLKID_TOPO], if test $ac_cv_func_blkid_probe_get_topology = yes; then libblkid="-lblkid" else - libblkd="" - enable_blkid="no" - AC_SUBST(enable_blkid) + echo + echo 'FATAL ERROR: could not find a valid BLKID header.' + echo 'Install the Block device ID development package.' + exit 1 fi fi AC_SUBST(libblkid) diff --git a/mkfs/Makefile b/mkfs/Makefile index fd1f615..6de2da4 100644 --- a/mkfs/Makefile +++ b/mkfs/Makefile @@ -11,15 +11,7 @@ FSTYP = fstyp HFILES = xfs_mkfs.h CFILES = maxtrres.c proto.c xfs_mkfs.c -ifeq ($(ENABLE_BLKID),yes) -LLDLIBS += $(LIBBLKID) -CFLAGS += -DENABLE_BLKID -else -LLDLIBS += $(LIBDISK) -LTDEPENDENCIES += $(LIBDISK) -endif - -LLDLIBS += $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) +LLDLIBS += $(LIBBLKID) $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES += $(LIBXFS) LLDFLAGS = -static-libtool-libs @@ -28,15 +20,12 @@ LDIRT = $(FSTYP) default: depend $(LTCOMMAND) -ifneq ($(ENABLE_BLKID),yes) -default: $(FSTYP) -endif - include $(BUILDRULES) -$(FSTYP): - @echo " [CC] $@" - $(Q)$(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) +# remove too with !enable_blkid? +#$(FSTYP): +# @echo " [CC] $@" +# $(Q)$(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) install: default $(INSTALL) -m 755 -d $(PKG_ROOT_SBIN_DIR) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 83f7749..ddbb509 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -18,12 +18,7 @@ #include #include -#ifdef ENABLE_BLKID #include -#else -#include -#include -#endif #include "xfs_mkfs.h" /* @@ -297,7 +292,6 @@ calc_stripe_factors( } } -#ifdef ENABLE_BLKID /* * Check for existing filesystem or partition table on device. * Returns: @@ -498,64 +492,6 @@ static void get_topology( &lsectorsize, &psectorsize, force_overwrite); } } -#else /* ENABLE_BLKID */ -static int -check_overwrite( - char *device) -{ - char *type; - - if (device && *device) { - if ((type = fstype(device)) != NULL) { - fprintf(stderr, - _("%s: %s appears to contain an existing " - "filesystem (%s).\n"), progname, device, type); - return 1; - } - if ((type = pttype(device)) != NULL) { - fprintf(stderr, - _("%s: %s appears to contain a partition " - "table (%s).\n"), progname, device, type); - return 1; - } - } - return 0; -} - -static void get_topology( - libxfs_init_t *xi, - struct fs_topology *ft, - int force_overwrite) -{ - - char *dfile = xi->volname ? xi->volname : xi->dname; - int bsz = BBSIZE; - - if (!xi->disfile) { - int fd; - long long dummy; - - get_subvol_stripe_wrapper(dfile, SVTYPE_DATA, - &ft->dsunit, &ft->dswidth, &ft->sectoralign); - fd = open(dfile, O_RDONLY); - /* If this fails we just fall back to BBSIZE */ - if (fd >= 0) { - platform_findsizes(dfile, fd, &dummy, &bsz); - close(fd); - } - } - - ft->lsectorsize = bsz; - ft->psectorsize = bsz; - - if (xi->rtname && !xi->risfile) { - int dummy1; - - get_subvol_stripe_wrapper(dfile, SVTYPE_RT, &dummy1, - &ft->rtswidth, &dummy1); - } -} -#endif /* ENABLE_BLKID */ static void fixup_log_stripe_unit( -- 2.4.3 From sasnett_karen@asdk12.org Wed Jul 1 12:51:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_FRT_CONTACT autolearn=unavailable version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 49B817FAD for ; Wed, 1 Jul 2015 12:51:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AE6B7AC002 for ; Wed, 1 Jul 2015 10:50:56 -0700 (PDT) X-ASG-Debug-ID: 1435773051-04cbb06d171a63e0001-NocioJ Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bbn0104.outbound.protection.outlook.com [157.56.111.104]) by cuda.sgi.com with ESMTP id FdR06v4arN4uxETg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 10:50:51 -0700 (PDT) X-Barracuda-Envelope-From: sasnett_karen@asdk12.org X-Barracuda-Apparent-Source-IP: 157.56.111.104 Received: from BLUPR02CA052.namprd02.prod.outlook.com (10.160.23.170) by CY1PR0201MB1547.namprd02.prod.outlook.com (10.163.139.26) with Microsoft SMTP Server (TLS) id 15.1.195.15; Wed, 1 Jul 2015 17:50:48 +0000 Received: from BY2FFO11FD032.protection.gbl (2a01:111:f400:7c0c::196) by BLUPR02CA052.outlook.office365.com (2a01:111:e400:8ad::42) with Microsoft SMTP Server (TLS) id 15.1.201.16 via Frontend Transport; Wed, 1 Jul 2015 17:50:48 +0000 Authentication-Results: spf=pass (sender IP is 74.114.80.19) smtp.mailfrom=asdk12.org; gmx.ch; dkim=none (message not signed) header.d=none; Received-SPF: Pass (protection.outlook.com: domain of asdk12.org designates 74.114.80.19 as permitted sender) receiver=protection.outlook.com; client-ip=74.114.80.19; helo=mail2.asdk12.org; Received: from mail2.asdk12.org (74.114.80.19) by BY2FFO11FD032.mail.protection.outlook.com (10.1.14.210) with Microsoft SMTP Server id 15.1.201.10 via Frontend Transport; Wed, 1 Jul 2015 17:50:41 +0000 X-AuditID: 0a141681-f79a76d000007f00-b1-55942870b792 Received: from ITWEBMAIL05.asdk12.org (itwebmail05.asdk12.org [10.20.23.120]) by mail2.asdk12.org (mail.asdk12.org) with SMTP id 38.B9.32512.07824955; Wed, 1 Jul 2015 10:50:40 -0700 (PDT) To: undisclosed-recipients:; Received: from ITEXCH01.asdk12.org ([fe80::8d12:4bc5:4406:b45b]) by ITWEBMAIL05.asdk12.org ([::1]) with mapi id 14.03.0224.002; Wed, 1 Jul 2015 09:50:39 -0800 From: Sasnett_Karen Subject: Thread-Index: AdC0JnEkjxntq/mkTFuWDxqUvHVOUg== X-ASG-Orig-Subj: Date: Wed, 1 Jul 2015 17:50:39 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.20.22.117] Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA02SbUxTVxjHPeeee2/tNLniC2duiYYtZm5aX6Lm0RE2Y2JuNjJNpvugJluj DVRQSEEkuiV3IlSpFR2l02ItgqACrWjRFKtIeRGBpFStSiC8SCFaIHVqXQnbZC3lA99+Of/n 9z/Ph0fGxJi5xTL1wUyV5qAyNY6TE/mC2OyV6V8Ydq7u864AXTANWop0LExM2jF4dO8w3M5p wPA6cA9B16vrPFQ7RjhwDL4gEBxqRzB2V8vA2LWHBAK+cwgsXZUc1P57G8OFsjYOHv39moGA NR6sQSMD5qpSHprf5LPgfWsgEAoMEBjVrYP6lgcMSBfD88drjmE4f7WBB/+JbMh3x0Nd6xUM DU4JwbDXyYO98D0Dx4bLCJwqr0TgKRjHMBo0YhixNXNQNHycgT90FQRq9IkwUPERnH5iJHD2 mZuDgPsVC38263gw9zzH4PW8wSA57DzcyC0Jt1kfY3BONPMw4CpGIPn/w9Bb5uAglPeSgHNc H97UYOGg71E3Cy5XClT7XBwYLRRy7Uu/bUVie8tzIvY7r/Firc3GioVDN7DoLqjjxKd6HxG7 XWNYlAxaLPbdK2fF4D9vkVhge8eK5eYqXuzSNzLiqTorI9aZenlx8uoZfvvmXfL4fapUdZZK syrhF3myZbCQpNcy2f1tA7yExnE+mi2jwjrqnuzgoryIevquh1kuixHqEbV1FpFIsED4lJqL fWw0KEX05HgTHwk4QUFLenummuYLMlrvuhhmWVhQ0LyytMgzET6nl/7yMRGeK3xHnz2+w0YY hT8LtVdPqYwQS7uHLNMLCfTy3U4mygup3/eBjfJSOvHSOT2voF1FBi7KX9GKS6PT/fNo2/kh cgbFmGbUmmYophmKaYZSgkglWqjOPKBUpyYdXr1WoczYl7JmrSJNk3QTTZ34ot8dqMc6vxF9 IiNxsXPNxhM7YoQkZaYqRaVKV2l+1hxKVWU0IiybvVhCc7YJtxI6Qsqcc9KPhdtql/fnNX32 Yq+917qlc+v6j5eoT2/ycDWGLUe2b1XsuTJCDcuqfPK83R9+yrmgbzo0i+mo2d2q17w/vNHy QyU7Z17oSI+tlCTvsRi+0R7YnGvxJ/x201u+aWNx4smvv98PG7IGJTWHV1T5Z2kTj2p/Hb2f FUcykpVrvmQ0Gcr/Abi+0pewAwAA X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD032;1:etYvjbdN00Rc7ZSOnNPHV5iQG+C8NpizX8rXb4NKg0/d3upWn5vWWNMfqwFOUTX/dydVHsxCRAM9jv/fCCj3Kn7OSbDwp4kizpQFlQh2tmbG0YizMwJYSSDgYSq/7xXpJMoNcUKu/E8AK2NkkvYss4CUYWUaj+a23LHn3P1QQMXpbhY3GJy/iyrlgdzDEf/+e9OGLzEplUNcKrezj8WOGulkg9v1kl+mY/JiNXFX+yIKWuA7YaTtyNd/pqx+P5G67XMeg5MWZuSgLJcUQH1JHGz+BpdbSywsPE2HDD0HptbhTve5QZdDt8h3JJo0SRTQ+WlrVIqurS7th4iFY2nK7w== X-Forefront-Antispam-Report: CIP:74.114.80.19;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6039001)(6009001)(2980300002)(438002)(189002)(199003)(23756003)(109986003)(15843345004)(46102003)(25636003)(2900100001)(77156002)(2930100002)(62966003)(2920100001)(50466002)(19580405001)(19580395003)(5250100002)(5406001)(106466001)(102836002)(53416004)(92566002)(5003600100002)(881003)(47776003)(325944007)(54356999)(86372001)(50986999)(87936001)(86362001)(5001970100001)(189998001)(55846006)(107886002)(110136002)(2656002)(16796002)(33656002)(79076002)(7059030)(54266012)(5416002)(4001450100001)(15877035004);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0201MB1547;H:mail2.asdk12.org;FPR:;SPF:Pass;MLV:nov;MX:1;A:1;PTR:mail4.asdk12.org;LANG:de; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0201MB1547;2:yg5hO3ttfy/WBZcqcahDImWf/9oMZVZFobv4PjWFoKyvuC0p/vhufaRwP67Gnf0a;3:l7aRTjnw4C5vZep6ReHain8n2srPfvwX6IAY4IcJBsalE1Wynyk64cNcRBvXc23RDyEboT/9x9VYtJMKxPNEocaQkZlg98/ES3xBNhJ8bH3dSs2p1Dkzww2QtfGpSlPBsWJQNMMCf8VEKoY8v/ww32HO6FA0YtN1qxKbF+hr/yAZjo/BCWMFS6OmaB7KbCKaO/IgZ4LUmh9j3uNtm/DImF8X+I0z0zjhLae+cuaUk68=;20:gXIDOkcgzn3M3A9p6gvPMlCl5tPuUpkHtAC3CLfhmQ0hQi5rh0JZXwG3BX0qkzA3JGdQkl3IygAWhQaBwZaTfZQ6xyjsYVl9xd0bJ8VJ3Byj4NFYsTzMLxeb99bEn3Cc1qwJImc6yKQnxAfyRmdaDJtiVhQYvfr5BdeddN4RRx4NkvF6F0HxE2eVD5urxHVsL58fUnGY96YZjTUUaZLKerQGuINAJOpqEjwUHiGmm97XeUER11oNEXzRfsK9Sxxc;4:x8ozJocoa3p0KY/uP9UBzbpnq9ovn2QEsUSFbJGhzmgXPTam25jgRcxfCNTJ5lOorpkM5Oumfop+sUFjEWMmqduyWD+grdxmOhW9sjqp7W7vcoPJS9WdnQZuAnGU86dswY7shEbnCQT1mvmwuzvGDOhmyUQ0RGuM7d1qejjZJS8RCvLT/IZ7Fp3/XLpv7UEtW2GuSb/FP8lhzNM3YfQbUJATsDaM3ZghT4l1fQic4DvgYyPRYfert77tzz1gEA6KduvWDz48YYUHMnObqoQjTqhngwX0IsUjG1rPsQEQ1NM= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0201MB1547; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:CY1PR0201MB1547;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0201MB1547; X-Forefront-PRVS: 0624A2429E X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1;CY1PR0201MB1547;23:YrsNqI23ZAw05vpF+hzmmy/fuDPTgA1Y2sC40?= =?iso-8859-1?Q?wqEgquhM20TR6GJGFkSYu7BfxcVkkRKyDvYX4YC43Kckz3nO4VT+8zC7F/?= =?iso-8859-1?Q?mI5A5Cn4kq1Mp3dG3npLJBz+BobSF8QjwGqoOgLeWP8tKkRRZRb3K73T98?= =?iso-8859-1?Q?L8PtPPrkKPgzStxsXlZZxfaJjWj/71hUxwd0RqYUgy1dRvdVVFtqdVm00W?= =?iso-8859-1?Q?PXg32m9Ea+KVd7KMUd68CQwKx+nT5r7WP45XJWDmV2Bxg+yaNto1fHDH/m?= =?iso-8859-1?Q?3HWT/vU2GzGKjXqNa5fB2msSrICzayWyNutTVvdJmG1VwY1O3pL59JIiXt?= =?iso-8859-1?Q?ATZAOAx2yggsaIESwPNeKN44ExcB8gcZv8KGEEbGIncv2X4+DP83Gwf97L?= =?iso-8859-1?Q?LrOF5Im7Y4dXYdVoeavyVYeNzcpY8oEOqeMD+0htUhG2oUV2oM1R8SifBO?= =?iso-8859-1?Q?tzWAshLdmWhPN1tZFGXrECd7ONwdSe2coUQN9kMYzw9vbgt2OhxcV8th68?= =?iso-8859-1?Q?rzObVz1WtlUPlAOgH09nhqUK0GJLbZpJ3mPqsATW0M0CboJjijtTp0+dEU?= =?iso-8859-1?Q?tL3RxCeGaJYN8qBAk1WLNEnhudiFoCQ01VMv3xgw6ZIFW4MjJrADT5rtNU?= =?iso-8859-1?Q?4OoLaJLziJSHMtbKWKZFZn75LW/KPcMo9NTYm/ePMxmNsoLqQnXBALsAr2?= =?iso-8859-1?Q?sL8gGMepUVW5VQSZYFdi1f9IrSfS6gsUO4BM1CnSI1Tb5rOPeJpZM6BTHw?= =?iso-8859-1?Q?opWR4A1lMiluKAbhDxmRCS0Wi65XBsG7TSlWPliG55v7k/weoI+IESPr/O?= =?iso-8859-1?Q?w5H6YZzChg3veVlz41Svvu/6KEpDyQp26NUxTG4m8WqGLGKJkchFq5Ci2z?= =?iso-8859-1?Q?WGuDiK8H5u9bRByD4mJAQpdIiWF36Q5UHXFuun5l/bi4o0Y5ko/Y83sdpo?= =?iso-8859-1?Q?Fv46+TTEsR6pPeYx0ZcNX6Ts/hekB95e9wAVVpWp/jc0GKHmHbZUNI2iX4?= =?iso-8859-1?Q?Pk7wMMD55ZE/wlXkTFBYRsnL/rdSksmgb8AM7gjwdnBVkfKrWg1DLLH4b6?= =?iso-8859-1?Q?1+8Zs+h6X9V+ICbJZazah8PpdSWAkPe8EL4P6HoX+9QOTGnyHWWfA1w7LG?= =?iso-8859-1?Q?yBI6OiEfXBDxqlnPVQKNxrmQYQN6WrDBcFd3cgVOADnuCpfNDEAUQaB5NB?= =?iso-8859-1?Q?fYRETPPYlTepldJATVpm5rKlSKCLj8MKvELxYtf10pdQqFKpt6ru0x7oAZ?= =?iso-8859-1?Q?F6SaNs4pAmWp37KqTiUHDhrz9yk1pn0ER/Ws7Jjog=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0201MB1547;5:OK+yQ3VzKfzxx9bV8pIrNGwpDO9etjPHuEcLER1BZkUM8uwlaIHw5xcY36ic7rU8IDOk1dQFea/oY6IfCcwo5uj2H0hN7FQywHfiJvkEvpFrak5N0NtZN0pR+laqJeU6gZ2sSJWOqivN+5UDLTuK0Q==;24:H3gCias4CPRH7YgPxBCblRF2R3+4qSBlDR+gkUviIGzkhQUESyC7FOjUdGikbmLrSEXViRG9YPCC26c7+eYq4B9+Y+HRJXVRpJSAXLhLorQ=;20:yxBeoGJs++zHOl+7pQ8t+fNDfw9nG3o6yTXx7WqpKntpXED0raZSJlFJHLWfVYN0Z6jj47MHcMb8Ty9v6F2L6A== X-OriginatorOrg: asdk12.org X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2015 17:50:41.2327 (UTC) X-MS-Exchange-CrossTenant-Id: 036ce601-e95a-4e46-a3bd-6b742ed4bb35 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=036ce601-e95a-4e46-a3bd-6b742ed4bb35;Ip=[74.114.80.19];Helo=[mail2.asdk12.org] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0201MB1547 X-Barracuda-Connect: mail-bn1bbn0104.outbound.protection.outlook.com[157.56.111.104] X-Barracuda-Start-Time: 1435773051 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.80 X-Barracuda-Spam-Status: No, SCORE=1.80 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA620a, MISSING_SUBJECT, MISSING_SUBJECT_2, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20362 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 MISSING_SUBJECT Missing Subject: header 0.50 BSF_SC0_SA620a Custom Rule SA620a 1.28 MISSING_SUBJECT_2 Missing Subject: header Haben Sie einen Investor brauchen? Haben Sie gesch=E4ftliche oder pers=F6nliche Darlehen ben=F6tigen? Wir geben Darlehen an eine nat=FCrliche Person und Unternehmen bei 3% Zinse= n j=E4hrlich. Weitere Informationen Kontaktieren Sie uns per E-Mail: omfcre= ditspa@hotmail.com HINWEIS: Leiten Sie Ihre Antwort nur an diese E-Mail: omfcreditspa@hotmail= .com From darrick.wong@oracle.com Wed Jul 1 17:52:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 266517FA1 for ; Wed, 1 Jul 2015 17:52:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C91D88F8037 for ; Wed, 1 Jul 2015 15:52:22 -0700 (PDT) X-ASG-Debug-ID: 1435791137-04bdf0078700840001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id UynSgGeMNvXhFwMg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 15:52:17 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t61MqFZm018583 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 1 Jul 2015 22:52:15 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t61MqFd2005476 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 1 Jul 2015 22:52:15 GMT Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t61MqFNE014106; Wed, 1 Jul 2015 22:52:15 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 Jul 2015 15:52:15 -0700 Date: Wed, 1 Jul 2015 15:52:13 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 01/14] xfs: create a per-AG btree to track reference counts Message-ID: <20150701225213.GA10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 01/14] xfs: create a per-AG btree to track reference counts References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625233916.4992.12808.stgit@birch.djwong.org> <20150701001306.GP22807@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701001306.GP22807@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1435791137 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20374 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Wed, Jul 01, 2015 at 10:13:06AM +1000, Dave Chinner wrote: > On Thu, Jun 25, 2015 at 04:39:16PM -0700, Darrick J. Wong wrote: > > Create a per-AG btree to track the reference counts of physical blocks > > to support reflink. > > Few things from a quick glance... > > > --- a/fs/xfs/libxfs/xfs_alloc.c > > +++ b/fs/xfs/libxfs/xfs_alloc.c > > @@ -54,6 +54,8 @@ xfs_extlen_t > > xfs_prealloc_blocks( > > struct xfs_mount *mp) > > { > > + if (xfs_sb_version_hasreflink(&mp->m_sb)) > > + return XFS_RL_BLOCK(mp) + 1; > > Should introduce the sb version stuff as a separate patch perhaps > with the basic infrastructure defines (see how I did the first rmap > btree patch). Ok. > > @@ -1117,6 +1118,9 @@ xfs_btree_set_refs( > > case XFS_BTNUM_RMAP: > > xfs_buf_set_ref(bp, XFS_RMAP_BTREE_REF); > > break; > > + case XFS_BTNUM_RL: > > Probably better to call it XFS_BTNUM_REFLINK I was thinking about renaming the whole thing to 'refcount', i.e. XFS_BTNUM_REFCOUNT since it /is/ a btree of reference counts. > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > > index 48ab2b1..a3f8661 100644 > > --- a/fs/xfs/libxfs/xfs_btree.h > > +++ b/fs/xfs/libxfs/xfs_btree.h > > @@ -43,6 +43,7 @@ union xfs_btree_key { > > xfs_alloc_key_t alloc; > > struct xfs_inobt_key inobt; > > struct xfs_rmap_key rmap; > > + xfs_reflink_key_t reflink; > > No new typedefs. struct xfs_reflink_key... > > (only say this once, but applies many times ;) Yeah, sorry about that. > > diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h > > index 9cff517..e4954ab 100644 > > --- a/fs/xfs/libxfs/xfs_format.h > > +++ b/fs/xfs/libxfs/xfs_format.h > > @@ -446,9 +446,11 @@ xfs_sb_has_compat_feature( > > > > #define XFS_SB_FEAT_RO_COMPAT_FINOBT (1 << 0) /* free inode btree */ > > #define XFS_SB_FEAT_RO_COMPAT_RMAPBT (1 << 1) /* reverse map btree */ > > +#define XFS_SB_FEAT_RO_COMPAT_REFLINK (1 << 2) /* reflink btree */ > > #define XFS_SB_FEAT_RO_COMPAT_ALL \ > > (XFS_SB_FEAT_RO_COMPAT_FINOBT | \ > > - XFS_SB_FEAT_RO_COMPAT_RMAPBT) > > + XFS_SB_FEAT_RO_COMPAT_RMAPBT | \ > > + XFS_SB_FEAT_RO_COMPAT_REFLINK) > > The XFS_SB_FEAT_RO_COMPAT_REFLINK flag shoul dbe added as a separate > patch and put last in the series so it is only enabled once > everything is complete. What if I define XFS_SB_FEAT_RO_COMPAT_REFLINK at the beginning but omit it from the XFS_SB_FEAT_RO_COMPAT_ALL definition until the final patch? That should prohibit anyone from using the half-baked feature during a bisect. > > #define XFS_SB_FEAT_RO_COMPAT_UNKNOWN ~XFS_SB_FEAT_RO_COMPAT_ALL > > static inline bool > > xfs_sb_has_ro_compat_feature( > > @@ -522,6 +524,12 @@ static inline bool xfs_sb_version_hasrmapbt(struct xfs_sb *sbp) > > (sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_RMAPBT); > > } > > > > +static inline int xfs_sb_version_hasreflink(xfs_sb_t *sbp) > > bool. > > > @@ -1338,6 +1349,50 @@ typedef __be32 xfs_rmap_ptr_t; > > XFS_IBT_BLOCK(mp) + 1) > > > > /* > > + * reflink Btree format definitions > > + * > > + */ > > +#define XFS_RLBT_CRC_MAGIC 0x524C4233 /* 'RLB3' */ > > #define XFS_RMAP_CRC_MAGIC 0x524d4233 /* 'RMB3' */ > > Only one bit difference in the magic numbers, which means they are > too similar. "RFL3" might be better or maybe "R3FL"... "RFC3" ? > > +/* > > + * Data record/key structure > > + */ > > +typedef struct xfs_reflink_rec { > > + __be32 rr_startblock; /* starting block number */ > > + __be32 rr_blockcount; /* count of blocks */ > > + __be32 rr_nlinks; /* number of inodes linked here */ > > +} xfs_reflink_rec_t; > > + > > +typedef struct xfs_reflink_key { > > + __be32 rr_startblock; /* starting block number */ > > +} xfs_reflink_key_t; > > + > > +typedef struct xfs_reflink_rec_incore { > > + xfs_agblock_t rr_startblock; /* starting block number */ > > + xfs_extlen_t rr_blockcount; /* count of free blocks */ > > + xfs_nlink_t rr_nlinks; /* number of inodes linked here */ > > +} xfs_reflink_rec_incore_t; > > We have being using "irec" as shorthand for "in-core record". i.e: > struct xfs_reflink_irec. Noted. > (kill typedefs) > > > + > > +/* > > + * When a block hits MAXRLCOUNT references, it becomes permanently > > + * stuck in CoW mode, because who knows how many times it's really > > + * referenced. > > + */ > > +#define MAXRLCOUNT ((xfs_nlink_t)~0U) > > +#define MAXRLEXTLEN ((xfs_extlen_t)~0U) > > I'd suggest that if we hit the maximum count, we just abort the > reflink operation. > > +/* btree pointer type */ > > +typedef __be32 xfs_reflink_ptr_t; > > + > > +#define XFS_RL_BLOCK(mp) \ > > + (xfs_sb_version_hasrmapbt(&((mp)->m_sb)) ? \ > > + XFS_RMAP_BLOCK(mp) + 1 : \ > > + (xfs_sb_version_hasfinobt(&((mp)->m_sb)) ? \ > > + XFS_FIBT_BLOCK(mp) + 1 : \ > > + XFS_IBT_BLOCK(mp) + 1)) > > That's getting unwieldy. It's large enough for a function.... Ok. > > +#ifdef REFLINK_DEBUG > > +# define dbg_printk(f, a...) do {printk(KERN_ERR f, ## a); } while (0) > > +#else > > +# define dbg_printk(f, a...) > > +#endif > > xfs_debug() is your friend. > > > +#define CHECK_AG_NUMBER(mp, agno) \ > > + do { \ > > + ASSERT((agno) != NULLAGNUMBER); \ > > + ASSERT((agno) < (mp)->m_sb.sb_agcount); \ > > + } while(0); > > Ugh. Used once, just open code. > > > +#define CHECK_AG_EXTENT(mp, agbno, len) \ > > + do { \ > > + ASSERT((agbno) != NULLAGBLOCK); \ > > + ASSERT((len) > 0); \ > > + ASSERT((unsigned long long)(agbno) + (len) <= \ > > + (mp)->m_sb.sb_agblocks); \ > > + } while(0); > > These are really used in places where corruption checks are > warranted, or the extent has already been checked.... > > > +#define XFS_WANT_CORRUPTED_RLEXT_GOTO(mp, have, agbno, len, nr, label) \ > > + do { \ > > + XFS_WANT_CORRUPTED_GOTO((mp), (have) == 1, label); \ > > + XFS_WANT_CORRUPTED_GOTO((mp), (len) > 0, label); \ > > + XFS_WANT_CORRUPTED_GOTO((mp), (nr) >= 2, label); \ > > + XFS_WANT_CORRUPTED_GOTO((mp), (unsigned long long)(agbno) + \ > > + (len) <= (mp)->m_sb.sb_agblocks, label); \ > > + } while(0); > > Unused. > > > + > > +STATIC int > > +xfs_reflinkbt_alloc_block( > > + struct xfs_btree_cur *cur, > > + union xfs_btree_ptr *start, > > + union xfs_btree_ptr *new, > > + int *stat) > > +{ > > + int error; > > + xfs_agblock_t bno; > > + > > + XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); > > + > > + /* Allocate the new block from the freelist. If we can't, give up. */ > > + error = xfs_alloc_get_freelist(cur->bc_tp, cur->bc_private.a.agbp, > > + &bno, 1); > > + if (error) { > > + XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); > > + return error; > > + } > > Why does the reflink btree use the free list? Why can't it use > block allocation like the BMBT tree? I'm confused about the intended usage of the AGFL -- the XFS FS structure doc says that it's for growing the free space btrees and can't be used for anything else, but the rmap btree uses it. Originally it /did/ use xfs_alloc_vextent(), though it won't be difficult to revert. > > > +/* > > + * Allocate a new reflink btree cursor. > > + */ > > +struct xfs_btree_cur * /* new reflink btree cursor */ > > +xfs_reflinkbt_init_cursor( > > + struct xfs_mount *mp, /* file system mount point */ > > + struct xfs_trans *tp, /* transaction pointer */ > > + struct xfs_buf *agbp, /* buffer for agf structure */ > > + xfs_agnumber_t agno) /* allocation group number */ > > No real need for these comments on the variables. They are redundant > as the code documents what they are just fine. I was playing monkey-see monkey-do. Some of the other functions had commented args. :) > > > +{ > > + struct xfs_agf *agf = XFS_BUF_TO_AGF(agbp); > > + struct xfs_btree_cur *cur; > > + > > + CHECK_AG_NUMBER(mp, agno); > > + cur = kmem_zone_zalloc(xfs_btree_cur_zone, KM_SLEEP); > > + > > + cur->bc_tp = tp; > > + cur->bc_mp = mp; > > + cur->bc_btnum = XFS_BTNUM_RL; > > + cur->bc_blocklog = mp->m_sb.sb_blocklog; > > + cur->bc_ops = &xfs_reflinkbt_ops; > > + > > + cur->bc_nlevels = be32_to_cpu(agf->agf_reflink_level); > > + > > + cur->bc_private.a.agbp = agbp; > > + cur->bc_private.a.agno = agno; > > + > > + if (xfs_sb_version_hascrc(&mp->m_sb)) > > + cur->bc_flags |= XFS_BTREE_CRC_BLOCKS; > > Can be set unconditionally. > > The next set of functions normally go into a different file. i.e the > "xfs_foo_btree.c" file contains the functions required by the > generic btree abstraction to implement the "foo" btree format. The > file "xfs_foo.c" then contains the code/logic that provides the > external foo API, manages the information inthe foo btree, and calls > the generic btree functions to manage the btree. This logic isn't > present in the patch, so really it shoul dbe added by the patch that > starts implementing the reflink API.... Ok, I'll split this stuff out into smaller files. > > +/* > > + * Get the data from the pointed-to record. > > + */ > > +int /* error */ > > +xfs_reflink_get_rec( > > + struct xfs_btree_cur *cur, /* btree cursor */ > > + xfs_agblock_t *bno, /* output: starting block of extent */ > > + xfs_extlen_t *len, /* output: length of extent */ > > + xfs_nlink_t *nlink, /* output: number of links */ > > + int *stat) /* output: success/failure */ > > +{ > > + union xfs_btree_rec *rec; > > + int error; > > + > > + error = xfs_btree_get_rec(cur, &rec, stat); > > + if (!error && *stat == 1) { > > + CHECK_AG_EXTENT(cur->bc_mp, > > + be32_to_cpu(rec->reflink.rr_startblock), > > + be32_to_cpu(rec->reflink.rr_blockcount)); > > + *bno = be32_to_cpu(rec->reflink.rr_startblock); > > + *len = be32_to_cpu(rec->reflink.rr_blockcount); > > + *nlink = be32_to_cpu(rec->reflink.rr_nlinks); > > + } > > + return error; > > if (error || !*stat) > return error; > ..... > return 0; > > > + error = xfs_reflink_get_rec(cur, &bno, &len, &nr, &x); > > + if (error) > > + return error; > > + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, x == 1, error0); > > + error = xfs_btree_delete(cur, i); > > + if (error) > > + return error; > > + error = xfs_reflink_lookup_ge(cur, bno, &x); > > +error0: > > New code should use sane jump labels. e.g. "out_error" is a pretty > standard jump label name for this... > > > diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h > > index 88efbb4..d1de74e 100644 > > --- a/fs/xfs/libxfs/xfs_shared.h > > +++ b/fs/xfs/libxfs/xfs_shared.h > > @@ -216,6 +216,7 @@ int xfs_log_calc_minimum_size(struct xfs_mount *); > > #define XFS_INO_REF 2 > > #define XFS_ATTR_BTREE_REF 1 > > #define XFS_DQUOT_REF 1 > > +#define XFS_REFLINK_BTREE_REF 1 > > whitespace. > > > @@ -315,6 +317,9 @@ typedef struct xfs_perag { > > /* for rcu-safe freeing */ > > struct rcu_head rcu_head; > > int pagb_count; /* pagb slots in use */ > > + > > + /* reflink */ > > + __uint8_t pagf_reflink_level; > > May as well just make it the same as what is on disk (i.e. > uint32_t). > > > +++ b/fs/xfs/xfs_stats.c > > @@ -61,6 +61,7 @@ static int xfs_stat_proc_show(struct seq_file *m, void *v) > > { "ibt2", XFSSTAT_END_IBT_V2 }, > > { "fibt2", XFSSTAT_END_FIBT_V2 }, > > { "rmapbt", XFSSTAT_END_RMAP_V2 }, > > + { "rlbt2", XFSSTAT_END_RLBT_V2 }, > > "reflinkbt". No need for the "2", as there is only one set of > reflink btree stats. Ok, thanks for the review! --D > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Wed Jul 1 17:55:54 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CB7DF7FA3 for ; Wed, 1 Jul 2015 17:55:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5C9A0AC005 for ; Wed, 1 Jul 2015 15:55:54 -0700 (PDT) X-ASG-Debug-ID: 1435791349-04cbb050ce00b60001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id ae60YDgbxvAqcr5z for ; Wed, 01 Jul 2015 15:55:50 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DjBgA3b5RV/96zLHlbgxFUX4JRqDoGiXmKHIV6AgIBAQKBVk0BAQEBAQGBC4QjAQEEOhwjEAgDDgoJJQ8FJQMhE4guzRsBAQgCAR8YhgSFLoUGB4QrBYcFjQuEXYcDgX+WRiZjgyksMYJIAQEB Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Jul 2015 08:25:48 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZAQum-0004qa-1x; Thu, 02 Jul 2015 08:55:36 +1000 Date: Thu, 2 Jul 2015 08:55:36 +1000 From: Dave Chinner To: Jan Tulak Cc: xfs@oss.sgi.com, hch@infradead.org, sandeen@redhat.com Subject: Re: [PATCH] xfsprogs: blkid is now mandatory Message-ID: <20150701225535.GT22807@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: blkid is now mandatory References: <1435766461-30961-1-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1435766461-30961-1-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1435791349 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20374 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 01, 2015 at 06:01:01PM +0200, Jan Tulak wrote: > Because blkid is here for a long time, I hereby propose a patch for removing support > for NOT having blkid. The current support through set of #ifdef is prone to errors like > making a patch just in one of the branches, and according to a recent talk between > Christoph and Eric, it is not necessary to keep it supported. > > Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is not defined. > It makes blkid required for compilation. > > Signed-off-by: Jan Tulak > --- > Makefile | 5 ---- > configure.ac | 6 +---- > doc/INSTALL | 44 ------------------------------------ > include/builddefs.in | 1 - > libdisk/Makefile | 4 ---- > m4/package_blkid.m4 | 7 +++--- > mkfs/Makefile | 21 ++++------------- > mkfs/xfs_mkfs.c | 64 ---------------------------------------------------- > 8 files changed, 10 insertions(+), 142 deletions(-) Given that only mkfs.xfs uses libdisk, which is now not linked to any binary, shouldn't libdisk/ be removed completely? Cheers, Dave. -- Dave Chinner david@fromorbit.com From darrick.wong@oracle.com Wed Jul 1 17:59:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3E4387FAA for ; Wed, 1 Jul 2015 17:59:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2A5408F8035 for ; Wed, 1 Jul 2015 15:59:51 -0700 (PDT) X-ASG-Debug-ID: 1435791589-04cbb050d100c00001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id jld5izU1JKTt7Wzo (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 15:59:49 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t61Mxmeo005974 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 1 Jul 2015 22:59:48 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t61Mxl0f031070 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 1 Jul 2015 22:59:47 GMT Received: from abhmp0010.oracle.com (abhmp0010.oracle.com [141.146.116.16]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t61Mxlx1004839; Wed, 1 Jul 2015 22:59:47 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 Jul 2015 15:59:47 -0700 Date: Wed, 1 Jul 2015 15:59:44 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag Message-ID: <20150701225944.GB10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625234016.4992.52406.stgit@birch.djwong.org> <20150701015843.GS22807@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701015843.GS22807@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1435791589 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20374 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Wed, Jul 01, 2015 at 11:58:43AM +1000, Dave Chinner wrote: > On Thu, Jun 25, 2015 at 04:40:16PM -0700, Darrick J. Wong wrote: > > Gate all the reflink functions (which generally involve an expensive > > trip to the reflink btree) on an inode flag which is applied to both > > inodes at reflink time. This minimizes reflink's impact on non-CoW > > files. > > Ah, I see you do this reflink inode flag here. This should be one of > the first patches, not the last. i.e. the patch series should > build up all the supporting infrastructure in individual patches > before adding any of the actual reflink implementation.... Pardon all the dust, I figured that it'd be better to get all the patches out for earlier review than to make everyone wait until I could get a reasonable refactoring done once. > Also, the flag needs to go into the di_flags2 field, as the last > flag in the di_flags field is reserved for a "more flags" flag if we > ever need to add more flags to a v2 inode in a v4 filesystem... Ok. > > +/* > > + * xfs_is_reflink_inode() -- Decide if an inode needs to be checked for CoW. > > + * > > + * @ip: XFS inode > > + */ > > +bool > > +xfs_is_reflink_inode( > > + struct xfs_inode *ip) /* XFS inode */ > > +{ > > + struct xfs_mount *mp = ip->i_mount; > > + > > + if (!xfs_sb_version_hasreflink(&mp->m_sb)) > > + return false; > > + if (!(ip->i_d.di_flags & XFS_DIFLAG_REFLINK)) > > + return false; > > + > > + ASSERT(!XFS_IS_REALTIME_INODE(ip)); > > + return true; > > I would have thought you only need to check the inode flag here > because the only time it will be set is on a reflink enabled > filesystem. i.e. that flag being set implies we've already done > all the "reflink is supported in this filesystem and it's not a > realtime file" checks when setting the flag. Sure. The reason for so many ASSERTs everywhere is to help me check my own sanity while cobbling together the first version. I imagine I could eliminate a lot of them, but since they all compile out on !XFS_DEBUG && !XFS_WARN, I didn't think it was a serious problem. :) --D > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Wed Jul 1 18:10:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 683917F50 for ; Wed, 1 Jul 2015 18:10:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D9531AC005 for ; Wed, 1 Jul 2015 16:10:31 -0700 (PDT) X-ASG-Debug-ID: 1435792229-04cb6c209c01140001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id V75yWY4V66puymam (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 16:10:29 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t61NAN9g001647 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 1 Jul 2015 23:10:24 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t61NANbF024437 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 1 Jul 2015 23:10:23 GMT Received: from abhmp0017.oracle.com (abhmp0017.oracle.com [141.146.116.23]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t61NAN1W007752; Wed, 1 Jul 2015 23:10:23 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 Jul 2015 16:10:23 -0700 Date: Wed, 1 Jul 2015 16:10:22 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 02/14] libxfs: adjust refcounts in reflink btree Message-ID: <20150701231022.GC10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 02/14] libxfs: adjust refcounts in reflink btree References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625233923.4992.89446.stgit@birch.djwong.org> <20150701010654.GQ22807@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701010654.GQ22807@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1435792229 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20373 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Wed, Jul 01, 2015 at 11:06:54AM +1000, Dave Chinner wrote: > On Thu, Jun 25, 2015 at 04:39:23PM -0700, Darrick J. Wong wrote: > > Provide a function to adjust the reference counts for a range of > > blocks in the reflink btree. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_reflink_btree.c | 406 +++++++++++++++++++++++++++++++++++++ > > fs/xfs/libxfs/xfs_reflink_btree.h | 4 > > 2 files changed, 410 insertions(+) > > As per previous comments, this all belongs in > fs/xfs/libxfs/xfs_reflink.c... > > > > > > > diff --git a/fs/xfs/libxfs/xfs_reflink_btree.c b/fs/xfs/libxfs/xfs_reflink_btree.c > > index 8a0fa5d..380ed72 100644 > > --- a/fs/xfs/libxfs/xfs_reflink_btree.c > > +++ b/fs/xfs/libxfs/xfs_reflink_btree.c > > @@ -529,3 +529,409 @@ xfs_reflinkbt_delete( > > error0: > > return error; > > } > > + > > +#ifdef REFLINK_DEBUG > > +static void > > +dump_cur_loc( > > + struct xfs_btree_cur *cur, > > + const char *str, > > + int line) > > +{ > > + xfs_agblock_t gbno; > > + xfs_extlen_t glen; > > + xfs_nlink_t gnr; > > + int i; > > + > > + xfs_reflink_get_rec(cur, &gbno, &glen, &gnr, &i); > > + printk(KERN_INFO "%s(%d) cur[%d]:[%u,%u,%u,%d] ", str, line, > > + cur->bc_ptrs[0], gbno, glen, gnr, i); > > + if (i && cur->bc_ptrs[0]) { > > + cur->bc_ptrs[0]--; > > + xfs_reflink_get_rec(cur, &gbno, &glen, &gnr, &i); > > + printk("left[%d]:[%u,%u,%u,%d] ", cur->bc_ptrs[0], > > + gbno, glen, gnr, i); > > + cur->bc_ptrs[0]++; > > + } > > + > > + if (i && cur->bc_ptrs[0] < xfs_reflinkbt_get_maxrecs(cur, 0)) { > > + cur->bc_ptrs[0]++; > > + xfs_reflink_get_rec(cur, &gbno, &glen, &gnr, &i); > > + printk("right[%d]:[%u,%u,%u,%d] ", cur->bc_ptrs[0], > > + gbno, glen, gnr, i); > > + cur->bc_ptrs[0]--; > > + } > > + printk("\n"); > > +} > > +#else > > +# define dump_cur_loc(c, s, l) > > +#endif > > Use trace points on lookup/update/insert/delete so debug like this > is unnecessary. > > > > +/* > > + * Adjust the ref count of a range of AG blocks. > > + */ > > +int /* error */ > > +xfs_reflinkbt_adjust_refcount( > > + struct xfs_mount *mp, > > + struct xfs_trans *tp, /* transaction pointer */ > > + struct xfs_buf *agbp, /* buffer for agf structure */ > > + xfs_agnumber_t agno, /* allocation group number */ > > + xfs_agblock_t agbno, /* start of range */ > > + xfs_extlen_t aglen, /* length of range */ > > + int adj) /* how much to change refcnt */ > > 350 line function. Needs factoring. Also needs a comment explaining > the algorithm. > > > +{ > > + struct xfs_btree_cur *cur; > > + int error; > > + int i, have; > > + bool real_crl; /* cbno/clen is on disk? */ > > + xfs_agblock_t lbno, cbno, rbno; /* rlextent start */ > > + xfs_extlen_t llen, clen, rlen; /* rlextent length */ > > + xfs_nlink_t lnr, cnr, rnr; /* rlextent refcount */ > > "num" is the usual shorthand for "number". And in this case, nr is > extremely ambiguous: Number of records, number of reflinks, some > other number? I can't easily tell when I read the code, so the > variable names need to be better. factoring will certainly help > here. "refc" as shorthand for reference count, perhaps? > > + xfs_agblock_t bno; /* ag bno in the loop */ > > + xfs_agblock_t agbend; /* end agbno of the loop */ > > + xfs_extlen_t len; /* remaining len to add */ > > + xfs_nlink_t new_cnr; /* new refcount */ > > + > > + CHECK_AG_NUMBER(mp, agno); > > + CHECK_AG_EXTENT(mp, agbno, aglen); > > No real need for these checks - bad agno or extent sizes shoul dhave > been validated long before this. > > > + > > + /* > > + * Allocate/initialize a cursor for the by-number freespace btree. > > + */ > > + cur = xfs_reflinkbt_init_cursor(mp, tp, agbp, agno); > > You can kill that incorrect comment. > > > + > > + /* > > + * Split a left rlextent that crosses agbno. > > + */ > > These comments need some ascii art displaying the before, current > extent and after states so it's clear what the intent is. As it is, > I'd probably split these into "left/right/middle" helper functions, > as there is no state created by these initial overlap splits > used later in the function. That would get rid of excessive > indentation, make the error handling more obvious, etc. Ok, I'll draw some pictures. :) > > + error = xfs_reflink_lookup_le(cur, agbno, &have); > > + if (error) > > + goto error0; > > goto out_error; > > > + if (have) { > > if I "have" what? "found_rec" would be a better name, because then > the code reads clearly... > > > + /* > > + * Start iterating the range we're adjusting. rlextent boundaries > > + * should be at agbno and agbend. > > + */ > > Trying to work my way through this loop, but the logic is hard to > follow. It's hurting my head trying to work out what it is supposed > to be doing, so I'm going to wait for more comments, ascii art, and > factoring before really looking at it. :) --D > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Wed Jul 1 18:31:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 512217F69 for ; Wed, 1 Jul 2015 18:31:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 22A45304043 for ; Wed, 1 Jul 2015 16:30:59 -0700 (PDT) X-ASG-Debug-ID: 1435793456-04bdf0078900fa0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id YARQlFKsqgXiTTNg for ; Wed, 01 Jul 2015 16:30:56 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CbBgBmd5RV/96zLHlbgxGBM4JRqDoGmg8EAgKBS00BAQEBAQGBC4QiAQEBAwEnExwjBQsIAxgJJQ8FJQMhE4gnB80qAQEIAiAYhgSFLoUGB4QrBZQQi2CYRSZjgSkcgWQsMYJIAQEB Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Jul 2015 09:00:55 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZARSl-0004us-13; Thu, 02 Jul 2015 09:30:43 +1000 Date: Thu, 2 Jul 2015 09:30:42 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 01/14] xfs: create a per-AG btree to track reference counts Message-ID: <20150701233042.GU22807@dastard> X-ASG-Orig-Subj: Re: [PATCH 01/14] xfs: create a per-AG btree to track reference counts References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625233916.4992.12808.stgit@birch.djwong.org> <20150701001306.GP22807@dastard> <20150701225213.GA10043@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701225213.GA10043@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1435793456 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20375 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 01, 2015 at 03:52:13PM -0700, Darrick J. Wong wrote: > On Wed, Jul 01, 2015 at 10:13:06AM +1000, Dave Chinner wrote: > > On Thu, Jun 25, 2015 at 04:39:16PM -0700, Darrick J. Wong wrote: > > > diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h > > > index 9cff517..e4954ab 100644 > > > --- a/fs/xfs/libxfs/xfs_format.h > > > +++ b/fs/xfs/libxfs/xfs_format.h > > > @@ -446,9 +446,11 @@ xfs_sb_has_compat_feature( > > > > > > #define XFS_SB_FEAT_RO_COMPAT_FINOBT (1 << 0) /* free inode btree */ > > > #define XFS_SB_FEAT_RO_COMPAT_RMAPBT (1 << 1) /* reverse map btree */ > > > +#define XFS_SB_FEAT_RO_COMPAT_REFLINK (1 << 2) /* reflink btree */ > > > #define XFS_SB_FEAT_RO_COMPAT_ALL \ > > > (XFS_SB_FEAT_RO_COMPAT_FINOBT | \ > > > - XFS_SB_FEAT_RO_COMPAT_RMAPBT) > > > + XFS_SB_FEAT_RO_COMPAT_RMAPBT | \ > > > + XFS_SB_FEAT_RO_COMPAT_REFLINK) > > > > The XFS_SB_FEAT_RO_COMPAT_REFLINK flag shoul dbe added as a separate > > patch and put last in the series so it is only enabled once > > everything is complete. > > What if I define XFS_SB_FEAT_RO_COMPAT_REFLINK at the beginning but omit it > from the XFS_SB_FEAT_RO_COMPAT_ALL definition until the final patch? That > should prohibit anyone from using the half-baked feature during a bisect. Yup, thats what I meant ;) > > > + int *stat) > > > +{ > > > + int error; > > > + xfs_agblock_t bno; > > > + > > > + XFS_BTREE_TRACE_CURSOR(cur, XBT_ENTRY); > > > + > > > + /* Allocate the new block from the freelist. If we can't, give up. */ > > > + error = xfs_alloc_get_freelist(cur->bc_tp, cur->bc_private.a.agbp, > > > + &bno, 1); > > > + if (error) { > > > + XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); > > > + return error; > > > + } > > > > Why does the reflink btree use the free list? Why can't it use > > block allocation like the BMBT tree? > > I'm confused about the intended usage of the AGFL -- the XFS FS structure doc > says that it's for growing the free space btrees and can't be used for anything > else, but the rmap btree uses it. The rmap btree is a "freespace" btree in that it is modified at the same time the two freespace btrees are modified. It's tracking used space rather than free space, but from an architectural POV the rmap btree sits at the same lowest layer as the freespace btree. Think of it like this: when an extent is allocated, the freespace btree removal needs ot be atomic with the rmap btree insertion so they remain coherent at all times. Similarly we have the same situation with extent freeing - removal from the rmap must be atomic with addition to the freespace btree. The reflink btree sits a layer above the freespace btrees, equivalent to the BMBT. That is, when we remove an extent from the BMBT, we also need to remove the reflink btree reference. Only if the reference drops to zero does the extent then become free, and we pass it off to xfs_free_extent().... > Originally it /did/ use xfs_alloc_vextent(), though it won't be > difficult to revert. The way you use EFIs means that it can't be put inside xfs_alloc_vextent()/xfs_free_extent() - EFIs track movement of extents from the BMBT to the freespace tree, and so if we now have a reflink btree in the way, the EFI tracks movement from the reflink btree to the freespace trees. i.e. the reflink btree is modified atomically with the BMBT, not the freespace trees. Which, really, is a long way of saying that the allocation/freeing model of reflink btree blocks shoul dbe the same as the BMBT, and the transactional model integrates with the BMBT modifications, not the freespace btree modifications... > > > +/* > > > + * Allocate a new reflink btree cursor. > > > + */ > > > +struct xfs_btree_cur * /* new reflink btree cursor */ > > > +xfs_reflinkbt_init_cursor( > > > + struct xfs_mount *mp, /* file system mount point */ > > > + struct xfs_trans *tp, /* transaction pointer */ > > > + struct xfs_buf *agbp, /* buffer for agf structure */ > > > + xfs_agnumber_t agno) /* allocation group number */ > > > > No real need for these comments on the variables. They are redundant > > as the code documents what they are just fine. > > I was playing monkey-see monkey-do. Some of the other functions had > commented args. :) Yup, that's the old code. For new code we write it in a way that doesn't require comments like that ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 1 18:32:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 85B897F7D for ; Wed, 1 Jul 2015 18:32:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 64E67304039 for ; Wed, 1 Jul 2015 16:32:44 -0700 (PDT) X-ASG-Debug-ID: 1435793562-04bdf0078700fe0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id FFcq5HfoC8Nyecwq for ; Wed, 01 Jul 2015 16:32:42 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CaBgBmd5RV/96zLHlbgxGBM4JRqDoGmg8EAgKBS00BAQEBAQGBC4QjAQEEOhwjEAgDGAklDwUlAyETiC7NKgEBCAIgGIYEhS6FBgeEKwWUEItggTuHIY9pJmODKSwxgkgBAQE Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Jul 2015 09:02:41 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZARUS-0004vL-VE; Thu, 02 Jul 2015 09:32:28 +1000 Date: Thu, 2 Jul 2015 09:32:28 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 02/14] libxfs: adjust refcounts in reflink btree Message-ID: <20150701233228.GV22807@dastard> X-ASG-Orig-Subj: Re: [PATCH 02/14] libxfs: adjust refcounts in reflink btree References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625233923.4992.89446.stgit@birch.djwong.org> <20150701010654.GQ22807@dastard> <20150701231022.GC10043@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701231022.GC10043@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1435793562 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20375 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 01, 2015 at 04:10:22PM -0700, Darrick J. Wong wrote: > On Wed, Jul 01, 2015 at 11:06:54AM +1000, Dave Chinner wrote: > > On Thu, Jun 25, 2015 at 04:39:23PM -0700, Darrick J. Wong wrote: > > > Provide a function to adjust the reference counts for a range of > > > blocks in the reflink btree. ..... > > > +{ > > > + struct xfs_btree_cur *cur; > > > + int error; > > > + int i, have; > > > + bool real_crl; /* cbno/clen is on disk? */ > > > + xfs_agblock_t lbno, cbno, rbno; /* rlextent start */ > > > + xfs_extlen_t llen, clen, rlen; /* rlextent length */ > > > + xfs_nlink_t lnr, cnr, rnr; /* rlextent refcount */ > > > > "num" is the usual shorthand for "number". And in this case, nr is > > extremely ambiguous: Number of records, number of reflinks, some > > other number? I can't easily tell when I read the code, so the > > variable names need to be better. factoring will certainly help > > here. > > "refc" as shorthand for reference count, perhaps? refcnt is the usual self-documenting shorthand ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 1 18:50:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 313837FBF for ; Wed, 1 Jul 2015 18:50:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id BE2C1AC004 for ; Wed, 1 Jul 2015 16:49:59 -0700 (PDT) X-ASG-Debug-ID: 1435794597-04bdf0078701280001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id eXn5tl90B38gcF2g for ; Wed, 01 Jul 2015 16:49:57 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DJBgBJfJRV/96zLHlbgxKBM6sFAwEBAQaaEQQCAoFLTQEBAQEBAYELhCMBAQQ6HCMQCAMYCSUPBSUDIROILsx2AQEIAiAYhgSFLoUGB4QrBZQQi2CYRiZjgVqBTywxgQUlgR4BAQE Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Jul 2015 09:19:56 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZARlA-0004wX-56; Thu, 02 Jul 2015 09:49:44 +1000 Date: Thu, 2 Jul 2015 09:49:44 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag Message-ID: <20150701234944.GW22807@dastard> X-ASG-Orig-Subj: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625234016.4992.52406.stgit@birch.djwong.org> <20150701015843.GS22807@dastard> <20150701225944.GB10043@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701225944.GB10043@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1435794597 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20375 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 01, 2015 at 03:59:44PM -0700, Darrick J. Wong wrote: > On Wed, Jul 01, 2015 at 11:58:43AM +1000, Dave Chinner wrote: > > I would have thought you only need to check the inode flag here > > because the only time it will be set is on a reflink enabled > > filesystem. i.e. that flag being set implies we've already done > > all the "reflink is supported in this filesystem and it's not a > > realtime file" checks when setting the flag. > > Sure. The reason for so many ASSERTs everywhere is to help me check my > own sanity while cobbling together the first version. I imagine I could > eliminate a lot of them, but since they all compile out on !XFS_DEBUG && > !XFS_WARN, I didn't think it was a serious problem. :) Generally it's not, but we try to keep performance of the debug kernel within a few percent of a non-debug build, just so that it behaves roughly the same w.r.t. CPU and memory overhead, scalability and race conditions. Hence I'd much prefer to see strong validation of the parameters at the highest layer possible so that they don't need to be constantly checked in lower layers that have a single context. e.g. AG-specific modification functions shouldn't need to check the agno is valid, as they wouldn't have been called if someone tried to perform the operation on an invalid agno. Same goes for block numbers, etc. And for printk debugging to tell you whow functions a being called and what oeprations they are doing, you should replace all that with tracepoints. Addition of trace points at the entry and exit of functions gives sufficient information for verifying this during debugging, but has almost no overhead in the code or at runtime. They can also be switched on dynamically in production machines, which you can't do with compile option debug code like xfs_debug and ASSERT statements. i.e. tracepoints = good, debug printk = bad ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 1 19:20:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DA9737FA3 for ; Wed, 1 Jul 2015 19:20:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C93C08F8049 for ; Wed, 1 Jul 2015 17:20:20 -0700 (PDT) X-ASG-Debug-ID: 1435796417-04cb6c209e01f00001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id tI6DXb9XjuQw7qDh for ; Wed, 01 Jul 2015 17:20:18 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DJBgBRg5RV/96zLHlbgxKBM6sFAwEBAQaaEQQCAoFLTQEBAQEBAYELhCMBAQQ6HCMQCAMYCSUPBSUDIROILsx0AQsgGIYEhS6FBgeEKwEElBCLYI4AikYmY4MpLDGCSAEBAQ Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Jul 2015 09:50:04 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZASEJ-0004zO-2M; Thu, 02 Jul 2015 10:19:51 +1000 Date: Thu, 2 Jul 2015 10:19:51 +1000 From: Dave Chinner To: SF Markus Elfring Cc: xfs@oss.sgi.com, LKML , kernel-janitors@vger.kernel.org, Julia Lawall Subject: Re: XFS: Fine-tuning for checks before the function call "xfs_qm_dqrele"? Message-ID: <20150702001951.GX22807@dastard> X-ASG-Orig-Subj: Re: XFS: Fine-tuning for checks before the function call "xfs_qm_dqrele"? References: <530CF8FF.8080600@users.sourceforge.net> <530DD06F.4090703@users.sourceforge.net> <5317A59D.4@users.sourceforge.net> <5479F823.60900@users.sourceforge.net> <20141130230904.GF16151@dastard> <558D1833.3080009@users.sourceforge.net> <20150629214355.GE7943@dastard> <55939BA8.1090400@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55939BA8.1090400@users.sourceforge.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1435796417 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20376 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 01, 2015 at 09:50:00AM +0200, SF Markus Elfring wrote: > > xfs_dqrele_inode() gets called on every inode in the inode cache, > > and this change results in a cacheline in every inode being dirtied > > even if they don't have dquots attached. Given the inode cache can > > hold tens to hundreds of millions of inodes on large machines, we > > don't want to dirty any cachelines we don't need to while walking > > the inode cache and releasing dquots... > > Would it make sense to annotate checks before such function calls > as "LIKELY"? No - it will be random as to whether the inodes have dquots attached or not and so a static hint is always going to be wrong for someone.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From darrick.wong@oracle.com Wed Jul 1 21:27:50 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1F7AC29DFC for ; Wed, 1 Jul 2015 21:27:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id AA213AC003 for ; Wed, 1 Jul 2015 19:27:46 -0700 (PDT) X-ASG-Debug-ID: 1435804063-04bdf0078903170001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id fT7dm7CfYeDChZiY (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 19:27:44 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t622Rguu028752 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Jul 2015 02:27:42 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t622Rg8B003459 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 Jul 2015 02:27:42 GMT Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t622RfDm015946; Thu, 2 Jul 2015 02:27:41 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 Jul 2015 19:27:41 -0700 Date: Wed, 1 Jul 2015 19:27:40 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 03/14] libxfs: support unmapping reflink blocks Message-ID: <20150702022739.GD10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 03/14] libxfs: support unmapping reflink blocks References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625233930.4992.88802.stgit@birch.djwong.org> <20150701012632.GR22807@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701012632.GR22807@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1435804064 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20378 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Wed, Jul 01, 2015 at 11:26:32AM +1000, Dave Chinner wrote: > On Thu, Jun 25, 2015 at 04:39:30PM -0700, Darrick J. Wong wrote: > > When we're unmapping blocks from a file, we need to decrease refcounts > > in the btree and only free blocks if they refcount is 1. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_bmap.c | 5 + > > fs/xfs/libxfs/xfs_reflink_btree.c | 140 +++++++++++++++++++++++++++++++++++++ > > fs/xfs/libxfs/xfs_reflink_btree.h | 4 + > > 3 files changed, 147 insertions(+), 2 deletions(-) > > > > > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > > index 057fa9a..3f5e8da 100644 > > --- a/fs/xfs/libxfs/xfs_bmap.c > > +++ b/fs/xfs/libxfs/xfs_bmap.c > > @@ -45,6 +45,7 @@ > > #include "xfs_symlink.h" > > #include "xfs_attr_leaf.h" > > #include "xfs_filestream.h" > > +#include "xfs_reflink_btree.h" > > > > > > kmem_zone_t *xfs_bmap_free_item_zone; > > @@ -4984,8 +4985,8 @@ xfs_bmap_del_extent( > > * If we need to, add to list of extents to delete. > > */ > > if (do_fx) > > - xfs_bmap_add_free(mp, flist, del->br_startblock, > > - del->br_blockcount, ip->i_ino); > > + xfs_reflink_bmap_add_free(mp, flist, del->br_startblock, > > + del->br_blockcount, ip->i_ino, tp); > > I think this is the wrong abstraction. I think the code should look > like this: > > if (do_fx) { > if (xfs_sb_version_hasreflink(&mp->m_sb)) { > error = xfs_reflink_del_extent(mp, tp, flist, > del->br_startblock, > del->br_blockcount, ip->i_ino); > if (error) > goto done; > } else > xfs_bmap_add_free() > } > > Because what we are doing is deleting an extent from the reflink > btree, not adding a freed extent to the "to-be-freed" list. Not a great choice of name, I agree... > > > > diff --git a/fs/xfs/libxfs/xfs_reflink_btree.c b/fs/xfs/libxfs/xfs_reflink_btree.c > > index 380ed72..f40ba1f 100644 > > --- a/fs/xfs/libxfs/xfs_reflink_btree.c > > +++ b/fs/xfs/libxfs/xfs_reflink_btree.c > > Again, xfs_reflink.c > > > @@ -935,3 +935,143 @@ error0: > > xfs_btree_del_cursor(cur, XFS_BTREE_ERROR); > > return error; > > } > > + > > +/** > > + * xfs_reflink_bmap_add_free() - release a range of blocks > > + * > > + * @mp: XFS mount object > > + * @flist: List of blocks to be freed at the end of the transaction > > + * @fsbno: First fs block of the range to release > > + * @len: Length of range > > + * @owner: owner of the extent > > + * @tp: transaction that goes with the free operation > > + */ > > +int > > +xfs_reflink_bmap_add_free( > > + struct xfs_mount *mp, /* mount point structure */ > > + xfs_bmap_free_t *flist, /* list of extents */ > > + xfs_fsblock_t fsbno, /* fs block number of extent */ > > + xfs_filblks_t fslen, /* length of extent */ > > + uint64_t owner, /* extent owner */ > > + struct xfs_trans *tp) /* transaction */ > > +{ > > + struct xfs_btree_cur *cur; > > + int error; > > + struct xfs_buf *agbp; > > + xfs_agnumber_t agno; /* allocation group number */ > > + xfs_agblock_t agbno; /* ag start of range to free */ > > + xfs_agblock_t agbend; /* ag end of range to free */ > > + xfs_extlen_t aglen; /* ag length of range to free */ > > + int i, have; > > + xfs_agblock_t lbno; /* rlextent start */ > > + xfs_extlen_t llen; /* rlextent length */ > > + xfs_nlink_t lnr; /* rlextent refcount */ > > + xfs_agblock_t bno; /* rlext block # in loop */ > > + xfs_extlen_t len; /* rlext length in loop */ > > + unsigned long long blocks_freed; > > + xfs_fsblock_t range_fsb; > > + > > + if (!xfs_sb_version_hasreflink(&mp->m_sb)) { > > + xfs_bmap_add_free(mp, flist, fsbno, fslen, owner); > > + return 0; > > + } > > That canbe dropped. > > + > > + agno = XFS_FSB_TO_AGNO(mp, fsbno); > > + agbno = XFS_FSB_TO_AGBNO(mp, fsbno); > > + CHECK_AG_NUMBER(mp, agno); > > + ASSERT(fslen < mp->m_sb.sb_agblocks); > > + CHECK_AG_EXTENT(mp, agbno, fslen); > > These extent lengths have already been checked. If they are invalid, > then the extent deletion would have errored out with corruption > long before we get here. Ok. > > + aglen = fslen; > > + > > + /* > > + * Drop reference counts in the reflink tree. > > + */ > > + error = xfs_alloc_read_agf(mp, tp, agno, 0, &agbp); > > + if (error) > > + return error; > > + > > + /* > > + * Grab a rl btree cursor. > > + */ > > + cur = xfs_reflinkbt_init_cursor(mp, tp, agbp, agno); > > + bno = agbno; > > + len = aglen; > > + agbend = agbno + aglen - 1; > > + blocks_freed = 0; > > + > > + /* > > + * Account for a left extent that partially covers our range. > > + */ > > + error = xfs_reflink_lookup_le(cur, bno, &have); > > + if (error) > > + goto error0; > > + if (have) { > > + error = xfs_reflink_get_rec(cur, &lbno, &llen, &lnr, &i); > > + if (error) > > + goto error0; > > + XFS_WANT_CORRUPTED_RLEXT_GOTO(mp, i, lbno, llen, lnr, error0); > > + if (lbno + llen > bno) { > > + blocks_freed += min(len, lbno + llen - bno); > > + bno += blocks_freed; > > + len -= blocks_freed; > > + } > > + } > > So we unconditionally look up the reflink btree on extent free to > see if we need to free it, even if the inode has not been reflinked? > Doesn't this add a lot of overhead to the extent freeing? > > Indeed, why not just mark inodes that have been reflinked (i.e. have > shared extents) with an on-disk flag so that we know if we need to > do reflink btree work or not? That way the code fragment above could > just check an inode flag rather than always calling into this > function for reflink enabled filesystems.... Yep, the inode flag comes later, though I'm melding it into an earlier part of the patch... > > > + while (len > 0) { > > + /* > > + * Go find the next rlext. > > + */ > > + range_fsb = XFS_AGB_TO_FSB(mp, agno, bno); > > + error = xfs_btree_increment(cur, 0, &have); > > + if (error) > > + goto error0; > > + if (!have) { > > + /* > > + * There's no right rlextent, so free bno to the end. > > + */ > > + lbno = bno + len; > > + llen = 0; > > + } else { > > + /* > > + * Find the next rlextent. > > + */ > > + error = xfs_reflink_get_rec(cur, &lbno, &llen, > > + &lnr, &i); > > + if (error) > > + goto error0; > > + XFS_WANT_CORRUPTED_RLEXT_GOTO(mp, i, lbno, llen, lnr, > > + error0); > > + if (lbno >= bno + len) { > > + lbno = bno + len; > > + llen = 0; > > + } > > + } > > + > > + /* > > + * Free everything up to the start of the rlextent and > > + * account for still-mapped blocks. > > + */ > > + if (lbno - bno > 0) { > > + xfs_bmap_add_free(mp, flist, range_fsb, lbno - bno, > > + owner); > > + len -= lbno - bno; > > + bno += lbno - bno; > > + } > > + llen = min(llen, agbend + 1 - lbno); > > + blocks_freed += llen; > > + len -= llen; > > + bno += llen; > > + } > > + > > + xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR); > > + > > + error = xfs_reflinkbt_adjust_refcount(mp, tp, agbp, agno, agbno, aglen, > > + -1); > > Hmmm - we just walked the btree to determine what extents to > free, and now we are going to walk the btree again to drop the > reference counts on shared extents? So every extent that gets freed > does two walks of the reflink btree regardless of the whether it has > shared blocks or not? Yeah, it would be more efficient to bundle the xfs_bmap_add_free loop into adjust_refcount() so that we only have to make one pass. --D > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Wed Jul 1 21:32:18 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B338429DFC for ; Wed, 1 Jul 2015 21:32:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 388E0AC004 for ; Wed, 1 Jul 2015 19:32:18 -0700 (PDT) X-ASG-Debug-ID: 1435804335-04cb6c209d03830001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id otrpxUGqj4tE58OV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 19:32:16 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t622WA79032495 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Jul 2015 02:32:11 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t622WAGA023076 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 2 Jul 2015 02:32:10 GMT Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t622WAeI017134; Thu, 2 Jul 2015 02:32:10 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 Jul 2015 19:32:09 -0700 Date: Wed, 1 Jul 2015 19:32:08 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag Message-ID: <20150702023208.GE10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625234016.4992.52406.stgit@birch.djwong.org> <20150701015843.GS22807@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150701015843.GS22807@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1435804336 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20378 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Wed, Jul 01, 2015 at 11:58:43AM +1000, Dave Chinner wrote: > On Thu, Jun 25, 2015 at 04:40:16PM -0700, Darrick J. Wong wrote: > > Gate all the reflink functions (which generally involve an expensive > > trip to the reflink btree) on an inode flag which is applied to both > > inodes at reflink time. This minimizes reflink's impact on non-CoW > > files. > > Ah, I see you do this reflink inode flag here. This should be one of > the first patches, not the last. i.e. the patch series should > build up all the supporting infrastructure in individual patches > before adding any of the actual reflink implementation.... > > Also, the flag needs to go into the di_flags2 field, as the last > flag in the di_flags field is reserved for a "more flags" flag if we > ever need to add more flags to a v2 inode in a v4 filesystem... It looks to me like di_flags2 only exists in a v3 inode, and v3 inodes only exist on v5 filesystems. I don't really mind using di_flags2 for reflink (on the off chance you want to use bit 15 of di_flags for a v2 inode) but I'm wondering how is it possible to have di_flags on a v4 fs? > > > +/* > > + * xfs_is_reflink_inode() -- Decide if an inode needs to be checked for CoW. > > + * > > + * @ip: XFS inode > > + */ > > +bool > > +xfs_is_reflink_inode( > > + struct xfs_inode *ip) /* XFS inode */ > > +{ > > + struct xfs_mount *mp = ip->i_mount; > > + > > + if (!xfs_sb_version_hasreflink(&mp->m_sb)) > > + return false; > > + if (!(ip->i_d.di_flags & XFS_DIFLAG_REFLINK)) > > + return false; > > + > > + ASSERT(!XFS_IS_REALTIME_INODE(ip)); > > + return true; > > I would have thought you only need to check the inode flag here > because the only time it will be set is on a reflink enabled > filesystem. i.e. that flag being set implies we've already done > all the "reflink is supported in this filesystem and it's not a > realtime file" checks when setting the flag. Yeah, probably these checks are all unnecessary. --D > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bounce-1311152-1450688-25136-248@dotpanel.com Wed Jul 1 22:18:50 2015 Return-Path: X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E32E17FB6 for ; Wed, 1 Jul 2015 22:18:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A72AE8F8037 for ; Wed, 1 Jul 2015 20:18:47 -0700 (PDT) X-ASG-Debug-ID: 1435807110-04cb6c209c04100001-NocioJ Received: from odin.xtenzio.com (smtp1-1.xtenzio.com [213.133.111.3]) by cuda.sgi.com with ESMTP id EIz3n2S5pmAbTUnw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Jul 2015 20:18:31 -0700 (PDT) X-Barracuda-Envelope-From: bounce-1311152-1450688-25136-248@dotpanel.com X-Barracuda-Apparent-Source-IP: 213.133.111.3 Received: (qmail 12911 invoked from network); 2 Jul 2015 04:44:15 +0300 Received: from smtp1-1.xtenzio.com (HELO localhost.localdomain) (213.133.111.3) by smtp1-1.xtenzio.com with ESMTPA; 2 Jul 2015 04:44:14 +0300 Date: Thu, 2 Jul 2015 04:44:14 +0300 To: "xfs@oss.sgi.com" From: Cytoday News Reply-To: Cytoday News Subject: CYtoday daily news Message-ID: <60d2f0950376f46f88d800ee0b66dbc1@localhost.localdomain> X-ASG-Orig-Subj: CYtoday daily news X-Priority: 3 X-Mailer: xtenzio X-Complaints-To: abuse@dotpanel.com List-Unsubscribe: X-MessageID: NjQyN3x8fHw3MTExfHx8fHhmc0Bvc3Muc2dpLmNvbXx8fHwxMjN8fHx8MXx8fHww X-Report-Abuse: X-GreenArrow-MtaID: dtpMTA1 X-GreenArrow-ListID: t1 X-GreenArrow-MailClass: default MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="b1_60d2f0950376f46f88d800ee0b66dbc1" X-Barracuda-Connect: smtp1-1.xtenzio.com[213.133.111.3] X-Barracuda-Start-Time: 1435807110 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: sportsbreak.com.cy X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=EXTRA_MPART_TYPE, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: text/html; charset = "utf-8" Content-Transfer-Encoding: quoted-printable =09 =09=09CYTODAY =09=09 =09=09 =09 =09 CYTODAY <= meta http-equiv=3D"content-language" content=3D"el, en" />
=C2=A0 =CE=93= =CE=AF=CE=BD=CE=B5=CF=84=CE=B5 =CF=83=CF=85=CE=BD=CE=B4=CF=81o=CE=BC=CE=B7= =CF=84=CE=AE=CF=82 =CF=83=CF=84=CE=B7 CYtoday =CE=B5=CE=BD=CF=84=CE=B5=CE= =BB=CF=8E=CF=82 =CE=B4=CF=89=CF=81=CE=B5=CE=AC=CE=BD! =C2=A0
=C2=A0

ISSN 1986-244X
H=CE=BC= =CE=B5=CF=81o=CE=BC=CE=B7=CE=BD=CE=AF=CE=B1:02-07-2015
A=CF=81=CE=B9= =CE=B8=CE=BC=CF=8C=CF=82 =CE=A3=CF=85=CE=BD=CE=B4=CF=81o=CE=BC=CE=B7=CF=84= =CF=8E=CE=BD: 116,401
=C2=A0

=C2=A0 Part of the Cymedia Group =C2=A0
=CE=A3=CE=B7=CE=BC=CE=B1=CE=BD=CF=84=CE=B9=CE=BA= =CE=AD=CF=82 =CE=B5=CE=B9=CE=B4=CE=AE=CF=83=CE=B5=CE=B9=CF=82
FT: O T=CF=83=CE=AF=CF=80= =CF=81=CE=B1=CF=82 =CE=B4=CE=AD=CF=87=CE=B5=CF=84=CE=B1=CE=B9 =CF=84o=CF=85= =CF=82 =CF=8C=CF=81o=CF=85=CF=82 =CF=84=CF=89=CE=BD =CE=B4=CE=B1=CE=BD=CE= =B5=CE=B9=CF=83=CF=84=CF=8E=CE=BD, =CF=80=CF=81o=CF=83=CE=B1=CF=81=CE=BCo= =CF=83=CE=BC=CE=AD=CE=BDo=CF=85=CF=82 =CF=83=CF=84=CE=B7 =CE=BD=CE=AD=CE=B1= =CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CE=AE =CF=80=CF=81=CF=8C=CF=84= =CE=B1=CF=83=CE=B7 - newsbomb.gr
= O A=CE=BB=CE=AD=CE=BE=CE=B7= =CF=82 T=CF=83=CE=AF=CF=80=CF=81=CE=B1=CF=82 =CE=B8=CE=B1 =CE=B1=CF=80o=CE= =B4=CE=B5=CF=87=CE=B8=CE=B5=CE=AF =CF=84o=CF=85=CF=82 =CF=8C=CF=81o=CF=85= =CF=82 =CF=84=CF=89=CE=BD =CF=80=CE=B9=CF=83=CF=84=CF=89=CF=84=CF=8E=CE=BD = =CF=80o=CF=85 =CE=B2=CF=81=CE=AF=CF=83=CE=BAo=CE=BD=CF=84=CE=B1=CE=B9 =CF= =83=CF=84o =CF=84=CF=81=CE=B1=CF=80=CE=AD=CE=B6=CE=B9 =CF=84=CF=89=CE=BD = =CF=83=CF=85=CE=B6=CE=B7=CF=84=CE=AE=CF=83=CE=B5=CF=89=CE=BD, =CE=BC=CE=B5 = =CF=83=CE=B5=CE=B9=CF=81=CE=AC, =CF=8C=CE=BC=CF=89=CF=82, =CF=84=CF=81o=CF= =80o=CF=80o=CE=B9=CE=AE=CF=83=CE=B5=CF=89=CE=BD, =CF=83=CF=8D=CE=BC=CF=86= =CF=89=CE=BD=CE=B1 =CE=BC=CE=B5...

BOMBA: =C2=ABMo=CE=BD=CF= =84=CE=AD=CE=BBo K=CF=8D=CF=80=CF=81o=CF=85=C2=BB =CE=B5=CE=AF=CF=87=CE=B5 = =CF=80=CF=81o=CF=84=CE=B5=CE=AF=CE=BD=CE=B5=CE=B9 =CE=B7 =CE=93=CE=B5=CF=81= =CE=BC=CE=B1=CE=BD=CE=AF=CE=B1 - Cyprustimes
T=CE=B9=CF=82 = =CF=85=CF=80o=CE=BA=CE=BBo=CF=80=CE=AD=CF=82 =CF=84=CE=B7=CF=82 Y=CF=80=CE= =B7=CF=81=CE=B5=CF=83=CE=AF=CE=B1=CF=82 E=CE=B8=CE=BD=CE=B9=CE=BA=CE=AE=CF= =82 A=CF=83=CF=86=CE=AC=CE=BB=CE=B5=CE=B9=CE=B1=CF=82 =CF=84=CF=89=CE=BD H= =CE=A0A =CF=83=CF=84=CE=B7=CE=BD =CE=86=CE=BD=CE=B3=CE=BA=CE=B5=CE=BB=CE=B1= M=CE=AD=CF=81=CE=BA=CE=B5=CE=BB =CE=BA=CE=B1=CE=B9 =CF=83=CE=B5 =CE=B3=CE= =B5=CF=81=CE=BC=CE=B1=CE=BDo=CF=8D=CF=82 =CE=B1=CE=BE=CE=B9=CF=89=CE=BC=CE= =B1=CF=84o=CF=8D=CF=87o=CF=85=CF=82 =CF=80o=CF=85 =CE=AD=CF=87o=CF=85=CE=BD= =CE=BC=CE=B5=CE=B3=CE=AC=CE=BBo =CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA= =CF=8C =CE=B5=CE=BD=CE=B4=CE=B9=CE=B1=CF=86=CE=AD=CF=81o=CE=BD...

=CE=94=CE=B9=CE=AC=CE=B3= =CE=B3=CE=B5=CE=BB=CE=BC=CE=B1 T=CF=83=CE=AF=CF=80=CF=81=CE=B1: =C2=ABTo = =CF=8C=CF=87=CE=B9 =CF=83=CF=84o=CF=87=CE=B5=CF=8D=CE=B5=CE=B9 =CF=83=CE=B5= =CE=BA=CE=B1=CE=BB=CF=8D=CF=84=CE=B5=CF=81=CE=B7 =CF=83=CF=85=CE=BC=CF=86= =CF=89=CE=BD=CE=AF=CE=B1=C2=BB - To B=CE=AE=CE=BC= =CE=B1
=C2= =ABO=CE=B9 =CF=80o=CE=BB=CE=B9=CF=84=CE=B9=CE=BA=CE=AD=CF=82 =CE=BB=CE=B9= =CF=84=CF=8C=CF=84=CE=B7=CF=84=CE=B1=CF=82 =CF=80=CF=81=CE=AD=CF=80=CE=B5= =CE=B9 =CE=BD=CE=B1 =CF=83=CF=84=CE=B1=CE=BC=CE=B1=CF=84=CE=AE=CF=83o=CF=85= =CE=BD - =CE=98=CE=AD=CE=BBo=CF=85=CE=BC=CE=B5 =CF=83=CF=85=CE=BC=CF=86=CF= =89=CE=BD=CE=AF=CE=B1 =CE=BC=CE=B5 =CE=BC=CE=B5=CF=84=CE=B1=CF=81=CF=81=CF= =85=CE=B8=CE=BC=CE=AF=CF=83=CE=B5=CE=B9=CF=82 - O=CE=B9 =CE=BA=CE=B1=CF=84= =CE=B1=CE=B8=CE=AD=CF=83=CE=B5=CE=B9=CF=82 =CE=B4=CE=B5=CE=BD =CE=B8=CE=B1 = =CF=87=CE=B1=CE=B8o=CF=8D=CE=BD=C2=BB

E=CE=BD=CE=B5=CF=81=CE=B3o= =CF=80o=CE=B9=CE=B5=CE=AF =CF=84=CE=B9=CF=82 =CF=81=CE=AE=CF=84=CF=81=CE=B5= =CF=82 =CF=87=CF=81=CE=B5o=CE=BAo=CF=80=CE=AF=CE=B1=CF=82 o EFSF= - Alfa news
A=CF=85=CF=83=CF=84=CE=B7=CF=81=CE=AD=CF=82 =CF=80=CF=81o= =CE=B5=CE=B9=CE=B4o=CF=80o=CE=B9=CE=AE=CF=83=CE=B5=CE=B9=CF=82 =CE=B1=CF=80= =CF=8C =CF=84o=CE=BD EFSF. K=CE=BB=CE=B9=CE=BC=CE=B1=CE=BA=CF=8E=CE=BD=CE= =B5=CF=84=CE=B1=CE=B9 =CE=B7 =CF=80=CE=AF=CE=B5=CF=83=CE=B7 =CE=B3=CE=B9=CE= =B1 =CF=84=CE=B1 =CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CE=AC =CE=B4=CE= =AC=CE=BD=CE=B5=CE=B9=CE=B1.

=CE=A3=CE=BA=CE=BB=CE=B7= =CF=81=CE=AE =CF=83=CF=84=CE=AC=CF=83=CE=B7 =CF=84=CE=B7=CF=82 M=CE=AD=CF= =81=CE=BA=CE=B5=CE=BB.=CE=94=CE=B5=CE=BD =CF=80=CE=B1=CE=AF=CE=B6=CE=B5=CE= =B9 =CF=84=CE=B7=CE=BD E=CF=85=CF=81=CF=8E=CF=80=CE=B7 =CF=83=CF=84=CE=B1 = =CE=B6=CE=AC=CF=81=CE=B9=CE=B1. - ant1iwo
=CE=A3=CE=BA=CE=BB= =CE=B7=CF=81=CE=AE =CF=83=CF=84=CE=AC=CF=83=CE=B7 =CE=AD=CE=BD=CE=B1=CE=BD= =CF=84=CE=B9 =CF=84=CE=B7=CF=82 E=CE=BB=CE=BB=CE=AC=CE=B4=CE=B1=CF=82 =CE= =BA=CE=B1=CE=B9 =CF=84=CE=B7=CF=82 K=CF=85=CE=B2=CE=AD=CF=81=CE=BD=CE=B7=CF= =83=CE=B7=CF=82 T=CF=83=CE=AF=CF=80=CF=81=CE=B1 =CF=84=CE=AE=CF=81=CE=B7=CF= =83=CE=B5 =CE=B7 K=CE=B1=CE=B3=CE=BA=CE=B5=CE=BB=CE=AC=CF=81=CE=B9o=CF=82 M= =CE=AD=CF=81=CE=BA=CE=B5=CE=BB =CE=BA=CE=B1=CF=84=CE=AC =CF=84=CE=B7=CE=BD = o=CE=BC=CE=B9=CE=BB=CE=AF=CE=B1 =CF=84=CE=B7=CF=82 =CF=83=CF=84o =CE=93=CE= =B5=CF=81=CE=BC=CE=B1=CE=BD=CE=B9=CE=BA=CF=8C Ko=CE=B9=CE=BDo=CE=B2o=CF=85= =CE=BB=CE=B9o =CF=80o=CF=85...

=CE=94=CE=B5=CE=BD =CF=80= =CE=B1=CF=81=CE=B1=CE=B9=CF=84=CE=B5=CE=AF=CF=84=CE=B1=CE=B9 =CE=B7 =CE=BA= =CF=85=CE=B2=CE=AD=CF=81=CE=BD=CE=B7=CF=83=CE=B7 =CE=A3Y=CE=A1IZA =CE=B1=CE= =BA=CF=8C=CE=BC=CE=B7 =CE=BA=CE=B1=CE=B9 =CE=BC=CE=B5=CF=84=CE=AC =CE=B1=CF= =80=CF=8C =CE=AD=CE=BD=CE=B1 =C2=AB=CE=BD=CE=B1=CE=B9=C2=BB - To B=CE=AE=CE=BC=CE=B1
Ko=CE=B9=CE=BDo=CE=B2o=CF=85=CE=BB=CE=B5=CF=85=CF= =84=CE=B9=CE=BA=CE=AD=CF=82 =CF=80=CE=B7=CE=B3=CE=AD=CF=82 =CF=84o=CF=85 = =CE=BA=CF=8C=CE=BC=CE=BC=CE=B1=CF=84o=CF=82 =CE=BC=CE=B9=CE=BBo=CF=8D=CE=BD= =CE=B3=CE=B9=CE=B1 =CF=80=CF=81o=CE=BA=CE=AE=CF=81=CF=85=CE=BE=CE=B7 =CE= =B5=CE=BA=CE=BBo=CE=B3=CF=8E=CE=BD =CF=84o=CE=BD =CE=A3=CE=B5=CF=80=CF=84= =CE=AD=CE=B2=CF=81=CE=B9o

E=CE=B9=CE=BA=CF=8C=CE=BD= =CE=B5=CF=82 =CE=BD=CF=84=CF=81o=CF=80=CE=AE=CF=82: O=CF=85=CF=81=CE=AD=CF= =82 =CE=BA=CE=B1=CE=B9 =CE=BB=CE=B9=CF=80o=CE=B8=CF=85=CE=BC=CE=AF=CE=B5=CF= =82 =CF=83=CF=85=CE=BD=CF=84=CE=B1=CE=BE=CE=B9o=CF=8D=CF=87=CF=89=CE=BD =CE= =B3=CE=B9=CE=B1 120 =CE=B5=CF=85=CF=81=CF=8E - =CE= =A0=CF=81=CF=8E=CF=84o =CE=98=CE=AD=CE=BC=CE=B1
X=CE=ACo=CF=82 =CE=B1=CF=80=CF=8C =CF= =84=CE=B7=CE=BD =CE=B1=CE=BB=CF=86=CE=B1=CE=B2=CE=B7=CF=84=CE=B9=CE=BA=CE= =AE =CE=B5=CE=BE=CF=85=CF=80=CE=B7=CF=81=CE=AD=CF=84=CE=B7=CF=83=CE=B7 =CF= =83=CE=B5 Alpha, E=CE=B8=CE=BD=CE=B9=CE=BA=CE=AE, Eurobank - H =CE=B1=CE=BD= =CE=B1=CE=BAo=CE=AF=CE=BD=CF=89=CF=83=CE=B7 =CE=AD=CE=B3=CE=B9=CE=BD=CE=B5 = =CE=BC=CE=B5=CF=84=CE=AC =CF=84=CE=B1 =CE=BC=CE=B5=CF=83=CE=AC=CE=BD=CF=85= =CF=87=CF=84=CE=B1 - 1,5 =CE=B5=CE=BA=CE=B1=CF=84. o=CE=B9 =CF=83=CF=85=CE= =BD=CF=84=CE=B1=CE=BE=CE=B9o=CF=8D=CF=87o=CE=B9 =CF=80o=CF=85 =CE=B4=CE=B5= =CE=BD =CE=AD=CF=87o=CF=85=CE=BD =CE=BA=CE=AC=CF=81=CF=84=CE=B1... <= /td>

To=CF=80=CE=B9=CE=BA=CE=AD=CF=82 =CE=B5=CE=B9=CE= =B4=CE=AE=CF=83=CE=B5=CE=B9=CF=82
=CE=94=CE=B5=CE=AF=CF=84= =CE=B5 =CE=B3=CE=B9=CE=B1=CF=84=CE=AF =CE=BA=CE=BB=CE=B5=CE=AF=CF=83=CF=84= =CE=B7=CE=BA=CE=B1=CE=BD =CE=BC=CE=AD=CF=83=CE=B1 =CF=83=CE=B5 =CE=BA=CE=BB= o=CF=85=CE=B2=CE=B9=CE=AC =CE=AD=CE=BE=CF=89 =CE=B1=CF=80=CF=8C =CF=84o =CE= =A0=CF=81o=CE=B5=CE=B4=CF=81=CE=B9=CE=BA=CF=8C - C= yprustimes
= =CE=86=CE=BD=CE=B8=CF=81=CF=89=CF=80o=CE=B9 =CE=BC=CE=AD=CF=83=CE=B1 =CF=83= =CE=B5... =CE=BA=CE=BBo=CF=85=CE=B2=CE=B9=CE=AC =CE=BA=CE=B1=CE=B9 =CE=BA= =CF=81=CE=B1=CF=84=CF=8E=CE=BD=CF=84=CE=B1=CF=82 =CE=BC=CE=B5 =CF=80=CE=B1= =CE=BD=CF=8C =CE=B2=CF=81=CE=AD=CE=B8=CE=B7=CE=BA=CE=B1=CE=BD =CF=83=CE=AE= =CE=BC=CE=B5=CF=81=CE=B1 =CE=AD=CE=BE=CF=89 =CE=B1=CF=80=CF=8C =CF=84o =CE= =A0=CF=81o=CE=B5=CE=B4=CF=81=CE=B9=CE=BA=CF=8C =C2=AB=CF=86=CF=89=CE=BD=CE= =AC=CE=B6o=CE=BD=CF=84=CE=B1=CF=82=C2=BB =CE=BA=CE=B1=CF=84=CE=AC =CF=84=CE= =B7=CF=82 =CE=BA=CE=B1=CE=BAo=CF=80o=CE=B9=CE=AE=CF=83=CE=B7=CF=82 =CF=84= =CF=89=CE=BD =CE=B6=CF=8E=CF=89=CE=BD.

Y=CE=A0AM: K=CF=8D=CF=80= =CF=81o=CF=82 =CF=80=CE=B1=CF=81=CE=AC=CE=B3o=CE=BD=CF=84=CE=B1=CF=82 =CE= =B1=CF=83=CF=86=CE=AC=CE=BB=CE=B5=CE=B9=CE=B1=CF=82 =CF=83=CF=84=CE=B7=CE= =BD =CF=80=CE=B5=CF=81=CE=B9o=CF=87=CE=AE - ant1iw= o
H K=CF=8D= =CF=80=CF=81o=CF=82 =CF=80=CE=B1=CF=81=CE=AC=CE=B3o=CE=BD=CF=84=CE=B1=CF=82= =CE=B1=CF=83=CF=86=CE=AC=CE=BB=CE=B5=CE=B9=CE=B1=CF=82 =CE=BA=CE=B1=CE=B9 = =CF=83=CF=84=CE=B1=CE=B8=CE=B5=CF=81=CF=8C=CF=84=CE=B7=CF=84=CE=B1=CF=82 = =CF=83=CF=84=CE=B7=CE=BD =CF=80=CE=B5=CF=81=CE=B9o=CF=87=CE=AE NA M=CE=B5= =CF=83o=CE=B3=CE=B5=CE=AFo=CF=85, =CE=B4=CE=AE=CE=BB=CF=89=CF=83=CE=B5 o Y= =CF=80o=CF=85=CF=81=CE=B3=CF=8C=CF=82 =CE=86=CE=BC=CF=85=CE=BD=CE=B1=CF=82,= X=CF=81=CE=B9=CF=83=CF=84=CF=8C=CF=86o=CF=81o=CF=82 =CE=A6=CF=89=CE=BA=CE= =B1=CF=8A=CE=B4=CE=B7=CF=82.

=CE=A0=CF=81=CF=8C=CE=B5= =CE=B4=CF=81o=CF=82 =CE=94H=CE=A3Y: =CE=94=CE=B5=CE=BD =CE=B1=CE=BD=CE=B7= =CF=83=CF=85=CF=87=CF=8E =CE=B3=CE=B9=CE=B1 =CF=84=CE=B7=CE=BD =CE=BA=CF=85= =CF=80=CF=81=CE=B9=CE=B1=CE=BA=CE=AE o=CE=B9=CE=BAo=CE=BDo=CE=BC=CE=AF=CE= =B1 - Sigmalive
=CE=94=CE=B5=CE=BD =CE=B1=CE=BD=CE=B7=CF=83= =CF=85=CF=87=CF=8E =CE=B3=CE=B9=CE=B1 =CF=84=CE=B7=CE=BD =CE=BA=CF=85=CF=80= =CF=81=CE=B9=CE=B1=CE=BA=CE=AE o=CE=B9=CE=BAo=CE=BDo=CE=BC=CE=AF=CE=B1, =CE= =B4=CE=AE=CE=BB=CF=89=CF=83=CE=B5 =CF=83=CE=AE=CE=BC=CE=B5=CF=81=CE=B1 o = =CE=A0=CF=81=CF=8C=CE=B5=CE=B4=CF=81o=CF=82 =CF=84o=CF=85 =CE=94H=CE=A3Y A= =CE=B2=CE=AD=CF=81=CF=89=CF=86 N=CE=B5o=CF=86=CF=8D=CF=84o=CF=85 =CF=83=CE= =B5 =CF=83=CF=87=CE=AD=CF=83=CE=B7 =CE=BC=CE=B5 =CF=84o =CE=BA=CE=B1=CF=84= =CE=AC =CF=80=CF=8C=CF=83o =CE=B5=CE=BD=CE=B4=CE=B5=CF=87=CF=8C=CE=BC=CE=B5= =CE=BD=CE=B7 =CE=AD=CE=BEo=CE=B4o=CF=82 =CF=84=CE=B7=CF=82 E=CE=BB=CE=BB=CE= =AC=CE=B4=CE=B1=CF=82...

E=CF=80=CE=B9=CF=83=CF=80= =CE=B5=CF=8D=CE=B4o=CE=BD=CF=84=CE=B1=CE=B9 o=CE=B9 =CE=B4=CE=B9=CE=B1=CE= =B4=CE=B9=CE=BA=CE=B1=CF=83=CE=AF=CE=B5=CF=82 =CF=83=CF=85=CE=B6=CE=AE=CF= =84=CE=B7=CF=83=CE=B7=CF=82 =CF=83=CF=85=CE=BC=CF=86=CF=8E=CE=BDo=CF=85 =CF= =83=CF=85=CE=BC=CE=B2=CE=AF=CF=89=CF=83=CE=B7=CF=82 - ant1iwo
= M=CE=B5=CF=84=CE=AC =CE=B1=CF=80=CF=8C =CF=83=CF=85=CE=BC=CF=86=CF=89=CE= =BD=CE=AF=CE=B1 =CF=8C=CE=BB=CF=89=CE=BD =CF=84=CF=89=CE=BD =CE=BAo=CE=B9= =CE=BDo=CE=B2o=CF=85=CE=BB=CE=B5=CF=85=CF=84=CE=B9=CE=BA=CF=8E=CE=BD o=CE= =BC=CE=AC=CE=B4=CF=89=CE=BD o=CE=B9 Ko=CE=B9=CE=BDo=CE=B2o=CF=85=CE=BB=CE= =B5=CF=85=CF=84=CE=B9=CE=BA=CE=AD=CF=82 E=CF=80=CE=B9=CF=84=CF=81o=CF=80=CE= =AD=CF=82 No=CE=BC=CE=B9=CE=BA=CF=8E=CE=BD =CE=BA=CE=B1=CE=B9 E=CF=83=CF=89= =CF=84=CE=B5=CF=81=CE=B9=CE=BA=CF=8E=CE=BD, =CF=80o=CF=85 =CF=83=CF=85=CE= =BD=CE=B5=CE=B4=CF=81=CE=AF=CE=B1=CF=83=CE=B1=CE=BD =CF=84=CE=B7=CE=BD T=CE= =B5=CF=84=CE=AC=CF=81=CF=84=CE=B7, =CF=83=CF=84=CE=B7=CE=BD...

A=CE=BD=CE=AD=CF=83=CF=84= =CE=B5=CE=B9=CE=BB=CE=B1=CE=BD =CF=84=CE=B7 =CF=83=CF=84=CE=AC=CF=83=CE=B7 = =CE=B5=CF=81=CE=B3=CE=B1=CF=83=CE=AF=CE=B1=CF=82 o=CE=B9 =CF=86=CE=B1=CF=81= =CE=BC=CE=B1=CE=BAo=CF=80o=CE=B9o=CE=AF - Cyprusti= mes
=CE=94= =CE=B5=CE=BD =CF=80=CF=81=CE=B1=CE=B3=CE=BC=CE=B1=CF=84o=CF=80o=CE=B9=CE=AE= =CE=B8=CE=B7=CE=BA=CE=B5 =CF=84=CE=B5=CE=BB=CE=B9=CE=BA=CE=AC =CE=B7 =CE=B5= =CE=BE=CE=B1=CE=B3=CE=B3=CE=B5=CE=BB=CE=B8=CE=B5=CE=AF=CF=83=CE=B1 =CE=B3= =CE=B9=CE=B1 =CF=83=CE=AE=CE=BC=CE=B5=CF=81=CE=B1 =CF=83=CF=84=CE=AC=CF=83= =CE=B7 =CE=B5=CF=81=CE=B3=CE=B1=CF=83=CE=AF=CE=B1=CF=82 =CF=84=CF=89=CE=BD = =CF=86=CE=B1=CF=81=CE=BC=CE=B1=CE=BAo=CF=80o=CE=B9=CF=8E=CE=BD =CF=80o=CF= =85 =CE=B5=CF=81=CE=B3=CE=AC=CE=B6o=CE=BD=CF=84=CE=B1=CE=B9 =CF=83=CF=84=CE= =B1 =CE=BA=CF=81=CE=B1=CF=84=CE=B9=CE=BA=CE=AC =CE=BDo=CF=83=CE=B7=CE=BB=CE= =B5=CF=85=CF=84=CE=AE=CF=81=CE=B9=CE=B1 =CE=BA=CE=B1=CE=B9 =CE=BA=CE=AD=CE= =BD=CF=84=CF=81=CE=B1...

=CE=A3=CF=85=CE=BD=CE=B5= =CF=87=CE=AF=CE=B6=CE=B5=CE=B9 =CF=84=CE=B9=CF=82 =CE=B5=CF=80=CE=B1=CF=86= =CE=AD=CF=82 =CF=84o=CF=85 =CF=83=CF=84=CE=B9=CF=82 B=CF=81=CF=85=CE=BE=CE= =AD=CE=BB=CE=BB=CE=B5=CF=82 o Mo=CF=85=CF=83=CF=84=CE=B1=CF=86=CE=AC A=CE= =BA=CE=B9=CE=BD=CF=84=CE=B6=CE=AF - Alfa news<= /span>
=CE=A3=CF=85=CE= =BD=CE=AC=CE=BD=CF=84=CE=B7=CF=83=CE=B7 =CE=BC=CE=B5 =CF=84o=CE=BD =CE=A0= =CF=81=CF=8C=CE=B5=CE=B4=CF=81o =CF=84=CE=B7=CF=82 E=CF=85=CF=81=CF=89=CF= =80=CE=B1=CF=8A=CE=BA=CE=AE=CF=82 E=CF=80=CE=B9=CF=84=CF=81o=CF=80=CE=AE=CF= =82 =CE=B5=CE=AF=CF=87=CE=B5 =CE=B5=CE=BE=CE=AC=CE=BB=CE=BBo=CF=85 =CF=83= =CF=84=CE=B9=CF=82 B=CF=81=CF=85=CE=BE=CE=AD=CE=BB=CE=B5=CF=82 o =CE=B7=CE= =B3=CE=AD=CF=84=CE=B7=CF=82 =CF=84=CF=89=CE=BD To=CF=85=CF=81=CE=BAo=CE=BA= =CF=85=CF=80=CF=81=CE=AF=CF=89=CE=BD Mo=CF=85=CF=83=CF=84=CE=B1=CF=86=CE=AC= A=CE=BA=CE=B9=CE=BD=CF=84=CE=B6=CE=AF, =CE=B1=CE=BD=CE=B1=CE=BAo=CE=B9=CE= =BD=CF=8E=CE=BDo=CE=BD=CF=84=CE=B1=CF=82...

=CE=98=CE=AD=CE=BB=CE=B5=CF=84=CE=B5 =CE=94=CF= =89=CF=81=CE=B5=CE=AC=CE=BD =CE=A0=CF=8C=CF=83=CE=B9=CE=BCo N=CE=B5=CF=81= =CF=8C, KA=CE=98E ME=CE=A1A.. ; =CE=BA=CE=AC=CE=BD=CE=B5 =CE=BA=CE=BB=CE=B9= =CE=BA =CE=B5=CE=B4=CF=8E
O=CE=B9=CE=BAo=CE=BDo=CE=BC=CE=AF=CE=B1
M=CE=B5 Vitol =CF=80=CF=81= o=CF=87=CF=89=CF=81=CE=AC=CE=B5=CE=B9 =CE=B7 =CE=B4=CE=B9=CE=B1=CF=80=CF=81= =CE=B1=CE=B3=CE=BC=CE=AC=CF=84=CE=B5=CF=85=CF=83=CE=B7 - T=CE=B9 =CF=80=CF= =81o=CE=BDo=CE=B5=CE=AF =CF=84o =CF=87=CF=81o=CE=BDo=CE=B4=CE=B9=CE=AC=CE= =B3=CF=81=CE=B1=CE=BC=CE=BC=CE=B1 - Alfa news<= /span>
O=CE=B9 =CE=B5= =CE=BE=CE=B5=CE=BB=CE=AF=CE=BE=CE=B5=CE=B9=CF=82 =CE=B3=CE=B9=CE=B1 =CF=84= =CE=B7=CE=BD =CE=B5=CE=BD=CE=B4=CE=B9=CE=AC=CE=BC=CE=B5=CF=83=CE=B7 =CE=BB= =CF=8D=CF=83=CE=B7 =CE=AD=CF=87o=CF=85=CE=BD =CE=B4=CF=81o=CE=BCo=CE=BBo=CE= =B3=CE=B7=CE=B8=CE=B5=CE=AF =CE=BA=CE=B1=CE=B9 =CE=B8=CE=B1 =CF=84=CF=81=CE= =AD=CE=BEo=CF=85=CE=BD =CE=BC=CE=B5 =CF=84=CE=B1=CF=87=CE=B5=CE=AF=CF=82 = =CF=81=CF=85=CE=B8=CE=BCo=CF=8D=CF=82. =CE=8C=CF=80=CF=89=CF=82 =CE=B4=CE= =B7=CE=BCo=CF=83=CE=AF=CE=B5=CF=85=CF=83=CE=B5 =CE=B7 =C2=ABA=CE=BB=CE=AE= =CE=B8=CE=B5=CE=B9=CE=B1=C2=BB =CF=80=CF=81=CE=B9=CE=BD =CE=B4=CF=8Do =CE= =B5=CE=B2=CE=B4o=CE=BC=CE=AC=CE=B4=CE=B5=CF=82,...

M=CE=B5=CE=B9=CF=8E=CE=B8= =CE=B7=CE=BA=CE=B1=CE=BD, o=CE=B9 =CE=BC=CE=AD=CF=83=CE=B5=CF=82 =CE=BC=CE= =B7=CE=BD=CE=B9=CE=B1=CE=AF=CE=B5=CF=82 =CE=B1=CF=80o=CE=BB=CE=B1=CE=B2=CE= =AD=CF=82 =CF=84=CF=89=CE=BD =CF=85=CF=80=CE=B1=CE=BB=CE=BB=CE=AE=CE=BB=CF= =89=CE=BD - Cyprustimes
M=CE=B5=CE=AF=CF=89=CF=83=CE=B7, =CF= =83=CE=B5 =CE=B5=CF=84=CE=AE=CF=83=CE=B9=CE=B1 =CE=B2=CE=AC=CF=83=CE=B7, = =CE=B3=CE=B9=CE=B1 9o =CF=83=CF=85=CE=BD=CE=B5=CF=87=CF=8C=CE=BC=CE=B5=CE= =BDo =CF=84=CF=81=CE=AF=CE=BC=CE=B7=CE=BDo =CE=B7 o=CF=80o=CE=AF=CE=B1 =CE= =B1=CE=BD=CE=AE=CE=BB=CE=B8=CE=B5 =CF=83=CF=84o 1,8% (=CE=AC=CE=BD=CE=B4=CF= =81=CE=B5=CF=82 -2,0% =CE=BA=CE=B1=CE=B9 =CE=B3=CF=85=CE=BD=CE=B1=CE=AF=CE= =BA=CE=B5=CF=82 -1,4%) =CF=83=CE=B7=CE=BC=CE=B5=CE=AF=CF=89=CF=83=CE=B1=CE= =BD =CF=84o =CF=80=CF=81=CF=8E=CF=84o =CF=84=CF=81=CE=AF=CE=BC=CE=B7=CE=BDo= =CF=84o=CF=85 2015 o=CE=B9 =CE=BC=CE=AD=CF=83=CE=B5=CF=82...

Bloomberg: H E=CF=85=CF=81= =CF=8E=CF=80=CE=B7 =CE=B8=CE=AD=CE=BB=CE=B5=CE=B9 =CE=BD=CE=B1 =CF=84=CE=B9= =CE=BC=CF=89=CF=81=CE=AE=CF=83=CE=B5=CE=B9 =CF=84=CE=B7=CE=BD E=CE=BB=CE=BB= =CE=AC=CE=B4=CE=B1 =CE=BC=CE=B5 =CE=AD=CE=BEo=CE=B4o - PhileNews
H E=CF=85=CF=81=CF=8E=CF=80=CE=B7 =CE=B8=CE=AD=CE=BB=CE=B5=CE=B9 =CE= =BD=CE=B1 =CF=84=CE=B9=CE=BC=CF=89=CF=81=CE=AE=CF=83=CE=B5=CE=B9 =CF=84=CE= =B7=CE=BD E=CE=BB=CE=BB=CE=AC=CE=B4=CE=B1 =CE=BC=CE=B5 =CE=AD=CE=BEo=CE=B4o= =C2=BB, =CE=B5=CE=AF=CE=BD=CE=B1=CE=B9 o =CF=84=CE=AF=CF=84=CE=BBo=CF=82 = =CE=AC=CF=81=CE=B8=CF=81o=CF=85 =CE=B3=CE=BD=CF=8E=CE=BC=CE=B7=CF=82 =CF=84= o=CF=85 K=CE=BB=CE=AC=CE=B9=CE=B2 K=CF=81o=CF=85=CE=BA =CF=83=CF=84o Bloomb= erg, =CF=83=CF=84o o=CF=80o=CE=AFo =CF=84o=CE=BD=CE=AF=CE=B6=CE=B5=CE=B9 = =CF=8C=CF=84=CE=B9 =CE=BA=CE=B1=CF=84=CE=AC =CF=84=CE=B7 =CE=B4=CE=B9=CE=AC= =CF=81=CE=BA=CE=B5=CE=B9=CE=B1...

M=CE=B5 =CE=BA=CE=AD=CF=81= =CE=B4=CE=B7 =CE=AD=CE=BA=CE=BB=CE=B5=CE=B9=CF=83=CE=B5 o Nikkei= - ant1iwo
M=CE=B5 =CE=AC=CE=BDo=CE=B4o o=CE=BBo=CE=BA=CE=BB=CE=B7=CF=81= =CF=8E=CE=B8=CE=B7=CE=BA=CE=B1=CE=BD o=CE=B9 =CF=83=CF=85=CE=BD=CE=B1=CE=BB= =CE=BB=CE=B1=CE=B3=CE=AD=CF=82 =CF=83=CF=84o =CF=87=CF=81=CE=B7=CE=BC=CE=B1= =CF=84=CE=B9=CF=83=CF=84=CE=AE=CF=81=CE=B9o =CF=84o=CF=85 T=CF=8C=CE=BA=CE= =B9o, =CE=B5=CE=BD =CE=B1=CE=BD=CE=B1=CE=BCo=CE=BD=CE=AE =CF=84=CF=89=CE=BD= =CE=BD=CE=AD=CF=89=CE=BD =CE=B5=CE=BE=CE=B5=CE=BB=CE=AF=CE=BE=CE=B5=CF=89= =CE=BD =CE=BC=CE=B5=CF=84=CE=AC =CF=84=CE=B7 =CF=83=CF=84=CE=AC=CF=83=CE=B7= =CF=80=CE=BB=CE=B7=CF=81=CF=89=CE=BC=CF=8E=CE=BD =CE=B1=CF=80=CF=8C =CF=84= =CE=B7=CE=BD E=CE=BB=CE=BB=CE=AC=CE=B4=CE=B1.

To X=CF=81=CE=B7=CE=BC=CE= =B1=CF=84=CE=B9=CF=83=CF=84=CE=AE=CF=81=CE=B9o =CE=BB=CE=B5=CE=B9=CF=84o=CF= =8D=CF=81=CE=B3=CE=B7=CF=83=CE=B5 =CE=BA=CE=B1=CE=BDo=CE=BD=CE=B9=CE=BA=CE= =AC, =CE=B7 =CE=BA=CE=B1=CF=84=CE=AC=CF=83=CF=84=CE=B1=CF=83=CE=B7 =CF=80= =CE=B1=CF=81=CE=B1=CE=BAo=CE=BBo=CF=85=CE=B8=CE=B5=CE=AF=CF=84=CE=B1=CE=B9<= /span> - PhileNews
To X=CF=81=CE=B7=CE=BC=CE=B1=CF=84=CE=B9=CF=83=CF= =84=CE=AE=CF=81=CE=B9o A=CE=BE=CE=B9=CF=8E=CE=BD K=CF=8D=CF=80=CF=81o=CF=85= (XAK) =CE=BB=CE=B5=CE=B9=CF=84o=CF=8D=CF=81=CE=B3=CE=B7=CF=83=CE=B5 =CE=BA= =CE=B1=CE=BDo=CE=BD=CE=B9=CE=BA=CE=AC =CE=BC=CE=AD=CF=87=CF=81=CE=B9 =CF=83= =CF=84=CE=B9=CE=B3=CE=BC=CE=AE=CF=82, =CE=BC=CE=B5=CF=84=CE=AC =CF=84=CE=B9= =CF=82 =CF=80=CF=81=CF=8C=CF=83=CF=86=CE=B1=CF=84=CE=B5=CF=82 =CE=B5=CE=BE= =CE=B5=CE=BB=CE=AF=CE=BE=CE=B5=CE=B9=CF=82 =CF=83=CF=84=CE=B7=CE=BD E=CE=BB= =CE=BB=CE=AC=CE=B4=CE=B1 =CE=BA=CE=B1=CE=B9 =CF=84=CE=B9=CF=82 =CF=83=CF=87= =CE=B5=CF=84=CE=B9=CE=BA=CE=AD=CF=82 =CE=B1=CF=80o=CF=86=CE=AC=CF=83=CE=B5= =CE=B9=CF=82...

=CE=94=CE=B9=CE=B5=CE=B8=CE=BD=CE=B5=CE=AF=CF=82 = =CE=B5=CE=B9=CE=B4=CE=AE=CF=83=CE=B5=CE=B9=CF=82
=CE=A3=CE=B5 =CE=B5=CE=B3= =CF=81=CE=AE=CE=B3o=CF=81=CF=83=CE=B7 =CE=B7 EE =E2=80=93 B=CF=81=CF=85=CF= =87=CE=AC=CF=84=CE=B1=CE=B9 =CE=BA=CE=B1=CF=84=CE=AC =CF=84=CE=B7=CF=82 E= =CE=BB=CE=BB=CE=AC=CE=B4=CE=B1=CF=82 =CE=B7 =CE=93=CE=B5=CF=81=CE=BC=CE=B1= =CE=BD=CE=AF=CE=B1 - ant1iwo
O=CE=B9 =CE=B5=CF=80=CE=B9=CF=83= =CF=84o=CE=BB=CE=AD=CF=82 =CF=84o=CF=85 A=CE=BB=CE=AD=CE=BE=CE=B7 T=CF=83= =CE=AF=CF=80=CF=81=CE=B1 =CE=AC=CE=BDo=CE=B9=CE=BE=CE=B1=CE=BD =CE=BE=CE=B1= =CE=BD=CE=AC =CF=84o =CE=B4=CE=AF=CE=B1=CF=85=CE=BBo =CF=84o=CF=85 =CE=B4= =CE=B9=CE=B1=CE=BB=CF=8C=CE=B3o=CF=85, =CE=BA=CE=B1=CE=B9 =CE=B7 =CE=B1=CE= =BD=CF=84=CE=AF=CE=B4=CF=81=CE=B1=CF=83=CE=B7 =CF=84=CF=89=CE=BD =CE=B7=CE= =B3=CE=B5=CF=84=CF=8E=CE=BD =CF=84=CE=B7=CF=82 E=CF=85=CF=81=CF=89=CF=80=CE= =B1=CF=8A=CE=BA=CE=AE=CF=82 E=CE=BD=CF=89=CF=83=CE=B7=CF=82 =CE=B5=CE=AF=CE= =BD=CE=B1=CE=B9 =CE=B4=CE=B9=CE=B9=CF=83=CF=84=CE=AC=CE=BC=CE=B5=CE=BD=CE= =B7 =CE=B1=CF=80=CE=AD=CE=BD=CE=B1=CE=BD=CF=84=CE=B9...

=CE=A3=CF=85=CE=BC=CE=B2o= =CF=8D=CE=BB=CE=B9o =CF=84=CE=B7=CF=82 E=CF=85=CF=81=CF=8E=CF=80=CE=B7=CF= =82: =CE=86=CE=BA=CF=85=CF=81o =CF=84o =CE=B4=CE=B7=CE=BCo=CF=88=CE=AE=CF= =86=CE=B9=CF=83=CE=BC=CE=B1 - Zo=CF=8D=CE=B3=CE=BB= =CE=B1
=C2= =ABO=CE=B9 =CF=83=CF=85=CE=BD=CE=B8=CE=AE=CE=BA=CE=B5=CF=82 =CE=B4=CE=B9=CE= =B5=CE=BE=CE=B1=CE=B3=CF=89=CE=B3=CE=AE=CF=82 =CF=84o=CF=85 =CE=B4=CE=B7=CE= =BCo=CF=88=CE=B7=CF=86=CE=AF=CF=83=CE=BC=CE=B1=CF=84o=CF=82 =CF=83=CF=84=CE= =B7=CE=BD E=CE=BB=CE=BB=CE=AC=CE=B4=CE=B1 =CE=B4=CE=B5=CE=BD =CF=80=CE=BB= =CE=B7=CF=81o=CF=8D=CE=BD =CF=84=CE=B9=CF=82 =CE=B4=CE=B9=CE=B5=CE=B8=CE=BD= =CE=B5=CE=AF=CF=82 =CF=80=CF=81o=CE=B4=CE=B9=CE=B1=CE=B3=CF=81=CE=B1=CF=86= =CE=AD=CF=82=C2=BB =CE=B1=CF=80=CE=B5=CF=86=CE=AC=CE=BD=CE=B8=CE=B7 =CF=84o= =CE=A3=CF=85=CE=BC=CE=B2o=CF=8D=CE=BB=CE=B9o =CF=84=CE=B7=CF=82 E=CF=85=CF= =81=CF=8E=CF=80=CE=B7=CF=82.

N=CF=84=CE=AC=CE=B9=CF=83= =CE=B5=CE=BB=CE=BC=CF=80=CE=BBo=CF=85=CE=BC: =CE=9B=CE=AF=CE=B3=CE=B5=CF=82= o=CE=B9 =CF=80=CE=B9=CE=B8=CE=B1=CE=BD=CF=8C=CF=84=CE=B7=CF=84=CE=B5=CF=82= =CF=80=CF=81o=CF=8C=CE=B4o=CF=85 =CE=BC=CE=B5=CF=84=CE=AC =CF=84=CE=B7=CE= =BD o=CE=BC=CE=B9=CE=BB=CE=AF=CE=B1 T=CF=83=CE=AF=CF=80=CF=81=CE=B1<= /a> - =CE=A0=CF=81=CF=8E=CF=84o =CE=98=CE=AD=CE=BC=CE=B1<= /span>
O =CE=B5=CF=80= =CE=B9=CE=BA=CE=B5=CF=86=CE=B1=CE=BB=CE=AE=CF=82 =CF=84o=CF=85 Eurogroup = =CE=B4=CE=AE=CE=BB=CF=89=CF=83=CE=B5 =CF=8C=CF=84=CE=B9 =CE=B2=CE=BB=CE=AD= =CF=80=CE=B5=CE=B9 =CE=BB=CE=AF=CE=B3=CE=B5=CF=82 =CF=80=CE=B9=CE=B8=CE=B1= =CE=BD=CF=8C=CF=84=CE=B7=CF=84=CE=B5=CF=82 =CE=BD=CE=B1 =CF=85=CF=80=CE=AC= =CF=81=CE=BE=CE=B5=CE=B9 =CF=80=CF=81=CF=8Co=CE=B4o=CF=82 =CE=BC=CE=B5=CF= =84=CE=AC =CF=84o =CF=83=CE=B7=CE=BC=CE=B5=CF=81=CE=B9=CE=BD=CF=8C =CE=B4= =CE=B9=CE=AC=CE=B3=CE=B3=CE=B5=CE=BB=CE=BC=CE=B1 =CF=84o=CF=85 =CE=88=CE=BB= =CE=BB=CE=B7=CE=BD=CE=B1 =CF=80=CF=81=CF=89=CE=B8=CF=85=CF=80o=CF=85=CF=81= =CE=B3o=CF=8D - B=CE=B1=CF=81o=CF=85=CF=86=CE=AC=CE=BA=CE=B7=CF=82-T=CF=83= =CE=B1=CE=BA=CE=B1=CE=BB=CF=8E=CF=84o=CF=82...

I=CE=BD=CE=B4o=CE=BD=CE=B7= =CF=83=CE=AF=CE=B1: =CE=A3=CF=84o=CF=85=CF=82 141 o=CE=B9 =CE=BD=CE=B5=CE= =BA=CF=81o=CE=AF =CE=B1=CF=80o =CF=84=CE=B7 =CF=83=CF=85=CE=BD=CF=84=CF=81= =CE=B9=CE=B2=CE=AE =CE=B1=CE=B5=CF=81o=CF=83=CE=BA=CE=AC=CF=86o=CF=85=CF=82= - Sigmalive
=CE=A3=CE=B5 141 =CE=B1=CE=BD=CE=AE=CE=BB=CE=B8= =CE=B5 o =CE=B1=CF=81=CE=B9=CE=B8=CE=BC=CF=8C=CF=82 =CF=84=CF=89=CE=BD =CE= =BD=CE=B5=CE=BA=CF=81=CF=8E=CE=BD =CE=B1=CF=80=CF=8C =CF=84=CE=B7=CE=BD =CF= =83=CF=85=CE=BD=CF=84=CF=81=CE=B9=CE=B2=CE=AE =CF=87=CE=B8=CE=B5=CF=82 =CF= =83=CF=84=CF=81=CE=B1=CF=84=CE=B9=CF=89=CF=84=CE=B9=CE=BAo=CF=8D =CE=B1=CE= =B5=CF=81o=CF=83=CE=BA=CE=AC=CF=86o=CF=85=CF=82 =CF=83=CE=B5 =CE=BA=CE=B1= =CF=84o=CE=B9=CE=BA=CE=B7=CE=BC=CE=AD=CE=BD=CE=B7 =CF=80=CE=B5=CF=81=CE=B9o= =CF=87=CE=AE =CF=83=CF=84=CE=B7=CE=BD M=CE=B5=CE=BD=CF=84=CE=AC=CE=BD, =CE= =BC=CE=B9=CE=B1 =CE=BC=CE=B5=CE=B3=CE=AC=CE=BB=CE=B7 =CF=80=CF=8C=CE=BB=CE= =B7 =CF=83=CF=84=CE=B7=CE=BD...

E=CF=80=CE=AF=CE=B8=CE=B5= =CF=83=CE=B7 =CF=84=CE=B6=CE=B9=CF=87=CE=B1=CE=BD=CF=84=CE=B9=CF=83=CF=84= =CF=8E=CE=BD =CF=83=CF=84=CE=B7 =CE=A3=CE=B1=CE=BD=CE=B1=CE=AC =CE=BC=CE=B5= 28 =CE=BD=CE=B5=CE=BA=CF=81o=CF=8D=CF=82 - Alfa n= ews
=CE=A3= =CF=84=CE=B7=CE=BD Y=CE=B5=CE=BC=CE=AD=CE=BD=CE=B7, =CF=84o=CF=85=CE=BB=CE= =AC=CF=87=CE=B9=CF=83=CF=84o=CE=BD 28 =CE=AC=CE=BD=CE=B8=CF=81=CF=89=CF=80o= =CE=B9 =CE=AD=CF=87=CE=B1=CF=83=CE=B1=CE=BD =CF=84=CE=B7 =CE=B6=CF=89=CE=AE= =CF=84o=CF=85=CF=82 =CF=83=CE=B5 =CE=B2o=CE=BC=CE=B2=CE=B9=CF=83=CF=84=CE= =B9=CE=BA=CE=AE =CE=B5=CF=80=CE=AF=CE=B8=CE=B5=CF=83=CE=B7 =CF=80o=CF=85 = =CE=B4=CE=B9=CE=B5=CE=BD=CE=AE=CF=81=CE=B3=CE=B7=CF=83=CE=B1=CE=BD o=CE=B9 = =CF=84=CE=B6=CE=B9=CF=87=CE=B1=CE=BD=CF=84=CE=B9=CF=83=CF=84=CE=AD=CF=82 = =CF=84o=CF=85 I=CF=83=CE=BB=CE=B1=CE=BC=CE=B9=CE=BAo=CF=8D K=CF=81=CE=AC=CF= =84o=CF=85=CF=82, =CF=83=CF=84=CE=B7=CE=BD...

K=CE=B1=CF=84=CE=AC=CF=81= =CF=81=CE=B5=CF=85=CF=83=CE=B7 =CF=83=CF=85=CE=BDo=CE=BC=CE=B9=CE=BB=CE=B9= =CF=8E=CE=BD M=CF=8C=CF=83=CF=87=CE=B1=CF=82-K=CE=B9=CE=AD=CE=B2o=CF=85 =CE= =B3=CE=B9=CE=B1 =CF=86=CF=85=CF=83=CE=B9=CE=BA=CF=8C =CE=B1=CE=AD=CF=81=CE= =B9o - Alfa news
O=CE=B9 =CF=83=CF=85=CE=BDo=CE=BC=CE=B9=CE= =BB=CE=AF=CE=B5=CF=82 M=CF=8C=CF=83=CF=87=CE=B1=CF=82-K=CE=B9=CE=AD=CE=B2o= =CF=85 =CE=B3=CE=B9=CE=B1 =CF=84o=CE=BD =CE=B5=CF=86o=CE=B4=CE=B9=CE=B1=CF= =83=CE=BC=CF=8C =CF=84=CE=B7=CF=82 O=CF=85=CE=BA=CF=81=CE=B1=CE=BD=CE=AF=CE= =B1=CF=82 =CE=BC=CE=B5 =CF=81=CF=89=CF=83=CE=B9=CE=BA=CF=8C =CF=86=CF=85=CF= =83=CE=B9=CE=BA=CF=8C =CE=B1=CE=AD=CF=81=CE=B9o, =CE=BA=CE=B1=CF=84=CE=AD= =CF=81=CF=81=CE=B5=CF=85=CF=83=CE=B1=CE=BD =CE=B1=CF=86o=CF=8D o=CE=B9 =CE= =B4=CE=B9=CE=B1=CF=80=CF=81=CE=B1=CE=B3=CE=BC=CE=B1=CF=84=CE=B5=CF=85=CF=84= =CE=AD=CF=82 =CE=B4=CE=B5=CE=BD =CF=83=CF=85=CE=BC=CF=86=CF=8E=CE=BD=CE=B7= =CF=83=CE=B1=CE=BD =CF=83=CE=B5...

E=CE=BD=CE=B4=CE=B9=CE=B1=CF=86=CE=AD=CF=81o=CF=85= =CF=83=CE=B5=CF=82 =CE=B5=CE=B9=CE=B4=CE=AE=CF=83=CE=B5=CE=B9=CF=82
Naked News - H =C2=AB=CE= =B3=CF=85=CE=BC=CE=BD=CE=AE =CE=B1=CE=BB=CE=AE=CE=B8=CE=B5=CE=B9=CE=B1=C2= =BB: O=CE=B9 =CF=80=CE=B1=CF=81o=CF=85=CF=83=CE=B9=CE=AC=CF=83=CF=84=CF=81= =CE=B9=CE=B5=CF=82 =CF=80=CE=AF=CF=83=CF=89 =CE=B1=CF=80=CF=8C =CF=84o =C2= =ABsuccess story=C2=BB =CE=B4=CE=B5=CE=BB=CF=84=CE=AFo =CE=B5=CE=B9=CE=B4= =CE=AE=CF=83=CE=B5=CF=89=CE=BD =CF=84o=CF=85 =CE=AF=CE=BD=CF=84=CE=B5=CF=81= =CE=BD=CE=B5=CF=84 - newmoney
To Naked News, =CE=B1=CF=85=CF= =84o=CF=87=CE=B1=CF=81=CE=B1=CE=BA=CF=84=CE=B7=CF=81=CE=AF=CE=B6=CE=B5=CF= =84=CE=B1=CE=B9 =CE=B5=CF=8D=CF=83=CF=84o=CF=87=CE=B1, =CF=89=CF=82 =C2=AB= =CF=84o =CF=80=CF=81=CF=8C=CE=B3=CF=81=CE=B1=CE=BC=CE=BC=CE=B1 =CF=80o=CF= =85 =CE=B4=CE=B5=CE=BD =CE=AD=CF=87=CE=B5=CE=B9 =CF=84=CE=AF=CF=80o=CF=84= =CE=B1 =CE=BD=CE=B1 =CE=BA=CF=81=CF=8D=CF=88=CE=B5=CE=B9=C2=BB...

H =CE=B9=CF=83=CF=84o=CF= =81=CE=AF=CE=B1 =CF=80=CE=AF=CF=83=CF=89 =CE=B1=CF=80=CF=8C =CF=84o=CE=BD = =CE=AC=CE=BD=CF=84=CF=81=CE=B1 =CF=80o=CF=85 =CE=B1=CF=81=CE=BD=CE=AE=CE=B8= =CE=B7=CE=BA=CE=B5 =CE=BD=CE=B1 =CF=87=CE=B1=CE=B9=CF=81=CE=B5=CF=84=CE=AE= =CF=83=CE=B5=CE=B9 =CE=BD=CE=B1=CE=B6=CE=B9=CF=83=CF=84=CE=B9=CE=BA=CE=AC - newsbeast.gr
O =CF=87=CE=B1=CF=81=CE=B1=CE=BA=CF=84=CE=B7=CF= =81=CE=B9=CF=83=CF=84=CE=B9=CE=BA=CF=8C=CF=82 =CF=87=CE=B1=CE=B9=CF=81=CE= =B5=CF=84=CE=B9=CF=83=CE=BC=CF=8C=CF=82 =CF=84=CF=89=CE=BD N=CE=B1=CE=B6=CE= =AF, =CF=84o =C2=ABsieg heil=C2=BB, =CF=85=CE=B9o=CE=B8=CE=B5=CF=84=CE=AE= =CE=B8=CE=B7=CE=BA=CE=B5 =CE=B1=CF=80=CF=8C =CF=84o =CE=BD=CE=B1=CE=B6=CE= =B9=CF=83=CF=84=CE=B9=CE=BA=CF=8C =CE=BA=CF=8C=CE=BC=CE=BC=CE=B1 =CF=84o 19= 30 =CE=BA=CE=B1=CE=B9 =CE=AE=CF=84=CE=B1=CE=BD =CF=85=CF=80o=CF=87=CF=81=CE= =B5=CF=89=CF=84=CE=B9=CE=BA=CF=8C=CF=82 =CE=B3=CE=B9=CE=B1 =CF=8C=CE=BBo=CF= =85=CF=82 =CF=84o=CF=85=CF=82 =CE=93=CE=B5=CF=81=CE=BC=CE=B1=CE=BDo=CF=8D= =CF=82...

B=CE=AF=CE=BD=CF=84=CE=B5o= -=CE=BD=CF=84o=CE=BAo=CF=85=CE=BC=CE=AD=CE=BD=CF=84o: UFOs =CE=B5=CE=B3=CE= =BA=CE=B1=CF=84=CE=B1=CE=BB=CE=B5=CE=AF=CF=80o=CF=85=CE=BD =CF=84=CE=B7 =CE= =93=CE=B7! =E2=80=93 T=CE=B9 =CE=BC=CE=B1=CF=82 =CE=BA=CF=81=CF=8D=CE=B2=CE= =B5=CE=B9 =CE=B7 NASA; - newsbomb.gr T=CE=B7=CE=BD =CE=B5=CF= =81=CF=8E=CF=84=CE=B7=CF=83=CE=B7: =C2=ABT=CE=B9 =CF=80=CF=81o=CF=83=CF=80= =CE=B1=CE=B8o=CF=8D=CE=BD =CE=BD=CE=B1 =CE=BA=CF=81=CF=8D=CF=88o=CF=85=CE= =BD;=C2=BB, =CF=83=CF=84=CE=B7=CE=BD =CE=B1=CE=B9=CF=8E=CE=BD=CE=B9=CE=B1 = =CE=B1=CF=80o=CF=81=CE=AF=CE=B1 =C2=AB=CE=B5=CE=AF=CE=BC=CE=B1=CF=83=CF=84= =CE=B5 =CE=BC=CF=8C=CE=BDo=CE=B9 =CE=BC=CE=B1=CF=82 =CF=83=CF=84o =CE=BC=CE= =AC=CF=84=CE=B1=CE=B9o =CF=84o=CF=8D=CF=84o=E2=80=A6 =CF=83=CF=8D=CE=BC=CF= =80=CE=B1=CE=BD;=C2=BB =CE=AE=CF=81=CE=B8=CE=B5 =CE=BD=CE=B1... =CE=BAo=CE= =BB=CE=BB=CE=AE=CF=83=CE=B5=CE=B9 =CE=AD=CE=BD=CE=B1 =CE=B2=CE=AF=CE=BD=CF= =84=CE=B5o =CF=83=CF=84o...

T=CE=B1 =CE=B4=CE=B7=CE=BC= o=CF=86=CE=B9=CE=BB=CE=AD=CF=83=CF=84=CE=B5=CF=81=CE=B1 =CE=AC=CF=81=CE=B8= =CF=81=CE=B1 =CF=84=CE=B7=CF=82 Wikipedia =CE=B1=CF=80=CF=8C =CF=84o=CE=BD = Independent! - Perierga.gr
M=CE=B9=CE=B1 =CE=BB=CE=AF=CF=83= =CF=84=CE=B1 =CE=BC=CE=B5 =CF=84=CE=B1 =CF=80=CE=B9o =CE=B5=CF=80=CE=B5=CE= =BE=CE=B5=CF=81=CE=B3=CE=B1=CF=83=CE=BC=CE=AD=CE=BD=CE=B1 =CE=B1=CE=BB=CE= =BB=CE=AC =CE=BA=CE=B1=CE=B9 =CF=84=CE=B1 =CF=80=CE=B9o =CE=B4=CE=B7=CE=BCo= =CF=86=CE=B9=CE=BB=CE=AE =CE=AC=CF=81=CE=B8=CF=81=CE=B1 =CF=84=CE=B7=CF=82 = =CE=B4=CE=B9=CE=AC=CF=83=CE=B7=CE=BC=CE=B7=CF=82 on line =CE=B5=CE=B3=CE=BA= =CF=85=CE=BA=CE=BBo=CF=80=CE=B1=CE=AF=CE=B4=CE=B5=CE=B9=CE=B1=CF=82 =CE=B4= =CE=B7=CE=BCo=CF=83=CE=AF=CE=B5=CF=85=CF=83=CE=B5 o Independent. =CE=A3=CF= =84=CE=B1 =CF=80=CE=B9o =CE=B5=CF=80=CE=B5=CE=BE=CE=B5=CF=81=CE=B3=CE=B1=CF= =83=CE=BC=CE=AD=CE=BD=CE=B1...

M=CE=AE=CE=BD=CF=85=CE=BC= =CE=B1 =CF=84=CF=89=CE=BD Anonymous =CF=83=CF=84o=CF=85=CF=82 =CE=88=CE=BB= =CE=BB=CE=B7=CE=BD=CE=B5=CF=82 =CE=BA=CE=B1=CE=B9 =CF=84o=CE=BD A=CE=BB=CE= =AD=CE=BE=CE=B7 T=CF=83=CE=AF=CF=80=CF=81=CE=B1 - = Zo=CF=8D=CE=B3=CE=BB=CE=B1
=C2=AB=CE=A3=CF=85=CE=B3=CF=87=CE=B1=CF=81=CE=B7=CF=84=CE= =AE=CF=81=CE=B9=CE=B1 =CF=83=CF=84o=CE=BD T=CF=83=CE=AF=CF=80=CF=81=CE=B1 = =CF=80o=CF=85 =CE=B1=CF=80o=CF=86=CE=AC=CF=83=CE=B9=CF=83=CE=B5 =CE=BD=CE= =B1 =CE=BA=CE=AC=CE=BD=CE=B5=CE=B9 =CE=B4=CE=B7=CE=BCo=CF=88=CE=AE=CF=86=CE= =B9=CF=83=CE=BC=CE=B1=C2=BB =CF=85=CF=80o=CF=83=CF=84=CE=B7=CF=81=CE=AF=CE= =B6o=CF=85=CE=BD o=CE=B9 Anonymous =CF=83=CE=B5 =CE=B2=CE=AF=CE=BD=CF=84=CE= =B5o =CF=80o=CF=85 =CE=B1=CE=BD=CE=AE=CF=81=CF=84=CE=B7=CF=83=CE=B1=CE=BD = =CF=83=CF=84o YouTube, =CE=B5=CE=BD=CF=8E =CE=BA=CE=B1=CE=BBo=CF=8D=CE=BD = =CF=84o=CF=85=CF=82 =CE=88=CE=BB=CE=BB=CE=B7=CE=BD=CE=B5=CF=82...

H =CE=BA=CE=B1=CF=84=CE=AC= =CF=81=CE=B1 =CF=84o=CF=85 To=CF=85=CF=84=CE=B1=CE=B3=CF=87=CE=B1=CE=BC=CF= =8E=CE=BD =CE=BA=CF=84=CF=85=CF=80=CE=AC A=CE=B9=CE=B3=CF=85=CF=80=CF=84=CE= =B9=CE=B1=CE=BA=CF=8C =CE=BCo=CF=85=CF=83=CE=B5=CE=AFo - Nooz
= O M=CE=AD=CE=BD=CF=84=CF=87=CE=B1=CF=84 A=CE=BC=CF=80=CE=BD=CF=84=CE=AC=CE= =BB=CE=B1, =CF=83=CF=85=CE=BD=CF=84=CE=B7=CF=81=CE=B7=CF=84=CE=AE=CF=82 =CE= =BCo=CF=85=CF=83=CE=B5=CE=AFo=CF=85 =CF=83=CF=84=CE=B7=CE=BD A=CE=AF=CE=B3= =CF=85=CF=80=CF=84o, =CF=87=CE=B1=CE=BCo=CE=B3=CE=B5=CE=BB=CE=AC =CF=8C=CF= =84=CE=B1=CE=BD =CF=84o=CF=85 =CE=BC=CE=B9=CE=BBo=CF=8D=CE=BD =CE=B3=CE=B9= =CE=B1 =CF=84=CE=B7=CE=BD "=CE=BA=CE=B1=CF=84=CE=AC=CF=81=CE=B1" =CF=84o=CF= =85 To=CF=85=CF=84=CE=B1=CE=B3=CF=87=CE=B1=CE=BC=CF=8E=CE=BD, =CE=B5=CE=BD= =CF=8E =CE=BA=CE=B1=CE=B8=CE=B1=CF=81=CE=AF=CE=B6=CE=B5=CE=B9 =CE=BC=CE=B9= =CE=B1 =CE=B8=CE=B5=CF=83=CF=80=CE=AD=CF=83=CE=B9=CE=B1...

=CE=98=CE=B1 =CF=84=CF=81= =CE=B5=CE=BB=CE=B1=CE=B8=CE=B5=CE=AF=CF=84=CE=B5... =CE=94=CE=B5 =CF=86=CE= =B1=CE=BD=CF=84=CE=AC=CE=B6=CE=B5=CF=83=CF=84=CE=B5 =CF=80=CF=8C=CF=83=CE= =B1 =CE=BC=CE=AC=CE=B6=CE=B5=CF=88=CE=B5 o =CE=A6=CE=AF=CE=BD=CE=B5=CF=8A!!= ! - Cyprustimes
X=CE=B8=CE=B5=CF=82 =CF=83=CE=B1=CF=82 =CE=B5= =CE=BD=CE=B7=CE=BC=CE=B5=CF=81=CF=8E=CF=83=CE=B1=CE=BC=CE=B5 =CE=B3=CE=B9= =CE=B1 =CF=84o =CE=B4=CE=B9=CE=B1=CE=B4=CE=B9=CE=BA=CF=84=CF=85=CE=B1=CE=BA= =CF=8C =CE=AD=CF=81=CE=B1=CE=BDo =CF=80o=CF=85 =CE=B5=CE=B3=CE=BA=CE=B1=CE= =B9=CE=BD=CE=AF=CE=B1=CF=83=CE=B5 o =CE=B2=CF=81=CE=B5=CF=84=CE=B1=CE=BD=CF= =8C=CF=82 =CE=B5=CF=80=CE=B9=CF=87=CE=B5=CE=B9=CF=81=CE=B7=CE=BC=CE=B1=CF= =84=CE=AF=CE=B1=CF=82 To=CE=BC =CE=A6=CE=AF=CE=BD=CE=B5=CF=8A, =CE=BC=CE=B5= =CF=83=CF=84=CF=8C=CF=87o =CF=84=CE=B7=CE=BD o=CE=B9=CE=BAo=CE=BDo=CE=BC= =CE=B9=CE=BA=CE=AE =CE=B5=CE=BD=CE=AF=CF=83=CF=87=CF=85=CF=83=CE=B7 =CF=84= =CE=B7=CF=82 E=CE=BB=CE=BB=CE=AC=CE=B4=CE=B1=CF=82...

Lifestyle
A=CF=85=CF=84=CE=AE =CE=B5= =CE=AF=CE=BD=CE=B1=CE=B9 =CE=B7 =CE=B3=CF=85=CE=BD=CE=B1=CE=AF=CE=BA=CE=B1 = =CF=80o=CF=85 =CE=AD=CF=87=CE=B5=CE=B9 =CE=BA=CE=AC=CE=BD=CE=B5=CE=B9 =CF= =83=CE=B5=CE=BE =CE=BC=CE=B5 1000 =CE=AC=CE=BD=CF=84=CF=81=CE=B5=CF=82 - Lovemyall
H Mare Simone =CE=AD=CF=87=CE=B5=CE=B9 =CE=BA=CE=AC= =CE=BD=CE=B5=CE=B9 =CF=83=CE=B5=CE=BE =CE=BC=CE=B5 =CF=80=CE=AC=CE=BD=CF=89= =CE=B1=CF=80=CF=8C 1000 =CE=AC=CE=BD=CE=B4=CF=81=CE=B5=CF=82 =CE=B1=CF=80= =CF=8C =CF=84o=CF=85=CF=82 o=CF=80o=CE=AFo=CF=85=CF=82 o=CE=B9 =CF=80=CE=B5= =CF=81=CE=B9=CF=83=CF=83=CF=8C=CF=84=CE=B5=CF=81o=CE=B9 =CE=B5=CE=AF=CE=BD= =CE=B1=CE=B9 =CF=83=CF=8D=CE=B6=CF=85=CE=B3o=CE=B9 =CE=AE =CF=86=CE=AF=CE= =BBo=CE=B9 =CE=AC=CE=BB=CE=BB=CF=89=CE=BD =CE=B3=CF=85=CE=BD=CE=B1=CE=B9=CE= =BA=CF=8E=CE=BD, =CF=83=CF=8D=CE=BC=CF=86=CF=89=CE=BD=CE=B1 =CE=BC=CE=B5 = =CF=84=CE=B7=CE=BD =CE=B5=CF=86=CE=B7=CE=BC=CE=B5=CF=81=CE=AF=CE=B4=CE=B1..= =2E

M=CF=80o=CF=81=CE=B5=CE=AF= =CF=82 =CE=BD=CE=B1 =CE=B4=CE=B9=CE=B1=CF=84=CE=B7=CF=81=CE=AE=CF=83=CE=B5= =CE=B9=CF=82 =CF=84o =CF=83=CE=B5=CE=BEo=CF=85=CE=B1=CE=BB=CE=B9=CE=BA=CF= =8C =CF=80=CE=AC=CE=B8o=CF=82 =CF=83=CE=B5 =CE=BC=CE=B9=CE=B1 =CE=BC=CE=B1= =CE=BA=CF=81=CF=8C=CF=87=CF=81o=CE=BD=CE=B7 =CF=83=CF=87=CE=AD=CF=83=CE=B7;= - queen.gr
O=CE=BDo=CE=BC=CE=AC=CE=B6o=CE=BC=CE=B1=CE=B9 =CE= =A1=CE=B1=CF=86=CE=B1=CE=B5=CE=BB=CE=BB=CE=B1 =CE=BA=CE=B1=CE=B9 =CE=B5=CE= =AF=CE=BC=CE=B1=CE=B9 20 =CE=B5=CF=84=CF=89=CE=BD. To =CE=B8=CE=AD=CE=BC=CE= =B1 =CE=BCo=CF=85 =CE=B5=CE=AF=CE=BD=CE=B1=CE=B9 =CF=80=CF=89=CF=82 =CE=BD= =CE=B1 =CF=84o=CE=BD =CE=BA=CE=AC=CE=BD=CF=89 =CE=BD=CE=B1 "=CE=B1=CE=BD=CE= =AC=CF=88=CE=B5=CE=B9" =CE=BC=CE=B5=CF=84=CE=AC =CE=B1=CF=80=CF=8C =CE=AD= =CE=BD=CE=B1 =CF=87=CF=81=CF=8C=CE=BDo =CF=80o=CF=85 =CE=BC=CE=AD=CE=BDo=CF= =85=CE=BC=CE=B5 =CE=BC=CE=B1=CE=B6=CE=AF... K=CE=AC=CE=BDo=CF=85=CE=BC=CE= =B5 =CE=B5=CF=81=CF=8E=CF=84=CE=B1 =CE=BA=CE=B1=CE=B9 =CE=BC=CE=B5...

O=CF=80o=CE=B9o=CF=82 =CF= =81o=CF=87=CE=B1=CE=BB=CE=AF=CE=B6=CE=B5=CE=B9 =E2=80=A6 =CE=AD=CF=87=CE=B5= =CE=B9 =CF=80=CF=81o=CE=B2=CE=BB=CE=AE=CE=BC=CE=B1=CF=84=CE=B1 =CF=83=CF=84= o =CF=83=CE=B5=CE=BE ; - kokoras
= To =CF=81o=CF=87=CE=B1=CE=BB= =CE=B7=CF=84=CF=8C =CE=B5=CE=AF=CE=BD=CE=B1=CE=B9 =CF=8C=CE=BD=CF=84=CF=89= =CF=82 =CE=BA=CE=AC=CF=84=CE=B9 =CF=80o=CE=BB=CF=8D =CE=B5=CE=BDo=CF=87=CE= =BB=CE=B7=CF=84=CE=B9=CE=BA=CF=8C, =CF=8C=CE=BC=CF=89=CF=82 =CF=8C=CF=84=CE= =B1=CE=BD =CE=BC=CE=B9=CE=B1 =CE=B5=CF=84=CE=B1=CE=B9=CF=81=CE=B5=CE=AF=CE= =B1 =CF=80o=CF=85 =CE=B2=CE=B3=CE=AC=CE=B6=CE=B5=CE=B9 =CF=83=CF=80=CF=81= =CE=AD=CE=B9 =CE=BA=CE=B1=CF=84=CE=AC =CF=84o=CF=85 =CF=81o=CF=87=CE=B1=CE= =BB=CE=B7=CF=84o=CF=8D, =CE=BA=CE=AC=CE=BD=CE=B5=CE=B9 o=CE=BB=CF=8C=CE=BA= =CE=BB=CE=B7=CF=81=CE=B7 =CE=B5=CF=81=CE=B5=CF=8D=CE=BD=CE=B1 =CE=BA=CE=B1= =CE=B9 =CF=84=CE=B7 =CF=83=CF=85=CE=BD=CE=B4=CE=AD=CE=B5=CE=B9...

A=CF=80=CE=AF=CF=83=CF=84= =CE=B5=CF=85=CF=84=CE=B7 =CE=BA=CE=B1=CF=84=CE=B1=CE=B4=CE=AF=CF=89=CE=BE= =CE=B7 16=CF=87=CF=81o=CE=BDo=CF=85 o=CE=B4=CE=B7=CE=B3o=CF=8D (!) =CF=83= =CF=84o=CF=85=CF=82 =CE=B4=CF=81=CF=8C=CE=BCo=CF=85=CF=82 =CF=84=CE=B7=CF= =82 =CE=9B=CE=AC=CF=81=CE=BD=CE=B1=CE=BA=CE=B1=CF=82 - Cyprustimes
=CE=88=CE=BD=CE=B1=CF=82 16=CF=87=CF=81o=CE=BDo=CF=82 =CE=B1=CF=80= =CF=8C =CF=84=CE=B7 =CE=94=CF=81o=CE=BCo=CE=BB=CE=B1=CE=BE=CE=B9=CE=AC =CF= =83=CF=85=CE=BD=CE=B5=CE=BB=CE=AE=CF=86=CE=B8=CE=B7 =CF=84=CE=B1 =CE=BE=CE= =B7=CE=BC=CE=B5=CF=81=CF=8E=CE=BC=CE=B1=CF=84=CE=B1 =CE=B1=CF=80=CF=8C =CF= =84=CE=B7=CE=BD A=CF=83=CF=84=CF=85=CE=BDo=CE=BC=CE=AF=CE=B1 =CE=B3=CE=B9= =CE=B1 =CE=B1=CF=85=CF=84=CF=8C=CF=86=CF=89=CF=81o =CE=B1=CE=B4=CE=AF=CE=BA= =CE=B7=CE=BC=CE=B1 =CE=B1=CF=86o=CF=8D =CF=83=CF=84=CE=B7=CE=BD =CE=BA=CE= =B1=CF=84o=CF=87=CE=AE =CF=84o=CF=85 =CE=B5=CE=BD=CF=84o=CF=80=CE=AF=CF=83= =CF=84=CE=B7=CE=BA=CE=B5 =CE=B5=CF=80=CE=B9=CE=B8=CE=B5=CF=84=CE=B9=CE=BA= =CF=8C...

=CE=A3=CE=AD=CE=BE=CE=B9 = =CF=83=CF=8D=CE=B6=CF=85=CE=B3o=CF=82 =CF=80o=CE=B4o=CF=83=CF=86=CE=B1=CE= =B9=CF=81=CE=B9=CF=83=CF=84=CE=AE "=CF=80=CE=B1=CE=BB=CE=B1=CE=B2=CF=8E=CE= =BD=CE=B5=CE=B9" =CF=84=CE=B7=CE=BD =CE=A3=CE=B1=CE=BD=CF=84o=CF=81=CE=AF= =CE=BD=CE=B7 [=CE=B5=CE=B9=CE=BA=CF=8C=CE=BD=CE=B5=CF=82] - Sigmalive
O =CE=BB=CF=8C=CE=B3o=CF=82 =CE=B3=CE=B9=CE=B1 =CF=84=CE=B7=CE=BD = Viktoria Varga =CF=84=CE=B7=CE=BD =CE=BE=CE=B1=CE=BD=CE=B8=CE=B9=CE=AC =CF= =83=CF=8D=CE=B6=CF=85=CE=B3o =CF=84o=CF=85 =CF=80o=CE=B4o=CF=83=CF=86=CE=B1= =CE=B9=CF=81=CE=B9=CF=83=CF=84=CE=AE Graziano Pelle.

10 "K=CE=B1=CF=85=CF=84=CE= =AC" top models =CE=B3=CE=B4=CF=8D=CE=BDo=CE=BD=CF=84=CE=B1=CE=B9 =CE=BC=CF= =80=CF=81o=CF=83=CF=84=CE=AC =CF=83=CF=84o=CE=BD =CF=86=CE=B1=CE=BA=CF=8C = =CF=84o=CF=85 W [=CE=B5=CE=B9=CE=BA=CF=8C=CE=BD=CE=B5=CF=82] - Sigmalive
To =CE=B3=CE=BD=CF=89=CF=83=CF=84=CF=8C =CF=80=CE=B5=CF=81=CE= =B9o=CE=B4=CE=B9=CE=BA=CF=8C W =CF=83=CF=85=CE=B3=CE=BA=CE=AD=CE=BD=CF=84= =CF=81=CF=89=CF=83=CE=B5 =CF=84=CE=B1 10 =CF=80=CE=B9o "=CE=BA=CE=B1=CF=85= =CF=84=CE=AC" top models =CF=84o=CF=85 =CF=80=CE=BB=CE=B1=CE=BD=CE=AE=CF=84= =CE=B7 =CE=BC=CE=B5 =CE=BA=CF=81=CE=B9=CF=84=CE=AE=CF=81=CE=B9o =CF=84o=CE= =BD =CE=B1=CF=81=CE=B9=CE=B8=CE=BC=CF=8C =CF=84=CF=89=CE=BD followers =CF= =80o=CF=85 =CE=AD=CF=87o=CF=85=CE=BD =CF=83=CF=84=CE=B1 social media =CE=BA= =CE=B1=CE=B9 =CE=AD=CE=BA=CE=B1=CE=BD=CE=B5 =CE=BC=CE=B9=CE=B1 =CE=B1=CF=80= =CF=8C...

To=CE=BD =CF=87=CF=89=CF= =81=CE=B9=CF=83=CE=BC=CF=8C =CF=84o=CF=85=CF=82 =CE=B1=CE=BD=CE=B1=CE=BAo= =CE=AF=CE=BD=CF=89=CF=83=CE=B1=CE=BD M=CF=80=CE=B5=CE=BD =CE=86=CF=86=CE=BB= =CE=B5=CE=BA - T=CE=B6=CE=AD=CE=BD=CE=B9=CF=86=CE=B5=CF=81 =CE=93=CE=BA=CE= =AC=CF=81=CE=BD=CE=B5=CF=81 - PhileNews=
E=CF=80=CE=B9=CE=B2= =CE=B5=CE=B2=CE=B1=CE=B9=CF=8E=CE=BDo=CE=BD=CF=84=CE=B1=CF=82 =CF=84=CE=B9= =CF=82 =CF=86=CE=AE=CE=BC=CE=B5=CF=82 =CF=80o=CF=85 =CF=84o=CF=85=CF=82 =CE= =AE=CE=B8=CE=B5=CE=BB=CE=B1=CE=BD =CE=BD=CE=B1 o=CE=B4=CE=B5=CF=8Do=CF=85= =CE=BD =CF=80=CF=81o=CF=82 =CF=84o=CE=BD =CF=87=CF=89=CF=81=CE=B9=CF=83=CE= =BC=CF=8C, o M=CF=80=CE=B5=CE=BD =CE=86=CF=86=CE=BB=CE=B5=CE=BA =CE=BA=CE= =B1=CE=B9 =CE=B7 T=CE=B6=CE=AD=CE=BD=CE=B9=CF=86=CE=B5=CF=81 =CE=93=CE=BA= =CE=AC=CF=81=CE=BD=CE=B5=CF=81 =CE=B1=CE=BD=CE=B1=CE=BAo=CE=AF=CE=BD=CF=89= =CF=83=CE=B1=CE=BD =CF=84=CE=B7=CE=BD =CE=B1=CF=80=CF=8C=CF=86=CE=B1=CF=83= =CE=AE =CF=84o=CF=85=CF=82 =CE=BD=CE=B1...

E=CE=AF=CE=BD=CE=B1=CE=B9 = o=CE=B9 K=CE=B9=CE=BD=CE=AD=CE=B6o=CE=B9 o=CE=B9 =CF=80=CE=B9o =CE=B1=CE=BD= =CF=8E=CE=BC=CE=B1=CE=BBo=CE=B9 ever; =CE=94=CE=B5=CE=AF=CF=84=CE=B5 =CF=84= =CE=B7=CE=BD =CF=86o=CF=85=CF=83=CE=BA=CF=89=CF=84=CE=AE =CE=BAo=CF=8D=CE= =BA=CE=BB=CE=B1 =CF=84o=CF=85 =CF=83=CE=B5=CE=BE =CF=80o=CF=85 =CE=AD=CF=86= =CF=84=CE=B9=CE=B1=CE=BE=CE=B1=CE=BD! - Lovemyall<= /i>
M=CE=B9=CE= =B1... =CF=80=CE=B5=CF=81=CE=AF=CE=B5=CF=81=CE=B3=CE=B7 =CE=AD=CF=89=CF=82 = =CE=AC=CF=81=CF=81=CF=89=CF=83=CF=84=CE=B7 =CE=B9=CE=B4=CE=AD=CE=B1 =CE=B3= =CE=B9=CE=B1 =CF=86o=CF=85=CF=83=CE=BA=CF=89=CF=84=CE=AE =CE=BAo=CF=8D=CE= =BA=CE=BB=CE=B1 =CF=84o=CF=85 =CF=83=CE=B5=CE=BE =CE=B5=CE=AF=CF=87=CE=B5 = =CE=B7 =CE=BA=CE=B9=CE=BD=CE=AD=CE=B6=CE=B9=CE=BA=CE=B7 =CE=B5=CF=84=CE=B1= =CE=B9=CF=81=CE=B5=CE=AF=CE=B1 Guangzhou Hongyi!

A=CE=B8=CE=BB=CE=B7=CF=84=CE=B9=CE=BA=CE=AC
M=CE=B5=CE=B3=CE=AC=CE=BB= =CE=B5 M=CE=AC=CF=81=CE=BAo =CE=A0=CE=B1=CE=B3=CE=B4=CE=B1=CF=84=CE=AE! - Sigmalive
M=CE=AC=CF=81=CE=BAo=CF=82 =CE=A0=CE=B1=CE=B3=CE=B4= =CE=B1=CF=84=CE=AE=CF=82 =CE=B1=CF=80o =CF=84=CE=B1 =CF=80=CE=B1=CE=BB=CE= =B9=CE=AC! =CE=88=CE=B4=CE=B5=CE=B9=CE=BE=CE=B5 =CF=84=CE=B7 =CE=BC=CE=B5= =CE=B3=CE=AC=CE=BB=CE=B7 =CF=84o=CF=85 =CE=BA=CE=BB=CE=AC=CF=83=CE=B7 =CE= =B1=CF=80=CE=AD=CE=BD=CE=B1=CE=BD=CF=84=CE=B9 =CF=83=CF=84o=CE=BD T=CE=B6o= =CE=BD M=CE=AF=CE=BB=CE=BC=CE=B1=CE=BD( (=CE=BDo=CF=8D=CE=BC=CE=B5=CF=81o 1= 18 =CF=83=CF=84=CE=B7=CE=BD =CF=80=CE=B1=CE=B3=CE=BA=CF=8C=CF=83=CE=BC=CE= =B9=CE=B1 =CE=BA=CE=B1=CF=84=CE=AC=CF=84=CE=B1=CE=BE=CE=B7), =CE=B3=CE=B9= =CE=B1 =CF=84o B=CE=84 =CE=93=CF=8D=CF=81o =CF=84o=CF=85...

O=CE=BC=CF=8C=CE=BDo=CE=B9= =CE=B1 =CE=BA=CE=B1=CE=B9 A=CF=80=CF=8C=CE=BB=CE=BB=CF=89=CE=BD=CE=B1=CF=82= =CF=81=CE=AF=CF=87=CE=BDo=CE=BD=CF=84=CE=B1=CE=B9 =CF=83=CF=84=CE=B7 =CE= =BC=CE=AC=CF=87=CE=B7(VIDEOS-=CE=A6=CF=89=CF=84o) = - Sigmalive
= =CE=A3=CF=84=CE=B7 =CE=BC=CE=AC=CF=87=CE=B7 =CF=84o=CF=85 Europa League = =CF=81=CE=AF=CF=87=CE=BDo=CE=BD=CF=84=CE=B1=CE=B9 =CE=B1=CF=8D=CF=81=CE=B9o= O=CE=BC=CF=8C=CE=BDo=CE=B9=CE=B1 =CE=BA=CE=B1=CE=B9 A=CF=80=CF=8C=CE=BB=CE= =BB=CF=89=CE=BD=CE=B1=CF=82. A=CE=BC=CF=86=CF=8C=CF=84=CE=B5=CF=81=CE=B5=CF= =82 o=CE=B9 =CE=B4=CF=8Do o=CE=BC=CE=AC=CE=B4=CE=B5=CF=82 =CE=B1=CE=B3=CF= =89=CE=BD=CE=AF=CE=B6o=CE=BD=CF=84=CE=B1=CE=B9 =CE=B5=CE=BA=CF=84=CF=8C=CF= =82 =CE=AD=CE=B4=CF=81=CE=B1=CF=82 =CE=BC=CE=B5 =CE=B1=CE=BD=CF=84=CE=B9=CF= =80=CE=AC=CE=BBo=CF=85=CF=82 o=CE=B9 o=CF=80o=CE=AFo=CE=B9 =CF=83=CE=B5 =CE= =BA=CE=B1=CE=BC=CE=AF=CE=B1...

=CE=A0=CF=81=CF=8E=CF=84= =CE=B1 =CF=84=CE=B1 =CE=BC=CF=80=CF=8C=CE=BDo=CF=85=CF=82 =CE=BA=CE=B1=CE= =B9 =CE=BC=CE=B5=CF=84=CE=AC =CF=84=E2=80=99 =CE=B1=CF=83=CF=84=CE=AD=CF=81= =CE=B9=CE=B1 - SentraGoal
M=CF=80=CE=AE=CE=BA=CE=B1=CE=BC=CE= =B5 =CF=83=CF=84o=CE=BD Io=CF=8D=CE=BB=CE=B9o, =CF=84o=CE=BD =CE=BC=CE=AE= =CE=BD=CE=B1 =CF=84=CF=89=CE=BD =CE=B5=CF=85=CF=81=CF=89=CF=80=CE=B1=CF=8A= =CE=BA=CF=8E=CE=BD =CF=80=CF=81o=CE=BA=CE=BB=CE=AE=CF=83=CE=B5=CF=89=CE=BD = =CE=B3=CE=B9=CE=B1 =CF=84o=CE=BD A=CE=A0OE=CE=9B.

AE=CE=9B: =CE=94=CF=8D=CF= =83=CE=BAo=CE=BB=CE=B1 =CE=B8=CE=B1 =CF=80=CE=B1=CF=81=CE=B1=CE=BC=CE=B5=CE= =AF=CE=BD=CE=B5=CE=B9 o M=CF=80=CE=B5=CE=BC=CF=80=CE=AD =CE=A0o=CE=BB=CF=8D =CE=BAo=CE=BD=CF=84=CE=AC =CF=83=CF=84=CE=B7=CE= =BD .... =CE=AD=CE=BEo=CE=B4o =CE=B1=CF=80=CF=8C =CF=84=CE=B7=CE=BD AE=CE= =9B =CE=B5=CE=AF=CE=BD=CE=B1=CE=B9 o =CE=9Bo=CF=85=CF=84=CF=83=CE=B9=CE=AC= =CE=BDo M=CF=80=CE=B5=CE=BC=CF=80=CE=AD. =CE=8C=CF=80=CF=89=CF=82 =CE=B1=CE= =BD=CE=B1=CF=86=CE=AD=CF=81o=CF=85=CE=BD =CF=80=CE=BB=CE=B7=CF=81o=CF=86o= =CF=81=CE=AF=CE=B5=CF=82 =CE=B1=CF=80=CF=8C =CF=84=CE=B7 =CE=9B=CE=B5=CE=BC= =CE=B5=CF=83=CF=8C =CF=84=CE=B9o =CE=B1=CE=B3=CE=B1=CF=80=CE=B7=CE=BC=CE=AD= =CE=BDo =CF=80=CE=B1=CE=B9=CE=B4=CE=AF =CF=84=CE=B7=CF=82 =CE=B3=CE=B1=CE= =BB=CE=B1=CE=B6o=CE=BA=CE=AF=CF=84=CF=81=CE=B9=CE=BD=CE=B7=CF=82... =

=CE=8C=CE=BCo=CF=81=CF=86o= =CE=B3=CE=BAo=CE=BB =CE=B1=CF=80=CF=8C =CE=A0=CE=B9=CE=AD=CF=81o (vid) - Cyprustimes
M=CF=80o=CF=81=CE=B5=CE=AF =CF=80=CE=B9o =CF=80=CF= =81=CE=B9=CE=BD =CE=BD=CE=B1 =CF=83=CE=B1=CF=82 =CE=B1=CE=BD=CE=B1=CF=86=CE= =B5=CF=81=CE=B8=CE=AE=CE=BA=CE=B1=CE=BC=CE=B5 =CF=83=CF=84o =CE=BB=CE=AC=CE= =B8o=CF=82 =CF=80o=CF=85 =CF=86=CE=B1=CE=AF=CE=BD=CE=B5=CF=84=CE=B1=CE=B9 = =CF=8C=CF=84=CE=B9 =CE=AD=CE=BA=CE=B1=CE=BD=CE=B5 o Ko=CF=84=CE=AF=CE=BD=CE= =B1 =CF=83=CF=84o =CE=B3=CE=BAo=CE=BB =CF=80o=CF=85 =CE=B4=CE=AD=CF=87=CE= =B8=CE=B7=CE=BA=CE=B5, =CF=8C=CE=BC=CF=89=CF=82 =CF=84=CF=8E=CF=81=CE=B1 = =CE=B8=CE=B1 =CF=83=CE=B1=CF=82 =CF=80o=CF=8D=CE=BC=CE=B5 =CE=B3=CE=B9=CE= =B1 =CE=BA=CE=AC=CF=84=CE=B9 =CE=AC=CE=BB=CE=BBo.


TO VIDEO TH=CE=A3 HM= E=CE=A1A=CE=A3
=CE=A0=CF=8E=CF=82 =CE=BD=CE=B1 =CE=BC=CE=B7=CE=BD =CF=81= =CE=AF=CF=87=CE=BD=CE=B5=CE=B9=CF=82 =CE=AD=CE=BD=CE=B1 =CF=84=CF=83=CE=B5= =CE=BAo=CF=8D=CF=81=CE=B9

=C2=A0
EN=CE= =94IA=CE=A6E=CE=A1OYN
= K=CE=B1=CE=B9=CF=81=CF=8C=CF=82
=CE=9B=CE=B5=CF=85=CE=BA=CF=89=CF=83=CE=AF= =CE=B1 36=C2=B0C
=CE=9B=CE=AC=CF=81=CE=BD=CE=B1=CE=BA=CE=B1 31=C2=B0C
=CE=9B=CE=B5=CE=BC=CE=B5=CF=83=CF=8C=CF=82 31=C2=B0C
=CE=A0=CE=AC=CF=86=CE=BF=CF=82 32=C2=B0C
=CE=91=CE=BC=CE=BC=CF=8C=CF=87=CF=89=CF=83= =CF=84=CE=BF=CF=82 33=C2=B0C
A=CF=83=CF= =84=CF=81o=CE=BBo=CE=B3=CE=B9=CE=BA=CE=AD=CF=82
=CF=80=CF=81o=CE=B2=CE= =BB=CE=AD=CF=88=CE=B5=CE=B9=CF=82
= =CE=93=CE=B9o=CF=81=CF=84=CE=AD=CF=82
=CE=94=CE=B5=CE=BD =CF=85=CF=80=CE=AC=CF=81= =CF=87=CE=B5=CE=B9 =CE=B3=CE=BD=CF=89=CF=83=CF=84=CE=AE =CE=B3=CE=B9o=CF=81= =CF=84=CE=AE =CF=83=CE=AE=CE=BC=CE=B5=CF=81=CE=B1.
H CYtoday =CE=B5=CE=BA=CE=B4=CE=AF=CE=B4=CE=B5=CF=84=CE=B1= =CE=B9 =CE=B1=CF=80=CF=8C =CF=84=CE=B7=CE=BD =CE=B5=CF=84=CE=B1=CE=B9=CF=81= =CE=AF=CE=B1 =CE=B7=CE=BB=CE=B5=CE=BA=CF=84=CF=81o=CE=BD=CE=B9=CE=BA=CF=8E= =CE=BD =CE=B5=CE=BA=CE=B4=CF=8C=CF=83=CE=B5=CF=89=CE=BD CYMEDIA Ltd. H CYto= day =CE=B4=CE=B5=CE=BD =CE=B5=CF=85=CE=B8=CF=8D=CE=BD=CE=B5=CF=84=CE=B1=CE= =B9 =CE=B3=CE=B9=CE=B1 =CF=84o =CF=80=CE=B5=CF=81=CE=B9=CE=B5=CF=87=CF=8C= =CE=BC=CE=B5=CE=BDo =CF=80o=CF=85 =CE=B4=CE=B7=CE=BCo=CF=83=CE=B9=CE=B5=CF= =8D=CE=B5=CF=84=CE=B1=CE=B9 =CE=B1=CF=80=CF=8C =CE=AC=CE=BB=CE=BB=CE=B5=CF= =82 =CF=80=CE=B7=CE=B3=CE=AD=CF=82.
=CE=9B=CE=B1=CE=BC=CE=B2=CE=AC= =CE=BD=CE=B5=CE=B9=CF=82 =CE=B1=CF=85=CF=84=CE=AE =CF=84=CE=B7 =CE=94=CF=89= =CF=81=CE=B5=CE=AC=CE=BD =CE=B5=CE=BD=CE=B7=CE=BC=CE=AD=CF=81=CF=89=CF=83= =CE=B7 =CE=B3=CE=B9=CE=B1=CF=84=CE=AF =CE=AD=CF=87=CE=B5=CE=B9=CF=82 =CE=B5= =CE=B3=CE=B3=CF=81=CE=B1=CF=86=CE=B5=CE=AF =CF=83=CF=84=CE=B7 =CE=BB=CE=AF= =CF=83=CF=84=CE=B1 =CE=B1=CE=BD=CE=B1=CE=B3=CE=BD=CF=89=CF=83=CF=84=CF=8E= =CE=BD =CF=84=CE=B7=CF=82 CYtoday.
A=CE=BD =CE=B8=CE=AD=CE=BB=CE=B5= =CE=B9=CF=82 =CE=BC=CF=80o=CF=81=CE=B5=CE=AF=CF=82 =CE=BD=CE=B1 =CE=B4=CE= =B9=CE=B1=CE=B3=CF=81=CE=B1=CF=86=CE=B5=CE=AF=CF=82 =CE=B1=CF=80=CF=8C =CF= =84=CE=B7 =CE=BB=CE=AF=CF=83=CF=84=CE=B1 =CE=BC=CE=B1=CF=82 =CE=BC=CE=B5 = =CF=84o =CF=80=CE=AC=CF=84=CE=B7=CE=BC=CE=B1 =CE=B5=CE=BD=CF=8C=CF=82 =CE=BAo=CF=85=CE= =BC=CF=80=CE=B9o=CF=8D.
=C2=A0
3D"." --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="db2c28bc79d57f5cd10241d15119b94e" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="db2c28bc79d57f5cd10241d15119b94e" /9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAArAAD/4QNtaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6 MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5 OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1w PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9 InhtcC5kaWQ6NjlDMTQ4OTUwNUM0RTAxMUI3Qzg5RTBERUMwRDQzRUMiIHhtcE1NOkRvY3VtZW50 SUQ9InhtcC5kaWQ6RTdCQTg1QTdDQzg4MTFFMDgwMEFEMjg2MEIwNjcwQjMiIHhtcE1NOkluc3Rh bmNlSUQ9InhtcC5paWQ6RTdCQTg1QTZDQzg4MTFFMDgwMEFEMjg2MEIwNjcwQjMiIHhtcDpDcmVh dG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIj4gPHhtcE1NOkRlcml2ZWRGcm9t IHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQ1MUExMzZDNEM0RTAxMUJDNzNFNDAyOThBQ0VB MkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjlDMTQ4OTUwNUM0RTAxMUI3Qzg5RTBERUMw RDQzRUMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh Y2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAALBwcHCAcLCAgLEAoJChASDgsLDhIV ERESEREVFBASERESEBQUGBkaGRgUICAjIyAgLy4uLi81NTU1NTU1NTU1AQwKCgwNDA4MDA4SDg4O EhQODw8OFBoRERMRERohFxQUFBQXIR0fGhoaHx0kJCEhJCQtLSstLTU1NTU1NTU1NTX/wAARCAAb ADsDASIAAhEBAxEB/8QAgwAAAQUBAQAAAAAAAAAAAAAAAQACAwQFBgcBAQEBAQAAAAAAAAAAAAAA AAABAgMQAAIBAwEFBwEGBwAAAAAAAAECAwARBBIhUSITBTFBgdGSomOC8GGRskMGMkJSYsLDFBEA AgEDBAEFAAAAAAAAAAAAAREAIQISMUFRYSKBoeFCYv/aAAwDAQACEQMRAD8A9PN5GZmJvqIFiRsB t3UNA3t6m86KC5I/ub8xrm+k9f6x1vNfAhSDHQxs7SguZFQOIzpB4de247q622EgkaW6zBIC7m7j ZWLl8z/nkZ+U2hzdxttqFr2uCDcEbKm0De3qbzrOn6e3SMrHfEmIxsqaGB8ZlUgBYuWCr21dkY76 f1WeaLM6akblVlnKyAHYy8tzY+NEyMTQw6FjSX9A3t6m86Ggb29TedYvW8x4znxhnQQw48lwxsNU 1jZd9hTZv3LMMSLIhhUjMmMWFfU3CoJLyqm0dnYNtUWXEAjlSkgazd0De3qbzpc6Xl6tW3R/npv+ FV+mZcuZhR5E0Rhla4eMgixBtsDbbbql/S+n/ZWcS8d2oYT6j02Ft4ZvzGsXD/aGBh5LZEc+RqKl VAk5YUFtfbEFJ2/1XrbyNPNN+V9Wq/jaouD4ffWrM1di/wBKS7GjXUhXp8pkR8nLlykiYPFHIIwF cbFa6IrG1+80/N6di5yxrkqx5Ta4yjtGyta1wyFT2Gn8Hw++lwfD76nkxztj8S0R93IF6NgBHUoz 8xVRy8juxVG5igszE7GNCTonTZBIDFbmuJTpZltIP500kaT961Y4Ph99Lg+H30839nFOoceBMeIR IWKr3uzO3izkml+l9F/DmUOD4ffVz0fwfbwqVe7fq4otkp//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="c7a764f8757db66e0bd17dac5d013d10" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="c7a764f8757db66e0bd17dac5d013d10" /9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAArAAD/4QNtaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6 MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5 OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1w PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9 InhtcC5kaWQ6NjlDMTQ4OTUwNUM0RTAxMUI3Qzg5RTBERUMwRDQzRUMiIHhtcE1NOkRvY3VtZW50 SUQ9InhtcC5kaWQ6QjA4NDYyNDhDQzg4MTFFMDlGOUVDQjNGMkUyMkQxQTUiIHhtcE1NOkluc3Rh bmNlSUQ9InhtcC5paWQ6QjA4NDYyNDdDQzg4MTFFMDlGOUVDQjNGMkUyMkQxQTUiIHhtcDpDcmVh dG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIj4gPHhtcE1NOkRlcml2ZWRGcm9t IHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQ1MUExMzZDNEM0RTAxMUJDNzNFNDAyOThBQ0VB MkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjlDMTQ4OTUwNUM0RTAxMUI3Qzg5RTBERUMw RDQzRUMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh 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 WxLuev47Otv+IXa2++rZRSdjMmuMxK4ln/DspFmGVDW8RzJbTYX9dYykZvH8SJybrzL8NyUHPzS0 rUATqOpA5qLcXYWTmXmMjj3mXYyWtJKnAlKdpVqvutUzdHohxGJjztkWyD5KIgfULEkHl+KkUwf+ C5D4FLiWR2m14p1KNk3VZOwD0UoY2c5j57E1vpMLCiByp3KT8opyw8WK/wALzcJDltvy/bCzeyNa gD7F9pTyaqSpUV2JIXHe09o3sVoUFp6ydlH49JN6BxeRLSzMSM0XXAtyGwbNU08eY8POQ8tEGtMs JaJTyqIu0flGyg+fWll2NiGjdvHJCF23F9dlOn59lH+H81GHCj5lpDisUoKaB576mP62ykxTi3XS 64dTji9SzzqUbmn+OJcksrJMQdXy4BK6RzD+wAndr71cPu6lT3dSspdy4MbPhMtPNuvIQsSZN0qU Adr7ldfiuN7y31hQyR94d/0zpq/SdPeen+Vz148pqUqKi7u6jGpgzIt4rje8t9YVPFcb3lvrChPl NTyml6f3e5PtbkW8VxveW+sKniuN7y31hQnymp5TR6f3e5Ha3It4rje8t9YVVufdbXm5y0KBSp9Z SoHeCafPKawnd/tO87vXXX+C1cqA+H1FvgqPyeWNR27Aq21Jve+2pqTz1ZXlNTymu9592PiPyXK0 dTw61WxWFdJV/Wb1jUnnFWV5TU8poefdj4upDR1PDrVahYBuDY84NTUk7yKsrymp5TQ9zux8R+SG jqeHWq11J5xU1i1r7Oa9WV5TU8ppvc7sfEfkho6nh1qtdSRuNHsPwo7lsQ7Pjvp7dClBEe2/TyKV fYTyU2eU13Yvc9903f5Xdu+3Vd036fTEQXG18P1AUoeW/aJZtFXuVcZgQm8KytK3Artp7iTcF21k tA8obH00KCk6ht5R9dWSP4TUP8JotmdPKHc1PLF+CJiL5nLDDZxRr3dStnzbvw+SpWOtBf/Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="a3a639097d251559531422c1080c4abe" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="a3a639097d251559531422c1080c4abe" /9j/4AAQSkZJRgABAgEASABIAAD/4QY0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAACvzaAAAnEAAK/NoAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dz ADIwMTM6MDM6MjcgMTY6NTg6NDMAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAAB AAAAEgAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAT+AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAEgBQAwEiAAIRAQMRAf/dAAQABf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A77HOAMak3+obTVVZY7dYR+k9vqOc1236bfcjuq6c15ZFhIJb o6wguA3urb7vdZsCFj4L78FjmvDRdiU1QWkxtl+76Tf9IrQwYsb7v0TbTeGxrvdun3fub3usT5Sl Z1O62MRQ0GyEM6aWMe0WEWNa6uHWe7eC5gb7/pbWp219NcWhgscXdmusJHu9P3+72fpG7EUYAays Med1NjrapGgDg9npQPzGVW7GKA6YA5jtw3MebN4EODnPdddseD/N27vT9N35ibxS7n7U8MewaNrs d+C61jbKHObdtDjYSTW17m7X7xs+jvXneOfrPk4jsurMyDW0PcAch4e9te3131Vl+6xtO9m9em5G C+vDIe8ProFz9oBDnMeywenu3fT/AEn015g/rOI6illeM6t2DZY/AiyWtbY71m15G5m+70Lfez3M 9T/CK/yHEYzocWsdZeqh6mlznCDGzw6H5fS2m4n1tda2puba57nOqIGUSG2sb6r8ax3qbWX+m36C HfV9Z6KH5DuoWPrZW279Hll5NTnel67GMs3OqZb+ie799TZ9ZcWvJdczFftvyLMzJabBJssrto9O p3p+ymv7Rc/3N9RVj1rG+y+gKH7vsP2EO3tj+d+1ett9P9/2bFcAyWLhGtOg/wAL9JrE46NTlevU /wCD+iyxH/WXLodfTnXitpcBvyHNLjW31rvTa5/v9Gn9LYpZLvrHhveMnOuBpsZXY37Q5xJsb6zN oD/ez00J/UunX0DDGK6qqu11mH+m0Z6ra67q8h+zdZVvq9X2+/8AwaXV8s2WYeIX12nDrbVbdSdz LHt/Rtfv/wAJsxq8enf/AMGnAEyAMIgG9OEX9q0kCNiRJFfpF//Q6x/0v+0fy4/sfyP9Gm/9hF8/ pK61X6A/9hEv/YRfP6SSn388H+h8Hnj5rE/+txeNpKTF1Y8nR9k/+txL/wCtxeNpKVY+yf8A1uKV f02/+JzkcLxlJAqf/9n/7QsEUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABAAAAAAAAAAAAAAAAAA AAAAOEJJTQPtAAAAAAAQAEgCTgABAAIASAJOAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAA OEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJ TScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQCh mZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAA cAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAA AAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAA4 QklNBAAAAAAAAAIAADhCSU0EAgAAAAAAAgAAOEJJTQQwAAAAAAABAQA4QklNBC0AAAAAAAYAAQAA AAM4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAAD TQAAAAYAAAAAAAAAAAAAABIAAABQAAAADABuAG8AdgBvAHMAdABpAF8AbABvAGcAbwAAAAEAAAAA AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAUAAAABIAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA AAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0 MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAABIAAAAA UmdodGxvbmcAAABQAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAH c2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGlj ZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1n IAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0 bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAASAAAAAFJnaHRsb25nAAAAUAAAAAN1cmxURVhUAAAAAQAA AAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAA AAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWdu ZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VT bGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0Nv bG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAA AAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAA AAAADAAAAAI/8AAAAAAAADhCSU0EFAAAAAAABAAAAAM4QklNBAwAAAAABRoAAAABAAAAUAAAABIA AADwAAAQ4AAABP4AGAAB/9j/4AAQSkZJRgABAgAASABIAAD/7QAMQWRvYmVfQ00AAf/uAA5BZG9i ZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwR DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIABIAUAMBIgACEQEDEQH/3QAEAAX/xAE/ AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkK CxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWS U/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpam tsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGx QiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSV xNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/AO+xzgDGpN/qG01V WWO3WEfpPb6jnNdt+m33I7qunNeWRYSCW6OsILgN7q2+73WbAhY+C+/BY5rw0XYlNUFpMbZfu+k3 /SK0MGLG+79E203hsa73bp937m97rE+UpWdTutjEUNBshDOmljHtFhFjWurh1nu3guYG+/6W1qdt fTXFoYLHF3ZrrCR7vT9/u9n6RuxFGAGsrDHndTY62qRoA4PZ6UD8xlVuxigOmAOY7cNzHmzeBDg5 z3XXbHg/zdu70/Td+Ym8Uu5+1PDHsGja7HfgutY2yhzm3bQ42Ek1te5u1+8bPo7153jn6z5OI7Lq zMg1tD3AHIeHvbXt9d9VZfusbTvZvXpuRgvrwyHvD66Bc/aAQ5zHssHp7t30/wBJ9NeYP6ziOopZ XjOrdg2WPwIslrW2O9ZteRuZvu9C33s9zPU/wiv8hxGM6HFrHWXqoeppc5wgxs8Oh+X0tpuJ9bXW tqbm2ue5zqiBlEhtrG+q/Gsd6m1l/pt+gh31fWeih+Q7qFj62Vtu/R5ZeTU53peuxjLNzqmW/onu /fU2fWXFryXXMxX7b8izMyWmwSbLK7aPTqd6fspr+0XP9zfUVY9axvsvoCh+77D9hDt7Y/nftXrb fT/f9mxXAMli4RrToP8AC/SaxOOjU5Xr1P8Ag/ossR/1ly6HX0514raXAb8hzS41t9a702uf7/Rp /S2KWS76x4b3jJzrgabGV2N+0OcSbG+szaA/3s9NCf1Lp19AwxiuqqrtdZh/ptGeq2uu6vIfs3WV b6vV9vv/AMGl1fLNlmHiF9dpw621W3Uncyx7f0bX7/8ACbMavHp3/wDBpwBMgDCIBvThF/atJAjY kSRX6Rf/0Osf9L/tH8uP7H8j/Rpv/YRfP6SutV+gP/YRL/2EXz+kkp9/PB/ofB54+axP/rcXjaSk xdWPJ0fZP/rcS/8ArcXjaSlWPsn/ANbilX9Nv/ic5HC8ZSQKn//ZOEJJTQQhAAAAAABVAAAAAQEA AAAPAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwAAAAEwBBAGQAbwBiAGUAIABQAGgAbwB0 AG8AcwBoAG8AcAAgAEMAUwA0AAAAAQA4QklNBAYAAAAAAAcACAAAAAEBAP/hEX5odHRwOi8vbnMu YWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6 cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1w dGs9IkFkb2JlIFhNUCBDb3JlIDQuMi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjEy OjE4ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv MDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxu czp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVy bC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUu Y29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAv MS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9S ZXNvdXJjZUV2ZW50IyIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8i IHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiB4bXA6Q3JlYXRvclRv b2w9IkFkb2JlIFBob3Rvc2hvcCBDUzQgV2luZG93cyIgeG1wOkNyZWF0ZURhdGU9IjIwMTMtMDMt MjdUMTY6NTc6NDIrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDEzLTAzLTI3VDE2OjU4OjQzKzAy OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDEzLTAzLTI3VDE2OjU4OjQzKzAyOjAwIiBkYzpmb3Jt YXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9m aWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGQTNBOTFE MUVFOTZFMjExOEEyN0ZCMDQ1ODI3QkFDNiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGOTNB OTFEMUVFOTZFMjExOEEyN0ZCMDQ1ODI3QkFDNiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4 bXAuZGlkOkY5M0E5MUQxRUU5NkUyMTE4QTI3RkIwNDU4MjdCQUM2IiB0aWZmOk9yaWVudGF0aW9u PSIxIiB0aWZmOlhSZXNvbHV0aW9uPSI3MjAwOTAvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249Ijcy MDA5MC8xMDAwMCIgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIgdGlmZjpOYXRpdmVEaWdlc3Q9IjI1 NiwyNTcsMjU4LDI1OSwyNjIsMjc0LDI3NywyODQsNTMwLDUzMSwyODIsMjgzLDI5NiwzMDEsMzE4 LDMxOSw1MjksNTMyLDMwNiwyNzAsMjcxLDI3MiwzMDUsMzE1LDMzNDMyO0UwMUE4MzRFMTdFMjE4 N0Q1OEJENEFENDNBRTQyQUZGIiBleGlmOlBpeGVsWERpbWVuc2lvbj0iODAiIGV4aWY6UGl4ZWxZ RGltZW5zaW9uPSIxOCIgZXhpZjpDb2xvclNwYWNlPSIxIiBleGlmOk5hdGl2ZURpZ2VzdD0iMzY4 NjQsNDA5NjAsNDA5NjEsMzcxMjEsMzcxMjIsNDA5NjIsNDA5NjMsMzc1MTAsNDA5NjQsMzY4Njcs MzY4NjgsMzM0MzQsMzM0MzcsMzQ4NTAsMzQ4NTIsMzQ4NTUsMzQ4NTYsMzczNzcsMzczNzgsMzcz NzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczOTYsNDE0ODMs NDE0ODQsNDE0ODYsNDE0ODcsNDE0ODgsNDE0OTIsNDE0OTMsNDE0OTUsNDE3MjgsNDE3MjksNDE3 MzAsNDE5ODUsNDE5ODYsNDE5ODcsNDE5ODgsNDE5ODksNDE5OTAsNDE5OTEsNDE5OTIsNDE5OTMs NDE5OTQsNDE5OTUsNDE5OTYsNDIwMTYsMCwyLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1 LDE2LDE3LDE4LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwO0U2NEEzNkM2NEFGNUUwRjc5QjBD MEM0RTlFNUE3RjFDIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFj dGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpGOTNBOTFEMUVFOTZFMjEx OEEyN0ZCMDQ1ODI3QkFDNiIgc3RFdnQ6d2hlbj0iMjAxMy0wMy0yN1QxNjo1ODo0MyswMjowMCIg c3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIi8+IDxyZGY6 bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2Uv cG5nIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDpp bnN0YW5jZUlEPSJ4bXAuaWlkOkZBM0E5MUQxRUU5NkUyMTE4QTI3RkIwNDU4MjdCQUM2IiBzdEV2 dDp3aGVuPSIyMDEzLTAzLTI3VDE2OjU4OjQzKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJB ZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3MiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2Vx PiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt ZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC IFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAA AADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAA ABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAAD TAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJD AAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5 OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEA AAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAA AAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAA AA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBo dHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt IHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcg Q29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENv bmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAA ABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAA AAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAK AA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUA mgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEy ATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMC DAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMh Ay0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4E jASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3 BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDII RghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqY Cq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUAN Wg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT 5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReu F9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9oc AhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCY IMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZcl xyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2 K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIx SjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDec N9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+ oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXe RiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN 3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYP VlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1f D19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/ aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy S3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyB fOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuH n4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLj k02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6f HZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1 q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm4 0blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZG xsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnU y9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj 4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozz GfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////7gAOQWRvYmUA ZEAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgIC AgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQEBAQECAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCAASAFADAREAAhEBAxEB/90ABAAK/8QBogAA AAYCAwEAAAAAAAAAAAAABwgGBQQJAwoCAQALAQAABgMBAQEAAAAAAAAAAAAGBQQDBwIIAQkACgsQ AAIBAwQBAwMCAwMDAgYJdQECAwQRBRIGIQcTIgAIMRRBMiMVCVFCFmEkMxdScYEYYpElQ6Gx8CY0 cgoZwdE1J+FTNoLxkqJEVHNFRjdHYyhVVlcassLS4vJkg3SThGWjs8PT4yk4ZvN1Kjk6SElKWFla Z2hpanZ3eHl6hYaHiImKlJWWl5iZmqSlpqeoqaq0tba3uLm6xMXGx8jJytTV1tfY2drk5ebn6Onq 9PX29/j5+hEAAgEDAgQEAwUEBAQGBgVtAQIDEQQhEgUxBgAiE0FRBzJhFHEIQoEjkRVSoWIWMwmx JMHRQ3LwF+GCNCWSUxhjRPGisiY1GVQ2RWQnCnODk0Z0wtLi8lVldVY3hIWjs8PT4/MpGpSktMTU 5PSVpbXF1eX1KEdXZjh2hpamtsbW5vZnd4eXp7fH1+f3SFhoeIiYqLjI2Oj4OUlZaXmJmam5ydnp +So6SlpqeoqaqrrK2ur6/9oADAMBAAIRAxEAPwDbk68l6Ji6762m7Bbsmu3lkOpumt870zSbm7or aFI+zKQ4yLduZy2Mz7Yegx1TuTG1hrpmeNKPS0soSL1+x7zHzDudhzDvtjZmBLSG8mjRRb29FRJG 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="e98d5f0e18e5575f1366897203f668f5" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="e98d5f0e18e5575f1366897203f668f5" /9j/4AAQSkZJRgABAgEASABIAAD/4QaqRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dz ADIwMTM6MDI6MTEgMTY6Mjc6MDAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAAB AAAAEQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAV0AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwM/8AAEQgAEQBQAwEiAAIRAQMRAf/dAAQABf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX Z3eHl6e3x//aAAwDAQACEQMRAD8A0Mn9qOdmdQyutZOFifbL6aWVMsuAFbyPf6RHot/NYg4pzbsf Gut+smRSM66yjDGx7t+x4qa521/6PfvY5FxckdO6pnWvs6nU52Zc91GPSH0WMD3bd3qf6RqBkfWL qtWIyvpOHdivORk3Pa7H3BrbX+pR6LnMdtcz37tirabknyuX/fPRRjM1GEYa8NTlHDCEY8EvT68M /wBLh9f6z/AZ00daYW19S6/diXX5FmLiNG+wPfU/0H2PcHN9Kr1fYnxsfrLm0V5nX8jGzMm+3Gqp DX2D1KX/AGd261jva31FWwcqi3Gwv2viZ7snpt1l9Tqqi4Xeo/7S5txftcx3rD6St4v1mz6hSx2J lNqvty357a6juaMh/qUvxbdu71Mfc5IcPUn7Zf8AOTkjl9QjHGSCeL0YIw9PucHtHgn6Zx9vi/ro sZ2Y/EyL8n6yZFD8Jwry2BljwxznvpZteHt9Xc6v81J56ljYGPlZ/wBYMqh2VULqmsrssbtd/NtN 7XbPUd+cz8xZGO3Io6Z1TC+zZNj8x9Bpeanaip77Hut/dc5rlsdI6gzpmA2t46nkzUW2dPspBxi5 zSC1rn7nsra87vagDdXpp3lv/jMmXHw8Rjwz/WDhiMeAcWP24y9MvalwfrJy/nHLrf8AW/N6XXn4 HUsq2x119dlHrNadtTans9CtxbZc/wDSWb2sQKrPr7ayqwZ17WXV+u1z8ljNtUN/TX73/oKn72bH W/TRumWU41OC7Lxc8ZPSsu3Lprqxy5lpeKNlbrnbfR9+P7/Ynx+oPHU77r+n5RxsvBx8R7ji+qWW UMx/0v2e79HdX62P+c7+WulwE+1H9XjNQErnAcX93+v6PW8pzQH3jLRIHuTHpPp+ZCH/AF9JtYOo W+rTM1famb3jYMjdj1792Qx1LvUY+panR8j6y0fWzGouz8rK6czKbjvssdDHvdScj0tk+72qGJ1S qi9+Q/Gzn3tsc43nBZvvr9NlVGPu/wC8+vG2PYxmN/gkXp+df1T6y9HecLKx/smS/a59bm1mp9f0 7fzW5Db2u9/+Ep9P/RpTkSJg48Yj7cvUIxj6uHp/3LGK01O7/9D1VJfKqSSn6qSXyqkkp+qkl8qp JKfqpJfKqSSn6qSXyqkkp//Z/+0LUlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAHHAIAAAK5vgA4 QklNBCUAAAAAABAmukHUxrxOz7kGQr7aOL+qOEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhC SU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44 QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAv ZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAA AQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP// //////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA//// /////////////////////////wPoAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQe AAAAAAAEAAAAADhCSU0EGgAAAAADTQAAAAYAAAAAAAAAAAAAABEAAABQAAAADABzAHAAbwByAHQA cwBfAGIAcgBlAGEAawAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAUAAAABEAAAAA AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJv dW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAA AAAAAABCdG9tbG9uZwAAABEAAAAAUmdodGxvbmcAAABQAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAA AAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAA AAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVt AAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAARAAAAAFJnaHRsb25n AAAAUAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAA AAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRF WFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAA AAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JU eXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAA AAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91 dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAI/8AAAAAAAADhCSU0EFAAAAAAABAAAAAM4QklN BAwAAAAABZAAAAABAAAAUAAAABEAAADwAAAP8AAABXQAGAAB/9j/4AAQSkZJRgABAgAASABIAAD/ 7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgT ExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4U FA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIABEA UAMBIgACEQEDEQH/3QAEAAX/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEB AQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEy BhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80Yn lKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUB AAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMX ZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAM AwEAAhEDEQA/ANDJ/ajnZnUMrrWThYn2y+mllTLLgBW8j3+kR6LfzWIOKc27HxrrfrJkUjOusowx se7fseKmudtf+j372ORcXJHTuqZ1r7Op1OdmXPdRj0h9FjA923d6n+kagZH1i6rViMr6Th3YrzkZ Nz2ux9wa21/qUei5zHbXM9+7Yq2m5J8rl/3z0UYzNRhGGvDU5RwwhGPBL0+vDP8AS4fX+s/wGdNH WmFtfUuv3Yl1+RZi4jRvsD31P9B9j3BzfSq9X2J8bH6y5tFeZ1/IxszJvtxqqQ19g9Sl/wBndutY 72t9RVsHKotxsL9r4me7J6bdZfU6qouF3qP+0ubcX7XMd6w+kreL9Zs+oUsdiZTar7ct+e2uo7mj If6lL8W3bu9TH3OSHD1J+2X/ADk5I5fUIxxkgni9GCMPT7nB7R4J+mcfb4v66LGdmPxMi/J+smRQ /CcK8tgZY8Mc576WbXh7fV3Or/NSeepY2Bj5Wf8AWDKodlVC6prK7LG7XfzbTe12z1HfnM/MWRjt yKOmdUwvs2TY/MfQaXmp2oqe+x7rf3XOa5bHSOoM6ZgNreOp5M1FtnT7KQcYuc0gta5+57K2vO72 oA3V6ad5b/4zJlx8PEY8M/1g4YjHgHFj9uMvTL2pcH6ycv5xy63/AFvzel15+B1LKtsddfXZR6zW nbU2p7PQrcW2XP8A0lm9rECqz6+2sqsGde1l1frtc/JYzbVDf01+9/6Cp+9mx1v00bpllONTguy8 XPGT0rLty6a6scuZaXijZW65230ffj+/2J8fqDx1O+6/p+UcbLwcfEe44vqlllDMf9L9nu/R3V+t j/nO/lrpcBPtR/V4zUBK5wHF/d/r+j1vKc0B94y0SB7kx6T6fmQh/wBfSbWDqFvq0zNX2pm942DI 3Y9e/dkMdS71GPqWp0fI+stH1sxqLs/KyunMym477LHQx73UnI9LZPu9qhidUqovfkPxs597bHON 5wWb76/TZVRj7v8AvPrxtj2MZjf4JF6fnX9U+svR3nCysf7Jkv2ufW5tZqfX9O381uQ29rvf/hKf T/0aU5EiYOPGI+3L1CMY+rh6f9yxitNTu//Q9VSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qk l8qpJKf/2ThCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8A cAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMANAAAAAEAOEJJTQQGAAAA AAAHAAYAAAABAQD/4RKraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVn aW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5z Ong9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA0LjIuMi1jMDYzIDUz LjM1MjYyNCwgMjAwOC8wNy8zMC0xODoxMjoxOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRm PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNj cmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x LjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6 c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIg eG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3No b3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6 Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29t L2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3Mi IHhtcDpNZXRhZGF0YURhdGU9IjIwMTMtMDItMTFUMTY6MjcrMDI6MDAiIHhtcDpNb2RpZnlEYXRl PSIyMDEzLTAyLTExVDE2OjI3KzAyOjAwIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxMy0wMi0xMVQxMjo1 MDo0NCswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBRTdGMEY5QzU2NzRFMjExQTcy MUIwNUI2MTk1NjNDQSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1MDFFMTA5QTM3NzRFMjEx OEYxRjlCQjEzMzc3MzVCNSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMUUx MDlBMzc3NEUyMTE4RjFGOUJCMTMzNzczNUI1IiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rv c2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIu MSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0 aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRp ZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEs MjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwz MzQzMjtBMEMzNThFNjAzNUFDNjA5MkE5OUUyRTA2MzU4QkFBOSIgZXhpZjpQaXhlbFhEaW1lbnNp b249IjgwIiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTciIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhp ZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYz LDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0 ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1 LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQx NDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkw LDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtE RUVGNjYzNTkwOEJGRTk4MDc4NENFOTZFOTVBRTg1NyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNl cT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p aWQ6NTAxRTEwOUEzNzc0RTIxMThGMUY5QkIxMzM3NzM1QjUiIHN0RXZ0OndoZW49IjIwMTMtMDIt MTFUMTI6NTA6NDQrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBD UzQgV2luZG93cyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNl SUQ9InhtcC5paWQ6NTExRTEwOUEzNzc0RTIxMThGMUY5QkIxMzM3NzM1QjUiIHN0RXZ0OndoZW49 IjIwMTMtMDItMTFUMTI6NTA6NDQrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBo b3Rvc2hvcCBDUzQgV2luZG93cyIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFj dGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6QUQ3RjBGOUM1Njc0RTIxMUE3 MjFCMDVCNjE5NTYzQ0EiIHN0RXZ0OndoZW49IjIwMTMtMDItMTFUMTY6MjcrMDI6MDAiIHN0RXZ0 OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzQgV2luZG93cyIgc3RFdnQ6Y2hhbmdl ZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9Inht cC5paWQ6QUU3RjBGOUM1Njc0RTIxMUE3MjFCMDVCNjE5NTYzQ0EiIHN0RXZ0OndoZW49IjIwMTMt MDItMTFUMTY6MjcrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBD UzQgV2luZG93cyIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9y eT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0i dyI/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEA AGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD21gABAAAAANMtSFAgIAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MA AAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJY WVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAA JGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8 AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0Ig SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+i AAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAA AAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAA LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA AAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVD NjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYx OTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3M AAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAA AAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAy ADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwA wQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFn AW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksC VAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+ A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE /gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII 5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtR C2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMO Lg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFP EW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U 8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjV GPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4d Rx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7 IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgn SSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizX LQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQz DTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/ Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRA pkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgF SEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9 WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3 a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1 KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+E f+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSK yoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0 lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiai lqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8 m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4 yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY 6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep 6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3 ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkQAAAAAH/2wCEAAICAgIC AgICAgIDAgICAwQDAgIDBAUEBAQEBAUGBQUFBQUFBgYHBwgHBwYJCQoKCQkMDAwMDAwMDAwMDAwM DAwBAwMDBQQFCQYGCQ0KCQoNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDP/AABEIABEAUAMBEQACEQEDEQH/3QAEAAr/xAGiAAAABwEBAQEBAAAAAAAAAAAE BQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJz AQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYX VGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eH l6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUF BAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz 0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2 xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/ 2gAMAwEAAhEDEQA/AOxeYx+Z09x+ZP5jea/+cn/OP5c+Sv8AlYvmby/5b0/SNP1LW0gi0y+kQ+v9 TdFtUFQkYbqFzmsninjnLNKMeIgAC6A+Gz9D6D+S4w0ujwdmYtRnOnxZJmc44+Izjfp4vq/pUxjy u3nXW/L/AJL13Vf+c1fOGgx/mb5k1Xy7+XMTafqFyNQbT71LKKaYx3FYPV9WJyGHw8up4nKsZnKM ZHUyqciI7c6NOw7QhoNNqM2CHYuKZ0+KGTL64jh44cRAserho8ufxVtJ0T86LCW10z8z/wDnLrzD 5B13zT5s1byb+XlhCb7UotRvdGvhp1xczypJGLa3a5IjVmBJryIAxhj1EdsuolEmRjHrZ5c0arP2 Lkicmg7IhnhiwwzZiSIcEckeMRiKPFIQ3IRHlvQfzjurbypp3nf/AJy483eS/PXnTzPrXlLQfLEV rqGpwtqWi6gNMlEt3BMqxo0zL8TKBxNegOShj1FATzyBJMQKvcGufRq12r7FjLLPSdkYsuHFix5Z TMowIhkjx7RI9R2PJLvLU/nC+8peb/MPmn/nNrzb5avvy2vYdN/MXS4NP1G+TTrq6vZ7G3SKZLhP rCyPATyRdgd8jDiMZSlqZDh+rawN6+9yddh0UNVhw4Ow8eQakcWImcYmcRATNijwkA9Vl4/5jeVf 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="70fb22314860cd4c3cb837519ad16d67" Content-Transfer-Encoding: base64 Content-ID: <70fb22314860cd4c3cb837519ad16d67> Content-Disposition: inline; filename="70fb22314860cd4c3cb837519ad16d67" /9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABFAAD/4QPwaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6 NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5 OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1w PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn L2RjL2VsZW1lbnRzLzEuMS8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0idXVpZDo2NUU2Mzkw Njg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0QkQ3 ODIxNTFGRjYxMUU1OEExREJGRDA3RjU3NDkwMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0 QkQ3ODIxNDFGRjYxMUU1OEExREJGRDA3RjU3NDkwMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBJ bGx1c3RyYXRvciBDUzUuMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4 bXAuaWlkOjJGNEE4MTM4MUUyMDY4MTE4MDgzQjdDOUE4N0ZBNDUzIiBzdFJlZjpkb2N1bWVudElE PSJ4bXAuZGlkOjJGNEE4MTM4MUUyMDY4MTE4MDgzQjdDOUE4N0ZBNDUzIi8+IDxkYzp0aXRsZT4g PHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+MTYweDYwMC1jb3I8L3JkZjps aT4gPC9yZGY6QWx0PiA8L2RjOnRpdGxlPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8 L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/tAEhQaG90b3Nob3AgMy4wADhCSU0EBAAA AAAADxwBWgADGyVHHAIAAAIAAgA4QklNBCUAAAAAABD84R+JyLfJeC80YjQHWHfr/+4ADkFkb2Jl AGTAAAAAAf/bAIQABAMDAwMDBAMDBAYEAwQGBwUEBAUHCAcHBwcHCAsICQkJCQgLCwwMDAwMCw0N Dg4NDRISEhISFBQUFBQUFBQUFAEFBQUICAgQCwsQFA4ODhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgBkACMAwERAAIRAQMRAf/EANUAAAEFAQEB AQAAAAAAAAAAAAAEBQYHCAMCAQkBAAEFAQEBAAAAAAAAAAAAAAACAwQFBgEHCBAAAQMDAwIEAgUF CA0HDAMAAgEDBBEFBgASByETMUEiFFEIYXEyIxWBkaFCFrFSYjMk1BcYwdFygpJzs7R1lTZWN6Ky U4OTlCXw4cLiQ2PTVHSE5FU1pWYRAAEDAgQBCQUECQIFAwUAAAEAAgMRBCExEgVBUWFxgZGhsSIT 8MHRMgbhQlIUYnKCkrIjMxUH8cKi0jQ1FkNzF+KDo+Nk/9oADAMBAAIRAxEAPwDf2hCNCEaEI0IR oQjQhGhCNCEaEI0IRoQjQhGhCNCEaEI0IRoQjQhGhCNCEaEI0IXNt5l0nQbNDNgkbeFFqoEooaIv wXaQr+XQQQuAgrpoXUaEI0IRoQjQhGhCNCEaEI0IXgXGyMmxJFcCm8UVKjXqlU8q6KLlV70LqNCE aEI0IWdvmByrluz3ONBx2lqxU1EmLvGcEX3nUD7wHF3qQgNeibEr8V0wGyPl00w4U45c6022z7Nb WxlunVky0kEjmoA3Enpw5l1yW88i8m8gXTDMKup2Gx4+ShNmNOGwSmBdslM2auEqkhIACQJRKqur QWuiESPPzfKOPTjgOsP6FlLbeI/VdDHEHvb8z3nyjmawZ/vN4rpguW8gYTygxxXyFcAvEW6xlkWa 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 T6afBNcKcvTHXyqddv8Ak9KaSqWvmX//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/gif; name="d413175c449e32643368728f5d172983" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="d413175c449e32643368728f5d172983" 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 DYEAADs= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/gif; name="7ed36c4547868847142a2a950349453d" Content-Transfer-Encoding: base64 Content-ID: <7ed36c4547868847142a2a950349453d> Content-Disposition: inline; filename="7ed36c4547868847142a2a950349453d" R0lGODlhXgFaAOZ/AGuMt/XHyZKryqeprMrLzP39/eeVmMLDxd5HTfzz8/K3uvLU1eqjprKztOnp 6vX19ebt89Hd6U91qPn5+e7u7+mFidc+RVKEsvvq69fh7Prk5M3O0Ns1PODg4eZ0eNbW1tckK/H0 +PDx8TFXlby+wMjV5ONlavjb3KutsObm56O71LS1uNRUWbbG2+BWWwBJjezw9jhxpqmrruTl5t3e 37i6vNjZ2sTGyLq8viZknv74+NksMtHS1L/Awr+/wK+ws7a4uhhamHGawNDR0xpEifjf4Pf3+NXW 2OuOksfIykRmn9rb3ORtceJeY99OU/CprPr7+9/o8azD2u2doNLT1fGwsuLj5NYfJs7P0fbOz+d9 gYegw73N4NfY2evr6+zs7Q5TkwdOkGB+rX2VvK691fO/wZ2zz80kLklJSV1dXX19fdt3e+Pk5W5u bumwsqenp4yMjJqamtvc3ey8vthma96Hiu/IyvT09PLz8+fo6f77+/fW1zMzM////9YdJP///yH/ C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0i VzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6 bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8w Mi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3Lncz Lm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJv dXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5z OnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4 bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9j dW1lbnRJRD0ieG1wLmRpZDo0RjMxODYyM0FGQ0JFNDExODRCRTlBMkMwNDEwODZCQSIgeG1wTU06 RG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0IxQTVBNkVEN0ExMUU0QjJFMERENjkyQzgwQjkyMSIgeG1w TU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0IxQTVBNUVEN0ExMUU0QjJFMERENjkyQzgwQjkyMSIg eG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpE ZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkYwMUI1MzMyNzlFREU0MTFBRkNG QkU3NEU3OTBGMzc5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRGMzE4NjIzQUZDQkU0MTE4 NEJFOUEyQzA0MTA4NkJBIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt ZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg 397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqain pqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9u bWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1 NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkE BSwBfwAsAAAAAF4BWgAAB/+AfYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaan lHI/NKitrq+wsZI2DSskN0NWFGxDNyQrDUcFeEkoQ18HsoZGPMrOz9DRnSI2ch0pDikoNDY0HXI2 FAUiWEAHXjQF0l/S7e7v8IZ4GwcEBwP4Az95hR23eMoeHGEjKAUBgAW6pKvEp2HDN4y88GnzwJAP PgQGvUkzsWK8jyBDFeCBxYigDvny8RNkZAgFGkCUHRnQoAAUEgM29EkxAAUFhm0ICPXC6EEDPnAM wUkq6A2fOAQahJxKNVMBEg06eKHwBUfKr/l+4GkAJRaUDTIaUBDh9UCBIyj/fnQooE4SnzSS4vDp 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 WImWeImYmImauImc2ImqEAgAOw== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="1df44043dad9a0120eca22d550c5f7ad" Content-Transfer-Encoding: base64 Content-ID: <1df44043dad9a0120eca22d550c5f7ad> Content-Disposition: inline; filename="1df44043dad9a0120eca22d550c5f7ad" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8vRMsMEYpVIVjnII6GpI12pnoRTiRjbgE9zXKbkEjEkFW+tGw7S7HgUrhQd3T2omaRrCZUUfdJoA yrrVDvCQsyr69zUNuLm5lCQieRz2TJ5rs/BXhHStVsI72+3TO5PyBsAYPtXpNlomn6bFttbOKLHO 7FKVaMdEjeGHlJJt6HjYbUtN8uO/t5Vif7sjr+lXT5bgEMN3tXe+LFt9b0mTSbW5t2vgQ8ag55Hb I6E9PxrhEtXt7eymnjwbhNwx2IOCKUZ8yuyalLlemx6FoVjG9ikTgESJg596808RaY2k61cWxHyA 5Q+or1jQgHghI/uisHxzoxvbE3sS5lgznHda7MHPlevU5qqucR4Uufs3iG2bOAxKn8a9f/hwK8Mt ZDBeRSA4KuD+te4WjmS1jcnO5QaWYRtNMdB6WM+9mEc+0ntRWN4hvVh1QpnHyD+tFcip3VzVyOTS D7xzkkdDTY7N2yw/KrIRW52YP1p4TYcBiKdhFSSBY0G4jdUcTYbke1WWijdiWBNSBImXb5ZwKYib w/b3+kQXUNqwcGVXUkbgqMOCBkd+Otdjpg1a7Qw6rMHWYMoVUA2nHFc3pNyljMGAZW+6D1G3uD/n 1rrb+9jNvAwaZDkFWgBz+lYTvzHoULOOhJpfhy2065MqhyM5ChztB+nTNc34st44prNYzuZTIWXP Kgtn+prp7K5ljBQRSBQcs8km4n9TXGeLLhRefa8MoZzCT2OFBH8z+Qogm5ixHuwsdD4J1SO6ubm0 J+aIZH0rcvLmyt4pPtkiJEwIO41x3hHwzeRLLq32gxSPGTGo5yD61xeqXd9c6hMl9M7yIxBBPA/C vVp0VN2TPKlO251mleD9PvLl73z/ADbYudiD0967SEeXCI04VeAK4HwRq5guzZSt8kvK57Gu/Pyl /pmscYpJ2bLpWPL/ABZev/b8q7vuqBRWXrshuNcu3/6aEUV3UaC9mjGU/eZq+YEYfMPelE67ySwI q+2m2aqN0UhOOeagNlYtnEEnHHWvA+tQ7Hd7KRVkuoIV3SSog9zzVKTxFaQkiMPKfYYFYviERR6o 0cAIVVGQTnBrLB5yK7YRUoqRzyk07G3eeJLu4OyDECdyvJ/OvRrKSWHQNP1JA1xptxGFbbnMUoGH X8wSPYivIQQcGvT/AIT+KNLsfteha3OIra6ZWtmcEoJDhSD2GRjk8DBpzpKSsVTquMrm8NWW5jW1 0u1Yu/Bbb0/+vXN/E3GnQaPpW9WmEb3cxU5wWwijPsI/zJr2+w8IGzujOSgtwCRgcj2r55+KV35/ xC1QE/LEyRIB2AQZH5k1FGnZ3ZrXqqSsjnrHxBq+mRtHaahcQxk52LIdv5dKjn1m6urlp7hlklb7 zFQM/lWe3OFFNPWulNxd0cj1Ne11Jo7hJUG11YEEHvXslpqSX2kR3inh4+fY4rwaNsMuexziu78N auU0q8sy3GwvH/WnUvVg77oqD5WYE8vmXc7n+KRj+tFVg3ygnqef1or2IK0UjmerPWhZQbQGjjJA 5+as7VXtdO0m8uxBGHiQlQT1Y8D9SK12jlwPnjHH92uD8e6nLsh0/wA0ckvIqjAI/hz+tfGUYKc0 j2KkuWNziHdpZWkc5djkk96QDim05DjivZPOHLwa0NDtYL/XLO1uZGjikmVXZOqgnrWd0NT6exTU oGBIO8YIoYI+3VcS2a4kGduBjtXx14jmiv8Axrq7Nlle8n28/wC0cf0r6w8P3sd14VttVdwRLbiY +2Vya+N2nLaibljy0m8/icml0GQZG3IpnQZqW5jEVw8Y6Bjj6dqgY0xCg+laWn3LQODnnkfUGs0V NE+COauErSEy5M4RgoHGKKrSybnyfTFFen7RGdj2eT7leZeNP+Qyv/XIfzNFFfLYX+IenX+A5yl7 0UV6ZwklSWn/AB+w/wC+P50UUMD6o8If8kii/wCvKX+TV8pSfeoopIZLe/8AH23+6v8A6CKqGiih bCAVInUUUUwHv980UUV3GZ//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="52b485f74dffe2eb8716fb7bd8012882" Content-Transfer-Encoding: base64 Content-ID: <52b485f74dffe2eb8716fb7bd8012882> Content-Disposition: inline; filename="52b485f74dffe2eb8716fb7bd8012882" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A z9IuLjTbyK8tZDHMmQD1BB6gjuK9I0X4h2E2orBexLZGTuX3Kx6ZzgYP+H54994A1CG5zpqC4tm5 G5wrJ7HOM/UVzbx7WeNtrYJU4IYHHHBHBFPcnY9zvnklia2tkDu6fM27ARSDz75xwKlF9bKApcq2 OVKnIHqR2HueK8o8P+LLvRFeFmEkDJtUyZPlYzjHtyeP/wBVenLvgnRbdTObhC+6VsbcADk4zjkc YpFEmowrIYXc5RWxgHkEkYYZ7j+RNTeROPu3b49GRT/QcVVFvNZ+VLLJHLFEzHAQqUBPbk5AHb/D FaRZchSwyeQM0AVTbPLj7Q6yqOihdo/EZ5rA8S3UWi2fnIHiaQlESEAbuO4PGK6K4uI7ZQWyzMcK qjk9v6iuD+IWnXN0lteO8yQq3ltHuDIuRkEeh4wevbmmgMCw3ZUjoOg7V0NnFLIpLHavoO5rndMh WGNY0ZuP7xzXS2cmBsyVz6VaSNoVH0HTafHdxncBuT7pHBQ1xOty3Ecsiyq5k6HcO1d20cm/MYO7 oarXunx6/vsmXyxH/rbkDmMeg9/aoml1OylX5NXqvyPMrSOe8iZoop9qNsxHCzAEe4HvRXtmmNpe m2EdnYGOCCIbQhHOe5PqT1zRXOmu5MsZUu7RMvSfHFpd2TObSZLlSB5WQQxOejen+NYuqaRb6kXn htEtJWOcRZ2n6jp+WKh0pIbQwKAD8vXPfua622MXlg8HNEqr5rI5o0ly3Z5Z5Jt7xY7kMiq4DsBn Az1GK9rv1maS0ltJ1WXdtwy7ldDgt344Gc+1cVrOm29wl1IqAExFgR/eHSm+AfEEUJXTLzzHlJ22 zKhbC5J28DI5J56Y9MVrCXNG5lOPLKx2GrXUGnWscuqXDmKWVYtqAKmSe/cAdTz2P0rlte8Z2dhe Gz06ysrlQA3nBg6sCDgcd8+9dD41FmfC12bwqAADGSQDvHTGe/t35FeNlfKYo4KsDgqexq0iGd1p njjz7hIrvTndxyPszFi5/uhWbjPHftjvV3VfEHiG7vZLaz0OZbTaDie1LF/XPOMe1cVod9/ZF3Jf x/ZjNDGfKSdWO4k84x3Az1I617VaTC4s4Zd4fzEVtwXAOR1A7UAclofh4XNus9/pyW7MzHCSSIw5 6FCOB9DWudOsLBCwLFjwpJyfoK2XXIwTj3qlJBCAxl+cEYKgcH60XKWmpzK3d1e6h5FrAqRgZlnf +BfXPr7VZnnjt0jhhQ/Zc4Y92b1JrJu7TXbTUpbnSbgNHI3NvMpMZHp6D+fvR/wlFowa21CCXTrr O0LMv7qQ/wCw54/P9a56zlJaHQpJSTaJrqTS1nIlnKPgZUZNFc/YPLY2xhutLluZt7M0ybGD5PB5 IPTHFFcVkdfvLRN/eNlktdCvlhma7kyCVb7M+0nPRcZz1Faw8SWsdktybebyixTOw9R7Gs/Wbe90 6z1jU7gGWL7UksDAhj5RVFPrgAlvyzWXB4ngaw8gmIjcWDs6lW+g/wA4q22nqOMFKOh01hrdtrM0 kFrIEdkOFfhv++T1HPbmuQnE+m6zvXdDNBICCoGVx3A6H1x/jWj4U1a/1HUZxJAPsAkKIGAzGQM5 B+tcv491yTSPGoiEyTxzwLIyYxtOSvB/AVvh371jmxMLLQ9huUnttEj1O08Qs9uEGRdRIYpQTgAg KCvXH8+9eea5q9tftC0Fm1rsUqYd4ZUIOTtOOhHbtVPTvHlxc6VJpyyLJDJGIvImH3VAIG335Bz7 CoGXdt5xg54rsscQRyqCG8pXBzkOD6EdQQR19eoHpXtfhfURqnh+2uNoVsFWTzTIVIOOSec9+fWv FACFwQMZP5Vb0nUNR0nMllfmJI2BMZY/vCeBkDrjnrx+lDBHuxH5VC8Z6gZ471yGmfES0Om7tUVh eKTlIIztYZ4IyeOPU1gWnxE1O1nL3pjuICeVKhWUexH9aVgO8vbGK6UCdG+U5GxiKZ/ZdpNaLE0T BAu3bvbp7+tYN/8AFXwzZJlbiS4cjIjijJb8fT8a5NfjPGXkM9hMsbH5dqA7P/HuaaZLidDeeEMT 4gvb6GMD5UgcKv5AUU2D4haddW6S2tvd3UZHMqqi5PfgsCKKu0OqX4GfLU6SY3Vb5YfB/wBmvrhb drpFtVdhna7/ACj9Tn8K8q0bULS7106KL23jkMmw3PmKYj/unv7DNRfFPW57rS9JsY93yu80jDoS uAP5muesr3TJfGNndQqFtWiSW8BUbUcj5sewyPxzXJCinH39zvlXcXeGx6/4UvLK11zVvDtvLvbT 5Qodz80mUXcx/wCBbh+VeQfEaa4HxBuzMrKqhY0JHUBQePxNV9M1PUI/FUk2jXkdpPeXLKkrKCFU k4HQ+1N19ri+vJo7rUP7RnhlLG4C43tgAge3FONPlqXQpVOanZiW80nk5jOGA65xXqelXVsLKzF3 YxzAKDI6SOrvkc85I+nFeNWt4GH723B543OFA/XmvUdEeSTRbR5CCzRg5Hp2/Sug52bF21m8ubOG eKPjiWUOe+eij2/KqyoEBAHcn8+aWigkR22qSe1cxdXc9/eCCJtql9gP4Ek/kK6aRdyEeork7vT7 uKZ1iDYZtyuhwVPqPzNJjRUuT9hDCQomOpbnn2POTVzTdGur4MUZ7a3nAHl9ZJlzkcdh0OTSWXhd pZvOu3eRm6lzzXpXg2yt4tWRip8qAebwOrD7oz25wfwqIwtu7nRWrKpa0VG3b/g3ZZ0z4fy2tikU U/lgclSvOT65oq/rni1bPU3hVtxUDcfeiq0MNTyfxIiy+HpmkG5onQoT2OcfyJry9iVlABIDLzjv RRVMSLNuzRy27IxUh8gqcHpWjDxtI65oopIZbtYIvtjP5a7sZzivQNG/5BcP4/zNFFUJl+jvRRSE BpMA9qKKAFHWul0gBfDt9IMh/NQ5B64ZcfXqfzoopMpHlmva3qNprE0cFyVTg4KKece4oooqQP/Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="4a079f0941a1a674ad847d9a722481c7" Content-Transfer-Encoding: base64 Content-ID: <4a079f0941a1a674ad847d9a722481c7> Content-Disposition: inline; filename="4a079f0941a1a674ad847d9a722481c7" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A YGJTcf7vAqtorK2mq4+X5yQW+pqfaxQYPGKj+xJLZvalQIj2x0PrXl2R1lm4nVU+QrvPCgnvXMRz yeDdH8ksLi5uXLqSuFU4AP17Uk+nXdh5t1BGriAM6bgeSBWPptzfa7dSrcSGZlQMqnoo74A/Cuqn Rbpt9DOUlzJG9pvia4v7Y2xjzek4QouQ3vgfyrXuvC+s6rZBbkuuOQpiZQTjvxWBDYXFpKskMbRS ryrxuVYfjWhZHxdq1xLHZ+ILy0hgIVna6kYsSM8DPoRWDp63vYpcz0RTPgfU7Ri91am2iHIZwSWP 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="3026877f1ccaaa9df538f39a5f44be59" Content-Transfer-Encoding: base64 Content-ID: <3026877f1ccaaa9df538f39a5f44be59> Content-Disposition: inline; filename="3026877f1ccaaa9df538f39a5f44be59" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8CLE9SaO3euns/AXiO9t47m20x5YZUDxuGGGB6HrVp/AHiCCNheRJbtIvyJKxBJBHtj/APXVGTqw XU48MR3P51bicMAa3j4A1cPgy2m3++HYj8guf0rHu9MudMvHtZwpZeQVPBHrzz+dJjVSEtmV5fvt +FIsbyPsjRnY9lGTTyuS2fatLRvk1OPgfdNZmt7RuVW0zUFXJsbkDHUxN/hUsKnbz1z/AEFe8CQf I3GWAzyP8a8PCkzSn/poalyvFiwtR1KqujQ0rw5qGtK7Wka7EOC8jbRn0Hqai1Xw9qOihPttuUVz hXHIJwDj9a9M8E3OjadokE2oja5bChtxyT3Cj+ZrS8U3Nv4tsJbOG3uVMeV3SQ4CEdx+IAx71z89 mer7NnhLrzTdvFWZEw+PTNMK8VpczcRgXgfSipQOB9KKu5HKez2dtptjaR2tvr17HFGMKoccD/vm pGttJu2Bu9YupjGDt3tkAHr/AA+1YLJg1IiEu49VH9a81Van8zPVeBwz3gvuN77H4fxj7a3Tjg/4 VXfQPCF8omnYPIyjLNnP8qs6l4QvtLsZLuWe3dI9oKoxJ5OPT3rEt4ybaLH90VUqlWOkmyIYTCzV 4RQs3g3wY0u8TyqCQCqk4H/jtPHg3wdFIHS6uQw7gt/8TUUkZRAf9oVIQSM47VHtZ9zb6pR25Ubr XmjRyNEZ/lAGP3R54+lc83hzwfEjsslwW5YAl+T+VQzg/a2/3VrO1m+NhYtIuN7HYM+ppxc5PlT3 JdChRi58qVvI3J59M0WKNNKBkjORskBJDHvz1+latlLqmoX1pa3cm2SZ87lUKw5+YgY4GOec15z4 fWfWddkaSdljt7WaViQG/gKgYPHJYD8a9S8DeHptA8M3HiWe6M8xtpJArKP3YUHjOM9q744bVRkz zZ4u8XKKstjxO5s2jumjU7yGIGOp5qs8ZXIYEH0Iq/h1k8x2O/JxWdfX0hAUkHacnjnFbzoLdHLD EvaQAcUUKMqDRXNc7LHrC2sWwkoCfpVUxqk7gKB8o7fWtFCfLNUpMtOxwfugZx9a8y57dkPDvIQH YsPQnNV40/0fhFzjjiplDBl+Vv8Avk02Nh9mAweg7GndsVktilcj92PlHUdqHT5AeMYqWcgx4CsT kdjTGHyjhs46bTVIasNhQb24HbtWF4vlRLW0g43M5f8AAcf1rcjJ8xsK3GM8VxPiu6E2pFd+BAgU j1PX+tdOFjeqn2ODHzUaLXcv+HbtrU3SocNcBIm/3N4Y/qor2u+uhZ/Bi6cHl4SgPs0u3+teB6RK EuYzwflzz9a9p8RPCnweijMg8ySKJgE5zlweeOlehFXrX8jyJO2HS8zxO7uVWQFHBAHPtWQ0hkjJ zxk1Yk/eO5HTJx6VRTgMM8ZrZs5TWtxm3jI6bRRRYLi1XPqcfSivPlpJnr09YJnr0eSHpqxEZOe9 SwnAYfWgt8p7V5Z7YNgHr6VRUj7OtTSMTIQD6VURz9nUYPSmiWBX5k+op8gQduaglJXYQO4xmmyO 3UkVYrkZdIBPK5xGg3N+Ary/VZ/tNy7fxO5dgOxNdzrczx2EsYYfvWCnjt1P8v1rltJtku9XIWNB FAC7Hb1Pb9f5V6OGShTdRnjY5upVjSRFZb7O9Mc3DIu0j3Br1jVr1dR+GwitmiUQ2i+ZsO+RmXBO 7+6B6cV5HqNybbW7hpEJBZ+Onc4qi1xcTYLy/L129hXVTevN3RwVGkuTsy2ysUIXO09QKpYxPgdx jFXN+U4PBqq2PMUAYBrQxLVvcmCMpjIzkUVWYHPPWisnTi3c2jXklZHuUJO16ivLuOzszLICRnAx RRXj0IKdRRlsfQ4yrKlh5zjukc/Jr0jMTGir9Rmqp1q4jU42gAdMUUV7yw9JLSKPjZY7Eyd3N/eK +tyMQZUDYOeOKswajFdqwCkHGcGiiufE4ekqbklZo7cBjsQ60YSldPuWLnwffavpLapDcQRxruEc cmcuQMnkDjp3rn9CsltdIWQgeZOvmMfr0/SiiuGU37JR6HuRpx9s59TlfEybdcl9Cqn9BVCPbtBK 7j0Aoor0KXwI8auv3svUsKTsIbAI9Kgc/Mv1oorQyJ5OH6A0UUUCuf/Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="b10a0f83fd4cf3fa6e7a1f7f2da97717" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="b10a0f83fd4cf3fa6e7a1f7f2da97717" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 5zRZfC76LHczW9yZIkUzyRIMZ/x5X8QfqK3i2TQ7m00+5tvNIlkwZbngMoUAgFeeM8jryBXH3uj2 0uoW0GnzSk3U21bdo/uZbbwc888Y68Vuar4qs0sv7Em0KGT7LMfKljlKE4+UcY9PpW7q8ytZEKny vmuQpa6PD4de2vLh/txcS2iruMe1go3NjOCcYPPU44qKX7TdatfRXF0j3CQyb54RjzMICFJPUAKB x6Dk1VltTHb3MN4tw00aoqrl2WHIzhhx/dA7c47Vp3FidG0aO6sNSh+03QczR7Fz5edv8QJHJxx1 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="47d5638acd4c7dc3120f638d68b0febe" Content-Transfer-Encoding: base64 Content-ID: <47d5638acd4c7dc3120f638d68b0febe> Content-Disposition: inline; filename="47d5638acd4c7dc3120f638d68b0febe" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 5GIli4B4IzV+KQHyD7D+orHsL+GVGcW7bgSuGk/wqlqurSqwjS2ZYYx1ikKkH685+leeoOUuU6XJ JXPStOjDSxueVWQZ+mAarzxbrKUnHEqgfga5SwSLR9K03VXkmWC5mBKJOWZgpJyQQB1GOtdZBq+h 3u+GRriKKVRJFJuQ7nB5XAz0yO/euyULR5fI5U/e5vMxJGUNl/fiqMd1Be6tb2kU6R7ycySfdU5w M/iRWle6toVi8dlJbPNJcAAYI+UZ4IbPGcYrl9QvbGx1900KeaOBCDuk+fce6+nUYrlpUW9WjonU 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="ebee1a4266cadcade30c0c743265083a" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="ebee1a4266cadcade30c0c743265083a" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAMQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A p+HPF9nYXUkd4Z5ITKJFZHyRwy/MD94YYcf7IresvFeiW19HLLfXH2dCnlBxzxvjy5zzwQ3Tsp68 V5db6TdyNYSRySxm63BpJUIVeDyCOv8AWkNq1yRBLdReeG2BhGX3c8Y7jioiqmxFmek6D4yF1dyW kjXErRK0UIG3541OVZieScA5P+NbyX839omZftZjDD9yVTAOQQfve+cV483h690wo8955Ds20BiF Yc8Hr3HP4GteQ30RhgvNSeHyf3bFozgNtyFOCdxyVGT696peY0pdj0mTxJDp12twzSBIhErRFFbA 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 WLKRyUXWX/fNFFFc73NUf//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="a1dbdfcc0b7d2c588c5aea4ef1913053" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="a1dbdfcc0b7d2c588c5aea4ef1913053" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8LW6uc/8fEv/AH2a0dIj1C8vrdYpZW8yYRKN5OSe1ZkMTzSpFGpZ3YKq+pNd5pumS6NqVxJYwy3F zpUe7Yx2hpmADceigP78ClUnyoqEHLY6S78CzSRlpNRuiU4glR84XGMMpPPrwR+Nc3aeE9RutfSw n1y3tYAv/HxcSkE47bD6/l710fhbxpeeIEu4LpIY5odpVVUgFeh7+o/Wue8Z6mXlaJlGPUHIrng6 nNyyZM+XdIyvEOpanBO9pe3DR3JImmRJcpuI+UADgYUgY7c1g/bZmIHnS5HX5zzVZn3nczdO1PhW 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="74eedcc6f2b33299f9d7f72ca6b0d078" Content-Transfer-Encoding: base64 Content-ID: <74eedcc6f2b33299f9d7f72ca6b0d078> Content-Disposition: inline; filename="74eedcc6f2b33299f9d7f72ca6b0d078" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 81awS5tdis3mpwq4zmtuytHsbVYJmG5Ryas6P4Wm1Z7loXMeI/MT1NR20Za1H2kEsCVbd7GuendM qMri/KYZACW44NczqP38CurMSrbuV6Y4rmb9f3g6VqMwVibzHGMlq9S8IeBo/FU0j388yaXZKI41 jbG9h1x+OSfrXHeGdLh1PxTaWtw7rCxZm8tgrfKpPBII7Z+ma9gtb7T/AAPpNvZ3X2jzJcSTssZK oxGdpxzxmolK2xtThezexwfi74f32lyk6Ekk9seqE5Zf8aoeHvA/je/YPBbyW6EffkbbxXq1r4j0 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 FU4fmiBJbP1NFZWFY//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="c0e6e1922842f861ff9ebbba345a6b3e" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="c0e6e1922842f861ff9ebbba345a6b3e" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 0o+cVNUER6VI77RQBICKkU1TWTNTxvzQBl+MbmS28MXIiJDzYiB9ATz+mawfCPhazdVeeESyPyS/ QewrZ8YzINFWIn5pJBtGOuOtYmi6/qNlcFoII3gjBLK6dQMfxZ68+lZ1VKUbROvCOEJ801c7mfwr pq2//HjB07LXELow0PxVb3FkSsckmCh6AHhh+RzXUan4nv7edYY7eIQuqt5pRnIJAPTIrMv5H1Ce wcIysW3SFQRge2e59PzrnoqcJJt6M7sVKnVg4xXvI6rFMYcU9SGUEdCKa/Suw8ZkZqE9TUxqE96B EZHNFKSM0VQFeJulE79Khjbmm3D8ZpDHLJU0cvNZyydamjk5pDsHiO0N7pDFF3SQneAPTv8Ap/Ks aC4RtEcCJTMwAGON3Sptd8ZWWhxmNV+1XR4EStwP949vpXK6TqMdzCqXkfl28rEqwGQpGeKUo3Vz ajUcXY9V0+4W6jM11aLAhUBQW3NkcenFVZG87VYwowEUnjt2rEs/7K061aa1nWSU4IVExzWbq2ua rosVtqghiaK5keLZIp52hScEH/arCNG8vI7auJlGOj1O/DcUx2rkNM+IGn3YC3cb2jnvnev5jn9K 6GDULW8G62uYph/0zcN/KumzR5dy2zcVDu604txUG7rQhATz1oqJm5opgUEnA71Fc3AIwDWes/vX I3XjaSK5kiaxHyMV/wBZjofpQxo6XVdeg0iJDIrSSPnYinGcep7VzE2v6xrU32a0V0D9IrdSWI+v WsbV9bGryxSCAxmMFSN+c/pXV/DyxS4a9vGjDvAoVBvKsM9SAOtDajHmNIR9pNRGWPguK6eS3vdR WzvAoaOOSMkMfQmul+Henx6f4hufC3iSzR4bhfOh3dCem5G+np6VsXI8+wNtE/m+cCCkkWGjIHrx wea4i+1m40vxFpLeYHk05uXbk4OMrk9Rj+dTQnOUve2NcTSpRp+7ud9q+h+HtO1cQWN1cttYeZA0 LFsZ/gJADZPA/rVX4vzQtpGhWK6dNYfZzL+5lKk4IXnKkg9Dmuo1m9tJPGWlajtBhSGKSTkcZIYE fQDOKyPj2gB0KUAfMJhn6bD/AFrqcIxa03OKMptas8R2eWSc8DmnxzSQMJopGjdeQynBFNnwsbn2 qu0pKiMdcDJ+tIZ6j4O1iXU9IkS5kMk9vJsLE5JUjIJ/UfhW7u61514Bvo49RvLc8GdAyk99pP8A j+ld8HzWUtGUOZvmoqB3+aipA5kOa811Mk6ndf8AXVv5miiiRTIIu9dj4Gkb+1TCpKrInJU8jFFF NfAEfjR6BPNOY/nnd2jJVGbGQK8seR5naSRizsdxY9SaKKdJbmld6o9Is7uW40C3mkbLiJFz9EA/ rW38Ynabwj4Smc5domJP1RKKK6620Dkh1PGLg/uT+FVmGZGHbP8ASiisWWWtDnki1qzkjba3nIvH oTgj8jXrKsaKKzmUiFydxoooqAP/2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="550ac63bb0069a77609d097c41ddafff" Content-Transfer-Encoding: base64 Content-ID: <550ac63bb0069a77609d097c41ddafff> Content-Disposition: inline; filename="550ac63bb0069a77609d097c41ddafff" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8JW8uAeZ5P8Avs1dS7lkj2PI7D3YmssqRU0LYIFWpMlpGm4zBgcM3IPpVWS6c7RKpWRPyarqyxhe VYnFMtv7PvdZtINQleCzL4lkXGQKqWiuTFXZQ3+dctMePStW10DVb6NZrbTryRDyskcLEH8QK6rX LXw011a6T4esrUKxTdezMXYsT0HPPv2r0zQtOvbLT4bVtQgfyVC58gjOP+BVk5G6p9zi/D2u+PNK gitpNNubu3Qj5XiZX2g8gE8HivQbrw/ZeLtOB1bTHtpSvEgIWRfyJ/I1LZkDUUR7jfMDnAXaCPpX T9EBj6Y6GlfsaculnqfLHibQ7jQtXudNuOWib5Hxw69iPwrmXCgDBO7nNe7fF6KyVNMnmtVe6Z2G Q2MouCQcdRz+HNeVXpiv7rz2t4YgFCrHGuEUDsBVK8rGEkotnOYJ6VbiP7tRWlcW37tTD8uOwqgJ 5IZcSDOPWqtYm9yOWEh+BmirRlif5v6UU7CuUqcgGcnjFMwaDwOtSUOlnkPyg4Wq9KzZNJ14pNgj b0f+zxMpu/Nkfqqo21Qe3v8AlivYfDXiGxa3sIvsczFUIuAsbsQeMZwDmvN/Cmp3kV9aabpmnwfa RJ5hlONzjA4J9K9agh8Xrq8NuRYROyZwZzypPXAWosbxOmthbSSRPBCYypyFlDA/rzW0zsgySn0X nFcVqU/i2zSSS405LiCIZLWs+58eu0gH8KisPGlnJK9u9he/aY1BdZIWDAHpkGhtLco4z4wamJtf 06zHHlW7uR7sw/8Aia85Mo7Gu48b6Bqmu6xea6PLt7WKH5Elf5yqjJ4GQO/evNDI1VTqRasjCpF3 uzTS5wdrHIqC+iDDzE5FUS7Y60LcSIMA5B7GtOYz5RVGVzRTPMPaip0K1JCCO9ROakJI71E1Jght T2UMdxfQxSyrFGzgNI3RR61BRSGehfDWa1f4kKWkVYm3LGx4B9PzxXuEM8d38Q7rEqlba1jjCg/d 6t/7N/Kvm3wXLb2/iOGa6cJEgLEsMjiut8Ma9L/bera208qo7MVweoz8o/LAoNYvQ9qikglvL+Vr qbzo5yBGsxCkKcj5c49B71xuq3cN58QL2WEnMVlDHIv91tzNj8iK5jV/H40fT7ae2NvPqM7+a4+8 FHfPoelcdo3ja4sb++vLlPNmvJfMkb39PpWVZOUGkaRnFSPS/E1ww8Maj/17uP0rwzdu5716Bq3j m11LQry2EbLJLGVA+tedAkdKzw0XFO5NeSk1YlGzcAxIHqBmmhlBB25we560zk9TSqMnmuq5gOEh XO1Rj3GaKWigQE0w9acaYaGMKUKTSVMvShAOR5IEYxuy7lKtg9R6UW97PayrJEwBXsVBH4g0Sfcq vQwQ6R2lkaRzuZjkmp7eGORfmODVapoCQpwe9RLYqO5ZntY4rdnVs8VQq27MYWBPGKqURv1HO19B KVeGpKO9UQSZopKKYH//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="3fc2cd1dcc88e73b2bc1443995fd567e" Content-Transfer-Encoding: base64 Content-ID: <3fc2cd1dcc88e73b2bc1443995fd567e> Content-Disposition: inline; filename="3fc2cd1dcc88e73b2bc1443995fd567e" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 47UtOnurhZI2jKGEIN6Mec+w6ciuauLefSL2S0uCrZGTt6c9OozXYX7XkUrR2rhYzEDgk/Kc1zV5 DNdyvLcuHkRcBgMZx2rPDudlbY83B068IpSty2+fkZ88fmMFj+c/7PSpvsczxMvktyD3H+Ndb4Es Yn1i4NxDHL5Vs8iq6BhkKT0NdTpb6zqVs01ppeneSrFNxhjHI+v1FaSbuc2LzKVKo4RV7HlgsLhQ jGBjtxnkVWkvUi3gkq2DgEd69ssbi+TxD/Zmo2NlHuQkhYE6bSRyBXj+pW8bXd2oUAeawHHShO5p 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="9e8e26d82262938c4bb955cf582617c0" Content-Transfer-Encoding: base64 Content-ID: <9e8e26d82262938c4bb955cf582617c0> Content-Disposition: inline; filename="9e8e26d82262938c4bb955cf582617c0" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9CWe3kQI0e3H3fT9KgJJPCgD0Ga5xWvNOk2bsqegPKn6Vp2+qowAddh9DyPzr3KWChQu6d7PzbPn 51HPc1rQB9RhyvzbGG7HPbvVHxFHottI02p3MFmzcCV5Qhb8zg1esJY5NRtSjZ3Fhj/gJP8ASvKd egm8U+OdUXU5BHb2k7wRkD5VRWIH4nHJrz6svZV3Jf5HZRh7Smo3Opt5rWdS+nahDeRD+KNw/wDK rKTgHEikGsJPDul6HZGeC4VPLOcltqt/KtE3hO1nQKsih0I5BB9DXp4DGfWU4vdEYvCuhaV9GasK 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 GBivZRZ5WI+NinYzFmBJJyeBRRRXp3OY/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="ce899728876f66f829f418ced6aae515" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="ce899728876f66f829f418ced6aae515" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgASQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8czSg02lzXvnmj6KaKWmIXvRRUot5mjEgicoSQGC8ZHX+dJuwiFjxVmw0+fVr+KztlBlkYKuSACf qamudDvbcWzToI0m5BJ+6MA5Ppwwrs/A9pbaZNJex3KXNw26MKq8KPXBHXgHmvPxuLdOjKVLWVtD twuGdSolPRGRqPhUeG7M/wBphvt8quIoVIKgcAMSPqfyrm9rByZASQec9zXp2paFYXdy9xKbwTyH czTYIYk5zWdcaNp9mplCb2znJ5A/CubA4ifJeq7yf9WRvjaEbqMEkkcVFaTzcpEQmeWI4FW2tLeJ fnYlv0rTvZGDbQNielYN1KZN2WHJ9a9SMnI8yUVHQGNmGI5NFUO/SirJsR806mbqcGpmg4UtApsm cYobsiR4Iz1rtfDtl/avhW6tpPL3x3MTQCUnD7mAYDHPHXI9T71w0EElxMscSlnY4AFd34Jsmee5 t/toaZELRwKudx7lc4ycc4xXm46s1TtHe6/rQ7MLSTneWxra/Yedp13F8jRQwKyRqTu4/iPf7o6d OPy5fRJ7uwkgdI5PLQ+bIjHqOgYZz/Kun3TxX6Qyhp52cjavzbxn26//AK/wx1jn0fWbq1WICeMe X8zggD5cAkew6DnmvIp1XGk0d86V6iaO9S9s9VD2+yO3uQgfHYnvyffH51yWopcrJKs09tuh5Kbs sP8AP1potZUnWUrGJ41BMROVVT6pyQPzwD3rm/EuoRyywSW0MilVIaVj989enoOg9qvB1XOailp3 DEQ5YttlW/na4mZyxP49KzWPzVGJy+exPWkz719FDY8WSuxxbmimZoqwsRinrUdPU0FM67wx4SbV wLi4kKQDnaOrf4V1U3gfSZYWEUTBuxBPXt3rC8IeJrWytGsrtliUfdc9D9a7H7VKtsk9sjSxSKPJ YH73XjJ4/wDr183mFfFQqtNtLyPTw1OjKGiuzlbHTX0ezaaJVAM7Rhkky5wOQV7rwO35Zre0Oytt Qniez2pfrmaQ9xjPCddpwufpiubvrdrO9+3pMZSzszQRxFdxXqCWGOvUelRnxVcXUyyq81tcllV5 FbgY6A/Q9PSuGdOVR8y187napRhC23kdNe+IrqaKJ7W1gguJBtu7mPBdyMA4PQAkjp1z2rlNb0y7 ivTe2rSMkrkPs5+YkZ29iCcc/nXXTXeleINCRZDHBewKIiFJ2TIDw4wOvABrn9c8RT6lf2NtDYxK YAiBYk2qyDBx0GfX0ojOfNyrfr6EtJq5FEksrtNdzPDEMYTJ3t0OCf1wPfipNW0OK/sYZvs5sbdW J85xkuD2x69x1/Sti3t0Fw8l7Z3FxIxxBbxyAKM9MnsP5/Wrt+NLzaTXEvn2tnIRJDJKoJYgZHyk kdOP6dKzjWkpqV7W7dP8y5U1azV7nkl7aC1uCqxTRxsAU84YYj1/nVU1v+JdUi1C8YW6lLSJisCN 94Lx1PUngVgGvrsM5OknPc8Co4ub5dgzRSUVsTYYDTgaZTxQmUyeBC59q6jQhNeMtrJfSxwW5Mqx JklieOO35+tcmrEcA1JDcTQSrLFK6SKchlOCPxrmxVF1qbgnZhSk4VFN7HrtvHNeW8lr5kcWqRx7 4jJJzKoB27h/f9DjnHqKwdY8PuiT39vPM9sCEaRlMRkbsdhOf/rDNcbYapc2uppeiVnlz8xck7vr XoOoa8NV0e2ke2m+0TqP3zSNgAccAEfXB6k56cV4lXDTwzjd3ueh9ZhUjKT0t/VzN0uGzviINZ3W 6smWkSMsZccDb37HntW1FopvILK0WLYsEh2zqqlioxkHJPAP4f1x4IINLJ/tz7SI5BmEkZzkZz79 B/h3rFm8UasZHcXcscTIY0VDtGw44/QVn7CriJNQ2X3DpYqnh481ruWvmbWreJHsEktLPIOWDM5y Scdevv3/AEriGuXRdqt9ajmuGd2bcSWOSSark5r2cLgoUYWtq9zgrVp1p8z26AWLHrTc0Gmk13bE JDqKZuoouOwgNOBpope9AyQGlpgp3egkcDziu10fWYYdJjN4BiFSnl4/1uPu/iM4/KuLi/1grUm/ 5BMH/XST+S1xYyhGtFRkVTrSoyvEn17Wn1S7WVmOI12IuSQq89PzrFkmZ+M4HpSSdajrWhSjTgox JlJ1Jc8txc0maKQ10AITSE0ppp60ikJRRRQM/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="b31cde0b7101ea9d2291a23336a9b2b9" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="b31cde0b7101ea9d2291a23336a9b2b9" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgASABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A amsO+oxPp1lBaom7EU8skSnjqxZVX0OM5OKnuvGHhObxPE9/pc32xUW3e7W4LxoT1I5wwBJ5xXlO 7HGKhc/P9aFBXBs94vre2aJ5rOeBVVTIkLhQHz90ByeMdTwags9fu59CeRtFie6SQRxNCwYPgHJb Lcdj269K8Ys43n3RxW/myHhdqFm/LFd14am1jTdPezg0WdldTjdA2A/AznjHTPWs3Cw+bS1izaf2 l/alu0miRLGJS7u06gqT1I3Z4HX+WK6qdIHYFFUgHII6da5V5rrbaPHo11I0+TCTIcOV64JOOMHv 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="a30cb6994f99837d7ddc4d59fef12c60" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="a30cb6994f99837d7ddc4d59fef12c60" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 83hFX4aowjpWhEp4qALsNX4apQoeK0IYWOOKALcRq3Gagit2I6Grkdq/figCRMd6kDDtSi22Luch VHUk4FPWKNhxIh+jCmBExqB8VoG0YjpUL2b46UAZktUZulasto47VQnt2HY0gMth81FSPGQ3SigD my8NttEhJZvuqoyTWvZQtKATC6f72KzLGANrFxJJ1UhUz2FbqGdb3y3eOBQcICMlx2I55oAsyWU6 wIbdlR2kVdzrkDNW49LlgaNrzWihZgFSONRkn862lthNo/mAZZdrcD0I/wAK1bDRYL3N0YkeZOFJ XJ4pgVZNFjurFoZtzIcbip2k/lVAeG9Gjco1ncOR15cj+ddhaPFJI2mnP2sxGYR452AgZ/M/oafJ o13zI9wYIzgclQB+JoAqTaFbyWCwSwrJDgDYwyOOlZg8NaSX2nRe+MiMY/nXdmKAW0cDXMPn4GQ0 gBJrjLnxVodlr1xpd3qdxazwybGZlzHn2Iz+tNga02liK3CJ8nG0EDpWJdeC4JEMyTXSTdRKs7Fs /icV1mu63o9j4Yn1r7bBNbQoWUxSA+Yeyj3JrO0Ce513R4p7aXzbGZfkPllZF/2Sc449adna4X6G C2l3jaSElm8u5BKGYIOcHrg+ornX03VnUtb6nBcqCQd0A6j/AHTXqV9pwtNPiiLM5B6sck/jXBz2 2nGN3utPuLOUk5ZYiV+uQf6VLAy7PTrqS2DXaKJSTnapAxnjg0V2tpYQtZQGEs0fljazKQSMdwaK dgPKYLBbl9ysEkIxu7H61rad4bQ3q3Fw6MR3Ukn8M9KqWTAMK6OzcDFIDe0+3it4hFGCU5+8c9a3 rNI41CxKqgdQoxXGC1t7e+fUrrVLpIduDFJcbYVBGOnH86rWWNMuPM8HadZXiyDFxO17u2nP3cE8 etDdh2ON1i78RaJ4+udRi1H/AEwOU3uwOY8/d24xtql4j1vxL4kxHq2rgWqHKwrhFz6kDGT7mvar jRNCvbd5tVs7cPKA87luA2OcMen6VxzeBYk8SiODRrVtF3B/tb3BY7Op+XOc9e2K66Ki9W7NehjN NbGj8PfCHh/xF4Xgu7m5mkv0dopWjl4JByOP90iqfj/4exWckuqxutrZxbFeWRshssFBPfdk81g+ JPiTZwwHQfDGlRpaJJuLMpBZh3wMY/H9K9T8LnUNV8ExxeK0guHu13GDywoWPjaD78Zz7+1ZOKU7 y2/Eu91Zbnlln4PddR/sqSMXEd7Hut541JDEDOfbrXrfhdrTwfoVto+p31vDOiByhyNpPJG7oefS vPvG3xIfS74+HvD8Rs0ssKZ4TgNxgqBjoD79RWhonj621/w3JYXkkUer20LOlxqSCWNwOS2Vx2zx wfrzWlWenIlZf1qTFa3udtf+OvDVuSkl+sp9I42f+QxSf2hoOpiMQz2rvKu5Iw4VyP8Ad4P6Vyfh ptF1Oxle8bSrq7jbMjWokRVXtkOc9jz0rGm8caZZeIY7M6Pp48uXy47iKRWKAnruxx+dcrZqekNs BwqgAcADtRWU9+N3BoqhHkVtcYIratb7AHNclDNjHNaENzjvSA6qcWmp232e9iEkWQ2MkcjvkVo6 THZaXCYrKFYkY5bBJJ+pPNclFeY71eiv8fxUWW4G34gl1u9ghi0e6s4VyTKLiMPnpjGQR69q2tNv Z7ewgiuXiedEAdok2KT7DtXKpqOepqZdR9GpoDNfVbU+IJYf+EJTLXGDIqkM/P3+Fxjv1x710+oW WpXerfbIfEF1BFkHyVzhQOwGcfmKz11MAdaX+0/eplHm3GnbY0dW0HQdYmM97ZBpSMF42KFvrjrR Y6VomlwLFa6bbqqHIZ13t/30cmsttT96gfUz61bk3uKxoarouhakCZLXypCOXgOzP4dD+VYA8I6F C+5muZQP4WdQP0FSS6kT/FVKXUCe9SB0C38VvGkMQ2xxqFVc5wB0ork2vSW+9RRcZ//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="433c1d388a23e424f4f1ae9690af6b32" Content-Transfer-Encoding: base64 Content-ID: <433c1d388a23e424f4f1ae9690af6b32> Content-Disposition: inline; filename="433c1d388a23e424f4f1ae9690af6b32" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A p+JLu2toJbWTShZXcmGjdZM7VBOenHPSqnhe4MkdxD/ZbajKWDCQtgIAOnPFR68Y5L4tCJpIlXbu uSS2fx6VNpdrpcVos85voLlmA3RIQCpIzggcivfnGKwai07u383+d/xOOXuttGndDlP9FW1OOYgw OPxqqWwfarU/k4T7PJPJFjhp87z9c1XIBGa9nBaYeHp/W+plLVgvIq7YjfDdwf3otw+qnP8ALNUl 9OasWc32e7jlPRW+Yeo7/pW1RXi7CW5BilIqzc2rQ3skCgsQ2Fxzkdv0qJkKqD3pqSdmgsVmUDr1 rTs7bTJ7VTe3jwOCAoVMgrnntWcwLEnBrVsNMtr20DzahFbspChX6kE8nr2qa8koXba9P6YRWplz pBHfultIZIQxCORgsPWrC3M9uriGZ4w4w2xiM1BNDHDevHFKJY1YhXAxuHrT3+7VNKSV9fUEbemW VpfafG819FC6ZQq456k/1orns4orjng6spNxqtJ9LL/ItTjbVHMXPjjUtStLq1kt0NvPIrtk4Y7c Ac9uAK6rw3rF5daOttb39vFHEyr5Ui5ZRnr06Vn+MbKy0PwpYmCwVJYmEJkxhjwep75Oea5Lw7rc drrsEzwrJlgrwucBq+ThifaQUJRTV9FZfh0O+dFxdovU9Kumn1C7jzMk00nBZQFGfT8OlH9j3LA7 GgYKMsROnH600XyhbXUreNLTcW2Rr8wUg/8A16htr426zJFPhZk2ScZyK+qw03GhGMLKyWn/AA2n 3HDONptS3LP9j3YUNmDB6Hz05/Wp00G9Ztm2LeP4fNXP865bUfGC2sMdvDb3F1bwylfNVdsav1Kh u59q2NB8YjXNYaRLlbfUhH8qS4AkAHRT0Jx24rOWPjzOKmr69/kNU3a9jqGsryOwikt/JF2RskkE i5UDgYOeM/0qpd2FzcqheBFuj94rKgVx64z1rX/4RfVI7d7NL+HyJEWZ9wIw2cAVmTbDcRNba/pt 1d2kBZY45VLDYN233PaueOJpRd+dX17l8rfQzf7GvSGxGnHX96vH61Yg8O3dzAG8yFCpCkFwep68 V5fdeNNavLi5eO5a2WbJkjjUDOT3/Ot3wR8QdVQvpVxOjRhW8l5FBIz1H6Zpf2o5y5KbV779A9jZ XZuTW7W+oPbkqzI5TKngn61cfSrwg4iXj/pov+NUlKqpuPMUqrhTn1IP+FTx6nEkUsY2YlAVuO2c /wBK9WVV6crMUl1GNpV7n/VD/v4v+NFRmSxJyWINFP23n+H/AARcqI9Q8Q2klg93LbrNa5UAyLuG 7tx2NcNpmn3WteKpbq1sHvXZjIluPk4Hr2UD/CqX2y6W0t7a9uGlEILJFjhNxya9A+Fk/lvq140o jESxxlUHzgNu6egyB+VfBKPsFzx3PYc3WaizMh8TWdhL/Y+u6TLbOqSLGA53Qu2MEg449+a6K6h0 qDw1qzCykS7Fu7W5a5EmGCHHI29/Y1F8TNEs722tpproLcwOA90wwBGeoOTz69abo2n3OqaVYmKN pYp4FAlZSFbgA5NezltZ4qMo1JtW8zkxFP2TVlct6foP9o/DSw0NhFHOyrPA+MMSQWLdT1yfz7V5 XqWi6hoPia1sTIrTmRDDIpwCS3H05r1tpL3SrKCIxXMf2YCFFCgBQBwD36Gsj7C+oeJrDVrtIzHb pIzJIOGYfcz6AEkn6V41OM6eI9k31/pnbNRlS50YPinUdbsUigubuQ+cDyk+7K55BwfU1iJb3t1d WLSRgxTMCCMZx7+nHNerX6prES3V3pRuUhUgMYVVSP8AZHB/MVhvqaSX0UdvZNBFklCIiFOODzjH bFbYnEzxFa1ON3toRRpRUbydhsnh3Spre4drJIGmjYpcCfdkE/wjp1Fc9ZeFoNI1TS8u0m6YefM5 2pjHC59STx9DXSXJlnEgjk8syDDYJC/lXP8AjOOXTrXRtKeTfJ5H2ydgeGd+F/IDj61VXA4jCVVz 7dBOtSqQfLuej21hotnqk1pqllIluEDCNn534OD19DVTUdO0ERW/2a0cOLZg+JcZl3LtPJ5GN1ZH hDVotO8Kya5rMzzBZDFEzNucKAAAPxz+FWz4ztpdNsJtVt3t475zsdwGUDPGTnj1zgV1LFqDj70v PXqc0aOlhl3pWiyz7reS6hTAGwyIeccnqaKruybyY+UPKkjnHaivooYRyimqjsczmk7WPJxMAzzS Z3ufl+g/ya0NJ1650HVIZrdo/JnRVmEse9SM9dvqKwXY7s+nSi8JEmwH5VAIH4CvkJLmVmdsXZ3R 3etvN4guYNMbWILuS7lQIIR8qgnJOPYZr0TStMh0bSV020lma2Qg7ZZC2CPT05yeO9eU/DGFJvGJ dxkwW7unsflXP5E16/Cd0Zz/AH2/9CNRCPs1ZFTnzu7NvT9NTVNImjPBSRi8rtwOFIH86x9d0+G0 gs0iVlLlnd24yBwuPQcmur8HKHtrtGAK+aDg/wC7/wDWrI8YMf7XiXskOQPxNT7ON+axXO+Sxhm9 uY7FwjIX2kAHpVbw1qFvdaZcW2or/p5fbEGG5drKBx6dM/XNQq7PYWzMcmSIux9Tx/iaq2ahNWt2 A5Pl5z/vGt8HCCxMVtft/X3kSbdN+RXVSSQQD25OB+defa/cGbVpY2kkMduFt4hIMMiLwFP06V6f PBGt68WMp5oyD3GRkfTtXjtwWuNRdZXZjJcHc5OWPzkZz617Wc1OaUF5XOWgrXOq8PNaazc6LpGo uTbRTSl4i5VZeNye3Uke/FdL4vstK/sK4hkMn+jQl4z5hHzfwgjGBjgYFeWzOVn8lTgKchh14Na3 iKS5l0a1ea8uptoGFklLDoexr5uqm5rU9Km0oPQ7/T45ZdKsZZ/9ZJbxuccjlRRXBaF4m1Gz0xbd GR40YhBICdo64HPTJP50V9fh8xiqUU09jzZUG23c/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="ce570020e1ef14d574ba13203fb5f8ec" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="ce570020e1ef14d574ba13203fb5f8ec" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAOQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 6O1t1totgJPOSTU2SFOOtANJ61tJWRyRepSsrq5n0iKaSKQyFCryIAw3jIJ28HGR2zU9hDAllELZ vkAIBznJBwSfc9SPepfD7Ys57c9YbmVT+Lbx+jCk1WEWgF9b/LKZER17S7mCgH354Pb6cVHLdXL5 rOxKQR14pcdwakGGHT86rR3MUjsobYyymLa/GWAzx+HP0rNxNFI4/wCII/c2DY5EjD9B/hVzxQN+ gSsO9rA35P8A/ZVF8QlzpVo+ORcY/wDHT/hUd/fR6h4bljUMHisVVwR6OlbQ0gZyXvJm7oSRpFps ioFMtlliO5Gz/Gt7Heue0A7tL0V/+nd0/Vf8K6BW4qKq94dL4TltWt0m8bWiMD+9s3XIOORuNVvB EvySQbDxds27HHKHj9Kua5PHZ+LNGupDiMCRWPoMY/rVLwb8t3fKDwlyjD8Q4/rVrWmJ6T+46u50 Wxu5jLPbxu+MZIorRzRXLynRznK+dNDFc+ZcEvGi4PAwSxHccZ4zngVetpGEYSZ0MwHO3jP4VzJ8 R6dIZP8ASDiRArB4sjAOfWtTTdU0+5h8sXKSNkk7+CT9O1b3fU51GxasftZ1W+FttSHzE80k8ghe oHvlBn/Zb2outRe6tI4pYmWUXK4I5VvLm+bHvtXdj0z1wapJGJ76Se2mG2VhEB522TdHvyV9s4B6 8Z4q/wCWTboqCRH+1CcMVzgFssAV3DoT1x9KSbG1qaSyLuCbhuIyFzziqsVvHNrhjk5R0WXGejoS B+YY/wDfFQWiol35hj2zuGJDzbiAxB4AHqnf3qV7WVL9LyJwzK4co3GflK4B7D5ieh60XuOxAyJJ ai0uII57fe6kSDOAs/lj8drDH0qK+02O9sZYbRBHMbaWBY26ttYKMn2K/rVtnC6XdiZHjnDs6r2O 58gA9DzTbqV4pdsYAdpbi3+XPLOFK/qRVXJM7Qre/s7PTLa8iEYR5FGTyDhjg/lnNdKDjk1WnuF8 qGSGHeq20cxQDJwxxkfQZqSOeGR2RHBKkDB465P9D+VTO7dyoNJGB4lAGsaFIRx9p2n8StUNGjki 8V6nBEwRElUumOoDgD6daveMT5UemzngR3a/l1/pVTTJo38carJEwaOSFpFI74ZW/pWkPhsRP4rn dZxRTc47UVgbnggf3p4bnOapLLUgkqhGtDqt3CFAmYhWDqCehHfPWugs/GU6yP57uAw+XJLBG9Ry OP8AZ6fSuNElOD0WDc9PtNdtdRubZzIiXEkZi4bCqeDjueSvB/DHNbalx0Ice/BrxlJCjhlYqwOQ QcEGtay8SanZYCXBdB/DJ8wpit2PUt6EbXGM8YbvVW5srdIfMDNCsR8wbeQpHOQvrx2rmrLx1EwC 3luyHuyHI/KthtQs9VsZIrC7j8xxjbux+lArFy3EttLBIyh4RbLAWQZJjCtg468tjpVhQjRRshUy eRbZ2n+MMVIyOhIYj86wJhc2xncBkMoB+UldpLknnOOhwOnBq39tcjztqvsjVyAdrqSzcA+xCihM mxcljK25gn8u+hSR8yOvJwm8fqG59qpyaFG+ryahaXLQzFXjeHaMZ6ED2z9etW3vDdK4WbdI7fxj a2dhUYI4/ip906hFfDK5+0krjByzDb9fvD8qpMVjWDcUVBLKqysMgYPTNFZM1T0PnZbhGPDj86mW QVhd6uWnWtLAaok96kWWqo7U8UWAtLJUgeqq9alXrRYCyrA1IrYOQSD2IquvSpVpAa9n4g1KzwI7 pmQfwyfMP1rZh8WRTAC9tCDgDfA2O+en15rkh0FSCgLHfWOo6dNPG8F8oO7OyYbT/h6/pXR+YJE6 LIp/u15AK7Twn/qz9KCWjR1W4mjvMI4UFQcFaKj1v/j8T/rmP5mitOVGbm0f/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="bd6b4733f917f638a14b32de8933cf9f" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="bd6b4733f917f638a14b32de8933cf9f" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A ytLk8KNYWct5c/6WFDyFCu7eWyTnsSAOfWrd/aeEzFJNcSSPduh2NPEuXYKOST23Z/AivNbHTbK5 8S2kdksscap9odZJA2MJv4OBx04NW73xXq+uNbaRc2VhJIGMUbvDtYFuDzkY+tdn1lX2MPq77ly7 l0qG2t9MaF4L6O4BOoBBtClmIwCfr2/hxWTHA1/aao26afyE2xyYwT+8HULkMTu75prQ28MDQtEv y3RVrgbQ3GOxPTlvXkDmtPUU020Syi07U50iAia7Cs20ljkHaDgkDI/GuN9zqSLEDXlnJZ3raatw 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 8zL2r/lP/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="22f833403c75d1a47d09ec0359aba4bf" Content-Transfer-Encoding: base64 Content-ID: <22f833403c75d1a47d09ec0359aba4bf> Content-Disposition: inline; filename="22f833403c75d1a47d09ec0359aba4bf" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9UeywNrbST1Wqx0m38wPtBI6ZJP86gbWy3G3BqtNqUiqZGfCqCSfQVldnRoXn0q38lkWKIOe7D19 65+602a2xuUcnHBq9qeqNpFhHqGqM9vau6osjqRy3TjrTZLhdQs0kglE0bcq6EFWHsRWkJtMznFN GR5DDkip7axmuMmNOAeTWlFaLFbtLJF5jkhVUnAySAM/nV/xPBdaBp0E2l2b308lwsf2WNTllwS2 Md8DrVyrdiI0u5HploLU5f5iDzjp9K290Nyvluo2elV7azuLyyjnS1lty65MUyhWU+hqCSy1BXEa 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 EI5ooJ5ooA//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="7a9d62c315a87f2b553257b17cec8c7f" Content-Transfer-Encoding: base64 Content-ID: <7a9d62c315a87f2b553257b17cec8c7f> Content-Disposition: inline; filename="7a9d62c315a87f2b553257b17cec8c7f" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A x5LKTPANXbPT5WZflrVlRF5YgD3qeDVNPt8B5kH419C5WieYrsq6naXNppMs8aD92hYknAHuT6d6 8aEN1qOp+VFGZZGbd0ySc9a+hJWsda0yW0EqlJk28GvNvB1uNOvryxnCm5glKOR7Ht7V5GOk7Jnd g4pvlLel/DOSS1Rri5xIeWUDgZ7V01t8NbGO1kXLSSMPvE10mnPvhCqvTnNacPmK/H3e9eRzN7np 2S2PJtc+HM9payzxICgUk84OfWuEaymsp2EivG2ckMMZFfTk290wwBFeI+PrURa8YY7cR/KNoC4D ehzVwk72MppWuRWpMthG7HLEdaryx4JrRs7Q29jFG3VVGfrUE6YzXacpRt0JuhXWWNu7qBiuYi+W 5FdhpknyCvUwPwM5MToy/HZNsHFFXo5Rs60Vsc55hr+vS3Ny0MLlY14OO9Yfmsx+Zifqan1iAwal IMYDHNUxXl1pSc2mehBJR0NKy1a60+ZXglYDPTPFdHYSm58QT6pGqj7RCjN6Bhwf5A/jXGnqtdx4 SMbrBvAK4dH+uQR+maxxEn7KxtRiue5r2niyZJWSBre4CYDCLdnnoORjP410MmoXpsYruDKrLGH6 ZI/CoJ7KMwq0CAKOSQoFdNBZWsOn2oaCN1ij2YAHyjHavNaud17HP6Lql/ffvBb3p2uVLTAJ+IHp R4n0S21bUNKa8BjRWYO4bbkdcZ644x+NdPBHHDEHgO+I9ATnFQXUUV9LEso5ViRk+oI/kTT22Iep wOt2Qsr14woUEZCjoO3GfpXOXI5NdH4lukk1eWJCSsH7oEnJOOv61zVwc5rvhflVzknbmdikOJ1r p9Pkwg5rlnOJFNa9nK20V62XvRo4sSr2Ns34U4JorFkDs5OKK62tTnSMHxEAzxSDuOtYgPSt6/UX emq68lawQAO9eRiPj5l1O+CtGw884rsPC8c4spnRRtDBxkdcf/rrlIUR3UE45r0Gx1DTdK0gGW5i j4zgsNx+g6mrp0o1ItS2FKpKDvE2m1CKWyUSOFjK5bLYFV9NvrHdF514bpIzmMbGcoenYenesa2e 4m0q2v5IFWyu2doiRkR4YgA+h4zWnZafaF0aaRic4yCcV4s48knE9anJTjc6+x1OBpvLgZvm+8m0 j8RmsfxdfS2+lgRsys8qruU4I6n+lSm3S3MW2UynPyYPIqDxhZvJ4X+1A/8AHvMjPx13ZX+ZFOir 1EmZVdIuxxCSFjyck96ZMRiqaTndxT3cstd0mcZC+DIv1rc0+LdiufY/vF+tdBp0mAK9LLupy4nZ Gn9mX0opjXOGxmiu1y1OZJnmialMsRjB+Uiol3E5PeqqcjINWEcL7mvKjTuveZ6JJMdkRwSG9azw CTnqT1NWbiUNGc1XjYHkdKuyWiA93+F01vq/gb+zrhFk+zyPE6N3BO4f+hfpU+peCbi0kabTZXeM 8mInkfT1rjfg9qHk6/dWLEhbiIMMdmU8fzr1Hxp4tTwl4ba7EfmXcriG3BGRvI6n2ABPv0rirUlK VjWnNp6GNoOnzmUh0YvnGCOfpXU+I9IB8C6rbsoaVrdpOOzKNy/kRXiUfjHX7iLzl1a6WcNuV1bH zE9x0I9jxXuenX0+r+E5vtZBuRG0MrKMBjjrjtkGojh/YtNu5rXvZHgcKLNHu284zkUFRjFRQP8A Z7qWE9EkZPyJFE8q+awXt14r1nShUV2jju0RSjaw+taVpchAKyHuOx6U+2uV89I2/iOBV4an7KW5 nWXMjalu8vxRTlgjK5LD8qK6WtTmuf/Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="5a6a6c83fa2d242f5935f75ef82213df" Content-Transfer-Encoding: base64 Content-ID: <5a6a6c83fa2d242f5935f75ef82213df> Content-Disposition: inline; filename="5a6a6c83fa2d242f5935f75ef82213df" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 963UVTSQg7s8VZVwwyKyuMfmim5pCaLgOzShqiLYFJ5iryTgepouFgury3sovNuZljQnALHqfQVS s/EGnXabvOEJ/uykKa5nxtcJLJaCO7gKruynmDOeOTWNCZHiyI3Yj+JVJUfj0qlaxLbO/v8AWNNj tJPMuYnBU/KrBifyrgrOKTVJisaZx1Y9F+tVZR5kgSXdt6koetST6zJDbi0tIjFEONkKlmP1PU/W le2w7XN9ZLPTlCIwkmAxlRzWY+prdTSqZyH3cxhuV4B5H0IrnNU1/UIdKMFnYmBihBmlI3Fjxwo7 /WsHw3q1zKbi3uiTOG37m6nt/h+dCve43ax3m/H8f60Vk+ZIevWirJsd9H4g00XElqZm8yJhG/7t toYkADOMdSP19Kfc+KLDTjLG8hklVC2xQexxjPQc14bZ3s94EknklhifB80ru6qexOM9f1qK/wDE Fs95JC43A3ByZG+bqDk9fU1HKt0VZ7HucHjG0la5ZoykMWAjbuX/AAOMViaj48jjmK/bkiA5EdvH 5r/icEfoK8stNTuLvWprMymBGmMS7j8kgBPX8jj61T1G9lt5JoXkDSROQdp4xRYR6lb+KF1yOSKa a6tbdACZZX8tn5/h/Lk0sdx4ZgHzJDMwOd07GU/+PZrx63vp5CR696vbmSEsWLE9s0JNiuesnxbo douyOSKL2RQtZ8nim11R2jtWZ1XrgYA+teTRQ/2lfeS97BZ56POWCk+nAP613WjaY1rp8VvG0bgD LSIQVYnvnuKTVikbLTmRxHHjcSBk8AVptJDaWYCuH4OTnj6+/NQQxWum6bJd3oWNcfL5x2F8c4Gf U1zEuqPqM7XErbQ33Y1YkKP8aUVdjbsXbvbcPuYZHbj9axblRBdx3EQAZG+Y+o71pRLdXZEdrFJK 3Xai5OPf0obQNVlWVhaPtUZYhlOPrzWjshRjKWyLEUzbB3opbbT9Vit0SXT7nI4BWMsCPqOKKQcr 7HluoStHpzxxgb3ZcFM5Yfe/qKox6VqN3mVbOZt3OdmM/wCNdbLHb2jzW9/CUuC25VYFRGMjkjv0 x1Permoa7qFlZwXWmw2GyXO5QDI5CjHzZPGcdKjn10L+LTqYY0rV1kjmt43jdSTucr3GOhNaq6Gr Qfa7u+iRpOJIpiQxP94E9Qeua3N/9o6VDJD5FjdSRq7LAgRhkAkHvXMXMESLDeo7PHvJnLfMGOcY 56jn+VLnb0GoX1uaUUGkqPKto7y9mxnFvF8oHqSeAPzqC+sri3iwTDbsTgtM4IU+meh/ClbU7tLA y6UNPKhc7FLLN7gZ+6PTmqeieHrjxYl5dXktywAxHM0pJDD+H5uvBpvmtdk2iitbiWCCOeMPclXy 5fbtbHYDtXpuja9o0jgzXMMMaAHEzhN30HX88V5zrvhrWdGt4Y7TzZoJMKg3BsE5JHsajkubXSoo Ibm0ae6WIPONwCxemcA+ufxxRqDSNzxnNHq/iOW4tr5ru3wpQLnahwAQue3GfxplmpSGINhWborH GazPB80Wqa0LZg00YVndim0AdsY6c460/VhHf6sjTo1m1v8Au4gkvmRuQ33i3GBVJ2VhJLmuzu9E hmnuI7VGKqxy+OgHqa9Dt5hA4to4wIFj6Y4J968ZE+uaTqsi6bdx3EDQefNLCQeQuWC5HTjgd6u2 3xBuZY2hW/eKToGdAX+uCuCK1w2Gc21fXzOjH5hGUYqMLRXRfmbd/ez2WoXFujkKkhAwe2eP0orA fxBaTuZtQuY2uH5YqAo446Z9qK8+UGm9T6OlmOGdOLlF3su3+Zynie2itpY/ITyw8R3AHr+f1rr/ AIbaNY6g9vPdQiTy1YhD93PHOPXmiiuin8UT5aWikJ4z0u2tPGjx2ymJbiFZWCnoxJBxnp0zVWHU bqy+1JbybFtosxDaDtx25+lFFVU0kFPWOp5/bSuNUeEMQqFyuOOmTj6Z7V2uj3UtnYaXBAdsUkPm OvqTz/WiiqlsStx15qF1eyOkkpVY2G0JxjOaytRtYbrVtLR1wJ28qXZxvXg8/maKKhbm017ozVbC HwtGkmmF0e5R0dnbJAGOnp1rlo7yeaFS7kks3P0GaKKqOxnPRmjZapewRvKlw4aIkrz0yBWppONQ 1iOGdVKySBWIUA8kZoooqbIqjuzUj8L6XJNdCWJ5DHcyxKWfnarFR0+lFFFVYI7H/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="bfc27d0bedd4e42342d4da6f508999b5" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="bfc27d0bedd4e42342d4da6f508999b5" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 22RY/mCKq49MGmSs3lkkgcYBB5p00rkfNHvXPOARTXhUFsqwz1/+tXPY2C13kxBHGS2DnPPQde1Z Op2NvdOGktwzOybm7nDdiOfat63jKIT5TMyqSo5znsK5LVPEcJ8QR6P9lkjZGRXdjtAOc9D25Heq juJ7Hn/iCxayvJk2sE3sUJPYEiuSlnaViM4TP3a9L8Y2nnWzzRvH+5BBAOd2WPTHHH1715nLBJAw Ei4z05zVxs2xSukiOkNWWtXWzFzkbCcYqtVkMu6VM6anaLnKGZQVPQ5Ir362j8q4ZEiUoc7lyP7o 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 oAapnA/dkgezYooooEf/2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="fe4dddf4d913aecb33dc74c30a875a1b" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="fe4dddf4d913aecb33dc74c30a875a1b" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A xPC7f2zAmnzvH9pjcQM0pwGB+6xPuO/rmr+t+Gr/AEW5WNo0yzcoJQ38unUda5iOG4tbgXenODMo CNER8si4zgnsc9D713Fjrr+KbyOwvITDfl40dJVKyw5xk47g9fTJyMZxXqQnDExSl037+v8AmcU4 yoybjt+BzZeVdz7IwyHJXcOtNWO7efYluXZiANvOfTp9K6i/0O1neaZIZU3wvOsMePkBbbGDn1OM /UGrLahoum3CHSNFMrxFR51zn7wQjpnuWz26CuCrTdJ+9sdcKiqLQ5WWx1a12tNYSRLKAFLrtzn0 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 oooryXh6V/hRsmz/2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="2fa459fb1a298821bc5100b1cef68848" Content-Transfer-Encoding: base64 Content-ID: <2fa459fb1a298821bc5100b1cef68848> Content-Disposition: inline; filename="2fa459fb1a298821bc5100b1cef68848" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9RsbM6jPqU11q+oQ7L6WJEjuiihRjAA/Gry6DA4YrrmqkIcMRek4+tcb4gGbSYH/AKDFx/7LUJWC FfEEDTSW8AuAoWNN27DthcZH+RVQpJxuXWxM4VHFbL/I6680+ystOmvm1vV5IYsbvKvNx5IH9adY aZa6jaRXEOtawFlXcqveENj6VxMRaMa1EIvJQ2it5QbOPnjwfrz+tN0q6SKz1RpZhHc/YwkOWx8p IBx+BH5mr9irGKxlS538ehW8pYR65qjleoW+JxWdeR6fZXlravrOtSPcvsQxXe4A5A5P41y2mRyW 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="cd8133a30d82e4d699af99ae5b2461b5" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="cd8133a30d82e4d699af99ae5b2461b5" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 5OwsRPZwTRxyMACZ3DMqhy3GCDwAB/j0rR8Jw/6bPfpC6QsWt1hJLKzMuQARz/d7d+tcvo8czWmo SpK/kQhVddwVuScBc89j0rb0gx6XpE6m/Ek2zeIoG3smeMkg8Y9smrMWLc6VcyeIkkkmiRomYEB8 u2ORkZzzjrV5Bd219BdG5LWsOJ5WL8o44BUDBzlj161U8Nw+ZeTrY6hLI0sYKwrKQPMJwWwD7cE/ lWlod81vrN5p2q3bS3BXy4djbTnceA3G736Z/WgTK2taa+n6m2owRSzS3EYLOWU4Zl6vngZPY9RU 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="d17f4a8333fff0accc021276affaeda1" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="d17f4a8333fff0accc021276affaeda1" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8PopaKQCUUtFACUUtFACV12nDGnw9R8mT+QP9K5KrSaneRoEW4cKBgAelTJXHF2NyVwLgdQQRzWz pt0i3RYDcMYGO5IIH61xT6hcuctKSfUgU9NSu4yGSYgjByAKXKPmPYbe7+zWlxczoPNW6MW3dzud WX9AK87u9Elvrq5ubcgqZnAV+DgGso+ItUOVN0xBk8w5HV/X68muu0e5gezQRXCyOTufJ5yTk8UJ WC9zk5tKvoZNjWz59hkfpRXetuz8pGKKoVkeV0UEHsKMHuKYgoowe1GDnpQAUYp2AKXtQK4zrQRi lC0uMigLjcUrUopSM0AMp8UzwuHjbBH400jnikoGTG7nPWV/zoqCigCTn0o59DXsn/Co1P8Ay8fp SH4QjPE/6Vt7F9zPmPHMYPSivYW+D7npP+lRN8H7jPyzD8qXsZBzHkeKK9Vf4Q3w+7IpqrJ8JdUH I2mj2Mh8yPNOlFegy/CzWUHEQP0qlL8ONbj/AOXZj9KXsp9g5kcX+FGfauml8EaxF960k/KqUvhn UovvWsg/4DU8kuwXRjEUm0VoPpF2n3oXH4VC9lMhwUP5UrMdyqVFFTeQ4/hNFIZ9gKFp4K5rM+1F eN5p63RPG41rdiNNWTpgZp5Cn2+lZXntngEn605Jn6nj8aNQNUKPX8xShRjtWcJiTwT+dO8xs/dJ /GgZf2r3Ao2J3RfyrP8AOIOGjOPY0hnABIU5HuaLMNC+YIW6xKfqKifT7R/vW8Z/4DUMF00jYZcf jUj3OyTaFJ/GndoVkV5fD2lTZ32URz/s1nz+B9BnzuskH0Fb8bb13cj8aefqaOeXcOVHGP8ADHQH ct5RHtRXZfVz+VFLmkHKj//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="18d984a6b49a38f829fd827d0e8a20f1" Content-Transfer-Encoding: base64 Content-ID: <18d984a6b49a38f829fd827d0e8a20f1> Content-Disposition: inline; filename="18d984a6b49a38f829fd827d0e8a20f1" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9vgv7SKECXUoJW5Jcuo/z1q6jrIiuhDKwyCO4pn2WD/njHz/ALIqQKFGBwB0FAHF/EiVotMsyupS WJM5+dN3zfKePlrzf7XJ/wBDVc/nNXpfxEE50208iygu2845WZcgfKeRyK8726l/0L+nf9+x/wDF V6uEa9kv+B+p5OLT9q/+CQfa5f8Aoarn85qPtcv/AENVz+c1T7dR/wChf03/AL9j/wCKpdmo/wDQ A03/AL9//ZV03X9cv+Ry2f8AV/8AMr/a5f8Aoarn85qPtcv/AENVz+c1T7NR/wChf03/AL9//ZUb NR/6AGm/9+//ALKi6/rl/wAgs/6v/mQfa5f+hqufzmq3pkN7q2ow2Np4pnM8pIQM0wHAJ6/QVq+G NMn1LWY4b/w/ZC02sZGSPGDg453HGTXcWPh6zsLy3urbQ7WGZDy6ycpngkevBrnrYiNP3evyOmjh p1Pe6fMx/DGiahpN9Lc3viJLmKWFoo8TM4DkjBG7j/8AXXYxWt2kqO98zovVPLUbvxqx5EQBxEnX P3e9Sc15lSo5vmkepTpqmuWIUUc0VBZHDMs8QkQMFPTcpU/kakFIrBlDKQQeQRS0AcH8UDaDSbL7 WJyvnnb5RAOdp9a8w3aL/cv/APvtP8K9Z+Ic9zBpto1tfxWbGYgtISAw2njgGvPP7R1X/oZLX/vp v/iK9fBt+yX/AAf8jx8Yl7V/8D/Myd2i/wBy/wD++0/wo3aL/cv/APvtP8K1v7R1X/oZLX/vpv8A 4ij+0dV/6GS1/wC+m/8AiK6eZ/03/kctl/SX+Zk7tF/uX/8A32n+Fb3hzwzpHiKO7dJr6EWxQEYR i24kDHHtVf8AtHVf+hktf++m/wDiK9F8JW+q2mlynUL+B5ZmWSKTcD+7I47DuawxNWUIXTs/X/gH RhqUZzs1den/AAQ8L+FbPRJL2CG4u3M6oWLqFACk4wR9a6WCwjt5vNWSZmxjDOSKLT7SztJLPFJE 33Ag6fj3q3XkTnKb5pbnsQhGC5Y7BRRRUlBRRRQBnrFqMSBIhZqgAAXDACgDVscmzJA7BuTV9RhQ OuO5p1AHFfEaCWbTLNYtLbUCJiSirIdvynn5CDXnP2C8/wChPk/793P/AMVXoPxOSyfSrIXs88Ke edphhEhJ2nsWWvMfs+g/9BLUP/AJP/jtevg7+yX/AAf0PHxn8V/8D9S4bC8/6E6T/v3c/wDxVH2C 8/6E6X/v3c//ABVU/s+g/wDQS1D/AMAk/wDjtH2fQf8AoJah/wCASf8Ax2unXz/8m/zOX+un+RqW GlT3GpWsFx4SkjhkmRJH2XA2qWAJyWwMCvWvs4hiWKPSTIsSiJC0i8qvTr9BXkfh+DRV8R6YYb++ eUXUexXs1UE7hgE+YcflXrNxNZDfv1a6T52yFfoe46dBXm45vmS/z/U9PAJcrf8Al+hsRRpHGFRA g67R2J5NSUg6ClrhO8KKSloAKKMUUAAopFbcob1GadQBxXxGNwNMs/s5sg3nHP2sREY2np5nGfpX nW7Uv+emgf8AfNn/AIV3/wATpbSLSrI3lrJcIZztVJvLIO0852mvMvteif8AQIuv/A4f/G69bCK9 JaX+7/M8fGSSqvX8/wDIu7tS/wCemgf982f+FG7U/wDnpoP/AHzZ/wCFUvteif8AQIuv/A4f/G6T 7Zon/QIuv/A4f/G66uV/y/gv8zm5l/N+L/yOp8JJeTeKbFbj+xpIgzMRClrvyFJBGwbuCAeK9PH9 qbkz9jxkb8buntXmfgJdIm1We/isrmCSyiLjNyJA27KkY2jsfWu+tH0qe5igitZFdCGQk8DgMO9e VjH+8ta1j1cEv3d+5vUUUCuQ7ApKdSUAFFFFAH//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="d6ab89df8475001a1e4f1f3e97ab24a7" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="d6ab89df8475001a1e4f1f3e97ab24a7" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A xpLh4cL55DHuzcD8M8k9h3rd0u1LKRLPM7eplI/QHFYUcBuPEccbltoy+057cD+Wf/11ej8Q2U2s T6OiFnjIErScJ99Rgc89f0rGTb2OOMH0OhlVrCMTLdsi5AKzSFkJPTJJJX69Par0cxuLYSRuwzwQ W5UjqDzWVofiDTfGFne20CSxvEmJVfoM5wVOfUdeKseDVknsnRtxARSCc88uO/oFUf8AAazei1Nu UrXX2kscSMB67v8A69UXEo6yN/31/wDXrt5tO6nB/WsuewjLHIIP40KRjKmzyi+T+1PF9rpU2o/Z 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 7B/qdh/+fj/A/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="e1f5b6459eb4de18a3dd834d99b35420" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="e1f5b6459eb4de18a3dd834d99b35420" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9KpRSUo6VpcyFpwporFvtftIrxrMylUC/PKoJG7+7wKTdtSkrlq/1BFjeOJ+cYJU8j6VatbneqI7 bmI4b19q5Vr/AE0TyFp9sQHGFY/j0q9Z6xHdb44oGVYmBVpB1H07dKwc5XuaqK2Ompaq2dy064kG 1u3uKtVtGSkrmbjZ2YUtHelqhWCigCq2nXDXml2l06hWnhSQgdASAf60hWLFFLRTCxW70hYKrMxw AMk+1Zd1rlnlfsmp6S5yd3m3irj6YzXIeIPGcrWzwwzae0JLK/kTFmYbT7DAzUuSRSVzptS1qO4j 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 z/vx/wA6kvf+QiPqKKKqIM017/WiiitTI//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="6392e4e96016269fad6ec5fedc4298e8" Content-Transfer-Encoding: base64 Content-ID: <6392e4e96016269fad6ec5fedc4298e8> Content-Disposition: inline; filename="6392e4e96016269fad6ec5fedc4298e8" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQABk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 6LxJ8T9c0jxHf6fbwWLQ28pRC8bFiPfDCr/gj4hax4j8SR6feQ2awtG7kxRsGyB7sa4/xh4c1u68 X6pPb6RfSwvOSjpbsVYeoIFanw10HV9P8YxT3ml3lvCIZAZJYWVckepFe3Olh1h7pK9jx4Va/t7N u1zq/iD411Pwre2UNhFaus8bM3nIzEEHHGCK43/hcHiL/n303/v0/wD8XW58WdH1LU9S057DT7q6 VInDGGJnCnI64FcBb+FtdS6iebRL8RK4Ll7ZsBc8546U8LSw7opzSuGJq11Vai3Y6P8A4XB4i/59 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="4d5bb63874b187760de82f1fcadf0169" Content-Transfer-Encoding: base64 Content-ID: <4d5bb63874b187760de82f1fcadf0169> Content-Disposition: inline; filename="4d5bb63874b187760de82f1fcadf0169" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9a3Uu6ot1G/FQalbVtUh0nTpryY5VBwvdj2FeIeJdevdWuZHnkJAGdgPyrnoBXbfEPUD+5tt2FGX PPpxXmMl1Gsr7wWV+cjtiuepK7sdtCKjHm6ghuntggGQOQPSr1pJJbxhg7I6/MpB5X8fatrwzph1 KyuZlQKA+xQeT0JP67ar3Ph2+ltGuAuCobenTGOQB61m4m6memeCPEza5pEi3TL9ptCFlYn7y44b 9D+VbJ1/SgGJ1C3AXGSXAAz0rwvwkupXd3f2EM7x2UmFuShClwM/Lnt1Nd/F4V0WbTWX+z40TkMS Pm47k5/rWnteVJM5JUeeTcdjsoNesbu68i1mWcgkMyHIH+NaO6vmrXornwvqfm6bdXEduSQuHPH4 9wRXq3w+8arrtklpdzJ9sRcZJ5fH9a2i01dHM04uzO9JphNBphJp3AUn6UVHn3opgG+kL1zR8RNE pMiK2Ov8Nc9bfEVjculxbq6CTYPJB3D8M81nCopbGjpyMj4iXJ/tUrn/AJZj+ZrH8HwJf38kUqr8 y4UsuR+VP8Y3qajrM00JJjwo5+n+NYmnanJpOrQySSMtsTzj+DPf8wKx3kzqvywVz2S20s6aY3+0 h3XB2qABj8qkuLTSba4Z50BkHKs2CFJ/lWEkslyI3WWKW3lAO58kg/gai1SRdLtJbmSUeVGjMRgg E44yTzSZSaJNN0rSbOwZDEZJHdpQAe5JOSf0qeNy0MFkqT2oO4mRiGX25pLVIdSgt0jkRSoBDYDc nvg8Gkl0y6tLgJLdI+GGJBEsbY7qwQAH64yPWsb33ZtZdEcl8R7W5ttJAuvKdlkBR0XBx7j864jw 7q02l6lHNE5VQwLDHUV1fxKvmKQ2QmMmDknPPtXnkR2HJ6120fgPMxLXtND6e07xE17p8Mqou8op Yk55xUdzqdxICvmFf904rzPwFrxIFi75GPlz2ruLl2YYBXOep5rmqSkpWbNoKLVze0m4d7L533EM RkmiqekMy2RBxnec80V0w+FHPP4mcbqlwoh2uSFz82OoHeuKS4VJ1RITzzw2OvXJFdDqF1JIJMJv AXHHTng49eM1iSPArypGmH+6OB09qyguWFzsjrIqXFwGknBPJGRVG5JnhXbyc4+ops6uJi5yo6c8 ZFT6Zp9/dHzLeFnRTwx4BqFormktbon0/wAS3/h21AgdZIwSDBMMhfpUHiLxzqniW2S3mEcFupGU j/iPbJrYn8Fz3xR7iUxYXDKvc/WmL4FigmRsu65+63StFUprU5pU6j0Wxf8ADXnCxgeOR1YIBwa0 r3UL2IGRpmYr0BNXrO1jtlRFXaAO1UdVA8iWTGeMKPU1zN3dzpSaVjzvWNQbUIoppZInlLsfkPzY PGG9MYGPXNZKE7jxSlG8w4U5HX3oVWLgYwTxyK9GKSVkeZK8ndm54euPs+pxFScMwH0zXsO/y1QG UM3cdzXnPhPRsXizzoQYzwK9K2o0eWjUcVxVpJy0OunFqOpb0+6At2wR9/09hRWekqQblUgjOeea KcallYiUdTz+6v3Z2IUrHnAIPcDtSWu68u4Ed8c4DLkH9KmihRkCSAFQuAPf1osIsXMMm7aiSBQv vnvW7WljoTKqaDcT6k0MqssAc5Ynkjt+dd/pxhs4UgjiUIBgDFZfmkyFj1pEu2a78kHGBkmuGUrs 3S7nSyMvkkJjJohhhm+98r+h6VUglQryuQOprRVIZId6fKw9KlO47JFC5tfLchVzk8YqtJpyyHDD gDvV97h0IU4JJ44qRLbzY98rfgKd+wWOaOgaeZdqwJgnLHHU04aBpFqjbbaPceT8tbMkUCE4zmsi 8vo0Owg56ChTexLgtyTT1ijuDGiZI5XnAArXZyQQSM+ijNcwLkwzRyj+E5x610YnRkXbk7hkADFC 1ImrMruoB/eOwb/dFFRzAeZ88u1vRVyKKszP/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="46ef81296534739ee487045604adfa01" Content-Transfer-Encoding: base64 Content-ID: <46ef81296534739ee487045604adfa01> Content-Disposition: inline; filename="46ef81296534739ee487045604adfa01" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A kstPkUAzNjnsa1Y4B0Uc44A71AhDoD8wUjjIxmrtpbvLIFUkMRkZ7ivj3HmZ77m0MZdvysADUcqo wHU5q/PYCEoCzuzc4C9KZJF5SqQu3PJ3EYo9lYnnM6T91GxCjOO9YlwLx8vGwIB456/hXUEAShkK k56k5xUsbRb9zhGHfbH/APqrSEEmS5nJfZPLZWMu9iBlDxg1Snkl80oIirrz8vORXoAh018u9pk+ rKBUUkOmorMbaBUA5Zh0FdMbLVmTk2eYXEFy266ZljhUZZ3ONo9cVz02s2RkKMLjax+Z9w6f7uP6 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 wjayOGdWcr3ZZ067LQOf9s/yFFFFb2Rkmf/Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="48e855805254e6c408b3a0da85cba838" Content-Transfer-Encoding: base64 Content-ID: <48e855805254e6c408b3a0da85cba838> Content-Disposition: inline; filename="48e855805254e6c408b3a0da85cba838" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9qtJNpHNaXEi1jR/Lir8UhwCp4q5ISC4tn370b8MVWlilRiDzitNXDUpUHrU3GUbaM723feAq6TQ qKu49zyaikcKR6EUAPY1SE4eRucelJf30NhZT3U8ixxQxF2djgAdc/pXzHYfFXxOsU/2rURLGsDb S0ahg54XkAE8mmgOn+J/xRvn1p9G0G8ktre1fE1xC5V5JB1AI5AB/M+1W/B/xiiXT5LbxRLK80K7 orpU3GQD+FgO/oe/f1PhM0zO5bcSxOSc1PZX89lOlxGwDDg5GQw7gg8EHuKTKR7zD8edEYsJdNvo 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 KBj3ooqSoksEMkqbgy8HBzRRRTA//9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="9731a5a767e01d7adfe4ba3625d19d1b" Content-Transfer-Encoding: base64 Content-ID: <9731a5a767e01d7adfe4ba3625d19d1b> Content-Disposition: inline; filename="9731a5a767e01d7adfe4ba3625d19d1b" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgARQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A q6ZcLKwVuD612+ks0eM8ivLrG7aCVT275r0jw/exXSKFPPcVz4aqnp1Nq0ep3tjJuiFaIUMKyrBC oz2rUiZQcV1S3MFsV5rHfKkg4ZeQRS3lhHeW2x05yCDjoRWiFzUN1KLZDI2Nv8R9KV2FkcB8RkW0 0m3uzGWaKZZFI7HvUvgeS21OB79o1EzuzE9wDUfi7WrLUIpdGkU5njby5cZUNzx+YrltJ0nVrfRZ ILeX7NdyQSJuBPBK/KSR9etJydwS0PYozboWKOjMp+YKc4+tfO/jfVJ/HHxVMNqplsNKbyE/u5U/ O34tx9AKyrPw7408C6tHq76NdPwyBonDo5ZSBkqTnnBwfSuk+Hdg9tp1xcSJtO4htw5eTjJJ68dP qTWkIpsicnFGndbdKsyGwZ3yzYGOT/SuA1O6e4nOWJJPFdB4o1iC3kcSShn/ALo61xNhe/atZieb iBW3N7DtW06nQxjT6s7ixsZobKKOB41CqN2/ux5P88fhRWHqd87XhQPgRjZweCe5/Mmis3ibOyNF hrq7I4ZcHk1q2d/NaSCSGRkb2rFV1NWEb0JrwHdao9RSPTdD+ID26iO9j3j+8pxXXWnjLR7s/wDH z5LekgwPzrw+JmOB1qTUZ57KJlit2lO3ngkfpXXh6tWb5dzKrCmlc+ibTXtMuCI4tQtHkxnYkyk/ lmszxPr9hbaZMjzRyow2Sxq43BG4yBXzx4Uh1aXxVbTCwKrnBZEcbRXc+LvC81raf2jFveVMmQZJ yK7KjlFXOeNpbEljf2dreta/vb6z8zek4+Z4x7gda7spaNaQ3OmXUVy5UxRq7Yy2RwR1zivELTXV tm863Zo5CfmTsen/ANet638YolzDfC1VbmJwxZGIV8dyvr9KwVVrc0cV0PTdW1SLS0ZLy6Jh0+Jc liPnlYdOPQY/76rxrxD47muLlrTSFKRvkfIuCWJJP+RWhc60PEzTazqMvlxkARwg98Anj6k81wd9 KqTSvDH5QcnOTy31Pf8AlXUpdEzBxe7K91w5kupTJIeqq2fzP+H6VDaTSXF/AAMRJIrlFGBwc/5J qqzq7Eu2as6VKBfqoGFIb+VTexVrl6/mxdEbuw70VV1o7NQwP7o/maKixbZvBghw6ZqxD9mlOA7q asXWlXBBKBT9Kyv7NvEl5V1HqFzXDGEZLRnU1KO6OltdJkkw0c5x24zVqPX5dKuRak7nORlzgD8z WTp97qGnjav7yP0KkGqOr211rFwGe2l2g5++BVUIzhO/QKrhKFup003xJuLEMjWyuQdvySj+ma7r S/Hej61onlXPlZaPaUKHJPpmvF4fDbh9z2qEdhJKT/KtfT9Huo5VVJEjXfkLEvJ9ua6arc1vYxpp RZFrnh+ZtTnudNVFtWfckZbkCobTTLzePOt5FTHJ7V3k9nHp2nRhfmkLlGkbk/KBnHpySPwrNkKu Dk5J9TWFF+1je+hdRKL2OG0S9uIreT7Pc21sVBQPNyV7/LwTnk1UfSLSWR3udZEkhyzFUzn16kVk 309rDcGOS2L4UAlXwQcc/rV3+whLaR3McEvlyKGGCGIB9utdiVnc5276E6WOgxDme4kP++qj+RpQ mmRzK9uSrLnGXzmsebTokJBl2n0dSp/WoHsEDAJOj+hU1VmybpGzqNulzdtJu7cUVkgSoNvnvx70 VPKyuZHpRvyf4gKYbsHqSazB9aXJ9aFSitgdWT3NH7Yi9aa2o4+6Kz9ue9OCD3q+WJPNItf2i2el bXhyWSa8a5cfu7dd/wCPaudEYJwF5NdrDZjS/DD/ACgSSqSa4MxrKnS5VvLQ3w8XKd+xT1K8nk8L W83GfNaQ/wDAif8AGuTkv7o9G/SvQJbMN4ZEOP4MD61wEi8kd6yyuqpxnFLZsrExaad90czeaMZ5 3mLOCxyRQ/22NAqyEKowAD0roGTNVpYQR0r0pK5zrQ52WS8Iw8pYehqttOeeD7DFb0tr14qlJb47 Vnqi9GUQox1f86KmMJBopXYWR1g+tOFFFdDMh4p4FFFIZq6FbJc6rGr9F+bFdb4h+WCOEfd+UfrR RXz2ZtvFU0d+GX7qTLxQf2YBXnF9EqXkyjoGNFFLJW+eY8X8MSkwFMZQaKK+hPPIHQGqkkSmiikx lRkUGiiipLP/2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="43296b4928ba0e45098368174f3d9c8a" Content-Transfer-Encoding: base64 Content-ID: <43296b4928ba0e45098368174f3d9c8a> Content-Disposition: inline; filename="43296b4928ba0e45098368174f3d9c8a" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A xYvGlgx/e2syDuVw2Ks/8JboezcZpAf7vlnP+FebSFznIUnsabH8oOS2T7f/AF69RqaOL933PSR4 t0QkDfJg9zHwKuQ63otwoKX0I7fOdv8AOvLCyk5wx9MgU9ZFHZgPSlep2C1PuetobeYbopUkHqrA 0hiSvJRM4kBjynpz0q7BrOow8C5kI9nOPyo5p9hOMO56WYkphiT1riLbWdUuCVSR2IBOB6Vp6XqF 59peS8kHlIcKOSGJ7/SpdZRdm9SlSbV0tDoTEtNMagZ7Vz95q0sM7yi7tXhADbQ7bj7AAYz+P5VZ UXF/aRr9olgBYFTE2SuSDjrntWU8XbY0jhr7miWQORuTbs3Z3cj2I6inW3k3Em0v5fOMsvtnpWPr OoWNqHVYkuHccRON2TjqcdOfQ1k/2siHfeLLbxyDKJCnb0GeduD14rFYuozX6vBHbjTp25SPcvYk gZ/OisGyl1eexhMUzR26riEMGB2ZJz+ZNFH1uYvYQOD3Umai3e9Jur17nn8pNupBIpJAIJHUZpI+ QzHBAHQsAc+2etQiLfN5v8QPOFAA/KsZ1OUuNO5OZVXqwH1NTW11ayIQxAkBwAQeRjqcngVmT27s /B3EnHB5H4U+yWBfNWZmW5cbVDdMfh3yK4a2Ic1ZPQ66VBQ1e5rQ6pdJceRBGrK5wCi8nFZcDTNq DwQ+YfMJXaOWIHP9Ku2EUgPmkEDBCnvnp069/wAadDap9reRZf3hOV4I9/8AGuOTs7HRuX7Pw3rd xPFJHpl4iLiRZZbZ9uPU8ZI+nrXYWNjc3Eb2uo6kkapCTbpAiAKR2JZcr+PtzxTtO1DUX021jW9u vICkFUZ3CLgA5x0HTj/Hm/p+kRapNBbvOLe4nYhJFcgOwG7HT+6D2qoq6uxN2ehiQeHdVi0tdWtL VI5UA3IJQ8igjlwDz+vHpXb6H8OLNdOtbm/Rbq78vcXVi0Z5J7HBxnH4CmPbT6HqkFs++VlIxOHW NUyO2T83p6mt66up9PtY7iJHuIAMyvExVo+OoBwMeoBHPPNUkr3E22indeB7K6lEr6RBOxGN73AT OOOFwMD8KK5651hZ7qWWC4mgVmyUcyde54B4/GitOZkadzTHgz4ZyAYR4yfSWf8AqTTT8PPh3J0v Z0+lyw/mtY4lT+8Kd5i+tel9VX8zPj1n1dbwj9z/AMzQk+FvgGQ5TW7yM+12n9Y6gHwk8K8iDxRK oPTfLEcfoKrhx60u8VMsGpKzky48Q1Yu/s1+IsnwX0WYYj8WDd2JSNv5OKit/gFbNdJMfFHnRhgW VbUAn23CQ4/Kpc0u6s/qC6SNVxLPrT/H/gEXjPwinhyCxcXNuqTXG1Y44iqoBls9e2PXPIrz+5sr aW8meKWCBImG0xhj5uRz8pPy+nWu+uokuYGikBKN1FcZHZbdWeGaFtrOBtGTx68e1clbCSpyVne5 6eDzyFeEuaFred/8js9C8I6nMy2kZ0yZLaV45reUgSSAHr67cEEfhXRy+CdSu7TyjYi1AP7uNLhM REdCpB4HA9+maxbO4mtUxbSvCD18tiv8qvprmqp01G6/GZj/AFrqjg5xWjX3HnTz+jO3NCSt2f8A w34lWb4a3sekXtosV5LJIwZZppkkbcOhGD05PHFZ2leC/Gtzq0Ed7EIYCfnmOcgV0C+I9XX/AJiE x+rZqdPFmsp/y97h/tRqf6Vm8FU3ujpjxHhnvFr7v8zqLHwvZWlqsKabDc7T8010Mu57npwKK50e MNVxzLH/AN+l/wAKKPqlXyNP7fwfn93/AATHXw5A0Etw00iwxnGBgsagbw86pHItwArqXAxyBRRX dzM+ccVZf11IpNJmhxm4BJHpUa2Ny8mxXjzjPOen5UUVojGyuVczB9gcZqUGXaTuBIHOaKKAcV2F VndcZGapyxn7TG4Y7w3rRRWNVXtfua4f3eZLqi0krAdc4qX7RyMjJNFFbJnK4oDdBTjaaBdBuimi incjkiPWQsM0UUU7kNK5/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="812d74f9886d5bc0f0887bb2f47dfe78" Content-Transfer-Encoding: base64 Content-ID: <812d74f9886d5bc0f0887bb2f47dfe78> Content-Disposition: inline; filename="812d74f9886d5bc0f0887bb2f47dfe78" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgANQBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 9AimY2+3ccquM5qe2c/ZTgtkggnPas1Z9uYwhwep3df0q39oKxiGOMANyRk1NzaxLM7GHOWxxzVc 3MgjEKsVycs2adPNsQJhc1nz3kkSliUAGc/IKARdvdVTTNPEanzJ55Cka59hkn2/xqnH/aGA7S7s 8lMCuchlnl1Sz1C8z5c0jxoD0A4K/wAjXo0VvEtmJMZ+XOe1ccqk5N8rskdSpxhFcyu2Z6Tr9inj LEOSpAqozOFJJYAdzVyRIWlKhlBxnFS/ZoynzHK+lctHNa0E1KKfmRVwVOTvdoy5BKI0kGWDdMGu J+It1fQaEIPs8q200iq86ODtGe4HNelzBbm52JjylI5+lebfEXX4rPEdrJ/q5VIGfvEf06V00cbX qJc1tWJ4SlHVX0L/AId8GWdloYuXAlmu7QApNIwKMQMkHOB35xXOeD5riGTUbOa5MxhkAWQE4Yc8 isO78aXtxp7R3LxLuYgCBSr7SDxuyeAT6d6veBpjcNeyldvCD+f/ANauukpJ+8Z1XBr3T0/TWb7G p3Hkk9aKbYHFlH+P86KHuZInf5Jg3bqKnRsAsQMmo5VUwx4YFgMEd6WBSyfNVNFpkUzZOTWaynU7 37In+pTmZv5Cr1y8k++KzTey8NJ/Cp/qazX1G20Ky+ziQNcu26Vs9WPYeprCpNLRHRSpt6si8VXC RtpdqgCkXII9cBTW/qmpyW3hyWVCcou7H0rxy81i6vPF0U1yWXY4VUP8Ir0bW7rHhS7yeRGw/SuV t6p9TqjZ2a6M6a5W0utGgn09jsdA6yZyxJHeuU0Xxbd6jrdxoNxZPHdQAlpkOYyv97nkZz05qr4E 1pjoEli6tI0BAXHPyntWrbM9vfXN2ll5ckwVSzMpJxnqAff1rmnCnKXvI7nSk6emvY2byRpJP7Pt ZxGVTdM4Iyqnp+JwfyNeRePtOiit7aRJMyszswJy2BjGfz6ex969DZpBIZkhgWVvvSvlifqOP501 bllY/alhuUwQI2jCj+tOM+Wrzc2nYyeDqSpuKR5Ro2lQ6k2wKZGQBsgdWOAB/X6Cuh8JQLaLdQoC AshU57kcVvWWl2ejXF3dafAI2nwDAznYuM/dOCR1/wD1VVNvBAmPKTceWOOp9a7HjFGV1qZUcpqV VZ+6dMlwbeCFDwSgNFc62oPJFDww2xhehOcUVp7VPU8yVJxbj2O/gEBUgyxlh71Vvr0MptrdsH/l rIP4F/xNeWT+LNXvtfFlYTGLcF8mONA4bPUuWGRxzxx/Or/iTX57bRWhtUkiTcFmmlKqzE9SFByf 0xVSqT5Uktx04Ru5S6G5qfiiZnGm6JbtME4dk4Cjvz0zT7HSktj9pu2FzdPgooXJGfX1NZfg/U2m 0d5JYLa1t0womXILnvwc/mTVy88a6TY5jtGkuJj1aMZyf94/0rm5pU209zp5VUSfQgl8CteatJql zMIEZtyRkgVJ401G3h0SeCFwXbavH1/wqiT4l15jJDayW0B/ikYqT+J5/IVtWnhRk8PXllfFZpLg EgqThWxwR7g1LbkxqcYbHH+BNQC6rJA3HmRnH1HNehNICMivNdJtJ9F1eC3vojFeRbS+f4lbv+td yLwbTjFclZWke9hH7Skmi3I5xVaaT26VXe6/vN1qtNdAEjOazsd0YE7ueuaz7uQYPPNMluyBWbe3 u2J23DOPWqjEt+6rs1bCZvsMWVLcdetFXrSILZwq2AQijGPaivRPiJO7bOF8JW4fUp8u/nMzqZQf m2gAkD0J9ay7i6bWNWneZQlvbrvSCPgdQOvrzyetFFbNtTk10QRV1FM9K0nwhbX9lbzXtxJJCyAp bJ8kaD6A5J9810tjoVhYMTawpCR0KIoP54zRRXOktypSZdcbEOC2T3zU8MZ2j5vvDPI5ooqo7kvY 4z4iWsRsF1EDbd2pVlkH8Sk4Kken+e9edyeM745McEKjOOcn+tFFNU4z+JG1LE1aStTla5FH4j1W 8mEf2hI891jBx+ddNp3hrUtXTe+vyx5IGFgHf6MKKKbhGOyB4qvLeb+80B8OojKEutZv5gT/AAkL 3981mWfg7TU8SatBI08sdmYDHvfk7gSc+vSiiknozJylJ6s6raqkj5sdgD0oooqLgf/Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="c5b264e76723a1ffb074fecf9ffca17b" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="c5b264e76723a1ffb074fecf9ffca17b" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8sNpOvQY+hpV+2R9JJB/usa1WvbVxg2UifR//rVGbmzB/wBTPj1GDXmc/dHp+xkvha+80/DWhx+K r1YL2SbyLbl2DcyM38PsBj9a7HVvhhprWL/2ddXNvKFyoaQsmf5/rXNeDY7uS+vDp9wYoCyOxYDc MjnH5V6F9mXWWgY3582OMblBUg5HXBBwc1fO1sUqV1eS1PGr9J9K1F9MvNk7R/Mj89CM9etQmS3Y cwY/3XP9a7vxH4ctb7VprmSXY1pbZz/eOeMn04I/GuSlsERsDy2B/uuKUpJ2fUzdOUW7K69DPItz 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="44b1cf097643f504525c277ce40c6cc8" Content-Transfer-Encoding: base64 Content-ID: <44b1cf097643f504525c277ce40c6cc8> Content-Disposition: inline; filename="44b1cf097643f504525c277ce40c6cc8" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A f54BPbNYguptSu7hUnaOGNto2gcn8fpWnduILa4nGP3aFhnvxXK6fqLacscUsI/fHzAWOC2fSuGd 20j28JHlpSqq19Er/j+BvSXjabGrXDq8WdvmhcFeOMjvXn3iDWJWtUXzmZ5Bzg4zgnkj15qfxpqk s9wIY5cQqvMak4znOff/AOvWd4Y0V/FGtWlnISIUyZXB52D+vIH4+1XGna029ERPGL2cqKj70uvz 7dDHsbC+1Gfy7K1muJD2jQt/Ku80H4ZeK7tlklgSyj4Iadzn/vkV7LplpY6NZJDa28VvEoxiNMZ/ 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 AQyVGaKK2Ochf71FFFBJ/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="715e75f39181d0a9aa59887bd531aae9" Content-Transfer-Encoding: base64 Content-ID: <715e75f39181d0a9aa59887bd531aae9> Content-Disposition: inline; filename="715e75f39181d0a9aa59887bd531aae9" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAPwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A tXdxZC4iuTKMjvng1elvftkara/MfUGuTl0S2FkULFnxxk9KzNBvr7T7w2JbO9sRknkZrnr1fbSs nojroUXSitNWesaS1vpVmbu8KiaRiqHqzD0H5H8qo6h49trWUpJPb26/9NCWNcuRdS67FNdTSFEt ikKPx1bk4HTpUGo+Hbi4lElvdLGjfeDLn8jWEq+iUdEbrD+83PVnbWXiOOeNbmE2kyHo6fLn8ah1 drHVGivggWVf3cit+YPv3ri9Z0W5g8OQxWqiV/M+dc7d6/hWdYLdaXYSJiVBKRiKWTOzBzkUlUc4 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 jO7mR//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="b86a360726bd024b1c34c5e1b0dc0d8a" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="b86a360726bd024b1c34c5e1b0dc0d8a" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 25PAGqgHEEx/GNqzo/Amo2jTk28reZjgwZ6fSstPDOrW5/cT3KY6bJyKlitPF8EzGPVtUSNVBXF0 xyc+ma5l5SGsVSe6X3jNQ8E3MoI+xqnu0bJ/MVUufB8eCEtBuA6rJithtU8dW0TNFql6xA4Dor5/ PNTr4k8bRAeZexS8AkPaIf5LVXl0kUq1F9PxOQi8ISJGTLHcB93GCDxUK+HbzzJMSXCIo4zGeeen FdtF4r8TOHa50zSpFVioMlmQT78EUHxdeyTvFL4b0yTYu47N6YH50+aa7Fr2T11OGWHWIJPJhu3j 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 CiiilZAf/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="c470fd16d8b338c40bd0d04a9e9e26c8" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="c470fd16d8b338c40bd0d04a9e9e26c8" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A DoelNgGNjx3aoz4d0V2ObcHnPJ6mq0NxJhSXLEnuKlW7cxF8AAdTXi+0l3NPkQt4S0UPt2MBtx17 +tMbwdpmQVnmUjgYbOKsvO8ihlK7s8U17m5hnaOeS3Zt+1REzE5xznIGK0jObV7hyvsVn8GafLjd cysc5znGKjn8E2skZVb1wePvDI4rRe6EcQdn2qOSSelVr+8u0twbOJ5nkxsZcbefx9KIVZyaSDlu 9ilH4GWNCBfbs5Bynv2/DNV5fAs8rLi/BRexXHIqS0m1qwlllvUcxEE/eBwR3/n+VbMVxLJEsiOW DYb860nUnB7g4W6GAvgnUIzlb2JvqOoph8G6urDZcW7AdD6etdObqVLhlkkQqACAAQQT2PNSrd8D Dj61PtmnqJwS3RyY8J6upC4i5IYsH4NOHhLUdu1pEO3LfK2Cfauoa8J6Pmuf8R3moBk+yu+zAJKn HOT/AIVUKjm7IXLEozeFNQMpZVAzyRjNFdNbarcLZwB7aWSTy18wp03Y5oo9pMfKilLPch9qMQoG Nq8d6ljluZlCyKEXdwuetahsIgqghdx/iz1pZEhtLV5s5dchFx1PrXKk3oaqF3oT2WkhzHI8yK5O RHuw31P+H8qrw+H7+aeZr2cxMp/dgNwRkZb64yO1SxeYyxTyqiOqZKxsSAfUH1NJealdixebyT5g 2gKzZ4zjIOfSvTWDkoc8NFZ7/OzOH6573st7tf8ADC2+kW99fX1rJNLFFGXUNGuW7/0FV7k6fbxf Y4VjM0ZIVn4wuQyjjuMLz6+lWLW9GjwTs/mvPKRh8Z+bDDknvzXFSR3d7qrTPE+NuQ20c5/St8kw fMnOor20X6srG1nG0IO3c09Lkv5r+5kn5hUDgxgiQ44zn0z+YrotLh/s+y+0KuQg8sFznB4H8s1k WzNZvZ/aBuQPl0/i2ZHH4811t5f6Xa3wszahVf8AfpbbwSQQQAcZGQVPTPBHUmqzPCJKLor/AIKR 1YHF2TjWV9UzMS7l1HUhbvHA8lyrIx2DqF4YnHXgc1jtGgPToOxq1Y6hbHWmksoJIpotwAkkyAe/ GPetBbSH+Ibeuc+leRiKM6c7SXL5HXia9GvPmpbFbRNIj1K6KzTtFbxLvkbHOOmB7nNWJJbVGEUV nCYvU8n8c9amQC20q9aMHLoNpP49KyEzFAxY/MRtHuScf0qcHJuc0+lj0Msw8JRc2dNpa6dLbyGW 3gBEhAHTjAorzzUJrhrxjHM6r2ANFXUp4hybjOyOqeCpuTdjr0fA/wBWufpRPm6haN41wRgEDkf/ AF6Zvb0NODEHODXMk+58opy3uU/ONiAl25MKhUJ24Aznac9PWntLC4dHl/dlTjchHv3pusOw0W84 AVvLH4hs/wAs1w1tfyQ6tujc7UKsq4zg9c19PgoutQtJ+X4HBWSVZTjo9/xPRZre41K1FtAmXlK4 7ZGcnp7ZrktZtrjT7p47O5aOIqCyvyRx0rrUupZStwnys3zgjgjPNeaeKdVupNcuj9olwHI5fPI4 PH4Vx5ZV9jOUJbHRVh7VJo3VeS/s4Y5JHkMkhDt1Yj5eP51fSzhtor6aeL7S3nmOAOu5l7ABmycZ Ned2GsXsN1DKLmT91IHC5wCQfb6V7dJqFte6YLlrTZPOsbQnggJjOfY9K0zCtGdraFUYyhqznraz aDxE0jFf3tuGYr3fIBrcMjsDlyfqartFb/Z1uA5+17ihQjjZ65+tRb39K8epKVRpyd9DRtLYtyEm 2dSSRleB6ZrLu7K9ab5bdgiA4BYZJPerG5yG9NpJ+gGa4XVLr/TEAbgyc89a7MvwE6sZzjK2q6X/ AFOqlm8sLFU4xudMdG1JeEt8r2yQf60VgxliudpbJ9aK9L+y6v8AOv8AwH/gl/6xz/k/E7jBxgfy o2t05pd4I/8Ar04SD2/OvnbHAZ+qxyPpcqK2NrCTlc5IyOc/7xrnzoFumlLqCo4nCh2BPBX/APVX TagJprKSOBS8hH3VGSR3/SmmC4l09bNUCXLRiMK5x83HB9K6aderCCjF2VzRRhZNrW4zSZRc6ZDI qlBjAUn0OK891DSbjVNakhgJ+0PcMHj242L3cnpj8c16AvneH9IJuUAmQZVVOeW6AYpml27QIbm5 +e7m5difu552inGpKm5PqxyjFXf3Hmz6BfWt9PClvJIkTlRIVwDj36dK9J0VWXRbRXyGWMAjPpxU upsr2LBumR09aNOISxjUYAGQPXrSqVnUgkxcvucxcK7T603jjkikMg9RR5ozyxzXOZiSNi3uAq7p GjKrz34/pmuEh0i71K7YiPCwvhyTjB9vWu3uJZjA5tY2lmAyqKpJJ9hVDQo7uOzlF1byxSNIXKOh BAwOT+Vd+HxdShScYdWTKlGS5nuc7GJI1KS2sm5SRwwxxRVy7tNa+1y+Xp9y8ZYlHSFmDDsQQKK9 BZjiLf8AANVgqNjpgxA7A0AOcHI9aXcR9KC/HH8q8Agms5/st7BM67o0cF1H8QzyPyqbUL2J9UW7 tA7LuDFXXbgjH1qluJ55xSbjx8p/KtFJqPKGh0WqvDdeHreaeON7iV/N3Kgwp5AAz6ciuczJj7o/ OpmuLh7UWzSMYlPCelV/LbPQgVVSpztMLljTrZb7UYLW4/1MjbXAPOO9O1W0Wxv5IYEK2+cxZJOR +Pvmq6B0clWKnBGQSODx/KpPMuXt1tzcStCDxGSSB+FJOPLbqO+litubPX9KUsfUClaB8cA4pEh+ buKjQQ+3uJbSdbmO3a6MXz+QhAL45IGfWrS67fh5pI/MsjOfnhIG4DGME454qn9nJ7nmkEG0ZIbH 5VfP7vKBbHi6+05EtI/Dt1dpGoxNG4CsDzxx70VTMYJ4wfqaK6I4txVguaCgYJwPypXAwDgdPSii vPZQRgE4I9Kjd25570UVQhWPGajBJPJ6gUUUIBGJDEDoOKF6daKKaAY5Ownvj+lMVjtHPWiimtxE kgChMd855qM/fxngUUUwHYBooopCP//Z --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="f511696ecf865584c737f31f1c35686d" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="f511696ecf865584c737f31f1c35686d" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQwBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 8RjHNa8AHkD6VnMgVuK0ID+5H0q4kyKk5/e1NaxPcTRwxjLuwUfWq9yf3lW9IkaO/hcZJDdqlgdd DpcHlLFaRMyKPmnYfNKe/wBFz0H55NMudI8oBmQKp54ra0maN9MKzK4lRS0YRgyt64I6/TrVWUSX cIH2mLJbb5Ko3HQ/e9eQelcDk3JtnelFJJIxbnwkt5DO9tcRpMkZkjB6S98fXj864dGw+a9Bxd2d z5YDOhXsCeK89kDLIwZSrAkEHgiuuEro5JxszRim+XrUM8xqmspHekZy1XZGaQ4vk0qvxTVjzUvl DHFBQ3fRSeXzRSuBP5m5utacH+oB9qxo1O6tqAYgH0rSKIkyhcj95V3QnjTVrUyqGQSLkHoeahmT L5qvuMLhgeQeKlodz1AXFtCz2sUYQIg2bpSAM8njBrYnnsbbSwBApkkAJfcDg964XR7qO482VxPK 0w5COo2nv1q1O0WnwGFJGO7k5fcAfTNcE4W23O9T0uaK6hBbG4vrgHyY4htAGehxjH415heTm6u5 rgqFMjlsDoMnpXW3EzSaBfSMPkKhU/76AzXHYNdNKKV2c1WTdkQtUkSZNGwntU8QKHpWpmPEOB0o 2kdql8zjBprNxU3aHoM8s0UbzRRZhdDVHNdDpVqLlVDdKwUU4ziteC7W3sjHzvcdSOAK2V27IzaV tTsrHwL/AGhMsZjaL5QxaTIGD0NbMnws0by8PcXDyHuhAX8sf1r0Oxtre50q1vITlJoUkAz1yAab JCC2WOB2r4rGZxipStF8qR7FDC0bXep5Lrfgi5s/JFlayC3iXaTFkn/eyfWsOHwxqCyLJeb2hcHZ hsj8a90G9B8uWX0NIqwOctCu4HPK5xRRzqtGPLON/M0nhYN3WhwWg+H4bi5W1ubbfaCDEocYVs9h Tbn4Y6RJITa+ZEM9HO4D+R/nXc3H+sJXgt/dFVyjF8Fzn3rOWb4jn5oO3kV9VpuNnqec3Hw8S2kI WFZl7NGc5/DrWbP4atYJCjwbGHUMCDXslvYLMgZm/DFeQ+IdTEviHVJLSYERT+WU7YT5cj8q93K8 dWxblGaWivc83E0YUrWYyPwzZOMmIVN/wi9jj/UioLXV5NnOKlk1mULxtr0XWVzn5RP+EYsP+eS0 VRbX5tx6flRVe0DlMa00m4nt5njiJEMTSuccKo6k1hyXDs2Wcn2Jr6K8MT6do9o9npliNQjbi4ll wplPToR07Y/xrF8Y/Dy28Qh9V0g2um3QH7yBTtjJ9Tj7p+gOf1rPB46jWbhF2l5l1aE4JNrQtfDf VH1DwNapJJhrWR7fPcgYK/owH4Vv3GqxW979iEFzLP5ayARxltwJI69B07kda8r8B3GpaHqt5pt2 QwBDja+7B6H+Q9Ogr1qK6kkQNtyD6V8lmVGNPFzbV09V8z1KDbpIkgadxulhEQ7KX3N+OOB+BNPK lz8rAUvnrjBGDVmGynkzhVi5x+9+XJrmpUp1H7iNJTjFe8yhNFKqSeX80mw7frjiuEibU4tQk83c shdSgPOVO4Ht14Bznj8ePQrmOa0Yeeu30IIIP0IrInjt7i7aVY089UOWHBK9wfUc114ao6EpU3C7 f3mVSHtEmmX9OutsMbOwUOobJ4AJr5ynuEt9TuJI7jzUaVhnHUZPJr17xHa61rdkulaUFVpj++kZ 9uxB29ck46Vzlt8FtcS4h89II7ckCWVZDIQv+6Bk172Q0HCnKs9FL9Dixsk5KPY5G3MrKCBkHkc1 fWCR466Xxl4VtvCNxZR2c0k9pLD/AKx8Z8wH5hjt1Bx71zovY1GK75wTehzpsqmybPOKKsm9Q0Uu Vjudj8P55Fa8gDkRbFfb75xmrWszSmWVfMcBUYgA47GiivmsSl9efyPYofAij4FtIJIbi6eMNMZA hc+hGf512kP7gyxxnaitwPTiiiufMH+/kFH4ESWs0ktzbl2JJdc/nWhqrsSzlizbWXLc4Ge3p1oo r0Ml+Cfqjxc8bXJbz/QivJHfw3ayMxZyyEsTzkoM1wd3eXH9q3P71gRH94dfz69qKK12xrS7I9Kn /BRo3N5cQWNnPFKySswyy8E/5zW2b66OntM1xKzqOCWJ/SiivJrykvdvpdnSkrXMzxrGk3w8Ny6K ZvMjbcFA53Yzx7E14/1NFFe5lP8Au/zf6HnYj4yUKMdKKKK9EwP/2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="f2f20e216d74d727c3bf00bc1a991dc0" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="f2f20e216d74d727c3bf00bc1a991dc0" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAQgBk AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A zLmBHe4mYZ/cLGgKDqq4z7dKjTT9xBJTJOcGEe3+fzrXu45PslzmO4UGNjneeuP8/wCTUqJJ5akf aAcAj5vpkcn+desopM4LuxjGyOwECI5GR+6Ht7VDHZt5sxzEdp7xjGNv0reY+WjO7zqiDqT279// AK/NZdvq1qdUktluLjc7EqccN8vTr1/+tSlOKaTe5SjJq6GNZEEk+RgDJ/dduf8AZqK4tCkTHEPB BPyEcZH+z+tbbsqBi08uEzk7RyDnn/6/0qxdabcxpCyjz0MyhgAOAW64x71NScYLX+vwHFOT0OQ1 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="0c65f792a6b8889f86df8c038af2925c" Content-Transfer-Encoding: base64 Content-ID: <0c65f792a6b8889f86df8c038af2925c> Content-Disposition: inline; filename="0c65f792a6b8889f86df8c038af2925c" /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAtADx AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A foljp/iLStJt5tQWBbEsZ4T1cZzkVp/27fa1rdwLE+T4fs4nR8nCsoU9fc1j6TpMOn6s4jSW4Y2r Hy4zhjnrg1m3Y0mPTrwQw6paShceXI37tmz0NXvqaTi46M5uRrEaX8hk+2GQ7gfu7e1dJa6VcWun wTu6lCg4HUZrjGHmSpGD1IFdVYi/XUlRrjfbhcBCeKhuw4G7fRpdCJTdpFsAYhz1rBuZodQ1qK2j Yrt+Qsaqa7aTTXYkaQhhwak1WxS3e0eNisksILEetSXM6mz08acWHnCTPpWclsv2ppGlXO88E81F 4ahkQSiSVnH+0c1Ru4TJrHDEYk9algb2q+QyQJcSiOPJy1Nsvs8cTC3lEsZ/iFU/EduLixRDnAbP FN0OMRWDIPfrTQM0dHgtobkqsmZSCce2a1LpzHGTtzgZrM0ezVtVS8YqqNCRnPOc+lbF2sJtpTvI IXoR1pMCz/bEs9hYQFY182NnfnpzxVaCRU1eBZHCJIroWPQZFcxp0qvqEQDHg4FaWt4/dgnucUrA a+nyb7JELBnjzGxB9DxXCeI4Jn1KUxoTlh0rrfDigW03OfmrNvpI/tMpyM7iMUrAbrFk0EEZyIRX F2Go65c6mkc8reQXA2nsK7mYgaNu64iFc1amOTUISp6nmgDo4FIGDUusSMmg7B3kUfrQi4pNdIXR kTPLSriokUYuoSgXF0OwRQaqTAjzec4C4FS3kbSTXQHJO3NRSRO88ypzmSNRQhoIgA6o33jJgflV vTEAuAT2U/zrOkLx6kgbgrPIPyWrejEmcqeggDfmTTuT1IiOCfZj+tPjZowSfX+tNHMf/Af/AGap SAyZPc/1pXHctwyq3zdwMVFfYkjCg4ODzVYyLFjc+DipFuEdA5IYCi6J5lsUjY3PlB/NJ2jk+1WI YB5GnssxbLHaGH51Zt9SS6hmREA8tCQD3qKO8ggtbBrhCjjJ9gK2jaxLaND7NN6LRUn9taf/AM9l /Oiq0Juhljc2x1G7e5Kx2uFX7QZdm3HOAR1qp4+urY2CGG7lmimkBARgY2Udecdap6XoUGu6FOsk z20MEzSRzkZV178VzWtz2dnpselWdyboJIZGlAwuTxgVUNIouvLmkZ+LO712NbFZFhxkB+ua6ewi n+0RuyHaOprldEITUN5H3UJ5rqrbUGLqobC9+aznLUiLSH6ray3VyfKC4C5OTUGtoS+nL/F5WD9a h1e6u/ORrG4CnGGIYVHrLyi20x2f946MC+e9JO5pe5s6TbSwEmQYDDiqwsbie7edMbA/U1T0O7lh eU3t2CuPly9RT304viYLxRCXyVDcUAbOtybLVSfWoNJkVrRihz1qvrd7bz2iRxzKWzkin+Fypjlt wys/JAFCA0tLt5EntpnbI8phgdiTWvcH/R5CTxtOails5rLU7aLJaF4s+wb0q3cQQCB4pJQGdcYX tQxnPadd6L9pSOCQtcE4xjvW9C9mur2a3qKySFlUMM84rC03wrBY3i3KysxB3AEVsXdkLme2m3FW t33rii4WJrKa0keZbRdoSQqwxjkVw+u3MkGrTIhGC/FdnZW8dmZiG5lcuc+pqpc+HLO9uPPkLbic 8GpYGrOD/wAI5K3cQZ/SuS8NQXMus2v2hgqMCyqepr0K1tYZLB7eXOwptP0qrbaZptnNHNHGfMiG 1WJ7UXBoW9jEJT3NZ/ieUDTLUDr5q1f1O7ikMahhuB6VW1e1FzYwLnHzBvyqGhpXMD7SYbi8c4JL qoz71PZyLFeySSDhZ1ok0S4uGmKENvkVwPYVBNbzCe4UKTmcHj0pDGXDLJcu4AJMsjD8qm0kBZ5T 6QKKo7iZADwVaSrenNiS6A/hhX+VMGupHG2Y19Co/wDQqiuZJIycEYPb8aikuBCka5ySg/nUV35i xh1bJOOM+tRIwlIo3MjvLnd0qeKcRxYBOaz5El3k7+KYjS+YAATzU2Zlrc0DcNAu5CVduRipIrOf U1JnuSMf3qqTu8W15MHH3aktbuVkf94ArdqpXC7F/sRP+fkUUZk/vCiruwudhoz2EdtYWD2nmTJZ M003nFFijPc9q4jxRbaVputeTaRNLAIgT8/UnkEGu5j0Wf8A4R+GwmeZI4dn2h/Iz564yFUjnArz TxLdfaNcuWRNiKdiqRjAHAGK7ehrPVlfRiGu5MqSmOtdOPsWwDaeR2rmNE375Vxw2DT7u8uY5zHE BnpjvXPLck3TaWEzELAx9xTNamt3XSrSNCFhDAg+9V47TVHiV44JsEfeC8VR1Ga4R4o7lQrp04wa aQ0zU+w2W3LW7EmnnTrYpxbN+VZVpdM3WQjHPXNdJb+M9QTbBBaW0gUYG6IEmpbsWmZVrpmwN51u zc8YHar9sfsTE21tLGTwSKuHxtqUblJbOzRvQxCq998RZrUiL7NaM56kRDApcxVzchubuK0ik8t2 eXIDuchfp71Dp8M6rMJ2LMzZBJrHg8XvfJGk0tvGC46jGK6hl8va4ZWUjO5TkGqsBcRdsSj0FBqk uqWxBxMh29eelQHXbLP+vT86ktIdqlrPctAIX2hXBb3FakfAHtWK2v2Wf9cn/fQpU8R6ef8Al6iH /AqTEzqreYbCKRwixknv0rEtdf09ztNzCM8ZLgVbF1aR3aW7XQknfkIDnj1qdmF7mZd20n9o/aCP kK4q9cXW2O3gbJLLuFaWqQAWEO0cs4FZWoyLaxo0w6DaDiiWqNILUuW98kKk99uKhsj893clcosZ Le2e9YD6lEz4VuKS/wBU8vQryGNipmTaalIUyWVLbzCxkjGQcfN60sJt4FmYzIDIoXlvQVwC7vly x/Oo7hma5bLHAA4zV2I1sdgYYi24TI2MdD2qJyuVYyLgjpmuYhnKL1P50yS+HbNLlHHDym9Dr41t Cw3FSe2aRLS3hmlZplBbkelcguovjI/nTxqDSEbiaaiaSwc4q9jrWtrSS3G+eJ3B4XNUH0ZhIZRc xbeu0MCay95aMkHqKqBirdT+dNHM4NPU1tr+tFZWT6mimLkPU/7I1RNQW+h1VZB53MEdzhVix6Hv Xl+qapGi6jZtbJLJJcM63B5cc9K9anubRGSNr+aMqXDiaywXXBwuR0+teJXo3XE2Pu7zg/jXS0J7 kEM88CGWC8eJx/CFzmu48KX9heaS7atB5kzPhZVjAKe+a5fwlpMev+IoLCWTZETl2HXAr3yDQ/DW n6YdMt7FBG3VyfmJ9c0KPUSR5Bqfi660PUpbK0nMkAIKMR1FY974ottTcPe2oZ+7LwaTx/oraN4j ki3lomAaNiO1cmSRUpg1Y6eLUdGDZEM6H1Bq0l3o7uGS9mib1ZK40Oamtopru4SCCNpJXOFVRkk0 nBMZ1k0NuzNPFqMUwXkjJB/WuX1PUluXZRGF2n5SK9CHwk1oaH9t82Pz9u425HzfTPrXIL4D8QXE 2wWJXnlnOAKXsQOdjnlZgoJ5r1XwdcXKaE8F2xIDfuyTyBWfp3wtuImjmutQtgc8x4PH412kXhG+ t0WQeW9qB/rI2z+dNwZaZ5rrPmxX8qxlwCe3em/MLdCVOcelbmsacJrqR0lYEegrJtnyqo2WycZN ZbGiKsUUkshAVueOhqObTLqM7vKOM/erRv4r/TLoxu8iEcjIxxRb3crWkzzu77fuj1pkyRWn0y7k EQSM5HWu00nSLlfGsN3I48tYUQLnn7orlbayv9X1JILZnG0bjz0rp9Gd7P4jzm7mbyYoNzDPAwoG aOUIo9C1eTbDaKP+elcz48klgtbXYSMnqKfqni2wvQXtmzHaHfIcVlan4o0rxVbRp9paEwZc7Yyc ikoMpy1M3SoPNieWQknaT+NZvnsyyxyM2cZAq7barpccLxwaluc9A6EVmSPI8xZ0XBHDocqRScQT vsREZYY9aqz5Ezn1rRQA1nTj5mPvSRdGHPNIbBDLdTpBCpaRzgAV28HhfR9Dt0n1yYNIwzs7D8Kr /D2zjkurq8cAmFflz2qm8keva/Pe6lIwtIX2hR+nFWjunOz5F0Ngar4NkPlC3RQeNxix+tZ+veEY UsDqOkyb4h8zKDnj2qyYvCWrLJZ27eVMPlVgp60/wHcSrdXukTt5kcecA9OuKdiY1OXVO5xFvcPt 8tjwelTN1o1iFbPWbuBOFjlIFV45dzc1D3JxUFZSRa5opc+1FM4ND0zVLzVrTRZEv9Rea/2Y2W0e 4AY/jPT8a8uury2l0pIBZotwhJacHlh7iuvj1a2mt7oHRNSt5/JbDJK20e5B7V57uBB54zXQZ7m9 8NCqeKJGcj5Y2Nen3l3lsiUAfWvGLK+i0qV7iCAb2XaSXPNQS+IfMb/j2B/7aP8A41aaEeg/FC3a 58P2WoD5hE2wmvJd6t1rrofFl3f6W+mTRQG2C5CMpPT3rB+3xqeLC1/75qHa4mzPG2voL4V+ENPs vDttrLwCS9uASGYZ2D2rxOxvGutQt7ZbO2BlkVP9WO5r6q06CHTdItraNVRIowoAGBVwjdgZup6X PdHEVxLGD1CnistfC4RgzSMfxrqPtCg81SvNQVOFwa25UTd3Ml9PS3jxnIx3qkmtJpLFUb5G+8hG QanvNQ3AjOK5TVZkJYkjGOtRKxZ050vw/r7CWCX7NMx+YYyCang+H2jWuZr4+cqfMoVcAYrzqzvG P723lyoPVT3rZHibUEjKtMxBGMGueTiUrnfa1HokmhSXDQQzCOPK71ycV5pBp0Nw5uEtMxScgKvA FaUN6lxY+XNcou5SCpfFYcMstj4iSyivZWsZYtzDzPlU+lSrPYbZPdWyae6XFgvkShgJDjOVqbxN Y6fDYi9tpJIprobGnc8FccjFac62KqSSsq7QDznJrh/FFlqM91eiDcLFFVkA5ycc4q0iozS3M3Ro 5Vi1aFCXikjxvI6kVoeFrGFNLujc3sNvM6bVRxyRWZotjdz2Up/eKpBUKQevrWXdWV/ZZae3mVM4 DMpwaZDlFsstDCLrEjMADgnIxitK3uo/L+zQsTGD1bvXPWttLeMRHG0j5wF9a6O00y8sNO86ez8u OSTAfOefSpkJS10J0PzVnzAGNm9zV1T82Pas+Xlce9YHTQnyzTOo+Ht2iapcWcjYFxGQM+tAdvCP iC4gvIfMtJTndjt61x8FzLaXKTRMUkQ5BHau5svGenajbLb67AGYD7+3Oaadjuqpc3MtmD+IPD9j DK2m2e+6m6HHQ1c8KWDaPp15reoExtICQDwQKjXVvB+mETW8CySdRhMkVzfiXxZc60RCv7q0Xog7 /Wrb0IhT5tIoyL+7+13k9ywwZHLVXtTulqrLL8uBVjTgWfJHFZixdSNlFGzt9qKkxRQcBuP8TNZu 9PubO9W3lSaMoWEYVhn3Fcff6hb3FnDBFYwwPEPmkQnMn1qEYC1DhvMDIm8gg4xXSzFMzrhzkqQR 7GqnetrVIZr26uLsKoB5Kr2rGAO4DvmoaAljdkOQcZ4q6bBnshOgzlguPeklivrmNFFphU4BVME/ WtyHSNeuNNWGHT2TLBw5OOlVFAXPBvhi+Txro6XtmyxO/mjd3C8/0r3jV74RjYp5z0rz74a+H9Yt bu51bWGfCR+XCGOcE9cV0upmRrkFlIX1roirBYlN++Mbj+dUbi8Zs880x2THyvn8KqSBiOlUwK9z ct61yGvakzXttp6N807fNjriuku42PGcV5/b3X2j4gwb8ukcpUAc9BWLGdVHAllYW0cSbQVBIPrQ z5rSljDQwDHRBxVSaLBPauCWszo2Rs29jaytp/mWyOXjYtkdcVjQ6day6vE5t12YdcDPJya6ezce dpyLDM5WBgdqE1z+nR351+JPLCos8h+fjjFdUYmDd2P1PTbSKyuHigIfIUYJ61npo8kUmordyHcI VeNVYjZmu2h8OXt1BPcyyRKhnyiEZx05qrq+jfZL/UXlvw7KkKFAmAwPNW0RY52Hw1M8i+RP5cbc DMh7Dmo9X0w2uhvM13cySiXYBvytek6FpenpBp8jRJJI4dmLHP6VDrUck+mQwW1qjJ9s3HAA4BNJ MTRwFp4eSWXMSXO4RK2VXufwqHWtLax8PWMzzTM08z5RiMDH9a9Y82VjeEW5i8uFRj8K8/8AiJCb O00iHPyFGf8AE4onsXBHCx/fP0NUGOT+NXlOFdv9k1nbun1rmNLkVxC3mEis+QSxyZya3SASao3U fzDHc0Gka047FJZ3z0pru5PFXBbYYDFDQDdwKDSWLqNWK0cJaBmPUHFadjFtAFMWPbbH3artuoUr RY5nJyepe20U7dRQKxjmNeeOldF4T0mO8+2FtnKoAT7mt8eF2tbaa5t9Hm2xo7FrhwDjb6VU8H6R PPLPHYuka7IpHL5PJGa67GYlp4QjsLi4k89CjZADf72K4O90eSz8TqjIzxeeWLRrn5d1e1r4SuJS ftF85B7RrjvmrUPguwB/eGZ89ctik0guZlrPpLQRuiQsuB8zLjGB71esLuxv7qKzhnRmfgBQT3H+ FbEHhzSrZQEsoiP9oZrM1/Vo9EWKKwhhjmY5LBQMAUhrU7Z7dIbMQhFCDtiuduUSBZFnI2DkE1yF z8RdSSA7hE2B6VW1PxPYy6C+oNeRveMv+qV84P0rRSsOx1psYmUMqjBrMv1jhHlx4Mp4AFZNr8Q9 OSwjS4LecEGSB1Nc6vjUXFzOwIVSx25HajnQWNbWLhbaEnd/q0Jcj1rzrwZIH8d2sjEcs5yfoa7W SBtfsL1IGyEgMjMPbmuH8NJbnVFZndJlI2sOg55zUSkrMqMW3Y9FuHkjf7hYD0qnI5kB4IzU9xql qxcrOhwPWsq31OK4jyHUOcgDPeuC95HS6UktT2eynVBp20DcLYj9K5ZfD9xcata37srRmd2MYOMk +v5VLoPiAy2VjPNYXrMkLRuyQ5XPT+lakOtWcaWyyR3CFZCzboWGB+VdkXoc/LZmkhb7FOrAArOA QOnasw2UV5q+vtMofaqbc9sLUq67prQTK90qMbjd8wI4zUVlqmnyX+vut3DtkKiM7x8w2jpT3A0L HTreK7tNiYIiJ6+1SJGFs4h63B/madZ3tsby12zRtiI5IYcU6Io1nbncDmc8A+5oJaHyjJ1P02D+ VebfFaTNxo8IH3YCf5V6XMCv9pH/AGR/KvLfipJjXNPXPS1HH41MnZDijh2GIT71RuAsbJgVblbE Rqi7eaVzWKKaJkfdmo51yU9jUgAVfeopm6UMaHRgtMKCoDGkgb5zz2p45NOImOdAIE92qSM7ZFFJ J/qox71WjlLahGmeM0Mk2c0VHuopDPYtX11jpN9CLKf54XVGAzkkVy3gO/tdLN22o74TJHGqZQ84 HNdyEyfapVtoW6xqfwrpcjOwQapbXC7rcllPfGKnErsOABTREi/dUAe1SAYqLj0EG4nk14R471q4 bxVdKrnZGdo5r3S6m+z2k0v9xCf0r5p8Q3TXWq3E5PLuTTQtho1SVgQWJz6mqZjQsWJql5pBo881 VwuXJmUJ8rc1XjuinFQtISKiJ5zUtBc+gfhNbQS+D5ZGCuZ5GRx3x6VyXiLwTaaR4jZbC4LLLl/J UZKD0qL4YeJm0iK+ikbMAj3qnq/tXZWB+x6ffeJ9RIaXYxiVvU9Kibsjpw9k+ZnkMyESOvzDDEEG n2NrczXFu1gC0/mYUe9emLo9gngbfdW6vf3DedI5Xldx6D8KBa2mi+I7F7K2WOKZMc8/P61grI9C WJpyVjpPh3Hf2+mvFcTpPAxLhujo5+8pH1rszKF4ZlH1Nedtf3GiasbyPi1uTiZeyt/erda9Sdkl lQSEDg5rWNRHmTknqb809koPmNEx9MA1zmhXmk6rLepdabHDI10yxiaLG9exHFT/ANsxQjC24B9g Kauq20jb5oHJByGPJFXzoy5kazeHdILZGnwqR3UYpD4b0tsbYCnOfkciq1pq1vG0skl4zIwG2Nl+ 7VtNbsWA/fgfUUnMXNqQy+FLdw/l3t7Fv64mJzXlPxHtfsXiOO3+0TT7IVw0pyRXsi6rC33Jkb8a 8W+I10Z/FsrHBAjUAik2mWpHJXDkW7VTjOXWrU/MBzVNOGHtUFXLO45P1psnODTxg96bMuBkUmNC W5zI3sKmXkZqvacvL/u1bUfKKpCkPkH+qX0GapW4zqq+xJq1M21l9hUUC4uhJ3pEl7JopuaKAPfl wakU1kRXUuQMVcS4JIyK2JNAcig1WE4B61IsoakBheONQbT/AAvcOpw0nyD8a+drwu0jMepNez/F S8K6daWwP3nLEV47cc5zTQmZMhK1GHJOKsSIZHVFBLMcACuxm+H8tl4Uk1CZj9rGH8v+6v8AjTuk BxXaikxRRck7v4faU+p3jqv3VwTXo/iHQr65j060jTNp5wafB/hHbFcH8NfE1n4dhvpLuPd5mAGB AxXWv420m9LH7ZcICem4VnJXN1K0VYm1qTV2muLKHRJZLM7VimR/5irniGxlj0q2vDGQ8Dqx9vWq lv4u06CPEd48g7Bzmrk/i+01DSbi2mljw6EY96ThYKS97U0jAt7YgPFvSVOeKzNNWe3uH024bLKN 0L/30/8ArVz91402aVZaWXMYZQryJ99h7VcvpJ49Nt79AY0hw0TOcMV75HvWTiwkrNxOhlTaOahE gyAc4ot76O7tY5cj5hmnJGrNnNZ6o5nuPkSIKCp69QaiVwp4xUkkHvUDRbead2IWWU44/Sse7tYr qQtLErH1IrV254ppi55p8zBM5efRIJcjywB7VRn8LqkKujKcn7vcV2Lwg9KhNuSMVSY+Y4RtBZHy c1bbTLVogHt5c45Iauqa055WomtQO1FylVsceuhJGWaGVhu7OOlOOjSImVnjY+nSurNuCOgp0llb G3RsHze4xT5g9pc4mTSbyR/lj3H2NJ/Z93bPtkt3Bx2Ga7ZIUSExGFGB/iPB/OqxsZM5yw/GjmHz nKeRP/zxf/vmiur+xyf32oo5g5j0QRYpSoHJIFZk19PJny1wPWqjSXMvDuQK0c0PmRpy30ELEFsk VSl1yRc+Uoqt9jJYFm4PU057AMQImyO5PGKz9oK5wPje/nu72IStnanT0rhLh+TXR+J7kS6xcCNt yKdoI6cVy05JOO5rqitLsLnT+ANGGpa2LuZcwW3zc927V6/PDHdW8tvIMpIpU/jXMeDNJOm+H4A4 xJKPMb8a6RUDcGfafpXLOWpDZ8+6raGx1O5tT/yzkK1Txmuo8fW62/imcq2fMAbpiuaUc1rGWg7n UeG/LjtXaTTBd/N1KkgflW9Le6XEgE3h+BCxwCA2a0/CGnPbeHY3ePBlO8fStlraJx80St9RUOVm WpaWOLlXR/N2vp7xHGcRsaiGn2t5IsenM6sTyZXAArtPscIYssSgnrxTBo1nIxYwrk9ccUnUKhNJ 3IvDGnaLb3cj6wIpmth8kxOQPp61duYYtV1KSWBpYbJxjLnLOPp2FQpollBIJEiO73JI/KtKFeAK z5zSpWUthVgjiiSKFVCrwMCp44ZccdKbtKjNSxSsBUXZyvUUxyt8o60ySK6UfdyKsJMw6YpjvOQS u4qOp9KZJXUsgyyGhpQw4BGKlDHHPNNOD0FJjKT3catjOKlimjY4LCpSIh96ME/SoZI42OQgH0qk wHySIOM1AwVz1prQ7+BxS+R/tGlcLDvJUL1zUax7mxUqwH1NSrCV5FHMKxEIB6VPHCpYDbn2pWdg u0Jk+opGWSPluD2ouwLX2I/88R+dFUvPf++aKeozShZyGEUgEWMkbuv0qHdGGJduPauZtrpEtITb SloguASeajl1J+z12fVWyXPU6X7SmSUJ2j1rJ13VdunzQxSlWZeorIF5JIwRWJZjgAd6bqGiay0D k6fckYznYa2hhEnqQ6hw1yQgKgcGqun24udVgRhld4JHtWuuk6hqLPHZ2U0zxHDqq8rVnT/Dmr2d 4pk025WZwRGpTlvWul01awe0PQItYiiRVUDAGBSTa+GXA2r9BXMvpmuohZtMugoGSTGeKjj0vW7i JZYtNuXRhlWCdaweEV7i9pc57xrKLvWVl6/uwK5wJz0rZ1xZhemKeNo5oztZWGCKin0PU7SyS+ms 5Etn+7KRwa2jh4pD9od7oWt+Xo1tFIQdq4rWfWLZYwQcnuK8/wBDtNUv7VzaWks0cX3mRcgVoWOl a3qsbNZ2M0qA43AYFZywsGxe0Z1a65bKTlSaYuuRK+QBXCXrXen3T211G8Uy9UbgioBqEoPWhYGD F7Vnoza5AR83H0pV123UjArhbFNR1SfybO3kmf0Rc1evdG16weJbqwmQynanHU+lL6lTQ1NnX/29 E5wBikbXFQ7Twa4W8i1HTphFdwSQSEZCvwcVJYwalqkzR2cMs8gGSEGar6jDcl1WduniFF7Zp7eJ F2lRwD1ANcJ5d8t79jeNluAdvlnrmp7y01CwnjhureWOR/uqw5P0rRZdFkOtY7KLXkYcpxU39tWw X3NcmNF1rhRYXRyM4CGiXTdYt4Wkk0y5VFGSzLjFP+y4vqNVzqW1mA1H/bcQ/hzXN2VjrF+M2umz SD1xgVNLo+vxPtk09oz/ALRFNZXT2bB12bx1qHbwhzTTrCZGIyTWSfDHiIQiUwLGh/izUkPhTWp1 J8wcdcVayugt5E+3Zp/22R0RR9TTJNbcjqi1gz6LfRctKG+jVTksJwMtnH1raOXYVeYe3kdL/bcm 35Z1B9aqy6szZL3LMfrXPBCnFMkbito4XDx2iS6smbn9qD/ns350VzuaKv2ND+UXNIv2JaC3KIxx nuadLM5zzRRXH0NZ7hpc8n9u2S54M6/zr0jXdc1G1+KWkaZDcslnNHmSIdG60UVjV2Gty9piiDxp 4iWIBB5KP8o77TzXk+s+KNch1GC5GpTNLHIwQtj5c8elFFc7bGdt8RPEmq6d4K0q5tbpo5bsKszA feBXmrmq6le2Hw30e4s7qSCZkQF0xk8e9FFJtlpaHi9/PNd6pc3FxK0ssj5Zm6k16n4fY6r8KNQt bs744Efy/VcdKKK6ofCZPcisnbRfgpcXNkSk0+Q7nrzxW6zy2Xwp0qWznkt5BBG2+MgEnHeiiuab 1NOh45qF5c6hrVxcXczzStgFm+lMVAe1FFdlH4TGR65pcp8OfC2TVNOVI7xl3GRlyc1xeleK9Z8R XmmJqV2Zgt6jL8oBFFFctR++XHY1figPM8c26MTtNqDiuu+HFlBZaLc3cSfvncKS3PGaKK3TfsSe pzfxBtYrXxrFcRLtkkhDsfcHg16LoFvBrmj2d/qEKS3EJJRyOhooqG3yoiW55fP4p1h/iLdoLtkj SQRKi8ALmt34kavfxa5pGlRXLx2l2g85F43fN60UVi2ykP8AiPr+oeE49KstGlW2ikXDEKC3HvWn pepXWreAZ7y9k824RGIkIweKKKabuFjpdMxd+HbTzgD5kI3flWPpJKQarECcRq4Unr0ooqk3YR53 opM2iQtISzZbkn3NRzkgkZ4ooruofCjOe5nyKN3Sq8qjb0oorpJRBsFFFFAz/9k= --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/png; name="929fccd0403c7789713bb1c207820b20" Content-Transfer-Encoding: base64 Content-ID: <929fccd0403c7789713bb1c207820b20> Content-Disposition: inline; filename="929fccd0403c7789713bb1c207820b20" iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2OUMxNDg5NTA1QzRFMDExQjdDODlFMERFQzBE NDNFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDMTlBNTVBMENDODkxMUUwODQ5QkUzNTAy QkJFOTc5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDMTlBNTU5RkNDODkxMUUwODQ5QkUz NTAyQkJFOTc5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3Mi PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0RDUxQTEzNkM0 QzRFMDExQkM3M0U0MDI5OEFDRUEyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2OUMxNDg5 NTA1QzRFMDExQjdDODlFMERFQzBENDNFQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRG 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 --b1_60d2f0950376f46f88d800ee0b66dbc1 Content-Type: image/jpeg; name="ac9ffed671ad47031e8cc1e88eb57952" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="ac9ffed671ad47031e8cc1e88eb57952" /9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABFAAD/4QPwaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6 NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5 OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1w PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn L2RjL2VsZW1lbnRzLzEuMS8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0idXVpZDo2NUU2Mzkw Njg2Q0YxMURCQTZFMkQ4ODdDRUFDQjQwNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NzYy QTE0RjFGRjYxMUU1ODEzMTkxRkM1NkU1QzkwNiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1 NzYyQTE0RTFGRjYxMUU1ODEzMTkxRkM1NkU1QzkwNiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBJ bGx1c3RyYXRvciBDUzUuMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4 bXAuaWlkOjJGNEE4MTM4MUUyMDY4MTE4MDgzQjdDOUE4N0ZBNDUzIiBzdFJlZjpkb2N1bWVudElE PSJ4bXAuZGlkOjJGNEE4MTM4MUUyMDY4MTE4MDgzQjdDOUE4N0ZBNDUzIi8+IDxkYzp0aXRsZT4g PHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+MTYweDYwMC1jb3I8L3JkZjps aT4gPC9yZGY6QWx0PiA8L2RjOnRpdGxlPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8 L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/tAEhQaG90b3Nob3AgMy4wADhCSU0EBAAA AAAADxwBWgADGyVHHAIAAAIAAgA4QklNBCUAAAAAABD84R+JyLfJeC80YjQHWHfr/+4ADkFkb2Jl AGTAAAAAAf/bAIQABAMDAwMDBAMDBAYEAwQGBwUEBAUHCAcHBwcHCAsICQkJCQgLCwwMDAwMCw0N Dg4NDRISEhISFBQUFBQUFBQUFAEFBQUICAgQCwsQFA4ODhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgBkACMAwERAAIRAQMRAf/EANUAAAEEAwEB AAAAAAAAAAAAAAAEBQYHAgMIAQkBAQABBQEBAAAAAAAAAAAAAAADAQIEBQYHCBAAAQMDAgQCBAgG DAoGCwAAAQIDBAARBRIGITETB0EiUWEUCHGBkbHBMiMVodFSsjMW8OFCYnKCktIkNLR1osJjc4OT s9NVN/FDU5Q1GKPDVHSk1CVFNlYXEQACAQIDBAQJBwoGAwEAAAAAAQIRAyESBDFBUQVhIhMGcYGR obHB0TIU8OFCUnKyM/FigpLCY3MkFQei0iNDNDUlFheD/9oADAMBAAIRAxEAPwDv6gCgCgCgCgCg CgCgCgNHszevWLjje3hQvzuhsQ2lu+kWvxoWttmdCgUAUAUAUAUAUAUAUAUAUBrbeZdU6htYWthQ beSDcoUUhYB9B0qSfjo00UTTNlCoUAUAUAUAUAUAUAUBglxtS1NpUC4i2tIIum/EXHhelClTOhUK AKAKA5294HdXdvD5ONB27bFbVWUqYy8ZxKX3nQj7RDh1lSUJvwGgX9JqBRuTu5aYbqb9nSdNy2/y bTaZ3dVKtzZlabXRRKOLfhw6DbuXM9xe5vcDKbM2VlV4HB7fUUTZjTi2FFaFdNRWtm7iiVBQQhKk CwuTW0WlyWVcm/e91b/DjgvGp+A5TTc4t9rKzbtKc4+9Ob6q6IwW39aO82bF3b3A2T3QY7V9wsgj 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 s2KMaohSVuHhxTb4KkeAN+ny6bD0XqypfU//2Q== --b1_60d2f0950376f46f88d800ee0b66dbc1-- From david@fromorbit.com Thu Jul 2 02:07:50 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A5BDB7FAA for ; Thu, 2 Jul 2015 02:07:50 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1E83FAC006 for ; Thu, 2 Jul 2015 00:07:46 -0700 (PDT) X-ASG-Debug-ID: 1435820863-04cbb050d0080c0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id b5tDmUlRZboia0j6 for ; Thu, 02 Jul 2015 00:07:43 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DJBgCm4pRV/96zLHlbgxKBM6p5AwEBAQaaEQQCAoFETQEBAQEBAYELhCMBAQQ6HCMQCAMYCSUPBSUDIROILsxYAQEIAiAYhgSFLoUGB4QrBZQQi2CBO4chj2omY4FagU8sMYJIAQEB Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Jul 2015 16:37:42 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZAYaV-0005X4-3m; Thu, 02 Jul 2015 17:07:11 +1000 Date: Thu, 2 Jul 2015 17:07:11 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag Message-ID: <20150702070711.GY22807@dastard> X-ASG-Orig-Subj: Re: [PATCH 10/14] xfs: minimize impact to non-reflink files via reflink per-inode flag References: <20150625233909.4992.68314.stgit@birch.djwong.org> <20150625234016.4992.52406.stgit@birch.djwong.org> <20150701015843.GS22807@dastard> <20150702023208.GE10043@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150702023208.GE10043@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1435820863 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 01, 2015 at 07:32:08PM -0700, Darrick J. Wong wrote: > On Wed, Jul 01, 2015 at 11:58:43AM +1000, Dave Chinner wrote: > > On Thu, Jun 25, 2015 at 04:40:16PM -0700, Darrick J. Wong wrote: > > > Gate all the reflink functions (which generally involve an expensive > > > trip to the reflink btree) on an inode flag which is applied to both > > > inodes at reflink time. This minimizes reflink's impact on non-CoW > > > files. > > > > Ah, I see you do this reflink inode flag here. This should be one of > > the first patches, not the last. i.e. the patch series should > > build up all the supporting infrastructure in individual patches > > before adding any of the actual reflink implementation.... > > > > Also, the flag needs to go into the di_flags2 field, as the last > > flag in the di_flags field is reserved for a "more flags" flag if we > > ever need to add more flags to a v2 inode in a v4 filesystem... > > It looks to me like di_flags2 only exists in a v3 inode, and v3 inodes > only exist on v5 filesystems. I don't really mind using di_flags2 for > reflink (on the off chance you want to use bit 15 of di_flags for a > v2 inode) but I'm wondering how is it possible to have di_flags on a v4 fs? You mean how is it possible to have di_flags2 on a v4 fs? Internally when inodes are read off disk, they are converted to v3 format in memory. i.e. the struct xfs_icdinode is a v3 format structure. Hence when reading in v2 inodes, the di_flags2 field is present in the structure and it gets initialised to zero. When we format the in-memory inode to disk (in xfs_iflush_int()), we don't ever write the v3 fields back to the on disk inode structure, and hence the in-memory value of the di_flags2 field doesn't ever get written to disk. So while the various v3 inode fields are always present in the in-memory inode, if di_version = 2 then the v3 fields will be initialised to zero on read and will never be written back to disk... Cheers, Dave. -- Dave Chinner david@fromorbit.com From rbh@intomics.com Thu Jul 2 02:58:03 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E46197FB7 for ; Thu, 2 Jul 2015 02:58:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B6D788F8040 for ; Thu, 2 Jul 2015 00:58:03 -0700 (PDT) X-ASG-Debug-ID: 1435823879-04cbb050d009800001-NocioJ Received: from columba.intomics.com (columba.intomics.com [77.72.50.68]) by cuda.sgi.com with ESMTP id KKV5R7xTkQNukXs1 for ; Thu, 02 Jul 2015 00:58:00 -0700 (PDT) X-Barracuda-Envelope-From: rbh@intomics.com X-Barracuda-Apparent-Source-IP: 77.72.50.68 Received: from localhost (localhost [127.0.0.1]) by columba.intomics.com (Postfix) with ESMTP id 7D4022204A8 for ; Thu, 2 Jul 2015 09:57:59 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at intomics.com Received: from columba ([127.0.0.1]) by localhost (columba.intomics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id n8qk7kF8PuSt for ; Thu, 2 Jul 2015 09:57:57 +0200 (CEST) Received: from dhcp-0-1-94.intomics.com (dhcp-0-1-94.intomics.com [10.0.1.94]) (Authenticated sender: rbh) by columba.intomics.com (Postfix) with ESMTPSA id 24D3222048A for ; Thu, 2 Jul 2015 09:57:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intomics.com; s=201205; t=1435823877; bh=TPkCD8vWbtBNzQjip2anKCJWnc74TUqmpIqyRym222w=; h=From:Subject:Date:References:To:In-Reply-To; b=vBxHv2f5qUCX2gnOigKyY4TQqhXBwmqKRr3UuZctR/EThgYSHRrZVLkgV0IdqTlWR EI3g42yrJsgduWLVxHqSTxkVlA/uPeEkHZYrDmJk32J+gmSiCnD3Oz28sh2EDE9XRn SS7X3G/7DyqyS/+ettodKbvpn3vJGNKm61KKnwvU= From: Rasmus Borup Hansen Content-Type: multipart/alternative; boundary="Apple-Mail=_42F8D532-E358-4D39-A906-520B0D8575E6" Message-Id: Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\)) Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Date: Thu, 2 Jul 2015 09:58:19 +0200 X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> To: xfs@oss.sgi.com In-Reply-To: <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> X-Mailer: Apple Mail (2.2098) X-Barracuda-Connect: columba.intomics.com[77.72.50.68] X-Barracuda-Start-Time: 1435823880 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.61 X-Barracuda-Spam-Status: No, SCORE=0.61 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_FONT_FACE_BAD, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20384 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word --Apple-Mail=_42F8D532-E358-4D39-A906-520B0D8575E6 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 When I tried mounting the file system after running xfs_repair, a quota = check was started. However it did not finish after a few hours like the = quota check that was started when mounting the file system read only, so = after a few days of waiting (with next to no disk activity) I restarted = the server and mounted the file system without quotas. Soon afterwards I = got the following error (note that it's a different line number in = xfs_attr_leaf.c than the one I initially saw): [ 327.670974] ffff8802a273d000: 00 00 00 00 00 00 00 00 fb ee 00 00 00 = 00 00 00 ................ [ 327.678213] ffff8802a273d010: 10 00 00 00 00 20 0f e0 00 00 00 00 00 = 00 00 00 ..... .......... [ 327.685878] ffff8802a273d020: 00 00 00 00 00 00 00 00 00 00 00 00 00 = 00 00 00 ................ [ 327.693950] ffff8802a273d030: 00 00 00 00 00 00 00 00 00 00 00 00 00 = 00 00 00 ................ [ 327.701567] XFS (dm-0): Internal error xfs_attr3_leaf_read_verify at = line 246 of file /build/buildd/linux-3.13.0/fs/xfs/xfs_attr_leaf.c. = Caller 0xffffffffa00cb885 [ 327.718829] CPU: 1 PID: 2805 Comm: kworker/1:1H Not tainted = 3.13.0-55-generic #94-Ubuntu [ 327.718830] Hardware name: Dell Inc. PowerEdge R310/05XKKK, BIOS = 1.8.2 08/17/2011 [ 327.718867] Workqueue: xfslogd xfs_buf_iodone_work [xfs] [ 327.718869] 0000000000000001 ffff8800b82bfd68 ffffffff81723294 = ffff8800368dd800 [ 327.718875] ffff8800b82bfd80 ffffffffa00ce6fb ffffffffa00cb885 = ffff8800b82bfdb8 [ 327.718877] ffffffffa00ce755 000000f600203100 ffff8802a140ad00 = ffff8800368dd800 [ 327.718879] Call Trace: [ 327.718887] [] dump_stack+0x45/0x56 [ 327.718901] [] xfs_error_report+0x3b/0x40 [xfs] [ 327.718911] [] ? xfs_buf_iodone_work+0x85/0xf0 = [xfs] [ 327.718921] [] xfs_corruption_error+0x55/0x80 = [xfs] [ 327.718935] [] = xfs_attr3_leaf_read_verify+0x6d/0xf0 [xfs] [ 327.718945] [] ? xfs_buf_iodone_work+0x85/0xf0 = [xfs] [ 327.718954] [] xfs_buf_iodone_work+0x85/0xf0 [xfs] [ 327.718958] [] process_one_work+0x182/0x450 [ 327.718961] [] worker_thread+0x121/0x410 [ 327.718963] [] ? rescuer_thread+0x430/0x430 [ 327.718965] [] kthread+0xd2/0xf0 [ 327.718967] [] ? = kthread_create_on_node+0x1c0/0x1c0 [ 327.718970] [] ret_from_fork+0x58/0x90 [ 327.718972] [] ? = kthread_create_on_node+0x1c0/0x1c0 [ 327.718973] XFS (dm-0): Corruption detected. Unmount and run = xfs_repair [ 327.729003] XFS (dm-0): metadata I/O error: block 0x157e84da0 = ("xfs_trans_read_buf_map") error 117 numblks 8 I started another xfs_repair which did not report any errors. After = mounting the file system again (still without quotas) I discovered that = ls would write "Structure needs cleaning" whenever it listed a certain = file (and the kernel would output error messages like those above). This = was a file I didn't need, so I tried deleting it and running yet another = xfs_repair: Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... agi unlinked bucket 11 is 2949684875 in ag 2 (inode=3D11539619467) - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno =3D 0 doubling cache size to 591232 - agno =3D 1 - agno =3D 2 - agno =3D 3 ... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... disconnected inode 11539619467, moving to lost+found Phase 7 - verify and correct link counts... done The file then turns up in lost+found and when I "ls" it I get the same = errors again. I've tried deleting it from lost+found, but then = xfs_repair finds it again with exactly the same output as show above and = puts it back. Apart from that, everything apparently works fine. Is there a way to permanently get rid of the file in lost+found? Its = size is apparently 0 bytes. Best, Rasmus Intomics is a contract research organization specialized in deriving = core biological insight from large scale data. We help our clients in = the pharmaceutical industry develop tomorrow's medicines better, faster, = and cheaper through optimized use of biomedical data. ----------------------------------------------------------------- Hansen, Rasmus Borup Intomics - from data to biology System Administrator Diplomvej 377 Scientific Programmer DK-2800 Kgs. Lyngby Denmark E: rbh@intomics.com W: http://www.intomics.com/ P: +45 5167 7972 P: +45 8880 7979 > On 26 Jun 2015, at 08:14, Rasmus Borup Hansen = wrote: >=20 > I tried mounting the file system read-only (which triggered a quota = check =E2=80=93 does this make sense when the file system is read-only?) = and then I scanned the file system for files with the spurious inodes to = see if I could find a pattern. This took quite a while, and I didn't = find any patterns, except that all the files in directories with project = quotas were affected (but there were also other files). I'm now running = xfs_repair without -n (and I had to mount and unmount the file system = before it would start). I'll report back when it has finished. >=20 > Best, >=20 > Rasmus >=20 > Intomics is a contract research organization specialized in deriving = core biological insight from large scale data. We help our clients in = the pharmaceutical industry develop tomorrow's medicines better, faster, = and cheaper through optimized use of biomedical data. > ----------------------------------------------------------------- > Hansen, Rasmus Borup Intomics - from data to biology > System Administrator Diplomvej 377 > Scientific Programmer DK-2800 Kgs. Lyngby > Denmark > E: rbh@intomics.com W: = http://www.intomics.com/ > P: +45 5167 7972 P: +45 8880 7979 >=20 >> On 25 Jun 2015, at 18:41, Emmanuel Florac > wrote: >>=20 >> Le Wed, 24 Jun 2015 09:39:45 +0200 >> Rasmus Borup Hansen > = =C3=A9crivait: >>=20 >>> Only the first 20 lines are included. There are currently 250000+ >>> more lines with "directory flags set on non-directory inode" and the >>> check is still running (the mostly small files take up around 30 TB, >>> so it'll probably take a while). >>>=20 >>> I recently enabled user and project quota and updated from = 3.13.0-53. >>> The file system has been heavily used for the last month or so. >>>=20 >>> Does anyone have any thoughts on this? I'm tempted to stop using >>> quotas when the file system (hopefully) works again, as it's my >>> impression that project quotas are not widely used. >>=20 >> Did you first try remounting then unmounting the volume to clear the >> log? That could clear out xfs_repair output. >>=20 >> --=20 >> = ------------------------------------------------------------------------ >> Emmanuel Florac | Direction technique >> | Intellique >> | > >> | +33 1 78 94 84 02 >> = ------------------------------------------------------------------------ >>=20 >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --Apple-Mail=_42F8D532-E358-4D39-A906-520B0D8575E6 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
When I tried mounting the file system after = running xfs_repair, a quota check was started. However it did not finish = after a few hours like the quota check that was started when mounting = the file system read only, so after a few days of waiting (with next to = no disk activity) I restarted the server and mounted the file system = without quotas. Soon afterwards I got the following error (note that = it's a different line number in xfs_attr_leaf.c than the one I initially = saw):

[  327.670974] = ffff8802a273d000: 00 00 00 00 00 00 00 00 fb ee 00 00 00 00 00 00 =  ................
[  327.678213] ffff8802a273d010: 10 00 00 00 00 20 = 0f e0 00 00 00 00 00 00 00 00  ..... ..........
[  327.685878] = ffff8802a273d020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 =  ................
[  327.693950] ffff8802a273d030: 00 00 00 00 00 00 = 00 00 00 00 00 00 00 00 00 00  ................
[  327.701567] XFS = (dm-0): Internal error xfs_attr3_leaf_read_verify at line 246 of file = /build/buildd/linux-3.13.0/fs/xfs/xfs_attr_leaf.c.  Caller = 0xffffffffa00cb885
[  327.718829] CPU: 1 PID: 2805 Comm: kworker/1:1H = Not tainted 3.13.0-55-generic #94-Ubuntu
[  327.718830] Hardware name: Dell = Inc. PowerEdge R310/05XKKK, BIOS 1.8.2 08/17/2011
[  327.718867] = Workqueue: xfslogd xfs_buf_iodone_work [xfs]
[  327.718869] =  0000000000000001 ffff8800b82bfd68 ffffffff81723294 = ffff8800368dd800
[  327.718875]  ffff8800b82bfd80 ffffffffa00ce6fb = ffffffffa00cb885 ffff8800b82bfdb8
[  327.718877] =  ffffffffa00ce755 000000f600203100 ffff8802a140ad00 = ffff8800368dd800
[  327.718879] Call Trace:
[  327.718887] =  [<ffffffff81723294>] dump_stack+0x45/0x56
[  327.718901] =  [<ffffffffa00ce6fb>] xfs_error_report+0x3b/0x40 = [xfs]
[ =  327.718911]  [<ffffffffa00cb885>] ? = xfs_buf_iodone_work+0x85/0xf0 [xfs]
[  327.718921] =  [<ffffffffa00ce755>] xfs_corruption_error+0x55/0x80 = [xfs]
[ =  327.718935]  [<ffffffffa00ebbdd>] = xfs_attr3_leaf_read_verify+0x6d/0xf0 [xfs]
[  327.718945] =  [<ffffffffa00cb885>] ? xfs_buf_iodone_work+0x85/0xf0 = [xfs]
[ =  327.718954]  [<ffffffffa00cb885>] = xfs_buf_iodone_work+0x85/0xf0 [xfs]
[  327.718958] =  [<ffffffff81083b22>] = process_one_work+0x182/0x450
[  327.718961] =  [<ffffffff81084911>] = worker_thread+0x121/0x410
[  327.718963] =  [<ffffffff810847f0>] ? = rescuer_thread+0x430/0x430
[  327.718965] =  [<ffffffff8108b702>] kthread+0xd2/0xf0
[  327.718967] =  [<ffffffff8108b630>] ? = kthread_create_on_node+0x1c0/0x1c0
[  327.718970] =  [<ffffffff81733ca8>] = ret_from_fork+0x58/0x90
[  327.718972]  [<ffffffff8108b630>] ? = kthread_create_on_node+0x1c0/0x1c0
[  327.718973] XFS (dm-0): = Corruption detected. Unmount and run xfs_repair
[  327.729003] XFS = (dm-0): metadata I/O error: block 0x157e84da0 ("xfs_trans_read_buf_map") = error 117 numblks 8

I started another xfs_repair which did = not report any errors. After mounting the file system again (still = without quotas) I discovered that ls would write "Structure needs = cleaning" whenever it listed a certain file (and the kernel would output = error messages like those above). This was a file I didn't need, so I = tried deleting it and running yet another xfs_repair:

Phase 1 - find and verify = superblock...
Phase 2 - using internal log
        - zero = log...
        - scan filesystem freespace and = inode maps...
agi unlinked bucket 11 is 2949684875 in ag 2 = (inode=3D11539619467)
        - found root inode = chunk
Phase 3 - for each AG...
        - scan and = clear agi unlinked lists...
        - process = known inodes and perform inode discovery...
      =   - agno =3D 0
doubling cache size to 591232
      =   - agno =3D 1
        - agno =3D = 2
 =       - agno =3D 3
...
Phase 6 - check inode = connectivity...
        - resetting contents of realtime = bitmap and summary inodes
        - traversing = filesystem ...
        - traversal finished = ...
        - moving disconnected inodes to = lost+found ...
disconnected inode 11539619467, moving to = lost+found
Phase 7 - verify and correct link counts...
done

The file then turns up in lost+found = and when I "ls" it I get the same errors again. I've tried deleting it = from lost+found, but then xfs_repair finds it again with exactly the = same output as show above and puts it back.

Apart from that, everything apparently = works fine.

Is = there a way to permanently get rid of the file in lost+found? Its size = is apparently 0 bytes.

Best,

Rasmus


Intomics is a contract research = organization specialized in deriving core biological insight from large = scale data. We help our clients in the pharmaceutical industry = develop tomorrow's medicines better, faster, and cheaper through = optimized use of biomedical data.
-----------------------------------------------------------------
Hansen, Rasmus Borup         =      Intomics - from data to biology
System Administrator             =  Diplomvej 377
Scientific Programmer =             DK-2800 Kgs. = Lyngby
              =                     = Denmark
E: rbh@intomics.com           =     W: http://www.intomics.com/
P: +45 5167 7972 =                  P: +45 = 8880 7979

On 26 Jun 2015, at 08:14, Rasmus Borup Hansen <rbh@intomics.com> = wrote:

I tried mounting the file system read-only (which triggered a = quota check =E2=80=93 does this make sense when the file system is = read-only?) and then I scanned the file system for files with the = spurious inodes to see if I could find a pattern. This took quite a = while, and I didn't find any patterns, except that all the files in = directories with project quotas were affected (but there were also other = files). I'm now running xfs_repair without -n (and I had to mount and = unmount the file system before it would start). I'll report back when it = has finished.

Best,

Rasmus

Intomics is a contract = research organization specialized in deriving core biological insight = from large scale data. We help our clients in the = pharmaceutical industry develop tomorrow's medicines better, = faster, and cheaper through optimized use of biomedical data.
-----------------------------------------------------------------
Hansen, Rasmus Borup         =      Intomics - from data to biology
System Administrator             =  Diplomvej 377
Scientific Programmer =             DK-2800 Kgs. = Lyngby
              =                     = Denmark
E: rbh@intomics.com           =     W: http://www.intomics.com/
P: +45 5167 7972 =                  P: +45 = 8880 7979

On 25 Jun 2015, at 18:41, Emmanuel Florac <eflorac@intellique.com> wrote:

Le Wed, 24 Jun 2015 = 09:39:45 +0200
Rasmus Borup Hansen <rbh@intomics.com> = =C3=A9crivait:

Only the first 20 lines are included. There are currently = 250000+
more lines with "directory flags set on = non-directory inode" and the
check is still running (the = mostly small files take up around 30 TB,
so it'll probably = take a while).

I recently enabled user and = project quota and updated from 3.13.0-53.
The file system = has been heavily used for the last month or so.

Does anyone have any thoughts on this? I'm tempted to stop = using
quotas when the file system (hopefully) works again, = as it's my
impression that project quotas are not widely = used.

Did you first try = remounting then unmounting the volume to clear the
log? = That could clear out xfs_repair output.

-- =
---------------------------------------------------------------= ---------
Emmanuel Florac     | =   Direction technique
=             &n= bsp;      |   Intellique
=             &n= bsp;      | <eflorac@intellique.com>
=             &n= bsp;      |   +33 1 78 94 84 = 02
---------------------------------------------------------------= ---------

_______________________________________________
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

= --Apple-Mail=_42F8D532-E358-4D39-A906-520B0D8575E6-- From eflorac@intellique.com Thu Jul 2 04:26:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5A4EC7FA7 for ; Thu, 2 Jul 2015 04:26:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E4ACEAC003 for ; Thu, 2 Jul 2015 02:26:28 -0700 (PDT) X-ASG-Debug-ID: 1435829181-04bdf007880a580001-NocioJ Received: from smtp5-g21.free.fr (smtp5-g21.free.fr [212.27.42.5]) by cuda.sgi.com with ESMTP id 81mbSZ5I6DXJjFyd (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Jul 2015 02:26:22 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.5 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp5-g21.free.fr (Postfix) with ESMTP id B8F2FD48050; Thu, 2 Jul 2015 11:26:20 +0200 (CEST) Date: Thu, 2 Jul 2015 11:26:23 +0200 From: Emmanuel Florac To: Rasmus Borup Hansen Cc: xfs@oss.sgi.com Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Message-ID: <20150702112623.1c83d473@harpe.intellique.com> X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors In-Reply-To: References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> Organization: Intellique X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.20; i486-slackware-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp5-g21.free.fr[212.27.42.5] X-Barracuda-Start-Time: 1435829182 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20386 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Thu, 2 Jul 2015 09:58:19 +0200 Rasmus Borup Hansen =C3=A9crivait: > The file then turns up in lost+found and when I "ls" it I get the > same errors again. I've tried deleting it from lost+found, but then > xfs_repair finds it again with exactly the same output as show above > and puts it back. >=20 > Apart from that, everything apparently works fine. >=20 > Is there a way to permanently get rid of the file in lost+found? Its > size is apparently 0 bytes. You should try the latest xfs_repair (3.2.3 IIRC) instead of the stock Ubuntu version (3.1.x probably). In case you don't know how to compile it, I've just uploaded it there: http://update.intellique.com/pub/xfs_repair-3.2.3.gz md5sum : 756a28228c7e657ce8626d27850f6261 xfs_repair-3.2.3.gz Beware of binaries provided by strangers, however this one should be fine :) gunzip it before use... --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From jtulak@redhat.com Thu Jul 2 05:27:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 87E767FB9 for ; Thu, 2 Jul 2015 05:27:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 74D77304032 for ; Thu, 2 Jul 2015 03:27:45 -0700 (PDT) X-ASG-Debug-ID: 1435832861-04cbb050d10c670001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id TbuvT8KO7XarAzkG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Jul 2015 03:27:42 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t62ARIuD028800; Thu, 2 Jul 2015 06:27:18 -0400 Date: Thu, 2 Jul 2015 06:27:17 -0400 (EDT) From: Jan Tulak To: Dave Chinner Cc: hch@infradead.org, sandeen@redhat.com, xfs@oss.sgi.com Message-ID: <1629704668.22787354.1435832837879.JavaMail.zimbra@redhat.com> In-Reply-To: <20150701225535.GT22807@dastard> References: <1435766461-30961-1-git-send-email-jtulak@redhat.com> <20150701225535.GT22807@dastard> Subject: Re: [PATCH] xfsprogs: blkid is now mandatory MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: blkid is now mandatory Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.5.35] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: blkid is now mandatory Thread-Index: IcVKHbn1yo4Om/nezMVExuYSK1LTXQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1435832862 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20387 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Dave Chinner" > To: "Jan Tulak" > Cc: hch@infradead.org, sandeen@redhat.com, xfs@oss.sgi.com > Sent: Thursday, July 2, 2015 12:55:36 AM > Subject: Re: [PATCH] xfsprogs: blkid is now mandatory > > On Wed, Jul 01, 2015 at 06:01:01PM +0200, Jan Tulak wrote: > > Because blkid is here for a long time, I hereby propose a patch for > > removing support > > for NOT having blkid. The current support through set of #ifdef is prone to > > errors like > > making a patch just in one of the branches, and according to a recent talk > > between > > Christoph and Eric, it is not necessary to keep it supported. > > > > Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is > > not defined. > > It makes blkid required for compilation. > > > > Signed-off-by: Jan Tulak > > --- > > Makefile | 5 ---- > > configure.ac | 6 +---- > > doc/INSTALL | 44 ------------------------------------ > > include/builddefs.in | 1 - > > libdisk/Makefile | 4 ---- > > m4/package_blkid.m4 | 7 +++--- > > mkfs/Makefile | 21 ++++------------- > > mkfs/xfs_mkfs.c | 64 > > ---------------------------------------------------- > > 8 files changed, 10 insertions(+), 142 deletions(-) > > Given that only mkfs.xfs uses libdisk, which is now not linked to > any binary, shouldn't libdisk/ be removed completely? > > Cheers, > > Dave. True, I prepared a fixed patch with libdisk removed. Also, it looks to me like ft.sectoralign in xfs_mkfs.c is not used anymore: if (ft.sectoralign) { /* * Older Linux software RAID versions want the sector size * to match the block size to avoid switching I/O sizes. * For the legacy libdisk case we thus set the sector size to * match the block size. For systems using libblkid we assume * that the kernel is recent enough to not require this and * ft.sectoralign will never be set. */ sectorsize = blocksize; } So I removed it too. Jan -- Jan Tulak jtulak@redhat.com From jtulak@redhat.com Thu Jul 2 05:43:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C26127FBB for ; Thu, 2 Jul 2015 05:43:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id ABB1C304048 for ; Thu, 2 Jul 2015 03:43:24 -0700 (PDT) X-ASG-Debug-ID: 1435833801-04cbb050d10cab0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Hxe9YTodXVTErBF9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Jul 2015 03:43:21 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id E8594365073; Thu, 2 Jul 2015 10:43:20 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (dhcp-1-112.brq.redhat.com [10.34.1.112]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t62AhGaR007853; Thu, 2 Jul 2015 06:43:17 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: sandeen@redhat.com, hch@infradead.org, david@fromorbit.com Subject: [PATCH v2] xfsprogs: blkid is now mandatory Date: Thu, 2 Jul 2015 12:43:16 +0200 X-ASG-Orig-Subj: [PATCH v2] xfsprogs: blkid is now mandatory Message-Id: <1435833796-24004-1-git-send-email-jtulak@redhat.com> In-Reply-To: <1629704668.22787354.1435832837879.JavaMail.zimbra@redhat.com> References: <1629704668.22787354.1435832837879.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1435833801 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Because blkid is here for a long time, I hereby propose a patch for removing support for NOT having blkid. The current support through set of #ifdef is prone to errors like making a patch just in one of the branches, and according to a recent talk between Christoph and Eric, it is not necessary to keep it supported. Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is not defined. The only use of libdisk was in the removed code, so remove libdisk too. It makes blkid required for compilation. Signed-off-by: Jan Tulak --- Makefile | 7 +- configure.ac | 6 +- debian/rules | 2 +- doc/INSTALL | 44 ----- include/builddefs.in | 2 - libdisk/Makefile | 37 ----- libdisk/dm.c | 112 ------------- libdisk/drivers.c | 82 ---------- libdisk/drivers.h | 45 ------ libdisk/evms.c | 68 -------- libdisk/evms.h | 32 ---- libdisk/fstype.c | 442 --------------------------------------------------- libdisk/fstype.h | 334 -------------------------------------- libdisk/lvm.c | 117 -------------- libdisk/md.c | 119 -------------- libdisk/md.h | 67 -------- libdisk/pttype.c | 118 -------------- libdisk/pttype.h | 50 ------ libdisk/xvm.c | 93 ----------- libdisk/xvm.h | 53 ------ m4/package_blkid.m4 | 7 +- mkfs/Makefile | 18 +-- mkfs/xfs_mkfs.c | 79 +-------- po/de.po | 51 ------ po/pl.po | 49 ------ 25 files changed, 10 insertions(+), 2024 deletions(-) delete mode 100644 libdisk/Makefile delete mode 100644 libdisk/dm.c delete mode 100644 libdisk/drivers.c delete mode 100644 libdisk/drivers.h delete mode 100644 libdisk/evms.c delete mode 100644 libdisk/evms.h delete mode 100644 libdisk/fstype.c delete mode 100644 libdisk/fstype.h delete mode 100644 libdisk/lvm.c delete mode 100644 libdisk/md.c delete mode 100644 libdisk/md.h delete mode 100644 libdisk/pttype.c delete mode 100644 libdisk/pttype.h delete mode 100644 libdisk/xvm.c delete mode 100644 libdisk/xvm.h diff --git a/Makefile b/Makefile index d04f853..dee58a9 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ LDIRT += $(SRCTAR) endif -DLIB_SUBDIRS = libxlog libxcmd libhandle libdisk +DLIB_SUBDIRS = libxlog libxcmd libhandle LIB_SUBDIRS = libxfs $(DLIB_SUBDIRS) TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ mdrestore repair rtcp m4 man doc po debian @@ -66,11 +66,6 @@ io: libxcmd libhandle quota: libxcmd repair: libxlog - -ifneq ($(ENABLE_BLKID), yes) -mkfs: libdisk -endif - ifeq ($(HAVE_BUILDDEFS), yes) include $(BUILDRULES) else diff --git a/configure.ac b/configure.ac index ae17c68..108556b 100644 --- a/configure.ac +++ b/configure.ac @@ -37,10 +37,6 @@ AC_ARG_ENABLE(termcap, test $enable_termcap = yes && libtermcap="-ltermcap",) AC_SUBST(libtermcap) -# AC_HAVE_BLKID_TOPO below wil find the library & check for topo support -AC_ARG_ENABLE(blkid, -[ --enable-blkid=[yes/no] Enable block device id library [default=yes]],, - enable_blkid=yes) AC_ARG_ENABLE(lib64, [ --enable-lib64=[yes/no] Enable lib64 support [default=yes]],, @@ -111,7 +107,7 @@ AC_HAVE_FALLOCATE AC_HAVE_FIEMAP AC_HAVE_PREADV AC_HAVE_SYNC_FILE_RANGE -AC_HAVE_BLKID_TOPO($enable_blkid) +AC_HAVE_BLKID_TOPO(yes) AC_HAVE_READDIR AC_CHECK_SIZEOF([long]) diff --git a/debian/rules b/debian/rules index 2be2773..ee3f310 100755 --- a/debian/rules +++ b/debian/rules @@ -44,7 +44,7 @@ dibuild: @echo "== dpkg-buildpackage: installer" 1>&2 if [ ! -f mkfs/mkfs.xfs-$(bootpkg) ]; then \ $(diopts) $(MAKE) include/platform_defs.h; \ - for dir in include libxfs libdisk mkfs; do \ + for dir in include libxfs mkfs; do \ $(MAKE) -C $$dir; \ done; \ mv mkfs/mkfs.xfs mkfs/mkfs.xfs-$(bootpkg); \ diff --git a/doc/INSTALL b/doc/INSTALL index ba3472b..ae8b64e 100644 --- a/doc/INSTALL +++ b/doc/INSTALL @@ -48,50 +48,6 @@ Linux Instructions before running make or Makepkgs. -Mac OS X Instructions -===================== - -0. Note: since there is no XFS implementation on Mac OS X, you are - severely limited in what you can do. mkfs.xfs(8), xfs_db(8) and - xfs_repair(8) are the only functional tools on this platform, as - they do not interact with the XFS kernel code at all. Still, it - can be useful to have access to these utilities from Mac OS X in - a dual boot configuration, for example. - -1. Configure, build and install the package - - The xfsprogs package uses autoconf/configure and expects a GNU build - environment (your platform must at least have both autoconf, make, - and glibtool). - - You will also need to have built and installed the UUID library which - is provided by the e2fsprogs source package. - - Building libuuid: - - [download; unzip/untar e2fsprogs; cd e2fsprogs] - $ ./configure --prefix=/usr --mandir=/usr/share/man - $ make lib/ext2fs/ext2_types.h - $ cd lib/uuid - $ make - $ su root - # make install - [verify that you now have a /usr/lib/libuuid.a] - - Building xfsprogs: - - [firstly set these environment variables to these values] - TAR=/usr/bin/gnutar - LIBTOOL=/usr/bin/glibtool - INSTALL_GROUP=wheel - LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no" - - $ make - $ su root - # make install - [and optionally, for the development libraries and headers] - # make install-dev - IRIX Instructions ================= diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..925761d 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -37,7 +37,6 @@ LIBBLKID = @libblkid@ LIBXFS = $(TOPDIR)/libxfs/libxfs.la LIBXCMD = $(TOPDIR)/libxcmd/libxcmd.la LIBXLOG = $(TOPDIR)/libxlog/libxlog.la -LIBDISK = $(TOPDIR)/libdisk/libdisk.la LIBHANDLE = $(TOPDIR)/libhandle/libhandle.la PKG_NAME = @pkg_name@ @@ -89,7 +88,6 @@ ENABLE_SHARED = @enable_shared@ ENABLE_GETTEXT = @enable_gettext@ ENABLE_EDITLINE = @enable_editline@ ENABLE_READLINE = @enable_readline@ -ENABLE_BLKID = @enable_blkid@ HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ diff --git a/libdisk/Makefile b/libdisk/Makefile deleted file mode 100644 index b058a9f..0000000 --- a/libdisk/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright (c) 2000-2001,2004 Silicon Graphics, Inc. All Rights Reserved. -# - -TOPDIR = .. -include $(TOPDIR)/include/builddefs - -LTLIBRARY = libdisk.la -LT_CURRENT = 0 -LT_REVISION = 0 -LT_AGE = 0 - -CFILES = drivers.c fstype.c pttype.c -HFILES = drivers.h fstype.h pttype.h md.h xvm.h evms.h -LINUX_DRIVERS = dm.c md.c xvm.c evms.c lvm.c - -ifeq ($(PKG_PLATFORM),linux) -CFILES += $(LINUX_DRIVERS) -else -LSRCFILES = $(LINUX_DRIVERS) -endif - -ifneq ($(ENABLE_BLKID), yes) -default: ltdepend $(LTLIBRARY) -else -default: -endif - -include $(BUILDRULES) - -install: default - -install-dev: default - -install-qa: install-dev - --include .ltdep diff --git a/libdisk/dm.c b/libdisk/dm.c deleted file mode 100644 index dfc1f37..0000000 --- a/libdisk/dm.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2004-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" - -int -mnt_is_dm_subvol( - dev_t dev) -{ - return get_driver_block_major("device-mapper", major(dev)); -} - -int -dm_get_subvol_stripe( - char *dfile, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - int count, stripes = 0, stripesize = 0; - int dmpipe[2]; - char *largv[7]; - FILE *stream; - long long offset, size; - static char *command = "table"; /* dmsetup table /dev/xxx */ - char major_str[4], minor_str[4]; - - if (!mnt_is_dm_subvol(sb->st_rdev)) - return 0; - - /* Quest for dmsetup */ - if (!access("/usr/local/sbin/dmsetup", R_OK|X_OK)) - largv[0] = "/usr/local/sbin/dmsetup"; - else if (!access("/usr/sbin/dmsetup", R_OK|X_OK)) - largv[0] = "/usr/sbin/dmsetup"; - else if (!access("/sbin/dmsetup", R_OK|X_OK)) - largv[0] = "/sbin/dmsetup"; - else { - fprintf(stderr, - _("Warning - device mapper device, but no dmsetup(8) found\n")); - return 0; - } - - snprintf(major_str, 4, "%d", major(sb->st_rdev)); - snprintf(minor_str, 4, "%d", minor(sb->st_rdev)); - - largv[1] = command; - largv[2] = "-j"; - largv[3] = major_str; - largv[4] = "-m"; - largv[5] = minor_str; - largv[6] = NULL; - - /* Open pipe */ - if (pipe(dmpipe) < 0) { - fprintf(stderr, _("Could not open pipe\n")); - exit(1); - } - - /* Spawn dmsetup */ - switch (fork()) { - case 0: - /* Plumbing */ - close(dmpipe[0]); - - if (dmpipe[1] != STDOUT_FILENO) - dup2(dmpipe[1], STDOUT_FILENO); - - execv(largv[0], largv); - - fprintf(stderr, _("Failed to execute %s\n"), largv[0]); - exit(1); - - case -1: - fprintf(stderr, _("Failed forking dmsetup process\n")); - exit(1); - - default: - break; - } - - close(dmpipe[1]); - stream = fdopen(dmpipe[0], "r"); - count = fscanf(stream, "%lld %lld striped %d %d ", - &offset, &size, &stripes, &stripesize); - fclose(stream); - if (count != 4) - return 0; - - /* Update sizes */ - *sunit = stripesize; - *swidth = (stripes * stripesize); - *sectalign = 0; - return 1; -} diff --git a/libdisk/drivers.c b/libdisk/drivers.c deleted file mode 100644 index 26c6ec1..0000000 --- a/libdisk/drivers.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" - -void -get_subvol_stripe_wrapper( - char *dev, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign) -{ - struct stat64 sb; - - if (dev == NULL) - return; - - if (stat64(dev, &sb)) { - fprintf(stderr, _("Cannot stat %s: %s\n"), - dev, strerror(errno)); - exit(1); - } - - if ( dm_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if ( md_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if ( lvm_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if ( xvm_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if (evms_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - - /* ... add new device drivers here */ -} - -#define DEVICES "/proc/devices" - -/* - * General purpose routine which dredges through procfs trying to - * match up device driver names with the associated major numbers - * being used in the running kernel. - */ -int -get_driver_block_major( - const char *driver, - int major) -{ - FILE *f; - char buf[64], puf[64]; - int dmajor, match = 0; - - if ((f = fopen(DEVICES, "r")) == NULL) - return match; - while (fgets(buf, sizeof(buf), f)) /* skip to block dev section */ - if (strncmp("Block devices:\n", buf, sizeof(buf)) == 0) - break; - while (fgets(buf, sizeof(buf), f)) - if ((sscanf(buf, "%u %s\n", &dmajor, puf) == 2) && - (strncmp(puf, driver, sizeof(puf)) == 0) && - (dmajor == major)) - match = 1; - fclose(f); - return match; -} diff --git a/libdisk/drivers.h b/libdisk/drivers.h deleted file mode 100644 index 4ede58b..0000000 --- a/libdisk/drivers.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include - -/* - * This stuff is all very platform specific. - */ - -#ifdef __linux__ -extern int dm_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int md_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int lvm_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int xvm_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int evms_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -#else -#define stat64 stat -#define dm_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define md_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define lvm_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define xvm_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define evms_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#endif diff --git a/libdisk/evms.c b/libdisk/evms.c deleted file mode 100644 index 4c22ee1..0000000 --- a/libdisk/evms.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2002 - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will 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 to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include "evms.h" - -int -mnt_is_evms_subvol( - dev_t dev) -{ - if (major(dev) == EVMS_MAJOR) - return 1; - return get_driver_block_major("evms", major(dev)); -} - -int -evms_get_subvol_stripe( - char *device, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - if (mnt_is_evms_subvol(sb->st_rdev)) { - evms_vol_stripe_info_t info; - int fd; - - fd = open(device, O_RDONLY); - if (fd == -1) - return 0; - - if (ioctl(fd, EVMS_GET_VOL_STRIPE_INFO, &info)) { - close(fd); - return 0; - } - - /* Update sizes */ - *sunit = info.size; - *swidth = *sunit * info.width; - *sectalign = 0; - - close(fd); - return 1; - } - return 0; -} diff --git a/libdisk/evms.h b/libdisk/evms.h deleted file mode 100644 index aab797b..0000000 --- a/libdisk/evms.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2002 - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will 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 to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#define EVMS_MAJOR 117 -#define EVMS_GET_VOL_STRIPE_INFO \ - _IOR(EVMS_MAJOR, 0xF0, struct evms_vol_stripe_info_s) - -/* - * struct evms_vol_stripe_info_s - contains stripe information for a volume - * - * unit: the stripe unit specified in 512 byte block units - * width: the number of stripe members or RAID data disks - */ -typedef struct evms_vol_stripe_info_s { - u_int32_t size; - u_int32_t width; -} evms_vol_stripe_info_t; diff --git a/libdisk/fstype.c b/libdisk/fstype.c deleted file mode 100644 index 548f297..0000000 --- a/libdisk/fstype.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include "fstype.h" - -/* - * From mount(8) source by Andries Brouwer. Hacked for XFS by mkp. - * Recent sync's to mount source: - * - util-linux-2.10o ... 06 Sep 00 - * - util-linux-2.10r ... 06 Dec 00 - * - util-linux-2.11g ... 02 Jul 01 - * - util-linux-2.11u ... 24 Aug 02 - * - util-linux-2.11z ... 13 May 03 - */ - -#define SIZE(a) (sizeof(a)/sizeof(a[0])) - -/* Most file system types can be recognized by a `magic' number - in the superblock. Note that the order of the tests is - significant: by coincidence a filesystem can have the - magic numbers for several file system types simultaneously. - For example, the romfs magic lives in the 1st sector; - xiafs does not touch the 1st sector and has its magic in - the 2nd sector; ext2 does not touch the first two sectors. */ - -static inline unsigned short -swapped(unsigned short a) { - return (a>>8) | (a<<8); -} - -/* - Probes the device and attempts to determine the type of filesystem - contained within. - - Original routine by ; made into a function - for mount(8) by Mike Grupenhoff . - Corrected the test for xiafs - aeb - Read the superblock only once - aeb - Added a very weak heuristic for vfat - aeb - Added iso9660, minix-v2, romfs, qnx4, udf, vxfs, swap - aeb - Added a test for high sierra (iso9660) - quinlan@bucknell.edu - Added ufs from a patch by jj. But maybe there are several types of ufs? - Added ntfs from a patch by Richard Russon. - Added xfs - 2000-03-21 Martin K. Petersen - Added cramfs, hfs, hpfs, adfs - Sepp Wijnands - Added ext3 - Andrew Morton - Added jfs - Christoph Hellwig - Added sysv - Tim Launchbury - Added udf - Bryce Nesbitt - Added gfs/gfs2, btrfs - Eric Sandeen -*/ - -/* - * udf magic - I find that trying to mount garbage as an udf fs - * causes a very large kernel delay, almost killing the machine. - * So, we do not try udf unless there is positive evidence that it - * might work. Strings below taken from ECMA 167. - */ -/* - * It seems that before udf 2.00 the volume descriptor was not well - * defined. For 2.00 you're supposed to keep scanning records until - * you find one NOT in this list. (See ECMA 2/8.3.1). - */ -static char -*udf_magic[] = { "BEA01", "BOOT2", "CD001", "CDW02", "NSR02", - "NSR03", "TEA01" }; - - -static int -may_be_udf(const char *id) { - char **m; - - for (m = udf_magic; m - udf_magic < SIZE(udf_magic); m++) - if (!strncmp(*m, id, 5)) - return 1; - return 0; -} - -/* we saw "CD001" - may be iso9660 or udf - Bryce Nesbitt */ -static int -is_really_udf(int fd) { - int j, bs; - struct iso_volume_descriptor isosb; - - /* determine the block size by scanning in 2K increments - (block sizes larger than 2K will be null padded) */ - for (bs = 1; bs < 16; bs++) { - lseek(fd, bs*2048+32768, SEEK_SET); - if (read(fd, (char *)&isosb, sizeof(isosb)) != sizeof(isosb)) - return 0; - if (isosb.id[0]) - break; - } - - /* Scan up to another 64 blocks looking for additional VSD's */ - for (j = 1; j < 64; j++) { - if (j > 1) { - lseek(fd, j*bs*2048+32768, SEEK_SET); - if (read(fd, (char *)&isosb, sizeof(isosb)) - != sizeof(isosb)) - return 0; - } - /* If we find NSR0x then call it udf: - NSR01 for UDF 1.00 - NSR02 for UDF 1.50 - NSR03 for UDF 2.00 */ - if (!strncmp(isosb.id, "NSR0", 4)) - return 1; - if (!may_be_udf(isosb.id)) - return 0; - } - - return 0; -} - -static int -may_be_swap(const char *s) { - return (strncmp(s-10, "SWAP-SPACE", 10) == 0 || - strncmp(s-10, "SWAPSPACE2", 10) == 0); -} - -/* rather weak necessary condition */ -static int -may_be_adfs(const struct adfs_super_block *sb) { - char *p; - int sum; - - p = (char *)sb->s_checksum; - sum = 0; - while(--p != (char *)sb) - sum = (sum >> 8) + (sum & 0xff) + *p; - - return (sum & 0xff) == sb->s_checksum[0]; -} - -static int is_reiserfs_magic_string (struct reiserfs_super_block * rs) -{ - return (!strncmp (rs->s_magic, REISERFS_SUPER_MAGIC_STRING, - strlen ( REISERFS_SUPER_MAGIC_STRING)) || - !strncmp (rs->s_magic, REISER2FS_SUPER_MAGIC_STRING, - strlen ( REISER2FS_SUPER_MAGIC_STRING))); -} - -char * -fstype(const char *device) { - int fd; - char *type = NULL; - union { - struct minix_super_block ms; - struct ext_super_block es; - struct ext2_super_block e2s; - struct vxfs_super_block vs; - struct hfs_super_block hs; - } sb; /* stuff at 1024 */ - union { - struct xiafs_super_block xiasb; - char romfs_magic[8]; - char qnx4fs_magic[10]; /* ignore first 4 bytes */ - unsigned int bfs_magic; - struct ntfs_super_block ntfssb; - struct fat_super_block fatsb; - struct xfs_super_block xfsb; - struct cramfs_super_block cramfssb; - } xsb; - struct ufs_super_block ufssb; - union { - struct iso_volume_descriptor iso; - struct hs_volume_descriptor hs; - } isosb; - struct reiserfs_super_block reiserfssb; /* block 64 or 8 */ - struct jfs_super_block jfssb; /* block 32 */ - struct hpfs_super_block hpfssb; - struct adfs_super_block adfssb; - struct sysv_super_block svsb; - struct gfs2_sb gfs2sb; - struct btrfs_super_block btrfssb; - struct stat statbuf; - - /* opening and reading an arbitrary unknown path can have - undesired side effects - first check that `device' refers - to a block device or ordinary file */ - if (stat (device, &statbuf) || - !(S_ISBLK(statbuf.st_mode) || S_ISREG(statbuf.st_mode))) - return NULL; - - fd = open(device, O_RDONLY); - if (fd < 0) - return NULL; - - /* do seeks and reads in disk order, otherwise a very short - partition may cause a failure because of read error */ - - if (!type) { - /* block 0 */ - if (lseek(fd, 0, SEEK_SET) != 0 - || read(fd, (char *) &xsb, sizeof(xsb)) != sizeof(xsb)) - goto try_iso9660; - /* Gyorgy Kovesdi: none of my photocds has a readable block 0 */ - - if (xiafsmagic(xsb.xiasb) == _XIAFS_SUPER_MAGIC) - type = "xiafs"; - else if(!strncmp(xsb.romfs_magic, "-rom1fs-", 8)) - type = "romfs"; - else if(!strncmp(xsb.xfsb.s_magic, XFS_SUPER_MAGIC, 4)) - type = "xfs"; - else if(!strncmp(xsb.qnx4fs_magic+4, "QNX4FS", 6)) - type = "qnx4"; - else if(xsb.bfs_magic == 0x1badface) - type = "bfs"; - else if(!strncmp(xsb.ntfssb.s_magic, NTFS_SUPER_MAGIC, - sizeof(xsb.ntfssb.s_magic))) - type = "ntfs"; - else if(cramfsmagic(xsb.cramfssb) == CRAMFS_SUPER_MAGIC || - cramfsmagic(xsb.cramfssb) == CRAMFS_SUPER_MAGIC_BE) - type = "cramfs"; - else if ((!strncmp(xsb.fatsb.s_os, "MSDOS", 5) || - !strncmp(xsb.fatsb.s_os, "MSWIN", 5) || - !strncmp(xsb.fatsb.s_os, "MTOOL", 5) || - !strncmp(xsb.fatsb.s_os, "mkdosfs", 7) || - !strncmp(xsb.fatsb.s_os, "kmkdosfs", 8) || - /* Michal Svec: created by fdformat, old msdos utility for - formatting large (1.7) floppy disks. */ - !strncmp(xsb.fatsb.s_os, "CH-FOR18", 8)) - && (!strncmp(xsb.fatsb.s_fs, "FAT12 ", 8) || - !strncmp(xsb.fatsb.s_fs, "FAT16 ", 8) || - !strncmp(xsb.fatsb.s_fs2, "FAT32 ", 8))) - type = "vfat"; /* only guessing - might as well be fat or umsdos */ - } - - if (!type) { - /* sector 1 */ - if (lseek(fd, 512 , SEEK_SET) != 512 - || read(fd, (char *) &svsb, sizeof(svsb)) != sizeof(svsb)) - goto io_error; - if (sysvmagic(svsb) == SYSV_SUPER_MAGIC ) - type = "sysv"; - } - - if (!type) { - /* block 1 */ - if (lseek(fd, 1024, SEEK_SET) != 1024 || - read(fd, (char *) &sb, sizeof(sb)) != sizeof(sb)) - goto io_error; - - /* ext2 has magic in little-endian on disk, so "swapped" is - superfluous; however, there have existed strange byteswapped - PPC ext2 systems */ - if (ext2magic(sb.e2s) == EXT2_SUPER_MAGIC || - ext2magic(sb.e2s) == EXT2_PRE_02B_MAGIC || - ext2magic(sb.e2s) == swapped(EXT2_SUPER_MAGIC)) { - type = "ext2"; - - /* maybe even ext3? */ - if ((assemble4le(sb.e2s.s_feature_compat) - & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && - assemble4le(sb.e2s.s_journal_inum) != 0) - type = "ext3"; /* "ext3,ext2" */ - } - - else if (minixmagic(sb.ms) == MINIX_SUPER_MAGIC || - minixmagic(sb.ms) == MINIX_SUPER_MAGIC2 || - minixmagic(sb.ms) == swapped(MINIX_SUPER_MAGIC2) || - minixmagic(sb.ms) == MINIX2_SUPER_MAGIC || - minixmagic(sb.ms) == MINIX2_SUPER_MAGIC2) - type = "minix"; - - else if (extmagic(sb.es) == EXT_SUPER_MAGIC) - type = "ext"; - - else if (vxfsmagic(sb.vs) == VXFS_SUPER_MAGIC) - type = "vxfs"; - - else if (hfsmagic(sb.hs) == swapped(HFS_SUPER_MAGIC) || - (hfsmagic(sb.hs) == swapped(HFSPLUS_SUPER_MAGIC) && - hfsversion(sb.hs) == swapped(HFSPLUS_SUPER_VERSION))) - type = "hfs"; - } - - if (!type) { - /* block 3 */ - if (lseek(fd, 0xc00, SEEK_SET) != 0xc00 - || read(fd, (char *) &adfssb, sizeof(adfssb)) != sizeof(adfssb)) - goto io_error; - - /* only a weak test */ - if (may_be_adfs(&adfssb) - && (adfsblksize(adfssb) >= 8 && - adfsblksize(adfssb) <= 10)) - type = "adfs"; - } - - if (!type) { - int mag; - - /* block 8 */ - if (lseek(fd, 8192, SEEK_SET) != 8192 - || read(fd, (char *) &ufssb, sizeof(ufssb)) != sizeof(ufssb)) - goto io_error; - - mag = ufsmagic(ufssb); - if (mag == UFS_SUPER_MAGIC_LE || mag == UFS_SUPER_MAGIC_BE) - type = "ufs"; - } - - if (!type) { - /* block 8 */ - if (lseek(fd, REISERFS_OLD_DISK_OFFSET_IN_BYTES, SEEK_SET) != - REISERFS_OLD_DISK_OFFSET_IN_BYTES - || read(fd, (char *) &reiserfssb, sizeof(reiserfssb)) != - sizeof(reiserfssb)) - goto io_error; - if (is_reiserfs_magic_string(&reiserfssb)) - type = "reiserfs"; - } - - if (!type) { - /* block 8 */ - if (lseek(fd, 0x2000, SEEK_SET) != 0x2000 - || read(fd, (char *) &hpfssb, sizeof(hpfssb)) != sizeof(hpfssb)) - goto io_error; - - if (hpfsmagic(hpfssb) == HPFS_SUPER_MAGIC) - type = "hpfs"; - } - - if (!type) { - /* block 32 */ - if (lseek(fd, JFS_SUPER1_OFF, SEEK_SET) != JFS_SUPER1_OFF - || read(fd, (char *) &jfssb, sizeof(jfssb)) != sizeof(jfssb)) - goto io_error; - if (!strncmp(jfssb.s_magic, JFS_MAGIC, 4)) - type = "jfs"; - } - - if (!type) { - /* block 32 */ - try_iso9660: - if (lseek(fd, 0x8000, SEEK_SET) != 0x8000 - || read(fd, (char *) &isosb, sizeof(isosb)) != sizeof(isosb)) - goto io_error; - - if (strncmp(isosb.hs.id, HS_STANDARD_ID, sizeof(isosb.hs.id)) == 0) { - /* "CDROM" */ - type = "iso9660"; - } else if (strncmp(isosb.iso.id, ISO_STANDARD_ID, - sizeof(isosb.iso.id)) == 0) { - /* CD001 */ - type = "iso9660"; - if (is_really_udf(fd)) - type = "udf"; - } else if (may_be_udf(isosb.iso.id)) - type = "udf"; - } - - if (!type) { - /* block 64 */ - if (lseek(fd, REISERFS_DISK_OFFSET_IN_BYTES, SEEK_SET) != - REISERFS_DISK_OFFSET_IN_BYTES - || read(fd, (char *) &reiserfssb, sizeof(reiserfssb)) != - sizeof(reiserfssb)) - goto io_error; - if (is_reiserfs_magic_string(&reiserfssb)) - type = "reiserfs"; - } - - if (!type) { - /* block 64 */ - if (lseek(fd, GFS_SUPERBLOCK_OFFSET, SEEK_SET) != GFS_SUPERBLOCK_OFFSET - || read(fd, (char *) &gfs2sb, sizeof(gfs2sb)) != sizeof(gfs2sb)) - goto io_error; - if (gfsmagic(gfs2sb)) { - if (gfsformat(gfs2sb) == GFS_FORMAT_FS && - gfsmultiformat(gfs2sb) == GFS_FORMAT_MULTI) - type = "gfs"; - else if (gfsformat(gfs2sb) == GFS2_FORMAT_FS && - gfsmultiformat(gfs2sb) == GFS2_FORMAT_MULTI) - type = "gfs2"; - } - } - - if (!type) { - /* block 64 */ - if (lseek(fd, BTRFS_SUPER_INFO_OFFSET, SEEK_SET) != BTRFS_SUPER_INFO_OFFSET - || read(fd, (char *) &btrfssb, sizeof(btrfssb)) != sizeof(btrfssb)) - goto io_error; - if (!strncmp((char *)(btrfssb.magic), BTRFS_MAGIC, - sizeof(btrfssb.magic))) { - type = "btrfs"; - } - } - - if (!type) { - /* perhaps the user tries to mount the swap space - on a new disk; warn her before she does mkfs on it */ - int pagesize = getpagesize(); - int rd; - char buf[128 * 1024]; /* 64k is current max pagesize */ - - if (pagesize > sizeof(buf)) - abort(); - - rd = pagesize; - if (rd < 8192) - rd = 8192; - if (rd > sizeof(buf)) - rd = sizeof(buf); - if (lseek(fd, 0, SEEK_SET) != 0 - || read(fd, buf, rd) != rd) - goto io_error; - if (may_be_swap(buf+pagesize) || - may_be_swap(buf+4096) || may_be_swap(buf+8192)) - type = "swap"; - } - - close (fd); - return(type); - -io_error: - close(fd); - return NULL; -} diff --git a/libdisk/fstype.h b/libdisk/fstype.h deleted file mode 100644 index c0abbab..0000000 --- a/libdisk/fstype.h +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#undef XFS_SUPER_MAGIC - -/* - * From mount(8) source by Andries Brouwer. Hacked for XFS by mkp. - * Recent sync's to mount source: - * - util-linux-2.10o ... 06 Sep 00 - * - util-linux-2.10r ... 06 Dec 00 - * - util-linux-2.11g ... 02 Jul 01 - * - util-linux-2.11u ... 24 Aug 02 - * - util-linux-2.11z ... 13 May 03 - */ - -/* Including became more and more painful. - Below a very abbreviated version of some declarations, - only designed to be able to check a magic number - in case no filesystem type was given. */ - -#define MINIX_SUPER_MAGIC 0x137F /* minix v1, 14 char names */ -#define MINIX_SUPER_MAGIC2 0x138F /* minix v1, 30 char names */ -#define MINIX2_SUPER_MAGIC 0x2468 /* minix v2, 14 char names */ -#define MINIX2_SUPER_MAGIC2 0x2478 /* minix v2, 30 char names */ -struct minix_super_block { - char s_dummy[16]; - char s_magic[2]; -}; -#define minixmagic(s) assemble2le(s.s_magic) - -#define ISODCL(from, to) (to - from + 1) -#define ISO_STANDARD_ID "CD001" -struct iso_volume_descriptor { - char type[ISODCL(1,1)]; /* 711 */ - char id[ISODCL(2,6)]; - char version[ISODCL(7,7)]; - char data[ISODCL(8,2048)]; -}; - -#define HS_STANDARD_ID "CDROM" -struct hs_volume_descriptor { - char foo[ISODCL ( 1, 8)]; /* 733 */ - char type[ISODCL ( 9, 9)]; /* 711 */ - char id[ISODCL ( 10, 14)]; - char version[ISODCL ( 15, 15)]; /* 711 */ - char data[ISODCL(16,2048)]; -}; - -#define EXT_SUPER_MAGIC 0x137D -struct ext_super_block { - char s_dummy[56]; - char s_magic[2]; -}; -#define extmagic(s) assemble2le(s.s_magic) - -#define EXT2_PRE_02B_MAGIC 0xEF51 -#define EXT2_SUPER_MAGIC 0xEF53 -#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 -struct ext2_super_block { - char s_dummy1[56]; - char s_magic[2]; - char s_dummy2[34]; - char s_feature_compat[4]; - char s_feature_incompat[4]; - char s_feature_ro_compat[4]; - char s_uuid[16]; - char s_volume_name[16]; - char s_dummy3[88]; - char s_journal_inum[4]; /* ext3 only */ -}; -#define ext2magic(s) assemble2le(s.s_magic) - -struct reiserfs_super_block -{ - char s_block_count[4]; - char s_free_blocks[4]; - char s_root_block[4]; - char s_journal_block[4]; - char s_journal_dev[4]; - char s_orig_journal_size[4]; - char s_journal_trans_max[4]; - char s_journal_block_count[4]; - char s_journal_max_batch[4]; - char s_journal_max_commit_age[4]; - char s_journal_max_trans_age[4]; - char s_blocksize[2]; - char s_oid_maxsize[2]; - char s_oid_cursize[2]; - char s_state[2]; - char s_magic[12]; -}; -#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs" -#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs" -#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) -/* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ -#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) - -#define _XIAFS_SUPER_MAGIC 0x012FD16D -struct xiafs_super_block { - char s_boot_segment[512]; /* 1st sector reserved for boot */ - char s_dummy[60]; - char s_magic[4]; -}; -#define xiafsmagic(s) assemble4le(s.s_magic) - -/* From jj@sunsite.ms.mff.cuni.cz Mon Mar 23 15:19:05 1998 */ -#define UFS_SUPER_MAGIC_LE 0x00011954 -#define UFS_SUPER_MAGIC_BE 0x54190100 -struct ufs_super_block { - char s_dummy[0x55c]; - char s_magic[4]; -}; -#define ufsmagic(s) assemble4le(s.s_magic) - -/* From Richard.Russon@ait.co.uk Wed Feb 24 08:05:27 1999 */ -#define NTFS_SUPER_MAGIC "NTFS" -struct ntfs_super_block { - char s_dummy[3]; - char s_magic[4]; -}; - -/* From inspection of a few FAT filesystems - aeb */ -/* Unfortunately I find almost the same thing on an extended partition; - it looks like a primary has some directory entries where the extended - has a partition table: IO.SYS, MSDOS.SYS, WINBOOT.SYS */ -struct fat_super_block { - char s_dummy[3]; - char s_os[8]; /* "MSDOS5.0" or "MSWIN4.0" or "MSWIN4.1" */ - /* mtools-3.9.4 writes "MTOOL394" */ - char s_dummy2[32]; - char s_label[11]; /* for DOS? */ - char s_fs[8]; /* "FAT12 " or "FAT16 " or all zero */ - /* OS/2 BM has "FAT " here. */ - char s_dummy3[9]; - char s_label2[11]; /* for Windows? */ - char s_fs2[8]; /* garbage or "FAT32 " */ -}; - -#define XFS_SUPER_MAGIC "XFSB" -struct xfs_super_block { - char s_magic[4]; - char s_dummy[28]; - char s_uuid[16]; - char s_dummy2[60]; - char s_fname[12]; -}; - -#define CRAMFS_SUPER_MAGIC 0x28cd3d45 -#define CRAMFS_SUPER_MAGIC_BE 0x453dcd28 -struct cramfs_super_block { - char s_magic[4]; - char s_dummy[12]; - char s_id[16]; -}; -#define cramfsmagic(s) assemble4le(s.s_magic) - -#define HFS_SUPER_MAGIC 0x4244 -#define HFSPLUS_SUPER_MAGIC 0x482B -#define HFSPLUS_SUPER_VERSION 0x004 -struct hfs_super_block { - char s_magic[2]; - char s_version[2]; -}; -#define hfsmagic(s) assemble2le(s.s_magic) -#define hfsversion(s) assemble2le(s.s_version) - -#define HPFS_SUPER_MAGIC 0xf995e849 -struct hpfs_super_block { - char s_magic[4]; - char s_magic2[4]; -}; -#define hpfsmagic(s) assemble4le(s.s_magic) - -struct adfs_super_block { - char s_dummy[448]; - char s_blksize[1]; - char s_dummy2[62]; - char s_checksum[1]; -}; -#define adfsblksize(s) ((uint) s.s_blksize[0]) - -/* found in first 4 bytes of block 1 */ -struct vxfs_super_block { - char s_magic[4]; -}; -#define vxfsmagic(s) assemble4le(s.s_magic) -#define VXFS_SUPER_MAGIC 0xa501FCF5 - -struct jfs_super_block { - char s_magic[4]; - char s_version[4]; - char s_dummy1[93]; - char s_fpack[11]; - char s_dummy2[24]; - char s_uuid[16]; - char s_label[16]; -}; -#define JFS_SUPER1_OFF 0x8000 -#define JFS_MAGIC "JFS1" - -struct sysv_super_block { - char s_dummy1[504]; - char s_magic[4]; - char type[4]; -}; -#define sysvmagic(s) assemble4le(s.s_magic) -#define SYSV_SUPER_MAGIC 0xfd187e20 - -struct mdp_super_block { - char md_magic[4]; -}; -#define MD_SB_MAGIC 0xa92b4efc -#define mdsbmagic(s) assemble4le(s.md_magic) - -struct ocfs_volume_header { - char minor_version[4]; - char major_version[4]; - char signature[128]; -}; - -struct ocfs_volume_label { - char disk_lock[48]; - char label[64]; - char label_len[2]; -}; - -#define ocfslabellen(o) assemble2le(o.label_len) -#define OCFS_MAGIC "OracleCFS" - -/* Common gfs/gfs2 constants: */ -#define GFS_MAGIC 0x01161970 -#define GFS_DEFAULT_BSIZE 4096 -#define GFS_SUPERBLOCK_OFFSET (0x10 * GFS_DEFAULT_BSIZE) -#define GFS_LOCKNAME_LEN 64 - -/* gfs1 constants: */ -#define GFS_FORMAT_FS 1309 -#define GFS_FORMAT_MULTI 1401 -/* gfs2 constants: */ -#define GFS2_FORMAT_FS 1801 -#define GFS2_FORMAT_MULTI 1900 - -struct gfs2_meta_header { - char mh_magic[4]; - char mh_type[4]; - char __pad0[8]; /* Was generation number in gfs1 */ - char mh_format[4]; - char __pad1[4]; /* Was incarnation number in gfs1 */ -}; - -struct gfs2_inum { - char no_formal_ino[8]; - char no_addr[8]; -}; - -struct gfs2_sb { - struct gfs2_meta_header sb_header; - - char sb_fs_format[4]; - char sb_multihost_format[4]; - char __pad0[4]; /* Was superblock flags in gfs1 */ - - char sb_bsize[4]; - char sb_bsize_shift[4]; - char __pad1[4]; /* Was journal segment size in gfs1 */ - - struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ - struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ - struct gfs2_inum sb_root_dir; - - char sb_lockproto[GFS_LOCKNAME_LEN]; - char sb_locktable[GFS_LOCKNAME_LEN]; - /* In gfs1, quota and license dinodes followed */ -}; - -#define gfsmagic(s) assemble4be(s.sb_header.mh_magic) -#define gfsformat(s) assemble4be(s.sb_fs_format) -#define gfsmultiformat(s) assemble4be(s.sb_multihost_format) - -/* btrfs constants */ -#define BTRFS_SUPER_INFO_OFFSET (64 * 1024) - -/* 32 bytes in various csum fields */ -#define BTRFS_CSUM_SIZE 32 - -#define BTRFS_FSID_SIZE 16 - -#define BTRFS_MAGIC "_BHRfS_M" - -/* - * the super block basically lists the main trees of the FS - * it currently lacks any block count etc etc - */ -struct btrfs_super_block { - char csum[BTRFS_CSUM_SIZE]; - /* the first 3 fields must match struct btrfs_header */ - char fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ - char bytenr[8]; /* this block number */ - char flags[8]; - - /* allowed to be different from the btrfs_header from here own down */ - char magic[8]; - /* more follows but this is all our libdisk cares about*/ -} __attribute__ ((__packed__)); - -static inline int -assemble2le(char *p) { - return (p[0] | (p[1] << 8)); -} - -static inline int -assemble4le(char *p) { - return (p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24)); -} - -static inline int -assemble4be(char *p) { - return (p[3] | (p[2] << 8) | (p[1] << 16) | (p[0] << 24)); -} diff --git a/libdisk/lvm.c b/libdisk/lvm.c deleted file mode 100644 index d8d7536..0000000 --- a/libdisk/lvm.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" - -#ifndef LVM_BLK_MAJOR -#define LVM_BLK_MAJOR 58 -#endif - -int -mnt_is_lvm_subvol( - dev_t dev) -{ - if (major(dev) == LVM_BLK_MAJOR) - return 1; - return get_driver_block_major("lvm", major(dev)); -} - -int -lvm_get_subvol_stripe( - char *dfile, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - int lvpipe[2], stripes = 0, stripesize = 0; - char *largv[3], buf[1024]; - FILE *stream; - char tmppath[MAXPATHLEN]; - - if (!mnt_is_lvm_subvol(sb->st_rdev)) - return 0; - - /* Quest for lvdisplay */ - if (!access("/usr/local/sbin/lvdisplay", R_OK|X_OK)) - largv[0] = "/usr/local/sbin/lvdisplay"; - else if (!access("/usr/sbin/lvdisplay", R_OK|X_OK)) - largv[0] = "/usr/sbin/lvdisplay"; - else if (!access("/sbin/lvdisplay", R_OK|X_OK)) - largv[0] = "/sbin/lvdisplay"; - else { - fprintf(stderr, - _("Warning - LVM device, but no lvdisplay(8) found\n")); - return 0; - } - - /* realpath gives an absolute pathname */ - largv[1] = realpath(dfile, tmppath); - largv[2] = NULL; - - /* Open pipe */ - if (pipe(lvpipe) < 0) { - fprintf(stderr, _("Could not open pipe\n")); - exit(1); - } - - /* Spawn lvdisplay */ - switch (fork()) { - case 0: - /* Plumbing */ - close(lvpipe[0]); - - if (lvpipe[1] != STDOUT_FILENO) - dup2(lvpipe[1], STDOUT_FILENO); - - execv(largv[0], largv); - - fprintf(stderr, _("Failed to execute %s\n"), largv[0]); - exit(1); - - case -1: - fprintf(stderr, _("Failed forking lvdisplay process\n")); - exit(1); - - default: - break; - } - - close(lvpipe[1]); - stream = fdopen(lvpipe[0], "r"); - - /* Scan stream for keywords */ - while (fgets(buf, 1023, stream) != NULL) { - - if (!strncmp(buf, "Stripes", 7)) - sscanf(buf, "Stripes %d", &stripes); - - if (!strncmp(buf, "Stripe size", 11)) - sscanf(buf, "Stripe size (KByte) %d", &stripesize); - } - - /* Update sizes */ - *sunit = stripesize << 1; - *swidth = (stripes * stripesize) << 1; - *sectalign = 0; - - fclose(stream); - - return 1; -} diff --git a/libdisk/md.c b/libdisk/md.c deleted file mode 100644 index 82b1cf1..0000000 --- a/libdisk/md.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" -#include "md.h" - -int -mnt_is_md_subvol( - dev_t dev, - enum md_type *type) -{ - *type = MD_TYPE_MD; - if (major(dev) == MD_MAJOR) - return 1; - if (get_driver_block_major("md", major(dev))) - return 1; - *type = MD_TYPE_MDP; - if (get_driver_block_major("mdp", major(dev))) - return 1; - return 0; -} - -int -md_get_subvol_stripe( - char *dfile, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - char *pc; - char *dfile2 = NULL; - enum md_type md_type; - - if (mnt_is_md_subvol(sb->st_rdev, &md_type)) { - struct md_array_info md; - int fd; - - if (md_type == MD_TYPE_MDP) { - pc = strrchr(dfile, 'd'); - if (pc) - pc = strchr(pc, 'p'); - if (!pc) { - fprintf(stderr, - _("Error getting MD array device from %s\n"), - dfile); - exit(1); - } - dfile2 = malloc(pc - dfile + 1); - if (dfile2 == NULL) { - fprintf(stderr, - _("Couldn't malloc device string\n")); - exit(1); - } - strncpy(dfile2, dfile, pc - dfile); - dfile2[pc - dfile + 1] = '\0'; - } - /* Open device */ - fd = open(dfile2 ? dfile2 : dfile, O_RDONLY); - if (fd == -1) { - free(dfile2); - return 0; - } - - /* Is this thing on... */ - if (ioctl(fd, GET_ARRAY_INFO, &md)) { - fprintf(stderr, - _("Error getting MD array info from %s\n"), - dfile2 ? dfile2 : dfile); - exit(1); - } - close(fd); - free(dfile2); - - /* - * Ignore levels we don't want aligned (e.g. linear) - * and deduct disk(s) from stripe width on RAID4/5/6 - */ - switch (md.level) { - case 6: - md.raid_disks--; - /* fallthrough */ - case 5: - case 4: - md.raid_disks--; - /* fallthrough */ - case 1: - case 0: - case 10: - break; - default: - return 0; - } - - /* Update sizes */ - *sunit = md.chunk_size >> 9; - *swidth = *sunit * md.raid_disks; - *sectalign = (md.level == 4 || md.level == 5 || md.level == 6); - - return 1; - } - return 0; -} diff --git a/libdisk/md.h b/libdisk/md.h deleted file mode 100644 index c3284e5..0000000 --- a/libdisk/md.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2002-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef MD_MAJOR -#define MD_MAJOR 9 /* we also check at runtime */ -#endif - -#define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, struct md_array_info) - -#define MD_SB_CLEAN 0 -#define MD_SB_ERRORS 1 - -struct md_array_info { - /* - * Generic constant information - */ - __uint32_t major_version; - __uint32_t minor_version; - __uint32_t patch_version; - __uint32_t ctime; - __uint32_t level; - __uint32_t size; - __uint32_t nr_disks; - __uint32_t raid_disks; - __uint32_t md_minor; - __uint32_t not_persistent; - - /* - * Generic state information - */ - __uint32_t utime; /* 0 Superblock update time */ - __uint32_t state; /* 1 State bits (clean, ...) */ - __uint32_t active_disks; /* 2 Number of currently active disks */ - __uint32_t working_disks; /* 3 Number of working disks */ - __uint32_t failed_disks; /* 4 Number of failed disks */ - __uint32_t spare_disks; /* 5 Number of spare disks */ - - /* - * Personality information - */ - __uint32_t layout; /* 0 the array's physical layout */ - __uint32_t chunk_size; /* 1 chunk size in bytes */ - -}; - -/* - * MDP = partitionable RAID arrays - */ -enum md_type { - MD_TYPE_MD, - MD_TYPE_MDP -}; diff --git a/libdisk/pttype.c b/libdisk/pttype.c deleted file mode 100644 index 172073a..0000000 --- a/libdisk/pttype.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2000-2001 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include "pttype.h" - -#define blksize 512 - -static u_int32_t -twos_complement_32bit_sum(u_int32_t *base, int size) -{ - int i; - u_int32_t sum = 0; - - size = size / sizeof(u_int32_t); - for (i = 0; i < size; i++) - sum = sum - ntohl(base[i]); - return sum; -} - -static int -sgi_parttable(char *base) -{ - u_int32_t csum; - struct volume_header *vh = (struct volume_header *)base; - - if (ntohl(vh->vh_magic) != VHMAGIC) - return 0; - csum = twos_complement_32bit_sum((u_int32_t *)vh, - sizeof(struct volume_header)); - return !csum; -} - -static int -dos_parttable(char *base) -{ - return (base[510] == 0x55 && base[511] == 0xaa); -} - -static int -aix_parttable(char *base) -{ - return (aixlabel(base)->magic == AIX_LABEL_MAGIC || - aixlabel(base)->magic == AIX_LABEL_MAGIC_SWAPPED); -} - -static int -sun_parttable(char *base) -{ - unsigned short *ush; - int csum = 0; - - if (sunlabel(base)->magic != SUN_LABEL_MAGIC && - sunlabel(base)->magic != SUN_LABEL_MAGIC_SWAPPED) - return csum; - ush = ((unsigned short *) (sunlabel(base) + 1)) - 1; - while (ush >= (unsigned short *)sunlabel(base)) - csum ^= *ush--; - return !csum; -} - -static int -mac_parttable(char *base) -{ - return (ntohs(maclabel(base)->magic) == MAC_LABEL_MAGIC || - ntohs(maclabel(base)->magic) == MAC_PARTITION_MAGIC || - ntohs(maclabel(base)->magic) == MAC_OLD_PARTITION_MAGIC); -} - - -char * -pttype(char *device) -{ - int fd; - char *type = NULL; - char buf[blksize]; - - if ((fd = open(device, O_RDONLY)) < 0) - ; - else if (read(fd, buf, blksize) != blksize) - ; - else { - if (sgi_parttable(buf)) - type = "SGI"; - else if (sun_parttable(buf)) - type = "Sun"; - else if (aix_parttable(buf)) - type = "AIX"; - else if (dos_parttable(buf)) - type = "DOS"; - else if (mac_parttable(buf)) - type = "Mac"; - } - - if (fd >= 0) - close(fd); - return type; -} diff --git a/libdisk/pttype.h b/libdisk/pttype.h deleted file mode 100644 index 4f35c47..0000000 --- a/libdisk/pttype.h +++ /dev/null @@ -1,50 +0,0 @@ -typedef struct { - unsigned char info[128]; /* Informative text string */ - unsigned char spare0[14]; - struct sun_info { - unsigned char spare1; - unsigned char id; - unsigned char spare2; - unsigned char flags; - } infos[8]; - unsigned char spare1[246]; /* Boot information etc. */ - unsigned short rspeed; /* Disk rotational speed */ - unsigned short pcylcount; /* Physical cylinder count */ - unsigned short sparecyl; /* extra sects per cylinder */ - unsigned char spare2[4]; /* More magic... */ - unsigned short ilfact; /* Interleave factor */ - unsigned short ncyl; /* Data cylinder count */ - unsigned short nacyl; /* Alt. cylinder count */ - unsigned short ntrks; /* Tracks per cylinder */ - unsigned short nsect; /* Sectors per track */ - unsigned char spare3[4]; /* Even more magic... */ - struct sun_partition { - u_int32_t start_cylinder; - u_int32_t num_sectors; - } partitions[8]; - unsigned short magic; /* Magic number */ - unsigned short csum; /* Label xor'd checksum */ -} sun_partition; - -#define SUN_LABEL_MAGIC 0xDABE -#define SUN_LABEL_MAGIC_SWAPPED 0xBEDA -#define sunlabel(x) ((sun_partition *)x) - -typedef struct { - unsigned int magic; /* expect AIX_LABEL_MAGIC */ - /* ... */ -} aix_partition; - -#define AIX_LABEL_MAGIC 0xc9c2d4c1 -#define AIX_LABEL_MAGIC_SWAPPED 0xc1d4c2c9 -#define aixlabel(x) ((aix_partition *)x) - -typedef struct { - unsigned short magic; - /* ... */ -} mac_partition; - -#define MAC_LABEL_MAGIC 0x4552 -#define MAC_PARTITION_MAGIC 0x504d -#define MAC_OLD_PARTITION_MAGIC 0x5453 -#define maclabel(x) ((mac_partition *)x) diff --git a/libdisk/xvm.c b/libdisk/xvm.c deleted file mode 100644 index 79dff21..0000000 --- a/libdisk/xvm.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include "xvm.h" - -int -mnt_is_xvm_subvol( - dev_t dev) -{ - return get_driver_block_major("xvm", major(dev)); -} - -/* - * If the logical device is a xvm striped volume, then it returns the - * stripe unit and stripe width information. - * Input parameters: the logical volume - * the subvolume type - (SVTYPE_RT or - * SVTYPE_DATA) - * Output parameters: the stripe unit and width in 512 byte blocks - * true/false - was this device an XVM volume? - */ -int -xvm_get_subvol_stripe( - char *dev, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - int fd; - xvm_getdev_t getdev; - xvm_subvol_stripe_t subvol_stripe; - - if (!mnt_is_xvm_subvol(sb->st_rdev)) - return 0; - - /* - * This will actually open the data subvolume. - */ - if ((fd = open(dev, O_RDONLY)) < 0) - return 0; - - /* - * Go and get the the information for the correct - * subvolume. - */ - if (ioctl(fd, DIOCGETVOLDEV, &getdev) < 0) { - close(fd); - return 0; - } - if ( (type == SVTYPE_RT) && (getdev.rt_subvol_dev) ) - subvol_stripe.dev = getdev.rt_subvol_dev; - else if ( (type == SVTYPE_DATA) && (getdev.data_subvol_dev) ) - subvol_stripe.dev = getdev.data_subvol_dev; - else { - close(fd); - return 0; - } - - if (ioctl(fd, DIOCGETVOLSTRIPE, &subvol_stripe) < 0) { - close(fd); - return 0; - } - - *sunit = subvol_stripe.unit_size; - *swidth = *sunit * subvol_stripe.width_size; - *sectalign = 0; - close(fd); - return 1; -} diff --git a/libdisk/xvm.h b/libdisk/xvm.h deleted file mode 100644 index 307e77b..0000000 --- a/libdisk/xvm.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#define _DIOC_(x) (('d'<<8) | x) -#define DIOCGETVOLDEV _DIOC_(36) /* subvolume devices */ -#define DIOCGETVOLSTRIPE _DIOC_(47) /* subvolume stripe info */ - -/* - * Structure returned by the DIOCGETVOLDEV ioctl to list the - * subvolume device nodes in a volume. These are external device - * numbers. - */ -#define XVM_GETDEV_VERS 1 - -typedef __uint32_t xvm_dev_t; - -typedef struct { - __uint32_t version; - xvm_dev_t data_subvol_dev; - - xvm_dev_t log_subvol_dev; - xvm_dev_t rt_subvol_dev; - - xvm_dev_t sp_subvol_dev; -} xvm_getdev_t; - -/* - * Structure returned by the DIOCGETVOLSTRIPE ioctl to describe - * the subvolume stripe units and width. - */ -#define XVM_SUBVOL_GEOMETRY_VERS 1 -typedef struct xvm_subvol_stripe_s { - __uint32_t version; - __uint32_t unit_size; /* in blocks */ - __uint32_t width_size; /* in blocks */ - __uint32_t pad1; /* padding */ - xvm_dev_t dev; -} xvm_subvol_stripe_t; diff --git a/m4/package_blkid.m4 b/m4/package_blkid.m4 index 44ca2cc..363142c 100644 --- a/m4/package_blkid.m4 +++ b/m4/package_blkid.m4 @@ -11,9 +11,10 @@ AC_DEFUN([AC_HAVE_BLKID_TOPO], if test $ac_cv_func_blkid_probe_get_topology = yes; then libblkid="-lblkid" else - libblkd="" - enable_blkid="no" - AC_SUBST(enable_blkid) + echo + echo 'FATAL ERROR: could not find a valid BLKID header.' + echo 'Install the Block device ID development package.' + exit 1 fi fi AC_SUBST(libblkid) diff --git a/mkfs/Makefile b/mkfs/Makefile index fd1f615..de56184 100644 --- a/mkfs/Makefile +++ b/mkfs/Makefile @@ -11,15 +11,7 @@ FSTYP = fstyp HFILES = xfs_mkfs.h CFILES = maxtrres.c proto.c xfs_mkfs.c -ifeq ($(ENABLE_BLKID),yes) -LLDLIBS += $(LIBBLKID) -CFLAGS += -DENABLE_BLKID -else -LLDLIBS += $(LIBDISK) -LTDEPENDENCIES += $(LIBDISK) -endif - -LLDLIBS += $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) +LLDLIBS += $(LIBBLKID) $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES += $(LIBXFS) LLDFLAGS = -static-libtool-libs @@ -28,16 +20,8 @@ LDIRT = $(FSTYP) default: depend $(LTCOMMAND) -ifneq ($(ENABLE_BLKID),yes) -default: $(FSTYP) -endif - include $(BUILDRULES) -$(FSTYP): - @echo " [CC] $@" - $(Q)$(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) - install: default $(INSTALL) -m 755 -d $(PKG_ROOT_SBIN_DIR) $(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_ROOT_SBIN_DIR) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 83f7749..0d125d3 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -18,12 +18,7 @@ #include #include -#ifdef ENABLE_BLKID #include -#else -#include -#include -#endif #include "xfs_mkfs.h" /* @@ -35,7 +30,6 @@ struct fs_topology { int rtswidth; /* stripe width - rt subvolume */ int lsectorsize; /* logical sector size &*/ int psectorsize; /* physical sector size */ - int sectoralign; }; /* @@ -297,7 +291,6 @@ calc_stripe_factors( } } -#ifdef ENABLE_BLKID /* * Check for existing filesystem or partition table on device. * Returns: @@ -498,64 +491,6 @@ static void get_topology( &lsectorsize, &psectorsize, force_overwrite); } } -#else /* ENABLE_BLKID */ -static int -check_overwrite( - char *device) -{ - char *type; - - if (device && *device) { - if ((type = fstype(device)) != NULL) { - fprintf(stderr, - _("%s: %s appears to contain an existing " - "filesystem (%s).\n"), progname, device, type); - return 1; - } - if ((type = pttype(device)) != NULL) { - fprintf(stderr, - _("%s: %s appears to contain a partition " - "table (%s).\n"), progname, device, type); - return 1; - } - } - return 0; -} - -static void get_topology( - libxfs_init_t *xi, - struct fs_topology *ft, - int force_overwrite) -{ - - char *dfile = xi->volname ? xi->volname : xi->dname; - int bsz = BBSIZE; - - if (!xi->disfile) { - int fd; - long long dummy; - - get_subvol_stripe_wrapper(dfile, SVTYPE_DATA, - &ft->dsunit, &ft->dswidth, &ft->sectoralign); - fd = open(dfile, O_RDONLY); - /* If this fails we just fall back to BBSIZE */ - if (fd >= 0) { - platform_findsizes(dfile, fd, &dummy, &bsz); - close(fd); - } - } - - ft->lsectorsize = bsz; - ft->psectorsize = bsz; - - if (xi->rtname && !xi->risfile) { - int dummy1; - - get_subvol_stripe_wrapper(dfile, SVTYPE_RT, &dummy1, - &ft->rtswidth, &dummy1); - } -} -#endif /* ENABLE_BLKID */ static void fixup_log_stripe_unit( @@ -1779,17 +1714,7 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"), memset(&ft, 0, sizeof(ft)); get_topology(&xi, &ft, force_overwrite); - if (ft.sectoralign) { - /* - * Older Linux software RAID versions want the sector size - * to match the block size to avoid switching I/O sizes. - * For the legacy libdisk case we thus set the sector size to - * match the block size. For systems using libblkid we assume - * that the kernel is recent enough to not require this and - * ft.sectoralign will never be set. - */ - sectorsize = blocksize; - } else if (!ssflag) { + if (!ssflag) { /* * Unless specified manually on the command line use the * advertised sector size of the device. We use the physical @@ -1817,7 +1742,7 @@ _("switching to logical sector size %d\n"), } } - if (ft.sectoralign || !ssflag) { + if (!ssflag) { sectorlog = libxfs_highbit32(sectorsize); if (loginternal) { lsectorsize = sectorsize; diff --git a/po/de.po b/po/de.po index 7933636..fc62525 100644 --- a/po/de.po +++ b/po/de.po @@ -5706,57 +5706,6 @@ msgstr "[-cpv]" msgid "print or check parent inodes" msgstr "Eltern-Inodes ausgeben oder prüfen" -#: .././libdisk/lvm.c:60 -#, c-format -msgid "Warning - LVM device, but no lvdisplay(8) found\n" -msgstr "Warnung: LVM-Gerät, aber es wurde kein lvdisplay(8) gefunden\n" - -#: .././libdisk/lvm.c:70 .././libdisk/dm.c:73 -#, c-format -msgid "Could not open pipe\n" -msgstr "Weiterleitung kann nicht geöffnet werden\n" - -#: .././libdisk/lvm.c:85 .././libdisk/dm.c:88 -#, c-format -msgid "Failed to execute %s\n" -msgstr "Ausführen von %s fehlgeschlagen\n" - -#: .././libdisk/lvm.c:89 -#, c-format -msgid "Failed forking lvdisplay process\n" -msgstr "Erstellen des »lvdisplay«-Unterprozesses fehlgeschlagen\n" - -#: .././libdisk/drivers.c:35 -#, c-format -msgid "Cannot stat %s: %s\n" -msgstr "Kann Status für »%s« nicht abfragen:%s\n" - -#: .././libdisk/md.c:61 -#, c-format -msgid "Error getting MD array device from %s\n" -msgstr "Fehler beim Ermitteln des MD-Array-Geräts von %s\n" - -#: .././libdisk/md.c:68 -#, c-format -msgid "Couldn't malloc device string\n" -msgstr "malloc von Gerätzeichenkette konnte nicht durchgeführt werden\n" - -#: .././libdisk/md.c:84 -#, c-format -msgid "Error getting MD array info from %s\n" -msgstr "Fehler beim Ermitteln der MD-Array-Informationen von %s\n" - -#: .././libdisk/dm.c:57 -#, c-format -msgid "Warning - device mapper device, but no dmsetup(8) found\n" -msgstr "" -"Warnung: »device mapper«-Gerät, aber es wurde kein dmsetup(8) gefunden\n" - -#: .././libdisk/dm.c:92 -#, c-format -msgid "Failed forking dmsetup process\n" -msgstr "Erstellen des »dmsetup«-Unterprozesses fehlgeschlagen\n" - #: .././libxcmd/command.c:85 #, c-format msgid "bad argument count %d to %s, expected at least %d arguments\n" diff --git a/po/pl.po b/po/pl.po index 02d8c22..a950f77 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5606,55 +5606,6 @@ msgstr "offset" msgid "truncates the current file at the given offset" msgstr "ucięcie bieżącego pliku na podanym offsecie" -#: .././libdisk/dm.c:57 -#, c-format -msgid "Warning - device mapper device, but no dmsetup(8) found\n" -msgstr "Uwaga - urządzenie device mappera, ale nie znaleziono dmsetup(8)\n" - -#: .././libdisk/dm.c:73 .././libdisk/lvm.c:70 -#, c-format -msgid "Could not open pipe\n" -msgstr "Nie udało się otworzyć potoku\n" - -#: .././libdisk/dm.c:88 .././libdisk/lvm.c:85 -#, c-format -msgid "Failed to execute %s\n" -msgstr "Nie udało się wywołać %s\n" - -#: .././libdisk/dm.c:92 -#, c-format -msgid "Failed forking dmsetup process\n" -msgstr "Nie udało się odgałęzić procesu dmsetup\n" - -#: .././libdisk/drivers.c:35 -#, c-format -msgid "Cannot stat %s: %s\n" -msgstr "Nie można wykonać stat na %s: %s\n" - -#: .././libdisk/lvm.c:60 -#, c-format -msgid "Warning - LVM device, but no lvdisplay(8) found\n" -msgstr "Uwaga - urządzenie LVM, ale nie znaleziono lvdisplay(8)\n" - -#: .././libdisk/lvm.c:89 -#, c-format -msgid "Failed forking lvdisplay process\n" -msgstr "Nie udało się odgałęzić procesu lvdisplay\n" - -#: .././libdisk/md.c:61 -#, c-format -msgid "Error getting MD array device from %s\n" -msgstr "Błąd podczas pobierania urządzenia macierzy MD z %s\n" - -#: .././libdisk/md.c:68 -#, c-format -msgid "Couldn't malloc device string\n" -msgstr "Nie można przydzielić łańcucha nazwy urządzenia\n" - -#: .././libdisk/md.c:84 -#, c-format -msgid "Error getting MD array info from %s\n" -msgstr "Błąd podczas pobierania informacji o macierzy MD z %s\n" #: .././libxcmd/command.c:85 #, c-format -- 2.4.3 From david@fromorbit.com Thu Jul 2 07:34:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EC3F07FB6 for ; Thu, 2 Jul 2015 07:34:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9AD14304053 for ; Thu, 2 Jul 2015 05:34:14 -0700 (PDT) X-ASG-Debug-ID: 1435840449-04bdf007880f760001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id pBlkPa2DMQCd5HEh for ; Thu, 02 Jul 2015 05:34:10 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DmBwDQLpVVPN6zLHlbgxIjMV+CUYN8pDEDBol+ihsGhXYEgU5NAQEBAQEBBwEBAQFBP4RQLx4dJAwoBSUDBy2ILqYPpm4YhgSJZl+CIwxBgTEFhwWFEod7hGGHBIE7RIZfhHWCdIgDgQlmDAE1HYFkLDGBBAEeB4EeAQEB Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail06.adl6.internode.on.net with ESMTP; 02 Jul 2015 22:04:08 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZAdgs-00069Y-Fb for xfs@oss.sgi.com; Thu, 02 Jul 2015 22:34:06 +1000 Date: Thu, 2 Jul 2015 22:34:06 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [ANNOUNCE] xfsprogs: for-next branch rebased to 0c0845c Message-ID: <20150702123406.GZ22807@dastard> X-ASG-Orig-Subj: [ANNOUNCE] xfsprogs: for-next branch rebased to 0c0845c MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Yylu36WmvOXNoKYn" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1435840449 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20389 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --Yylu36WmvOXNoKYn Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi Folks, I just rebased the for-next branch of the xfsprogs repository here: git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git It has been rebased on top of the 3.2.3 release branch. THe commit list below is the entirity of the for-next branch. It contains: - libxfs update to 4.1 kernel code - sparse inode support - cleanups to transaction commit interface - cleanups to remove unnecessary typedefs - build system changes to make include/xfs contain symlinks to the source header files. Includes a new method of installing headers to inlcude/xfs before dependency generation is run. - standardisation of all the header include statements - an updated version of Eric's "libxfs sync" script in a new tools/ directory. - various bug fixes. It's a pretty big update: 261 files changed, 11761 insertions(+), 9060 deletions(-) But it does not contain anything to do with rmap btrees, reflink btrees, the table based mkfs option rework, or any of the recently posted changes (e.g. libdisk removal). because we've got a lot of work starting to build up, I'd like to get this current tree sorted and released sooner rather than later. i.e. to be the basis of a 3.3 (4.x?) release to co-incide with the release of the 4.2 kernel. That means we'd be releasing a userspace that understands sparse inodes at the same time the kernel releases. Before that, I'd like to: - update the libxfs code to match what was just merged into the kernel for 4.2-rc1 - pull in outstanding reviewed patches - merge for-next back into the master branch - tag the tree with a x.y-rc1 tag. New work will then be staged in the for-next branch ready for merging back to the master branch after the release of x.y, similar to the cadence of the kernel cycle. Does anyone have anything pending that should go in now? I can stage bug fixes at almost any time, but I'm sure there are things I've missed over the past week or two. So if you are sitting on patches waiting for something to be done then make sure you ping me about them... Feel free to bikeshed about what the next version number should be. I'm partial to making each release a x.y.0 release, reserving the z version for unexpected updates needed to address urgent bug fixes. And seeing as I'm trying to get the userspace development and release cycle aligned with the kernel libxfs changes, I'm also tempted to jump straight to a 4.2.0 release so that the xfsprogs version matches the kernel version that shares the identical libxfs code. Paint away! -Dave. The new head of the master branch is commit: 0c0845c Merge branch 'libxfs-commit-script' into for-next New Commits: Brian Foster (38): [214acbb] xfs: create individual inode alloc. helper [fa56ad5] xfs: update free inode record logic to support sparse inode= records [f4bc361] xfs: support min/max agbno args in block allocator [8fb67ff] xfs: add sparse inode chunk alignment superblock field [ac685e6] xfs: use sparse chunk alignment for min. inode allocation r= equirement [370b674] xfs: sparse inode chunks feature helpers and mount requirem= ents [2e1cf97] xfs: add fs geometry bit for sparse inode chunks [c21954f] xfs: introduce inode record hole mask for sparse inode chun= ks [b291dee] xfs: pass inode count through ordered icreate log item [8dff44e] xfs: helper to convert holemask to inode alloc. bitmap [2f577ca] xfs: allocate sparse inode chunks on full chunk allocation = failure [d9df7a0] xfs: randomly do sparse inode allocations in DEBUG mode [0a2eaa3] xfs: filter out sparse regions from individual inode alloca= tion [a6b3ddb] xfs: only free allocated regions of inode chunks [9ad2424] xfs: skip unallocated regions of inode chunks in xfs_ifree_= cluster() [d755348] xfs: enable sparse inode chunks for v5 superblocks [46141c7] mkfs: sparse inode chunk support [71bdfea] db: support sparse inode chunk inobt record and sb fields [0058e77] db: show sparse inodes feature state in version command out= put [e471aa7] growfs: display sparse inode status from xfs_info [b63f41b] repair: handle sparse format inobt record freecount correct= ly [f7d4028] repair: remove duplicate field from aghdr_cnts [d9a559b] repair: use ir_count for filesystems with sparse inode supp= ort [87f617c] repair: scan and track sparse inode chunks correctly [170383b] repair: scan sparse finobt records correctly [9fa86a8] repair: validate ir_count field for sparse format records [f324686] repair: process sparse inode records correctly [37c2fcf] repair: factor out sparse inodes from finobt reconstruction [62531d7] repair: do not account sparse inodes in phase 5 cursor init. [a6bb9c8] repair: reconstruct sparse inode records correctly on disk [1da6831] repair: do not prefetch holes in sparse inode chunks [9f984cd] repair: handle sparse inode alignment [3fe33d9] metadump: reorder inode record sanity checks and inode buff= er read [1e2689a] metadump: support sparse inode records [244e5b4] repair: access helpers for on-disk inobt record freecount [dbbc824] repair: helper for inode chunk alignment and start/end ino = number verification [bb9a8c3] repair: helper to import on-disk inobt records to in-core t= rees [25753aa] repair: helper to transition inode blocks to inode state Christoph Hellwig (12): [010f294] libxfs: switch the remaining xfs_trans_dup user to xfs_tran= s_roll [330efa1] libxfs: simplify xfs_trans_free_items [ea8a317] libxfs: remove the flags argument to xfs_trans_cancel [47918c2] xfs: saner xfs_trans_commit interface [5d99e84] xfsprogs: remove register keywords [27c2138] xfsprogs: remove __psint_t and __psunsigned_t [8401468] xfsprogs: remove the unused inst_t typedef [fd267f4] xfsprogs: remove the uint_t typedef [22abf77] xfsprogs: remove the uchar_t typedef [2f96337] xfsprogs: remove boolean_t typedef [de1ce66] xfsprogs: remove non-Linux defintions for loff_t [7b0f48b] xfsprogs: remove xfs_caddr_t Dave Chinner (28): [b2c3385] libxfs: do all xfs->libxfs defines inside libxfs/ [b5f36ac] xfs: kill unsupported superblock versions [3a252cc] libxfs: update to 3.16 kernel code [eefa606] xfs: return is not a function [8066e7e] xfs: Nuke XFS_ERROR macro [b6daf45] libxfs: error negation rework [2fe8a24] libxfs: restructure to match kernel layout [7c8632e] libxfs: update to match 3.19-rc1 kernel code [d491a6d] libxfs: update to 4.1-rc2 code base [bd3b79c] libxfs: directly include libxfs headers [c7e9ce3] libxfs: disambiguate xfs.h [e104a5b] libxfs: split out xfs->libxfs mappings [c3dcf63] libxfs: add xfs_bit.c [c954da1] xfsprogs: build fails to find platform_defs.h [83d7c7d] build: populate include/xfs before building [18ffd96] libxfs-apply: CLI should specify source of commits [27b0276] libxfs-apply: allow commit range specification [50f69d1] libxfs-apply: reduce output verbosity [9e65dfe] libxfs-apply: auto-name patches for guilt [522c306] libxfs-apply: ensure guilt import retains commit messages [b8aa7ab] progs: clean up libxfs.h includes [18155c3] progs: clean up libxlog.h includes [71d5d40] progs: clean up all remaining xfs*h includes [11e314a] Merge branch 'libxfs-4.1-update' into for-next [3fd7344] Merge branch 'sparse-inodes' into for-next [d1726d3] Merge branch 'progs-misc-fixes-1' into for-next [fd27f6c] Merge branch 'progs-cleanup' into for-next [0c0845c] Merge branch 'libxfs-commit-script' into for-next Eric Sandeen (13): [4407b13] libxfs: silence unused var warnings [8e72611] build: install PKGHFILES in install-dev [bb46491] libxlog: remove unused write-only var l_logsize [f0873ce] libxlog: add xlog_is_empty() helper [585043a] metadump: rename dont_obfuscate variable [ec693e1] metadump: zero out clean log [7080611] xfs_metadump: don't zero log if not obfuscating [aaf90a2] xfs_copy: fix copy of hard 4k devices [b0cda2f] mkfs.xfs: always use underlying fs sector size when mkfs'in= g a file [66de82b] xfs_repair: refuse to unset lazycount on V5 filesystems [a5d34ab] xfs_repair: automatically enable -f (file) mode when needed [d21bcda] xfs_metadump: obfuscate remote symlinks on CRC filesystems [a902a3c] tools: libxfs kernel sync script Mike Grant (1): [5c4532b] xfs_repair: include any realloc'ed buffers in final putbuf Code Diffstat: Makefile | 21 +- configure.ac | 2 - copy/xfs_copy.c | 13 +- db/addr.c | 2 +- db/agf.c | 2 +- db/agfl.c | 2 +- db/agi.c | 2 +- db/attr.c | 4 +- db/attrset.c | 2 +- db/attrshort.c | 2 +- db/bit.c | 10 +- db/block.c | 18 +- db/bmap.c | 49 +- db/bmap.h | 12 +- db/bmroot.c | 6 +- db/btblock.c | 46 +- db/btblock.h | 3 + db/check.c | 253 +++--- db/command.c | 2 +- db/convert.c | 2 +- db/debug.c | 2 +- db/dir2.c | 70 +- db/dir2sf.c | 10 +- db/dquot.c | 2 +- db/echo.c | 2 +- db/faddr.c | 74 +- db/field.c | 24 +- db/field.h | 8 +- db/flist.c | 2 +- db/fprint.c | 2 +- db/frag.c | 12 +- db/freesp.c | 2 +- db/hash.c | 4 +- db/help.c | 2 +- db/init.c | 6 +- db/inode.c | 3 +- db/input.c | 2 +- db/io.c | 14 +- db/malloc.c | 2 +- db/metadump.c | 259 ++++-- db/output.c | 2 +- db/print.c | 2 +- db/quit.c | 2 +- db/sb.c | 59 +- db/sig.c | 2 +- db/strvec.c | 2 +- db/symlink.c | 2 +- db/text.c | 2 +- db/type.c | 42 +- db/type.h | 1 + db/write.c | 2 +- debian/rules | 3 + estimate/xfs_estimate.c | 2 +- fsr/xfs_fsr.c | 13 +- growfs/xfs_growfs.c | 17 +- include/Makefile | 70 +- include/bitops.h | 6 + include/buildrules | 11 +- include/darwin.h | 6 - include/freebsd.h | 8 - include/gnukfreebsd.h | 10 +- include/input.h | 2 +- include/irix.h | 12 +- include/libxfs.h | 776 +++-------------- include/libxlog.h | 19 +- include/linux.h | 11 - include/path.h | 2 +- include/platform_defs.h.in | 46 +- include/project.h | 2 +- include/xfs.h | 6 +- include/xfs_ag.h | 279 ------ include/xfs_arch.h | 18 - include/xfs_dinode.h | 243 ------ include/xfs_dir2.h | 111 --- include/xfs_format.h | 454 ---------- include/xfs_inode.h | 106 +++ include/xfs_inum.h | 64 -- include/xfs_mount.h | 149 ++++ include/xfs_sb.h | 712 --------------- include/xfs_trace.h | 16 +- include/xfs_trans.h | 147 ++++ include/xqm.h | 2 +- io/attr.c | 6 +- io/bmap.c | 4 +- io/fadvise.c | 6 +- io/fiemap.c | 4 +- io/file.c | 6 +- io/freeze.c | 6 +- io/fsync.c | 4 +- io/getrusage.c | 6 +- io/imap.c | 6 +- io/init.c | 6 +- io/inject.c | 6 +- io/link.c | 6 +- io/madvise.c | 6 +- io/mincore.c | 6 +- io/mmap.c | 6 +- io/open.c | 6 +- io/parent.c | 14 +- io/pread.c | 6 +- io/prealloc.c | 6 +- io/pwrite.c | 6 +- io/readdir.c | 6 +- io/resblks.c | 6 +- io/seek.c | 6 +- io/sendfile.c | 6 +- io/shutdown.c | 6 +- io/sync.c | 4 +- io/sync_file_range.c | 6 +- io/truncate.c | 6 +- libdisk/drivers.h | 2 +- libhandle/handle.c | 6 +- libhandle/jdm.c | 16 +- libxcmd/command.c | 6 +- libxcmd/help.c | 4 +- libxcmd/input.c | 4 +- libxcmd/paths.c | 6 +- libxcmd/projects.c | 2 +- libxcmd/quit.c | 4 +- libxfs/Makefile | 72 +- libxfs/cache.c | 15 +- libxfs/crc32.c | 4 +- libxfs/darwin.c | 6 +- libxfs/freebsd.c | 6 +- libxfs/init.c | 46 +- libxfs/irix.c | 6 +- libxfs/kmem.c | 2 +- libxfs/libxfs_api_defs.h | 110 +++ libxfs/libxfs_io.h | 236 +++++ libxfs/{xfs.h =3D> libxfs_priv.h} | 304 ++++--- libxfs/linux.c | 4 +- libxfs/logitem.c | 12 +- libxfs/radix-tree.c | 2 +- libxfs/rdwr.c | 41 +- libxfs/trans.c | 65 +- libxfs/util.c | 136 ++- libxfs/xfs_alloc.c | 219 +++-- {include =3D> libxfs}/xfs_alloc.h | 6 + libxfs/xfs_alloc_btree.c | 97 +-- {include =3D> libxfs}/xfs_alloc_btree.h | 0 libxfs/xfs_attr.c | 479 +++++----- libxfs/xfs_attr_leaf.c | 463 ++++++---- {include =3D> libxfs}/xfs_attr_leaf.h | 11 +- libxfs/xfs_attr_remote.c | 108 ++- {include =3D> libxfs}/xfs_attr_remote.h | 0 {include =3D> libxfs}/xfs_attr_sf.h | 0 libxfs/xfs_bit.c | 118 +++ {include =3D> libxfs}/xfs_bit.h | 7 +- libxfs/xfs_bmap.c | 1137 ++++++++++++++++++------ {include =3D> libxfs}/xfs_bmap.h | 69 +- libxfs/xfs_bmap_btree.c | 223 +---- {include =3D> libxfs}/xfs_bmap_btree.h | 2 +- libxfs/xfs_btree.c | 221 +++-- {include =3D> libxfs}/xfs_btree.h | 67 +- {include =3D> libxfs}/xfs_cksum.h | 0 libxfs/xfs_da_btree.c | 509 +++++------ {include =3D> libxfs}/xfs_da_btree.h | 29 +- libxfs/xfs_da_format.c | 908 +++++++++++++++++++ {include =3D> libxfs}/xfs_da_format.h | 514 +---------- libxfs/xfs_dir2.c | 502 ++++++----- libxfs/xfs_dir2.h | 323 +++++++ libxfs/xfs_dir2_block.c | 201 +++-- libxfs/xfs_dir2_data.c | 271 +++--- libxfs/xfs_dir2_leaf.c | 432 +++++---- libxfs/xfs_dir2_node.c | 505 +++++------ libxfs/xfs_dir2_priv.h | 30 +- libxfs/xfs_dir2_sf.c | 394 +++------ libxfs/xfs_dquot_buf.c | 43 +- libxfs/xfs_format.h | 1497 ++++++++++++++++++++++++++++= ++++ {include =3D> libxfs}/xfs_fs.h | 9 +- libxfs/xfs_ialloc.c | 1104 +++++++++++++++++------ {include =3D> libxfs}/xfs_ialloc.h | 37 +- libxfs/xfs_ialloc_btree.c | 191 ++-- {include =3D> libxfs}/xfs_ialloc_btree.h | 10 + libxfs/xfs_inode_buf.c | 68 +- {include =3D> libxfs}/xfs_inode_buf.h | 2 + libxfs/xfs_inode_fork.c | 78 +- {include =3D> libxfs}/xfs_inode_fork.h | 3 +- {include =3D> libxfs}/xfs_log_format.h | 6 +- libxfs/xfs_log_rlimit.c | 16 +- {include =3D> libxfs}/xfs_quota_defs.h | 4 +- libxfs/xfs_rtbitmap.c | 69 +- libxfs/xfs_sb.c | 464 +++++----- libxfs/xfs_sb.h | 38 + {include =3D> libxfs}/xfs_shared.h | 39 +- libxfs/xfs_symlink_remote.c | 23 +- libxfs/xfs_trans_resv.c | 164 ++-- {include =3D> libxfs}/xfs_trans_resv.h | 4 +- {include =3D> libxfs}/xfs_trans_space.h | 7 +- {include =3D> libxfs}/xfs_types.h | 29 +- libxlog/util.c | 59 +- libxlog/xfs_log_recover.c | 44 +- logprint/log_copy.c | 2 + logprint/log_dump.c | 2 + logprint/log_misc.c | 42 +- logprint/log_print_all.c | 6 +- logprint/log_print_trans.c | 2 + logprint/logprint.c | 8 +- logprint/logprint.h | 2 - m4/package_types.m4 | 28 - man/man8/mkfs.xfs.8 | 17 + man/man8/xfs_admin.8 | 4 + mdrestore/xfs_mdrestore.c | 4 +- mkfs/fstyp.c | 2 +- mkfs/maxtrres.c | 5 +- mkfs/proto.c | 88 +- mkfs/xfs_mkfs.c | 158 ++-- po/de.po | 8 +- po/pl.po | 8 +- quota/edit.c | 4 +- quota/free.c | 2 +- quota/init.c | 6 +- quota/path.c | 4 +- quota/project.c | 4 +- quota/quot.c | 2 +- quota/quota.c | 2 +- quota/quota.h | 6 +- quota/report.c | 2 +- quota/state.c | 2 +- repair/agheader.c | 45 +- repair/agheader.h | 8 +- repair/attr_repair.c | 76 +- repair/attr_repair.h | 33 - repair/avl.c | 144 +-- repair/avl.h | 22 +- repair/avl64.c | 138 +-- repair/avl64.h | 6 +- repair/bmap.c | 38 +- repair/bmap.h | 20 +- repair/btree.c | 2 +- repair/dino_chunks.c | 207 +++-- repair/dinode.c | 183 ++-- repair/dinode.h | 12 +- repair/dir2.c | 169 ++-- repair/globals.c | 2 +- repair/globals.h | 14 - repair/incore.c | 8 +- repair/incore.h | 70 +- repair/incore_bmc.c | 12 +- repair/incore_ext.c | 30 +- repair/incore_ino.c | 11 +- repair/init.c | 2 +- repair/phase1.c | 10 +- repair/phase2.c | 63 +- repair/phase3.c | 2 +- repair/phase4.c | 8 +- repair/phase5.c | 72 +- repair/phase6.c | 386 ++++---- repair/phase7.c | 19 +- repair/prefetch.c | 55 +- repair/progress.c | 2 +- repair/rt.c | 16 +- repair/sb.c | 133 +-- repair/scan.c | 457 ++++++---- repair/scan.h | 12 +- repair/threads.c | 2 +- repair/versions.c | 67 +- repair/versions.h | 1 - repair/xfs_repair.c | 22 +- rtcp/xfs_rtcp.c | 4 +- tools/libxfs-apply | 284 ++++++ 261 files changed, 11761 insertions(+), 9060 deletions(-) delete mode 100644 include/xfs_ag.h delete mode 100644 include/xfs_dinode.h delete mode 100644 include/xfs_dir2.h delete mode 100644 include/xfs_format.h create mode 100644 include/xfs_inode.h delete mode 100644 include/xfs_inum.h create mode 100644 include/xfs_mount.h delete mode 100644 include/xfs_sb.h create mode 100644 include/xfs_trans.h create mode 100644 libxfs/libxfs_api_defs.h create mode 100644 libxfs/libxfs_io.h rename libxfs/{xfs.h =3D> libxfs_priv.h} (63%) rename {include =3D> libxfs}/xfs_alloc.h (96%) rename {include =3D> libxfs}/xfs_alloc_btree.h (100%) rename {include =3D> libxfs}/xfs_attr_leaf.h (91%) rename {include =3D> libxfs}/xfs_attr_remote.h (100%) rename {include =3D> libxfs}/xfs_attr_sf.h (100%) create mode 100644 libxfs/xfs_bit.c rename {include =3D> libxfs}/xfs_bit.h (97%) rename {include =3D> libxfs}/xfs_bmap.h (72%) rename {include =3D> libxfs}/xfs_bmap_btree.h (98%) rename {include =3D> libxfs}/xfs_btree.h (91%) rename {include =3D> libxfs}/xfs_cksum.h (100%) rename {include =3D> libxfs}/xfs_da_btree.h (87%) create mode 100644 libxfs/xfs_da_format.c rename {include =3D> libxfs}/xfs_da_format.h (69%) create mode 100644 libxfs/xfs_dir2.h create mode 100644 libxfs/xfs_format.h rename {include =3D> libxfs}/xfs_fs.h (98%) rename {include =3D> libxfs}/xfs_ialloc.h (87%) rename {include =3D> libxfs}/xfs_ialloc_btree.h (86%) rename {include =3D> libxfs}/xfs_inode_buf.h (95%) rename {include =3D> libxfs}/xfs_inode_fork.h (99%) rename {include =3D> libxfs}/xfs_log_format.h (99%) rename {include =3D> libxfs}/xfs_quota_defs.h (97%) create mode 100644 libxfs/xfs_sb.h rename {include =3D> libxfs}/xfs_shared.h (91%) rename {include =3D> libxfs}/xfs_trans_resv.h (97%) rename {include =3D> libxfs}/xfs_trans_space.h (95%) rename {include =3D> libxfs}/xfs_types.h (82%) create mode 100755 tools/libxfs-apply --=20 Dave Chinner david@fromorbit.com --Yylu36WmvOXNoKYn Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBAgAGBQJVlS++AAoJEK3oKUf0dfodHzcP/R/nwfcaeN226PIdNjueYAHZ veNe1IbEIfSv8gxJQk0g/P9rpHUbjUblKaDRsfu6Ukm6IcGw0D/EwPkN/qoW5hzM QJkfpOqwWv8qOmAncO5PoTMvcAwc9dqve/ptHqB1SNHQWW7AbSJVfCdya3VzeLRn mpA/Gy9AHJpNHbwU38+ub76Y/E/JOgizOnoucTdpotovC+/OTNFeRuVjtF4I9Znw XeZghgB1s/3kUru/TjcIoloH9BSJQCtrB9UO7Ex60w5toeBF5HO6TJ6tgfSoBXri ihjYR8+dw/uJ7F2anRvC7ysD+um+e6BjevG1SRoojsEBR+NjXM4W9GcV47TAeqmd gAOS2H7z2PRapKDiC6BO+nDeSgXTtAumu+lOhPSNJVECMcAy1qXm22rNXV0frgNV 8uL8cd64pDnpMzohDLyWJ6Qz1QIE+Im7Oj2pMLFxDGmKpevL6tQvp7z7z5mrljJf uMzYbmo0t4dXYq58j8jzxLWaylIIfFilT2Hpd1uveCSzCK0nTcRxq+6wVXHtEOzw pRKIVIMOcOAB9TmTrbTOCCugxkOY5BosgJsYSNwbuaDTNO8C5fvk7EO+Mfq+mTVS +B1Du0YKaZv0C56lP6t3BiEtBLOziELPajRNPc3SN1SroAIELAPI81XeTdUvrgrF Ne9OJgpJ99cqy1r62K2Z =HTbT -----END PGP SIGNATURE----- --Yylu36WmvOXNoKYn-- From jtulak@redhat.com Thu Jul 2 07:48:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9162C7FA3 for ; Thu, 2 Jul 2015 07:48:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4C2568F8049 for ; Thu, 2 Jul 2015 05:47:57 -0700 (PDT) X-ASG-Debug-ID: 1435841274-04bdf007870fbf0001-NocioJ Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id CExA765gdXAmfCoS (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Jul 2015 05:47:54 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t62ClsqX010988; Thu, 2 Jul 2015 08:47:54 -0400 Date: Thu, 2 Jul 2015 08:47:53 -0400 (EDT) From: Jan Tulak To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Message-ID: <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> In-Reply-To: <20150625193748.GE36162@bfoster.bfoster> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.36.6.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: use common code for multi-disk detection Thread-Index: lgANWQN6/YHYHrEFRzo02+ds/S32wQ== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1435841274 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20389 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > From: "Brian Foster" > To: "Jan =C5=A4ul=C3=A1k" > Cc: "Dave Chinner" , xfs@oss.sgi.com > Sent: Thursday, June 25, 2015 9:37:48 PM > Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detec= tion >=20 > On Fri, Jun 19, 2015 at 01:01:50PM +0200, Jan =C5=A4ul=C3=A1k wrote: > > From: Dave Chinner > >=20 > > Both xfs_repair and mkfs.xfs need to agree on what is a "multidisk: > > configuration - mkfs for determining the AG count of the filesystem, > > repair for determining how to automatically parallelise it's > > execution. This requires a bunch of common defines that both mkfs > > and reapir need to share. > >=20 > > In fact, most of the defines in xfs_mkfs.h could be shared with > > other programs (i.e. all the defaults mkfs uses) and so it is > > simplest to move xfs_mkfs.h to the shared include directory and add > > the new defines to it directly. > >=20 > > Signed-off-by: Dave Chinner > > Signed-off-by: Jan =C5=A4ul=C3=A1k > > --- > > include/Makefile | 8 ++++- > > include/xfs_mkfs.h | 98 > > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > > mkfs/Makefile | 2 +- > > mkfs/xfs_mkfs.c | 56 +++++++++++++++--------------- > > mkfs/xfs_mkfs.h | 89 ---------------------------------------------= --- > > repair/xfs_repair.c | 45 ++++++++++++++++++++++-- > > 6 files changed, 178 insertions(+), 120 deletions(-) > > create mode 100644 include/xfs_mkfs.h > > delete mode 100644 mkfs/xfs_mkfs.h > >=20 > > diff --git a/include/Makefile b/include/Makefile > > index 70e43a0..3269ec3 100644 > > --- a/include/Makefile > > +++ b/include/Makefile > > @@ -26,9 +26,15 @@ QAHFILES =3D libxfs.h libxlog.h \ > > =09xfs_inode.h \ > > =09xfs_log_recover.h \ > > =09xfs_metadump.h \ > > +=09xfs_mkfs.h \ > > =09xfs_mount.h \ > > +=09xfs_quota_defs.h \ > > +=09xfs_sb.h \ > > +=09xfs_shared.h \ > > =09xfs_trace.h \ > > -=09xfs_trans.h > > +=09xfs_trans.h \ > > +=09xfs_trans_resv.h \ > > +=09xfs_trans_space.h > > =20 > > HFILES =3D handle.h jdm.h xqm.h xfs.h > > HFILES +=3D $(PKG_PLATFORM).h > > diff --git a/include/xfs_mkfs.h b/include/xfs_mkfs.h > > new file mode 100644 > > index 0000000..3388f6d > > --- /dev/null > > +++ b/include/xfs_mkfs.h > > @@ -0,0 +1,98 @@ > > +/* > > + * Copyright (c) 2000-2001,2004-2005 Silicon Graphics, Inc. > > + * All Rights Reserved. > > + * > > + * This program is free software; you can redistribute it and/or > > + * modify it under the terms of the GNU General Public License as > > + * published by the Free Software Foundation. > > + * > > + * This program is distributed in the hope that it would be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + * You should have received a copy of the GNU General Public License > > + * along with this program; if not, write the Free Software Foundation= , > > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > + */ > > +#ifndef __XFS_MKFS_H__ > > +#define=09__XFS_MKFS_H__ > > + > > +#define XFS_DFL_SB_VERSION_BITS \ > > + (XFS_SB_VERSION_NLINKBIT | \ > > + XFS_SB_VERSION_EXTFLGBIT | \ > > + XFS_SB_VERSION_DIRV2BIT) > > + > > +#define XFS_SB_VERSION_MKFS(crc,ia,dia,log2,attr1,sflag,ci,more) (\ > > +=09((crc)||(ia)||(dia)||(log2)||(attr1)||(sflag)||(ci)||(more)) ? \ > > +=09(((crc) ? XFS_SB_VERSION_5 : XFS_SB_VERSION_4) |=09=09\ > > +=09=09((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) |=09=09=09\ > > +=09=09((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) |=09=09\ > > +=09=09((log2) ? XFS_SB_VERSION_LOGV2BIT : 0) |=09=09\ > > +=09=09((attr1) ? XFS_SB_VERSION_ATTRBIT : 0) |=09=09\ > > +=09=09((sflag) ? XFS_SB_VERSION_SECTORBIT : 0) |=09=09\ > > +=09=09((ci) ? XFS_SB_VERSION_BORGBIT : 0) |=09=09=09\ > > +=09=09((more) ? XFS_SB_VERSION_MOREBITSBIT : 0) |=09=09\ > > +=09 XFS_DFL_SB_VERSION_BITS | \ > > +=090 ) : XFS_SB_VERSION_1 ) > > + > > +#define XFS_SB_VERSION2_MKFS(crc, lazycount, attr2, projid32bit, paren= t, \ > > +=09=09=09 ftype) (\ > > +=09((lazycount) ? XFS_SB_VERSION2_LAZYSBCOUNTBIT : 0) |=09=09\ > > +=09((attr2) ? XFS_SB_VERSION2_ATTR2BIT : 0) |=09=09=09\ > > +=09((projid32bit) ? XFS_SB_VERSION2_PROJID32BIT : 0) |=09=09\ > > +=09((parent) ? XFS_SB_VERSION2_PARENTBIT : 0) |=09=09=09\ > > +=09((crc) ? XFS_SB_VERSION2_CRCBIT : 0) |=09=09=09=09\ > > +=09((ftype) ? XFS_SB_VERSION2_FTYPE : 0) |=09=09=09=09\ > > +=090 ) > > + > > +#define=09XFS_DFL_BLOCKSIZE_LOG=0912=09=09/* 4096 byte blocks */ > > +#define=09XFS_DINODE_DFL_LOG=098=09=09/* 256 byte inodes */ > > +#define=09XFS_DINODE_DFL_CRC_LOG=099=09=09/* 512 byte inodes for CRCs = */ > > +#define=09XFS_MIN_DATA_BLOCKS=09100 > > +#define=09XFS_MIN_INODE_PERBLOCK=092=09=09/* min inodes per block */ > > +#define=09XFS_DFL_IMAXIMUM_PCT=0925=09=09/* max % of space for inodes = */ > > +#define=09XFS_IFLAG_ALIGN=09=091=09=09/* -i align defaults on */ > > +#define=09XFS_MIN_REC_DIRSIZE=0912=09=09/* 4096 byte dirblocks (V2) */ > > +#define=09XFS_DFL_DIR_VERSION=092=09=09/* default directory version */ > > +#define=09XFS_DFL_LOG_SIZE=091000=09=09/* default log size, blocks */ > > +#define=09XFS_DFL_LOG_FACTOR=095=09=09/* default log size, factor */ > > +=09=09=09=09=09=09/* with max trans reservation */ > > +#define XFS_MAX_INODE_SIG_BITS=0932=09=09/* most significant bits in a= n > > +=09=09=09=09=09=09 * inode number that we'll > > +=09=09=09=09=09=09 * accept w/o warnings > > +=09=09=09=09=09=09 */ > > + > > +#define XFS_AG_BYTES(bblog)=09((long long)BBSIZE << (bblog)) > > +#define=09XFS_AG_MIN_BYTES=09((XFS_AG_BYTES(15)))=09/* 16 MB */ > > +#define XFS_AG_MIN_BLOCKS(blog)=09((XFS_AG_BYTES(15)) >> (blog)) > > +#define XFS_AG_MAX_BLOCKS(blog)=09((XFS_AG_BYTES(31) - 1) >> (blog)) > > + > > +#define XFS_MAX_AGNUMBER=09((xfs_agnumber_t)(NULLAGNUMBER - 1)) > > + > > +/* > > + * These values define what we consider a "multi-disk" filesystem. Tha= t > > is, a > > + * filesystem that is likely to be made up of multiple devices, and he= nce > > have > > + * some level of parallelism avoid to it at the IO level. > > + */ > > +#define XFS_MULTIDISK_AGLOG=09=095=09/* 32 AGs */ > > +#define XFS_NOMULTIDISK_AGLOG=09=092=09/* 4 AGs */ > > +#define XFS_MULTIDISK_AGCOUNT=09=09(1 << XFS_MULTIDISK_AGLOG) > > + > > + > > +/* xfs_mkfs.c */ > > +extern int isdigits (char *str); > > +extern long long cvtnum (unsigned int blocksize, > > +=09=09=09 unsigned int sectorsize, char *s); > > + > > +/* proto.c */ > > +extern char *setup_proto (char *fname); > > +extern void parse_proto (xfs_mount_t *mp, struct fsxattr *fsx, char **= pp); > > +extern void res_failed (int err); > > + > > +/* maxtrres.c */ > > +extern int max_trans_res (int crcs_enabled, int dirversion, > > +=09=09int sectorlog, int blocklog, int inodelog, int dirblocklog, > > +=09=09int logversion, int log_sunit); > > + > > +#endif=09/* __XFS_MKFS_H__ */ > > diff --git a/mkfs/Makefile b/mkfs/Makefile > > index fd1f615..82326e0 100644 > > --- a/mkfs/Makefile > > +++ b/mkfs/Makefile > > @@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs > > LTCOMMAND =3D mkfs.xfs > > FSTYP =3D fstyp > > =20 > > -HFILES =3D xfs_mkfs.h > > +HFILES =3D > > CFILES =3D maxtrres.c proto.c xfs_mkfs.c > > =20 > > ifeq ($(ENABLE_BLKID),yes) > > diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c > > index 83f7749..d0de90d 100644 > > --- a/mkfs/xfs_mkfs.c > > +++ b/mkfs/xfs_mkfs.c > > @@ -24,7 +24,7 @@ > > #include > > #include > > #endif > > -#include "xfs_mkfs.h" > > +#include > > =20 > > /* > > * Device topology information. > > @@ -688,43 +688,45 @@ calc_default_ag_geometry( > > =09} > > =20 > > =09/* > > -=09 * For the remainder we choose an AG size based on the > > -=09 * number of data blocks available, trying to keep the > > -=09 * number of AGs relatively small (especially compared > > -=09 * to the original algorithm). AG count is calculated > > -=09 * based on the preferred AG size, not vice-versa - the > > -=09 * count can be increased by growfs, so prefer to use > > -=09 * smaller counts at mkfs time. > > -=09 * > > -=09 * For a single underlying storage device between 128MB > > -=09 * and 4TB in size, just use 4 AGs, otherwise scale up > > -=09 * smoothly between min/max AG sizes. > > +=09 * For a single underlying storage device between 128MB and 4TB in = size > > +=09 * just use 4 AGs and scale up smoothly between min/max AG sizes. > > =09 */ > > - > > -=09if (!multidisk && dblocks >=3D MEGABYTES(128, blocklog)) { > > +=09if (!multidisk) { > > =09=09if (dblocks >=3D TERABYTES(4, blocklog)) { > > =09=09=09blocks =3D XFS_AG_MAX_BLOCKS(blocklog); > > =09=09=09goto done; > > +=09=09} else if (dblocks >=3D MEGABYTES(128, blocklog)) { > > +=09=09=09shift =3D XFS_NOMULTIDISK_AGLOG; > > +=09=09=09goto calc_blocks; > > =09=09} > > -=09=09shift =3D 2; > > -=09} else if (dblocks > GIGABYTES(512, blocklog)) > > -=09=09shift =3D 5; > > -=09else if (dblocks > GIGABYTES(8, blocklog)) > > -=09=09shift =3D 4; > > -=09else if (dblocks >=3D MEGABYTES(128, blocklog)) > > -=09=09shift =3D 3; > > -=09else if (dblocks >=3D MEGABYTES(64, blocklog)) > > -=09=09shift =3D 2; > > -=09else if (dblocks >=3D MEGABYTES(32, blocklog)) > > -=09=09shift =3D 1; > > -=09else > > -=09=09shift =3D 0; > > +=09} > > + > > +=09/* > > +=09 * For the multidisk configs we choose an AG count based on the num= ber > > +=09 * of data blocks available, trying to keep the number of AGs highe= r > > +=09 * than the single disk configurations. This makes the assumption t= hat > > +=09 * larger filesystems have more parallelism available to them. > > +=09 */ > > +=09shift =3D XFS_MULTIDISK_AGLOG; > > +=09if (dblocks < GIGABYTES(512, blocklog)) > > +=09=09shift--; > > +=09if (dblocks < GIGABYTES(8, blocklog)) > > +=09=09shift--; > > +=09if (dblocks < MEGABYTES(128, blocklog)) > > +=09=09shift--; > > +=09if (dblocks < MEGABYTES(64, blocklog)) > > +=09=09shift--; > > +=09if (dblocks < MEGABYTES(32, blocklog)) > > +=09=09shift--; > > + >=20 > Intended change in behavior of the defaults for fs' that match these > size thresholds (the 512g and 8g ones anyways)? For example, in the old > code a 512GB fs gets a shift of 4 while the same fs gets shift =3D 5 in > the new code. >=20 > Brian When I look on the code, where did you got the 4 vs 5? In the old code, for= 512GB and bigger is assigned shift=3D5 directly. In the new one, shift is = set to XFS_MULTIDISK_AGLOG which is 5, and then, if the disk is smaller tha= n 512GB, it decrements the value. But unless I'm missing something, the mul= tidisk configuration is not changing anything, there is just a different sy= ntax. Cheers, Jan --=20 Jan Tulak jtulak@redhat.com From bakqanbewkqc@korea.com Thu Jul 2 09:05:20 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5D2077FC5 for ; Thu, 2 Jul 2015 09:05:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E9450AC006 for ; Thu, 2 Jul 2015 07:05:19 -0700 (PDT) X-ASG-Debug-ID: 1435845912-04bdf0078b11610001-NocioJ Received: from r-smtp6.korea.com ([89.219.85.158]) by cuda.sgi.com with ESMTP id CQyN93yEzWh0sWcV for ; Thu, 02 Jul 2015 07:05:14 -0700 (PDT) X-Barracuda-Envelope-From: bakqanbewkqc@korea.com X-Barracuda-Apparent-Source-IP: 89.219.85.158 Message-ID: <3122C1DE10FE6527C889AAF394CCAD22@R-SMTP6.KOREA.COM> From: "=?utf-8?B?VGF4IGFuZCBGaW5hbmNl?=" To: Subject: =?utf-8?B?0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsNC70L7Qs9C+0LLRi9C80Lgg?= =?utf-8?B?0YDQuNGB0LrQsNC80Lg=?= Date: Thu, 2 Jul 2015 17:05:09 +0300 X-ASG-Orig-Subj: =?utf-8?B?0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsNC70L7Qs9C+0LLRi9C80Lgg?= =?utf-8?B?0YDQuNGB0LrQsNC80Lg=?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_00DD_01D0B4E9.40974720" X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Mailer: Microsoft Windows Live Mail 15.4.3555.308 X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308 X-Barracuda-Connect: UNKNOWN[89.219.85.158] X-Barracuda-Start-Time: 1435845913 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.66 X-Barracuda-Spam-Status: No, SCORE=1.66 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20390 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 MIME. ------=_NextPart_000_00DD_01D0B4E9.40974720 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable =D0=B3. =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B0 06 - 07 =D0=B8=D1=8E=D0=BB=D1=8F c 10:00 =D0=B4=D0=BE 17:30 " =D0=90 =D0=BB =D0=B3 =D0=BE =D1=80 =D0=B8 =D1=82 =D0=BC =D1=8B = =D0=BD =D0=B0 =D0=BB =D0=BE =D0=B3 =D0=BE =D0=B2 =D0=BE =D0=B9 =D0=BE = =D0=BF =D1=82 =D0=B8 =D0=BC =D0=B8 =D0=B7 =D0=B0 =D1=86 =D0=B8 =D0=B8:=20 =D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7 = =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0= =B8 =D0=B8 =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2 " =D0=9C=D0=B5=D1=81=D1=82=D0=BE = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F: = =D1=83=D0=BB. = =D0=91=D0=B0=D1=83=D0=BC=D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F, =D0=B4.6, = =D0=91.=D0=A6. "=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=9F=D0=BB=D0=B0=D0=B7=D0=B0". =D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9 = =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F! =D0=9F=D0=BE=D0=BB=D0=BD=D0=B0=D1=8F = =D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0 = =D0=BE=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F, =D0=B0 = =D1=82=D0=B0=D0=BA=D0=B6=D0=B5 =D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C = =D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F = =D0=BF=D0=BE =D1=82=D0=B5=D0=BB.: =D0=BA=D0=BE=D0=B4 =D0=B3=D0=BE=D1=80=D0=BE=D0=B4=D0=B0 (495) = =D1=82=D0=B5=D0=BB.725-04-48(=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=D0=BA=D0=B0=D0= =BD=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9) =D0=A6=D0=B5=D0=BB=D0=B8 = =D0=BE=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F: = =D0=9F=D1=80=D0=B8=D0=BE=D0=B1=D1=80=D0=B5=D1=81=D1=82=D0=B8 = =D1=83=D0=BC=D0=B5=D0=BD=D0=B8=D1=8F =D0=B8 = =D0=BD=D0=B0=D0=B2=D1=8B=D0=BA=D0=B8 =D0=B2 = =D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D0=BA=D0=B0=D0=BA =D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B0 =D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8 = =D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0= =BD=D0=B8=D1=8F; =D0=BE=D0=B1=D1=81=D1=83=D0=B4=D0=B8=D1=82=D1=8C = =D0=BF=D0=BE=D0=B4=D1=85=D0=BE=D0=B4=D1=8B =D0=BA = =D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=B8. =20 =20 =D0=9A=D1=80=D0=B0=D1=82=D0=BA=D0=BE=D0=B5 = =D1=81=D0=BE=D0=B4=D0=B5=D1=80=D0=B6=D0=B0=D0=BD=D0=B8=D0=B5: 1. =D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D1=8C = "=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=81=D1=85=D0=B5=D0=BC" =D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8. 2. =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D1=81=D0=BD=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=9D=D0=94=D0=A1. =D0=9C=D0=BD=D0=B8=D0=BC=D1=8B=D0=B5 =D0=B8 = =D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5 = =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D1=8B. 3. =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D1=83 =D0=BD=D0=B0 = =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D1=8C. 4. =D0=AD=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D1=8F =D0=BD=D0=B0 = =D1=81=D1=82=D1=80=D0=B0=D1=85=D0=BE=D0=B2=D1=8B=D1=85 = =D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=D1=85. = =D0=9F=D0=BE=D0=BF=D1=83=D0=BB=D1=8F=D1=80=D0=BD=D1=8B=D0=B5 = =D0=B8=D0=B4=D0=B5=D0=B8 =D0=B8 =D0=BD=D0=BE=D0=B2=D1=8B=D0=B5 = =C2=AB=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=C2= =BB. =D0=A0=D0=B8=D1=81=D0=BA=D0=B8 =D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B2=D0=B0=D0=BB=D0=B8=D1=84=D0=B8=D0=BA=D0= =B0=D1=86=D0=B8=D0=B8 =D0=B8 =D0=B8=D0=BD=D1=8B=D0=B5 = =D0=BE=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F. 5. "=D0=90=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5" = =D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D1=8B, = =D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D0=BC=D1=8B=D0=B5 = =D0=B4=D0=BB=D1=8F =D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F = =D0=B4=D1=80=D1=83=D0=B3=D0=B8=D1=85 =D0=B7=D0=B0=D0=B4=D0=B0=D1=87. = =D0=9E=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C = =D0=B4=D0=BB=D1=8F =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=BB=D1= =8C=D1=89=D0=B8=D0=BA=D0=BE=D0=B2. =D0=A3=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B5 - 22800=D1=80. =D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9 = =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F! =D0=92=D1=85=D0=BE=D0=B4=D0=B8=D1=82 = =D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9 = =D0=BC=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=B0=D0=BB, = =D0=BE=D0=B1=D0=B5=D0=B4=D1=8B, = =D0=BA=D0=BE=D1=84=D0=B5-=D0=BF=D0=B0=D1=83=D0=B7=D1=8B, = =D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82. ------=_NextPart_000_00DD_01D0B4E9.40974720 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable
=D0=B3. = =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B0
06 - 07 =D0=B8=D1=8E=D0=BB=D1=8F
c 10:00 =D0=B4=D0=BE = 17:30
 
" =D0=90 =D0=BB =D0=B3 =D0=BE =D1=80 =D0=B8 =D1=82 = =D0=BC =D1=8B   =D0=BD =D0=B0 =D0=BB =D0=BE =D0=B3 =D0=BE = =D0=B2 =D0=BE =D0=B9  =20 =D0=BE =D0=BF =D1=82 =D0=B8 =D0=BC =D0=B8 =D0=B7 =D0=B0 =D1=86 =D0=B8 = =D0=B8:
=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7 = =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0= =B8 =D0=B8 =D1=80=D0=B8=D1=81=D0=BA=D0=BE=D0=B2 "
 
=D0=9C=D0=B5=D1=81=D1=82=D0=BE = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F: = =D1=83=D0=BB. = =D0=91=D0=B0=D1=83=D0=BC=D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F, =D0=B4.6, = =D0=91.=D0=A6. "=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F=20 =D0=9F=D0=BB=D0=B0=D0=B7=D0=B0".
=D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9=20 =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F!
 
=D0=9F=D0=BE=D0=BB=D0=BD=D0=B0=D1=8F = =D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0 = =D0=BE=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F, =D0=B0 = =D1=82=D0=B0=D0=BA=D0=B6=D0=B5 =D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C = =D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F = =D0=BF=D0=BE=20 =D1=82=D0=B5=D0=BB.:
=D0=BA=D0=BE=D0=B4 = =D0=B3=D0=BE=D1=80=D0=BE=D0=B4=D0=B0 (495) =20 =D1=82=D0=B5=D0=BB.725-04-48(=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=D0=BA=D0=B0=D0= =BD=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9)
 
=D0=A6=D0=B5=D0=BB=D0=B8 = =D0=BE=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F: = =D0=9F=D1=80=D0=B8=D0=BE=D0=B1=D1=80=D0=B5=D1=81=D1=82=D0=B8 = =D1=83=D0=BC=D0=B5=D0=BD=D0=B8=D1=8F =D0=B8 = =D0=BD=D0=B0=D0=B2=D1=8B=D0=BA=D0=B8 =D0=B2 = =D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20 =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F = =D0=BA=D0=B0=D0=BA = =D1=81=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B0
=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8= =D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=B5=D0= =BD=D0=B8=D1=8F; =D0=BE=D0=B1=D1=81=D1=83=D0=B4=D0=B8=D1=82=D1=8C = =D0=BF=D0=BE=D0=B4=D1=85=D0=BE=D0=B4=D1=8B =D0=BA=20 =D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=B8.
     
 
=D0=9A=D1=80=D0=B0=D1=82=D0=BA=D0=BE=D0=B5 = =D1=81=D0=BE=D0=B4=D0=B5=D1=80=D0=B6=D0=B0=D0=BD=D0=B8=D0=B5:
 
1. = =D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D1=8C = "=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85 = =D1=81=D1=85=D0=B5=D0=BC" =D0=B8 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=80=D0=B8=D1=81=D0=BA=D0=B8.
 
2. =D0=A1=D1=85=D0=B5=D0=BC=D1=8B = =D1=81=D0=BD=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=9D=D0=94=D0=A1. =D0=9C=D0=BD=D0=B8=D0=BC=D1=8B=D0=B5 =D0=B8 = =D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20 =D1=8D=D1=84=D1=84=D0=B5=D0=BA=D1=82=D1=8B.
 
3. = =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9 = =D0=BD=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8 =D0=BF=D0=BE = =D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D1=83 =D0=BD=D0=B0=20 =D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D1=8C.
 
4. =D0=AD=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D1=8F = =D0=BD=D0=B0 =D1=81=D1=82=D1=80=D0=B0=D1=85=D0=BE=D0=B2=D1=8B=D1=85 = =D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=D1=85. = =D0=9F=D0=BE=D0=BF=D1=83=D0=BB=D1=8F=D1=80=D0=BD=D1=8B=D0=B5 = =D0=B8=D0=B4=D0=B5=D0=B8 =D0=B8 =D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20 =C2=AB=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=C2= =BB. =D0=A0=D0=B8=D1=81=D0=BA=D0=B8
=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B2=D0=B0=D0=BB=D0=B8=D1=84=D0=B8= =D0=BA=D0=B0=D1=86=D0=B8=D0=B8 =D0=B8 =D0=B8=D0=BD=D1=8B=D0=B5 = =D0=BE=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F.
 
5. = "=D0=90=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5" = =D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D1=8B, = =D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D0=BC=D1=8B=D0=B5 = =D0=B4=D0=BB=D1=8F =D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F = =D0=B4=D1=80=D1=83=D0=B3=D0=B8=D1=85 =D0=B7=D0=B0=D0=B4=D0=B0=D1=87.=20 =D0=9E=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C = =D0=B4=D0=BB=D1=8F
=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B5= =D0=BB=D1=8C=D1=89=D0=B8=D0=BA=D0=BE=D0=B2.
 
=D0=A3=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B5 - = 22800=D1=80.
=D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9=20 =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F!
=D0=92=D1=85=D0=BE=D0=B4=D0=B8=D1=82 = =D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9 = =D0=BC=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=B0=D0=BB, = =D0=BE=D0=B1=D0=B5=D0=B4=D1=8B, = =D0=BA=D0=BE=D1=84=D0=B5-=D0=BF=D0=B0=D1=83=D0=B7=D1=8B,=20 =D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82.
------=_NextPart_000_00DD_01D0B4E9.40974720-- From bfoster@redhat.com Thu Jul 2 09:14:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5F6487FC7 for ; Thu, 2 Jul 2015 09:14:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C663BAC00A for ; Thu, 2 Jul 2015 07:14:07 -0700 (PDT) X-ASG-Debug-ID: 1435846446-04cbb050d110e50001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id OTEeDZJMP8RoGE47 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Jul 2015 07:14:06 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 04B8ABE273 for ; Thu, 2 Jul 2015 14:14:05 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t62EE5dG014568; Thu, 2 Jul 2015 10:14:05 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 3C224124B3C; Thu, 2 Jul 2015 10:14:04 -0400 (EDT) Date: Thu, 2 Jul 2015 10:14:04 -0400 From: Brian Foster To: Jan Tulak Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Message-ID: <20150702141403.GA61817@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1435846446 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 02, 2015 at 08:47:53AM -0400, Jan Tulak wrote: > > > ----- Original Message ----- > > From: "Brian Foster" > > To: "Jan Ťulák" > > Cc: "Dave Chinner" , xfs@oss.sgi.com > > Sent: Thursday, June 25, 2015 9:37:48 PM > > Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection > > > > On Fri, Jun 19, 2015 at 01:01:50PM +0200, Jan Ťulák wrote: > > > From: Dave Chinner > > > > > > Both xfs_repair and mkfs.xfs need to agree on what is a "multidisk: > > > configuration - mkfs for determining the AG count of the filesystem, > > > repair for determining how to automatically parallelise it's > > > execution. This requires a bunch of common defines that both mkfs > > > and reapir need to share. > > > > > > In fact, most of the defines in xfs_mkfs.h could be shared with > > > other programs (i.e. all the defaults mkfs uses) and so it is > > > simplest to move xfs_mkfs.h to the shared include directory and add > > > the new defines to it directly. > > > > > > Signed-off-by: Dave Chinner > > > Signed-off-by: Jan Ťulák > > > --- > > > include/Makefile | 8 ++++- > > > include/xfs_mkfs.h | 98 > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > mkfs/Makefile | 2 +- > > > mkfs/xfs_mkfs.c | 56 +++++++++++++++--------------- > > > mkfs/xfs_mkfs.h | 89 ------------------------------------------------ > > > repair/xfs_repair.c | 45 ++++++++++++++++++++++-- > > > 6 files changed, 178 insertions(+), 120 deletions(-) > > > create mode 100644 include/xfs_mkfs.h > > > delete mode 100644 mkfs/xfs_mkfs.h > > > > > > diff --git a/include/Makefile b/include/Makefile > > > index 70e43a0..3269ec3 100644 > > > --- a/include/Makefile > > > +++ b/include/Makefile > > > @@ -26,9 +26,15 @@ QAHFILES = libxfs.h libxlog.h \ > > > xfs_inode.h \ > > > xfs_log_recover.h \ > > > xfs_metadump.h \ > > > + xfs_mkfs.h \ > > > xfs_mount.h \ > > > + xfs_quota_defs.h \ > > > + xfs_sb.h \ > > > + xfs_shared.h \ > > > xfs_trace.h \ > > > - xfs_trans.h > > > + xfs_trans.h \ > > > + xfs_trans_resv.h \ > > > + xfs_trans_space.h > > > > > > HFILES = handle.h jdm.h xqm.h xfs.h > > > HFILES += $(PKG_PLATFORM).h > > > diff --git a/include/xfs_mkfs.h b/include/xfs_mkfs.h > > > new file mode 100644 > > > index 0000000..3388f6d > > > --- /dev/null > > > +++ b/include/xfs_mkfs.h > > > @@ -0,0 +1,98 @@ > > > +/* > > > + * Copyright (c) 2000-2001,2004-2005 Silicon Graphics, Inc. > > > + * All Rights Reserved. > > > + * > > > + * This program is free software; you can redistribute it and/or > > > + * modify it under the terms of the GNU General Public License as > > > + * published by the Free Software Foundation. > > > + * > > > + * This program is distributed in the hope that it would be useful, > > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > > + * GNU General Public License for more details. > > > + * > > > + * You should have received a copy of the GNU General Public License > > > + * along with this program; if not, write the Free Software Foundation, > > > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > > + */ > > > +#ifndef __XFS_MKFS_H__ > > > +#define __XFS_MKFS_H__ > > > + > > > +#define XFS_DFL_SB_VERSION_BITS \ > > > + (XFS_SB_VERSION_NLINKBIT | \ > > > + XFS_SB_VERSION_EXTFLGBIT | \ > > > + XFS_SB_VERSION_DIRV2BIT) > > > + > > > +#define XFS_SB_VERSION_MKFS(crc,ia,dia,log2,attr1,sflag,ci,more) (\ > > > + ((crc)||(ia)||(dia)||(log2)||(attr1)||(sflag)||(ci)||(more)) ? \ > > > + (((crc) ? XFS_SB_VERSION_5 : XFS_SB_VERSION_4) | \ > > > + ((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) | \ > > > + ((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) | \ > > > + ((log2) ? XFS_SB_VERSION_LOGV2BIT : 0) | \ > > > + ((attr1) ? XFS_SB_VERSION_ATTRBIT : 0) | \ > > > + ((sflag) ? XFS_SB_VERSION_SECTORBIT : 0) | \ > > > + ((ci) ? XFS_SB_VERSION_BORGBIT : 0) | \ > > > + ((more) ? XFS_SB_VERSION_MOREBITSBIT : 0) | \ > > > + XFS_DFL_SB_VERSION_BITS | \ > > > + 0 ) : XFS_SB_VERSION_1 ) > > > + > > > +#define XFS_SB_VERSION2_MKFS(crc, lazycount, attr2, projid32bit, parent, \ > > > + ftype) (\ > > > + ((lazycount) ? XFS_SB_VERSION2_LAZYSBCOUNTBIT : 0) | \ > > > + ((attr2) ? XFS_SB_VERSION2_ATTR2BIT : 0) | \ > > > + ((projid32bit) ? XFS_SB_VERSION2_PROJID32BIT : 0) | \ > > > + ((parent) ? XFS_SB_VERSION2_PARENTBIT : 0) | \ > > > + ((crc) ? XFS_SB_VERSION2_CRCBIT : 0) | \ > > > + ((ftype) ? XFS_SB_VERSION2_FTYPE : 0) | \ > > > + 0 ) > > > + > > > +#define XFS_DFL_BLOCKSIZE_LOG 12 /* 4096 byte blocks */ > > > +#define XFS_DINODE_DFL_LOG 8 /* 256 byte inodes */ > > > +#define XFS_DINODE_DFL_CRC_LOG 9 /* 512 byte inodes for CRCs */ > > > +#define XFS_MIN_DATA_BLOCKS 100 > > > +#define XFS_MIN_INODE_PERBLOCK 2 /* min inodes per block */ > > > +#define XFS_DFL_IMAXIMUM_PCT 25 /* max % of space for inodes */ > > > +#define XFS_IFLAG_ALIGN 1 /* -i align defaults on */ > > > +#define XFS_MIN_REC_DIRSIZE 12 /* 4096 byte dirblocks (V2) */ > > > +#define XFS_DFL_DIR_VERSION 2 /* default directory version */ > > > +#define XFS_DFL_LOG_SIZE 1000 /* default log size, blocks */ > > > +#define XFS_DFL_LOG_FACTOR 5 /* default log size, factor */ > > > + /* with max trans reservation */ > > > +#define XFS_MAX_INODE_SIG_BITS 32 /* most significant bits in an > > > + * inode number that we'll > > > + * accept w/o warnings > > > + */ > > > + > > > +#define XFS_AG_BYTES(bblog) ((long long)BBSIZE << (bblog)) > > > +#define XFS_AG_MIN_BYTES ((XFS_AG_BYTES(15))) /* 16 MB */ > > > +#define XFS_AG_MIN_BLOCKS(blog) ((XFS_AG_BYTES(15)) >> (blog)) > > > +#define XFS_AG_MAX_BLOCKS(blog) ((XFS_AG_BYTES(31) - 1) >> (blog)) > > > + > > > +#define XFS_MAX_AGNUMBER ((xfs_agnumber_t)(NULLAGNUMBER - 1)) > > > + > > > +/* > > > + * These values define what we consider a "multi-disk" filesystem. That > > > is, a > > > + * filesystem that is likely to be made up of multiple devices, and hence > > > have > > > + * some level of parallelism avoid to it at the IO level. > > > + */ > > > +#define XFS_MULTIDISK_AGLOG 5 /* 32 AGs */ > > > +#define XFS_NOMULTIDISK_AGLOG 2 /* 4 AGs */ > > > +#define XFS_MULTIDISK_AGCOUNT (1 << XFS_MULTIDISK_AGLOG) > > > + > > > + > > > +/* xfs_mkfs.c */ > > > +extern int isdigits (char *str); > > > +extern long long cvtnum (unsigned int blocksize, > > > + unsigned int sectorsize, char *s); > > > + > > > +/* proto.c */ > > > +extern char *setup_proto (char *fname); > > > +extern void parse_proto (xfs_mount_t *mp, struct fsxattr *fsx, char **pp); > > > +extern void res_failed (int err); > > > + > > > +/* maxtrres.c */ > > > +extern int max_trans_res (int crcs_enabled, int dirversion, > > > + int sectorlog, int blocklog, int inodelog, int dirblocklog, > > > + int logversion, int log_sunit); > > > + > > > +#endif /* __XFS_MKFS_H__ */ > > > diff --git a/mkfs/Makefile b/mkfs/Makefile > > > index fd1f615..82326e0 100644 > > > --- a/mkfs/Makefile > > > +++ b/mkfs/Makefile > > > @@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs > > > LTCOMMAND = mkfs.xfs > > > FSTYP = fstyp > > > > > > -HFILES = xfs_mkfs.h > > > +HFILES = > > > CFILES = maxtrres.c proto.c xfs_mkfs.c > > > > > > ifeq ($(ENABLE_BLKID),yes) > > > diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c > > > index 83f7749..d0de90d 100644 > > > --- a/mkfs/xfs_mkfs.c > > > +++ b/mkfs/xfs_mkfs.c > > > @@ -24,7 +24,7 @@ > > > #include > > > #include > > > #endif > > > -#include "xfs_mkfs.h" > > > +#include > > > > > > /* > > > * Device topology information. > > > @@ -688,43 +688,45 @@ calc_default_ag_geometry( > > > } > > > > > > /* > > > - * For the remainder we choose an AG size based on the > > > - * number of data blocks available, trying to keep the > > > - * number of AGs relatively small (especially compared > > > - * to the original algorithm). AG count is calculated > > > - * based on the preferred AG size, not vice-versa - the > > > - * count can be increased by growfs, so prefer to use > > > - * smaller counts at mkfs time. > > > - * > > > - * For a single underlying storage device between 128MB > > > - * and 4TB in size, just use 4 AGs, otherwise scale up > > > - * smoothly between min/max AG sizes. > > > + * For a single underlying storage device between 128MB and 4TB in size > > > + * just use 4 AGs and scale up smoothly between min/max AG sizes. > > > */ > > > - > > > - if (!multidisk && dblocks >= MEGABYTES(128, blocklog)) { > > > + if (!multidisk) { > > > if (dblocks >= TERABYTES(4, blocklog)) { > > > blocks = XFS_AG_MAX_BLOCKS(blocklog); > > > goto done; > > > + } else if (dblocks >= MEGABYTES(128, blocklog)) { > > > + shift = XFS_NOMULTIDISK_AGLOG; > > > + goto calc_blocks; > > > } > > > - shift = 2; > > > - } else if (dblocks > GIGABYTES(512, blocklog)) > > > - shift = 5; > > > - else if (dblocks > GIGABYTES(8, blocklog)) > > > - shift = 4; > > > - else if (dblocks >= MEGABYTES(128, blocklog)) > > > - shift = 3; > > > - else if (dblocks >= MEGABYTES(64, blocklog)) > > > - shift = 2; > > > - else if (dblocks >= MEGABYTES(32, blocklog)) > > > - shift = 1; > > > - else > > > - shift = 0; > > > + } > > > + > > > + /* > > > + * For the multidisk configs we choose an AG count based on the number > > > + * of data blocks available, trying to keep the number of AGs higher > > > + * than the single disk configurations. This makes the assumption that > > > + * larger filesystems have more parallelism available to them. > > > + */ > > > + shift = XFS_MULTIDISK_AGLOG; > > > + if (dblocks < GIGABYTES(512, blocklog)) > > > + shift--; > > > + if (dblocks < GIGABYTES(8, blocklog)) > > > + shift--; > > > + if (dblocks < MEGABYTES(128, blocklog)) > > > + shift--; > > > + if (dblocks < MEGABYTES(64, blocklog)) > > > + shift--; > > > + if (dblocks < MEGABYTES(32, blocklog)) > > > + shift--; > > > + > > > > Intended change in behavior of the defaults for fs' that match these > > size thresholds (the 512g and 8g ones anyways)? For example, in the old > > code a 512GB fs gets a shift of 4 while the same fs gets shift = 5 in > > the new code. > > > > Brian > > When I look on the code, where did you got the 4 vs 5? In the old code, for 512GB and bigger is assigned shift=5 directly. In the new one, shift is set to XFS_MULTIDISK_AGLOG which is 5, and then, if the disk is smaller than 512GB, it decrements the value. But unless I'm missing something, the multidisk configuration is not changing anything, there is just a different syntax. > I was referring to the multidisk case. The old code looks like this: if (!multidisk && dblocks >= MEGABYTES(128, blocklog)) { ... } else if (dblocks > GIGABYTES(512, blocklog)) shift = 5; else if (dblocks > GIGABYTES(8, blocklog)) shift = 4; ... which means if multidisk && dblocks == 512GB, then shift is set to 4. With the new code, we set XFS_MULTIDISK_AGLOG as you noted and then execute: if (dblocks < GIGABYTES(512, blocklog)) shift--; ... ... which will not decrement shift if dblocks == 512GB (i.e., shift is 5). If you're still not convinced, create an exact sized 512GB file, mkfs it (with the su/sw options set for multidisk) with and without this change and observe agcount. :) Brian > Cheers, > Jan > -- > Jan Tulak > jtulak@redhat.com From david@fromorbit.com Thu Jul 2 18:06:47 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CAA537FB5 for ; Thu, 2 Jul 2015 18:06:47 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 96224304039 for ; Thu, 2 Jul 2015 16:06:44 -0700 (PDT) X-ASG-Debug-ID: 1435878400-04bdf007891d6a0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 79PnAZJPfX51oN9w for ; Thu, 02 Jul 2015 16:06:41 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BBCgAww5VVPN6zLHlbgxKBM4ZNpDoGlmeDLgICAQECgU9NAQEBAQEBBwEBAQFBP4QjAQEBAwE6HBgLBQsIAw4HAwklDwUlAwcaE4gnB80cAQEBAQYBAQEBHhiGBIUuhC4KTgeDF4EUBYcFhRKHRzSLZZhKgQmBKRyBZCwxgQUBHgeBIAEBAQ Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail06.adl6.internode.on.net with ESMTP; 03 Jul 2015 08:35:21 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZAnXk-0007EG-Lk; Fri, 03 Jul 2015 09:05:20 +1000 Date: Fri, 3 Jul 2015 09:05:20 +1000 From: Dave Chinner To: Brian Foster Cc: Jan Tulak , xfs@oss.sgi.com, Dave Chinner Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Message-ID: <20150702230520.GA22807@dastard> X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> <20150702141403.GA61817@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150702141403.GA61817@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1435878400 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20409 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 02, 2015 at 10:14:04AM -0400, Brian Foster wrote: > On Thu, Jul 02, 2015 at 08:47:53AM -0400, Jan Tulak wrote: [snip ~250 lines] [ add note about mailing list etiquette w.r.t. trimming the quoted context to just what is being discussed so that readers don't have to scroll through several screens of irrelevant text just to find the discussion. ] > If you're still not convinced, create an exact sized 512GB file, mkfs it > (with the su/sw options set for multidisk) with and without this change > and observe agcount. :) At one point during development of this patch set I started writing an xfstest to validate that mkfs did all the right input validation things and set parameters appropriately so that we didn't inadvertently change behaviour. I never really finished it off (like the patch set), but I've attached it below to give an idea of where I was going with it. It was based on validating the input and CLI parameters for the new code, so is guaranteed to fail on an existing mkfs binary. It's probably a good idea to also validate that things like agcount scale as we expect them to... Cheers, Dave. -- Dave Chinner david@fromorbit.com xfs: add new xfs.mkfs input validation test From: Dave Chinner mkfs.xfs does not do a very good job of input validation. This test is designed to exercise the input validation and test good/bad combinations of options being set. It will not pass on a current mkfs.xfs binary - it is designed to be the test case for a input validation cleanup. Signed-off-by: Dave Chinner --- tests/xfs/401 | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/401.out | 2 + tests/xfs/group | 1 + 3 files changed, 197 insertions(+) diff --git a/tests/xfs/401 b/tests/xfs/401 new file mode 100644 index 0000000..48de395 --- /dev/null +++ b/tests/xfs/401 @@ -0,0 +1,194 @@ +#! /bin/bash +# FS QA Test No. xfs/401 +# +# mkfs.xfs input validation test. Designed to break mkfs.xfs if it doesn't +# filter garbage input or invalid option combinations correctly. +# +#----------------------------------------------------------------------- +# Copyright (c) 2014 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $res" + +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 + +# Modify as appropriate. +_supported_fs xfs +_supported_os Linux +_require_scratch + +echo silence is golden + +# clear out any options to mkfs first. We want to test realtime and external log +# devices if we can, but we also want to control them ourselves. +logdev=$SCRATCH_LOGDEV +rtdev=$SCRATCH_RTDEV + +MKFS_OPTIONS= +SCRATCH_LOGDEV= +SCRATCH_RTDEV= + +# limit the image size of the filesystem being created to something small +fssize=$((4 * 1024 * 1024 * 1024)) +fsimg=$TEST_DIR/$seq.img + +do_mkfs_pass() +{ + echo >> $seqres.full + echo "pass expected $*" >> $seqres.full + $MKFS_XFS_PROG -f -N $* >> $seqres.full 2>&1 + [ $? -ne 0 ] && echo "fail $*" +} + +do_mkfs_fail() +{ + echo >> $seqres.full + echo "fail expected $*" >> $seqres.full + $MKFS_XFS_PROG -f -N $* >> $seqres.full 2>&1 + [ $? -eq 0 ] && echo "pass $*" +} + +do_mkfs_pass $SCRATCH_DEV + +# basic "should fail" options +# logarithm based options are no longer valid +do_mkfs_fail -s log=9 $SCRATCH_DEV +do_mkfs_fail -b log=9 $SCRATCH_DEV +do_mkfs_fail -n log=9 $SCRATCH_DEV +do_mkfs_fail -i log=9 $SCRATCH_DEV +do_mkfs_fail -d sectlog=9 $SCRATCH_DEV +do_mkfs_fail -l sectlog=9 $SCRATCH_DEV + +# specifying sector sizes in sectors or blocks or garbage +do_mkfs_fail -s size=2s $SCRATCH_DEV +do_mkfs_fail -d sectsize=2s $SCRATCH_DEV +do_mkfs_fail -l sectsize=2s $SCRATCH_DEV +do_mkfs_fail -s size=2b $SCRATCH_DEV +do_mkfs_fail -d sectsize=2b $SCRATCH_DEV +do_mkfs_fail -l sectsize=2b $SCRATCH_DEV + +do_mkfs_fail -s size=grot $SCRATCH_DEV +do_mkfs_fail -s size=2yerk $SCRATCH_DEV +do_mkfs_fail -d sectsize=blah $SCRATCH_DEV +do_mkfs_fail -d sectsize=2foo $SCRATCH_DEV +do_mkfs_fail -l sectsize=nggh $SCRATCH_DEV +do_mkfs_fail -l sectsize=2nggh $SCRATCH_DEV + +# conflicting sector/block sizes +do_mkfs_fail -s size=512 -d sectsize=1024 $SCRATCH_DEV +do_mkfs_fail -s size=512 -l sectsize=1024 $SCRATCH_DEV +do_mkfs_fail -d sectsize=2048 -l sectsize=1024 $SCRATCH_DEV + +do_mkfs_fail -b size=512 -s size=1024 $SCRATCH_DEV +do_mkfs_fail -b size=512 -d sectsize=1024 $SCRATCH_DEV +do_mkfs_fail -b size=512 -l sectsize=1024 $SCRATCH_DEV + +# specifying block sizes in sectors without specifying sector size +# or in blocks or garbage +do_mkfs_fail -b size=2s $SCRATCH_DEV +do_mkfs_fail -b size=2b $SCRATCH_DEV +do_mkfs_fail -b size=nfi $SCRATCH_DEV +do_mkfs_fail -b size=4096nfi $SCRATCH_DEV +do_mkfs_fail -n size=2s $SCRATCH_DEV +do_mkfs_fail -n size=2b $SCRATCH_DEV +do_mkfs_fail -n size=nfi $SCRATCH_DEV +do_mkfs_fail -n size=4096nfi $SCRATCH_DEV + +# bad label length +do_mkfs_fail -L thisiswaytoolong $SCRATCH_DEV + +# basic "should pass" data section tests +do_mkfs_pass $SCRATCH_DEV +do_mkfs_pass -d name=$SCRATCH_DEV +do_mkfs_pass -d size=$fssize $SCRATCH_DEV +do_mkfs_pass -d agcount=32 $SCRATCH_DEV +do_mkfs_pass -d agsize=32m $SCRATCH_DEV +do_mkfs_pass -d agsize=32M $SCRATCH_DEV +do_mkfs_pass -d agsize=1g $SCRATCH_DEV +do_mkfs_pass -d agsize=$((32 * 1024 * 1024)) $SCRATCH_DEV +do_mkfs_pass -b size=4096 -d agsize=8192b $SCRATCH_DEV +do_mkfs_pass -d sectsize=512,agsize=65536s $SCRATCH_DEV +do_mkfs_pass -s size=512 -d agsize=65536s $SCRATCH_DEV +do_mkfs_pass -d noalign $SCRATCH_DEV +do_mkfs_pass -d sunit=0,swidth=0 $SCRATCH_DEV +do_mkfs_pass -d sunit=8,swidth=8 $SCRATCH_DEV +do_mkfs_pass -d sunit=8,swidth=64 $SCRATCH_DEV +do_mkfs_pass -d su=0,sw=0 $SCRATCH_DEV +do_mkfs_pass -d su=4096,sw=1 $SCRATCH_DEV +do_mkfs_pass -d su=4k,sw=1 $SCRATCH_DEV +do_mkfs_pass -d su=4K,sw=8 $SCRATCH_DEV +do_mkfs_pass -b size=4096 -d su=1b,sw=8 $SCRATCH_DEV +do_mkfs_pass -d sectsize=512,su=8s,sw=8 $SCRATCH_DEV +do_mkfs_pass -s size=512 -d su=8s,sw=8 $SCRATCH_DEV + +rm -f $fsimg +$XFS_IO_PROG -f -c "truncate $fssize" $fsimg +do_mkfs_pass -d file $fsimg +do_mkfs_pass -d file,name=$fsimg +rm -f $fsimg +do_mkfs_pass -d size=$fssize,file $fsimg +rm -f $fsimg +do_mkfs_pass -d size=$fssize,file,name=$fsimg +do_mkfs_pass -d file,name=$fsimg + +# invalid data section tests +do_mkfs_fail -d size=${fssize}b $SCRATCH_DEV +do_mkfs_fail -d size=${fssize}s $SCRATCH_DEV +do_mkfs_fail -d size=${fssize}yerk $SCRATCH_DEV +do_mkfs_fail -d agsize=8192b $SCRATCH_DEV +do_mkfs_fail -d agsize=65536s $SCRATCH_DEV +do_mkfs_fail -d agsize=32Mbsdfsdo $SCRATCH_DEV +do_mkfs_fail -d agsize=1GB $SCRATCH_DEV +do_mkfs_fail -d agcount=1k $SCRATCH_DEV +do_mkfs_fail -d agcount=6b $SCRATCH_DEV +do_mkfs_fail -d agcount=32,agsize=32m $SCRATCH_DEV +do_mkfs_fail -d sunit=0,swidth=64 $SCRATCH_DEV +do_mkfs_fail -d sunit=64,swidth=0 $SCRATCH_DEV +do_mkfs_fail -d sunit=64,swidth=64,noalign $SCRATCH_DEV +do_mkfs_fail -d sunit=64k,swidth=64 $SCRATCH_DEV +do_mkfs_fail -d sunit=64,swidth=64m $SCRATCH_DEV +do_mkfs_fail -d su=0,sw=64 $SCRATCH_DEV +do_mkfs_fail -d su=4096,sw=0 $SCRATCH_DEV +do_mkfs_fail -d su=4096,sw=64,noalign $SCRATCH_DEV +do_mkfs_fail -d su=4096,sw=64s $SCRATCH_DEV +do_mkfs_fail -d su=4096s,sw=64 $SCRATCH_DEV +do_mkfs_fail -d su=4096b,sw=64 $SCRATCH_DEV +do_mkfs_fail -d su=4096garabge,sw=64 $SCRATCH_DEV +do_mkfs_fail -d su=4096,sw=64,sunit=64,swidth=64 $SCRATCH_DEV + +# naming section tests +do_mkfs_pass -n size=65536 $SCRATCH_DEV + +status=0 +exit diff --git a/tests/xfs/401.out b/tests/xfs/401.out new file mode 100644 index 0000000..aaf601b --- /dev/null +++ b/tests/xfs/401.out @@ -0,0 +1,2 @@ +QA output created by 401 +silence is golden diff --git a/tests/xfs/group b/tests/xfs/group index ba34650..cfee785 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -189,3 +189,4 @@ 304 auto quick quota 305 auto quota 306 auto stress log metadata repair +401 mkfs auto quick From david@fromorbit.com Thu Jul 2 22:34:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E33047F84 for ; Thu, 2 Jul 2015 22:34:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B006A8F8050 for ; Thu, 2 Jul 2015 20:34:32 -0700 (PDT) X-ASG-Debug-ID: 1435894469-04bdf00789221b0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id uzIsOxwgXI9520O6 for ; Thu, 02 Jul 2015 20:34:30 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BECgCOAZZVPN6zLHlbgxIjMV+GTaQ7BpQZAoV6BIFWTQEBAQEBAQcBAQEBQT+EUS87JDQFJQMHLYgupzamLhiGBIpRghcMQYExBYcFjQ2EYYcEgTuMGIJ0iAOBCWYMATYcgWQsMYJLAQEB Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail06.adl6.internode.on.net with ESMTP; 03 Jul 2015 13:04:28 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZArkB-0007XW-9S for xfs@oss.sgi.com; Fri, 03 Jul 2015 13:34:27 +1000 Date: Fri, 3 Jul 2015 13:34:27 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [ANNOUNCE] xfsprogs: for-next branch updated to b488748 Message-ID: <20150703033427.GN7943@dastard> X-ASG-Orig-Subj: [ANNOUNCE] xfsprogs: for-next branch updated to b488748 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="wRRV7LY7NUeQGEoC" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1435894469 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20415 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --wRRV7LY7NUeQGEoC Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi folks, The for-next branch of the xfsprogs repository at git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git has just been updated. This update brings the libxfs code up to the same state as what has just been merged into the 4.2 kernel tree. This update was done using the new libxfs-apply tool to pull the required kernel commits across to the xfsprogs repository, hence the commits retain the correct author and signoffs from the kernel commits. Some of the patches required minor changes outside xfsprogs so I did them as necessary. -Dave. The new head of the master branch is commit: b488748 Merge branch 'libxfs-4.2-rc1-update' into for-next New Commits: Brian Foster (2): [ac2ed13] xfs: always log the inode on unwritten extent conversion [e736ab9] xfs: check min blks for random debug mode sparse allocations Christoph Hellwig (1): [1817f86] xfs: return a void pointer from xfs_buf_offset Dave Chinner (7): [70e6227] xfs: extent size hints can round up extents past MAXEXTLEN [7c128bd] xfs: xfs_attr_inactive leaves inconsistent attr fork state = behind [fe57a2e] xfs: xfs_alloc_fix_freelist() can use incore perag structur= es [d37baa7] xfs: factor out free space extent length check [33f3851] xfs: sanitise error handling in xfs_alloc_fix_freelist [d29c243] xfs: clean up XFS_MIN_FREELIST macros [b488748] Merge branch 'libxfs-4.2-rc1-update' into for-next George Wang (1): [b0e6012] xfs: use percpu_counter_read_positive for mp->m_icount Code Diffstat: libxfs/libxfs_io.h | 2 +- libxfs/libxfs_priv.h | 5 +- libxfs/util.c | 2 +- libxfs/xfs_alloc.c | 239 ++++++++++++++++++++++++++-----------------= ---- libxfs/xfs_alloc.h | 8 +- libxfs/xfs_attr_leaf.c | 8 +- libxfs/xfs_attr_leaf.h | 2 +- libxfs/xfs_bmap.c | 44 ++++++--- libxfs/xfs_format.h | 13 --- libxfs/xfs_ialloc.c | 24 +++-- libxfs/xfs_ialloc.h | 3 +- libxfs/xfs_inode_buf.c | 8 +- libxfs/xfs_trans_resv.h | 4 +- libxfs/xfs_trans_space.h | 2 +- mkfs/xfs_mkfs.c | 12 ++- repair/phase5.c | 3 +- repair/xfs_repair.c | 7 +- 17 files changed, 213 insertions(+), 173 deletions(-) --=20 Dave Chinner david@fromorbit.com --wRRV7LY7NUeQGEoC Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBAgAGBQJVlgLCAAoJEK3oKUf0dfod0t4P/15iqZa3+EecW3ddo9TINQvD bJ1ik4F7bJfwOHKkB9JRYyWoQg1Zz6r4MgMgI4cYNKA5V6+bN8keIdDF9hohPqR+ ZbsjfDaEsdSumez2v7kN/yFjC1XimJI2yqZ5g4iuAbkXNj8krso93O7no4p1tyvf UCYX/Mafl+6geBu2BUrQ6yn2ZXvyjbsDHYBYk7KOuy6eI9/9nGt/RMUav6YEbh00 l6z6DTSty5SO+sMFuoT/olPvdkRgV/Hu5vFyXY6ekGdfWmFARJF7YhIaNJSfHfkh 7OGpAzsGbSBzbWkgQ8EpfelODswUinQmcZ1Do3/0hAcRS57ph9BngMAKlbE3HVQc mwOlqgOSI1C+ps5BR+6DbI5qVW30NGgKdzqBLFeoheTsUU3eOoYSew5ZanwFTmak Hru6qGM6l+tNKOOzZmPDE5hNgipjRuM0rhy/TALyw7BTMI0fXjDCrPek3FHPEwSL FYHVQ7AZbtv81IFh5BCk+g4QowI1DAqfQK/tP02O7uESrk/JIVGihV1odIXoIKGA odLvxcCYpZ42CYPn3pqpOZ17veiJr9aqXZeQ9majvtGuBna7clHohjvv+OjfZnlS 8q+qQpFgZ3/VZviL4POpc+XQK/q+/4YvU5fJaxmjGBDiMeBUY19M9JnverQqf6Gd axvMWsooEofzFplYX7he =Rk5q -----END PGP SIGNATURE----- --wRRV7LY7NUeQGEoC-- From sandeen@sandeen.net Thu Jul 2 22:39:53 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9F1AD7F8D for ; Thu, 2 Jul 2015 22:39:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8BA0C304048 for ; Thu, 2 Jul 2015 20:39:50 -0700 (PDT) X-ASG-Debug-ID: 1435894785-04cbb050d01ffd0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 5oOePk0W1nDKoeGY for ; Thu, 02 Jul 2015 20:39:45 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2A62D60D2E83 for ; Thu, 2 Jul 2015 22:39:45 -0500 (CDT) Message-ID: <55960400.4060106@sandeen.net> Date: Thu, 02 Jul 2015 22:39:44 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfsprogs: simplify patch naming in libxfs-commit Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH] xfsprogs: simplify patch naming in libxfs-commit Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1435894785 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_RULE_7580D X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20415 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.75 BSF_RULE_7580D Custom Rule 7580D Git already knows how to create a patch name from a commit, no need to re-invent it with cats walking on keyboards, entering obfuscated sed contests. ;) Signed-off-by: Eric Sandeen --- Untested, TBH - at least as part of the script. The git command works on its own, given a commit id. diff --git a/tools/libxfs-apply b/tools/libxfs-apply index 4a8c8a6..09e8f40 100755 --- a/tools/libxfs-apply +++ b/tools/libxfs-apply @@ -223,26 +223,6 @@ apply_patch() rm -f $_new_patch } -# name a guilt patch. Code is lifted from guilt import-commit. -name_patch() -{ - s=`git log --no-decorate --pretty=oneline -1 $1 | cut -c 42-` - - # Try to convert the first line of the commit message to a - # valid patch name. - fname=`printf %s "$s" | \ - sed -e "s/&/and/g" -e "s/[ :]/_/g" -e "s,[/\\],-,g" \ - -e "s/['\\[{}]//g" -e 's/]//g' -e 's/\*/-/g' \ - -e 's/\?/-/g' -e 's/\.\.\.*/./g' -e 's/^\.//' \ - -e 's/\.patch$//' -e 's/\.$//' | tr A-Z a-z` - - # Try harder to make it a legal commit name by - # removing all but a few safe characters. - fname=`echo $fname|tr -d -c _a-zA-Z0-9---/\\n` - - echo $fname -} - # single patch is easy. if [ -z "$COMMIT_ID" ]; then apply_patch $PATCH @@ -274,7 +254,7 @@ for commit in $commit_list; do # switch to source repo and pull commit into a patch file pushd $REPO > /dev/null git show $commit > $PATCH || usage "Bad source commit ID!" - patch_name=`name_patch $commit` + patch_name=`git log --format=format:"%f.patch" -1 $commit` popd > /dev/null apply_patch $PATCH $patch_name $commit From sandeen@sandeen.net Thu Jul 2 22:40:42 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CA3927F5A for ; Thu, 2 Jul 2015 22:40:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A3BAE304048 for ; Thu, 2 Jul 2015 20:40:42 -0700 (PDT) X-ASG-Debug-ID: 1435894839-04bdf0078922300001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id z4SD4x7zufMSe17u for ; Thu, 02 Jul 2015 20:40:40 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 940D260D2E83 for ; Thu, 2 Jul 2015 22:40:39 -0500 (CDT) Message-ID: <55960437.1090309@sandeen.net> Date: Thu, 02 Jul 2015 22:40:39 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: Re: [PATCH] xfsprogs: simplify patch naming in libxfs-commit References: <55960400.4060106@sandeen.net> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: simplify patch naming in libxfs-commit In-Reply-To: <55960400.4060106@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1435894839 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_RULE_7580D X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20415 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.75 BSF_RULE_7580D Custom Rule 7580D Gah, tidy up the subject to "libxfs-apply" if you commit it please :) -Eric On 7/2/15 10:39 PM, Eric Sandeen wrote: > Git already knows how to create a patch name from a commit, > no need to re-invent it with cats walking on keyboards, > entering obfuscated sed contests. ;) > > Signed-off-by: Eric Sandeen > --- > > Untested, TBH - at least as part of the script. > > The git command works on its own, given a commit id. > > diff --git a/tools/libxfs-apply b/tools/libxfs-apply > index 4a8c8a6..09e8f40 100755 > --- a/tools/libxfs-apply > +++ b/tools/libxfs-apply > @@ -223,26 +223,6 @@ apply_patch() > rm -f $_new_patch > } > > -# name a guilt patch. Code is lifted from guilt import-commit. > -name_patch() > -{ > - s=`git log --no-decorate --pretty=oneline -1 $1 | cut -c 42-` > - > - # Try to convert the first line of the commit message to a > - # valid patch name. > - fname=`printf %s "$s" | \ > - sed -e "s/&/and/g" -e "s/[ :]/_/g" -e "s,[/\\],-,g" \ > - -e "s/['\\[{}]//g" -e 's/]//g' -e 's/\*/-/g' \ > - -e 's/\?/-/g' -e 's/\.\.\.*/./g' -e 's/^\.//' \ > - -e 's/\.patch$//' -e 's/\.$//' | tr A-Z a-z` > - > - # Try harder to make it a legal commit name by > - # removing all but a few safe characters. > - fname=`echo $fname|tr -d -c _a-zA-Z0-9---/\\n` > - > - echo $fname > -} > - > # single patch is easy. > if [ -z "$COMMIT_ID" ]; then > apply_patch $PATCH > @@ -274,7 +254,7 @@ for commit in $commit_list; do > # switch to source repo and pull commit into a patch file > pushd $REPO > /dev/null > git show $commit > $PATCH || usage "Bad source commit ID!" > - patch_name=`name_patch $commit` > + patch_name=`git log --format=format:"%f.patch" -1 $commit` > popd > /dev/null > > apply_patch $PATCH $patch_name $commit > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From rbh@intomics.com Fri Jul 3 01:27:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EB4007FA6 for ; Fri, 3 Jul 2015 01:27:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 506BCAC00B for ; Thu, 2 Jul 2015 23:27:10 -0700 (PDT) X-ASG-Debug-ID: 1435904825-04cb6c209e25590001-NocioJ Received: from columba.intomics.com (columba.intomics.com [77.72.50.68]) by cuda.sgi.com with ESMTP id VJCd5kbDNpHce1oI for ; Thu, 02 Jul 2015 23:27:05 -0700 (PDT) X-Barracuda-Envelope-From: rbh@intomics.com X-Barracuda-Apparent-Source-IP: 77.72.50.68 Received: from localhost (localhost [127.0.0.1]) by columba.intomics.com (Postfix) with ESMTP id DB7AF220559 for ; Fri, 3 Jul 2015 08:27:04 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at intomics.com Received: from columba ([127.0.0.1]) by localhost (columba.intomics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id so_getlJ42s1 for ; Fri, 3 Jul 2015 08:27:02 +0200 (CEST) Received: from dhcp-0-1-94.intomics.com (dhcp-0-1-94.intomics.com [10.0.1.94]) (Authenticated sender: rbh) by columba.intomics.com (Postfix) with ESMTPSA id C6F85220556 for ; Fri, 3 Jul 2015 08:27:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intomics.com; s=201205; t=1435904822; bh=DXHUqkFPfInevuLh/1JPfXhEXL1znYtOAOGWjFuqk5A=; h=From:Subject:Date:References:To:In-Reply-To; b=Py9FgJBHdXC1T4FcKoV5qbFMKEAA4GnKCGuifSVTWgRBqzeiqZniQBwr/jPuw3vbF LeB74iYwsL6Eq5YZpur5Eo5q/TWFdRSHM1Ud0+Ez2YJnIvRBWmptj+lkLgBwoIm7s7 T3Z3y0XSVXlO57e3pIPzpxL3vDuTA9EsURYUncRg= From: Rasmus Borup Hansen Content-Type: multipart/alternative; boundary="Apple-Mail=_B3E9CFD3-E877-4699-AC92-5E53ABDC7CA2" Message-Id: Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\)) Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Date: Fri, 3 Jul 2015 08:27:28 +0200 X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> To: xfs@oss.sgi.com In-Reply-To: <20150702112623.1c83d473@harpe.intellique.com> X-Mailer: Apple Mail (2.2098) X-Barracuda-Connect: columba.intomics.com[77.72.50.68] X-Barracuda-Start-Time: 1435904825 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.61 X-Barracuda-Spam-Status: No, SCORE=0.61 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_FONT_FACE_BAD, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20418 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word --Apple-Mail=_B3E9CFD3-E877-4699-AC92-5E53ABDC7CA2 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Thank you for the suggestion. I compiled a new xfs_repair, but I got = similar results from running it. Best, Rasmus Intomics is a contract research organization specialized in deriving = core biological insight from large scale data. We help our clients in = the pharmaceutical industry develop tomorrow's medicines better, faster, = and cheaper through optimized use of biomedical data. ----------------------------------------------------------------- Hansen, Rasmus Borup Intomics - from data to biology System Administrator Diplomvej 377 Scientific Programmer DK-2800 Kgs. Lyngby Denmark E: rbh@intomics.com W: http://www.intomics.com/ P: +45 5167 7972 P: +45 8880 7979 > On 02 Jul 2015, at 11:26, Emmanuel Florac = wrote: >=20 > Le Thu, 2 Jul 2015 09:58:19 +0200 > Rasmus Borup Hansen =C3=A9crivait: >=20 >> The file then turns up in lost+found and when I "ls" it I get the >> same errors again. I've tried deleting it from lost+found, but then >> xfs_repair finds it again with exactly the same output as show above >> and puts it back. >>=20 >> Apart from that, everything apparently works fine. >>=20 >> Is there a way to permanently get rid of the file in lost+found? Its >> size is apparently 0 bytes. >=20 > You should try the latest xfs_repair (3.2.3 IIRC) instead of the stock > Ubuntu version (3.1.x probably). >=20 > In case you don't know how to compile it, I've just uploaded it there: >=20 > http://update.intellique.com/pub/xfs_repair-3.2.3.gz >=20 > md5sum : > 756a28228c7e657ce8626d27850f6261 xfs_repair-3.2.3.gz >=20 > Beware of binaries provided by strangers, however this one should be > fine :) gunzip it before use... >=20 > --=20 > = ------------------------------------------------------------------------ > Emmanuel Florac | Direction technique > | Intellique > | > | +33 1 78 94 84 02 > = ------------------------------------------------------------------------ >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --Apple-Mail=_B3E9CFD3-E877-4699-AC92-5E53ABDC7CA2 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
Thank you for the suggestion. I compiled a = new xfs_repair, but I got similar results from running it.

Best,

Rasmus

Intomics is a = contract research organization specialized in deriving core biological = insight from large scale data. We help our clients in the = pharmaceutical industry develop tomorrow's medicines better, = faster, and cheaper through optimized use of biomedical data.
-----------------------------------------------------------------
Hansen, Rasmus Borup         =      Intomics - from data to biology
System Administrator             =  Diplomvej 377
Scientific Programmer =             DK-2800 Kgs. = Lyngby
              =                     = Denmark
E: rbh@intomics.com           =     W: http://www.intomics.com/
P: +45 5167 7972 =                  P: +45 = 8880 7979

On 02 Jul 2015, at 11:26, Emmanuel Florac <eflorac@intellique.com> wrote:

Le Thu, 2 Jul 2015 = 09:58:19 +0200
Rasmus Borup Hansen <rbh@intomics.com> = =C3=A9crivait:

The file then turns up in lost+found and when I "ls" it I get = the
same errors again. I've tried deleting it from = lost+found, but then
xfs_repair finds it again with = exactly the same output as show above
and puts it back.

Apart from that, everything apparently works = fine.

Is there a way to permanently get rid = of the file in lost+found? Its
size is apparently 0 = bytes.

You should try the = latest xfs_repair (3.2.3 IIRC) instead of the stock
Ubuntu = version (3.1.x probably).

In case you don't = know how to compile it, I've just uploaded it there:

http://update.intellique.com/pub/xfs_repair-3.2.3.gz

md5sum :
756a28228c7e657ce8626d27850f6261  xfs_repair-3.2.3.gz

Beware of binaries provided by strangers, = however this one should be
fine :) gunzip it before = use...

--
---------------------------------------------------------------= ---------
Emmanuel Florac     | =   Direction technique
=             &n= bsp;      |   Intellique
=             &n= bsp;      | <eflorac@intellique.com>
=             &n= bsp;      |   +33 1 78 94 84 = 02
---------------------------------------------------------------= ---------

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

= --Apple-Mail=_B3E9CFD3-E877-4699-AC92-5E53ABDC7CA2-- From ag@iss-integration.com Fri Jul 3 04:07:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6B58A7F90 for ; Fri, 3 Jul 2015 04:07:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D8714AC006 for ; Fri, 3 Jul 2015 02:07:35 -0700 (PDT) X-ASG-Debug-ID: 1435914449-04cb6c209c28480001-NocioJ Received: from mail-vn0-f43.google.com (mail-vn0-f43.google.com [209.85.216.43]) by cuda.sgi.com with ESMTP id lt65YSxTzOHajzFg (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 02:07:30 -0700 (PDT) X-Barracuda-Envelope-From: ag@iss-integration.com X-Barracuda-Apparent-Source-IP: 209.85.216.43 Received: by vnbg190 with SMTP id g190so14612564vnb.13 for ; Fri, 03 Jul 2015 02:07:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=gJRmNNO31XVF/xXr0emYNUtR5OZ+pKicwjkjhGXqccY=; b=kRusFnmwEo/nnkEJG7XNokRGSCMoxkZrJcDp+aVpL1DDvWH2UWFAgSXrF2fsg/Qu9t qPy7S2atYI3tLwpbuItYYqQZ+UeIfNxQUXStLf7eI6GXGc28GqIXzF1dsC1zne0ZONQL 88vHeYbcQg9llLL7yRL3xJWJeuydYJISx3Vr1bx5gcQ6r6G2QvtXP+AQYyMz8g5X8MM0 syIgmoutMYW1fOs77FWszsRHxEh1oHX8xYFK3MzGg+GpxDE7SWwMTSTEtCSLUkgBKGrk Jfi7cyNQ63SncBPKSGHRgD6P4PqYcMW1iJnwrHArV7z7hY8v0CMQ1H3fiUylbQrm2vHN mqOg== X-Gm-Message-State: ALoCoQnEte5PZA1DPQUfTp4dNqMXi4VHAYnx00P4UkU9wMlsglMGCscvgnDJlIwHgyPPThFeVgk8 MIME-Version: 1.0 X-Received: by 10.52.6.226 with SMTP id e2mr35510985vda.29.1435914449089; Fri, 03 Jul 2015 02:07:29 -0700 (PDT) Received: by 10.52.103.115 with HTTP; Fri, 3 Jul 2015 02:07:29 -0700 (PDT) Date: Fri, 3 Jul 2015 05:07:29 -0400 Message-ID: Subject: Failing XFS filesystem underlying Ceph OSDs From: Alex Gorbachev X-ASG-Orig-Subj: Failing XFS filesystem underlying Ceph OSDs To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf302ef3caaa8f5f0519f4e22d X-Barracuda-Connect: mail-vn0-f43.google.com[209.85.216.43] X-Barracuda-Start-Time: 1435914449 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20420 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --20cf302ef3caaa8f5f0519f4e22d Content-Type: text/plain; charset=UTF-8 Hello, we are seeing this and similar errors on multiple Supermicro nodes running Ceph. OS is Ubuntu 14.04.2 with kernel 4.1 Thank you for any info and troubleshooting advice. Alex Gorbachev Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.261899] BUG: unable to handle kernel paging request at 000000190000001c Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.261923] IP: [] find_get_entries+0x66/0x160 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.261941] PGD 1035954067 PUD 0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.261955] Oops: 0000 [#1] SMP Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.261969] Modules linked in: xfs libcrc32c ipmi_ssif intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp coretemp kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd sb_edac edac_core lpc_ich joydev mei_me mei ioatdma wmi 8021q ipmi_si garp 8250_fintek mrp ipmi_msghandler stp llc bonding mac_hid lp parport mlx4_en vxlan ip6_udp_tunnel udp_tunnel hid_generic usbhid hid igb ahci mpt2sas mlx4_core i2c_algo_bit libahci dca raid_class ptp scsi_transport_sas pps_core arcmsr Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262182] CPU: 10 PID: 8711 Comm: ceph-osd Not tainted 4.1.0-040100-generic #201506220235 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262197] Hardware name: Supermicro X9DRD-7LN4F(-JBOD)/X9DRD-EF/X9DRD-7LN4F, BIOS 3.0a 12/05/2013 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262215] task: ffff8800721f1420 ti: ffff880fbad54000 task.ti: ffff880fbad54000 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262229] RIP: 0010:[] [] find_get_entries+0x66/0x160 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262248] RSP: 0018:ffff880fbad571a8 EFLAGS: 00010246 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262258] RAX: ffff880004000158 RBX: 000000000000000e RCX: 0000000000000000 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262303] RDX: ffff880004000158 RSI: ffff880fbad571c0 RDI: 0000001900000000 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262347] RBP: ffff880fbad57208 R08: 00000000000000c0 R09: 00000000000000ff Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262391] R10: 0000000000000000 R11: 0000000000000220 R12: 00000000000000b6 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262435] R13: ffff880fbad57268 R14: 000000000000000a R15: ffff880fbad572d8 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262479] FS: 00007f98cb0e0700(0000) GS:ffff88103f480000(0000) knlGS:0000000000000000 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262524] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262551] CR2: 000000190000001c CR3: 0000001034f0e000 CR4: 00000000000407e0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262596] Stack: Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262618] ffff880fbad571f8 ffff880cf6076b30 ffff880bdde05da8 00000000000000e6 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262669] 0000000000000100 ffff880cf6076b28 00000000000000b5 ffff880fbad57258 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262721] ffff880fbad57258 ffff880fbad572d8 ffffffffffffffff ffff880cf6076b28 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262772] Call Trace: Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262801] [] pagevec_lookup_entries+0x22/0x30 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262831] [] truncate_inode_pages_range+0xf4/0x700 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262862] [] truncate_inode_pages+0x15/0x20 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262891] [] truncate_inode_pages_final+0x5f/0xa0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262949] [] xfs_fs_evict_inode+0x3c/0xe0 [xfs] Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.262981] [] evict+0xb8/0x190 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263009] [] dispose_list+0x41/0x50 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263037] [] prune_icache_sb+0x4f/0x60 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263067] [] super_cache_scan+0x155/0x1a0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263096] [] do_shrink_slab+0x13f/0x2c0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263126] [] ? shrink_lruvec+0x330/0x370 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263157] [] ? isolate_migratepages_block+0x299/0x5c0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263188] [] shrink_slab+0xd8/0x110 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263217] [] shrink_zone+0x2cf/0x300 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263246] [] ? compact_zone+0x7d/0x4f0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263275] [] shrink_zones+0x104/0x2a0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263304] [] ? compact_zone_order+0x5d/0x70 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263336] [] ? ktime_get+0x46/0xb0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263365] [] do_try_to_free_pages+0xd7/0x160 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263396] [] try_to_free_pages+0xb7/0x170 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263427] [] __alloc_pages_nodemask+0x5ba/0x9c0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263460] [] alloc_pages_current+0x9c/0x110 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263492] [] allocate_slab+0x20a/0x2e0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263522] [] new_slab+0x31/0x1f0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263553] [] __slab_alloc+0x18e/0x2a3 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263584] [] ? __alloc_skb+0x87/0x2b0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263614] [] ? __alloc_skb+0x57/0x2b0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263643] [] __kmalloc_node_track_caller+0xbb/0x2b0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263675] [] ? __alloc_skb+0x87/0x2b0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263704] [] __kmalloc_reserve.isra.57+0x3c/0xa0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263734] [] __alloc_skb+0x87/0x2b0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263766] [] sk_stream_alloc_skb+0x41/0x130 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263796] [] tcp_sendmsg+0x2d3/0xa90 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263827] [] inet_sendmsg+0x67/0xa0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263858] [] ? copy_msghdr_from_user+0x154/0x1b0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263891] [] sock_sendmsg+0x4d/0x60 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263920] [] ___sys_sendmsg+0x2b3/0x2c0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263950] [] ? ttwu_do_wakeup+0x2c/0x100 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.263979] [] ? ttwu_do_activate.constprop.121+0x66/0x70 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264011] [] ? try_to_wake_up+0x215/0x2a0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264040] [] ? wake_up_state+0x10/0x20 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264071] [] ? wake_futex+0x76/0xb0 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264099] [] ? futex_wake+0x72/0x140 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264127] [] ? __fget_light+0x25/0x70 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264155] [] __sys_sendmsg+0x49/0x90 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264184] [] SyS_sendmsg+0x19/0x20 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264215] [] system_call_fastpath+0x16/0x75 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264243] Code: 00 4c 89 65 c0 31 d2 e9 86 00 00 00 66 0f 1f 84 00 00 00 00 00 48 8b 3a 48 85 ff 0f 84 ad 00 00 00 40 f6 c7 03 0f 85 a9 00 00 00 <8b> 4f 1c 85 c9 74 e3 8d 71 01 4c 8d 47 1c 89 c8 f0 0f b1 77 1c Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264467] RIP [] find_get_entries+0x66/0x160 Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264499] RSP Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264522] CR2: 000000190000001c Jul 3 03:42:06 roc-4r-sca020 kernel: [554036.264824] ---[ end trace ae271fe24c8d817e ]--- --20cf302ef3caaa8f5f0519f4e22d Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hello, we are seeing this and similar errors on multiple S= upermicro nodes running Ceph.=C2=A0 OS is Ubuntu 14.04.2 with kernel 4.1
Thank you for any info and troubleshooting advice.

Alex Gorbachev

Jul =C2=A03 = 03:42:06 roc-4r-sca020 kernel: [554036.261899] BUG: unable to handle kernel= paging request at 000000190000001c
Jul =C2=A03 03:42:06 roc-4r-s= ca020 kernel: [554036.261923] IP: [<ffffffff8118e476>] find_get_entri= es+0x66/0x160
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.= 261941] PGD 1035954067 PUD 0=C2=A0
Jul =C2=A03 03:42:06 roc-4r-sc= a020 kernel: [554036.261955] Oops: 0000 [#1] SMP=C2=A0
Jul =C2=A0= 3 03:42:06 roc-4r-sca020 kernel: [554036.261969] Modules linked in: xfs lib= crc32c ipmi_ssif intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp = coretemp kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel = aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd sb_edac edac_core lp= c_ich joydev mei_me mei ioatdma wmi 8021q ipmi_si garp 8250_fintek mrp ipmi= _msghandler stp llc bonding mac_hid lp parport mlx4_en vxlan ip6_udp_tunnel= udp_tunnel hid_generic usbhid hid igb ahci mpt2sas mlx4_core i2c_algo_bit = libahci dca raid_class ptp scsi_transport_sas pps_core arcmsr
Jul= =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262182] CPU: 10 PID: 8711 C= omm: ceph-osd Not tainted 4.1.0-040100-generic #201506220235
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262197] Hardware name: Super= micro X9DRD-7LN4F(-JBOD)/X9DRD-EF/X9DRD-7LN4F, BIOS 3.0a 12/05/2013
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262215] task: ffff880= 0721f1420 ti: ffff880fbad54000 task.ti: ffff880fbad54000
Jul =C2= =A03 03:42:06 roc-4r-sca020 kernel: [554036.262229] RIP: 0010:[<ffffffff= 8118e476>] =C2=A0[<ffffffff8118e476>] find_get_entries+0x66/0x160<= /div>
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262248] RSP: 0= 018:ffff880fbad571a8 =C2=A0EFLAGS: 00010246
Jul =C2=A03 03:42:06 = roc-4r-sca020 kernel: [554036.262258] RAX: ffff880004000158 RBX: 0000000000= 00000e RCX: 0000000000000000
Jul =C2=A03 03:42:06 roc-4r-sca020 k= ernel: [554036.262303] RDX: ffff880004000158 RSI: ffff880fbad571c0 RDI: 000= 0001900000000
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.= 262347] RBP: ffff880fbad57208 R08: 00000000000000c0 R09: 00000000000000ff
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262391] R10: 00= 00000000000000 R11: 0000000000000220 R12: 00000000000000b6
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262435] R13: ffff880fbad5726= 8 R14: 000000000000000a R15: ffff880fbad572d8
Jul =C2=A03 03:42:0= 6 roc-4r-sca020 kernel: [554036.262479] FS: =C2=A000007f98cb0e0700(0000) GS= :ffff88103f480000(0000) knlGS:0000000000000000
Jul =C2=A03 03:42:= 06 roc-4r-sca020 kernel: [554036.262524] CS: =C2=A00010 DS: 0000 ES: 0000 C= R0: 0000000080050033
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [= 554036.262551] CR2: 000000190000001c CR3: 0000001034f0e000 CR4: 00000000000= 407e0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262596] = Stack:
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262618]= =C2=A0ffff880fbad571f8 ffff880cf6076b30 ffff880bdde05da8 00000000000000e6<= /div>
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262669] =C2=A0= 0000000000000100 ffff880cf6076b28 00000000000000b5 ffff880fbad57258
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262721] =C2=A0ffff880= fbad57258 ffff880fbad572d8 ffffffffffffffff ffff880cf6076b28
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262772] Call Trace:
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262801] =C2=A0[<fff= fffff8119b482>] pagevec_lookup_entries+0x22/0x30
Jul =C2=A03 0= 3:42:06 roc-4r-sca020 kernel: [554036.262831] =C2=A0[<ffffffff8119bd84&g= t;] truncate_inode_pages_range+0xf4/0x700
Jul =C2=A03 03:42:06 ro= c-4r-sca020 kernel: [554036.262862] =C2=A0[<ffffffff8119c415>] trunca= te_inode_pages+0x15/0x20
Jul =C2=A03 03:42:06 roc-4r-sca020 kerne= l: [554036.262891] =C2=A0[<ffffffff8119c53f>] truncate_inode_pages_fi= nal+0x5f/0xa0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.= 262949] =C2=A0[<ffffffffc0431c2c>] xfs_fs_evict_inode+0x3c/0xe0 [xfs]=
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.262981] =C2= =A0[<ffffffff81220558>] evict+0xb8/0x190
Jul =C2=A03 03:42:= 06 roc-4r-sca020 kernel: [554036.263009] =C2=A0[<ffffffff81220671>] d= ispose_list+0x41/0x50
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: = [554036.263037] =C2=A0[<ffffffff8122176f>] prune_icache_sb+0x4f/0x60<= /div>
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263067] =C2=A0= [<ffffffff81208ab5>] super_cache_scan+0x155/0x1a0
Jul =C2= =A03 03:42:06 roc-4r-sca020 kernel: [554036.263096] =C2=A0[<ffffffff8119= d26f>] do_shrink_slab+0x13f/0x2c0
Jul =C2=A03 03:42:06 roc-4r-= sca020 kernel: [554036.263126] =C2=A0[<ffffffff811a22b0>] ? shrink_lr= uvec+0x330/0x370
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [5540= 36.263157] =C2=A0[<ffffffff811b4189>] ? isolate_migratepages_block+0x= 299/0x5c0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.2631= 88] =C2=A0[<ffffffff8119d558>] shrink_slab+0xd8/0x110
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263217] =C2=A0[<ffffffff8= 11a25bf>] shrink_zone+0x2cf/0x300
Jul =C2=A03 03:42:06 roc-4r-= sca020 kernel: [554036.263246] =C2=A0[<ffffffff811b4d3d>] ? compact_z= one+0x7d/0x4f0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036= .263275] =C2=A0[<ffffffff811a2a64>] shrink_zones+0x104/0x2a0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263304] =C2=A0[<fff= fffff811b53ad>] ? compact_zone_order+0x5d/0x70
Jul =C2=A03 03:= 42:06 roc-4r-sca020 kernel: [554036.263336] =C2=A0[<ffffffff810f1666>= ] ? ktime_get+0x46/0xb0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel= : [554036.263365] =C2=A0[<ffffffff811a2cd7>] do_try_to_free_pages+0xd= 7/0x160
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263396= ] =C2=A0[<ffffffff811a3017>] try_to_free_pages+0xb7/0x170
J= ul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263427] =C2=A0[<ffffff= ff8119571a>] __alloc_pages_nodemask+0x5ba/0x9c0
Jul =C2=A03 03= :42:06 roc-4r-sca020 kernel: [554036.263460] =C2=A0[<ffffffff811dc9bc>= ;] alloc_pages_current+0x9c/0x110
Jul =C2=A03 03:42:06 roc-4r-sca= 020 kernel: [554036.263492] =C2=A0[<ffffffff811e4f2a>] allocate_slab+= 0x20a/0x2e0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.26= 3522] =C2=A0[<ffffffff811e5031>] new_slab+0x31/0x1f0
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263553] =C2=A0[<ffffffff8= 17f8dd9>] __slab_alloc+0x18e/0x2a3
Jul =C2=A03 03:42:06 roc-4r= -sca020 kernel: [554036.263584] =C2=A0[<ffffffff816d7817>] ? __alloc_= skb+0x87/0x2b0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036= .263614] =C2=A0[<ffffffff816d77e7>] ? __alloc_skb+0x57/0x2b0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263643] =C2=A0[<fff= fffff811e9b7b>] __kmalloc_node_track_caller+0xbb/0x2b0
Jul =C2= =A03 03:42:06 roc-4r-sca020 kernel: [554036.263675] =C2=A0[<ffffffff816d= 7817>] ? __alloc_skb+0x87/0x2b0
Jul =C2=A03 03:42:06 roc-4r-sc= a020 kernel: [554036.263704] =C2=A0[<ffffffff816d737c>] __kmalloc_res= erve.isra.57+0x3c/0xa0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel:= [554036.263734] =C2=A0[<ffffffff816d7817>] __alloc_skb+0x87/0x2b0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263766] =C2=A0[&= lt;ffffffff81737de1>] sk_stream_alloc_skb+0x41/0x130
Jul =C2= =A03 03:42:06 roc-4r-sca020 kernel: [554036.263796] =C2=A0[<ffffffff8173= 88b3>] tcp_sendmsg+0x2d3/0xa90
Jul =C2=A03 03:42:06 roc-4r-sca= 020 kernel: [554036.263827] =C2=A0[<ffffffff81764477>] inet_sendmsg+0= x67/0xa0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.26385= 8] =C2=A0[<ffffffff816cea54>] ? copy_msghdr_from_user+0x154/0x1b0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263891] =C2=A0[&l= t;ffffffff816cdcfd>] sock_sendmsg+0x4d/0x60
Jul =C2=A03 03:42:= 06 roc-4r-sca020 kernel: [554036.263920] =C2=A0[<ffffffff816cef93>] _= __sys_sendmsg+0x2b3/0x2c0
Jul =C2=A03 03:42:06 roc-4r-sca020 kern= el: [554036.263950] =C2=A0[<ffffffff810a853c>] ? ttwu_do_wakeup+0x2c/= 0x100
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.263979] = =C2=A0[<ffffffff810a8826>] ? ttwu_do_activate.constprop.121+0x66/0x70=
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.264011] =C2= =A0[<ffffffff810abef5>] ? try_to_wake_up+0x215/0x2a0
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.264040] =C2=A0[<ffffffff8= 10abfb0>] ? wake_up_state+0x10/0x20
Jul =C2=A03 03:42:06 roc-4= r-sca020 kernel: [554036.264071] =C2=A0[<ffffffff810fce86>] ? wake_fu= tex+0x76/0xb0
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.= 264099] =C2=A0[<ffffffff810fe192>] ? futex_wake+0x72/0x140
= Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.264127] =C2=A0[<fffff= fff81222675>] ? __fget_light+0x25/0x70
Jul =C2=A03 03:42:06 ro= c-4r-sca020 kernel: [554036.264155] =C2=A0[<ffffffff816cf9b9>] __sys_= sendmsg+0x49/0x90
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554= 036.264184] =C2=A0[<ffffffff816cfa19>] SyS_sendmsg+0x19/0x20
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.264215] =C2=A0[<fff= fffff8180d272>] system_call_fastpath+0x16/0x75
Jul =C2=A03 03:= 42:06 roc-4r-sca020 kernel: [554036.264243] Code: 00 4c 89 65 c0 31 d2 e9 8= 6 00 00 00 66 0f 1f 84 00 00 00 00 00 48 8b 3a 48 85 ff 0f 84 ad 00 00 00 4= 0 f6 c7 03 0f 85 a9 00 00 00 <8b> 4f 1c 85 c9 74 e3 8d 71 01 4c 8d 47= 1c 89 c8 f0 0f b1 77 1c=C2=A0
Jul =C2=A03 03:42:06 roc-4r-sca020= kernel: [554036.264467] RIP =C2=A0[<ffffffff8118e476>] find_get_entr= ies+0x66/0x160
Jul =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036= .264499] =C2=A0RSP <ffff880fbad571a8>
Jul =C2=A03 03:42:06 = roc-4r-sca020 kernel: [554036.264522] CR2: 000000190000001c
Jul = =C2=A03 03:42:06 roc-4r-sca020 kernel: [554036.264824] ---[ end trace ae271= fe24c8d817e ]---
--20cf302ef3caaa8f5f0519f4e22d-- From jtulak@redhat.com Fri Jul 3 04:53:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 488BA7F7E for ; Fri, 3 Jul 2015 04:53:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C93B7AC008 for ; Fri, 3 Jul 2015 02:53:30 -0700 (PDT) X-ASG-Debug-ID: 1435917207-04cbb050d025e90001-NocioJ Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 704f1Yb7keNdE5SE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Jul 2015 02:53:28 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t639rRT7011193; Fri, 3 Jul 2015 05:53:27 -0400 Date: Fri, 3 Jul 2015 05:53:27 -0400 (EDT) From: Jan Tulak To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Message-ID: <118220992.23297038.1435917207418.JavaMail.zimbra@redhat.com> In-Reply-To: <20150625193807.GG36162@bfoster.bfoster> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-4-git-send-email-jtulak@redhat.com> <20150625193807.GG36162@bfoster.bfoster> Subject: Re: [PATCH 03/17] mkfs: Sanitise the superblock feature macros MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 03/17] mkfs: Sanitise the superblock feature macros Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.4.91] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: mkfs: Sanitise the superblock feature macros Thread-Index: lOuZX7yXUSaQCS7dUsPefXYf6Xq2nQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1435917208 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > From: "Brian Foster" > > @@ -1912,17 +2013,17 @@ _("32 bit Project IDs always enabled on CRC enabled > > filesytems\n")); > > * tried to use crc=0,finobt=1, then issue a warning before > > * turning them off. > > */ > > - if (finobt && finobtflag) { > > + if (sb_feat.finobt && sb_feat.finobtflag) { > > Since the code above drops finobtflag, I don't think we'll ever hit > this. Indeed, I can now create a crc=0,finobt=1 fs, which shouldn't > happen. > > Brian > Finobtflag is dropped by a later patch in the set entirely. After all patches, the line is: if (sb_feat.finobt && mopts.subopt_params[M_FINOBT].seen) Which indeed works as it should: mkfs.xfs -f -m crc=0,finobt=1 /dev/vdb2 warning: finobt not supported without CRC support, disabled. Cheers, Jan -- Jan Tulak jtulak@redhat.com From jtulak@redhat.com Fri Jul 3 05:06:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B38C47F51 for ; Fri, 3 Jul 2015 05:06:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A1500304064 for ; Fri, 3 Jul 2015 03:06:09 -0700 (PDT) X-ASG-Debug-ID: 1435917966-04cbb050ce262c0001-NocioJ Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 8MiUDwGm1QHM1Qmc (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Jul 2015 03:06:07 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t63A66vo013581; Fri, 3 Jul 2015 06:06:06 -0400 Date: Fri, 3 Jul 2015 06:06:06 -0400 (EDT) From: Jan Tulak To: Brian Foster Cc: xfs@oss.sgi.com, Dave Chinner Message-ID: <1516143302.23299575.1435917966372.JavaMail.zimbra@redhat.com> In-Reply-To: <20150702141403.GA61817@bfoster.bfoster> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> <20150702141403.GA61817@bfoster.bfoster> Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.4.91] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: use common code for multi-disk detection Thread-Index: XEa/ruCK3fMb45NwAlT4vA8Mzw5LZQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1435917967 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > From: "Brian Foster" > On Thu, Jul 02, 2015 at 08:47:53AM -0400, Jan Tulak wrote: > > > > When I look on the code, where did you got the 4 vs 5? In the old code, for > > 512GB and bigger is assigned shift=5 directly. In the new one, shift is > > set to XFS_MULTIDISK_AGLOG which is 5, and then, if the disk is smaller > > than 512GB, it decrements the value. But unless I'm missing something, the > > multidisk configuration is not changing anything, there is just a > > different syntax. > > > > I was referring to the multidisk case. The old code looks like this: > > if (!multidisk && dblocks >= MEGABYTES(128, blocklog)) { > ... > } else if (dblocks > GIGABYTES(512, blocklog)) > shift = 5; > else if (dblocks > GIGABYTES(8, blocklog)) > shift = 4; > > ... which means if multidisk && dblocks == 512GB, then shift is set to > 4. With the new code, we set XFS_MULTIDISK_AGLOG as you noted and then > execute: > > if (dblocks < GIGABYTES(512, blocklog)) > shift--; > ... > > ... which will not decrement shift if dblocks == 512GB (i.e., shift is > 5). > > If you're still not convinced, create an exact sized 512GB file, mkfs it > (with the su/sw options set for multidisk) with and without this change > and observe agcount. :) > > Brian > Ah, mea culpa, I didn't thought about what happens when the size is exactly 512 GB when I wrote the reply. :-) You are right, I'll fix it. Jan -- Jan Tulak jtulak@redhat.com From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 32C107F81 for ; Fri, 3 Jul 2015 05:14:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D3963AC008 for ; Fri, 3 Jul 2015 03:14:29 -0700 (PDT) X-ASG-Debug-ID: 1435918467-04bdf0078928ca0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id ErdYNixvccGkH6YD (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:28 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzH-0002Nl-G8 for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:27 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: xfsprogs: clean up installed headers Date: Fri, 3 Jul 2015 12:12:08 +0200 X-ASG-Orig-Subj: xfsprogs: clean up installed headers Message-Id: <1435918341-10128-1-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918468 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This series ensures we only install the minimum required headers, and especially no autoconf-generated header that might differ for different targets in multiarch setups. From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 133217F8E for ; Fri, 3 Jul 2015 05:14:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E5DAB8F8050 for ; Fri, 3 Jul 2015 03:14:33 -0700 (PDT) X-ASG-Debug-ID: 1435918471-04bdf0078b28cb0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id Uxmkvl2J8F4nJ9Ot (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:31 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzK-0002R2-Vo for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:31 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 01/13] xfsprogs: don't install internal header files Date: Fri, 3 Jul 2015 12:12:09 +0200 X-ASG-Orig-Subj: [PATCH 01/13] xfsprogs: don't install internal header files Message-Id: <1435918341-10128-2-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918471 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 All the headers in $(HFILES) are internal to xfsprogs and should not be installed. Signed-off-by: Christoph Hellwig --- libxfs/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libxfs/Makefile b/libxfs/Makefile index 98e0e28..c85f1ed 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -139,7 +139,7 @@ install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(QAHFILES)) $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* install-dev: install - $(INSTALL) -m 644 $(PKGHFILES) $(HFILES) $(PKG_INC_DIR) + $(INSTALL) -m 644 $(PKGHFILES) $(PKG_INC_DIR) install-qa: install-dev $(INSTALL) -m 644 $(QAHFILES) $(PKG_INC_DIR) -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3099D7F81 for ; Fri, 3 Jul 2015 05:14:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A52BFAC008 for ; Fri, 3 Jul 2015 03:14:42 -0700 (PDT) X-ASG-Debug-ID: 1435918480-04cbb050d026560001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id J4cMCmSkxsg0E7K9 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:40 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzT-0002SE-NN for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:40 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 02/13] xfsprogs: remove unused macros from xfs_arch.h Date: Fri, 3 Jul 2015 12:12:10 +0200 X-ASG-Orig-Subj: [PATCH 02/13] xfsprogs: remove unused macros from xfs_arch.h Message-Id: <1435918341-10128-3-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918480 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Signed-off-by: Christoph Hellwig --- include/xfs_arch.h | 60 ------------------------------------------------------ 1 file changed, 60 deletions(-) diff --git a/include/xfs_arch.h b/include/xfs_arch.h index 07026c0..903b02a 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -71,64 +71,4 @@ static inline void be64_add_cpu(__be64 *a, __s64 b) *a = cpu_to_be64(be64_to_cpu(*a) + b); } -/* - * get and set integers from potentially unaligned locations - */ - -#define INT_GET_UNALIGNED_16_BE(pointer) \ - ((__u16)((((__u8*)(pointer))[0] << 8) | (((__u8*)(pointer))[1]))) -#define INT_SET_UNALIGNED_16_BE(pointer,value) \ - { \ - ((__u8*)(pointer))[0] = (((value) >> 8) & 0xff); \ - ((__u8*)(pointer))[1] = (((value) ) & 0xff); \ - } - -/* - * In directories inode numbers are stored as unaligned arrays of unsigned - * 8bit integers on disk. - * - * For v1 directories or v2 directories that contain inode numbers that - * do not fit into 32bit the array has eight members, but the first member - * is always zero: - * - * |unused|48-55|40-47|32-39|24-31|16-23| 8-15| 0- 7| - * - * For v2 directories that only contain entries with inode numbers that fit - * into 32bits a four-member array is used: - * - * |24-31|16-23| 8-15| 0- 7| - */ - -#define XFS_GET_DIR_INO4(di) \ - (((__u32)(di).i[0] << 24) | ((di).i[1] << 16) | ((di).i[2] << 8) | ((di).i[3])) - -#define XFS_PUT_DIR_INO4(from, di) \ -do { \ - (di).i[0] = (((from) & 0xff000000ULL) >> 24); \ - (di).i[1] = (((from) & 0x00ff0000ULL) >> 16); \ - (di).i[2] = (((from) & 0x0000ff00ULL) >> 8); \ - (di).i[3] = ((from) & 0x000000ffULL); \ -} while (0) - -#define XFS_DI_HI(di) \ - (((__u32)(di).i[1] << 16) | ((di).i[2] << 8) | ((di).i[3])) -#define XFS_DI_LO(di) \ - (((__u32)(di).i[4] << 24) | ((di).i[5] << 16) | ((di).i[6] << 8) | ((di).i[7])) - -#define XFS_GET_DIR_INO8(di) \ - (((xfs_ino_t)XFS_DI_LO(di) & 0xffffffffULL) | \ - ((xfs_ino_t)XFS_DI_HI(di) << 32)) - -#define XFS_PUT_DIR_INO8(from, di) \ -do { \ - (di).i[0] = 0; \ - (di).i[1] = (((from) & 0x00ff000000000000ULL) >> 48); \ - (di).i[2] = (((from) & 0x0000ff0000000000ULL) >> 40); \ - (di).i[3] = (((from) & 0x000000ff00000000ULL) >> 32); \ - (di).i[4] = (((from) & 0x00000000ff000000ULL) >> 24); \ - (di).i[5] = (((from) & 0x0000000000ff0000ULL) >> 16); \ - (di).i[6] = (((from) & 0x000000000000ff00ULL) >> 8); \ - (di).i[7] = ((from) & 0x00000000000000ffULL); \ -} while (0) - #endif /* __XFS_ARCH_H__ */ -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BD5917FB6 for ; Fri, 3 Jul 2015 05:14:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8D00B8F8050 for ; Fri, 3 Jul 2015 03:14:46 -0700 (PDT) X-ASG-Debug-ID: 1435918484-04bdf0078b28cd0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id A5RBW8C3roLJH4E4 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:44 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzX-0002TS-5L for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:44 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 03/13] xfsprogs: remove swab.h Date: Fri, 3 Jul 2015 12:12:11 +0200 X-ASG-Orig-Subj: [PATCH 03/13] xfsprogs: remove swab.h Message-Id: <1435918341-10128-4-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918484 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 The macros in swab.h are only used to implement those in xfs_arch.h, so let's consolidate the two headers. Signed-off-by: Christoph Hellwig --- include/Makefile | 1 - include/gnukfreebsd.h | 1 - include/libxfs.h | 1 - include/swab.h | 194 -------------------------------------------------- include/xfs_arch.h | 191 +++++++++++++++++++++++++++++++++++++++++++++++++ libxfs/crc32.c | 1 - libxfs/libxfs_priv.h | 1 - 7 files changed, 191 insertions(+), 199 deletions(-) delete mode 100644 include/swab.h diff --git a/include/Makefile b/include/Makefile index 91b33b0..f033245 100644 --- a/include/Makefile +++ b/include/Makefile @@ -28,7 +28,6 @@ QAHFILES = libxfs.h \ list.h \ parent.h \ radix-tree.h \ - swab.h \ xfs_arch.h \ xfs_btree_trace.h \ xfs_inode.h \ diff --git a/include/gnukfreebsd.h b/include/gnukfreebsd.h index f2e1bf5..b83c144 100644 --- a/include/gnukfreebsd.h +++ b/include/gnukfreebsd.h @@ -31,7 +31,6 @@ #include #include #include -#include "xfs/swab.h" #define constpp char * const * diff --git a/include/libxfs.h b/include/libxfs.h index ab4cc9a..eda664f 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -28,7 +28,6 @@ #include "xfs/bitops.h" #include "xfs/kmem.h" #include "xfs/radix-tree.h" -#include "xfs/swab.h" #include "xfs/atomic.h" #include "xfs/xfs_types.h" diff --git a/include/swab.h b/include/swab.h deleted file mode 100644 index b06346c..0000000 --- a/include/swab.h +++ /dev/null @@ -1,194 +0,0 @@ -#ifndef SWAB_H -#define SWAB_H - -/* casts are necessary for constants, because we never know how for sure - * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. - */ -#define ___swab16(x) \ -({ \ - __u16 __x = (x); \ - ((__u16)( \ - (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ - (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ -}) - -#define ___swab32(x) \ -({ \ - __u32 __x = (x); \ - ((__u32)( \ - (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ - (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ - (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ - (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ -}) - -#define ___swab64(x) \ -({ \ - __u64 __x = (x); \ - ((__u64)( \ - (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ - (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ - (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ - (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ - (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ - (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ - (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ - (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ -}) - -#define ___constant_swab16(x) \ - ((__u16)( \ - (((__u16)(x) & (__u16)0x00ffU) << 8) | \ - (((__u16)(x) & (__u16)0xff00U) >> 8) )) -#define ___constant_swab32(x) \ - ((__u32)( \ - (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ - (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ - (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ - (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) -#define ___constant_swab64(x) \ - ((__u64)( \ - (__u64)(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ - (__u64)(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ - (__u64)(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ - (__u64)(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ - (__u64)(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ - (__u64)(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ - (__u64)(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ - (__u64)(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56) )) - -/* - * provide defaults when no architecture-specific optimization is detected - */ -#ifndef __arch__swab16 -# define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) -#endif -#ifndef __arch__swab32 -# define __arch__swab32(x) ({ __u32 __tmp = (x) ; ___swab32(__tmp); }) -#endif -#ifndef __arch__swab64 -# define __arch__swab64(x) ({ __u64 __tmp = (x) ; ___swab64(__tmp); }) -#endif - -#ifndef __arch__swab16p -# define __arch__swab16p(x) __arch__swab16(*(x)) -#endif -#ifndef __arch__swab32p -# define __arch__swab32p(x) __arch__swab32(*(x)) -#endif -#ifndef __arch__swab64p -# define __arch__swab64p(x) __arch__swab64(*(x)) -#endif - -#ifndef __arch__swab16s -# define __arch__swab16s(x) do { *(x) = __arch__swab16p((x)); } while (0) -#endif -#ifndef __arch__swab32s -# define __arch__swab32s(x) do { *(x) = __arch__swab32p((x)); } while (0) -#endif -#ifndef __arch__swab64s -# define __arch__swab64s(x) do { *(x) = __arch__swab64p((x)); } while (0) -#endif - - -/* - * Allow constant folding - */ -# define __swab16(x) \ -(__builtin_constant_p((__u16)(x)) ? \ - ___constant_swab16((x)) : \ - __fswab16((x))) -# define __swab32(x) \ -(__builtin_constant_p((__u32)(x)) ? \ - ___constant_swab32((x)) : \ - __fswab32((x))) -# define __swab64(x) \ -(__builtin_constant_p((__u64)(x)) ? \ - ___constant_swab64((x)) : \ - __fswab64((x))) - - -static __inline__ __u16 __fswab16(__u16 x) -{ - return (__extension__ __arch__swab16(x)); -} -static __inline__ __u16 __swab16p(__u16 *x) -{ - return (__extension__ __arch__swab16p(x)); -} -static __inline__ void __swab16s(__u16 *addr) -{ - (__extension__ ({__arch__swab16s(addr);})); -} - -static __inline__ __u32 __fswab32(__u32 x) -{ - return (__extension__ __arch__swab32(x)); -} -static __inline__ __u32 __swab32p(__u32 *x) -{ - return (__extension__ __arch__swab32p(x)); -} -static __inline__ void __swab32s(__u32 *addr) -{ - (__extension__ ({__arch__swab32s(addr);})); -} - -static __inline__ __u64 __fswab64(__u64 x) -{ -# ifdef __SWAB_64_THRU_32__ - __u32 h = x >> 32; - __u32 l = x & ((1ULL<<32)-1); - return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h))); -# else - return (__extension__ __arch__swab64(x)); -# endif -} -static __inline__ __u64 __swab64p(__u64 *x) -{ - return (__extension__ __arch__swab64p(x)); -} -static __inline__ void __swab64s(__u64 *addr) -{ - (__extension__ ({__arch__swab64s(addr);})); -} - -static inline __uint16_t get_unaligned_be16(void *p) -{ - __uint8_t *__p = p; - return __p[0] << 8 | __p[1]; -} - -static inline __uint32_t get_unaligned_be32(void *p) -{ - __uint8_t *__p = p; - return __p[0] << 24 | __p[1] << 16 | __p[2] << 8 | __p[3]; -} - -static inline __uint64_t get_unaligned_be64(void *p) -{ - return (__uint64_t)get_unaligned_be32(p) << 32 | - get_unaligned_be32(p + 4); -} - -static inline void put_unaligned_be16(__uint16_t val, void *p) -{ - __uint8_t *__p = p; - *__p++ = val >> 8; - *__p++ = val; -} - -static inline void put_unaligned_be32(__uint32_t val, void *p) -{ - __uint8_t *__p = p; - put_unaligned_be16(val >> 16, __p); - put_unaligned_be16(val, __p + 2); -} - -static inline void put_unaligned_be64(__uint64_t val, void *p) -{ - put_unaligned_be32(val >> 32, p); - put_unaligned_be32(val, p + 4); -} - -#endif /* SWAB_H */ diff --git a/include/xfs_arch.h b/include/xfs_arch.h index 903b02a..310a17e 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -24,6 +24,159 @@ #undef XFS_NATIVE_HOST #endif +/* + * Casts are necessary for constants, because we never know how for sure + * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. + */ +#define ___swab16(x) \ +({ \ + __u16 __x = (x); \ + ((__u16)( \ + (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ +}) + +#define ___swab32(x) \ +({ \ + __u32 __x = (x); \ + ((__u32)( \ + (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ +}) + +#define ___swab64(x) \ +({ \ + __u64 __x = (x); \ + ((__u64)( \ + (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ +}) + +#define ___constant_swab16(x) \ + ((__u16)( \ + (((__u16)(x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(x) & (__u16)0xff00U) >> 8) )) +#define ___constant_swab32(x) \ + ((__u32)( \ + (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) +#define ___constant_swab64(x) \ + ((__u64)( \ + (__u64)(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56) )) + +/* + * provide defaults when no architecture-specific optimization is detected + */ +#ifndef __arch__swab16 +# define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) +#endif +#ifndef __arch__swab32 +# define __arch__swab32(x) ({ __u32 __tmp = (x) ; ___swab32(__tmp); }) +#endif +#ifndef __arch__swab64 +# define __arch__swab64(x) ({ __u64 __tmp = (x) ; ___swab64(__tmp); }) +#endif + +#ifndef __arch__swab16p +# define __arch__swab16p(x) __arch__swab16(*(x)) +#endif +#ifndef __arch__swab32p +# define __arch__swab32p(x) __arch__swab32(*(x)) +#endif +#ifndef __arch__swab64p +# define __arch__swab64p(x) __arch__swab64(*(x)) +#endif + +#ifndef __arch__swab16s +# define __arch__swab16s(x) do { *(x) = __arch__swab16p((x)); } while (0) +#endif +#ifndef __arch__swab32s +# define __arch__swab32s(x) do { *(x) = __arch__swab32p((x)); } while (0) +#endif +#ifndef __arch__swab64s +# define __arch__swab64s(x) do { *(x) = __arch__swab64p((x)); } while (0) +#endif + + +/* + * Allow constant folding + */ +# define __swab16(x) \ +(__builtin_constant_p((__u16)(x)) ? \ + ___constant_swab16((x)) : \ + __fswab16((x))) +# define __swab32(x) \ +(__builtin_constant_p((__u32)(x)) ? \ + ___constant_swab32((x)) : \ + __fswab32((x))) +# define __swab64(x) \ +(__builtin_constant_p((__u64)(x)) ? \ + ___constant_swab64((x)) : \ + __fswab64((x))) + + +static __inline__ __u16 __fswab16(__u16 x) +{ + return (__extension__ __arch__swab16(x)); +} +static __inline__ __u16 __swab16p(__u16 *x) +{ + return (__extension__ __arch__swab16p(x)); +} +static __inline__ void __swab16s(__u16 *addr) +{ + (__extension__ ({__arch__swab16s(addr);})); +} + +static __inline__ __u32 __fswab32(__u32 x) +{ + return (__extension__ __arch__swab32(x)); +} +static __inline__ __u32 __swab32p(__u32 *x) +{ + return (__extension__ __arch__swab32p(x)); +} +static __inline__ void __swab32s(__u32 *addr) +{ + (__extension__ ({__arch__swab32s(addr);})); +} + +static __inline__ __u64 __fswab64(__u64 x) +{ +# ifdef __SWAB_64_THRU_32__ + __u32 h = x >> 32; + __u32 l = x & ((1ULL<<32)-1); + return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h))); +# else + return (__extension__ __arch__swab64(x)); +# endif +} +static __inline__ __u64 __swab64p(__u64 *x) +{ + return (__extension__ __arch__swab64p(x)); +} +static __inline__ void __swab64s(__u64 *addr) +{ + (__extension__ ({__arch__swab64s(addr);})); +} + #ifdef XFS_NATIVE_HOST #define cpu_to_be16(val) ((__force __be16)(__u16)(val)) #define cpu_to_be32(val) ((__force __be32)(__u32)(val)) @@ -71,4 +224,42 @@ static inline void be64_add_cpu(__be64 *a, __s64 b) *a = cpu_to_be64(be64_to_cpu(*a) + b); } +static inline __uint16_t get_unaligned_be16(void *p) +{ + __uint8_t *__p = p; + return __p[0] << 8 | __p[1]; +} + +static inline __uint32_t get_unaligned_be32(void *p) +{ + __uint8_t *__p = p; + return __p[0] << 24 | __p[1] << 16 | __p[2] << 8 | __p[3]; +} + +static inline __uint64_t get_unaligned_be64(void *p) +{ + return (__uint64_t)get_unaligned_be32(p) << 32 | + get_unaligned_be32(p + 4); +} + +static inline void put_unaligned_be16(__uint16_t val, void *p) +{ + __uint8_t *__p = p; + *__p++ = val >> 8; + *__p++ = val; +} + +static inline void put_unaligned_be32(__uint32_t val, void *p) +{ + __uint8_t *__p = p; + put_unaligned_be16(val >> 16, __p); + put_unaligned_be16(val, __p + 2); +} + +static inline void put_unaligned_be64(__uint64_t val, void *p) +{ + put_unaligned_be32(val >> 32, p); + put_unaligned_be32(val, p + 4); +} + #endif /* __XFS_ARCH_H__ */ diff --git a/libxfs/crc32.c b/libxfs/crc32.c index bc1fc98..63b1467 100644 --- a/libxfs/crc32.c +++ b/libxfs/crc32.c @@ -34,7 +34,6 @@ */ #include "xfs/platform_defs.h" -#include "xfs/swab.h" #include "xfs/xfs_arch.h" #include "crc32defs.h" diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 72e124b..445a6dc 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -66,7 +66,6 @@ #include "xfs/bitops.h" #include "xfs/kmem.h" #include "xfs/radix-tree.h" -#include "xfs/swab.h" #include "xfs/atomic.h" #include "xfs/xfs_types.h" -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BE07B7FC6 for ; Fri, 3 Jul 2015 05:14:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6AB82AC00B for ; Fri, 3 Jul 2015 03:14:49 -0700 (PDT) X-ASG-Debug-ID: 1435918487-04bdf0078828cd0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id RsRgbHvybaQUVmmm (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:47 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzb-0002UE-1r for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:47 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 04/13] xfsprogs: only install *format.h headers in install-qa Date: Fri, 3 Jul 2015 12:12:12 +0200 X-ASG-Orig-Subj: [PATCH 04/13] xfsprogs: only install *format.h headers in install-qa Message-Id: <1435918341-10128-5-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918487 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Now that we've properly split up the headers we don't need to install all the libxfs-internal headers for xfstests. Just install the three headers defining the on-disk format and xfs_arch.h which is required to compile them instead. Signed-off-by: Christoph Hellwig --- include/Makefile | 12 ++++++++---- libxfs/Makefile | 29 +++++++++++++++++------------ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/include/Makefile b/include/Makefile index f033245..0135860 100644 --- a/include/Makefile +++ b/include/Makefile @@ -18,7 +18,9 @@ TOPDIR = .. include $(TOPDIR)/include/builddefs -QAHFILES = libxfs.h \ +QAHFILES = xfs_arch.h + +LIBHFILES = libxfs.h \ libxlog.h \ atomic.h \ bitops.h \ @@ -28,14 +30,17 @@ QAHFILES = libxfs.h \ list.h \ parent.h \ radix-tree.h \ - xfs_arch.h \ xfs_btree_trace.h \ xfs_inode.h \ xfs_log_recover.h \ xfs_metadump.h \ xfs_mount.h \ xfs_trace.h \ - xfs_trans.h + xfs_trans.h \ + command.h \ + input.h \ + path.h \ + project.h HFILES = handle.h \ jdm.h \ @@ -46,7 +51,6 @@ HFILES = handle.h \ PHFILES = darwin.h freebsd.h irix.h linux.h gnukfreebsd.h DKHFILES = volume.h fstyp.h dvh.h -LIBHFILES = command.h input.h path.h project.h LSRCFILES = $(shell echo $(PHFILES) | sed -e "s/$(PKG_PLATFORM).h//g") LSRCFILES += platform_defs.h.in builddefs.in buildmacros buildrules install-sh LSRCFILES += $(DKHFILES) $(LIBHFILES) diff --git a/libxfs/Makefile b/libxfs/Makefile index c85f1ed..3d3b448 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -14,15 +14,14 @@ LT_AGE = 0 PKGHFILES = xfs_fs.h \ xfs_types.h -# headers with build dependencies -HFILES = init.h \ - crc32defs.h \ - crc32table.h \ - libxfs_priv.h \ - xfs_dir2_priv.h \ - # headers installed in QA targets -QAHFILES = xfs_alloc.h \ +QAHFILES = \ + xfs_da_format.h \ + xfs_format.h \ + xfs_log_format.h + +LIBHFILES = \ + xfs_alloc.h \ xfs_alloc_btree.h \ xfs_attr_leaf.h \ xfs_attr_sf.h \ @@ -33,14 +32,11 @@ QAHFILES = xfs_alloc.h \ xfs_attr_remote.h \ xfs_cksum.h \ xfs_da_btree.h \ - xfs_da_format.h \ xfs_dir2.h \ - xfs_format.h \ xfs_ialloc.h \ xfs_ialloc_btree.h \ xfs_inode_buf.h \ xfs_inode_fork.h \ - xfs_log_format.h \ xfs_quota_defs.h \ xfs_sb.h \ xfs_shared.h \ @@ -49,6 +45,14 @@ QAHFILES = xfs_alloc.h \ libxfs_io.h \ libxfs_api_defs.h + +# headers with build dependencies +HFILES = init.h \ + crc32defs.h \ + crc32table.h \ + libxfs_priv.h \ + xfs_dir2_priv.h + CFILES = cache.c \ crc32.c \ init.c \ @@ -89,6 +93,7 @@ CFILES = cache.c \ CFILES += $(PKG_PLATFORM).c PCFILES = darwin.c freebsd.c irix.c linux.c LSRCFILES = $(shell echo $(PCFILES) | sed -e "s/$(PKG_PLATFORM).c//g") +LSRCFILES += $(LIBHFILES) LSRCFILES += gen_crc32table.c # @@ -133,7 +138,7 @@ include $(BUILDRULES) install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) -install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(QAHFILES)) +install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES) $(QAHFILES)) %-hdrs: $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 415727F81 for ; Fri, 3 Jul 2015 05:14:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2E7ED8F8066 for ; Fri, 3 Jul 2015 03:14:55 -0700 (PDT) X-ASG-Debug-ID: 1435918493-04cbb050ce26570001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id MJ9cgdeoBsf9G65q (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:53 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzg-0002V4-Fx for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:52 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 05/13] xfsprogs: remove install-qa target Date: Fri, 3 Jul 2015 12:12:13 +0200 X-ASG-Orig-Subj: [PATCH 05/13] xfsprogs: remove install-qa target Message-Id: <1435918341-10128-6-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918493 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Now that we don't install all the libxfs internals but just the disk format defintions we can install those as part of the normal install-dev target. Signed-off-by: Christoph Hellwig --- Makefile | 6 ------ include/Makefile | 11 +++-------- include/buildrules | 2 +- libdisk/Makefile | 2 -- libhandle/Makefile | 2 -- libxcmd/Makefile | 2 +- libxfs/Makefile | 10 ++-------- libxlog/Makefile | 2 +- 8 files changed, 8 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index 6d6803b..111bf76 100644 --- a/Makefile +++ b/Makefile @@ -108,8 +108,6 @@ install: $(addsuffix -install,$(SUBDIRS)) install-dev: $(addsuffix -install-dev,$(SUBDIRS)) -install-qa: install $(addsuffix -install-qa,$(SUBDIRS)) - %-install: @echo "Installing $@" $(Q)$(MAKE) $(MAKEOPTS) -C $* install @@ -118,10 +116,6 @@ install-qa: install $(addsuffix -install-qa,$(SUBDIRS)) @echo "Installing $@" $(Q)$(MAKE) $(MAKEOPTS) -C $* install-dev -%-install-qa: - @echo "Installing $@" - $(Q)$(MAKE) $(MAKEOPTS) -C $* install-qa - distclean: clean $(Q)rm -f $(LDIRT) diff --git a/include/Makefile b/include/Makefile index 0135860..bd8b0ca 100644 --- a/include/Makefile +++ b/include/Makefile @@ -18,8 +18,6 @@ TOPDIR = .. include $(TOPDIR)/include/builddefs -QAHFILES = xfs_arch.h - LIBHFILES = libxfs.h \ libxlog.h \ atomic.h \ @@ -47,7 +45,8 @@ HFILES = handle.h \ $(PKG_PLATFORM).h \ platform_defs.h \ xfs.h \ - xqm.h + xqm.h \ + xfs_arch.h PHFILES = darwin.h freebsd.h irix.h linux.h gnukfreebsd.h DKHFILES = volume.h fstyp.h dvh.h @@ -66,7 +65,7 @@ disk: include $(BUILDRULES) # set up include/xfs header directory -install-headers: $(addsuffix -hdrs, $(HFILES) $(QAHFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) +install-headers: $(addsuffix -hdrs, $(HFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) %-hdrs: xfs $(Q)$(LN_S) -f $(PWD)/include/$* xfs/$* @@ -79,7 +78,3 @@ install: default install-dev: install $(INSTALL) -m 644 $(HFILES) $(PKG_INC_DIR) - -install-qa: install-dev - $(INSTALL) -m 644 $(QAHFILES) $(PKG_INC_DIR) - diff --git a/include/buildrules b/include/buildrules index 0e13f9d..72491db 100644 --- a/include/buildrules +++ b/include/buildrules @@ -94,7 +94,7 @@ $(_FORCE): # rebuild on every make invocation isn't a problem we need to care about. Just # do it silently so it doesn't make the build unnecessarily noisy. -.PHONY : depend ltdepend install-qa +.PHONY : depend ltdepend MAKEDEP := $(MAKEDEPEND) $(CFLAGS) diff --git a/libdisk/Makefile b/libdisk/Makefile index b058a9f..3b84a3a 100644 --- a/libdisk/Makefile +++ b/libdisk/Makefile @@ -32,6 +32,4 @@ install: default install-dev: default -install-qa: install-dev - -include .ltdep diff --git a/libhandle/Makefile b/libhandle/Makefile index 865ca22..cc4ad1d 100644 --- a/libhandle/Makefile +++ b/libhandle/Makefile @@ -25,6 +25,4 @@ install: default install-dev: default $(INSTALL_LTLIB_DEV) -install-qa: install-dev - -include .ltdep diff --git a/libxcmd/Makefile b/libxcmd/Makefile index ce082a5..7701ed9 100644 --- a/libxcmd/Makefile +++ b/libxcmd/Makefile @@ -34,6 +34,6 @@ default: ltdepend $(LTLIBRARY) include $(BUILDRULES) -install install-dev install-qa: default +install install-dev: default -include .ltdep diff --git a/libxfs/Makefile b/libxfs/Makefile index 3d3b448..ebbe40e 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -12,10 +12,7 @@ LT_AGE = 0 # headers to install in include/xfs PKGHFILES = xfs_fs.h \ - xfs_types.h - -# headers installed in QA targets -QAHFILES = \ + xfs_types.h \ xfs_da_format.h \ xfs_format.h \ xfs_log_format.h @@ -138,7 +135,7 @@ include $(BUILDRULES) install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) -install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES) $(QAHFILES)) +install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES)) %-hdrs: $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* @@ -146,9 +143,6 @@ install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES) $(QAHFILES)) install-dev: install $(INSTALL) -m 644 $(PKGHFILES) $(PKG_INC_DIR) -install-qa: install-dev - $(INSTALL) -m 644 $(QAHFILES) $(PKG_INC_DIR) - # We need to install the headers before building the dependencies. If we # include the .ltdep file, the makefile decides that it needs to build the # dependencies to remake the makefile before running the header install target, diff --git a/libxlog/Makefile b/libxlog/Makefile index 4673663..3417eed 100644 --- a/libxlog/Makefile +++ b/libxlog/Makefile @@ -19,6 +19,6 @@ default: ltdepend $(LTLIBRARY) include $(BUILDRULES) -install install-dev install-qa: default +install install-dev: default -include .ltdep -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:14:57 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BE7D47F8E for ; Fri, 3 Jul 2015 05:14:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9C6158F8049 for ; Fri, 3 Jul 2015 03:14:57 -0700 (PDT) X-ASG-Debug-ID: 1435918496-04bdf0078828ce0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 9JKUpABnKmqXPZnE (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:14:56 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzj-0002W8-Sx for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:14:56 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 06/13] xfsprogs: use <>-style includes in installed headers Date: Fri, 3 Jul 2015 12:12:14 +0200 X-ASG-Orig-Subj: [PATCH 06/13] xfsprogs: use <>-style includes in installed headers Message-Id: <1435918341-10128-7-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918496 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Once installed these are system headers, so we need to use <>-style include statements between them. Signed-off-by: Christoph Hellwig --- include/platform_defs.h.in | 10 +++++----- include/xfs.h | 6 +++--- include/xqm.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 9a1782c..529c0a6 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -69,15 +69,15 @@ typedef __u64 __bitwise __be64; typedef struct filldir filldir_t; #if defined(__linux__) -#include "xfs/linux.h" +#include #elif defined(__FreeBSD__) -#include "xfs/freebsd.h" +#include #elif defined(__FreeBSD_kernel__) -#include "xfs/gnukfreebsd.h" +#include #elif defined(__APPLE__) -#include "xfs/darwin.h" +#include #elif defined(__sgi__) || defined(__sgi) -#include "xfs/irix.h" +#include #else # error unknown platform... have fun porting! #endif diff --git a/include/xfs.h b/include/xfs.h index 0cb4fb8..e32c4a8 100644 --- a/include/xfs.h +++ b/include/xfs.h @@ -33,8 +33,8 @@ #ifndef __XFS_H__ #define __XFS_H__ -#include "xfs/platform_defs.h" -#include "xfs/xfs_types.h" -#include "xfs/xfs_fs.h" +#include +#include +#include #endif /* __XFS_H__ */ diff --git a/include/xqm.h b/include/xqm.h index 0b5dfa1..47f58a0 100644 --- a/include/xqm.h +++ b/include/xqm.h @@ -18,7 +18,7 @@ #ifndef __XQM_H__ #define __XQM_H__ -#include "xfs/xfs.h" +#include /* * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 105227F81 for ; Fri, 3 Jul 2015 05:15:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 91ECFAC00E for ; Fri, 3 Jul 2015 03:15:07 -0700 (PDT) X-ASG-Debug-ID: 1435918505-04cbb050cf26590001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id pgSAQhAwavGx8guk (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:05 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzs-0002sN-OO for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:05 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 08/13] xfsprogs: move __be*/__le* types and __arch_pack to xfs_arch.h Date: Fri, 3 Jul 2015 12:12:16 +0200 X-ASG-Orig-Subj: [PATCH 08/13] xfsprogs: move __be*/__le* types and __arch_pack to xfs_arch.h Message-Id: <1435918341-10128-9-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918505 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 These are defines and typedefs only needed for the XFS on disk format, so there is no need to have the available for every user of xfs.h. Signed-off-by: Christoph Hellwig --- include/platform_defs.h.in | 23 ----------------------- include/xfs_arch.h | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 529c0a6..81741c4 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -50,22 +50,6 @@ typedef unsigned long long int __u64; typedef signed long long int __s64; #endif -#ifdef __CHECKER__ -#define __bitwise __attribute__((bitwise)) -#define __force __attribute__((force)) -#else -#define __bitwise -#define __force -#endif - -typedef __u16 __bitwise __le16; -typedef __u32 __bitwise __le32; -typedef __u64 __bitwise __le64; - -typedef __u16 __bitwise __be16; -typedef __u32 __bitwise __be32; -typedef __u64 __bitwise __be64; - typedef struct filldir filldir_t; #if defined(__linux__) @@ -130,13 +114,6 @@ typedef unsigned short umode_t; | (minor&IRIX_DEV_MAXMIN))) #define IRIX_DEV_TO_KDEVT(dev) makedev(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev)) -/* ARM old ABI has some weird alignment/padding */ -#if defined(__arm__) && !defined(__ARM_EABI__) -#define __arch_pack __attribute__((packed)) -#else -#define __arch_pack -#endif - #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #define max(a,b) (((a)>(b))?(a):(b)) diff --git a/include/xfs_arch.h b/include/xfs_arch.h index 310a17e..87650f1 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -24,6 +24,22 @@ #undef XFS_NATIVE_HOST #endif +#ifdef __CHECKER__ +#define __bitwise __attribute__((bitwise)) +#define __force __attribute__((force)) +#else +#define __bitwise +#define __force +#endif + +typedef __u16 __bitwise __le16; +typedef __u32 __bitwise __le32; +typedef __u64 __bitwise __le64; + +typedef __u16 __bitwise __be16; +typedef __u32 __bitwise __be32; +typedef __u64 __bitwise __be64; + /* * Casts are necessary for constants, because we never know how for sure * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. @@ -262,4 +278,11 @@ static inline void put_unaligned_be64(__uint64_t val, void *p) put_unaligned_be32(val, p + 4); } +/* ARM old ABI has some weird alignment/padding */ +#if defined(__arm__) && !defined(__ARM_EABI__) +#define __arch_pack __attribute__((packed)) +#else +#define __arch_pack +#endif + #endif /* __XFS_ARCH_H__ */ -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7B6A87FCD for ; Fri, 3 Jul 2015 05:15:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id CD1E4AC00F for ; Fri, 3 Jul 2015 03:15:07 -0700 (PDT) X-ASG-Debug-ID: 1435918501-04cb6c209d29970001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id yLPdPTK0JB0RcCkj (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:02 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzn-0002X9-7r for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:01 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 07/13] xfsprogs: simplify internal includes Date: Fri, 3 Jul 2015 12:12:15 +0200 X-ASG-Orig-Subj: [PATCH 07/13] xfsprogs: simplify internal includes Message-Id: <1435918341-10128-8-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918502 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 We don't need the xfs/ prefix for local includes if we just add the libxfs directory to the include path. Once that is done we only need to link the installed headers into include/xfs. Signed-off-by: Christoph Hellwig --- copy/xfs_copy.c | 2 +- db/addr.c | 2 +- db/agf.c | 2 +- db/agfl.c | 2 +- db/agi.c | 2 +- db/attr.c | 2 +- db/attrset.c | 2 +- db/attrshort.c | 2 +- db/bit.c | 2 +- db/block.c | 2 +- db/bmap.c | 2 +- db/bmroot.c | 2 +- db/btblock.c | 2 +- db/check.c | 2 +- db/command.c | 2 +- db/convert.c | 2 +- db/debug.c | 2 +- db/dir2.c | 2 +- db/dir2sf.c | 2 +- db/dquot.c | 2 +- db/echo.c | 2 +- db/faddr.c | 2 +- db/field.c | 2 +- db/flist.c | 2 +- db/fprint.c | 2 +- db/frag.c | 2 +- db/freesp.c | 2 +- db/hash.c | 2 +- db/help.c | 2 +- db/init.c | 2 +- db/inode.c | 2 +- db/input.c | 2 +- db/io.c | 2 +- db/malloc.c | 2 +- db/metadump.c | 4 +-- db/output.c | 2 +- db/print.c | 2 +- db/quit.c | 2 +- db/sb.c | 4 +-- db/sig.c | 2 +- db/strvec.c | 2 +- db/symlink.c | 2 +- db/text.c | 2 +- db/type.c | 2 +- db/write.c | 2 +- estimate/xfs_estimate.c | 2 +- fsr/xfs_fsr.c | 12 +++---- growfs/xfs_growfs.c | 4 +-- include/Makefile | 2 +- include/builddefs.in | 2 +- include/input.h | 2 +- include/libxfs.h | 86 +++++++++++++++++++++++----------------------- include/libxlog.h | 2 +- include/path.h | 2 +- include/project.h | 2 +- include/xfs_inode.h | 4 +-- io/attr.c | 6 ++-- io/bmap.c | 4 +-- io/fadvise.c | 6 ++-- io/fiemap.c | 4 +-- io/file.c | 6 ++-- io/freeze.c | 6 ++-- io/fsync.c | 4 +-- io/getrusage.c | 6 ++-- io/imap.c | 6 ++-- io/init.c | 6 ++-- io/inject.c | 6 ++-- io/link.c | 6 ++-- io/madvise.c | 6 ++-- io/mincore.c | 6 ++-- io/mmap.c | 6 ++-- io/open.c | 6 ++-- io/parent.c | 14 ++++---- io/pread.c | 6 ++-- io/prealloc.c | 6 ++-- io/pwrite.c | 6 ++-- io/readdir.c | 6 ++-- io/resblks.c | 6 ++-- io/seek.c | 6 ++-- io/sendfile.c | 6 ++-- io/shutdown.c | 6 ++-- io/sync.c | 4 +-- io/sync_file_range.c | 6 ++-- io/truncate.c | 6 ++-- libdisk/drivers.h | 2 +- libhandle/handle.c | 6 ++-- libhandle/jdm.c | 8 ++--- libxcmd/command.c | 6 ++-- libxcmd/help.c | 4 +-- libxcmd/input.c | 4 +-- libxcmd/paths.c | 6 ++-- libxcmd/projects.c | 2 +- libxcmd/quit.c | 4 +-- libxfs/Makefile | 12 +++---- libxfs/crc32.c | 4 +-- libxfs/darwin.c | 2 +- libxfs/freebsd.c | 2 +- libxfs/init.c | 2 +- libxfs/irix.c | 2 +- libxfs/libxfs_priv.h | 24 ++++++------- libxfs/radix-tree.c | 2 +- libxfs/rdwr.c | 2 +- libxlog/util.c | 4 +-- libxlog/xfs_log_recover.c | 4 +-- logprint/log_copy.c | 4 +-- logprint/log_dump.c | 4 +-- logprint/log_misc.c | 4 +-- logprint/log_print_all.c | 4 +-- logprint/log_print_trans.c | 4 +-- logprint/logprint.c | 4 +-- mdrestore/xfs_mdrestore.c | 2 +- mkfs/fstyp.c | 2 +- mkfs/maxtrres.c | 2 +- mkfs/proto.c | 2 +- mkfs/xfs_mkfs.c | 2 +- quota/edit.c | 4 +-- quota/free.c | 2 +- quota/init.c | 6 ++-- quota/path.c | 4 +-- quota/project.c | 4 +-- quota/quot.c | 2 +- quota/quota.c | 2 +- quota/quota.h | 6 ++-- quota/report.c | 2 +- quota/state.c | 2 +- repair/agheader.c | 2 +- repair/attr_repair.c | 2 +- repair/avl.c | 2 +- repair/avl64.c | 2 +- repair/bmap.c | 2 +- repair/btree.c | 2 +- repair/dino_chunks.c | 2 +- repair/dinode.c | 2 +- repair/dir2.c | 2 +- repair/globals.c | 2 +- repair/incore.c | 2 +- repair/incore_bmc.c | 2 +- repair/incore_ext.c | 2 +- repair/incore_ino.c | 2 +- repair/init.c | 2 +- repair/phase1.c | 2 +- repair/phase2.c | 4 +-- repair/phase3.c | 2 +- repair/phase4.c | 2 +- repair/phase5.c | 2 +- repair/phase6.c | 2 +- repair/phase7.c | 2 +- repair/prefetch.c | 2 +- repair/progress.c | 2 +- repair/rt.c | 2 +- repair/sb.c | 4 +-- repair/scan.c | 2 +- repair/threads.c | 2 +- repair/versions.c | 2 +- repair/xfs_repair.c | 4 +-- rtcp/xfs_rtcp.c | 2 +- 156 files changed, 308 insertions(+), 312 deletions(-) diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c index 44a32e8..4a5a8a6 100644 --- a/copy/xfs_copy.c +++ b/copy/xfs_copy.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include diff --git a/db/addr.c b/db/addr.c index a3ac5d6..e835dbb 100644 --- a/db/addr.c +++ b/db/addr.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "addr.h" #include "command.h" #include "type.h" diff --git a/db/agf.c b/db/agf.c index e144bd6..e10526d 100644 --- a/db/agf.c +++ b/db/agf.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/agfl.c b/db/agfl.c index b821b13..472873e 100644 --- a/db/agfl.c +++ b/db/agfl.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/agi.c b/db/agi.c index 634429e..285a3c5 100644 --- a/db/agi.c +++ b/db/agi.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/attr.c b/db/attr.c index e14e32e..897834b 100644 --- a/db/attr.c +++ b/db/attr.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #include "type.h" #include "faddr.h" diff --git a/db/attrset.c b/db/attrset.c index 1afadd2..ec9da5a 100644 --- a/db/attrset.c +++ b/db/attrset.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "attrset.h" #include "io.h" diff --git a/db/attrshort.c b/db/attrshort.c index 7dc5640..d82559c 100644 --- a/db/attrshort.c +++ b/db/attrshort.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/bit.c b/db/bit.c index b85ed6a..24872bf 100644 --- a/db/bit.c +++ b/db/bit.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #undef setbit /* defined in param.h on Linux */ diff --git a/db/block.c b/db/block.c index 9319cce..4a357ce 100644 --- a/db/block.c +++ b/db/block.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "block.h" #include "bmap.h" #include "command.h" diff --git a/db/bmap.c b/db/bmap.c index 60d6a80..92057b4 100644 --- a/db/bmap.c +++ b/db/bmap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "fprint.h" diff --git a/db/bmroot.c b/db/bmroot.c index 95be2dd..0950e19 100644 --- a/db/bmroot.c +++ b/db/bmroot.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/btblock.c b/db/btblock.c index 1953e05..46140fc 100644 --- a/db/btblock.c +++ b/db/btblock.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/check.c b/db/check.c index c109f20..afeea32 100644 --- a/db/check.c +++ b/db/check.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "bmap.h" diff --git a/db/command.c b/db/command.c index eb1efb6..2189e00 100644 --- a/db/command.c +++ b/db/command.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "addr.h" #include "attrset.h" #include "block.h" diff --git a/db/convert.c b/db/convert.c index d2bf1a9..09f9225 100644 --- a/db/convert.c +++ b/db/convert.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "convert.h" #include "output.h" diff --git a/db/debug.c b/db/debug.c index 13a319f..2875858 100644 --- a/db/debug.c +++ b/db/debug.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "debug.h" #include "output.h" diff --git a/db/dir2.c b/db/dir2.c index 75aaed5..7f69e6f 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #include "type.h" #include "faddr.h" diff --git a/db/dir2sf.c b/db/dir2sf.c index 831d6f2..a56590b 100644 --- a/db/dir2sf.c +++ b/db/dir2sf.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/dquot.c b/db/dquot.c index 6118256..3adde3b 100644 --- a/db/dquot.c +++ b/db/dquot.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #include "bmap.h" #include "command.h" diff --git a/db/echo.c b/db/echo.c index f2b7ab8..9a8ae72 100644 --- a/db/echo.c +++ b/db/echo.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "echo.h" #include "output.h" diff --git a/db/faddr.c b/db/faddr.c index 17451c2..e368d0d 100644 --- a/db/faddr.c +++ b/db/faddr.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "fprint.h" #include "faddr.h" diff --git a/db/field.c b/db/field.c index f68809a..843c385 100644 --- a/db/field.c +++ b/db/field.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/flist.c b/db/flist.c index 848478e..84065a2 100644 --- a/db/flist.c +++ b/db/flist.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/fprint.c b/db/fprint.c index f36cdc8..f2b3794 100644 --- a/db/fprint.c +++ b/db/fprint.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "type.h" diff --git a/db/frag.c b/db/frag.c index 309db7f..1cc922e 100644 --- a/db/frag.c +++ b/db/frag.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "bmap.h" #include "command.h" diff --git a/db/freesp.c b/db/freesp.c index b0fc95e..27e9f5a 100644 --- a/db/freesp.c +++ b/db/freesp.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "freesp.h" #include "io.h" diff --git a/db/hash.c b/db/hash.c index e02857f..c535fc9 100644 --- a/db/hash.c +++ b/db/hash.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "addr.h" #include "command.h" #include "type.h" diff --git a/db/help.c b/db/help.c index d6a56b0..59a7ba6 100644 --- a/db/help.c +++ b/db/help.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "help.h" #include "output.h" diff --git a/db/init.c b/db/init.c index 8efd883..9537a38 100644 --- a/db/init.c +++ b/db/init.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "command.h" #include "init.h" diff --git a/db/inode.c b/db/inode.c index e4d80ae..e86dabd 100644 --- a/db/inode.c +++ b/db/inode.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/input.c b/db/input.c index ec1b986..a90de6c 100644 --- a/db/input.c +++ b/db/input.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "command.h" #include "input.h" diff --git a/db/io.c b/db/io.c index 0f360a8..9fa52b8 100644 --- a/db/io.c +++ b/db/io.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/malloc.c b/db/malloc.c index 00cbfe1..9037bc1 100644 --- a/db/malloc.c +++ b/db/malloc.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "init.h" #include "malloc.h" #include "output.h" diff --git a/db/metadump.c b/db/metadump.c index f606e35..08899da 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "bmap.h" #include "command.h" #include "metadump.h" diff --git a/db/output.c b/db/output.c index 8f6e9cd..14f7c4a 100644 --- a/db/output.c +++ b/db/output.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "command.h" #include "output.h" diff --git a/db/print.c b/db/print.c index 9f08b9f..3ff2548 100644 --- a/db/print.c +++ b/db/print.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/quit.c b/db/quit.c index 7d352a6..1103a7a 100644 --- a/db/quit.c +++ b/db/quit.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "quit.h" diff --git a/db/sb.c b/db/sb.c index 2b78136..1a28cf2 100644 --- a/db/sb.c +++ b/db/sb.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/sig.c b/db/sig.c index 025c603..031567e 100644 --- a/db/sig.c +++ b/db/sig.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "sig.h" diff --git a/db/strvec.c b/db/strvec.c index 3fa10be..dd83448 100644 --- a/db/strvec.c +++ b/db/strvec.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "strvec.h" #include "output.h" #include "malloc.h" diff --git a/db/symlink.c b/db/symlink.c index 01719a7..ce96556 100644 --- a/db/symlink.c +++ b/db/symlink.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/text.c b/db/text.c index a0d4c89..f6c623c 100644 --- a/db/text.c +++ b/db/text.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "block.h" #include "bmap.h" diff --git a/db/type.c b/db/type.c index b150b53..37e0882 100644 --- a/db/type.c +++ b/db/type.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "block.h" #include "command.h" #include "type.h" diff --git a/db/write.c b/db/write.c index 6a33dba..9f5b423 100644 --- a/db/write.c +++ b/db/write.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "bit.h" diff --git a/estimate/xfs_estimate.c b/estimate/xfs_estimate.c index 636691b..65b7168 100644 --- a/estimate/xfs_estimate.c +++ b/estimate/xfs_estimate.c @@ -21,7 +21,7 @@ * * XXX: assumes dirv1 format. */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c index efc17a8..7c1d776 100644 --- a/fsr/xfs_fsr.c +++ b/fsr/xfs_fsr.c @@ -16,12 +16,12 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/xfs.h" -#include "xfs/xfs_types.h" -#include "xfs/jdm.h" -#include "xfs/xfs_bmap_btree.h" -#include "xfs/xfs_attr_sf.h" +#include "libxfs.h" +#include "xfs.h" +#include "xfs_types.h" +#include "jdm.h" +#include "xfs_bmap_btree.h" +#include "xfs_attr_sf.h" #include #include diff --git a/growfs/xfs_growfs.c b/growfs/xfs_growfs.c index 309b915..56315f9 100644 --- a/growfs/xfs_growfs.c +++ b/growfs/xfs_growfs.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/path.h" +#include "libxfs.h" +#include "path.h" static void usage(void) diff --git a/include/Makefile b/include/Makefile index bd8b0ca..778317e 100644 --- a/include/Makefile +++ b/include/Makefile @@ -65,7 +65,7 @@ disk: include $(BUILDRULES) # set up include/xfs header directory -install-headers: $(addsuffix -hdrs, $(HFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) +install-headers: $(addsuffix -hdrs, $(PHFILES) $(DKHFILES) $(HFILES)) %-hdrs: xfs $(Q)$(LN_S) -f $(PWD)/include/$* xfs/$* diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..6ee95b7 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -134,7 +134,7 @@ endif GCFLAGS = $(OPTIMIZER) $(DEBUG) \ -DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \ - -DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include + -DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include -I$(TOPDIR)/libxfs ifeq ($(ENABLE_GETTEXT),yes) GCFLAGS += -DENABLE_GETTEXT diff --git a/include/input.h b/include/input.h index ae273ad..d02170f 100644 --- a/include/input.h +++ b/include/input.h @@ -21,7 +21,7 @@ #include #include #include -#include "xfs/project.h" +#include "project.h" #include extern char **breakline(char *input, int *count); diff --git a/include/libxfs.h b/include/libxfs.h index eda664f..1fb2d6d 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -19,26 +19,26 @@ #ifndef __LIBXFS_H__ #define __LIBXFS_H__ -#include "xfs/libxfs_api_defs.h" -#include "xfs/platform_defs.h" +#include "libxfs_api_defs.h" +#include "platform_defs.h" -#include "xfs/list.h" -#include "xfs/hlist.h" -#include "xfs/cache.h" -#include "xfs/bitops.h" -#include "xfs/kmem.h" -#include "xfs/radix-tree.h" -#include "xfs/atomic.h" +#include "list.h" +#include "hlist.h" +#include "cache.h" +#include "bitops.h" +#include "kmem.h" +#include "radix-tree.h" +#include "atomic.h" -#include "xfs/xfs_types.h" -#include "xfs/xfs_fs.h" -#include "xfs/xfs_arch.h" +#include "xfs_types.h" +#include "xfs_fs.h" +#include "xfs_arch.h" -#include "xfs/xfs_shared.h" -#include "xfs/xfs_format.h" -#include "xfs/xfs_log_format.h" -#include "xfs/xfs_quota_defs.h" -#include "xfs/xfs_trans_resv.h" +#include "xfs_shared.h" +#include "xfs_format.h" +#include "xfs_log_format.h" +#include "xfs_quota_defs.h" +#include "xfs_trans_resv.h" /* CRC stuff, buffer API dependent on it */ @@ -48,33 +48,33 @@ extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len); #define crc32(c,p,l) crc32_le((c),(unsigned char const *)(p),(l)) #define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l)) -#include "xfs/xfs_cksum.h" +#include "xfs_cksum.h" /* * This mirrors the kernel include for xfs_buf.h - it's implicitly included in * every files via a similar include in the kernel xfs_linux.h. */ -#include "xfs/libxfs_io.h" - -#include "xfs/xfs_bit.h" -#include "xfs/xfs_sb.h" -#include "xfs/xfs_mount.h" -#include "xfs/xfs_da_format.h" -#include "xfs/xfs_da_btree.h" -#include "xfs/xfs_dir2.h" -#include "xfs/xfs_bmap_btree.h" -#include "xfs/xfs_alloc_btree.h" -#include "xfs/xfs_ialloc_btree.h" -#include "xfs/xfs_attr_sf.h" -#include "xfs/xfs_inode_fork.h" -#include "xfs/xfs_inode_buf.h" -#include "xfs/xfs_inode.h" -#include "xfs/xfs_alloc.h" -#include "xfs/xfs_btree.h" -#include "xfs/xfs_btree_trace.h" -#include "xfs/xfs_bmap.h" -#include "xfs/xfs_trace.h" -#include "xfs/xfs_trans.h" +#include "libxfs_io.h" + +#include "xfs_bit.h" +#include "xfs_sb.h" +#include "xfs_mount.h" +#include "xfs_da_format.h" +#include "xfs_da_btree.h" +#include "xfs_dir2.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_attr_sf.h" +#include "xfs_inode_fork.h" +#include "xfs_inode_buf.h" +#include "xfs_inode.h" +#include "xfs_alloc.h" +#include "xfs_btree.h" +#include "xfs_btree_trace.h" +#include "xfs_bmap.h" +#include "xfs_trace.h" +#include "xfs_trans.h" #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) @@ -173,11 +173,11 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC }; extern int libxfs_nproc(void); extern unsigned long libxfs_physmem(void); /* in kilobytes */ -#include "xfs/xfs_ialloc.h" +#include "xfs_ialloc.h" -#include "xfs/xfs_attr_leaf.h" -#include "xfs/xfs_attr_remote.h" -#include "xfs/xfs_trans_space.h" +#include "xfs_attr_leaf.h" +#include "xfs_attr_remote.h" +#include "xfs_trans_space.h" #define XFS_INOBT_IS_FREE_DISK(rp,i) \ ((be64_to_cpu((rp)->ir_free) & XFS_INOBT_MASK(i)) != 0) diff --git a/include/libxlog.h b/include/libxlog.h index 0c55a86..05b16e8 100644 --- a/include/libxlog.h +++ b/include/libxlog.h @@ -44,7 +44,7 @@ struct xlog { int l_sectBBsize; /* size of log sector in 512 byte chunks */ }; -#include "xfs/xfs_log_recover.h" +#include "xfs_log_recover.h" /* * macros mapping kernel code to user code diff --git a/include/path.h b/include/path.h index c8746cb..58955ef 100644 --- a/include/path.h +++ b/include/path.h @@ -18,7 +18,7 @@ #ifndef __PATH_H__ #define __PATH_H__ -#include "xfs/xfs.h" +#include "xfs.h" /* * XFS Filesystem Paths diff --git a/include/project.h b/include/project.h index a458a61..63bdffd 100644 --- a/include/project.h +++ b/include/project.h @@ -18,7 +18,7 @@ #ifndef __PROJECT_H__ #define __PROJECT_H__ -#include "xfs/xfs.h" +#include "xfs.h" extern int setprojid(const char *__name, int __fd, prid_t __id); extern int getprojid(const char *__name, int __fd, prid_t *__id); diff --git a/include/xfs_inode.h b/include/xfs_inode.h index 303efe0..71c0fb4 100644 --- a/include/xfs_inode.h +++ b/include/xfs_inode.h @@ -20,8 +20,8 @@ #define __XFS_INODE_H__ /* These match kernel side includes */ -#include "xfs/xfs_inode_buf.h" -#include "xfs/xfs_inode_fork.h" +#include "xfs_inode_buf.h" +#include "xfs_inode_fork.h" struct xfs_trans; struct xfs_mount; diff --git a/io/attr.c b/io/attr.c index dfae36e..bc1ab56 100644 --- a/io/attr.c +++ b/io/attr.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/bmap.c b/io/bmap.c index d96f7d4..432ddb7 100644 --- a/io/bmap.c +++ b/io/bmap.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include "init.h" #include "io.h" diff --git a/io/fadvise.c b/io/fadvise.c index 3b76ab9..fa586d3 100644 --- a/io/fadvise.c +++ b/io/fadvise.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/fiemap.c b/io/fiemap.c index 363d1d9..8482c99 100644 --- a/io/fiemap.c +++ b/io/fiemap.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include #include #include "init.h" diff --git a/io/file.c b/io/file.c index 0eadcab..91dd38e 100644 --- a/io/file.c +++ b/io/file.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/freeze.c b/io/freeze.c index a12ed67..90f5b66 100644 --- a/io/freeze.c +++ b/io/freeze.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/fsync.c b/io/fsync.c index d9c45f1..6c93dff 100644 --- a/io/fsync.c +++ b/io/fsync.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include "init.h" #include "io.h" diff --git a/io/getrusage.c b/io/getrusage.c index 35dc4bf..28b8453 100644 --- a/io/getrusage.c +++ b/io/getrusage.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include #include "init.h" diff --git a/io/imap.c b/io/imap.c index a615467..7c24bcd 100644 --- a/io/imap.c +++ b/io/imap.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/init.c b/io/init.c index 78a49b6..70214f9 100644 --- a/io/init.c +++ b/io/init.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/inject.c b/io/inject.c index f0aaf97..23eb4a2 100644 --- a/io/inject.c +++ b/io/inject.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/link.c b/io/link.c index 092e0d4..7fb81e1 100644 --- a/io/link.c +++ b/io/link.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/madvise.c b/io/madvise.c index 4f3f91b..b30d28b 100644 --- a/io/madvise.c +++ b/io/madvise.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/mincore.c b/io/mincore.c index 234e0a1..670d4c8 100644 --- a/io/mincore.c +++ b/io/mincore.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/mmap.c b/io/mmap.c index 06f678f..33747c1 100644 --- a/io/mmap.c +++ b/io/mmap.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include #include "init.h" diff --git a/io/open.c b/io/open.c index 795adeb..33d9f8d 100644 --- a/io/open.c +++ b/io/open.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/parent.c b/io/parent.c index e883f65..a374b3e 100644 --- a/io/parent.c +++ b/io/parent.c @@ -16,13 +16,13 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" -#include "xfs/path.h" -#include "xfs/parent.h" -#include "xfs/handle.h" -#include "xfs/jdm.h" +#include "xfs.h" +#include "command.h" +#include "input.h" +#include "path.h" +#include "parent.h" +#include "handle.h" +#include "jdm.h" #include "init.h" #include "io.h" diff --git a/io/pread.c b/io/pread.c index 280cc9d..9205e34 100644 --- a/io/pread.c +++ b/io/pread.c @@ -17,9 +17,9 @@ */ #include -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/prealloc.c b/io/prealloc.c index e458a92..b60d2dc 100644 --- a/io/prealloc.c +++ b/io/prealloc.c @@ -19,9 +19,9 @@ #if defined(HAVE_FALLOCATE) #include #endif -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/pwrite.c b/io/pwrite.c index 69f67af..c9d2b1a 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -17,9 +17,9 @@ */ #include -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/readdir.c b/io/readdir.c index 20b8898..f8b2755 100644 --- a/io/readdir.c +++ b/io/readdir.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/resblks.c b/io/resblks.c index 197f7e8..df032d5 100644 --- a/io/resblks.c +++ b/io/resblks.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/seek.c b/io/seek.c index 9b281d5..39dab61 100644 --- a/io/seek.c +++ b/io/seek.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include #include "init.h" diff --git a/io/sendfile.c b/io/sendfile.c index 22a5a4f..744b618 100644 --- a/io/sendfile.c +++ b/io/sendfile.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/shutdown.c b/io/shutdown.c index 2c86cf9..b75278a 100644 --- a/io/shutdown.c +++ b/io/shutdown.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/sync.c b/io/sync.c index c7bbbf1..0e7b82d 100644 --- a/io/sync.c +++ b/io/sync.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include "init.h" #include "io.h" diff --git a/io/sync_file_range.c b/io/sync_file_range.c index 6366331..8e66773 100644 --- a/io/sync_file_range.c +++ b/io/sync_file_range.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/truncate.c b/io/truncate.c index 401d2a5..5b2ac01 100644 --- a/io/truncate.c +++ b/io/truncate.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/libdisk/drivers.h b/libdisk/drivers.h index 22ac1ea..4d10568 100644 --- a/libdisk/drivers.h +++ b/libdisk/drivers.h @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include diff --git a/libhandle/handle.c b/libhandle/handle.c index 54e6f71..7313e3b 100644 --- a/libhandle/handle.c +++ b/libhandle/handle.c @@ -17,9 +17,9 @@ */ #include -#include "xfs/xfs.h" -#include "xfs/handle.h" -#include "xfs/parent.h" +#include "xfs.h" +#include "handle.h" +#include "parent.h" /* just pick a value we know is more than big enough */ #define MAXHANSIZ 64 diff --git a/libhandle/jdm.c b/libhandle/jdm.c index 2f2f3fd..13196d1 100644 --- a/libhandle/jdm.c +++ b/libhandle/jdm.c @@ -16,10 +16,10 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/handle.h" -#include "xfs/jdm.h" -#include "xfs/parent.h" +#include "xfs.h" +#include "handle.h" +#include "jdm.h" +#include "parent.h" /* internal fshandle - typecast to a void for external use */ #define FSHANDLE_SZ 8 diff --git a/libxcmd/command.c b/libxcmd/command.c index 148e58b..5d0649b 100644 --- a/libxcmd/command.c +++ b/libxcmd/command.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" cmdinfo_t *cmdtab; int ncmds; diff --git a/libxcmd/help.c b/libxcmd/help.c index bcd5641..023b830 100644 --- a/libxcmd/help.c +++ b/libxcmd/help.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" static cmdinfo_t help_cmd; static void help_onecmd(const char *cmd, const cmdinfo_t *ct); diff --git a/libxcmd/input.c b/libxcmd/input.c index 83aeeb5..966a7ff 100644 --- a/libxcmd/input.c +++ b/libxcmd/input.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/input.h" +#include "xfs.h" +#include "input.h" #include #include diff --git a/libxcmd/paths.c b/libxcmd/paths.c index c0b1ddb..c56b06b 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -24,9 +24,9 @@ #include #include #include -#include "xfs/path.h" -#include "xfs/input.h" -#include "xfs/project.h" +#include "path.h" +#include "input.h" +#include "project.h" #include extern char *progname; diff --git a/libxcmd/projects.c b/libxcmd/projects.c index b00e4c8..24ef70a 100644 --- a/libxcmd/projects.c +++ b/libxcmd/projects.c @@ -19,7 +19,7 @@ #include #include #include -#include "xfs/project.h" +#include "project.h" #define PROJID "/etc/projid" #define PROJECT_PATHS "/etc/projects" diff --git a/libxcmd/quit.c b/libxcmd/quit.c index 0921bbb..0a2dd40 100644 --- a/libxcmd/quit.c +++ b/libxcmd/quit.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" static cmdinfo_t quit_cmd; diff --git a/libxfs/Makefile b/libxfs/Makefile index ebbe40e..95de27e 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -17,7 +17,7 @@ PKGHFILES = xfs_fs.h \ xfs_format.h \ xfs_log_format.h -LIBHFILES = \ +HFILES = \ xfs_alloc.h \ xfs_alloc_btree.h \ xfs_attr_leaf.h \ @@ -40,11 +40,8 @@ LIBHFILES = \ xfs_trans_resv.h \ xfs_trans_space.h \ libxfs_io.h \ - libxfs_api_defs.h - - -# headers with build dependencies -HFILES = init.h \ + libxfs_api_defs.h \ + init.h \ crc32defs.h \ crc32table.h \ libxfs_priv.h \ @@ -90,7 +87,6 @@ CFILES = cache.c \ CFILES += $(PKG_PLATFORM).c PCFILES = darwin.c freebsd.c irix.c linux.c LSRCFILES = $(shell echo $(PCFILES) | sed -e "s/$(PKG_PLATFORM).c//g") -LSRCFILES += $(LIBHFILES) LSRCFILES += gen_crc32table.c # @@ -135,7 +131,7 @@ include $(BUILDRULES) install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) -install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES)) +install-headers: $(addsuffix -hdrs, $(PKGHFILES)) %-hdrs: $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* diff --git a/libxfs/crc32.c b/libxfs/crc32.c index 63b1467..b2c7ec0 100644 --- a/libxfs/crc32.c +++ b/libxfs/crc32.c @@ -33,8 +33,8 @@ * match the hardware acceleration available on Intel CPUs. */ -#include "xfs/platform_defs.h" -#include "xfs/xfs_arch.h" +#include "platform_defs.h" +#include "xfs_arch.h" #include "crc32defs.h" /* types specifc to this file */ diff --git a/libxfs/darwin.c b/libxfs/darwin.c index f4a3898..b9c314f 100644 --- a/libxfs/darwin.c +++ b/libxfs/darwin.c @@ -21,7 +21,7 @@ #include #include #include -#include "xfs/libxfs.h" +#include "libxfs.h" int platform_has_uuid = 1; extern char *progname; diff --git a/libxfs/freebsd.c b/libxfs/freebsd.c index ec131db..6c9f089 100644 --- a/libxfs/freebsd.c +++ b/libxfs/freebsd.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include diff --git a/libxfs/init.c b/libxfs/init.c index d287c1d..2859f94 100644 --- a/libxfs/init.c +++ b/libxfs/init.c @@ -31,7 +31,7 @@ #include "xfs_inode.h" #include "xfs_trans.h" -#include "xfs/libxfs.h" /* for now */ +#include "libxfs.h" /* for now */ char *progname = "libxfs"; /* default, changed by each tool */ diff --git a/libxfs/irix.c b/libxfs/irix.c index 69e6d81..65aaa7e 100644 --- a/libxfs/irix.c +++ b/libxfs/irix.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 445a6dc..7a29fd7 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -58,20 +58,20 @@ (ip)->d_ops, hdr, loghead) #include "libxfs_api_defs.h" -#include "xfs/platform_defs.h" +#include "platform_defs.h" -#include "xfs/list.h" -#include "xfs/hlist.h" -#include "xfs/cache.h" -#include "xfs/bitops.h" -#include "xfs/kmem.h" -#include "xfs/radix-tree.h" -#include "xfs/atomic.h" +#include "list.h" +#include "hlist.h" +#include "cache.h" +#include "bitops.h" +#include "kmem.h" +#include "radix-tree.h" +#include "atomic.h" -#include "xfs/xfs_types.h" -#include "xfs/xfs_arch.h" +#include "xfs_types.h" +#include "xfs_arch.h" -#include "xfs/xfs_fs.h" +#include "xfs_fs.h" /* CRC stuff, buffer API dependent on it */ extern uint32_t crc32_le(uint32_t crc, unsigned char const *p, size_t len); @@ -80,7 +80,7 @@ extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len); #define crc32(c,p,l) crc32_le((c),(unsigned char const *)(p),(l)) #define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l)) -#include "xfs/xfs_cksum.h" +#include "xfs_cksum.h" /* * This mirrors the kernel include for xfs_buf.h - it's implicitly included in diff --git a/libxfs/radix-tree.c b/libxfs/radix-tree.c index c859f28..9e395be 100644 --- a/libxfs/radix-tree.c +++ b/libxfs/radix-tree.c @@ -18,7 +18,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "xfs/platform_defs.h" +#include "platform_defs.h" #include "radix-tree.h" #ifndef ARRAY_SIZE diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index 4e0c75b..4f8212f 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -30,7 +30,7 @@ #include "xfs_inode.h" #include "xfs_trans.h" -#include "xfs/libxfs.h" /* for LIBXFS_EXIT_ON_FAILURE */ +#include "libxfs.h" /* for LIBXFS_EXIT_ON_FAILURE */ /* * Important design/architecture note: diff --git a/libxlog/util.c b/libxlog/util.c index a0e35cc..2feae82 100644 --- a/libxlog/util.c +++ b/libxlog/util.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" int print_exit; int print_skip_uuid; diff --git a/libxlog/xfs_log_recover.c b/libxlog/xfs_log_recover.c index a80c431..ef7cf68 100644 --- a/libxlog/xfs_log_recover.c +++ b/libxlog/xfs_log_recover.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #define xfs_readonly_buftarg(buftarg) (0) diff --git a/logprint/log_copy.c b/logprint/log_copy.c index ea55a1f..1cc4c21 100644 --- a/logprint/log_copy.c +++ b/logprint/log_copy.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_dump.c b/logprint/log_dump.c index efcf62e..2bccb50 100644 --- a/logprint/log_dump.c +++ b/logprint/log_dump.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_misc.c b/logprint/log_misc.c index 7ea6edc..fd30679 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c index 6569968..9f1a7ab 100644 --- a/logprint/log_print_all.c +++ b/logprint/log_print_all.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_print_trans.c b/logprint/log_print_trans.c index cbd7a9c..9bf2b37 100644 --- a/logprint/log_print_trans.c +++ b/logprint/log_print_trans.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/logprint.c b/logprint/logprint.c index 2ad2ec0..a5c9b32 100644 --- a/logprint/logprint.c +++ b/logprint/logprint.c @@ -18,8 +18,8 @@ #include #include -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c index ea7298d..5764616 100644 --- a/mdrestore/xfs_mdrestore.c +++ b/mdrestore/xfs_mdrestore.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "xfs_metadump.h" char *progname; diff --git a/mkfs/fstyp.c b/mkfs/fstyp.c index 7410516..7f3da06 100644 --- a/mkfs/fstyp.c +++ b/mkfs/fstyp.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include /* diff --git a/mkfs/maxtrres.c b/mkfs/maxtrres.c index f6bcec0..e1d5ee9 100644 --- a/mkfs/maxtrres.c +++ b/mkfs/maxtrres.c @@ -24,7 +24,7 @@ * directory block size. */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "xfs_mkfs.h" int diff --git a/mkfs/proto.c b/mkfs/proto.c index 17308bc..cb34b28 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "xfs_mkfs.h" diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 11e9f4b..80cdd10 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #ifdef ENABLE_BLKID #include diff --git a/quota/edit.c b/quota/edit.c index 0170d51..d226e89 100644 --- a/quota/edit.c +++ b/quota/edit.c @@ -19,8 +19,8 @@ #include #include #include -#include "xfs/input.h" -#include "xfs/command.h" +#include "input.h" +#include "command.h" #include "init.h" #include "quota.h" diff --git a/quota/free.c b/quota/free.c index 72ab503..dcbe8ce 100644 --- a/quota/free.c +++ b/quota/free.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include "init.h" #include "quota.h" diff --git a/quota/init.c b/quota/init.c index 019e2c5..52f7941 100644 --- a/quota/init.c +++ b/quota/init.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/path.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "path.h" +#include "command.h" +#include "input.h" #include "init.h" char *progname; diff --git a/quota/path.c b/quota/path.c index 9a35332..bdb8c98 100644 --- a/quota/path.c +++ b/quota/path.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" -#include "xfs/input.h" +#include "command.h" +#include "input.h" #include "init.h" #include "quota.h" diff --git a/quota/project.c b/quota/project.c index f30c6c6..17a83b0 100644 --- a/quota/project.c +++ b/quota/project.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" -#include "xfs/input.h" +#include "command.h" +#include "input.h" #include "init.h" #include "quota.h" diff --git a/quota/quot.c b/quota/quot.c index be41026..9116e48 100644 --- a/quota/quot.c +++ b/quota/quot.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include #include #include diff --git a/quota/quota.c b/quota/quota.c index d249740..f6b24c3 100644 --- a/quota/quota.c +++ b/quota/quota.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include #include #include diff --git a/quota/quota.h b/quota/quota.h index 974747f..a905ce5 100644 --- a/quota/quota.h +++ b/quota/quota.h @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xqm.h" -#include "xfs/path.h" -#include "xfs/project.h" +#include "xqm.h" +#include "path.h" +#include "project.h" #include /* diff --git a/quota/report.c b/quota/report.c index 7c3cf45..3d84447 100644 --- a/quota/report.c +++ b/quota/report.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include #include #include diff --git a/quota/state.c b/quota/state.c index b1827b6..0173f40 100644 --- a/quota/state.c +++ b/quota/state.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include "init.h" #include "quota.h" diff --git a/repair/agheader.c b/repair/agheader.c index a216afa..c79031f 100644 --- a/repair/agheader.c +++ b/repair/agheader.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "agheader.h" #include "protos.h" diff --git a/repair/attr_repair.c b/repair/attr_repair.c index e2bfd44..62f80e7 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "err_protos.h" #include "attr_repair.h" diff --git a/repair/avl.c b/repair/avl.c index 83e3087..e3843ae 100644 --- a/repair/avl.c +++ b/repair/avl.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #define CERT ASSERT diff --git a/repair/avl64.c b/repair/avl64.c index 64f5358..51cd624 100644 --- a/repair/avl64.c +++ b/repair/avl64.c @@ -17,7 +17,7 @@ */ #include -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl64.h" #define CERT ASSERT diff --git a/repair/bmap.c b/repair/bmap.c index c5c50c3..2655632 100644 --- a/repair/bmap.c +++ b/repair/bmap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "err_protos.h" #include "bmap.h" diff --git a/repair/btree.c b/repair/btree.c index bc4ed98..66fb40b 100644 --- a/repair/btree.c +++ b/repair/btree.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "btree.h" /* diff --git a/repair/dino_chunks.c b/repair/dino_chunks.c index d484a1d..7dbaca6 100644 --- a/repair/dino_chunks.c +++ b/repair/dino_chunks.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/dinode.c b/repair/dinode.c index 09db966..c6303fa 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/dir2.c b/repair/dir2.c index c89f478..187e069 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "incore.h" diff --git a/repair/globals.c b/repair/globals.c index d0ca3fb..9619220 100644 --- a/repair/globals.c +++ b/repair/globals.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #define EXTERN #include "globals.h" diff --git a/repair/incore.c b/repair/incore.c index d5ecfd6..cb57316 100644 --- a/repair/incore.c +++ b/repair/incore.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "btree.h" #include "globals.h" diff --git a/repair/incore_bmc.c b/repair/incore_bmc.c index c1e855d..de142ee 100644 --- a/repair/incore_bmc.c +++ b/repair/incore_bmc.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "incore.h" diff --git a/repair/incore_ext.c b/repair/incore_ext.c index c15e57d..cac379c 100644 --- a/repair/incore_ext.c +++ b/repair/incore_ext.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "btree.h" #include "globals.h" diff --git a/repair/incore_ino.c b/repair/incore_ino.c index 7e19657..32d7678 100644 --- a/repair/incore_ino.c +++ b/repair/incore_ino.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "incore.h" diff --git a/repair/init.c b/repair/init.c index a7547cb..609229c 100644 --- a/repair/init.c +++ b/repair/init.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "agheader.h" #include "protos.h" diff --git a/repair/phase1.c b/repair/phase1.c index bd9adcb..126d0b3 100644 --- a/repair/phase1.c +++ b/repair/phase1.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "agheader.h" #include "protos.h" diff --git a/repair/phase2.c b/repair/phase2.c index 04c1295..4c270e5 100644 --- a/repair/phase2.c +++ b/repair/phase2.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/phase3.c b/repair/phase3.c index 4751e56..20786af 100644 --- a/repair/phase3.c +++ b/repair/phase3.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "threads.h" #include "prefetch.h" #include "avl.h" diff --git a/repair/phase4.c b/repair/phase4.c index 8d3525c..e0571e8 100644 --- a/repair/phase4.c +++ b/repair/phase4.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "threads.h" #include "prefetch.h" #include "avl.h" diff --git a/repair/phase5.c b/repair/phase5.c index 9b3d73b..b9a64b9 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/phase6.c b/repair/phase6.c index 9a5cba7..672c6f1 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "threads.h" #include "prefetch.h" #include "avl.h" diff --git a/repair/phase7.c b/repair/phase7.c index 56c0379..b1e3a55 100644 --- a/repair/phase7.c +++ b/repair/phase7.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/prefetch.c b/repair/prefetch.c index 08c0394..8b261ae 100644 --- a/repair/prefetch.c +++ b/repair/prefetch.c @@ -1,4 +1,4 @@ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "avl.h" #include "btree.h" diff --git a/repair/progress.c b/repair/progress.c index 1b27924..27cbaef 100644 --- a/repair/progress.c +++ b/repair/progress.c @@ -1,5 +1,5 @@ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "progress.h" #include "err_protos.h" diff --git a/repair/rt.c b/repair/rt.c index b412a0f..3290d2c 100644 --- a/repair/rt.c +++ b/repair/rt.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/sb.c b/repair/sb.c index f6a1f15..4eef14a 100644 --- a/repair/sb.c +++ b/repair/sb.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "agheader.h" #include "globals.h" #include "protos.h" diff --git a/repair/scan.c b/repair/scan.c index e9a8ab4..dd61046 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/threads.c b/repair/threads.c index a5fb856..631531f 100644 --- a/repair/threads.c +++ b/repair/threads.c @@ -1,4 +1,4 @@ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "threads.h" diff --git a/repair/versions.c b/repair/versions.c index 0bf4ab3..fb1b3e4 100644 --- a/repair/versions.c +++ b/repair/versions.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #define EXTERN #include "versions.h" diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index df1fd78..db703d0 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include #include "avl.h" #include "avl64.h" diff --git a/rtcp/xfs_rtcp.c b/rtcp/xfs_rtcp.c index 7f48060..f604b46 100644 --- a/rtcp/xfs_rtcp.c +++ b/rtcp/xfs_rtcp.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" int rtcp(char *, char *, int); int xfsrtextsize(char *path); -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:14 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3A2937FE2 for ; Fri, 3 Jul 2015 05:15:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB7EEAC00B for ; Fri, 3 Jul 2015 03:15:13 -0700 (PDT) X-ASG-Debug-ID: 1435918511-04cb6c209f29990001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id lRE8FivEAwLpTu18 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:11 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAxzy-0003hC-G1 for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:10 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 09/13] xfsprogs: move __u*/__s* typedefs to per-port headers Date: Fri, 3 Jul 2015 12:12:17 +0200 X-ASG-Orig-Subj: [PATCH 09/13] xfsprogs: move __u*/__s* typedefs to per-port headers Message-Id: <1435918341-10128-10-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918511 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Currently we have to install the autoconf-generated platform_defs.h to get the defintions for these. But they are clearly a feature of Linux vs non-Linux platforms so move them to the per-port headers instead. Note: in the long run it might be a good idea to just the standard uint*_t/int*_t types instead. Signed-off-by: Christoph Hellwig --- configure.ac | 1 - include/darwin.h | 9 +++++++++ include/freebsd.h | 9 +++++++++ include/gnukfreebsd.h | 9 +++++++++ include/irix.h | 9 +++++++++ include/linux.h | 1 + include/platform_defs.h.in | 14 -------------- m4/package_types.m4 | 13 ------------- 8 files changed, 37 insertions(+), 28 deletions(-) diff --git a/configure.ac b/configure.ac index fe991cc..d6d1adc 100644 --- a/configure.ac +++ b/configure.ac @@ -116,7 +116,6 @@ AC_HAVE_READDIR AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([char *]) -AC_TYPE_U32 AC_TYPE_UMODE_T AC_MANUAL_FORMAT diff --git a/include/darwin.h b/include/darwin.h index 30f0052..abdf4e3 100644 --- a/include/darwin.h +++ b/include/darwin.h @@ -109,6 +109,15 @@ static __inline__ void platform_uuid_copy(uuid_t *dst, uuid_t *src) memcpy(dst, src, sizeof(uuid_t)); } +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define __int8_t int8_t #define __int16_t int16_t #define __int32_t int32_t diff --git a/include/freebsd.h b/include/freebsd.h index e59b1e8..902b940 100644 --- a/include/freebsd.h +++ b/include/freebsd.h @@ -53,6 +53,15 @@ typedef __uint64_t xfs_ino_t; typedef __uint32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define O_LARGEFILE 0 #define HAVE_FID 1 diff --git a/include/gnukfreebsd.h b/include/gnukfreebsd.h index b83c144..95c4c13 100644 --- a/include/gnukfreebsd.h +++ b/include/gnukfreebsd.h @@ -42,6 +42,15 @@ typedef __uint64_t xfs_ino_t; typedef __uint32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define HAVE_FID 1 static __inline__ int xfsctl(const char *path, int fd, int cmd, void *p) diff --git a/include/irix.h b/include/irix.h index 31050c4..28564c8 100644 --- a/include/irix.h +++ b/include/irix.h @@ -47,6 +47,15 @@ typedef __int64_t xfs_ino_t; typedef __int32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define xfs_flock64 flock64 #define xfs_flock64_t struct flock64 diff --git a/include/linux.h b/include/linux.h index 31c077a..cb6298f 100644 --- a/include/linux.h +++ b/include/linux.h @@ -28,6 +28,7 @@ #include #include #include +#include static __inline__ int xfsctl(const char *path, int fd, int cmd, void *p) { diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 81741c4..db6cb2e 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -36,20 +36,6 @@ #include #include -#undef HAVE___U32 -#ifdef HAVE___U32 -#include -#else -typedef unsigned char __u8; -typedef signed char __s8; -typedef unsigned short __u16; -typedef signed short __s16; -typedef unsigned int __u32; -typedef signed int __s32; -typedef unsigned long long int __u64; -typedef signed long long int __s64; -#endif - typedef struct filldir filldir_t; #if defined(__linux__) diff --git a/m4/package_types.m4 b/m4/package_types.m4 index c3645bc..4aa09a5 100644 --- a/m4/package_types.m4 +++ b/m4/package_types.m4 @@ -1,16 +1,3 @@ -# -# Check if we have a type for __u32 -# -AC_DEFUN([AC_TYPE_U32], - [ AC_MSG_CHECKING([for __u32 ]) - AC_TRY_COMPILE([ -#include -#include -#include - ], [ - __u32 u32; - ], AC_DEFINE(HAVE___U32) AC_MSG_RESULT(yes) , AC_MSG_RESULT(no)) - ]) # # Check if we have umode_t # -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:16 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5DBCB7FDA for ; Fri, 3 Jul 2015 05:15:16 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id EE937AC00B for ; Fri, 3 Jul 2015 03:15:15 -0700 (PDT) X-ASG-Debug-ID: 1435918514-04bdf0078828d00001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 4ZDMLpxxzBzyiUHK (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:14 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAy02-0003kO-11 for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:14 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 10/13] xfsprogs: include libxfs.h in libxfs_priv.h Date: Fri, 3 Jul 2015 12:12:18 +0200 X-ASG-Orig-Subj: [PATCH 10/13] xfsprogs: include libxfs.h in libxfs_priv.h Message-Id: <1435918341-10128-11-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918514 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 libxfs_priv.h duplicates large parts of libxfs.h. Signed-off-by: Christoph Hellwig --- include/libxfs.h | 4 ---- libxfs/libxfs_priv.h | 37 +------------------------------------ 2 files changed, 1 insertion(+), 40 deletions(-) diff --git a/include/libxfs.h b/include/libxfs.h index 1fb2d6d..62553f0 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -163,12 +163,8 @@ extern int libxfs_bmap_finish(xfs_trans_t **, xfs_bmap_free_t *, int *); extern void libxfs_fs_repair_cmn_err(int, struct xfs_mount *, char *, ...); extern void libxfs_fs_cmn_err(int, struct xfs_mount *, char *, ...); -/* XXX: this is messy and needs fixing */ -#ifndef __LIBXFS_INTERNAL_XFS_H__ extern void cmn_err(int, char *, ...); enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC }; -#endif - extern int libxfs_nproc(void); extern unsigned long libxfs_physmem(void); /* in kilobytes */ diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 7a29fd7..aaa24df 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -57,39 +57,7 @@ __xfs_dir2_data_freescan((ip)->i_mount->m_dir_geo, \ (ip)->d_ops, hdr, loghead) -#include "libxfs_api_defs.h" -#include "platform_defs.h" - -#include "list.h" -#include "hlist.h" -#include "cache.h" -#include "bitops.h" -#include "kmem.h" -#include "radix-tree.h" -#include "atomic.h" - -#include "xfs_types.h" -#include "xfs_arch.h" - -#include "xfs_fs.h" - -/* CRC stuff, buffer API dependent on it */ -extern uint32_t crc32_le(uint32_t crc, unsigned char const *p, size_t len); -extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len); - -#define crc32(c,p,l) crc32_le((c),(unsigned char const *)(p),(l)) -#define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l)) - -#include "xfs_cksum.h" - -/* - * This mirrors the kernel include for xfs_buf.h - it's implicitly included in - * every files via a similar include in the kernel xfs_linux.h. - */ -#include "libxfs_io.h" - -/* for all the support code that uses progname in error messages */ -extern char *progname; +#include "libxfs.h" #undef ASSERT #define ASSERT(ex) assert(ex) @@ -115,9 +83,6 @@ extern char *progname; #define XFS_IGET_CREATE 0x1 #define XFS_IGET_UNTRUSTED 0x2 -extern void cmn_err(int, char *, ...); -enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC }; - #define xfs_notice(mp,fmt,args...) cmn_err(CE_NOTE,fmt, ## args) #define xfs_warn(mp,fmt,args...) cmn_err(CE_WARN,fmt, ## args) #define xfs_hex_dump(d,n) ((void) 0) -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F2BD27FD5 for ; Fri, 3 Jul 2015 05:15:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DFF2D304039 for ; Fri, 3 Jul 2015 03:15:20 -0700 (PDT) X-ASG-Debug-ID: 1435918518-04cb6c209c299a0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id yWN4zD7IkKlK13ix (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:18 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAy05-0003ma-Fh for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:18 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 11/13] xfsprogs: don't install platform_defs.h Date: Fri, 3 Jul 2015 12:12:19 +0200 X-ASG-Orig-Subj: [PATCH 11/13] xfsprogs: don't install platform_defs.h Message-Id: <1435918341-10128-12-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918518 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 --- include/Makefile | 4 ++-- include/libxfs.h | 1 + include/linux.h | 1 + include/path.h | 2 +- include/platform_defs.h.in | 27 --------------------------- include/project.h | 1 + include/xfs.h | 28 +++++++++++++++++++++++++++- io/attr.c | 1 - io/bmap.c | 2 +- io/fadvise.c | 1 - io/fiemap.c | 2 +- io/file.c | 1 - io/freeze.c | 1 - io/fsync.c | 2 +- io/getrusage.c | 1 - io/imap.c | 1 - io/init.c | 2 +- io/inject.c | 1 - io/io.h | 2 ++ io/link.c | 1 - io/madvise.c | 1 - io/mincore.c | 1 - io/mmap.c | 1 - io/open.c | 1 - io/parent.c | 1 - io/pread.c | 1 - io/prealloc.c | 1 - io/pwrite.c | 1 - io/readdir.c | 1 - io/resblks.c | 1 - io/seek.c | 1 - io/sendfile.c | 1 - io/shutdown.c | 1 - io/sync.c | 2 +- io/sync_file_range.c | 1 - io/truncate.c | 1 - libhandle/handle.c | 1 + libhandle/jdm.c | 1 + libxcmd/command.c | 2 +- libxcmd/help.c | 2 +- libxcmd/input.c | 2 +- libxcmd/quit.c | 2 +- libxfs/crc32.c | 1 + libxfs/radix-tree.c | 1 + 44 files changed, 48 insertions(+), 63 deletions(-) diff --git a/include/Makefile b/include/Makefile index 778317e..e2a4b09 100644 --- a/include/Makefile +++ b/include/Makefile @@ -38,12 +38,12 @@ LIBHFILES = libxfs.h \ command.h \ input.h \ path.h \ - project.h + project.h \ + platform_defs.h \ HFILES = handle.h \ jdm.h \ $(PKG_PLATFORM).h \ - platform_defs.h \ xfs.h \ xqm.h \ xfs_arch.h diff --git a/include/libxfs.h b/include/libxfs.h index 62553f0..67a5fa6 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -21,6 +21,7 @@ #include "libxfs_api_defs.h" #include "platform_defs.h" +#include "xfs.h" #include "list.h" #include "hlist.h" diff --git a/include/linux.h b/include/linux.h index cb6298f..8804c2d 100644 --- a/include/linux.h +++ b/include/linux.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include diff --git a/include/path.h b/include/path.h index 58955ef..46a887e 100644 --- a/include/path.h +++ b/include/path.h @@ -18,7 +18,7 @@ #ifndef __PATH_H__ #define __PATH_H__ -#include "xfs.h" +#include "platform_defs.h" /* * XFS Filesystem Paths diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index db6cb2e..fc7e01a 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -38,20 +38,6 @@ typedef struct filldir filldir_t; -#if defined(__linux__) -#include -#elif defined(__FreeBSD__) -#include -#elif defined(__FreeBSD_kernel__) -#include -#elif defined(__APPLE__) -#include -#elif defined(__sgi__) || defined(__sgi) -#include -#else -# error unknown platform... have fun porting! -#endif - /* long and pointer must be either 32 bit or 64 bit */ #undef SIZEOF_LONG #undef SIZEOF_CHAR_P @@ -76,19 +62,6 @@ typedef unsigned short umode_t; #endif #include -#ifdef DEBUG -# define ASSERT(EX) assert(EX) -#else -# define ASSERT(EX) ((void) 0) -#endif - -/* - * sparse kernel source annotations - */ -#ifndef __user -#define __user -#endif - #define IRIX_DEV_BITSMAJOR 14 #define IRIX_DEV_BITSMINOR 18 #define IRIX_DEV_MAXMAJ 0x1ff diff --git a/include/project.h b/include/project.h index 63bdffd..77ed06b 100644 --- a/include/project.h +++ b/include/project.h @@ -18,6 +18,7 @@ #ifndef __PROJECT_H__ #define __PROJECT_H__ +#include "platform_defs.h" #include "xfs.h" extern int setprojid(const char *__name, int __fd, prid_t __id); diff --git a/include/xfs.h b/include/xfs.h index e32c4a8..bc94068 100644 --- a/include/xfs.h +++ b/include/xfs.h @@ -33,7 +33,33 @@ #ifndef __XFS_H__ #define __XFS_H__ -#include +#if defined(__linux__) +#include +#elif defined(__FreeBSD__) +#include +#elif defined(__FreeBSD_kernel__) +#include +#elif defined(__APPLE__) +#include +#elif defined(__sgi__) || defined(__sgi) +#include +#else +# error unknown platform... have fun porting! +#endif + +#ifdef DEBUG +# define ASSERT(EX) assert(EX) +#else +# define ASSERT(EX) ((void) 0) +#endif + +/* + * sparse kernel source annotations + */ +#ifndef __user +#define __user +#endif + #include #include diff --git a/io/attr.c b/io/attr.c index bc1ab56..7cbcc3c 100644 --- a/io/attr.c +++ b/io/attr.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/bmap.c b/io/bmap.c index 432ddb7..cbeed3b 100644 --- a/io/bmap.c +++ b/io/bmap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "init.h" #include "io.h" diff --git a/io/fadvise.c b/io/fadvise.c index fa586d3..d59d1ff 100644 --- a/io/fadvise.c +++ b/io/fadvise.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/fiemap.c b/io/fiemap.c index 8482c99..17b38a4 100644 --- a/io/fiemap.c +++ b/io/fiemap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include #include diff --git a/io/file.c b/io/file.c index 91dd38e..d4bc4f8 100644 --- a/io/file.c +++ b/io/file.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/freeze.c b/io/freeze.c index 90f5b66..3d0d2a4 100644 --- a/io/freeze.c +++ b/io/freeze.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/fsync.c b/io/fsync.c index 6c93dff..9fe5e2f 100644 --- a/io/fsync.c +++ b/io/fsync.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "init.h" #include "io.h" diff --git a/io/getrusage.c b/io/getrusage.c index 28b8453..bccf94c 100644 --- a/io/getrusage.c +++ b/io/getrusage.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/imap.c b/io/imap.c index 7c24bcd..34901cb 100644 --- a/io/imap.c +++ b/io/imap.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/init.c b/io/init.c index 70214f9..13f35c4 100644 --- a/io/init.c +++ b/io/init.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/inject.c b/io/inject.c index 23eb4a2..90ccda8 100644 --- a/io/inject.c +++ b/io/inject.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/io.h b/io/io.h index db8b513..b115e4a 100644 --- a/io/io.h +++ b/io/io.h @@ -16,6 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "xfs.h" + /* * Read/write patterns (default is always "forward") */ diff --git a/io/link.c b/io/link.c index 7fb81e1..ccf8e69 100644 --- a/io/link.c +++ b/io/link.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/madvise.c b/io/madvise.c index b30d28b..1d8b53c 100644 --- a/io/madvise.c +++ b/io/madvise.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/mincore.c b/io/mincore.c index 670d4c8..9e0d3a6 100644 --- a/io/mincore.c +++ b/io/mincore.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/mmap.c b/io/mmap.c index 33747c1..f26276e 100644 --- a/io/mmap.c +++ b/io/mmap.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/open.c b/io/open.c index 33d9f8d..ac5a5e0 100644 --- a/io/open.c +++ b/io/open.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/parent.c b/io/parent.c index a374b3e..abc3402 100644 --- a/io/parent.c +++ b/io/parent.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "path.h" diff --git a/io/pread.c b/io/pread.c index 9205e34..1c77c41 100644 --- a/io/pread.c +++ b/io/pread.c @@ -17,7 +17,6 @@ */ #include -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/prealloc.c b/io/prealloc.c index b60d2dc..713ea7b 100644 --- a/io/prealloc.c +++ b/io/prealloc.c @@ -19,7 +19,6 @@ #if defined(HAVE_FALLOCATE) #include #endif -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/pwrite.c b/io/pwrite.c index c9d2b1a..10f78e4 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -17,7 +17,6 @@ */ #include -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/readdir.c b/io/readdir.c index f8b2755..7b0edbc 100644 --- a/io/readdir.c +++ b/io/readdir.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/resblks.c b/io/resblks.c index df032d5..73318ae 100644 --- a/io/resblks.c +++ b/io/resblks.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/seek.c b/io/seek.c index 39dab61..35a369e 100644 --- a/io/seek.c +++ b/io/seek.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/sendfile.c b/io/sendfile.c index 744b618..5c1638f 100644 --- a/io/sendfile.c +++ b/io/sendfile.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/shutdown.c b/io/shutdown.c index b75278a..d8507cc 100644 --- a/io/shutdown.c +++ b/io/shutdown.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/sync.c b/io/sync.c index 0e7b82d..28e3a15 100644 --- a/io/sync.c +++ b/io/sync.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "init.h" #include "io.h" diff --git a/io/sync_file_range.c b/io/sync_file_range.c index 8e66773..7e4f3e6 100644 --- a/io/sync_file_range.c +++ b/io/sync_file_range.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/truncate.c b/io/truncate.c index 5b2ac01..f2df168 100644 --- a/io/truncate.c +++ b/io/truncate.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/libhandle/handle.c b/libhandle/handle.c index 7313e3b..b1c0c10 100644 --- a/libhandle/handle.c +++ b/libhandle/handle.c @@ -17,6 +17,7 @@ */ #include +#include "platform_defs.h" #include "xfs.h" #include "handle.h" #include "parent.h" diff --git a/libhandle/jdm.c b/libhandle/jdm.c index 13196d1..d804423 100644 --- a/libhandle/jdm.c +++ b/libhandle/jdm.c @@ -16,6 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "platform_defs.h" #include "xfs.h" #include "handle.h" #include "jdm.h" diff --git a/libxcmd/command.c b/libxcmd/command.c index 5d0649b..42a77e9 100644 --- a/libxcmd/command.c +++ b/libxcmd/command.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "input.h" diff --git a/libxcmd/help.c b/libxcmd/help.c index 023b830..fad0ab9 100644 --- a/libxcmd/help.c +++ b/libxcmd/help.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" static cmdinfo_t help_cmd; diff --git a/libxcmd/input.c b/libxcmd/input.c index 966a7ff..c505ab3 100644 --- a/libxcmd/input.c +++ b/libxcmd/input.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "input.h" #include #include diff --git a/libxcmd/quit.c b/libxcmd/quit.c index 0a2dd40..0183b8f 100644 --- a/libxcmd/quit.c +++ b/libxcmd/quit.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" static cmdinfo_t quit_cmd; diff --git a/libxfs/crc32.c b/libxfs/crc32.c index b2c7ec0..783d62e 100644 --- a/libxfs/crc32.c +++ b/libxfs/crc32.c @@ -34,6 +34,7 @@ */ #include "platform_defs.h" +#include "xfs.h" #include "xfs_arch.h" #include "crc32defs.h" diff --git a/libxfs/radix-tree.c b/libxfs/radix-tree.c index 9e395be..4d44ab4 100644 --- a/libxfs/radix-tree.c +++ b/libxfs/radix-tree.c @@ -19,6 +19,7 @@ */ #include "platform_defs.h" +#include "xfs.h" #include "radix-tree.h" #ifndef ARRAY_SIZE -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 913C97FED for ; Fri, 3 Jul 2015 05:15:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6F900304048 for ; Fri, 3 Jul 2015 03:15:23 -0700 (PDT) X-ASG-Debug-ID: 1435918522-04cbb050d0265d0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id VnDSmccJBcvsU95Z (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:22 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAy09-0003nz-H2 for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:22 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 12/13] xfsprogs: remove filldir_t typedef Date: Fri, 3 Jul 2015 12:12:20 +0200 X-ASG-Orig-Subj: [PATCH 12/13] xfsprogs: remove filldir_t typedef Message-Id: <1435918341-10128-13-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918522 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Signed-off-by: Christoph Hellwig --- include/platform_defs.h.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index fc7e01a..7ded23e 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -36,8 +36,6 @@ #include #include -typedef struct filldir filldir_t; - /* long and pointer must be either 32 bit or 64 bit */ #undef SIZEOF_LONG #undef SIZEOF_CHAR_P -- 1.9.1 From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 05:15:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0819E7FF7 for ; Fri, 3 Jul 2015 05:15:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7A5D6AC00B for ; Fri, 3 Jul 2015 03:15:48 -0700 (PDT) X-ASG-Debug-ID: 1435918546-04cb6c209f299f0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id fFZxN3awfc2lRMOT (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 03:15:46 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [88.128.80.19] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZAy0S-0003pz-GL for xfs@oss.sgi.com; Fri, 03 Jul 2015 10:15:46 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 13/13] xfsprogs: remove the constpp define Date: Fri, 3 Jul 2015 12:12:21 +0200 X-ASG-Orig-Subj: [PATCH 13/13] xfsprogs: remove the constpp define Message-Id: <1435918341-10128-14-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435918341-10128-1-git-send-email-hch@lst.de> References: <1435918341-10128-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435918546 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20421 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a workaround for the long obsolete glibc 2.0. Signed-off-by: Christoph Hellwig --- include/darwin.h | 1 - include/freebsd.h | 2 -- include/gnukfreebsd.h | 2 -- include/irix.h | 2 -- include/linux.h | 6 ------ mkfs/xfs_mkfs.c | 16 ++++++++-------- repair/xfs_repair.c | 4 ++-- 7 files changed, 10 insertions(+), 23 deletions(-) diff --git a/include/darwin.h b/include/darwin.h index abdf4e3..fe533a2 100644 --- a/include/darwin.h +++ b/include/darwin.h @@ -154,7 +154,6 @@ typedef int64_t xfs_daddr_t; #define ENOATTR 989 /* Attribute not found */ #define EFSCORRUPTED 990 /* Filesystem is corrupted */ #define EFSBADCRC 991 /* Bad CRC detected */ -#define constpp char * const * #define HAVE_FID 1 diff --git a/include/freebsd.h b/include/freebsd.h index 902b940..6c51d3f 100644 --- a/include/freebsd.h +++ b/include/freebsd.h @@ -42,8 +42,6 @@ #define fdatasync fsync #define memalign(a,sz) valloc(sz) -#define constpp char * const * - #define EFSCORRUPTED 990 /* Filesystem is corrupted */ #define EFSBADCRC 991 /* Bad CRC detected */ diff --git a/include/gnukfreebsd.h b/include/gnukfreebsd.h index 95c4c13..6686b86 100644 --- a/include/gnukfreebsd.h +++ b/include/gnukfreebsd.h @@ -32,8 +32,6 @@ #include #include -#define constpp char * const * - #define EFSCORRUPTED 990 /* Filesystem is corrupted */ #define EFSBADCRC 991 /* Bad CRC detected */ diff --git a/include/irix.h b/include/irix.h index 28564c8..806c94f 100644 --- a/include/irix.h +++ b/include/irix.h @@ -183,8 +183,6 @@ typedef struct xfs_efd_log_format_32 { #define inline __inline #endif -#define constpp char * const * - /*ARGSUSED*/ static __inline__ int xfsctl(const char *path, int fd, int cmd, void *arg) { diff --git a/include/linux.h b/include/linux.h index 8804c2d..596dab4 100644 --- a/include/linux.h +++ b/include/linux.h @@ -130,12 +130,6 @@ platform_discard_blocks(int fd, uint64_t start, uint64_t len) return 0; } -#if (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ <= 1)) -# define constpp const char * const * -#else -# define constpp char * const * -#endif - #define ENOATTR ENODATA /* Attribute not found */ #define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */ #define EFSBADCRC EBADMSG /* Bad CRC detected */ diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 80cdd10..95f29f3 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -1086,7 +1086,7 @@ main( while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)bopts, &value)) { + switch (getsubopt(&p, bopts, &value)) { case B_LOG: if (!value || *value == '\0') reqval('b', bopts, B_LOG); @@ -1127,7 +1127,7 @@ main( while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)dopts, &value)) { + switch (getsubopt(&p, dopts, &value)) { case D_AGCOUNT: if (!value || *value == '\0') reqval('d', dopts, D_AGCOUNT); @@ -1304,7 +1304,7 @@ main( while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)iopts, &value)) { + switch (getsubopt(&p, iopts, &value)) { case I_ALIGN: if (!value || *value == '\0') value = "1"; @@ -1407,7 +1407,7 @@ main( while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)lopts, &value)) { + switch (getsubopt(&p, lopts, &value)) { case L_AGNUM: if (!value || *value == '\0') reqval('l', lopts, L_AGNUM); @@ -1555,7 +1555,7 @@ main( while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)mopts, &value)) { + switch (getsubopt(&p, mopts, &value)) { case M_CRC: if (!value || *value == '\0') reqval('m', mopts, M_CRC); @@ -1588,7 +1588,7 @@ _("cannot specify both crc and ftype\n")); while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)nopts, &value)) { + switch (getsubopt(&p, nopts, &value)) { case N_LOG: if (!value || *value == '\0') reqval('n', nopts, N_LOG); @@ -1672,7 +1672,7 @@ _("cannot specify both crc and ftype\n")); while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)ropts, &value)) { + switch (getsubopt(&p, ropts, &value)) { case R_EXTSIZE: if (!value || *value == '\0') reqval('r', ropts, R_EXTSIZE); @@ -1717,7 +1717,7 @@ _("cannot specify both crc and ftype\n")); while (*p != '\0') { char *value; - switch (getsubopt(&p, (constpp)sopts, &value)) { + switch (getsubopt(&p, sopts, &value)) { case S_LOG: case S_SECTLOG: if (!value || *value == '\0') diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index db703d0..9518812 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -224,7 +224,7 @@ process_args(int argc, char **argv) while (*p != '\0') { char *val; - switch (getsubopt(&p, (constpp)o_opts, &val)) { + switch (getsubopt(&p, o_opts, &val)) { case ASSUME_XFS: if (val) noval('o', o_opts, ASSUME_XFS); @@ -275,7 +275,7 @@ process_args(int argc, char **argv) while (*p) { char *val; - switch (getsubopt(&p, (constpp)c_opts, &val)) { + switch (getsubopt(&p, c_opts, &val)) { case CONVERT_LAZY_COUNT: lazy_count = (int)strtol(val, NULL, 0); convert_lazy_count = 1; -- 1.9.1 From bfoster@redhat.com Fri Jul 3 08:22:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5CECA7F9D for ; Fri, 3 Jul 2015 08:22:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 219E2304048 for ; Fri, 3 Jul 2015 06:22:41 -0700 (PDT) X-ASG-Debug-ID: 1435929760-04bdf007882deb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ov0OtCJHPdmTs6QA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Jul 2015 06:22:41 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 2B7EFC7955; Fri, 3 Jul 2015 13:22:40 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t63DMdCm002029; Fri, 3 Jul 2015 09:22:39 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 7FC7F124B3C; Fri, 3 Jul 2015 09:22:38 -0400 (EDT) Date: Fri, 3 Jul 2015 09:22:38 -0400 From: Brian Foster To: Dave Chinner Cc: Jan Tulak , xfs@oss.sgi.com, Dave Chinner Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Message-ID: <20150703132237.GA23023@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> <20150702141403.GA61817@bfoster.bfoster> <20150702230520.GA22807@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150702230520.GA22807@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1435929760 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, Jul 03, 2015 at 09:05:20AM +1000, Dave Chinner wrote: > On Thu, Jul 02, 2015 at 10:14:04AM -0400, Brian Foster wrote: > > On Thu, Jul 02, 2015 at 08:47:53AM -0400, Jan Tulak wrote: > > [snip ~250 lines] > > [ add note about mailing list etiquette w.r.t. trimming the quoted > context to just what is being discussed so that readers don't have to > scroll through several screens of irrelevant text just to find the > discussion. ] > > > If you're still not convinced, create an exact sized 512GB file, mkfs it > > (with the su/sw options set for multidisk) with and without this change > > and observe agcount. :) > > At one point during development of this patch set I started writing > an xfstest to validate that mkfs did all the right input validation > things and set parameters appropriately so that we didn't > inadvertently change behaviour. I never really finished it off (like > the patch set), but I've attached it below to give an idea of where > I was going with it. It was based on validating the input and CLI > parameters for the new code, so is guaranteed to fail on an existing > mkfs binary. > > It's probably a good idea to also validate that things like agcount > scale as we expect them to... > Yeah, good idea. This is probably something we should get in following this series. I shouldn't be too hard to teach this to expect certain format values (agcount, agsize, etc.). We might be able to get away with just matching the mkfs output to expected output on fixed size filesystems. Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > > xfs: add new xfs.mkfs input validation test > > From: Dave Chinner > > mkfs.xfs does not do a very good job of input validation. This test > is designed to exercise the input validation and test good/bad > combinations of options being set. It will not pass on a current > mkfs.xfs binary - it is designed to be the test case for a input > validation cleanup. > > Signed-off-by: Dave Chinner > --- > tests/xfs/401 | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/xfs/401.out | 2 + > tests/xfs/group | 1 + > 3 files changed, 197 insertions(+) > > diff --git a/tests/xfs/401 b/tests/xfs/401 > new file mode 100644 > index 0000000..48de395 > --- /dev/null > +++ b/tests/xfs/401 > @@ -0,0 +1,194 @@ > +#! /bin/bash > +# FS QA Test No. xfs/401 > +# > +# mkfs.xfs input validation test. Designed to break mkfs.xfs if it doesn't > +# filter garbage input or invalid option combinations correctly. > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2014 Red Hat, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > + > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $res" > + > +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 > + > +# Modify as appropriate. > +_supported_fs xfs > +_supported_os Linux > +_require_scratch > + > +echo silence is golden > + > +# clear out any options to mkfs first. We want to test realtime and external log > +# devices if we can, but we also want to control them ourselves. > +logdev=$SCRATCH_LOGDEV > +rtdev=$SCRATCH_RTDEV > + > +MKFS_OPTIONS= > +SCRATCH_LOGDEV= > +SCRATCH_RTDEV= > + > +# limit the image size of the filesystem being created to something small > +fssize=$((4 * 1024 * 1024 * 1024)) > +fsimg=$TEST_DIR/$seq.img > + > +do_mkfs_pass() > +{ > + echo >> $seqres.full > + echo "pass expected $*" >> $seqres.full > + $MKFS_XFS_PROG -f -N $* >> $seqres.full 2>&1 > + [ $? -ne 0 ] && echo "fail $*" > +} > + > +do_mkfs_fail() > +{ > + echo >> $seqres.full > + echo "fail expected $*" >> $seqres.full > + $MKFS_XFS_PROG -f -N $* >> $seqres.full 2>&1 > + [ $? -eq 0 ] && echo "pass $*" > +} > + > +do_mkfs_pass $SCRATCH_DEV > + > +# basic "should fail" options > +# logarithm based options are no longer valid > +do_mkfs_fail -s log=9 $SCRATCH_DEV > +do_mkfs_fail -b log=9 $SCRATCH_DEV > +do_mkfs_fail -n log=9 $SCRATCH_DEV > +do_mkfs_fail -i log=9 $SCRATCH_DEV > +do_mkfs_fail -d sectlog=9 $SCRATCH_DEV > +do_mkfs_fail -l sectlog=9 $SCRATCH_DEV > + > +# specifying sector sizes in sectors or blocks or garbage > +do_mkfs_fail -s size=2s $SCRATCH_DEV > +do_mkfs_fail -d sectsize=2s $SCRATCH_DEV > +do_mkfs_fail -l sectsize=2s $SCRATCH_DEV > +do_mkfs_fail -s size=2b $SCRATCH_DEV > +do_mkfs_fail -d sectsize=2b $SCRATCH_DEV > +do_mkfs_fail -l sectsize=2b $SCRATCH_DEV > + > +do_mkfs_fail -s size=grot $SCRATCH_DEV > +do_mkfs_fail -s size=2yerk $SCRATCH_DEV > +do_mkfs_fail -d sectsize=blah $SCRATCH_DEV > +do_mkfs_fail -d sectsize=2foo $SCRATCH_DEV > +do_mkfs_fail -l sectsize=nggh $SCRATCH_DEV > +do_mkfs_fail -l sectsize=2nggh $SCRATCH_DEV > + > +# conflicting sector/block sizes > +do_mkfs_fail -s size=512 -d sectsize=1024 $SCRATCH_DEV > +do_mkfs_fail -s size=512 -l sectsize=1024 $SCRATCH_DEV > +do_mkfs_fail -d sectsize=2048 -l sectsize=1024 $SCRATCH_DEV > + > +do_mkfs_fail -b size=512 -s size=1024 $SCRATCH_DEV > +do_mkfs_fail -b size=512 -d sectsize=1024 $SCRATCH_DEV > +do_mkfs_fail -b size=512 -l sectsize=1024 $SCRATCH_DEV > + > +# specifying block sizes in sectors without specifying sector size > +# or in blocks or garbage > +do_mkfs_fail -b size=2s $SCRATCH_DEV > +do_mkfs_fail -b size=2b $SCRATCH_DEV > +do_mkfs_fail -b size=nfi $SCRATCH_DEV > +do_mkfs_fail -b size=4096nfi $SCRATCH_DEV > +do_mkfs_fail -n size=2s $SCRATCH_DEV > +do_mkfs_fail -n size=2b $SCRATCH_DEV > +do_mkfs_fail -n size=nfi $SCRATCH_DEV > +do_mkfs_fail -n size=4096nfi $SCRATCH_DEV > + > +# bad label length > +do_mkfs_fail -L thisiswaytoolong $SCRATCH_DEV > + > +# basic "should pass" data section tests > +do_mkfs_pass $SCRATCH_DEV > +do_mkfs_pass -d name=$SCRATCH_DEV > +do_mkfs_pass -d size=$fssize $SCRATCH_DEV > +do_mkfs_pass -d agcount=32 $SCRATCH_DEV > +do_mkfs_pass -d agsize=32m $SCRATCH_DEV > +do_mkfs_pass -d agsize=32M $SCRATCH_DEV > +do_mkfs_pass -d agsize=1g $SCRATCH_DEV > +do_mkfs_pass -d agsize=$((32 * 1024 * 1024)) $SCRATCH_DEV > +do_mkfs_pass -b size=4096 -d agsize=8192b $SCRATCH_DEV > +do_mkfs_pass -d sectsize=512,agsize=65536s $SCRATCH_DEV > +do_mkfs_pass -s size=512 -d agsize=65536s $SCRATCH_DEV > +do_mkfs_pass -d noalign $SCRATCH_DEV > +do_mkfs_pass -d sunit=0,swidth=0 $SCRATCH_DEV > +do_mkfs_pass -d sunit=8,swidth=8 $SCRATCH_DEV > +do_mkfs_pass -d sunit=8,swidth=64 $SCRATCH_DEV > +do_mkfs_pass -d su=0,sw=0 $SCRATCH_DEV > +do_mkfs_pass -d su=4096,sw=1 $SCRATCH_DEV > +do_mkfs_pass -d su=4k,sw=1 $SCRATCH_DEV > +do_mkfs_pass -d su=4K,sw=8 $SCRATCH_DEV > +do_mkfs_pass -b size=4096 -d su=1b,sw=8 $SCRATCH_DEV > +do_mkfs_pass -d sectsize=512,su=8s,sw=8 $SCRATCH_DEV > +do_mkfs_pass -s size=512 -d su=8s,sw=8 $SCRATCH_DEV > + > +rm -f $fsimg > +$XFS_IO_PROG -f -c "truncate $fssize" $fsimg > +do_mkfs_pass -d file $fsimg > +do_mkfs_pass -d file,name=$fsimg > +rm -f $fsimg > +do_mkfs_pass -d size=$fssize,file $fsimg > +rm -f $fsimg > +do_mkfs_pass -d size=$fssize,file,name=$fsimg > +do_mkfs_pass -d file,name=$fsimg > + > +# invalid data section tests > +do_mkfs_fail -d size=${fssize}b $SCRATCH_DEV > +do_mkfs_fail -d size=${fssize}s $SCRATCH_DEV > +do_mkfs_fail -d size=${fssize}yerk $SCRATCH_DEV > +do_mkfs_fail -d agsize=8192b $SCRATCH_DEV > +do_mkfs_fail -d agsize=65536s $SCRATCH_DEV > +do_mkfs_fail -d agsize=32Mbsdfsdo $SCRATCH_DEV > +do_mkfs_fail -d agsize=1GB $SCRATCH_DEV > +do_mkfs_fail -d agcount=1k $SCRATCH_DEV > +do_mkfs_fail -d agcount=6b $SCRATCH_DEV > +do_mkfs_fail -d agcount=32,agsize=32m $SCRATCH_DEV > +do_mkfs_fail -d sunit=0,swidth=64 $SCRATCH_DEV > +do_mkfs_fail -d sunit=64,swidth=0 $SCRATCH_DEV > +do_mkfs_fail -d sunit=64,swidth=64,noalign $SCRATCH_DEV > +do_mkfs_fail -d sunit=64k,swidth=64 $SCRATCH_DEV > +do_mkfs_fail -d sunit=64,swidth=64m $SCRATCH_DEV > +do_mkfs_fail -d su=0,sw=64 $SCRATCH_DEV > +do_mkfs_fail -d su=4096,sw=0 $SCRATCH_DEV > +do_mkfs_fail -d su=4096,sw=64,noalign $SCRATCH_DEV > +do_mkfs_fail -d su=4096,sw=64s $SCRATCH_DEV > +do_mkfs_fail -d su=4096s,sw=64 $SCRATCH_DEV > +do_mkfs_fail -d su=4096b,sw=64 $SCRATCH_DEV > +do_mkfs_fail -d su=4096garabge,sw=64 $SCRATCH_DEV > +do_mkfs_fail -d su=4096,sw=64,sunit=64,swidth=64 $SCRATCH_DEV > + > +# naming section tests > +do_mkfs_pass -n size=65536 $SCRATCH_DEV > + > +status=0 > +exit > diff --git a/tests/xfs/401.out b/tests/xfs/401.out > new file mode 100644 > index 0000000..aaf601b > --- /dev/null > +++ b/tests/xfs/401.out > @@ -0,0 +1,2 @@ > +QA output created by 401 > +silence is golden > diff --git a/tests/xfs/group b/tests/xfs/group > index ba34650..cfee785 100644 > --- a/tests/xfs/group > +++ b/tests/xfs/group > @@ -189,3 +189,4 @@ > 304 auto quick quota > 305 auto quota > 306 auto stress log metadata repair > +401 mkfs auto quick From bfoster@redhat.com Fri Jul 3 08:24:41 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BFB0F7F9E for ; Fri, 3 Jul 2015 08:24:41 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9F75A30404E for ; Fri, 3 Jul 2015 06:24:41 -0700 (PDT) X-ASG-Debug-ID: 1435929880-04cb6c209e2ef10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id b4FA4Kh7tuKxyPMi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Jul 2015 06:24:40 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 31E523679F6 for ; Fri, 3 Jul 2015 13:24:40 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-162.bos.redhat.com [10.18.41.162]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t63DOdY1002944; Fri, 3 Jul 2015 09:24:40 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id E2C8D124B3C; Fri, 3 Jul 2015 09:24:38 -0400 (EDT) Date: Fri, 3 Jul 2015 09:24:38 -0400 From: Brian Foster To: Jan Tulak Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 03/17] mkfs: Sanitise the superblock feature macros Message-ID: <20150703132438.GB23023@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 03/17] mkfs: Sanitise the superblock feature macros References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-4-git-send-email-jtulak@redhat.com> <20150625193807.GG36162@bfoster.bfoster> <118220992.23297038.1435917207418.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <118220992.23297038.1435917207418.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1435929880 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, Jul 03, 2015 at 05:53:27AM -0400, Jan Tulak wrote: > > > ----- Original Message ----- > > From: "Brian Foster" > > > @@ -1912,17 +2013,17 @@ _("32 bit Project IDs always enabled on CRC enabled > > > filesytems\n")); > > > * tried to use crc=0,finobt=1, then issue a warning before > > > * turning them off. > > > */ > > > - if (finobt && finobtflag) { > > > + if (sb_feat.finobt && sb_feat.finobtflag) { > > > > Since the code above drops finobtflag, I don't think we'll ever hit > > this. Indeed, I can now create a crc=0,finobt=1 fs, which shouldn't > > happen. > > > > Brian > > > > Finobtflag is dropped by a later patch in the set entirely. After all patches, the line is: > > if (sb_feat.finobt && mopts.subopt_params[M_FINOBT].seen) > > Which indeed works as it should: > > mkfs.xfs -f -m crc=0,finobt=1 /dev/vdb2 > warning: finobt not supported without CRC support, disabled. > Ok, fair enough. That said, I'm not a huge fan of letting broken patches through just because things are fixed up in a subsequent patch. For one, it makes review difficult and kind of removes incentive to review individual patches rather than just the end result. In general, that's problematic for things like future bisects or if you consider a subsequent patch might be reverted down the line after all this context is lost, re-exposing a previously known problem. This particular instance is not a big deal. It requires the user to do something wrong and we wouldn't mount the fs anyways. I'm just pointing this out because IIRC there were a couple of instances of this "break in one patch, fix in another" pattern in this series. In most cases, the right thing to do is fix up the broken patch. ;) Brian > Cheers, > Jan > > -- > Jan Tulak > jtulak@redhat.com From alnovak@suse.cz Fri Jul 3 10:09:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9710C7FA1 for ; Fri, 3 Jul 2015 10:09:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 34CA3AC001 for ; Fri, 3 Jul 2015 08:09:48 -0700 (PDT) X-ASG-Debug-ID: 1435936181-04bdf007893c110001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id AgzxB7YmPK1uNj1C (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Jul 2015 08:09:43 -0700 (PDT) X-Barracuda-Envelope-From: alnovak@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 401C3AD9E; Fri, 3 Jul 2015 15:09:41 +0000 (UTC) Date: Fri, 3 Jul 2015 17:09:40 +0200 (CEST) From: Ales Novak To: Dave Chinner cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: fix in the setting of logbsize In-Reply-To: <20150606223200.GZ24666@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix in the setting of logbsize Message-ID: References: <1433510925-11438-1-git-send-email-alnovak@suse.cz> <20150605222257.GY24666@dastard> <55722AD9.2080105@sandeen.net> <20150606223200.GZ24666@dastard> User-Agent: Alpine 2.03 (LSU 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1435936182 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20426 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 2015-6-7 00:32, Dave Chinner wrote: > On Fri, Jun 05, 2015 at 06:03:53PM -0500, Eric Sandeen wrote: >> On 6/5/15 5:22 PM, Dave Chinner wrote: >> >>> On Fri, Jun 05, 2015 at 03:28:45PM +0200, Ales Novak wrote: >>>> However, this rule is only mentioned in the documentation, while it >>>> could be checked during the mount. >>> >>> Where in the documentation is that mentioned? >> >> Documentation/filesystems/xfs.txt: >> >> logbsize=value >> Set the size of each in-memory log buffer. The size may be >> specified in bytes, or in kilobytes with a "k" suffix. >> Valid sizes for version 1 and version 2 logs are 16384 (16k) >> and 32768 (32k). Valid sizes for version 2 logs also >> include 65536 (64k), 131072 (128k) and 262144 (256k). The >> logbsize must be an integer multiple of the log >> stripe unit configured at mkfs time. > > Ah, ok. I'll need to look at the history of that, because I think I > can see what it is intended to mean, but the "power-of-two" sizes > that are enforced will also enforce the "integer multiple" part, > too. I think it was more intended for people using wierd stripe > units (e.g. 96k) to say the equivalent on 2x96k is a valid log > buffer size. I suspect we need to revisit both the code and the > documentation here.... So, how will we proceed here? I understand that my patch only somehow blindly implements the restriction mentioned in the documentation and that proper solution would mean completely reworking these restrictions; however I don't like the state where setting seemingly harmless option leads to kernel crash (and possibly fs corruption). While I understand that only playful root would do that. -- Ales Novak From BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 3 10:19:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E93E07FA7 for ; Fri, 3 Jul 2015 10:19:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C9E248F8068 for ; Fri, 3 Jul 2015 08:19:06 -0700 (PDT) X-ASG-Debug-ID: 1435936744-04cb6c209e3ba60001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id kQL0bCfABiUEkwtQ (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 03 Jul 2015 08:19:05 -0700 (PDT) X-Barracuda-Envelope-From: BATV+dabfdc5a31e79ad799b3+4331+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZB2k4-0008K2-Eo; Fri, 03 Jul 2015 15:19:04 +0000 Date: Fri, 3 Jul 2015 08:19:04 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com, hch@infradead.org, sandeen@redhat.com Subject: Re: [PATCH v2] xfsprogs: blkid is now mandatory Message-ID: <20150703151904.GA13839@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2] xfsprogs: blkid is now mandatory References: <1629704668.22787354.1435832837879.JavaMail.zimbra@redhat.com> <1435833796-24004-1-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1435833796-24004-1-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1435936744 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20427 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Thanks Jan! On Thu, Jul 02, 2015 at 12:43:16PM +0200, Jan Tulak wrote: > Because blkid is here for a long time, I hereby propose a patch for removing support > for NOT having blkid. The current support through set of #ifdef is prone to errors like > making a patch just in one of the branches, and according to a recent talk between > Christoph and Eric, it is not necessary to keep it supported. > > Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is not defined. > The only use of libdisk was in the removed code, so remove libdisk too. > It makes blkid required for compilation. Can you wrap your commit description lines after ~ 75 characters, please? > +AC_HAVE_BLKID_TOPO(yes) I don't think we'll need an unused argument for AC_HAVE_BLKID_TOPO. > -Mac OS X Instructions > -===================== Why do you remove this section? > > default: depend $(LTCOMMAND) > > -ifneq ($(ENABLE_BLKID),yes) > -default: $(FSTYP) > -endif > - > include $(BUILDRULES) > > -$(FSTYP): > - @echo " [CC] $@" > - $(Q)$(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) > - Please remove fstyp.c and the definition of FSTYP in the Makefile as well. From eflorac@intellique.com Fri Jul 3 10:24:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2166E7F83 for ; Fri, 3 Jul 2015 10:24:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C1598AC006 for ; Fri, 3 Jul 2015 08:24:10 -0700 (PDT) X-ASG-Debug-ID: 1435937044-04bdf007883d7b0001-NocioJ Received: from smtp5-g21.free.fr (smtp5-g21.free.fr [212.27.42.5]) by cuda.sgi.com with ESMTP id pUU3LMbJMMy9cMar (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Jul 2015 08:24:05 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.5 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp5-g21.free.fr (Postfix) with ESMTP id 080DED480C0; Fri, 3 Jul 2015 17:24:02 +0200 (CEST) Date: Fri, 3 Jul 2015 17:24:08 +0200 From: Emmanuel Florac To: Rasmus Borup Hansen Cc: xfs@oss.sgi.com Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Message-ID: <20150703172408.52212ba6@harpe.intellique.com> X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors In-Reply-To: References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> Organization: Intellique X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.20; i486-slackware-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp5-g21.free.fr[212.27.42.5] X-Barracuda-Start-Time: 1435937044 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20427 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 Le Fri, 3 Jul 2015 08:27:28 +0200 Rasmus Borup Hansen =C3=A9crivait: > Thank you for the suggestion. I compiled a new xfs_repair, but I got > similar results from running it. >=20 Get the inode number of the faulty file, umount the volume, open it with xfs_db and remove the file through it: http://xfs.org/index.php/XFS_FAQ#Q:_How_to_get_around_a_bad_inode_repair_is= _unable_to_clean_up --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From david@fromorbit.com Fri Jul 3 18:42:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7DCC77F6F for ; Fri, 3 Jul 2015 18:42:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 50032304051 for ; Fri, 3 Jul 2015 16:42:54 -0700 (PDT) X-ASG-Debug-ID: 1435966971-04bdf007875a040001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id T5bXgLImFiaR0fEa for ; Fri, 03 Jul 2015 16:42:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AHCABrHZdVPN6zLHlbgxKBNIJRg3ykRAEDBpoVAgIBAQKBLE0BAQEBAQEHAQEBAUE/hCMBAQEDATocIwULCAMOCgklDwUlAwcaE4gnB8tDAQsBHxiGBYUuhQYHhCsFhwWKGYJ3i2eJT4Q6ik6BCYEpHIFlLDGCSwEBAQ Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail04.adl6.internode.on.net with ESMTP; 04 Jul 2015 09:12:50 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZBAbY-0000yB-Ub; Sat, 04 Jul 2015 09:42:48 +1000 Date: Sat, 4 Jul 2015 09:42:48 +1000 From: Dave Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/13] xfsprogs: include libxfs.h in libxfs_priv.h Message-ID: <20150703234248.GO7943@dastard> X-ASG-Orig-Subj: Re: [PATCH 10/13] xfsprogs: include libxfs.h in libxfs_priv.h References: <1435918341-10128-1-git-send-email-hch@lst.de> <1435918341-10128-11-git-send-email-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1435918341-10128-11-git-send-email-hch@lst.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1435966972 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 03, 2015 at 12:12:18PM +0200, Christoph Hellwig wrote: > libxfs_priv.h duplicates large parts of libxfs.h. > > Signed-off-by: Christoph Hellwig > --- > include/libxfs.h | 4 ---- > libxfs/libxfs_priv.h | 37 +------------------------------------ > 2 files changed, 1 insertion(+), 40 deletions(-) This is the opposite of what I've been trying to get to, which is to make libxfs compilation not be reliant on the external definitions used by the rest of xfsprogs. i.e. libxfs_priv.h contains all the bits that are need to compile the kernel code, libxfs_api_defs.h contain all the swizzling needed to namespace all the externally used libxfs code correctly, and libxfs_io.h contains all the buffer IO interfaces. In the end, there should be no duplication between the two files, except for infrastructure includes like platform defs, lists, trees, etc. This isnt quite complete yet, which is why there is some duplication in the code right now. > diff --git a/include/libxfs.h b/include/libxfs.h > index 1fb2d6d..62553f0 100644 > --- a/include/libxfs.h > +++ b/include/libxfs.h > @@ -163,12 +163,8 @@ extern int libxfs_bmap_finish(xfs_trans_t **, xfs_bmap_free_t *, int *); > extern void libxfs_fs_repair_cmn_err(int, struct xfs_mount *, char *, ...); > extern void libxfs_fs_cmn_err(int, struct xfs_mount *, char *, ...); > > -/* XXX: this is messy and needs fixing */ > -#ifndef __LIBXFS_INTERNAL_XFS_H__ > extern void cmn_err(int, char *, ...); > enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC }; > -#endif > - cmn_err needs to be removed from all the external utilities. This is only a small amount of work, cmn_err is only used in the repair AVL code and a single call in the logprint code. Both libxfs_fs_cmn_err and xfs_fs_repair_cmn_err are completely unused, so cmn_err() should become a libxfs internal function, and eventually be rewritten to have native xfs_alert() style interfaces... > - > -/* CRC stuff, buffer API dependent on it */ > -extern uint32_t crc32_le(uint32_t crc, unsigned char const *p, size_t len); > -extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len); > - > -#define crc32(c,p,l) crc32_le((c),(unsigned char const *)(p),(l)) > -#define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l)) I was planning to move this to libxfs_api_defs.h, as it's swizlling needed to allow xfs_cksum.h be included in external code. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri Jul 3 18:45:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7163F7F6F for ; Fri, 3 Jul 2015 18:45:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4268B8F8052 for ; Fri, 3 Jul 2015 16:45:22 -0700 (PDT) X-ASG-Debug-ID: 1435967119-04bdf007885a170001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id ilhZcVadraE6OrKm for ; Fri, 03 Jul 2015 16:45:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2C3BwBrHZdVPN6zLHlbgxKBNIJRg3ykRAEDBpoVBAICgSxNAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDDgoJJQ8FJQMHGhOILstDAQEIAiAYhgWFLoQjEQFRB4QrBZQVi2eBO4QVjyqDXYEJgyosMYENgT4BAQE Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail04.adl6.internode.on.net with ESMTP; 04 Jul 2015 09:15:19 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZBAdy-0000ye-Lc; Sat, 04 Jul 2015 09:45:18 +1000 Date: Sat, 4 Jul 2015 09:45:18 +1000 From: Dave Chinner To: Christoph Hellwig Cc: Jan Tulak , sandeen@redhat.com, xfs@oss.sgi.com Subject: Re: [PATCH v2] xfsprogs: blkid is now mandatory Message-ID: <20150703234518.GP7943@dastard> X-ASG-Orig-Subj: Re: [PATCH v2] xfsprogs: blkid is now mandatory References: <1629704668.22787354.1435832837879.JavaMail.zimbra@redhat.com> <1435833796-24004-1-git-send-email-jtulak@redhat.com> <20150703151904.GA13839@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150703151904.GA13839@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1435967119 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 03, 2015 at 08:19:04AM -0700, Christoph Hellwig wrote: > Thanks Jan! > > On Thu, Jul 02, 2015 at 12:43:16PM +0200, Jan Tulak wrote: > > Because blkid is here for a long time, I hereby propose a patch for removing support > > for NOT having blkid. The current support through set of #ifdef is prone to errors like > > making a patch just in one of the branches, and according to a recent talk between > > Christoph and Eric, it is not necessary to keep it supported. > > > > Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is not defined. > > The only use of libdisk was in the removed code, so remove libdisk too. > > It makes blkid required for compilation. > > Can you wrap your commit description lines after ~ 75 characters, > please? ObBikeShed: I find 68 characters for commit messages is more friendly, especially with the way git show pads the commit messages and people cut/paste it into email... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri Jul 3 18:52:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2B6DA7F9C for ; Fri, 3 Jul 2015 18:52:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1A6E830405F for ; Fri, 3 Jul 2015 16:52:01 -0700 (PDT) X-ASG-Debug-ID: 1435967517-04cbb050cf55470001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id e9fZo1c6y9wyfC8C for ; Fri, 03 Jul 2015 16:51:58 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2C3BwDDH5dVPN6zLHlbgxKBNIJRg3ykRAEDBpoVBAICgSxNAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDDgoJJQ8FJQMHGhOILss4AQsgGIYFhS6EREIHhCsBBJQVhzuELIE7kz+DXYEJgyosMYEGgUUBAQE Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail04.adl6.internode.on.net with ESMTP; 04 Jul 2015 09:21:42 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZBAk9-0000zB-TG; Sat, 04 Jul 2015 09:51:41 +1000 Date: Sat, 4 Jul 2015 09:51:41 +1000 From: Dave Chinner To: Alex Gorbachev Cc: xfs@oss.sgi.com Subject: Re: Failing XFS filesystem underlying Ceph OSDs Message-ID: <20150703235141.GQ7943@dastard> X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1435967517 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 03, 2015 at 05:07:29AM -0400, Alex Gorbachev wrote: > Hello, we are seeing this and similar errors on multiple Supermicro nodes > running Ceph. OS is Ubuntu 14.04.2 with kernel 4.1 > > Thank you for any info and troubleshooting advice. Nothing to suggest that this is an XFS problem. Memory reclaim triggered by network stack memory pressure is causing inode eviction. While removing the page cache it's falling over in the generic truncate code doing a radix tree lookup. That's all generic code - XFS never touches the page cache radix tree directly. I haven't seen this before - is this a new problem since you upgraded your kernel to 4.1? Is it repeatable? if yes to both, then a bisect may be in order to isolate the problematic commit... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri Jul 3 18:55:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 991C47F9C for ; Fri, 3 Jul 2015 18:55:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 27BE6AC002 for ; Fri, 3 Jul 2015 16:55:05 -0700 (PDT) X-ASG-Debug-ID: 1435967702-04cb6c209c587d0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id EfiKiGJtImDxlVCz for ; Fri, 03 Jul 2015 16:55:02 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2C3BwDDH5dVPN6zLHlbgxKBNIJRg3ykRAEDBpoVBAICgSxNAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDGAkaCw8FJQMHGhOILss4AQEIAiAYhgWFLoUGB4QrBZQVi2eBO4QViDmKToJjgVAsMYJLAQEB Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail04.adl6.internode.on.net with ESMTP; 04 Jul 2015 09:25:01 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZBAnM-0000zW-R7; Sat, 04 Jul 2015 09:55:00 +1000 Date: Sat, 4 Jul 2015 09:55:00 +1000 From: Dave Chinner To: Rasmus Borup Hansen Cc: xfs@oss.sgi.com Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Message-ID: <20150703235500.GR7943@dastard> X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1435967702 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 03, 2015 at 08:27:28AM +0200, Rasmus Borup Hansen wrote: > Thank you for the suggestion. I compiled a new xfs_repair, but I got similar results from running it. Please take a metadump of the filesystem before and after repair so that we can find out what is actually going wrong. Feel free to send me a private pointer to the metadump images... Cheers, Dave. -- Dave Chinner david@fromorbit.com From ag@iss-integration.com Sat Jul 4 09:46:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C67DA7F59 for ; Sat, 4 Jul 2015 09:46:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 56678AC003 for ; Sat, 4 Jul 2015 07:46:28 -0700 (PDT) X-ASG-Debug-ID: 1436021185-04cb6c209e75830001-NocioJ Received: from mail-vn0-f52.google.com (mail-vn0-f52.google.com [209.85.216.52]) by cuda.sgi.com with ESMTP id NfoY5tXVkexGeBGQ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 04 Jul 2015 07:46:25 -0700 (PDT) X-Barracuda-Envelope-From: ag@iss-integration.com X-Barracuda-Apparent-Source-IP: 209.85.216.52 Received: by vnbg1 with SMTP id g1so18613722vnb.7 for ; Sat, 04 Jul 2015 07:46:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=+oaKXQtbnOof1etnkIfgQnCSoCBC2sxtTJ158iKLnm8=; b=Mg3prkA7phFlisdpQuM96nxbWUc43M3obt5PIL5h+3TSWj1ujlwPU2ADclICyQaEQx o9A7pTabtx+x5eSC+JO29vKKBs2s9jfwarUSnmxXJM5BJJBSrTmPph825hn3wYE5F6Za ecjB+3iGalUY9zpUFbjhb4Qq+UHk1CpiInNDHl3jTGDWnSl05LKVPlDx3C5FlbwFMw29 XHTxJipQzY8GiEls4DRZYt+m61toQJFzouHZ0bUKMGFqKBtRND+RABbuD56PrdA7j6LZ f7hxs80M92MYCRh9ny/y+WJB6It6Z3s5KFHLyPr9WitYoobiOiM6UzinecRPF+LLtw7o kEgg== X-Gm-Message-State: ALoCoQmuKKlFZRmq+3AblBjZS+GLqUpaYg6jF/4auIssHkwYDQRjzuhe8NCmv0qTrHe9zEsAECcT MIME-Version: 1.0 X-Received: by 10.52.14.200 with SMTP id r8mr41595195vdc.79.1436021184426; Sat, 04 Jul 2015 07:46:24 -0700 (PDT) Received: by 10.52.103.115 with HTTP; Sat, 4 Jul 2015 07:46:24 -0700 (PDT) In-Reply-To: <20150703235141.GQ7943@dastard> References: <20150703235141.GQ7943@dastard> Date: Sat, 4 Jul 2015 10:46:24 -0400 Message-ID: Subject: Re: Failing XFS filesystem underlying Ceph OSDs From: Alex Gorbachev X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf3030c5ff967f87051a0dbc02 X-Barracuda-Connect: mail-vn0-f52.google.com[209.85.216.52] X-Barracuda-Start-Time: 1436021185 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20450 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --20cf3030c5ff967f87051a0dbc02 Content-Type: text/plain; charset=UTF-8 Hello Dave, thank you for the response. I got some recommendations on the ceph-users list that essentially pointed to the problem with vm.swappiness=0 and its new behavior - described here https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/ Basically setting it to 0 creates these OOM conditions due to never swapping anything out. So I changed these settings right away: sysctl vm.swappiness=20 (can probably be 1 as per article) sysctl vm.min_free_kbytes=262144 So far no issues, but I need to wait a week to see if anything shows up. Thank you for reviewing the error codes. Alex On Fri, Jul 3, 2015 at 7:51 PM, Dave Chinner wrote: > On Fri, Jul 03, 2015 at 05:07:29AM -0400, Alex Gorbachev wrote: > > Hello, we are seeing this and similar errors on multiple Supermicro nodes > > running Ceph. OS is Ubuntu 14.04.2 with kernel 4.1 > > > > Thank you for any info and troubleshooting advice. > > Nothing to suggest that this is an XFS problem. Memory reclaim > triggered by network stack memory pressure is causing inode > eviction. While removing the page cache it's falling over in > the generic truncate code doing a radix tree lookup. That's all > generic code - XFS never touches the page cache radix tree directly. > > I haven't seen this before - is this a new problem since you > upgraded your kernel to 4.1? Is it repeatable? if yes to both, then > a bisect may be in order to isolate the problematic commit... > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > --20cf3030c5ff967f87051a0dbc02 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hello Dave, thank you for the response.=C2=A0 I got some r= ecommendations on the ceph-users list that essentially pointed to the probl= em with vm.swappiness=3D0 and its new behavior - described here=C2=A0https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappine= ss0-new-kernel/

Basically setting it to 0 creates th= ese OOM conditions due to never swapping anything out.=C2=A0 So I changed t= hese settings right away:

sysctl v= m.swappiness=3D20 (can probably be 1 as per article)

sys= ctl vm.min_free_kbytes=3D262144


= So far no issues, but I need to wait a week to see if anything shows up.=C2= =A0 Thank you for reviewing the error codes.


Alex


On Fri, Jul 3, 2015 at 7:51 PM, Dave Chinner <david@fro= morbit.com> wrote:
On Fri, Jul 03, 2015 at 05:07:29AM -0400, Alex Gorbachev wrote: > Hello, we are seeing this and similar errors on multiple Supermicro no= des
> running Ceph.=C2=A0 OS is Ubuntu 14.04.2 with kernel 4.1
>
> Thank you for any info and troubleshooting advice.

Nothing to suggest that this is an XFS problem. Memory reclaim
triggered by network stack memory pressure is causing inode
eviction. While removing the page cache it's falling over in
the generic truncate code doing a radix tree lookup. That's all
generic code - XFS never touches the page cache radix tree directly.

I haven't seen this before - is this a new problem since you
upgraded your kernel to 4.1? Is it repeatable? if yes to both, then
a bisect may be in order to isolate the problematic commit...

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

--20cf3030c5ff967f87051a0dbc02-- From david@fromorbit.com Sat Jul 4 18:38:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 39DBE7F7D for ; Sat, 4 Jul 2015 18:38:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B90D8AC001 for ; Sat, 4 Jul 2015 16:38:08 -0700 (PDT) X-ASG-Debug-ID: 1436053085-04cbb050d17b970001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id W7pOh1FRj1SyVbjI for ; Sat, 04 Jul 2015 16:38:06 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CVCgDwbZhVPN6zLHlbgxJUYIJRqEABAQEBAQEGlCaFbwQCAoEcTQEBAQEBAQcBAQEBQT+EIwEBAQMBOhwcBwULCAMOCgklDwUlAwcaE4gnBw7GHwEBAQcCARsEGIYFhS6FBgeEKwWUFYtnmFeBCYMqLDGCSwEBAQ Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail05.adl6.internode.on.net with ESMTP; 05 Jul 2015 09:08:04 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZBX0U-0002Hk-MP; Sun, 05 Jul 2015 09:38:02 +1000 Date: Sun, 5 Jul 2015 09:38:02 +1000 From: Dave Chinner To: Alex Gorbachev Cc: xfs@oss.sgi.com Subject: Re: Failing XFS filesystem underlying Ceph OSDs Message-ID: <20150704233802.GS7943@dastard> X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs References: <20150703235141.GQ7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436053085 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20459 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Jul 04, 2015 at 10:46:24AM -0400, Alex Gorbachev wrote: > Hello Dave, thank you for the response. I got some recommendations on the > ceph-users list that essentially pointed to the problem with > vm.swappiness=0 and its new behavior - described here > https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/ > > Basically setting it to 0 creates these OOM conditions due to never > swapping anything out. So I changed these settings right away: > > sysctl vm.swappiness=20 (can probably be 1 as per article) > > sysctl vm.min_free_kbytes=262144 That's not an explanation for what looks to be page cache radix tree coruption. Memory reclaim still occurs with the settings you have now and, well, those changes occurred back in 3.5 - some 3 years ago - so it's not really an explanation for a problem with a recent 4.1 kernel... > So far no issues, but I need to wait a week to see if anything shows up. > Thank you for reviewing the error codes. I expect that you'll see the problems again... Cheers, Dave. -- Dave Chinner david@fromorbit.com From ag@iss-integration.com Sat Jul 4 23:25:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 871F97F55 for ; Sat, 4 Jul 2015 23:25:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5B94D8F8037 for ; Sat, 4 Jul 2015 21:25:53 -0700 (PDT) X-ASG-Debug-ID: 1436070348-04cbb050d17e450001-NocioJ Received: from mail-vn0-f41.google.com (mail-vn0-f41.google.com [209.85.216.41]) by cuda.sgi.com with ESMTP id oRdsU0C1CO2dzyWZ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 04 Jul 2015 21:25:48 -0700 (PDT) X-Barracuda-Envelope-From: ag@iss-integration.com X-Barracuda-Apparent-Source-IP: 209.85.216.41 Received: by vnbg129 with SMTP id g129so13696326vnb.11 for ; Sat, 04 Jul 2015 21:25:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=zurFHlgPlMnXfL5OgDUqW9kh4T6lqaE4Q4mhmY68nX4=; b=IhRV9+SkEdEdx2jFL1sbUsYOZqfIldgT0HedL62a3WO5q+emcMBFDWMkZHWq3cL8Ae +e8G5cPYCWc0AIGa7zVK3Ek48rfCww6sWvGaBLUzGn8MEbe+Yy5u0Vrm72D3pMFmFkIj negdA50R28SvtuGx8eHJQyhUfDP35Vb3gFswY6IvpiImtAv/H5Bu50FuA0kocWUlcv9C jL2LyIuCgR5AaUIPVSsjO84a5CoDIMGnKAHz+T1It4nUhl3wWDKlLtk5kXBbBGais35R +AmHGvt+YOLij7UmV8a6urrm/MZGPga0yHAAqwfeGpStbTKtWa2e6BO6qu9PrkMxU3jO gHFg== X-Gm-Message-State: ALoCoQkRZatN7tWwjozVpqdjjLULeeuSAoRNXqPBv3uBL7rnni5eTWvfZrMgjh2+xUR6dwhxSZ5q MIME-Version: 1.0 X-Received: by 10.52.5.2 with SMTP id o2mr43785382vdo.97.1436070347503; Sat, 04 Jul 2015 21:25:47 -0700 (PDT) Received: by 10.52.103.115 with HTTP; Sat, 4 Jul 2015 21:25:47 -0700 (PDT) In-Reply-To: <20150704233802.GS7943@dastard> References: <20150703235141.GQ7943@dastard> <20150704233802.GS7943@dastard> Date: Sun, 5 Jul 2015 00:25:47 -0400 Message-ID: Subject: Re: Failing XFS filesystem underlying Ceph OSDs From: Alex Gorbachev X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf302ef588ef8f88051a192ed3 X-Barracuda-Connect: mail-vn0-f41.google.com[209.85.216.41] X-Barracuda-Start-Time: 1436070348 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20464 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --20cf302ef588ef8f88051a192ed3 Content-Type: text/plain; charset=UTF-8 Hi Dave, > > sysctl vm.swappiness=20 (can probably be 1 as per article) > > > > sysctl vm.min_free_kbytes=262144 > > That's not an explanation for what looks to be page cache radix > tree coruption. Memory reclaim still occurs with the settings you > have now and, well, those changes occurred back in 3.5 - some > 3 years ago - so it's not really an explanation for a problem with a > recent 4.1 kernel... > > > So far no issues, but I need to wait a week to see if anything shows up. > > Thank you for reviewing the error codes. > > I expect that you'll see the problems again... > We have experienced the problem in various guises with kernels 3.14, 3.19, 4.1-rc2 and now 4.1, so it's not new to us, just different error stack. Below are some other stack dumps of what manifested as the same error. Do you think we need to look at RAM handling by this Supermicro machine type? Best regards, Alex > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > Apr 30 15:26:04 roc-4r-sca025 kernel: [1070485.999993] [] schedule+0x29/0x70 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000010] [] _xfs_log_force+0x187/0x280 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000014] [] ? try_to_wake_up+0x2a0/0x2a0 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000030] [] xfs_log_force+0x39/0xc0 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000047] [] xfsaild_push+0x552/0x5a0 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000050] [] ? schedule_timeout+0x124/0x210 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000067] [] xfsaild+0x9f/0x140 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000083] [] ? xfsaild_push+0x5a0/0x5a0 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000086] [] kthread+0xc9/0xe0 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000089] [] ? flush_kthread_worker+0x90/0x90 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000093] [] ret_from_fork+0x58/0x90 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000096] [] ? flush_kthread_worker+0x90/0x90 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000100] INFO: task xfsaild/sdg1:2606 blocked for more than 120 seconds. Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000113] Not tainted 3.19.4-031904-generic #201504131440 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000125] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000140] xfsaild/sdg1 D ffff8810102dfcd8 0 2606 2 0x00000000 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000143] ffff8810102dfcd8 ffff8810344c2d80 ffff8810102dffd8 0000000000013e40 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000146] ffff881033383b80 ffff8810389589d0 ffff881033491d70 ffff8810102dfcf8 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000149] ffff8810344c3100 ffff881033491d70 ffff881032acd128 ffff88107fc75100 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000152] Call Trace: Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000155] [] schedule+0x29/0x70 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000172] [] _xfs_log_force+0x187/0x280 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000175] [] ? try_to_wake_up+0x2a0/0x2a0 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000192] [] xfs_log_force+0x39/0xc0 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000208] [] xfsaild_push+0x552/0x5a0 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000211] [] ? schedule_timeout+0x124/0x210 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000228] [] xfsaild+0x9f/0x140 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000244] [] ? xfsaild_push+0x5a0/0x5a0 [xfs] Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000247] [] kthread+0xc9/0xe0 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000251] [] ? flush_kthread_worker+0x90/0x90 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000254] [] ret_from_fork+0x58/0x90 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000257] [] ? flush_kthread_worker+0x90/0x90 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000261] INFO: task xfsaild/sdd1:2707 blocked for more than 120 seconds. Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000273] Not tainted 3.19.4-031904-generic #201504131440 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000285] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000300] xfsaild/sdd1 D ffff88100f813cd8 0 2707 2 0x00000000 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000303] ffff88100f813cd8 ffff88102b1d9480 ffff88100f813fd8 0000000000013e40 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000306] ffff881033387700 ffff881038959d70 ffff8810351a09d0 ffff88100f813cf8 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000310] ffff88102b1d8800 ffff8810351a09d0 ffff8810329acd28 ffff88107fcb5100 Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000313] Call Trace: Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.414753] BUG: unable to handle kernel NULL pointer dereference at (null) Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.414779] IP: [] xfs_count_page_state+0x3f/0x70 [xfs] Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.414823] PGD 1013574067 PUD 100ffcb067 PMD 0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.414842] Oops: 0000 [#1] SMP Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.414856] Modules linked in: xfs libcrc32c intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp coretemp ipmi_ssif kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd sb_edac edac_core joydev mei_me mei lpc_ich ioatdma ipmi_si 8250_fintek ipmi_msghandler 8021q garp mrp stp llc wmi bonding mac_hid lp parport mlx4_en vxlan ip6_udp_tunnel udp_tunnel hid_generic usbhid mpt2sas ahci igb hid libahci i2c_algo_bit mlx4_core dca raid_class ptp scsi_transport_sas pps_core arcmsr Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415068] CPU: 0 PID: 687310 Comm: ceph-osd Not tainted 4.1.0-040100rc2-generic #201505032335 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415084] Hardware name: Supermicro X9DRD-7LN4F(-JBOD)/X9DRD-EF/X9DRD-7LN4F, BIOS 3.0a 12/05/2013 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415102] task: ffff88100f33eeb0 ti: ffff880065cb0000 task.ti: ffff880065cb0000 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415116] RIP: 0010:[] [] xfs_count_page_state+0x3f/0x70 [xfs] Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415155] RSP: 0018:ffff880065cb32c8 EFLAGS: 00010286 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415165] RAX: 0000000000000000 RBX: ffff880065cb37b0 RCX: 0000000000000000 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415210] RDX: ffff880065cb32f4 RSI: ffff880065cb32f0 RDI: ffff880004000000 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415254] RBP: ffff880065cb32c8 R08: ffff880b687bf478 R09: ffff880065cb3270 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415297] R10: dead000000100100 R11: dead000000200200 R12: ffffea000ccf9840 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415341] R13: ffffea000ccf9860 R14: ffffea000ccf9840 R15: ffff880ab6ce39d0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415386] FS: 00007ff4be95c700(0000) GS:ffff88103f200000(0000) knlGS:0000000000000000 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415432] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415459] CR2: 0000000000000000 CR3: 000000007942d000 CR4: 00000000000407f0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415502] Stack: Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415523] ffff880065cb3328 ffffffffc04be880 0000000000000000 ffffea000ccf9840 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415574] ffff880065cb3498 0000000000000000 ffffea000ccf9840 ffff880065cb37b0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415626] ffff880065cb3498 ffffea000ccf9860 ffffea000ccf9840 ffff880ab6ce3b28 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415677] Call Trace: Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415718] [] xfs_vm_releasepage+0x40/0x120 [xfs] Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415751] [] try_to_release_page+0x32/0x50 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415782] [] shrink_page_list+0x69d/0x720 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415812] [] shrink_inactive_list+0x1dd/0x5d0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415843] [] ? get_lru_size+0x3d/0x40 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415872] [] shrink_lruvec+0x234/0x370 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415901] [] ? pagevec_lru_move_fn+0xf5/0x110 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415931] [] shrink_zone+0xeb/0x300 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415961] [] ? compact_zone+0x7d/0x4f0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415990] [] shrink_zones+0x104/0x2a0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416019] [] ? compact_zone_order+0x5d/0x70 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416051] [] ? ktime_get+0x46/0xb0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416079] [] do_try_to_free_pages+0xd7/0x160 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416110] [] try_to_free_pages+0xb7/0x170 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416139] [] __alloc_pages_nodemask+0x5ba/0x9c0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416172] [] alloc_pages_current+0x9c/0x110 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416203] [] allocate_slab+0x20a/0x2e0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416232] [] new_slab+0x31/0x1f0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416261] [] __slab_alloc+0x18e/0x2a3 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416290] [] ? __alloc_skb+0x87/0x2b0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416318] [] ? __alloc_skb+0x57/0x2b0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416348] [] __kmalloc_node_track_caller+0xb7/0x290 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416379] [] ? __alloc_skb+0x87/0x2b0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416407] [] __kmalloc_reserve.isra.57+0x3c/0xa0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416437] [] __alloc_skb+0x87/0x2b0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416467] [] sk_stream_alloc_skb+0x41/0x130 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416496] [] tcp_sendmsg+0x2d3/0xa90 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416526] [] inet_sendmsg+0x67/0xa0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416555] [] ? copy_msghdr_from_user+0x154/0x1b0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416585] [] sock_sendmsg+0x4d/0x60 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416613] [] ___sys_sendmsg+0x2b3/0x2c0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416644] [] ? futex_wait+0x1c7/0x2c0 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416673] [] ? futex_wake+0x72/0x140 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416703] [] ? __fget_light+0x25/0x70 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416731] [] __sys_sendmsg+0x49/0x90 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416760] [] SyS_sendmsg+0x19/0x20 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416788] [] system_call_fastpath+0x16/0x75 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416816] Code: 07 48 89 e5 f6 c4 08 74 43 48 8b 7f 30 48 89 f8 eb 19 66 2e 0f 1f 84 00 00 00 00 00 c7 02 01 00 00 00 48 8b 40 08 48 39 c7 74 1f <48> 8b 08 80 e5 10 75 e9 48 8b 08 80 e5 02 74 e7 c7 06 01 00 00 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.417040] RIP [] xfs_count_page_state+0x3f/0x70 [xfs] Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.417094] RSP Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.417118] CR2: 0000000000000000 Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.417402] ---[ end trace 71135a48b0dfd313 ]--- Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759401] BUG: unable to handle kernel NULL pointer dereference at (null) Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759457] IP: [] xfs_count_page_state+0x3f/0x70 [xfs] Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759519] PGD 0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759543] Oops: 0000 [#2] SMP Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759571] Modules linked in: xfs libcrc32c intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp coretemp ipmi_ssif kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd sb_edac edac_core joydev mei_me mei lpc_ich ioatdma ipmi_si 8250_fintek ipmi_msghandler 8021q garp mrp stp llc wmi bonding mac_hid lp parport mlx4_en vxlan ip6_udp_tunnel udp_tunnel hid_generic usbhid mpt2sas ahci igb hid libahci i2c_algo_bit mlx4_core dca raid_class ptp scsi_transport_sas pps_core arcmsr Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759889] CPU: 7 PID: 110 Comm: kswapd0 Tainted: G D 4.1.0-040100rc2-generic #201505032335 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759939] Hardware name: Supermicro X9DRD-7LN4F(-JBOD)/X9DRD-EF/X9DRD-7LN4F, BIOS 3.0a 12/05/2013 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759987] task: ffff88103712bc60 ti: ffff8810331bc000 task.ti: ffff8810331bc000 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760032] RIP: 0010:[] [] xfs_count_page_state+0x3f/0x70 [xfs] Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760100] RSP: 0018:ffff8810331bf818 EFLAGS: 00010282 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760127] RAX: 0000000000000000 RBX: ffffea000cd08d80 RCX: 0000000000000000 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760171] RDX: ffff8810331bf844 RSI: ffff8810331bf840 RDI: ffff880004000068 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760216] RBP: ffff8810331bf818 R08: ffff880b687bf478 R09: ffff8810331bf850 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760260] R10: ffff880b687bf518 R11: 0000000000000220 R12: ffffea000cd08d80 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760304] R13: 0000000000000000 R14: ffff880ab6ce3b28 R15: ffff880ab6ce39d0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760348] FS: 0000000000000000(0000) GS:ffff88103f3c0000(0000) knlGS:0000000000000000 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760394] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760422] CR2: 0000000000000000 CR3: 0000000001e0f000 CR4: 00000000000407e0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760466] Stack: Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760487] ffff8810331bf878 ffffffffc04be880 ffff880ab6ce3b40 ffff880ab6ce3b28 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760539] ffff8810331bf888 0000000000000000 ffff880b687bf478 ffffea000cd08d80 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760591] ffff880ab6ce3b28 0000000000000000 ffff880ab6ce3b28 000000000000000b Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760643] Call Trace: Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760686] [] xfs_vm_releasepage+0x40/0x120 [xfs] Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760720] [] try_to_release_page+0x32/0x50 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760752] [] invalidate_inode_page+0x71/0x90 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760783] [] invalidate_mapping_pages+0xd8/0x1e0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760815] [] inode_lru_isolate+0x122/0x1b0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760846] [] __list_lru_walk_one.isra.6+0x81/0x150 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760877] [] ? insert_inode_locked+0x190/0x190 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760907] [] ? insert_inode_locked+0x190/0x190 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760938] [] list_lru_walk_one+0x4a/0x60 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760966] [] prune_icache_sb+0x44/0x60 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760996] [] super_cache_scan+0x155/0x1a0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761026] [] do_shrink_slab+0x13f/0x2c0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761056] [] ? shrink_lruvec+0x330/0x370 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761086] [] ? sched_clock_cpu+0x85/0xc0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761115] [] shrink_slab+0xd8/0x110 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761143] [] shrink_zone+0x2cf/0x300 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761173] [] ? zone_statistics+0xa0/0xc0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761203] [] kswapd_shrink_zone+0xe0/0x160 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761232] [] balance_pgdat+0x2c3/0x430 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761261] [] kswapd+0x133/0x250 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761289] [] ? balance_pgdat+0x430/0x430 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761322] [] kthread+0xc9/0xe0 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761350] [] ? flush_kthread_worker+0x90/0x90 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761381] [] ret_from_fork+0x42/0x70 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761410] [] ? flush_kthread_worker+0x90/0x90 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761439] Code: 07 48 89 e5 f6 c4 08 74 43 48 8b 7f 30 48 89 f8 eb 19 66 2e 0f 1f 84 00 00 00 00 00 c7 02 01 00 00 00 48 8b 40 08 48 39 c7 74 1f <48> 8b 08 80 e5 10 75 e9 48 8b 08 80 e5 02 74 e7 c7 06 01 00 00 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761669] RIP [] xfs_count_page_state+0x3f/0x70 [xfs] Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761725] RSP Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761749] CR2: 0000000000000000 Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.762039] ---[ end trace 71135a48b0dfd314 ]--- --20cf302ef588ef8f88051a192ed3 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Dave,
=C2=A0
> sysc= tl vm.swappiness=3D20 (can probably be 1 as per article)
>
> sysctl vm.min_free_kbytes=3D262144

That's not an explanation for what looks to be page cache radix<= br> tree coruption. Memory reclaim still occurs with the settings you
have now and, well, those changes occurred back in 3.5 - some
3 years ago - so it's not really an explanation for a problem with a recent 4.1 kernel...

> So far no issues, but I need to wait a week to see if anything shows u= p.
> Thank you for reviewing the error codes.

I expect that you'll see the problems again...
<= div>
We have experienced the problem in various guises with k= ernels 3.14, 3.19, 4.1-rc2 and now 4.1, so it's not new to us, just dif= ferent error stack.=C2=A0 Below are some other stack dumps of what manifest= ed as the same error. =C2=A0

Do you think we need = to look at RAM handling by this Supermicro machine type?=C2=A0
Best regards,
Alex
=C2=A0

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com
<= /blockquote>

=C2=A0Apr 30 15:26:04 roc-4r-sca025 kernel:= [1070485.999993] =C2=A0[<ffffffff817cf4b9>] schedule+0x29/0x70
=
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000010] =C2=A0[<ffff= ffffc07caee7>] _xfs_log_force+0x187/0x280 [xfs]
Apr 30 15:26:0= 4 roc-4r-sca025 kernel: [1070486.000014] =C2=A0[<ffffffff810a4150>] ?= try_to_wake_up+0x2a0/0x2a0
Apr 30 15:26:04 roc-4r-sca025 kernel:= [1070486.000030] =C2=A0[<ffffffffc07cb019>] xfs_log_force+0x39/0xc0 = [xfs]
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000047] =C2= =A0[<ffffffffc07d6542>] xfsaild_push+0x552/0x5a0 [xfs]
Apr = 30 15:26:04 roc-4r-sca025 kernel: [1070486.000050] =C2=A0[<ffffffff817d2= 264>] ? schedule_timeout+0x124/0x210
Apr 30 15:26:04 roc-4r-sc= a025 kernel: [1070486.000067] =C2=A0[<ffffffffc07d662f>] xfsaild+0x9f= /0x140 [xfs]
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.00008= 3] =C2=A0[<ffffffffc07d6590>] ? xfsaild_push+0x5a0/0x5a0 [xfs]
<= div>Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000086] =C2=A0[<fffff= fff81095e29>] kthread+0xc9/0xe0
Apr 30 15:26:04 roc-4r-sca025 = kernel: [1070486.000089] =C2=A0[<ffffffff81095d60>] ? flush_kthread_w= orker+0x90/0x90
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.00= 0093] =C2=A0[<ffffffff817d3718>] ret_from_fork+0x58/0x90
Ap= r 30 15:26:04 roc-4r-sca025 kernel: [1070486.000096] =C2=A0[<ffffffff810= 95d60>] ? flush_kthread_worker+0x90/0x90
Apr 30 15:26:04 roc-4= r-sca025 kernel: [1070486.000100] INFO: task xfsaild/sdg1:2606 blocked for = more than 120 seconds.
Apr 30 15:26:04 roc-4r-sca025 kernel: [107= 0486.000113] =C2=A0 =C2=A0 =C2=A0 Not tainted 3.19.4-031904-generic #201504= 131440
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000125] &qu= ot;echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this = message.
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000140] x= fsaild/sdg1 =C2=A0 =C2=A0D ffff8810102dfcd8 =C2=A0 =C2=A0 0 =C2=A02606 =C2= =A0 =C2=A0 =C2=A02 0x00000000
Apr 30 15:26:04 roc-4r-sca025 kerne= l: [1070486.000143] =C2=A0ffff8810102dfcd8 ffff8810344c2d80 ffff8810102dffd= 8 0000000000013e40
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486= .000146] =C2=A0ffff881033383b80 ffff8810389589d0 ffff881033491d70 ffff88101= 02dfcf8
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000149] = =C2=A0ffff8810344c3100 ffff881033491d70 ffff881032acd128 ffff88107fc75100
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000152] Call Trace:=
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000155] =C2=A0[&l= t;ffffffff817cf4b9>] schedule+0x29/0x70
Apr 30 15:26:04 roc-4r= -sca025 kernel: [1070486.000172] =C2=A0[<ffffffffc07caee7>] _xfs_log_= force+0x187/0x280 [xfs]
Apr 30 15:26:04 roc-4r-sca025 kernel: [10= 70486.000175] =C2=A0[<ffffffff810a4150>] ? try_to_wake_up+0x2a0/0x2a0=
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000192] =C2=A0[&l= t;ffffffffc07cb019>] xfs_log_force+0x39/0xc0 [xfs]
Apr 30 15:2= 6:04 roc-4r-sca025 kernel: [1070486.000208] =C2=A0[<ffffffffc07d6542>= ] xfsaild_push+0x552/0x5a0 [xfs]
Apr 30 15:26:04 roc-4r-sca025 ke= rnel: [1070486.000211] =C2=A0[<ffffffff817d2264>] ? schedule_timeout+= 0x124/0x210
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000228= ] =C2=A0[<ffffffffc07d662f>] xfsaild+0x9f/0x140 [xfs]
Apr 3= 0 15:26:04 roc-4r-sca025 kernel: [1070486.000244] =C2=A0[<ffffffffc07d65= 90>] ? xfsaild_push+0x5a0/0x5a0 [xfs]
Apr 30 15:26:04 roc-4r-s= ca025 kernel: [1070486.000247] =C2=A0[<ffffffff81095e29>] kthread+0xc= 9/0xe0
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000251] =C2= =A0[<ffffffff81095d60>] ? flush_kthread_worker+0x90/0x90
Ap= r 30 15:26:04 roc-4r-sca025 kernel: [1070486.000254] =C2=A0[<ffffffff817= d3718>] ret_from_fork+0x58/0x90
Apr 30 15:26:04 roc-4r-sca025 = kernel: [1070486.000257] =C2=A0[<ffffffff81095d60>] ? flush_kthread_w= orker+0x90/0x90
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.00= 0261] INFO: task xfsaild/sdd1:2707 blocked for more than 120 seconds.
=
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000273] =C2=A0 =C2=A0 = =C2=A0 Not tainted 3.19.4-031904-generic #201504131440
Apr 30 15:= 26:04 roc-4r-sca025 kernel: [1070486.000285] "echo 0 > /proc/sys/ke= rnel/hung_task_timeout_secs" disables this message.
Apr 30 1= 5:26:04 roc-4r-sca025 kernel: [1070486.000300] xfsaild/sdd1 =C2=A0 =C2=A0D = ffff88100f813cd8 =C2=A0 =C2=A0 0 =C2=A02707 =C2=A0 =C2=A0 =C2=A02 0x0000000= 0
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000303] =C2=A0ff= ff88100f813cd8 ffff88102b1d9480 ffff88100f813fd8 0000000000013e40
Apr 30 15:26:04 roc-4r-sca025 kernel: [1070486.000306] =C2=A0ffff881033387= 700 ffff881038959d70 ffff8810351a09d0 ffff88100f813cf8
Apr 30 15:= 26:04 roc-4r-sca025 kernel: [1070486.000310] =C2=A0ffff88102b1d8800 ffff881= 0351a09d0 ffff8810329acd28 ffff88107fcb5100
Apr 30 15:26:04 roc-4= r-sca025 kernel: [1070486.000313] Call Trace:


=

Jun 26 07:02:56 roc-4r-sca015 kernel: [46243= 7.414753] BUG: unable to handle kernel NULL pointer dereference at =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (null)
Jun 26 07:02:56 roc-4r-sca015 = kernel: [462437.414779] IP: [<ffffffffc04be80f>] xfs_count_page_state= +0x3f/0x70 [xfs]
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.41= 4823] PGD 1013574067 PUD 100ffcb067 PMD 0=C2=A0
Jun 26 07:02:56 r= oc-4r-sca015 kernel: [462437.414842] Oops: 0000 [#1] SMP=C2=A0
Ju= n 26 07:02:56 roc-4r-sca015 kernel: [462437.414856] Modules linked in: xfs = libcrc32c intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp coretem= p ipmi_ssif kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_int= el aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd sb_edac edac_core= joydev mei_me mei lpc_ich ioatdma ipmi_si 8250_fintek ipmi_msghandler 8021= q garp mrp stp llc wmi bonding mac_hid lp parport mlx4_en vxlan ip6_udp_tun= nel udp_tunnel hid_generic usbhid mpt2sas ahci igb hid libahci i2c_algo_bit= mlx4_core dca raid_class ptp scsi_transport_sas pps_core arcmsr
= Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415068] CPU: 0 PID: 687310 Co= mm: ceph-osd Not tainted 4.1.0-040100rc2-generic #201505032335
Ju= n 26 07:02:56 roc-4r-sca015 kernel: [462437.415084] Hardware name: Supermic= ro X9DRD-7LN4F(-JBOD)/X9DRD-EF/X9DRD-7LN4F, BIOS 3.0a 12/05/2013
= Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415102] task: ffff88100f33eeb= 0 ti: ffff880065cb0000 task.ti: ffff880065cb0000
Jun 26 07:02:56 = roc-4r-sca015 kernel: [462437.415116] RIP: 0010:[<ffffffffc04be80f>] = =C2=A0[<ffffffffc04be80f>] xfs_count_page_state+0x3f/0x70 [xfs]
=
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415155] RSP: 0018:ffff88= 0065cb32c8 =C2=A0EFLAGS: 00010286
Jun 26 07:02:56 roc-4r-sca015 k= ernel: [462437.415165] RAX: 0000000000000000 RBX: ffff880065cb37b0 RCX: 000= 0000000000000
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.41521= 0] RDX: ffff880065cb32f4 RSI: ffff880065cb32f0 RDI: ffff880004000000
<= div>Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415254] RBP: ffff880065cb= 32c8 R08: ffff880b687bf478 R09: ffff880065cb3270
Jun 26 07:02:56 = roc-4r-sca015 kernel: [462437.415297] R10: dead000000100100 R11: dead000000= 200200 R12: ffffea000ccf9840
Jun 26 07:02:56 roc-4r-sca015 kernel= : [462437.415341] R13: ffffea000ccf9860 R14: ffffea000ccf9840 R15: ffff880a= b6ce39d0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415386] FS= : =C2=A000007ff4be95c700(0000) GS:ffff88103f200000(0000) knlGS:000000000000= 0000
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415432] CS: = =C2=A00010 DS: 0000 ES: 0000 CR0: 0000000080050033
Jun 26 07:02:5= 6 roc-4r-sca015 kernel: [462437.415459] CR2: 0000000000000000 CR3: 00000000= 7942d000 CR4: 00000000000407f0
Jun 26 07:02:56 roc-4r-sca015 kern= el: [462437.415502] Stack:
Jun 26 07:02:56 roc-4r-sca015 kernel: = [462437.415523] =C2=A0ffff880065cb3328 ffffffffc04be880 0000000000000000 ff= ffea000ccf9840
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.4155= 74] =C2=A0ffff880065cb3498 0000000000000000 ffffea000ccf9840 ffff880065cb37= b0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415626] =C2=A0ff= ff880065cb3498 ffffea000ccf9860 ffffea000ccf9840 ffff880ab6ce3b28
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415677] Call Trace:
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415718] =C2=A0[<ffffffff= c04be880>] xfs_vm_releasepage+0x40/0x120 [xfs]
Jun 26 07:02:56= roc-4r-sca015 kernel: [462437.415751] =C2=A0[<ffffffff8118a7d2>] try= _to_release_page+0x32/0x50
Jun 26 07:02:56 roc-4r-sca015 kernel: = [462437.415782] =C2=A0[<ffffffff8119fe6d>] shrink_page_list+0x69d/0x7= 20
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415812] =C2=A0[&= lt;ffffffff811a058d>] shrink_inactive_list+0x1dd/0x5d0
Jun 26 = 07:02:56 roc-4r-sca015 kernel: [462437.415843] =C2=A0[<ffffffff8119bf2d&= gt;] ? get_lru_size+0x3d/0x40
Jun 26 07:02:56 roc-4r-sca015 kerne= l: [462437.415872] =C2=A0[<ffffffff811a0fb4>] shrink_lruvec+0x234/0x3= 70
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415901] =C2=A0[&= lt;ffffffff81198e25>] ? pagevec_lru_move_fn+0xf5/0x110
Jun 26 = 07:02:56 roc-4r-sca015 kernel: [462437.415931] =C2=A0[<ffffffff811a11db&= gt;] shrink_zone+0xeb/0x300
Jun 26 07:02:56 roc-4r-sca015 kernel:= [462437.415961] =C2=A0[<ffffffff811b38fd>] ? compact_zone+0x7d/0x4f0=
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.415990] =C2=A0[<= ;ffffffff811a1864>] shrink_zones+0x104/0x2a0
Jun 26 07:02:56 r= oc-4r-sca015 kernel: [462437.416019] =C2=A0[<ffffffff811b3f6d>] ? com= pact_zone_order+0x5d/0x70
Jun 26 07:02:56 roc-4r-sca015 kernel: [= 462437.416051] =C2=A0[<ffffffff810f0666>] ? ktime_get+0x46/0xb0
=
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416079] =C2=A0[<fffff= fff811a1ad7>] do_try_to_free_pages+0xd7/0x160
Jun 26 07:02:56 = roc-4r-sca015 kernel: [462437.416110] =C2=A0[<ffffffff811a1e17>] try_= to_free_pages+0xb7/0x170
Jun 26 07:02:56 roc-4r-sca015 kernel: [4= 62437.416139] =C2=A0[<ffffffff8119450a>] __alloc_pages_nodemask+0x5ba= /0x9c0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416172] =C2= =A0[<ffffffff811db51c>] alloc_pages_current+0x9c/0x110
Jun = 26 07:02:56 roc-4r-sca015 kernel: [462437.416203] =C2=A0[<ffffffff811e3a= 8a>] allocate_slab+0x20a/0x2e0
Jun 26 07:02:56 roc-4r-sca015 k= ernel: [462437.416232] =C2=A0[<ffffffff811e3b91>] new_slab+0x31/0x1f0=
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416261] =C2=A0[<= ;ffffffff817ef6a4>] __slab_alloc+0x18e/0x2a3
Jun 26 07:02:56 r= oc-4r-sca015 kernel: [462437.416290] =C2=A0[<ffffffff816cea97>] ? __a= lloc_skb+0x87/0x2b0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437= .416318] =C2=A0[<ffffffff816cea67>] ? __alloc_skb+0x57/0x2b0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416348] =C2=A0[<ffffffff= 811e8687>] __kmalloc_node_track_caller+0xb7/0x290
Jun 26 07:02= :56 roc-4r-sca015 kernel: [462437.416379] =C2=A0[<ffffffff816cea97>] = ? __alloc_skb+0x87/0x2b0
Jun 26 07:02:56 roc-4r-sca015 kernel: [4= 62437.416407] =C2=A0[<ffffffff816ce5fc>] __kmalloc_reserve.isra.57+0x= 3c/0xa0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416437] =C2= =A0[<ffffffff816cea97>] __alloc_skb+0x87/0x2b0
Jun 26 07:02= :56 roc-4r-sca015 kernel: [462437.416467] =C2=A0[<ffffffff8172ee91>] = sk_stream_alloc_skb+0x41/0x130
Jun 26 07:02:56 roc-4r-sca015 kern= el: [462437.416496] =C2=A0[<ffffffff8172f963>] tcp_sendmsg+0x2d3/0xa9= 0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416526] =C2=A0[&l= t;ffffffff8175b467>] inet_sendmsg+0x67/0xa0
Jun 26 07:02:56 ro= c-4r-sca015 kernel: [462437.416555] =C2=A0[<ffffffff816c5cb4>] ? copy= _msghdr_from_user+0x154/0x1b0
Jun 26 07:02:56 roc-4r-sca015 kerne= l: [462437.416585] =C2=A0[<ffffffff816c4f5d>] sock_sendmsg+0x4d/0x60<= /div>
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416613] =C2=A0[<= ffffffff816c61f3>] ___sys_sendmsg+0x2b3/0x2c0
Jun 26 07:02:56 = roc-4r-sca015 kernel: [462437.416644] =C2=A0[<ffffffff810fcf67>] ? fu= tex_wait+0x1c7/0x2c0
Jun 26 07:02:56 roc-4r-sca015 kernel: [46243= 7.416673] =C2=A0[<ffffffff810fd122>] ? futex_wake+0x72/0x140
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416703] =C2=A0[<ffffffff= 81221185>] ? __fget_light+0x25/0x70
Jun 26 07:02:56 roc-4r-sca= 015 kernel: [462437.416731] =C2=A0[<ffffffff816c6c19>] __sys_sendmsg+= 0x49/0x90
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.416760] = =C2=A0[<ffffffff816c6c79>] SyS_sendmsg+0x19/0x20
Jun 26 07:= 02:56 roc-4r-sca015 kernel: [462437.416788] =C2=A0[<ffffffff81803bb2>= ] system_call_fastpath+0x16/0x75
Jun 26 07:02:56 roc-4r-sca015 ke= rnel: [462437.416816] Code: 07 48 89 e5 f6 c4 08 74 43 48 8b 7f 30 48 89 f8= eb 19 66 2e 0f 1f 84 00 00 00 00 00 c7 02 01 00 00 00 48 8b 40 08 48 39 c7= 74 1f <48> 8b 08 80 e5 10 75 e9 48 8b 08 80 e5 02 74 e7 c7 06 01 00 = 00=C2=A0
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.417040] RI= P =C2=A0[<ffffffffc04be80f>] xfs_count_page_state+0x3f/0x70 [xfs]
Jun 26 07:02:56 roc-4r-sca015 kernel: [462437.417094] =C2=A0RSP <= ffff880065cb32c8>
Jun 26 07:02:56 roc-4r-sca015 kernel: [46243= 7.417118] CR2: 0000000000000000
Jun 26 07:02:56 roc-4r-sca015 ker= nel: [462437.417402] ---[ end trace 71135a48b0dfd313 ]---
Jun 26 = 07:40:55 roc-4r-sca015 kernel: [464718.759401] BUG: unable to handle kernel= NULL pointer dereference at =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (null)
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759457] IP: [<ffffff= ffc04be80f>] xfs_count_page_state+0x3f/0x70 [xfs]
Jun 26 07:40= :55 roc-4r-sca015 kernel: [464718.759519] PGD 0=C2=A0
Jun 26 07:4= 0:55 roc-4r-sca015 kernel: [464718.759543] Oops: 0000 [#2] SMP=C2=A0
<= div>Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759571] Modules linked in= : xfs libcrc32c intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp c= oretemp ipmi_ssif kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aes= ni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd sb_edac eda= c_core joydev mei_me mei lpc_ich ioatdma ipmi_si 8250_fintek ipmi_msghandle= r 8021q garp mrp stp llc wmi bonding mac_hid lp parport mlx4_en vxlan ip6_u= dp_tunnel udp_tunnel hid_generic usbhid mpt2sas ahci igb hid libahci i2c_al= go_bit mlx4_core dca raid_class ptp scsi_transport_sas pps_core arcmsr
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.759889] CPU: 7 PID: 110= Comm: kswapd0 Tainted: G =C2=A0 =C2=A0 =C2=A0D =C2=A0 =C2=A0 =C2=A0 =C2=A0= 4.1.0-040100rc2-generic #201505032335
Jun 26 07:40:55 roc-4r-sca= 015 kernel: [464718.759939] Hardware name: Supermicro X9DRD-7LN4F(-JBOD)/X9= DRD-EF/X9DRD-7LN4F, BIOS 3.0a 12/05/2013
Jun 26 07:40:55 roc-4r-s= ca015 kernel: [464718.759987] task: ffff88103712bc60 ti: ffff8810331bc000 t= ask.ti: ffff8810331bc000
Jun 26 07:40:55 roc-4r-sca015 kernel: [4= 64718.760032] RIP: 0010:[<ffffffffc04be80f>] =C2=A0[<ffffffffc04be= 80f>] xfs_count_page_state+0x3f/0x70 [xfs]
Jun 26 07:40:55 roc= -4r-sca015 kernel: [464718.760100] RSP: 0018:ffff8810331bf818 =C2=A0EFLAGS:= 00010282
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760127] R= AX: 0000000000000000 RBX: ffffea000cd08d80 RCX: 0000000000000000
= Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760171] RDX: ffff8810331bf844= RSI: ffff8810331bf840 RDI: ffff880004000068
Jun 26 07:40:55 roc-= 4r-sca015 kernel: [464718.760216] RBP: ffff8810331bf818 R08: ffff880b687bf4= 78 R09: ffff8810331bf850
Jun 26 07:40:55 roc-4r-sca015 kernel: [4= 64718.760260] R10: ffff880b687bf518 R11: 0000000000000220 R12: ffffea000cd0= 8d80
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760304] R13: 0= 000000000000000 R14: ffff880ab6ce3b28 R15: ffff880ab6ce39d0
Jun 2= 6 07:40:55 roc-4r-sca015 kernel: [464718.760348] FS: =C2=A00000000000000000= (0000) GS:ffff88103f3c0000(0000) knlGS:0000000000000000
Jun 26 07= :40:55 roc-4r-sca015 kernel: [464718.760394] CS: =C2=A00010 DS: 0000 ES: 00= 00 CR0: 0000000080050033
Jun 26 07:40:55 roc-4r-sca015 kernel: [4= 64718.760422] CR2: 0000000000000000 CR3: 0000000001e0f000 CR4: 000000000004= 07e0
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760466] Stack:=
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760487] =C2=A0ffff= 8810331bf878 ffffffffc04be880 ffff880ab6ce3b40 ffff880ab6ce3b28
J= un 26 07:40:55 roc-4r-sca015 kernel: [464718.760539] =C2=A0ffff8810331bf888= 0000000000000000 ffff880b687bf478 ffffea000cd08d80
Jun 26 07:40:= 55 roc-4r-sca015 kernel: [464718.760591] =C2=A0ffff880ab6ce3b28 00000000000= 00000 ffff880ab6ce3b28 000000000000000b
Jun 26 07:40:55 roc-4r-sc= a015 kernel: [464718.760643] Call Trace:
Jun 26 07:40:55 roc-4r-s= ca015 kernel: [464718.760686] =C2=A0[<ffffffffc04be880>] xfs_vm_relea= sepage+0x40/0x120 [xfs]
Jun 26 07:40:55 roc-4r-sca015 kernel: [46= 4718.760720] =C2=A0[<ffffffff8118a7d2>] try_to_release_page+0x32/0x50=
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760752] =C2=A0[<= ;ffffffff8119b431>] invalidate_inode_page+0x71/0x90
Jun 26 07:= 40:55 roc-4r-sca015 kernel: [464718.760783] =C2=A0[<ffffffff8119b528>= ] invalidate_mapping_pages+0xd8/0x1e0
Jun 26 07:40:55 roc-4r-sca0= 15 kernel: [464718.760815] =C2=A0[<ffffffff8121ff22>] inode_lru_isola= te+0x122/0x1b0
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.7608= 46] =C2=A0[<ffffffff811b54b1>] __list_lru_walk_one.isra.6+0x81/0x150<= /div>
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760877] =C2=A0[<= ffffffff8121fe00>] ? insert_inode_locked+0x190/0x190
Jun 26 07= :40:55 roc-4r-sca015 kernel: [464718.760907] =C2=A0[<ffffffff8121fe00>= ;] ? insert_inode_locked+0x190/0x190
Jun 26 07:40:55 roc-4r-sca01= 5 kernel: [464718.760938] =C2=A0[<ffffffff811b566a>] list_lru_walk_on= e+0x4a/0x60
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.760966]= =C2=A0[<ffffffff81220274>] prune_icache_sb+0x44/0x60
Jun 2= 6 07:40:55 roc-4r-sca015 kernel: [464718.760996] =C2=A0[<ffffffff8120750= 5>] super_cache_scan+0x155/0x1a0
Jun 26 07:40:55 roc-4r-sca015= kernel: [464718.761026] =C2=A0[<ffffffff8119c06f>] do_shrink_slab+0x= 13f/0x2c0
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761056] = =C2=A0[<ffffffff811a10b0>] ? shrink_lruvec+0x330/0x370
Jun = 26 07:40:55 roc-4r-sca015 kernel: [464718.761086] =C2=A0[<ffffffff810aeb= 95>] ? sched_clock_cpu+0x85/0xc0
Jun 26 07:40:55 roc-4r-sca015= kernel: [464718.761115] =C2=A0[<ffffffff8119c358>] shrink_slab+0xd8/= 0x110
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761143] =C2= =A0[<ffffffff811a13bf>] shrink_zone+0x2cf/0x300
Jun 26 07:4= 0:55 roc-4r-sca015 kernel: [464718.761173] =C2=A0[<ffffffff811aa500>]= ? zone_statistics+0xa0/0xc0
Jun 26 07:40:55 roc-4r-sca015 kernel= : [464718.761203] =C2=A0[<ffffffff811a16e0>] kswapd_shrink_zone+0xe0/= 0x160
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761232] =C2= =A0[<ffffffff811a2323>] balance_pgdat+0x2c3/0x430
Jun 26 07= :40:55 roc-4r-sca015 kernel: [464718.761261] =C2=A0[<ffffffff811a25c3>= ;] kswapd+0x133/0x250
Jun 26 07:40:55 roc-4r-sca015 kernel: [4647= 18.761289] =C2=A0[<ffffffff811a2490>] ? balance_pgdat+0x430/0x430
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761322] =C2=A0[<fff= fffff8109cdc9>] kthread+0xc9/0xe0
Jun 26 07:40:55 roc-4r-sca01= 5 kernel: [464718.761350] =C2=A0[<ffffffff8109cd00>] ? flush_kthread_= worker+0x90/0x90
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.76= 1381] =C2=A0[<ffffffff81803fe2>] ret_from_fork+0x42/0x70
Ju= n 26 07:40:55 roc-4r-sca015 kernel: [464718.761410] =C2=A0[<ffffffff8109= cd00>] ? flush_kthread_worker+0x90/0x90
Jun 26 07:40:55 roc-4r= -sca015 kernel: [464718.761439] Code: 07 48 89 e5 f6 c4 08 74 43 48 8b 7f 3= 0 48 89 f8 eb 19 66 2e 0f 1f 84 00 00 00 00 00 c7 02 01 00 00 00 48 8b 40 0= 8 48 39 c7 74 1f <48> 8b 08 80 e5 10 75 e9 48 8b 08 80 e5 02 74 e7 c7= 06 01 00 00=C2=A0
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.= 761669] RIP =C2=A0[<ffffffffc04be80f>] xfs_count_page_state+0x3f/0x70= [xfs]
Jun 26 07:40:55 roc-4r-sca015 kernel: [464718.761725] =C2= =A0RSP <ffff8810331bf818>
Jun 26 07:40:55 roc-4r-sca015 ker= nel: [464718.761749] CR2: 0000000000000000
Jun 26 07:40:55 roc-4r= -sca015 kernel: [464718.762039] ---[ end trace 71135a48b0dfd314 ]---
<= /div>



--20cf302ef588ef8f88051a192ed3-- From david@fromorbit.com Sun Jul 5 18:25:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 01F437F59 for ; Sun, 5 Jul 2015 18:25:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 92117AC004 for ; Sun, 5 Jul 2015 16:25:01 -0700 (PDT) X-ASG-Debug-ID: 1436138698-04bdf007888e740001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id sJ4FvbLIiJv7ykt8 for ; Sun, 05 Jul 2015 16:24:59 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AYCgBivJlVPN6zLHlWBoMSgTSGTaRJBpoVAgIBAQKBHk0BAQEBAQEHAQEBAUE/hCMBAQEDAScTHCMFCwgDDgoJJQ8FJQMHGhOIJwfHPQEBAQEGAQEBAR4YhgWFLoRDQweDF4EUBZQVi2eBO4QVkweBCYMqLDGCSwEBAQ Received: from ppp121-44-179-222.lns20.syd7.internode.on.net (HELO dastard) ([121.44.179.222]) by ipmail05.adl6.internode.on.net with ESMTP; 06 Jul 2015 08:54:44 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZBtH9-0003pb-DF; Mon, 06 Jul 2015 09:24:43 +1000 Date: Mon, 6 Jul 2015 09:24:43 +1000 From: Dave Chinner To: Alex Gorbachev Cc: xfs@oss.sgi.com Subject: Re: Failing XFS filesystem underlying Ceph OSDs Message-ID: <20150705232443.GA3902@dastard> X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs References: <20150703235141.GQ7943@dastard> <20150704233802.GS7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436138698 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20485 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [ Please turn off line wrap when pasting kernel traces ] On Sun, Jul 05, 2015 at 12:25:47AM -0400, Alex Gorbachev wrote: > > > sysctl vm.swappiness=20 (can probably be 1 as per article) > > > > > > sysctl vm.min_free_kbytes=262144 > > > > That's not an explanation for what looks to be page cache radix > > tree coruption. Memory reclaim still occurs with the settings you > > have now and, well, those changes occurred back in 3.5 - some > > 3 years ago - so it's not really an explanation for a problem with a > > recent 4.1 kernel... > > > > > So far no issues, but I need to wait a week to see if anything shows up. > > > Thank you for reviewing the error codes. > > > > I expect that you'll see the problems again... > > We have experienced the problem in various guises with kernels 3.14, 3.19, > 4.1-rc2 and now 4.1, so it's not new to us, just different error stack. > Below are some other stack dumps of what manifested as the same error. > > [] schedule+0x29/0x70 > [] _xfs_log_force+0x187/0x280 [xfs] > [] ? try_to_wake_up+0x2a0/0x2a0 > [] xfs_log_force+0x39/0xc0 [xfs] > [] xfsaild_push+0x552/0x5a0 [xfs] > [] ? schedule_timeout+0x124/0x210 > [] xfsaild+0x9f/0x140 [xfs] > [] ? xfsaild_push+0x5a0/0x5a0 [xfs] > [] kthread+0xc9/0xe0 > [] ? flush_kthread_worker+0x90/0x90 > [] ret_from_fork+0x58/0x90 > [] ? flush_kthread_worker+0x90/0x90 > INFO: task xfsaild/sdg1:2606 blocked for more than 120 seconds. > Not tainted 3.19.4-031904-generic #201504131440 > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. That's indicative of IO completion problems, but not a crash. > BUG: unable to handle kernel NULL pointer dereference at (null) > IP: [] xfs_count_page_state+0x3f/0x70 [xfs] .... > [] xfs_vm_releasepage+0x40/0x120 [xfs] > [] try_to_release_page+0x32/0x50 > [] shrink_page_list+0x69d/0x720 > [] shrink_inactive_list+0x1dd/0x5d0 .... Again, this is indicative of a page cache issue: a page without buffers has been passed to xfs_vm_releasepage(), which implies the page flags are not correct. i.e PAGE_FLAGS_PRIVATE is set but page->private is null... Again, this is unlikely to be an XFS issue. > Do you think we need to look at RAM handling by this Supermicro machine > type? Not sure what you mean by that. Problems like this can be caused by bad hardware, but it's unusual for a machine using ECC memory to have undetected RAM problems... Cheers, Dave. -- Dave Chinner david@fromorbit.com From smphggmf@gpev.com Sun Jul 5 19:48:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.2 required=5.0 tests=HK_RANDOM_FROM, HK_RANDOM_REPLYTO,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2E5757F56 for ; Sun, 5 Jul 2015 19:48:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id BE743AC002 for ; Sun, 5 Jul 2015 17:47:58 -0700 (PDT) X-ASG-Debug-ID: 1436143675-04bdf007898f3e0001-NocioJ Received: from gpev.com ([60.166.220.85]) by cuda.sgi.com with ESMTP id 9YXV1BzGvD6UAxQr for ; Sun, 05 Jul 2015 17:47:55 -0700 (PDT) X-Barracuda-Envelope-From: smphggmf@gpev.com X-Barracuda-Apparent-Source-IP: 60.166.220.85 Received: from SKY-20150201SFT ([127.0.0.1]) by localhost via TCP with ESMTPA; Mon, 06 Jul 2015 08:47:36 +0800 MIME-Version: 1.0 From: Tom Sender: Tom To: xfs@oss.sgi.com Reply-To: Tom Date: 6 Jul 2015 08:47:36 +0800 Subject: =?utf-8?B?TWVhbndlbGwgZHJpdmVyIGxlZCBmbG9vZCBsaWdodGluZyB3aXRoIDV5ZWFyIHdhcnJhbnRpZXMgVUw=?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?TWVhbndlbGwgZHJpdmVyIGxlZCBmbG9vZCBsaWdodGluZyB3aXRoIDV5ZWFyIHdhcnJhbnRpZXMgVUw=?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: UNKNOWN[60.166.220.85] X-Barracuda-Start-Time: 1436143675 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20486 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150706004758.5AE8DA4217D@cuda.sgi.com> PGh0bWw+PGJvZHk+PFA+SGVsbG8sPC9QPg0KPFA+V2UgYXJlIHRoZSBsZWFkaW5nIG1hbnVm YWN0dXJlciBpbiBjaGluYSBmb3IgbGVkIGZsb29kIGxpZ2h0aW5nIGFuZCBsZWQgaGlnaGJh eSBwcm9kdWN0cy48L1A+DQo8UD5XZSBvZmZlciB0aGUgY29tcGV0aXRpdmUgcHJpY2UgYW5k IDUgeWVhciBndWFyYW50ZWUgZm9yIGFsbCBvdXIgcHJvZHVjdHMuPC9QPg0KPFA+TEVEIEhJ R0ggQkFZIExJR0hUSU5HIDxCUj4zMFcgbGVkIGhpZ2ggYmF5Jm5ic3A7IDI1JHVzZCBlYWNo IHBjczxCUj4xMDBXIGxlZCBoaWdoIGJheSZuYnNwOyA0NSR1c2QgZWFjaCBwY3M8QlI+MTUw VyBsZWQgaGlnaCBiYXkgb25seSA1OCR1c2QgZWFjaCBwY3M8QlI+Jm5ic3A7Jm5ic3A7IDxC Uj5MRUQgRkxPT0QgTElHSFRJTkcgPEJSPjEwVyBvbmx5Jm5ic3A7IDMuMyR1c2QgZWFjaCBw Y3M8QlI+NTBXIG9ubHkgMTIuNSR1c2QgZWFjaCBwY3M8QlI+ODBXIG9ubHkmbmJzcDsgMjIk dXNkIGVhY2ggcGNzPC9QPg0KPFA+SWYgeW91IGFyZSBpbnRlcmVzdCwgd2UgY2FuIHNlbmQg eW91IHByaWNlIGxpc3QgYWdhaW4uPC9QPg0KPFA+dGhhbmsgeW91PEJSPlRvbTwvUD4NCjxQ PkppbiBXYW5nIGxpZ2h0aW5nIGZhY3Rvcnk8L1A+PC9ib2R5PjwvaHRtbD4= From patelrakeshcomp@gmail.com Mon Jul 6 01:08:41 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 43C617F50 for ; Mon, 6 Jul 2015 01:08:41 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2354E8F8037 for ; Sun, 5 Jul 2015 23:08:37 -0700 (PDT) X-ASG-Debug-ID: 1436162913-04cbb050d090a00001-NocioJ Received: from mail-qg0-f44.google.com (mail-qg0-f44.google.com [209.85.192.44]) by cuda.sgi.com with ESMTP id VLX5oZenf8HBTpIu (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sun, 05 Jul 2015 23:08:33 -0700 (PDT) X-Barracuda-Envelope-From: patelrakeshcomp@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.44 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.44] Received: by qget71 with SMTP id t71so64829804qge.2 for ; Sun, 05 Jul 2015 23:08:33 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.44] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.44] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=86f+yZY5LRusNYq33x9UMrxiEggWNqhqXyFogTxBKN8=; b=XRTs1vP7aEWqMIMy09H/dJHZxnxguc/E4x7zDlWqohnAo8MLnsdmliaKtOtopNBCV2 UxVIp7Xra8csjQmXj9yhfjhf4d0Jp5qpf0PUzM7sYZymvk3upiGbsLGXSwmPMpAn9/pK KATle+igR9OuLzmuliDtR8RD45Wt5pPm1PasnPQaoHuc6NW1yVFjYXgVhpN0DiAMCqwZ B2V29sgLhfGCtqCBsk4tMzCAfChZhyVqYEb2oxJcY+EZ/cCnu5ZPBjYgloeGqr+CZFwn 1WstvJAaWrn33YibEA6Xd4fq0bJ4x8cNYnK6Mm/rdLEyWObNsCHF0hY+5dti5xyk/1jZ kfmg== MIME-Version: 1.0 X-Received: by 10.140.129.151 with SMTP id 145mr24541310qhb.83.1436162912881; Sun, 05 Jul 2015 23:08:32 -0700 (PDT) Received: by 10.140.36.177 with HTTP; Sun, 5 Jul 2015 23:08:32 -0700 (PDT) Date: Mon, 6 Jul 2015 11:38:32 +0530 Message-ID: Subject: regarding journaling mode From: Rakesh Patel X-ASG-Orig-Subj: regarding journaling mode To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11355a0c432c36051a2ebcbb X-Barracuda-Connect: mail-qg0-f44.google.com[209.85.192.44] X-Barracuda-Start-Time: 1436162913 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20491 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11355a0c432c36051a2ebcbb Content-Type: text/plain; charset=UTF-8 Hi, I come to know XFS is using writeback journaling mode. As per the journaling guide, writeback is unsafe which does not preserve data and metadata write synchronization. I really want to know reason behind to choose writeback mode for journaling in XFS. Thanks. Regards, Rakesh --001a11355a0c432c36051a2ebcbb Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

I come to know XFS is= using writeback journaling mode. As per the journaling guide, writeback is= unsafe which does not preserve data and metadata write synchronization.
I really want to know reason behind to choose writeback mode fo= r journaling in XFS.



Thanks.
Regards,
Rakesh
--001a11355a0c432c36051a2ebcbb-- From rbh@intomics.com Mon Jul 6 06:08:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 038AB7F55 for ; Mon, 6 Jul 2015 06:08:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9366FAC002 for ; Mon, 6 Jul 2015 04:08:23 -0700 (PDT) X-ASG-Debug-ID: 1436180898-04bdf007889b8c0001-NocioJ Received: from columba.intomics.com (columba.intomics.com [77.72.50.68]) by cuda.sgi.com with ESMTP id bmkeod5gKCg1Lewd for ; Mon, 06 Jul 2015 04:08:19 -0700 (PDT) X-Barracuda-Envelope-From: rbh@intomics.com X-Barracuda-Apparent-Source-IP: 77.72.50.68 Received: from localhost (localhost [127.0.0.1]) by columba.intomics.com (Postfix) with ESMTP id 7299922057D for ; Mon, 6 Jul 2015 13:08:18 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at intomics.com Received: from columba ([127.0.0.1]) by localhost (columba.intomics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eoslMJQCj1-c for ; Mon, 6 Jul 2015 13:08:16 +0200 (CEST) Received: from dhcp-0-1-94.intomics.com (dhcp-0-1-94.intomics.com [10.0.1.94]) (Authenticated sender: rbh) by columba.intomics.com (Postfix) with ESMTPSA id 666A122053A for ; Mon, 6 Jul 2015 13:08:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intomics.com; s=201205; t=1436180896; bh=lwToE3oOEGWbTEQ5TaZrZxsQBveqPpMdvx8erT7JNpA=; h=From:Subject:Date:References:To:In-Reply-To; b=QN7s+41KEE/0+WaRBdmSSzlskoOljr8upK4QqsGos516oARNJjs4+WYE9Dt7C9LUn 7WVnApcvsLUhRKvi2W+cnVi+a5yrodkqqXROVhC+Tt2By6TV8m1QdefO02m7Ig0AuI 8dIgDuG++nKlL5suG1OATZLKmMHOD8wWn5ypKE2I= From: Rasmus Borup Hansen Content-Type: multipart/alternative; boundary="Apple-Mail=_5BDCBB11-E2A9-4596-B143-EB0476F02181" Message-Id: <0F9CF77D-1DA5-41DD-87AA-7F4109F08EFB@intomics.com> Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\)) Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Date: Mon, 6 Jul 2015 13:08:52 +0200 X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> <20150703235500.GR7943@dastard> To: xfs@oss.sgi.com In-Reply-To: <20150703235500.GR7943@dastard> X-Mailer: Apple Mail (2.2098) X-Barracuda-Connect: columba.intomics.com[77.72.50.68] X-Barracuda-Start-Time: 1436180899 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.61 X-Barracuda-Spam-Status: No, SCORE=0.61 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_FONT_FACE_BAD, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20496 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word --Apple-Mail=_5BDCBB11-E2A9-4596-B143-EB0476F02181 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii I've made a metadump and I'm running another xfs_repair, but given that = the first metadump is 132 GB, will you still be interested in looking at = the dumps? Best, Rasmus Intomics is a contract research organization specialized in deriving = core biological insight from large scale data. We help our clients in = the pharmaceutical industry develop tomorrow's medicines better, faster, = and cheaper through optimized use of biomedical data. ----------------------------------------------------------------- Hansen, Rasmus Borup Intomics - from data to biology System Administrator Diplomvej 377 Scientific Programmer DK-2800 Kgs. Lyngby Denmark E: rbh@intomics.com W: http://www.intomics.com/ P: +45 5167 7972 P: +45 8880 7979 > On 04 Jul 2015, at 01:55, Dave Chinner wrote: >=20 > On Fri, Jul 03, 2015 at 08:27:28AM +0200, Rasmus Borup Hansen wrote: >> Thank you for the suggestion. I compiled a new xfs_repair, but I got = similar results from running it. >=20 > Please take a metadump of the filesystem before and after repair > so that we can find out what is actually going wrong. Feel free to > send me a private pointer to the metadump images... >=20 > Cheers, >=20 > Dave. > --=20 > Dave Chinner > david@fromorbit.com >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --Apple-Mail=_5BDCBB11-E2A9-4596-B143-EB0476F02181 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii
I've made a metadump and I'm running another = xfs_repair, but given that the first metadump is 132 GB, will you still = be interested in looking at the dumps?

Best,

Rasmus

Intomics is a = contract research organization specialized in deriving core biological = insight from large scale data. We help our clients in the = pharmaceutical industry develop tomorrow's medicines better, = faster, and cheaper through optimized use of biomedical data.
-----------------------------------------------------------------
Hansen, Rasmus Borup         =      Intomics - from data to biology
System Administrator             =  Diplomvej 377
Scientific Programmer =             DK-2800 Kgs. = Lyngby
              =                     = Denmark
E: rbh@intomics.com           =     W: http://www.intomics.com/
P: +45 5167 7972 =                  P: +45 = 8880 7979

On 04 Jul 2015, at 01:55, Dave Chinner <david@fromorbit.com>= wrote:

On = Fri, Jul 03, 2015 at 08:27:28AM +0200, Rasmus Borup Hansen wrote:
Thank you for the = suggestion. I compiled a new xfs_repair, but I got similar results from = running it.

Please take a = metadump of the filesystem before and after repair
so that = we can find out what is actually going wrong. Feel free to
send me a private pointer to the metadump images...

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

= --Apple-Mail=_5BDCBB11-E2A9-4596-B143-EB0476F02181-- From kg6@20158899.com Mon Jul 6 10:55:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY, UNPARSEABLE_RELAY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3A1CC7F54 for ; Mon, 6 Jul 2015 10:55:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 083DD30405F for ; Mon, 6 Jul 2015 08:55:07 -0700 (PDT) X-ASG-Debug-ID: 1436198099-04bdf00788a3b80001-NocioJ Received: from 20158899.com ([110.208.183.230]) by cuda.sgi.com with SMTP id OvAbx3lLRB5bNirW for ; Mon, 06 Jul 2015 08:55:03 -0700 (PDT) X-Barracuda-Envelope-From: kg6@20158899.com X-Barracuda-Apparent-Source-IP: 110.208.183.230 Received: from [192.168.1.88]; Mon, 6 Jul 2015 23:19:19 +0800 Date: Mon, 6 Jul 2015 23:19:19 +0800 From: "kg6" Reply-To: 2238320747@qq.com To: "xfs" Subject: =?GB2312?B?zeLDs9Oqz/rNxrnjtdrSu8a3xcYh?= Message-ID: <201507062319197872727@20158899.com> X-ASG-Orig-Subj: =?GB2312?B?zeLDs9Oqz/rNxrnjtdrSu8a3xcYh?= X-Mailer: Foxmail 6, 10, 201, 20 [cn] MIME-Version: 1.0 Content-Type: text/html; charset="GB2312" Content-Transfer-Encoding: base64 X-Barracuda-Connect: UNKNOWN[110.208.183.230] X-Barracuda-Start-Time: 1436198100 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.10 X-Barracuda-Spam-Status: No, SCORE=2.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0141, HTML_MESSAGE, MIME_HTML_ONLY, RDNS_NONE, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20501 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 2.00 BSF_SC0_MV0141 Custom rule MV0141 PGh0bWw+DQogIDxoZWFkPg0KICAgIDx0aXRsZT48L3RpdGxlPg0KICAgIDxtZXRhIGNvbnRlbnQ9 InRleHQvaHRtbDsgY2hhcnNldD1nYjIzMTIiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4N CiAgPC9oZWFkPg0KICA8Ym9keT4NCiAgICA8ZGl2PiYjMTk5Njg7JiMyNzQ1NDsmIzIxNDg3OyYj MjAxOTc7JiMyNTYyODsmIzMyMDM0OyYjMjI4MDY7JiMzNjE1MjsmIzIzNDU4OyYjMjUxNDM7JiMy MTQ4NzsmIzIwMTk3OyYjMjE0NTc7JiMzNjg2NTsmIzM3MDM4OyYjMjAyMTQ7JiMzMDM0MDsmIzM2 NzE5OyYjMjAyMTQ7IDwvZGl2Pg0KICAgIDxkaXY+Jm5ic3A7PC9kaXY+DQogICAgPGRpdj4mIzIy ODA2OyYjMzYxNTI7JiMyMzQ1ODsmIzI1MTQzOyYjMjQzMjA7JiMyMTQ1NzsyJiMyNzQ5MzsmIzI2 MzU0OyA8L2Rpdj4NCiAgICA8ZGl2PiZuYnNwOzwvZGl2Pg0KICAgIDxkaXY+MSYjMTIyODk7JiMy NTYyODs8L2Rpdj4NCiAgICA8ZGl2PiYjMjAzMjA7JiMyMTQ4NzsmIzIwMTk3OyYjMjM1ODE7JiMz NTc5NzsmIzIzNTU4OyYjMjQwNTA7JiMzMjQ2MzsmIzI1MTA0OyYjMjAxMzI7JiMzMDM0MDsmIzIz NDU4OyYjMjUxNDM7JiMyMjMxMjsmIzMyNTkzOyYjMzI0NzY7JiMyNTYyODsmIzMyMDM0OyYjMjU2 Mjg7JiMzMjAzNDsmIzY1MjkyOyYjMjYzNzc7JiMzNjEzNjsmIzM3MzI3OyYjMzAzNDA7JiMyMzQ1 ODsmIzI1MTQzOyYjMjIzMTI7JiMyNTYyODsmIzMyMDM0OyYjMjQzNDE7JiMyNTgwNjsmIzE5OTc4 OyYjMzcxMTc7JiMyNjE1OTsmIzMwNDUyOyYjMjU1MDk7JiMyMTQ4NzsmIzIwMTk3OyYjMjAxNzQ7 JiMzMjU5MzsmIzMyNDc2OyYjMTk5Nzg7JiMyNTYyODsmIzMyMDM0OyYjMjEwNDA7JiMzMDM0MDsm IzEyMjkwOyA8L2Rpdj4NCiAgICA8ZGl2PiZuYnNwOzwvZGl2Pg0KICAgIDxkaXY+JiMzNjcxOTsm IzIwMjE0OyYjMzg1OTg7JiMyNTEwNDsmIzIwODQwOyYjMjk2OTk7JiMyMDAyNzsmIzI3OTY5OyYj MzY4OTA7JiMyOTk5MjsmIzI1NjI4OyYjMzIwMzQ7JiMyNDM0MTsmIzI1ODA2OyYjMjE2NDQ7JiMy MDg0MDsmIzI5Njk5OzIwMCYjMjI4MTA7JiMyMDAxMDsmIzIyMjY5OyYjMjM0Nzg7JiMyNDM0MTsm IzI1ODA2OyYjNjUyOTI7JiMyMDg0MDsmIzMzMjU4OyYjMjExNjA7JiMyNTU1MjsmIzIxNDYyOyYj MjM0NTg7JiMyNTE0MzsmIzM3MDM4OyYjMjAyMTQ7JiMyMjMyMDsmIzIyMzM2OyYjNjUyOTI7JiMy MzQzNjsmIzIwODQwOyYjMjE0ODc7JiMyMDE5NzsmIzI0MTEwOyYjMjExNjE7JiMyNDc0NDsmIzMw NjM2OyYjMzgzODg7JiMzMTIxNTsmIzMyMDQ3OyYjMzk2NDA7JiMzNjEzNjsmIzM3MzI3OyYjMzQ4 OTI7JiMxOTk5NDsmIzIzNDU4OyYjMjUxNDM7JiMzMjY3NjsmIzM2MTY0OyYjMjYwMDk7JiMxMjI5 MDsgPC9kaXY+DQogICAgPGRpdj4mbmJzcDs8L2Rpdj4NCiAgICA8ZGl2PjImIzEyMjg5OyYjMjU1 MTI7PC9kaXY+DQogICAgPGRpdj4mIzM2NzE5OyYjMjAyMTQ7JiMzMDc0MDsmIzIxNDU3OyYjMjcx Njk7JiMyNTMxMTtmb3htYWlsJiMzMzI1ODsmIzIxMTYwOyYjMjE0NTc7JiMyMDQ0OTsmIzM2NzE5 OyYjMjAyMTQ7JiM2NTI5MjsmIzM2ODA1OyYjMzY4OTU7JiMyMzU1ODsmIzI0NzQ0OyYjMzAzNDA7 JiMyMDEzNTsmIzIxNjk3OyYjMzYxNjQ7JiMyNjAwOTsmIzM1MjA2OyYjMzA0MjI7JiMyNTk3Mjsm IzIwMDEwOyYjMzQ4OTI7JiMxOTk5NDsmIzEyMjkwOyYjMjAwMjc7JiMyMTE2MDsmIzIwOTg2OyYj MjA5ODc7JiM2NTI5MjsmIzE5OTY4OyYjMjM1NDU7JiMxOTk2ODsmIzI2MjM0OyYjMzMwMjE7JiMy MTQ1NzsmIzIwNDQ5OyYjMjUyNTA7JiMyMDgwODsmIzE5OTY4OyYjMjc0OTM7JiMzMjg1MjsmIzMx OTk1OyYjMjM0NTg7JiMyNTE0MzsmIzEyMjkwOyA8L2Rpdj4NCiAgICA8ZGl2PiZuYnNwOzwvZGl2 Pg0KICAgIDxkaXY+DQogICAgICA8ZGl2Pg0KICAgICAgICA8ZGl2Pg0KICAgICAgICAgIDxkaXY+ DQogICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAg IDxkaXY+DQogICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2 Pg0KICAgICAgICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8 ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8ZGl2PkNvbnRhY3QgPGZvbnQgY29sb3I9IiNmZjAwMDAiPjIvMi8zLzgv My8yLzAvNy80LzcgPC9mb250Pjxmb250IGNvbG9yPSIjMDAwMDAwIj5OdW1iZXI8L2ZvbnQ+PC9k aXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2 Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2 PiYjMjExNTI7JiMyNTk2ODsmIzIzMzgzOzxmb250IGNvbG9yPSIjZmYwMDAwIj5RUTwvZm9udD4m IzIxNDk1OyYjNjUyODg7JiMyMDgxMzsmIzM2MTUzOyYjMjIzMTI7JiMzMjQ0NzsmIzI4NDM2OyYj MzEwMzQ7JiMzNjcxOTsmIzIwMjE0OyYjMzAzNDA7JiMyMTE1MTsmIzMzMDIxOyYjMjE2NDQ7JiMy NTkyODsmIzI2NTI0OyYjNjUyODk7PC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rp dj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9k aXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQog ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICA8L2Rp dj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4N CiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAg ICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4N CiAgICA8L2Rpdj4NCiAgPC9ib2R5Pg0KPC9odG1sPg== From bfoster@redhat.com Mon Jul 6 13:13:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3014C7F54 for ; Mon, 6 Jul 2015 13:13:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id A0A14AC002 for ; Mon, 6 Jul 2015 11:13:35 -0700 (PDT) X-ASG-Debug-ID: 1436206413-04cb6c209ea9c20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id YVKCR2mbsen4gTLv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Jul 2015 11:13:34 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 762B436B4E1 for ; Mon, 6 Jul 2015 18:13:33 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t66IDXdE017747 for ; Mon, 6 Jul 2015 14:13:33 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id AAA2612004E; Mon, 6 Jul 2015 14:26:34 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Date: Mon, 6 Jul 2015 14:26:34 -0400 X-ASG-Orig-Subj: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Message-Id: <1436207194-35671-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436206414 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Persistent memory without block translation table (btt) support provides a block device suitable for filesystems, but does not provide the sector write atomicity guarantees typical of block storage. This is a problem for log recovery on XFS. The on-disk log record structure already includes a CRC and thus can detect torn writes. The problem is that such a failure isn't detected until log recovery is already in progress and therefore results in a hard error and mount failure. Update the log head/tail discovery algorithm to detect and trim off a torn log record from the end (from a recovery perspective) of the log. Once the head is determined from the log cycle information and we have a pointer to the last record to be recovered, read and verify the CRC of said record before we initiate actual recovery. If CRC verification fails, assume the record is torn and reset the head to the start of the torn record. We reverse seek for the previous log record header from that point and attempt recovery up through that record. Signed-off-by: Brian Foster --- Hi all, As far as I'm aware, the torn log write problem is the only major gap we have to safely run XFS w/ crc=1 on non-btt pmem devices. This is an RFC to attempt to address that problem. I used a custom hack to actually reproduce such torn writes on a ramdisk to primarily help me understand the problem, but I was able to use the same hack to sanity test this approach under the basic corruption case (this is generally untested, otherwise). This could obviously use some cleanup, but is the approach sane? I'm curious if this should also be tied to DAX enablement so as to not interfere with unrelated corruption handling (IOW, with what logic is it reasonable enough to assume a crc failure of the final record == torn write?). I'm also wondering if this should be tied to a new mount option rather than make this behavior implicit. Any other thoughts? Brian fs/xfs/xfs_log_recover.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 01dd228..6015d02 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -62,6 +62,9 @@ xlog_recover_check_summary( #define xlog_recover_check_summary(log) #endif +STATIC int +xlog_validate_logrec_crc(struct xlog *, xfs_daddr_t); + /* * This structure is used during recovery to record the buf log items which * have been canceled and should not be replayed. @@ -898,6 +901,7 @@ xlog_find_tail( xfs_daddr_t after_umount_blk; xfs_lsn_t tail_lsn; int hblks; + bool skipped_last = false; found = 0; @@ -925,6 +929,7 @@ xlog_find_tail( /* * Search backwards looking for log record header block */ +retry: ASSERT(*head_blk < INT_MAX); for (i = (int)(*head_blk) - 1; i >= 0; i--) { error = xlog_bread(log, i, 1, bp, &offset); @@ -962,6 +967,31 @@ xlog_find_tail( return -EIO; } + /* + * Now that we think we've found the log head, we have to check that the + * last log record wasn't torn when written out to the log. This is + * possible on devices without sector atomicity guarantees (e.g., pmem). + * + * Verify the CRC of the last log record that was written. If the CRC is + * invalid, point the head at the start of this record and retry the + * above backwards log record header search. We'll try the recovery up + * through this record. Note that we only walk backwards once since this + * is only intended to handle the torn write on power loss case. + * + * TODO: mount option? tied to DAX? + */ + if (xfs_sb_version_hascrc(&log->l_mp->m_sb) && !skipped_last) { + error = xlog_validate_logrec_crc(log, i); + if (error == -EFSBADCRC) { + skipped_last = true; + *head_blk = i; + xfs_warn(log->l_mp, + "WARNING: Torn write? Attempting recovery up to previous record."); + goto retry; + } else if (error) + goto done; + } + /* find blk_no of tail of log */ rhead = (xlog_rec_header_t *)offset; *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn)); @@ -4607,6 +4637,63 @@ xlog_recover_finish( return 0; } +/* + * Read and CRC validate a full log record. This is used to detect torn log + * writes during head/tail discovery. + */ +STATIC int +xlog_validate_logrec_crc( + struct xlog *log, + xfs_daddr_t rec_blk) +{ + int hblks, bblks; + struct xlog_rec_header *rhead; + struct xfs_buf *hbp = NULL; + struct xfs_buf *dbp = NULL; + int error; + char *offset; + + hblks = 1; /* XXX */ + + /* read and validate the log record header */ + hbp = xlog_get_bp(log, 1); + if (!hbp) + return -ENOMEM; + error = xlog_bread(log, rec_blk, hblks, hbp, &offset); + if (error) + goto out; + + rhead = (struct xlog_rec_header *) offset; + + error = xlog_valid_rec_header(log, rhead, rec_blk); + if (error) + goto out; + + /* read the full record and verify the CRC */ + /* XXX: factor out from do_recovery_pass() ? */ + dbp = xlog_get_bp(log, BTOBB(be32_to_cpu(rhead->h_size))); + if (!dbp) + goto out; + + bblks = (int)BTOBB(be32_to_cpu(rhead->h_len)); + error = xlog_bread(log, rec_blk+hblks, bblks, dbp, &offset); + if (error) + goto out; + + /* + * If the CRC validation fails, convert the return code so the caller + * can distinguish from unrelated errors. + */ + error = xlog_unpack_data_crc(rhead, offset, log); + if (error) + error = -EFSBADCRC; +out: + if (dbp) + xlog_put_bp(dbp); + if (hbp) + xlog_put_bp(hbp); + return error; +} #if defined(DEBUG) /* -- 2.1.0 From sandeen@sandeen.net Mon Jul 6 13:15:13 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 205FD7F54 for ; Mon, 6 Jul 2015 13:15:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id F29DC8F80BD for ; Mon, 6 Jul 2015 11:15:09 -0700 (PDT) X-ASG-Debug-ID: 1436206507-04bdf0078ba7c70001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 1ybeK5iBd0MYGBND for ; Mon, 06 Jul 2015 11:15:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id DDE5D63CDA11 for ; Mon, 6 Jul 2015 13:15:06 -0500 (CDT) Message-ID: <559AC5AA.5040900@sandeen.net> Date: Mon, 06 Jul 2015 13:15:06 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 0/2] metadump: 2 more patches Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH 0/2] metadump: 2 more patches Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1436206507 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20506 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- metadump: Fill attribute values with 'v' rather than NUL metadump: handle multi-block directories From sandeen@sandeen.net Mon Jul 6 13:16:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 66A627F54 for ; Mon, 6 Jul 2015 13:16:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 541B53040D2 for ; Mon, 6 Jul 2015 11:16:36 -0700 (PDT) X-ASG-Debug-ID: 1436206595-04cb6c209da9db0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id JIDiZvltIM0H8m0J for ; Mon, 06 Jul 2015 11:16:35 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3195B63CDA11 for ; Mon, 6 Jul 2015 13:16:35 -0500 (CDT) Message-ID: <559AC602.5050309@sandeen.net> Date: Mon, 06 Jul 2015 13:16:34 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 1/2] metadump: Fill attribute values with 'v' rather than NUL References: <559AC5AA.5040900@sandeen.net> X-ASG-Orig-Subj: [PATCH 1/2] metadump: Fill attribute values with 'v' rather than NUL In-Reply-To: <559AC5AA.5040900@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1436206595 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20505 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Rather than memset attribute values to '\0', use the character 'v' - otherwise in some cases we get attributes with a non-zero value length which start with a NUL, and that makes some userspace tools unhappy, yielding results like this: security.oO^Lio.=0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Signed-off-by: Eric Sandeen --- diff --git a/db/metadump.c b/db/metadump.c index 2286b71..a30f90e 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -1083,8 +1083,8 @@ obfuscate_sf_attr( xfs_dinode_t *dip) { /* - * with extended attributes, obfuscate the names and zero the actual - * values. + * with extended attributes, obfuscate the names and fill the actual + * values with 'v' (to see a valid string length, as opposed to NULLs) */ xfs_attr_shortform_t *asfp; @@ -1124,7 +1124,7 @@ obfuscate_sf_attr( } generate_obfuscated_name(0, asfep->namelen, &asfep->nameval[0]); - memset(&asfep->nameval[asfep->namelen], 0, asfep->valuelen); + memset(&asfep->nameval[asfep->namelen], 'v', asfep->valuelen); asfep = (xfs_attr_sf_entry_t *)((char *)asfep + XFS_ATTR_SF_ENTSIZE(asfep)); @@ -1302,7 +1302,7 @@ obfuscate_attr_block( /* magic to handle attr and attr3 */ memset(block + (bs - XFS_ATTR3_RMT_BUF_SPACE(mp, bs)), - 0, XFS_ATTR3_RMT_BUF_SPACE(mp, bs)); + 'v', XFS_ATTR3_RMT_BUF_SPACE(mp, bs)); } return; } @@ -1339,7 +1339,7 @@ obfuscate_attr_block( } generate_obfuscated_name(0, local->namelen, &local->nameval[0]); - memset(&local->nameval[local->namelen], 0, + memset(&local->nameval[local->namelen], 'v', be16_to_cpu(local->valuelen)); } else { remote = xfs_attr3_leaf_name_remote(leaf, i); From sandeen@sandeen.net Mon Jul 6 13:17:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 160D17F54 for ; Mon, 6 Jul 2015 13:17:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 00055304032 for ; Mon, 6 Jul 2015 11:17:22 -0700 (PDT) X-ASG-Debug-ID: 1436206641-04cb6c209ea9e10001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id tyX8r5CVO2khIomf for ; Mon, 06 Jul 2015 11:17:21 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 4273363CDA11 for ; Mon, 6 Jul 2015 13:17:21 -0500 (CDT) Message-ID: <559AC630.2090101@sandeen.net> Date: Mon, 06 Jul 2015 13:17:20 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 2/2] metadump: handle multi-block directories References: <559AC5AA.5040900@sandeen.net> X-ASG-Orig-Subj: [PATCH 2/2] metadump: handle multi-block directories In-Reply-To: <559AC5AA.5040900@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1436206641 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20507 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- commit 6e79202b metadump: fully support discontiguous directory blocks assembled a buffer from multiple dir blocks, and we can use that in obfuscate_dir_data_block() to continue past the first filesystem block and continue obfuscating the entire thing. Without this, anything after the first block was skipped, and remained as cleartext. Signed-off-by: Eric Sandeen --- diff --git a/db/metadump.c b/db/metadump.c index 5baec6c..33f3ec9 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -1152,9 +1152,6 @@ obfuscate_dir_data_block( datahdr = (struct xfs_dir2_data_hdr *)block; - if (offset % mp->m_dir_geo->fsbcount != 0) - return; /* corrupted, leave it alone */ - if (is_block_format) { xfs_dir2_leaf_entry_t *blp; xfs_dir2_block_tail_t *btp; @@ -1187,7 +1184,7 @@ obfuscate_dir_data_block( dir_offset = M_DIROPS(mp)->data_entry_offset; ptr = block + dir_offset; - endptr = block + mp->m_sb.sb_blocksize; + endptr = block + mp->m_dir_geo->blksize; while (ptr < endptr && dir_offset < end_of_data) { xfs_dir2_data_entry_t *dep; From alex@zadarastorage.com Mon Jul 6 13:48:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=STOX_REPLY_TYPE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 95AC87F54 for ; Mon, 6 Jul 2015 13:48:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7F93A3040D2 for ; Mon, 6 Jul 2015 11:48:05 -0700 (PDT) X-ASG-Debug-ID: 1436208480-04cb6c209caac10001-NocioJ Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) by cuda.sgi.com with ESMTP id C8zyMxRm4UZtrzwD (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 Jul 2015 11:48:01 -0700 (PDT) X-Barracuda-Envelope-From: alex@zadarastorage.com X-Barracuda-Apparent-Source-IP: 209.85.212.174 Received: by wiwl6 with SMTP id l6so293314940wiw.0 for ; Mon, 06 Jul 2015 11:48:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:cc:references:in-reply-to :subject:date:mime-version:content-type:content-transfer-encoding :importance; bh=MUHPvOkaFgl5P56df8BYc+GAwhE4mdepcszGZjdoopw=; b=NoZxTcu2QHjjYVBEhNF8BikqYX8DdEFBlM4ySJhhnBYCuk8mCkKVZdsghQ5MTkPxJH zU4ETIuA2LSE9jb2UAhfdgY69GS1jKHP3gW0DX+0uK5uMGdBCOrEpkbPFXHn8n4ge1Uu vIQRajyoyptRMEG3uSgrEgzImkDLohP/dtCs113CW0yxpdQKXDdpxW8z4iiijHABTd98 biIvovdlKr7AQKshmguRmZcHHElKmAIaY29f6hs8oX8N2OCgl8hTGMRrv2nmXew2AjCn QVgy6/qPNAf0XHHrgRffdjQXY7jsTEr/dfaKJ6qkE4TV3bYIxl38wfPnnLohgCTvueXy mdJA== X-Gm-Message-State: ALoCoQnmkWdmZEJYfm3Tx8gO3Jc9msuyowkG8maXqwejjHcdxyavzXMB1e1+sLUGF73z+GPaW3ll X-Received: by 10.180.75.4 with SMTP id y4mr55859740wiv.1.1436208480544; Mon, 06 Jul 2015 11:48:00 -0700 (PDT) Received: from alyakaslap (bzq-169-168-31-234.red.bezeqint.net. [31.168.169.234]) by mx.google.com with ESMTPSA id bg6sm29520859wjc.13.2015.07.06.11.47.56 (version=TLSv1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 06 Jul 2015 11:47:56 -0700 (PDT) Message-ID: From: "Alex Lyakas" To: "Dave Chinner" , Cc: , "Yair Hershko" , "Shyam Kaushik" , "Danny Shavit" References: <20150629222651.GG7943@dastard> In-Reply-To: <20150629222651.GG7943@dastard> Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" Date: Mon, 6 Jul 2015 20:47:56 +0200 X-ASG-Orig-Subj: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Mailer: Microsoft Windows Live Mail 15.4.3555.308 X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308 X-Barracuda-Connect: mail-wi0-f174.google.com[209.85.212.174] X-Barracuda-Start-Time: 1436208481 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20508 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE Hi Dave, Brian, [Compendium reply, trimmed and re-ordered] > What was the problem with regard to preallocation and large VM images? > The preallocation is not permanent and should be cleaned up if the file > is inactive for a period of time (see the other prealloc FAQ entries). The problem was that in 3.8 speculative preallocation was based on the inode size. So when creating large sparse files (for example with qemu-img), XFS was writing huge amounts of data through xfs_iozero, which choked the drives. As Dave pointed out, this was fixed in later kernels. > For example, what happens > if run something like the following locally? > for i in $(seq 0 2 100); do > xfs_io -fc "pwrite $((i * 4096)) 4k" /mnt/file > done When running this locally, speculative preallocation is trimmed through xfs_free_eofblocks (verified with systemtap), and indeed we get a highly fragmented file. However, debugging our NFS workload, we see that this is not happening, i.e., NFS server does not issue ->release, until the end of the workload. > I suppose that might never trigger due to the sync mount > option. What's the reason for using that one? > I'm afraid to ask why, but that is likely your problem - synchronous > out of order writes from the NFS client will fragment the file > badly because it defeats both delayed allocation and speculative > preallocation because there is nothing to trigger the "don't remove > speculatieve prealloc on file close" heuristic used to avoid > fragmentation caused by out of order NFS writes.... The main reason for using "sync" mount option is to avoid data loss in the case of crash. I did some experiments without this mount option, and indeed I see that same NFS workload results in lower fragmentation, especially for large files. However, since we do not consider at the moment removing the "sync" mount option, I did not debug further why it happens. > NFS is likely resulting in out of order writes.... Yes, Dave, this appeared to be our issue. This in addition to badly configured NFS client, which had: rsize=32768,wsize=32768 instead of what we usually see: rsize=1048576,wsize=1048576 An out of order write was triggering a small speculative preallocation (allocsize=64k), and all subsequent writes into the "hole" were not able to benefit from it, and had to allocate separate extents (which most of the time were not physically contiguous). And NFS server receiving 32k writes contributed even more to the fragmentation. With 1MB writes this problem doesn't really happen even with allocsize=64k. So currently, we are pulling the following XFS patches: xfs: don't use speculative prealloc for small files xfs: fix xfs_iomap_eof_prealloc_initial_size type xfs: increase prealloc size to double that of the previous extent xfs: fix potential infinite loop in xfs_iomap_prealloc_size() xfs: limit speculative prealloc size on sparse files (Final code will be as usual in https://github.com/zadarastorage/zadara-xfs-pushback) However, Dave, I am still not comfortable with XFS insisting on continuous space for the data fork in kmem_alloc. Consider, for example, Brian's script. Nothing stops the user from doing that. Another example could be strided 4k NFS writes coming out of order. For these cases, speculative preallocation will not help, as we will receive a highly fragmented file with holes. Another example, Dave, can you please look at the stack trace in [1]. (It doesn't make much sense, but this is what we got). Could something like this happen: - VFS tells XFS to unlink an inode - XFS tries to reallocate the extents fork via xfs_inactive path - there is no continuous memory, so kernel (somehow) wants to evict the same inode, but cannot lock it due to XFS already holding the lock??? I know that this is very far-fetched, and probably wrong, but insisting on continuous memory is also problematic here. Thanks for your help Brian & Dave, Alex. [1] 454509.864025] nfsd D 0000000000000001 0 797 2 0x00000000 [454509.864025] ffff88036e41d438 0000000000000046 ffff88037b351c00 ffff88017fb22a20 [454509.864025] ffff88036e41dfd8 0000000000000000 0000000000000008 ffff8803aca2dd58 [454509.864025] ffff88036e41d448 ffffffffa074905d 000000012e32b040 ffff8803aca2dcc0 [454509.864025] Call Trace: [454509.864025] [] ? xfs_buf_lock+0x44/0x110 [xfs] [454509.864025] [] ? _xfs_buf_find+0xfd/0x2a0 [xfs] [454509.864025] [] ? xfs_buf_get_map+0x34/0x1b0 [xfs] [454509.864025] [] ? xfs_buf_read_map+0x31/0x130 [xfs] [454509.864025] [] ? xfs_trans_read_buf_map+0x2d9/0x490 [xfs] [454509.864025] [] ? xfs_btree_read_buf_block.isra.20.constprop.25+0x72/0xb0 [xfs] [454509.864025] [] ? xfs_btree_rshift+0xcc/0x540 [xfs] [454509.864025] [] ? _xfs_buf_ioapply+0x294/0x300 [xfs] [454509.864025] [] ? xfs_btree_make_block_unfull+0x58/0x190 [xfs] [454509.864025] [] ? _xfs_buf_read+0x30/0x50 [xfs] [454509.864025] [] ? xfs_buf_iorequest+0x69/0xd0 [xfs] [454509.864025] [] ? xfs_btree_insrec+0x387/0x580 [xfs] [454509.864025] [] ? xfs_buf_read_map+0x103/0x130 [xfs] [454509.864025] [] ? xfs_buf_readahead_map+0x5b/0x80 [xfs] [454509.864025] [] ? xfs_btree_lookup_get_block+0x7b/0xe0 [xfs] [454509.864025] [] ? xfs_btree_ptr_offset+0x4f/0x70 [xfs] [454509.864025] [] ? xfs_btree_key_addr+0x12/0x20 [xfs] [454509.864025] [] ? xfs_btree_lookup+0xb7/0x470 [xfs] [454509.864025] [] ? xfs_alloc_lookup_eq+0x1b/0x20 [xfs] [454509.864025] [] ? xfs_free_ag_extent+0x421/0x940 [xfs] [454509.864025] [] ? xfs_free_extent+0x10a/0x170 [xfs] [454509.864025] [] ? xfs_bmap_finish+0x169/0x1b0 [xfs] [454509.864025] [] ? xfs_itruncate_extents+0xf3/0x2d0 [xfs] [454509.864025] [] ? kmem_zone_alloc+0x67/0xe0 [xfs] [454509.864025] [] ? xfs_inactive+0x340/0x450 [xfs] [454509.864025] [] ? _raw_spin_lock_irq+0x15/0x20 [454509.864025] [] ? xfs_fs_evict_inode+0x93/0x100 [xfs] [454509.864025] [] ? evict+0xc0/0x1d0 [454509.864025] [] ? iput_final+0xe2/0x170 [454509.864025] [] ? iput+0x3e/0x50 [454509.864025] [] ? dentry_unlink_inode+0xd8/0x110 [454509.864025] [] ? d_delete+0xbe/0xd0 [454509.864025] [] ? vfs_unlink.part.27+0xde/0xf0 [454509.864025] [] ? vfs_unlink+0x3c/0x60 [454509.864025] [] ? nfsd_unlink+0x183/0x230 [nfsd] [454509.864025] [] ? nfsd4_remove+0x6d/0x130 [nfsd] [454509.864025] [] ? nfsd4_proc_compound+0x5ac/0x7a0 [nfsd] [454509.864025] [] ? nfsd_dispatch+0x102/0x270 [nfsd] [454509.864025] [] ? svc_process_common+0x328/0x5e0 [sunrpc] [454509.864025] [] ? svc_process+0x103/0x160 [sunrpc] [454509.864025] [] ? nfsd+0xbf/0x130 [nfsd] [454509.864025] [] ? nfsd_destroy+0x80/0x80 [nfsd] [454509.864025] [] ? kthread+0xc0/0xd0 [454509.864025] [] ? flush_kthread_worker+0xb0/0xb0 [454509.864025] [] ? ret_from_fork+0x7c/0xb0 [454509.864025] [] ? flush_kthread_worker+0xb0/0xb0 -----Original Message----- From: Dave Chinner Sent: 30 June, 2015 12:26 AM To: Alex Lyakas Cc: xfs@oss.sgi.com ; hch@lst.de ; Yair Hershko ; Shyam Kaushik ; Danny Shavit Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" [Compendium reply, top-posting removed, trimmed and re-ordered] On Sat, Jun 27, 2015 at 11:01:30PM +0200, Alex Lyakas wrote: > Results are following: > - memory allocation failures happened only on the > kmem_realloc_xfs_iext_realloc_indirect path for now > - XFS hits memory re-allocation failures when it needs to allocate > about 35KB. Sometimes allocation succeeds after few retries, but > sometimes it takes several thousands of retries. Allocations of 35kB are failing? Sounds like you have a serious memory fragmentation problem if allocations that small are having trouble. > - All allocation failures happened on NFSv3 paths > - Three inode numbers were reported as failing memory allocations. > After several hours, "find -inum" is still searching for these > inodes...this is a huge filesystem... Is there any other quicker > (XFS-specific?) way to find the file based on inode number? Not yet. You can use the bulkstat ioctl to find the inode by inode number, then open-by-handle to get a fd for the inode to allow you to read/write/stat/bmap/etc, but the only way to find the path right now is to brute force it. That reverse mapping and parent pointer stuff I'm working on at the moment will make lookups like this easy. > Any recommendation how to move forward with this issue? > > Additional observation that I saw in my local system: writing files > to XFS locally vs writing the same files via NFS (both 3 and 4), the > amount of extents reported by "xfs_bmap" is much higher for the NFS > case. For example, creating a new file and writing into it as > follows: > - write 4KB > - skip 4KB (i.e., lseek to 4KB + 4KB) > - write 4KB > - skip 4KB > ... > Create a file of say 50MB this way. > > Locally it ends up with very few (1-5) extents. But same exact > workload through NFS results in several thousands of extents. NFS is likely resulting in out of order writes.... > The > filesystem is mounted as "sync" in both cases. I'm afraid to ask why, but that is likely your problem - synchronous out of order writes from the NFS client will fragment the file badly because it defeats both delayed allocation and speculative preallocation because there is nothing to trigger the "don't remove speculatieve prealloc on file close" heuristic used to avoid fragmentation caused by out of order NFS writes.... On Sun, Jun 28, 2015 at 08:19:35PM +0200, Alex Lyakas wrote: > through NFS. Trying the same 4KB-data/4KB-hole workload on small > files of 2MB. When writing the file locally, I see that > xfs_file_buffered_aio_write is always called with a single 4KB > buffer: > xfs_file_buffered_aio_write: inum=100663559 nr_segs=1 > seg #0: {.iov_base=0x18db8f0, .iov_len=4096} > > But when doing the same workload through NFS: > xfs_file_buffered_aio_write: inum=167772423 nr_segs=2 > seg #0: {.iov_base=0xffff88006c1100a8, .iov_len=3928} > seg #1: {.iov_base=0xffff88005556e000, .iov_len=168} > There are always two such buffers in the IOV. IOV format is irrelevant to the buffered write behaviour of XFS. > I am still trying to debug why this results in XFS requiring much > more extents to fit such workload. I tapped into some functions and > seeing: > > Local workload: > 6 xfs_iext_add: ifp=0xffff8800096de6b8 idx=0x0 ext_diff=0x1, > nextents=0 new_size=16 if_bytes=0 if_real_bytes=0 > 25 xfs_iext_add: ifp=0xffff8800096de6b8 idx=0x1 ext_diff=0x1, ..... Sequential allocation, all nice and contiguous. Preallocation is clearly not being removed between writes. > NFS workload: .... > nextents=1 new_size=32 if_bytes=16 if_real_bytes=0 > 124 xfs_iext_add: ifp=0xffff8800096df4b8 idx=0x1 ext_diff=0x1, > nextents=2 new_size=48 if_bytes=32 if_real_bytes=0 > 130 xfs_iext_add: ifp=0xffff8800096df4b8 idx=0x1 ext_diff=0x1, You're not getting sequential allocation, which further points to problems with preallocation being removed on close. > Number of extents is growing. But still I could not see why this is > happening. Can you please give a hint why? The sync mount option. > 3) I tried to see what is the largest file XFS can maintain with > this 4KB-data/4KB-hole workload on a VM with 5GB RAM. I was able to > reach 146GB and almost 9M extents. There were a lof of "memory > allocation deadlock" messages popping, but eventually allocation > would succeed. Until finally, allocation could not succeed for 3 > minutes and hung-task panic occurred. Well, yes. Each extent requires 32 bytes, plus an index page every 256 leaf pages (i.e. every 256*128=32k extents). So that extent list requires roughly 300MB of memory, and a contiguous 270 page allocation. vmalloc is not the answer here - it just papers over the underlying problem: excessive fragmentation. On Mon, Jun 29, 2015 at 03:02:23PM -0400, Brian Foster wrote: > On Mon, Jun 29, 2015 at 07:59:00PM +0200, Alex Lyakas wrote: > > Hi Brian, > > Thanks for your comments. > > > > Here is the information you asked for: > > > > meta-data=/dev/dm-147 isize=256 agcount=67, > > agsize=268435440 > > blks > > = sectsz=512 attr=2 > > data = bsize=4096 blocks=17825792000, > > imaxpct=5 > > = sunit=16 swidth=160 blks > > naming =version 2 bsize=4096 ascii-ci=0 > > log =internal bsize=4096 blocks=521728, version=2 > > = sectsz=512 sunit=16 blks, lazy-count=1 > > realtime =none extsz=4096 blocks=0, rtextents=0 > > > > Mount options: > > /dev/dm-147 /export/nfsvol xfs > > rw,sync,noatime,wsync,attr2,discard,inode64,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,noquota > > 0 0 > > > > So yes, we are using "allocsize=64k", which influences the speculative > > allocation logic. I did various experiments, and indeed when I remove > > this > > "allocsize=64k", fragmentation is much lesser. (Tried also other things, > > like using a single nfsd thread, mounting without "sync" and patching > > nfsd > > to provide "nicer" IOV to vfs_write, but none of these helped). On the > > other > > hand, we started using this option "allocsize=64k" to prevent aggressive > > preallocation that we saw XFS doing on large QCOW files (VM images). > > > > What was the problem with regard to preallocation and large VM images? > The preallocation is not permanent and should be cleaned up if the file > is inactive for a period of time (see the other prealloc FAQ entries). A lot of change went into the speculative preallocation in the kernels after 3.8, so I suspect we've already fixed whatever problem was seen. Alex, it would be a good idea to try to reproduce those problems on a current kernel to see if they still are present.... > > Still, when doing local IO to a mounted XFS, even with "allocsize=64k", > > we > > still get very few extents. Still don't know why is this difference > > between > > local IO and NFS. Would be great to receive a clue for that phenomena. > > > > What exactly is your test in this case? I assume you're also testing > with the same mount options and whatnot. One difference could be that > NFS might involve more open-write-close cycles than a local write test, > which could impact reclaim of preallocation. For example, what happens > if you run something like the following locally? > > for i in $(seq 0 2 100); do > xfs_io -fc "pwrite $((i * 4096)) 4k" /mnt/file > done That should produce similar results to run the NFS client. Years ago back at SGI we used a tool written by Greg Banks called "Ddnfs" for testing this sort of thing. it did open_by_handle()/close() around each read/write syscall to emulate the NFS server IO pattern. http://oss.sgi.com/projects/nfs/testtools/ddnfs-oss-20090302.tar.bz2 > > This will do the strided writes while opening and closing the file each > time and thus probably more closely matches what might be happening over > NFS. Prealloc is typically trimmed on close, but there is an NFS > specific heuristic that should detect this and let it hang around for > longer in this case. Taking a quick look at that code shows that it is > tied to the existence of delayed allocation blocks at close time, > however. I suppose that might never trigger due to the sync mount > option. What's the reason for using that one? Right - it won't trigger because writeback occurs in the write() context, so we have a clean inode when the fd is closed and ->release is called... Cheers, Dave. -- Dave Chinner david@fromorbit.com From bfoster@redhat.com Mon Jul 6 13:49:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2157B7F54 for ; Mon, 6 Jul 2015 13:49:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id F17DB3040DF for ; Mon, 6 Jul 2015 11:49:42 -0700 (PDT) X-ASG-Debug-ID: 1436208580-04cbb050d1a4150001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Gpp6s0dkdNMr9dB4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Jul 2015 11:49:41 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 5AE6B9158D for ; Mon, 6 Jul 2015 18:49:40 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t66IndY1021550 for ; Mon, 6 Jul 2015 14:49:40 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 9BC2212004E; Mon, 6 Jul 2015 15:02:41 -0400 (EDT) Date: Mon, 6 Jul 2015 15:02:41 -0400 From: Brian Foster To: xfs@oss.sgi.com Subject: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Message-ID: <20150706190241.GA19240@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery References: <1436207194-35671-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436207194-35671-1-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436208581 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Jul 06, 2015 at 02:26:34PM -0400, Brian Foster wrote: > Persistent memory without block translation table (btt) support provides > a block device suitable for filesystems, but does not provide the sector > write atomicity guarantees typical of block storage. This is a problem > for log recovery on XFS. The on-disk log record structure already > includes a CRC and thus can detect torn writes. The problem is that such > a failure isn't detected until log recovery is already in progress and > therefore results in a hard error and mount failure. > > Update the log head/tail discovery algorithm to detect and trim off a > torn log record from the end (from a recovery perspective) of the log. > Once the head is determined from the log cycle information and we have a > pointer to the last record to be recovered, read and verify the CRC of > said record before we initiate actual recovery. If CRC verification > fails, assume the record is torn and reset the head to the start of the > torn record. We reverse seek for the previous log record header from > that point and attempt recovery up through that record. > > Signed-off-by: Brian Foster > --- > > Hi all, > > As far as I'm aware, the torn log write problem is the only major gap we > have to safely run XFS w/ crc=1 on non-btt pmem devices. This is an RFC > to attempt to address that problem. I used a custom hack to actually > reproduce such torn writes on a ramdisk to primarily help me understand > the problem, but I was able to use the same hack to sanity test this > approach under the basic corruption case (this is generally untested, > otherwise). > > This could obviously use some cleanup, but is the approach sane? I'm > curious if this should also be tied to DAX enablement so as to not > interfere with unrelated corruption handling (IOW, with what logic is it > reasonable enough to assume a crc failure of the final record == torn > write?). I'm also wondering if this should be tied to a new mount option > rather than make this behavior implicit. Any other thoughts? > It occurs to me that this may also need to grow some logic for all the log wrapping and whatnot that is handled in xlog_do_recovery_pass(). I'll need to stare at that some more, but FWIW, I did have another hack that added a "dummy" recovery pass that only verified CRCs and walked backwards until verification succeeded. It was ugly as is and quite honestly just another hack to help me try and understand what was going on. That said, perhaps cleaning it up and doing something like a dummy crc verify pass from the log head/tail discovery code and _only_ over the range of the final record might be a reasonable alternative. That would allow reuse of the existing code for any of those wrap around cases that might need to be handled. Anyways, thoughts or other ideas appreciated. Brian > Brian > > fs/xfs/xfs_log_recover.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 87 insertions(+) > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 01dd228..6015d02 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -62,6 +62,9 @@ xlog_recover_check_summary( > #define xlog_recover_check_summary(log) > #endif > > +STATIC int > +xlog_validate_logrec_crc(struct xlog *, xfs_daddr_t); > + > /* > * This structure is used during recovery to record the buf log items which > * have been canceled and should not be replayed. > @@ -898,6 +901,7 @@ xlog_find_tail( > xfs_daddr_t after_umount_blk; > xfs_lsn_t tail_lsn; > int hblks; > + bool skipped_last = false; > > found = 0; > > @@ -925,6 +929,7 @@ xlog_find_tail( > /* > * Search backwards looking for log record header block > */ > +retry: > ASSERT(*head_blk < INT_MAX); > for (i = (int)(*head_blk) - 1; i >= 0; i--) { > error = xlog_bread(log, i, 1, bp, &offset); > @@ -962,6 +967,31 @@ xlog_find_tail( > return -EIO; > } > > + /* > + * Now that we think we've found the log head, we have to check that the > + * last log record wasn't torn when written out to the log. This is > + * possible on devices without sector atomicity guarantees (e.g., pmem). > + * > + * Verify the CRC of the last log record that was written. If the CRC is > + * invalid, point the head at the start of this record and retry the > + * above backwards log record header search. We'll try the recovery up > + * through this record. Note that we only walk backwards once since this > + * is only intended to handle the torn write on power loss case. > + * > + * TODO: mount option? tied to DAX? > + */ > + if (xfs_sb_version_hascrc(&log->l_mp->m_sb) && !skipped_last) { > + error = xlog_validate_logrec_crc(log, i); > + if (error == -EFSBADCRC) { > + skipped_last = true; > + *head_blk = i; > + xfs_warn(log->l_mp, > + "WARNING: Torn write? Attempting recovery up to previous record."); > + goto retry; > + } else if (error) > + goto done; > + } > + > /* find blk_no of tail of log */ > rhead = (xlog_rec_header_t *)offset; > *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn)); > @@ -4607,6 +4637,63 @@ xlog_recover_finish( > return 0; > } > > +/* > + * Read and CRC validate a full log record. This is used to detect torn log > + * writes during head/tail discovery. > + */ > +STATIC int > +xlog_validate_logrec_crc( > + struct xlog *log, > + xfs_daddr_t rec_blk) > +{ > + int hblks, bblks; > + struct xlog_rec_header *rhead; > + struct xfs_buf *hbp = NULL; > + struct xfs_buf *dbp = NULL; > + int error; > + char *offset; > + > + hblks = 1; /* XXX */ > + > + /* read and validate the log record header */ > + hbp = xlog_get_bp(log, 1); > + if (!hbp) > + return -ENOMEM; > + error = xlog_bread(log, rec_blk, hblks, hbp, &offset); > + if (error) > + goto out; > + > + rhead = (struct xlog_rec_header *) offset; > + > + error = xlog_valid_rec_header(log, rhead, rec_blk); > + if (error) > + goto out; > + > + /* read the full record and verify the CRC */ > + /* XXX: factor out from do_recovery_pass() ? */ > + dbp = xlog_get_bp(log, BTOBB(be32_to_cpu(rhead->h_size))); > + if (!dbp) > + goto out; > + > + bblks = (int)BTOBB(be32_to_cpu(rhead->h_len)); > + error = xlog_bread(log, rec_blk+hblks, bblks, dbp, &offset); > + if (error) > + goto out; > + > + /* > + * If the CRC validation fails, convert the return code so the caller > + * can distinguish from unrelated errors. > + */ > + error = xlog_unpack_data_crc(rhead, offset, log); > + if (error) > + error = -EFSBADCRC; > +out: > + if (dbp) > + xlog_put_bp(dbp); > + if (hbp) > + xlog_put_bp(hbp); > + return error; > +} > > #if defined(DEBUG) > /* > -- > 2.1.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From ag@iss-integration.com Mon Jul 6 14:20:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A92817F54 for ; Mon, 6 Jul 2015 14:20:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 87D2F3040DE for ; Mon, 6 Jul 2015 12:20:22 -0700 (PDT) X-ASG-Debug-ID: 1436210419-04cb6c209fab600001-NocioJ Received: from mail-ig0-f176.google.com (mail-ig0-f176.google.com [209.85.213.176]) by cuda.sgi.com with ESMTP id VBfG9Awcl29ANP5Q (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 Jul 2015 12:20:20 -0700 (PDT) X-Barracuda-Envelope-From: ag@iss-integration.com Received: by igcqs7 with SMTP id qs7so17262037igc.0 for ; Mon, 06 Jul 2015 12:20:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=c3x79qCIFItnV//zxIGRDQmh7BcqSFfSKf/0IzBV3yk=; b=WmaxEKZWXMSzM6W7BaMvkL0R4rgsec46VZDBxUSMXU8gn2fFuhFA8e9Bq9II/NOhiv QjuW3TKsPFxCGOtVC9fVlOqWrOaWSdfyqUe+WWk5AjezXc5nWYJzl2ncqWDs4kGeSenC fJ5dmZZRPc4jW74Htrgn5uNJasjCDylIhYlp21azIvwFlIwqpqdkviwj5dzd9uIixDC3 BjvpBAEQhD5liT2vDrdbgdcFotxk7/R6KCA+TulS6VCdTSW1iQZVVGOHEwUvwxMwDPCn JmFdO1kmu02HhPF5lFnOioigj05DLtGdMNBhdDv528wetw3rVQm/mVtpw1ig8uW4UiJv fh7Q== X-Gm-Message-State: ALoCoQnq/f00NxPipwcGMkDI7JJYr/D3IH0CPCvU6DQxeqouTh5OtUh5A15IRHLhjhnXXl+e+ZkO MIME-Version: 1.0 X-Received: by 10.43.178.195 with SMTP id ox3mr39337357icc.10.1436210419719; Mon, 06 Jul 2015 12:20:19 -0700 (PDT) Received: by 10.64.20.198 with HTTP; Mon, 6 Jul 2015 12:20:19 -0700 (PDT) In-Reply-To: <20150705232443.GA3902@dastard> References: <20150703235141.GQ7943@dastard> <20150704233802.GS7943@dastard> <20150705232443.GA3902@dastard> Date: Mon, 6 Jul 2015 15:20:19 -0400 Message-ID: Subject: Re: Failing XFS filesystem underlying Ceph OSDs From: Alex Gorbachev X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c2c4cae3fa7e051a39cbba X-Barracuda-Connect: mail-ig0-f176.google.com[209.85.213.176] X-Barracuda-Start-Time: 1436210420 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20509 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c2c4cae3fa7e051a39cbba Content-Type: text/plain; charset=UTF-8 Thank you Dave, On Sun, Jul 5, 2015 at 7:24 PM, Dave Chinner wrote: > [ Please turn off line wrap when pasting kernel traces ] > Noted, sorry, I thought wrap was off, but Google must have it on by default. > > On Sun, Jul 05, 2015 at 12:25:47AM -0400, Alex Gorbachev wrote: > > > > sysctl vm.swappiness=20 (can probably be 1 as per article) > > > > > > > > sysctl vm.min_free_kbytes=262144 > > > > [...] > > > > We have experienced the problem in various guises with kernels 3.14, > 3.19, > > 4.1-rc2 and now 4.1, so it's not new to us, just different error stack. > > Below are some other stack dumps of what manifested as the same error. > > > > [] schedule+0x29/0x70 > > [] _xfs_log_force+0x187/0x280 [xfs] > > [] ? try_to_wake_up+0x2a0/0x2a0 > > [] xfs_log_force+0x39/0xc0 [xfs] > > [] xfsaild_push+0x552/0x5a0 [xfs] > > [] ? schedule_timeout+0x124/0x210 > > [] xfsaild+0x9f/0x140 [xfs] > > [] ? xfsaild_push+0x5a0/0x5a0 [xfs] > > [] kthread+0xc9/0xe0 > > [] ? flush_kthread_worker+0x90/0x90 > > [] ret_from_fork+0x58/0x90 > > [] ? flush_kthread_worker+0x90/0x90 > > INFO: task xfsaild/sdg1:2606 blocked for more than 120 seconds. > > Not tainted 3.19.4-031904-generic #201504131440 > > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this > message. > > That's indicative of IO completion problems, but not a crash. > > > BUG: unable to handle kernel NULL pointer dereference at > (null) > > IP: [] xfs_count_page_state+0x3f/0x70 [xfs] > .... > > [] xfs_vm_releasepage+0x40/0x120 [xfs] > > [] try_to_release_page+0x32/0x50 > > [] shrink_page_list+0x69d/0x720 > > [] shrink_inactive_list+0x1dd/0x5d0 > .... > > Again, this is indicative of a page cache issue: a page without > buffers has been passed to xfs_vm_releasepage(), which implies the > page flags are not correct. i.e PAGE_FLAGS_PRIVATE is set but > page->private is null... > > Again, this is unlikely to be an XFS issue. > Sorry for my ignorance, but would this likely come from Ceph code or a hardware issue of some kind, such as a disk drive? I have reached out to RedHat and Ceph community on that as well. Thank you, Alex > > > Do you think we need to look at RAM handling by this Supermicro machine > > type? > > Not sure what you mean by that. Problems like this can be caused by > bad hardware, but it's unusual for a machine using ECC memory to > have undetected RAM problems... > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > --001a11c2c4cae3fa7e051a39cbba Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Thank you Dave,

On Sun, Jul 5, 2015 at 7:24 PM, Dave Chinner <david@fro= morbit.com> wrote:
[ Please= turn off line wrap when pasting kernel traces ]

<= /div>
Noted, sorry, I thought wrap was off, but Google must have it on = by default.
=C2=A0

On Sun, Jul 05, 2015 at 12:25:47AM -0400, Alex Gorbachev wrote:
> > > sysctl vm.swappiness=3D20 (can probably be 1 as per article)=
> > >
> > > sysctl vm.min_free_kbytes=3D262144
> >
[...]
>
> We have experienced the problem in various guises with kernels 3.14, 3= .19,
> 4.1-rc2 and now 4.1, so it's not new to us, just different error s= tack.
> Below are some other stack dumps of what manifested as the same error.=
>
>=C2=A0 [<ffffffff817cf4b9>] schedule+0x29/0x70
>=C2=A0 [<ffffffffc07caee7>] _xfs_log_force+0x187/0x280 [xfs]
>=C2=A0 [<ffffffff810a4150>] ? try_to_wake_up+0x2a0/0x2a0
>=C2=A0 [<ffffffffc07cb019>] xfs_log_force+0x39/0xc0 [xfs]
>=C2=A0 [<ffffffffc07d6542>] xfsaild_push+0x552/0x5a0 [xfs]
>=C2=A0 [<ffffffff817d2264>] ? schedule_timeout+0x124/0x210
>=C2=A0 [<ffffffffc07d662f>] xfsaild+0x9f/0x140 [xfs]
>=C2=A0 [<ffffffffc07d6590>] ? xfsaild_push+0x5a0/0x5a0 [xfs]
>=C2=A0 [<ffffffff81095e29>] kthread+0xc9/0xe0
>=C2=A0 [<ffffffff81095d60>] ? flush_kthread_worker+0x90/0x90
>=C2=A0 [<ffffffff817d3718>] ret_from_fork+0x58/0x90
>=C2=A0 [<ffffffff81095d60>] ? flush_kthread_worker+0x90/0x90
>=C2=A0 INFO: task xfsaild/sdg1:2606 blocked for more t= han 120 seconds.
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 Not tainted 3.19.4-031904-generic #201504131440
>=C2=A0 "echo 0 > /proc/sys/kernel/hung_task_ti= meout_secs" disables this message.

That's indicative of IO completion problems, but not a crash.
>=C2=A0 BUG: unable to handle kernel NULL pointer dereference at=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(null)
>=C2=A0 IP: [<ffffffffc04be80f>] xfs_count_page_state+0x3f/= 0x70 [xfs]
....
>=C2=A0 =C2=A0[<ffffffffc04be880>] xfs_vm_releasepage+0x40/0x120 [= xfs]
>=C2=A0 =C2=A0[<ffffffff8118a7d2>] try_to_release_page+0x32/0x50 >=C2=A0 =C2=A0[<ffffffff8119fe6d>] shrink_page_list+0x69d/0x720 >=C2=A0 =C2=A0[<ffffffff811a058d>] shrink_inactive_list+0x1dd/0x5d= 0
....

Again, this is indicative of a page cache issue: a page without
buffers has been passed to xfs_vm_releasepage(), which implies the
page flags are not correct. i.e PAGE_FLAGS_PRIVATE is set but
page->private is null...

Again, this is unlikely to be an XFS issue.

=
Sorry for my ignorance, but would this likely come from Ceph code or a= hardware issue of some kind, such as a disk drive?=C2=A0 I have reached ou= t to RedHat and Ceph community on that as well.

Th= ank you,
Alex

=C2=A0

> Do you think we need to look at RAM handling by this Supermicro machin= e
> type?

Not sure what you mean by that. Problems like this can be caused by<= br> bad hardware, but it's unusual for a machine using ECC memory to
have undetected RAM problems...

Cheers,

Dave.
--
Dave Chinner
david@fromorbit.com

--001a11c2c4cae3fa7e051a39cbba-- From david@fromorbit.com Mon Jul 6 19:10:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 287AC7F50 for ; Mon, 6 Jul 2015 19:10:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 060688F8052 for ; Mon, 6 Jul 2015 17:09:56 -0700 (PDT) X-ASG-Debug-ID: 1436227793-04cb6c209cb18c0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id VZo3hCCag4h5uRVT for ; Mon, 06 Jul 2015 17:09:53 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D7CAD5F5tVPMtrLHlcgxKBNIJRg3ykVwEBAQEBAQaaFQICAQECgT9NAQEBAQEBBwEBAQFBP4QjAQEBAwE6HCMFCwgDGAklDwUlAwcaExuICwfLLQEBAQcCAR8YhgWFLoQ7SweEKwWRMYJkhzuELIE7hBWIOYZxg12BCYEpHIFlLDGBBAWBQgEBAQ Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail06.adl6.internode.on.net with ESMTP; 07 Jul 2015 09:39:12 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCGRj-0006Rz-Bq; Tue, 07 Jul 2015 10:09:11 +1000 Date: Tue, 7 Jul 2015 10:09:11 +1000 From: Dave Chinner To: Alex Lyakas Cc: bfoster@redhat.com, xfs@oss.sgi.com, Yair Hershko , Shyam Kaushik , Danny Shavit Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" Message-ID: <20150707000911.GT7943@dastard> X-ASG-Orig-Subj: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" References: <20150629222651.GG7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436227793 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_SA210e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20515 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC5_SA210e Custom Rule SA210e On Mon, Jul 06, 2015 at 08:47:56PM +0200, Alex Lyakas wrote: > Hi Dave, Brian, > > [Compendium reply, trimmed and re-ordered] > >I suppose that might never trigger due to the sync mount > >option. What's the reason for using that one? > > >I'm afraid to ask why, but that is likely your problem - synchronous > >out of order writes from the NFS client will fragment the file > >badly because it defeats both delayed allocation and speculative > >preallocation because there is nothing to trigger the "don't remove > >speculatieve prealloc on file close" heuristic used to avoid > >fragmentation caused by out of order NFS writes.... > The main reason for using "sync" mount option is to avoid data loss > in the case of crash. > I did some experiments without this mount option, and indeed I see > that same NFS workload results in lower fragmentation, especially > for large files. However, since we do not consider at the moment > removing the "sync" mount option, I did not debug further why it > happens. The NFS protocol handles server side data loss in the event of a server crash. i.e. the client side commit is an "fsync" to the server, and until the server responds with a success to the client commit RPC the client side will continue to retry sending the data to the server. For the persepctive of metadata (i.e. directory entries) the use of the "dirsync" mount option is sufficient for HA failover servers to work correctly as it ensures that directory structure changes are always committed to disk before the RPC response is sent back to the client. i.e. the "sync" mount option doesn't actually improve data integrity of an NFS server when you look at the end-to-end NFS protocol handling of async write data.... > >NFS is likely resulting in out of order writes.... > Yes, Dave, this appeared to be our issue. Ok, no big surprise that fragmentation is happening... > However, Dave, I am still not comfortable with XFS insisting on > continuous space for the data fork in kmem_alloc. Consider, for > example, Brian's script. Nothing stops the user from doing that. > Another example could be strided 4k NFS writes coming out of order. > For these cases, speculative preallocation will not help, as we will > receive a highly fragmented file with holes. Except that users and applications don't tend to do this because other filesystem barf on such fragmented files long before XFS does. Hence, in general, application and users take steps to avoid this sort of braindead allocation. And then, of course, there is xfs_fsr... We had this discussion ~10 years ago when this code was originally written and it was decided that the complexity of implementing a fully generic, scalable solution was not worth the effort as files with massive numbers of extents cause other performance problems long before memory allocation should be an issue. That said, there is now generic infrastructure that makes the complexity less of a problem, and I do have some patches that I've been working on in the background to move to a generic structure. Other filesystems like ext4, btrfs and f2fs have moved to extremely fine-grained extent trees, but they have been causing all sorts of interesting scalablity and memory reclaim problems so I don't think we want to go that way. However, the problem we actually need to solve is not having a fine-grained extent tree, but that of demand paging of in-memory extent lists so that we don't need to keep millions of extents in memory at a time. That's where we need to go with this, and I have some early, incomplete patches that move towards a btree based structure for doing this.... > Another example, Dave, can you please look at the stack trace in > [1]. (It doesn't make much sense, but this is what we got). Could > something like this happen: > - VFS tells XFS to unlink an inode > - XFS tries to reallocate the extents fork via xfs_inactive path > - there is no continuous memory, so kernel (somehow) wants to evict > the same inode, but cannot lock it due to XFS already holding the > lock??? Simply not possible. Memory reclaim can't evict an inode that has an active reference count. Also, unlinked inodes never get evicted from memory reclaim - the final inode reference release will do the reclaim, and that always occurs in a process context of some kind.... > [454509.864025] [] ? xfs_fs_evict_inode+0x93/0x100 [xfs] > [454509.864025] [] ? evict+0xc0/0x1d0 > [454509.864025] [] ? iput_final+0xe2/0x170 > [454509.864025] [] ? iput+0x3e/0x50 > [454509.864025] [] ? dentry_unlink_inode+0xd8/0x110 > [454509.864025] [] ? d_delete+0xbe/0xd0 > [454509.864025] [] ? vfs_unlink.part.27+0xde/0xf0 > [454509.864025] [] ? vfs_unlink+0x3c/0x60 > [454509.864025] [] ? nfsd_unlink+0x183/0x230 [nfsd] > [454509.864025] [] ? nfsd4_remove+0x6d/0x130 [nfsd] As you can see here. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jul 6 19:19:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5CC7C7F50 for ; Mon, 6 Jul 2015 19:19:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 459078F8054 for ; Mon, 6 Jul 2015 17:19:55 -0700 (PDT) X-ASG-Debug-ID: 1436228389-04cb6c209db1ab0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id y6JScHNyEcZ2Jj7b for ; Mon, 06 Jul 2015 17:19:49 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CyCABPGptVPMtrLHlCGoMSVGCCUahHDAEBAQEBAQaUJoVvBAICgT9NAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDGAkaCw8FJQMHGhOILQ46ymYBAQgCIBiGBYUuhDhOB4QrBZQVhGKHBYE7hBWIOYpOgmOBUCwxAYEEgUYBAQE Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail06.adl6.internode.on.net with ESMTP; 07 Jul 2015 09:49:30 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCGbE-0006Sw-Ru; Tue, 07 Jul 2015 10:19:00 +1000 Date: Tue, 7 Jul 2015 10:19:00 +1000 From: Dave Chinner To: Rasmus Borup Hansen Cc: xfs@oss.sgi.com Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Message-ID: <20150707001900.GU7943@dastard> X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> <20150703235500.GR7943@dastard> <0F9CF77D-1DA5-41DD-87AA-7F4109F08EFB@intomics.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0F9CF77D-1DA5-41DD-87AA-7F4109F08EFB@intomics.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436228389 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20517 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Mon, Jul 06, 2015 at 01:08:52PM +0200, Rasmus Borup Hansen wrote: > I've made a metadump and I'm running another xfs_repair, but given > that the first metadump is 132 GB, will you still be interested in > looking at the dumps? That's significantly larger than my monthly download quota. How big is it once you compress it? Also, because of the size of the metadump, I'll need some context about the hardware it is running on. Can you you please also provide the information in: http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F so I have a better idea of environment the problem is showing up in. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jul 6 19:29:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F19C07F50 for ; Mon, 6 Jul 2015 19:29:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D12AE304053 for ; Mon, 6 Jul 2015 17:29:53 -0700 (PDT) X-ASG-Debug-ID: 1436228991-04cbb050cfa9f40001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id NjrHlKkdkvUMBpbl for ; Mon, 06 Jul 2015 17:29:51 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CjCACdHJtVPMtrLHlcgxKBNIJRg3ykVwEBAQEBAQaaFQQCAoE/TQEBAQEBAQcBAQEBQT+EIwEBAQMBOhwjBQsIAxgJJQ8FJQMHGhOIJgfLMwEBCAIgGIYFhS6FBgeEKwWUFYtngTuEFY8qg12EMywxgksBAQE Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail06.adl6.internode.on.net with ESMTP; 07 Jul 2015 09:54:31 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCGgY-0006TT-Pg; Tue, 07 Jul 2015 10:24:30 +1000 Date: Tue, 7 Jul 2015 10:24:30 +1000 From: Dave Chinner To: Rakesh Patel Cc: xfs@oss.sgi.com Subject: Re: regarding journaling mode Message-ID: <20150707002430.GV7943@dastard> X-ASG-Orig-Subj: Re: regarding journaling mode References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436228991 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20518 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 06, 2015 at 11:38:32AM +0530, Rakesh Patel wrote: > Hi, > > I come to know XFS is using writeback journaling mode. Can you explain how you came to that conclusion? > As per the > journaling guide, writeback is unsafe which does not preserve data and > metadata write synchronization. What journalling guide would that be? Please quote your sources when asking questions. > I really want to know reason behind to choose writeback mode for journaling > in XFS. Metadata updates after data IO completion are used instead of ordering data writeback operations through the journal. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jul 6 19:45:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 39F1E7CBF for ; Mon, 6 Jul 2015 19:45:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 190E48F8052 for ; Mon, 6 Jul 2015 17:45:43 -0700 (PDT) X-ASG-Debug-ID: 1436229936-04cb6c209eb2050001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id DWerotRS8sD67jyY for ; Mon, 06 Jul 2015 17:45:36 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D7CAAoIJtVPMtrLHlcgxKBNIJRg3ykVwEBAQEBAQaaFQICAQECgUBNAQEBAQEBBwEBAQFBP4QkAQEEJxMcIxAIAw4KCSUPBSUDBxoTFIgZyzwBAQEHAgEfGIYFhS6FBgeEKwWUFYlEgiOBT5cIgQmDKiwxgksBAQE Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail06.adl6.internode.on.net with ESMTP; 07 Jul 2015 10:05:43 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCGrO-0006Um-E3; Tue, 07 Jul 2015 10:35:42 +1000 Date: Tue, 7 Jul 2015 10:35:42 +1000 From: Dave Chinner To: Alex Gorbachev Cc: xfs@oss.sgi.com Subject: Re: Failing XFS filesystem underlying Ceph OSDs Message-ID: <20150707003542.GW7943@dastard> X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs References: <20150703235141.GQ7943@dastard> <20150704233802.GS7943@dastard> <20150705232443.GA3902@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436229936 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20517 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 06, 2015 at 03:20:19PM -0400, Alex Gorbachev wrote: > On Sun, Jul 5, 2015 at 7:24 PM, Dave Chinner wrote: > > On Sun, Jul 05, 2015 at 12:25:47AM -0400, Alex Gorbachev wrote: > > > > > sysctl vm.swappiness=20 (can probably be 1 as per article) > > > > > > > > > > sysctl vm.min_free_kbytes=262144 > > > > > > [...] > > > > > > We have experienced the problem in various guises with kernels 3.14, > > 3.19, > > > 4.1-rc2 and now 4.1, so it's not new to us, just different error stack. > > > Below are some other stack dumps of what manifested as the same error. > > > > > > [] schedule+0x29/0x70 > > > [] _xfs_log_force+0x187/0x280 [xfs] > > > [] ? try_to_wake_up+0x2a0/0x2a0 > > > [] xfs_log_force+0x39/0xc0 [xfs] > > > [] xfsaild_push+0x552/0x5a0 [xfs] > > > [] ? schedule_timeout+0x124/0x210 > > > [] xfsaild+0x9f/0x140 [xfs] > > > [] ? xfsaild_push+0x5a0/0x5a0 [xfs] > > > [] kthread+0xc9/0xe0 > > > [] ? flush_kthread_worker+0x90/0x90 > > > [] ret_from_fork+0x58/0x90 > > > [] ? flush_kthread_worker+0x90/0x90 > > > INFO: task xfsaild/sdg1:2606 blocked for more than 120 seconds. > > > Not tainted 3.19.4-031904-generic #201504131440 > > > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this > > message. > > > > That's indicative of IO completion problems, but not a crash. > > > > > BUG: unable to handle kernel NULL pointer dereference at > > (null) > > > IP: [] xfs_count_page_state+0x3f/0x70 [xfs] > > .... > > > [] xfs_vm_releasepage+0x40/0x120 [xfs] > > > [] try_to_release_page+0x32/0x50 > > > [] shrink_page_list+0x69d/0x720 > > > [] shrink_inactive_list+0x1dd/0x5d0 > > .... > > > > Again, this is indicative of a page cache issue: a page without > > buffers has been passed to xfs_vm_releasepage(), which implies the > > page flags are not correct. i.e PAGE_FLAGS_PRIVATE is set but > > page->private is null... > > > > Again, this is unlikely to be an XFS issue. > > > > Sorry for my ignorance, but would this likely come from Ceph code or a > hardware issue of some kind, such as a disk drive? I have reached out to > RedHat and Ceph community on that as well. More likely a kernel bug somewhere in the page cache or memory reclaim paths. The issue is that we only notice the problem long after it has occurred. i.e. when XFS goes to tear down the page it has been handed, the page is already in a bad state and so it doesn't really tell us anything about the cause of the problem. Realisticaly, we need a script that reproduces the problem (that doesn't require a Ceph cluster) to be able to isolate the cause. In the mean time, you can always try running CONFIG_XFS_WARN=y to see if that catches problems earlier, and you might also want to do things like turn on memory poisoning and other kernel debugging options to try to isolate the cause of the issue.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jul 6 19:59:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3C9BC7CBF for ; Mon, 6 Jul 2015 19:59:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 17D1E8F8052 for ; Mon, 6 Jul 2015 17:59:11 -0700 (PDT) X-ASG-Debug-ID: 1436230748-04cb6c209cb22b0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id GHs4GnuTcOZrHR2r for ; Mon, 06 Jul 2015 17:59:08 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D8CABuI5tVPMtrLHlcgxKBNIJRg3ykVwEBAQEBAQaaFQICAQECgUFNAQEBAQEBBwEBAQFBP4QjAQEBAwEnExwjBQsIAw4KCSUPBSUDBxoTiCYHyyYBAQEHAgEfGIYFhS6ENwZJB4QrBZQVi2eBO4QVgw+HcYgHgQmBKRyBZSwxgQQBAQIcB4EgAQEB Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail06.adl6.internode.on.net with ESMTP; 07 Jul 2015 10:23:33 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCH8d-0006We-US; Tue, 07 Jul 2015 10:53:31 +1000 Date: Tue, 7 Jul 2015 10:53:31 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Message-ID: <20150707005331.GX7943@dastard> X-ASG-Orig-Subj: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery References: <1436207194-35671-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436207194-35671-1-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436230748 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20518 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 06, 2015 at 02:26:34PM -0400, Brian Foster wrote: > Persistent memory without block translation table (btt) support provides > a block device suitable for filesystems, but does not provide the sector > write atomicity guarantees typical of block storage. This is a problem > for log recovery on XFS. The on-disk log record structure already > includes a CRC and thus can detect torn writes. The problem is that such > a failure isn't detected until log recovery is already in progress and > therefore results in a hard error and mount failure. > > Update the log head/tail discovery algorithm to detect and trim off a > torn log record from the end (from a recovery perspective) of the log. > Once the head is determined from the log cycle information and we have a > pointer to the last record to be recovered, read and verify the CRC of > said record before we initiate actual recovery. If CRC verification > fails, assume the record is torn and reset the head to the start of the > torn record. We reverse seek for the previous log record header from > that point and attempt recovery up through that record. > > Signed-off-by: Brian Foster > --- > > Hi all, > > As far as I'm aware, the torn log write problem is the only major gap we > have to safely run XFS w/ crc=1 on non-btt pmem devices. This is an RFC > to attempt to address that problem. I used a custom hack to actually > reproduce such torn writes on a ramdisk to primarily help me understand > the problem, but I was able to use the same hack to sanity test this > approach under the basic corruption case (this is generally untested, > otherwise). > > This could obviously use some cleanup, but is the approach sane? I'm > curious if this should also be tied to DAX enablement so as to not > interfere with unrelated corruption handling (IOW, with what logic is it > reasonable enough to assume a crc failure of the final record == torn > write?). I'm also wondering if this should be tied to a new mount option > rather than make this behavior implicit. Any other thoughts? Seems good fom a conceptual point of view - the fact that we CRC all log writes now means this will work on both v4 and v5 filesystems. The CRC validation needs to be done on more than just the head record. We can have up to 8 IOs in flight at the time power goes down, so we need to validate the CRCs for at least the previous 8 log writes... We also need to validate the tail record, as we could be in a situation where the head is overwriting the tail and it tears and so by discarding the head record we discard the tail update and so now the tail record is also corrupt. In that case, we need to abort recovery because the log is unrecoverable. Also: should we zero out the torn sections before starting recovery, like we do with the call to xlog_clear_stale_blocks() later in xlog_find_tail()? > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 01dd228..6015d02 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -62,6 +62,9 @@ xlog_recover_check_summary( > #define xlog_recover_check_summary(log) > #endif > > +STATIC int > +xlog_validate_logrec_crc(struct xlog *, xfs_daddr_t); > + Put the function here, don't use forward declarations.... > /* > * This structure is used during recovery to record the buf log items which > * have been canceled and should not be replayed. > @@ -898,6 +901,7 @@ xlog_find_tail( > xfs_daddr_t after_umount_blk; > xfs_lsn_t tail_lsn; > int hblks; > + bool skipped_last = false; > > found = 0; > > @@ -925,6 +929,7 @@ xlog_find_tail( > /* > * Search backwards looking for log record header block > */ > +retry: > ASSERT(*head_blk < INT_MAX); > for (i = (int)(*head_blk) - 1; i >= 0; i--) { > error = xlog_bread(log, i, 1, bp, &offset); > @@ -962,6 +967,31 @@ xlog_find_tail( > return -EIO; > } > > + /* > + * Now that we think we've found the log head, we have to check that the > + * last log record wasn't torn when written out to the log. This is > + * possible on devices without sector atomicity guarantees (e.g., pmem). > + * > + * Verify the CRC of the last log record that was written. If the CRC is > + * invalid, point the head at the start of this record and retry the > + * above backwards log record header search. We'll try the recovery up > + * through this record. Note that we only walk backwards once since this > + * is only intended to handle the torn write on power loss case. > + * > + * TODO: mount option? tied to DAX? > + */ Always do it - if any hardware is tearing writes, then we should handle it sanely. > + if (xfs_sb_version_hascrc(&log->l_mp->m_sb) && !skipped_last) { No need to be tied to xfs_sb_version_hascrc(), even v4 filesystems now have a CRC calculated on the log. Only skip it on v4 filesystes when the h_crc field is zero (indicating the log came from an old kernel that didn't calculate CRCs). > + error = xlog_validate_logrec_crc(log, i); > + if (error == -EFSBADCRC) { > + skipped_last = true; > + *head_blk = i; > + xfs_warn(log->l_mp, > + "WARNING: Torn write? Attempting recovery up to previous record."); > + goto retry; > + } else if (error) > + goto done; > + } Better to do a loop and factor the code a bit? > + > /* find blk_no of tail of log */ > rhead = (xlog_rec_header_t *)offset; > *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn)); > @@ -4607,6 +4637,63 @@ xlog_recover_finish( > return 0; > } > > +/* > + * Read and CRC validate a full log record. This is used to detect torn log > + * writes during head/tail discovery. > + */ > +STATIC int > +xlog_validate_logrec_crc( > + struct xlog *log, > + xfs_daddr_t rec_blk) > +{ > + int hblks, bblks; > + struct xlog_rec_header *rhead; > + struct xfs_buf *hbp = NULL; > + struct xfs_buf *dbp = NULL; > + int error; > + char *offset; > + > + hblks = 1; /* XXX */ > + > + /* read and validate the log record header */ > + hbp = xlog_get_bp(log, 1); > + if (!hbp) > + return -ENOMEM; > + error = xlog_bread(log, rec_blk, hblks, hbp, &offset); > + if (error) > + goto out; > + > + rhead = (struct xlog_rec_header *) offset; > + > + error = xlog_valid_rec_header(log, rhead, rec_blk); > + if (error) > + goto out; > + > + /* read the full record and verify the CRC */ > + /* XXX: factor out from do_recovery_pass() ? */ Yes, please do ;) > + dbp = xlog_get_bp(log, BTOBB(be32_to_cpu(rhead->h_size))); > + if (!dbp) > + goto out; > + > + bblks = (int)BTOBB(be32_to_cpu(rhead->h_len)); > + error = xlog_bread(log, rec_blk+hblks, bblks, dbp, &offset); > + if (error) > + goto out; > + > + /* > + * If the CRC validation fails, convert the return code so the caller > + * can distinguish from unrelated errors. > + */ > + error = xlog_unpack_data_crc(rhead, offset, log); > + if (error) > + error = -EFSBADCRC; Note that this will only return an error on v5 filesystems so some changes will be needed here to handle v4 filesystems. It will also log a CRC mismatch error, so perhaps we want to make the error reporting in this case a little bit less noisy.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From patelrakeshcomp@gmail.com Mon Jul 6 21:51:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ECEA97F4E for ; Mon, 6 Jul 2015 21:51:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D94BA304066 for ; Mon, 6 Jul 2015 19:51:29 -0700 (PDT) X-ASG-Debug-ID: 1436237484-04cb6c209fb4730001-NocioJ Received: from mail-pa0-f41.google.com (mail-pa0-f41.google.com [209.85.220.41]) by cuda.sgi.com with ESMTP id Dn29RHWagK9d3tBt (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 Jul 2015 19:51:25 -0700 (PDT) X-Barracuda-Envelope-From: patelrakeshcomp@gmail.com Received: by pacws9 with SMTP id ws9so106387615pac.0 for ; Mon, 06 Jul 2015 19:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:mime-version:to:cc:from:subject:date:in-reply-to :references:content-type; bh=mhj8xlvC9qQ8AhFQqAlV4Um1FwC3tsw6aOwh1r9hhEI=; b=aVmLiNEOukWwXF/TLGS92sOpZGQIQgvCEpzUsmC84SaMAioZCIXss080KJrC/KjV2a SeFcaRQ6OUDTf6b11uGBX+Sp7U9raDxa/wvevNuI9HkclX2JeTW4b7ym4WNp6zZoB9xy vKj8n72dwE3noika4qmExNWnuHTa7eMQ2fBsmKyaJy8e6Psmt2wcigPVTF2CaiDb8qLN rfO3lmWJ2xIFpNHH7dAwrvRjSzFsQmoZY2KTgYOev2erc44EnTMLOBOtXVJgAgWzvhwX fov2DQdXrybtA6W4cuBJy/rfBwGiISkG4ug5S4VjIow6V8NdLG1/tkrsKIJdjWryusSf Mj0A== X-Received: by 10.70.102.11 with SMTP id fk11mr3880135pdb.144.1436237484267; Mon, 06 Jul 2015 19:51:24 -0700 (PDT) Received: from [192.168.0.105] ([113.193.129.45]) by mx.google.com with ESMTPSA id vy6sm19789401pbc.72.2015.07.06.19.51.22 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 06 Jul 2015 19:51:23 -0700 (PDT) Message-ID: <559b3eab.46f0440a.bad8e.7195@mx.google.com> MIME-Version: 1.0 To: Dave Chinner Cc: From: rakesh patel Subject: RE: regarding journaling mode Date: Tue, 7 Jul 2015 08:21:16 +0530 X-ASG-Orig-Subj: RE: regarding journaling mode In-Reply-To: <20150707002430.GV7943@dastard> References: <20150707002430.GV7943@dastard> Content-Type: multipart/alternative; boundary="_5C4CE296-BE70-44B1-9754-48BEBA71448B_" X-Barracuda-Connect: mail-pa0-f41.google.com[209.85.220.41] X-Barracuda-Start-Time: 1436237484 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20520 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --_5C4CE296-BE70-44B1-9754-48BEBA71448B_ Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" How metadata is committed only after data? Is there any other file system f= eature? Because write back mode does not preserve it? Rakesh -----Original Message----- From: "Dave Chinner" Sent: =E2=80=8E07-=E2=80=8E07-=E2=80=8E2015 05:59 To: "Rakesh Patel" Cc: "xfs@oss.sgi.com" Subject: Re: regarding journaling mode On Mon, Jul 06, 2015 at 11:38:32AM +0530, Rakesh Patel wrote: > Hi, >=20 > I come to know XFS is using writeback journaling mode. Can you explain how you came to that conclusion? > As per the > journaling guide, writeback is unsafe which does not preserve data and > metadata write synchronization. What journalling guide would that be? Please quote your sources when asking questions. > I really want to know reason behind to choose writeback mode for journali= ng > in XFS. Metadata updates after data IO completion are used instead of ordering data writeback operations through the journal. Cheers, Dave. --=20 Dave Chinner david@fromorbit.com --_5C4CE296-BE70-44B1-9754-48BEBA71448B_ Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="utf-8"
How metadata is committed only after data? Is there any o= ther file system feature? Because write back mode does not preserve it?
=
Rakesh

From: Dave Chinner
Sent: =E2=80=8E07-= =E2=80=8E07-=E2=80=8E2015 05:59
To: Rakesh Patel
Cc: xfs@oss.sgi.com
Subject: Re: = regarding journaling mode

On Mon, Jul 06, 2015 at 11:38= :32AM +0530, Rakesh Patel wrote:
> Hi,
>
> I come to kno= w XFS is using writeback journaling mode.

Can you explain how you ca= me to that conclusion?

> As per the
> journaling guide, wri= teback is unsafe which does not preserve data and
> metadata write sy= nchronization.

What journalling guide would that be? Please quote yo= ur sources when
asking questions.

> I really want to know reas= on behind to choose writeback mode for journaling
> in XFS.

Me= tadata updates after data IO completion are used instead of
ordering dat= a writeback operations through the journal.

Cheers,

Dave.
= --
Dave Chinner
david@fromorbit.com
= --_5C4CE296-BE70-44B1-9754-48BEBA71448B_-- From BATV+5e7869951bb7199ed7bf+4335+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 04:05:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B7D857F37 for ; Tue, 7 Jul 2015 04:05:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A49C5304066 for ; Tue, 7 Jul 2015 02:05:14 -0700 (PDT) X-ASG-Debug-ID: 1436259912-04cbb050d0b2270001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id ZSlDOAO01n0VwUaJ (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 07 Jul 2015 02:05:13 -0700 (PDT) X-Barracuda-Envelope-From: BATV+5e7869951bb7199ed7bf+4335+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZCOoR-0007xx-6G; Tue, 07 Jul 2015 09:05:11 +0000 Date: Tue, 7 Jul 2015 02:05:11 -0700 From: Christoph Hellwig To: Dave Chinner Cc: Alex Lyakas , Danny Shavit , bfoster@redhat.com, Yair Hershko , Shyam Kaushik , xfs@oss.sgi.com Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" Message-ID: <20150707090511.GA21863@infradead.org> X-ASG-Orig-Subj: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" References: <20150629222651.GG7943@dastard> <20150707000911.GT7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150707000911.GT7943@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1436259913 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20526 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Tue, Jul 07, 2015 at 10:09:11AM +1000, Dave Chinner wrote: > server crash. i.e. the client side commit is an "fsync" to the > server, and until the server responds with a success to the client > commit RPC the client side will continue to retry sending the data > to the server. > > For the persepctive of metadata (i.e. directory entries) the use of > the "dirsync" mount option is sufficient for HA failover servers to > work correctly as it ensures that directory structure changes are always > committed to disk before the RPC response is sent back to the > client. > > i.e. the "sync" mount option doesn't actually improve data integrity > of an NFS server when you look at the end-to-end NFS protocol > handling of async write data.... You don't need dirsync either. NFS does the right sync usin the commit_metadata export operation without using that big hammer. From gavin.guo@canonical.com Tue Jul 7 04:29:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E7A377F37 for ; Tue, 7 Jul 2015 04:29:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C3A84304032 for ; Tue, 7 Jul 2015 02:29:46 -0700 (PDT) X-ASG-Debug-ID: 1436261384-04bdf00789b8480001-NocioJ Received: from mail-yk0-f178.google.com (mail-yk0-f178.google.com [209.85.160.178]) by cuda.sgi.com with ESMTP id FL9Ofle7EDokegFu (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 07 Jul 2015 02:29:44 -0700 (PDT) X-Barracuda-Envelope-From: gavin.guo@canonical.com X-Barracuda-Apparent-Source-IP: 209.85.160.178 Received: by ykeo3 with SMTP id o3so51804075yke.0 for ; Tue, 07 Jul 2015 02:29:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=mTg618DglmBF3aw3A1yHlahVKSrWjImjdzrckQ7fQUE=; b=kNBomZB6q8+SSjThRKrWCrY2tmQN580yl0H4EZuyWm7mvhwjLT4qainkcBOSu6xN1Y b1hYBmTht37h4ZODgScn+pbCUJvXHX3uY/DReXZNfBQmeyoQ7wDgYTQZ1vpteqHV6FIH QJHevrSte2qfexI8eY9yTvq/WPa9Gt2L7GDlNs+C0Kn5FUTxA2lIcwfOP1RUobcgeB9A 6gUkOsZSqXD7KkCuHZlaSBZG77/BSVKmGjTNT58pTn81AFTLLVdJXWzq7oCj2jCE7M3d wTf/ZmAQ8XPR4gVJ4qUdNfz4A0Spmnxt5HxXlt7E8cfZa3W4DwaPH72vM3bx1Bp5IUmx FCBA== X-Gm-Message-State: ALoCoQm9DMDfvfZWvjs+JcdHVxssnOaefllkTLqvZpblXgiP8AhU8uV+tS61oKyQAuNTBLVlg6JP MIME-Version: 1.0 X-Received: by 10.129.116.134 with SMTP id p128mr3757922ywc.1.1436261383924; Tue, 07 Jul 2015 02:29:43 -0700 (PDT) Received: by 10.37.58.3 with HTTP; Tue, 7 Jul 2015 02:29:43 -0700 (PDT) Date: Tue, 7 Jul 2015 17:29:43 +0800 Message-ID: Subject: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push From: Gavin Guo X-ASG-Orig-Subj: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push To: xfs@oss.sgi.com, linux-kernel Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-yk0-f178.google.com[209.85.160.178] X-Barracuda-Start-Time: 1436261384 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20527 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi all, Recently, we observed that there is the error message in Ubuntu-3.13.0-48.80: "XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250)" repeatedly shows in the dmesg. Temporarily, our workaround is to tune the parameters, such as, vfs_cache_pressure, min_free_kbytes, and dirty_ratio. And we also found that there are different error messages regarding the hung tasks which happened in xfs_log_commit_cil and xlog_cil_push. The log is available at: http://paste.ubuntu.com/11835007/ The following link seems the same problem we suffered: XFS hangs with XFS: possible memory allocation deadlock in kmem_alloc http://oss.sgi.com/archives/xfs/2015-03/msg00172.html I read the mail and found that there might be some modification regarding to move the memory allocation outside the ctx lock. And I also read the latest patch from February of 2015 to see if there is any new change about that. Unfortunately, I didn't find anything regarding the change (may be I'm not familiar with the XFS, so didn't find the commit). If it's possible for someone who is familiar with the code to point out the commits related to the bug if already exist or any status about the plan. Thanks, Gavin Guo From bfoster@redhat.com Tue Jul 7 08:10:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CB8CE7CBF for ; Tue, 7 Jul 2015 08:10:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 87BAC30406A for ; Tue, 7 Jul 2015 06:10:48 -0700 (PDT) X-ASG-Debug-ID: 1436274646-04bdf00787be550001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id R7ksw07YBSCm9QxF (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Jul 2015 06:10:46 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 00C4A8F264; Tue, 7 Jul 2015 13:10:45 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t67DAj3E026326; Tue, 7 Jul 2015 09:10:45 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 7F93F123029; Tue, 7 Jul 2015 09:10:44 -0400 (EDT) Date: Tue, 7 Jul 2015 09:10:44 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Message-ID: <20150707131044.GC37156@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery References: <1436207194-35671-1-git-send-email-bfoster@redhat.com> <20150707005331.GX7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150707005331.GX7943@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436274646 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 07, 2015 at 10:53:31AM +1000, Dave Chinner wrote: > On Mon, Jul 06, 2015 at 02:26:34PM -0400, Brian Foster wrote: > > Persistent memory without block translation table (btt) support provides > > a block device suitable for filesystems, but does not provide the sector > > write atomicity guarantees typical of block storage. This is a problem > > for log recovery on XFS. The on-disk log record structure already > > includes a CRC and thus can detect torn writes. The problem is that such > > a failure isn't detected until log recovery is already in progress and > > therefore results in a hard error and mount failure. > > > > Update the log head/tail discovery algorithm to detect and trim off a > > torn log record from the end (from a recovery perspective) of the log. > > Once the head is determined from the log cycle information and we have a > > pointer to the last record to be recovered, read and verify the CRC of > > said record before we initiate actual recovery. If CRC verification > > fails, assume the record is torn and reset the head to the start of the > > torn record. We reverse seek for the previous log record header from > > that point and attempt recovery up through that record. > > > > Signed-off-by: Brian Foster > > --- > > > > Hi all, > > > > As far as I'm aware, the torn log write problem is the only major gap we > > have to safely run XFS w/ crc=1 on non-btt pmem devices. This is an RFC > > to attempt to address that problem. I used a custom hack to actually > > reproduce such torn writes on a ramdisk to primarily help me understand > > the problem, but I was able to use the same hack to sanity test this > > approach under the basic corruption case (this is generally untested, > > otherwise). > > > > This could obviously use some cleanup, but is the approach sane? I'm > > curious if this should also be tied to DAX enablement so as to not > > interfere with unrelated corruption handling (IOW, with what logic is it > > reasonable enough to assume a crc failure of the final record == torn > > write?). I'm also wondering if this should be tied to a new mount option > > rather than make this behavior implicit. Any other thoughts? > > Seems good fom a conceptual point of view - the fact that we CRC all > log writes now means this will work on both v4 and v5 filesystems. > Indeed, though v4 currently doesn't fail log recovery on CRC failure. It just yells about it and attempts to continue. This seems like it could broaden the scope of this a bit, though somewhat unrelated to the original torn write problem (more on this at the end). > The CRC validation needs to be done on more than just the head > record. We can have up to 8 IOs in flight at the time power goes > down, so we need to validate the CRCs for at least the previous 8 > log writes... > Interesting, Ok.. so I take it that the recovery process should be to examine the last N records and recover only up to the point of the last correctly written record. I suppose this can be handled by backing up a fixed size from the last record header that is discovered by the code as is today. > We also need to validate the tail record, as we could be in a > situation where the head is overwriting the tail and it tears and > so by discarding the head record we discard the tail update and so > now the tail record is also corrupt. In that case, we need to abort > recovery because the log is unrecoverable. > I don't follow here. If the head is overwriting the tail, hasn't the tail been moved forward and all the associated metadata changes written back before that can occur? > Also: should we zero out the torn sections before starting recovery, > like we do with the call to xlog_clear_stale_blocks() later in > xlog_find_tail()? > The thought crossed my mind just from a conservative implementation standpoint, but I didn't think too hard about it for this rfc. It probably makes sense to do something like this. > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > > index 01dd228..6015d02 100644 > > --- a/fs/xfs/xfs_log_recover.c > > +++ b/fs/xfs/xfs_log_recover.c > > @@ -62,6 +62,9 @@ xlog_recover_check_summary( > > #define xlog_recover_check_summary(log) > > #endif > > > > +STATIC int > > +xlog_validate_logrec_crc(struct xlog *, xfs_daddr_t); > > + > > Put the function here, don't use forward declarations.... > Eh, I put the function at the end because it depends on other functions that don't have declarations but would require them if I put it earlier in the file. The implementation will surely change and I'll avoid it if I can, but I'm not sure how likely that is. > > /* > > * This structure is used during recovery to record the buf log items which > > * have been canceled and should not be replayed. > > @@ -898,6 +901,7 @@ xlog_find_tail( > > xfs_daddr_t after_umount_blk; > > xfs_lsn_t tail_lsn; > > int hblks; > > + bool skipped_last = false; > > > > found = 0; > > > > @@ -925,6 +929,7 @@ xlog_find_tail( > > /* > > * Search backwards looking for log record header block > > */ > > +retry: > > ASSERT(*head_blk < INT_MAX); > > for (i = (int)(*head_blk) - 1; i >= 0; i--) { > > error = xlog_bread(log, i, 1, bp, &offset); > > @@ -962,6 +967,31 @@ xlog_find_tail( > > return -EIO; > > } > > > > + /* > > + * Now that we think we've found the log head, we have to check that the > > + * last log record wasn't torn when written out to the log. This is > > + * possible on devices without sector atomicity guarantees (e.g., pmem). > > + * > > + * Verify the CRC of the last log record that was written. If the CRC is > > + * invalid, point the head at the start of this record and retry the > > + * above backwards log record header search. We'll try the recovery up > > + * through this record. Note that we only walk backwards once since this > > + * is only intended to handle the torn write on power loss case. > > + * > > + * TODO: mount option? tied to DAX? > > + */ > > Always do it - if any hardware is tearing writes, then we should > handle it sanely. > Ok. > > + if (xfs_sb_version_hascrc(&log->l_mp->m_sb) && !skipped_last) { > > No need to be tied to xfs_sb_version_hascrc(), even v4 filesystems > now have a CRC calculated on the log. Only skip it on v4 filesystes > when the h_crc field is zero (indicating the log came from an old > kernel that didn't calculate CRCs). > Ah, Ok. > > + error = xlog_validate_logrec_crc(log, i); > > + if (error == -EFSBADCRC) { > > + skipped_last = true; > > + *head_blk = i; > > + xfs_warn(log->l_mp, > > + "WARNING: Torn write? Attempting recovery up to previous record."); > > + goto retry; > > + } else if (error) > > + goto done; > > + } > > Better to do a loop and factor the code a bit? > Yeah, I'll have to revisit how this looks given that we'll need to examine multiple records and figure out which one is the last fully written. > > + > > /* find blk_no of tail of log */ > > rhead = (xlog_rec_header_t *)offset; > > *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn)); > > @@ -4607,6 +4637,63 @@ xlog_recover_finish( > > return 0; > > } > > > > +/* > > + * Read and CRC validate a full log record. This is used to detect torn log > > + * writes during head/tail discovery. > > + */ > > +STATIC int > > +xlog_validate_logrec_crc( > > + struct xlog *log, > > + xfs_daddr_t rec_blk) > > +{ > > + int hblks, bblks; > > + struct xlog_rec_header *rhead; > > + struct xfs_buf *hbp = NULL; > > + struct xfs_buf *dbp = NULL; > > + int error; > > + char *offset; > > + > > + hblks = 1; /* XXX */ > > + > > + /* read and validate the log record header */ > > + hbp = xlog_get_bp(log, 1); > > + if (!hbp) > > + return -ENOMEM; > > + error = xlog_bread(log, rec_blk, hblks, hbp, &offset); > > + if (error) > > + goto out; > > + > > + rhead = (struct xlog_rec_header *) offset; > > + > > + error = xlog_valid_rec_header(log, rhead, rec_blk); > > + if (error) > > + goto out; > > + > > + /* read the full record and verify the CRC */ > > + /* XXX: factor out from do_recovery_pass() ? */ > > Yes, please do ;) > This was originally noting that the hblks = 1 above and the below buffer sizing appear to have more complicated logic to get correct in xlog_do_recovery_pass() that I didn't want to fully duplicate here. Given that and the comments from my follow on mail about handling wrapping around the log, it's sounding more like reuse of xlog_do_recovery_pass() with a dummy XLOG_RECOVER_CRCPASS is the better approach. It can skip all real processing of the records beyond the crc verification and it will probably need to learn how to report the starting block of the first record that fails crc verification. > > + dbp = xlog_get_bp(log, BTOBB(be32_to_cpu(rhead->h_size))); > > + if (!dbp) > > + goto out; > > + > > + bblks = (int)BTOBB(be32_to_cpu(rhead->h_len)); > > + error = xlog_bread(log, rec_blk+hblks, bblks, dbp, &offset); > > + if (error) > > + goto out; > > + > > + /* > > + * If the CRC validation fails, convert the return code so the caller > > + * can distinguish from unrelated errors. > > + */ > > + error = xlog_unpack_data_crc(rhead, offset, log); > > + if (error) > > + error = -EFSBADCRC; > > Note that this will only return an error on v5 filesystems so some > changes will be needed here to handle v4 filesystems. It will > also log a CRC mismatch error, so perhaps we want to make the error > reporting in this case a little bit less noisy.... > Yeah, this was tied to the fact that the torn write verification only took place on v5 in this patch. This will require some cleanup if we want to do this unconditionally for all h_crc != 0 log records. Note that this is also a potential behavior change because the v4 logic will attempt to recover the corrupted log records. Finally getting back to the bigger picture... if we do want to do this verification unconditionally, do we want to expand this mechanism further than just targetting torn writes? For example, crc failure towards the end of the log doesn't necessarily mean a torn write. The currently proposed approach is to only validate the last written record(s) and assume crc failure is due to torn writes. Conversely, we do know that a crc failure somewhere in the middle of the dirty log is not a torn write problem. That said and as noted above, we are effectively changing behavior for v4 filesystems and/or those on regular block storage, however. We're also inconsistent depending on precisely where a failure occurs. CRC failure towards the end will now skip the bad and subsequent log records for v4 or v5. Failure earlier in the log might yell and proceed on v4 and hard fail on v5. Do we want to do something like have a generic CRC verification pass across the entire log immediately after the head/tail is discovered and skip everything beyond the first corrupted (for whatever reason) log record (with a warning that the log has been truncated)? That's certainly not as conservative an approach as I was targetting, but it almost seems more logical if we're not going to try and keep this as isolated as possible to torn write handling. The tradeoff is against the v4 brute force recovery, but there might not be any better option for the v5 scenario (xfs_repair -L and lose the entire log anyways..?). Thoughts? Thanks for the feedback, Dave. Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jtulak@redhat.com Tue Jul 7 10:11:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B79E67CBF for ; Tue, 7 Jul 2015 10:11:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A125F8F8037 for ; Tue, 7 Jul 2015 08:11:27 -0700 (PDT) X-ASG-Debug-ID: 1436281882-04cbb050d1bc110001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id EX0YJDPlAcfxQVEL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Jul 2015 08:11:23 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t67FAwiJ024982; Tue, 7 Jul 2015 11:10:58 -0400 Date: Tue, 7 Jul 2015 11:10:58 -0400 (EDT) From: Jan Tulak To: Christoph Hellwig Cc: xfs@oss.sgi.com, sandeen@redhat.com, Dave Chinner Message-ID: <1156743222.24471614.1436281858017.JavaMail.zimbra@redhat.com> In-Reply-To: <20150703151904.GA13839@infradead.org> References: <1629704668.22787354.1435832837879.JavaMail.zimbra@redhat.com> <1435833796-24004-1-git-send-email-jtulak@redhat.com> <20150703151904.GA13839@infradead.org> Subject: Re: [PATCH v2] xfsprogs: blkid is now mandatory MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH v2] xfsprogs: blkid is now mandatory Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.5.32] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: blkid is now mandatory Thread-Index: Gq3vdbCBKs8hNixHUzYLoOK/4+UGuA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1436281883 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20532 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Christoph Hellwig" > > Can you wrap your commit description lines after ~ 75 characters, > please? > Sure. I changed it to ~ 68 by Dave's suggestion. > > > +AC_HAVE_BLKID_TOPO(yes) > > I don't think we'll need an unused argument for AC_HAVE_BLKID_TOPO. Fixed. > > > -Mac OS X Instructions > > -===================== > > Why do you remove this section? > I shouldn't put it into this patch but a standalone one: I tried to build the current version of XFS on OS X (10.10 Yosemite), but so far without a success. (I got to some errors in #defines where I thought I have better things to do.) Neither Macports, nor Homebrew [*] seems to ships XFS... Essentially, even if our docs contain a howto for OS X, it is not working and it looks like no one is using it. So I found this section ready for discarding. :-) Regarding OS X and blkid... Macports contains util-linux with libblkid, so the new dependency shouldn't be breaking the possibility to port it, if anyone wants to try it... [*] Macports and Hombrew - two biggest (AFAIK the only ones who are widely used) software repositories for OS X in Linux/BSD style. Macports are basically a port of BSD's Port. > > > > default: depend $(LTCOMMAND) > > > > -ifneq ($(ENABLE_BLKID),yes) > > -default: $(FSTYP) > > -endif > > - > > include $(BUILDRULES) > > > > -$(FSTYP): > > - @echo " [CC] $@" > > - $(Q)$(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) > > - > > > Please remove fstyp.c and the definition of FSTYP in the Makefile as well. > I assume fstyp.h should go too... Jan -- Jan Tulak jtulak@redhat.com From david@fromorbit.com Tue Jul 7 18:32:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 261257CBF for ; Tue, 7 Jul 2015 18:32:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D805E8F8066 for ; Tue, 7 Jul 2015 16:32:05 -0700 (PDT) X-ASG-Debug-ID: 1436311916-04bdf00789cd0b0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id LH43g3cYaewOV7lg for ; Tue, 07 Jul 2015 16:31:56 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BcDACZYJxVPMtrLHlbgxKBNIZOpGYBAQEBAQEGmhYEAgKBVk0BAQEBAQEHAQEBAUABP4QjAQEBAwEnExwaCQULCAMOCgklDwUlAwcaE4gmB80KAQsgGIYFhS6ENAEBAQZJB4QrBZQYi2iBO4QXgw+Hc4gHgQmBKRyBZSwxgQQBAQIFFweBIAEBAQ Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail04.adl6.internode.on.net with ESMTP; 08 Jul 2015 09:01:55 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCcLC-0000q8-2O; Wed, 08 Jul 2015 09:31:54 +1000 Date: Wed, 8 Jul 2015 09:31:54 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Message-ID: <20150707233153.GY7943@dastard> X-ASG-Orig-Subj: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery References: <1436207194-35671-1-git-send-email-bfoster@redhat.com> <20150707005331.GX7943@dastard> <20150707131044.GC37156@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150707131044.GC37156@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1436311916 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20548 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 07, 2015 at 09:10:44AM -0400, Brian Foster wrote: > On Tue, Jul 07, 2015 at 10:53:31AM +1000, Dave Chinner wrote: > > On Mon, Jul 06, 2015 at 02:26:34PM -0400, Brian Foster wrote: > > > Persistent memory without block translation table (btt) support provides > > > a block device suitable for filesystems, but does not provide the sector > > > write atomicity guarantees typical of block storage. This is a problem > > > for log recovery on XFS. The on-disk log record structure already > > > includes a CRC and thus can detect torn writes. The problem is that such > > > a failure isn't detected until log recovery is already in progress and > > > therefore results in a hard error and mount failure. .... > > The CRC validation needs to be done on more than just the head > > record. We can have up to 8 IOs in flight at the time power goes > > down, so we need to validate the CRCs for at least the previous 8 > > log writes... > > > > Interesting, Ok.. so I take it that the recovery process should be to > examine the last N records and recover only up to the point of the last > correctly written record. I suppose this can be handled by backing up a > fixed size from the last record header that is discovered by the code as > is today. > > > We also need to validate the tail record, as we could be in a > > situation where the head is overwriting the tail and it tears and > > so by discarding the head record we discard the tail update and so > > now the tail record is also corrupt. In that case, we need to abort > > recovery because the log is unrecoverable. > > > > I don't follow here. If the head is overwriting the tail, hasn't the > tail been moved forward and all the associated metadata changes written > back before that can occur? See the comment about having multiple IOs in flight at once. Also, if flushes are not being used (i.e. nobarrier mount option) on storage with volatile write caches, the tail block that the head points to may or may not have been written to disk, hence the need to validate the tail record.... i.e. once we start down the "handle incorrectly written sectors in recovery via CRC validation" path, we need to consider all the different ways they can happen, not just the specific case of pmem-related problems... > > Also: should we zero out the torn sections before starting recovery, > > like we do with the call to xlog_clear_stale_blocks() later in > > xlog_find_tail()? > > The thought crossed my mind just from a conservative implementation > standpoint, but I didn't think too hard about it for this rfc. It > probably makes sense to do something like this. > > > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > > > index 01dd228..6015d02 100644 > > > --- a/fs/xfs/xfs_log_recover.c > > > +++ b/fs/xfs/xfs_log_recover.c > > > @@ -62,6 +62,9 @@ xlog_recover_check_summary( > > > #define xlog_recover_check_summary(log) > > > #endif > > > > > > +STATIC int > > > +xlog_validate_logrec_crc(struct xlog *, xfs_daddr_t); > > > + > > > > Put the function here, don't use forward declarations.... > > > > Eh, I put the function at the end because it depends on other functions > that don't have declarations but would require them if I put it earlier > in the file. The implementation will surely change and I'll avoid it if > I can, but I'm not sure how likely that is. You can move functions around without changing them. ;) As it is, I'm planning to split the log recovery code into two parts (the bit shared with userspace and the bit that is kernel specific) so don't be afraid to move code around... > > > + if (!hbp) > > > + return -ENOMEM; > > > + error = xlog_bread(log, rec_blk, hblks, hbp, &offset); > > > + if (error) > > > + goto out; > > > + > > > + rhead = (struct xlog_rec_header *) offset; > > > + > > > + error = xlog_valid_rec_header(log, rhead, rec_blk); > > > + if (error) > > > + goto out; > > > + > > > + /* read the full record and verify the CRC */ > > > + /* XXX: factor out from do_recovery_pass() ? */ > > > > Yes, please do ;) > > > > This was originally noting that the hblks = 1 above and the below buffer > sizing appear to have more complicated logic to get correct in > xlog_do_recovery_pass() that I didn't want to fully duplicate here. > > Given that and the comments from my follow on mail about handling > wrapping around the log, it's sounding more like reuse of > xlog_do_recovery_pass() with a dummy XLOG_RECOVER_CRCPASS is the better > approach. It can skip all real processing of the records beyond the crc > verification and it will probably need to learn how to report the > starting block of the first record that fails crc verification. We don't really want to add another full pass reading the log if we can avoid it. we already do a bisect to find the head/tail, a pass to find cancelld buffers and then another pass to do the actual recovery. Adding a third pass can is something I'd like to avoid if possible, especially if we have a full 2GB log on a drive that only does 100MB/s.... > > > + > > > + bblks = (int)BTOBB(be32_to_cpu(rhead->h_len)); > > > + error = xlog_bread(log, rec_blk+hblks, bblks, dbp, &offset); > > > + if (error) > > > + goto out; > > > + > > > + /* > > > + * If the CRC validation fails, convert the return code so the caller > > > + * can distinguish from unrelated errors. > > > + */ > > > + error = xlog_unpack_data_crc(rhead, offset, log); > > > + if (error) > > > + error = -EFSBADCRC; > > > > Note that this will only return an error on v5 filesystems so some > > changes will be needed here to handle v4 filesystems. It will > > also log a CRC mismatch error, so perhaps we want to make the error > > reporting in this case a little bit less noisy.... > > > > Yeah, this was tied to the fact that the torn write verification only > took place on v5 in this patch. This will require some cleanup if we > want to do this unconditionally for all h_crc != 0 log records. Note > that this is also a potential behavior change because the v4 logic will > attempt to recover the corrupted log records. Right, but we did that so that we didn't unexpectedly change behaviour of log recovery for v4 filesystems. Given that nobody has reported a problem w.r.t. CRC failures on log recovery on v4 filesystem since that was added, I think it is probably safe to make v4 behave like v5 now and start bailing out of log recovery if there are bad CRCs. > Finally getting back to the bigger picture... if we do want to do this > verification unconditionally, do we want to expand this mechanism > further than just targetting torn writes? For example, crc failure > towards the end of the log doesn't necessarily mean a torn write. The > currently proposed approach is to only validate the last written > record(s) and assume crc failure is due to torn writes. Conversely, we > do know that a crc failure somewhere in the middle of the dirty log is > not a torn write problem. CRC failures are unlikely to begin with. failures in the middle of the log tend to imply deeper problems with the storage medium. Also, it's fine to abort recovery half way through if we come across such problems, so i don't think we need to care about torn writes outside of the region that we expect active writes to be occurring. > That said and as noted above, we are effectively changing behavior for > v4 filesystems and/or those on regular block storage, however. We're > also inconsistent depending on precisely where a failure occurs. CRC > failure towards the end will now skip the bad and subsequent log records > for v4 or v5. Failure earlier in the log might yell and proceed on v4 > and hard fail on v5. Bad records at the head of the log are different to those in the middle. We can't replay past a failure, so a bad record in the middle of the log leaves us with an inconsistent filesystems after recovery aborts. OTOH, trimming the incomplete records at the head to guarantee we end recovery at the last complete checkpoint before a full recovery pass still results in a consistent filesystem when recovery completes.... > Do we want to do something like have a generic CRC verification pass > across the entire log immediately after the head/tail is discovered and > skip everything beyond the first corrupted (for whatever reason) log > record (with a warning that the log has been truncated)? That's exactly how log recovery behaves now - when we abort log recovery due to a verification failure, we've already replayed and written everything up to the corruption. Hence running xfs_repair -L at that point will only have to fix up metadata inconsistnecies in the part of the log that hasn't been replayed. Also, we don't want to continue at that point, because the filesystem is inconsistent. e.g. we can't process unlinked lists, nor can we process EFIs because they are only valid once all the changes in the log have been recovered. xfs_repair is the only option we have after a failed log recovery right now.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jul 7 18:37:50 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 55BBF7F37 for ; Tue, 7 Jul 2015 18:37:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E8340AC005 for ; Tue, 7 Jul 2015 16:37:46 -0700 (PDT) X-ASG-Debug-ID: 1436312264-04bdf0078bcd210001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id xL4wFAT5JnBMp7lV for ; Tue, 07 Jul 2015 16:37:44 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2B2DAC4YZxVPMtrLHlbgxJUYKsoDAEBAQEBAQaUJYVxBAICgVZNAQEBAQEBBwEBAQFAAT+EJAEBBDocIxAIAxgJGgsPBSUDBxoTiC0OzQQBAQgCIBiGBYUugmuBSQEBUAeEKwWUGIRihwaBO0WGYYUrik+CY4FQLDEBgQMJFwSBIwEBAQ Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail04.adl6.internode.on.net with ESMTP; 08 Jul 2015 09:07:43 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCcQp-0000qm-Gl; Wed, 08 Jul 2015 09:37:43 +1000 Date: Wed, 8 Jul 2015 09:37:43 +1000 From: Dave Chinner To: Gavin Guo Cc: xfs@oss.sgi.com, linux-kernel Subject: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push Message-ID: <20150707233743.GZ7943@dastard> X-ASG-Orig-Subj: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1436312264 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20548 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 07, 2015 at 05:29:43PM +0800, Gavin Guo wrote: > Hi all, > > Recently, we observed that there is the error message in > Ubuntu-3.13.0-48.80: > > "XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250)" > > repeatedly shows in the dmesg. Temporarily, our workaround is to tune the > parameters, such as, vfs_cache_pressure, min_free_kbytes, and dirty_ratio. > > And we also found that there are different error messages regarding the > hung tasks which happened in xfs_log_commit_cil and xlog_cil_push. > > The log is available at: http://paste.ubuntu.com/11835007/ > > The following link seems the same problem we suffered: > > XFS hangs with XFS: possible memory allocation deadlock in kmem_alloc > http://oss.sgi.com/archives/xfs/2015-03/msg00172.html > > I read the mail and found that there might be some modification regarding > to move the memory allocation outside the ctx lock. And I also read the > latest patch from February of 2015 to see if there is any new change > about that. Unfortunately, I didn't find anything regarding the change (may > be I'm not familiar with the XFS, so didn't find the commit). If it's > possible for someone who is familiar with the code to point out the commits > related to the bug if already exist or any status about the plan. No commits - the approach I thought we might be able to take to avoid the problem didn't work out. I have another idea of how we might solve the problem, but I haven't ad a chance to prototype it yet. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jul 7 19:09:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 63CB57F4E for ; Tue, 7 Jul 2015 19:09:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id F34BAAC004 for ; Tue, 7 Jul 2015 17:09:13 -0700 (PDT) X-ASG-Debug-ID: 1436314150-04bdf00787cdd40001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id tKIlJU8C50nN2hYV for ; Tue, 07 Jul 2015 17:09:11 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DZDADTaJxVPMtrLHlbgxKBNIZOpGYBAQEBAQEGmhYCAgEBAoFWTQEBAQEBAQcBAQEBQAE/hCQBAQQnExwjEAgDDgYECSUPBSUDBxoTHogPzQABAQEBAQUBAQEBHhiGBYUuhQYHgxeBFAWUGItogTuHJoUrgkiIB4EJgSkcgWUsMYEEJIEjAQEB Received: from ppp121-44-107-203.lns20.syd4.internode.on.net (HELO dastard) ([121.44.107.203]) by ipmail04.adl6.internode.on.net with ESMTP; 08 Jul 2015 09:39:10 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCcvF-0000td-E3; Wed, 08 Jul 2015 10:09:09 +1000 Date: Wed, 8 Jul 2015 10:09:09 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: close xc_cil list_empty() races with cil commit sequence Message-ID: <20150708000909.GA7943@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: close xc_cil list_empty() races with cil commit sequence References: <1435154641-7790-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1435154641-7790-1-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1436314150 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20548 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jun 24, 2015 at 10:04:01AM -0400, Brian Foster wrote: > We have seen somewhat rare reports of the following assert from > xlog_cil_push_background() failing during ltp tests or somewhat > innocuous desktop root fs workloads (e.g., virt operations, initramfs > construction): > > ASSERT(!list_empty(&cil->xc_cil)); > > The reasoning behind the assert is that the transaction has inserted > items to the CIL and hit background push codepath all with > cil->xc_ctx_lock held for reading. This locks out background commit from > emptying the CIL, which acquires the lock for writing. Therefore, the > reasoning is that the items previously inserted in the CIL should still > be present. > > The cil->xc_ctx_lock read lock is not sufficient to protect the xc_cil > list, however, due to how CIL insertion is handled. > xlog_cil_insert_items() inserts and reorders the dirty transaction items > to the tail of the CIL under xc_cil_lock. It uses list_move_tail() to > achieve insertion and reordering in the same block of code. This > function removes and reinserts an item to the tail of the list. If a > transaction commits an item that was already logged and thus already > resides in the CIL, and said item is the sole item on the list, the > removal and reinsertion creates a temporary state where the list is > actually empty. The only way I can see this occurring is that we have to be committing a transaction that modifies the same object as the previous transaction commit that is still running through xfs_log_commit_cil(). e.g. racing timestamp modifications on an inode, and the CIL is empty: thread A thread B lock(inode) lock(inode) xfs_trans_join(inode) xfs_trans_log(inode) xfs_trans_commit(tp) xfs_log_commit_cil() lock(xc_ctx_lock) xfs_trans_free_items() unlock(inode) xfs_trans_join(inode) xfs_trans_log(inode) xfs_trans_commit(tp) xfs_log_commit_cil() lock(xc_ctx_lock) xlog_cil_insert_items() xlog_cil_insert_format_items() xlog_cil_push_background ASSERT(!list_empty(cil)) list_move_tail(item, cil) If that is the race, then the fix appears simple to me: call xlog_cil_push_background() before xfs_trans_free_items() so that we push the CIL before we unlock the items we just added to the CIL. i.e.: thread A thread B lock(inode) lock(inode) xfs_trans_join(inode) xfs_trans_log(inode) xfs_trans_commit(tp) xfs_log_commit_cil() lock(xc_ctx_lock) log_cil_push_background ASSERT(!list_empty(cil)) xfs_trans_free_items() unlock(inode) xfs_trans_join(inode) xfs_trans_log(inode) xfs_trans_commit(tp) xfs_log_commit_cil() lock(xc_ctx_lock) xlog_cil_insert_items() xlog_cil_insert_format_items() list_move_tail(item, cil) > This state is not valid and thus should never be observed by concurrent > transaction commit-side checks in the circumstances outlined above. > Update all of the xc_cil checks to acquire xc_cil_lock before assessing > the state of xc_cil. That will reintroduce the problem of lock contention between the commit and the push sides of the CIL, which the cil/push lock separation was added to solve: commit 4bb928cdb900d0614f4766d5f1ca5bc3844f7656 Author: Dave Chinner Date: Mon Aug 12 20:50:08 2013 +1000 xfs: split the CIL lock The xc_cil_lock is used for two purposes - to protect the CIL itself, and to protect the push/commit state and lists. These are two logically separate structures and operations, so can have their own locks. This means that pushing on the CIL and the commit wait ordering won't contend for a lock with other transactions that are completing concurrently. As the CIL insertion is the hottest path throught eh CIL, this is a big win. Signed-off-by: Dave Chinner Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers Cheers, Dave. -- Dave Chinner david@fromorbit.com From baijuncheng@unitedstack.com Wed Jul 8 02:00:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MISSING_SUBJECT autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D72B87F37 for ; Wed, 8 Jul 2015 02:00:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5A31BAC006 for ; Wed, 8 Jul 2015 00:00:07 -0700 (PDT) X-ASG-Debug-ID: 1436338802-04cb6c209ddc010001-NocioJ Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) by cuda.sgi.com with ESMTP id wK9VjCsuVHTi0hyg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 00:00:04 -0700 (PDT) X-Barracuda-Envelope-From: baijuncheng@unitedstack.com X-Barracuda-Apparent-Source-IP: 54.207.19.206 X-QQ-mid: bizesmtp10t1436338797t856t25 Received: from [172.16.0.123] (unknown [182.48.117.114]) by esmtp4.qq.com (ESMTP) with SMTP id 0 for ; Wed, 08 Jul 2015 14:59:56 +0800 (CST) X-QQ-SSF: 0140000000000010F322000A0000000 X-QQ-FEAT: E2o/bGU4VdVYF9iV6DixePxYsSteXgAGb9Mh0FtglQHhJw04JxolxZ6Dfbwyg cwF2/KokdW98yGQYfs4ogswUGi6wlTc6Zc3Jk0yv5QqhrL4/TF8yODTHvubJHHAS0iVYHoX DPvDPg7oZE0CFQE5wKlE5ewjxt6m+isvwEtWvRCacMX0oa0YlesJTqwzxBosDiOyYpV/qE8 = X-QQ-GoodBg: 2 Message-ID: <559CCA6D.3090601@unitedstack.com> Date: Wed, 08 Jul 2015 14:59:57 +0800 From: juncheng bai User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-Barracuda-Connect: smtpbgbr1.qq.com[54.207.19.206] X-Barracuda-Start-Time: 1436338803 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.29 X-Barracuda-Spam-Status: No, SCORE=1.29 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_SUBJECT, MISSING_SUBJECT_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20555 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 MISSING_SUBJECT Missing Subject: header 1.28 MISSING_SUBJECT_2 Missing Subject: header help From mlin@kernel.org Wed Jul 8 02:02:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 194907F37 for ; Wed, 8 Jul 2015 02:02:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B3A5CAC002 for ; Wed, 8 Jul 2015 00:01:58 -0700 (PDT) X-ASG-Debug-ID: 1436338916-04bdf00788d5630001-NocioJ Received: from mail.kernel.org ([198.145.29.136]) by cuda.sgi.com with ESMTP id yx9NXDAlmTO0zoDT for ; Wed, 08 Jul 2015 00:01:56 -0700 (PDT) X-Barracuda-Envelope-From: mlin@kernel.org X-Barracuda-Apparent-Source-IP: 198.145.29.136 Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D3213207ED; Wed, 8 Jul 2015 07:01:55 +0000 (UTC) Received: from [10.0.0.138] (c-50-185-88-18.hsd1.ca.comcast.net [50.185.88.18]) (using TLSv1.2 with cipher DHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F2A80207E4; Wed, 8 Jul 2015 07:01:54 +0000 (UTC) Message-ID: <1436338913.13729.11.camel@hasee> Subject: xfs_io bmap confused From: Ming Lin X-ASG-Orig-Subj: xfs_io bmap confused To: xfs@oss.sgi.com Cc: Christoph Hellwig Date: Wed, 08 Jul 2015 00:01:53 -0700 Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: UNKNOWN[198.145.29.136] X-Barracuda-Start-Time: 1436338916 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20555 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Hi list, I am testing some direct-io patches. xfs_tests/xfs/080 failed. It's strange. There is no hole in "rwtest.file", but when read it at some offset it returns zero because of hole. root@block:~# xfs_io -c bmap /mnt/test/rwtest.file /mnt/test/rwtest.file: 0: [0..125671]: 160..125831 Then I read at file offset 659456, root@block:~# dd if=/mnt/test/rwtest.file of=tmp.file bs=512 skip=1288 count=1 The code actually goes to below if statements. Any idea what's wrong? 139 static struct bio * 140 do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages, 141 sector_t *last_block_in_bio, struct buffer_head *map_bh, 142 unsigned long *first_logical_block, get_block_t get_block) 143 { .... .... 209 if (!buffer_mapped(map_bh)) { 210 fully_mapped = 0; 211 if (first_hole == blocks_per_page) 212 first_hole = page_block; 213 page_block++; 214 block_in_file++; 215 continue; 216 } .... .... 249 if (first_hole != blocks_per_page) { 250 zero_user_segment(page, first_hole << blkbits, PAGE_CACHE_SIZE); 251 if (first_hole == 0) { 252 SetPageUptodate(page); 253 unlock_page(page); 254 goto out; 255 } Thanks, Ming From baijuncheng@unitedstack.com Wed Jul 8 02:30:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 703477F3F for ; Wed, 8 Jul 2015 02:30:06 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3F3248F8052 for ; Wed, 8 Jul 2015 00:30:02 -0700 (PDT) X-ASG-Debug-ID: 1436340600-04bdf00787d60d0001-NocioJ Received: from smtpbg303.qq.com (smtpbg303.qq.com [184.105.206.26]) by cuda.sgi.com with ESMTP id yrBZOZnG5IvqGdLZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 00:30:00 -0700 (PDT) X-Barracuda-Envelope-From: baijuncheng@unitedstack.com X-Barracuda-Apparent-Source-IP: 184.105.206.26 X-QQ-mid: bizesmtp1t1436340596t089t239 Received: from [172.16.0.123] (unknown [182.48.117.114]) by esmtp4.qq.com (ESMTP) with SMTP id 0 for ; Wed, 08 Jul 2015 15:29:54 +0800 (CST) X-QQ-SSF: 0140000000200010F322B00A0001000 X-QQ-FEAT: 92FxZ2TPvneYWwJb6kAQtFqcfgJqD53cW+Y2aABn4YwlWYbwOcKJuwbHj+jDl yvY0C6ibvwNACl8o7n2FktjruP/eDZN6Thx5Ui0Du6REegWfRckCDxKfNZAwKSEjHTrjxUZ 9Fl6JGHGnOBVceG2F7HiktgOxS20UF5mggZA5S6K4hODHJp+K3zlYIkjU6yZ0StYHfMC11B ExM4B1IlfWYNawLiCsJERsIgicWFliiRZ6dT+vq737znx+4J57sSH X-QQ-GoodBg: 2 Message-ID: <559CD173.5070800@unitedstack.com> Date: Wed, 08 Jul 2015 15:29:55 +0800 From: juncheng bai User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: kmem_alloc hang in xlog_cil_insert_format_items Content-Type: text/plain; charset=utf-8; format=flowed X-ASG-Orig-Subj: kmem_alloc hang in xlog_cil_insert_format_items Content-Transfer-Encoding: 7bit X-QQ-SENDSIZE: 520 X-QQ-FName: F2AD8558021B402C98B21EC0299DF39B X-QQ-LocalIP: 127.0.0.1 X-Barracuda-Connect: smtpbg303.qq.com[184.105.206.26] X-Barracuda-Start-Time: 1436340600 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20556 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, ALL Today, I test xfs to verify kmem_alloc hang in xfs_dir2_block_to_sf in kernel-3.14. My test case: I use three ssd disks to build three xfs filesystems. My mount options: rw,noexec,nodev,noatime,nodiratime,barrier=0,discard,inode64,logbsize=256k,delaylog Each xfs filesystem run a postmark and two fio. postmark parameter: set size 100000 100000000 set location /var/xfs-0/ set seed 900 set number 100000 set subdirectories 5000 set read 40960 65536000 set write 40960 65536000 set transactions 10000 set bias create 40 set bias read 60 run xfs-0-result.txt show fio parameter: fio -directory /var/${1} -rw=randrw -ioengine=libaio -iodepth=128 -size=128M -name=stress_test -numjobs=256 After five hours, the output of warning from xfs: 2015-07-07T23:32:18.230120+00:00 server-69 kernel: XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250 size:32832) 2015-07-07T23:32:18.230131+00:00 server-69 kernel: CPU: 1 PID: 15954 Comm: postmark Tainted: G O 3.12.21-1.el6.x86_64 #1 2015-07-07T23:32:18.230134+00:00 server-69 kernel: Hardware name: Dell Inc. PowerEdge R630/0CNCJW, BIOS 1.2.10 03/09/2015 2015-07-07T23:32:18.230147+00:00 server-69 kernel: 0000000000000000 ffff880481c99bb8 ffffffff8162562a 0000000000008040 2015-07-07T23:32:18.230148+00:00 server-69 kernel: 000000000000044c ffff880481c99bf8 ffffffffa06c457c ffff880481c99bf8 2015-07-07T23:32:18.230149+00:00 server-69 kernel: ffff88086936bcf0 ffff8804a17ecd00 ffff880066a48000 ffff880044158000 2015-07-07T23:32:18.230150+00:00 server-69 kernel: Call Trace: 2015-07-07T23:32:18.230152+00:00 server-69 kernel: [] dump_stack+0x49/0x5f 2015-07-07T23:32:18.230153+00:00 server-69 kernel: [] kmem_alloc+0xec/0x100 [xfs] 2015-07-07T23:32:18.230186+00:00 server-69 kernel: [] xlog_cil_insert_format_items+0x11f/0x1f0 [xfs] 2015-07-07T23:32:18.230205+00:00 server-69 kernel: [] ? xfs_bmap_last_offset+0x30/0xc0 [xfs] 2015-07-07T23:32:18.230211+00:00 server-69 kernel: [] xlog_cil_insert_items+0x3d/0x1b0 [xfs] 2015-07-07T23:32:18.230212+00:00 server-69 kernel: [] xfs_log_commit_cil+0x54/0x150 [xfs] 2015-07-07T23:32:18.230228+00:00 server-69 kernel: [] xfs_trans_commit+0x79/0x270 [xfs] 2015-07-07T23:32:18.230230+00:00 server-69 kernel: [] xfs_remove+0x2d2/0x350 [xfs] 2015-07-07T23:32:18.230235+00:00 server-69 kernel: [] ? d_walk+0x5f/0x260 2015-07-07T23:32:18.230236+00:00 server-69 kernel: [] xfs_vn_unlink+0x52/0xa0 [xfs] 2015-07-07T23:32:18.230237+00:00 server-69 kernel: [] vfs_rmdir+0xbb/0x110 2015-07-07T23:32:18.230238+00:00 server-69 kernel: [] do_rmdir+0x203/0x220 2015-07-07T23:32:18.230239+00:00 server-69 kernel: [] SyS_rmdir+0x16/0x20 2015-07-07T23:32:18.230240+00:00 server-69 kernel: [] system_call_fastpath+0x16/0x1b In function, I add code to get more info: 57c57 < if (!(++retries % 100)) --- > if (!(++retries % 100)) { 59,60c59,62 < "possible memory allocation deadlock in %s (mode:0x%x)", < __func__, lflags); --- > "possible memory allocation deadlock in %s (mode:0x%x, size:%zu)", > __func__, lflags, size); > dump_stack(); > } From vectrafo@server1.vectracom.net Wed Jul 8 02:32:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.2 required=5.0 tests=DEAR_SOMETHING,FREEMAIL_FROM, HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 898687F3F for ; Wed, 8 Jul 2015 02:32:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 73DAC8F8059 for ; Wed, 8 Jul 2015 00:32:47 -0700 (PDT) X-ASG-Debug-ID: 1436340765-04cbb050ced1250001-NocioJ Received: from server1.vectracom.net (server1.vectracom.net [72.29.70.83]) by cuda.sgi.com with ESMTP id ijTmdZdDSCKD177I (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 00:32:45 -0700 (PDT) X-Barracuda-Envelope-From: vectrafo@server1.vectracom.net X-Barracuda-Apparent-Source-IP: 72.29.70.83 Received: from vectrafo by server1.vectracom.net with local (Exim 4.85) (envelope-from ) id 1ZCjqW-0001kT-8b for xfs@oss.sgi.com; Wed, 08 Jul 2015 12:32:44 +0500 To: xfs@oss.sgi.com Subject: =?UTF-8?Q?Hi?= Date: Wed, 8 Jul 2015 07:32:44 +0000 X-ASG-Orig-Subj: =?UTF-8?Q?Hi?= From: =?UTF-8?Q?Dell?= Message-ID: <288397e88682f2110790a88e3276d365@vectrafoods.com> X-Priority: 3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server1.vectracom.net X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [511 32008] / [47 12] X-AntiAbuse: Sender Address Domain - server1.vectracom.net X-Get-Message-Sender-Via: server1.vectracom.net: authenticated_id: vectrafo/only user confirmed/virtual account not confirmed X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/vectrafo/public_html/wp-content/plugins/theme-check/1so.php X-Source-Dir: vectrafoods.com:/public_html/wp-content/plugins/theme-check X-Barracuda-Connect: server1.vectracom.net[72.29.70.83] X-Barracuda-Start-Time: 1436340765 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: 71febcc033bcc9cdabd54132d33a1765-601-htm X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20556 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message
Dear Sir/Madam,
=A0
I am David Zuma, the Admin Marketing Manager of (DELL INC. South Africa),
the major producer of Laptops and Printers, Computers etc in USA &South Afr= ica.
We have a job for you, if you are interested reply so I will send you more = details.
=A0
Mr David Zuma
Admin Marketing Manager.{South African Branch}
Website: http://dell.com
From lendingtree_partners-xfs=oss.sgi.com@soytusocio.com Wed Jul 8 03:48:50 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.1 required=5.0 tests=HTML_IMAGE_RATIO_04, HTML_MESSAGE,MIME_QP_LONG_LINE,T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ADA167F51 for ; Wed, 8 Jul 2015 03:48:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9B0C130404E for ; Wed, 8 Jul 2015 01:48:47 -0700 (PDT) X-ASG-Debug-ID: 1436345320-04cb6c209fde4b0001-NocioJ Received: from mail.soytusocio.com (go.eardria.eu [63.223.69.72]) by cuda.sgi.com with ESMTP id 1KJrxL5ZpNZeY9s2 for ; Wed, 08 Jul 2015 01:48:41 -0700 (PDT) X-Barracuda-Envelope-From: lendingtree_partners-xfs=oss.sgi.com@soytusocio.com X-Barracuda-Apparent-Source-IP: 63.223.69.72 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dkim; d=soytusocio.com; h=Date:From:To:Subject:MIME-Version:Content-Type:Message-ID; i=lendingtree_partners@soytusocio.com; bh=2MMmjfjgXxYOUZnELchSiO7jXi0=; b=DMC5mHb0ojTxXbXuy8dNz+8MfZIjMUzs2MiZK9e0NWona4n6ETYpenccDt0x2HuC8DYBJperP/EJ eDWrs6cZA9ayvVr2pEOuGQmsO1i5VDOcJT6OlN/iXrbrghnM+LwI82PiYvSm4tQrXx+zGwl1r0pd og/4VKUDQQ+BfKlQWnU= DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=dkim; d=soytusocio.com; b=KtjSdfaukDGfdm2ORlfOpSzRP09UxwJ40kPHcJXpLLMlRGPTt95UWXysiCQZnAcFnMxRfmQJ1QMz 8k3DrQF8lUjOl4yZjji24wSUW2MrQK7IgD1fc170Ms/sDuNRjo41Td4B4Brs9IsnOyPzegGKWERw li5Joec6uc6awzVwN6k=; Received: by mail.soytusocio.com id hjjhuq0001gl for ; Wed, 8 Jul 2015 00:18:23 -0700 (envelope-from ) Date: Wed, 8 Jul 2015 00:18:23 -0700 From: "LendingTree Partners" To: Subject: Mortgage rates are rising. Refi now. Don't miss out! MIME-Version: 1.0 X-ASG-Orig-Subj: Mortgage rates are rising. Refi now. Don't miss out! Content-Type: multipart/alternative; boundary="----=_Part_289_1078439552.1436339514016" Message-ID: <0.0.0.8C.1D0B94E466D4FBE.53945A@mail.soytusocio.com> X-Barracuda-Connect: go.eardria.eu[63.223.69.72] X-Barracuda-Start-Time: 1436345320 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.59 X-Barracuda-Spam-Status: No, SCORE=2.59 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC2_MV0250, DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_04, HTML_MESSAGE, MARKETING_SUBJECT, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20557 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.17 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 1.00 BSF_SC2_MV0250 Custom rule MV0250 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars ------=_Part_289_1078439552.1436339514016 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Mortgage rates are rising. Refi now. Don't miss out! http://www.soytusocio.com/ef38X6nVF114dZsnFjnn0ntv0Mjhc4e/war Update Preferences- http://www.soytusocio.com/4fd_U8611S5aZsnFjnn0ntv0Mjh275/note ------=_Part_289_1078439552.1436339514016 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: quoted-printable =20 LendingTree=20 =20 = Mortgage rates are rising. Refi now. Don't miss out!=20 =20 =20 =20 =20 =20 =20
View as webpage | Update Preferences=20
=20 =20 =20 =20 =20 =20 =20
3D""
=20 =20 =20 =20 =20 =20 =20
 
=20 =20 =20 =20 = =20 =20 =20

You Know How= to Get a
Better Mortgage Offer?

Shop= for it.

Select a Loan Term

=20 =20 =20 =20 =20 =20 =20
3D"30  3D"15  3D"5/1
=20 =20 =20 =20 =20 =20 =20
3D""
=20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20

  View Multiple Offers Now!

 
 
=20 =20 =20 =20 =20 = =20 =20 =20 =20
 

Advertising Disclosures<= /p>

LendingTree, LLC dba Lendi= ngTreePartners.com is a duly licensed mortgage broker, as required, with it= s main office located at 11115 Rushmore Dr., Charlotte, NC 28277, Telephone= number 1-877-703-8733. NMLS Unique Identifier #1136. LendingTreePartners.c= om is known as LT Technologies in Lieu of true name, LendingTree, LLC in NY= For a current list of applicable state licensing & disclosures, see t= he LendingTree website or call for details. This is a commercial email from= LendingTreePartners.com and may be recurring.

LendingTreePartners.com: Update Preferences | Privacy Policy | Terms of Use | Disclosures and Licenses

 
=20
=20
=20
=20
=20
=20
=20
=20
=20
 =20

=20

=20 =20 ------=_Part_289_1078439552.1436339514016-- From hch@lst.de Wed Jul 8 03:53:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C9E0F7F54 for ; Wed, 8 Jul 2015 03:53:45 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B533C304064 for ; Wed, 8 Jul 2015 01:53:45 -0700 (PDT) X-ASG-Debug-ID: 1436345622-04cbb050cfd2dc0001-NocioJ Received: from newverein.lst.de (verein.lst.de [213.95.11.211]) by cuda.sgi.com with ESMTP id gs5RlFMmGtM0ZzFZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 01:53:43 -0700 (PDT) X-Barracuda-Envelope-From: hch@lst.de X-Barracuda-Apparent-Source-IP: 213.95.11.211 Received: by newverein.lst.de (Postfix, from userid 2407) id 55243691FF; Wed, 8 Jul 2015 10:53:41 +0200 (CEST) Date: Wed, 8 Jul 2015 10:53:41 +0200 From: Christoph Hellwig To: Ming Lin Cc: xfs@oss.sgi.com, Christoph Hellwig Subject: Re: xfs_io bmap confused Message-ID: <20150708085341.GA23332@lst.de> X-ASG-Orig-Subj: Re: xfs_io bmap confused References: <1436338913.13729.11.camel@hasee> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436338913.13729.11.camel@hasee> User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: verein.lst.de[213.95.11.211] X-Barracuda-Start-Time: 1436345623 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20557 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: > Hi list, > > I am testing some direct-io patches. > xfs_tests/xfs/080 failed. > > It's strange. > There is no hole in "rwtest.file", > but when read it at some offset it returns zero because of hole. > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file > /mnt/test/rwtest.file: > 0: [0..125671]: 160..125831 Sounds like you see an unwritten extent. What does xfs_bmap -pv show on the file? From jtulak@redhat.com Wed Jul 8 04:15:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BDD957F56 for ; Wed, 8 Jul 2015 04:15:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 50AB7AC003 for ; Wed, 8 Jul 2015 02:15:04 -0700 (PDT) X-ASG-Debug-ID: 1436346897-04bdf00787d84c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id j5JQPWFfRFR0uNXv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 02:14:58 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 864CDB8BCA; Wed, 8 Jul 2015 09:14:57 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t689EsIe012797; Wed, 8 Jul 2015 05:14:55 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: sandeen@redhat.com, hch@infradead.org, david@fromorbit.com Subject: [PATCH v3] xfsprogs: blkid is now mandatory Date: Wed, 8 Jul 2015 11:14:53 +0200 X-ASG-Orig-Subj: [PATCH v3] xfsprogs: blkid is now mandatory Message-Id: <1436346893-11831-1-git-send-email-jtulak@redhat.com> In-Reply-To: <1156743222.24471614.1436281858017.JavaMail.zimbra@redhat.com> References: <1156743222.24471614.1436281858017.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436346898 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Because blkid is here for a long time, I hereby propose a patch for removing support for NOT having blkid. The current support through set of #ifdef is prone to errors like making a patch just in one of the branches, and according to a recent talk between Christoph and Eric, it is not necessary to keep it supported. Remove code for checking ENABLE_BLKID, and the code when ENABLE_BLKID is not defined. The only use of libdisk was in the removed code, so remove libdisk too. It makes blkid required for compilation. Signed-off-by: Jan Tulak --- Makefile | 6 +- configure.ac | 6 +- debian/rules | 2 +- include/Makefile | 2 +- include/builddefs.in | 2 - include/fstyp.h | 43 ----- libdisk/Makefile | 37 ----- libdisk/dm.c | 112 ------------- libdisk/drivers.c | 82 ---------- libdisk/drivers.h | 45 ------ libdisk/evms.c | 68 -------- libdisk/evms.h | 32 ---- libdisk/fstype.c | 442 --------------------------------------------------- libdisk/fstype.h | 334 -------------------------------------- libdisk/lvm.c | 117 -------------- libdisk/md.c | 119 -------------- libdisk/md.h | 67 -------- libdisk/pttype.c | 118 -------------- libdisk/pttype.h | 50 ------ libdisk/xvm.c | 93 ----------- libdisk/xvm.h | 53 ------ m4/package_blkid.m4 | 20 ++- mkfs/Makefile | 22 +-- mkfs/fstyp.c | 59 ------- mkfs/xfs_mkfs.c | 100 +----------- po/de.po | 51 ------ po/pl.po | 49 ------ 27 files changed, 16 insertions(+), 2115 deletions(-) delete mode 100644 include/fstyp.h delete mode 100644 libdisk/Makefile delete mode 100644 libdisk/dm.c delete mode 100644 libdisk/drivers.c delete mode 100644 libdisk/drivers.h delete mode 100644 libdisk/evms.c delete mode 100644 libdisk/evms.h delete mode 100644 libdisk/fstype.c delete mode 100644 libdisk/fstype.h delete mode 100644 libdisk/lvm.c delete mode 100644 libdisk/md.c delete mode 100644 libdisk/md.h delete mode 100644 libdisk/pttype.c delete mode 100644 libdisk/pttype.h delete mode 100644 libdisk/xvm.c delete mode 100644 libdisk/xvm.h delete mode 100644 mkfs/fstyp.c diff --git a/Makefile b/Makefile index 6d6803b..798f02a 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ endif # header install rules to populate include/xfs correctly HDR_SUBDIRS = include libxfs -DLIB_SUBDIRS = libxlog libxcmd libhandle libdisk +DLIB_SUBDIRS = libxlog libxcmd libhandle LIB_SUBDIRS = libxfs $(DLIB_SUBDIRS) TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ mdrestore repair rtcp m4 man doc po debian @@ -71,10 +71,6 @@ quota: libxcmd repair: libxlog -ifneq ($(ENABLE_BLKID), yes) -mkfs: libdisk -endif - ifeq ($(HAVE_BUILDDEFS), yes) include $(BUILDRULES) else diff --git a/configure.ac b/configure.ac index fe991cc..fac3ea7 100644 --- a/configure.ac +++ b/configure.ac @@ -37,10 +37,6 @@ AC_ARG_ENABLE(termcap, test $enable_termcap = yes && libtermcap="-ltermcap",) AC_SUBST(libtermcap) -# AC_HAVE_BLKID_TOPO below wil find the library & check for topo support -AC_ARG_ENABLE(blkid, -[ --enable-blkid=[yes/no] Enable block device id library [default=yes]],, - enable_blkid=yes) AC_ARG_ENABLE(lib64, [ --enable-lib64=[yes/no] Enable lib64 support [default=yes]],, @@ -111,7 +107,7 @@ AC_HAVE_FALLOCATE AC_HAVE_FIEMAP AC_HAVE_PREADV AC_HAVE_SYNC_FILE_RANGE -AC_HAVE_BLKID_TOPO($enable_blkid) +AC_HAVE_BLKID_TOPO AC_HAVE_READDIR AC_CHECK_SIZEOF([long]) diff --git a/debian/rules b/debian/rules index 27b043f..10d04f8 100755 --- a/debian/rules +++ b/debian/rules @@ -47,7 +47,7 @@ dibuild: for dir in include libxfs; do \ $(MAKE) -C $$dir NODEP=1 install-headers; \ done; \ - for dir in include libxfs libdisk mkfs; do \ + for dir in include libxfs mkfs; do \ $(MAKE) -C $$dir; \ done; \ mv mkfs/mkfs.xfs mkfs/mkfs.xfs-$(bootpkg); \ diff --git a/include/Makefile b/include/Makefile index 91b33b0..63a7748 100644 --- a/include/Makefile +++ b/include/Makefile @@ -46,7 +46,7 @@ HFILES = handle.h \ xqm.h PHFILES = darwin.h freebsd.h irix.h linux.h gnukfreebsd.h -DKHFILES = volume.h fstyp.h dvh.h +DKHFILES = volume.h dvh.h LIBHFILES = command.h input.h path.h project.h LSRCFILES = $(shell echo $(PHFILES) | sed -e "s/$(PKG_PLATFORM).h//g") LSRCFILES += platform_defs.h.in builddefs.in buildmacros buildrules install-sh diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..925761d 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -37,7 +37,6 @@ LIBBLKID = @libblkid@ LIBXFS = $(TOPDIR)/libxfs/libxfs.la LIBXCMD = $(TOPDIR)/libxcmd/libxcmd.la LIBXLOG = $(TOPDIR)/libxlog/libxlog.la -LIBDISK = $(TOPDIR)/libdisk/libdisk.la LIBHANDLE = $(TOPDIR)/libhandle/libhandle.la PKG_NAME = @pkg_name@ @@ -89,7 +88,6 @@ ENABLE_SHARED = @enable_shared@ ENABLE_GETTEXT = @enable_gettext@ ENABLE_EDITLINE = @enable_editline@ ENABLE_READLINE = @enable_readline@ -ENABLE_BLKID = @enable_blkid@ HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ diff --git a/include/fstyp.h b/include/fstyp.h deleted file mode 100644 index 04c1608..0000000 --- a/include/fstyp.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2000-2001, 2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef __FSTYP_H__ -#define __FSTYP_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * fstype allows the user to determine the filesystem identifier of - * mounted or unmounted filesystems, using heuristics. - * The filesystem type is required by mount(2) and sometimes by mount(8) - * to mount filesystems of different types. - */ -extern char *fstype (const char * __device); - -/* - * ptabtype allows one to determine the type of partition table in - * use on a given volume, using heuristics. - */ -extern char *pttype (const char *__device); - -#ifdef __cplusplus -} -#endif - -#endif /* __FSTYP_H__ */ diff --git a/libdisk/Makefile b/libdisk/Makefile deleted file mode 100644 index b058a9f..0000000 --- a/libdisk/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright (c) 2000-2001,2004 Silicon Graphics, Inc. All Rights Reserved. -# - -TOPDIR = .. -include $(TOPDIR)/include/builddefs - -LTLIBRARY = libdisk.la -LT_CURRENT = 0 -LT_REVISION = 0 -LT_AGE = 0 - -CFILES = drivers.c fstype.c pttype.c -HFILES = drivers.h fstype.h pttype.h md.h xvm.h evms.h -LINUX_DRIVERS = dm.c md.c xvm.c evms.c lvm.c - -ifeq ($(PKG_PLATFORM),linux) -CFILES += $(LINUX_DRIVERS) -else -LSRCFILES = $(LINUX_DRIVERS) -endif - -ifneq ($(ENABLE_BLKID), yes) -default: ltdepend $(LTLIBRARY) -else -default: -endif - -include $(BUILDRULES) - -install: default - -install-dev: default - -install-qa: install-dev - --include .ltdep diff --git a/libdisk/dm.c b/libdisk/dm.c deleted file mode 100644 index dfc1f37..0000000 --- a/libdisk/dm.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2004-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" - -int -mnt_is_dm_subvol( - dev_t dev) -{ - return get_driver_block_major("device-mapper", major(dev)); -} - -int -dm_get_subvol_stripe( - char *dfile, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - int count, stripes = 0, stripesize = 0; - int dmpipe[2]; - char *largv[7]; - FILE *stream; - long long offset, size; - static char *command = "table"; /* dmsetup table /dev/xxx */ - char major_str[4], minor_str[4]; - - if (!mnt_is_dm_subvol(sb->st_rdev)) - return 0; - - /* Quest for dmsetup */ - if (!access("/usr/local/sbin/dmsetup", R_OK|X_OK)) - largv[0] = "/usr/local/sbin/dmsetup"; - else if (!access("/usr/sbin/dmsetup", R_OK|X_OK)) - largv[0] = "/usr/sbin/dmsetup"; - else if (!access("/sbin/dmsetup", R_OK|X_OK)) - largv[0] = "/sbin/dmsetup"; - else { - fprintf(stderr, - _("Warning - device mapper device, but no dmsetup(8) found\n")); - return 0; - } - - snprintf(major_str, 4, "%d", major(sb->st_rdev)); - snprintf(minor_str, 4, "%d", minor(sb->st_rdev)); - - largv[1] = command; - largv[2] = "-j"; - largv[3] = major_str; - largv[4] = "-m"; - largv[5] = minor_str; - largv[6] = NULL; - - /* Open pipe */ - if (pipe(dmpipe) < 0) { - fprintf(stderr, _("Could not open pipe\n")); - exit(1); - } - - /* Spawn dmsetup */ - switch (fork()) { - case 0: - /* Plumbing */ - close(dmpipe[0]); - - if (dmpipe[1] != STDOUT_FILENO) - dup2(dmpipe[1], STDOUT_FILENO); - - execv(largv[0], largv); - - fprintf(stderr, _("Failed to execute %s\n"), largv[0]); - exit(1); - - case -1: - fprintf(stderr, _("Failed forking dmsetup process\n")); - exit(1); - - default: - break; - } - - close(dmpipe[1]); - stream = fdopen(dmpipe[0], "r"); - count = fscanf(stream, "%lld %lld striped %d %d ", - &offset, &size, &stripes, &stripesize); - fclose(stream); - if (count != 4) - return 0; - - /* Update sizes */ - *sunit = stripesize; - *swidth = (stripes * stripesize); - *sectalign = 0; - return 1; -} diff --git a/libdisk/drivers.c b/libdisk/drivers.c deleted file mode 100644 index 26c6ec1..0000000 --- a/libdisk/drivers.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" - -void -get_subvol_stripe_wrapper( - char *dev, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign) -{ - struct stat64 sb; - - if (dev == NULL) - return; - - if (stat64(dev, &sb)) { - fprintf(stderr, _("Cannot stat %s: %s\n"), - dev, strerror(errno)); - exit(1); - } - - if ( dm_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if ( md_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if ( lvm_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if ( xvm_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - if (evms_get_subvol_stripe(dev, type, sunit, swidth, sectalign, &sb)) - return; - - /* ... add new device drivers here */ -} - -#define DEVICES "/proc/devices" - -/* - * General purpose routine which dredges through procfs trying to - * match up device driver names with the associated major numbers - * being used in the running kernel. - */ -int -get_driver_block_major( - const char *driver, - int major) -{ - FILE *f; - char buf[64], puf[64]; - int dmajor, match = 0; - - if ((f = fopen(DEVICES, "r")) == NULL) - return match; - while (fgets(buf, sizeof(buf), f)) /* skip to block dev section */ - if (strncmp("Block devices:\n", buf, sizeof(buf)) == 0) - break; - while (fgets(buf, sizeof(buf), f)) - if ((sscanf(buf, "%u %s\n", &dmajor, puf) == 2) && - (strncmp(puf, driver, sizeof(puf)) == 0) && - (dmajor == major)) - match = 1; - fclose(f); - return match; -} diff --git a/libdisk/drivers.h b/libdisk/drivers.h deleted file mode 100644 index 22ac1ea..0000000 --- a/libdisk/drivers.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "xfs/libxfs.h" -#include -#include - -/* - * This stuff is all very platform specific. - */ - -#ifdef __linux__ -extern int dm_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int md_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int lvm_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int xvm_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -extern int evms_get_subvol_stripe(char*, sv_type_t, int*, int*, int*, - struct stat64*); -#else -#define stat64 stat -#define dm_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define md_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define lvm_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define xvm_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#define evms_get_subvol_stripe(dev, type, a, b, c, stat) (-1) -#endif diff --git a/libdisk/evms.c b/libdisk/evms.c deleted file mode 100644 index 4c22ee1..0000000 --- a/libdisk/evms.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2002 - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will 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 to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include "evms.h" - -int -mnt_is_evms_subvol( - dev_t dev) -{ - if (major(dev) == EVMS_MAJOR) - return 1; - return get_driver_block_major("evms", major(dev)); -} - -int -evms_get_subvol_stripe( - char *device, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - if (mnt_is_evms_subvol(sb->st_rdev)) { - evms_vol_stripe_info_t info; - int fd; - - fd = open(device, O_RDONLY); - if (fd == -1) - return 0; - - if (ioctl(fd, EVMS_GET_VOL_STRIPE_INFO, &info)) { - close(fd); - return 0; - } - - /* Update sizes */ - *sunit = info.size; - *swidth = *sunit * info.width; - *sectalign = 0; - - close(fd); - return 1; - } - return 0; -} diff --git a/libdisk/evms.h b/libdisk/evms.h deleted file mode 100644 index aab797b..0000000 --- a/libdisk/evms.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) International Business Machines Corp., 2002 - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will 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 to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#define EVMS_MAJOR 117 -#define EVMS_GET_VOL_STRIPE_INFO \ - _IOR(EVMS_MAJOR, 0xF0, struct evms_vol_stripe_info_s) - -/* - * struct evms_vol_stripe_info_s - contains stripe information for a volume - * - * unit: the stripe unit specified in 512 byte block units - * width: the number of stripe members or RAID data disks - */ -typedef struct evms_vol_stripe_info_s { - u_int32_t size; - u_int32_t width; -} evms_vol_stripe_info_t; diff --git a/libdisk/fstype.c b/libdisk/fstype.c deleted file mode 100644 index 548f297..0000000 --- a/libdisk/fstype.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include "fstype.h" - -/* - * From mount(8) source by Andries Brouwer. Hacked for XFS by mkp. - * Recent sync's to mount source: - * - util-linux-2.10o ... 06 Sep 00 - * - util-linux-2.10r ... 06 Dec 00 - * - util-linux-2.11g ... 02 Jul 01 - * - util-linux-2.11u ... 24 Aug 02 - * - util-linux-2.11z ... 13 May 03 - */ - -#define SIZE(a) (sizeof(a)/sizeof(a[0])) - -/* Most file system types can be recognized by a `magic' number - in the superblock. Note that the order of the tests is - significant: by coincidence a filesystem can have the - magic numbers for several file system types simultaneously. - For example, the romfs magic lives in the 1st sector; - xiafs does not touch the 1st sector and has its magic in - the 2nd sector; ext2 does not touch the first two sectors. */ - -static inline unsigned short -swapped(unsigned short a) { - return (a>>8) | (a<<8); -} - -/* - Probes the device and attempts to determine the type of filesystem - contained within. - - Original routine by ; made into a function - for mount(8) by Mike Grupenhoff . - Corrected the test for xiafs - aeb - Read the superblock only once - aeb - Added a very weak heuristic for vfat - aeb - Added iso9660, minix-v2, romfs, qnx4, udf, vxfs, swap - aeb - Added a test for high sierra (iso9660) - quinlan@bucknell.edu - Added ufs from a patch by jj. But maybe there are several types of ufs? - Added ntfs from a patch by Richard Russon. - Added xfs - 2000-03-21 Martin K. Petersen - Added cramfs, hfs, hpfs, adfs - Sepp Wijnands - Added ext3 - Andrew Morton - Added jfs - Christoph Hellwig - Added sysv - Tim Launchbury - Added udf - Bryce Nesbitt - Added gfs/gfs2, btrfs - Eric Sandeen -*/ - -/* - * udf magic - I find that trying to mount garbage as an udf fs - * causes a very large kernel delay, almost killing the machine. - * So, we do not try udf unless there is positive evidence that it - * might work. Strings below taken from ECMA 167. - */ -/* - * It seems that before udf 2.00 the volume descriptor was not well - * defined. For 2.00 you're supposed to keep scanning records until - * you find one NOT in this list. (See ECMA 2/8.3.1). - */ -static char -*udf_magic[] = { "BEA01", "BOOT2", "CD001", "CDW02", "NSR02", - "NSR03", "TEA01" }; - - -static int -may_be_udf(const char *id) { - char **m; - - for (m = udf_magic; m - udf_magic < SIZE(udf_magic); m++) - if (!strncmp(*m, id, 5)) - return 1; - return 0; -} - -/* we saw "CD001" - may be iso9660 or udf - Bryce Nesbitt */ -static int -is_really_udf(int fd) { - int j, bs; - struct iso_volume_descriptor isosb; - - /* determine the block size by scanning in 2K increments - (block sizes larger than 2K will be null padded) */ - for (bs = 1; bs < 16; bs++) { - lseek(fd, bs*2048+32768, SEEK_SET); - if (read(fd, (char *)&isosb, sizeof(isosb)) != sizeof(isosb)) - return 0; - if (isosb.id[0]) - break; - } - - /* Scan up to another 64 blocks looking for additional VSD's */ - for (j = 1; j < 64; j++) { - if (j > 1) { - lseek(fd, j*bs*2048+32768, SEEK_SET); - if (read(fd, (char *)&isosb, sizeof(isosb)) - != sizeof(isosb)) - return 0; - } - /* If we find NSR0x then call it udf: - NSR01 for UDF 1.00 - NSR02 for UDF 1.50 - NSR03 for UDF 2.00 */ - if (!strncmp(isosb.id, "NSR0", 4)) - return 1; - if (!may_be_udf(isosb.id)) - return 0; - } - - return 0; -} - -static int -may_be_swap(const char *s) { - return (strncmp(s-10, "SWAP-SPACE", 10) == 0 || - strncmp(s-10, "SWAPSPACE2", 10) == 0); -} - -/* rather weak necessary condition */ -static int -may_be_adfs(const struct adfs_super_block *sb) { - char *p; - int sum; - - p = (char *)sb->s_checksum; - sum = 0; - while(--p != (char *)sb) - sum = (sum >> 8) + (sum & 0xff) + *p; - - return (sum & 0xff) == sb->s_checksum[0]; -} - -static int is_reiserfs_magic_string (struct reiserfs_super_block * rs) -{ - return (!strncmp (rs->s_magic, REISERFS_SUPER_MAGIC_STRING, - strlen ( REISERFS_SUPER_MAGIC_STRING)) || - !strncmp (rs->s_magic, REISER2FS_SUPER_MAGIC_STRING, - strlen ( REISER2FS_SUPER_MAGIC_STRING))); -} - -char * -fstype(const char *device) { - int fd; - char *type = NULL; - union { - struct minix_super_block ms; - struct ext_super_block es; - struct ext2_super_block e2s; - struct vxfs_super_block vs; - struct hfs_super_block hs; - } sb; /* stuff at 1024 */ - union { - struct xiafs_super_block xiasb; - char romfs_magic[8]; - char qnx4fs_magic[10]; /* ignore first 4 bytes */ - unsigned int bfs_magic; - struct ntfs_super_block ntfssb; - struct fat_super_block fatsb; - struct xfs_super_block xfsb; - struct cramfs_super_block cramfssb; - } xsb; - struct ufs_super_block ufssb; - union { - struct iso_volume_descriptor iso; - struct hs_volume_descriptor hs; - } isosb; - struct reiserfs_super_block reiserfssb; /* block 64 or 8 */ - struct jfs_super_block jfssb; /* block 32 */ - struct hpfs_super_block hpfssb; - struct adfs_super_block adfssb; - struct sysv_super_block svsb; - struct gfs2_sb gfs2sb; - struct btrfs_super_block btrfssb; - struct stat statbuf; - - /* opening and reading an arbitrary unknown path can have - undesired side effects - first check that `device' refers - to a block device or ordinary file */ - if (stat (device, &statbuf) || - !(S_ISBLK(statbuf.st_mode) || S_ISREG(statbuf.st_mode))) - return NULL; - - fd = open(device, O_RDONLY); - if (fd < 0) - return NULL; - - /* do seeks and reads in disk order, otherwise a very short - partition may cause a failure because of read error */ - - if (!type) { - /* block 0 */ - if (lseek(fd, 0, SEEK_SET) != 0 - || read(fd, (char *) &xsb, sizeof(xsb)) != sizeof(xsb)) - goto try_iso9660; - /* Gyorgy Kovesdi: none of my photocds has a readable block 0 */ - - if (xiafsmagic(xsb.xiasb) == _XIAFS_SUPER_MAGIC) - type = "xiafs"; - else if(!strncmp(xsb.romfs_magic, "-rom1fs-", 8)) - type = "romfs"; - else if(!strncmp(xsb.xfsb.s_magic, XFS_SUPER_MAGIC, 4)) - type = "xfs"; - else if(!strncmp(xsb.qnx4fs_magic+4, "QNX4FS", 6)) - type = "qnx4"; - else if(xsb.bfs_magic == 0x1badface) - type = "bfs"; - else if(!strncmp(xsb.ntfssb.s_magic, NTFS_SUPER_MAGIC, - sizeof(xsb.ntfssb.s_magic))) - type = "ntfs"; - else if(cramfsmagic(xsb.cramfssb) == CRAMFS_SUPER_MAGIC || - cramfsmagic(xsb.cramfssb) == CRAMFS_SUPER_MAGIC_BE) - type = "cramfs"; - else if ((!strncmp(xsb.fatsb.s_os, "MSDOS", 5) || - !strncmp(xsb.fatsb.s_os, "MSWIN", 5) || - !strncmp(xsb.fatsb.s_os, "MTOOL", 5) || - !strncmp(xsb.fatsb.s_os, "mkdosfs", 7) || - !strncmp(xsb.fatsb.s_os, "kmkdosfs", 8) || - /* Michal Svec: created by fdformat, old msdos utility for - formatting large (1.7) floppy disks. */ - !strncmp(xsb.fatsb.s_os, "CH-FOR18", 8)) - && (!strncmp(xsb.fatsb.s_fs, "FAT12 ", 8) || - !strncmp(xsb.fatsb.s_fs, "FAT16 ", 8) || - !strncmp(xsb.fatsb.s_fs2, "FAT32 ", 8))) - type = "vfat"; /* only guessing - might as well be fat or umsdos */ - } - - if (!type) { - /* sector 1 */ - if (lseek(fd, 512 , SEEK_SET) != 512 - || read(fd, (char *) &svsb, sizeof(svsb)) != sizeof(svsb)) - goto io_error; - if (sysvmagic(svsb) == SYSV_SUPER_MAGIC ) - type = "sysv"; - } - - if (!type) { - /* block 1 */ - if (lseek(fd, 1024, SEEK_SET) != 1024 || - read(fd, (char *) &sb, sizeof(sb)) != sizeof(sb)) - goto io_error; - - /* ext2 has magic in little-endian on disk, so "swapped" is - superfluous; however, there have existed strange byteswapped - PPC ext2 systems */ - if (ext2magic(sb.e2s) == EXT2_SUPER_MAGIC || - ext2magic(sb.e2s) == EXT2_PRE_02B_MAGIC || - ext2magic(sb.e2s) == swapped(EXT2_SUPER_MAGIC)) { - type = "ext2"; - - /* maybe even ext3? */ - if ((assemble4le(sb.e2s.s_feature_compat) - & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && - assemble4le(sb.e2s.s_journal_inum) != 0) - type = "ext3"; /* "ext3,ext2" */ - } - - else if (minixmagic(sb.ms) == MINIX_SUPER_MAGIC || - minixmagic(sb.ms) == MINIX_SUPER_MAGIC2 || - minixmagic(sb.ms) == swapped(MINIX_SUPER_MAGIC2) || - minixmagic(sb.ms) == MINIX2_SUPER_MAGIC || - minixmagic(sb.ms) == MINIX2_SUPER_MAGIC2) - type = "minix"; - - else if (extmagic(sb.es) == EXT_SUPER_MAGIC) - type = "ext"; - - else if (vxfsmagic(sb.vs) == VXFS_SUPER_MAGIC) - type = "vxfs"; - - else if (hfsmagic(sb.hs) == swapped(HFS_SUPER_MAGIC) || - (hfsmagic(sb.hs) == swapped(HFSPLUS_SUPER_MAGIC) && - hfsversion(sb.hs) == swapped(HFSPLUS_SUPER_VERSION))) - type = "hfs"; - } - - if (!type) { - /* block 3 */ - if (lseek(fd, 0xc00, SEEK_SET) != 0xc00 - || read(fd, (char *) &adfssb, sizeof(adfssb)) != sizeof(adfssb)) - goto io_error; - - /* only a weak test */ - if (may_be_adfs(&adfssb) - && (adfsblksize(adfssb) >= 8 && - adfsblksize(adfssb) <= 10)) - type = "adfs"; - } - - if (!type) { - int mag; - - /* block 8 */ - if (lseek(fd, 8192, SEEK_SET) != 8192 - || read(fd, (char *) &ufssb, sizeof(ufssb)) != sizeof(ufssb)) - goto io_error; - - mag = ufsmagic(ufssb); - if (mag == UFS_SUPER_MAGIC_LE || mag == UFS_SUPER_MAGIC_BE) - type = "ufs"; - } - - if (!type) { - /* block 8 */ - if (lseek(fd, REISERFS_OLD_DISK_OFFSET_IN_BYTES, SEEK_SET) != - REISERFS_OLD_DISK_OFFSET_IN_BYTES - || read(fd, (char *) &reiserfssb, sizeof(reiserfssb)) != - sizeof(reiserfssb)) - goto io_error; - if (is_reiserfs_magic_string(&reiserfssb)) - type = "reiserfs"; - } - - if (!type) { - /* block 8 */ - if (lseek(fd, 0x2000, SEEK_SET) != 0x2000 - || read(fd, (char *) &hpfssb, sizeof(hpfssb)) != sizeof(hpfssb)) - goto io_error; - - if (hpfsmagic(hpfssb) == HPFS_SUPER_MAGIC) - type = "hpfs"; - } - - if (!type) { - /* block 32 */ - if (lseek(fd, JFS_SUPER1_OFF, SEEK_SET) != JFS_SUPER1_OFF - || read(fd, (char *) &jfssb, sizeof(jfssb)) != sizeof(jfssb)) - goto io_error; - if (!strncmp(jfssb.s_magic, JFS_MAGIC, 4)) - type = "jfs"; - } - - if (!type) { - /* block 32 */ - try_iso9660: - if (lseek(fd, 0x8000, SEEK_SET) != 0x8000 - || read(fd, (char *) &isosb, sizeof(isosb)) != sizeof(isosb)) - goto io_error; - - if (strncmp(isosb.hs.id, HS_STANDARD_ID, sizeof(isosb.hs.id)) == 0) { - /* "CDROM" */ - type = "iso9660"; - } else if (strncmp(isosb.iso.id, ISO_STANDARD_ID, - sizeof(isosb.iso.id)) == 0) { - /* CD001 */ - type = "iso9660"; - if (is_really_udf(fd)) - type = "udf"; - } else if (may_be_udf(isosb.iso.id)) - type = "udf"; - } - - if (!type) { - /* block 64 */ - if (lseek(fd, REISERFS_DISK_OFFSET_IN_BYTES, SEEK_SET) != - REISERFS_DISK_OFFSET_IN_BYTES - || read(fd, (char *) &reiserfssb, sizeof(reiserfssb)) != - sizeof(reiserfssb)) - goto io_error; - if (is_reiserfs_magic_string(&reiserfssb)) - type = "reiserfs"; - } - - if (!type) { - /* block 64 */ - if (lseek(fd, GFS_SUPERBLOCK_OFFSET, SEEK_SET) != GFS_SUPERBLOCK_OFFSET - || read(fd, (char *) &gfs2sb, sizeof(gfs2sb)) != sizeof(gfs2sb)) - goto io_error; - if (gfsmagic(gfs2sb)) { - if (gfsformat(gfs2sb) == GFS_FORMAT_FS && - gfsmultiformat(gfs2sb) == GFS_FORMAT_MULTI) - type = "gfs"; - else if (gfsformat(gfs2sb) == GFS2_FORMAT_FS && - gfsmultiformat(gfs2sb) == GFS2_FORMAT_MULTI) - type = "gfs2"; - } - } - - if (!type) { - /* block 64 */ - if (lseek(fd, BTRFS_SUPER_INFO_OFFSET, SEEK_SET) != BTRFS_SUPER_INFO_OFFSET - || read(fd, (char *) &btrfssb, sizeof(btrfssb)) != sizeof(btrfssb)) - goto io_error; - if (!strncmp((char *)(btrfssb.magic), BTRFS_MAGIC, - sizeof(btrfssb.magic))) { - type = "btrfs"; - } - } - - if (!type) { - /* perhaps the user tries to mount the swap space - on a new disk; warn her before she does mkfs on it */ - int pagesize = getpagesize(); - int rd; - char buf[128 * 1024]; /* 64k is current max pagesize */ - - if (pagesize > sizeof(buf)) - abort(); - - rd = pagesize; - if (rd < 8192) - rd = 8192; - if (rd > sizeof(buf)) - rd = sizeof(buf); - if (lseek(fd, 0, SEEK_SET) != 0 - || read(fd, buf, rd) != rd) - goto io_error; - if (may_be_swap(buf+pagesize) || - may_be_swap(buf+4096) || may_be_swap(buf+8192)) - type = "swap"; - } - - close (fd); - return(type); - -io_error: - close(fd); - return NULL; -} diff --git a/libdisk/fstype.h b/libdisk/fstype.h deleted file mode 100644 index c0abbab..0000000 --- a/libdisk/fstype.h +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#undef XFS_SUPER_MAGIC - -/* - * From mount(8) source by Andries Brouwer. Hacked for XFS by mkp. - * Recent sync's to mount source: - * - util-linux-2.10o ... 06 Sep 00 - * - util-linux-2.10r ... 06 Dec 00 - * - util-linux-2.11g ... 02 Jul 01 - * - util-linux-2.11u ... 24 Aug 02 - * - util-linux-2.11z ... 13 May 03 - */ - -/* Including became more and more painful. - Below a very abbreviated version of some declarations, - only designed to be able to check a magic number - in case no filesystem type was given. */ - -#define MINIX_SUPER_MAGIC 0x137F /* minix v1, 14 char names */ -#define MINIX_SUPER_MAGIC2 0x138F /* minix v1, 30 char names */ -#define MINIX2_SUPER_MAGIC 0x2468 /* minix v2, 14 char names */ -#define MINIX2_SUPER_MAGIC2 0x2478 /* minix v2, 30 char names */ -struct minix_super_block { - char s_dummy[16]; - char s_magic[2]; -}; -#define minixmagic(s) assemble2le(s.s_magic) - -#define ISODCL(from, to) (to - from + 1) -#define ISO_STANDARD_ID "CD001" -struct iso_volume_descriptor { - char type[ISODCL(1,1)]; /* 711 */ - char id[ISODCL(2,6)]; - char version[ISODCL(7,7)]; - char data[ISODCL(8,2048)]; -}; - -#define HS_STANDARD_ID "CDROM" -struct hs_volume_descriptor { - char foo[ISODCL ( 1, 8)]; /* 733 */ - char type[ISODCL ( 9, 9)]; /* 711 */ - char id[ISODCL ( 10, 14)]; - char version[ISODCL ( 15, 15)]; /* 711 */ - char data[ISODCL(16,2048)]; -}; - -#define EXT_SUPER_MAGIC 0x137D -struct ext_super_block { - char s_dummy[56]; - char s_magic[2]; -}; -#define extmagic(s) assemble2le(s.s_magic) - -#define EXT2_PRE_02B_MAGIC 0xEF51 -#define EXT2_SUPER_MAGIC 0xEF53 -#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 -struct ext2_super_block { - char s_dummy1[56]; - char s_magic[2]; - char s_dummy2[34]; - char s_feature_compat[4]; - char s_feature_incompat[4]; - char s_feature_ro_compat[4]; - char s_uuid[16]; - char s_volume_name[16]; - char s_dummy3[88]; - char s_journal_inum[4]; /* ext3 only */ -}; -#define ext2magic(s) assemble2le(s.s_magic) - -struct reiserfs_super_block -{ - char s_block_count[4]; - char s_free_blocks[4]; - char s_root_block[4]; - char s_journal_block[4]; - char s_journal_dev[4]; - char s_orig_journal_size[4]; - char s_journal_trans_max[4]; - char s_journal_block_count[4]; - char s_journal_max_batch[4]; - char s_journal_max_commit_age[4]; - char s_journal_max_trans_age[4]; - char s_blocksize[2]; - char s_oid_maxsize[2]; - char s_oid_cursize[2]; - char s_state[2]; - char s_magic[12]; -}; -#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs" -#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs" -#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) -/* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ -#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) - -#define _XIAFS_SUPER_MAGIC 0x012FD16D -struct xiafs_super_block { - char s_boot_segment[512]; /* 1st sector reserved for boot */ - char s_dummy[60]; - char s_magic[4]; -}; -#define xiafsmagic(s) assemble4le(s.s_magic) - -/* From jj@sunsite.ms.mff.cuni.cz Mon Mar 23 15:19:05 1998 */ -#define UFS_SUPER_MAGIC_LE 0x00011954 -#define UFS_SUPER_MAGIC_BE 0x54190100 -struct ufs_super_block { - char s_dummy[0x55c]; - char s_magic[4]; -}; -#define ufsmagic(s) assemble4le(s.s_magic) - -/* From Richard.Russon@ait.co.uk Wed Feb 24 08:05:27 1999 */ -#define NTFS_SUPER_MAGIC "NTFS" -struct ntfs_super_block { - char s_dummy[3]; - char s_magic[4]; -}; - -/* From inspection of a few FAT filesystems - aeb */ -/* Unfortunately I find almost the same thing on an extended partition; - it looks like a primary has some directory entries where the extended - has a partition table: IO.SYS, MSDOS.SYS, WINBOOT.SYS */ -struct fat_super_block { - char s_dummy[3]; - char s_os[8]; /* "MSDOS5.0" or "MSWIN4.0" or "MSWIN4.1" */ - /* mtools-3.9.4 writes "MTOOL394" */ - char s_dummy2[32]; - char s_label[11]; /* for DOS? */ - char s_fs[8]; /* "FAT12 " or "FAT16 " or all zero */ - /* OS/2 BM has "FAT " here. */ - char s_dummy3[9]; - char s_label2[11]; /* for Windows? */ - char s_fs2[8]; /* garbage or "FAT32 " */ -}; - -#define XFS_SUPER_MAGIC "XFSB" -struct xfs_super_block { - char s_magic[4]; - char s_dummy[28]; - char s_uuid[16]; - char s_dummy2[60]; - char s_fname[12]; -}; - -#define CRAMFS_SUPER_MAGIC 0x28cd3d45 -#define CRAMFS_SUPER_MAGIC_BE 0x453dcd28 -struct cramfs_super_block { - char s_magic[4]; - char s_dummy[12]; - char s_id[16]; -}; -#define cramfsmagic(s) assemble4le(s.s_magic) - -#define HFS_SUPER_MAGIC 0x4244 -#define HFSPLUS_SUPER_MAGIC 0x482B -#define HFSPLUS_SUPER_VERSION 0x004 -struct hfs_super_block { - char s_magic[2]; - char s_version[2]; -}; -#define hfsmagic(s) assemble2le(s.s_magic) -#define hfsversion(s) assemble2le(s.s_version) - -#define HPFS_SUPER_MAGIC 0xf995e849 -struct hpfs_super_block { - char s_magic[4]; - char s_magic2[4]; -}; -#define hpfsmagic(s) assemble4le(s.s_magic) - -struct adfs_super_block { - char s_dummy[448]; - char s_blksize[1]; - char s_dummy2[62]; - char s_checksum[1]; -}; -#define adfsblksize(s) ((uint) s.s_blksize[0]) - -/* found in first 4 bytes of block 1 */ -struct vxfs_super_block { - char s_magic[4]; -}; -#define vxfsmagic(s) assemble4le(s.s_magic) -#define VXFS_SUPER_MAGIC 0xa501FCF5 - -struct jfs_super_block { - char s_magic[4]; - char s_version[4]; - char s_dummy1[93]; - char s_fpack[11]; - char s_dummy2[24]; - char s_uuid[16]; - char s_label[16]; -}; -#define JFS_SUPER1_OFF 0x8000 -#define JFS_MAGIC "JFS1" - -struct sysv_super_block { - char s_dummy1[504]; - char s_magic[4]; - char type[4]; -}; -#define sysvmagic(s) assemble4le(s.s_magic) -#define SYSV_SUPER_MAGIC 0xfd187e20 - -struct mdp_super_block { - char md_magic[4]; -}; -#define MD_SB_MAGIC 0xa92b4efc -#define mdsbmagic(s) assemble4le(s.md_magic) - -struct ocfs_volume_header { - char minor_version[4]; - char major_version[4]; - char signature[128]; -}; - -struct ocfs_volume_label { - char disk_lock[48]; - char label[64]; - char label_len[2]; -}; - -#define ocfslabellen(o) assemble2le(o.label_len) -#define OCFS_MAGIC "OracleCFS" - -/* Common gfs/gfs2 constants: */ -#define GFS_MAGIC 0x01161970 -#define GFS_DEFAULT_BSIZE 4096 -#define GFS_SUPERBLOCK_OFFSET (0x10 * GFS_DEFAULT_BSIZE) -#define GFS_LOCKNAME_LEN 64 - -/* gfs1 constants: */ -#define GFS_FORMAT_FS 1309 -#define GFS_FORMAT_MULTI 1401 -/* gfs2 constants: */ -#define GFS2_FORMAT_FS 1801 -#define GFS2_FORMAT_MULTI 1900 - -struct gfs2_meta_header { - char mh_magic[4]; - char mh_type[4]; - char __pad0[8]; /* Was generation number in gfs1 */ - char mh_format[4]; - char __pad1[4]; /* Was incarnation number in gfs1 */ -}; - -struct gfs2_inum { - char no_formal_ino[8]; - char no_addr[8]; -}; - -struct gfs2_sb { - struct gfs2_meta_header sb_header; - - char sb_fs_format[4]; - char sb_multihost_format[4]; - char __pad0[4]; /* Was superblock flags in gfs1 */ - - char sb_bsize[4]; - char sb_bsize_shift[4]; - char __pad1[4]; /* Was journal segment size in gfs1 */ - - struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ - struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ - struct gfs2_inum sb_root_dir; - - char sb_lockproto[GFS_LOCKNAME_LEN]; - char sb_locktable[GFS_LOCKNAME_LEN]; - /* In gfs1, quota and license dinodes followed */ -}; - -#define gfsmagic(s) assemble4be(s.sb_header.mh_magic) -#define gfsformat(s) assemble4be(s.sb_fs_format) -#define gfsmultiformat(s) assemble4be(s.sb_multihost_format) - -/* btrfs constants */ -#define BTRFS_SUPER_INFO_OFFSET (64 * 1024) - -/* 32 bytes in various csum fields */ -#define BTRFS_CSUM_SIZE 32 - -#define BTRFS_FSID_SIZE 16 - -#define BTRFS_MAGIC "_BHRfS_M" - -/* - * the super block basically lists the main trees of the FS - * it currently lacks any block count etc etc - */ -struct btrfs_super_block { - char csum[BTRFS_CSUM_SIZE]; - /* the first 3 fields must match struct btrfs_header */ - char fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ - char bytenr[8]; /* this block number */ - char flags[8]; - - /* allowed to be different from the btrfs_header from here own down */ - char magic[8]; - /* more follows but this is all our libdisk cares about*/ -} __attribute__ ((__packed__)); - -static inline int -assemble2le(char *p) { - return (p[0] | (p[1] << 8)); -} - -static inline int -assemble4le(char *p) { - return (p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24)); -} - -static inline int -assemble4be(char *p) { - return (p[3] | (p[2] << 8) | (p[1] << 16) | (p[0] << 24)); -} diff --git a/libdisk/lvm.c b/libdisk/lvm.c deleted file mode 100644 index d8d7536..0000000 --- a/libdisk/lvm.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" - -#ifndef LVM_BLK_MAJOR -#define LVM_BLK_MAJOR 58 -#endif - -int -mnt_is_lvm_subvol( - dev_t dev) -{ - if (major(dev) == LVM_BLK_MAJOR) - return 1; - return get_driver_block_major("lvm", major(dev)); -} - -int -lvm_get_subvol_stripe( - char *dfile, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - int lvpipe[2], stripes = 0, stripesize = 0; - char *largv[3], buf[1024]; - FILE *stream; - char tmppath[MAXPATHLEN]; - - if (!mnt_is_lvm_subvol(sb->st_rdev)) - return 0; - - /* Quest for lvdisplay */ - if (!access("/usr/local/sbin/lvdisplay", R_OK|X_OK)) - largv[0] = "/usr/local/sbin/lvdisplay"; - else if (!access("/usr/sbin/lvdisplay", R_OK|X_OK)) - largv[0] = "/usr/sbin/lvdisplay"; - else if (!access("/sbin/lvdisplay", R_OK|X_OK)) - largv[0] = "/sbin/lvdisplay"; - else { - fprintf(stderr, - _("Warning - LVM device, but no lvdisplay(8) found\n")); - return 0; - } - - /* realpath gives an absolute pathname */ - largv[1] = realpath(dfile, tmppath); - largv[2] = NULL; - - /* Open pipe */ - if (pipe(lvpipe) < 0) { - fprintf(stderr, _("Could not open pipe\n")); - exit(1); - } - - /* Spawn lvdisplay */ - switch (fork()) { - case 0: - /* Plumbing */ - close(lvpipe[0]); - - if (lvpipe[1] != STDOUT_FILENO) - dup2(lvpipe[1], STDOUT_FILENO); - - execv(largv[0], largv); - - fprintf(stderr, _("Failed to execute %s\n"), largv[0]); - exit(1); - - case -1: - fprintf(stderr, _("Failed forking lvdisplay process\n")); - exit(1); - - default: - break; - } - - close(lvpipe[1]); - stream = fdopen(lvpipe[0], "r"); - - /* Scan stream for keywords */ - while (fgets(buf, 1023, stream) != NULL) { - - if (!strncmp(buf, "Stripes", 7)) - sscanf(buf, "Stripes %d", &stripes); - - if (!strncmp(buf, "Stripe size", 11)) - sscanf(buf, "Stripe size (KByte) %d", &stripesize); - } - - /* Update sizes */ - *sunit = stripesize << 1; - *swidth = (stripes * stripesize) << 1; - *sectalign = 0; - - fclose(stream); - - return 1; -} diff --git a/libdisk/md.c b/libdisk/md.c deleted file mode 100644 index 82b1cf1..0000000 --- a/libdisk/md.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "drivers.h" -#include "md.h" - -int -mnt_is_md_subvol( - dev_t dev, - enum md_type *type) -{ - *type = MD_TYPE_MD; - if (major(dev) == MD_MAJOR) - return 1; - if (get_driver_block_major("md", major(dev))) - return 1; - *type = MD_TYPE_MDP; - if (get_driver_block_major("mdp", major(dev))) - return 1; - return 0; -} - -int -md_get_subvol_stripe( - char *dfile, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - char *pc; - char *dfile2 = NULL; - enum md_type md_type; - - if (mnt_is_md_subvol(sb->st_rdev, &md_type)) { - struct md_array_info md; - int fd; - - if (md_type == MD_TYPE_MDP) { - pc = strrchr(dfile, 'd'); - if (pc) - pc = strchr(pc, 'p'); - if (!pc) { - fprintf(stderr, - _("Error getting MD array device from %s\n"), - dfile); - exit(1); - } - dfile2 = malloc(pc - dfile + 1); - if (dfile2 == NULL) { - fprintf(stderr, - _("Couldn't malloc device string\n")); - exit(1); - } - strncpy(dfile2, dfile, pc - dfile); - dfile2[pc - dfile + 1] = '\0'; - } - /* Open device */ - fd = open(dfile2 ? dfile2 : dfile, O_RDONLY); - if (fd == -1) { - free(dfile2); - return 0; - } - - /* Is this thing on... */ - if (ioctl(fd, GET_ARRAY_INFO, &md)) { - fprintf(stderr, - _("Error getting MD array info from %s\n"), - dfile2 ? dfile2 : dfile); - exit(1); - } - close(fd); - free(dfile2); - - /* - * Ignore levels we don't want aligned (e.g. linear) - * and deduct disk(s) from stripe width on RAID4/5/6 - */ - switch (md.level) { - case 6: - md.raid_disks--; - /* fallthrough */ - case 5: - case 4: - md.raid_disks--; - /* fallthrough */ - case 1: - case 0: - case 10: - break; - default: - return 0; - } - - /* Update sizes */ - *sunit = md.chunk_size >> 9; - *swidth = *sunit * md.raid_disks; - *sectalign = (md.level == 4 || md.level == 5 || md.level == 6); - - return 1; - } - return 0; -} diff --git a/libdisk/md.h b/libdisk/md.h deleted file mode 100644 index c3284e5..0000000 --- a/libdisk/md.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2002-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef MD_MAJOR -#define MD_MAJOR 9 /* we also check at runtime */ -#endif - -#define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, struct md_array_info) - -#define MD_SB_CLEAN 0 -#define MD_SB_ERRORS 1 - -struct md_array_info { - /* - * Generic constant information - */ - __uint32_t major_version; - __uint32_t minor_version; - __uint32_t patch_version; - __uint32_t ctime; - __uint32_t level; - __uint32_t size; - __uint32_t nr_disks; - __uint32_t raid_disks; - __uint32_t md_minor; - __uint32_t not_persistent; - - /* - * Generic state information - */ - __uint32_t utime; /* 0 Superblock update time */ - __uint32_t state; /* 1 State bits (clean, ...) */ - __uint32_t active_disks; /* 2 Number of currently active disks */ - __uint32_t working_disks; /* 3 Number of working disks */ - __uint32_t failed_disks; /* 4 Number of failed disks */ - __uint32_t spare_disks; /* 5 Number of spare disks */ - - /* - * Personality information - */ - __uint32_t layout; /* 0 the array's physical layout */ - __uint32_t chunk_size; /* 1 chunk size in bytes */ - -}; - -/* - * MDP = partitionable RAID arrays - */ -enum md_type { - MD_TYPE_MD, - MD_TYPE_MDP -}; diff --git a/libdisk/pttype.c b/libdisk/pttype.c deleted file mode 100644 index 172073a..0000000 --- a/libdisk/pttype.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2000-2001 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include "pttype.h" - -#define blksize 512 - -static u_int32_t -twos_complement_32bit_sum(u_int32_t *base, int size) -{ - int i; - u_int32_t sum = 0; - - size = size / sizeof(u_int32_t); - for (i = 0; i < size; i++) - sum = sum - ntohl(base[i]); - return sum; -} - -static int -sgi_parttable(char *base) -{ - u_int32_t csum; - struct volume_header *vh = (struct volume_header *)base; - - if (ntohl(vh->vh_magic) != VHMAGIC) - return 0; - csum = twos_complement_32bit_sum((u_int32_t *)vh, - sizeof(struct volume_header)); - return !csum; -} - -static int -dos_parttable(char *base) -{ - return (base[510] == 0x55 && base[511] == 0xaa); -} - -static int -aix_parttable(char *base) -{ - return (aixlabel(base)->magic == AIX_LABEL_MAGIC || - aixlabel(base)->magic == AIX_LABEL_MAGIC_SWAPPED); -} - -static int -sun_parttable(char *base) -{ - unsigned short *ush; - int csum = 0; - - if (sunlabel(base)->magic != SUN_LABEL_MAGIC && - sunlabel(base)->magic != SUN_LABEL_MAGIC_SWAPPED) - return csum; - ush = ((unsigned short *) (sunlabel(base) + 1)) - 1; - while (ush >= (unsigned short *)sunlabel(base)) - csum ^= *ush--; - return !csum; -} - -static int -mac_parttable(char *base) -{ - return (ntohs(maclabel(base)->magic) == MAC_LABEL_MAGIC || - ntohs(maclabel(base)->magic) == MAC_PARTITION_MAGIC || - ntohs(maclabel(base)->magic) == MAC_OLD_PARTITION_MAGIC); -} - - -char * -pttype(char *device) -{ - int fd; - char *type = NULL; - char buf[blksize]; - - if ((fd = open(device, O_RDONLY)) < 0) - ; - else if (read(fd, buf, blksize) != blksize) - ; - else { - if (sgi_parttable(buf)) - type = "SGI"; - else if (sun_parttable(buf)) - type = "Sun"; - else if (aix_parttable(buf)) - type = "AIX"; - else if (dos_parttable(buf)) - type = "DOS"; - else if (mac_parttable(buf)) - type = "Mac"; - } - - if (fd >= 0) - close(fd); - return type; -} diff --git a/libdisk/pttype.h b/libdisk/pttype.h deleted file mode 100644 index 4f35c47..0000000 --- a/libdisk/pttype.h +++ /dev/null @@ -1,50 +0,0 @@ -typedef struct { - unsigned char info[128]; /* Informative text string */ - unsigned char spare0[14]; - struct sun_info { - unsigned char spare1; - unsigned char id; - unsigned char spare2; - unsigned char flags; - } infos[8]; - unsigned char spare1[246]; /* Boot information etc. */ - unsigned short rspeed; /* Disk rotational speed */ - unsigned short pcylcount; /* Physical cylinder count */ - unsigned short sparecyl; /* extra sects per cylinder */ - unsigned char spare2[4]; /* More magic... */ - unsigned short ilfact; /* Interleave factor */ - unsigned short ncyl; /* Data cylinder count */ - unsigned short nacyl; /* Alt. cylinder count */ - unsigned short ntrks; /* Tracks per cylinder */ - unsigned short nsect; /* Sectors per track */ - unsigned char spare3[4]; /* Even more magic... */ - struct sun_partition { - u_int32_t start_cylinder; - u_int32_t num_sectors; - } partitions[8]; - unsigned short magic; /* Magic number */ - unsigned short csum; /* Label xor'd checksum */ -} sun_partition; - -#define SUN_LABEL_MAGIC 0xDABE -#define SUN_LABEL_MAGIC_SWAPPED 0xBEDA -#define sunlabel(x) ((sun_partition *)x) - -typedef struct { - unsigned int magic; /* expect AIX_LABEL_MAGIC */ - /* ... */ -} aix_partition; - -#define AIX_LABEL_MAGIC 0xc9c2d4c1 -#define AIX_LABEL_MAGIC_SWAPPED 0xc1d4c2c9 -#define aixlabel(x) ((aix_partition *)x) - -typedef struct { - unsigned short magic; - /* ... */ -} mac_partition; - -#define MAC_LABEL_MAGIC 0x4552 -#define MAC_PARTITION_MAGIC 0x504d -#define MAC_OLD_PARTITION_MAGIC 0x5453 -#define maclabel(x) ((mac_partition *)x) diff --git a/libdisk/xvm.c b/libdisk/xvm.c deleted file mode 100644 index 79dff21..0000000 --- a/libdisk/xvm.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2000-2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include "xvm.h" - -int -mnt_is_xvm_subvol( - dev_t dev) -{ - return get_driver_block_major("xvm", major(dev)); -} - -/* - * If the logical device is a xvm striped volume, then it returns the - * stripe unit and stripe width information. - * Input parameters: the logical volume - * the subvolume type - (SVTYPE_RT or - * SVTYPE_DATA) - * Output parameters: the stripe unit and width in 512 byte blocks - * true/false - was this device an XVM volume? - */ -int -xvm_get_subvol_stripe( - char *dev, - sv_type_t type, - int *sunit, - int *swidth, - int *sectalign, - struct stat64 *sb) -{ - int fd; - xvm_getdev_t getdev; - xvm_subvol_stripe_t subvol_stripe; - - if (!mnt_is_xvm_subvol(sb->st_rdev)) - return 0; - - /* - * This will actually open the data subvolume. - */ - if ((fd = open(dev, O_RDONLY)) < 0) - return 0; - - /* - * Go and get the the information for the correct - * subvolume. - */ - if (ioctl(fd, DIOCGETVOLDEV, &getdev) < 0) { - close(fd); - return 0; - } - if ( (type == SVTYPE_RT) && (getdev.rt_subvol_dev) ) - subvol_stripe.dev = getdev.rt_subvol_dev; - else if ( (type == SVTYPE_DATA) && (getdev.data_subvol_dev) ) - subvol_stripe.dev = getdev.data_subvol_dev; - else { - close(fd); - return 0; - } - - if (ioctl(fd, DIOCGETVOLSTRIPE, &subvol_stripe) < 0) { - close(fd); - return 0; - } - - *sunit = subvol_stripe.unit_size; - *swidth = *sunit * subvol_stripe.width_size; - *sectalign = 0; - close(fd); - return 1; -} diff --git a/libdisk/xvm.h b/libdisk/xvm.h deleted file mode 100644 index 307e77b..0000000 --- a/libdisk/xvm.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#define _DIOC_(x) (('d'<<8) | x) -#define DIOCGETVOLDEV _DIOC_(36) /* subvolume devices */ -#define DIOCGETVOLSTRIPE _DIOC_(47) /* subvolume stripe info */ - -/* - * Structure returned by the DIOCGETVOLDEV ioctl to list the - * subvolume device nodes in a volume. These are external device - * numbers. - */ -#define XVM_GETDEV_VERS 1 - -typedef __uint32_t xvm_dev_t; - -typedef struct { - __uint32_t version; - xvm_dev_t data_subvol_dev; - - xvm_dev_t log_subvol_dev; - xvm_dev_t rt_subvol_dev; - - xvm_dev_t sp_subvol_dev; -} xvm_getdev_t; - -/* - * Structure returned by the DIOCGETVOLSTRIPE ioctl to describe - * the subvolume stripe units and width. - */ -#define XVM_SUBVOL_GEOMETRY_VERS 1 -typedef struct xvm_subvol_stripe_s { - __uint32_t version; - __uint32_t unit_size; /* in blocks */ - __uint32_t width_size; /* in blocks */ - __uint32_t pad1; /* padding */ - xvm_dev_t dev; -} xvm_subvol_stripe_t; diff --git a/m4/package_blkid.m4 b/m4/package_blkid.m4 index 44ca2cc..9510dce 100644 --- a/m4/package_blkid.m4 +++ b/m4/package_blkid.m4 @@ -4,17 +4,15 @@ AC_DEFUN([AC_HAVE_BLKID_TOPO], [ - enable_blkid="$1" - if test "$enable_blkid" = "yes"; then - AC_SEARCH_LIBS([blkid_probe_all], [blkid]) - AC_CHECK_FUNCS(blkid_probe_get_topology) - if test $ac_cv_func_blkid_probe_get_topology = yes; then - libblkid="-lblkid" - else - libblkd="" - enable_blkid="no" - AC_SUBST(enable_blkid) - fi + AC_SEARCH_LIBS([blkid_probe_all], [blkid]) + AC_CHECK_FUNCS(blkid_probe_get_topology) + if test $ac_cv_func_blkid_probe_get_topology = yes; then + libblkid="-lblkid" + else + echo + echo 'FATAL ERROR: could not find a valid BLKID header.' + echo 'Install the Block device ID development package.' + exit 1 fi AC_SUBST(libblkid) ]) diff --git a/mkfs/Makefile b/mkfs/Makefile index fd1f615..570ab07 100644 --- a/mkfs/Makefile +++ b/mkfs/Makefile @@ -6,38 +6,18 @@ TOPDIR = .. include $(TOPDIR)/include/builddefs LTCOMMAND = mkfs.xfs -FSTYP = fstyp HFILES = xfs_mkfs.h CFILES = maxtrres.c proto.c xfs_mkfs.c -ifeq ($(ENABLE_BLKID),yes) -LLDLIBS += $(LIBBLKID) -CFLAGS += -DENABLE_BLKID -else -LLDLIBS += $(LIBDISK) -LTDEPENDENCIES += $(LIBDISK) -endif - -LLDLIBS += $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) +LLDLIBS += $(LIBBLKID) $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES += $(LIBXFS) LLDFLAGS = -static-libtool-libs -LSRCFILES = $(FSTYP).c -LDIRT = $(FSTYP) - default: depend $(LTCOMMAND) -ifneq ($(ENABLE_BLKID),yes) -default: $(FSTYP) -endif - include $(BUILDRULES) -$(FSTYP): - @echo " [CC] $@" - $(Q)$(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) - install: default $(INSTALL) -m 755 -d $(PKG_ROOT_SBIN_DIR) $(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_ROOT_SBIN_DIR) diff --git a/mkfs/fstyp.c b/mkfs/fstyp.c deleted file mode 100644 index 7410516..0000000 --- a/mkfs/fstyp.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "xfs/libxfs.h" -#include - -/* - * fstyp allows the user to determine the filesystem identifier of - * mounted or unmounted filesystems using heuristics. - * - * The filesystem type is required by mount(2) and sometimes by mount(8) - * to mount filesystems of different types. fstyp uses exactly the same - * heuristics that mount does to determine whether the supplied device - * special file is of a known filesystem type. If it is, fstyp prints - * on standard output the usual filesystem identifier for that type and - * exits with a zero return code. If no filesystem is identified, fstyp - * prints "Unknown" to indicate failure and exits with a non-zero status. - * - * WARNING: The use of heuristics implies that the result of fstyp is not - * guaranteed to be accurate. - */ - -int -main(int argc, char *argv[]) -{ - char *type; - - if (argc != 2) { - fprintf(stderr, "Usage: %s \n", basename(argv[0])); - exit(1); - } - - if (access(argv[1], R_OK) < 0) { - perror(argv[1]); - exit(1); - } - - if ((type = fstype(argv[1])) == NULL) { - printf("Unknown\n"); - exit(1); - } - printf("%s\n", type); - exit(0); -} diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 11e9f4b..cf75a02 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -18,12 +18,7 @@ #include "xfs/libxfs.h" #include -#ifdef ENABLE_BLKID #include -#else -#include -#include -#endif #include "xfs_mkfs.h" /* @@ -35,7 +30,6 @@ struct fs_topology { int rtswidth; /* stripe width - rt subvolume */ int lsectorsize; /* logical sector size &*/ int psectorsize; /* physical sector size */ - int sectoralign; }; /* @@ -297,7 +291,6 @@ calc_stripe_factors( } } -#ifdef ENABLE_BLKID /* * Check for existing filesystem or partition table on device. * Returns: @@ -502,85 +495,6 @@ static void get_topology( &lsectorsize, &psectorsize, force_overwrite); } } -#else /* ENABLE_BLKID */ -static int -check_overwrite( - char *device) -{ - char *type; - - if (device && *device) { - if ((type = fstype(device)) != NULL) { - fprintf(stderr, - _("%s: %s appears to contain an existing " - "filesystem (%s).\n"), progname, device, type); - return 1; - } - if ((type = pttype(device)) != NULL) { - fprintf(stderr, - _("%s: %s appears to contain a partition " - "table (%s).\n"), progname, device, type); - return 1; - } - } - return 0; -} - -static void get_topology( - libxfs_init_t *xi, - struct fs_topology *ft, - int force_overwrite) -{ - struct stat statbuf; - char *dfile = xi->volname ? xi->volname : xi->dname; - int bsz = BBSIZE; - - /* - * If our target is a regular file, use platform_findsizes - * to try to obtain the underlying filesystem's requirements - * for direct IO; we'll set our sector size to that if possible. - */ - if (xi->disfile || - (!stat(dfile, &statbuf) && S_ISREG(statbuf.st_mode))) { - int fd; - int flags = O_RDONLY; - long long dummy; - - /* with xi->disfile we may not have the file yet! */ - if (xi->disfile) - flags |= O_CREAT; - - fd = open(dfile, flags, 0666); - /* If this fails we just fall back to BBSIZE */ - if (fd >= 0) { - platform_findsizes(dfile, fd, &dummy, &bsz); - close(fd); - } - } else { - int fd; - long long dummy; - - get_subvol_stripe_wrapper(dfile, SVTYPE_DATA, - &ft->dsunit, &ft->dswidth, &ft->sectoralign); - fd = open(dfile, O_RDONLY); - /* If this fails we just fall back to BBSIZE */ - if (fd >= 0) { - platform_findsizes(dfile, fd, &dummy, &bsz); - close(fd); - } - } - - ft->lsectorsize = bsz; - ft->psectorsize = bsz; - - if (xi->rtname && !xi->risfile) { - int dummy1; - - get_subvol_stripe_wrapper(dfile, SVTYPE_RT, &dummy1, - &ft->rtswidth, &dummy1); - } -} -#endif /* ENABLE_BLKID */ static void fixup_log_stripe_unit( @@ -1804,17 +1718,7 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"), memset(&ft, 0, sizeof(ft)); get_topology(&xi, &ft, force_overwrite); - if (ft.sectoralign) { - /* - * Older Linux software RAID versions want the sector size - * to match the block size to avoid switching I/O sizes. - * For the legacy libdisk case we thus set the sector size to - * match the block size. For systems using libblkid we assume - * that the kernel is recent enough to not require this and - * ft.sectoralign will never be set. - */ - sectorsize = blocksize; - } else if (!ssflag) { + if (!ssflag) { /* * Unless specified manually on the command line use the * advertised sector size of the device. We use the physical @@ -1842,7 +1746,7 @@ _("switching to logical sector size %d\n"), } } - if (ft.sectoralign || !ssflag) { + if (!ssflag) { sectorlog = libxfs_highbit32(sectorsize); if (loginternal) { lsectorsize = sectorsize; diff --git a/po/de.po b/po/de.po index 7933636..fc62525 100644 --- a/po/de.po +++ b/po/de.po @@ -5706,57 +5706,6 @@ msgstr "[-cpv]" msgid "print or check parent inodes" msgstr "Eltern-Inodes ausgeben oder prüfen" -#: .././libdisk/lvm.c:60 -#, c-format -msgid "Warning - LVM device, but no lvdisplay(8) found\n" -msgstr "Warnung: LVM-Gerät, aber es wurde kein lvdisplay(8) gefunden\n" - -#: .././libdisk/lvm.c:70 .././libdisk/dm.c:73 -#, c-format -msgid "Could not open pipe\n" -msgstr "Weiterleitung kann nicht geöffnet werden\n" - -#: .././libdisk/lvm.c:85 .././libdisk/dm.c:88 -#, c-format -msgid "Failed to execute %s\n" -msgstr "Ausführen von %s fehlgeschlagen\n" - -#: .././libdisk/lvm.c:89 -#, c-format -msgid "Failed forking lvdisplay process\n" -msgstr "Erstellen des »lvdisplay«-Unterprozesses fehlgeschlagen\n" - -#: .././libdisk/drivers.c:35 -#, c-format -msgid "Cannot stat %s: %s\n" -msgstr "Kann Status für »%s« nicht abfragen:%s\n" - -#: .././libdisk/md.c:61 -#, c-format -msgid "Error getting MD array device from %s\n" -msgstr "Fehler beim Ermitteln des MD-Array-Geräts von %s\n" - -#: .././libdisk/md.c:68 -#, c-format -msgid "Couldn't malloc device string\n" -msgstr "malloc von Gerätzeichenkette konnte nicht durchgeführt werden\n" - -#: .././libdisk/md.c:84 -#, c-format -msgid "Error getting MD array info from %s\n" -msgstr "Fehler beim Ermitteln der MD-Array-Informationen von %s\n" - -#: .././libdisk/dm.c:57 -#, c-format -msgid "Warning - device mapper device, but no dmsetup(8) found\n" -msgstr "" -"Warnung: »device mapper«-Gerät, aber es wurde kein dmsetup(8) gefunden\n" - -#: .././libdisk/dm.c:92 -#, c-format -msgid "Failed forking dmsetup process\n" -msgstr "Erstellen des »dmsetup«-Unterprozesses fehlgeschlagen\n" - #: .././libxcmd/command.c:85 #, c-format msgid "bad argument count %d to %s, expected at least %d arguments\n" diff --git a/po/pl.po b/po/pl.po index 02d8c22..a950f77 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5606,55 +5606,6 @@ msgstr "offset" msgid "truncates the current file at the given offset" msgstr "ucięcie bieżącego pliku na podanym offsecie" -#: .././libdisk/dm.c:57 -#, c-format -msgid "Warning - device mapper device, but no dmsetup(8) found\n" -msgstr "Uwaga - urządzenie device mappera, ale nie znaleziono dmsetup(8)\n" - -#: .././libdisk/dm.c:73 .././libdisk/lvm.c:70 -#, c-format -msgid "Could not open pipe\n" -msgstr "Nie udało się otworzyć potoku\n" - -#: .././libdisk/dm.c:88 .././libdisk/lvm.c:85 -#, c-format -msgid "Failed to execute %s\n" -msgstr "Nie udało się wywołać %s\n" - -#: .././libdisk/dm.c:92 -#, c-format -msgid "Failed forking dmsetup process\n" -msgstr "Nie udało się odgałęzić procesu dmsetup\n" - -#: .././libdisk/drivers.c:35 -#, c-format -msgid "Cannot stat %s: %s\n" -msgstr "Nie można wykonać stat na %s: %s\n" - -#: .././libdisk/lvm.c:60 -#, c-format -msgid "Warning - LVM device, but no lvdisplay(8) found\n" -msgstr "Uwaga - urządzenie LVM, ale nie znaleziono lvdisplay(8)\n" - -#: .././libdisk/lvm.c:89 -#, c-format -msgid "Failed forking lvdisplay process\n" -msgstr "Nie udało się odgałęzić procesu lvdisplay\n" - -#: .././libdisk/md.c:61 -#, c-format -msgid "Error getting MD array device from %s\n" -msgstr "Błąd podczas pobierania urządzenia macierzy MD z %s\n" - -#: .././libdisk/md.c:68 -#, c-format -msgid "Couldn't malloc device string\n" -msgstr "Nie można przydzielić łańcucha nazwy urządzenia\n" - -#: .././libdisk/md.c:84 -#, c-format -msgid "Error getting MD array info from %s\n" -msgstr "Błąd podczas pobierania informacji o macierzy MD z %s\n" #: .././libxcmd/command.c:85 #, c-format -- 2.4.5 From rbh@intomics.com Wed Jul 8 05:28:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_FONT_FACE_BAD, HTML_MESSAGE,T_DKIM_INVALID,T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B3CA17F5F for ; Wed, 8 Jul 2015 05:28:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0F1B4AC002 for ; Wed, 8 Jul 2015 03:28:26 -0700 (PDT) X-ASG-Debug-ID: 1436351300-04cb6c209ee0c30001-NocioJ Received: from columba.intomics.com (columba.intomics.com [77.72.50.68]) by cuda.sgi.com with ESMTP id 49SMgdskvrvYiOS5 for ; Wed, 08 Jul 2015 03:28:21 -0700 (PDT) X-Barracuda-Envelope-From: rbh@intomics.com X-Barracuda-Apparent-Source-IP: 77.72.50.68 Received: from localhost (localhost [127.0.0.1]) by columba.intomics.com (Postfix) with ESMTP id 6829F220581 for ; Wed, 8 Jul 2015 12:28:20 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at intomics.com Received: from columba ([127.0.0.1]) by localhost (columba.intomics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id D7rBNDGZ-coB for ; Wed, 8 Jul 2015 12:28:17 +0200 (CEST) Received: from dhcp-0-1-94.intomics.com (dhcp-0-1-94.intomics.com [10.0.1.94]) (Authenticated sender: rbh) by columba.intomics.com (Postfix) with ESMTPSA id BF3BC22058C for ; Wed, 8 Jul 2015 12:28:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intomics.com; s=201205; t=1436351297; bh=NTT8X5py7CtOJGUkIdexv13tBUa8Wsca9vbMlDHa5lo=; h=From:Subject:Date:References:To:In-Reply-To; b=Fhg8K71vp/e8dxwI14RS9kP1gbJSoXboLEUDTJjpuRNUs1kWS8N8THp4k85NRdg9D +/D81sqmn9gcczmHa1Y4x7TXde64upcXX+AZ15AF+vMyVsFhmg/FxI5f7csKghikBZ CqA+qYNzOP5GOGw+/qDORWPYZJnBqWUoMN68eZjY= From: Rasmus Borup Hansen Content-Type: multipart/alternative; boundary="Apple-Mail=_EE089567-6066-4BA4-98F8-D90F6CC22FDC" Message-Id: <7B558BFF-FC46-4378-84C0-4442C1209F45@intomics.com> Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\)) Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Date: Wed, 8 Jul 2015 12:28:19 +0200 X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> <20150703235500.GR7943@dastard> <0F9CF77D-1DA5-41DD-87AA-7F4109F08EFB@intomics.com> <20150707001900.GU7943@dastard> To: xfs@oss.sgi.com In-Reply-To: <20150707001900.GU7943@dastard> X-Mailer: Apple Mail (2.2098) X-Barracuda-Connect: columba.intomics.com[77.72.50.68] X-Barracuda-Start-Time: 1436351301 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.71 X-Barracuda-Spam-Status: No, SCORE=0.71 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085, DKIM_SIGNED, DKIM_VERIFIED, HTML_FONT_FACE_BAD, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20559 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word 0.10 BSF_SC0_SA085 Custom Rule SA085 --Apple-Mail=_EE089567-6066-4BA4-98F8-D90F6CC22FDC Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On 07 Jul 2015, at 02:19, Dave Chinner wrote: >=20 > On Mon, Jul 06, 2015 at 01:08:52PM +0200, Rasmus Borup Hansen wrote: >> I've made a metadump and I'm running another xfs_repair, but given >> that the first metadump is 132 GB, will you still be interested in >> looking at the dumps? >=20 > That's significantly larger than my monthly download quota. How big > is it once you compress it? One metadump is 25 GB when compressed with xz -9. The server the files = currently reside on is not very fast, so I've only compressed one of = them so far. I used the strings command on the metadump files and discovered that = they contain fragments of files that we really don't want to leave our = IT systems. However, if you think it's worth the effort, I could set up = a virtual machine with the metadump files and give you access with your = SSH public key. But then you'll have to tell me which tools you'll need = for investigating the files. > Also, because of the size of the metadump, I'll need some context > about the hardware it is running on. Can you you please also provide > the information in: >=20 > = http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when= _reporting_a_problem.3F >=20 > so I have a better idea of environment the problem is showing up in. $ uname -a Linux mammuthus 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC = 2015 x86_64 x86_64 x86_64 GNU/Linux $ ./xfs_repair -V xfs_repair version 3.2.3 $ cat /proc/cpuinfo | grep processor | wc -l 2 $ cat /proc/meminfo MemTotal: 10228560 kB MemFree: 300612 kB Buffers: 111996 kB Cached: 3569448 kB SwapCached: 7836 kB Active: 1915848 kB Inactive: 2510244 kB Active(anon): 358064 kB Inactive(anon): 386784 kB Active(file): 1557784 kB Inactive(file): 2123460 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2088956 kB SwapFree: 2042964 kB Dirty: 3972 kB Writeback: 0 kB AnonPages: 739808 kB Mapped: 18340 kB Shmem: 72 kB Slab: 4672980 kB SReclaimable: 3927540 kB SUnreclaim: 745440 kB KernelStack: 2328 kB PageTables: 8840 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 7203236 kB Committed_AS: 1152936 kB VmallocTotal: 34359738367 kB VmallocUsed: 309048 kB VmallocChunk: 34359412736 kB HardwareCorrupted: 0 kB AnonHugePages: 8192 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 62052 kB DirectMap2M: 10414080 kB $ cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 udev /dev devtmpfs rw,relatime,size=3D5103100k,nr_inodes=3D1275775,mode=3D= 755 0 0 devpts /dev/pts devpts = rw,nosuid,noexec,relatime,gid=3D5,mode=3D620,ptmxmode=3D000 0 0 tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=3D1022856k,mode=3D755 0 = 0 /dev/mapper/mammuthus-root / ext4 = rw,relatime,errors=3Dremount-ro,data=3Dordered 0 0 none /sys/fs/cgroup tmpfs rw,relatime,size=3D4k,mode=3D755 0 0 none /sys/fs/fuse/connections fusectl rw,relatime 0 0 none /sys/kernel/debug debugfs rw,relatime 0 0 none /sys/kernel/security securityfs rw,relatime 0 0 none /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=3D5120k 0 0 none /run/shm tmpfs rw,nosuid,nodev,relatime 0 0 none /run/user tmpfs = rw,nosuid,nodev,noexec,relatime,size=3D102400k,mode=3D755 0 0 none /sys/fs/pstore pstore rw,relatime 0 0 /dev/sdd1 /boot ext2 rw,relatime 0 0 systemd /sys/fs/cgroup/systemd cgroup = rw,nosuid,nodev,noexec,relatime,name=3Dsystemd 0 0 /dev/mapper/backup02-limited_backup /limited_backup xfs = rw,noatime,attr2,inode64,logbsize=3D256k,noquota 0 0 /dev/mapper/backup02-timemachine /timemachine_backup ext4 = rw,relatime,errors=3Dremount-ro,data=3Dordered,jqfmt=3Dvfsv0,usrjquota=3D.= aquota.user,grpjquota=3D.aquota.group 0 0 /dev/mapper/backup01-data /backup xfs = rw,noatime,attr2,inode64,logbsize=3D256k,noquota 0 0 This is what /proc/mounts looks like currently. When the error first = occurred there was no /dev/mapper/backup02 volume group and = /dev/mapper/backup01-data (which has the file system that behaves = strangely) was mounted with user and project quota. Of course, the file = system was not mounted when running xfs_repair. $ cat /proc/partitions major minor #blocks name 8 16 19529728000 sdb 8 17 19529726959 sdb1 8 0 39064698880 sda 8 1 39064697839 sda1 252 0 39064694784 dm-0 8 32 976224256 sdc 8 33 976223215 sdc1 8 48 155713536 sdd 8 49 248832 sdd1 8 50 1 sdd2 8 53 155461632 sdd5 252 1 153370624 dm-1 252 2 2088960 dm-2 252 3 33554432 dm-3 252 4 942665728 dm-4 252 5 5368709120 dm-5 252 6 14161014784 dm-6 I'm using hardware RAID level 6 with a Dell PERC H800 controller and an = MD1200 disk enclosure with 12 4 TB disks configured as a single "virtual = disk": $ /opt/dell/srvadmin/bin/omreport storage vdisk controller=3D0 List of Virtual Disks on Controller PERC H800 Adapter (Slot 1) Controller PERC H800 Adapter (Slot 1) ID : 0 Status : Ok Name : mammuthus01 State : Ready Hot Spare Policy violated : Not Assigned Encrypted : No Layout : RAID-6 Size : 37,255.00 GB (40002251653120 bytes) T10 Protection Information Status : No Associated Fluid Cache State : Not Applicable Device Name : /dev/sda Bus Protocol : SAS Media : HDD Read Policy : Adaptive Read Ahead Write Policy : Write Back Cache Policy : Not Applicable Stripe Element Size : 64 KB Disk Cache Policy : Disabled This "virtual disk" is the only member of the volume group "backup01": $ sudo pvscan PV /dev/sdd5 VG mammuthus lvm2 [148.26 GiB / 0 free] PV /dev/sdc1 VG extra lvm2 [931.00 GiB / 0 free] PV /dev/sdb1 VG backup02 lvm2 [18.19 TiB / 0 free] PV /dev/sda1 VG backup01 lvm2 [36.38 TiB / 0 free] Total: 4 [55.62 TiB] / in use: 4 [55.62 TiB] / in no VG: 0 [0 ] This volume group has a single logical volume: $ sudo lvscan ACTIVE '/dev/mammuthus/root' [146.27 GiB] inherit ACTIVE '/dev/mammuthus/swap_1' [1.99 GiB] inherit ACTIVE '/dev/extra/swap' [32.00 GiB] inherit ACTIVE '/dev/extra/files' [899.00 GiB] inherit ACTIVE '/dev/backup02/timemachine' [5.00 TiB] inherit ACTIVE '/dev/backup02/limited_backup' [13.19 TiB] inherit ACTIVE '/dev/backup01/data' [36.38 TiB] inherit The drives are 12 4 TB 7.2 RPK Near-Line SAS 3.5" hot plug drives: $ /opt/dell/srvadmin/bin/omreport storage pdisk controller=3D0 = connector=3D0 List of Physical Disks on Connector 0 of Controller PERC H800 Adapter = (Slot 1) Controller PERC H800 Adapter (Slot 1) ID : 0:0:0 Status : Ok Name : Physical Disk 0:0:0 State : Online Power Status : Spun Up Bus Protocol : SAS Media : HDD Part of Cache Pool : Not Applicable Remaining Rated Write Endurance : Not Applicable Failure Predicted : No Revision : GS0D Driver Version : Not Applicable Model Number : Not Applicable T10 PI Capable : No Certified : Yes Encryption Capable : No Encrypted : Not Applicable Progress : Not Applicable Mirror Set ID : Not Applicable Capacity : 3,725.50 GB (4000225165312 bytes) Used RAID Disk Space : 3,725.50 GB (4000225165312 bytes) Available RAID Disk Space : 0.00 GB (0 bytes) Hot Spare : No Vendor ID : DELL(tm) Product ID : ST4000NM0023 Serial No. : Z1Z4BNJ3 Part Number : TH0529FG2123345Q022HA02 Negotiated Speed : 6.00 Gbps Capable Speed : 6.00 Gbps PCIe Maximum Link Width : Not Applicable PCIe Negotiated Link Width : Not Applicable Sector Size : 512B Device Write Cache : Not Applicable Manufacture Day : 04 Manufacture Week : 21 Manufacture Year : 2014 SAS Address : 5000C50058C0F211 (Only output for the first drive show; the others are similar.) The individual drives don't use write caches, but the storage controller = has 512 MB cache with battery backup operating in write-back mode. $ xfs_info /backup/ meta-data=3D/dev/mapper/backup01-data isize=3D256 agcount=3D37, = agsize=3D268435455 blks =3D sectsz=3D512 attr=3D2 data =3D bsize=3D4096 blocks=3D9766173696, = imaxpct=3D5 =3D sunit=3D0 swidth=3D0 blks naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 log =3Dinternal bsize=3D4096 blocks=3D521728, = version=3D2 =3D sectsz=3D512 sunit=3D0 blks, = lazy-count=3D1 realtime =3Dnone extsz=3D4096 blocks=3D0, = rtextents=3D0 Output from ls when listing "lost+found": $ ls -laF /backup/lost+found/ ls: /backup/lost+found/11539619467: Structure needs cleaning total 4 drwxr-xr-x 2 root root 32 Jun 30 07:43 ./ drwxr-xr-x 5 root root 74 Jul 2 12:55 ../ -rw-rw-rw- 1 tsj intomics 0 Jun 23 16:11 11539619467 Relevant output from dmesg (the errors are generated by the ls command = above): [444852.252110] XFS (dm-0): Mounting Filesystem [444854.630181] XFS (dm-0): Ending clean mount [503166.397439] ffff880114063000: 00 00 00 00 00 00 00 00 fb ee 00 00 00 = 00 00 00 ................ [503166.425056] ffff880114063010: 10 00 00 00 00 20 0f e0 00 00 00 00 00 = 00 00 00 ..... .......... [503166.453484] ffff880114063020: 00 00 00 00 00 00 00 00 00 00 00 00 00 = 00 00 00 ................ [503166.480812] ffff880114063030: 00 00 00 00 00 00 00 00 00 00 00 00 00 = 00 00 00 ................ [503166.508386] XFS (dm-0): Internal error xfs_attr3_leaf_read_verify at = line 246 of file /build/buildd/linux-3.13.0/fs/xfs/xfs_attr_leaf.c. = Caller 0xffffffffa00d4885 [503166.562354] CPU: 1 PID: 3342 Comm: kworker/1:1H Not tainted = 3.13.0-55-generic #94-Ubuntu [503166.562356] Hardware name: Dell Inc. PowerEdge R310/05XKKK, BIOS = 1.8.2 08/17/2011 [503166.562394] Workqueue: xfslogd xfs_buf_iodone_work [xfs] [503166.562398] 0000000000000001 ffff8802af92bd68 ffffffff81723294 = ffff88004d1b2000 [503166.562402] ffff8802af92bd80 ffffffffa00d76fb ffffffffa00d4885 = ffff8802af92bdb8 [503166.562403] ffffffffa00d7755 000000f600200400 ffff88001b216a00 = ffff88004d1b2000 [503166.562406] Call Trace: [503166.562415] [] dump_stack+0x45/0x56 [503166.562426] [] xfs_error_report+0x3b/0x40 [xfs] [503166.562436] [] ? xfs_buf_iodone_work+0x85/0xf0 = [xfs] [503166.562446] [] xfs_corruption_error+0x55/0x80 = [xfs] [503166.562459] [] = xfs_attr3_leaf_read_verify+0x6d/0xf0 [xfs] [503166.562469] [] ? xfs_buf_iodone_work+0x85/0xf0 = [xfs] [503166.562479] [] xfs_buf_iodone_work+0x85/0xf0 = [xfs] [503166.562483] [] process_one_work+0x182/0x450 [503166.562485] [] worker_thread+0x121/0x410 [503166.562487] [] ? rescuer_thread+0x430/0x430 [503166.562489] [] kthread+0xd2/0xf0 [503166.562491] [] ? = kthread_create_on_node+0x1c0/0x1c0 [503166.562494] [] ret_from_fork+0x58/0x90 [503166.562496] [] ? = kthread_create_on_node+0x1c0/0x1c0 [503166.562498] XFS (dm-0): Corruption detected. Unmount and run = xfs_repair [503166.589297] XFS (dm-0): metadata I/O error: block 0x157e84da0 = ("xfs_trans_read_buf_map") error 117 numblks 8 The error occurs even though the file system is not doing anything else. Intomics is a contract research organization specialized in deriving = core biological insight from large scale data. We help our clients in = the pharmaceutical industry develop tomorrow's medicines better, faster, = and cheaper through optimized use of biomedical data. ----------------------------------------------------------------- Hansen, Rasmus Borup Intomics - from data to biology System Administrator Diplomvej 377 Scientific Programmer DK-2800 Kgs. Lyngby Denmark E: rbh@intomics.com W: http://www.intomics.com/ P: +45 5167 7972 P: +45 8880 7979 --Apple-Mail=_EE089567-6066-4BA4-98F8-D90F6CC22FDC Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii
On = 07 Jul 2015, at 02:19, Dave Chinner <david@fromorbit.com>= wrote:

On = Mon, Jul 06, 2015 at 01:08:52PM +0200, Rasmus Borup Hansen wrote:
I've made a metadump and = I'm running another xfs_repair, but given
that the first = metadump is 132 GB, will you still be interested in
looking = at the dumps?

That's = significantly larger than my monthly download quota.  How big
is it once you compress it?

One = metadump is 25 GB when compressed with xz -9. The server the files currently reside on is not = very fast, so I've only compressed one of them so far.

I used the strings command on the metadump files and discovered = that they contain fragments of files that we really don't want to leave = our IT systems. However, if you think it's worth the effort, I could set = up a virtual machine with the metadump files and give you access with = your SSH public key. But then you'll have to tell me which tools you'll = need for investigating the files.

Also, because of the size of = the metadump, I'll need some context
about the hardware it = is running on. Can you you please also provide
the = information in:

http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_i= nclude_when_reporting_a_problem.3F

so I = have a better idea of environment the problem is showing up in.

$ uname -a
Linux mammuthus 3.13.0-55-generic #94-Ubuntu SMP Thu Jun = 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 = GNU/Linux

$ ./xfs_repair -V
xfs_repair version 3.2.3

$ cat /proc/cpuinfo | grep processor | wc = -l
2

$ cat /proc/meminfo
MemTotal:       10228560 = kB
MemFree:          300612 = kB
Buffers:          111996 = kB
Cached:          3569448 = kB
SwapCached:         7836 = kB
Active:          1915848 = kB
Inactive:        2510244 = kB
Active(anon):     358064 kB
Inactive(anon):   = 386784 kB
Active(file):    1557784 kB
Inactive(file): =  2123460 kB
Unevictable:           0 = kB
Mlocked:               0 = kB
SwapTotal:       2088956 kB
SwapFree:     =    2042964 kB
Dirty:             =  3972 kB
Writeback:             0 = kB
AnonPages:        739808 = kB
Mapped:            18340 = kB
Shmem:               =  72 kB
Slab:            4672980 = kB
SReclaimable:    3927540 kB
SUnreclaim:   =     745440 kB
KernelStack:        2328 = kB
PageTables:         8840 = kB
NFS_Unstable:          0 = kB
Bounce:               =  0 kB
WritebackTmp:          0 = kB
CommitLimit:     7203236 kB
Committed_AS:   =  1152936 kB
VmallocTotal:   34359738367 kB
VmallocUsed:   =    309048 kB
VmallocChunk:   34359412736 kB
HardwareCorrupted: =     0 kB
AnonHugePages:      8192 = kB
HugePages_Total:       0
HugePages_Free:   =      0
HugePages_Rsvd:       =  0
HugePages_Surp:        0
Hugepagesize:   =     2048 kB
DirectMap4k:       62052 = kB
DirectMap2M:    10414080 kB

$ cat = /proc/mounts
rootfs / rootfs rw 0 0
sysfs /sys sysfs = rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc = rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs = rw,relatime,size=3D5103100k,nr_inodes=3D1275775,mode=3D755 0 = 0
devpts= /dev/pts devpts rw,nosuid,noexec,relatime,gid=3D5,mode=3D620,ptmxmode=3D0= 00 0 0
tmpfs /run tmpfs = rw,nosuid,noexec,relatime,size=3D1022856k,mode=3D755 0 = 0
/dev/mapper/mammuthus-root / ext4 = rw,relatime,errors=3Dremount-ro,data=3Dordered 0 0
none /sys/fs/cgroup = tmpfs rw,relatime,size=3D4k,mode=3D755 0 0
none = /sys/fs/fuse/connections fusectl rw,relatime 0 0
none /sys/kernel/debug = debugfs rw,relatime 0 0
none /sys/kernel/security securityfs rw,relatime 0 = 0
none = /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=3D5120k 0 = 0
none = /run/shm tmpfs rw,nosuid,nodev,relatime 0 0
none /run/user tmpfs = rw,nosuid,nodev,noexec,relatime,size=3D102400k,mode=3D755 0 = 0
none = /sys/fs/pstore pstore rw,relatime 0 0
/dev/sdd1 /boot ext2 rw,relatime 0 = 0
systemd /sys/fs/cgroup/systemd cgroup = rw,nosuid,nodev,noexec,relatime,name=3Dsystemd 0 0
/dev/mapper/backup02-limited_backup /limited_backup xfs = rw,noatime,attr2,inode64,logbsize=3D256k,noquota 0 0
/dev/mapper/backup02-timemachine /timemachine_backup ext4 = rw,relatime,errors=3Dremount-ro,data=3Dordered,jqfmt=3Dvfsv0,usrjquota=3D.= aquota.user,grpjquota=3D.aquota.group 0 0
/dev/mapper/backup01-data /backup xfs = rw,noatime,attr2,inode64,logbsize=3D256k,noquota 0 = 0

This is = what /proc/mounts looks = like currently. When the error first occurred there was no /dev/mapper/backup02 volume group = and /dev/mapper/backup01-data= (which has the file system that behaves strangely) was mounted with = user and project quota. Of course, the file system was not mounted when = running xfs_repair.

$ cat = /proc/partitions
major minor  #blocks  name

   8       16 19529728000 = sdb
   8       17 19529726959 = sdb1
   8        0 39064698880 = sda
   8        1 = 39064697839 sda1
 252        0 = 39064694784 dm-0
   8       32  976224256 = sdc
   8       33  976223215 = sdc1
   8       48  155713536 = sdd
   8       49     248832 = sdd1
   8       50       =    1 sdd2
   8       53  155461632 = sdd5
 252        1  153370624 = dm-1
 252        2    2088960 = dm-2
 252        3   33554432 = dm-3
 252        4  942665728 = dm-4
 252        5 5368709120 = dm-5
 252        6 14161014784 = dm-6

I'm using hardware RAID level 6 with a Dell PERC H800 = controller and an MD1200 disk enclosure with 12 4 TB disks configured as = a single "virtual disk":

$ /opt/dell/srvadmin/bin/omreport storage vdisk = controller=3D0
List of Virtual Disks on Controller PERC H800 Adapter = (Slot 1)

Controller PERC H800 Adapter (Slot = 1)
ID =                     =            : 0
Status     =                     =    : Ok
Name                 =              : = mammuthus01
State                 =             : Ready
Hot Spare Policy = violated         : Not Assigned
Encrypted     =                     : = No
Layout               =              : RAID-6
Size               =                : 37,255.00 GB = (40002251653120 bytes)
T10 Protection Information Status : No
Associated Fluid Cache = State      : Not Applicable
Device Name   =                     : = /dev/sda
Bus Protocol         =              : SAS
Media     =                     =     : HDD
Read Policy             =           : Adaptive Read = Ahead
Write Policy               =        : Write = Back
Cache Policy               =        : Not Applicable
Stripe Element Size =               : 64 = KB
Disk = Cache Policy                 : = Disabled

This "virtual disk" is the only member of the volume group = "backup01":

$ sudo = pvscan
  PV /dev/sdd5   VG mammuthus   lvm2 [148.26 = GiB / 0    free]
  PV /dev/sdc1   VG extra =       lvm2 [931.00 GiB / 0   =  free]
  PV /dev/sdb1   VG backup02    lvm2 = [18.19 TiB / 0    free]
  PV /dev/sda1 =   VG backup01    lvm2 [36.38 TiB / 0   =  free]
  Total: 4 [55.62 TiB] / in use: 4 [55.62 TiB] / in no = VG: 0 [0   ]

This volume group has a single logical = volume:

$ sudo = lvscan
  ACTIVE           =  '/dev/mammuthus/root' [146.27 GiB] inherit
  ACTIVE   =          '/dev/mammuthus/swap_1' [1.99 GiB] = inherit
  ACTIVE           =  '/dev/extra/swap' [32.00 GiB] inherit
  ACTIVE   =          '/dev/extra/files' [899.00 GiB] = inherit
  ACTIVE           =  '/dev/backup02/timemachine' [5.00 TiB] inherit
  ACTIVE   =          '/dev/backup02/limited_backup' [13.19 = TiB] inherit
  ACTIVE       =      '/dev/backup01/data' [36.38 TiB] = inherit

The drives are 12 4 TB 7.2 RPK Near-Line SAS 3.5" hot plug = drives:

$ /opt/dell/srvadmin/bin/omreport storage pdisk controller=3D0 = connector=3D0
List of Physical Disks on Connector 0 of Controller PERC H800 = Adapter (Slot 1)

Controller PERC H800 Adapter (Slot = 1)
ID =                     =          : 0:0:0
Status     =                     =  : Ok
Name                 =            : Physical Disk = 0:0:0
State                 =           : Online
Power Status   =                  : Spun = Up
Bus = Protocol                   =  : SAS
Media                 =           : HDD
Part of Cache Pool       =        : Not Applicable
Remaining Rated Write = Endurance : Not Applicable
Failure Predicted       =         : No
Revision         =                : = GS0D
Driver Version             =      : Not Applicable
Model Number         =            : Not = Applicable
T10 PI Capable             =      : No
Certified             =           : Yes
Encryption Capable       =        : No
Encrypted         =               : Not = Applicable
Progress               =          : Not Applicable
Mirror Set ID   =                 : Not = Applicable
Capacity               =          : 3,725.50 GB (4000225165312 = bytes)
Used RAID Disk Space           =  : 3,725.50 GB (4000225165312 bytes)
Available RAID Disk = Space       : 0.00 GB (0 bytes)
Hot Spare     =                   : = No
Vendor ID               =         : DELL(tm)
Product ID         =              : = ST4000NM0023
Serial No.               =        : Z1Z4BNJ3
Part Number         =             : = TH0529FG2123345Q022HA02
Negotiated Speed           =      : 6.00 Gbps
Capable Speed       =             : 6.00 Gbps
PCIe Maximum Link Width =         : Not Applicable
PCIe Negotiated Link = Width      : Not Applicable
Sector Size   =                   : = 512B
Device Write Cache             =  : Not Applicable
Manufacture Day           =       : 04
Manufacture Week       =          : 21
Manufacture Year       =          : 2014
SAS Address         =             : = 5000C50058C0F211

(Only output for the first drive show; = the others are similar.)

The individual drives don't use write caches, but the storage = controller has 512 MB cache with battery backup operating in write-back = mode.

$ xfs_info = /backup/
meta-data=3D/dev/mapper/backup01-data = isize=3D256    agcount=3D37, agsize=3D268435455 = blks
         =3D       =                 sectsz=3D512 =   attr=3D2
data     =3D           =             bsize=3D4096   = blocks=3D9766173696, imaxpct=3D5
         =3D =                     =   sunit=3D0      swidth=3D0 blks
naming   =3Dversion = 2              bsize=3D4096   = ascii-ci=3D0
log      =3Dinternal       =         bsize=3D4096   blocks=3D521728, = version=3D2
         =3D       =                 sectsz=3D512 =   sunit=3D0 blks, lazy-count=3D1
realtime =3Dnone       =             extsz=3D4096   blocks=3D0, = rtextents=3D0

Output from ls = when listing "lost+found":

$ ls -laF /backup/lost+found/
ls: = /backup/lost+found/11539619467: Structure needs = cleaning
total 4
drwxr-xr-x 2 root root     32 Jun 30 07:43 = ./
drwxr-xr-x 5 root root     74 Jul  2 12:55 = ../
-rw-rw-rw- 1 tsj  intomics  0 Jun 23 16:11 = 11539619467

Relevant output from dmesg (the errors are generated by the ls command above):

[444852.252110] XFS (dm-0): Mounting = Filesystem
[444854.630181] XFS (dm-0): Ending clean = mount
[503166.397439] ffff880114063000: 00 00 00 00 00 00 00 00 fb = ee 00 00 00 00 00 00  ................
[503166.425056] = ffff880114063010: 10 00 00 00 00 20 0f e0 00 00 00 00 00 00 00 00 =  ..... ..........
[503166.453484] ffff880114063020: 00 00 00 00 00 00 00 = 00 00 00 00 00 00 00 00 00  ................
[503166.480812] = ffff880114063030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 =  ................
[503166.508386] XFS (dm-0): Internal error = xfs_attr3_leaf_read_verify at line 246 of file = /build/buildd/linux-3.13.0/fs/xfs/xfs_attr_leaf.c.  Caller = 0xffffffffa00d4885
[503166.562354] CPU: 1 PID: 3342 Comm: kworker/1:1H Not = tainted 3.13.0-55-generic #94-Ubuntu
[503166.562356] Hardware name: Dell Inc. = PowerEdge R310/05XKKK, BIOS 1.8.2 08/17/2011
[503166.562394] = Workqueue: xfslogd xfs_buf_iodone_work [xfs]
[503166.562398] =  0000000000000001 ffff8802af92bd68 ffffffff81723294 = ffff88004d1b2000
[503166.562402]  ffff8802af92bd80 ffffffffa00d76fb = ffffffffa00d4885 ffff8802af92bdb8
[503166.562403]  ffffffffa00d7755 = 000000f600200400 ffff88001b216a00 ffff88004d1b2000
[503166.562406] Call = Trace:
[503166.562415]  [<ffffffff81723294>] = dump_stack+0x45/0x56
[503166.562426]  [<ffffffffa00d76fb>] = xfs_error_report+0x3b/0x40 [xfs]
[503166.562436] =  [<ffffffffa00d4885>] ? xfs_buf_iodone_work+0x85/0xf0 = [xfs]
[503166.562446]  [<ffffffffa00d7755>] = xfs_corruption_error+0x55/0x80 [xfs]
[503166.562459] =  [<ffffffffa00f4bdd>] xfs_attr3_leaf_read_verify+0x6d/0xf0 = [xfs]
[503166.562469]  [<ffffffffa00d4885>] ? = xfs_buf_iodone_work+0x85/0xf0 [xfs]
[503166.562479] =  [<ffffffffa00d4885>] xfs_buf_iodone_work+0x85/0xf0 = [xfs]
[503166.562483]  [<ffffffff81083b22>] = process_one_work+0x182/0x450
[503166.562485] =  [<ffffffff81084911>] = worker_thread+0x121/0x410
[503166.562487] =  [<ffffffff810847f0>] ? = rescuer_thread+0x430/0x430
[503166.562489] =  [<ffffffff8108b702>] kthread+0xd2/0xf0
[503166.562491] =  [<ffffffff8108b630>] ? = kthread_create_on_node+0x1c0/0x1c0
[503166.562494] =  [<ffffffff81733ca8>] = ret_from_fork+0x58/0x90
[503166.562496]  [<ffffffff8108b630>] ? = kthread_create_on_node+0x1c0/0x1c0
[503166.562498] XFS (dm-0): Corruption = detected. Unmount and run xfs_repair
[503166.589297] XFS (dm-0): metadata I/O = error: block 0x157e84da0 ("xfs_trans_read_buf_map") error 117 numblks = 8

The error occurs even though the file system is not doing = anything else.

Intomics is a contract research = organization specialized in deriving core biological insight from large = scale data. We help our clients in the pharmaceutical industry = develop tomorrow's medicines better, faster, and cheaper through = optimized use of biomedical data.
-----------------------------------------------------------------
Hansen, Rasmus Borup         =      Intomics - from data to biology
System Administrator             =  Diplomvej 377
Scientific Programmer =             DK-2800 Kgs. = Lyngby
              =                     = Denmark
E: rbh@intomics.com           =     W: http://www.intomics.com/
P: +45 5167 7972 =                  P: +45 = 8880 7979

= --Apple-Mail=_EE089567-6066-4BA4-98F8-D90F6CC22FDC-- From zutnvwm@powe.com Wed Jul 8 06:11:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.8 required=5.0 tests=FREEMAIL_FROM, HK_RANDOM_ENVFROM,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7093B7F51 for ; Wed, 8 Jul 2015 06:11:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id E71D0AC015 for ; Wed, 8 Jul 2015 04:11:23 -0700 (PDT) X-ASG-Debug-ID: 1436353879-04cb6c209de21e0001-NocioJ Received: from powe.com (145.158.73.124.broad.dynamic.hf.ah.cndata.com [124.73.158.145]) by cuda.sgi.com with ESMTP id vE1ieLrdPDiGCJrB for ; Wed, 08 Jul 2015 04:11:20 -0700 (PDT) X-Barracuda-Envelope-From: zutnvwm@powe.com X-Barracuda-Apparent-Source-IP: 124.73.158.145 Received: from SKY-20150217RFN ([127.0.0.1]) by localhost via TCP with ESMTPA; Wed, 08 Jul 2015 19:10:30 +0800 MIME-Version: 1.0 From: Inman Sender: Inman To: xfs@oss.sgi.com Reply-To: Inman Date: 8 Jul 2015 19:10:30 +0800 Subject: =?utf-8?B?eW91ciBiZXN0IGJ1c2luZXNzIHBhcm50ZXIgZm9yIHRvdWNoIHNjcmVlbiBwcm9kdWN0?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?eW91ciBiZXN0IGJ1c2luZXNzIHBhcm50ZXIgZm9yIHRvdWNoIHNjcmVlbiBwcm9kdWN0?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: 145.158.73.124.broad.dynamic.hf.ah.cndata.com[124.73.158.145] X-Barracuda-Start-Time: 1436353879 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20559 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150708111123.7274812961A6@cuda.sgi.com> PGh0bWw+PGJvZHk+PFA+RGVhciw8L1A+DQo8UD5OaWNlIGRheSB0byB5b3UhPC9QPg0KPFA+ V2UgYXJlIHRoZSBwcm9mZXNzaW9uYWwgVG91Y2ggcHJvZHVjdCBkZXZlbG9wZXIgYW5kIG1h bnVmYWN0dXJlciBmcm9tIENoaW5hLCBpbmNsdWRpbmcgVG91Y2ggU2NyZWVuLCBUb3VjaCBj b21wdXRlciwgVG91Y2ggUE9TIHRlcm1pbmFsLCBUb3VjaCBraW9za3MsIFRvdWNoIG1vbml0 b3IgYW5kIERpZ2l0YWwgc2lnbmFnZS48L1A+DQo8UD5Hb29kdG91Y2ggY29tcGFueSBpcyBv bmUgb2YgdGhlIGJlc3Qgc3VwcGxpZXIgd2hpY2ggYmUgZ29vZCBwcmljZSB3aXRoIGdvb2Qg cXVhbGl0eSBpbiBDaGluYS4gSWYgeW91IGhhdmUgaW50ZXJlc3QgdG8gb3VyIHByb2R1Y3Qg b3IgeW91IGFyZSBmb2xsb3dpbmcgdGhlc2UgcHJvamVjdCwgcGxlYXNlIHlvdSBjYW4gZmVl bCBmcmVlIHRvIGNvbnRhY3QgbWUuIDwvUD4NCjxQPkJlc3QgUmVnYXJkcyE8L1A+DQo8UD55 b3Ugc2luY2VyZWx5LCA8QlI+SW5tYW4gRm9uZzxCUj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPEJSPkdvb2R0b3VjaCBFbGVjdHJvbmljcyBDby4s THRk4oCU4oCUUHJvZmVzc2lvbmFsIFRvdWNoIFByb2R1Y3QgZGV2ZWxvcGVyIGFuZCBNYW51 ZmFjdHVyZXI8QlI+QWRkcmVzczogNiBmbG9vciwgTm8uNTUgb2YgSHVhbmdjdW4gUm9hZCwg VGlhbmhlIERpc3RyaWN0LCBHdWFuZ3pob3UsIENoaW5hPEJSPlBob25lOiAwMDg2LTIwLTgy MzA2MTgzPEJSPkZheDogMDA4Ni0yMC04MjMyMDE1MTxCUj5Nb2JpbGU6IDEzOTIyMTg1NDU2 PEJSPjwvUD48L2JvZHk+PC9odG1sPg== From baijuncheng@unitedstack.com Wed Jul 8 06:24:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2E83F7F51 for ; Wed, 8 Jul 2015 06:24:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 16F528F8037 for ; Wed, 8 Jul 2015 04:24:31 -0700 (PDT) X-ASG-Debug-ID: 1436354667-04cb6c209ee27e0001-NocioJ Received: from smtpproxy21.qq.com (smtpbg297.qq.com [184.105.67.100]) by cuda.sgi.com with ESMTP id niqYThjPX4XFDkHV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 04:24:27 -0700 (PDT) X-Barracuda-Envelope-From: baijuncheng@unitedstack.com X-Barracuda-Apparent-Source-IP: 184.105.67.100 X-QQ-mid: bizesmtp4t1436354636t150t269 Received: from [172.16.0.123] (unknown [182.48.117.114]) by esmtp4.qq.com (ESMTP) with id ; Wed, 08 Jul 2015 19:23:52 +0800 (CST) X-QQ-SSF: 0140000000200010F322B00A0000000 X-QQ-FEAT: QX/rXDl9P1shhhcO2GVqjHQtNxDosJr9uQikGyGVtOwHG+u6eZYd4bfkuXfx+ 0ZoGcVShKw5+gh9vqHhh4KoOGrspgaBgiB1apd8W+2RXURDd5u68bpcYaCz5vMMC5/2PV+/ OGsL5l0ySRD44+/3W/3zQ42Qhy7BE1Q/uvxtgkNcYdE7zJzgjQwMc1W8lx+S40Wkj84GhGP 4B5dzpm9ssZ97N90k2Ik+9jlYkG+PnLO3whtORi+uJbtfdbm7OHKc X-QQ-GoodBg: 2 Message-ID: <559D084A.2090505@unitedstack.com> Date: Wed, 08 Jul 2015 19:23:54 +0800 From: juncheng bai User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, dchinner@redhat.com, gregkh@linuxfoundation.org, jack@suse.cz, bfoster@redhat.com Subject: [xfs bug] kmem_alloc hang in xlog_cil_insert_format_items Content-Type: text/plain; charset=utf-8; format=flowed X-ASG-Orig-Subj: [xfs bug] kmem_alloc hang in xlog_cil_insert_format_items Content-Transfer-Encoding: 7bit X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-Barracuda-Connect: smtpbg297.qq.com[184.105.67.100] X-Barracuda-Start-Time: 1436354667 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20560 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, ALL Today, I test xfs to verify kmem_alloc hang in xfs_dir2_block_to_sf in kernel-3.14, for patch b3f03bac8132207a20286d5602eda64500c19724. My test case: I use three ssd disks to build three xfs filesystems. My mount options: rw,noexec,nodev,noatime,nodiratime,barrier=0,discard,inode64,logbsize=256k,delaylog Each xfs filesystem run a postmark and two fio. postmark parameter: set size 100000 100000000 set location /var/xfs-0/ set seed 900 set number 100000 set subdirectories 5000 set read 40960 65536000 set write 40960 65536000 set transactions 10000 set bias create 40 set bias read 60 run xfs-0-result.txt show fio parameter: fio -directory /var/${1} -rw=randrw -ioengine=libaio -iodepth=128 -size=128M -name=stress_test -numjobs=256 After running for five hours , the output of warning from xfs: 2015-07-07T23:32:18.230120+00:00 server-69 kernel: XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250 size:32832) 2015-07-07T23:32:18.230131+00:00 server-69 kernel: CPU: 1 PID: 15954 Comm: postmark Tainted: G O 3.12.21-1.el6.x86_64 #1 2015-07-07T23:32:18.230134+00:00 server-69 kernel: Hardware name: Dell Inc. PowerEdge R630/0CNCJW, BIOS 1.2.10 03/09/2015 2015-07-07T23:32:18.230147+00:00 server-69 kernel: 0000000000000000 ffff880481c99bb8 ffffffff8162562a 0000000000008040 2015-07-07T23:32:18.230148+00:00 server-69 kernel: 000000000000044c ffff880481c99bf8 ffffffffa06c457c ffff880481c99bf8 2015-07-07T23:32:18.230149+00:00 server-69 kernel: ffff88086936bcf0 ffff8804a17ecd00 ffff880066a48000 ffff880044158000 2015-07-07T23:32:18.230150+00:00 server-69 kernel: Call Trace: 2015-07-07T23:32:18.230152+00:00 server-69 kernel: [] dump_stack+0x49/0x5f 2015-07-07T23:32:18.230153+00:00 server-69 kernel: [] kmem_alloc+0xec/0x100 [xfs] 2015-07-07T23:32:18.230186+00:00 server-69 kernel: [] xlog_cil_insert_format_items+0x11f/0x1f0 [xfs] 2015-07-07T23:32:18.230205+00:00 server-69 kernel: [] ? xfs_bmap_last_offset+0x30/0xc0 [xfs] 2015-07-07T23:32:18.230211+00:00 server-69 kernel: [] xlog_cil_insert_items+0x3d/0x1b0 [xfs] 2015-07-07T23:32:18.230212+00:00 server-69 kernel: [] xfs_log_commit_cil+0x54/0x150 [xfs] 2015-07-07T23:32:18.230228+00:00 server-69 kernel: [] xfs_trans_commit+0x79/0x270 [xfs] 2015-07-07T23:32:18.230230+00:00 server-69 kernel: [] xfs_remove+0x2d2/0x350 [xfs] 2015-07-07T23:32:18.230235+00:00 server-69 kernel: [] ? d_walk+0x5f/0x260 2015-07-07T23:32:18.230236+00:00 server-69 kernel: [] xfs_vn_unlink+0x52/0xa0 [xfs] 2015-07-07T23:32:18.230237+00:00 server-69 kernel: [] vfs_rmdir+0xbb/0x110 2015-07-07T23:32:18.230238+00:00 server-69 kernel: [] do_rmdir+0x203/0x220 2015-07-07T23:32:18.230239+00:00 server-69 kernel: [] SyS_rmdir+0x16/0x20 2015-07-07T23:32:18.230240+00:00 server-69 kernel: [] system_call_fastpath+0x16/0x1b In function kmem_alloc, I modify code to get more info: 57c57 < if (!(++retries % 100)) --- > if (!(++retries % 100)) { 59,60c59,62 < "possible memory allocation deadlock in %s (mode:0x%x)", < __func__, lflags); --- > "possible memory allocation deadlock in %s (mode:0x%x, size:%zu)", > __func__, lflags, size); > dump_stack(); > } The patch b3f03bac8132207a20286d5602eda64500c19724 solves the problem of the big directroy size, more than 64k. Now, the 'struct txfs_log_vec' need 32k, but fail when the physical memory fragmentation is very serious; In the later, kmalloc may fail when process 16k. So, I think can we provide a unified solution? Thanks ---------------- juncheng bai From gavin.guo@canonical.com Wed Jul 8 07:34:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A3D7929DF5 for ; Wed, 8 Jul 2015 07:34:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8A98E304066 for ; Wed, 8 Jul 2015 05:34:46 -0700 (PDT) X-ASG-Debug-ID: 1436358884-04cbb050d0d8d10001-NocioJ Received: from mail-yk0-f178.google.com (mail-yk0-f178.google.com [209.85.160.178]) by cuda.sgi.com with ESMTP id taLC3JjlHDsPsoXj (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 08 Jul 2015 05:34:44 -0700 (PDT) X-Barracuda-Envelope-From: gavin.guo@canonical.com X-Barracuda-Apparent-Source-IP: 209.85.160.178 Received: by ykcp133 with SMTP id p133so18799505ykc.1 for ; Wed, 08 Jul 2015 05:34:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=COJfJRY7QKlNJkFiNfH95UMGP4tXMyIfbvLJSLVp0G0=; b=f+jhL7r19JiV7zbd6St+zE06PAb2JIMc0gz+h3hTDs3RcGGqEVqL4PY162XM4ImbeY SA0kT5dM3kIaPUBX9jAHH/nhkObG/grzbDnxD/2oChNDdA6uTbJHyKiaOvjsoVerK1T0 E3dYqEadqmAw8BsNxm8bykzUQ3s3Ar6c2tSx/3+NpIVhRvrHgFZQJL9JPHVb9Cq6U1tH UwhttIzb373WXUIepFWrFDU/cmHOmnGsJmcHNFXGFb0c6GPfTodv3vzT3EaSXNzLclmP xV5e8SX1ry0kil4uG2fjLuNqsaNvR3Nj+EHUSMOyqx2NjqpCYqSdWIgxEZbod0nXZ6Pr SgtA== X-Gm-Message-State: ALoCoQmfu5nzQ/lrY4KqY2oM5n9g69P18oqDRFU5OymsKyu2cex/Ff7+hkzBPFv/siXno2sWBz9T MIME-Version: 1.0 X-Received: by 10.170.158.87 with SMTP id z84mr11070814ykc.30.1436358883594; Wed, 08 Jul 2015 05:34:43 -0700 (PDT) Received: by 10.37.58.3 with HTTP; Wed, 8 Jul 2015 05:34:43 -0700 (PDT) In-Reply-To: <20150707233743.GZ7943@dastard> References: <20150707233743.GZ7943@dastard> Date: Wed, 8 Jul 2015 20:34:43 +0800 Message-ID: Subject: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push From: Gavin Guo X-ASG-Orig-Subj: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push To: Dave Chinner Cc: xfs@oss.sgi.com, linux-kernel Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-yk0-f178.google.com[209.85.160.178] X-Barracuda-Start-Time: 1436358884 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20561 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Dave, On Wed, Jul 8, 2015 at 7:37 AM, Dave Chinner wrote: > On Tue, Jul 07, 2015 at 05:29:43PM +0800, Gavin Guo wrote: >> Hi all, >> >> Recently, we observed that there is the error message in >> Ubuntu-3.13.0-48.80: >> >> "XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250)" >> >> repeatedly shows in the dmesg. Temporarily, our workaround is to tune the >> parameters, such as, vfs_cache_pressure, min_free_kbytes, and dirty_ratio. >> >> And we also found that there are different error messages regarding the >> hung tasks which happened in xfs_log_commit_cil and xlog_cil_push. >> >> The log is available at: http://paste.ubuntu.com/11835007/ >> >> The following link seems the same problem we suffered: >> >> XFS hangs with XFS: possible memory allocation deadlock in kmem_alloc >> http://oss.sgi.com/archives/xfs/2015-03/msg00172.html >> >> I read the mail and found that there might be some modification regarding >> to move the memory allocation outside the ctx lock. And I also read the >> latest patch from February of 2015 to see if there is any new change >> about that. Unfortunately, I didn't find anything regarding the change (may >> be I'm not familiar with the XFS, so didn't find the commit). If it's >> possible for someone who is familiar with the code to point out the commits >> related to the bug if already exist or any status about the plan. > > No commits - the approach I thought we might be able to take to > avoid the problem didn't work out. I have another idea of how we > might solve the problem, but I haven't ad a chance to prototype it > yet. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com Really thanks for your information, I'll keep watching out the status. Thanks, Gavin Guo From mlin@kernel.org Wed Jul 8 08:57:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B87BA7F54 for ; Wed, 8 Jul 2015 08:57:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 55A9CAC004 for ; Wed, 8 Jul 2015 06:57:52 -0700 (PDT) X-ASG-Debug-ID: 1436363869-04bdf00788dffa0001-NocioJ Received: from mail.kernel.org ([198.145.29.136]) by cuda.sgi.com with ESMTP id KU5VDByLoGgaMuc0 for ; Wed, 08 Jul 2015 06:57:49 -0700 (PDT) X-Barracuda-Envelope-From: mlin@kernel.org X-Barracuda-Apparent-Source-IP: 198.145.29.136 Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1392A20562; Wed, 8 Jul 2015 13:57:47 +0000 (UTC) Received: from [10.0.0.138] (c-50-185-88-18.hsd1.ca.comcast.net [50.185.88.18]) (using TLSv1.2 with cipher DHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 72E4E2055B; Wed, 8 Jul 2015 13:57:44 +0000 (UTC) Message-ID: <1436363862.15921.0.camel@hasee> Subject: Re: xfs_io bmap confused From: Ming Lin X-ASG-Orig-Subj: Re: xfs_io bmap confused To: Christoph Hellwig Cc: xfs@oss.sgi.com Date: Wed, 08 Jul 2015 06:57:42 -0700 In-Reply-To: <20150708085341.GA23332@lst.de> References: <1436338913.13729.11.camel@hasee> <20150708085341.GA23332@lst.de> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: UNKNOWN[198.145.29.136] X-Barracuda-Start-Time: 1436363869 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20561 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, 2015-07-08 at 10:53 +0200, Christoph Hellwig wrote: > On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: > > Hi list, > > > > I am testing some direct-io patches. > > xfs_tests/xfs/080 failed. > > > > It's strange. > > There is no hole in "rwtest.file", > > but when read it at some offset it returns zero because of hole. > > > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file > > /mnt/test/rwtest.file: > > 0: [0..125671]: 160..125831 > > Sounds like you see an unwritten extent. What does xfs_bmap -pv show on > the file? root@block:~# xfs_bmap -pv /mnt/test/rwtest.file /mnt/test/rwtest.file: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS 0: [0..743]: 160..903 0 (160..903) 744 00000 1: [744..783]: 904..943 0 (904..943) 40 10000 2: [784..951]: 944..1111 0 (944..1111) 168 00000 3: [952..1023]: 1112..1183 0 (1112..1183) 72 10000 4: [1024..1287]: 1184..1447 0 (1184..1447) 264 00000 5: [1288..1383]: 1448..1543 0 (1448..1543) 96 10000 6: [1384..1951]: 1544..2111 0 (1544..2111) 568 00000 7: [1952..2415]: 2112..2575 0 (2112..2575) 464 10000 8: [2416..2591]: 2576..2751 0 (2576..2751) 176 00000 9: [2592..3111]: 2752..3271 0 (2752..3271) 520 10000 10: [3112..3255]: 3272..3415 0 (3272..3415) 144 00000 11: [3256..3375]: 3416..3535 0 (3416..3535) 120 10000 12: [3376..3671]: 3536..3831 0 (3536..3831) 296 00000 13: [3672..4415]: 3832..4575 0 (3832..4575) 744 10000 14: [4416..4463]: 4576..4623 0 (4576..4623) 48 00000 15: [4464..4479]: 4624..4639 0 (4624..4639) 16 10000 16: [4480..5087]: 4640..5247 0 (4640..5247) 608 00000 17: [5088..5303]: 5248..5463 0 (5248..5463) 216 10000 18: [5304..5439]: 5464..5599 0 (5464..5599) 136 00000 19: [5440..5599]: 5600..5759 0 (5600..5759) 160 10000 20: [5600..5647]: 5760..5807 0 (5760..5807) 48 00000 21: [5648..5695]: 5808..5855 0 (5808..5855) 48 10000 22: [5696..5719]: 5856..5879 0 (5856..5879) 24 00000 23: [5720..5831]: 5880..5991 0 (5880..5991) 112 10000 24: [5832..5903]: 5992..6063 0 (5992..6063) 72 00000 25: [5904..6879]: 6064..7039 0 (6064..7039) 976 10000 26: [6880..7047]: 7040..7207 0 (7040..7207) 168 00000 27: [7048..7319]: 7208..7479 0 (7208..7479) 272 10000 28: [7320..7583]: 7480..7743 0 (7480..7743) 264 00000 29: [7584..7751]: 7744..7911 0 (7744..7911) 168 10000 30: [7752..7775]: 7912..7935 0 (7912..7935) 24 00000 31: [7776..8263]: 7936..8423 0 (7936..8423) 488 10000 32: [8264..8823]: 8424..8983 0 (8424..8983) 560 00000 33: [8824..8863]: 8984..9023 0 (8984..9023) 40 10000 34: [8864..9183]: 9024..9343 0 (9024..9343) 320 00000 35: [9184..9479]: 9344..9639 0 (9344..9639) 296 10000 36: [9480..9679]: 9640..9839 0 (9640..9839) 200 00000 37: [9680..9807]: 9840..9967 0 (9840..9967) 128 10000 38: [9808..10143]: 9968..10303 0 (9968..10303) 336 00000 39: [10144..10359]: 10304..10519 0 (10304..10519) 216 10000 40: [10360..10551]: 10520..10711 0 (10520..10711) 192 00000 41: [10552..10831]: 10712..10991 0 (10712..10991) 280 10000 42: [10832..10999]: 10992..11159 0 (10992..11159) 168 00000 43: [11000..11951]: 11160..12111 0 (11160..12111) 952 10000 44: [11952..12103]: 12112..12263 0 (12112..12263) 152 00000 45: [12104..13255]: 12264..13415 0 (12264..13415) 1152 10000 46: [13256..13559]: 13416..13719 0 (13416..13719) 304 00000 47: [13560..13703]: 13720..13863 0 (13720..13863) 144 10000 48: [13704..13839]: 13864..13999 0 (13864..13999) 136 00000 49: [13840..13991]: 14000..14151 0 (14000..14151) 152 10000 50: [13992..14455]: 14152..14615 0 (14152..14615) 464 00000 51: [14456..15639]: 14616..15799 0 (14616..15799) 1184 10000 52: [15640..15671]: 15800..15831 0 (15800..15831) 32 00000 53: [15672..15919]: 15832..16079 0 (15832..16079) 248 10000 54: [15920..15983]: 16080..16143 0 (16080..16143) 64 00000 55: [15984..16223]: 16144..16383 0 (16144..16383) 240 10000 56: [16224..16439]: 16384..16599 0 (16384..16599) 216 00000 57: [16440..16863]: 16600..17023 0 (16600..17023) 424 10000 58: [16864..16919]: 17024..17079 0 (17024..17079) 56 00000 59: [16920..17031]: 17080..17191 0 (17080..17191) 112 10000 60: [17032..17911]: 17192..18071 0 (17192..18071) 880 00000 61: [17912..18191]: 18072..18351 0 (18072..18351) 280 10000 62: [18192..18327]: 18352..18487 0 (18352..18487) 136 00000 63: [18328..18487]: 18488..18647 0 (18488..18647) 160 10000 64: [18488..18551]: 18648..18711 0 (18648..18711) 64 00000 65: [18552..18639]: 18712..18799 0 (18712..18799) 88 10000 66: [18640..19079]: 18800..19239 0 (18800..19239) 440 00000 67: [19080..19279]: 19240..19439 0 (19240..19439) 200 10000 68: [19280..19607]: 19440..19767 0 (19440..19767) 328 00000 69: [19608..20199]: 19768..20359 0 (19768..20359) 592 10000 70: [20200..20591]: 20360..20751 0 (20360..20751) 392 00000 71: [20592..20639]: 20752..20799 0 (20752..20799) 48 10000 72: [20640..20767]: 20800..20927 0 (20800..20927) 128 00000 73: [20768..20951]: 20928..21111 0 (20928..21111) 184 10000 74: [20952..21343]: 21112..21503 0 (21112..21503) 392 00000 75: [21344..21583]: 21504..21743 0 (21504..21743) 240 10000 76: [21584..21855]: 21744..22015 0 (21744..22015) 272 00000 77: [21856..22279]: 22016..22439 0 (22016..22439) 424 10000 78: [22280..22479]: 22440..22639 0 (22440..22639) 200 00000 79: [22480..22543]: 22640..22703 0 (22640..22703) 64 10000 80: [22544..22671]: 22704..22831 0 (22704..22831) 128 00000 81: [22672..22903]: 22832..23063 0 (22832..23063) 232 10000 82: [22904..23087]: 23064..23247 0 (23064..23247) 184 00000 83: [23088..23207]: 23248..23367 0 (23248..23367) 120 10000 84: [23208..23455]: 23368..23615 0 (23368..23615) 248 00000 85: [23456..23487]: 23616..23647 0 (23616..23647) 32 10000 86: [23488..24455]: 23648..24615 0 (23648..24615) 968 00000 87: [24456..25071]: 24616..25231 0 (24616..25231) 616 10000 88: [25072..25311]: 25232..25471 0 (25232..25471) 240 00000 89: [25312..25487]: 25472..25647 0 (25472..25647) 176 10000 90: [25488..25799]: 25648..25959 0 (25648..25959) 312 00000 91: [25800..25831]: 25960..25991 0 (25960..25991) 32 10000 92: [25832..26087]: 25992..26247 0 (25992..26247) 256 00000 93: [26088..26351]: 26248..26511 0 (26248..26511) 264 10000 94: [26352..26551]: 26512..26711 0 (26512..26711) 200 00000 95: [26552..26695]: 26712..26855 0 (26712..26855) 144 10000 96: [26696..26847]: 26856..27007 0 (26856..27007) 152 00000 97: [26848..27463]: 27008..27623 0 (27008..27623) 616 10000 98: [27464..27583]: 27624..27743 0 (27624..27743) 120 00000 99: [27584..27655]: 27744..27815 0 (27744..27815) 72 10000 100: [27656..28063]: 27816..28223 0 (27816..28223) 408 00000 101: [28064..28535]: 28224..28695 0 (28224..28695) 472 10000 102: [28536..28679]: 28696..28839 0 (28696..28839) 144 00000 103: [28680..29175]: 28840..29335 0 (28840..29335) 496 10000 104: [29176..29407]: 29336..29567 0 (29336..29567) 232 00000 105: [29408..29487]: 29568..29647 0 (29568..29647) 80 10000 106: [29488..29743]: 29648..29903 0 (29648..29903) 256 00000 107: [29744..30175]: 29904..30335 0 (29904..30335) 432 10000 108: [30176..30247]: 30336..30407 0 (30336..30407) 72 00000 109: [30248..30535]: 30408..30695 0 (30408..30695) 288 10000 110: [30536..30607]: 30696..30767 0 (30696..30767) 72 00000 111: [30608..30719]: 30768..30879 0 (30768..30879) 112 10000 112: [30720..30943]: 30880..31103 0 (30880..31103) 224 00000 113: [30944..31111]: 31104..31271 0 (31104..31271) 168 10000 114: [31112..31239]: 31272..31399 0 (31272..31399) 128 00000 115: [31240..31439]: 31400..31599 0 (31400..31599) 200 10000 116: [31440..31671]: 31600..31831 0 (31600..31831) 232 00000 117: [31672..31815]: 31832..31975 0 (31832..31975) 144 10000 118: [31816..31967]: 31976..32127 0 (31976..32127) 152 00000 119: [31968..32159]: 32128..32319 0 (32128..32319) 192 10000 120: [32160..32247]: 32320..32407 0 (32320..32407) 88 00000 121: [32248..32495]: 32408..32655 0 (32408..32655) 248 10000 122: [32496..32599]: 32656..32759 0 (32656..32759) 104 00000 123: [32600..32711]: 32760..32871 0 (32760..32871) 112 10000 124: [32712..32799]: 32872..32959 0 (32872..32959) 88 00000 125: [32800..32983]: 32960..33143 0 (32960..33143) 184 10000 126: [32984..33223]: 33144..33383 0 (33144..33383) 240 00000 127: [33224..33415]: 33384..33575 0 (33384..33575) 192 10000 128: [33416..33895]: 33576..34055 0 (33576..34055) 480 00000 129: [33896..33959]: 34056..34119 0 (34056..34119) 64 10000 130: [33960..34215]: 34120..34375 0 (34120..34375) 256 00000 131: [34216..34543]: 34376..34703 0 (34376..34703) 328 10000 132: [34544..35831]: 34704..35991 0 (34704..35991) 1288 00000 133: [35832..35895]: 35992..36055 0 (35992..36055) 64 10000 134: [35896..36615]: 36056..36775 0 (36056..36775) 720 00000 135: [36616..37119]: 36776..37279 0 (36776..37279) 504 10000 136: [37120..37511]: 37280..37671 0 (37280..37671) 392 00000 137: [37512..38439]: 37672..38599 0 (37672..38599) 928 10000 138: [38440..38927]: 38600..39087 0 (38600..39087) 488 00000 139: [38928..39167]: 39088..39327 0 (39088..39327) 240 10000 140: [39168..39279]: 39328..39439 0 (39328..39439) 112 00000 141: [39280..39407]: 39440..39567 0 (39440..39567) 128 10000 142: [39408..39639]: 39568..39799 0 (39568..39799) 232 00000 143: [39640..39799]: 39800..39959 0 (39800..39959) 160 10000 144: [39800..39807]: 39960..39967 0 (39960..39967) 8 00000 145: [39808..40319]: 39968..40479 0 (39968..40479) 512 10000 146: [40320..40871]: 40480..41031 0 (40480..41031) 552 00000 147: [40872..40935]: 41032..41095 0 (41032..41095) 64 10000 148: [40936..41247]: 41096..41407 0 (41096..41407) 312 00000 149: [41248..41439]: 41408..41599 0 (41408..41599) 192 10000 150: [41440..42039]: 41600..42199 0 (41600..42199) 600 00000 151: [42040..42303]: 42200..42463 0 (42200..42463) 264 10000 152: [42304..42535]: 42464..42695 0 (42464..42695) 232 00000 153: [42536..42919]: 42696..43079 0 (42696..43079) 384 10000 154: [42920..43087]: 43080..43247 0 (43080..43247) 168 00000 155: [43088..43343]: 43248..43503 0 (43248..43503) 256 10000 156: [43344..43383]: 43504..43543 0 (43504..43543) 40 00000 157: [43384..43599]: 43544..43759 0 (43544..43759) 216 10000 158: [43600..43863]: 43760..44023 0 (43760..44023) 264 00000 159: [43864..44271]: 44024..44431 0 (44024..44431) 408 10000 160: [44272..44463]: 44432..44623 0 (44432..44623) 192 00000 161: [44464..44671]: 44624..44831 0 (44624..44831) 208 10000 162: [44672..44919]: 44832..45079 0 (44832..45079) 248 00000 163: [44920..44999]: 45080..45159 0 (45080..45159) 80 10000 164: [45000..45135]: 45160..45295 0 (45160..45295) 136 00000 165: [45136..45183]: 45296..45343 0 (45296..45343) 48 10000 166: [45184..45463]: 45344..45623 0 (45344..45623) 280 00000 167: [45464..46495]: 45624..46655 0 (45624..46655) 1032 10000 168: [46496..46751]: 46656..46911 0 (46656..46911) 256 00000 169: [46752..47023]: 46912..47183 0 (46912..47183) 272 10000 170: [47024..47343]: 47184..47503 0 (47184..47503) 320 00000 171: [47344..47511]: 47504..47671 0 (47504..47671) 168 10000 172: [47512..47543]: 47672..47703 0 (47672..47703) 32 00000 173: [47544..48055]: 47704..48215 0 (47704..48215) 512 10000 174: [48056..48175]: 48216..48335 0 (48216..48335) 120 00000 175: [48176..48343]: 48336..48503 0 (48336..48503) 168 10000 176: [48344..48495]: 48504..48655 0 (48504..48655) 152 00000 177: [48496..48999]: 48656..49159 0 (48656..49159) 504 10000 178: [49000..49399]: 49160..49559 0 (49160..49559) 400 00000 179: [49400..49767]: 49560..49927 0 (49560..49927) 368 10000 180: [49768..50343]: 49928..50503 0 (49928..50503) 576 00000 181: [50344..50583]: 50504..50743 0 (50504..50743) 240 10000 182: [50584..50639]: 50744..50799 0 (50744..50799) 56 00000 183: [50640..51215]: 50800..51375 0 (50800..51375) 576 10000 184: [51216..51575]: 51376..51735 0 (51376..51735) 360 00000 185: [51576..51711]: 51736..51871 0 (51736..51871) 136 10000 186: [51712..52407]: 51872..52567 0 (51872..52567) 696 00000 187: [52408..52631]: 52568..52791 0 (52568..52791) 224 10000 188: [52632..53055]: 52792..53215 0 (52792..53215) 424 00000 189: [53056..53279]: 53216..53439 0 (53216..53439) 224 10000 190: [53280..53431]: 53440..53591 0 (53440..53591) 152 00000 191: [53432..54127]: 53592..54287 0 (53592..54287) 696 10000 192: [54128..54239]: 54288..54399 0 (54288..54399) 112 00000 193: [54240..54295]: 54400..54455 0 (54400..54455) 56 10000 194: [54296..54743]: 54456..54903 0 (54456..54903) 448 00000 195: [54744..54887]: 54904..55047 0 (54904..55047) 144 10000 196: [54888..55151]: 55048..55311 0 (55048..55311) 264 00000 197: [55152..55607]: 55312..55767 0 (55312..55767) 456 10000 198: [55608..56359]: 55768..56519 0 (55768..56519) 752 00000 199: [56360..56567]: 56520..56727 0 (56520..56727) 208 10000 200: [56568..56975]: 56728..57135 0 (56728..57135) 408 00000 201: [56976..57367]: 57136..57527 0 (57136..57527) 392 10000 202: [57368..57791]: 57528..57951 0 (57528..57951) 424 00000 203: [57792..58239]: 57952..58399 0 (57952..58399) 448 10000 204: [58240..58295]: 58400..58455 0 (58400..58455) 56 00000 205: [58296..58527]: 58456..58687 0 (58456..58687) 232 10000 206: [58528..58727]: 58688..58887 0 (58688..58887) 200 00000 207: [58728..59167]: 58888..59327 0 (58888..59327) 440 10000 208: [59168..59295]: 59328..59455 0 (59328..59455) 128 00000 209: [59296..59311]: 59456..59471 0 (59456..59471) 16 10000 210: [59312..59607]: 59472..59767 0 (59472..59767) 296 00000 211: [59608..59687]: 59768..59847 0 (59768..59847) 80 10000 212: [59688..59983]: 59848..60143 0 (59848..60143) 296 00000 213: [59984..60087]: 60144..60247 0 (60144..60247) 104 10000 214: [60088..60199]: 60248..60359 0 (60248..60359) 112 00000 215: [60200..60279]: 60360..60439 0 (60360..60439) 80 10000 216: [60280..60655]: 60440..60815 0 (60440..60815) 376 00000 217: [60656..61135]: 60816..61295 0 (60816..61295) 480 10000 218: [61136..61327]: 61296..61487 0 (61296..61487) 192 00000 219: [61328..61439]: 61488..61599 0 (61488..61599) 112 10000 220: [61440..61607]: 61600..61767 0 (61600..61767) 168 00000 221: [61608..61935]: 61768..62095 0 (61768..62095) 328 10000 222: [61936..62135]: 62096..62295 0 (62096..62295) 200 00000 223: [62136..62559]: 62296..62719 0 (62296..62719) 424 10000 224: [62560..62583]: 62720..62743 0 (62720..62743) 24 00000 225: [62584..62607]: 62744..62767 0 (62744..62767) 24 10000 226: [62608..63087]: 62768..63247 0 (62768..63247) 480 00000 227: [63088..63303]: 63248..63463 0 (63248..63463) 216 10000 228: [63304..63903]: 63464..64063 0 (63464..64063) 600 00000 229: [63904..64727]: 64064..64887 0 (64064..64887) 824 10000 230: [64728..64951]: 64888..65111 0 (64888..65111) 224 00000 231: [64952..65207]: 65112..65367 0 (65112..65367) 256 10000 232: [65208..65223]: 65368..65383 0 (65368..65383) 16 00000 233: [65224..65367]: 65384..65527 0 (65384..65527) 144 10000 234: [65368..65591]: 65528..65751 0 (65528..65751) 224 00000 235: [65592..65679]: 65752..65839 0 (65752..65839) 88 10000 236: [65680..65823]: 65840..65983 0 (65840..65983) 144 00000 237: [65824..66487]: 65984..66647 0 (65984..66647) 664 10000 238: [66488..66687]: 66648..66847 0 (66648..66847) 200 00000 239: [66688..67263]: 66848..67423 0 (66848..67423) 576 10000 240: [67264..67927]: 67424..68087 0 (67424..68087) 664 00000 241: [67928..68127]: 68088..68287 0 (68088..68287) 200 10000 242: [68128..68383]: 68288..68543 0 (68288..68543) 256 00000 243: [68384..68591]: 68544..68751 0 (68544..68751) 208 10000 244: [68592..68807]: 68752..68967 0 (68752..68967) 216 00000 245: [68808..68879]: 68968..69039 0 (68968..69039) 72 10000 246: [68880..69055]: 69040..69215 0 (69040..69215) 176 00000 247: [69056..69495]: 69216..69655 0 (69216..69655) 440 10000 248: [69496..69599]: 69656..69759 0 (69656..69759) 104 00000 249: [69600..69847]: 69760..70007 0 (69760..70007) 248 10000 250: [69848..70071]: 70008..70231 0 (70008..70231) 224 00000 251: [70072..70359]: 70232..70519 0 (70232..70519) 288 10000 252: [70360..70615]: 70520..70775 0 (70520..70775) 256 00000 253: [70616..70919]: 70776..71079 0 (70776..71079) 304 10000 254: [70920..71319]: 71080..71479 0 (71080..71479) 400 00000 255: [71320..71535]: 71480..71695 0 (71480..71695) 216 10000 256: [71536..71791]: 71696..71951 0 (71696..71951) 256 00000 257: [71792..71887]: 71952..72047 0 (71952..72047) 96 10000 258: [71888..71975]: 72048..72135 0 (72048..72135) 88 00000 259: [71976..72167]: 72136..72327 0 (72136..72327) 192 10000 260: [72168..72303]: 72328..72463 0 (72328..72463) 136 00000 261: [72304..73167]: 72464..73327 0 (72464..73327) 864 10000 262: [73168..73719]: 73328..73879 0 (73328..73879) 552 00000 263: [73720..73871]: 73880..74031 0 (73880..74031) 152 10000 264: [73872..74399]: 74032..74559 0 (74032..74559) 528 00000 265: [74400..74583]: 74560..74743 0 (74560..74743) 184 10000 266: [74584..75007]: 74744..75167 0 (74744..75167) 424 00000 267: [75008..75439]: 75168..75599 0 (75168..75599) 432 10000 268: [75440..75655]: 75600..75815 0 (75600..75815) 216 00000 269: [75656..75943]: 75816..76103 0 (75816..76103) 288 10000 270: [75944..76087]: 76104..76247 0 (76104..76247) 144 00000 271: [76088..76239]: 76248..76399 0 (76248..76399) 152 10000 272: [76240..76471]: 76400..76631 0 (76400..76631) 232 00000 273: [76472..76735]: 76632..76895 0 (76632..76895) 264 10000 274: [76736..77271]: 76896..77431 0 (76896..77431) 536 00000 275: [77272..77511]: 77432..77671 0 (77432..77671) 240 10000 276: [77512..78071]: 77672..78231 0 (77672..78231) 560 00000 277: [78072..78183]: 78232..78343 0 (78232..78343) 112 10000 278: [78184..78231]: 78344..78391 0 (78344..78391) 48 00000 279: [78232..78367]: 78392..78527 0 (78392..78527) 136 10000 280: [78368..78687]: 78528..78847 0 (78528..78847) 320 00000 281: [78688..78751]: 78848..78911 0 (78848..78911) 64 10000 282: [78752..79063]: 78912..79223 0 (78912..79223) 312 00000 283: [79064..79679]: 79224..79839 0 (79224..79839) 616 10000 284: [79680..79743]: 79840..79903 0 (79840..79903) 64 00000 285: [79744..79951]: 79904..80111 0 (79904..80111) 208 10000 286: [79952..80335]: 80112..80495 0 (80112..80495) 384 00000 287: [80336..80375]: 80496..80535 0 (80496..80535) 40 10000 288: [80376..80399]: 80536..80559 0 (80536..80559) 24 00000 289: [80400..80711]: 80560..80871 0 (80560..80871) 312 10000 290: [80712..80831]: 80872..80991 0 (80872..80991) 120 00000 291: [80832..81279]: 80992..81439 0 (80992..81439) 448 10000 292: [81280..81471]: 81440..81631 0 (81440..81631) 192 00000 293: [81472..81655]: 81632..81815 0 (81632..81815) 184 10000 294: [81656..82255]: 81816..82415 0 (81816..82415) 600 00000 295: [82256..82455]: 82416..82615 0 (82416..82615) 200 10000 296: [82456..82671]: 82616..82831 0 (82616..82831) 216 00000 297: [82672..83207]: 82832..83367 0 (82832..83367) 536 10000 298: [83208..83855]: 83368..84015 0 (83368..84015) 648 00000 299: [83856..84423]: 84016..84583 0 (84016..84583) 568 10000 300: [84424..84567]: 84584..84727 0 (84584..84727) 144 00000 301: [84568..84791]: 84728..84951 0 (84728..84951) 224 10000 302: [84792..84807]: 84952..84967 0 (84952..84967) 16 00000 303: [84808..85119]: 84968..85279 0 (84968..85279) 312 10000 304: [85120..85303]: 85280..85463 0 (85280..85463) 184 00000 305: [85304..85631]: 85464..85791 0 (85464..85791) 328 10000 306: [85632..85647]: 85792..85807 0 (85792..85807) 16 00000 307: [85648..85711]: 85808..85871 0 (85808..85871) 64 10000 308: [85712..86063]: 85872..86223 0 (85872..86223) 352 00000 309: [86064..86639]: 86224..86799 0 (86224..86799) 576 10000 310: [86640..86839]: 86800..86999 0 (86800..86999) 200 00000 311: [86840..87175]: 87000..87335 0 (87000..87335) 336 10000 312: [87176..88039]: 87336..88199 0 (87336..88199) 864 00000 313: [88040..88151]: 88200..88311 0 (88200..88311) 112 10000 314: [88152..88367]: 88312..88527 0 (88312..88527) 216 00000 315: [88368..88559]: 88528..88719 0 (88528..88719) 192 10000 316: [88560..88759]: 88720..88919 0 (88720..88919) 200 00000 317: [88760..88839]: 88920..88999 0 (88920..88999) 80 10000 318: [88840..89119]: 89000..89279 0 (89000..89279) 280 00000 319: [89120..89335]: 89280..89495 0 (89280..89495) 216 10000 320: [89336..89567]: 89496..89727 0 (89496..89727) 232 00000 321: [89568..90127]: 89728..90287 0 (89728..90287) 560 10000 322: [90128..90367]: 90288..90527 0 (90288..90527) 240 00000 323: [90368..90447]: 90528..90607 0 (90528..90607) 80 10000 324: [90448..90455]: 90608..90615 0 (90608..90615) 8 00000 325: [90456..90647]: 90616..90807 0 (90616..90807) 192 10000 326: [90648..90919]: 90808..91079 0 (90808..91079) 272 00000 327: [90920..90935]: 91080..91095 0 (91080..91095) 16 10000 328: [90936..91519]: 91096..91679 0 (91096..91679) 584 00000 329: [91520..92375]: 91680..92535 0 (91680..92535) 856 10000 330: [92376..92783]: 92536..92943 0 (92536..92943) 408 00000 331: [92784..93479]: 92944..93639 0 (92944..93639) 696 10000 332: [93480..93599]: 93640..93759 0 (93640..93759) 120 00000 333: [93600..93623]: 93760..93783 0 (93760..93783) 24 10000 334: [93624..93751]: 93784..93911 0 (93784..93911) 128 00000 335: [93752..93991]: 93912..94151 0 (93912..94151) 240 10000 336: [93992..94239]: 94152..94399 0 (94152..94399) 248 00000 337: [94240..94367]: 94400..94527 0 (94400..94527) 128 10000 338: [94368..94895]: 94528..95055 0 (94528..95055) 528 00000 339: [94896..95191]: 95056..95351 0 (95056..95351) 296 10000 340: [95192..95583]: 95352..95743 0 (95352..95743) 392 00000 341: [95584..95847]: 95744..96007 0 (95744..96007) 264 10000 342: [95848..96831]: 96008..96991 0 (96008..96991) 984 00000 343: [96832..97103]: 96992..97263 0 (96992..97263) 272 10000 344: [97104..97503]: 97264..97663 0 (97264..97663) 400 00000 345: [97504..97799]: 97664..97959 0 (97664..97959) 296 10000 346: [97800..97935]: 97960..98095 0 (97960..98095) 136 00000 347: [97936..98599]: 98096..98759 0 (98096..98759) 664 10000 348: [98600..98663]: 98760..98823 0 (98760..98823) 64 00000 349: [98664..99223]: 98824..99383 0 (98824..99383) 560 10000 350: [99224..99399]: 99384..99559 0 (99384..99559) 176 00000 351: [99400..99735]: 99560..99895 0 (99560..99895) 336 10000 352: [99736..100047]: 99896..100207 0 (99896..100207) 312 00000 353: [100048..100687]: 100208..100847 0 (100208..100847) 640 10000 354: [100688..100759]: 100848..100919 0 (100848..100919) 72 00000 355: [100760..101191]: 100920..101351 0 (100920..101351) 432 10000 356: [101192..101391]: 101352..101551 0 (101352..101551) 200 00000 357: [101392..101551]: 101552..101711 0 (101552..101711) 160 10000 358: [101552..101679]: 101712..101839 0 (101712..101839) 128 00000 359: [101680..102039]: 101840..102199 0 (101840..102199) 360 10000 360: [102040..102687]: 102200..102847 0 (102200..102847) 648 00000 361: [102688..102823]: 102848..102983 0 (102848..102983) 136 10000 362: [102824..103167]: 102984..103327 0 (102984..103327) 344 00000 363: [103168..103599]: 103328..103759 0 (103328..103759) 432 10000 364: [103600..103847]: 103760..104007 0 (103760..104007) 248 00000 365: [103848..104343]: 104008..104503 0 (104008..104503) 496 10000 366: [104344..104535]: 104504..104695 0 (104504..104695) 192 00000 367: [104536..104655]: 104696..104815 0 (104696..104815) 120 10000 368: [104656..104743]: 104816..104903 0 (104816..104903) 88 00000 369: [104744..104991]: 104904..105151 0 (104904..105151) 248 10000 370: [104992..105527]: 105152..105687 0 (105152..105687) 536 00000 371: [105528..105735]: 105688..105895 0 (105688..105895) 208 10000 372: [105736..105767]: 105896..105927 0 (105896..105927) 32 00000 373: [105768..105999]: 105928..106159 0 (105928..106159) 232 10000 374: [106000..106231]: 106160..106391 0 (106160..106391) 232 00000 375: [106232..106415]: 106392..106575 0 (106392..106575) 184 10000 376: [106416..106807]: 106576..106967 0 (106576..106967) 392 00000 377: [106808..107023]: 106968..107183 0 (106968..107183) 216 10000 378: [107024..107167]: 107184..107327 0 (107184..107327) 144 00000 379: [107168..107455]: 107328..107615 0 (107328..107615) 288 10000 380: [107456..107511]: 107616..107671 0 (107616..107671) 56 00000 381: [107512..107743]: 107672..107903 0 (107672..107903) 232 10000 382: [107744..107943]: 107904..108103 0 (107904..108103) 200 00000 383: [107944..108135]: 108104..108295 0 (108104..108295) 192 10000 384: [108136..108375]: 108296..108535 0 (108296..108535) 240 00000 385: [108376..108431]: 108536..108591 0 (108536..108591) 56 10000 386: [108432..108703]: 108592..108863 0 (108592..108863) 272 00000 387: [108704..108855]: 108864..109015 0 (108864..109015) 152 10000 388: [108856..109047]: 109016..109207 0 (109016..109207) 192 00000 389: [109048..109543]: 109208..109703 0 (109208..109703) 496 10000 390: [109544..109615]: 109704..109775 0 (109704..109775) 72 00000 391: [109616..109671]: 109776..109831 0 (109776..109831) 56 10000 392: [109672..109847]: 109832..110007 0 (109832..110007) 176 00000 393: [109848..109983]: 110008..110143 0 (110008..110143) 136 10000 394: [109984..110079]: 110144..110239 0 (110144..110239) 96 00000 395: [110080..110159]: 110240..110319 0 (110240..110319) 80 10000 396: [110160..110303]: 110320..110463 0 (110320..110463) 144 00000 397: [110304..110447]: 110464..110607 0 (110464..110607) 144 10000 398: [110448..111103]: 110608..111263 0 (110608..111263) 656 00000 399: [111104..111263]: 111264..111423 0 (111264..111423) 160 10000 400: [111264..111327]: 111424..111487 0 (111424..111487) 64 00000 401: [111328..111527]: 111488..111687 0 (111488..111687) 200 10000 402: [111528..111727]: 111688..111887 0 (111688..111887) 200 00000 403: [111728..111823]: 111888..111983 0 (111888..111983) 96 10000 404: [111824..112015]: 111984..112175 0 (111984..112175) 192 00000 405: [112016..112111]: 112176..112271 0 (112176..112271) 96 10000 406: [112112..112399]: 112272..112559 0 (112272..112559) 288 00000 407: [112400..112639]: 112560..112799 0 (112560..112799) 240 10000 408: [112640..113351]: 112800..113511 0 (112800..113511) 712 00000 409: [113352..114183]: 113512..114343 0 (113512..114343) 832 10000 410: [114184..114335]: 114344..114495 0 (114344..114495) 152 00000 411: [114336..115047]: 114496..115207 0 (114496..115207) 712 10000 412: [115048..115119]: 115208..115279 0 (115208..115279) 72 00000 413: [115120..115303]: 115280..115463 0 (115280..115463) 184 10000 414: [115304..115759]: 115464..115919 0 (115464..115919) 456 00000 415: [115760..115863]: 115920..116023 0 (115920..116023) 104 10000 416: [115864..116039]: 116024..116199 0 (116024..116199) 176 00000 417: [116040..116263]: 116200..116423 0 (116200..116423) 224 10000 418: [116264..116407]: 116424..116567 0 (116424..116567) 144 00000 419: [116408..116687]: 116568..116847 0 (116568..116847) 280 10000 420: [116688..116967]: 116848..117127 0 (116848..117127) 280 00000 421: [116968..117207]: 117128..117367 0 (117128..117367) 240 10000 422: [117208..117311]: 117368..117471 0 (117368..117471) 104 00000 423: [117312..117343]: 117472..117503 0 (117472..117503) 32 10000 424: [117344..117559]: 117504..117719 0 (117504..117719) 216 00000 425: [117560..117831]: 117720..117991 0 (117720..117991) 272 10000 426: [117832..117919]: 117992..118079 0 (117992..118079) 88 00000 427: [117920..118143]: 118080..118303 0 (118080..118303) 224 10000 428: [118144..118231]: 118304..118391 0 (118304..118391) 88 00000 429: [118232..118439]: 118392..118599 0 (118392..118599) 208 10000 430: [118440..118495]: 118600..118655 0 (118600..118655) 56 00000 431: [118496..118631]: 118656..118791 0 (118656..118791) 136 10000 432: [118632..119351]: 118792..119511 0 (118792..119511) 720 00000 433: [119352..119623]: 119512..119783 0 (119512..119783) 272 10000 434: [119624..119791]: 119784..119951 0 (119784..119951) 168 00000 435: [119792..119959]: 119952..120119 0 (119952..120119) 168 10000 436: [119960..120223]: 120120..120383 0 (120120..120383) 264 00000 437: [120224..120447]: 120384..120607 0 (120384..120607) 224 10000 438: [120448..120903]: 120608..121063 0 (120608..121063) 456 00000 439: [120904..121143]: 121064..121303 0 (121064..121303) 240 10000 440: [121144..121527]: 121304..121687 0 (121304..121687) 384 00000 441: [121528..121687]: 121688..121847 0 (121688..121847) 160 10000 442: [121688..121879]: 121848..122039 0 (121848..122039) 192 00000 443: [121880..122391]: 122040..122551 0 (122040..122551) 512 10000 444: [122392..122887]: 122552..123047 0 (122552..123047) 496 00000 445: [122888..123191]: 123048..123351 0 (123048..123351) 304 10000 446: [123192..123927]: 123352..124087 0 (123352..124087) 736 00000 447: [123928..124215]: 124088..124375 0 (124088..124375) 288 10000 448: [124216..124815]: 124376..124975 0 (124376..124975) 600 00000 449: [124816..125007]: 124976..125167 0 (124976..125167) 192 10000 450: [125008..125095]: 125168..125255 0 (125168..125255) 88 00000 451: [125096..125223]: 125256..125383 0 (125256..125383) 128 10000 452: [125224..125671]: 125384..125831 0 (125384..125831) 448 00000 From baijuncheng@unitedstack.com Wed Jul 8 09:06:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 191BD7F5D for ; Wed, 8 Jul 2015 09:06:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id DC69C304053 for ; Wed, 8 Jul 2015 07:06:44 -0700 (PDT) X-ASG-Debug-ID: 1436364400-04bdf00787e0450001-NocioJ Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) by cuda.sgi.com with ESMTP id VipyDD2o8DDFcFGA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 07:06:42 -0700 (PDT) X-Barracuda-Envelope-From: baijuncheng@unitedstack.com X-Barracuda-Apparent-Source-IP: 54.204.34.129 X-QQ-mid: bizesmtp2t1436364371t146t120 Received: from [192.168.199.134] (unknown [114.246.102.189]) by esmtp4.qq.com (ESMTP) with id ; Wed, 08 Jul 2015 22:06:08 +0800 (CST) X-QQ-SSF: 0140000000200010F322000A0000000 X-QQ-FEAT: QX/rXDl9P1uEGt6NGAXEYAMd6HFrds+k0XLkNZxBamumrgM/xtQH7slAN/4ED L94sX3BxweLMfp5O4XC7jP7w6pcX87ovO5j6ocTRO1Rnb7xVwPPHvPfo80Y3ulqL498qjkm Coo5FnH89prz5xpuQChoIsmD/Bmk1+Kk9AXgqZgtg69qehuQl4vSX0Soarm3kHWPxniPby5 Foe/6/aKypGWdnNBpMN0E+CXReLhxS54HOkGpcQXjsw== X-QQ-GoodBg: 2 Message-ID: <559D2E52.2070900@unitedstack.com> Date: Wed, 08 Jul 2015 22:06:10 +0800 From: juncheng bai User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Gavin Guo , Dave Chinner CC: linux-kernel , xfs@oss.sgi.com Subject: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push References: <20150707233743.GZ7943@dastard> X-ASG-Orig-Subj: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-Barracuda-Connect: smtpbguseast1.qq.com[54.204.34.129] X-Barracuda-Start-Time: 1436364401 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20561 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, All As far as I know, the patch b3f03bac8132207a20286d5602eda64500c19724 solves one case which big directory size. I am not very familiar with xfs, but I think why can't we use vmalloc when kmalloc fails? Thanks. -------------- juncheng bai On 2015/7/8 20:34, Gavin Guo wrote: > Hi Dave, > > On Wed, Jul 8, 2015 at 7:37 AM, Dave Chinner wrote: >> On Tue, Jul 07, 2015 at 05:29:43PM +0800, Gavin Guo wrote: >>> Hi all, >>> >>> Recently, we observed that there is the error message in >>> Ubuntu-3.13.0-48.80: >>> >>> "XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250)" >>> >>> repeatedly shows in the dmesg. Temporarily, our workaround is to tune the >>> parameters, such as, vfs_cache_pressure, min_free_kbytes, and dirty_ratio. >>> >>> And we also found that there are different error messages regarding the >>> hung tasks which happened in xfs_log_commit_cil and xlog_cil_push. >>> >>> The log is available at: http://paste.ubuntu.com/11835007/ >>> >>> The following link seems the same problem we suffered: >>> >>> XFS hangs with XFS: possible memory allocation deadlock in kmem_alloc >>> http://oss.sgi.com/archives/xfs/2015-03/msg00172.html >>> >>> I read the mail and found that there might be some modification regarding >>> to move the memory allocation outside the ctx lock. And I also read the >>> latest patch from February of 2015 to see if there is any new change >>> about that. Unfortunately, I didn't find anything regarding the change (may >>> be I'm not familiar with the XFS, so didn't find the commit). If it's >>> possible for someone who is familiar with the code to point out the commits >>> related to the bug if already exist or any status about the plan. >> >> No commits - the approach I thought we might be able to take to >> avoid the problem didn't work out. I have another idea of how we >> might solve the problem, but I haven't ad a chance to prototype it >> yet. >> >> Cheers, >> >> Dave. >> -- >> Dave Chinner >> david@fromorbit.com > > Really thanks for your information, I'll keep watching out the status. > > Thanks, > Gavin Guo > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From jtulak@redhat.com Wed Jul 8 11:15:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 298DA29E05 for ; Wed, 8 Jul 2015 11:15:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E0585304032 for ; Wed, 8 Jul 2015 09:15:00 -0700 (PDT) X-ASG-Debug-ID: 1436372098-04bdf0078be45b0001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id VE0l6kRgOkc4NR6L (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 09:14:58 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t68GEueq017519; Wed, 8 Jul 2015 12:14:56 -0400 Date: Wed, 8 Jul 2015 12:14:56 -0400 (EDT) From: Jan Tulak To: Dave Chinner Cc: Brian Foster , xfs@oss.sgi.com, Dave Chinner Message-ID: <2084199601.25014496.1436372096546.JavaMail.zimbra@redhat.com> In-Reply-To: <20150702230520.GA22807@dastard> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> <20150702141403.GA61817@bfoster.bfoster> <20150702230520.GA22807@dastard> Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.7.15] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: use common code for multi-disk detection Thread-Index: PymKaKfi23VVlqhPQiKqeXOvkIuYLw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1436372098 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20563 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Dave Chinner" > At one point during development of this patch set I started writing > an xfstest to validate that mkfs did all the right input validation > things and set parameters appropriately so that we didn't > inadvertently change behaviour. I never really finished it off (like > the patch set), but I've attached it below to give an idea of where > I was going with it. It was based on validating the input and CLI > parameters for the new code, so is guaranteed to fail on an existing > mkfs binary. I'm using and extending it, but I'm not sure about some tests, whether it is a change from current behaviour, or if it is rather an issue in the test. > + > +# basic "should fail" options > +# logarithm based options are no longer valid > +do_mkfs_fail -s log=9 $SCRATCH_DEV There are some changes in logarithm input (mkfs: validate logarithmic parameters sanely), but it is still supported in the patches. Is there some issue, why to remove them? Otherwise, it should rather test for (in)valid input for log=xxx, right? > +rm -f $fsimg > +$XFS_IO_PROG -f -c "truncate $fssize" $fsimg > +do_mkfs_pass -d file $fsimg > +do_mkfs_pass -d file,name=$fsimg > +rm -f $fsimg > +do_mkfs_pass -d size=$fssize,file $fsimg > +rm -f $fsimg > +do_mkfs_pass -d size=$fssize,file,name=$fsimg > +do_mkfs_pass -d file,name=$fsimg Should all these inputs really pass? What is the expected behaviour for example on -d file,name=$fsimg if the file exists, and what if there is no such file? Cheers, Jan -- Jan Tulak jtulak@redhat.com From bfoster@redhat.com Wed Jul 8 11:26:38 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C767A7F56 for ; Wed, 8 Jul 2015 11:26:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B65218F8035 for ; Wed, 8 Jul 2015 09:26:35 -0700 (PDT) X-ASG-Debug-ID: 1436372793-04cbb050cede4a0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id AFxfm97X5dVy0CC4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 09:26:34 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id BC7EBBD008; Wed, 8 Jul 2015 16:26:33 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t68GQX8H027311; Wed, 8 Jul 2015 12:26:33 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id F04C2123029; Wed, 8 Jul 2015 12:26:31 -0400 (EDT) Date: Wed, 8 Jul 2015 12:26:31 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery Message-ID: <20150708162631.GB42981@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH RFC] xfs: handle torn writes during log head/tail discovery References: <1436207194-35671-1-git-send-email-bfoster@redhat.com> <20150707005331.GX7943@dastard> <20150707131044.GC37156@bfoster.bfoster> <20150707233153.GY7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150707233153.GY7943@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436372794 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 08, 2015 at 09:31:54AM +1000, Dave Chinner wrote: > On Tue, Jul 07, 2015 at 09:10:44AM -0400, Brian Foster wrote: > > On Tue, Jul 07, 2015 at 10:53:31AM +1000, Dave Chinner wrote: > > > On Mon, Jul 06, 2015 at 02:26:34PM -0400, Brian Foster wrote: > > > > Persistent memory without block translation table (btt) support provides > > > > a block device suitable for filesystems, but does not provide the sector > > > > write atomicity guarantees typical of block storage. This is a problem > > > > for log recovery on XFS. The on-disk log record structure already > > > > includes a CRC and thus can detect torn writes. The problem is that such > > > > a failure isn't detected until log recovery is already in progress and > > > > therefore results in a hard error and mount failure. > .... > > > The CRC validation needs to be done on more than just the head > > > record. We can have up to 8 IOs in flight at the time power goes > > > down, so we need to validate the CRCs for at least the previous 8 > > > log writes... > > > > > > > Interesting, Ok.. so I take it that the recovery process should be to > > examine the last N records and recover only up to the point of the last > > correctly written record. I suppose this can be handled by backing up a > > fixed size from the last record header that is discovered by the code as > > is today. > > > > > We also need to validate the tail record, as we could be in a > > > situation where the head is overwriting the tail and it tears and > > > so by discarding the head record we discard the tail update and so > > > now the tail record is also corrupt. In that case, we need to abort > > > recovery because the log is unrecoverable. > > > > > > > I don't follow here. If the head is overwriting the tail, hasn't the > > tail been moved forward and all the associated metadata changes written > > back before that can occur? > > See the comment about having multiple IOs in flight at once. Also, > if flushes are not being used (i.e. nobarrier mount option) on > storage with volatile write caches, the tail block that the head > points to may or may not have been written to disk, hence the need > to validate the tail record.... > The multiple I/Os in flight refers to log I/O, yes? If so, I still don't quite follow that train of thought. Are you saying that of the 8 I/Os potentially in flight, the current head could be pointing at a tail that is also in-flight and ends up torn? If so, does that really require anything beyond the previously noted requirement to verify the last 8 I/Os behind the head? IIUC, that case also means we'd skip recovery entirely. The nobarrier case makes sense, though that seems like it could be a different problem. Wouldn't the cycle in the block not be updated in this case (i.e., is that really a crc verification problem)? > i.e. once we start down the "handle incorrectly written sectors in > recovery via CRC validation" path, we need to consider all the > different ways they can happen, not just the specific case of > pmem-related problems... > Agreed, I'm just trying to understand the various possibilities so I know what needs to be done and why. I'm digging deeper into the on-disk log here than I have before so I'm learning as I go. > > > Also: should we zero out the torn sections before starting recovery, > > > like we do with the call to xlog_clear_stale_blocks() later in > > > xlog_find_tail()? > > > > The thought crossed my mind just from a conservative implementation > > standpoint, but I didn't think too hard about it for this rfc. It > > probably makes sense to do something like this. > > > > > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > > > > index 01dd228..6015d02 100644 > > > > --- a/fs/xfs/xfs_log_recover.c > > > > +++ b/fs/xfs/xfs_log_recover.c > > > > @@ -62,6 +62,9 @@ xlog_recover_check_summary( > > > > #define xlog_recover_check_summary(log) > > > > #endif > > > > > > > > +STATIC int > > > > +xlog_validate_logrec_crc(struct xlog *, xfs_daddr_t); > > > > + > > > > > > Put the function here, don't use forward declarations.... > > > > > > > Eh, I put the function at the end because it depends on other functions > > that don't have declarations but would require them if I put it earlier > > in the file. The implementation will surely change and I'll avoid it if > > I can, but I'm not sure how likely that is. > > You can move functions around without changing them. ;) > Sure, but why shuffle the file around to avoid a declaration? We use declarations all over the place, including in this file. > As it is, I'm planning to split the log recovery code into two parts > (the bit shared with userspace and the bit that is kernel specific) > so don't be afraid to move code around... > Ok, if that's the reason. The approach I'm on now refactors things a bit as is, so we'll see what falls out of that. I'd prefer to get the core functionality and refactoring right before reorganizing everything, at least. > > > > + if (!hbp) > > > > + return -ENOMEM; > > > > + error = xlog_bread(log, rec_blk, hblks, hbp, &offset); > > > > + if (error) > > > > + goto out; > > > > + > > > > + rhead = (struct xlog_rec_header *) offset; > > > > + > > > > + error = xlog_valid_rec_header(log, rhead, rec_blk); > > > > + if (error) > > > > + goto out; > > > > + > > > > + /* read the full record and verify the CRC */ > > > > + /* XXX: factor out from do_recovery_pass() ? */ > > > > > > Yes, please do ;) > > > > > > > This was originally noting that the hblks = 1 above and the below buffer > > sizing appear to have more complicated logic to get correct in > > xlog_do_recovery_pass() that I didn't want to fully duplicate here. > > > > Given that and the comments from my follow on mail about handling > > wrapping around the log, it's sounding more like reuse of > > xlog_do_recovery_pass() with a dummy XLOG_RECOVER_CRCPASS is the better > > approach. It can skip all real processing of the records beyond the crc > > verification and it will probably need to learn how to report the > > starting block of the first record that fails crc verification. > > We don't really want to add another full pass reading the log if we > can avoid it. we already do a bisect to find the head/tail, a pass > to find cancelld buffers and then another pass to do the actual > recovery. Adding a third pass can is something I'd like to avoid if > possible, especially if we have a full 2GB log on a drive that only > does 100MB/s.... > Hmm, Ok. There's not much of a point anyways if we aren't going to do anything different in general about crc failure in the middle of the log. I have something halfway reworked that adds a CRC pass, but that is with the idea of doing more broad CRC verification. The code can still be reused since xlog_do_recovery_pass() already implements all of the log walking logic and already supports the ability to iterate a specific range of blocks. I think it just changes where and how the code is invoked a bit. > > > > + > > > > + bblks = (int)BTOBB(be32_to_cpu(rhead->h_len)); > > > > + error = xlog_bread(log, rec_blk+hblks, bblks, dbp, &offset); > > > > + if (error) > > > > + goto out; > > > > + > > > > + /* > > > > + * If the CRC validation fails, convert the return code so the caller > > > > + * can distinguish from unrelated errors. > > > > + */ > > > > + error = xlog_unpack_data_crc(rhead, offset, log); > > > > + if (error) > > > > + error = -EFSBADCRC; > > > > > > Note that this will only return an error on v5 filesystems so some > > > changes will be needed here to handle v4 filesystems. It will > > > also log a CRC mismatch error, so perhaps we want to make the error > > > reporting in this case a little bit less noisy.... > > > > > > > Yeah, this was tied to the fact that the torn write verification only > > took place on v5 in this patch. This will require some cleanup if we > > want to do this unconditionally for all h_crc != 0 log records. Note > > that this is also a potential behavior change because the v4 logic will > > attempt to recover the corrupted log records. > > Right, but we did that so that we didn't unexpectedly change > behaviour of log recovery for v4 filesystems. Given that nobody has > reported a problem w.r.t. CRC failures on log recovery on v4 > filesystem since that was added, I think it is probably safe to make > v4 behave like v5 now and start bailing out of log recovery if there > are bad CRCs. > Sounds good, at least we'll be consistent with fs versions across the "edges" and middle of the log. > > Finally getting back to the bigger picture... if we do want to do this > > verification unconditionally, do we want to expand this mechanism > > further than just targetting torn writes? For example, crc failure > > towards the end of the log doesn't necessarily mean a torn write. The > > currently proposed approach is to only validate the last written > > record(s) and assume crc failure is due to torn writes. Conversely, we > > do know that a crc failure somewhere in the middle of the dirty log is > > not a torn write problem. > > CRC failures are unlikely to begin with. failures in the middle of > the log tend to imply deeper problems with the storage medium. Also, > it's fine to abort recovery half way through if we come across such > problems, so i don't think we need to care about torn writes outside > of the region that we expect active writes to be occurring. > Right... we know crc failure in the middle is not a torn write, as noted above. The train of thought was about doing more broad crc failure handling. As you explained below, mounting after such a halfway recovery is not the right thing to do. > > That said and as noted above, we are effectively changing behavior for > > v4 filesystems and/or those on regular block storage, however. We're > > also inconsistent depending on precisely where a failure occurs. CRC > > failure towards the end will now skip the bad and subsequent log records > > for v4 or v5. Failure earlier in the log might yell and proceed on v4 > > and hard fail on v5. > > Bad records at the head of the log are different to those in the > middle. We can't replay past a failure, so a bad record in the > middle of the log leaves us with an inconsistent filesystems after > recovery aborts. OTOH, trimming the incomplete records at the head > to guarantee we end recovery at the last complete checkpoint before > a full recovery pass still results in a consistent filesystem when > recovery completes.... > > > Do we want to do something like have a generic CRC verification pass > > across the entire log immediately after the head/tail is discovered and > > skip everything beyond the first corrupted (for whatever reason) log > > record (with a warning that the log has been truncated)? > > That's exactly how log recovery behaves now - when we abort log > recovery due to a verification failure, we've already replayed and > written everything up to the corruption. Hence running xfs_repair -L > at that point will only have to fix up metadata inconsistnecies in > the part of the log that hasn't been replayed. > > Also, we don't want to continue at that point, because the filesystem > is inconsistent. e.g. we can't process unlinked lists, nor can we > process EFIs because they are only valid once all the changes in the > log have been recovered. xfs_repair is the only option we have after > a failed log recovery right now.... > Ok. When thinking about this, I guess I was thinking that we'd be able to recover and mount across a complete log record boundary, but that is not the case. I take it the reason is that if some log record in the middle is corrupted for something other than a torn write, it was still completely written as far as the kernel was concerned at runtime. Thus, some changes dependent on that record could have been written back to the fs. Failure to replay the records beyond that point can thus leave us inconsistent and in need of repair. Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com From joe@perches.com Wed Jul 8 13:15:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E3CF17F51 for ; Wed, 8 Jul 2015 13:15:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D1338304048 for ; Wed, 8 Jul 2015 11:15:18 -0700 (PDT) X-ASG-Debug-ID: 1436379315-04cbb050d1e0cc0001-NocioJ Received: from smtprelay.hostedemail.com (smtprelay0089.hostedemail.com [216.40.44.89]) by cuda.sgi.com with ESMTP id 6E8nBYgFY6Gnvp5V for ; Wed, 08 Jul 2015 11:15:15 -0700 (PDT) X-Barracuda-Envelope-From: joe@perches.com X-Barracuda-Apparent-Source-IP: 216.40.44.89 Received: from filter.hostedemail.com (unknown [216.40.38.60]) by smtprelay06.hostedemail.com (Postfix) with ESMTP id D4BBC9ED97; Wed, 8 Jul 2015 18:15:14 +0000 (UTC) X-Session-Marker: 6A6F6540706572636865732E636F6D X-HE-Tag: box62_2da7f7c56572a X-Filterd-Recvd-Size: 7882 Received: from joe-X200MA.home (pool-173-51-221-2.lsanca.fios.verizon.net [173.51.221.2]) (Authenticated sender: joe@perches.com) by omf05.hostedemail.com (Postfix) with ESMTPA; Wed, 8 Jul 2015 18:15:13 +0000 (UTC) Message-ID: <1436379312.2682.90.camel@perches.com> Subject: [PATCH] xfs: Use consistent logging message prefixes From: Joe Perches X-ASG-Orig-Subj: [PATCH] xfs: Use consistent logging message prefixes To: Dave Chinner Cc: xfs@oss.sgi.com, LKML Date: Wed, 08 Jul 2015 11:15:12 -0700 Content-Type: text/plain; charset="ISO-8859-1" X-Mailer: Evolution 3.12.11-0ubuntu3 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtprelay0089.hostedemail.com[216.40.44.89] X-Barracuda-Start-Time: 1436379315 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20566 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The second and subsequent lines of multi-line logging messages are not prefixed with the same information as the first line. Separate messages with newlines into multiple calls to ensure consistent prefixing and allow easier grep use. Signed-off-by: Joe Perches --- fs/xfs/libxfs/xfs_dir2_node.c | 3 +-- fs/xfs/libxfs/xfs_sb.c | 14 +++++++----- fs/xfs/xfs_buf.c | 5 +++-- fs/xfs/xfs_log.c | 50 +++++++++++++++++++++---------------------- fs/xfs/xfs_log_recover.c | 8 ++++--- 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c index 41b80d3..d68326a 100644 --- a/fs/xfs/libxfs/xfs_dir2_node.c +++ b/fs/xfs/libxfs/xfs_dir2_node.c @@ -1845,8 +1845,7 @@ xfs_dir2_node_addname_int( if (dp->d_ops->db_to_fdb(args->geo, dbno) != fbno) { xfs_alert(mp, - "%s: dir ino %llu needed freesp block %lld for\n" - " data block %lld, got %lld ifbno %llu lastfbno %d", +"%s: dir ino %llu needed freesp block %lld for data block %lld, got %lld ifbno %llu lastfbno %d", __func__, (unsigned long long)dp->i_ino, (long long)dp->d_ops->db_to_fdb( args->geo, dbno), diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index df9851c..a3f4504 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -131,10 +131,11 @@ xfs_mount_validate_sb( if (xfs_sb_has_compat_feature(sbp, XFS_SB_FEAT_COMPAT_UNKNOWN)) { xfs_warn(mp, -"Superblock has unknown compatible features (0x%x) enabled.\n" -"Using a more recent kernel is recommended.", +"Superblock has unknown compatible features (0x%x) enabled.", (sbp->sb_features_compat & XFS_SB_FEAT_COMPAT_UNKNOWN)); + xfs_warn(mp, +"Using a more recent kernel is recommended."); } if (xfs_sb_has_ro_compat_feature(sbp, @@ -145,18 +146,21 @@ xfs_mount_validate_sb( XFS_SB_FEAT_RO_COMPAT_UNKNOWN)); if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { xfs_warn(mp, -"Attempted to mount read-only compatible filesystem read-write.\n" +"Attempted to mount read-only compatible filesystem read-write."); + xfs_warn(mp, "Filesystem can only be safely mounted read only."); + return -EINVAL; } } if (xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_UNKNOWN)) { xfs_warn(mp, -"Superblock has unknown incompatible features (0x%x) enabled.\n" -"Filesystem can not be safely mounted by this kernel.", +"Superblock has unknown incompatible features (0x%x) enabled.", (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_UNKNOWN)); + xfs_warn(mp, +"Filesystem can not be safely mounted by this kernel."); return -EINVAL; } } diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index a4b7d92..d7dbd81 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1533,9 +1533,10 @@ xfs_wait_buftarg( list_del_init(&bp->b_lru); if (bp->b_flags & XBF_WRITE_FAIL) { xfs_alert(btp->bt_mount, -"Corruption Alert: Buffer at block 0x%llx had permanent write failures!\n" -"Please run xfs_repair to determine the extent of the problem.", +"Corruption Alert: Buffer at block 0x%llx had permanent write failures!", (long long)bp->b_bn); + xfs_alert(btp->bt_mount, +"Please run xfs_repair to determine the extent of the problem."); } xfs_buf_rele(bp); } diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 08d4fe4..6b5a84a 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -668,9 +668,9 @@ xfs_log_mount( ASSERT(0); goto out_free_log; } + xfs_crit(mp, "Log size out of supported range."); xfs_crit(mp, -"Log size out of supported range. Continuing onwards, but if log hangs are\n" -"experienced then please report this message in the bug report."); +"Continuing onwards, but if log hangs are experienced then please report this message in the bug report."); } /* @@ -1142,11 +1142,13 @@ xlog_space_left( * In this case we just want to return the size of the * log as the amount of space left. */ + xfs_alert(log->l_mp, "xlog_space_left: head behind tail"); xfs_alert(log->l_mp, - "xlog_space_left: head behind tail\n" - " tail_cycle = %d, tail_bytes = %d\n" - " GH cycle = %d, GH bytes = %d", - tail_cycle, tail_bytes, head_cycle, head_bytes); + " tail_cycle = %d, tail_bytes = %d", + tail_cycle, tail_bytes); + xfs_alert(log->l_mp, + " GH cycle = %d, GH bytes = %d", + head_cycle, head_bytes); ASSERT(0); free_bytes = log->l_logsize; } @@ -2028,26 +2030,24 @@ xlog_print_tic_res( "SWAPEXT" }; - xfs_warn(mp, - "xlog_write: reservation summary:\n" - " trans type = %s (%u)\n" - " unit res = %d bytes\n" - " current res = %d bytes\n" - " total reg = %u bytes (o/flow = %u bytes)\n" - " ophdrs = %u (ophdr space = %u bytes)\n" - " ophdr + reg = %u bytes\n" - " num regions = %u", - ((ticket->t_trans_type <= 0 || - ticket->t_trans_type > XFS_TRANS_TYPE_MAX) ? + xfs_warn(mp, "xlog_write: reservation summary:"); + xfs_warn(mp, " trans type = %s (%u)", + ((ticket->t_trans_type <= 0 || + ticket->t_trans_type > XFS_TRANS_TYPE_MAX) ? "bad-trans-type" : trans_type_str[ticket->t_trans_type-1]), - ticket->t_trans_type, - ticket->t_unit_res, - ticket->t_curr_res, - ticket->t_res_arr_sum, ticket->t_res_o_flow, - ticket->t_res_num_ophdrs, ophdr_spc, - ticket->t_res_arr_sum + - ticket->t_res_o_flow + ophdr_spc, - ticket->t_res_num); + ticket->t_trans_type); + xfs_warn(mp, " unit res = %d bytes", + ticket->t_unit_res); + xfs_warn(mp, " current res = %d bytes", + ticket->t_curr_res); + xfs_warn(mp, " total reg = %u bytes (o/flow = %u bytes)", + ticket->t_res_arr_sum, ticket->t_res_o_flow); + xfs_warn(mp, " ophdrs = %u (ophdr space = %u bytes)", + ticket->t_res_num_ophdrs, ophdr_spc); + xfs_warn(mp, " ophdr + reg = %u bytes", + ticket->t_res_arr_sum + ticket->t_res_o_flow + ophdr_spc); + xfs_warn(mp, " num regions = %u", + ticket->t_res_num); for (i = 0; i < ticket->t_res_num; i++) { uint r_type = ticket->t_res_arr[i].r_type; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 01dd228..c2c9b4e 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -4527,11 +4527,13 @@ xlog_recover( xfs_sb_has_incompat_log_feature(&log->l_mp->m_sb, XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN)) { xfs_warn(log->l_mp, -"Superblock has unknown incompatible log features (0x%x) enabled.\n" -"The log can not be fully and/or safely recovered by this kernel.\n" -"Please recover the log on a kernel that supports the unknown features.", +"Superblock has unknown incompatible log features (0x%x) enabled.", (log->l_mp->m_sb.sb_features_log_incompat & XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN)); + xfs_warn(log->l_mp, +"The log can not be fully and/or safely recovered by this kernel."); + xfs_warn(log->l_mp, +"Please recover the log on a kernel that supports the unknown features."); return -EINVAL; } From bfoster@redhat.com Wed Jul 8 13:31:57 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C38EC7F5D for ; Wed, 8 Jul 2015 13:31:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9E66F304043 for ; Wed, 8 Jul 2015 11:31:57 -0700 (PDT) X-ASG-Debug-ID: 1436380315-04cbb050d0e14c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 1GVobhyLRdcpBl3P (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 11:31:56 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 74E683500EE; Wed, 8 Jul 2015 18:31:55 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t68IVsXq031078; Wed, 8 Jul 2015 14:31:54 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 3A3D8123029; Wed, 8 Jul 2015 14:31:53 -0400 (EDT) Date: Wed, 8 Jul 2015 14:31:53 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: close xc_cil list_empty() races with cil commit sequence Message-ID: <20150708183152.GB60462@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: close xc_cil list_empty() races with cil commit sequence References: <1435154641-7790-1-git-send-email-bfoster@redhat.com> <20150708000909.GA7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150708000909.GA7943@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436380316 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 08, 2015 at 10:09:09AM +1000, Dave Chinner wrote: > On Wed, Jun 24, 2015 at 10:04:01AM -0400, Brian Foster wrote: > > We have seen somewhat rare reports of the following assert from > > xlog_cil_push_background() failing during ltp tests or somewhat > > innocuous desktop root fs workloads (e.g., virt operations, initramfs > > construction): > > > > ASSERT(!list_empty(&cil->xc_cil)); > > > > The reasoning behind the assert is that the transaction has inserted > > items to the CIL and hit background push codepath all with > > cil->xc_ctx_lock held for reading. This locks out background commit from > > emptying the CIL, which acquires the lock for writing. Therefore, the > > reasoning is that the items previously inserted in the CIL should still > > be present. > > > > The cil->xc_ctx_lock read lock is not sufficient to protect the xc_cil > > list, however, due to how CIL insertion is handled. > > xlog_cil_insert_items() inserts and reorders the dirty transaction items > > to the tail of the CIL under xc_cil_lock. It uses list_move_tail() to > > achieve insertion and reordering in the same block of code. This > > function removes and reinserts an item to the tail of the list. If a > > transaction commits an item that was already logged and thus already > > resides in the CIL, and said item is the sole item on the list, the > > removal and reinsertion creates a temporary state where the list is > > actually empty. > > The only way I can see this occurring is that we have to be committing a transaction that > modifies the same object as the previous transaction commit that > is still running through xfs_log_commit_cil(). e.g. racing > timestamp modifications on an inode, and the CIL is empty: > > thread A thread B > > lock(inode) lock(inode) > xfs_trans_join(inode) > xfs_trans_log(inode) > xfs_trans_commit(tp) > xfs_log_commit_cil() > lock(xc_ctx_lock) > > xfs_trans_free_items() > unlock(inode) > > > xfs_trans_join(inode) > xfs_trans_log(inode) > xfs_trans_commit(tp) > xfs_log_commit_cil() > lock(xc_ctx_lock) > xlog_cil_insert_items() > xlog_cil_insert_format_items() > > xlog_cil_push_background > ASSERT(!list_empty(cil)) list_move_tail(item, cil) > Yes. I don't have the exact details of the original reproducer but it basically required transactions to recommit an already CIL-resident item with that item as the only entry in the CIL. The first transaction inserts or reinserts and heads to the background push while the second reinserts and creates the transient empty list state. I don't think the CIL necessarily has to be empty to start, but either way the above looks about right to me. > > If that is the race, then the fix appears simple to me: call > xlog_cil_push_background() before xfs_trans_free_items() so that we > push the CIL before we unlock the items we just added to the CIL. > i.e.: > > thread A thread B > > lock(inode) lock(inode) > xfs_trans_join(inode) > xfs_trans_log(inode) > xfs_trans_commit(tp) > xfs_log_commit_cil() > lock(xc_ctx_lock) > > log_cil_push_background > ASSERT(!list_empty(cil)) > xfs_trans_free_items() > unlock(inode) > > > xfs_trans_join(inode) > xfs_trans_log(inode) > xfs_trans_commit(tp) > xfs_log_commit_cil() > lock(xc_ctx_lock) > xlog_cil_insert_items() > xlog_cil_insert_format_items() > list_move_tail(item, cil) That seems like it should work for this particular case. I suppose it depends on the nature of the transactions as opposed to closing the race directly. It would require independent transactions to relog the same item without locking to expose this instance of the race again, which probably should never happen. That doesn't help us for the other push side users of list_empty(), however. For example, what about xlog_cil_push_now(), etc.? AFAICS, that code still seems racy. > > This state is not valid and thus should never be observed by concurrent > > transaction commit-side checks in the circumstances outlined above. > > Update all of the xc_cil checks to acquire xc_cil_lock before assessing > > the state of xc_cil. > > That will reintroduce the problem of lock contention between the > commit and the push sides of the CIL, which the cil/push lock > separation was added to solve: > If the lock is a problem, how about trying to close the race on the insert side? E.g., something like the following in xlog_cil_insert_items(): if (!list_is_last(&lip->li_cil, &cil->xc_cil)) list_move_tail(&lip->li_cil, &cil->xc_cil); ... such that the list with a single item is never transiently empty. Thoughts? Brian > commit 4bb928cdb900d0614f4766d5f1ca5bc3844f7656 > Author: Dave Chinner > Date: Mon Aug 12 20:50:08 2013 +1000 > > xfs: split the CIL lock > > The xc_cil_lock is used for two purposes - to protect the CIL > itself, and to protect the push/commit state and lists. These are > two logically separate structures and operations, so can have their > own locks. This means that pushing on the CIL and the commit wait > ordering won't contend for a lock with other transactions that are > completing concurrently. As the CIL insertion is the hottest path > throught eh CIL, this is a big win. > > Signed-off-by: Dave Chinner > Reviewed-by: Mark Tinguely > Signed-off-by: Ben Myers > > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From mnoon@gmx.com Wed Jul 8 13:54:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6CF3829DF5 for ; Wed, 8 Jul 2015 13:54:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 49461304032 for ; Wed, 8 Jul 2015 11:54:58 -0700 (PDT) X-ASG-Debug-ID: 1436381695-04cbb050cee1d90001-NocioJ Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by cuda.sgi.com with ESMTP id YZfk87b6db2iYNLT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Jul 2015 11:54:56 -0700 (PDT) X-Barracuda-Envelope-From: mnoon@gmx.com X-Barracuda-Apparent-Source-IP: 212.227.15.18 Received: from [209.104.240.37] by 3capp-mailcom-bs09.server.lan (via HTTP); Wed, 8 Jul 2015 20:54:54 +0200 MIME-Version: 1.0 Message-ID: From: "Mark Noon" To: xfs@oss.sgi.com Subject: Proper SU/SW values for nested raids RAID50/RAID60 Content-Type: text/html; charset=UTF-8 X-ASG-Orig-Subj: Proper SU/SW values for nested raids RAID50/RAID60 Date: Wed, 8 Jul 2015 20:54:54 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K0:Z2I/Ot75aQVRzHyrtChFHrek51/WVG5tJYwjmVLEuxX UPai2mVFxgyaaOvXqK4WqXACpWzeDHpZyfKMSrhK9PuNduSL+F DB5s75R+0cAjwfSLtc1m6pcM3nsabIARNMxLfseuR0Zbq8X6xL qExQJaIexzFKoMQ8yHgVtsVoNEe+1TyZvvTQN/YKyK/8vfqqJY ID2W2fCV+4IuqtbPDiYDzlDfEq8wSvHZDJe6+byGEh5YQ2Jie1 kKf5Eqi0GI/L0tNTJj+85+bPY73ONvq53/fG5jhVBG0YOxqZ7t n9oOBQUpG7wSfDWtawHusxXxRi4 X-UI-Out-Filterresults: notjunk:1;V01:K0:6nf5h0p/fK0=:dY6sMnpMB/T+ggUgQ5KXxS Hz4daMcyPkBJPl/AZT6LJeKMR8oXyuAHbqJYkt+ZpHcJscz7eldfFnZ39lB1AvX5Oli96TGLV CZxMFHqTazrxHXJvYo3j4OD0KTJWGrNY3iZOUn51EsXaQJ1n+/Iun/VO24OqZUEQbH4wlioYp BK+ouMaL1/ap3hcgeE4F3ZuMFLsHnySQlF0+7hniwFGjelpA1e3hWFfIS4HsYtX1mshpuspSr n2aCt10M4dAvyn/PyRzebs4J0jl10yAK7Rb1JEF7LZ3R23veUuVHOV9gxX09WsYtdsp3f38Bk 8lcQsYGUAk+wvcKzmRWZHL7n2wHO259pBQZ9CQkN5CD3KYahgtbYJWuHzyu2fOswNXSOlakyh CkffFeefxsDQVrXfU45Ku7KawddzdYPgtepLEtrc4DxfR174t0N4l5MumALkCCbzHoDfIRapV 3MNOMDp90A== X-Barracuda-Connect: mout.gmx.net[212.227.15.18] X-Barracuda-Start-Time: 1436381696 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20567 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message
I'm trying to understand the proper values when formatting an xfs filesystem under a hardware raid controller and seem to get conflicting information between whats on the wiki and various mailing listings and forum posts when searching google. I have a system that will be storing images and other static content files accross a RAID50. The plan is to do 3 raid5 arrays each with 5 disks with a stripe size of 128K striped accross a raid0. I will then build a logical volume on top of this.
 
When running mkfs.xfs should the correct settings be su=128k sw=12 (-1 parity 'disk' for each of the 3 arrays) or su=128k sw=4 (only consider one of the arrays)? 
 
Also if I ever add a JBOD and extend the storage how does this change things esspecially given that it will be on a completely different raid volume just merged together via LVM?
 
Thanks for the assitance!
 
 
From mlin@kernel.org Wed Jul 8 18:40:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 862D47F6A for ; Wed, 8 Jul 2015 18:40:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 213A7AC004 for ; Wed, 8 Jul 2015 16:40:51 -0700 (PDT) X-ASG-Debug-ID: 1436398850-04bdf00787eea40001-NocioJ Received: from mail.kernel.org ([198.145.29.136]) by cuda.sgi.com with ESMTP id ZGATGyN2BUt8prJW for ; Wed, 08 Jul 2015 16:40:50 -0700 (PDT) X-Barracuda-Envelope-From: mlin@kernel.org X-Barracuda-Apparent-Source-IP: 198.145.29.136 Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3B15020630 for ; Wed, 8 Jul 2015 23:40:49 +0000 (UTC) Received: from mail-oi0-f49.google.com (mail-oi0-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C49682061D for ; Wed, 8 Jul 2015 23:40:47 +0000 (UTC) Received: by oihr66 with SMTP id r66so121875355oih.2 for ; Wed, 08 Jul 2015 16:40:47 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.202.79.79 with SMTP id d76mr834020oib.46.1436398847244; Wed, 08 Jul 2015 16:40:47 -0700 (PDT) Received: by 10.202.200.76 with HTTP; Wed, 8 Jul 2015 16:40:47 -0700 (PDT) In-Reply-To: <1436363862.15921.0.camel@hasee> References: <1436338913.13729.11.camel@hasee> <20150708085341.GA23332@lst.de> <1436363862.15921.0.camel@hasee> Date: Wed, 8 Jul 2015 16:40:47 -0700 Message-ID: Subject: Re: xfs_io bmap confused From: Ming Lin X-ASG-Orig-Subj: Re: xfs_io bmap confused To: Christoph Hellwig Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: UNKNOWN[198.145.29.136] X-Barracuda-Start-Time: 1436398850 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, 2015-07-08 at 06:57 -0700, Ming Lin wrote: > On Wed, 2015-07-08 at 10:53 +0200, Christoph Hellwig wrote: > > On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: > > > Hi list, > > > > > > I am testing some direct-io patches. > > > xfs_tests/xfs/080 failed. > > > > > > It's strange. > > > There is no hole in "rwtest.file", > > > but when read it at some offset it returns zero because of hole. > > > > > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file > > > /mnt/test/rwtest.file: > > > 0: [0..125671]: 160..125831 > > > > Sounds like you see an unwritten extent. What does xfs_bmap -pv show on > > the file? > > root@block:~# xfs_bmap -pv /mnt/test/rwtest.file > /mnt/test/rwtest.file: > EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS > 0: [0..743]: 160..903 0 (160..903) 744 00000 > 1: [744..783]: 904..943 0 (904..943) 40 10000 > 2: [784..951]: 944..1111 0 (944..1111) 168 00000 > 3: [952..1023]: 1112..1183 0 (1112..1183) 72 10000 > 4: [1024..1287]: 1184..1447 0 (1184..1447) 264 00000 > 5: [1288..1383]: 1448..1543 0 (1448..1543) 96 10000 file offset 659456 is in EXT 5. I guess FLAGS 1 means it's an unwritten extent, right? xfs_tests/xfs/080 basically does: 1. direct io write 2. then buffered read to check the previous dio write Here is an example of error logs. doio ( 3626) 16:13:23 --------------------- *** DATA COMPARISON ERROR *** check_file(/mnt/test/rwtest.file, 239616, 81408, H:3626:block:doio*, 18, 0) failed Comparison fd is 5, with open flags 0 Corrupt regions follow - unprintable chars are represented as '.' ----------------------------------------------------------------- corrupt bytes starting at file offset 241664 1st 32 expected bytes: oio*H:3626:block:doio*H:3626:blo 1st 32 actual bytes: ................................ Request number 981 fd 4 is file /mnt/test/rwtest.file - open flags are 040001 O_WRONLY,O_DIRECT, write done at file offset 239616 - pattern is H (0110) number of requests is 1, strides per request is 1 i/o byte count = 81408 memory alignment is aligned DIRECT I/O: offset % 512 = 0 length % 81408 = 0 mem alignment 0x200 xfer size: small: 512 large: 2147483136 syscall: writev(4, (iov on stack), 1) The "expected bytes" was actually written to the disk successfully, but for some bug the xfs extent flag was not set correctly. The flag should be "XFS_EXT_NORM", but now it's "XFS_EXT_UNWRITTEN". Could you share the code path the extent flag was updated? Is it also updated through direct io? Thanks. From david@fromorbit.com Wed Jul 8 19:45:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C7C517F37 for ; Wed, 8 Jul 2015 19:45:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B2EA1304032 for ; Wed, 8 Jul 2015 17:45:52 -0700 (PDT) X-ASG-Debug-ID: 1436402745-04cbb050cfe8e40001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id PJOoH7AV8TBBHj8T for ; Wed, 08 Jul 2015 17:45:46 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DyCQAxw51VPLCkLHlbgxKBNIZOohAGmh0CAgEBAoFfTQEBAQEBAQcBAQEBQT+EIwEBAQMBOhwjBQcECAMOBwMJJQ8FJQMHGhOIJgfNYgEBAQEGAQEBAR4YhgWFLoUGB4MXgRQFjCOIAIt9gTyEGI8wg1+BCYEpHIFlLDGBBiWBIAEBAQ Received: from ppp121-44-164-176.lns20.syd7.internode.on.net (HELO dastard) ([121.44.164.176]) by ipmail06.adl6.internode.on.net with ESMTP; 09 Jul 2015 10:15:44 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZCzyB-0003qP-Ay; Thu, 09 Jul 2015 10:45:43 +1000 Date: Thu, 9 Jul 2015 10:45:43 +1000 From: Dave Chinner To: Jan Tulak Cc: Brian Foster , xfs@oss.sgi.com, Dave Chinner Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Message-ID: <20150709004543.GD3902@dastard> X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> <20150702141403.GA61817@bfoster.bfoster> <20150702230520.GA22807@dastard> <2084199601.25014496.1436372096546.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2084199601.25014496.1436372096546.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436402745 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [Please line wrap your responses at 68-72 columns] On Wed, Jul 08, 2015 at 12:14:56PM -0400, Jan Tulak wrote: > ----- Original Message ----- > > From: "Dave Chinner" > > > At one point during development of this patch set I started writing > > an xfstest to validate that mkfs did all the right input validation > > things and set parameters appropriately so that we didn't > > inadvertently change behaviour. I never really finished it off (like > > the patch set), but I've attached it below to give an idea of where > > I was going with it. It was based on validating the input and CLI > > parameters for the new code, so is guaranteed to fail on an existing > > mkfs binary. > > I'm using and extending it, but I'm not sure about some tests, > whether it is a change from current behaviour, or if it is rather > an issue in the test. Remember, the point of the patchset was to sanitise and clean up the CLI interface, not just the code. i.e. the CLI will change, not just the code. > > + > > +# basic "should fail" options > > +# logarithm based options are no longer valid > > +do_mkfs_fail -s log=9 $SCRATCH_DEV > > There are some changes in logarithm input (mkfs: validate > logarithmic parameters sanely), but it is still supported in the > patches. Is there some issue, why to remove them? They are redundant and almost nobody uses them. The size options are what people use, and even they have so many different units that it confuses people... > Otherwise, it should rather test for (in)valid input for log=xxx, right? No, it's indicative of the fact I wanted to remove the log scale options for variables. As I've said before - I didn't ever finish the patchset off. Essentially, once all the options are in a table, we only want to look in one place for things like ag size, fs size, log size, block sizes etc. Right now the table has multiple entries or multiple global variables for these things and we have to work out which is valid and correct and handle conflicts and incompatibilities, etc. We don't *need* that complexity to specify sizes of things, so getting rid of the rarely used redundant options makes a lot of sense as it simplifies the code and the user interface without reducing functionality... > > +rm -f $fsimg > > +$XFS_IO_PROG -f -c "truncate $fssize" $fsimg > > +do_mkfs_pass -d file $fsimg > > +do_mkfs_pass -d file,name=$fsimg > > +rm -f $fsimg > > +do_mkfs_pass -d size=$fssize,file $fsimg > > +rm -f $fsimg > > +do_mkfs_pass -d size=$fssize,file,name=$fsimg > > +do_mkfs_pass -d file,name=$fsimg > > Should all these inputs really pass? Yes, they should, because .... > What is the expected > behaviour for example on -d file,name=$fsimg if the file exists, > and what if there is no such file? ....in all cases the file either: a) exists and is of non-zero size and hence defines the size of the filesystem to be created, b) does not exist but the size of the filesystem to be created is specified on the CLI allowing us to create the image file correctly. We should only fail to create the image file if it doesn't exist and we haven't been given enough information to calculate the size of the filesystem via CLI parameters. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 8 20:15:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0BF237F37 for ; Wed, 8 Jul 2015 20:15:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CBAA38F804B for ; Wed, 8 Jul 2015 18:15:31 -0700 (PDT) X-ASG-Debug-ID: 1436404528-04bdf00788eff40001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id nRBgp0AxOMXycIMA for ; Wed, 08 Jul 2015 18:15:28 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DyCQAeyp1VPLCkLHlbgxKBNIZOohAGmh0CAgEBAoFfTQEBAQEBAQcBAQEBQT+EIwEBAQMBOhwjBQsIAxgJGgsPBSUDBxoTiCYHzVoBAQEBAQEEAQEBAQEdGIYFhS6EGh4DAkkHgxeBFAWUI4t9gTyMU4Z1g1+CY4FQLDGBBYFGAQEB Received: from ppp121-44-164-176.lns20.syd7.internode.on.net (HELO dastard) ([121.44.164.176]) by ipmail06.adl6.internode.on.net with ESMTP; 09 Jul 2015 10:45:27 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZD0Qw-0003tz-VF; Thu, 09 Jul 2015 11:15:26 +1000 Date: Thu, 9 Jul 2015 11:15:26 +1000 From: Dave Chinner To: Rasmus Borup Hansen Cc: xfs@oss.sgi.com Subject: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors Message-ID: <20150709011526.GE3902@dastard> X-ASG-Orig-Subj: Re: "Internal error xfs_attr3_leaf_write_verify at line 216", "directory flags set on non-directory inode" and other errors References: <20150625184132.773a5ecd@harpe.intellique.com> <09CE9E14-9E6B-4587-9049-35B6C67016EF@intomics.com> <20150702112623.1c83d473@harpe.intellique.com> <20150703235500.GR7943@dastard> <0F9CF77D-1DA5-41DD-87AA-7F4109F08EFB@intomics.com> <20150707001900.GU7943@dastard> <7B558BFF-FC46-4378-84C0-4442C1209F45@intomics.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7B558BFF-FC46-4378-84C0-4442C1209F45@intomics.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436404528 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 08, 2015 at 12:28:19PM +0200, Rasmus Borup Hansen wrote: > > On 07 Jul 2015, at 02:19, Dave Chinner > > wrote: > > > > On Mon, Jul 06, 2015 at 01:08:52PM +0200, Rasmus Borup Hansen > > wrote: > >> I've made a metadump and I'm running another xfs_repair, but > >> given that the first metadump is 132 GB, will you still be > >> interested in looking at the dumps? > > > > That's significantly larger than my monthly download quota. How > > big is it once you compress it? > > One metadump is 25 GB when compressed with xz -9. The server the > files currently reside on is not very fast, so I've only > compressed one of them so far. > > I used the strings command on the metadump files and discovered > that they contain fragments of files that we really don't want to > leave our IT systems. However, if you think it's worth the effort, > I could set up a virtual machine with the metadump files and give > you access with your SSH public key. But then you'll have to tell > me which tools you'll need for investigating the files. I only want to look at one inode with xfs_db.... I don't think ssh access is going be very useful. To isolate the actual cause of the verifier error I usually run an instrumented kernel, and to verify that I've fixed the problem I'll need to run custom kernels and/or xfsprogs binaries. So I really need a local fs image to do this. I also like to run a kernel I trust (i.e. one I've built myself) on a machine I trust not to have storage or hardware issues when doing diagnostics on broken filesystem images. Of course, nobody can learn about how to find problems like this when the triage is hidden away in private.... > Output from ls when listing "lost+found": > > $ ls -laF /backup/lost+found/ > ls: /backup/lost+found/11539619467: Structure needs cleaning This is the inode I need to look at. Can you grep for this inode in the xfs_repair output and post it? (grab a couple of lines of context around each match, too...) > total 4 > drwxr-xr-x 2 root root 32 Jun 30 07:43 ./ > drwxr-xr-x 5 root root 74 Jul 2 12:55 ../ > -rw-rw-rw- 1 tsj intomics 0 Jun 23 16:11 11539619467 It's a zero length file, so I'll be interested to know what attributes it has on it. Can you check that the inode number of that file is 11539619467 (ls -i will tell you that) and then post the output of this command: # xfs_db -r -c "inode 11539619467" -c p /dev/mapper/backup01-data Then I can give you the commands for walking and dumping the full attribute tree. > [503166.562498] XFS (dm-0): Corruption detected. Unmount and run xfs_repair > [503166.589297] XFS (dm-0): metadata I/O error: block 0x157e84da0 ("xfs_trans_read_buf_map") error 117 numblks 8 Also, post the output of: # xfs_db -r -c "convert daddr 0x157e84da0 fsb" /dev/mapper/backup01-data # xfs_db -r -c "fsb " -c p -c "type attr" -c p /dev/mapper/backup01-data Which will give me the contents of the bad block, both in raw format and as processed by the attribute leaf format parser in xfs_db. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 8 20:52:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 34C6C7F37 for ; Wed, 8 Jul 2015 20:52:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1F342304039 for ; Wed, 8 Jul 2015 18:51:56 -0700 (PDT) X-ASG-Debug-ID: 1436406713-04cb6c209df4d10001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id rnz2umY3LOlfHGQq for ; Wed, 08 Jul 2015 18:51:53 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DyCQCV0p1VPLCkLHlTCIMSgTSGTqIQBpodAgIBAQKBX00BAQEBAQEHAQEBAUE/hCMBAQEDAScTHCMQCAMOCgklDwUlAwcaExuICwfNWgEBAQEGAgEfGIYFhS6EL1cHgxeBFAWUI4t9gTyHJ4UsgkqICoEJgSkcgWUsMYEEJIEjAQEB Received: from ppp121-44-164-176.lns20.syd7.internode.on.net (HELO dastard) ([121.44.164.176]) by ipmail06.adl6.internode.on.net with ESMTP; 09 Jul 2015 11:21:52 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZD10B-0003xE-8N; Thu, 09 Jul 2015 11:51:51 +1000 Date: Thu, 9 Jul 2015 11:51:51 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: close xc_cil list_empty() races with cil commit sequence Message-ID: <20150709015151.GF3902@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: close xc_cil list_empty() races with cil commit sequence References: <1435154641-7790-1-git-send-email-bfoster@redhat.com> <20150708000909.GA7943@dastard> <20150708183152.GB60462@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150708183152.GB60462@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436406713 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20578 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 08, 2015 at 02:31:53PM -0400, Brian Foster wrote: > On Wed, Jul 08, 2015 at 10:09:09AM +1000, Dave Chinner wrote: > > On Wed, Jun 24, 2015 at 10:04:01AM -0400, Brian Foster wrote: > > > We have seen somewhat rare reports of the following assert from > > > xlog_cil_push_background() failing during ltp tests or somewhat > > > innocuous desktop root fs workloads (e.g., virt operations, initramfs > > > construction): > > > > > > ASSERT(!list_empty(&cil->xc_cil)); > > > > > > The reasoning behind the assert is that the transaction has inserted > > > items to the CIL and hit background push codepath all with > > > cil->xc_ctx_lock held for reading. This locks out background commit from > > > emptying the CIL, which acquires the lock for writing. Therefore, the > > > reasoning is that the items previously inserted in the CIL should still > > > be present. > > > > > > The cil->xc_ctx_lock read lock is not sufficient to protect the xc_cil > > > list, however, due to how CIL insertion is handled. > > > xlog_cil_insert_items() inserts and reorders the dirty transaction items > > > to the tail of the CIL under xc_cil_lock. It uses list_move_tail() to > > > achieve insertion and reordering in the same block of code. This > > > function removes and reinserts an item to the tail of the list. If a > > > transaction commits an item that was already logged and thus already > > > resides in the CIL, and said item is the sole item on the list, the > > > removal and reinsertion creates a temporary state where the list is > > > actually empty. > > > > The only way I can see this occurring is that we have to be committing a transaction that > > modifies the same object as the previous transaction commit that > > is still running through xfs_log_commit_cil(). e.g. racing > > timestamp modifications on an inode, and the CIL is empty: > > > > thread A thread B > > > > lock(inode) lock(inode) > > xfs_trans_join(inode) > > xfs_trans_log(inode) > > xfs_trans_commit(tp) > > xfs_log_commit_cil() > > lock(xc_ctx_lock) > > > > xfs_trans_free_items() > > unlock(inode) > > > > > > xfs_trans_join(inode) > > xfs_trans_log(inode) > > xfs_trans_commit(tp) > > xfs_log_commit_cil() > > lock(xc_ctx_lock) > > xlog_cil_insert_items() > > xlog_cil_insert_format_items() > > > > xlog_cil_push_background > > ASSERT(!list_empty(cil)) list_move_tail(item, cil) > > > > Yes. I don't have the exact details of the original reproducer but it > basically required transactions to recommit an already CIL-resident item > with that item as the only entry in the CIL. The first transaction > inserts or reinserts and heads to the background push while the second > reinserts and creates the transient empty list state. I don't think the > CIL necessarily has to be empty to start, but either way the above looks > about right to me. > > > > > If that is the race, then the fix appears simple to me: call > > xlog_cil_push_background() before xfs_trans_free_items() so that we > > push the CIL before we unlock the items we just added to the CIL. > > i.e.: > > > > thread A thread B > > > > lock(inode) lock(inode) > > xfs_trans_join(inode) > > xfs_trans_log(inode) > > xfs_trans_commit(tp) > > xfs_log_commit_cil() > > lock(xc_ctx_lock) > > > > log_cil_push_background > > ASSERT(!list_empty(cil)) > > xfs_trans_free_items() > > unlock(inode) > > > > > > xfs_trans_join(inode) > > xfs_trans_log(inode) > > xfs_trans_commit(tp) > > xfs_log_commit_cil() > > lock(xc_ctx_lock) > > xlog_cil_insert_items() > > xlog_cil_insert_format_items() > > list_move_tail(item, cil) > > That seems like it should work for this particular case. I suppose it > depends on the nature of the transactions as opposed to closing the race > directly. It would require independent transactions to relog the same > item without locking to expose this instance of the race again, which > probably should never happen. > > That doesn't help us for the other push side users of list_empty(), > however. For example, what about xlog_cil_push_now(), etc.? AFAICS, that > code still seems racy. If we get a transient empty list there, we shouldn't have to care as the retry condition in xlog_cil_force_lsn() should catch it. I guess it is possible that both the original push and the retry list-empty() check could *both* see transient empty lists (however unlikely that is!). However, a log force is a fairly rare occurrence outside of sync/fsync heavy workloads, so adding the xc_cil_lock there shouldn't cause any serious performance issues because everything in a sync/fsync heavy workload will back waiting on the log forces completing rather than formatting changes into the CIL... The other places we check for empty xc_cil: - xlog_cil_push() holds xc_ctx_lock in write mode, so cannot race at all with xfs_log_commit_cil(). No need for additional locking there. - xlog_cil_empty() is only used by the log covering code, so we simply don't care if we get a transient empty there because that implies the log is active and shouldn't be covered. - xfs_log_item_in_current_chkpt() is only called from xfs_buf_item_format() and so is done with the buffer locked and the xc_ctx_lock in read mode. Hence it can't race with itself being removed or a CIl push removing all the entries and so a transient false empty implies that the buffer itself is not in the CIL. Therefore it functions correctly even if we get a transient CIL empty occurring... So, really, there isn't a fundamental problem with the locking during the corner case where a transient empty can be detected as everything functions correctly even when a transient is detected. The only place I'd be concerned is the unlikely case of a double transient in the log force situation, but even then I'd question if it is even possible because we only force the log when we know that we have something that needs pushing.... > > > This state is not valid and thus should never be observed by concurrent > > > transaction commit-side checks in the circumstances outlined above. > > > Update all of the xc_cil checks to acquire xc_cil_lock before assessing > > > the state of xc_cil. > > > > That will reintroduce the problem of lock contention between the > > commit and the push sides of the CIL, which the cil/push lock > > separation was added to solve: > > > > If the lock is a problem, how about trying to close the race on the > insert side? E.g., something like the following in > xlog_cil_insert_items(): > > if (!list_is_last(&lip->li_cil, &cil->xc_cil)) > list_move_tail(&lip->li_cil, &cil->xc_cil); > > ... such that the list with a single item is never transiently empty. > Thoughts? Yeah, that would work. I like KISS solutions and sometimes I get so far into the code I can't see them. Good thinking, Brain! Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 8 20:58:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0D9107F37 for ; Wed, 8 Jul 2015 20:58:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D878D304043 for ; Wed, 8 Jul 2015 18:58:30 -0700 (PDT) X-ASG-Debug-ID: 1436407108-04bdf00788f08f0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id QzPAqdNGi8xpQ8ob for ; Wed, 08 Jul 2015 18:58:28 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CPCQDG1J1VPLCkLHlbgxKBNIZOohAGmh0EAgKBX00BAQEBAQEHAQEBAUE/hCQBAQQ6HCMQCAMYCRoLDwUlAwcaE4gtzVwBAQgCIBiGBYUuhC1ZB4QrBZQji32OD4pUgmOBUCwxgQSBRwEBAQ Received: from ppp121-44-164-176.lns20.syd7.internode.on.net (HELO dastard) ([121.44.164.176]) by ipmail06.adl6.internode.on.net with ESMTP; 09 Jul 2015 11:28:26 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZD16X-0003xl-7I; Thu, 09 Jul 2015 11:58:25 +1000 Date: Thu, 9 Jul 2015 11:58:25 +1000 From: Dave Chinner To: juncheng bai Cc: Gavin Guo , linux-kernel , xfs@oss.sgi.com Subject: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push Message-ID: <20150709015825.GG3902@dastard> X-ASG-Orig-Subj: Re: Possible memory allocation deadlock in kmem_alloc and hung task in xfs_log_commit_cil and xlog_cil_push References: <20150707233743.GZ7943@dastard> <559D2E52.2070900@unitedstack.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <559D2E52.2070900@unitedstack.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436407108 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20578 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 08, 2015 at 10:06:10PM +0800, juncheng bai wrote: > Hi, All > > As far as I know, the patch b3f03bac8132207a20286d5602eda64500c19724 > solves one case which big directory size. > > I am not very familiar with xfs, but I think why can't we use vmalloc > when kmalloc fails? Because vmalloc space is greatly limited on 32 bit machines and hence we can't just use vmalloc blindly in these situations. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 8 21:08:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7222C7F37 for ; Wed, 8 Jul 2015 21:08:33 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 07825AC001 for ; Wed, 8 Jul 2015 19:08:29 -0700 (PDT) X-ASG-Debug-ID: 1436407707-04cbb050ceeb710001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id xiHBbXARxGevNFDi for ; Wed, 08 Jul 2015 19:08:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CRCQAQ151VPLCkLHlbgxJUYKheBpQshXEEAgKBX00BAQEBAQEHAQEBAUE/hCQBAQQ6HCMQCAMOCgklDwUlAwcaE4gtDs1KAQEBBwIgGIYFhS6Ca4IbB4QrBZQjhGeHFoE8hyeFLIpUhDMsMQGCSgEBAQ Received: from ppp121-44-164-176.lns20.syd7.internode.on.net (HELO dastard) ([121.44.164.176]) by ipmail06.adl6.internode.on.net with ESMTP; 09 Jul 2015 11:37:51 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZD1Ff-0003zr-9h; Thu, 09 Jul 2015 12:07:51 +1000 Date: Thu, 9 Jul 2015 12:07:51 +1000 From: Dave Chinner To: Ming Lin Cc: xfs@oss.sgi.com, Christoph Hellwig Subject: Re: xfs_io bmap confused Message-ID: <20150709020751.GH3902@dastard> X-ASG-Orig-Subj: Re: xfs_io bmap confused References: <1436338913.13729.11.camel@hasee> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436338913.13729.11.camel@hasee> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1436407707 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20578 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: > Hi list, > > I am testing some direct-io patches. > xfs_tests/xfs/080 failed. > > It's strange. > There is no hole in "rwtest.file", > but when read it at some offset it returns zero because of hole. > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file > /mnt/test/rwtest.file: > 0: [0..125671]: 160..125831 > > Then I read at file offset 659456, > root@block:~# dd if=/mnt/test/rwtest.file of=tmp.file bs=512 skip=1288 count=1 > > The code actually goes to below if statements. > > Any idea what's wrong? XFS maps unwritten extents as holes on read so that they are correctly zeroed by the generic code. See this patch: http://oss.sgi.com/archives/xfs/2007-07/msg00742.html And the followup for why it should be done: http://oss.sgi.com/archives/xfs/2007-07/msg00744.html Sadly I was unable to convince anyone to take the patch, and so that wart in XFS mapping behaviour still exists because the generic readpage code still doesn't understand unwritten extents natively. Cheers, Dave. -- Dave Chinner david@fromorbit.com From patelrakeshcomp@gmail.com Wed Jul 8 21:43:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A26AF7F37 for ; Wed, 8 Jul 2015 21:43:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7001A304043 for ; Wed, 8 Jul 2015 19:43:42 -0700 (PDT) X-ASG-Debug-ID: 1436409816-04bdf00789f1860001-NocioJ Received: from mail-pd0-f176.google.com (mail-pd0-f176.google.com [209.85.192.176]) by cuda.sgi.com with ESMTP id feZaVBI0Ah8nXbsT (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO); Wed, 08 Jul 2015 19:43:37 -0700 (PDT) X-Barracuda-Envelope-From: patelrakeshcomp@gmail.com Received: by pddu5 with SMTP id u5so68838454pdd.3; Wed, 08 Jul 2015 19:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:mime-version:to:cc:from:subject:date:in-reply-to :references:content-type; bh=A0Ppn59GdswxwTgLsVAzuyLKJIlvERlWKG2V1nHEH0s=; b=VAagxvTn6ovE3AK6r06evthYUyTdbHiYDTcpMEpPw8vdiE+AqEwcpXTra6AZo/uxjC dtrNj5nEruqvo4BVttaf9JkD4HAN6d/RLMaaXvp+Kbr8M8uejrb5zX5xZFvefIN+yjrc o04s/8a4hNK9wNntVgBdVukZ96cIb0QgXT1M/2VyBPPvh20HKGvXqPFIxOFvRRWZn2nY TNfCM9+RtIrzdGOJA3QRIsV3fsVaMIiA7gEWmTpdKJ3nABzA2rzDaCLw5XISPjQ+L0qa amxKrCvUVnyDYcWTrrrnwCsmzqZdd5yKQ3rHWY/YmlkxlU+/tPtRi89d9yW9F3DYl1Gf k9qw== X-Received: by 10.70.52.1 with SMTP id p1mr25896698pdo.113.1436409816695; Wed, 08 Jul 2015 19:43:36 -0700 (PDT) Received: from [192.168.0.102] ([113.193.131.162]) by smtp.gmail.com with ESMTPSA id v9sm3961544pdr.96.2015.07.08.19.43.33 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Jul 2015 19:43:35 -0700 (PDT) Message-ID: <559ddfd7.293e460a.833d.ffffb57c@mx.google.com> MIME-Version: 1.0 To: Dave Chinner Cc: , From: rakesh patel Subject: RE: regarding journaling mode Date: Thu, 9 Jul 2015 08:13:10 +0530 X-ASG-Orig-Subj: RE: regarding journaling mode In-Reply-To: <20150707002430.GV7943@dastard> References: <20150707002430.GV7943@dastard> Content-Type: multipart/alternative; boundary="_41924495-2CEA-4DBE-AA2E-FDD6ACA45652_" X-Barracuda-Connect: mail-pd0-f176.google.com[209.85.192.176] X-Barracuda-Start-Time: 1436409817 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20579 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --_41924495-2CEA-4DBE-AA2E-FDD6ACA45652_ Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" How Metadata updates after data IO completion done? Write back mode does no= t support synchronization? Is there any other feature ?? -----Original Message----- From: "Dave Chinner" Sent: =E2=80=8E07-=E2=80=8E07-=E2=80=8E2015 05:59 To: "Rakesh Patel" Cc: "xfs@oss.sgi.com" Subject: Re: regarding journaling mode On Mon, Jul 06, 2015 at 11:38:32AM +0530, Rakesh Patel wrote: > Hi, >=20 > I come to know XFS is using writeback journaling mode. Can you explain how you came to that conclusion? > As per the > journaling guide, writeback is unsafe which does not preserve data and > metadata write synchronization. What journalling guide would that be? Please quote your sources when asking questions. > I really want to know reason behind to choose writeback mode for journali= ng > in XFS. Metadata updates after data IO completion are used instead of ordering data writeback operations through the journal. Cheers, Dave. --=20 Dave Chinner david@fromorbit.com --_41924495-2CEA-4DBE-AA2E-FDD6ACA45652_ Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="utf-8"
How Metadata updates after data IO completion done? Write= back mode does not support synchronization?

Is there any other feat= ure ??

From: Dave Chinner
Sent: =E2=80=8E07-=E2= =80=8E07-=E2=80=8E2015 05:59
To: Rakesh Patel
Cc: xfs@oss.sgi.com
Subject: Re: rega= rding journaling mode

On Mon, Jul 06, 2015 at 11:38:32A= M +0530, Rakesh Patel wrote:
> Hi,
>
> I come to know XF= S is using writeback journaling mode.

Can you explain how you came t= o that conclusion?

> As per the
> journaling guide, writeba= ck is unsafe which does not preserve data and
> metadata write synchr= onization.

What journalling guide would that be? Please quote your s= ources when
asking questions.

> I really want to know reason b= ehind to choose writeback mode for journaling
> in XFS.

Metada= ta updates after data IO completion are used instead of
ordering data wr= iteback operations through the journal.

Cheers,

Dave.
-- <= br>Dave Chinner
david@fromorbit.com
= --_41924495-2CEA-4DBE-AA2E-FDD6ACA45652_-- From patelrakeshcomp@gmail.com Wed Jul 8 23:49:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C38597F37 for ; Wed, 8 Jul 2015 23:49:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id AFE518F8035 for ; Wed, 8 Jul 2015 21:48:57 -0700 (PDT) X-ASG-Debug-ID: 1436417336-04cb6c209cf7a60001-NocioJ Received: from mail-qk0-f181.google.com (mail-qk0-f181.google.com [209.85.220.181]) by cuda.sgi.com with ESMTP id 3cX8Z66wvZFbnPbv (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 08 Jul 2015 21:48:56 -0700 (PDT) X-Barracuda-Envelope-From: patelrakeshcomp@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.181 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.181] Received: by qkhu186 with SMTP id u186so178976868qkh.0 for ; Wed, 08 Jul 2015 21:48:55 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.181] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.181] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=x4kOBfVSKFoNFvv7ih3cATT/KbES33WV36zoE9rGI8A=; b=zSJT6hBQwZO9p6nnooKwx7KplJzYzWc2fc29bH7Cxvxl9ZlxAFl8tDLqa7PPdbMaWS E6WsHlm1MFXMVw/wDJIBG692tPHL5NR+ewX2b+Qg28b5MDholDfN0X+lWh0M69hmyATF bQLGaIzKcF7QYzoDQtC+Gu6gt/o+2+6vE0+awuuFRIfBiCXjgt3CduXID55BaNmJkmGd uf3D8oO4ANP+FL+bLwlANxqDE1lfZ/sbjcLfgeKv9d+LoLYWScPApOJFLUypDU1hm/D0 yM+ecG+nz7fEwzrz1L7Iy12NmZU9HvDygRvBcn0KCToUCzZPmmUNs/5k1hbAGCsGIYNj QnCA== MIME-Version: 1.0 X-Received: by 10.55.23.17 with SMTP id i17mr21705609qkh.39.1436417335634; Wed, 08 Jul 2015 21:48:55 -0700 (PDT) Received: by 10.140.82.210 with HTTP; Wed, 8 Jul 2015 21:48:55 -0700 (PDT) Date: Thu, 9 Jul 2015 10:18:55 +0530 Message-ID: Subject: Re: regarding journaling mode From: Rakesh Patel X-ASG-Orig-Subj: Re: regarding journaling mode To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a1146fabe0a5467051a69f9e7 X-Barracuda-Connect: mail-qk0-f181.google.com[209.85.220.181] X-Barracuda-Start-Time: 1436417336 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20581 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a1146fabe0a5467051a69f9e7 Content-Type: text/plain; charset=UTF-8 https://www.kernel.org/doc/Documentation/filesystems/ext4.txt data=writeback Data ordering is not preserved, data may be written into the main file system after its metadata has been committed to the journal. Rakesh --001a1146fabe0a5467051a69f9e7 Content-Type: text/html; charset=UTF-8
https://www.kernel.org/doc/Documentation/filesystems/ext4.txt

data=writeback		Data ordering is not preserved, data may be written
			into the main file system after its metadata has been
			committed to the journal.


Rakesh

--001a1146fabe0a5467051a69f9e7-- From mlin@kernel.org Thu Jul 9 01:54:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CBDCE7F37 for ; Thu, 9 Jul 2015 01:54:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B8C70304032 for ; Wed, 8 Jul 2015 23:54:09 -0700 (PDT) X-ASG-Debug-ID: 1436424847-04cbb050ceefd30001-NocioJ Received: from mail.kernel.org ([198.145.29.136]) by cuda.sgi.com with ESMTP id 2jrzYXPHAdGsPv3X for ; Wed, 08 Jul 2015 23:54:08 -0700 (PDT) X-Barracuda-Envelope-From: mlin@kernel.org X-Barracuda-Apparent-Source-IP: 198.145.29.136 Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id F2579205E9; Thu, 9 Jul 2015 06:54:06 +0000 (UTC) Received: from [10.0.0.138] (c-50-185-88-18.hsd1.ca.comcast.net [50.185.88.18]) (using TLSv1.2 with cipher DHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F0FB0205E5; Thu, 9 Jul 2015 06:54:05 +0000 (UTC) Message-ID: <1436424844.22691.2.camel@hasee> Subject: Re: xfs_io bmap confused From: Ming Lin X-ASG-Orig-Subj: Re: xfs_io bmap confused To: Christoph Hellwig Cc: xfs@oss.sgi.com Date: Wed, 08 Jul 2015 23:54:04 -0700 In-Reply-To: References: <1436338913.13729.11.camel@hasee> <20150708085341.GA23332@lst.de> <1436363862.15921.0.camel@hasee> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: UNKNOWN[198.145.29.136] X-Barracuda-Start-Time: 1436424847 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, 2015-07-08 at 16:40 -0700, Ming Lin wrote: > On Wed, 2015-07-08 at 06:57 -0700, Ming Lin wrote: > > On Wed, 2015-07-08 at 10:53 +0200, Christoph Hellwig wrote: > > > On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: > > > > Hi list, > > > > > > > > I am testing some direct-io patches. > > > > xfs_tests/xfs/080 failed. > > > > > > > > It's strange. > > > > There is no hole in "rwtest.file", > > > > but when read it at some offset it returns zero because of hole. > > > > > > > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file > > > > /mnt/test/rwtest.file: > > > > 0: [0..125671]: 160..125831 > > > > > > Sounds like you see an unwritten extent. What does xfs_bmap -pv show on > > > the file? > > > > root@block:~# xfs_bmap -pv /mnt/test/rwtest.file > > /mnt/test/rwtest.file: > > EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS > > 0: [0..743]: 160..903 0 (160..903) 744 00000 > > 1: [744..783]: 904..943 0 (904..943) 40 10000 > > 2: [784..951]: 944..1111 0 (944..1111) 168 00000 > > 3: [952..1023]: 1112..1183 0 (1112..1183) 72 10000 > > 4: [1024..1287]: 1184..1447 0 (1184..1447) 264 00000 > > 5: [1288..1383]: 1448..1543 0 (1448..1543) 96 10000 > > file offset 659456 is in EXT 5. > I guess FLAGS 1 means it's an unwritten extent, right? > > xfs_tests/xfs/080 basically does: > 1. direct io write > 2. then buffered read to check the previous dio write > > Here is an example of error logs. > > doio ( 3626) 16:13:23 > --------------------- > *** DATA COMPARISON ERROR *** > check_file(/mnt/test/rwtest.file, 239616, 81408, H:3626:block:doio*, > 18, 0) failed > > Comparison fd is 5, with open flags 0 > Corrupt regions follow - unprintable chars are represented as '.' > ----------------------------------------------------------------- > corrupt bytes starting at file offset 241664 > 1st 32 expected bytes: oio*H:3626:block:doio*H:3626:blo > 1st 32 actual bytes: ................................ > > Request number 981 > fd 4 is file /mnt/test/rwtest.file - open flags are 040001 > O_WRONLY,O_DIRECT, > write done at file offset 239616 - pattern is H (0110) > number of requests is 1, strides per request is 1 > i/o byte count = 81408 > memory alignment is aligned > DIRECT I/O: offset % 512 = 0 length % 81408 = 0 > mem alignment 0x200 xfer size: small: 512 large: 2147483136 > > syscall: writev(4, (iov on stack), 1) > > > The "expected bytes" was actually written to the disk successfully, > but for some bug the xfs extent flag was not set correctly. > The flag should be "XFS_EXT_NORM", but now it's "XFS_EXT_UNWRITTEN". > > Could you share the code path the extent flag was updated? > Is it also updated through direct io? For XFS direct IO, are below the only 2 paths to convert unwritten extent to written extent? [ 72.279043] Call Trace: [ 72.279719] [] dump_stack+0x4f/0x7b [ 72.280898] [] xfs_bmapi_convert_unwritten+0x73/0x176 [ 72.282393] [] xfs_bmapi_write+0x2a0/0x7ee [ 72.283705] [] xfs_iomap_write_direct+0x23e/0x2f0 [ 72.285132] [] __xfs_get_blocks+0x14c/0xf6c [ 72.286456] [] ? get_user_pages_fast+0xee/0x14c [ 72.287847] [] xfs_get_blocks_direct+0x14/0x16 [ 72.289246] [] get_blocks+0x86/0x182 [ 72.297467] [] ? get_user_pages_fast+0xee/0x14c [ 72.298845] [] __blockdev_direct_IO+0x372/0x666 [ 72.300266] [] ? xfs_get_blocks+0x13/0x13 [ 72.301555] [] ? __mnt_drop_write_file+0x12/0x14 [ 72.302936] [] ? file_update_time+0xb5/0xcb [ 72.304279] [] xfs_vm_direct_IO+0x89/0x90 [ 72.305555] [] ? xfs_setfilesize_trans_alloc+0xac/0xac [ 72.307064] [] xfs_file_dio_aio_write+0x2e0/0x449 [ 72.308509] [] ? __clear_user+0x36/0x5b [ 72.309755] [] xfs_file_write_iter+0x75/0x105 [ 72.311107] [] __vfs_write+0x97/0xc0 [ 72.312347] [] vfs_write+0xb5/0x16f [ 72.313526] [] SyS_write+0x4a/0x94 [ 72.314683] [] system_call_fastpath+0x12/0x6f [ 72.328096] Call Trace: [ 72.328786] [] dump_stack+0x4f/0x7b [ 72.330002] [] xfs_bmapi_convert_unwritten+0x73/0x176 [ 72.331565] [] ? xfs_bmap_search_extents+0x60/0xd6 [ 72.333059] [] ? kmem_zone_alloc+0x6e/0xba [ 72.334412] [] xfs_bmapi_write+0x2a0/0x7ee [ 72.335777] [] xfs_iomap_write_unwritten+0x205/0x413 [ 72.337300] [] xfs_end_io+0x50/0x75 [ 72.338495] [] xfs_end_io_direct_write+0x176/0x26c [ 72.339952] [] ? delayacct_end+0x55/0x5e [ 72.341238] [] dio_complete+0x7c/0x134 [ 72.342488] [] __blockdev_direct_IO+0x633/0x666 [ 72.343908] [] ? xfs_get_blocks+0x13/0x13 [ 72.345263] [] xfs_vm_direct_IO+0x89/0x90 [ 72.346598] [] ? xfs_setfilesize_trans_alloc+0xac/0xac [ 72.348185] [] xfs_file_dio_aio_write+0x2e0/0x449 [ 72.349652] [] ? __clear_user+0x36/0x5b [ 72.350950] [] xfs_file_write_iter+0x75/0x105 [ 72.352369] [] __vfs_write+0x97/0xc0 [ 72.353607] [] vfs_write+0xb5/0x16f [ 72.354832] [] SyS_write+0x4a/0x94 [ 72.356060] [] system_call_fastpath+0x12/0x6f From jtulak@redhat.com Thu Jul 9 03:24:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8FF2C7F37 for ; Thu, 9 Jul 2015 03:24:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5E3348F8037 for ; Thu, 9 Jul 2015 01:24:08 -0700 (PDT) X-ASG-Debug-ID: 1436430246-04bdf0078bf75a0001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id Xjos82n6RSxvDfF4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 01:24:06 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t698O44D014817; Thu, 9 Jul 2015 04:24:04 -0400 Date: Thu, 9 Jul 2015 04:24:04 -0400 (EDT) From: Jan Tulak To: Dave Chinner Cc: Brian Foster , Dave Chinner , xfs@oss.sgi.com Message-ID: <25337161.25415401.1436430244635.JavaMail.zimbra@redhat.com> In-Reply-To: <20150709004543.GD3902@dastard> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-2-git-send-email-jtulak@redhat.com> <20150625193748.GE36162@bfoster.bfoster> <413545489.22844725.1435841273912.JavaMail.zimbra@redhat.com> <20150702141403.GA61817@bfoster.bfoster> <20150702230520.GA22807@dastard> <2084199601.25014496.1436372096546.JavaMail.zimbra@redhat.com> <20150709004543.GD3902@dastard> Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.6.10] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: use common code for multi-disk detection Thread-Index: EX1F21R8hNXIBP8C95F5Gag4Cq7GqQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1436430246 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... OK, thanks for clarifying. :-) Jan ----- Original Message ----- > From: "Dave Chinner" > To: "Jan Tulak" > Cc: "Brian Foster" , "Dave Chinner" , xfs@oss.sgi.com > Sent: Thursday, July 9, 2015 2:45:43 AM > Subject: Re: [PATCH 01/17] xfsprogs: use common code for multi-disk detection > > [Please line wrap your responses at 68-72 columns] > > On Wed, Jul 08, 2015 at 12:14:56PM -0400, Jan Tulak wrote: > > ----- Original Message ----- > > > From: "Dave Chinner" > > > > > At one point during development of this patch set I started writing > > > an xfstest to validate that mkfs did all the right input validation > > > things and set parameters appropriately so that we didn't > > > inadvertently change behaviour. I never really finished it off (like > > > the patch set), but I've attached it below to give an idea of where > > > I was going with it. It was based on validating the input and CLI > > > parameters for the new code, so is guaranteed to fail on an existing > > > mkfs binary. > > > > I'm using and extending it, but I'm not sure about some tests, > > whether it is a change from current behaviour, or if it is rather > > an issue in the test. > > Remember, the point of the patchset was to sanitise and clean up the > CLI interface, not just the code. i.e. the CLI will change, not just > the code. > > > > + > > > +# basic "should fail" options > > > +# logarithm based options are no longer valid > > > +do_mkfs_fail -s log=9 $SCRATCH_DEV > > > > There are some changes in logarithm input (mkfs: validate > > logarithmic parameters sanely), but it is still supported in the > > patches. Is there some issue, why to remove them? > > They are redundant and almost nobody uses them. The size options are > what people use, and even they have so many different units that it > confuses people... > > > Otherwise, it should rather test for (in)valid input for log=xxx, right? > > No, it's indicative of the fact I wanted to remove the log scale > options for variables. As I've said before - I didn't ever finish > the patchset off. > > Essentially, once all the options are in a table, we only want to > look in one place for things like ag size, fs size, log size, block > sizes etc. Right now the table has multiple entries or multiple > global variables for these things and we have to work out which is > valid and correct and handle conflicts and incompatibilities, etc. > We don't *need* that complexity to specify sizes of things, so > getting rid of the rarely used redundant options makes a lot of > sense as it simplifies the code and the user interface without > reducing functionality... > > > > +rm -f $fsimg > > > +$XFS_IO_PROG -f -c "truncate $fssize" $fsimg > > > +do_mkfs_pass -d file $fsimg > > > +do_mkfs_pass -d file,name=$fsimg > > > +rm -f $fsimg > > > +do_mkfs_pass -d size=$fssize,file $fsimg > > > +rm -f $fsimg > > > +do_mkfs_pass -d size=$fssize,file,name=$fsimg > > > +do_mkfs_pass -d file,name=$fsimg > > > > Should all these inputs really pass? > > Yes, they should, because .... > > > What is the expected > > behaviour for example on -d file,name=$fsimg if the file exists, > > and what if there is no such file? > > ....in all cases the file either: > > a) exists and is of non-zero size and hence defines the > size of the filesystem to be created, > b) does not exist but the size of the filesystem to be > created is specified on the CLI allowing us to create > the image file correctly. > > We should only fail to create the image file if it doesn't exist > and we haven't been given enough information to calculate the size > of the filesystem via CLI parameters. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > -- Jan Tulak jtulak@redhat.com From jack@suse.cz Thu Jul 9 03:46:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C98267F37 for ; Thu, 9 Jul 2015 03:46:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id A2DAA8F8035 for ; Thu, 9 Jul 2015 01:46:10 -0700 (PDT) X-ASG-Debug-ID: 1436431566-04bdf00787f7b20001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id C4YInVbBGK1e8YD9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 01:46:08 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 01354AC57; Thu, 9 Jul 2015 08:46:06 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id 7944382490; Thu, 9 Jul 2015 10:46:02 +0200 (CEST) Date: Thu, 9 Jul 2015 10:46:02 +0200 From: Jan Kara To: Rakesh Patel Cc: xfs@oss.sgi.com Subject: Re: regarding journaling mode Message-ID: <20150709084602.GA2900@quack.suse.cz> X-ASG-Orig-Subj: Re: regarding journaling mode References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1436431567 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 09-07-15 10:18:55, Rakesh Patel wrote: > https://www.kernel.org/doc/Documentation/filesystems/ext4.txt > > data=writeback Data ordering is not preserved, data may be written > into the main file system after its metadata has been > committed to the journal. But this is about ext4, not xfs. XFS works differently and provides necessary data safety guarantees. Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu Jul 9 05:17:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 15B057F37 for ; Thu, 9 Jul 2015 05:17:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 037F58F8033 for ; Thu, 9 Jul 2015 03:17:20 -0700 (PDT) X-ASG-Debug-ID: 1436437036-04cbb050d1f3cf0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id vLcVgOH3Ksi3AL3b (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 03:17:17 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 6803CAD01; Thu, 9 Jul 2015 10:17:15 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id 7D8B782490; Thu, 9 Jul 2015 12:17:11 +0200 (CEST) Date: Thu, 9 Jul 2015 12:17:11 +0200 From: Jan Kara To: Eric Sandeen Cc: Dave Chinner , Eric Sandeen , xfs-oss , Jan Kara Subject: Re: [PATCH] xfs: take XFS_IOLOCK_EXCL if suid removal is required Message-ID: <20150709101711.GC2900@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH] xfs: take XFS_IOLOCK_EXCL if suid removal is required References: <54F9DBAE.2070002@redhat.com> <20150306210927.GA13958@dastard> <557EEEAD.8000701@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <557EEEAD.8000701@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1436437037 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20586 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon 15-06-15 10:26:37, Eric Sandeen wrote: > On 3/6/15 3:09 PM, Dave Chinner wrote: > > On Fri, Mar 06, 2015 at 10:54:06AM -0600, Eric Sandeen wrote: > >> This sequence: > >> > >> # rm -f sparsefile > >> # truncate --size=1m sparsefile > >> # chmod ugo+rws sparsefile > >> # ls -l sparsefile > >> -rwSrwSrw-. 1 root root 1048576 Mar 6 10:29 sparsefile > >> # su tester > >> > >> $ xfs_io -d -c "pwrite 0 4096" sparsefile > >> wrote 4096/4096 bytes at offset 0 > >> 4 KiB, 1 ops; 0.0000 sec (21.505 KiB/sec and 5.3763 ops/sec) > >> $ exit > >> > >> will lead to a WARN_ON() in notify change, because i_mutex is > >> not held, and we get to notify_change via suid removal with > >> only XFS_IOLOCK_SHARED held, i.e. no i_mutex. > >> > >> Upgrade the lock to XFS_IOLOCK_EXCL in this case. > >> > >> Signed-off-by: Eric Sandeen > > > > I believe Jan Kara has already addressed this problem in > > this patchset: > > > > http://oss.sgi.com/archives/xfs/2015-03/msg00051.html > > Seems like that patchset never made it anywhere, though, so this > is still an outstanding problem. :( Al just merged the patch set during this merge window. Hurray! Honza -- Jan Kara SUSE Labs, CR From tonytkdk@gmail.com Thu Jul 9 05:58:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4CFD87F37 for ; Thu, 9 Jul 2015 05:58:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1B1758F8037 for ; Thu, 9 Jul 2015 03:58:00 -0700 (PDT) X-ASG-Debug-ID: 1436439476-04cbb050d0f49e0001-NocioJ Received: from mail-wg0-f44.google.com (mail-wg0-f44.google.com [74.125.82.44]) by cuda.sgi.com with ESMTP id pCRDDYCV6X5XteVn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 03:57:56 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.44 Received: by wgjx7 with SMTP id x7so219913173wgj.2 for ; Thu, 09 Jul 2015 03:57:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=frrtQ5hatqLKIuWsKlM8uBxAao+UFFlfOYv9BWBxMWI=; b=Us3j8M6ibeopxoKz+xWAPfkX0dgvT6yqX9c85+aUCL0y6T+JsEJGTjdAxgfZaBN/B1 bv/Hh3ipCAnqHG5WkabMZn9HSz7SNi+DRzrYtog8TmELWYvO3yXjCKU40VzsCQClIdBn iALyRHOYwmTlpRErAJxDhqqHi44mnYc6qgnzc1Clr0mo7i+/tREEOEooDaiTBCMU3Huh aT9IS7dt44oTgYR4YoRGbRz7hf1z6kS+dsUdz9dY0Tvm6plLmIGLAPki7NDaM8DYjzDr DdPh7lrtvSSxq+LkhWbrTonpYeOsLjJVTL55VPNfbbWDQo1faxAxpBNe3Svxb3eLaUCI x56g== MIME-Version: 1.0 X-Received: by 10.194.77.97 with SMTP id r1mr27720817wjw.98.1436439475658; Thu, 09 Jul 2015 03:57:55 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Thu, 9 Jul 2015 03:57:55 -0700 (PDT) In-Reply-To: <5582DCDA.9070200@sandeen.net> References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> Date: Thu, 9 Jul 2015 18:57:55 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Eric Sandeen Cc: Brian Foster , xfs@oss.sgi.com, Hugo Kuo , darrell@swiftstack.com Content-Type: multipart/alternative; boundary=047d7bfcf2f6b039a0051a6f2092 X-Barracuda-Connect: mail-wg0-f44.google.com[74.125.82.44] X-Barracuda-Start-Time: 1436439476 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20587 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7bfcf2f6b039a0051a6f2092 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Folks, As the results of 32 disks with xfs_repair -n seems no any error shows up. We currently tried to deploy CentOS 6.6 for testing. (The previous kernel panic was came from Ubuntu). The CentOS nodes encountered kernel panic with same daemon but the problem may a bit differ. - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu. - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on xfs_dir2_sf_getdents+0x2a0/0x3a0 <1>BUG: unable to handle kernel NULL pointer dereference at 000000000000000= 1 <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] <4>PGD 1072327067 PUD 1072328067 PMD 0 <4>Oops: 0000 [#1] SMP <4>last sysfs file: /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander= -10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/que= ue/rotational <4>CPU 17 <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan] <4> <4>Pid: 4454, comm: swift-object-se Not tainted 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform R518.v5P/X10DRi-T4+ <4>RIP: 0010:[] [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000 <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203 <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004 <4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000 <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580 <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) knlGS:000000000000= 0000 <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0 <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, task ffff880860f18ab0) <4>Stack: <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff880874749cc0 <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 ffff8808715b4580 <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 ffffffffa035ab31 <4>Call Trace: <4> [] ? filldir+0x0/0xe0 <4> [] xfs_readdir+0xe1/0x130 [xfs] <4> [] ? filldir+0x0/0xe0 <4> [] xfs_file_readdir+0x39/0x50 [xfs] <4> [] vfs_readdir+0xc0/0xe0 <4> [] ? final_putname+0x26/0x50 <4> [] sys_getdents+0x89/0xf0 <4> [] system_call_fastpath+0x16/0x1b <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] <4> RSP <4>CR2: 0000000000000001 PID: 4454 TASK: ffff880860f18ab0 CPU: 17 COMMAND: "swift-object-se" ROOT: / CWD: / FD FILE DENTRY INODE TYPE PATH 0 ffff881073604900 ffff8810749a9440 ffff8808740b9728 CHR /dev/null 1 ffff881073604900 ffff8810749a9440 ffff8808740b9728 CHR /dev/null 2 ffff881073604900 ffff8810749a9440 ffff8808740b9728 CHR /dev/null 3 ffff881074222840 ffff88106e184980 ffff88106e16cd48 SOCK 4 ffff881072952c00 ffff88106e1848c0 ffff8810711cca08 SOCK 5 ffff88087154b2c0 ffff88044f0f1780 ffff880018e51a08 SOCK 6 ffff8810716f2600 ffff88107122d5c0 ffff881071315cb8 REG /tmp/ffi1ECJ8Z 7 ffff88086bd0a6c0 ffff88086fc4b840 ffff88086fc4a100 REG /tmp/ffiIArHUO 8 ffff88106f516ec0 ffff881067d9ae00 ffff8808745aa5e8 REG [eventpoll] 9 ffff88106ed35b40 ffff88106e15b200 ffff88106e201cc8 SOCK 10 ffff88106f31ae00 ffff881074ad75c0 ffff88106e169a08 SOCK 11 ffff88106ede2740 ffff881067f9a8c0 ffff8808745aa5e8 REG [eventpoll] 12 ffff880122e8bc80 ffff8808745a8240 ffff881074379d48 CHR /dev/urandom 13 ffff88087162e200 ffff88086fd87200 ffff88086fe82748 SOCK 14 ffff88087135e840 ffff88086fc653c0 ffff88086fe82488 SOCK 15 ffff88106f36f900 ffff88106e263680 ffff8808745aa5e8 REG [eventpoll] 16 ffff8810737f8680 ffff88106e3e9c80 ffff8808745aa5e8 REG [eventpoll] 17 ffff881073635540 ffff88106e1f9240 ffff8808745aa5e8 REG [eventpoll] 18 ffff88106ef5ba40 ffff88105bb6b080 ffff8808745aa5e8 REG [eventpoll] 19 ffff881074222300 ffff88105b975300 ffff8808745aa5e8 REG [eventpoll] 20 ffff881073770f00 ffff881013478080 ffff8808745aa5e8 REG [eventpoll] 21 ffff8810737f8bc0 ffff88106e3e9500 ffff8808745aa5e8 REG [eventpoll] 22 ffff88106ef5bc80 ffff88105bb72e00 ffff8808745aa5e8 REG [eventpoll] 23 ffff88106ef25e00 ffff88106e3e9bc0 ffff8808745aa5e8 REG [eventpoll] 24 ffff881071950d80 ffff8810383ee980 ffff8808745aa5e8 REG [eventpoll] 25 ffff88106ecca600 ffff881067d96840 ffff8808745aa5e8 REG [eventpoll] 26 ffff8808737ec740 ffff880855d95cc0 ffff8808745aa5e8 REG [eventpoll] 27 ffff88107345d3c0 ffff880fc46160c0 ffff8808745aa5e8 REG [eventpoll] 28 ffff88086bf2d600 ffff880777987b00 ffff880159ac0448 SOCK 29 ffff8808737e9240 ffff880855c80a40 ffff8808745aa5e8 REG [eventpoll] 30 ffff88106f5e0140 ffff880ff5752440 ffff8808745aa5e8 REG [eventpoll] 31 ffff8808703a19c0 ffff8807847c8e40 ffff8808745aa5e8 REG [eventpoll] 32 ffff88086bd738c0 ffff88033be10800 ffff8806b47f2c08 SOCK 33 ffff88087119eb40 ffff8806916b48c0 ffff8804cd27e648 SOCK 34 ffff880870aed480 ffff8806b3fc4900 ffff880015583588 REG /srv/node/d199/objects/12860/2c0/323cc020fd7dbd6c12472cd1c10742c0/143626603= 6.98015.ts 35 ffff88106eeb0e00 ffff88101347de40 ffff8808745aa5e8 REG [eventpoll] 36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03ed88 REG /srv/node/d205/quarantined/objects/cd1d68f515006d443a54ff4f658091bc-a114bba= 1449b45238abf38dc741d7c27/1436254020.89801.ts 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266= 042.57775.ts 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/tmp/tmpSpnrHg 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32 41 ffff880871fce240 ffff880951136c00 ffff880bacf63d88 DIR /srv/node/d199/objects/12860/2c0/323cc020fd7dbd6c12472cd1c10742c0 I=E2=80=99ve got the vmcore dump from operator. Does vmcore help for troubleshooting kind issue ? Thanks // Hugo =E2=80=8B 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > On 6/18/15 9:29 AM, Kuo Hugo wrote: > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? Note > that -n will report problems only and prevent any modification by repair. > > > > *We might to to xfs_repair if we can address which disk causes the > issue. * > > If you do, please save the output, and if it finds anything, please > provide the output in this thread. > > Thanks, > -Eric > --047d7bfcf2f6b039a0051a6f2092 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Folks,

As the results of 32 disks with= xfs_repair -n seems no any error shows up.
We c= urrently tried to deploy CentOS 6.6 for testing. (The previous kernel panic= was came from Ubuntu).
The CentOS nodes encountered kernel panic with s= ame daemon but the problem may a bit differ.

  • It was broken on xfs_dir2_s= f_get_parent_ino+0xa/0x20 in Ubuntu.
  • Here=E2=80=99s the log in CentOS. It=E2=80= =99s broken on xfs_dir2_sf_getdents+0x2a0/0x3a0
<1>BUG: unable to h=
andle kernel NULL pointer dereference at 0000000000000001
<1>IP: [<ffffffffa0362d60>] xfs_dir2_sf_getdents+0x2a0/0x3a0 [x=
fs]
<4>PGD 1072327067 PUD 1072328067 PMD 0
<4>Oops: 0000 [#1] SMP
<4>last sysfs file: /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0=
/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:=
25/10:0:25:0/block/sdz/queue/rotational
<4>CPU 17
<4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter ip=
t_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack nf_defrag_ipv4=
 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt iTCO_vendor_support ses enclosure =
igb i2c_algo_bit sb_edac edac_core i2c_i801 i2c_core sg shpchp lpc_ich mfd_=
core ixgbe dca ptp pps_core mdio power_meter acpi_ipmi ipmi_si ipmi_msghand=
ler ext4 jbd2 mbcache sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_cla=
ss xhci_hcd ahci wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded:=
 scsi_wait_scan]
<4>
<4>Pid: 4454, comm: swift-object-se Not tainted 2.6.32-504.23.4.el6.x=
86_64 #1 Silicon Mechanics Storform R518.v5P/X10DRi-T4+
<4>RIP: 0010:[<ffffffffa0362d60>]  [<ffffffffa0362d60>] x=
fs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
<4>RSP: 0018:ffff880871f6de18  EFLAGS: 00010202
<4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000
<4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203
<4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004
<4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000
<4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580
<4>FS:  00007faa85425700(0000) GS:ffff880028360000(0000) knlGS:000000=
0000000000
<4>CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
<4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0
<4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
<4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
<4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, t=
ask ffff880860f18ab0)
<4>Stack:
<4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff880874749c=
c0
<4><d> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 ffff8=
808715b4580
<4><d> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 fffff=
fffa035ab31
<4>Call Trace:
<4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
<4> [<ffffffffa035ab31>] xfs_readdir+0xe1/0x130 [xfs]
<4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
<4> [<ffffffffa038fe29>] xfs_file_readdir+0x39/0x50 [xfs]
<4> [<ffffffff811a4e30>] vfs_readdir+0xc0/0xe0
<4> [<ffffffff8119bd86>] ? final_putname+0x26/0x50
<4> [<ffffffff811a4fb9>] sys_getdents+0x89/0xf0
<4> [<ffffffff8100b0f2>] system_call_fastpath+0x16/0x1b
<4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 =
0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 <41=
> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6
<1>RIP  [<ffffffffa0362d60>] xfs_dir2_sf_getdents+0x2a0/0x3a0 [=
xfs]
<4> RSP <ffff880871f6de18>
<4>CR2: 0000000000000001
PID: 4454   =
TASK: ffff880860f18ab0  CPU: 17  COMMAND: "swift-object-se"
ROOT: /    CWD: /
 FD       FILE            DENTRY           INODE       TYPE PATH
  0 ffff881073604900 ffff8810749a9440 ffff8808740b9728 CHR  /dev/null
  1 ffff881073604900 ffff8810749a9440 ffff8808740b9728 CHR  /dev/null
  2 ffff881073604900 ffff8810749a9440 ffff8808740b9728 CHR  /dev/null
  3 ffff881074222840 ffff88106e184980 ffff88106e16cd48 SOCK
  4 ffff881072952c00 ffff88106e1848c0 ffff8810711cca08 SOCK
  5 ffff88087154b2c0 ffff88044f0f1780 ffff880018e51a08 SOCK
  6 ffff8810716f2600 ffff88107122d5c0 ffff881071315cb8 REG  /tmp/ffi1ECJ8Z
  7 ffff88086bd0a6c0 ffff88086fc4b840 ffff88086fc4a100 REG  /tmp/ffiIArHUO
  8 ffff88106f516ec0 ffff881067d9ae00 ffff8808745aa5e8 REG  [eventpoll]
  9 ffff88106ed35b40 ffff88106e15b200 ffff88106e201cc8 SOCK
 10 ffff88106f31ae00 ffff881074ad75c0 ffff88106e169a08 SOCK
 11 ffff88106ede2740 ffff881067f9a8c0 ffff8808745aa5e8 REG  [eventpoll]
 12 ffff880122e8bc80 ffff8808745a8240 ffff881074379d48 CHR  /dev/urandom
 13 ffff88087162e200 ffff88086fd87200 ffff88086fe82748 SOCK
 14 ffff88087135e840 ffff88086fc653c0 ffff88086fe82488 SOCK
 15 ffff88106f36f900 ffff88106e263680 ffff8808745aa5e8 REG  [eventpoll]
 16 ffff8810737f8680 ffff88106e3e9c80 ffff8808745aa5e8 REG  [eventpoll]
 17 ffff881073635540 ffff88106e1f9240 ffff8808745aa5e8 REG  [eventpoll]
 18 ffff88106ef5ba40 ffff88105bb6b080 ffff8808745aa5e8 REG  [eventpoll]
 19 ffff881074222300 ffff88105b975300 ffff8808745aa5e8 REG  [eventpoll]
 20 ffff881073770f00 ffff881013478080 ffff8808745aa5e8 REG  [eventpoll]
 21 ffff8810737f8bc0 ffff88106e3e9500 ffff8808745aa5e8 REG  [eventpoll]
 22 ffff88106ef5bc80 ffff88105bb72e00 ffff8808745aa5e8 REG  [eventpoll]
 23 ffff88106ef25e00 ffff88106e3e9bc0 ffff8808745aa5e8 REG  [eventpoll]
 24 ffff881071950d80 ffff8810383ee980 ffff8808745aa5e8 REG  [eventpoll]
 25 ffff88106ecca600 ffff881067d96840 ffff8808745aa5e8 REG  [eventpoll]
 26 ffff8808737ec740 ffff880855d95cc0 ffff8808745aa5e8 REG  [eventpoll]
 27 ffff88107345d3c0 ffff880fc46160c0 ffff8808745aa5e8 REG  [eventpoll]
 28 ffff88086bf2d600 ffff880777987b00 ffff880159ac0448 SOCK
 29 ffff8808737e9240 ffff880855c80a40 ffff8808745aa5e8 REG  [eventpoll]
 30 ffff88106f5e0140 ffff880ff5752440 ffff8808745aa5e8 REG  [eventpoll]
 31 ffff8808703a19c0 ffff8807847c8e40 ffff8808745aa5e8 REG  [eventpoll]
 32 ffff88086bd738c0 ffff88033be10800 ffff8806b47f2c08 SOCK
 33 ffff88087119eb40 ffff8806916b48c0 ffff8804cd27e648 SOCK
 34 ffff880870aed480 ffff8806b3fc4900 ffff880015583588 REG  /srv/node/d199/=
objects/12860/2c0/323cc020fd7dbd6c12472cd1c10742c0/1436266036.98015.ts
 35 ffff88106eeb0e00 ffff88101347de40 ffff8808745aa5e8 REG  [eventpoll]
 36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03ed88 REG  /srv/node/d205/=
quarantined/objects/cd1d68f515006d443a54ff4f658091bc-a114bba1449b45238abf38=
dc741d7c27/1436254020.89801.ts
 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG  [eventpoll]
 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG  /srv/node/d224/=
quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts
 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG  /srv/node/d224/=
tmp/tmpSpnrHg
 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR  /srv/node/d224/=
quarantined/objects/b146865bf8034bfc42570b747c341b32
 41 ffff880871fce240 ffff880951136c00 ffff880bacf63d88 DIR  /srv/node/d199/=
objects/12860/2c0/323cc020fd7dbd6c12472cd1c10742c0

I=E2=80=99ve got t= he vmcore dump from operator. Does vmcore help for troubleshooting kind iss= ue ?

Thanks // Hugo

=E2=80=8B

2015-06-18 22:59 GMT+= 08:00 Eric Sandeen <sandeen@sandeen.net>:
On 6/18/15 9:29 AM, Kuo Hugo wrote:
>>- Have you tried an 'xfs_repair -n' of the affected filesys= tem? Note that -n will report problems only and prevent any modification by= repair.
>
> *We might to to xfs_repair if we can address which disk causes = the issue. *

If you do, please save the output, and if it finds anything, please provide= the output in this thread.

Thanks,
-Eric

--047d7bfcf2f6b039a0051a6f2092-- From patelrakeshcomp@gmail.com Thu Jul 9 06:47:38 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 365247F37 for ; Thu, 9 Jul 2015 06:47:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 151E7304032 for ; Thu, 9 Jul 2015 04:47:38 -0700 (PDT) X-ASG-Debug-ID: 1436442455-04cbb050d1f5ab0001-NocioJ Received: from mail-qk0-f169.google.com (mail-qk0-f169.google.com [209.85.220.169]) by cuda.sgi.com with ESMTP id sQBEnCapHv7gcGXP (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 04:47:36 -0700 (PDT) X-Barracuda-Envelope-From: patelrakeshcomp@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.169 X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.169] Received: by qkei195 with SMTP id i195so183749064qke.3 for ; Thu, 09 Jul 2015 04:47:35 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.169] X-Barracuda-IPDD: Level1 [gmail.com/209.85.220.169] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=5Q2SgTl0OlnN+oBtP8fZvfIrglHLK2xQUtYX2UjeC4Q=; b=WCTynJx79KJ37Fr9+nR2bhC07kiE8cGwlzxjkXPAOzeNXy1NhmbzmGtIFW7rcYuDxy 9f1pYDdgjTceFNN5D53XcMmV8a9rymWpSwU8o8wZYyEVJQT2IsQqBckBLLqm4cNku2dS 9ms0ilrvgam8K3zLBM6e2b1ZLmgwgp2aYXetxJJJBcGzbg5iM/cszsFNvPZ2yjdQyww7 Ke0plBIB5hLTM3v62kOew5Wue7Hq6JPXue7VzbF2KIePYgYtOpEIWe5oDPeJUx79RiId Iv+kLaBaKkitbjI5Y3nBAWQAObCdbUiraoioYYMDF8yBSWMt+KlM9r6foYh8QYXpt4IY hseg== MIME-Version: 1.0 X-Received: by 10.140.238.214 with SMTP id j205mr23896921qhc.73.1436442455524; Thu, 09 Jul 2015 04:47:35 -0700 (PDT) Received: by 10.140.82.210 with HTTP; Thu, 9 Jul 2015 04:47:35 -0700 (PDT) In-Reply-To: <20150709084602.GA2900@quack.suse.cz> References: <20150709084602.GA2900@quack.suse.cz> Date: Thu, 9 Jul 2015 17:17:35 +0530 Message-ID: Subject: Re: regarding journaling mode From: Rakesh Patel X-ASG-Orig-Subj: Re: regarding journaling mode To: Jan Kara Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a1135bfe44d5c87051a6fd2cd X-Barracuda-Connect: mail-qk0-f169.google.com[209.85.220.169] X-Barracuda-Start-Time: 1436442456 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20588 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a1135bfe44d5c87051a6fd2cd Content-Type: text/plain; charset=UTF-8 Ok. Thanks for your information. On Thu, Jul 9, 2015 at 2:16 PM, Jan Kara wrote: > On Thu 09-07-15 10:18:55, Rakesh Patel wrote: > > https://www.kernel.org/doc/Documentation/filesystems/ext4.txt > > > > data=writeback Data ordering is not preserved, data may > be written > > into the main file system after its metadata has > been > > committed to the journal. > > But this is about ext4, not xfs. XFS works differently and provides > necessary data safety guarantees. > > Honza > -- > Jan Kara > SUSE Labs, CR > --001a1135bfe44d5c87051a6fd2cd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Ok. Thanks for your information.


On Thu, Jul 9, 2015 at 2:16= PM, Jan Kara <jack@suse.cz> wrote:
On Thu 09-07-15 10:18:55, Rak= esh Patel wrote:
> https://www.kernel.org/doc/Documen= tation/filesystems/ext4.txt
>
> data=3Dwriteback=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 Data ordering is not preserved, data may be written
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0into the main file system after its metadata has been
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0committed to the journal.

But this is about ext4, not xfs. XFS works differently and prov= ides
necessary data safety guarantees.

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR

--001a1135bfe44d5c87051a6fd2cd-- From jtulak@redhat.com Thu Jul 9 07:18:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4E2857F37 for ; Thu, 9 Jul 2015 07:18:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C2207AC004 for ; Thu, 9 Jul 2015 05:18:45 -0700 (PDT) X-ASG-Debug-ID: 1436444322-04cbb050d1f6390001-NocioJ Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id MY0RDBf8NaNTB6EV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 05:18:43 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t69CIgiG065042 for ; Thu, 9 Jul 2015 08:18:42 -0400 Date: Thu, 9 Jul 2015 08:18:42 -0400 (EDT) From: Jan Tulak To: xfs@oss.sgi.com Message-ID: <1934296067.25506110.1436444322496.JavaMail.zimbra@redhat.com> In-Reply-To: <1005907288.25490237.1436440850135.JavaMail.zimbra@redhat.com> Subject: The (desired) state OS X support for xfsprogs MIME-Version: 1.0 X-ASG-Orig-Subj: The (desired) state OS X support for xfsprogs Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.6.10] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: The (desired) state OS X support for xfsprogs Thread-Index: VQhQWk8ArhlQbWbcmtdmB6Q03rbkLw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1436444323 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20589 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all As I started the theme a bit it in another thread, I post it here in a standalone email, to bring it to a wider audience. What are the plans regarding xfsprogs on OS X? Officially, by documentation, it should be buildable, though only some binaries (like mkfs and repair) are usable. But when I did a small reality check on OS X Yosemite (10.10) and tried to build it by the doc/INSTALL, I got tons of this. libxfs_priv.h:371:0: error: syntax error in macro parameter list #define xfs_cmn_err(tag,level,mp,fmt,args...) cmn_err(level,fmt, ## args) ^ libxfs_priv.h:372:0: error: syntax error in macro parameter list #define xfs_warn(mp,fmt,args...) cmn_err(CE_WARN,fmt, ## args) ^ libxfs_priv.h:373:0: error: syntax error in macro parameter list #define xfs_alert(mp,fmt,args...) cmn_err(CE_ALERT,fmt, ## args) There are more macros with the same error. (Of course, the same code compiles on Linux with no issue.) As a bonus, to even get to compiling the code, I had to throw away the Xcode clang and install a gcc myself (from macports), because of some arguments passed to the compiler that aren't supported in the ones shipped by Apple. (Didn't remember them, sorry.) Formally we claim to support OS X, but apparently it doesn't work as we declare. So the question is, should we fix it and continue in the support? Or should we drop it? What I saw, it doesn't look like if it is used. Macports, Homebrew and Fink (software repositories like yum, apt...) doesn't ship it at all, and when I searched in this mailing list archive for last five years, I didn't saw any "xfsprogs on OS X" related email. Some attempts in bringing xfs to fuse on OS X exists, but are long time without any update: http://sourceforge.net/projects/fusexfs/ - last update in 2012 Hopefully the required changes in fixing it shouldn't be complicated, but is it worth of the time? I'm not sure. Cheers, Jan P.S.: For the question "who would do it" - most likely me. I have a Mac and being able to build xfsprogs locally when working on it would be nice. But I'm really not sure if there is any other boon except my own leisure. :-) System info: OS X Yosemite (10.10 - most recent version) $ gcc --version gcc (MacPorts gcc5 5.1.0_1) 5.1.0 -- Jan Tulak jtulak@redhat.com From bfoster@redhat.com Thu Jul 9 07:51:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D20B77F37 for ; Thu, 9 Jul 2015 07:51:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B3F178F8033 for ; Thu, 9 Jul 2015 05:51:24 -0700 (PDT) X-ASG-Debug-ID: 1436446282-04cbb050d0f6d80001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id tTFBmDJYZRexGXjD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 05:51:23 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id C524D2D44EC; Thu, 9 Jul 2015 12:51:21 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t69CpKZf027758; Thu, 9 Jul 2015 08:51:20 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id BD24C123029; Thu, 9 Jul 2015 08:51:19 -0400 (EDT) Date: Thu, 9 Jul 2015 08:51:19 -0400 From: Brian Foster To: Kuo Hugo Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150709125119.GC63282@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436446283 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > Hi Folks, > > As the results of 32 disks with xfs_repair -n seems no any error shows up. > We currently tried to deploy CentOS 6.6 for testing. (The previous kernel > panic was came from Ubuntu). > The CentOS nodes encountered kernel panic with same daemon but the problem > may a bit differ. > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu. > - Here’s the log in CentOS. It’s broken on > xfs_dir2_sf_getdents+0x2a0/0x3a0 > I'd venture to guess it's the same behavior here. The previous kernel had a callback for the parent inode number that was called via xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static inline here instead. > <1>BUG: unable to handle kernel NULL pointer dereference at 0000000000000001 > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > <4>PGD 1072327067 PUD 1072328067 PMD 0 > <4>Oops: 0000 [#1] SMP > <4>last sysfs file: > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/queue/rotational > <4>CPU 17 > <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > scsi_wait_scan] > <4> > <4>Pid: 4454, comm: swift-object-se Not tainted > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > R518.v5P/X10DRi-T4+ > <4>RIP: 0010:[] [] > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000 > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203 > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004 > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000 > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580 > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) knlGS:0000000000000000 > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0 > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, > task ffff880860f18ab0) > <4>Stack: > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff880874749cc0 > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 ffff8808715b4580 > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 ffffffffa035ab31 > <4>Call Trace: > <4> [] ? filldir+0x0/0xe0 > <4> [] xfs_readdir+0xe1/0x130 [xfs] > <4> [] ? filldir+0x0/0xe0 > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > <4> [] vfs_readdir+0xc0/0xe0 > <4> [] ? final_putname+0x26/0x50 > <4> [] sys_getdents+0x89/0xf0 > <4> [] system_call_fastpath+0x16/0x1b > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > <4> RSP > <4>CR2: 0000000000000001 > ... > > I’ve got the vmcore dump from operator. Does vmcore help for > troubleshooting kind issue ? > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kernel? Can you provide the exact kernel version and post the vmcore somewhere? Brian > Thanks // Hugo > ​ > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? Note > > that -n will report problems only and prevent any modification by repair. > > > > > > *We might to to xfs_repair if we can address which disk causes the > > issue. * > > > > If you do, please save the output, and if it finds anything, please > > provide the output in this thread. > > > > Thanks, > > -Eric > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From tonytkdk@gmail.com Thu Jul 9 08:20:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0B9317F37 for ; Thu, 9 Jul 2015 08:20:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id EEFFA8F8035 for ; Thu, 9 Jul 2015 06:20:03 -0700 (PDT) X-ASG-Debug-ID: 1436448000-04cb6c209d102390001-NocioJ Received: from mail-wi0-f178.google.com (mail-wi0-f178.google.com [209.85.212.178]) by cuda.sgi.com with ESMTP id TBc1xazwq5GIwDdn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 06:20:01 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.178 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.178] Received: by wiwl6 with SMTP id l6so18582793wiw.0 for ; Thu, 09 Jul 2015 06:20:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.178] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.178] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=0g/ox8WP/EuHSE8f1hbQhePLVPXKKSqreT2tFPO+0Ok=; b=bbQiDQ/D6q68JsWl0yuNIL9gcurukhFea/vlcwo7owolYlIIQCK0uNSrA9snGqycnu 5Qxap7mq/vuCp8xb7kA/AIunNVVcqr5tzs8P0rh84OOyoCo9pK9Blxw/PFVk4oxfBdhP 0IxdIPqBPP1bsQB9qgEy2alCNa6CFyTPxc7gfkl84EElL6sl9dwYsPVAokc9z3OVf0t0 +VtwvVPZMt3xu7zKsHLpnheh3pl1aHkbAgNGfmCZGaN0fsKr8W6f7beXOqcsmkclfugi RzNrL4VQDHNnX9XQNUQ2LfNaXE9y9IYqeCSCw5eKHrVADsYOnUmx7v5Yt5vODz6JiSW3 EuYA== MIME-Version: 1.0 X-Received: by 10.194.23.225 with SMTP id p1mr32252818wjf.155.1436448000319; Thu, 09 Jul 2015 06:20:00 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Thu, 9 Jul 2015 06:20:00 -0700 (PDT) In-Reply-To: <20150709125119.GC63282@bfoster.bfoster> References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> Date: Thu, 9 Jul 2015 21:20:00 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7b4724e2cc2a84051a711c61 X-Barracuda-Connect: mail-wi0-f178.google.com[209.85.212.178] X-Barracuda-Start-Time: 1436448001 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20590 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b4724e2cc2a84051a711c61 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Brian, *Operating System Version:* Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final *NODE 1* https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt *NODE 2* https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.= txt Any thoughts would be appreciate Thanks // Hugo 2015-07-09 20:51 GMT+08:00 Brian Foster : > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > Hi Folks, > > > > As the results of 32 disks with xfs_repair -n seems no any error shows > up. > > We currently tried to deploy CentOS 6.6 for testing. (The previous kern= el > > panic was came from Ubuntu). > > The CentOS nodes encountered kernel panic with same daemon but the > problem > > may a bit differ. > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu. > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > I'd venture to guess it's the same behavior here. The previous kernel > had a callback for the parent inode number that was called via > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static > inline here instead. > > > <1>BUG: unable to handle kernel NULL pointer dereference at > 0000000000000001 > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > <4>Oops: 0000 [#1] SMP > > <4>last sysfs file: > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expand= er-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/q= ueue/rotational > > <4>CPU 17 > > <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > scsi_wait_scan] > > <4> > > <4>Pid: 4454, comm: swift-object-se Not tainted > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > R518.v5P/X10DRi-T4+ > > <4>RIP: 0010:[] [] > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000 > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203 > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004 > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000 > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580 > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > knlGS:0000000000000000 > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0 > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > > <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, > > task ffff880860f18ab0) > > <4>Stack: > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff880874749cc0 > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > ffff8808715b4580 > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > ffffffffa035ab31 > > <4>Call Trace: > > <4> [] ? filldir+0x0/0xe0 > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > <4> [] ? filldir+0x0/0xe0 > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > <4> [] vfs_readdir+0xc0/0xe0 > > <4> [] ? final_putname+0x26/0x50 > > <4> [] sys_getdents+0x89/0xf0 > > <4> [] system_call_fastpath+0x16/0x1b > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > <4> RSP > > <4>CR2: 0000000000000001 > > > ... > > > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore help for > > troubleshooting kind issue ? > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kernel? Can > you provide the exact kernel version and post the vmcore somewhere? > > Brian > > > Thanks // Hugo > > =E2=80=8B > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? Not= e > > > that -n will report problems only and prevent any modification by > repair. > > > > > > > > *We might to to xfs_repair if we can address which disk causes the > > > issue. * > > > > > > If you do, please save the output, and if it finds anything, please > > > provide the output in this thread. > > > > > > Thanks, > > > -Eric > > > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > --047d7b4724e2cc2a84051a711c61 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

2015-07-09 20:51 GMT+08:00 Brian F= oster <bfoster@redhat.com>:
On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrot= e:
> Hi Folks,
>
> As the results of 32 disks with xfs_repair -n seems no any error shows= up.
> We currently tried to deploy CentOS 6.6 for testing. (The previous ker= nel
> panic was came from Ubuntu).
> The CentOS nodes encountered kernel panic with same daemon but the pro= blem
> may a bit differ.
>
>=C2=A0 =C2=A0 - It was broken on xfs_dir2_sf_get_parent_ino+0xa/= 0x20 in Ubuntu.
>=C2=A0 =C2=A0 - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken o= n
>=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/0x3a0
>

I'd venture to guess it's the same behavior here. The previous kern= el
had a callback for the parent inode number that was called via
xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static
inline here instead.

> <1>BUG: unable to handle kernel NULL pointer dereference at 0000= 000000000001
> <1>IP: [<ffffffffa0362d60>] xfs_dir2_sf_getdents+0x2a0/0x3= a0 [xfs]
> <4>PGD 1072327067 PUD 1072328067 PMD 0
> <4>Oops: 0000 [#1] SMP
> <4>last sysfs file:
> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/exp= ander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sd= z/queue/rotational
> <4>CPU 17
> <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filt= er
> ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack
> nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt
> iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci<= br> > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded:
> scsi_wait_scan]
> <4>
> <4>Pid: 4454, comm: swift-object-se Not tainted
> 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform
> R518.v5P/X10DRi-T4+
> <4>RIP: 0010:[<ffffffffa0362d60>]=C2=A0 [<ffffffffa0362= d60>]
> xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> <4>RSP: 0018:ffff880871f6de18=C2=A0 EFLAGS: 00010202
> <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 000000000000= 0000
> <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa7400= 6203
> <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 000000000000= 0004
> <4>R10: 0000000000008030 R11: 0000000000000246 R12: 000000000000= 0000
> <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b= 4580
> <4>FS:=C2=A0 00007faa85425700(0000) GS:ffff880028360000(0000) kn= lGS:0000000000000000
> <4>CS:=C2=A0 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 000000000014= 07e0
> <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 000000000000= 0000
> <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 000000000000= 0400
> <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c0= 00,
> task ffff880860f18ab0)
> <4>Stack:
> <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff88087= 4749cc0
> <4><d> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 = ffff8808715b4580
> <4><d> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 = ffffffffa035ab31
> <4>Call Trace:
> <4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
> <4> [<ffffffffa035ab31>] xfs_readdir+0xe1/0x130 [xfs]
> <4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
> <4> [<ffffffffa038fe29>] xfs_file_readdir+0x39/0x50 [xfs]<= br> > <4> [<ffffffff811a4e30>] vfs_readdir+0xc0/0xe0
> <4> [<ffffffff8119bd86>] ? final_putname+0x26/0x50
> <4> [<ffffffff811a4fb9>] sys_getdents+0x89/0xf0
> <4> [<ffffffff8100b0f2>] system_call_fastpath+0x16/0x1b > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 8= 5 c0
> 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6=
> <1>RIP=C2=A0 [<ffffffffa0362d60>] xfs_dir2_sf_getdents+0x2= a0/0x3a0 [xfs]
> <4> RSP <ffff880871f6de18>
> <4>CR2: 0000000000000001
>
...
>
> I=E2=80=99ve got the vmcore dump from operator. Does vmcore help for > troubleshooting kind issue ?
>

Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kern= el? Can
you provide the exact kernel version and post the vmcore somewhere?

Brian

> Thanks // Hugo
> =E2=80=8B
>
> 2015-06-18 22:59 GMT+08:00 Eric Sandeen <sandeen@sandeen.net>:
>
> > On 6/18/15 9:29 AM, Kuo Hugo wrote:
> > >>- Have you tried an 'xfs_repair -n' of the affect= ed filesystem? Note
> > that -n will report problems only and prevent any modification by= repair.
> > >
> > > *We might to to xfs_repair if we can address which disk caus= es the
> > issue. *
> >
> > If you do, please save the output, and if it finds anything, plea= se
> > provide the output in this thread.
> >
> > Thanks,
> > -Eric
> >

> _______________________= ________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs


--047d7b4724e2cc2a84051a711c61-- From tonytkdk@gmail.com Thu Jul 9 08:27:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1A8DE7F37 for ; Thu, 9 Jul 2015 08:27:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8D4A2AC004 for ; Thu, 9 Jul 2015 06:27:19 -0700 (PDT) X-ASG-Debug-ID: 1436448435-04cbb050d1f7960001-NocioJ Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by cuda.sgi.com with ESMTP id u3pEO8ftw6E8wNGF (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 06:27:16 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.182 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.182] Received: by wiclp1 with SMTP id lp1so109694351wic.0 for ; Thu, 09 Jul 2015 06:27:15 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.182] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.182] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=njSXc93OlCIMPKDjj0xNAvwE/Z3c4UwvHbr0oesyJZk=; b=JnX5CIfCWxo/S/BsDFi2HW3JLCE3DS3eyU1Mi73Nd0CkfTrQp9tu/giFYDRB/Q2DT6 wqVIffSGxGgop9+NsTSFxBMJJePpC9cXx2OzhJhhIYd9bpKR74/bGaAxGf+27o93wJu2 zSHOUcGb/mLchFSxjw9Dt4aJO8m/zig3eM7M9yymP91PXYPSje/FnDbCXRw46moz5DJt 0nLkcs5CyanB96j8kZBOqT5Kr93wksvSh5OZI0rjCvFAAp/+SywsMr9Vw76LXOQIyUFU tk/YJubDuBLcK/c9jTBTayK/dud+/lFx7/HTm7pGg2NP/crwrHAtjUd/bRsW6SL4F1pt MQMg== MIME-Version: 1.0 X-Received: by 10.180.90.42 with SMTP id bt10mr104498845wib.64.1436448435534; Thu, 09 Jul 2015 06:27:15 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Thu, 9 Jul 2015 06:27:15 -0700 (PDT) In-Reply-To: References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> Date: Thu, 9 Jul 2015 21:27:15 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=f46d043c81d2bd013a051a7136d0 X-Barracuda-Connect: mail-wi0-f182.google.com[209.85.212.182] X-Barracuda-Start-Time: 1436448436 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20590 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --f46d043c81d2bd013a051a7136d0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable For vmcore files please use these links which will be available in 24hrs. Thanks https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore?temp_url_sig= =3De54df337458dc48b3c7e211d9e36bc4df1939c33&temp_url_expires=3D1436534130 https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02?temp_u= rl_sig=3D663c6abd17ce2ee8eac92f8b0e388e7a0ec3d052&temp_url_expires=3D143653= 4130 2015-07-09 21:20 GMT+08:00 Kuo Hugo : > Hi Brian, > > *Operating System Version:* > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > *NODE 1* > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > *NODE 2* > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj0= 2.txt > > > Any thoughts would be appreciate > > Thanks // Hugo > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > >> On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: >> > Hi Folks, >> > >> > As the results of 32 disks with xfs_repair -n seems no any error shows >> up. >> > We currently tried to deploy CentOS 6.6 for testing. (The previous >> kernel >> > panic was came from Ubuntu). >> > The CentOS nodes encountered kernel panic with same daemon but the >> problem >> > may a bit differ. >> > >> > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu. >> > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on >> > xfs_dir2_sf_getdents+0x2a0/0x3a0 >> > >> >> I'd venture to guess it's the same behavior here. The previous kernel >> had a callback for the parent inode number that was called via >> xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static >> inline here instead. >> >> > <1>BUG: unable to handle kernel NULL pointer dereference at >> 0000000000000001 >> > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] >> > <4>PGD 1072327067 PUD 1072328067 PMD 0 >> > <4>Oops: 0000 [#1] SMP >> > <4>last sysfs file: >> > >> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expan= der-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/= queue/rotational >> > <4>CPU 17 >> > <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter >> > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack >> > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt >> > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core >> > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core >> > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache >> > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci >> > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: >> > scsi_wait_scan] >> > <4> >> > <4>Pid: 4454, comm: swift-object-se Not tainted >> > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform >> > R518.v5P/X10DRi-T4+ >> > <4>RIP: 0010:[] [] >> > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] >> > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 >> > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000 >> > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203 >> > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004 >> > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000 >> > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580 >> > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) >> knlGS:0000000000000000 >> > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >> > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0 >> > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 >> > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 >> > <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, >> > task ffff880860f18ab0) >> > <4>Stack: >> > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff880874749cc= 0 >> > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 >> ffff8808715b4580 >> > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 >> ffffffffa035ab31 >> > <4>Call Trace: >> > <4> [] ? filldir+0x0/0xe0 >> > <4> [] xfs_readdir+0xe1/0x130 [xfs] >> > <4> [] ? filldir+0x0/0xe0 >> > <4> [] xfs_file_readdir+0x39/0x50 [xfs] >> > <4> [] vfs_readdir+0xc0/0xe0 >> > <4> [] ? final_putname+0x26/0x50 >> > <4> [] sys_getdents+0x89/0xf0 >> > <4> [] system_call_fastpath+0x16/0x1b >> > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 >> > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 >> > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 >> > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] >> > <4> RSP >> > <4>CR2: 0000000000000001 >> > >> ... >> > >> > I=E2=80=99ve got the vmcore dump from operator. Does vmcore help for >> > troubleshooting kind issue ? >> > >> >> Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kernel? Can >> you provide the exact kernel version and post the vmcore somewhere? >> >> Brian >> >> > Thanks // Hugo >> > =E2=80=8B >> > >> > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : >> > >> > > On 6/18/15 9:29 AM, Kuo Hugo wrote: >> > > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? No= te >> > > that -n will report problems only and prevent any modification by >> repair. >> > > > >> > > > *We might to to xfs_repair if we can address which disk causes the >> > > issue. * >> > > >> > > If you do, please save the output, and if it finds anything, please >> > > provide the output in this thread. >> > > >> > > Thanks, >> > > -Eric >> > > >> >> > _______________________________________________ >> > xfs mailing list >> > xfs@oss.sgi.com >> > http://oss.sgi.com/mailman/listinfo/xfs >> >> > --f46d043c81d2bd013a051a7136d0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

2015-07-09 21:20 GMT+08:00= Kuo Hugo <tonytkdk@gmail.com>:
Hi Brian,=C2=A0

Operatin= g System Version:=C2=A0 Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-ce= ntos-6.6-Final

NODE 1

NODE 2=C2=A0

2015-07-09 20:51 GMT+08:00 Brian Foster <bfoster@redhat.com&g= t;:
On Thu, Jul 09, 2015 at = 06:57:55PM +0800, Kuo Hugo wrote:
> Hi Folks,
>
> As the results of 32 disks with xfs_repair -n seems no any error shows= up.
> We currently tried to deploy CentOS 6.6 for testing. (The previous ker= nel
> panic was came from Ubuntu).
> The CentOS nodes encountered kernel panic with same daemon but the pro= blem
> may a bit differ.
>
>=C2=A0 =C2=A0 - It was broken on xfs_dir2_sf_get_parent_ino+0xa/= 0x20 in Ubuntu.
>=C2=A0 =C2=A0 - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken o= n
>=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/0x3a0
>

I'd venture to guess it's the same behavior here. The previous kern= el
had a callback for the parent inode number that was called via
xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static
inline here instead.

> <1>BUG: unable to handle kernel NULL pointer dereference at 0000= 000000000001
> <1>IP: [<ffffffffa0362d60>] xfs_dir2_sf_getdents+0x2a0/0x3= a0 [xfs]
> <4>PGD 1072327067 PUD 1072328067 PMD 0
> <4>Oops: 0000 [#1] SMP
> <4>last sysfs file:
> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/exp= ander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sd= z/queue/rotational
> <4>CPU 17
> <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filt= er
> ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack
> nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt
> iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci<= br> > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded:
> scsi_wait_scan]
> <4>
> <4>Pid: 4454, comm: swift-object-se Not tainted
> 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform
> R518.v5P/X10DRi-T4+
> <4>RIP: 0010:[<ffffffffa0362d60>]=C2=A0 [<ffffffffa0362= d60>]
> xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> <4>RSP: 0018:ffff880871f6de18=C2=A0 EFLAGS: 00010202
> <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 000000000000= 0000
> <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa7400= 6203
> <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 000000000000= 0004
> <4>R10: 0000000000008030 R11: 0000000000000246 R12: 000000000000= 0000
> <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b= 4580
> <4>FS:=C2=A0 00007faa85425700(0000) GS:ffff880028360000(0000) kn= lGS:0000000000000000
> <4>CS:=C2=A0 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 000000000014= 07e0
> <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 000000000000= 0000
> <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 000000000000= 0400
> <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c0= 00,
> task ffff880860f18ab0)
> <4>Stack:
> <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff88087= 4749cc0
> <4><d> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 = ffff8808715b4580
> <4><d> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 = ffffffffa035ab31
> <4>Call Trace:
> <4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
> <4> [<ffffffffa035ab31>] xfs_readdir+0xe1/0x130 [xfs]
> <4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
> <4> [<ffffffffa038fe29>] xfs_file_readdir+0x39/0x50 [xfs]<= br> > <4> [<ffffffff811a4e30>] vfs_readdir+0xc0/0xe0
> <4> [<ffffffff8119bd86>] ? final_putname+0x26/0x50
> <4> [<ffffffff811a4fb9>] sys_getdents+0x89/0xf0
> <4> [<ffffffff8100b0f2>] system_call_fastpath+0x16/0x1b > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 8= 5 c0
> 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6=
> <1>RIP=C2=A0 [<ffffffffa0362d60>] xfs_dir2_sf_getdents+0x2= a0/0x3a0 [xfs]
> <4> RSP <ffff880871f6de18>
> <4>CR2: 0000000000000001
>
...
>
> I=E2=80=99ve got the vmcore dump from operator. Does vmcore help for > troubleshooting kind issue ?
>

Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kern= el? Can
you provide the exact kernel version and post the vmcore somewhere?

Brian

> Thanks // Hugo
> =E2=80=8B
>
> 2015-06-18 22:59 GMT+08:00 Eric Sandeen <sandeen@sandeen.net>:
>
> > On 6/18/15 9:29 AM, Kuo Hugo wrote:
> > >>- Have you tried an 'xfs_repair -n' of the affect= ed filesystem? Note
> > that -n will report problems only and prevent any modification by= repair.
> > >
> > > *We might to to xfs_repair if we can address which disk caus= es the
> > issue. *
> >
> > If you do, please save the output, and if it finds anything, plea= se
> > provide the output in this thread.
> >
> > Thanks,
> > -Eric
> >

> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
>
http://oss.sgi.com/mailman/listinfo/xfs



--f46d043c81d2bd013a051a7136d0-- From eflorac@intellique.com Thu Jul 9 08:29:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 18B507F37 for ; Thu, 9 Jul 2015 08:29:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 08B73304039 for ; Thu, 9 Jul 2015 06:29:22 -0700 (PDT) X-ASG-Debug-ID: 1436448560-04cbb050cef79c0001-NocioJ Received: from smtp5-g21.free.fr (smtp5-g21.free.fr [212.27.42.5]) by cuda.sgi.com with ESMTP id rGpNTD7s7WyxdGFy (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 06:29:21 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.5 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp5-g21.free.fr (Postfix) with ESMTP id 69F0CD4809A; Thu, 9 Jul 2015 15:29:19 +0200 (CEST) Date: Thu, 9 Jul 2015 15:29:24 +0200 From: Emmanuel Florac To: "Mark Noon" Cc: xfs@oss.sgi.com Subject: Re: Proper SU/SW values for nested raids RAID50/RAID60 Message-ID: <20150709152924.21ca4669@harpe.intellique.com> X-ASG-Orig-Subj: Re: Proper SU/SW values for nested raids RAID50/RAID60 In-Reply-To: References: Organization: Intellique X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.20; i486-slackware-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp5-g21.free.fr[212.27.42.5] X-Barracuda-Start-Time: 1436448560 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20590 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Le Wed, 8 Jul 2015 20:54:54 +0200 "Mark Noon" =C3=A9crivait: > I'm trying to understand the proper values when formatting an xfs > filesystem under a hardware raid controller and seem to get > conflicting information between whats on the wiki and various mailing > listings and forum posts when searching google. I have a system that > will be storing images and other static content files accross a > RAID50. The plan is to do 3 raid5 arrays each with 5 disks with a > stripe size of 128K striped accross a raid0. I will then build a > logical volume on top of this. When running mkfs.xfs should the > correct settings be su=3D128k sw=3D12 (-1 parity 'disk' for each of the 3 > arrays) or su=3D128k sw=3D4 (only consider one of the arrays)? Also if I > ever add a JBOD and extend the storage how does this change things > esspecially given that it will be on a completely different raid > volume just merged together via LVM? Thanks for the assitance!=20 You should probably go with the 128K su/12 sw value. It probably won't make much difference. When you'll extend your FS with LVM, your attempt at optimisation will be completely nullified anyway :) --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From eflorac@intellique.com Thu Jul 9 08:32:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 44D897F37 for ; Thu, 9 Jul 2015 08:32:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 12590304039 for ; Thu, 9 Jul 2015 06:32:22 -0700 (PDT) X-ASG-Debug-ID: 1436448739-04cb6c209d102790001-NocioJ Received: from smtp5-g21.free.fr (smtp5-g21.free.fr [212.27.42.5]) by cuda.sgi.com with ESMTP id 9QbSmeejOvvPXb5T (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 06:32:20 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.5 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp5-g21.free.fr (Postfix) with ESMTP id 50B12D48082; Thu, 9 Jul 2015 15:32:19 +0200 (CEST) Date: Thu, 9 Jul 2015 15:32:24 +0200 From: Emmanuel Florac To: Rakesh Patel Cc: xfs@oss.sgi.com Subject: Re: regarding journaling mode Message-ID: <20150709153224.0f197584@harpe.intellique.com> X-ASG-Orig-Subj: Re: regarding journaling mode In-Reply-To: References: Organization: Intellique X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.20; i486-slackware-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp5-g21.free.fr[212.27.42.5] X-Barracuda-Start-Time: 1436448740 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20590 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Thu, 9 Jul 2015 10:18:55 +0530 Rakesh Patel =C3=A9crivait: > https://www.kernel.org/doc/Documentation/filesystems/ext4.txt >=20 > data=3Dwriteback Data ordering is not preserved, data > may be written into the main file system after its metadata has been > committed to the journal. First, this is ext4, not xfs. However XFS behaves the same way, that is, it may update metadata BEFORE the data has been committed to disk. This has been the standard behaviour of all filesystems since linux 2.6.30 I guess. If you're interested in the details, search for O_PONIES on the web... --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From claudemaurano12@gmail.com Thu Jul 9 08:47:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,FREEMAIL_REPLY,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BBBFE7F37 for ; Thu, 9 Jul 2015 08:47:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9850C8F804B for ; Thu, 9 Jul 2015 06:47:56 -0700 (PDT) X-ASG-Debug-ID: 1436449673-04bdf00787fdc60001-NocioJ Received: from mail-oi0-f66.google.com (mail-oi0-f66.google.com [209.85.218.66]) by cuda.sgi.com with ESMTP id 3S7esFsV2x0worzU (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 06:47:54 -0700 (PDT) X-Barracuda-Envelope-From: claudemaurano12@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.218.66 X-Barracuda-IPDD: Level1 [gmail.com/209.85.218.66] Received: by oiyy130 with SMTP id y130so7901760oiy.3 for ; Thu, 09 Jul 2015 06:47:53 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.218.66] X-Barracuda-IPDD: Level1 [gmail.com/209.85.218.66] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=ZJHHCb4LuLXIeOKiTQnW4qUlOT78wz125vpVeeUUdFk=; b=1GhVygdH49D4mS7wp6wwAFH7/sEQgvmnLuZvHVlgsFTRDEbKt1uaRiiP7y2Le3NUT5 9ta0jZavE5SxtA2dOIDXJ4lKp0QJKpmwyiV9XpbEKCuLXMG6PMkZIZRlqT0xpKvQGNVV Lj3Va2IADwoAvNIIZ/iDmz0mSexurBrnLySDb7zDmqnU5jflUNMggYDaTz0bkFASJ4jM hUqCXWelziNtklybN9BsuvwmpcAQSuzRpRFpipuYmhEmolIUHy9cr1UPIjM6iMDQmU1x vwG04LT7HLFN64axQGDV52IRbgciB5lSeMq0c/QigvfLqnskd3wOUA3xq3z7b0Oylsgc 3TVQ== MIME-Version: 1.0 X-Received: by 10.60.134.19 with SMTP id pg19mr15318227oeb.12.1436449673859; Thu, 09 Jul 2015 06:47:53 -0700 (PDT) Received: by 10.60.56.109 with HTTP; Thu, 9 Jul 2015 06:47:53 -0700 (PDT) Date: Thu, 9 Jul 2015 14:47:53 +0100 Message-ID: Subject: Darlehen anbieten zwischen bestimmten From: claude maurano X-ASG-Orig-Subj: Darlehen anbieten zwischen bestimmten To: phyllisstewart48@gmail.com, y@constellation.com, Cynthiakmitchell@gmail.com, owner-xfs@oss.sgi.com, xfs@oss.sgi.com, bapcoitd@gmail.com, faplap@gmail.com, nkl.nedev@gmail.com, azbelltas@gmail.com, hopilbae@gmail.com, arindrajit.chowdhury@gmail.com, 07kaya07@windowslive.com, bogy@juno.com, bohlabu@gmail.com, buckola48@hotmail.com, crikey-mc-blimey@hotmail.com, redactioncourrier@gmail.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-oi0-f66.google.com[209.85.218.66] X-Barracuda-Start-Time: 1436449674 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.51 X-Barracuda-Spam-Status: No, SCORE=1.51 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MJ1576, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED, FUZZY_CREDIT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20590 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 FUZZY_CREDIT BODY: Attempt to obfuscate words in spam 1.50 BSF_SC0_MJ1576 Custom Rule MJ1576 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Darlehen Angebot - Kredit Wir bieten Darlehen f=C3=BCr jeden in der Lage, uns wieder mit einem j=C3=A4hrlichen Zinssatz von 3 % zu bezahlen. Erstattungen werden basierend auf Ihr monatliches Budget angepasst. Unsere Konditionen sind einfach und klar definierte. Sie k=C3=B6nnen ein Darlehen von 5.000 =E2=82=AC zu 2.000.000 =E2=82=AC nach Ihrer Wahl erhalten. Erstattung der Ihr monatliche= s Budget kann ermittelt werden. E-Mail: claudemaurano@gmx.fr From bfoster@redhat.com Thu Jul 9 10:18:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 164BB7F37 for ; Thu, 9 Jul 2015 10:18:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 853E0AC008 for ; Thu, 9 Jul 2015 08:18:19 -0700 (PDT) X-ASG-Debug-ID: 1436455094-04cb6c209c104b90001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id bGLLMBOCzP0LZzr3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 08:18:15 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 2A9302D4517; Thu, 9 Jul 2015 15:18:14 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t69FIDNl007062; Thu, 9 Jul 2015 11:18:13 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 25269123029; Thu, 9 Jul 2015 11:18:12 -0400 (EDT) Date: Thu, 9 Jul 2015 11:18:11 -0400 From: Brian Foster To: Kuo Hugo Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150709151811.GE63282@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436455095 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > Hi Brian, > > *Operating System Version:* > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > *NODE 1* > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > *NODE 2* > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt > > > Any thoughts would be appreciate > I'm not able to fire up crash with these core files and the kernel debug info from the following centos kernel debuginfo package: kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm It complains about a version mismatch between the vmlinux and core file. I'm no crash expert... are you sure the cores above correspond to this kernel? Does crash load up for you on said box if you run something like the following? crash /usr/lib/debug/lib/modules/.../vmlinux vmcore Note that you might need to install the above kernel-debuginfo package to get the debug (vmlinux) file. If so, could you also upload that debuginfo rpm somewhere? Brian > Thanks // Hugo > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > Hi Folks, > > > > > > As the results of 32 disks with xfs_repair -n seems no any error shows > > up. > > > We currently tried to deploy CentOS 6.6 for testing. (The previous kernel > > > panic was came from Ubuntu). > > > The CentOS nodes encountered kernel panic with same daemon but the > > problem > > > may a bit differ. > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu. > > > - Here’s the log in CentOS. It’s broken on > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > I'd venture to guess it's the same behavior here. The previous kernel > > had a callback for the parent inode number that was called via > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static > > inline here instead. > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > 0000000000000001 > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > <4>Oops: 0000 [#1] SMP > > > <4>last sysfs file: > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/queue/rotational > > > <4>CPU 17 > > > <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > scsi_wait_scan] > > > <4> > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > R518.v5P/X10DRi-T4+ > > > <4>RIP: 0010:[] [] > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000 > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203 > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004 > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000 > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580 > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > knlGS:0000000000000000 > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0 > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > > > <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, > > > task ffff880860f18ab0) > > > <4>Stack: > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 ffff880874749cc0 > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > ffff8808715b4580 > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > ffffffffa035ab31 > > > <4>Call Trace: > > > <4> [] ? filldir+0x0/0xe0 > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > <4> [] ? filldir+0x0/0xe0 > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > <4> [] vfs_readdir+0xc0/0xe0 > > > <4> [] ? final_putname+0x26/0x50 > > > <4> [] sys_getdents+0x89/0xf0 > > > <4> [] system_call_fastpath+0x16/0x1b > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > <4> RSP > > > <4>CR2: 0000000000000001 > > > > > ... > > > > > > I’ve got the vmcore dump from operator. Does vmcore help for > > > troubleshooting kind issue ? > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kernel? Can > > you provide the exact kernel version and post the vmcore somewhere? > > > > Brian > > > > > Thanks // Hugo > > > ​ > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? Note > > > > that -n will report problems only and prevent any modification by > > repair. > > > > > > > > > > *We might to to xfs_repair if we can address which disk causes the > > > > issue. * > > > > > > > > If you do, please save the output, and if it finds anything, please > > > > provide the output in this thread. > > > > > > > > Thanks, > > > > -Eric > > > > > > > > > _______________________________________________ > > > xfs mailing list > > > xfs@oss.sgi.com > > > http://oss.sgi.com/mailman/listinfo/xfs > > > > From tonytkdk@gmail.com Thu Jul 9 11:40:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AAA587F37 for ; Thu, 9 Jul 2015 11:40:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8EE33304032 for ; Thu, 9 Jul 2015 09:40:04 -0700 (PDT) X-ASG-Debug-ID: 1436460001-04cb6c209d1065d0001-NocioJ Received: from mail-wg0-f48.google.com (mail-wg0-f48.google.com [74.125.82.48]) by cuda.sgi.com with ESMTP id DSbLTiStAVHBJwEc (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 09:40:01 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.48 Received: by wgjx7 with SMTP id x7so228236167wgj.2 for ; Thu, 09 Jul 2015 09:40:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=KCO7ZqtZKFMmDSR5oKikU1Ylz8/2XMkG96p/mI5UU20=; b=sM4NLbQCGcsQY3hcC9Xb2U4L5Yx1EJL90zQVsVmE0uebFZSe//zMgBxUrTTtRZryEe eUUlM9FjGBkZbe2mpF6Gk/GERhy5/+9IzNtmDs/BsVu6/fqMQT2RbyJsFum4ziuGmokw 46kqYXVEa/s7ekyU1DrqVZRQlzS+MbOOAZFQlCOE/ojTpZ8sB6LfUWswGolI8lPo/GFW MJi9EIIEIGO79qaaQK9JQZhSFO73sjFFld3yv4Mria/Te0NU35JD9epaxr3sfWlnFG+n 7gAsUdoj3z7BWteIIKDKAnTpD2NfSyq0eJGXelUf5sISzmQoHmPXGUZDY03hVh6F7TO9 nN6w== MIME-Version: 1.0 X-Received: by 10.180.9.7 with SMTP id v7mr87496147wia.60.1436460000807; Thu, 09 Jul 2015 09:40:00 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Thu, 9 Jul 2015 09:40:00 -0700 (PDT) In-Reply-To: <20150709151811.GE63282@bfoster.bfoster> References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> Date: Fri, 10 Jul 2015 00:40:00 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11c23d2a1512f1051a73e855 X-Barracuda-Connect: mail-wg0-f48.google.com[74.125.82.48] X-Barracuda-Start-Time: 1436460001 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20594 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c23d2a1512f1051a73e855 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Brain, There you go. https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4= .el6.x86_64 $ md5sum vmlinux 82aaa694a174c0a29e78c05e73adf5d8 vmlinux Yes, I can read it with this vmlinux image. Put all files (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore Hugo =E2=80=8B 2015-07-09 23:18 GMT+08:00 Brian Foster : > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > Hi Brian, > > > > *Operating System Version:* > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > > > *NODE 1* > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > > > > *NODE 2* > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj0= 2.txt > > > > > > Any thoughts would be appreciate > > > > I'm not able to fire up crash with these core files and the kernel debug > info from the following centos kernel debuginfo package: > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > It complains about a version mismatch between the vmlinux and core file. > I'm no crash expert... are you sure the cores above correspond to this > kernel? Does crash load up for you on said box if you run something like > the following? > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > Note that you might need to install the above kernel-debuginfo package > to get the debug (vmlinux) file. If so, could you also upload that > debuginfo rpm somewhere? > > Brian > > > Thanks // Hugo > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > Hi Folks, > > > > > > > > As the results of 32 disks with xfs_repair -n seems no any error > shows > > > up. > > > > We currently tried to deploy CentOS 6.6 for testing. (The previous > kernel > > > > panic was came from Ubuntu). > > > > The CentOS nodes encountered kernel panic with same daemon but the > > > problem > > > > may a bit differ. > > > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu= . > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > I'd venture to guess it's the same behavior here. The previous kernel > > > had a callback for the parent inode number that was called via > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a stati= c > > > inline here instead. > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > > 0000000000000001 > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > <4>Oops: 0000 [#1] SMP > > > > <4>last sysfs file: > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expand= er-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/q= ueue/rotational > > > > <4>CPU 17 > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_cor= e > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcach= e > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ah= ci > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > > scsi_wait_scan] > > > > <4> > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > > R518.v5P/X10DRi-T4+ > > > > <4>RIP: 0010:[] [] > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 000000000000000= 0 > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa7400620= 3 > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 000000000000000= 4 > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 000000000000000= 0 > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b458= 0 > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > > knlGS:0000000000000000 > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e= 0 > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 000000000000000= 0 > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 000000000000040= 0 > > > > <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, > > > > task ffff880860f18ab0) > > > > <4>Stack: > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > ffff880874749cc0 > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > > ffff8808715b4580 > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > > ffffffffa035ab31 > > > > <4>Call Trace: > > > > <4> [] ? filldir+0x0/0xe0 > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > <4> [] ? filldir+0x0/0xe0 > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > <4> [] ? final_putname+0x26/0x50 > > > > <4> [] sys_getdents+0x89/0xf0 > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c= 0 > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 0= 0 > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > <4> RSP > > > > <4>CR2: 0000000000000001 > > > > > > > ... > > > > > > > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore help fo= r > > > > troubleshooting kind issue ? > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kernel? C= an > > > you provide the exact kernel version and post the vmcore somewhere? > > > > > > Brian > > > > > > > Thanks // Hugo > > > > =E2=80=8B > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? > Note > > > > > that -n will report problems only and prevent any modification by > > > repair. > > > > > > > > > > > > *We might to to xfs_repair if we can address which disk causes > the > > > > > issue. * > > > > > > > > > > If you do, please save the output, and if it finds anything, plea= se > > > > > provide the output in this thread. > > > > > > > > > > Thanks, > > > > > -Eric > > > > > > > > > > > > _______________________________________________ > > > > xfs mailing list > > > > xfs@oss.sgi.com > > > > http://oss.sgi.com/mailman/listinfo/xfs > > > > > > > --001a11c23d2a1512f1051a73e855 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Brain,

There you go.

$ md5sum vmlinux
82aaa694a174c0a29e78c05e73adf5d8  vmlinux

Yes, I can read it= with this vmlinux image. Put all files (vmcore,vmlinux,System.map) in a fo= lder and run $crash vmlinux vmcore

Hugo

=E2=80=8B

2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@r= edhat.com>:
On Thu, Jul 09,= 2015 at 09:20:00PM +0800, Kuo Hugo wrote:
> Hi Brian,
>
> *Operating System Version:*
> Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final
>
> *NODE 1*
>
> https://cloud.swiftstack.com/v1/AUT= H_burton/brtnswift/vmcore
> https://cloud.swiftstack.= com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
>
>
> *NODE 2*
>
> https://cloud.swiftstack.co= m/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> https://cloud.swi= ftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
>
>
> Any thoughts would be appreciate
>

I'm not able to fire up crash with these core files and the kern= el debug
info from the following centos kernel debuginfo package:

kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm

It complains about a version mismatch between the vmlinux and core file. I'm no crash expert... are you sure the cores above correspond to this<= br> kernel? Does crash load up for you on said box if you run something like the following?

=C2=A0 =C2=A0 =C2=A0 =C2=A0 crash /usr/lib/debug/lib/modules/.../vmlinux vm= core

Note that you might need to install the above kernel-debuginfo package
to get the debug (vmlinux) file. If so, could you also upload that
debuginfo rpm somewhere?

Brian

> Thanks // Hugo
>
>
> 2015-07-09 20:51 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote:
> > > Hi Folks,
> > >
> > > As the results of 32 disks with xfs_repair -n seems no any e= rror shows
> > up.
> > > We currently tried to deploy CentOS 6.6 for testing. (The pr= evious kernel
> > > panic was came from Ubuntu).
> > > The CentOS nodes encountered kernel panic with same daemon b= ut the
> > problem
> > > may a bit differ.
> > >
> > >=C2=A0 =C2=A0 - It was broken on xfs_dir2_sf_get_parent_ino+0= xa/0x20 in Ubuntu.
> > >=C2=A0 =C2=A0 - Here=E2=80=99s the log in CentOS. It=E2=80=99= s broken on
> > >=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/0x3a0
> > >
> >
> > I'd venture to guess it's the same behavior here. The pre= vious kernel
> > had a callback for the parent inode number that was called via > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a s= tatic
> > inline here instead.
> >
> > > <1>BUG: unable to handle kernel NULL pointer dereferen= ce at
> > 0000000000000001
> > > <1>IP: [<ffffffffa0362d60>] xfs_dir2_sf_getdents= +0x2a0/0x3a0 [xfs]
> > > <4>PGD 1072327067 PUD 1072328067 PMD 0
> > > <4>Oops: 0000 [#1] SMP
> > > <4>last sysfs file:
> > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > <4>CPU 17
> > > <4>Modules linked in: xt_conntrack tun xfs exportfs ip= table_filter
> > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntra= ck
> > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt
> > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac e= dac_core
> > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp p= ps_core
> > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2= mbcache
> > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci= _hcd ahci
> > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > scsi_wait_scan]
> > > <4>
> > > <4>Pid: 4454, comm: swift-object-se Not tainted
> > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform
> > > R518.v5P/X10DRi-T4+
> > > <4>RIP: 0010:[<ffffffffa0362d60>]=C2=A0 [<fff= fffffa0362d60>]
> > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > <4>RSP: 0018:ffff880871f6de18=C2=A0 EFLAGS: 00010202 > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 00= 00000000000000
> > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00= 007faa74006203
> > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 00= 00000000000004
> > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 00= 00000000000000
> > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ff= ff8808715b4580
> > > <4>FS:=C2=A0 00007faa85425700(0000) GS:ffff88002836000= 0(0000)
> > knlGS:0000000000000000
> > > <4>CS:=C2=A0 0010 DS: 0000 ES: 0000 CR0: 0000000080050= 033
> > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00= 000000001407e0
> > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00= 00000000000000
> > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00= 00000000000400
> > > <4>Process swift-object-se (pid: 4454, threadinfo ffff= 880871f6c000,
> > > task ffff880860f18ab0)
> > > <4>Stack:
> > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38= ffff880874749cc0
> > > <4><d> 0000000100000103 ffff8802381f8c00 ffff880= 871f6df38
> > ffff8808715b4580
> > > <4><d> 0000000000000082 ffff8802381f8d88 ffff880= 871f6dec8
> > ffffffffa035ab31
> > > <4>Call Trace:
> > > <4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
> > > <4> [<ffffffffa035ab31>] xfs_readdir+0xe1/0x130 = [xfs]
> > > <4> [<ffffffff811a4bb0>] ? filldir+0x0/0xe0
> > > <4> [<ffffffffa038fe29>] xfs_file_readdir+0x39/0= x50 [xfs]
> > > <4> [<ffffffff811a4e30>] vfs_readdir+0xc0/0xe0 > > > <4> [<ffffffff8119bd86>] ? final_putname+0x26/0x= 50
> > > <4> [<ffffffff811a4fb9>] sys_getdents+0x89/0xf0<= br> > > > <4> [<ffffffff8100b0f2>] system_call_fastpath+0x= 16/0x1b
> > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 = ff 55 b8 85 c0
> > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 = 00 00 00
> > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 0= 3 41 0f b6
> > > <1>RIP=C2=A0 [<ffffffffa0362d60>] xfs_dir2_sf_ge= tdents+0x2a0/0x3a0 [xfs]
> > > <4> RSP <ffff880871f6de18>
> > > <4>CR2: 0000000000000001
> > >
> > ...
> > >
> > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore = help for
> > > troubleshooting kind issue ?
> > >
> >
> > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 k= ernel? Can
> > you provide the exact kernel version and post the vmcore somewher= e?
> >
> > Brian
> >
> > > Thanks // Hugo
> > > =E2=80=8B
> > >
> > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen <sandeen@sandeen.net>:
> > >
> > > > On 6/18/15 9:29 AM, Kuo Hugo wrote:
> > > > >>- Have you tried an 'xfs_repair -n' of = the affected filesystem? Note
> > > > that -n will report problems only and prevent any modif= ication by
> > repair.
> > > > >
> > > > > *We might to to xfs_repair if we can address which= disk causes the
> > > > issue. *
> > > >
> > > > If you do, please save the output, and if it finds anyt= hing, please
> > > > provide the output in this thread.
> > > >
> > > > Thanks,
> > > > -Eric
> > > >
> >
> > > _______________________________________________
> > > xfs mailing list
> > > xfs@oss.sgi.com
> > > http://oss.sgi.com/mailman/listinfo/xfs > >
> >

--001a11c23d2a1512f1051a73e855-- From whittalh@yahoo-inc.com Thu Jul 9 12:33:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B369A7F37 for ; Thu, 9 Jul 2015 12:33:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 985158F8049 for ; Thu, 9 Jul 2015 10:33:58 -0700 (PDT) X-ASG-Debug-ID: 1436463235-04cb6c209d107670001-NocioJ Received: from mrout4.yahoo.com (mrout4.yahoo.com [216.145.54.109]) by cuda.sgi.com with ESMTP id kHXZd9xrHdw45glp (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 10:33:55 -0700 (PDT) X-Barracuda-Envelope-From: whittalh@yahoo-inc.com X-Barracuda-Apparent-Source-IP: 216.145.54.109 Received: from omp1007.mail.ne1.yahoo.com (omp1007.mail.ne1.yahoo.com [98.138.87.7]) by mrout4.yahoo.com (8.14.9/8.14.9/y.out) with ESMTP id t69HXFqi073774 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 9 Jul 2015 10:33:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yahoo-inc.com; s=cobra; t=1436463196; bh=MXbSapuDMDL231QF+RR7/MBcQEFS/RmhDlw1MzHlDuw=; h=Date:From:To:Subject; b=LQ7mYqROtCkWc+NWDPFyFRqsers8xvhz7fies4P+PRHk4XGyRaApsonK6ZjsQGQoD f59aRN/rnXDUugsFm6LqYpezt3YKGOdABFz3tw8Fjx/O5xqDIGSOsGAAi51oZ9gsRB byanD74S/XNiwumDNI224C/EsgkqJcXSqvIuRwQk= Received: (qmail 20868 invoked by uid 1000); 9 Jul 2015 17:33:15 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-inc.com; s=ginc1024; t=1436463195; bh=MXbSapuDMDL231QF+RR7/MBcQEFS/RmhDlw1MzHlDuw=; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type; b=BwQxB3New9PIiw0MoXzdQFe3jf3oyo4immLOWlcNEOXfFogqVYAVy2v4JduWtB81QZ531YzueEX5nnCpSEN0AayNXG39UIfERkXnEquEi4RxpdoyJKG2OkrShrUauZg+Ug5HDGAfwX5VO1xogrq15iot5/fG4H3g3bK3jsQYNYA= X-YMail-OSG: QsXMlYQVM1lvSF3sbA9_J0doCriRMVrDARfM4H8vdMU6f2KTaSDpS9NRDgSqtEE Wuyr6oUCIeajLAIGKBIR7N0wgdnX.WDgJz8vLLa09cSVOw2MI8pkHqfZ3cHXrFkGowV4.e5JPVmz kkz7qVTQuDd1rdZn1AdlqDLya2asUsWVZXwI5.vCohShnjON.zJOpnbyaxyWGdqyUUi9mXo8q_UX EIgusfknXCMZXcM3G8e3RhcNO_X6T3.N3hKuOLiA19yyso.YufSk- Received: by 98.138.105.248; Thu, 09 Jul 2015 17:33:15 +0000 Date: Thu, 9 Jul 2015 17:32:50 +0000 (UTC) From: Hogan Whittall To: "xfs@oss.sgi.com" Message-ID: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> Subject: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication MIME-Version: 1.0 X-ASG-Orig-Subj: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Content-Type: multipart/alternative; boundary="----=_Part_1804042_1960197275.1436463170531" X-Barracuda-Connect: mrout4.yahoo.com[216.145.54.109] X-Barracuda-Start-Time: 1436463235 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20596 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message ------=_Part_1804042_1960197275.1436463170531 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello, Recently we encountered a previously-reported issue regarding write amplifi= cation with MySQL replication and XFS when used with certain RAID controlle= rs (In our case, HP P420). =C2=A0That issue exactly matches our issue and w= as documented by someone else here -=C2=A0http://oss.sgi.com/archives/xfs/2= 013-03/msg00133.html=C2=A0- but I don't see any resolution. =C2=A0I will sa= y that the problem *does not* exist when mkfs.xfs 2.9.6 is used to format t= he filesystem on RHEL6 as that sets sunit=3D0 and swidth=3D0 instead of set= ting based on minimum_io_size and optimal_io_size. We have systems that are identical in how they are built and configured, we= can take a RHEL6 box that has the MySQL partition formatted with mkfs.xfs = v3.1.1 and reproduce the write amplification problem with MySQL replication= every single time. =C2=A0If we take the same box and format the MySQL part= ition with mkfs.xfs 2.9.6, then bring up MySQL with the exact same configur= ation there is no problem. =C2=A0I've included the working and broken setti= ngs below. =C2=A0If it's not the sunit/swidth settings then what will cause= 7-10MB/s worth of writes to the XFS partition to become over 200MB/s downs= tream? =C2=A0The actual data change on the disks is not 200MB/s, but becaus= e the write ops are truly being amplified and not just being misreported ou= r MySQL slaves with the bad XFS settings cannot keep up and the lag steadil= y increases with no hope of ever becoming current. I am happy to try some other settings/options with the RHEL6 mkfs.xfs to se= e if replication performance is able to match that of systems formatted wit= h mkfs.xfs 2.9.6, but the values set by 3.1.1 with the P420 RAID do not wor= k for MySQL replication. =C2=A0We have ruled out everything else as a possi= ble cause, the absolute only difference on these systems is what values are= set by mkfs.xfs. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=C2=A0Working RHEL6 XFS partition: meta-data=3D/dev/mapper/sys-home =C2=A0 isize=3D256 =C2=A0 =C2=A0agcount=3D= 4, agsize=3D71271680 blks=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sectsz= =3D512 =C2=A0 attr=3D2, projid32bit=3D0data =C2=A0 =C2=A0 =3D =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bsize=3D409= 6 =C2=A0 blocks=3D285086720, imaxpct=3D5=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 sunit=3D0 =C2=A0 =C2=A0 =C2=A0swidth=3D0 blksnaming =C2=A0 =3Dversio= n 2 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bsize=3D4096 =C2=A0 asc= ii-ci=3D0log =C2=A0 =C2=A0 =C2=A0=3Dinternal =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 bsize=3D4096 =C2=A0 blocks=3D32768, version=3D2=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sectsz=3D512 =C2=A0 sunit=3D0 blks, lazy= -count=3D0realtime =3Dnone =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 extsz=3D4096 =C2=A0 blocks=3D0, rtextents=3D0 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=C2=A0 Broken RHEL6 XFS partition: meta-data=3D/dev/mapper/sys-home =C2=A0 isize=3D256 =C2=A0 =C2=A0agcount=3D= 32, agsize=3D8908992 blks=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sectsz= =3D512 =C2=A0 attr=3D2, projid32bit=3D0data =C2=A0 =C2=A0 =3D =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bsize=3D409= 6 =C2=A0 blocks=3D285086720, imaxpct=3D5=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 sunit=3D64 =C2=A0 =C2=A0 swidth=3D128 blksnaming =C2=A0 =3Dversion 2= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bsize=3D4096 =C2=A0 ascii-= ci=3D0log =C2=A0 =C2=A0 =C2=A0=3Dinternal =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 bsize=3D4096 =C2=A0 blocks=3D139264, version=3D2=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sectsz=3D512 =C2=A0 sunit=3D64 blks, laz= y-count=3D1realtime =3Dnone =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 extsz=3D4096 =C2=A0 blocks=3D0, rtextents=3D0 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=C2=A0 Thanks! -Hogan ------=_Part_1804042_1960197275.1436463170531 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hello,

Recently we en= countered a previously-reported issue regarding write amplification with My= SQL replication and XFS when used with certain RAID controllers (In our cas= e, HP P420).  That issue exactly matches our issue and was documented = by someone else here - http://oss.sgi.c= om/archives/xfs/2013-03/msg00133.html - but I don't see any resolu= tion.  I will say that the problem *does not* exist when mkfs.xfs 2.9.= 6 is used to format the filesystem on RHEL6 as that sets sunit=3D0 and swid= th=3D0 instead of setting based on minimum_io_size and optimal_io_size.

We have systems that are= identical in how they are built and configured, we can take a RHEL6 box th= at has the MySQL partition formatted with mkfs.xfs v3.1.1 and reproduce the= write amplification problem with MySQL replication every single time. &nbs= p;If we take the same box and format the MySQL partition with mkfs.xfs 2.9.= 6, then bring up MySQL with the exact same configuration there is no proble= m.  I've included the working and broken settings below.  If it's= not the sunit/swidth settings then what will cause 7-10MB/s worth of write= s to the XFS partition to become over 200MB/s downstream?  The actual = data change on the disks is not 200MB/s, but because the write ops are trul= y being amplified and not just being misreported our MySQL slaves with the = bad XFS settings cannot keep up and the lag steadily increases with no hope= of ever becoming current.

I am happy to try some other settings/options with the RHEL6 mkfs.xfs= to see if replication performance is able to match that of systems formatt= ed with mkfs.xfs 2.9.6, but the values set by 3.1.1 with the P420 RAID do n= ot work for MySQL replication.  We have ruled out everything else as a= possible cause, the absolute only difference on these systems is what valu= es are set by mkfs.xfs.

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D 
Working RHEL6 XFS partition:

meta-data=3D/dev/mapper/sys-h= ome   isize=3D256    agcount=3D4, agsize=3D71271680 blks
 = ;        =3D             =           sectsz=3D512   attr=3D2, projid32bi= t=3D0
data     =3D             &nbs= p;         bsize=3D4096   blocks=3D285086720, imax= pct=3D5
         =3D         &nb= sp;             sunit=3D0      = ;swidth=3D0 blks
naming   =3Dversion 2          = ;    bsize=3D4096   ascii-ci=3D0
log      =3Din= ternal               bsize=3D4096  = blocks=3D32768, version=3D2
         =3D   &nb= sp;                   sectsz= =3D512   sunit=3D0 blks, lazy-count=3D0
realtime =3Dnone     &= nbsp;             extsz=3D4096   blocks= =3D0, rtextents=3D0

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D 
Broken RHEL6= XFS partition:

meta-data=3D/dev/mapper/sys-home   isize=3D256  =  agcount=3D32, agsize=3D8908992 blks
         = =3D                     &= nbsp; sectsz=3D512   attr=3D2, projid32bit=3D0
data     =3D &n= bsp;                     = bsize=3D4096   blocks=3D285086720, imaxpct=3D5
      &nbs= p;  =3D                  =     sunit=3D64     swidth=3D128 blks
naming   =3Dve= rsion 2              bsize=3D4096  = ascii-ci=3D0
log      =3Dinternal        =       bsize=3D4096   blocks=3D139264, version=3D2
 =        =3D             &= nbsp;         sectsz=3D512   sunit=3D64 blks, lazy= -count=3D1
realtime =3Dnone               =     extsz=3D4096   blocks=3D0, rtextents=3D0

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =

Thanks!

-Hogan
------=_Part_1804042_1960197275.1436463170531-- From bfoster@redhat.com Thu Jul 9 13:33:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0F83F7F37 for ; Thu, 9 Jul 2015 13:33:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A9C59AC008 for ; Thu, 9 Jul 2015 11:32:59 -0700 (PDT) X-ASG-Debug-ID: 1436466778-04bdf00788103de0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id rXgbaFB9yFfKcCVm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 11:32:58 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 1F1383F0A68; Thu, 9 Jul 2015 18:32:58 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t69IWvcq003647; Thu, 9 Jul 2015 14:32:57 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id C57EC123029; Thu, 9 Jul 2015 14:32:55 -0400 (EDT) Date: Thu, 9 Jul 2015 14:32:55 -0400 From: Brian Foster To: Kuo Hugo Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150709183255.GG63282@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436466778 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > Hi Brain, > > There you go. > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_64 > > $ md5sum vmlinux > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > > Yes, I can read it with this vmlinux image. Put all files > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore > Thanks, I can actually load that up now. Note that we'll probably need the modules and whatnot (xfs.ko) also to be able to look at any XFS bits. It might be easiest to just tar up and compress whatever directory structure has the debug-enabled vmlinux and all the kernel modules. Thanks. Brian > Hugo > ​ > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > > Hi Brian, > > > > > > *Operating System Version:* > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > > > > > *NODE 1* > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > > > > > > > *NODE 2* > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt > > > > > > > > > Any thoughts would be appreciate > > > > > > > I'm not able to fire up crash with these core files and the kernel debug > > info from the following centos kernel debuginfo package: > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > > > It complains about a version mismatch between the vmlinux and core file. > > I'm no crash expert... are you sure the cores above correspond to this > > kernel? Does crash load up for you on said box if you run something like > > the following? > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > > > Note that you might need to install the above kernel-debuginfo package > > to get the debug (vmlinux) file. If so, could you also upload that > > debuginfo rpm somewhere? > > > > Brian > > > > > Thanks // Hugo > > > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > > Hi Folks, > > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no any error > > shows > > > > up. > > > > > We currently tried to deploy CentOS 6.6 for testing. (The previous > > kernel > > > > > panic was came from Ubuntu). > > > > > The CentOS nodes encountered kernel panic with same daemon but the > > > > problem > > > > > may a bit differ. > > > > > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in Ubuntu. > > > > > - Here’s the log in CentOS. It’s broken on > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > > > > I'd venture to guess it's the same behavior here. The previous kernel > > > > had a callback for the parent inode number that was called via > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a static > > > > inline here instead. > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > > > 0000000000000001 > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > > <4>Oops: 0000 [#1] SMP > > > > > <4>last sysfs file: > > > > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/queue/rotational > > > > > <4>CPU 17 > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs iptable_filter > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac edac_core > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp pps_core > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 mbcache > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd ahci > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > > > scsi_wait_scan] > > > > > <4> > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > > > R518.v5P/X10DRi-T4+ > > > > > <4>RIP: 0010:[] [] > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000 > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00007faa74006203 > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: 0000000000000004 > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: 0000000000000000 > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: ffff8808715b4580 > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > > > knlGS:0000000000000000 > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: 00000000001407e0 > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 > > > > > <4>Process swift-object-se (pid: 4454, threadinfo ffff880871f6c000, > > > > > task ffff880860f18ab0) > > > > > <4>Stack: > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > > ffff880874749cc0 > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > > > ffff8808715b4580 > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > > > ffffffffa035ab31 > > > > > <4>Call Trace: > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > > <4> [] ? final_putname+0x26/0x50 > > > > > <4> [] sys_getdents+0x89/0xf0 > > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 85 c0 > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 00 00 > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > <4> RSP > > > > > <4>CR2: 0000000000000001 > > > > > > > > > ... > > > > > > > > > > I’ve got the vmcore dump from operator. Does vmcore help for > > > > > troubleshooting kind issue ? > > > > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 kernel? Can > > > > you provide the exact kernel version and post the vmcore somewhere? > > > > > > > > Brian > > > > > > > > > Thanks // Hugo > > > > > ​ > > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected filesystem? > > Note > > > > > > that -n will report problems only and prevent any modification by > > > > repair. > > > > > > > > > > > > > > *We might to to xfs_repair if we can address which disk causes > > the > > > > > > issue. * > > > > > > > > > > > > If you do, please save the output, and if it finds anything, please > > > > > > provide the output in this thread. > > > > > > > > > > > > Thanks, > > > > > > -Eric > > > > > > > > > > > > > > > _______________________________________________ > > > > > xfs mailing list > > > > > xfs@oss.sgi.com > > > > > http://oss.sgi.com/mailman/listinfo/xfs > > > > > > > > > > From bfoster@redhat.com Thu Jul 9 14:05:18 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9D5127F37 for ; Thu, 9 Jul 2015 14:05:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 87327304048 for ; Thu, 9 Jul 2015 12:05:15 -0700 (PDT) X-ASG-Debug-ID: 1436468714-04cb6c209f1090b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id AFECuQUdiOh4sT7d (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 12:05:14 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 0786531A0DB; Thu, 9 Jul 2015 19:05:14 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t69J5DSD002509; Thu, 9 Jul 2015 15:05:13 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 402C0123029; Thu, 9 Jul 2015 15:05:12 -0400 (EDT) Date: Thu, 9 Jul 2015 15:05:12 -0400 From: Brian Foster To: Hogan Whittall Cc: "xfs@oss.sgi.com" Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Message-ID: <20150709190511.GH63282@bfoster.bfoster> X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436468714 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 09, 2015 at 05:32:50PM +0000, Hogan Whittall wrote: > Hello, > Recently we encountered a previously-reported issue regarding write amplification with MySQL replication and XFS when used with certain RAID controllers (In our case, HP P420). That issue exactly matches our issue and was documented by someone else here -http://oss.sgi.com/archives/xfs/2013-03/msg00133.html- but I don't see any resolution. I will say that the problem *does not* exist when mkfs.xfs 2.9.6 is used to format the filesystem on RHEL6 as that sets sunit=0 and swidth=0 instead of setting based on minimum_io_size and optimal_io_size. I'm not very familiar with MySQL and thus not sure what your workload is, but either version of mkfs.xfs should support setting options such that the fs is formatted as with the defaults of another version... > We have systems that are identical in how they are built and configured, we can take a RHEL6 box that has the MySQL partition formatted with mkfs.xfs v3.1.1 and reproduce the write amplification problem with MySQL replication every single time. If we take the same box and format the MySQL partition with mkfs.xfs 2.9.6, then bring up MySQL with the exact same configuration there is no problem. I've included the working and broken settings below. If it's not the sunit/swidth settings then what will cause 7-10MB/s worth of writes to the XFS partition to become over 200MB/s downstream? The actual data change on the disks is not 200MB/s, but because the write ops are truly being amplified and not just being misreported our MySQL slaves with the bad XFS settings cannot keep up and the lag steadily increases with no hope of ever becoming current. It would be nice to somehow see what requests are being made at the application level. Perhaps via strace or something of that nature if you can demonstrate a relatively isolated operation at the app. level resulting in the same I/O requests to the kernel but different I/O out of the filesystem..? > I am happy to try some other settings/options with the RHEL6 mkfs.xfs to see if replication performance is able to match that of systems formatted with mkfs.xfs 2.9.6, but the values set by 3.1.1 with the P420 RAID do not work for MySQL replication. We have ruled out everything else as a possible cause, the absolute only difference on these systems is what values are set by mkfs.xfs. > ============================================================Working RHEL6 XFS partition: > meta-data=/dev/mapper/sys-home isize=256 agcount=4, agsize=71271680 blks = sectsz=512 attr=2, projid32bit=0data = bsize=4096 blocks=285086720, imaxpct=5 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0log =internal bsize=4096 blocks=32768, version=2 = sectsz=512 sunit=0 blks, lazy-count=0realtime =none extsz=4096 blocks=0, rtextents=0 > ============================================================ > Broken RHEL6 XFS partition: > meta-data=/dev/mapper/sys-home isize=256 agcount=32, agsize=8908992 blks = sectsz=512 attr=2, projid32bit=0data = bsize=4096 blocks=285086720, imaxpct=5 = sunit=64 swidth=128 blksnaming =version 2 bsize=4096 ascii-ci=0log =internal bsize=4096 blocks=139264, version=2 = sectsz=512 sunit=64 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0 > ============================================================ > The differences I see for the second mkfs: - agcount of 32 instead of 4 - sunit/swidth of 64/128 rather than 0/0 - log size of 139264 blocks rather than 32768 - lazy-count=1 rather than lazy-count=0 As mentioned above, I would take the "broken" mkfs.xfs and add options one at a time that format the fs as the previous version did and try to identify what leads to the behavior. E.g., maybe first use '-d su=0,sw=0' to reset the stripe unit, then try adding '-l size=<32768*blksize>' to set the log size, '-d agcount=N' to set the allocation group count, etc. Brian > Thanks! > -Hogan > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From whittalh@yahoo-inc.com Thu Jul 9 14:24:42 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A3D627F37 for ; Thu, 9 Jul 2015 14:24:42 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5D6B9304048 for ; Thu, 9 Jul 2015 12:24:42 -0700 (PDT) X-ASG-Debug-ID: 1436469878-04bdf00788104d40001-NocioJ Received: from mrout4.yahoo.com (mrout4.yahoo.com [216.145.54.109]) by cuda.sgi.com with ESMTP id 4Bx2dX2HYLjVjagg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 12:24:39 -0700 (PDT) X-Barracuda-Envelope-From: whittalh@yahoo-inc.com X-Barracuda-Apparent-Source-IP: 216.145.54.109 Received: from omp1069.mail.ne1.yahoo.com (omp1069.mail.ne1.yahoo.com [98.138.226.168]) by mrout4.yahoo.com (8.14.9/8.14.9/y.out) with ESMTP id t69JNt1B040198 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 9 Jul 2015 12:23:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yahoo-inc.com; s=cobra; t=1436469835; bh=0HApRSJXXsitDyUrAVv90b4WMPEK0pfak9DEIJxFOKw=; h=Date:From:To:Cc:In-Reply-To:References:Subject; b=W9Lu9r11PO0fInag//knhVsJq+14PP7PIiVRcUFv458qMGQ2jGyNYj/c09REuv7QS fvwXh44jjCChRUZIk3SzrXHe/7PyC/CApTa8Hmfw/xQ5e8SwXqbo1usrteQUfdz5a6 lSqLHXyd4LAlWmC8V3GEvLo76oBYVAV3kgJTkG1o= Received: (qmail 63400 invoked by uid 1000); 9 Jul 2015 19:23:54 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-inc.com; s=ginc1024; t=1436469834; bh=OokhMnvXlLYenyeqvJM/9lPKhfXBUY93O9qbih/paos=; h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding; b=J6TcCRpzsZXYZm7Yxz+0QD0IN+Zzbqw9ll6BkcOSA9Y92kc76qRWTZPBGUIGRmkCwB/x+oMQ2jyK3npF+8tIfqGTBXVOQ/8HBzzuVfs4I6or0lxqFOcMEFKIpOF7behl1tNs8zPj1+9oGjkaGaoAb8qbDWbHg9UOxua+TGLBWlc= X-YMail-OSG: I6g7Pb4VM1lrZ.3L.7KdMu5r1weqAQUugDhAb9BDDue8793uJNOFiVPp.OKsmCM 1587sQIiaM6RnnGooG1tnuVTHC3mMPoWrQhnOAIquvEK8I_H0B8yaxg6MLCBZy7xVkzJfSliKNCS oekSg.rXB44X.7gjDO4cLwBdMKDEsUPbBlKOVdNn7565VEI5Pe7O9OM_MRx1PWZ80HTPAfZMYYPT AiSnQF2k6ZNfUKwsc9Qfsmtsa0Tbe1Lw6j3w0Uwd9wkG_mUReWJM- Received: by 98.138.105.254; Thu, 09 Jul 2015 19:23:54 +0000 Date: Thu, 9 Jul 2015 19:23:54 +0000 (UTC) From: Hogan Whittall To: Brian Foster Cc: "xfs@oss.sgi.com" Message-ID: <50338734.2095398.1436469834143.JavaMail.yahoo@mail.yahoo.com> In-Reply-To: <20150709190511.GH63282@bfoster.bfoster> References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> <20150709190511.GH63282@bfoster.bfoster> Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mrout4.yahoo.com[216.145.54.109] X-Barracuda-Start-Time: 1436469879 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20599 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Apologies for top-posting, our mail UI makes inline replies virtually impossible. I will see if I can start with the good XFS settings and change them one at a time to see exactly which setting triggers the issue. The other issue, which I forgot to mention, is that mkfs.xfs 3.1.1 (shipped with RHEL6) will not let me set -d sunit=0,swidth=0. No errors, it simply ignores those values and uses the values calculated based on minimum_io_size and optimal_io_size, so the only way that I have any chance of doing this test is by using the same version of mkfs.xfs that doesn't cause a problem in the first place. It seems that mkfs.xfs 3.1.1 and 3.2.3 (pulled from git) function the same way, ignore 0 and only allow values that fall within a range that it deems acceptable. Also, specifying those values at mount time, either in fstab or via the mount command, changes nothing. No errors, just simply ignores them and uses the values set when mkfs.xfs ran. Thanks for the suggestions, I'll see what I can make happen. Honestly, I'd be perfectly happy if we could simply replicate the same values with the RHEL6 version of mkfs.xfs since those values work just fine for our various workloads. 3.x resulting in different parameters and being unable to set the same parameters as 2.x just smells like a bug. Since "0" is a perfectly valid setting when minimum_io_size is 0 and/or optimal_io_size is 512 there really should be a way to manually set 0 as well. -Hogan ________________________________ From: Brian Foster To: Hogan Whittall Cc: "xfs@oss.sgi.com" Sent: Thursday, July 9, 2015 2:05 PM Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication On Thu, Jul 09, 2015 at 05:32:50PM +0000, Hogan Whittall wrote: > Hello, > Recently we encountered a previously-reported issue regarding write amplification with MySQL replication and XFS when used with certain RAID controllers (In our case, HP P420). That issue exactly matches our issue and was documented by someone else here - http://oss.sgi.com/archives/xfs/2013-03/msg00133.html - but I don't see any resolution. I will say that the problem *does not* exist when mkfs.xfs 2.9.6 is used to format the filesystem on RHEL6 as that sets sunit=0 and swidth=0 instead of setting based on minimum_io_size and optimal_io_size. I'm not very familiar with MySQL and thus not sure what your workload is, but either version of mkfs.xfs should support setting options such that the fs is formatted as with the defaults of another version... > We have systems that are identical in how they are built and configured, we can take a RHEL6 box that has the MySQL partition formatted with mkfs.xfs v3.1.1 and reproduce the write amplification problem with MySQL replication every single time. If we take the same box and format the MySQL partition with mkfs.xfs 2.9.6, then bring up MySQL with the exact same configuration there is no problem. I've included the working and broken settings below. If it's not the sunit/swidth settings then what will cause 7-10MB/s worth of writes to the XFS partition to become over 200MB/s downstream? The actual data change on the disks is not 200MB/s, but because the write ops are truly being amplified and not just being misreported our MySQL slaves with the bad XFS settings cannot keep up and the lag steadily increases with no hope of ever becoming current. It would be nice to somehow see what requests are being made at the application level. Perhaps via strace or something of that nature if you can demonstrate a relatively isolated operation at the app. level resulting in the same I/O requests to the kernel but different I/O out of the filesystem..? > I am happy to try some other settings/options with the RHEL6 mkfs.xfs to see if replication performance is able to match that of systems formatted with mkfs.xfs 2.9.6, but the values set by 3.1.1 with the P420 RAID do not work for MySQL replication. We have ruled out everything else as a possible cause, the absolute only difference on these systems is what values are set by mkfs.xfs. > ============================================================ Working RHEL6 XFS partition: > meta-data=/dev/mapper/sys-home isize=256 agcount=4, agsize=71271680 blks = sectsz=512 attr=2, projid32bit=0data = bsize=4096 blocks=285086720, imaxpct=5 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0log =internal bsize=4096 blocks=32768, version=2 = sectsz=512 sunit=0 blks, lazy-count=0realtime =none extsz=4096 blocks=0, rtextents=0 > ============================================================ > Broken RHEL6 XFS partition: > meta-data=/dev/mapper/sys-home isize=256 agcount=32, agsize=8908992 blks = sectsz=512 attr=2, projid32bit=0data = bsize=4096 blocks=285086720, imaxpct=5 = sunit=64 swidth=128 blksnaming =version 2 bsize=4096 ascii-ci=0log =internal bsize=4096 blocks=139264, version=2 = sectsz=512 sunit=64 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0 > ============================================================ > The differences I see for the second mkfs: - agcount of 32 instead of 4 - sunit/swidth of 64/128 rather than 0/0 - log size of 139264 blocks rather than 32768 - lazy-count=1 rather than lazy-count=0 As mentioned above, I would take the "broken" mkfs.xfs and add options one at a time that format the fs as the previous version did and try to identify what leads to the behavior. E.g., maybe first use '-d su=0,sw=0' to reset the stripe unit, then try adding '-l size=<32768*blksize>' to set the log size, '-d agcount=N' to set the allocation group count, etc. Brian > Thanks! > -Hogan > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Thu Jul 9 17:41:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 705157F37 for ; Thu, 9 Jul 2015 17:41:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5FC7E304039 for ; Thu, 9 Jul 2015 15:41:26 -0700 (PDT) X-ASG-Debug-ID: 1436481681-04cbb00fc901510001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id zG3iKyQYYqGfp4jJ for ; Thu, 09 Jul 2015 15:41:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2A4CgBL955VPLC2LXlYA4MSgTSGTqITAQEBAQEBBpomAgIBAQKBY00BAQEBAQEHAQEBAUE/hCQBAQQ6HCMQCAMOCgklDwUlAwcaE4gtzzsBAQEBAQUBAQEBAQEcGIYFhS6EdhAHEYMGgRQFhwmNJIt/gT6HJ4UtilaCLx+BZSwxgksBAQE Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail05.adl6.internode.on.net with ESMTP; 10 Jul 2015 08:11:19 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDKVK-00067q-FN; Fri, 10 Jul 2015 08:41:18 +1000 Date: Fri, 10 Jul 2015 08:41:18 +1000 From: Dave Chinner To: Ming Lin Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: xfs_io bmap confused Message-ID: <20150709224118.GB7943@dastard> X-ASG-Orig-Subj: Re: xfs_io bmap confused References: <1436338913.13729.11.camel@hasee> <20150708085341.GA23332@lst.de> <1436363862.15921.0.camel@hasee> <1436424844.22691.2.camel@hasee> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436424844.22691.2.camel@hasee> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436481681 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20605 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 08, 2015 at 11:54:04PM -0700, Ming Lin wrote: > On Wed, 2015-07-08 at 16:40 -0700, Ming Lin wrote: > > On Wed, 2015-07-08 at 06:57 -0700, Ming Lin wrote: > > > On Wed, 2015-07-08 at 10:53 +0200, Christoph Hellwig wrote: > > > > On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: > > > > > Hi list, > > > > > > > > > > I am testing some direct-io patches. > > > > > xfs_tests/xfs/080 failed. > > > > > > > > > > It's strange. > > > > > There is no hole in "rwtest.file", > > > > > but when read it at some offset it returns zero because of hole. > > > > > > > > > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file > > > > > /mnt/test/rwtest.file: > > > > > 0: [0..125671]: 160..125831 > > > > > > > > Sounds like you see an unwritten extent. What does xfs_bmap -pv show on > > > > the file? > > > > > > root@block:~# xfs_bmap -pv /mnt/test/rwtest.file > > > /mnt/test/rwtest.file: > > > EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS > > > 0: [0..743]: 160..903 0 (160..903) 744 00000 > > > 1: [744..783]: 904..943 0 (904..943) 40 10000 > > > 2: [784..951]: 944..1111 0 (944..1111) 168 00000 > > > 3: [952..1023]: 1112..1183 0 (1112..1183) 72 10000 > > > 4: [1024..1287]: 1184..1447 0 (1184..1447) 264 00000 > > > 5: [1288..1383]: 1448..1543 0 (1448..1543) 96 10000 > > > > file offset 659456 is in EXT 5. > > I guess FLAGS 1 means it's an unwritten extent, right? > > > > xfs_tests/xfs/080 basically does: > > 1. direct io write > > 2. then buffered read to check the previous dio write > > > > Here is an example of error logs. > > > > doio ( 3626) 16:13:23 > > --------------------- > > *** DATA COMPARISON ERROR *** > > check_file(/mnt/test/rwtest.file, 239616, 81408, H:3626:block:doio*, > > 18, 0) failed > > > > Comparison fd is 5, with open flags 0 > > Corrupt regions follow - unprintable chars are represented as '.' > > ----------------------------------------------------------------- > > corrupt bytes starting at file offset 241664 > > 1st 32 expected bytes: oio*H:3626:block:doio*H:3626:blo > > 1st 32 actual bytes: ................................ > > > > Request number 981 > > fd 4 is file /mnt/test/rwtest.file - open flags are 040001 > > O_WRONLY,O_DIRECT, > > write done at file offset 239616 - pattern is H (0110) > > number of requests is 1, strides per request is 1 > > i/o byte count = 81408 > > memory alignment is aligned > > DIRECT I/O: offset % 512 = 0 length % 81408 = 0 > > mem alignment 0x200 xfer size: small: 512 large: 2147483136 > > > > syscall: writev(4, (iov on stack), 1) > > > > > > The "expected bytes" was actually written to the disk successfully, > > but for some bug the xfs extent flag was not set correctly. > > The flag should be "XFS_EXT_NORM", but now it's "XFS_EXT_UNWRITTEN". > > > > Could you share the code path the extent flag was updated? > > Is it also updated through direct io? > > For XFS direct IO, are below the only 2 paths to convert unwritten > extent to written extent? > > [ 72.279043] Call Trace: > [ 72.279719] [] dump_stack+0x4f/0x7b > [ 72.280898] [] xfs_bmapi_convert_unwritten+0x73/0x176 > [ 72.282393] [] xfs_bmapi_write+0x2a0/0x7ee > [ 72.283705] [] xfs_iomap_write_direct+0x23e/0x2f0 > [ 72.285132] [] __xfs_get_blocks+0x14c/0xf6c > [ 72.286456] [] ? get_user_pages_fast+0xee/0x14c > [ 72.287847] [] xfs_get_blocks_direct+0x14/0x16 > [ 72.289246] [] get_blocks+0x86/0x182 > [ 72.297467] [] ? get_user_pages_fast+0xee/0x14c > [ 72.298845] [] __blockdev_direct_IO+0x372/0x666 > [ 72.300266] [] ? xfs_get_blocks+0x13/0x13 > [ 72.301555] [] ? __mnt_drop_write_file+0x12/0x14 > [ 72.302936] [] ? file_update_time+0xb5/0xcb > [ 72.304279] [] xfs_vm_direct_IO+0x89/0x90 > [ 72.305555] [] ? xfs_setfilesize_trans_alloc+0xac/0xac > [ 72.307064] [] xfs_file_dio_aio_write+0x2e0/0x449 > [ 72.308509] [] ? __clear_user+0x36/0x5b > [ 72.309755] [] xfs_file_write_iter+0x75/0x105 > [ 72.311107] [] __vfs_write+0x97/0xc0 > [ 72.312347] [] vfs_write+0xb5/0x16f > [ 72.313526] [] SyS_write+0x4a/0x94 > [ 72.314683] [] system_call_fastpath+0x12/0x6f There should not be unwritten extent conversion happening through the allocation path here. Indeed, xfs_iomap_write_direct() only uses the XFS_BMAPI_PREALLOC flag, which means xfs_bmapi_convert_unwritten() returns without doing anything to the newly allocated extent... > [ 72.328096] Call Trace: > [ 72.328786] [] dump_stack+0x4f/0x7b > [ 72.330002] [] xfs_bmapi_convert_unwritten+0x73/0x176 > [ 72.331565] [] ? xfs_bmap_search_extents+0x60/0xd6 > [ 72.333059] [] ? kmem_zone_alloc+0x6e/0xba > [ 72.334412] [] xfs_bmapi_write+0x2a0/0x7ee > [ 72.335777] [] xfs_iomap_write_unwritten+0x205/0x413 > [ 72.337300] [] xfs_end_io+0x50/0x75 > [ 72.338495] [] xfs_end_io_direct_write+0x176/0x26c > [ 72.339952] [] ? delayacct_end+0x55/0x5e > [ 72.341238] [] dio_complete+0x7c/0x134 > [ 72.342488] [] __blockdev_direct_IO+0x633/0x666 > [ 72.343908] [] ? xfs_get_blocks+0x13/0x13 > [ 72.345263] [] xfs_vm_direct_IO+0x89/0x90 > [ 72.346598] [] ? xfs_setfilesize_trans_alloc+0xac/0xac > [ 72.348185] [] xfs_file_dio_aio_write+0x2e0/0x449 > [ 72.349652] [] ? __clear_user+0x36/0x5b > [ 72.350950] [] xfs_file_write_iter+0x75/0x105 > [ 72.352369] [] __vfs_write+0x97/0xc0 > [ 72.353607] [] vfs_write+0xb5/0x16f > [ 72.354832] [] SyS_write+0x4a/0x94 > [ 72.356060] [] system_call_fastpath+0x12/0x6f This is the only unwritten conversion path that should occur through direct IO - the IO completion path.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 9 17:47:59 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4E99B7F37 for ; Thu, 9 Jul 2015 17:47:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 31BBD304032 for ; Thu, 9 Jul 2015 15:47:59 -0700 (PDT) X-ASG-Debug-ID: 1436482075-04cbb00fcb016f0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id aiVrSRoDy9lQbF0q for ; Thu, 09 Jul 2015 15:47:55 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DVCQC0+Z5VPLC2LXlbgxKBNIZOohMBAQEBAQEGmiYEAgKBZE0BAQEBAQEHAQEBAUE/hCMBAQEDATocIwULCAMOCgklDwUlAwcaE4gmB88zAQEBAQYCAR8YhgWFLoQjEQFRB4MXgRQFlC2Lf5hogjIcgWUsMYENgT4BAQE Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail05.adl6.internode.on.net with ESMTP; 10 Jul 2015 08:17:54 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDKbi-00068V-6Y; Fri, 10 Jul 2015 08:47:54 +1000 Date: Fri, 10 Jul 2015 08:47:54 +1000 From: Dave Chinner To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: The (desired) state OS X support for xfsprogs Message-ID: <20150709224754.GC7943@dastard> X-ASG-Orig-Subj: Re: The (desired) state OS X support for xfsprogs References: <1005907288.25490237.1436440850135.JavaMail.zimbra@redhat.com> <1934296067.25506110.1436444322496.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1934296067.25506110.1436444322496.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436482075 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20605 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 09, 2015 at 08:18:42AM -0400, Jan Tulak wrote: > Hi all > > As I started the theme a bit it in another thread, I post it here in a > standalone email, to bring it to a wider audience. > > What are the plans regarding xfsprogs on OS X? Officially, > by documentation, it should be buildable, though only some binaries > (like mkfs and repair) are usable. But when I did a small reality check > on OS X Yosemite (10.10) and tried to build it by the doc/INSTALL, > I got tons of this. > > > libxfs_priv.h:371:0: error: syntax error in macro parameter list > #define xfs_cmn_err(tag,level,mp,fmt,args...) cmn_err(level,fmt, ## args) > ^ > libxfs_priv.h:372:0: error: syntax error in macro parameter list > #define xfs_warn(mp,fmt,args...) cmn_err(CE_WARN,fmt, ## args) > ^ > libxfs_priv.h:373:0: error: syntax error in macro parameter list > #define xfs_alert(mp,fmt,args...) cmn_err(CE_ALERT,fmt, ## args) > > > There are more macros with the same error. (Of course, the same code compiles > on Linux with no issue.) As a bonus, to even get to compiling the code, > I had to throw away the Xcode clang and install a gcc myself (from macports), > because of some arguments passed to the compiler that aren't supported in the > ones shipped by Apple. (Didn't remember them, sorry.) > > Formally we claim to support OS X, but apparently it doesn't work as we > declare. So the question is, should we fix it and continue in the support? > Or should we drop it? Alternative platform support will work if someone with an interest in maintaining it sends patches to make it work ;) I'm happy to take such patches - that's how we got the multiple platform support in the first place.... It sounds like a compiler support check is needed in the autoconf code (i.e. check for ## macro vararg support, etc) so that it fails fast on apple's compiler. > P.S.: For the question "who would do it" - most likely me. I have > a Mac and being able to build xfsprogs locally when working on it > would be nice. But I'm really not sure if there is any other boon > except my own leisure. :-) If you want to make it work, then by all means make it work. I'm not going to stop you ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 9 18:02:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 98AEF7F37 for ; Thu, 9 Jul 2015 18:02:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1759BAC007 for ; Thu, 9 Jul 2015 16:02:52 -0700 (PDT) X-ASG-Debug-ID: 1436482969-04cbb00fc801ad0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id JvhJSt9ZjGTDg3Qv for ; Thu, 09 Jul 2015 16:02:50 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2A5EABB/Z5VPLC2LXlbgxJUYKhVDAEBAQEBAQaUNYVxBAICgWRNAQEBAQEBBwEBAQFBP0EFg10BAQEDATIBIyMFCwgDDgoJJQ8FJQMHGhOIJgcOzyYBAQEBBgEBAQEeGIYFhS6Ca4IbB4MXgRQFlC2EZ4cYgT6TS4NfgQmBKRyBZSwxAYJKAQEB Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail05.adl6.internode.on.net with ESMTP; 10 Jul 2015 08:32:22 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDKpi-0006AV-H9; Fri, 10 Jul 2015 09:02:22 +1000 Date: Fri, 10 Jul 2015 09:02:22 +1000 From: Dave Chinner To: Hogan Whittall Cc: "xfs@oss.sgi.com" Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Message-ID: <20150709230222.GD7943@dastard> X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436482969 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20605 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 09, 2015 at 05:32:50PM +0000, Hogan Whittall wrote: > Hello, > > Recently we encountered a previously-reported issue > regarding write amplification with MySQL replication and XFS when > used with certain RAID controllers (In our case, HP P420). That > issue exactly matches our issue and was documented by someone else > here -http://oss.sgi.com/archives/xfs/2013-03/msg00133.html- > but I don't see any resolution. I will say that the problem > *does not* exist when mkfs.xfs 2.9.6 is used to format the > filesystem on RHEL6 as that sets sunit=0 and swidth=0 instead of > setting based on minimum_io_size and optimal_io_size. The issue is the log stripe unit padding log buffers on log writes. Your workload like has lots of fsync() calls, which means log writes go from being padded to the next sector boundary to being padded to the next log stripe unit boundary. > We have systems that are identical in how they are built and > configured, we can take a RHEL6 box that has the MySQL partition > formatted with mkfs.xfs v3.1.1 and reproduce the write > amplification problem with MySQL replication every single time. Because the more recent kernel is probably getting sunit/swidth direct from the hardware via the kernel. > If we take the same box and format the MySQL partition with > mkfs.xfs 2.9.6, then bring up MySQL with the exact same > configuration there is no problem. Because that version of mkfs doesn't know about the kernel optimum IO size parameters in sysfs that are set based on hardware mode page support. Hence older mkfs is not able to set stripe unit defaults for hardware RAID automatically.... Your other option is to use a small log, so that the log writes end up being permanently pinned in the RAID BBWC, and so the bandwith they consume doesn't matter because it never hits the platters... FWIW, this problem has only been reported for HP RAID hardware, so I suspect that there is something the HP RAID firmware that doesn't handle streaming FUA writes (the log writes) mixed with other random IO particularly well. Cheers, Dave. -- Dave Chinner david@fromorbit.com From mlin@kernel.org Thu Jul 9 18:28:41 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DD7167F37 for ; Thu, 9 Jul 2015 18:28:41 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id BDA518F8035 for ; Thu, 9 Jul 2015 16:28:38 -0700 (PDT) X-ASG-Debug-ID: 1436484513-04cbb00fcb01f40001-NocioJ Received: from mail.kernel.org ([198.145.29.136]) by cuda.sgi.com with ESMTP id aDbyD8mcKCTr74cn for ; Thu, 09 Jul 2015 16:28:33 -0700 (PDT) X-Barracuda-Envelope-From: mlin@kernel.org X-Barracuda-Apparent-Source-IP: 198.145.29.136 Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 37055207B2 for ; Thu, 9 Jul 2015 23:28:32 +0000 (UTC) Received: from mail-ob0-f172.google.com (mail-ob0-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F3B6F20647 for ; Thu, 9 Jul 2015 23:28:30 +0000 (UTC) Received: by obbkm3 with SMTP id km3so181214764obb.1 for ; Thu, 09 Jul 2015 16:28:30 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.182.20.141 with SMTP id n13mr17452732obe.26.1436484510067; Thu, 09 Jul 2015 16:28:30 -0700 (PDT) Received: by 10.202.200.76 with HTTP; Thu, 9 Jul 2015 16:28:30 -0700 (PDT) In-Reply-To: <20150709224118.GB7943@dastard> References: <1436338913.13729.11.camel@hasee> <20150708085341.GA23332@lst.de> <1436363862.15921.0.camel@hasee> <1436424844.22691.2.camel@hasee> <20150709224118.GB7943@dastard> Date: Thu, 9 Jul 2015 16:28:30 -0700 Message-ID: Subject: Re: xfs_io bmap confused From: Ming Lin X-ASG-Orig-Subj: Re: xfs_io bmap confused To: Dave Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: UNKNOWN[198.145.29.136] X-Barracuda-Start-Time: 1436484513 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20606 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Thu, Jul 9, 2015 at 3:41 PM, Dave Chinner wrote: > On Wed, Jul 08, 2015 at 11:54:04PM -0700, Ming Lin wrote: >> On Wed, 2015-07-08 at 16:40 -0700, Ming Lin wrote: >> > On Wed, 2015-07-08 at 06:57 -0700, Ming Lin wrote: >> > > On Wed, 2015-07-08 at 10:53 +0200, Christoph Hellwig wrote: >> > > > On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote: >> > > > > Hi list, >> > > > > >> > > > > I am testing some direct-io patches. >> > > > > xfs_tests/xfs/080 failed. >> > > > > >> > > > > It's strange. >> > > > > There is no hole in "rwtest.file", >> > > > > but when read it at some offset it returns zero because of hole. >> > > > > >> > > > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file >> > > > > /mnt/test/rwtest.file: >> > > > > 0: [0..125671]: 160..125831 >> > > > >> > > > Sounds like you see an unwritten extent. What does xfs_bmap -pv show on >> > > > the file? >> > > >> > > root@block:~# xfs_bmap -pv /mnt/test/rwtest.file >> > > /mnt/test/rwtest.file: >> > > EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS >> > > 0: [0..743]: 160..903 0 (160..903) 744 00000 >> > > 1: [744..783]: 904..943 0 (904..943) 40 10000 >> > > 2: [784..951]: 944..1111 0 (944..1111) 168 00000 >> > > 3: [952..1023]: 1112..1183 0 (1112..1183) 72 10000 >> > > 4: [1024..1287]: 1184..1447 0 (1184..1447) 264 00000 >> > > 5: [1288..1383]: 1448..1543 0 (1448..1543) 96 10000 >> > >> > file offset 659456 is in EXT 5. >> > I guess FLAGS 1 means it's an unwritten extent, right? >> > >> > xfs_tests/xfs/080 basically does: >> > 1. direct io write >> > 2. then buffered read to check the previous dio write >> > >> > Here is an example of error logs. >> > >> > doio ( 3626) 16:13:23 >> > --------------------- >> > *** DATA COMPARISON ERROR *** >> > check_file(/mnt/test/rwtest.file, 239616, 81408, H:3626:block:doio*, >> > 18, 0) failed >> > >> > Comparison fd is 5, with open flags 0 >> > Corrupt regions follow - unprintable chars are represented as '.' >> > ----------------------------------------------------------------- >> > corrupt bytes starting at file offset 241664 >> > 1st 32 expected bytes: oio*H:3626:block:doio*H:3626:blo >> > 1st 32 actual bytes: ................................ >> > >> > Request number 981 >> > fd 4 is file /mnt/test/rwtest.file - open flags are 040001 >> > O_WRONLY,O_DIRECT, >> > write done at file offset 239616 - pattern is H (0110) >> > number of requests is 1, strides per request is 1 >> > i/o byte count = 81408 >> > memory alignment is aligned >> > DIRECT I/O: offset % 512 = 0 length % 81408 = 0 >> > mem alignment 0x200 xfer size: small: 512 large: 2147483136 >> > >> > syscall: writev(4, (iov on stack), 1) >> > >> > >> > The "expected bytes" was actually written to the disk successfully, >> > but for some bug the xfs extent flag was not set correctly. >> > The flag should be "XFS_EXT_NORM", but now it's "XFS_EXT_UNWRITTEN". >> > >> > Could you share the code path the extent flag was updated? >> > Is it also updated through direct io? >> >> For XFS direct IO, are below the only 2 paths to convert unwritten >> extent to written extent? >> >> [ 72.279043] Call Trace: >> [ 72.279719] [] dump_stack+0x4f/0x7b >> [ 72.280898] [] xfs_bmapi_convert_unwritten+0x73/0x176 >> [ 72.282393] [] xfs_bmapi_write+0x2a0/0x7ee >> [ 72.283705] [] xfs_iomap_write_direct+0x23e/0x2f0 >> [ 72.285132] [] __xfs_get_blocks+0x14c/0xf6c >> [ 72.286456] [] ? get_user_pages_fast+0xee/0x14c >> [ 72.287847] [] xfs_get_blocks_direct+0x14/0x16 >> [ 72.289246] [] get_blocks+0x86/0x182 >> [ 72.297467] [] ? get_user_pages_fast+0xee/0x14c >> [ 72.298845] [] __blockdev_direct_IO+0x372/0x666 >> [ 72.300266] [] ? xfs_get_blocks+0x13/0x13 >> [ 72.301555] [] ? __mnt_drop_write_file+0x12/0x14 >> [ 72.302936] [] ? file_update_time+0xb5/0xcb >> [ 72.304279] [] xfs_vm_direct_IO+0x89/0x90 >> [ 72.305555] [] ? xfs_setfilesize_trans_alloc+0xac/0xac >> [ 72.307064] [] xfs_file_dio_aio_write+0x2e0/0x449 >> [ 72.308509] [] ? __clear_user+0x36/0x5b >> [ 72.309755] [] xfs_file_write_iter+0x75/0x105 >> [ 72.311107] [] __vfs_write+0x97/0xc0 >> [ 72.312347] [] vfs_write+0xb5/0x16f >> [ 72.313526] [] SyS_write+0x4a/0x94 >> [ 72.314683] [] system_call_fastpath+0x12/0x6f > > There should not be unwritten extent conversion happening through > the allocation path here. Indeed, xfs_iomap_write_direct() only uses > the XFS_BMAPI_PREALLOC flag, which means > xfs_bmapi_convert_unwritten() returns without doing anything to the > newly allocated extent... > >> [ 72.328096] Call Trace: >> [ 72.328786] [] dump_stack+0x4f/0x7b >> [ 72.330002] [] xfs_bmapi_convert_unwritten+0x73/0x176 >> [ 72.331565] [] ? xfs_bmap_search_extents+0x60/0xd6 >> [ 72.333059] [] ? kmem_zone_alloc+0x6e/0xba >> [ 72.334412] [] xfs_bmapi_write+0x2a0/0x7ee >> [ 72.335777] [] xfs_iomap_write_unwritten+0x205/0x413 >> [ 72.337300] [] xfs_end_io+0x50/0x75 >> [ 72.338495] [] xfs_end_io_direct_write+0x176/0x26c >> [ 72.339952] [] ? delayacct_end+0x55/0x5e >> [ 72.341238] [] dio_complete+0x7c/0x134 >> [ 72.342488] [] __blockdev_direct_IO+0x633/0x666 >> [ 72.343908] [] ? xfs_get_blocks+0x13/0x13 >> [ 72.345263] [] xfs_vm_direct_IO+0x89/0x90 >> [ 72.346598] [] ? xfs_setfilesize_trans_alloc+0xac/0xac >> [ 72.348185] [] xfs_file_dio_aio_write+0x2e0/0x449 >> [ 72.349652] [] ? __clear_user+0x36/0x5b >> [ 72.350950] [] xfs_file_write_iter+0x75/0x105 >> [ 72.352369] [] __vfs_write+0x97/0xc0 >> [ 72.353607] [] vfs_write+0xb5/0x16f >> [ 72.354832] [] SyS_write+0x4a/0x94 >> [ 72.356060] [] system_call_fastpath+0x12/0x6f > > This is the only unwritten conversion path that should occur through > direct IO - the IO completion path.... There is a bug in the direct io rewrite patches. I have fixed it here: https://git.kernel.org/cgit/linux/kernel/git/mlin/linux.git/commit/?h=block-dio-rewrite&id=ceeccaa16 Thanks. From david@fromorbit.com Thu Jul 9 19:38:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3A9847F37 for ; Thu, 9 Jul 2015 19:38:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 164868F8035 for ; Thu, 9 Jul 2015 17:38:30 -0700 (PDT) X-ASG-Debug-ID: 1436488705-04cb6c209d10eba0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id t7mxt7rW6aqoJ9sU for ; Thu, 09 Jul 2015 17:38:25 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CCDACLE59VPLC2LXlbgxKBNIZOohMBAQEBAQEGmiYCAgEBAoFUTQEBAQEBAQcBAQEBQAE/hCMBAQEEJxMcIxAIAw4HAwklDwUlAwcaE4gtzyUBAQEBBgIBHxiGBYUuhQYHgxeBFAWULYt/gT6PHogMgQmDKiwxgksBAQE Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail05.adl6.internode.on.net with ESMTP; 10 Jul 2015 10:07:45 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDMK0-0006IF-Sf; Fri, 10 Jul 2015 10:37:44 +1000 Date: Fri, 10 Jul 2015 10:37:44 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH 13/20] xfs: rmap btree requires more reserved free space Message-ID: <20150710003744.GE7943@dastard> X-ASG-Orig-Subj: Re: [PATCH 13/20] xfs: rmap btree requires more reserved free space References: <1433311497-10245-1-git-send-email-david@fromorbit.com> <1433311497-10245-14-git-send-email-david@fromorbit.com> <20150625164103.GC36162@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150625164103.GC36162@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436488705 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20607 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words On Thu, Jun 25, 2015 at 12:41:04PM -0400, Brian Foster wrote: > On Wed, Jun 03, 2015 at 04:04:50PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > The rmap btree is allocated from the AGFL, which means we have to > > ensure ENOSPC is reported to userspace before we run out of free > > space in each AG. The last allocation in an AG can cause a full > > height rmap btree split, and that means we have to reserve at least > > this many blocks *in each AG* to be placed on the AGFL at ENOSPC. > > Update the various space calculation functiosn to handle this. > > > > Also, because the macros are now executing conditional code and are called quite > > frequently, convert them to functions that initialise varaibles in the struct > > xfs_mount, use the new variables everywhere and document the calculations > > better. > > > > Signed-off-by: Dave Chinner ..... > > + * so we set the number of set-aside blocks to 4 + 4*agcount when not using rmap > > + * btrees. > > + * > > + * When rmap btrees are active, we have to consider that using the last block in > > + * the AG can cause a full height rmap btree split and we need enough blocks on > > + * the AGFL to be able to handle this. That means we have, in addition to the > > + * above consideration, another (2 * mp->m_ag_levels) - 1 blocks required to be > > + * available to the free list. > > + */ > > BTW, I think I get the 2 block per level log requirement in that a split > requires logging the two blocks involved. Where does the 2nd block per > level come in as an allocation requirement? Yup, you are right, I've mixed the two conditions up. Split only requires an extra block per level, plus a new root block. e.g. see xfs_alloc_min_freelist()... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 9 19:39:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 826FF7F37 for ; Thu, 9 Jul 2015 19:39:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 11E3DAC008 for ; Thu, 9 Jul 2015 17:39:23 -0700 (PDT) X-ASG-Debug-ID: 1436488760-04cbb00fc902e90001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id vGEyNMyjoUsFUmO3 for ; Thu, 09 Jul 2015 17:39:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CCDACLE59VPLC2LXlbgxKBNIZOohMBAQEBAQEGmiYCAgEBAoFUTQEBAQEBAQcBAQEBQAE/hCMBAQEEJxMcIxAIAw4HAwklDwUlAwcaE4gtzyUBAQEBAQUBAQEBHhiGBYUuhCFlB4MXgRQFlC2Lf5hogQmDKiwxgQSBRwEBAQ Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail05.adl6.internode.on.net with ESMTP; 10 Jul 2015 10:09:08 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDMLM-0006IW-Hl; Fri, 10 Jul 2015 10:39:08 +1000 Date: Fri, 10 Jul 2015 10:39:08 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH 15/20] xfs: add an extent to the rmap btree Message-ID: <20150710003908.GF7943@dastard> X-ASG-Orig-Subj: Re: [PATCH 15/20] xfs: add an extent to the rmap btree References: <1433311497-10245-1-git-send-email-david@fromorbit.com> <1433311497-10245-16-git-send-email-david@fromorbit.com> <20150625164123.GD36162@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150625164123.GD36162@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1436488760 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20607 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jun 25, 2015 at 12:41:23PM -0400, Brian Foster wrote: > On Wed, Jun 03, 2015 at 04:04:52PM +1000, Dave Chinner wrote: > > From: Dave Chinner > > > > Now all the btree, free space and transaction infrastructure is in > > place, we can finally add the code to insert reverse mappings to the > > rmap btree. Freeing will be done in a spearate patch, so just the > > addition operation can be focussed on here. > > > > Signed-off-by: Dave Chinner > > --- > > fs/xfs/libxfs/xfs_rmap.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++- > > 1 file changed, 138 insertions(+), 1 deletion(-) > > > > diff --git a/fs/xfs/libxfs/xfs_rmap.c b/fs/xfs/libxfs/xfs_rmap.c > > index 38a92a1..c1e5d23 100644 > > --- a/fs/xfs/libxfs/xfs_rmap.c > > +++ b/fs/xfs/libxfs/xfs_rmap.c > > @@ -120,6 +120,18 @@ out_error: > > return error; > > } > > > > +/* > > + * When we allocate a new block, the first thing we do is add a reference to the > > + * extent in the rmap btree. This takes the form of a [agbno, length, owner] > > + * record. Newly inserted extents should never overlap with an existing extent > > + * in the rmap btree. Hence the insertion is a relatively trivial exercise, > > + * involving checking for adjacent records and merging if the new extent is > > + * contiguous and has the same owner. > > + * > > + * Note that we have no MAXEXTLEN limits here when merging as the length in the > > + * record has the full 32 bits available and hence a single record can track the > > + * entire space in the AG. > > + */ > > int > > xfs_rmap_alloc( > > struct xfs_trans *tp, > > @@ -130,18 +142,143 @@ xfs_rmap_alloc( > > uint64_t owner) > > { > > struct xfs_mount *mp = tp->t_mountp; > > + struct xfs_btree_cur *cur; > > + struct xfs_rmap_irec ltrec; > > + struct xfs_rmap_irec gtrec; > > + int have_gt; > > int error = 0; > > + int i; > > > > if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) > > return 0; > > > > trace_xfs_rmap_alloc_extent(mp, agno, bno, len, owner); > > - if (1) > > + cur = xfs_rmapbt_init_cursor(mp, tp, agbp, agno); > > + > > + /* > > + * For the initial lookup, look for and exact match or the left-adjacent > > + * record for our insertion point. This will also give us the record for > > + * start block contiguity tests. > > + */ > > + error = xfs_rmap_lookup_le(cur, bno, len, owner, &i); > > + if (error) > > + goto out_error; > > + XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error); > > + > > Are we intentionally relying on the fact that a left record will always > exist due to the static metadata blocks that start the AG? If so, I'd > just suggest to note that in the comment above. Yes. I thought there was a note somewhere about this, but I'll add a new one... Cheers, Dave. -- Dave Chinner david@fromorbit.com From noticias@bacsa.e.telefonica.net Thu Jul 9 19:53:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY, SUBJ_ALL_CAPS,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BCE837F37 for ; Thu, 9 Jul 2015 19:53:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id A8DCD8F8033 for ; Thu, 9 Jul 2015 17:53:36 -0700 (PDT) X-ASG-Debug-ID: 1436489612-04cbb00fd003120001-NocioJ Received: from emea01-db3-obe.outbound.protection.outlook.com (mail-db3on0068.outbound.protection.outlook.com [157.55.234.68]) by cuda.sgi.com with ESMTP id Arg8CbhfuNqHVG72 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 17:53:33 -0700 (PDT) X-Barracuda-Envelope-From: noticias@bacsa.e.telefonica.net X-Barracuda-Apparent-Source-IP: 157.55.234.68 Authentication-Results: oss.sgi.com; dkim=none (message not signed) header.d=none; Received: from 71.Red-217-125-108.staticIP.rima-tde.net (217.125.108.71) by AMXPR07MB215.eurprd07.prod.outlook.com (10.242.73.17) with Microsoft SMTP Server (TLS) id 15.1.213.14; Fri, 10 Jul 2015 00:53:29 +0000 MIME-Version: 1.0 From: bacsa Reply-To: To: Subject: APROVECHATE DE ESTE DESCUENTO ESPECIAL Content-Type: text/html; charset="utf-8" X-ASG-Orig-Subj: APROVECHATE DE ESTE DESCUENTO ESPECIAL Content-Transfer-Encoding: quoted-printable X-Mailer: Smart_Send_3_1_6 Date: Fri, 10 Jul 2015 02:53:21 +0200 Message-ID: <383626265480474219314@comercial> X-Originating-IP: [217.125.108.71] X-ClientProxiedBy: AM3PR02CA0038.eurprd02.prod.outlook.com (10.242.240.38) To AMXPR07MB215.eurprd07.prod.outlook.com (10.242.73.17) X-Microsoft-Exchange-Diagnostics: 1;AMXPR07MB215;2:lzuVXT42EsCO5uPZ5gxE1rrvoYPRPpOtkSmVTu0eGkgP3VHS4pKLnQFva9QCjxLW;3:62Eu1RxaOKgPfyZruiXx31irZg/A/X3o9hMIgip6b31l3U8UIrddnyZQyodo/dsOUtnOoxTOtqt1KmEtwIyFsjOe7fvfQgRCNYV64pPL90+Ea/lbD4YM37fqDb5bDv+oVGNE68T1VNG6Tz1PRvqL/g==;25:/Sv5dTxjilOHgVkp76vG9WbmCraIhZXvULSXZIUT81jBHJNrRxh6jLq1092pgTQR+Pecs4BIMJK5bkGHtCB1XrhvtTftDkU6UTxeVy+eN+tudkIsft3rYyhYYIgsPdEWY4cc8NKiviFef4NTZaRf8HdWa80HbZAJ3u6RFO8ipu75tczEwiSPB4HvtTqGpA+6etR8EHaMGAeITMa7LFOz0mp8SVIjee03cbBV3hAzCK9InuyAzO5Es3Q5/R3hF+IpI4ggOjD2ajQPWVPqFNcBoA==;4:T3vqaRIAMcYFJK2QoS4QkMsMZIz6Yq1OOr23bGljxX9Iv3VuULpTTfKtG6hJMhEDl2oI+2Ph0TGMvkyrGFtjuIDE7DPKK9g9FwwP+EFGfZ44s63RwUA2ml9c5WFUw7hR9EO3+Neu1lU6zEX9suNNlj0xvHxB9sMxM0axs9nX1mGBlskO5GuIqMAoJPFSNY7w5XFKVpPjSk5hI6tqf0gqz4UtboYoBZRsi9qQcIFyZWTVEW5kjY9qnPawfX/HmHyV5pnKsfCtdAZQY+uLuCjpidhZ56c8QyQUoC2h48Qp8qU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AMXPR07MB215; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:AMXPR07MB215;BCL:0;PCL:0;RULEID:;SRVR:AMXPR07MB215; X-Forefront-PRVS: 06339BAE63 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(243025005)(479174004)(19580405001)(19580395003)(2351001)(62966003)(40100003)(77156002)(450100001)(19617315012)(50986999)(229853001)(18206015028)(122386002)(42186005)(53806999)(33716001)(66066001)(23676002)(19273905006)(74482002)(19618635001)(19300405004)(87976001)(46102003)(50466002)(86152002)(15975445007)(110136002)(189998001)(77096005)(19622755009)(107886002)(43066003)(58226001)(23846002)(5001960100002)(50226001)(7099028)(226714002)(89436002)(43062003)(42882004)(79896001)(217873001)(215093002);DIR:OUT;SFP:1101;SCL:1;SRVR:AMXPR07MB215;H:71.Red-217-125-108.staticIP.rima-tde.net;FPR:;SPF:None;MLV:nov;PTR:InfoNoRecords;LANG:es; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTVhQUjA3TUIyMTU7MjM6bVV4d3hJRjh3bkdocTdVeE1hejRUaTMrL2k1?= =?utf-8?B?eEhmVExuWnlVWTNVNGdSdUpkdnl5Q3piQkwraU90RTdlK0tYS2RmdjNscEZi?= =?utf-8?B?RjdTNUZiM3dObDZOdkZtZnJMM2dtMi84Z3lpZFRLUGxocFZ2d3NGUzdpeWZD?= =?utf-8?B?cnVYdlZEOWhZTUh4L3FZRllpa01uMnlDcE5xdW95M01Pbzh6OUhCeXlEK3Zn?= =?utf-8?B?T2IwK2JFS0JsMGV1dEdhQXdMdGdmSXQzamdVUHRheHltbU8zK0xwUy8rNXpt?= =?utf-8?B?cE9ZcTkybjNsVDFYRVBVNUIzY1ZVMk40UXI0UitzN25LdDFaTG1wait4VHdO?= =?utf-8?B?OGxtN2lBd1ZKTnpRak16OWpsZnFxVEJxdGJPcXQ4VlNyMnVobWtDR2twMUIr?= =?utf-8?B?RTlqbURsb3NXbEdaQzhaN3Rhem5KZ0k0N1NuVnUwcnFYVGVaL0s5dTI3amhk?= =?utf-8?B?cVNhVnlzK0NOVUlidTVwa2FDOHpNM1Bkelc1ZExXVFZWMFZpOTVuTisxL1JX?= =?utf-8?B?NXkwWWQvcW9KRUdZdVMxKzI0aThGOWhKeVBsMmgyMTVoeTdwRkRXNll6aUZD?= =?utf-8?B?SnJ4eHNwTlFvbVVad2lpejFaZ1ljQXFWcm5vcDlLUENFT2Z1K3plb25COWcy?= =?utf-8?B?Rk5pOGxzRUFDQUorakZkVGtJc08yOVRBSTlwNTMxM3Y3Vi9TREpQKzRBaVBZ?= =?utf-8?B?ZkI1MFFIUE91cjlWczduYXgvcWt3L2hISHpVOFRMRDlCYTNWajJYVHA4NHFy?= =?utf-8?B?RDNJbGpSaU9QNk8yWE1VT0RmMWR4ZW9MN3hab1J0ZEpZdUdtcWZjeFJYTXdD?= =?utf-8?B?N3d4dnhOUlV0T2R6QjYwekk3d2s5V1gyLzZYdGRYcGVYNjVRNm1RVWxoVTZu?= =?utf-8?B?dTlmVUp2dkFQdTRsN2ppeVRiSnVsdEFQWlFPOHhZM0hSSjVCZ0xodVc3cmhu?= =?utf-8?B?NGhvM2hnVk9XRkNYRmVmeFNNWHE5WlpCY0o5RjhCUXY0RU1wWFZqd0Y1Q0xB?= =?utf-8?B?ZFNaMSt2QzZEQ3NqR1FHOWUxd09qdTZ3dkVZUHM0c3hRUEUwUzNlVHR5Y3Yw?= =?utf-8?B?aTZFdmQrU1FkT3BlczBucnBOOFZxdUxYRksvbEtDSFROTGVETTVFU3lHN0c0?= =?utf-8?B?SE5vRndkVG5hdEpTbWZlWXhRWmZhSkZLY3V5V0FVd0FYNGtFS2NiaWZxRDBo?= =?utf-8?B?TU53b2creWRXWS82enBYTmRkc0RlSUtmZS9SYldRVUE5WmRZM2p3U1lzYXFT?= =?utf-8?B?WFh1TXIzWk52WGFNWWwxYVFhRS8zR0VtemlzVW1nS3hRZURjT1IycFpGdi9x?= =?utf-8?B?TnRITWdzd1hBWWdQajYyRnUwZVBob1dJTm1acG5wOUlZcENOZDI1OW1aVy9H?= =?utf-8?B?QkhNQjAyeTJCQ2JPcVNHVGhvODVhRy90SGpjMzlpMDk0WGEwZENZbmw2NXlt?= =?utf-8?B?Zi9kL0QwSWFackVwUEt0bW9iL21FYThBNncxN2NjSzVEWXB0VjlzcWVvZmht?= =?utf-8?B?Q3ZuREt0N1pFWTY1cFFyRVBHNU9NVUkvM21pWE9oU04razQ1S0xBaEdCcVh4?= =?utf-8?B?QUlYUURucmwwV2ZQNnczSml5bmtzajlQNmlvaTZDWkgrNTcrOVFjZ1lFM0FL?= =?utf-8?Q?buOluS3xQEmalAZ7eRd?= X-Microsoft-Exchange-Diagnostics: 1;AMXPR07MB215;5:G5FsaByLle5U6YtlAGkvroXYICYR6mEzP7nAisFkg0sNKDD56arXJBgaxeQuNxKgMm7WndA3CMJOtxMTQVwFUitU2DPXsu4I9TjJMLilAoP4J7BMDB+WGzfsjuLkoCI12CkgbzoXZhJ3ucOS+QdEig==;24:eUekJi6s4RAgctYqbs5/YoVL90/tZViaFqYUZwA+yI69r3SM61qtPQIHOvVFBE9ckWzKaccVlktHjcKPy/bPhyHwvP84Ufuq5D9L+J/GFsI=;20:faYORh6oaZXbSUm4c6cXsw9IYQ75PD342Zk3HO5AbkzVK60AhQt76m5qSOoepqRyroPBK0zfoWPeDkLqf2P+YQ== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: bacsa.es X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2015 00:53:29.6667 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMXPR07MB215 X-Barracuda-Connect: mail-db3on0068.outbound.protection.outlook.com[157.55.234.68] X-Barracuda-Start-Time: 1436489612 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.64 X-Barracuda-Spam-Status: No, SCORE=1.64 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY, SUBJ_ALL_CAPS, SUBJ_ALL_CAPS_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20607 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 SUBJ_ALL_CAPS Subject is all capitals 1.62 SUBJ_ALL_CAPS_2 SUBJ_ALL_CAPS_2 BACSA - PROMOCI= =C3=93N ESPECIAL

Si no puede ver la promoci=C3=B3n, por favor haga click AQUI

=



PROMOCI=C3=93N ESPECIAL
VALIDEZ DE LA OFERTA HASTA EL 13/09/= 2015

BALANZA SOLO PESO ACS CON RS232, DOBLE DISPLAY Y REL=C3=89S
=

   * Balanza Solo Peso Plato de acero inoxidab= le de 335 X 230.
   * Aprobaci=C3=B3n CE.
  =  * Doble Display. Uno en la parte delantera y otro en la parte trasera= de la balanza.
   * Ajuste de cero autom=C3=A1tico duran= te el encendido de la balanza.
   * Conmutador entre pesa= da, contaje, porcentaje.
   * Interfaz RS-232C.
 =   * Funci=C3=B3n de selecci=C3=B3n de l=C3=ADmites de peso.
&n= bsp;  * Rel=C3=A9s asociados a los l=C3=ADmites de peso.
 = ;  * F. A.: C.A. 220V (=C2=B110 %) / 50 Hz, 110V/60HZ, C.C. 6V / = 4Ah (bater=C3=ADa recargable interna).
   * Temperatura d= e funcionamiento: 0 =C2=BAC ~ 40 =C2=BAC.
   * Humedad de= Funcionamiento: <=3D 85 % H.R.
   * Equipo fuera de M= etrolog=C3=ADa Legal. Solo para uso interno.

OFERTA ESPECIAL
PRECIO FINAL: 149,76 =E2=82=AC
PORTES E I= MPUESTOS INCLUIDOS




C=C3=B3digo Modelo Capacidad Divisi=C3=B3n
0307001505 Balanza Cuenta Piezas Simple Modelo ACS-15Z DD 15 kg 0,5 g

* Promoci=C3=B3n solo v=C3=A1lida para la Pen= =C3=ADnsula Ib=C3=A9rica


S=C3=ADguenos en las principales redes sociales

3DFACEBOOK 3DGOOGLE+ 3DLINKEDIN 3DVIADEO 3DYOUTUBE

De acuerdo con lo dispuesto en la Ley 15/99 de = Protecci=C3=B3n de Datos de Car=C3=A1cter Personal, le informamos que sus d= atos est=C3=A1n incorporados en un fichero automatizado cuyo responsable es= B=C3=81SCULAS Y ARCAS CATALUNYA, S.A. (CIF A-08944118) quien los utiliza p= ara el intercambio de informaci=C3=B3n sobre sus productos y servicios, as= =C3=AD como para la gesti=C3=B3n de las relaciones comerciales presentes o = futuras con usted o su empresa. Estos datos no ser=C3=A1n cedidos ni comuni= cados a terceros en ning=C3=BAn caso. Podr=C3=A1 ejercer sus derechos de ac= ceso, rectificaci=C3=B3n, y cancelaci=C3=B3n mediante escrito (acompa=C3=B1= ando fotocopia de su DNI) dirigido a B=C3=81SCULAS Y ARCAS CATALUNYA, S.A. = Pol. Ind. Santiga =E2=80=93 c/. Talleres, 2 =E2=80=93 nave 1, 08130 Santa P= erpetua de Mogoda (Barcelona).
Si no desea recibir m=C3=A1s comunicacion= es de nuestra parte, por favor devu=C3=A9lvanos este correo indicando BAJA = en el Asunto. Este mensaje y, en su caso, los ficheros anexos son confidenc= iales, especialmente en lo que respecta a los datos personales, y se dirige= n exclusivamente al destinatario referenciado. Si usted no lo es y lo ha re= cibido por error o tiene conocimiento del mismo por cualquier motivo, le ro= gamos que nos lo comunique por este medio y proceda a destruirlo o borrarlo= , y que en todo caso se abstenga de utilizar, reproducir, alterar, archivar= o comunicar a terceros el presente mensaje y ficheros anexos, todo ello ba= jo pena de incurrir en responsabilidades legales. El emisor no garantiza la= integridad, rapidez o seguridad del presente correo, ni se responsabiliza = de posibles perjuicios derivados de la captura, incorporaciones de virus o = cualesquiera otras manipulaciones efectuadas por terceros.
From baijuncheng@unitedstack.com Thu Jul 9 22:09:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 001F87F37 for ; Thu, 9 Jul 2015 22:09:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E13EF8F8033 for ; Thu, 9 Jul 2015 20:09:18 -0700 (PDT) X-ASG-Debug-ID: 1436497752-04cbb00fc804af0001-NocioJ Received: from smtpbgau1.qq.com (smtpbgau1.qq.com [54.206.16.166]) by cuda.sgi.com with ESMTP id byMMoWwfackGC0A4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Jul 2015 20:09:15 -0700 (PDT) X-Barracuda-Envelope-From: baijuncheng@unitedstack.com X-Barracuda-Apparent-Source-IP: 54.206.16.166 X-QQ-mid: bizesmtp10t1436497746t158t29 Received: from [172.16.0.123] (unknown [182.48.117.114]) by esmtp4.qq.com (ESMTP) with id ; Fri, 10 Jul 2015 11:09:02 +0800 (CST) X-QQ-SSF: 0140000000000010F322000A0000000 X-QQ-FEAT: A/E2aCcFPUw+jutCLCBYGf7CagB1LNqfipLpjyP1qtoHHtAxTb+PIw0UGuNmm R8cUc0oReeluuRrxR9zS0OSxcRsPjqrUOlAmhDap/LwR0xAM1CgzzhpeS8/M5pezV6ozKmb wpTmCfYKQ5D5jdCfSR0MfdQgGfkSxBs+jOykb7CGNBNMxe6KsqYAKt/y4DHqgzvD/DblfXu /Csq8Ci31FWxzj2j1c6lb9ZE0dw4TvaxLSLKqh2Lo+g== X-QQ-GoodBg: 2 Message-ID: <559F3750.5040002@unitedstack.com> Date: Fri, 10 Jul 2015 11:09:04 +0800 From: juncheng bai User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Dave Chinner , bfoster@redhat.com, sandeen@sandeen.net CC: xfs@oss.sgi.com Subject: [xfs puzzle] kmem_alloc hang in xlog_cil_insert_format_items Content-Type: text/plain; charset=utf-8; format=flowed X-ASG-Orig-Subj: [xfs puzzle] kmem_alloc hang in xlog_cil_insert_format_items Content-Transfer-Encoding: 7bit X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-Barracuda-Connect: smtpbgau1.qq.com[54.206.16.166] X-Barracuda-Start-Time: 1436497753 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20609 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi,All. Recently, I test xfs to verify kmem_alloc hang in xfs_dir2_block_to_sf in kernel-3.14, for patch b3f03bac8132207a20286d5602eda64500c19724. My test case: I use three ssd disks to build three xfs filesystems. My mount options: rw,noexec,nodev,noatime,nodiratime,barrier=0,discard,inode64,logbsize=256k,delaylog Each xfs filesystem run a postmark and two fio. postmark parameter: set size 100000 100000000 set location /var/xfs-0/ set seed 900 set number 100000 set subdirectories 5000 set read 40960 65536000 set write 40960 65536000 set transactions 10000 set bias create 40 set bias read 60 run xfs-0-result.txt show fio parameter: fio -directory /var/${1} -rw=randrw -ioengine=libaio -iodepth=128 -size=128M -name=stress_test -numjobs=256 After running for five hours , the output of warning all the time: 2015-07-07T23:32:18.230120+00:00 server-69 kernel: XFS: possible memory allocation deadlock in kmem_alloc (mode:0x8250 size:32832) 2015-07-07T23:32:18.230131+00:00 server-69 kernel: CPU: 1 PID: 15954 Comm: postmark Tainted: G O 3.12.21-1.el6.x86_64 #1 2015-07-07T23:32:18.230134+00:00 server-69 kernel: Hardware name: Dell Inc. PowerEdge R630/0CNCJW, BIOS 1.2.10 03/09/2015 2015-07-07T23:32:18.230147+00:00 server-69 kernel: 0000000000000000 ffff880481c99bb8 ffffffff8162562a 0000000000008040 2015-07-07T23:32:18.230148+00:00 server-69 kernel: 000000000000044c ffff880481c99bf8 ffffffffa06c457c ffff880481c99bf8 2015-07-07T23:32:18.230149+00:00 server-69 kernel: ffff88086936bcf0 ffff8804a17ecd00 ffff880066a48000 ffff880044158000 2015-07-07T23:32:18.230150+00:00 server-69 kernel: Call Trace: 2015-07-07T23:32:18.230152+00:00 server-69 kernel: [] dump_stack+0x49/0x5f 2015-07-07T23:32:18.230153+00:00 server-69 kernel: [] kmem_alloc+0xec/0x100 [xfs] 2015-07-07T23:32:18.230186+00:00 server-69 kernel: [] xlog_cil_insert_format_items+0x11f/0x1f0 [xfs] 2015-07-07T23:32:18.230205+00:00 server-69 kernel: [] ? xfs_bmap_last_offset+0x30/0xc0 [xfs] 2015-07-07T23:32:18.230211+00:00 server-69 kernel: [] xlog_cil_insert_items+0x3d/0x1b0 [xfs] 2015-07-07T23:32:18.230212+00:00 server-69 kernel: [] xfs_log_commit_cil+0x54/0x150 [xfs] 2015-07-07T23:32:18.230228+00:00 server-69 kernel: [] xfs_trans_commit+0x79/0x270 [xfs] 2015-07-07T23:32:18.230230+00:00 server-69 kernel: [] xfs_remove+0x2d2/0x350 [xfs] 2015-07-07T23:32:18.230235+00:00 server-69 kernel: [] ? d_walk+0x5f/0x260 2015-07-07T23:32:18.230236+00:00 server-69 kernel: [] xfs_vn_unlink+0x52/0xa0 [xfs] 2015-07-07T23:32:18.230237+00:00 server-69 kernel: [] vfs_rmdir+0xbb/0x110 2015-07-07T23:32:18.230238+00:00 server-69 kernel: [] do_rmdir+0x203/0x220 2015-07-07T23:32:18.230239+00:00 server-69 kernel: [] SyS_rmdir+0x16/0x20 2015-07-07T23:32:18.230240+00:00 server-69 kernel: [] system_call_fastpath+0x16/0x1b In function kmem_alloc, I modify code to get more info: 57c57 < if (!(++retries % 100)) --- > if (!(++retries % 100)) { 59,60c59,62 < "possible memory allocation deadlock in %s (mode:0x%x)", < __func__, lflags); --- > "possible memory allocation deadlock in %s (mode:0x%x, size:%zu)", > __func__, lflags, size); > dump_stack(); > } The patch b3f03bac8132207a20286d5602eda64500c19724 solves the problem of the big directroy size, more than 64k. Now, the 'struct txfs_log_vec' need 32k, but fail when the physical memory fragmentation is very serious; In the later, kmalloc may fail when process 16k. So, I think can we provide a unified solution? And I think why can't we use vmalloc when kmalloc fails? Thanks ---------------- juncheng bai From tonytkdk@gmail.com Fri Jul 10 00:36:52 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 398F57F37 for ; Fri, 10 Jul 2015 00:36:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9CD77AC009 for ; Thu, 9 Jul 2015 22:36:48 -0700 (PDT) X-ASG-Debug-ID: 1436506601-04cb6c209d113690001-NocioJ Received: from mail-wi0-f173.google.com (mail-wi0-f173.google.com [209.85.212.173]) by cuda.sgi.com with ESMTP id zZzoTsLGMLxbUNZF (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Jul 2015 22:36:42 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.173 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.173] Received: by wifm2 with SMTP id m2so36343804wif.1 for ; Thu, 09 Jul 2015 22:36:41 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.173] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.173] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=/vBa+jZ9pwnPal+Fkb0jygHSLTIa7BfnP+ABb6a9D/U=; b=DYFh56n7NsEcRmPHHUH6Iprpw9HtwS+9ylF5sAXVRMsXyNMJrEOEZUcvIWA9o/gJPa uT98SjmxCE9EOq/WzVIM9uTGrJpKrq6l2PMFcrDNo9gayOzBmbn4Inqqjw0iKne2RIJV 1xXm3yFrDsMpfSfkXNp1QUtFOMdDC+k4SWRvOtt+/hzbxHy+1YUqTsVFOie9mfSQYvoh kO3GTGa2l2EIUGBbf76d2Uv8u8vIhQQr/Xz58x1qO/8G+AcZuoje9+CeJ6lkee21TcRB 8W1mxfb4Z5IkimQnn7kAAMjdzef4QlnVMaf+nLlQ/n9Cp+v1mQJYBdsQ9GonWBp5gdkk T2fg== MIME-Version: 1.0 X-Received: by 10.180.89.231 with SMTP id br7mr2784238wib.60.1436506601242; Thu, 09 Jul 2015 22:36:41 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Thu, 9 Jul 2015 22:36:41 -0700 (PDT) In-Reply-To: <20150709183255.GG63282@bfoster.bfoster> References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> Date: Fri, 10 Jul 2015 13:36:41 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=e89a8f3ba255af444b051a7ec1ec X-Barracuda-Connect: mail-wi0-f173.google.com[209.85.212.173] X-Barracuda-Start-Time: 1436506602 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20612 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --e89a8f3ba255af444b051a7ec1ec Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Brain, Is this the file which you need ? https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko $> modinfo xfs filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko license: GPL description: SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled author: Silicon Graphics, Inc. srcversion: 0C1B17926BDDA4F121479EE depends: exportfs vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion Thanks // Hugo =E2=80=8B 2015-07-10 2:32 GMT+08:00 Brian Foster : > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > > Hi Brain, > > > > There you go. > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23= .4.el6.x86_64 > > > > $ md5sum vmlinux > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > > > > Yes, I can read it with this vmlinux image. Put all files > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore > > > > Thanks, I can actually load that up now. Note that we'll probably need > the modules and whatnot (xfs.ko) also to be able to look at any XFS > bits. It might be easiest to just tar up and compress whatever directory > structure has the debug-enabled vmlinux and all the kernel modules. > Thanks. > > Brian > > > Hugo > > =E2=80=8B > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > > > Hi Brian, > > > > > > > > *Operating System Version:* > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > > > > > > > *NODE 1* > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > > > > > > > > > > *NODE 2* > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj0= 2 > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj0= 2.txt > > > > > > > > > > > > Any thoughts would be appreciate > > > > > > > > > > I'm not able to fire up crash with these core files and the kernel > debug > > > info from the following centos kernel debuginfo package: > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > > > > > It complains about a version mismatch between the vmlinux and core > file. > > > I'm no crash expert... are you sure the cores above correspond to thi= s > > > kernel? Does crash load up for you on said box if you run something > like > > > the following? > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > > > > > Note that you might need to install the above kernel-debuginfo packag= e > > > to get the debug (vmlinux) file. If so, could you also upload that > > > debuginfo rpm somewhere? > > > > > > Brian > > > > > > > Thanks // Hugo > > > > > > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > > > Hi Folks, > > > > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no any erro= r > > > shows > > > > > up. > > > > > > We currently tried to deploy CentOS 6.6 for testing. (The > previous > > > kernel > > > > > > panic was came from Ubuntu). > > > > > > The CentOS nodes encountered kernel panic with same daemon but > the > > > > > problem > > > > > > may a bit differ. > > > > > > > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in > Ubuntu. > > > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > > > > > > > I'd venture to guess it's the same behavior here. The previous > kernel > > > > > had a callback for the parent inode number that was called via > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a > static > > > > > inline here instead. > > > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > > > > 0000000000000001 > > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 > [xfs] > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > <4>last sysfs file: > > > > > > > > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expand= er-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/q= ueue/rotational > > > > > > <4>CPU 17 > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs > iptable_filter > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac > edac_core > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp > pps_core > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 > mbcache > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hc= d > ahci > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > > > > scsi_wait_scan] > > > > > > <4> > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > > > > R518.v5P/X10DRi-T4+ > > > > > > <4>RIP: 0010:[] [] > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: > 0000000000000000 > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: > 00007faa74006203 > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: > 0000000000000004 > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: > 0000000000000000 > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: > ffff8808715b4580 > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > > > > knlGS:0000000000000000 > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: > 00000000001407e0 > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: > 0000000000000000 > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > 0000000000000400 > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo > ffff880871f6c000, > > > > > > task ffff880860f18ab0) > > > > > > <4>Stack: > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > > > ffff880874749cc0 > > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > > > > ffff8808715b4580 > > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > > > > ffffffffa035ab31 > > > > > > <4>Call Trace: > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > > > <4> [] ? final_putname+0x26/0x50 > > > > > > <4> [] sys_getdents+0x89/0xf0 > > > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 > 85 c0 > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 > 00 00 > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b= 6 > > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 > [xfs] > > > > > > <4> RSP > > > > > > <4>CR2: 0000000000000001 > > > > > > > > > > > ... > > > > > > > > > > > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore hel= p for > > > > > > troubleshooting kind issue ? > > > > > > > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 > kernel? Can > > > > > you provide the exact kernel version and post the vmcore somewher= e? > > > > > > > > > > Brian > > > > > > > > > > > Thanks // Hugo > > > > > > =E2=80=8B > > > > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected > filesystem? > > > Note > > > > > > > that -n will report problems only and prevent any modificatio= n > by > > > > > repair. > > > > > > > > > > > > > > > > *We might to to xfs_repair if we can address which disk > causes > > > the > > > > > > > issue. * > > > > > > > > > > > > > > If you do, please save the output, and if it finds anything, > please > > > > > > > provide the output in this thread. > > > > > > > > > > > > > > Thanks, > > > > > > > -Eric > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > xfs mailing list > > > > > > xfs@oss.sgi.com > > > > > > http://oss.sgi.com/mailman/listinfo/xfs > > > > > > > > > > > > > > --e89a8f3ba255af444b051a7ec1ec Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Brain,

Is this the file which you need= ?

https://cloud.swiftstack.com/v1/AUTH_h= ugo/public/xfs.ko

$> modinfo xfs

filename: /lib/modules/2.=
6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko=20
license: GPL=20
description: SGI XFS with ACLs, security attributes, large block/inode numb=
ers, no debug enabled=20
author: Silicon Graphics, Inc.=20
srcversion: 0C1B17926BDDA4F121479EE=20
depends: exportfs=20
vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion

Thanks // Hugo

=E2=80=8B

2015-07-10 2:32 GMT= +08:00 Brian Foster <bfoster@redhat.com>:
On Fri, Jul 10, 2015 at 12:40:00AM +0800,= Kuo Hugo wrote:
> Hi Brain,
>
> There you go.
>
> https://cloud.swiftstack.com/v1/AUTH_hu= go/public/vmlinux
> https://c= loud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_= 64
>
> $ md5sum vmlinux
> 82aaa694a174c0a29e78c05e73adf5d8=C2=A0 vmlinux
>
> Yes, I can read it with this vmlinux image. Put all files
> (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore<= br> >

Thanks, I can actually load that up now. Note that we'll probabl= y need
the modules and whatnot (xfs.ko) also to be able to look at any XFS
bits. It might be easiest to just tar up and compress whatever directory structure has the debug-enabled vmlinux and all the kernel modules.
Thanks.

Brian

> Hugo
> =E2=80=8B
>
> 2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote:
> > > Hi Brian,
> > >
> > > *Operating System Version:*
> > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Fina= l
> > >
> > > *NODE 1*
> > >
> > > https://cloud.swiftstack.= com/v1/AUTH_burton/brtnswift/vmcore
> > > https://cloud.s= wiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
> > >
> > >
> > > *NODE 2*
> > >
> > > https://cloud.swi= ftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> > >
> > https://clou= d.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
> > >
> > >
> > > Any thoughts would be appreciate
> > >
> >
> > I'm not able to fire up crash with these core files and the k= ernel debug
> > info from the following centos kernel debuginfo package:
> >
> > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm
> >
> > It complains about a version mismatch between the vmlinux and cor= e file.
> > I'm no crash expert... are you sure the cores above correspon= d to this
> > kernel? Does crash load up for you on said box if you run somethi= ng like
> > the following?
> >
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0crash /usr/lib/debug/lib/modules= /.../vmlinux vmcore
> >
> > Note that you might need to install the above kernel-debuginfo pa= ckage
> > to get the debug (vmlinux) file. If so, could you also upload tha= t
> > debuginfo rpm somewhere?
> >
> > Brian
> >
> > > Thanks // Hugo
> > >
> > >
> > > 2015-07-09 20:51 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > >
> > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrot= e:
> > > > > Hi Folks,
> > > > >
> > > > > As the results of 32 disks with xfs_repair -n seem= s no any error
> > shows
> > > > up.
> > > > > We currently tried to deploy CentOS 6.6 for testin= g. (The previous
> > kernel
> > > > > panic was came from Ubuntu).
> > > > > The CentOS nodes encountered kernel panic with sam= e daemon but the
> > > > problem
> > > > > may a bit differ.
> > > > >
> > > > >=C2=A0 =C2=A0 - It was broken on xfs_dir2_sf_get_pa= rent_ino+0xa/0x20 in Ubuntu.
> > > > >=C2=A0 =C2=A0 - Here=E2=80=99s the log in CentOS. I= t=E2=80=99s broken on
> > > > >=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > >
> > > >
> > > > I'd venture to guess it's the same behavior her= e. The previous kernel
> > > > had a callback for the parent inode number that was cal= led via
> > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, = it has a static
> > > > inline here instead.
> > > >
> > > > > <1>BUG: unable to handle kernel NULL pointer= dereference at
> > > > 0000000000000001
> > > > > <1>IP: [<ffffffffa0362d60>] xfs_dir2_s= f_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0
> > > > > <4>Oops: 0000 [#1] SMP
> > > > > <4>last sysfs file:
> > > > >
> > > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > > > <4>CPU 17
> > > > > <4>Modules linked in: xt_conntrack tun xfs e= xportfs iptable_filter
> > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 = nf_conntrack
> > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO= _wdt
> > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit= sb_edac edac_core
> > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe= dca ptp pps_core
> > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler= ext4 jbd2 mbcache
> > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_= class xhci_hcd ahci
> > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last u= nloaded:
> > > > > scsi_wait_scan]
> > > > > <4>
> > > > > <4>Pid: 4454, comm: swift-object-se Not tain= ted
> > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics St= orform
> > > > > R518.v5P/X10DRi-T4+
> > > > > <4>RIP: 0010:[<ffffffffa0362d60>]=C2= =A0 [<ffffffffa0362d60>]
> > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4>RSP: 0018:ffff880871f6de18=C2=A0 EFLAGS: = 00010202
> > > > > <4>RAX: 0000000000000000 RBX: 00000000000000= 04 RCX: 0000000000000000
> > > > > <4>RDX: 0000000000000001 RSI: 00000000000000= 00 RDI: 00007faa74006203
> > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04b= c9 R09: 0000000000000004
> > > > > <4>R10: 0000000000008030 R11: 00000000000002= 46 R12: 0000000000000000
> > > > > <4>R13: 0000000000000002 R14: ffff88106eff70= 00 R15: ffff8808715b4580
> > > > > <4>FS:=C2=A0 00007faa85425700(0000) GS:ffff8= 80028360000(0000)
> > > > knlGS:0000000000000000
> > > > > <4>CS:=C2=A0 0010 DS: 0000 ES: 0000 CR0: 000= 0000080050033
> > > > > <4>CR2: 0000000000000001 CR3: 00000010723250= 00 CR4: 00000000001407e0
> > > > > <4>DR0: 0000000000000000 DR1: 00000000000000= 00 DR2: 0000000000000000
> > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0f= f0 DR7: 0000000000000400
> > > > > <4>Process swift-object-se (pid: 4454, threa= dinfo ffff880871f6c000,
> > > > > task ffff880860f18ab0)
> > > > > <4>Stack:
> > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff88= 0871f6df38
> > ffff880874749cc0
> > > > > <4><d> 0000000100000103 ffff8802381f8c= 00 ffff880871f6df38
> > > > ffff8808715b4580
> > > > > <4><d> 0000000000000082 ffff8802381f8d= 88 ffff880871f6dec8
> > > > ffffffffa035ab31
> > > > > <4>Call Trace:
> > > > > <4> [<ffffffff811a4bb0>] ? filldir+0x0= /0xe0
> > > > > <4> [<ffffffffa035ab31>] xfs_readdir+0= xe1/0x130 [xfs]
> > > > > <4> [<ffffffff811a4bb0>] ? filldir+0x0= /0xe0
> > > > > <4> [<ffffffffa038fe29>] xfs_file_read= dir+0x39/0x50 [xfs]
> > > > > <4> [<ffffffff811a4e30>] vfs_readdir+0= xc0/0xe0
> > > > > <4> [<ffffffff8119bd86>] ? final_putna= me+0x26/0x50
> > > > > <4> [<ffffffff811a4fb9>] sys_getdents+= 0x89/0xf0
> > > > > <4> [<ffffffff8100b0f2>] system_call_f= astpath+0x16/0x1b
> > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48= 8b 7d c0 ff 55 b8 85 c0
> > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f= 84 00 00 00 00 00
> > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f = b6 44 24 03 41 0f b6
> > > > > <1>RIP=C2=A0 [<ffffffffa0362d60>] xfs_= dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4> RSP <ffff880871f6de18>
> > > > > <4>CR2: 0000000000000001
> > > > >
> > > > ...
> > > > >
> > > > > I=E2=80=99ve got the vmcore dump from operator. Do= es vmcore help for
> > > > > troubleshooting kind issue ?
> > > > >
> > > >
> > > > Hmm, well it couldn't hurt. Is the vmcore based on = this 6.6 kernel? Can
> > > > you provide the exact kernel version and post the vmcor= e somewhere?
> > > >
> > > > Brian
> > > >
> > > > > Thanks // Hugo
> > > > > =E2=80=8B
> > > > >
> > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen <sandeen@sandeen.net>:
> > > > >
> > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote:
> > > > > > >>- Have you tried an 'xfs_repair -= n' of the affected filesystem?
> > Note
> > > > > > that -n will report problems only and prevent= any modification by
> > > > repair.
> > > > > > >
> > > > > > > *We might to to xfs_repair if we can add= ress which disk causes
> > the
> > > > > > issue. *
> > > > > >
> > > > > > If you do, please save the output, and if it = finds anything, please
> > > > > > provide the output in this thread.
> > > > > >
> > > > > > Thanks,
> > > > > > -Eric
> > > > > >
> > > >
> > > > > _______________________________________________ > > > > > xfs mailing list
> > > > > xfs@oss.sgi.com=
> > > > > http://oss.sgi.com/mailman/listinfo/= xfs
> > > >
> > > >
> >

--e89a8f3ba255af444b051a7ec1ec-- From david@fromorbit.com Fri Jul 10 01:19:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 409CB7F37 for ; Fri, 10 Jul 2015 01:19:33 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AF2F5AC009 for ; Thu, 9 Jul 2015 23:19:29 -0700 (PDT) X-ASG-Debug-ID: 1436509162-04cbb00fc9070b0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id XtLtViCnhQkmVfDw for ; Thu, 09 Jul 2015 23:19:22 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CaCwDEYp9VPLC2LXlbgxKBNIZOohgBAQEBAQaSZ4c/BAICgVVNAQEBAQEBBwEBAQFAAT+EIwEBAQMBOhwjBQsIAxgJJQ8FJQMHGhMbiAsHzzsBAQEHAiAYhgWFLoQtDksHhCsFlC2Lf4E+jFSGd4NfgjIcgWUsMYEEgUcBAQE Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail06.adl2.internode.on.net with ESMTP; 10 Jul 2015 15:49:21 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDRea-0006nL-Da; Fri, 10 Jul 2015 16:19:20 +1000 Date: Fri, 10 Jul 2015 16:19:20 +1000 From: Dave Chinner To: juncheng bai Cc: bfoster@redhat.com, sandeen@sandeen.net, xfs@oss.sgi.com Subject: Re: [xfs puzzle] kmem_alloc hang in xlog_cil_insert_format_items Message-ID: <20150710061920.GK3902@dastard> X-ASG-Orig-Subj: Re: [xfs puzzle] kmem_alloc hang in xlog_cil_insert_format_items References: <559F3750.5040002@unitedstack.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <559F3750.5040002@unitedstack.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1436509162 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20613 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 10, 2015 at 11:09:04AM +0800, juncheng bai wrote: > Hi,All. > > Recently, I test xfs to verify kmem_alloc hang in > xfs_dir2_block_to_sf in kernel-3.14, for patch > b3f03bac8132207a20286d5602eda64500c19724. You do not need to spam the list if you do not get an immediate response to your initial question. As it is, you commented on the bug report a couple of days again where I explained exactly what the state of this problem was (i.e. you asked "why can't we just use vmalloc?") > After running for five hours , the output of warning all the time: > 2015-07-07T23:32:18.230120+00:00 server-69 kernel: XFS: possible > memory allocation deadlock in kmem_alloc (mode:0x8250 size:32832) And that's pretty clear what the trigger here is - the allocation is just over the PAGE_ALLOC_COSTLY_ORDER threshold. We see this retry come up at this point because that threshold changes the behaviour of memory reclaim and makes allocations more likely to fail... > The patch b3f03bac8132207a20286d5602eda64500c19724 solves the > problem of the big directroy size, more than 64k. > Now, the 'struct txfs_log_vec' need 32k, but fail when the physical > memory fragmentation is very serious; In the later, kmalloc may fail > when process 16k. Right now we have to choose between: - running small machines out of vmalloc space - triggering the OOM killer and killing random processes - failing the allocation whcih corrupts the filesystem in memory, so we need to shut down the filesystem - retrying until we succeed. We currently default to the least worst situation which is "retry until we succeed" because all the other situations are much worse (i.e. take the filesystem and/or machine down, rather than recover when memory becomes available again). As I said earlier, there is no quick fix for this problem and shouting at us about it isn't going to get it solved any sooner. > So, I think can we provide a unified solution? And I think why can't we > use vmalloc when kmalloc fails? I told you - there is limited vmalloc space on 32 bit systems, so vmalloc can also fail due to vmalloc space being unavaiable, even when there is plenty of memory available. i.e. on 32 bit systems vmalloc is a lot more unreliable than kmalloc(). IOws, while vmalloc might fix your specific problem on your machine, it is not a general solution to the problem of kmalloc failing large allocations when you run your system to OOM conditions. And, FWIW, you can reduce the impact of the problem simply by making your directory block size smaller..... Cheers, Dave. -- Dave Chinner david@fromorbit.com From tonytkdk@gmail.com Fri Jul 10 05:39:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=DC_PNG_UNO_LARGO,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1CD727F37 for ; Fri, 10 Jul 2015 05:39:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id F004A8F8040 for ; Fri, 10 Jul 2015 03:39:08 -0700 (PDT) X-ASG-Debug-ID: 1436524742-04cbb00fd00b610001-NocioJ Received: from mail-wg0-f42.google.com (mail-wg0-f42.google.com [74.125.82.42]) by cuda.sgi.com with ESMTP id j5AYLDGO82JD6gw1 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 10 Jul 2015 03:39:05 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.42 Received: by wgov12 with SMTP id v12so61228232wgo.1 for ; Fri, 10 Jul 2015 03:39:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=U39ggNiUSNZDvAsFmSSWOrGWVGfyqYj6MHfoWE6Z2v4=; b=D5SsjXhry+e5ZuY/yU0aDldivaw8/PTLkdlVgpFUYaa55qsabOGvAocR0VlU3RQxA0 T/KlFBHeozJzuch6AqsMVF8XumlzyE8TprBaC6FXweNsQ7F7FHKyY/79evMDGhg80ny5 UhkaJURjQBUy7fiSmSlchuWv3T11/hHFf+S3LHxj845EZeDZ3gIUsdePwT8DW6r2dTPZ WCqAt0tHFfADyOwhr3FGpy81gbVvZg+tB6WMNdJ25dmSfd0mqGVbsdYy5OSHKuSCQ82s ixUVqhSf38hrEHmdBHKbx3JwJfzUmy0wEa6yd27R3wblc8nsEfQJ0mxn2+dJg9BKFAai 3U7g== MIME-Version: 1.0 X-Received: by 10.180.90.42 with SMTP id bt10mr4919331wib.64.1436524742534; Fri, 10 Jul 2015 03:39:02 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Fri, 10 Jul 2015 03:39:02 -0700 (PDT) In-Reply-To: References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> Date: Fri, 10 Jul 2015 18:39:02 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Eric Sandeen , Hugo Kuo , darrell@swiftstack.com, xfs@oss.sgi.com Content-Type: multipart/related; boundary=f46d043c81d2fde631051a82fa30 X-Barracuda-Connect: mail-wg0-f42.google.com[74.125.82.42] X-Barracuda-Start-Time: 1436524745 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.63 X-Barracuda-Spam-Status: No, SCORE=0.63 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DC_PNG_UNO_LARGO, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20617 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 DC_PNG_UNO_LARGO Message contains a single large inline gif --f46d043c81d2fde631051a82fa30 Content-Type: multipart/alternative; boundary=f46d043c81d2fde62f051a82fa2f --f46d043c81d2fde62f051a82fa2f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable We observed this message this morning on the node. Is it possible a related issue? =E2=80=8B 2015-07-10 13:36 GMT+08:00 Kuo Hugo : > Hi Brain, > > Is this the file which you need ? > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko > > $> modinfo xfs > > filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko > license: GPL > description: SGI XFS with ACLs, security attributes, large block/inode nu= mbers, no debug enabled > author: Silicon Graphics, Inc. > srcversion: 0C1B17926BDDA4F121479EE > depends: exportfs > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion > > Thanks // Hugo > =E2=80=8B > > 2015-07-10 2:32 GMT+08:00 Brian Foster : > >> On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: >> > Hi Brain, >> > >> > There you go. >> > >> > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux >> > >> https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.2= 3.4.el6.x86_64 >> > >> > $ md5sum vmlinux >> > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux >> > >> > Yes, I can read it with this vmlinux image. Put all files >> > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore >> > >> >> Thanks, I can actually load that up now. Note that we'll probably need >> the modules and whatnot (xfs.ko) also to be able to look at any XFS >> bits. It might be easiest to just tar up and compress whatever directory >> structure has the debug-enabled vmlinux and all the kernel modules. >> Thanks. >> >> Brian >> >> > Hugo >> > =E2=80=8B >> > >> > 2015-07-09 23:18 GMT+08:00 Brian Foster : >> > >> > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: >> > > > Hi Brian, >> > > > >> > > > *Operating System Version:* >> > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final >> > > > >> > > > *NODE 1* >> > > > >> > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore >> > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt >> > > > >> > > > >> > > > *NODE 2* >> > > > >> > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 >> > > > >> > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj= 02.txt >> > > > >> > > > >> > > > Any thoughts would be appreciate >> > > > >> > > >> > > I'm not able to fire up crash with these core files and the kernel >> debug >> > > info from the following centos kernel debuginfo package: >> > > >> > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm >> > > >> > > It complains about a version mismatch between the vmlinux and core >> file. >> > > I'm no crash expert... are you sure the cores above correspond to th= is >> > > kernel? Does crash load up for you on said box if you run something >> like >> > > the following? >> > > >> > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore >> > > >> > > Note that you might need to install the above kernel-debuginfo packa= ge >> > > to get the debug (vmlinux) file. If so, could you also upload that >> > > debuginfo rpm somewhere? >> > > >> > > Brian >> > > >> > > > Thanks // Hugo >> > > > >> > > > >> > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : >> > > > >> > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: >> > > > > > Hi Folks, >> > > > > > >> > > > > > As the results of 32 disks with xfs_repair -n seems no any err= or >> > > shows >> > > > > up. >> > > > > > We currently tried to deploy CentOS 6.6 for testing. (The >> previous >> > > kernel >> > > > > > panic was came from Ubuntu). >> > > > > > The CentOS nodes encountered kernel panic with same daemon but >> the >> > > > > problem >> > > > > > may a bit differ. >> > > > > > >> > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in >> Ubuntu. >> > > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on >> > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 >> > > > > > >> > > > > >> > > > > I'd venture to guess it's the same behavior here. The previous >> kernel >> > > > > had a callback for the parent inode number that was called via >> > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a >> static >> > > > > inline here instead. >> > > > > >> > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at >> > > > > 0000000000000001 >> > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 >> [xfs] >> > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 >> > > > > > <4>Oops: 0000 [#1] SMP >> > > > > > <4>last sysfs file: >> > > > > > >> > > > > >> > > >> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expan= der-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/= queue/rotational >> > > > > > <4>CPU 17 >> > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs >> iptable_filter >> > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack >> > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt >> > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac >> edac_core >> > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp >> pps_core >> > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 >> mbcache >> > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class >> xhci_hcd ahci >> > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: >> > > > > > scsi_wait_scan] >> > > > > > <4> >> > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted >> > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform >> > > > > > R518.v5P/X10DRi-T4+ >> > > > > > <4>RIP: 0010:[] [] >> > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] >> > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 >> > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: >> 0000000000000000 >> > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: >> 00007faa74006203 >> > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: >> 0000000000000004 >> > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: >> 0000000000000000 >> > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: >> ffff8808715b4580 >> > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) >> > > > > knlGS:0000000000000000 >> > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >> > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: >> 00000000001407e0 >> > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: >> 0000000000000000 >> > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: >> 0000000000000400 >> > > > > > <4>Process swift-object-se (pid: 4454, threadinfo >> ffff880871f6c000, >> > > > > > task ffff880860f18ab0) >> > > > > > <4>Stack: >> > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 >> > > ffff880874749cc0 >> > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 >> > > > > ffff8808715b4580 >> > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 >> > > > > ffffffffa035ab31 >> > > > > > <4>Call Trace: >> > > > > > <4> [] ? filldir+0x0/0xe0 >> > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] >> > > > > > <4> [] ? filldir+0x0/0xe0 >> > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] >> > > > > > <4> [] vfs_readdir+0xc0/0xe0 >> > > > > > <4> [] ? final_putname+0x26/0x50 >> > > > > > <4> [] sys_getdents+0x89/0xf0 >> > > > > > <4> [] system_call_fastpath+0x16/0x1b >> > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 >> 85 c0 >> > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 >> 00 00 >> > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f = b6 >> > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 >> [xfs] >> > > > > > <4> RSP >> > > > > > <4>CR2: 0000000000000001 >> > > > > > >> > > > > ... >> > > > > > >> > > > > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore he= lp for >> > > > > > troubleshooting kind issue ? >> > > > > > >> > > > > >> > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 >> kernel? Can >> > > > > you provide the exact kernel version and post the vmcore >> somewhere? >> > > > > >> > > > > Brian >> > > > > >> > > > > > Thanks // Hugo >> > > > > > =E2=80=8B >> > > > > > >> > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : >> > > > > > >> > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: >> > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected >> filesystem? >> > > Note >> > > > > > > that -n will report problems only and prevent any >> modification by >> > > > > repair. >> > > > > > > > >> > > > > > > > *We might to to xfs_repair if we can address which disk >> causes >> > > the >> > > > > > > issue. * >> > > > > > > >> > > > > > > If you do, please save the output, and if it finds anything, >> please >> > > > > > > provide the output in this thread. >> > > > > > > >> > > > > > > Thanks, >> > > > > > > -Eric >> > > > > > > >> > > > > >> > > > > > _______________________________________________ >> > > > > > xfs mailing list >> > > > > > xfs@oss.sgi.com >> > > > > > http://oss.sgi.com/mailman/listinfo/xfs >> > > > > >> > > > > >> > > >> > > --f46d043c81d2fde62f051a82fa2f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
We observed this message this morning on the node. Is= it possible a related issue?=C2=A0


=E2=80=8B
<= /div>

2015-07-10 1= 3:36 GMT+08:00 Kuo Hugo <tonytkdk@gmail.com>:

Hi Brain,

Is this the file which you need= ?

https://cloud.swifts= tack.com/v1/AUTH_hugo/public/xfs.ko

$> modinfo xfs

filename: /lib/modul=
es/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko=20
license: GPL=20
description: SGI XFS with ACLs, security attributes, large block/inode numb=
ers, no debug enabled=20
author: Silicon Graphics, Inc.=20
srcversion: 0C1B17926BDDA4F121479EE=20
depends: exportfs=20
vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion

Thanks // Hugo

=E2=80=8B

2015-07-10 2:32 GMT+08:00 Brian Foster <bfoste= r@redhat.com>:
On Fri= , Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote:
> Hi Brain,
>
> There you go.
>
> https://cloud.swiftstack.com/v1/AUTH_hu= go/public/vmlinux
> https://c= loud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_= 64
>
> $ md5sum vmlinux
> 82aaa694a174c0a29e78c05e73adf5d8=C2=A0 vmlinux
>
> Yes, I can read it with this vmlinux image. Put all files
> (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore<= br> >

Thanks, I can actually load that up now. Note that we'll probabl= y need
the modules and whatnot (xfs.ko) also to be able to look at any XFS
bits. It might be easiest to just tar up and compress whatever directory structure has the debug-enabled vmlinux and all the kernel modules.
Thanks.

Brian

> Hugo
> =E2=80=8B
>
> 2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote:
> > > Hi Brian,
> > >
> > > *Operating System Version:*
> > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Fina= l
> > >
> > > *NODE 1*
> > >
> > > https://cloud.swiftstack.= com/v1/AUTH_burton/brtnswift/vmcore
> > > https://cloud.s= wiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
> > >
> > >
> > > *NODE 2*
> > >
> > > https://cloud.swi= ftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> > >
> > https://clou= d.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
> > >
> > >
> > > Any thoughts would be appreciate
> > >
> >
> > I'm not able to fire up crash with these core files and the k= ernel debug
> > info from the following centos kernel debuginfo package:
> >
> > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm
> >
> > It complains about a version mismatch between the vmlinux and cor= e file.
> > I'm no crash expert... are you sure the cores above correspon= d to this
> > kernel? Does crash load up for you on said box if you run somethi= ng like
> > the following?
> >
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0crash /usr/lib/debug/lib/modules= /.../vmlinux vmcore
> >
> > Note that you might need to install the above kernel-debuginfo pa= ckage
> > to get the debug (vmlinux) file. If so, could you also upload tha= t
> > debuginfo rpm somewhere?
> >
> > Brian
> >
> > > Thanks // Hugo
> > >
> > >
> > > 2015-07-09 20:51 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > >
> > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrot= e:
> > > > > Hi Folks,
> > > > >
> > > > > As the results of 32 disks with xfs_repair -n seem= s no any error
> > shows
> > > > up.
> > > > > We currently tried to deploy CentOS 6.6 for testin= g. (The previous
> > kernel
> > > > > panic was came from Ubuntu).
> > > > > The CentOS nodes encountered kernel panic with sam= e daemon but the
> > > > problem
> > > > > may a bit differ.
> > > > >
> > > > >=C2=A0 =C2=A0 - It was broken on xfs_dir2_sf_get_pa= rent_ino+0xa/0x20 in Ubuntu.
> > > > >=C2=A0 =C2=A0 - Here=E2=80=99s the log in CentOS. I= t=E2=80=99s broken on
> > > > >=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > >
> > > >
> > > > I'd venture to guess it's the same behavior her= e. The previous kernel
> > > > had a callback for the parent inode number that was cal= led via
> > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, = it has a static
> > > > inline here instead.
> > > >
> > > > > <1>BUG: unable to handle kernel NULL pointer= dereference at
> > > > 0000000000000001
> > > > > <1>IP: [<ffffffffa0362d60>] xfs_dir2_s= f_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0
> > > > > <4>Oops: 0000 [#1] SMP
> > > > > <4>last sysfs file:
> > > > >
> > > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > > > <4>CPU 17
> > > > > <4>Modules linked in: xt_conntrack tun xfs e= xportfs iptable_filter
> > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 = nf_conntrack
> > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO= _wdt
> > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit= sb_edac edac_core
> > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe= dca ptp pps_core
> > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler= ext4 jbd2 mbcache
> > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_= class xhci_hcd ahci
> > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last u= nloaded:
> > > > > scsi_wait_scan]
> > > > > <4>
> > > > > <4>Pid: 4454, comm: swift-object-se Not tain= ted
> > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics St= orform
> > > > > R518.v5P/X10DRi-T4+
> > > > > <4>RIP: 0010:[<ffffffffa0362d60>]=C2= =A0 [<ffffffffa0362d60>]
> > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4>RSP: 0018:ffff880871f6de18=C2=A0 EFLAGS: = 00010202
> > > > > <4>RAX: 0000000000000000 RBX: 00000000000000= 04 RCX: 0000000000000000
> > > > > <4>RDX: 0000000000000001 RSI: 00000000000000= 00 RDI: 00007faa74006203
> > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04b= c9 R09: 0000000000000004
> > > > > <4>R10: 0000000000008030 R11: 00000000000002= 46 R12: 0000000000000000
> > > > > <4>R13: 0000000000000002 R14: ffff88106eff70= 00 R15: ffff8808715b4580
> > > > > <4>FS:=C2=A0 00007faa85425700(0000) GS:ffff8= 80028360000(0000)
> > > > knlGS:0000000000000000
> > > > > <4>CS:=C2=A0 0010 DS: 0000 ES: 0000 CR0: 000= 0000080050033
> > > > > <4>CR2: 0000000000000001 CR3: 00000010723250= 00 CR4: 00000000001407e0
> > > > > <4>DR0: 0000000000000000 DR1: 00000000000000= 00 DR2: 0000000000000000
> > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0f= f0 DR7: 0000000000000400
> > > > > <4>Process swift-object-se (pid: 4454, threa= dinfo ffff880871f6c000,
> > > > > task ffff880860f18ab0)
> > > > > <4>Stack:
> > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff88= 0871f6df38
> > ffff880874749cc0
> > > > > <4><d> 0000000100000103 ffff8802381f8c= 00 ffff880871f6df38
> > > > ffff8808715b4580
> > > > > <4><d> 0000000000000082 ffff8802381f8d= 88 ffff880871f6dec8
> > > > ffffffffa035ab31
> > > > > <4>Call Trace:
> > > > > <4> [<ffffffff811a4bb0>] ? filldir+0x0= /0xe0
> > > > > <4> [<ffffffffa035ab31>] xfs_readdir+0= xe1/0x130 [xfs]
> > > > > <4> [<ffffffff811a4bb0>] ? filldir+0x0= /0xe0
> > > > > <4> [<ffffffffa038fe29>] xfs_file_read= dir+0x39/0x50 [xfs]
> > > > > <4> [<ffffffff811a4e30>] vfs_readdir+0= xc0/0xe0
> > > > > <4> [<ffffffff8119bd86>] ? final_putna= me+0x26/0x50
> > > > > <4> [<ffffffff811a4fb9>] sys_getdents+= 0x89/0xf0
> > > > > <4> [<ffffffff8100b0f2>] system_call_f= astpath+0x16/0x1b
> > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48= 8b 7d c0 ff 55 b8 85 c0
> > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f= 84 00 00 00 00 00
> > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f = b6 44 24 03 41 0f b6
> > > > > <1>RIP=C2=A0 [<ffffffffa0362d60>] xfs_= dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4> RSP <ffff880871f6de18>
> > > > > <4>CR2: 0000000000000001
> > > > >
> > > > ...
> > > > >
> > > > > I=E2=80=99ve got the vmcore dump from operator. Do= es vmcore help for
> > > > > troubleshooting kind issue ?
> > > > >
> > > >
> > > > Hmm, well it couldn't hurt. Is the vmcore based on = this 6.6 kernel? Can
> > > > you provide the exact kernel version and post the vmcor= e somewhere?
> > > >
> > > > Brian
> > > >
> > > > > Thanks // Hugo
> > > > > =E2=80=8B
> > > > >
> > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen <sandeen@sandeen.net&= gt;:
> > > > >
> > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote:
> > > > > > >>- Have you tried an 'xfs_repair -= n' of the affected filesystem?
> > Note
> > > > > > that -n will report problems only and prevent= any modification by
> > > > repair.
> > > > > > >
> > > > > > > *We might to to xfs_repair if we can add= ress which disk causes
> > the
> > > > > > issue. *
> > > > > >
> > > > > > If you do, please save the output, and if it = finds anything, please
> > > > > > provide the output in this thread.
> > > > > >
> > > > > > Thanks,
> > > > > > -Eric
> > > > > >
> > > >
> > > > > _______________________________________________ > > > > > xfs mailing list
> > > > > xfs@oss.sgi.com
> > > > > http://oss.sgi.com/mailman/listinfo/= xfs
> > > >
> > > >
> >


--f46d043c81d2fde62f051a82fa2f-- --f46d043c81d2fde631051a82fa30 Content-Type: image/png; name="r2obj01_sdh_xfs_error.png" Content-Disposition: inline; filename="r2obj01_sdh_xfs_error.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_ibxhpvg20_14e778b73ba749a4 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 Dueoz/VBp1bywvgnrIpQv7Erl89xcKtO0PPfFZnukupbcqrPCPqBVP/tI6k+k/lHQV7Pzqq2587K clLd6j2S6hwtx4bYx89BoNEG+3v1+Sr6XpPq5nFYKN9+/uv/eP9xI2Ijyj//+88fPmgXuvxhO9Vj 9uPJ3V8/bmi0d1GO/n2SqWSxK4uI2BIevxuy+672excXeu67MQ80zhpnYeA5GHiK0K5TL85SM275 vpPJsNeftH12X/2vRqr/55v7sfqsXsjsbZDDY6SaSMzv/T+vHn7+i08fc6o3f4xY2zv27nMAoXek SB4xgGhwi47+03dEJj3a2yKF3zln4jsyxhpX2QVhQBh4jRj40NI/NlIvXiJ/G2VYfVYv+Nsnv2iH V7xhUm31Wb1oQ5fDKhfbUkrwPX7nz07yuLPjkeVwINXWuN/9v18960fkWCRBGBAGhAFhQBgQBoSB N4eBj/7y0we7+c8it2/qx+qzejHOP/87O8CiBWNboPZN/Vh9Xm84LG+DHIJUv7lw/ZtcGlBdGldh QBgQBoQBYUAYuGcMWP6zEUqL1L6pH6vP6oVcLYJtBNcix2/qx+qzensb3gI5iFS/wfyfe57U6puM ljAgDAgDwoAwIAx8lzHwSKptx6Z+JANhQBgQBoQBYUAYEAaEAWHgWRgQqRZwngUcOWFyRIUBYUAY EAaEAWFAGHjCQCfVs+sq9bkkIAlIApKAJCAJSAKSgCQgCawlIFIthEgCkoAkIAlIApKAJCAJSAIX JfBEqv+/VpJ+JANhQBgQBoQBYUAYEAaEAWHgZgyIVAs0N4NGzpccUGFAGBAGhAFhQBgQBkYMiFSL VItUCwPCgDAgDAgDwoAwIAxcxEAn1b/5zW8e9CMZCAPCgDAgDAgDwoAwIAwIA7dj4AZS/dXDx3/w 7sO7v/P+w2cDAf/s4f3faZ//wccPX/3y/fb9uw/v/3LRkH/9+OG9H392jcDP6rGyrS32Q3V89uP4 7Hfee/j4X28T0uO70eed/r20c8J9Qt/av+/95VfXZHixnYNcLpbVJ+5rGL+3TSk8YfERkzeNI8+d bwKLzx3nGFfu61d/+V7r/+3z8bbxDN1U6Ztb5PcSOotklzGw1Je7Mn/hNt4m55lODfmT3roZ87v9 v/DcWzcet2Bzt9+lHdmYf7ktbyXObrPpL4Nt1Sk51hh4ItX/uz1w8vPVX5ghbKT57+nZf3kksu/9 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 --f46d043c81d2fde631051a82fa30-- From whittalh@yahoo-inc.com Fri Jul 10 11:00:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E9A327F37 for ; Fri, 10 Jul 2015 11:00:32 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C370630404E for ; Fri, 10 Jul 2015 09:00:29 -0700 (PDT) X-ASG-Debug-ID: 1436544025-04cbb00fc8114d0001-NocioJ Received: from mrout6.yahoo.com (mrout6.yahoo.com [216.145.54.155]) by cuda.sgi.com with ESMTP id rbeemj6q90IbVDDk (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 Jul 2015 09:00:26 -0700 (PDT) X-Barracuda-Envelope-From: whittalh@yahoo-inc.com X-Barracuda-Apparent-Source-IP: 216.145.54.155 Received: from omp1049.mail.ne1.yahoo.com (omp1049.mail.ne1.yahoo.com [98.138.89.234]) by mrout6.yahoo.com (8.14.9/8.14.9/y.out) with ESMTP id t6AG0E69073197 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 10 Jul 2015 09:00:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yahoo-inc.com; s=cobra; t=1436544015; bh=7U/cIn+o7Zvt7xffogrI5xh0bdnyV9n1j1Hf28hNQ5g=; h=Date:From:To:Cc:In-Reply-To:References:Subject; b=X8fAYUuajcaJklKcV5jLew+0eNvdkU1Bgngz6ufUkGz4ciQSojR4rY+EIJ3D2LFD3 /YQnF+p25JnMtW9kVx8SLMEhMlnqN1Abjgq5IMxqjq/DKPkwFqzSQLCpzVQAyluwus hOno2wDYIx94fNHrxNuGgkB4r4kYfdJAGtxLsXuQ= Received: (qmail 73468 invoked by uid 1000); 10 Jul 2015 16:00:14 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-inc.com; s=ginc1024; t=1436544014; bh=aok16kg7w09lNODUPh0hxxc2kRlInxf6e18zIOlofzM=; h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding; b=ol2JMlhYBkBkcumEQdDtWPD5bBJMZqWZGA0V1ADOubbeU1Enlxnvw2wlEqFRVqNyjmKxe/GihshxarX3Sr5DvkzgQZd5R1ySIr6yvsgyFfTyCDqjAzQQtJ0fvDqAq3reTNDev6MGrfacBnzUi25WVEwmN2ZkGQPk0T0DITOM8HE= X-YMail-OSG: xLQW46gVM1lnh4_xzAJmHAg2qNyVCpPhlifyINa.Gwr3QwweMndiMTGD_hiKSke FWlnUSXsSaDSR3hFR.tiUFSlHq4oENI3yZQdijBQSEudDEQK1iyQYYeBXSTEYNYxKSxTpmhDWcUW yegO0qv74C4sR2rUPUnXl9YU2ipOlQhdbpVFKQtxpv1V1ypQd0UUF3QntRab8S8hVJ6_SV8BFPWR 840Q8RRcC.GtbysYXpRwCR3ZQ5bGRUccbbAAmFSZ5zmqwq7RtMb8- Received: by 98.138.105.203; Fri, 10 Jul 2015 16:00:12 +0000 Date: Fri, 10 Jul 2015 15:59:48 +0000 (UTC) From: Hogan Whittall To: Dave Chinner Cc: "xfs@oss.sgi.com" Message-ID: <1741803883.2585541.1436543988567.JavaMail.yahoo@mail.yahoo.com> In-Reply-To: <20150709230222.GD7943@dastard> References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> <20150709230222.GD7943@dastard> Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mrout6.yahoo.com[216.145.54.155] X-Barracuda-Start-Time: 1436544025 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20623 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Dave, Thanks for the reply, we can certainly try with the smaller log, but IIRC the performance hit wasn't because the disks were busy, it was the controller itself trying to determine what changed and then write that to disk. Smaller anything should help the controller be able to cope better, but that's not really a solution. Doing disk write performance tests on these systems produce very different results, they are capable of much more I/O than what was being triggered with this issue. Back to why I think this should be considered a bug, by 2.9.6 setting 0 as the default for sunit/swidth and 3.1.1 having no way to set 0 for sunit/swidth the newer versions behave differently and don't provide any way to set the same options as 2.x.x. To me, that kind of behavior is a bug, especially when the new defaults provide horrible performance under specific workloads with specific hardware. If the newer versions are going to automatically calculate sunit/swidth then there needs to be a way to either disable that functionality or override it by allowing 0 to be set manually. If the only way for us to truly restore performance on these HP systems is to run a 2.x.x version of mkfs.xfs then how is this not a bug? We have a number of non-HP boxes running RHEL6 with hardware RAID, it's only the HP P420 RAID that is exposing IO size parameters to the kernel, all of the others show 0 or 512 and mkfs.xfs 3.1.1 knows to set sunit/swidth to 0 when those values are encountered. Not being able to manually set 0 when it is a valid setting...that's a bug, IMO. Thanks for your time! -Hogan ----- Original Message ----- From: Dave Chinner To: Hogan Whittall Cc: "xfs@oss.sgi.com" Sent: Thursday, July 9, 2015 6:02 PM Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication On Thu, Jul 09, 2015 at 05:32:50PM +0000, Hogan Whittall wrote: > Hello, > > Recently we encountered a previously-reported issue > regarding write amplification with MySQL replication and XFS when > used with certain RAID controllers (In our case, HP P420). That > issue exactly matches our issue and was documented by someone else > here - http://oss.sgi.com/archives/xfs/2013-03/msg00133.html - > but I don't see any resolution. I will say that the problem > *does not* exist when mkfs.xfs 2.9.6 is used to format the > filesystem on RHEL6 as that sets sunit=0 and swidth=0 instead of > setting based on minimum_io_size and optimal_io_size. The issue is the log stripe unit padding log buffers on log writes. Your workload like has lots of fsync() calls, which means log writes go from being padded to the next sector boundary to being padded to the next log stripe unit boundary. > We have systems that are identical in how they are built and > configured, we can take a RHEL6 box that has the MySQL partition > formatted with mkfs.xfs v3.1.1 and reproduce the write > amplification problem with MySQL replication every single time. Because the more recent kernel is probably getting sunit/swidth direct from the hardware via the kernel. > If we take the same box and format the MySQL partition with > mkfs.xfs 2.9.6, then bring up MySQL with the exact same > configuration there is no problem. Because that version of mkfs doesn't know about the kernel optimum IO size parameters in sysfs that are set based on hardware mode page support. Hence older mkfs is not able to set stripe unit defaults for hardware RAID automatically.... Your other option is to use a small log, so that the log writes end up being permanently pinned in the RAID BBWC, and so the bandwith they consume doesn't matter because it never hits the platters... FWIW, this problem has only been reported for HP RAID hardware, so I suspect that there is something the HP RAID firmware that doesn't handle streaming FUA writes (the log writes) mixed with other random IO particularly well. Cheers, Dave. -- Dave Chinner david@fromorbit.com From tonytkdk@gmail.com Fri Jul 10 11:25:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=DC_PNG_UNO_LARGO,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 702EC7F37 for ; Fri, 10 Jul 2015 11:25:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5747F304048 for ; Fri, 10 Jul 2015 09:25:45 -0700 (PDT) X-ASG-Debug-ID: 1436545541-04cb6c209e120aa0001-NocioJ Received: from mail-wg0-f53.google.com (mail-wg0-f53.google.com [74.125.82.53]) by cuda.sgi.com with ESMTP id NJAb9n01gvxSg6Ox (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 10 Jul 2015 09:25:42 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.53 Received: by wgmn9 with SMTP id n9so383600wgm.0 for ; Fri, 10 Jul 2015 09:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=2B1Gb3NutmYHw0eAzw6bZflat+E7iuA/5cLCwP3vdmM=; b=MdDCYOfsPJ2q7nUUAV1ACjRIuoiDLZyxWOAdNI25bLMKrN6cDVtStVyJoLgWOmH6RP T48/F9LO5bN6q/g8fdFqIhbF1wU5rj/P3tq8mVtfEbQSdp6X5vlizdrbJn/YK/FQZVgL MWxctDuj8UoXVcD/qW1CX+A59bK0Cfa9ai+gqJ0AvNy+jPBifeiu0DI6qANQx8lI6VeR u+0qgyKy8X83EiZZOD3LNkywt/xQ2+L5h1JpuVG0m4PG0t0gHDJbg6p8rTXtEB9vIIct fX0CmmENwtYxsxXvYQy6rFXPIt4NSfYpcA9HrgZwJ52nlg38z6cNX9KLfrG9QLK20kP4 mssQ== MIME-Version: 1.0 X-Received: by 10.180.8.129 with SMTP id r1mr2958773wia.60.1436545540872; Fri, 10 Jul 2015 09:25:40 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Fri, 10 Jul 2015 09:25:40 -0700 (PDT) In-Reply-To: References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> Date: Sat, 11 Jul 2015 00:25:40 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Eric Sandeen , Hugo Kuo , Darrell Bishop , xfs@oss.sgi.com Content-Type: multipart/related; boundary=f46d044402b4ab5a24051a87d248 X-Barracuda-Connect: mail-wg0-f53.google.com[74.125.82.53] X-Barracuda-Start-Time: 1436545541 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.63 X-Barracuda-Spam-Status: No, SCORE=0.63 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DC_PNG_UNO_LARGO, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20624 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 DC_PNG_UNO_LARGO Message contains a single large inline gif --f46d044402b4ab5a24051a87d248 Content-Type: multipart/alternative; boundary=f46d044402b4ab5a22051a87d246 --f46d044402b4ab5a22051a87d246 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Finally got the results of xfs_repair -n on all disks for this server. There's no any warning or error from my observation. https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/r2obj01.burton.com-xf= s-repair-n.txt Thanks // Hugo 2015-07-10 18:39 GMT+08:00 Kuo Hugo : > We observed this message this morning on the node. Is it possible a > related issue? > > > =E2=80=8B > > 2015-07-10 13:36 GMT+08:00 Kuo Hugo : > >> Hi Brain, >> >> Is this the file which you need ? >> >> https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko >> >> $> modinfo xfs >> >> filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko >> license: GPL >> description: SGI XFS with ACLs, security attributes, large block/inode n= umbers, no debug enabled >> author: Silicon Graphics, Inc. >> srcversion: 0C1B17926BDDA4F121479EE >> depends: exportfs >> vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion >> >> Thanks // Hugo >> =E2=80=8B >> >> 2015-07-10 2:32 GMT+08:00 Brian Foster : >> >>> On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: >>> > Hi Brain, >>> > >>> > There you go. >>> > >>> > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux >>> > >>> https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.= 23.4.el6.x86_64 >>> > >>> > $ md5sum vmlinux >>> > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux >>> > >>> > Yes, I can read it with this vmlinux image. Put all files >>> > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore >>> > >>> >>> Thanks, I can actually load that up now. Note that we'll probably need >>> the modules and whatnot (xfs.ko) also to be able to look at any XFS >>> bits. It might be easiest to just tar up and compress whatever director= y >>> structure has the debug-enabled vmlinux and all the kernel modules. >>> Thanks. >>> >>> Brian >>> >>> > Hugo >>> > =E2=80=8B >>> > >>> > 2015-07-09 23:18 GMT+08:00 Brian Foster : >>> > >>> > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: >>> > > > Hi Brian, >>> > > > >>> > > > *Operating System Version:* >>> > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final >>> > > > >>> > > > *NODE 1* >>> > > > >>> > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore >>> > > > >>> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt >>> > > > >>> > > > >>> > > > *NODE 2* >>> > > > >>> > > > >>> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 >>> > > > >>> > > >>> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2ob= j02.txt >>> > > > >>> > > > >>> > > > Any thoughts would be appreciate >>> > > > >>> > > >>> > > I'm not able to fire up crash with these core files and the kernel >>> debug >>> > > info from the following centos kernel debuginfo package: >>> > > >>> > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm >>> > > >>> > > It complains about a version mismatch between the vmlinux and core >>> file. >>> > > I'm no crash expert... are you sure the cores above correspond to >>> this >>> > > kernel? Does crash load up for you on said box if you run something >>> like >>> > > the following? >>> > > >>> > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore >>> > > >>> > > Note that you might need to install the above kernel-debuginfo >>> package >>> > > to get the debug (vmlinux) file. If so, could you also upload that >>> > > debuginfo rpm somewhere? >>> > > >>> > > Brian >>> > > >>> > > > Thanks // Hugo >>> > > > >>> > > > >>> > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : >>> > > > >>> > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: >>> > > > > > Hi Folks, >>> > > > > > >>> > > > > > As the results of 32 disks with xfs_repair -n seems no any >>> error >>> > > shows >>> > > > > up. >>> > > > > > We currently tried to deploy CentOS 6.6 for testing. (The >>> previous >>> > > kernel >>> > > > > > panic was came from Ubuntu). >>> > > > > > The CentOS nodes encountered kernel panic with same daemon bu= t >>> the >>> > > > > problem >>> > > > > > may a bit differ. >>> > > > > > >>> > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in >>> Ubuntu. >>> > > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken on >>> > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 >>> > > > > > >>> > > > > >>> > > > > I'd venture to guess it's the same behavior here. The previous >>> kernel >>> > > > > had a callback for the parent inode number that was called via >>> > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a >>> static >>> > > > > inline here instead. >>> > > > > >>> > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at >>> > > > > 0000000000000001 >>> > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 >>> [xfs] >>> > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 >>> > > > > > <4>Oops: 0000 [#1] SMP >>> > > > > > <4>last sysfs file: >>> > > > > > >>> > > > > >>> > > >>> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expa= nder-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz= /queue/rotational >>> > > > > > <4>CPU 17 >>> > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs >>> iptable_filter >>> > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrac= k >>> > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt >>> > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac >>> edac_core >>> > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp >>> pps_core >>> > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 >>> mbcache >>> > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class >>> xhci_hcd ahci >>> > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: >>> > > > > > scsi_wait_scan] >>> > > > > > <4> >>> > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted >>> > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform >>> > > > > > R518.v5P/X10DRi-T4+ >>> > > > > > <4>RIP: 0010:[] [] >>> > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] >>> > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 >>> > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: >>> 0000000000000000 >>> > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: >>> 00007faa74006203 >>> > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: >>> 0000000000000004 >>> > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: >>> 0000000000000000 >>> > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: >>> ffff8808715b4580 >>> > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) >>> > > > > knlGS:0000000000000000 >>> > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >>> > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: >>> 00000000001407e0 >>> > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: >>> 0000000000000000 >>> > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: >>> 0000000000000400 >>> > > > > > <4>Process swift-object-se (pid: 4454, threadinfo >>> ffff880871f6c000, >>> > > > > > task ffff880860f18ab0) >>> > > > > > <4>Stack: >>> > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 >>> > > ffff880874749cc0 >>> > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 >>> > > > > ffff8808715b4580 >>> > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 >>> > > > > ffffffffa035ab31 >>> > > > > > <4>Call Trace: >>> > > > > > <4> [] ? filldir+0x0/0xe0 >>> > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] >>> > > > > > <4> [] ? filldir+0x0/0xe0 >>> > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] >>> > > > > > <4> [] vfs_readdir+0xc0/0xe0 >>> > > > > > <4> [] ? final_putname+0x26/0x50 >>> > > > > > <4> [] sys_getdents+0x89/0xf0 >>> > > > > > <4> [] system_call_fastpath+0x16/0x1b >>> > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b= 8 >>> 85 c0 >>> > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 0= 0 >>> 00 00 >>> > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f >>> b6 >>> > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 >>> [xfs] >>> > > > > > <4> RSP >>> > > > > > <4>CR2: 0000000000000001 >>> > > > > > >>> > > > > ... >>> > > > > > >>> > > > > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore h= elp for >>> > > > > > troubleshooting kind issue ? >>> > > > > > >>> > > > > >>> > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 >>> kernel? Can >>> > > > > you provide the exact kernel version and post the vmcore >>> somewhere? >>> > > > > >>> > > > > Brian >>> > > > > >>> > > > > > Thanks // Hugo >>> > > > > > =E2=80=8B >>> > > > > > >>> > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen = : >>> > > > > > >>> > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: >>> > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected >>> filesystem? >>> > > Note >>> > > > > > > that -n will report problems only and prevent any >>> modification by >>> > > > > repair. >>> > > > > > > > >>> > > > > > > > *We might to to xfs_repair if we can address which disk >>> causes >>> > > the >>> > > > > > > issue. * >>> > > > > > > >>> > > > > > > If you do, please save the output, and if it finds anything= , >>> please >>> > > > > > > provide the output in this thread. >>> > > > > > > >>> > > > > > > Thanks, >>> > > > > > > -Eric >>> > > > > > > >>> > > > > >>> > > > > > _______________________________________________ >>> > > > > > xfs mailing list >>> > > > > > xfs@oss.sgi.com >>> > > > > > http://oss.sgi.com/mailman/listinfo/xfs >>> > > > > >>> > > > > >>> > > >>> >> >> > --f46d044402b4ab5a22051a87d246 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Finally got the results of xfs_repair -n on all disks= for this server. There's no any warning or error from my observation.= =C2=A0

https://cloud.swiftst= ack.com/v1/AUTH_burton/brtnswift/r2obj01.burton.com-xfs-repair-n.txt

Thanks // Hugo=C2=A0

2015-07-10 18:39 GMT+08:00 Kuo Hugo <= tonytkdk@gmail.com>:
We observed this message this morning on the node. Is it po= ssible a related issue?=C2=A0


=E2=80=8B
<= div class=3D"HOEnZb">

2015-07-10 13:36 GMT+08:00 Kuo Hugo <tonytkdk@gmail= .com>:

Hi Brain,

Is this the file which you need= ?

https://cloud.swifts= tack.com/v1/AUTH_hugo/public/xfs.ko

$> modinfo xfs

filename: /lib/modul=
es/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko=20
license: GPL=20
description: SGI XFS with ACLs, security attributes, large block/inode numb=
ers, no debug enabled=20
author: Silicon Graphics, Inc.=20
srcversion: 0C1B17926BDDA4F121479EE=20
depends: exportfs=20
vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion

Thanks // Hugo

=E2=80=8B

2015-= 07-10 2:32 GMT+08:00 Brian Foster <bfoster@redhat.com>:
=
On Fri, Jul 10, 2015 at 12:40:00AM +08= 00, Kuo Hugo wrote:
> Hi Brain,
>
> There you go.
>
> https://cloud.swiftstack.com/v1/AUTH_hu= go/public/vmlinux
> https://c= loud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_= 64
>
> $ md5sum vmlinux
> 82aaa694a174c0a29e78c05e73adf5d8=C2=A0 vmlinux
>
> Yes, I can read it with this vmlinux image. Put all files
> (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore<= br> >

Thanks, I can actually load that up now. Note that we'll probabl= y need
the modules and whatnot (xfs.ko) also to be able to look at any XFS
bits. It might be easiest to just tar up and compress whatever directory structure has the debug-enabled vmlinux and all the kernel modules.
Thanks.

Brian

> Hugo
> =E2=80=8B
>
> 2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote:
> > > Hi Brian,
> > >
> > > *Operating System Version:*
> > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Fina= l
> > >
> > > *NODE 1*
> > >
> > > https://cloud.swiftstack.= com/v1/AUTH_burton/brtnswift/vmcore
> > > https://cloud.s= wiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
> > >
> > >
> > > *NODE 2*
> > >
> > > https://cloud.swi= ftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> > >
> > https://clou= d.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
> > >
> > >
> > > Any thoughts would be appreciate
> > >
> >
> > I'm not able to fire up crash with these core files and the k= ernel debug
> > info from the following centos kernel debuginfo package:
> >
> > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm
> >
> > It complains about a version mismatch between the vmlinux and cor= e file.
> > I'm no crash expert... are you sure the cores above correspon= d to this
> > kernel? Does crash load up for you on said box if you run somethi= ng like
> > the following?
> >
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0crash /usr/lib/debug/lib/modules= /.../vmlinux vmcore
> >
> > Note that you might need to install the above kernel-debuginfo pa= ckage
> > to get the debug (vmlinux) file. If so, could you also upload tha= t
> > debuginfo rpm somewhere?
> >
> > Brian
> >
> > > Thanks // Hugo
> > >
> > >
> > > 2015-07-09 20:51 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > >
> > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrot= e:
> > > > > Hi Folks,
> > > > >
> > > > > As the results of 32 disks with xfs_repair -n seem= s no any error
> > shows
> > > > up.
> > > > > We currently tried to deploy CentOS 6.6 for testin= g. (The previous
> > kernel
> > > > > panic was came from Ubuntu).
> > > > > The CentOS nodes encountered kernel panic with sam= e daemon but the
> > > > problem
> > > > > may a bit differ.
> > > > >
> > > > >=C2=A0 =C2=A0 - It was broken on xfs_dir2_sf_get_pa= rent_ino+0xa/0x20 in Ubuntu.
> > > > >=C2=A0 =C2=A0 - Here=E2=80=99s the log in CentOS. I= t=E2=80=99s broken on
> > > > >=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > >
> > > >
> > > > I'd venture to guess it's the same behavior her= e. The previous kernel
> > > > had a callback for the parent inode number that was cal= led via
> > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, = it has a static
> > > > inline here instead.
> > > >
> > > > > <1>BUG: unable to handle kernel NULL pointer= dereference at
> > > > 0000000000000001
> > > > > <1>IP: [<ffffffffa0362d60>] xfs_dir2_s= f_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0
> > > > > <4>Oops: 0000 [#1] SMP
> > > > > <4>last sysfs file:
> > > > >
> > > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > > > <4>CPU 17
> > > > > <4>Modules linked in: xt_conntrack tun xfs e= xportfs iptable_filter
> > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 = nf_conntrack
> > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO= _wdt
> > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit= sb_edac edac_core
> > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe= dca ptp pps_core
> > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler= ext4 jbd2 mbcache
> > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_= class xhci_hcd ahci
> > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last u= nloaded:
> > > > > scsi_wait_scan]
> > > > > <4>
> > > > > <4>Pid: 4454, comm: swift-object-se Not tain= ted
> > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics St= orform
> > > > > R518.v5P/X10DRi-T4+
> > > > > <4>RIP: 0010:[<ffffffffa0362d60>]=C2= =A0 [<ffffffffa0362d60>]
> > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4>RSP: 0018:ffff880871f6de18=C2=A0 EFLAGS: = 00010202
> > > > > <4>RAX: 0000000000000000 RBX: 00000000000000= 04 RCX: 0000000000000000
> > > > > <4>RDX: 0000000000000001 RSI: 00000000000000= 00 RDI: 00007faa74006203
> > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04b= c9 R09: 0000000000000004
> > > > > <4>R10: 0000000000008030 R11: 00000000000002= 46 R12: 0000000000000000
> > > > > <4>R13: 0000000000000002 R14: ffff88106eff70= 00 R15: ffff8808715b4580
> > > > > <4>FS:=C2=A0 00007faa85425700(0000) GS:ffff8= 80028360000(0000)
> > > > knlGS:0000000000000000
> > > > > <4>CS:=C2=A0 0010 DS: 0000 ES: 0000 CR0: 000= 0000080050033
> > > > > <4>CR2: 0000000000000001 CR3: 00000010723250= 00 CR4: 00000000001407e0
> > > > > <4>DR0: 0000000000000000 DR1: 00000000000000= 00 DR2: 0000000000000000
> > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0f= f0 DR7: 0000000000000400
> > > > > <4>Process swift-object-se (pid: 4454, threa= dinfo ffff880871f6c000,
> > > > > task ffff880860f18ab0)
> > > > > <4>Stack:
> > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff88= 0871f6df38
> > ffff880874749cc0
> > > > > <4><d> 0000000100000103 ffff8802381f8c= 00 ffff880871f6df38
> > > > ffff8808715b4580
> > > > > <4><d> 0000000000000082 ffff8802381f8d= 88 ffff880871f6dec8
> > > > ffffffffa035ab31
> > > > > <4>Call Trace:
> > > > > <4> [<ffffffff811a4bb0>] ? filldir+0x0= /0xe0
> > > > > <4> [<ffffffffa035ab31>] xfs_readdir+0= xe1/0x130 [xfs]
> > > > > <4> [<ffffffff811a4bb0>] ? filldir+0x0= /0xe0
> > > > > <4> [<ffffffffa038fe29>] xfs_file_read= dir+0x39/0x50 [xfs]
> > > > > <4> [<ffffffff811a4e30>] vfs_readdir+0= xc0/0xe0
> > > > > <4> [<ffffffff8119bd86>] ? final_putna= me+0x26/0x50
> > > > > <4> [<ffffffff811a4fb9>] sys_getdents+= 0x89/0xf0
> > > > > <4> [<ffffffff8100b0f2>] system_call_f= astpath+0x16/0x1b
> > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48= 8b 7d c0 ff 55 b8 85 c0
> > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f= 84 00 00 00 00 00
> > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f = b6 44 24 03 41 0f b6
> > > > > <1>RIP=C2=A0 [<ffffffffa0362d60>] xfs_= dir2_sf_getdents+0x2a0/0x3a0 [xfs]
> > > > > <4> RSP <ffff880871f6de18>
> > > > > <4>CR2: 0000000000000001
> > > > >
> > > > ...
> > > > >
> > > > > I=E2=80=99ve got the vmcore dump from operator. Do= es vmcore help for
> > > > > troubleshooting kind issue ?
> > > > >
> > > >
> > > > Hmm, well it couldn't hurt. Is the vmcore based on = this 6.6 kernel? Can
> > > > you provide the exact kernel version and post the vmcor= e somewhere?
> > > >
> > > > Brian
> > > >
> > > > > Thanks // Hugo
> > > > > =E2=80=8B
> > > > >
> > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen <sandeen@sandeen.net&= gt;:
> > > > >
> > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote:
> > > > > > >>- Have you tried an 'xfs_repair -= n' of the affected filesystem?
> > Note
> > > > > > that -n will report problems only and prevent= any modification by
> > > > repair.
> > > > > > >
> > > > > > > *We might to to xfs_repair if we can add= ress which disk causes
> > the
> > > > > > issue. *
> > > > > >
> > > > > > If you do, please save the output, and if it = finds anything, please
> > > > > > provide the output in this thread.
> > > > > >
> > > > > > Thanks,
> > > > > > -Eric
> > > > > >
> > > >
> > > > > _______________________________________________ > > > > > xfs mailing list
> > > > > xfs@oss.sgi.com
> > > > > http://oss.sgi.com/mailman/listinfo/= xfs
> > > >
> > > >
> >



--f46d044402b4ab5a22051a87d246-- --f46d044402b4ab5a24051a87d248 Content-Type: image/png; name="r2obj01_sdh_xfs_error.png" Content-Disposition: inline; filename="r2obj01_sdh_xfs_error.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_ibxhpvg20_14e778b73ba749a4 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 Dueoz/VBp1bywvgnrIpQv7Erl89xcKtO0PPfFZnukupbcqrPCPqBVP/tI6k+k/lHQV7Pzqq2587K clLd6j2S6hwtx4bYx89BoNEG+3v1+Sr6XpPq5nFYKN9+/uv/eP9xI2Ijyj//+88fPmgXuvxhO9Vj 9uPJ3V8/bmi0d1GO/n2SqWSxK4uI2BIevxuy+672excXeu67MQ80zhpnYeA5GHiK0K5TL85SM275 vpPJsNeftH12X/2vRqr/55v7sfqsXsjsbZDDY6SaSMzv/T+vHn7+i08fc6o3f4xY2zv27nMAoXek SB4xgGhwi47+03dEJj3a2yKF3zln4jsyxhpX2QVhQBh4jRj40NI/NlIvXiJ/G2VYfVYv+Nsnv2iH V7xhUm31Wb1oQ5fDKhfbUkrwPX7nz07yuLPjkeVwINXWuN/9v18960fkWCRBGBAGhAFhQBgQBoSB N4eBj/7y0we7+c8it2/qx+qzejHOP/87O8CiBWNboPZN/Vh9Xm84LG+DHIJUv7lw/ZtcGlBdGldh QBgQBoQBYUAYuGcMWP6zEUqL1L6pH6vP6oVcLYJtBNcix2/qx+qzensb3gI5iFS/wfyfe57U6puM ljAgDAgDwoAwIAx8lzHwSKptx6Z+JANhQBgQBoQBYUAYEAaEAWHgWRgQqRZwngUcOWFyRIUBYUAY EAaEAWFAGHjCQCfVs+sq9bkkIAlIApKAJCAJSAKSgCQgCawlIFIthEgCkoAkIAlIApKAJCAJSAIX JfBEqv+/VpJ+JANhQBgQBoQBYUAYEAaEAWHgZgyIVAs0N4NGzpccUGFAGBAGhAFhQBgQBkYMiFSL VItUCwPCgDAgDAgDwoAwIAxcxEAn1b/5zW8e9CMZCAPCgDAgDAgDwoAwIAwIA7dj4AZS/dXDx3/w 7sO7v/P+w2cDAf/s4f3faZ//wccPX/3y/fb9uw/v/3LRkH/9+OG9H392jcDP6rGyrS32Q3V89uP4 7Hfee/j4X28T0uO70eed/r20c8J9Qt/av+/95VfXZHixnYNcLpbVJ+5rGL+3TSk8YfERkzeNI8+d bwKLzx3nGFfu61d/+V7r/+3z8bbxDN1U6Ztb5PcSOotklzGw1Je7Mn/hNt4m55lODfmT3roZ87v9 v/DcWzcet2Bzt9+lHdmYf7ktbyXObrPpL4Nt1Sk51hh4ItX/uz1w8vPVX5ghbKT57+nZf3kksu/9 RSN5p2WQkTt9dtGevw/yzu2w8tCWP2jtNJLvdTw6A+/ZZ2bE/+W8n9yPTh6vtPfKu4V8H8fh9r6c j8++bF6LXF7D+L1kn6+W9SgzGrforzuApxh5oblzWs8+Bs7bHGV9Yxh+CZm9RBmQaQQmum76zcPL zOWXbONLjv+xXYc58E3gsdf5lo7HzL5dkdVNdnqGgbcVZy+JWZW1rdev4PGO372JVHfSSgR6MAqD MkAE+73H6PFv//7DH/5fiBhHZDueByHPRA0k3iPPTNzPSPVffNyi5y267ANn7Xj/4eNMREFovOyR oD7V+/7D+4hUW1mp3mn7XhIwlTLM/V/0BWN2kCE5IY/fsQzS2MV3U7m8VH97X8/Hbyn7QR7s8NX9 GmX0mpyViVGr5s97P36/r7g8zg2sEsX8MVK2iwHUeyjz0XhkOQ4O84uP65Pjncnksh1TfE/Gs7d7 QQJO5vKjHAq5X5HJBlk603m3YKPWq29yDhTyz/OgHNtMdhHxhk5P3z8XHxvjMdUN03lVYeZGme+0 61Ycrkh1cu5rm/7Cc+HW9uv5jcCLHIK3wSG4jVTDyFCkxYkw/q5IdSe3ILiRmkEktVT+PtGfCM5A uE9J9WctOh3vWjmtfZ8xqU4KZih7+C4pc6531b6XVACFMhyiPau+uENxlPcjYRi/G0lONmK0CuAk r/j+Jfrc+7IzfhNs7PR5gcmXiRweldu0XB6/wBfm07gy9MyxhMH0OUopXLyyE07ya4sinkWqSwzT /CWHenS8z3C4SapX9Wc8XcD5KbY2dN4t2FiSap4DSx1yxVCfkeq5Dhpk1UlzgYkd/TfM96f+nI7H Skeu5tUBMxVOF/r3TZPqhumnebWvZ94GAqM2XJmfevd14KeT6q+//vph5+fLn1nqwauHT/35Tx9e mcH72ZeP7/7dK48ov/q7p+/e/ZNPqdzH5/tn8Tze//RPLBKHsqM98UyPpv4q10Pt/lWkorT2WFne Dnu/teGx3U0pt/f599zu/N3QpqF/i/ZtynJH3l9HnxBpxr+PMl73ZRyPcXwPMiDZYVx57JZyean+ bo5fl9st2CC8rvoFeXdMv1DfDvJGuSz3NB/GttRzx3CwHMthXL/2edHnWMdWmnMv1Oc+TqkNB9wu 2rGaqxVOxzmVZMb94rm8lMOijBvlVOq3qowFrjsuV/N1qVeP/VnLeM8u1LrsWNejDCZ6mPsUv3cd /gevHl61NL7+94YuP8PH2Xg8e16FXXzSMxsyL/QAdPyWnTjDYmVHmqP9ZX8v2uirlqQPTm36FXzo 3RcZ27Ox1/db3PalxuJmUg1Dn5Xbi5PqZOhYGU/JIikmU4hmgPjfUZlTKgrSS+J5PPdk/EPJLAzx 0L6XBHFlPEnpPSr+VV/g5JyQ6sEQnBuB0bl6IeW4OX5PjsbjuBwNdd3nHWfhzBA/d+LdQqqfjCmP ww2kmsdyRarJEX7C0Gsg2GeketGOFb7Px2qTVC/l8HKkeoqB5GCB1Kx13jk26mDFbG7XOuS5eH98 j4naU/nTgMCgg7583AsDnRyBkf53EMIr+Dgbj+P3JLvlvMoyPtenA5ar4M1Vm1LMwTy2j3ijINlW oOyFdP/V/un9N0ocr+mF+8bME6n+X62jWz+Pyq5Hf0254T1WBv+LFEkvN33GEZX2TI8ctN8HhZa+ G0g1tzl7+00RI2I9jVSnPu/Wu3xuS46b8uY+WbmIYtkKQCGnYQyH8Rjry+0foqLF2L2R/j5z/Bg3 U2z4mBwxuZbD5hjtjHcex3hnqD/Nh+WY0Ngu+5DqHWRVYj8ckp0+bT9DK1pDvxuBL8oAUTpE4Q/P VjqGx2zx/encgBzO6rgBI4s6q7lc4dqJsslhGNd9vbo1B7bH9azva9mdzT3vf45Qx98eBT7Tf6UN ojbfOB6DzJfzKvf7Rr1z0q49O53GZqJ/eln4Hhv6bUWY7I07QmfyfDHcnOFK3z8LAxqfTY57DV/P INVBeEO5dSW/NQGTcqkMg0Vhu7JMhi2W/LZItZXtbSyWGpOCGZT7ok1cLxv+rmzQvpcE70EZhlOD ulZ9yUqwWF6tjVNhDFdyean+5vZNxm8t+w2MhUFmcrJnpK9NtiHySMQIdXeHKRzVkXTUxMmNHVZ1 KqKxMv6ZxL8OY+7YAGZBouNvOOSrdtyC71tIN/d1KYcXJNWQAwUijg7EWudZTrUFMZbYWM7Vs7l9 DGg834CfyG6FWw4gJF3XUwwPzsWJXA74SDjMdue58+pAPucyL/XO65iHS1LNcqjnpkj1Nd3//Dmk er9tsnsWqX5afn8krL3Tp5FqRKMjb6spMSw52ZLnK+R7Dob4cUnq1Z9QvvZM6QyKY1QOh6jIkLc4 RueelhRTm4Z6QRSK9r0UySyMBkcPDmQs0kAeFWD8wDAgRaQilDj9o49lbQyncnmp/m6P34nsp32e GPnh+YTpl+pblPOEd1pqRR0gdw3rOG+dnVaeK5/mOTDrw1mkOs2DwUl+0b7nVIAUpV61YzpXzwhv nX7gfczyW9Q/yP2yTEbsDgSxOx9znffeDjaWenUis4U+fL5ROxsfcggPOogioxFoeQperLHzpP82 6k8yH8dj0b6TeTVi5ka98xpJdbU3ZwxSPK2GVvPkZeeCCOPz55Zk97bKrpPqX//61w/6kQyEgW8Q A794dBzf++kXmovSRyMGhA3NCc0JYUAYeOsxIFItkL71IP3OEH0RJ2Fxpo+EDWFDtkoYEAbeegw8 ker/2SJ0+pEMhAFhQBgQBoQBYUAYEAaEgZsxIFIt0NwMGjlfckCFAWFAGBAGhAFhQBgYMSBSLVIt Ui0MCAPCgDAgDAgDwoAwcBEDnVR/9W9fPehHMhAGhAFhQBgQBoQBYUAYEAZux8DtNyrq5iLdXCQM CAPCgDAgDAgDwoAwIAwMGOik+ot//uJBP5KBMCAMCAPCgDAgDAgDwoAwcDsGOql+/88+ftCPZCAM CAPCgDAgDAgDwoAwIAzchoGvW9R+INXf+973HvQjGQgDwoAwIAwIA8KAMCAMCAN7GDAHxP4TqZYj IUdKGBAGhAFhQBgQBoQBYeCZGLAotUj1M4Unz23Pc5OcJCdhQBgQBoQBYUAYuHcMKFItQi2PVBgQ BoQBYUAYEAaEAWHgIgZEqi8K8N69LvVPkQVhQBgQBoQBYUAYEAbOMSBSLVItz1QYEAaEAWFAGBAG hAFh4CIGRKovClCe27nnJhlJRsKAMCAMCAPCgDBw7xgQqRaplmcqDAgDwoAwIAwIA8KAMHARAyLV FwV4716X+qfIgjAgDAgDwoAwIAwIA+cYEKkWqZZnKgwIA8KAMCAMCAPCgDBwEQMi1RcFKM/t3HOT jCQjYUAYEAaEAWFAGLh3DIhUi1TLMxUGhAFhQBgQBoQBYUAYuIgBkeqLArx3r0v9U2RBGBAGhAFh QBgQBoSBcwyIVItUyzMVBoQBYUAYEAaEAWFAGLiIAZHqiwKU53buuUlGkpEwIAwIA8KAMCAM3DsG RKpFquWZCgPCgDAgDAgDwoAwIAxcxMApqf7+978/CPn7/z7+/nfhceHf1pD+HRpF31XeSVnW5jt4 19o3tNHe5zJSebk/3q5FH37wgx889Z+eGz7nQUjPHGSykA3KRBt7Wyfts+97O+IZrm/4PY1jOR54 ZiG//t7JOJ16oxNZluOzALk/P2nLARcz2UN2MxnF9z/4D4SF3KaMu8CVjw/eZyy17w/YqvqRx+Kq 3C8qjNNxVfkySsKAMCAMCAPfUQzUpLoZ7h/9px8dQMEkgAlLRTaGZ4OIZ9J4IL9EbgYy2j7/4Q9/ 2NsDIl0SyEyio+4f/sen9zMx8PLgLBAQ8FnVF5SR25VJuv19KJ8IMOQIGa7agTrtGSbUTNy8Pu5L q2tFrvN3szFGv3L7uP3bhJgcMsbOkrSmCVo+a30Nkp0JdcdeyMb7Qe04ODDVd7kNiSTn8ZkR0OwI ZQcNbWHMVg6WCK6WUoUBYUAYEAaEgbcHA8tI9c//5ucPn/z1Jw8f/+XH/m8mwZnUOtFL0TwmnZ3w TaJvP//bn9dR8UZmrP5P/+5T/9fa9dHPPnoki4gQtn8//ouP/Tt/ppVl7c4kkyPc02hzEFMmZkyM rY+ZKA8krb1v/bbPrE3Wjk9/8enoFBDx7W0KsmxtNkKVZVkRbhAv1F8RW/QT//qYEGncmZBZVtYf 4OJH/5kcsM1IKsr74E8/ePjkrx7HaxrVn3i8+XmTheGiYyMcGh4Dx1Fr+4d//qH/y+OG8oCvg1yC tGcZD+NEUWnGWnZSra3Whs9++ZljFjjtjlzMI5Mxvp9F5HfGT8+8PUpXY6GxEAaEAWHgPjFQkmoz 7EZ0nJQGaTWi4qS3/c0kokcqJ1E7AOcQ+eaUhkbGrWwjWEa2PBKLiGL7jkkp6gbBRvlGlj77+88G El2SNSLhnMrQ600pABwtzA5Cjjhaed4+Tm1of1s7PvyzD8flfjwbxG9Iq0iyyYTW/h7qSUQW7TxL dalI2uydTsgbGQShZqWQnYozhWFyNbL7xT998axlMnZErC7D1wc/+cAJaE+fIQwZXuC0wdn5/B8+ 73WzY2D960SX0kt2o+pV/ZCHO2TULsMFHK78Hoi24efzf4y2bjotZ/LX9/ep0DWuGldhQBgQBr45 DJSk+qOffuQRNJAuIwFGqiyydpaeAOLBJHrIeyVS8O7vvNtJzRCRi8gkSIaRIY70GmDsMxAfq9Pa ZsSaic9ARqqc78h7zUQSUehqyT1H45fR1eirydKcEk7xGKLsRU72TipFj5afpCr06Cccn3h+J8qd ibf1AysAndw/I3fKo9yNLHZHZDIWK+UwjHUbe8Ot446dkiCwhg2rj8fLx6TJJDtLXmcmr7O0IkpL Wr2XU3TQL3MEM7Y7ASdH1frWI9bPkLeU7DenZCV7yV4YEAaEge8GBkpSbUb+/R+/P90Ahui1GXmP 6jWCawQFkT8QFyOTiHb7sxYtjKVukBZO6bDv7Hkn9EEcjIwYGTJSwSTK3rPPOFLOhM/KZ2J6IDWI WBNB+d3/83e9fpBG9M/+fue33hkiqtZXJzpB+L1fVGYnau0ze87aW5Eue8+IFepyokkEzkgi0gRM 1iCiORfanYz249F5S4FJBNLKhONi9VmZ9nPI283kMUXu7d2cCoRxyVH6lRLp5RQOxY7yyc4M8IV3 ebXDxh4Yte9NjsNqC6XiIApfEV2shtjYeqpRk7c7miEjtMlkbxgeVnsIz+4MxTs56p9TdWzcLIre yxKhftbKxg6m9Mx3w+hpnDXOwoAw8LowUJJqEDOkRAxkMEiXEzzLs4aRj5xmJyx04gGTBiMSnsph BJNIL6ebVJFf5Elz5NiW+nn5HikATmiCNBpxWuVNo185KuzEvpUBcm0EyohxdwRaH43AM/m1ejMR 684FlcXOgud9t7JZhtZXT2Egotcj3CE/q4ujq1avt4dSSVwGlHKCVBjUZWQducPlZksaV84ft3KQ lwyHAmk3uyC18izVh+XsDhjLYkUeixQIOGQ5Dx1/w2kxOeUIeR5/6485lbzaAhkZiQYufMUkxotX dbg8ODizTZi84sLyG+ZB66/vbdiVj4i3iLcwIAwIA8KAMPDGMVCTastPpmhxRT5BvD06Gkvrlh8L cgeCZwTaSEjfBBYRVf+ejudzssZR2iBOINxWR48INlKGDYu9HEqBQDQSJKTM+17kpjLZtfoRAUZU 1/pofQXBBDECWctOCIgVk160EaQMjoPLMpwVpM1gkyY2YvYcXMo9d+fFSBfnc1P6gI9DRFc9yt/6 0N+x/O6UE1+lxFibEVXn8fN8+0YuTx0YmuAVmewEdUMR5Lz+g4PSymBngfPys9NywGJsZuSoN363 ecHy9+h/2mALpwPzgnO5h9SUcJL6+wtMwjndSQvadW70nKI1woAwIAwIA8LAy2Fgmv4xkOMgv5wC AVLERLeKtCE9BN8hTWEYxEYmZsvgIHJVVNxIbD4qjcsFiRxSJYpTNzJ5YsJ3IJdxoocR08PGMiZF 7BTEiSWDfMwxiFQNjlRzaoBHQnGKCVYIkpPCG/ZASqsUEU+zIaeF3+MxPJA29CPSFUAUuS9wrGZE PDsT9jdODunkuNXT04XOSDXJFu2wsc4rF5yO47JZnC7DxJodmxxhzsQ/rwCws2dlDqk/tJIAmaCu iiwfnMjUfinCl1OEkqVkKQwIA8KAMHAVAyWpRg5vLtzSCbAkjuX2ijAN6QKJUCLlwJ6xSCJIsZGi IUIbBMTIHzYhcp6snYbAG+ZAZvLSO2/u4sj4SnCeV53SMjjCOKRbFOdbW9mcq4wotH8eG9us34g8 2+fVsWxWp9XFaSWVnPLGPIsme7pKkFPrt6VbHFYf8D1fIkNpH3lsTbbenkjf6YS2yas7YWnFYHAS yOkYTtiIoxGtzUO0f0Ku88ZLlyXGLOXSgywPKyGLiLA9j1QLdsYwnh33UU8fW/vbVjWQDhLR/yH9 qXDoeHz5VBBgBZ8hf/+W1YCrykHvy8AIA8KAMCAMCAP7GKiP1Iv0Cmwy9BSMSPEA0TIS5bm0QVBw OkiPFsamPSYh9iyWxvMg2XN4l0moPccEDO9Vz3CuKwgOTt0wclcdgeeEllIf7DlvcyPV7/w2bU6M /nh7In2CSRDSXCrSY2UdNr618jg/F+1DZBrluIMTRwUasWPShvQQpHFw/yBnOBk9RzzIn/XD5M1O R3XsITspTs5bLjsT304kEUVN0fqcc9yJeJNJJ/nxjhHHW4/YY4LNUeF82Y87GsiDT6Q6jz82dOa8 Zsdv5JR3HNJ56CDkfVOqEXTKta/2C3SynxwIftbww3NNCm5fwUlWkpUwIAwIA8LAm8LA/PKXRiA4 X9rJV4pCwtgb8bPvQf6YpPCJFdYp3zAWJ2E4kYxLLhBNzc+7IIiM9/ziFpnM0V0jKEYU7Rm/BKSR tEyuOF0kkxw74s9JUJxp/OqPXg2Xg/CgYJOeR47tTO/2L2+kBFlHf/kcbSbyVpf92CqAR0hxNniQ LGsvopQmZ8iQyTAcD0S+u8OTiBryiuGQWHm4yAYR9OFiGEpXQN/sJAo4QEh94FQhjBdHsdnZ6eec tzEFefVVBjtFBSeknKR/DCk/nEPesOQbEdMGWvsbkfq+GkL56Ggrxp/TaLqjEfV0/IaThbbzOdfY gGnfwdnsediEeaSk5OMh2ZEZTnyhU0PelIJQPTJGwoAwIAwIA8LAHgaWNypWkTUIlk/4sOdWt/8h opoHZch1tnSQ4irx5ckUTL4okoz0Ez41YwWI2ckMfCwe3s9t9lNM6Mpr/H7TMv0kHYHTaKz+Qz2R ZpKPh8vyznnaXRZU7xCRTsfoed3FZyiHiXjGDKfsrMa/uohmNWYcVa9WIKxe3GqZiX4u94DdWV+R WsJySykd2SmB7KoxGfqc0lYYP7ccVSjFt6f4JCfJSRgQBoQBYeClMVCT6iIvtRMrkNcJEezH8FFU +0DO07sDUaWrupnIgUSBwPfzfPmGupTffCDziXgfhNm+HwhikKsZ6Z6lkzBpHVILiHxz3bwhLRPY HP2eAQAR56FcyDKlZGQC3cn6ZEwPpJRSSFaAzON6IPOtnINsV21IEex8AoiVP5MDvuvOUUWcY/wx Zpb+A1kdnKTCmer9jT6UY8eRdUo7OuCkiNZXzutLKwSVJyMjDAgDwoAwIAw8DwN7keqCRHXCuiBB OUKa83OZZK0iobPvKjLukVEQpolzcAaWQ30p7WUWPe/Xgwe5Z9LHUW92CDLRnEW4+8oAiD9tbsxk zollsYFyJ3p+RuK5XF5Z6CkZlqJARyXm/q0i19mhmI0TO0t+FnmkEFXP5/SNWyPiXGZZT8J/Xh3h tvYUkU3nheVb3vp4kiZzhnN9/zylKblJbsKAMCAMCAMVBtakmqN5Kdp5iF5WJC9vvsLNc/ZvIqpV +sFZhBttKAkkEy2KiA6kuyIliygjt3EgOZVs0ikahwh0EE+OUlfR0MOgZbll8lwQtllEfZXyMXWA cr/Oov8r4kfveiQ5nZV9qrRyX09kA5ysHDjGZZW2VGFt5oTNbm28tV/L9opYv/HD/U/HT2OiMREG hAFh4DuJgenpH5mwnkVvnTRW0VEitz2SW5D1afnFZrkheshL6IuIZXcCiIhV+b/ZYHYiNjk6b2pg J8v8uwRpSGNIZBF1cq7tIaUjZHyak15FTVlGFPXfIhOzKOwNaR2riDX6uYrcDjJeraRwPjQ7fKQM V1HwEhtRX+kg5Kg2OxHJwZhd4rOLnwEj0Z9pOk5sBi4dBpJRuW/iDCsvhIebVxjgHHM6WXJkOTBQ yrVYocvBgFlwYJDlDvbz+G8Y5LPxnDrkaY9ENe6HoElq33JlsQgY9Dk9WdnZ0i0bMlE5ih4KA8LA N4mBaaR6IGOkJDmyWhnugVyHAh2WsfNmxCLaiBxfPsd6Rnbz5yCaHJU8RBw3jBz3Px+5djpgRIKZ iKwI2qpMTpnwlJq0MXQ3H7cam8FBobSRvGkUYwK5ZplkElmliZylflQy6CQ64YaNeplOE0TRyqxw dBa17nsDQEj55I2Jk4P2dxnhZJuUEpNXDqYrFK2eK/g5bHak1STGQpVmMrTJyCU5whnHsw3BlaN8 cGRp38JsdQTt28WPz5HdzbaT1Y7dVRyM+aAvOJBAuM19v3llhkjlTv96SpbpCzhw7ChUAQbG9qbD bf3i8/cZW5wKlufs4BToZJvvZFTv1JbKkRIuvmUYmF5TzkffGfD9whO6UKSfekFRMFOay019HL2t Itgb0eCZYfW640IVO+rNjlabRZ9y1CsTRHsXx73dcnV2FUG3o9xw9Nw0IpRAAxLRr0WPS1FwhrUd hWd989MtIpUGx/Hh3GO7HGdQWBPygAiSyQDnZlufcUyiH8PXjrpjGUE2OB8bx/uhvZks9HO0z1YS Qg4dQ63NOF8ax8/5dfUJJ45Vw6cdpxdHIuI2xfxsXi1ho88niti49WMkM/lYEbEgoJXz6djFCkIj W7hkCfJjbEOGz8FPH/eKNCFKmfqAMcJ445jEw7GVcZmTtZlly2NWGcoSEw1bNp58HKEfuZjSgG7F D/cf86PrAqwknOifwZmJ9mR9Ap1TzbOS9FaR8uTobEXkeeyKFQ7gCMec2pj6xUp21CQi+OR02DGk fBHVKsLteh+OUBonXJqU5yhwws7bcn59y4yoiKEio8KAMAAMTCPVIE7+YFOkRuhwAUV56sLkJIMy 9/hsKZEM6xB1KiInOSoIBwBnZh+MFIzK4pzifPMgnyNcHftXTSh7zgzVrZeZZAM9XOsebc9Xv/P5 1ogoW924FXKIWFLEKpMvvnK7R/eTI2Ry5TOyrT6cZ17Jwc9ZxvnbFD0+U0LdQYozpzHOOIMcEWg/ c9uuX6ec7MONoDmyXJBiJog4Z7pj6CwvHM5AQb4qfHKU3M4n5zOse+TzIn6Y5E7JL+Epn48OGWD+ W3lGtHHVe9YBWEEpx5Xms80LvmVyiO4X8/s5+MmrDOjDgHd2OCZHKB5WM5iQVlHcSdqQtcf1xiSo cDYXpt9nco362+c2foat3vdwUF0n0Hs4b7+T7SKwwc4g2sIbgG3ss71wZz0fNRrtu2l+iWArUikM CAPfIgzUOdVNGfbrsEMB98hC0bnSaCcC1Q0UKe18esQyPSJF3VbL9x5ljRv+coSqjKJNIqh412+T tAjp4qzmXK4Zjk72UD5FeVaGlE/v6BFPkhtu6eMoa5YdLslZGuxENofbAuH4kBNiZQ23QxIpAzHs S/VNVrhkxqJkt9wIWC2Lw7CbXNlR4fHF7+yI9KgaXTIEonGIJrf+WD/MqTJCYnXlJevsiMxIZBXt q1ZZTC6H2zZNzhfwU0U7nWgSflkuWNnh4yRtpYMx329GpXxcw9wytatworAKBCdoNuetfc/FD8ue 9x040SMZzPTP7JSWacpFzIOcAjHDcSeckZqUHekdkj1tS+hnG7/urIXugDPDDmp54ZLpqcnxn+y8 9nLs8itcWpV0ij3DctieX98iI7ozXnpGkUxh4LuBgWmk2pStGVszSohCDMbGotex7G4kxoxlv6I8 oob43gwA0kf4imsDGV9bbmX4DYON2LDhMcXMt9T5cmZ7Fso6539DcVcgrpblmSjxhSFWrxEsbvNu XrSRpeFmvxuitNyenL5gf1v/3v/x+6PhI0OYI9mQ5cGxSZEu3Lh4MNgoG2lATfaQOacNoN32vke9 Gz5sjPrV65vpH1ZOlUpSXfmdjbb93dN/UtRtkGU4DZyOwbcx4nr4LH8mrBVJtQge2onl93z7Ja++ 5KgtMH0FPxw1dizYbahBKFG+3+IZaUROdFsEk6PbQ6ST5ilWMKpUiB4VJUKUn+v9KqK2fT/EVfxE 2aavPO0hUoLYUQFWK/1jcuFUIMhu6EuKVBtOkKqTbzSFXOGc29zxdIumNzEGrO/OjC9SnfIKlOvP Nt7WTr+FNcYd4+I34DZ9hvKhn/t8oxWF7oBU0fBEnHOqoL3r8uMxbnrAb5418t2+35lfZ3LQ998N kqJx1jh/mzAwjVSb8TMjAeXXCRNFPfJ10EMUE0t9loZgeblBlEHAYfhBmO0ZGAlETPH3ECWLvNRO HItlWE99COVd5RDuDJCTwWaUPvjJB05eb4lS27MmOzgC/m8zZkjHOKu/ik733OJmiDk3MkclkfbB bV4d/9fTE3AdeuuzlWGRLkQV+X2/ljuMtRluGwe/1p0MOAg1+pmN+Vn/M9acqMbV80xIc543rvTm trzzW+8cls6GaGUjOFZfxm4mu+X4p9UTK8fwkkk08lUrh4xTi9gpuYIfK4cj09YezrE3PDKJtnbZ 99Z2wxnyqk3unRA2QoScWaTcYI/FwfHgKGOsznBUE0QWqQc5zeYl8JPTh0Baeb8FVg5cHqR/bK6a /DuxjP7wqgiPFX7nC6qwJyGPOesye6/v2UgrQmdzxOZc13GxssFRZ+gvEHn7F3LGWNj4WRk29thP YXO+On9+5TDZXEF/PT2s6ahBfpGOwjLeml+KVmvZXxgQBr5lGFjmVDtZagoSqRSs6GH4kE9rf9uy vG8QpA05HA0xAtgjQ0RIOE/XI41E3Mw4wDDAkIB05zxQ1AtyNYssLQkypTQY8UBkrjIqK8NXkaVu QDdBkpePuX85NxIRWpPRISJrUcqQK+SPaKoZ1nxpDTsi3GaUASOKlQnOtfUodaTLIELoDoER8Na2 M7IAOTOB6ZuoCgeKTzhA2YyfTNDRt3wFPYw88Ix+G8YOmxsXaUC+shH9RxnDHEhRXF8FilSlnOua yfkufthRApm0dBYQ5qpcJ9m0L8LGCsTI2pVTBxhvw5iCHCYZYTzzXLd3HT+xqmF/vwR+nLCS7kL9 fSwW+ofzyavViN5fdqosOhz9QNoKyxTpFIwFBBQq/Xo2T/zdiHb7SpDpKuhdSt9jh5j3PtizjifC nn8Wq47ViS6sV/h39Jfb7A4T5rvhx1Y+oRdos2s1v876ru8VuRQGhIG3FQPL9A+QSuTnsoEBaVyl UzDBmhFZGGc2LGzA7T2kjrAQs7Gr2pYjTSAYZTkUKeLc4uWSb5GjirJ9qbkZj+EkC4tWI4I+IdYc iWUiz0asn3BBEbS+ApBTHmZHlm0eOQZjiH6BFPVNkC3KaUbVIlVDVJjlSU4SyimPiisI2ZDygTan ZeXs8MzI5+zYsxxNtDHoewo4bacg9RnXmdAPOC3GZpavfwU/A76jTus70gb6PCAHMhNtTouw57Fh kMcPRH1YLUlEs5JPTgED2avmWnaydxUpdE/OV/fxISLp6W2xqRdzrCKJA5EuUiKQ4oTnkHbDfeqp dKg/iH9Od9vtozsORow5zQMrhCf6ZyUfllnXO5NIuvXJVzDSyuDgLCZH8pb5dYss9KyIljAgDHzT GJhe/mIkKS8Zs/IeUjIqgkZpIpXRYLI5kFhEYMhQWF2z0zzy0rMr7FjenhrCvJxLSt83qEXUbuUw cDS3WhYecllj0w/yO7OhAvnPR/sdnIAwbMgpx7FxiAQPYKqIZ0SsB7nEZxiPfISa5302mRgpsx8s E/MJC5UB5SVkJinTVJQYA9RvS+nAWM5zz+0HqXb5tX6bnD3n3s7dDmzyGJXjavIimWWykp0d1JUd t+G9KG84+SGRE0+fSXsIQGIx3xDlvAU/VgZkafKzqDP2Pdh8AwZxSk3OqfZ0myZH9JuPZOOoLzuJ PSe6OkGijcMQ3SZZdzyTA7OFn9mKT5TNmyKBEewVGZxwO0GGjpsbUjICF9k5sL7wfOV37Dur2+bK MKcRHU66DU7GwaFerGiZfLAHAKlRLLOV/gHOZ/LBcYqVc4bPeB4jBYznZXZMePN15Qzc0vdv2miq fhE3YUAYmGFg60g9PwaLNjaZAuybccKAmfFwIt7OPOXKnDDHkWeDkiYinjfW9UhsK9vKNULgS4nJ EMOg56i1k7FGjN/5bcqnTaQJRjYL5stffTls5rHvscHpkBPbyhwMMBnBIY8YRr6RlOHkirRcawTW jQulz/TUhyi7RxwpbQMOEDsYnQQZaQaxDHI/i57a5kfrD5eTcx+r0yqQL56JB2Sb85WH6F1sYOLo GMjBEAGL/nMkGGSR00qs7V/+y5ePGznZ2YsxQF5wJuY51YajutXkcUfCUhZ482WrA593fNlnDYuH jaXoz2R+XMFPbu/glEZ0lNMF8lI9SA/LNefNm7w4leNw0oXN3bQxFekOrA+qNITc/mqvxtKoxVj3 1TQi+b5ZznQD5drnFDeQ1LKOYrWCo914J6d/YU5hZQIOMfDiWC3KnvWzr6SEXsu4XuLnRD4Z18OG SDrJyB23SM/L+0UQ/a90JpzGiryLrIisCAPCwLcZAyWphhFmgjUYNkRMbTd5y5flTSocIUPOHhuY nqsXhs6UMk4fMMNjxgW74mF4PJoWm4kQaTLjOOS6gjTFTn8r49UfvVoeDYWBQyTQ/kakGtFzK8c3 7dnFNzB6E3IPIoWIHQwmlpxzTjGT3SHdgCJ2HvWynfx2TnhLH8EJKVaXvc8kG7v/Pb/9n7/oS7Kc a8lgZYNnz0DOOTeUb7SDk4FnkCZQEVhslkIKSXnuc5BOjxSSU2JtcwJvG7IidxTRN0+rwZnQEf2z 72yc7Fkbw4NDRSSWU40GhyPkDkcQjiSi8iwH4DFPfo+wY6ziBAaPOIeDuDM/ruKHo+juFNnZxK1v HF1E7jdwBEfUCXa8k51V6ABsYu5ECtF3OISZHLa/+bg5q8ucb9+XETm8gxzJUfcc5MjH3To3PEV3 ke9vdVmdrtM4bcv2GgTRHiLwTWY23nkljNvJkWEbd8gH+MLeDsgYuo1X/Di9ibGxMipIl8kpVNAz u/ixOir5HOqm8R10HGRNwQUfr8APn6DCsjqbX99mg6q2ixAKA99tDEwj1QwMjp6CWA7L37YUmqNS OfLSFO8skulLqfT+7LmBBBdLo7kNeTOaGzeKAlfgt3esb3kD3Gx50h2BYrmb64Ih6vUVEam8nGz1 9eX7xVXHKDM7K4PxjxMuqvrL3GaKblcG9vQCHCKQKwUzyA3L7IUsq82IB/kyHli+SdYD1qrnkuNU RVud/Ni5z3AMDbuTKCM/l+dUzkWuUgxKzGzgJxO0Q8QQ6TbhnPB8Psz9Ir1rwJvN7WoOFPKt5jaf jw0H9xD5XqRCZIxxetWQbhRl5Dp4bs+w1udwFYEvcv3LerMck05cEfjnGOrD/OL+hwNZtRP4hjMw qxtBkIN+46BA6jOn/WWMLuf0DeP/HFnpne82EdL4a/xfCgNTUu2kjojDUGEQoKoRw1Lh5JZFGFYv f3JKAF+HO1P8ptSrI9PyMXoVoaiM59KQ52gNEfQpgS4McEW+cjpEObgVOQz5Vs6DR0YT2cvy7vVS O92hoCXe8neKUPFpGgfClMh1XxGgvuRoaHYSMqnkMoYl84nTNkt1OeCZ+sRkhAla5WAcCGisthwi 4IWjMpsrvCIyWz4/EHQiydzmCvsDGcJ7uBwn5mM15/Jnvf0xnjgRyFMc4kxinDtvkf2+ejAj4Zk4 zfDzTILFK1JnhJGdhqWzk1aVBrxQxL07osU85vG+hViXOKX2dB0wcziTHCv5+PGKcdY5bipFNLqn byTdOAQaiv5uz69njvNLGUeVI6IlDAgDt2KgJNVs7HkJb1CGiERXEbpJ1K6MaCB6UkTD0JlDakEq v4ySV4bkJHLGZJ/Jr8mAjWVJtGBYFpFrNuS5TweDVuQ/Q35lBIqISjlOlYFKpH/HoKPdJZFPkTAe l/z8wbAWTktFCipHbOnwZQew/Z3JYdXvnBqDZ0BIc2R3WMkgMoW2Df0/mR+rcehkPeWLZ/zwHIaD nJ2/wYEq8DEjbYzdYYkfKyILp5vHqjoPmVfFVvhZKbphHke/hpsfWzunzvwZkWOHENH5TBxpbGYr BKxfBufwrP7kBLEcVqtVrEvP5DNgh/Z9ZJkDH8PKVcZ2YCFjejW/bjViel7ERxgQBt4WDEwj1bMI WY4OVkp9q3MTYsFGlX+3MvPS4SFCXC07FlHRagmaSdMsCli9t+xrIhe3LGmjPZWBQ534bii3Mvrs uFRRQo7yVhFf7kfxfUUou1wW8j84S8nBys5DHv9MMHPUuyQHKZ+2k42IMA+OXxUpraJ79FkVoZ6N z+k8uYAf7lf+/dQJTf05xf3CSejzqkh96LKuHCpeDdlwvA+Ej1My0L7CqZ6+t4juloQ89WG2ApNX 0bbqXxHtlQOzwE9vX5rbjP8D2S/qyme4c+CAVxuZ1A8rMbSauePUn86ZTadE5YiECQPCwOvAwFZO 9euoWGUK0MKAMCAMCAPCgDAgDAgD94IBkWpFNvZuOZScJCdhQBgQBoQBYUAYEAamGBCpFjikIIQB YUAYEAaEAWFAGBAGLmJApPqiAO9lyUL90PKbMCAMCAPCgDAgDAgDz8eASLVItTxTYUAYEAaEAWFA GBAGhIGLGBCpvihAeXTP9+gkO8lOGBAGhAFhQBgQBu4FAyLVItXyTIUBYUAYEAaEAWFAGBAGLmJA pPqiAO/Fu1I/FCkQBoQBYUAYEAaEAWHg+RgQqRaplmcqDAgDwoAwIAwIA8KAMHARAyLVFwUoj+75 Hp1kJ9kJA8KAMCAMCAPCwL1gQKRapFqeqTAgDAgDwoAwIAwIA8LARQyIVF8U4L14V+qHIgXCgDAg DAgDwoAwIAw8HwMi1SLV8kyFAWFAGBAGhAFhQBgQBi5iQKT6ogDl0T3fo5PsJDthQBgQBoQBYUAY uBcMiFSLVMszFQaEAWFAGBAGhAFhQBi4iAGR6osCvBfvSv1QpEAYEAaEAWFAGBAGhIHnY2BNqv/d 9x5++MMfHj2X9jmE/oP/8IPH3+Oz73//++Pf//77D/js++13ftZ+/8EP4v32e/+eiK6/S/X1wUZ9 Via+XzzH9TBg+ufVuyeEeyjT3l/Ub3Vy/7qcSHb9mZNyuuxDdkO5kDHKTWX1sYhxOvQhtafsk/Ul jctQbjEeh+ejnR0/m85Nbj+3j+WQx3uQN41F2e4sgwKbubyshJbymWAht7mSDZ4p69/BPz8zw2wa i+UYUXkHGUMX2DxveuIwv3NbgKtNLAwyZ30A+c5wiPKzzqJ6IWf0fYafrM8O+JzMw6wPDn+n/ry0 kfOxWMkn6w3SK1NZFONpdRzwM9HXwMdybu3o6ROdd5DlAgczuTuek60bdGUxfjMszWzTYOsm/T7Y 1Mm4VbZ1iqkN+34Yq9y+BX7Y7k/nV8j2YP9TuSvdlPtc8ovA9Uw+wzwp7MJMhqfzK+mgm+c3zaFS BhPdPuMgpX6e6eFb5xfzQ+YnCz1/Nr9W9j3rj+fMr1IXbeqeklSvjCMGv1J8P/yPjwTcvqu+Xxmm d37rncd3mXgngz0jVAyqrGS4LTxBTdA7bazAnol4NWg/+k8/qo1WBtWClGRZm3zLNkMxQBFVdfAk KxTgQQG1sg4kz0h8e3cgr5VxoUk0nawFQLNycBkGJqzfBzlHGcDdoKwLh2PA5kzpwNkIZ9H6Wsmm j01Syo4rkn+lHNDPyqG0z7ojm0gK+tkJX4yH9zvaa+9CoQMr/jwZ+Qr75ZxPY9TlbEQp+pmJBfqO OuxvHh+MAcjo1CFcKFxu64qIzdrm8yjNEcdXChBkPPa62rvDOCcCxf0d5GpzZxYk4P5GedyeHNzw OnaU/I4cc/tTIGWmk71N9O6Zo1e12fpY6m84Ynk+kqO2IiIYTx6z/Dxk2nXLM+XJOqLCptUL+4Y2 HOY4kaRZGYMuiXFl8sbvMV4GPXOD/A7yCvvOn58SmIpsZ3xzX+J31lGDPCgYlAniwclZYH8ln84z WI+TDt0lwDP9k3UP86Zbg0ysAzC/OPCSgzA7+nmnf6v5taufd+rp9j9xnN6vQo/bO1fm145NynOK /55GqgdgEQGxl2H4P/zzDx8+/suPHz79u0/9X/sZAENGJAMMQPr53/z8wX4++NMPnqLYK+UW3/38 bx/f6yBpytk+++SvPvEf++7TX3z6FFEnsmPvvP/j9x8++etPukLfMnY0Sa391v/PfvmZ15UHPyue GbgzKWA55e8gbyaPICdMrGaOT2n0kuI5eOwYw/Scydjk+9FPP+pEPyvCD37ywcNnf//Zo5xBcolU WF02ZoYbyNCVRPthI2Tf+bi2crhvaKu9b/V89LOPvKzP//Fzf44VFPBi3wMjfYyCJFp/0BYry55j mVkdeMYwb787flsfsuFcyQdzxctr5Vi/DP/2O9pkn338F62t7V/76XKKuoA37w+ebe21v0tlFfPG 2oVnGF+9va3f6OMgw/Z+ryvGq5fTxhQOkL2L9zEeruRgkEHCyLhn4rmrbE0mhj+To+uhmO887jY/ TY72neuFJL/DnAgsoA3ArY+FYd7Gq/1r9XoUlpw36DLUN9TFZCbpt6ygHYOhy6ysPjdiDtr3kK3P r9YeyGBHdlvyiXnP5XubDGuh8ztBpGAKy4R/h76EbKz9Vja3FxgCXj78sw8P47XTP3vGxsfxYfO4 tRnYmJFA6JgdRwVYxr9WF7CFuQ2j3vETesfwaBgyXZ6DM0PfTP6JMNi4uUxMH4ZeGHRiOHvABvCY 8XMmw1P7Tvj98ldfdj0FzHbdPbEdjPdqfoFPsG1j58E+N33p/SJuAp2YxzDPrx35uD1p42q2xGRs 7+xgI9udlf7J44B5vTM+kA36xvPLbV3oxswnoCdZh1T6+awNO/Nrpp/Pyj6bX2f2/er8gv61sRvG PeYkOILbOdLPaHdNqmnSHKKDodhhzNjzgULJ0TqeHCxQlG1CsAFgj62TJ0of8UljUfD2mXemvQPQ 2CQwRdUnVnsWzzB5st9tMtrzTMo54nI26ExGTMllhd2XtEzJIfqVvXGOTIQyRP+qyWuygvHMyjc/ nx0bfh7yGmR95sTQ9/aeyfWLf/rCZQ1ZDnW0/phMPv+HR3JrMqrInhOdIMoGXjzPZbkRCrLkjlLD ChtGm2Ao+93fedfrs7LYkID8dvlGu4EfKw8kuuOufcbG2GQMp+YsOnMmHxDY3E/Go/0OeaA+NzZN 9vibiSQw4HNp4uSBwLNsDCtMtPucDAcDbXQjbk4GYRVGG8/AqPocDRJpfWDnlufnkLqzGUGDAUDd 7FS7k0tEDUqP67TPDFMH5xFOYyb97W+M1+BgGVknB8ZJbRsb1jX2N9qTIycc3cQ7hl8fCxpj+451 m42PYd7wWjrAm8urVu5MPjxePgfI2TsERyhanfUmnjUdCHLLEUJ3FiMwku0MiHtvSyJPKx1tOGQc QHdyP+x9tj8WAIBOO9P/PMYgMP4ZHNdwPPCcjRdsE56Dk8z6Jq/o2Hc/+s+Pq3XWVnZEYFe6M4Vg k9m2hk3uAwIKmDs7/VvZ92q+exuN9Lc56AEysm9VfYyjan65c264I+fC50zTEwiiZKeM61nNrzP5 dG5AKShD4GcRAec2zOYXgo85YFPa90Vdq/ll/WfbaPMO+DnTz2f4OJtfhuMd/XxWj419Nb9O7Xu8 x/rZ+nzL/IKD7zIje4GAbZ+3ERhk53Yeqc5hdVvGpWXBgxfdJj2MNgvLJz+RsioydCC/IKCL6M4g oIiiGYiZ5NsEZ4IBA4VB6ULn9t1glFBeJg0H45LJddSXCXdefs6Koa8ecD70pCwedFb49juTqO5M 5BzpybJKl2Hz4mGUTJ6+gkEOhMndyDRImMsoOWvukITitO9g9Dq2EB1tRAOGZRgzIzwRhWI82kTk MUGUkp0djsZa2Z2wR7/tWY9IRt/Q75kizwrSjNJKPlYeK0WOeLPB72MejgoTYmsbZMYRn2w0rDxE 6LGywvJy5WuEkAglIndYmfKoTThJbpybLsjzfTAKRDBsHlYkFhH23QjQSgljvJykTdKgrC+ItmNO 5HZV7eRVFmAImOI52tMJAkP2jGH8zHgcHG8y5r6aE5FJlOPBCxqvQb9u6K8d+UAOCHiwXFjHHnS9 4fqsDcBGWjlAWbzy6cYKEc+V88/kIz3XHUc4PUTUXFc0HWTzoq+WnpAmTmmrZIkosrWbU0zYZmXS ccAI+pyCMYjYQsY25xC5AwHvuj9whPYcbO+KsOUoOdl36PreTxpzrL6VdU3Gr5pfJp+BFEV7XMe0 sUKghuuZBQBnKRV4N8vH9Ko7rcQ/rE4mTqs5fTq/wp6hDERED475ZHzO5hfbAl8tI4crcx7r00w/ T/t4Nr+KdrN+3tGHHLh0W0l4PLPvsOdD0DS3aTW/yDazY2JyHAJiIQeszrpdbA5FSaqdYDSD4N5x M6bscXEUuueGBgHpHmpUZpMcS2NQlFhSZ8BCSPCOHRQLBerEINIGYBytjR6qj4gB0gWgcPJAujIi knAGVH6fPb1MzrqCaCAA6THQspfopCkIqEVHuoFuk9hkb3JgB8a8JpSFScGKgg28R+JiSZiVOKdT cISYx2FQhNkRAuGyVYIw6oPDlMaLoyNZyYM0Vs9wZMKeszFyz77IRYX33VcKIpKBZXoQV5dpUpJ5 uTePIxwPLOE7IWtG2SNOHD2JlROe+Dvy6XgyubUfMxK9jZBlkilHpg2vA0EMRYB5wU4OZGh1Wvsh L4/sW93hfGI8+7IdRbyAKfTTnab2HhsakOQeRYt5miOEnTxFSkZenj1Tuh1PFDW3z4bIPTnmJivM Bcb+ioz25fu00oR3fD5Sehme53kLZVstd89IR7UxHFFe6CikOrEOsP7dnI8ZmDnIB0Y/jIjNBcic 9Vv+bFihDFxDH1dGErYFMh0iXLZSRIQxG9YdjDDJHFadWr/f+e13hhUtpKXcYgeyruK5wak/0Hf4 3h2lZr8sOp7TRHK/uD2cHgMbAmeZHeIu61aPk0Eev4znggB1pymeBSEaItA23yIlCrneSFfbSTdZ zS+bG9UKCadvYVXqMF4UGDhgJJycM/kgzQ/2Aw7XWfCswqRzhYn+sc8xpi7jSOnZwbaPN9mJPL+c AFLak5UJx2BXP5+1YzW/gHXWfZV+XtZBdpZ1/pl9vzq/Mjc1/Qu8mi0b/o4UEHYApxsVbYJwJIyX lZkkZePeiXaQkJzzNURJ20CDMGIi2r/v/8n7rvQqMsbeJSsuTDj73sCPyJ/lTttnaJcJBxErz4uE VzIhMmfAKolhRD7Rd5AV5MOhzsHAk5LiSY+J40uo4eCgTUyafbCjP04wYvwO0XCctkIkeZigULI8 aeMzH6vIYeUlmGFCt/eQi+Z5V4gcsnyDyFkbsZSX22Dt7kraHCiKMsFQQw4wLPAiK6UOxwOExJwt lrP3J7x6REng7HHEGZ4rloG8LiK/9jfqyKskcAxypA94rQgL3kFqBeMRWHcHMnLcc5oNO5uG/Zyy YeVxVCjnDqM+zCeUgdQGYNywyJhA7i3Pd47MVwbvbK7170neIPLIccczWZl7HmXkVmPeDCSQyMUs 0oS5jsgxG3Q4MZijWS/MomgzQ4xxw1I060IQeqSeOUFrS+63kOqVfA6rLpGaBWexO7kks5ljxGUZ dmwMzMnzPQTklFj/choSbEG1bHuGFaRLYF4wsbRxM9nhM8yjKkVtNj4gDfi+z/nIhc9BAKvT5znl yufV1m6LIjBUEXz7zORnOKtSEjAO9q/Jz4i7vXNLlPrUvsf8Q76w6xDsZ6LUlz6P0orz2fyC7uC5 jP05+CwHQW7t30o+vIKG4IvjNvbqnGHPvl/qH2wmj/nD9mUnGj4LhGF+Qfc4+aP9Drxyv9LPu/1D yiRs6y36eVVHhQ+eX2f2HSl0z51f6E+3leSocfoHdH3mxtP0D+TtQXnkXBIIhb3HDqRoBOfDQFAw zgy6Ti7jPav71R+/GnJgsmJARA6KB0Bib48jwHkQc97UDpDyM9YnV2zY/JTIVTYavJkIzghyI1GW v1N52+F5Wv9YzjCk3QuMdz1KhlxIEOT4jhUvK9BM2Pp3tvTCRCYI3AB++t7KxwRmws3KAEoNSqSK knf5Uo5wNmbYONaXiM04k8fvXmssJXIExpwt+xwTr5PleNeehQORiRq3FSsijGcY8pl8vDyaI5Ui zfPjYPDb+xXRzjlo7rTE0qUrgdhox9FjYMVJZ2AG83QwYtisF2Sob9JAX2LTJgxeJ/20wTQrXiaC zyKFFs0Io90dNHYMk+FyLLR+ZBKYSRC35WCwW51w5A5tToSfU3EO0aQiSnhIlYu6rN29riKCk0nG lj5Lc9bJEeRDEU0OlID8GmYrucwMfjXuMOwe9IjUHDiYIIxDihG1d6d/HPXP8wKpShhHGNAcYV7V kx0ljK+PheXFL8gsdNSwilFEkQdcVuMVm0czfnsbeIXvRvlhrHm1jnUhgm7QgYbdrjdoXg7OAWwQ 9bUixNkpBS5QF8bLxo9TbAbHZDG/VvKxfpnj0oMNrc1IOakcnSlGJvMLzhyTPpPBLEA3K790JJiD YLNi2G9whC39XMkufTadX+xUrPTzSR2z+XVm3x23YcefO7+ghxHcQF8RaDN+g0yHHpCLAO0yUt2N PQYqgYR3Pmaw2YDn5YfeWVpexDJFjyQEWeBoiCunpKAM8NZhJus5xxOko5oIDOCskHYUNibvLF8N S/NsCN2zp81N3F6PzAZBz0po6CNOOKDzvU2G2ahmUpT7hKWbPjELIn8Y08hrOsiOo3wxTogyM4Ec UnpCAbtxRr5UUvrAUGXA0W5PS4CBj/d50tmk4lUMdga709Pes3c4Ygus5g1PQ39i8iLCjbLP5APs DMth3Heab4hC81IfY+8Q7YuTQErjApkjRz0Mm/WdN0HBmK7k40YgTmWB4oIMOZKAz7Lc7O+BuE4w cGawOLqPFDPvO+eEJkNzcOQy2SBDkFN9OD9xkH0xf/pmamrLrlHmecnkE/LwckBQLCrJ6XAbBnEl H/Sry5ZSnICNvLdg5VzkeY8+LOWzoR9WevpMPlnvwZkoiUqSZxkAoDF2zEegZeZkDMGYapWk2Lhb tQ3OATvwneSGkc8OzY59cyeHTjYobag50Uiti/7z6muWMbeDvxuczcD0Sj4ebImTkab2JWR6sG+t nWfyAW/gVci8YnQmw535lecyOydn5c/mFAfkrurnK/OLdRP0MevnZdnFXjqW5459f6n5lTklcICV c9N7Jmcj2UixnUaq8zKxgZMndV8iScbRFXFMDF9y5SO+jPzhdAIyZDC8ENwgtOr0DCNBsYkMk8om AvJdoeAHg97ayZ4hlrkPaQdMVhfGiaMSMEI88PCsu4FvbUZ+OQDV0yNCIfFyWlcWJCcst1SA7FHL IARYqnXygjGx7yKfz7735e/q1IVMMpIcuOyqnfbZCj8747OS74DDOC0BMjGPEoYGnzEOmIxjRz4i 6/aepbi4XEz5YhMHYR/vow+VojiTD5w4zsuF48iKFsTVZOnzLxHP2fw6EJ44BrOTZTrNAWPlTi2N ez5xwvOnQz7s5DGB5rxrk4/98Dxg3LphTMdw7hLOjH+0p8uT+pFPFMrOuM9PzIGE+9n8sOetX3yi g7U9E8vDHGCiT9H0GZHDvM0rLYMco0xeMbzFIFfy4ZzBQT6xwoKAwYDJSVSQxzT3cyafHf1w2keQ qol8qiBNtWI0q4dJbCatsEWY566DecM+OQx41/OSMz7gqBG2hnJauY7D2Axr9cEuM3Z3HIXcz6V9 D6cVNph110vML0S8eTyyfM74yQG3gQff4BgrVX0Mkw1EGlIn+2ELPNBXzeGM/RP9A06U05oyEYQd ynqT8VbNr5fQz1fnV9XmvA9lh1hXzsmpfb86v0g3+1xumDFeYT84AYzHJo/blFQj7D3r+GFjB3ck QIWI3eBlBBnugAqyaY1FiJ09SUwOAwonxmNXOkhd71gi6z4xKfLn5cUk4Ui3lZ+XG3aA1SOJmXja cVrY6AUnoy2/49gmq6tHB9v39rflkvfNk/YO9cW8IEQOhokUkxzLmGgzlimqPlib/WQOUiaD4i3I RSd7EaG0tnDee3ZOzvBj5WEJbmhjqnsmX3un55DRiQ8gibzpzyPCQSSZVGN1ZEb+8koLR6A4fYOX IFH/mXzsOSuvPE2EZJCNB8t5Nr96vwoH0crz/Fsi2jYOvR1RdybIAzmOZ7pDEY4ccqor59s+y5vw PC+UTrHYTf/oqQI4OSaIMc8nmyOWh8nlY2ys/wdjlHDHm8JMZpjLeI/nl31mGOBd9O68RhTPCUHW L2l+W9t+9//83b7ZkiOtTl7oPHjTIZa+xASLx+tUb4VzPZMPO0rQ86wbTRamq4ZoWYoMen/pMp1M +k/ls6kfqr7eLB+zQWnj6dLgh851xzCdI+57DuycYNprwXsNerqe7ScxcldshB30MpE4pKzx93B+ YRuR7sXtn6YqLYJGS/se883KHfKMmxxNT7zE/PL9NhP5wHaYXJdYL4JDdq52Ph0py6dKw/D2zO4A KEj1Sv/0+UXt83TIyEuv5lX+bDm/Xkg/z2R7Nr9O9fMCd+Bn4H3l/OKDB1pfK/u+ws/p/KI5lzMA eBMr5INgKMotSTWIjBlNHFJvIMkb40CKsOSTI8NWKfJNrEzkKbFBM+MFoSBCnZe0QZxBpJyQxCUW UPa+USqMtJXzxT9/cTwqJia9k8qIvKEPvNR5ZpSgCJFiwZMQETqbBE704zgsN8J83ivIcExWGG7e bIh+m7xe/dGrfuwbRxUhS2wAYjDac93bZqNuJD6vACRvPUdOrVycowuHxtrExh9y28WPRzVi5aIb bWrbUr4xMW3c3WBHOhCwOER1YTTjnGcng3ymcJQFkgvyPDhkeCY2BSIazVE9J1eRl2zjPZOPYcOd qthsBKLMkS2MI0j1LNpUzS97F/KER23v+2afRoj6fglS6tYf5JCfyQd9ZMcFyhA6wMYERDyfWgCc YNPw2XyrvgehQeqK10UXu6D/kJ8T7jiNJKc+ZYeyXz5gG4qCHPKlG0i1yMqZ9ZjV56f4pFvoDo57 OCTcR+AZFwK53ggijOeAc5DBCs8rua7k4/ikkx+wIgIDY7J49788ngnffyhwMRy9GnrF5GD4g44/ kw/0QqUfdvByJh9rj68uxP4Pfz7m9k75fZm9lYGLMHA0mvWN7Qmn9oGs2r/5sptcb06P8jsC4uQl wyDIes5txSos9JjP97isaKtv5tDE5VZoL8bN5hPaBWcSqRhYUbk6v2CTZ/LZsS/cT7ZRiFQjcGdy rOSDgApwYc/tOv2sfyv9w21DQAd6DDzA9pRx/9k2nM2vl9LPK6ycza8z/XyKw9AnNnZ5fpmslvY9 9jQ8d35hXoG79dU8CmDiGeCEbcE0Ut1zYibpF90whtFANAbGFYSwOiIqC7QkDMnLzB4CdoOyB5fr YiD238OI5eW/brQK73Zm1HNeU+5HtXSRjRC3EYqsei9P6KxwDySZci5nhAxjVBpHMpgzZdLlTTIb wI5lTyprtXx2WLLksUjkw57l1Y5yjMjj7CSz2IDV5cD9ICdjRYzYwFg5jMGlfIL4Pmd1hGW8ml+H cZ9gG8/lsoZxp8hqJ1wUCc/jOpsL7ORhzA7z9CySQeka9i5+ZhiYybiaF7Moxix6NCvDCVtg7XQc wsmq+jGbu072+ejRIvJ9arhi1a4i+ni3SiNYBiAWGEN7vZ8r+UzGn9ty1reVfDJWq3m6VX6M77Dh jPRu1q+D0wzSkIIZOb2D52CJp1QO+t3HiKLqSztQOUimzwr7ngkryj0L1Dg34NVRTqXIuFnJx9oa 35d2L9XD7YUjv5JPZaN2eMyt+mfQf9SnQ6BqY24z3l9CP2/hf6J/+hiDa6XU4bOygRP04zC/sCq2 su8X5lfGaeZHZ6cR1RsVqbGZJLGiqKKUqwr5+dKQRjSmT9KUn+2R15iUINU8SQfilCZpNVG2lcxC ybPxyYSZIz4HMh3Lw57bHMoZOaY8iAdFmqPMEyJ4KANKKPKFy3Fl8jvJtXblkgA7U2wOTmApE+SM scIYs7Ffkk8m3Ez+oq/lJKbIWlZuaPNwmUJhvLh/lSM0MzYHgkZjyuVs95+VDDmNB9JKMuaVgbIf C/lUWOa2gjTZc4aN0iBhzDYMxlIJE64HY18Y7wNpnRDAruOSPmJlWxmurPsGEgWjSThaYbo7H0We be7HlKgsnJPqHS6XCTs/e4iSTXAyjeplfZX0Ql+12dAPM1xsywdjUdm7E8fuUHfqF+u9Q3tafTP9 y/OfyUmFt2zsS8cP/ZiQjJVunNl3ELjSpq6Icibuk/nlAa/KboQ9GWQ0eS6TZtdFq/1S2abRfiPG /GzVLctxNb/cobT0O0qP2iGaWOF0+c/OG8/zqXCct/Tzie4Y+jdzlNj52dyrNpVD0S+swh5kf3F+ 8biUv/OcinYZRiCTaaQ6R0Kzkh8IMisl8koYxGfsfjCIk/KQ++R5ZHFbXycEhYE8GNFk2Nh4dnK8 cTj+mfJaRWMzkcfOfltesn4diH7qVwbzrK5BMe0YiBvIzbSNTNr4yCQCObeXldVgNM7IDo1jFSGt lGefgKHIMwGrIqhMovLELY3czHAVxGNV9srZOxCfGNvyTM40j6zOSuasZPl3JuWDfEKGMzlnJwV/ n+qA1bgnDA/6iVcVyOkb+rqIqmcnYTq/8zhO5gyToR3HPcs8OzxMCCqZd/K+Kz8yBF3vpdOEDmNI ffVVyUT2V/0cVjE5agXHaqKfpvphR5/lAAG1n23Z4MTu6P7CgT2Q201nJjtvFVHPdpifmZGKYQWj tcWI4FkQpSImnOIym9MYd5Tv5CI7gonYn86vCfke+n5mXwpdjLaeymcyr7ej1Wfzi/q35EgxPw7O eaEL+ziYLnxd+nmC60r/LPXzxvwFv6y4xpl9r5zNEpNNTqv5VRF8tGe1ulWTajIeQwSqiJrwBCm9 FwbohFyUBCMBe7a0VHr2G4NWJf5veYs7ZReezMxTrqIBB3lkBVFM+rOJVxq9iRFeEoGqLTA0tCwP gzHDz1DHAhdnnmtWJnlCzfAxJSdB2LMMmFQuZbkhn1OjY9GFkCWT6O35FdGJbrSZCPB36fdssA+G drKxNWM4G1o2Yjk/7dDGaoUkzznGLf1epQMt9RfJudJBpbwrcs/kMNqTU2f6ilNFOKgPQ/ACWMIS fuEkPUtnUX2n85PbxmNTkJaBJJ6M45l8ruqHM2dmINN5GXtDx+P9Fb6GOVylYRROReXUOknKurVo Yxk5nszZLdwkO3M2JlX0dDWHZt9xXw96OEjjyr5UY5+DgpWTkPXWmU44s03Z5pe2KNu+CaHvdcX3 p/jO0eNiHg8YhiOQ9oDM+rjDEbJuPw2qsCMc8+WMf1YyPcPPYZ6k+VUR+c4XZ3OW5uc8p3pDsawm 5mBoZ4q51TETWpVLlgdpuUs2gbWaMIfysods7eMcXERzEhkdiF2QMsgmL/GcTYb+XtRlz68I4IFM T4gylo4OXtyCWO3IZxopn6SPvBFn5iJ2twyO6ljvvJd8JB9hQBgQBoSB7xgGXhupHry8FHFxD26y 1DZLW8DB2uy1zwh5Pnt18PIoEjks51QRJo7wJU/OyS4tg+4sh+56aiDemUzPUhQg6+n3ybsaiHqO RkyiYcOSdJZV+7taGrP24L0cmeqRAorgLHPevmMTU8SeTpbQ2MswCwPCgDAgDHwLMPBaSDUTKJzh x0fTZMJgx9/h9h8co4ZncIwQLk7B0Wl84LaRRDvixMrBofV8BBA2DHL0HO/gEpS81IMzmIdLXCj6 imNe/EKWdsRLvwAmIstGMnFQOM7z3T48noDTN1xE3ZDTLEcoR4LNGenLPOHI8LWa3G/bmNfbHEdM 8UZKjAlk78capnNaEd32I4LiyDgci8VLm4YR5JPb97ecEyvCKcIpDAgDwoAwIAwIA28bBl4LqUYn +XIPEDs+T9bPqLbrRhs5YyKO83JB0HC+bCU8kE4r1w7HP0SMixxGewZnXeKK6UMUuUVfQRjzzU7Y VMipGn4uL51DjT5w3lJ1ukfVpzJ3rRFtPxw+XRjC0eAckc+pJiYrI839ogiLYFOkGOdb+kpCpJ/k SyX8LNI2Zlx2vn3PvvfLRChC7ueD2uH5EeW2MbXPONfU+tYvv/kWeKRv22RWe2RghAFhQBgQBoSB bw4Dr4VUz/KXjajhQpRp+keLyPp5zURQjWwNt5VRxBjkDxHs6vzKIU2jvYtorx/Wnw7FB8n0w/Xb d7jrfbVZBCSdL2DI5N7ame+RXwE/p0LgYH0Q6zK9pshj7qdUtMhwPxS+9YsvNsFGsnzdpveryZ5v B2M5IPKMQ9I5kt0j90Ha7W++fQsXXLAjgAshpBC+OYUg2Uv2woAwIAwIA8LA8zDwWkg1DwaIFyLB 1XXHIMJ4xq/lbWkVIKZ+1zuu/I4I5uHK4/Y8blTjvGwnlbRTnW8/ROTYjyai3Zu4Mc36gRQHkFiO 0PI5xkMKCHau0q1kVo7dkLY8ji/6llM+vOy4VQ3X/Zb5x7xJsf1eHWtj7ceNenzmtPXPrh/tNzpa pD6u9+ab6qqJhhQYjBdSfrivuLLZ8QDHBjcjtbo8/SNu8dJkft5kltwkN2FAGBAGhAFh4JvDwGsj 1Uz6/ArkRppw5WkmlvaskTlc/ZivKcf1uEM+dUtDcKIbBBYRZUR0nRC26ChHrkHs7D2/cruROqR2 cMTb0xTaM57P3VIZhpQEbNKzNls+dVzH7FeHp5QFOBR+vnary9MqNs9CRb+M6FqUHqTeo/YtbYLT VZZlEtGGI4Jrh9nZsLbiWlv73K9LbSkcflVykyPnZduz9plf/dye8Ug2NnWGc+JpIyFfRLsZE/1G zEhrQd41p9pIMXxzikGyl+yFAWFAGBAGhIHbMPDaSLUPBBE6Jq09opzSFfAMIsh5YyGnCiBim+vh SDLSPPAeSCMIoZP0Fh0FKUS6A+61BzHHJrqc0sHRco+At58MQG7nc063QH4yZGLtNZJvZHe43cwu WJmdDZuO2RvSNSiKj2gx8qZt/DxFppFndzLsYg1yHHCcX07p6eScVhWwgdRXEWJjqRPyJjM4MYeU EOVVa7e3MCAMCAPCgDAgDHxLMPDaSPVAQInUGYlCJJrTHPh5JmVMFDNhHiLaRA5B/HyjYauPy+6/ RzTW6uLPMmlEtDUTVib81g8mhx6RtvxxOhmjPK1jAyT9eL2IcPNGz77Jb+fCDNSFftuV77SJ0wgz yDZvKETEOkfZOV0Gp3jgM3cELF2Hovp4Bp8hN9wj/PEcp9DIO77NO5a8JC9hQBgQBoQBYeCbxcDr IdWcchA39IBwIQVjiLKmm7qMcPnGRLo9KedGG7lEWgTSQHIahB/Px6kJKde5b8JDRJVuE+LTSvKm u4F4R5lD5NxysRtZx8bF8gKZDUJdTQ5OWSknTzqTusuGriHGySd8fbA9Z/I0efWNpk3+HiFvJBl1 cbQdGxyRcsM58MjN5o2f3QlqbbSIu48ftdeP4YuouBTDN6sYJH/JXxgQBoQBYUAYuA0Dr41UG5n6 4CcfPBIyjlQnoos8ayZrfTNhvIdca46WcsTb6jLyN5wQ0j4DgQd5zOkXfOQfp5YwiEBA+TPLc7bj +5jo56Pn0K8qMr4L0hwdtyMIrY/2Y78fUjEyUU9pH0iVQY46Iur4HBsTc/89pzocH/u951gjwmwb S1tOPJ7xDY8gxzhCr6V6MDnv+fXU5nxU4a6c9Nxtk17ykryEAWFAGBAGhIGXx8DrIdV0zjGixb6p raUE4FxoPuoNG+dA9uxvTg2xZ3HcG1I6/CKVdL89SCEinkb08vnT/VzryKVGTjXfGIi24SIaPjEE 3yHvGvnWTBgNqDjJAuQREWaOnM8AfciNjhsLX/3xK8+nth/7PZ/e4VFpOsVkOKmkkXB7x8YAbbHf LTfbnrN+4chDnNDS86DjxA6ORFs/fBMjjj+kM6+9/418I8Wj57bHiSTIqzaHxS7s8Y2c6ZxvTfaX n+ySqWQqDAgDwoAwIAy8Pgy8NlKNQVtdToJIKacbIGpaRY45HQTPVZvzcOrGrTnHfLTeWV1ORC2l AtFg+5d/TyklOdViB9TI22bCn+WCZ8qcbW5TbBzFczlXu4p6Q45DnSn6Pd0cmTaq7uaUL8t7ZsrM jqz1zOtTMpKtZCsMCAPCgDDwXcDAayPVOYqMKGonc0RI+VmLvg5kLnJuM9nqkW7KFc5R6YoYO/FN UVXedMiDfsgfpmPjhv6liHk/qs7yrRMJPdzcWBHFKm0jov84g3t6kohFg5nsF+VX/eWbDSuCbZ9x 2zs5zzdWZiJv7W5R8CGCTrc47pzb/V2YiOqjDI4wIAwIA8KAMPDtxsDrIdVBCnkz4kACiTQy2doh WANRLgjcKgUig3VoHy5qOSGkVRt7m7hfRKiH00duPKnjELmf5U1P8qfdQTm5aZHPq4aMVudgV5Fz fDZcpFO0dRpRp9NJpFS+3UpF46fxEwaEAWFAGPguYuC1kmqkd0CwJbmsCDZFhHuEm6ObRNawWXAg 5xEd5bSFHIkdiGaRtnEGhq00hUT6t96ZRK57ioyd8zyRxVmbQdCrIwS5/CFSTZHow9GEIbcqan1w oiZpI7PjDLf6onQQnV0qDAgDwoAwIAwIA28JBuakehL5BNmpIs8z0lgStkTImAA7kc5pBbT5kaPR w1nXtEmvlxHpIyuS1stIZJWjvEP6AkV+y5SI1I7TaPMEDKeXxYQMq+fKsbglH5ratHIGZisQp6QY aTghq1nONVKBbiXf0zZPUmuqaD3jrEr34Tbn6D07PtO2xwbUU1klfJwe0bhyEtN3fbVmIpeDHAsM VQ5qmeaU60ipSqd4h7PNuoEc1wFDpF8O+ievKE30Da9KlelOJzqM533G9wwTrM9muDikwlEK3OEd lvlkZe8Mf+VKF9d5MqfOys/fH3TBbGUzzYubghbFHNnd9zHYwCzfk3S+0m4WgYtl4GSB310ZnOlt 1L97A3A1xsNlYWaHuZ85ZfKGlcocQJvOs2fql2pv1CGVdEbgirkwSxVF0LEM8MWepINdgb0sVp9X qaUm+5mNmvGpgZNVOM/zcqYHWFY7zxTPH/avJbyU8yVhrgcVJ9kCBx2dnpvq3dSnmlTDWOCcaGtc RRTJyPEkHYhmbhgirdk4FyR6mKiFIuE6u+GM+rKBBqhYMO/81jtP12snQ83PoT9ZqP55tOtH//nx iLvKgeAc5i2lVwCP0yqgrDy/muSLNmQykBVjJh9VDnbvM8mlkikUA8YKfWUldFAqleIpxv9wgyNF 6c+cpENUnZ2EVFdlTLNsMbZ5/PhowwGPFZ5jHuUytjCRiXUiUshbz30Z0nIyxgsnckrkkuzZ4czK KhvkjLdKtrcSr/x81jmVTJeOZiJZ+Rz9yoHieW3tyXjNwQFr46xdmYBkR7zUQWQ04HyyDir18KZR y3N9uCcgOzXklPBzM/29O9aVLh30zYLML/UP6WkvL1L/dtvFMuZ3GCN8MhM+x3gM5Ib6MNOvjIXZ 3peMtVVfSnLb2jGQssoG7crJyCw9m2/+zdiGPLsOK2x4nmsHnZJI+nN0aoVXb1O2F5M9VIfU0ERE uU3v/s6745G4C5uE9yqb7LqUdDMfzsCfZzx0Ekr1Zg5TBjmSnrwkn1VkGRw06RrmKqxrDnOHx2iW cluQbtajU7uWUoQHe9bKLEl1vmYaA4Ij0uxvHJPmNwm2s6j9iLl2LBqunIbys+9whJsdv8aXe+SJ 0olZJvAETiMxVicuF8lRZgYPJvNBabby/KryduQe38poZXnZ7Ui/4bZGRMmTArTn7Fi5weDQhTVZ +T5nopuMbDK9/yfve9twlF9WTNUkGSY5OUY2RtVxfF25BWHj9h6i+YnQZzCWxJEmJJO9PpkjD72T stYOe87aa8f/5WMLd40gO1wVeeG2VGVWpLty6MqJDblnJ5Ij9PZdfL8bre3YKoxfd7poHhnW82VH TFBQ74ALKJ1cx4qYRX9xIdBszNxJJFKfz10/G1t/Ptrh59FH/7JhBLkaggI0F87qsff6cZ58jCfJ gB0Mxm7XZ4Fr/G1YNt1h4zFsauaIOfUNOrXjtBl6XDaFW0jzUZ3Qed52XIC1SajRTj72NOuyypga dvqlXTnadEPd1ic76/7DP3u8HKqPURo3P0K16fGeAjiJhJZzJRlUGMZdgs1ODo4gBQb9ltjof155 8PsMbNxTpM3w7EeLtu9w5wHGLQdl+thHPYOu3ZAznudATUUorV7cFPwcDHWS3tpk70NOLJsc0MFl YzxfWSeCS9i/q7G6ql+sfrtnA+OVx7EfdkA27aBr0gpYFYhY2R7rHwfQcOSw6dRq/vEYDrabHJxK Znm1vXIiMr+4Ip8znZt1TeeScRHdoOuKeezPc58LPpPxbhzkD//fP3z4/B8/HzjsTKbgwEM9UWdJ qt0gtoFjYdvvfO22gcENA113bUC3RmFAXeE3Io0TN7whjRjyOweFl4wVd+qd337HL13pyiZ5IINh TsplICvxnTsDrX0ZRDi7ejCKE6/KzoyGkjxEhLl9UWdF0EqQpfZbVN2UNvrOEYteL+qgevOgY8xy nVDcZSRtsYowYKQZVR/P7F3y6R8kR47YrKIkVh6csx2jt4xI0urK4Tky2gMJK9IDrE1DVKDyhjOR xhIcfX4Lie54zGlO8Tfj39qP9plhcCex1esGOUjWLcaYvXF+b+VM5ct8smFiUp2J3FLxkiGD/vAz zxsRgwI+zLMNfcDznR0x+xzkldtl/VmOH9UJ4+hn9Yf8bVxsPnaSA0MQ75kutXqHyKLNBTMu7Yfb AuJ/GI/2vMnGyvLnN0jX6QlFGb9wAEy3M2EsdOZuYMHvLjDyYM5Xw3L1Xr7Fto/Zif5hHcIEc8fY 52c8UBQXX6EskJ9MRHAZGTtTIADQ7azXs32y8kFOh7G8wUk86OcIGHVnkMgIB3BsPMzW7ciIU8qc J5Ddgv4ZdAhFWl1XGWdYpFf0ew/IMWGSmXEwI5izOkwW1nf015y7PN8OxLNYvYGsK+xWKzrZweg6 scnQMGMOqz3Dtyqz7Xedn05VG7AebbTPcv2zgFDleF2WzypCTTqqClDgno2DU1PotoN9YbtR6MHM cU2e5epj+7wKbmKcp+kfNqHzDXj5dkREp23wkUrBV4fnMsDud0j1YEgi+mtRYQA9R7by8mhlsPMk yrcgokwov/48E+JiMGaRfSg+EMIdhcTPDMSu1YvITKUYu5JN5J2JjJXXHR14cxOCtyILMNyZeILg HORGUdkedTlxMnLZfAvkjhz9fTI2HDVhg4S+5MjGlIC0MocoNZSp9ce+yw5EfJbLq5RyNYG3+jpz ekLGfokPSJgR6yA+1epGxos7D7OcXcJONpLWbjOmOVJdOTJOLM5O3SFFPBjJeM/rSkQThGVIh5ot BaaUgN6mqJcDCnlM3OGgMagMGd7Bah5k2leNUmQT0XfgphoD/ox1MRtj/M7EZgdTwzMxj9ixyhFk e56NPesAzMVb6s2BjaxTciChxGgKMuRxQpmzsZu1F3XNjnBFtLUTEuhuuyjLLsXCykHhrHOdeXUO F2plbGbZ7Mp5Fe20thuZ5KDYkuwmosRzACvUkFsODJ3JOX/fbUHo3GV/AwO36Bcrz9po/Yf+Q1Di gOtE5jIu7fnsFGc5dpuYAj78Xp4Ph0vksmOVZDML5tnnxoO8nSvdmHTcZfmsiHVhV+BYV1kEefyr NNhZ/9heG0awslcF7/gzXgHMQcTpRkWPDtrSYYs+YAmIjbD9zkoUBs2IAXvbNmCzJeAMJhZOJtVe n0XZWnsO3wUYOCUFNzhyzjPe8wiapRMg4sODGP12oLXPDcz59kb7nAmQp5LEtdy5T/AsczrJShEc Is9hsIcr06nNuI3Q6janBtEMlGP/Wv0W5cdyVjfa1hfLDQ+Q2/e4QdLHt8kcXi3KwVijHvub89Ph VVu55gSxM8T9Nlz4ckv71+o8RPqJqHAfT41GUjDWDlzvbv1zTFoKTPTb/rU2mhK1NvjyvEVXDGuB LVslsTHmKCPSKbIygtwMO9ZuK4sneh+fiOK4kWgymBrLpICsPnMAcaMliBf6k508nxdtLJHa0SMA lC/oKTYxVx0rLd3oQA7PImLhcGA8OerEMjKZeMQB6WITx+7MWFp/QBZdprbqROlXJnNfko/bOnFz 5yw/udqY2CPMEUHDEn2fW0HqDV8mN/ST9Z5hB0rd2gkjtooIQzc5bpgYkOGFfKxMv6mWDCOvAlkZ OTVvJdtBz0f6C+Q8OC7RLl/ZDF1qY+Bzvi2d57xRdnLP5vCKfJrsoedsTubl61P9E4SjpyREyt9u JDZH+zEfu2NhOnOykdN1eFp9YKLWUxbNwJtebLJFqhMb8rzqgzadrjIECQQ+HbeRlsm2y8rnm4Sf Q9zhVGDeHVYFkt2FzmXCyMQfsoG+zETx9/5/v+e4eAn9UvW9R8Az3wj8nzkdsCEeVAwdDv2E8YRe AbdCH92GYrUpxrCyO5g39q+9kwM1hg8OMEEvoCzoUdgU5zrtHZ9T4WS402G8kJxD1j1cFlYmPCC4 WoHIThnNH3A/8L+eQhz4QeoU7LphIAddQcqB45kDgfmJ1OCcSglbApvqKbnRL9S53KjoSsKUAOWI sUJBwT0SRpOkNz6IHi97VmQ6E+WD0m1lY0kQA87L74cloUnkxMCGvD8nzEZmUruhBECm7XkYwqFd iASa0TaDmiOGhTwqD6jqa2V0+jI+DCstixrgbZwwYaxfA7iiLewAZNJURbOQrjOQYRCwiAxaXZ7j jv62f/N7TKC6ckqkGTjL39vft0T7ecI48QoyzBMNfcWYmdyQT49lNnvPfvCePQtl4hgKxxLLv+6E xd6CgUQ2hWTlsCF0mVnufkzIaWRu4dHDs3YjTYoeBAvKD8aY9zMw5o1MdKfQlrws1StIEiuVbFSy 929G49Ufv3rqkzkLFD3uZI0iIpi3W/MiEUrDvCv2JnfHVzgmcE4yZqCcjfB529Mqw0zhWtusfB5z KwNk2d7LJDBHbX0ZPPKoeemwY8IiQSSXCu+sXwyTmBeQAc/RHD1xHU3yOSO1TAo5Mgvd6DKmdBUs nTIWmYitAihVW3J7s25F/vZAwGCIT/QPxmtIVbFocuwNOpONfd91Cel4pILw+5ksedCCI9UpVY+d lxzMcecl2miE6WAPZitWSYcgyoiVNTgDvV2tT4Z1X2kOXc8pnDvygQNlcxQEnrEx2Ptod8dQckpK LNv+hjRnEGTgefQc/WJjYAS22why1CEHJ10giRFs8KBVCxb0+ikIYY4tp66yDAeCGroMxNuewwo1 gpt4l1dXexCRxhr8rD+fNprOiG4OHMBWoZyr8tnCT/SD7TfmbV89KWyjycTGwLCQ7dNApGPegmwP AdeI3Fc6E/M5O3YcxFieU80eQkV6wdoxKUF2u8GKhneiV2yaqYho92gNBOh8iiBXy48AH5M7jvJ4 RKf9oM4MKo702cBg8OEBVXVmBT20HUu6KVdyB1QHrz68w8EwJoXO0fBDpCcUA0e1svKHJwhngyM5 PKbYnIrPQKA5SoLoFYzpsGQXhAbyB44G0kcTZsDhYokqy7UvsYchAom1yYKVCsZsxwcRVESvMPng eQMLnE4DBQjj1IlurPZwXa60aXWjl7taFiNnivsK3HtkPFI7WOGiX4N8TOGTER7kAcJJiofnIZQV v29jb4Qa0RQ4HE4MrB4qy2VmzkeshPQoKz13NkdQBow36yLUhVU2Vq4eKaa5nes5OA7RbicX8Z49 0/NmgZW0V4SdJHYm2NDh8xzVdLIcm/AqOXT91XDNzv5BlxKWcnvP5MtjhvmNFYiuZ1LQACszwDmv GpzVl7EJOeWIEo9PJ3wRuRuISkQPZ/oH8w2b7+1vy8mf6aDcvkF3Nv0OJ7RMQ6FxQCSsinYzTn2F M6LaqMsxHnsjGONMwM7qh47KQaJsLzxSHStcmZycjSXjEM4krwLwmGZHmwnmzNHmNJg85mjzFf3i qS+x4svt43ajX84nQgccoqPktHeHLVZJ+hyJZ/A9gk/ssEKX5qBTtt9YdaiCVkz67D2ssnIZHGSw fjl5tj1jsW+OV+deQj5nOLLvOVhqBLtH1sl22efgGwjwViktFe5yGw56PTbYZu43OMdJD87TP0Kx D+kfTGgsGhCTboj4kIKriDhHadijmxk3JiIHckuEmxUPAMrpDx1IsUxqniMUoX3HyqgDDtHdWMYv ARjR/B4dJAEPyuUGYp09c45CwqBlQ9xJayjwKsIMGTjxYiDE7x3ACSQglOg/K76D0QuwZyJ3+DsR zexVZ2wgSpPrW5EONwYRXWZnZCBO0VeTZ5ZhxoVHRI0IVpuxiHwNKzvhDA1Rmhx5pwj/jqKpZNBz flNZ9iwrplw+Lw/yUl02+kyKUUY2nlBsMMIeIY/51sciHFuUMUR8bLw2nSYmzNa2Cj+deDOpCUJ/ 6EOhS1gGA2kPo5Sd2I4LRJsKnDAh4JW2SrlnzLAu5Mj8jHwwznNK0BnO8G4mMIje5KiPkwyO3kHm hZ7ZqXuI1FfzY2V/whhzRLjUP0SIdnGXCaa9Z2PhG05TpPiQAlLglMeUf+d5i3IGIhRRUHbqd/tg snUHkXTfYbX5RL5nY8hOeEXg+vyL+Q4Mgx+sCFBfPWeCWoz5gZcgWHASuHCnNk4tG8aHsAy9iejx EEhJ9rNjL30OnWj/Wnm8ipzlMwuG8TiYDKFze3ClOAYR4zGksJHuhezh1DGOwQUuyaeSfyEb69vg 7IVe5ewCG2Ne8bV32BawfZs5nN1xihRjdjgHuVMbkRYM+XM9U1KNZWy81L1kI6AxUHmy5HwuRDqZ lHkOCuUeDkqKCSkZVwyyL3lFtKjnqNJEcaERueHjnXwJNwgRhGhGIHvsIFeezgCCas5DzpMLECKK CgObvUT7HuR9V+n1iZKUxuzkDgdSRMrQ/zzoQ/QulsxZ6fiEjNxmTPIZCL0/vJSc2glgr4waSAE7 DExGrW0sr0yazpQ6G7gyUstR38AMllStbN4XwKSF54XJJ8uo5xETlk1eOQ8styk7Lmf9g0K297Az Hwp+OAUk8OeynSgu1I2oHlYiXP48J4k0DFHqOPUFkcPDmLYyICfud3ZkVpHWLI8lfqLNni7Gmxfb 5/lYzwO5TgofbcL8goxMl/CpD/1IP6rbsMLEGcSzdMqIhCJKCB1kdXIaDvRYTt/KUT97h3Wd9WEn ksmy7mQr9B10OsgGtwHLxpl4sl7ewXWlP3h+7NifU6c+Itm5rbvtc/1kqY2RgnRYbYi5Ys/4qlGR noWxQX9y/mbuAzbWswF3ckPpmTs2xp2AsG+M7x6w2bTvK1nlVUtg/mwzdnaEHcOhhyDjHphL+gzp KnlMK3J9Ns636Gc4QEOqW4y3rX70z1N7edzN9kCPe6ogr9K3sozL8CrgoLcKHe2OU6Qx8LNYmcFn 1b4Z8AmkDdq/WW9clU8fo4lN6twLvCb0j7VlyC0P4s1cj7nqYZzJFsGG8jM4kcnsHnLJh/1yoac9 dz/2RvD8NizU51THBiJXZKE83HuzczRpAiOvZGi4NTomJZYjeACtIQagQxQ7CRd1c9m+4cyUGDbl kJHnqDOIwHC6Ryu/e1dRV/fYmtJjJYCJjTb23OuIwjPAeMl9FpnuOccnHnKWIxMa2wiIaOQgOywf pbHB5MnklI3kQLzNC+RTIqKtUGCH1I42aTmndMi5i7J6RLz42yaljQ/60iOtEy92Z9cvyw9ANywi pxp1GenMS6v2fCcFBRZR9ixNo0eT0h4Eq7PydquoxJmi5+9BMrxvFA22Pvj5vhb9iI2Y/RnqF2MY S3m9/PYc9i90w0/EAISKsQVyD2cLURP7m+vKKVesALdJdWvfEj/RT6yocLkYPzYm3D5e3eL3bK4g Tw+kjzfe5Jz4IRUi9Ia9Z5/PNtLk+Z83efcIUqTNcPvyfgj+rhvYEwPG44/fkabU5ynpmU7ieQk7 8kyzk29y3SF8qHdnfszsz7CiFA5/X2FqfwOr2IxudRoGnLhsHhuHdvYjvhDcCV3np2AV8sYZ5ZmE YyO1z9l4r+tnajMHKqBbnPQUEcmZPhnSXKKujDXHKm2grrCxq69mueoZD6aXsdGwE8G8cmXypWNB WRdhNYmJe17h3NUxS/zFGDNpRdt7xBrBtAg+reqFLutE0lIvYg8O3sPmX14x5ADesBIVmEcgCs/l IAOf9c/4wd4PYLTvLYoL7oCNaarUhnxK7BjOzQkNLFv9PNY52IB56zq12by+eoA038AOl8lzkucg 3oVjw2PBQRDI8ot//qJzYcMKk/r55S8RzeTJxNFCGBH82xvIhjs2+IBUIOH9cPtgSiuxOmcKGGkb OQrkO0Aj0gryD4+vg8+W6mLDDhSRGUr2MGEMORJbLUlZG4cNXhSZyIAx2Zx56FMFFUB79UevHk/1 QCpKyJlJaTcIRjrSmbFsAJE/a4AdbgSMaLV970SrlYFNe2zsfMzbd9YmL7cwHt2IBUnOf1t5ppR8 I0urD5vjoJTsb0R5cLJCX/Y7cU6yV43TP6Asej4Y4Q6Td4ikNnn0E0Iin8v67Rsh2kY1OH6oj6Ox yEWz57PyQT9AsNwBsGgkncJyZrDsefQH8wXyMryC8MFxhHGxOrJBN2zCqYEh75tBEs5srLN8eX5Z 3eztc0oNiBUi2tY2kJm80nPW/zP84H04FCZzGxMmJZkooB+5f67cY5XLZRtkg3WUBx0id9/q8PGx lTDkYcff9p21w/LPcRoL97VHZOH4I48WxDwcCugkkNcevUu6k1dWbl0Ngc7AnPAxavUbNjBeaDtj 3wMnbX70U1ZS/uPZ2O7MjzP7s9Q/IVs4G9AH5Wb0QtdkhwUEDCt4Of3QdCwCM8jNz6cLmV2DrvD3 cSIHrRZZvQj4+LK4XbxGpxg5ydgk13gf+gErWT0Nw3R82Bv7t7LvK5sFwtNtlu1jmR3d1sbD5oLv ybA5in7FCpjrrOgXsAjd1zeRh5xAAP1ghLgk7qa2Nxnu4M/6h1QLt5N2UIDpM3Iee+Q/NtDyyS7d cSLHpXMEDkKFnQQhNhmyfmK7DjsJ/MHuYB5CL2WMcHkmtz4PYp4gQOLB0Eh3ggMDflDZr5l8BtyE A3DAEnEKt7lxYhcIfc52gLMK/d4dA54PUebAxZi7hG6FLewrv7gtO6V3Id3N+tltQStjmVPdjTUY /0m+4xAGB8mMaDfKGo4/KsrjxjG5ZkW2422CYGCw2PCzMezLLEm4WHKqFEc2utkJ4D5kw3tmULws HjwCNr+bl22Gv1PqzLCUlICR29Mjk+QtztrMSqDL+aT8qawompfHt6pnR45cF4griAUro1xfdugG JQScJEdiFYVj8tTrmozrDrY7RqAkgoznyOEBL9TmWXsd22ku5KVIlFs6AUzCub4C0zw3V/PtgNEi NcyfKRyAmTOLOVzKIZeT5yQRrRlRtc+rCPiByIdTWo67OTBkFHqbSbeW/Y7Iaye8tJS8O2+GHPrC aeb5fpBhOF67WC7b9Iz5wfbnrJ+M8yGSdctqImEOEWYrizGRZZAJTZ6zjptC905lSUShsktLOczm 50QG2/ItHO+qHQjIrEjvQV7GJ+KH59JMn2Ncbl0p6fnmyUnx8c0BNOiLgs/MAhDW9mFuL5whcJkK A11vkq6Y4eBg5zZsdSVj1jkVnm+RT6nbW1+4rWe4zumOmUMyD+g8MNKyMt9CoGzJZ5LdZTtmv5ek umpUVrIHkltM0BXR4IEpJxyF7gfjkCb8QFqrqCkP0EqJzDwm1GflnDgVmcj3PqLshXGaKT+Alsek JHlFdH9ob2o/g2tJWpICYfKDMnajI7kee285YW4gN0PZWd7V2CVyDGPIE3BmAHlcM/4gnxWhKB3E G7AxRDwCn6zsIQtE+12BR7QkKw12Kqekrb2PVQukVGDVCtG+ng8KRU2k6GA8shFKJB7RqNm/rA/O FC7jAkaclaCno8SFHH50Zpyf7ZF9iwLyLaHUzoqsz8blML9IoR/mfRjHGX7YKWOnJjvZMxJzy1zt 8xvYmRiiQZcv9OgusTmdH8no5nE9I9RDqlqyJ7t44rlVjeHBvrU255xpyHdwTtNcgNHPq0tdTxXP b/Wf+j2MS4zfyr6flk828xBVXeEjVuxYB/e5TsclVp91e1asem+3l3Rp1xFJn1VzecZl8g3PB5tL RHiKocrBSbYi23nW/yzLap6wQ8P71NgW5Hafzk8OOkzk50cMtrsQEIXGihtWMf3YU5rnh9XDkxWZ zGGxIoM8cezJwarETC+yDqxs7AEnM1J9AG2KfPRBC4PjRpu9azKoh0ZR5HoJpGx4mTROiPKQL1NE ZzAw3fjRwGTgzKK7g7GzSTE55H+2KezWCZ7LGUjcSpYhr0z6eoQmT8zktULRV8a6ikyxYjm0MUUW l4STVzYoKsAYu1WGHNk4RDlmS6ak/POYZ+M4GAEmXpTOkSOjWa4H7/4kYobnq0PuMRbdaMc8nRGv 5RiT4j8jZJ0cbDgIgxGM51mpr8b4FD+BN56bAwFNFwuAuPQ6k8PFn1dLr4f3Y+xYh+QxOa2rlcHE fVjhW0SYeO7xO7emn2Vnvqq/PxPtOUT/gZ0NPOTx3pkfw85+sj9n+mcgpM9o25JYUXkrss/O0YFE hn2rCP5hJQmrKDf0YxocSs7KTL5n+hd94zEsVxtn8yytBHXbQs9XK96zFc0e6DgJinG/VvgbSCXK NNlR+VX0fVi5Yh1Eq1ozXFjfqqg3B7mAIw6c9H4kAr/SoSW+Ex+7Kh+kER7aAe5IQSBuT/V8lkGF z6nsiFdm52RWbmkDqN2n6R9Dh06WXcuTAvJkX3hZ2bvoXgDllU3JW14SLbzO1ekHXO4OIR4Em7zj med4E5ALj3uQTyVH/ox+n0ZfyCngsiuvv5O+nArERuQGpeUkmSJgU0OF5zYUcMcLjHxyrIaIKTtD MExkoLJhziRoUH5QOFWKA5NzUsDA24yk3UIqt3BFk35G4HfaUjqfLD/WEWnlqDs0aAs7tbcsRYK0 rvDDss7YYQOR50x6Nhu5A07zUnThDGVHLs+l5VhnPfBc/XnipK36tZLBTGdXfdoxflkPT52YKiK5 SywnuuTMaUSfVnqrHEsmXIm4zghDDoYcbBKVOSXJizE/BIMWuOp178qX692xD9yXQmdMecCif6wT s/N35hRwf6c6MbcZfCPr+GS/8liVUd8svyzDwt7MHDiPrhZtyil+p9wtYfjUfp3JJ43dSjegb2fB lJmNHvaNFUHQg63Pc4FX6M448Fmk2o8VoWj0AMZCMeWIXgZv5b1NI3Rs+DKxqjxZfPaciX+jwZk5 Gu4p8nLHBFj5/WFZgdq/WopcRRtmir17shMCs5rw3didyZcVANWTJ0QVzThVdrxakSJ5vFSUJ1cl x+kkziTLsFH0uZrgB0erMChDvRNlybLOJDY7DqekJurIm8am+Xz2PH4SeXUZF47TIXIz6ddNGzGL 9C/gdwcneqaN4wW9pnclP2FAGBAGbsfAOqc6e18TMnvw8MmTghGeeouZnLMXVhG4CakbiOnrNiat DXnZ3cBXOQ2ZBDFIs8PS+1D00crusqTcs4HIV9F5JvqFB1xGoc6IM/c1iG61vJIn5CyC3yNAKU+K rwe3d1m+5dJi9JW99nf/y7uP5ILGrCKBlUM4ePkkRzy7k9N6yFdMzp9/n52cTRJfkcxhCT6Vc8h7 JjzYkY2dzBcO6nB8YsiTx7ynbhTO9jA3yEnhfvd0I9ooOeiVSblS+rcrfclMMhMGhAFh4PVg4DT9 oxOUMGpMbPLShROfOFKmWtboJGUS8ZoN8mEjBxnY2bLHmwBM36xlZ7fyLYWtfZCT/duPEEw7/e07 +8ExS8OFKkSQrf9I6s9HWTGxMvlXx8VwWzIRKyPIiYxxdNXPy47r5nG0GB+DVxKzHP0lxynfSIUo aSd5TQ4u53Rlr9XDObx+dFNsOOuODOe7NdnbkUA4tipvNALhRxl+9nMRabaycVQQX+iSI7g4fxkX hIBYcmqNbcbws9TjaLk+Nif44XZ9+asv+/nr/Wzg5PyyjHHUFGSEowz98pI4/3U4Qo3Kwlmo2MTX z6zHeDZ5Y+Ni3xCS+tZXKDhnLuuWHCEnkv+cpe43oQtUx+sxUJKr5CoMCAPfJgzUpJrIRLlZotjg t3quilAecrrIeK/SHmbCzVHF1zkIVpfvHrXb2mKpfHnBRntmusM7IqC4mIY3FnAfjGTigoeSWGQi zLlUC1KSNyT1OierBE5M7QxzIv35TOyyjKI8Pls3H7qOMowEwpHAmae8IcWwwhdf4PxMJqj2O9eF s8pzbmQ+C7Nf0hFjbOWAvNvvOKecU5jcSWrnzNoFC3i+utnK2oNzxe2M0+Hmv0wqM37i+37LHzbm tXmJ88WBEb6JCzIdbhJtZWeibc8N57+GI5Edun5GfZzi8v6P3+/9hkwga3bMZo555RB6PnJsWBWh lnF9nXpdZQtfwoAwcBUD80h1WpI2wzbLr+ZoJ5azc4R7SdZA0FK+pqc80JFuOaEcBvc5JPyK4Pql DhRxtTb4rTrYaMFpLJx2kfsaz/ElGVWk1cg7jv9iwgiZHE5eoOihtSnLcuqcVJsaqM3DxQ/UdhCu nrtb5d6m3dFGJvmSEVxYwikpfIsnovoe9SXHDhclAAeHchBdjks5TGb5Gauz10X9ynIyIsvksrpy 2i8/aZFftAe3Y3GbjZxb/zE2uFjD6yMSf0gNsb7bCoddrBQXkjgeYp5Y3XB6OPWEc699DOPmO3vX yunYjfKBMRBar4tuU7U2Djdwxt/9ttMYa2sLLkBhR6z3k9JBDjqCMHyYE8WcujKn9a6MqTAgDAgD wsBVDJSkGtE4RAGxzO9kBjmPzeD1Jfe4Na664tWNahh63O5VEq8FkfBbFFv0D8vuVo6lQxyOArsx reS5wvP6W1Tu7JQQa7Nd84ubHnPuORMmRFidZIEwJmLebxRM/TR54ppbkzUirpCz/WsRZiNxVraR PLtms0ecJ5HQSj72jr0PBwvYGG6lbPIBkUQZjqX2Ht8yhTOPh3qsb+TQGab6jUUp2o08c5Dh1Sa6 TIaZ1IH8IhWj6jf6W13lzk6dtQE3qw1HqqW2V33P7T/Dj69uNKIL8ozVDmvjYdMpOUv2jo1Fjya3 vzPxzVjlFQDIB+kg6Cen1sDxMefC05rQ//YvzoMGlqxsyLfLOa57Zydu98i9585rvSeDKgwIA8KA MHAFA9ONirhSHBEtLPWiMl5OB0HB9Zgg357LaQaV0g/MkPrB3hRdWx3Gb4Yfy+MgL8gDHS5n2Dja 6oqg+F3knnL0l0lDdWIDX7Gdv3ciZgTJ8rKryF3Iz0hfvp7TSIinnjS58ubJnioSBNVk1q/BtbSV iN5yakK1usA5wHinXwXaCJO1J2PDnsN115CbR9kRHQ1iBUfJ20BOFQgZZDLgiMiZtc2vObcrTEN+ SDPgDXvWxn7VORFOJu/WNnOUQL653yCY/YpguqY5r5JYObimG3Lqqy1GbFv7bWzM2RrSeVK/hvlh 0eQgmYwPv24+5hdSQdBGe87wgLQox2w4v4c0Drsql/LkPWe6lcspGx7Jj2u4+3XccZ0wO05WD2Tt TlS60hrXI2edwClFvbxwLoHvMyf2pea3ypFRFQaEAWFAGHgOBqbpH270m1GEcQeR7FEqbGpqhhVL w5ZH2jdvRR4r34qG5eocFeOGg8zk5X1EQgdCysvDJ+kWzxHO7B3rx6EPKXqMdAIjFYjysWyGPkeO tj2XSSyTtuyk4DuQHJAYtK9Hj0M2GIu+Ka+1Dc+UOd8UNQbBAun0XN0WRbZ+9Hxyc5ToKDRE6NHu IU2oRa6x0dMxVpw7i6jvgZxSJBsR8LxKMmxgtVWVRAA5HYIdxV5XkYrkzoIR0CCyuc0c+WXnZ2hL rPZ47nOko6D/Q3pTpKPM8NMj/4EvbJTlMc7lubMSG2M9+k9nwubItpdjmzUpzSKvoICo9/GjaDye RXugR9h5rMYARyNizwIwktNKXnI+qywZT2FAGBAGhIGXwMAyUn2InJLRxPJ1JoFolH2eiTifc8u5 0rkjTL7s90PEm/MpeVk9Eeu8LP8SAgOxYoKM9g4nVjRC0klJpMpw/m0mFBwdHPJoiazzJrkuZyPk jeQzARrGJGRisuC87UN6wOzyjZTX2q/7DGJp5MnzgxtJ5P6jfUyqBvmTTDiHOjtYcMQOqR001mhT 5Zwhuvlc+eYNtVV7ct4zp3ZUcp6uTOT5BVJb4Mf6CtlyKoevHLQfEOhO2Gl8GS8D8SZHApFrkGHI kaPukOnBKaJVqL4PIDl2rCcYy3l+WfuQNrZa0Xqpua1yZFiFAWFAGBAGnouBaaQ6kyEzbmyA3aBG GsGB8CAi1ogXIn+H/GdsfiNj7/mURcS5ImZcZ8/zLsg254A/V0j5PeSEHj5vqQhIwcDd8minR9xo oxeW5Zl8Hja9pZQII08ogyPLXPYhbztSDqwey6vOJ1EcZEJpCJksgeDYuHPqC3LduSxrn7c3NtN5 HnZc283pFLzsX12FzCSRyeuh/5E6w2cxZ7zeIl8+V31YNSHSav21+hDF7ysHTT457SmnLpzNrx38 cG40ZIM8Zd5UnCPqRvp9YyJhY8j/jvSdnJKRnVSkeWRizg6z4c1wh/4PDlBgzceScIeNwCi3cppe ai6rHBlPYUAYEAaEgZfCwJRUG5mZpis0Y2zf9VxYWtLuy/DImyXibUYZUedsxP00g8jHRJTNjCo2 1vFSuUfpLO3ESCoisXE+NiJdIFCzSNwVAXoUvpE4HKlnJGI4HSEiiyYfEAxPhaCj6Ib6Lc+WNvH5 d4lQ+/nQXAaRED4Fwt41Yp/Pdcayf97Edjg5JUX+cwqB5cPnnFzk9vKzfZk/+uHy4vz6lErR5cH1 51xidprod87lL8f1VvmmNnC/htzmnLYS44YI7nBhShrP1fyysbcyVvjxaHebW5amxbLDOdv4DLLJ aUSOxehnz1m2eRzzCPsYVg6zYwmn86R0Gd8L0Yi7yQuOps9/SyvBPAiZWBstnx3pKHn/QY52X5m7 elfGUxgQBoQBYeB1YaAk1TBqls9phhFRyXxsmxlDM/zID+UoKB9v5uW0KC6I6OxmN88FbuVloofT LTjyaeQuX72MyGE/QxrkFOQnkaVLQjXiQ/nkTFJQrsvGNtK1DWXYXAlCgctHrK99Ex1vRgNptPSP RlBe/dGrx9NWsPGL+gICYyd6mAx7vi4RHaTiIKr97u/ETYO0YlClYeT0Hj+JpZE5EDFsjBuiwiEX jvDiCDikqWBzYz/rOC4DMaI35ONGGs2w4kEpLZAJsAPZX5Ev19VPUGkRaeQQIz+7n1jRIq3cZu9T a7eNWc6ntvadzq8Ykxl+OIqOk0Z6Wk6cnY5n4JSCmGLseCOnPYPVBjhDRs6HdJ4mc+wNGDaFEk7d 2W0YNRxiE+qwQoVj9ppsbE5goybmTm9T5JObDKFT7HmbS9qsKGN4SW9PHHOVKVwJA8LAS2BgGqnm CDBXBOLFKRf2WU47yJHYWQTRPu/ErcjrxXcg9rzUnnNZuQ52AKpo20sIb1b/NDpepLbAEejRacpH 5c8O8jWyzTcGEoH2VB0+33uWLx2RySyLSl782bCp8QWNlI8xNjpSagLkwP09RNipHXlc+LIYxxvL g1Y6IIfc/0H2yTEr022iLbneoe6iXnx/hp88H/scSUcx2nMHmZKjyfjq87BwPJfYizp4HnfHxtK5 SN7VfBlO0ElY4rl/wMAL4u4ldIHKkEEWBoQBYUAYqDcqEukoN5GlpWwGUkV2crTTjT2la/T3QRRR PqU45LzQCrxDmZOo9IqIb08IJrRM5hIRtPasyF+VP57b16OSRKA7+aPTG0Bqen0ku0zWOHd9IGhp CX+QRyVPwkHPLZ6Q28Pmy4yxiswhek3ELbdpyPNN8niufA8klaL5U+JNkfZeb8jzQLzP5lfUN8OP p0XRxUiZZINM53bY5xgnntfuhCWnrK8m0Xf8DuQ+W3WaOSKoq3KkKz0x5FuLSA+nsWzrK8lNchMG hAFh4I1gYBqpzhsLOfI5RLUWZKgyrNXGQUSfZ0aCjf5AAJAqkNtQ/P0iZDpH0kCOIkVjILsTAK+i yGW0P/VlFkWeRjcn0ehTg3zilFRR2MG5ohsP8XnuH2+m6+kKuFxopgBI1lwet2cWpb9JvuQwVJHt A7nm57NzkhwcOJWMl92VhTz+mZxmh4mj+zupEzPnta8QFePK73AKx0FPJDmwQ3RYTcgrFTIIb8Qg nOoFjYPGQRgQBoSBKQZqUk3G7xAJ5OXjxVJ43sCE6FqONDKhxu89xcQMONWxTDGxZWYyxIel47zs /QKgOIueZ4JRRRRzVLGKLpafnbQ/R8gHp2hCmDsJgiyLCC0/w8RyIG/ctsmqRim7Rbumxp7eGRyL dJY1ny5x6EOUwX2YOimpP4fnirJKAh54LOcXItUR/S4dwjOiXq1s5M2ElGoz23DIx2B254hWEDii nb+fOQBYOanKGzboJlm+DsdYJFLLtcKAMCAMCAMvhYF5TvULkM6XaqTKEeCFAWFAGBAGhAFhQBgQ Bt5mDIhUy3nQUpYwIAwIA8KAMCAMCAPCwEUMiFRfFODb7DGpbfLohQFhQBgQBoQBYUAYeDMYEKkW qZZnKgwIA8KAMCAMCAPCgDBwEQMi1RcFKO/vzXh/krPkLAwIA8KAMCAMCANvMwZEqkWq5ZkKA8KA MCAMCAPCgDAgDFzEgEj1RQG+zR6T2iaPXhgQBoQBYUAYEAaEgTeDAZFqkWp5psKAMCAMCAPCgDAg DAgDFzEgUn1RgPL+3oz3JzlLzsKAMCAMCAPCgDDwNmNApFqkWp6pMCAMCAPCgDAgDAgDwsBFDIhU XxTg2+wxqW3y6IUBYUAYEAaEAWFAGHgzGBCpFqmWZyoMCAPCgDAgDAgDwoAwcBEDItUXBSjv7814 f5Kz5CwMCAPCgDAgDAgDbzMGRKpFquWZCgPCgDAgDAgDwoAwIAxcxIBI9UUBvs0ek9omj14YEAaE AWFAGBAGhIE3gwGRapFqeabCgDAgDAgDwoAwIAwIAxcxMCfV/65g9fTZD37wgyfhx+ff//73ywHB 59//9/Q93uHPrDOzz9t3XCfKxGf2d6+fy2i/z9oFz62XEW3p7aUyuWwu74f/8Ye9z+hfbofXU8nz ZPC4nkF29F7/PI1Bb0v06Qf/gcaL348xyzKy96s6D89NxnzHKz6MZ5JRbvPZOHKd/O70Pasv1Vn1 b/gsnudxt3rRl/zvIAeuq/i9mh/cPv6+HBuaS9Wcq+QAOQ3zp8LXBKtoxwxfOzi45ZmM9z638vwq dBLPa65zqregD1iuhY6wsiqMHObvpI239B/PljqV25HxNdE/jKMf/acf7RtUKs/bkudS1kdJT7Bs gJ3BpmS8FXP1TG6r+XKKW+5ftlFV2+KzSveX8kmYWc3NLftRyad95jKNvlTytXr73M1zBjJ4hu06 Gxt9/2aippLzm5dzTap5csVkLYkiFElTOjxhB6KZlSnIWiYztyguEEUi9tlgZgViStQ+Y+X1zm+9 cyDEUGAVcc6Kz/sZ/fjRf340SCWZsfYWRn4KeFaQ+Xerw/qSSHJFikqCSERhRiBXzsuMQAzkFI7M gtjw86cEGOUlQ2TvuXFMBpCNadWXAyGFjBNRyEQJf6NMIyH4vXKuBsIKfCfcnzk7TtjTWGfibu36 4Q8fnbsZ2cqGM88FYBH9wHzp9ZuBpnbY91bnSzpZPB+q/nT5UzuG5yrj3z7DMy6fGAfMfcxb/u6A cZCoG8gF6mF5Mjk6EBzC+KkhBEliXBAB4nGayifrXxDjG6I0jqGkt2fOf+5T9W71zKksZs5e4exX js/UEQ87dbAjIaf8eTWfVvIpnbCQZXbYhzaSzZs5IR4QuTXYkbE9wTrPpeeOjd5780RPMn9zMi9J 9Sd//cnDz//254eohX1m39kA/fxv2u9/9fjcx3/x8cOnv/jU//74Lz/u79mkt+/sHfv59O8+ffjo Zx+NRLaYvAcCT88YkbE6P/rpYzk5ylwZ5gNxaeVZe60M+xfvWFledmsjf97roXbYs/bcB3/6wSPZ yI5IjlzkaNbCeOXIjf1tdZnMvd2QIRniISIBskmEbKVkS0NI/TlE3DYMb0m20liD0Fi/mDy6g8CG ob1nfTYszQzGEJUKw8fP3hR1X5Gn+M7abFjP8wTGNTt5IG1MDO33D//8Q+/7u7/z7iMOiRzlSBtH lWbjeXiHyPxhToOc8apTIpCMK/TBsdjmyYd/9mHHfnZurijxAeMxx123tPEvnSQiEFU7ZkRvSV6C sFbYP5D7NGZLRyOexRy2/jDxvYUMnRHzGQa7vos+up5uWPafJuOzsZuukvC8YWcGumTiWFp9pter 9h6cyh3HJrUjO/y8Gur2y+Zx6KDZiuLMWfXPs4NSBIgOzj90VMYu6VbgM/+bMTLYN5rTGCd7/rAK Yc+1H/Q/Y8nqPHVYN+zAGZb0/Zsje5L1m5F1SaqdMDTlykbHfrfPOgEKUmnGDpPXiPPn//h5V44g 0rw06MSc3ulRITJMGPysPN757Xce3v/x+70N+ftBcSRFNyiN+M6dgUb0s5Gwz7qSpehWBcrP/+Hz 7mgs0xWyYdlRSEaam4I2eTHJt78/+/vPuvGrInFsOA9OSrFMvIowdeU8W02gsTtEZ9p3HlGeLP8a HqxvPapb1RFO0EAKzWg3THajlvETRmMgqtHvoa/ZIHIaUfG8E/4wiEYqbRxgMFckpoo2G7Ey/GSj XEXuM5ns7QgczSJI6KsRh46hwBVIciZZXT4kGyf0Qb6tLpR3CwncVeruoIfzjnfgUB7aGmOxmvtw ijnCX61WVLgYZJEJHeY0YSL3kfGC7wwzNocPqztnq3WsM7juiKryWPAqidVzkA/IF0W7TcaOxw3d BLxlp6vr86KMlYOS63yRdKJMrlObGGd9LtIzmOeDLNv3gzPGeoYJcawc3SIfdryZEFfjsZJPdgAq XPR5RYGyrCu7HU4pTzv40DNvhsBJzm+fnKfpH0Y4OWrR/yZFhei0DSyWUxF5s89yGfYZItxVZJEn dfW9RYWh9LPn3ZdZkSO8oQi6cQtliDKtjRxRH/K8i0jJLLKP/iBaf8sEAFGzdrgBjjYiEppJx+Cc EGnqdVLkqCLZ/NxAtqi/ndhlh6WI6g1jSWOSCZuvYkT/2JCUxNf6NVvWDONmbcwkHmVVhqgikFkW M6LAKzfDMwVGDEMeOad0FcMZOwqcisBYYVkcHLfJ8ru9w88ajtgRq5avd/CJMm2Vp8LgThlnz7jz 3oy99QHzmp2C6bL3ZH/A2fNb308IdOmMFoTV+gzZmY7EuHfH8IaVLF7NyNhk5yfLeTrvA5s2pjuR 6qHciS5gfVWSNciozdcK95DrwVms5tYJge/kkHSHjbk5xRZAQdDHf0/jUDlfVXmDziycny4P6EqO 2ofuqhxjdtQHm4hUkSDvlc5iuTO5705BxmnS9WXAYlP+Z3Nc3799ZFBj8jJjMt2oaBMYy9tYIuKI pUdQI63DBgNpH6YYOOpohnymqJlgHAwAkQWP9kTEFsaWFRsUD6ekOIn4ZYvmhhIwxY32Wxn2HZY8 c06ufe4EpL1ritb+HsgcEVRrBy9X5z6ZMvOIPaWZ7IC3t7URLyZDs3eRzoJlcvsXaSlWlsnGl+tb e6zvZkBdlmFobBUAKSb2mdUJQs8OjH3OUXwnO2GMrG0mZ+uvEQdT3uYEsTMEo4UlV2s3lp17P0lx W3mGH2vzBz/5wMeEyeLv/h+/633xtrZ62flD35iQWTlwpjjixPn10/Gxum08m2w99SlSoNigAqfW L/s+y8ue9RWdJhcfg0gjsRWewTC2uhCdRUpSFUX0SH9gFGPGxADyRVQO7c7kAash9hzazNFwlqXh 6MtffdmdIRuPGTHdwXp+ppKZy4Jw5qsEbSytXSYDyAjttLGF0wMH2XBs/bMfJigYT8OJO8itLpsP aBdk0x2KSA/jaC3eQwqZrajZe+zsY7xtHLEa2FOabolSG4YCgyYT6BYmp2fyYZKHtD3DIM/t1djZ fIGsre+Yu5CDyRx6o6fVNbzjM7cLlCponyPtzldCwrEyPZIjr2eYgj5mTCJdD7JCmw79JbLvuj3m FrDktoAIcbYLaNtKPrnv7mxHKhjmPFIq2RGCY3wmH1/JbHOjp2MWgRFfeY7VKx+HCFhYfVY+9Kl9 jnHh+Xc2Bvr+ZQia5Pjtk+Nyo6ITgFDelSfspCKINSZmRY5NMdokhwKryPQhMp2jDzG5O0EncuWG lQhON4ZE+vGZKVUoaleYlkOYvG83rpEfDmVXEtt4D0Z3FdVgI3Y6UaJcU27WXiOl9s6QAkCbWjzf mJS9O0SR587OB5wj6z+MDBs/J9+Rr24EAMrVygY5QGQZETEryz4bxtQIYaT5MDGpMOIEqsjft/c4 cuPEmlJeYARA/DmvHWPM8kL+P9pj5dm7VVrGsExN0S0jWq/++FVvR191wTOB0WyokTaV6zL85VQo xukQCW5lY0zR1+4U2lyJ+eD9iv0GvpEwcMLjAbl0UmRzPKVbeDQVeabmLDXSY595qk6kfjEpYpyd 4vskvQA6p0fKwhHJKVnYz1HOd5CBSOXCeCM3H1gciEdEDK2e9//k/Y4/OKpeDznagzPeMODR+1h1 QbocZMQBCY8Ih6OedUYZ+Z7Ii0m+y4b0GOYyBzQ4CAIM8UpY3hMzG8fKgbJ3Qb7g6PAK26CfA8uY f4xHd4qJbPtqDvVtVz4gw32+s/Pf6jcsoy4EUIYVSdi+mBeQ9Rf/9IWP8yxHOetp1n+8V8cdYOwL sj0zsfLTU5TaZ+YY9eBIRNCBHZRbyYf1F+TOuofHz2Q9OPSEtT6m4cxWe42uznW9/+0jjRqz9Zgt z6lG1C0bfjbG8F67UQ7FziSLl3C7YeTn0nIZyh82AEbkPCtAGDr7t0ckYVzCSELRQQFBMecoKxNH j3JHu3pkgck3/c65eUPbkbKBvMVE3lfghBL0KBC1hd/hSBHnaNrnMJa9PRFhNRlwZB/RT0QlEeXo fbeIRxgWI2nIgYbch79p6RQRWOAAEdO8dI3VkMMGoRRdyakWTD45gmL9gJPDsuqpSlGuRywR+QRO mJTE6gjKMGwYoYYBsnoYP8CUE+Vw5oA3RJ8y8XTyGLLlcbLnEFFGv+1vN+i00TeXa+9ZO6o0l8rp ZBmiLx7tj5UaJto55zSvvuySnR2F3B0Amsc5zxoraU464hQKbKD0+d7mHO8B8Wh2YJ/L4ihrJ82x ygBMZsxjRSRHUDvBiXnPaWFMdFD/4LzdEKmGXsZqT1XPUj4IBgROHTOxWXHm4OZxYyfB8Rob0ZnE oixvb1qty3oDuhcrCcBy1w8njljVPkS74XwxRj1SHUEhr6tIK4NzAMekCprMgkFL+TT5Zz2LlS04 /1idY3vpjlJsVl/JB7JGAITHgfc3AUc85qyHeIXP6ssR9p25rGdEmr9rGJinfwRpwNJqlQIBpdQV C5PZMPCZSFQEtNpxXS2rHchtQcwRVeLNb0xQoUA8rSB2vIN0o61YwkS7EFEcCC0ZwSEKmqJFeKcT nU1ijf5b3YjQzoiLK+SI9nJk0saHIx/Zicj9tv5yNGuYDNFuGHJ85yeo0LI8E3ZW1mxEh0hKnLYC Wecoaic2sXm2E5kwgp7KYZHy2LBm7cpRevusk8rohxOgSYQc5CpH5DgHH6R6MEhh9IaI6mR3P0fz Mjnz9hIJrIw+nIchKt76xvLhHHje/5DHHTLs453msX0Oo49n8koEiOyMoNyiWEEoGBMg+6wr3Hki x4hJEogeiDQTXvsdzgnScEDM8R4cCqT7WH85mNDHPWRl8xuOJGQwkBKa9z3CXsh5R05DulnD1+Aw Uj0r+Qz4DaeS500mmYeIOq3OYH55KgvNQ8wj4Jkj0MAT1+OOUDpRZ9AbNzgeHaeIdBcrnzP7xcQS AYpq5a/Sn9xnx0G0+eDEoz3QR3EKSaVzsR/DvkM6JVbxPF0LQZcg66wTZvoZGIW+PzgVraypfb/R wdnBtJ4R+b4XDExJdTbCHP0bSCotEecjquBVIwoK5eo5jUw2koLOhhnPWhoEFEh1vixvxjDlzPl4 1uauQELRmcLJaR1WhhutWJpjQpZJlvcrcr2Rq5cJEiJGB6dkQzFhmd2WAQE41Im0Ffvb+uApImRQ D8QyFC6iLpz3zpFNHnervyKWUNqQVV7itnYghQby6A4MEQknhnR84xD1iTxDNo45qusEKI5aw3NI mWESZPX0SHlEpbw9cXxYx42R0sJw22fDqk3glYk65DREK6OvfJ55J4q2vIsNaylC3klKLINXUTSP LPJpPHSKw2F5vpXPx0cy8bZ+cQoP+u+bPUkWSP1wWVD+52yFIW8WzUvrKwXqy84x/9hJxBwDmUE0 H2Whj4w5x4z1P1Kk7HeO9jlOKfXF9UQ6Xac72YEd/M16zdqASDmIJS+XA0Od7BcOXbXCUMnJ9Vbk k7PzwM92Z4D0c5dPkRLkhM32mZwdqUeBjME5pqgvyCTjsM+LmGMmG6Shdd1WOKW8wpLlvcKQzTnk Bdt42e+wT7v2q5ff2ow85u7Am/7mAAkc2vQZsIq0jR40iNWBA/lv7zMOel56zG/GrpWFuXsox1Zr wpYd9HMm+7Hfh+d+havVEZT3QojUD5H7qxioz6mmfGIYA0Q2OE/OiUpWwqQU3BBTFBPE1gjgYdks RXBBHrmDNqmNYOaorD2T80vdSODoqlCA1lYYWVYapnxYYWD5rEcZkHsd5bCxwHI/DAnay5FpznPd HTB2GmzZn+WYl/IRKWeFnXNiEYXuu92J1LNxzESl9yeOUxuiX0Fqu0NBJMza2FN1sDwM5U0OVT+W zogaduMXUaUqn69v2KGUFmuvtcdyYnmckGqBvublZx6XisSa/KxMOHWIqtnY5hxFXrJ1B6M9YxvX HE8RFbT6sNfAsUhRV0THWH4woH2zYivH80KJePuSdpwb3+sK4wryiIgqE8kchQbR9sgjRdo4Ku8b oSjfNM/nvOQ+W2Wp5sOQ5hJ6ARE6fz4+y+k3vArGssBSP9rPsqjSjxDJBjke6glHkGXj+eyxIZmj hIfUksC1tcNJXuyZMMK1S6iBFehh6GWfgynyvZKPvZfTVRBZH6LH+QzzpKcxHqt8W6TisK3ASgwT aujkrqPDOcdqQ7WiOdOng663gEJsYubnZ/YL/TfM4TQrngcmJ57zPHY9ys0pf63+nOPN7ajkY/Xl dzB3ORDU50qQ+iEivtDPqN/1Ip0utSOfXRum50RQv4sYmF/+kja+IMIDQ4qznPEvLzUzseTcUGwW Otw+yPlsiIQUOW5WLtI2OL3DFJl59MihQ5QUG2E4Mgfl6oqxKT4j+MOyZGweYwNQ5UBaW3zpOHJc cw7doDTpgocdkKEsJvqIFA4R6CBobljNYQgFCaLAjgmia2xIrf/9YoFm4EHOcdIG3sfY4l8rHykD IHs5Uo+LfhBNheKGAer/0sUTTNr8qLGI5qDv6B8bMXsOGEM+pmMjyECPWsYJIu78kLz6uLXPDhhO BOLd//KuE/9+yoYZyzi9xMpFdNb60U9YoY1WOYKMlQhPG4gNsyBy7ijG5kw4SGxMUZaf/tB+fFNT 5EMzUWFHy773yFY2okE6gPN+4g05SUzesNJkOHD8F9E5zDOW7w728QxSmoBbbzM57Fjl4Oh1Xx2J duNvKxMnJ9jvPAesfUhlwYk4Ho1E32OOOWkM59pXLSL6yTgGWQbJ7pvKaJ5CVsAyyDXIaenQJScT q1+Os9i8a3jzFS3SnwgOQKYsD7Qbcwa56XimX0YUdXOk3cpbzU/Ux/oL+hnjas/wqhii0Jls8wop 5tgZjnw82/iwnkBABzrmzH4xiUb6X055mo5Vdm5CN2eSPJVP5E13Qk/7O6ArgB934pKeOtPPkAtS 4FjmHRexwXdl38/GQd+LVH8XMbDMqQYBYVK6EpIZ8P5sGCUmdvY7K5JKKfXPErkeImEbuXUgZJ1g BEnPS4iuRCh6OBi3KioTkb8sB+4L96H8PEdiC6MJ2c/qGfrH7ac296gJCCaNyUD6J9cd8zPDWFWr CpxL2b73ZUqcARsy6+Q8Xbt9dsV2PwWE6h1WF4pxGkgAyYdJJhOQQc6TaJyPCWSIqDORjmpu+JxI eM0EpSIL3k7MAXMuksxW7R36mLCVif1wcdDEkeWo94CbFMXksqs+Ym5tK1rG8s6cT/m8rLd6uhOl mg2yIMLOTgl+n2HX6qgw5WNapE8BQ9PI/UTnVDLL89tzbydj2PUJzYW8nF9hrPostz3Pz/xO1ulO yvP5yuHsZlwP+nMDA9vYKnQw2y+UM71UCfYkOZ6Z4FYpEzvyyRjEO+ZE9c3lWR4Y/zP9DFknZ/jM oavkc0Xeelek+x4xUJLqSgkOBMQmLyuTCcE4m6Sr5bxMzivikYlnafy5rSsjnYl1kYJw1p9M5DuJ QNk3GExWqpnQHgxylMspJzPCyE7FQbmzkuboGkeriLjMcGLtsxWAvBHQ6huIV0EAKvJ+6lAxmaDx Rl/LdtL4dscqO0wUcTqMPck8R8RYxjktYou8L7CYSTHPgZKAtLIyMaicZORuVqskmVD2Z4gYMXk4 jPGtuE/PYwWASbn3YVLuEmOVA8arFJReUjlEy/EjvOTnOqlPuhLjd0v6B4/zkK9PmF7JJxuynL7g eJnIqep/np8z/bRydPOFJAOp5Hl4A7Ge6o0T+wWclYGE5LhgBQORY+zbwUoVnCguc0c+M6cLq71L ZwPOeLFXicd1SGFhB3lHPieBoXskS+qTnIAdDCyP1JtOuphQbKx5GZQ3Y3E0xZUqLWUdGpg85wNp JiUxLM9igtP7TJRQD/rTL22g6F8m8fz+SjnnaFfv061EIkerM+Fs5VXRth4pA8nLOZBEEg7L9FC+ iUznyPEwDklhs/FGWg/yg7G8OBgWEPSEAza4HA1m2Q/EA6Q/R4EXZIvbOo2kZmLCfyNifDa2xVhw NK+3I8ufys3P8Fwpo6ZFnRUpWJHy6Xxkkp9IRXYoGP/ZyT1zSjuRmkVbw9iX85Hmx0DIYvyGKBuR tMoBqGTUCXYiHFlmZytxPJc8hWIRWV4p8BVpPpNP18Op7mn0fLaSZvqc5t/USU/zhfs8dSaquXAD kduJuk/tV+jMw/w5czQKp4qdqTzWpQ0jfZ3bZ3rVotR8xjXLn52hwXGOdvV9Oiv9Rd8t5XPDWOwQ ET0jwnovGDhN/+CODt5xkQfNpO1MYVQGdBZRPBiQ7InzsvzKUEyUyaHeM9KUIppZ+ZYRDmrjLeAZ +l70uyIQnDZQRZbyMnHV3mH8JuRviHAtIkizyEzZ9iKdglMh8masynggKpTlvCINszGrHIqh3cn4 Z+fMnp06XjPDVBhnL4edwJTK052rVGZPTSAnpmrjILOEs1kKwDYh3JhPeawOMntGGWUkO8rZIb8+ T/Ly/mTMhjSa2VxY9MGDDbsEO+FjOp47xCc5SYdUuImzP5BpSlWqUlAGZ5bS8EonaqHjcpBlS4+y QzhzmCfzbbYSgr5XztfMXnLbD+R6sfqXHVN2Wqf6Ew52oS+2ZGa26sS+75aj50SWv2sYmEeqKwNw 8llFWtxYcESDylgppamByREMinxmArnKLQWJWBmy3J9ZVGZK1shgQQ67RJJJTtXGFQlEHVm+ZaRk Is9s8Eo5MR5OjOF0YmXCzkb8hIQMBmxF6iuyMnEUMkE5cwhmRvRAOiYEx8lwcTlQtdJSOkgTorDt QBDpL53a3fl25jROyM0ZLs76XDryFO2rAgElqUlE4nTOFeNZEutM2LI8J/gvdeNzHIszx42+Zwcs k7eZnlwSenJKqvcPK083tHUrPWXTqbhi9HP/+7gV84ZlMIvQl2NQYa2tchzaXejjlR3Zcly5Hzk9 MOb8QWcWhHxmP27Rr1fGSe+K3L8pDJSkepVrhYZ5Dmbh4R+Wo9jog1wXxoGXZ3MuY0nWMcGzIklG ilMJWMEsN+mQMTDlNzybIzspsoqozIH0bhrEfJaqtbkiXYh8rKImvMy7WqbNaSWs2CvFy+SrXGo+ MWaDkxXP5j4Oy/Ix1lXaA/rITkAVGasiPJVR6uMXqUp4hq/8npF5J8hpU+iwarDCwOI7jtQfjFNF VpMhNBmV0eZFqgzwxXPGP0s5wWgb2jWkg1SpSBtE56X0D9pekd2M2yrlqfedAwG2L4CcoOmK3Cwq GjLkOZeJf5/TUc/gkG/qkaUBIR2Zx+2U5MS7WScOTjjpz2qurM47trFfrYDZuxVxzc7XTAe4LKso LJyqC/IdyGUrxzBVpltNAgDdVlEb+/jgEIBkm/qcBN6STeb+Yu5m+VVtXNn3gwxngS1ybldO2sxh e1MkSPWIcL8kBrYi1TYZZ7ugYXyrZWZXkHFk2uxiAS+7KUo7A3h2dnBXVk3ZdONX7LquPOaKnFmb 8/FtWaj2nh8L186QPRwbFsrCcobtnFDbPGIb82aRd3uGb2hjomx5cvgexyWx0oOi9XN/2xFmOEKM DRMuOsDxbvmsUqvPSWGTH45P8rNfq3zIppRx+QbOcZ0SskqZ3miUDBdWj8nvi3/+4hB9OWyyI2cq R37yxSvcP2zEs/5XOfUuo4j++OU/dB14VvrDRq6iv1aXnUvtx1GlSz7YITHCjXE9OC8UQR4IbiKl TLgx33i+MK75DGXIw7FIRMZyNqtLdgZil97Jhj3LazsiyX1LjsEt+idHMcuofSt/phtY3uzIYayG s/lnJAbOzoRg8jnXmUQORIgIYHYgn2sI8lhy4KFyjrLOrfSG9cE+Z4xBz81Icj/OM+bdkJJTBE0y rqAPsaozOEo5DTA7kEVwZJvcxdhmErxzOYo7uOFsMrZQd98wfLI3xG0FXWCVsXDWF7/zoR2vafoX Y1YFOyr7zgS5ByHSpkge88pmV873WZufi3e9J9L8JjEwJdVQktVk5c0X5eaURDRssuIw/lnU9Z3f escJbD/oP0e0kpGdCSlH0g6R6lZuP0M3GawqsoVzgAdiE23ptzaGY8DkwhSmKS7rd7+xLkVI/Dxp uvHM3rdNKKzk7DO/NbA9WyltU1jDzXqhsHFGLr/D9Q2GLiIjbJRQLp9pDGNfReduUYiZHGADzoo8 MgmEnDP58BNHIM8iooZziIEdtBkOB8bfz4e2q38nqx5sVGbGzDYFVRdiZDnhTN1ZmVVUiI0fl5fL ZqOPzU0Hxy/NVT7PGePB5XB/UVZFeKcb0DYi1SBjFRm2Pt6qf7rjADJT3D45rI5lR4n+xvy0Ngyk nFYpVgrciWdztPh87Y7HlCc/6JPVkYqbMs3tyitUwH/Oq57N7YyL4bz1tKLRMRtkdoYp7vNBLim4 g3P183wecGPOkxH+IgXMCW76rnTACvkenmNdQQ7bMH8JR+/89jvH9I1JxHdwxKktfE45MF5iD04A 8tkJZ37hVrqU62x+DXMlR8gRnWZ7PdkrcMDAjQGZN0mUVJeI+S4Glqd/WCGcjjCLxEI5caVZEfAl GVkJQolzJDZ7wPnIpZ5ziogQlqZzOkF8zkrVo7WIIFIkqYrA+BFJcVlGVtZ8fXElcPTHiXkoLjYa fjlD3DiJ/vUTM0LBfP6Pnz9et54iNzwWfrtdutDDor58PW2PSFCEJqe2ZNKeL17Ifey3lF1Uhvka aKuHSTSwMDP6FcmuxgMX1gx5uCebw3rUlwlPIuxw5PhZ+71ftJKimSWW01KpOZkzEjSb3H2upkiY PT/cOJpIwmDcaCwP5w9TOkfWBTNCfyDcN2LlOfrnECkv0lCmGxUxtnRcIAcYqhtHmYQwRrP80K5+ 2UYhC155GMY59NQu6Tsj9j34sHAg8jGJh34Sjqw8vmxmCGYsxrzPGdpIi7YzxqbpelF2aZtAdIlM gtwfgi034rKvzPJ+oZVzMyk/64zDnC+wi7Z74CTdaDxgH7Zx0TfTiZWDN9jySfqYE3nc81A4BDP8 zE4huSUws0tw9JzI8JvGQE2q2yTE9dsWuTKiZwQhL+PhjE77DhGuIXJG6QU4Zm0g4OzdR0QWN6dx OViq8uWqiOQ60UyKGDdJ2RI2bhjMkVpPQ7Gb4JpC4rNEnZhReX55SSPCuFEqD4w969cQFxFNd0bI KOOK7KqOHJXGkh76z44GDHY2CCBMvARr42GEHO32lA6kNBCxrhwcGJ4eCUrjhHdwI1qO2J2BuEeq ox2QTyawGCtPk4jLZHJkH44frq8HfngMEAm3/iNab58x6XEHw6L+sXqQ04N6akhzgnB9sWHwQM7I gMFBYgcTY+erGJHO485PyALPYnUD597iWU5LMcfDcGzj7LcqxpxgpwTzBdFRzOWewkJjC8Joz+Sl eJOP3+wYDilHtNEnzL++etKe5TZtE8IX0D/WfqwCQGYmL76a2mSNlA77DjdXVg4wHDGXYzjC3B/7 3frPR565ziRShBsycSsqbsDsUdwgJnBmbRx45epsXj3ne66DbzjsesMc/wgI9DOZ6Xp6ew5X1tv3 7iDHNezQd5iL+A5jgJs5odeGWy+jDF65hCPQsdjk4zdS0qY9kHvMTRsPW8HChSksI/7OU+jaXDrc Nrogyja23uemS+x3YKNHfuGIBzbg1GMOZUfAcYGbDJvMB1IaKxVY/USUumOx2hxY5G5D90LP5GAX OwtT+x46w1fjQma4LTLLjx0tLu+w8phz3Z+5+vKcOaB3RLxfEgPTa8p7dLRNIDOSICSo3JRdzxMO b9WJjeXqFstMSP+AAq06Aa95INRRt5WLiWgT368JbhMaRN9JclzZCw8aRAvl4VnPG0VkF2QmOQAg Ohzhy0vacDh6XxA1IQVo38HIsBJFWTA0SOHIS3pYUgVBAAkAmbR/uR34vdcZbYHBhJFG3rQbvqx8 ox95zPn88cP43Rjp4ffzcjhH61jp2zhiPKo2GwYGQpSi0LwywGOWIySO7cDHLI3BsGjPDddMwzGL ehGR7FFBrKIw0TIiRs4P2uXjFKsp1gaua+bETPvfxoZXXPLyPhs4XL+d52l20pxQWLpWyhnPV6X3 PPeJY1bpAVynDrndqn+YpIGk4NIMzA/oLnvWnvE9ETFXfO60vvHqEJa8qzxW+84ddcrDh4Nm5SAy h/J9r0Y8OxBz2vPAcoFuuJpSw2WCBOb8cOAMAQY4C9Y/4G7YuxD6w9oGZ8Gduka4UF+ftxRVdWLc 7IUTUtqQibQ1H5+GGZsbNjZZT5l84QShnj4vzAm3q8pp9Q4pdLwqyhjIAYQzI8tpjNBJKA9BApYX rxpCZ9tnvArH42uytH0Z7HB1GYdTlwnxymmdfddXTRKJXdl3t6+Gebt+PRwsjA+CNyv8mBPWx5RT ME9WDc/GRN+LHL8NGJiSanjAs0YiksvfGxGA8uDPPXrQFJz98HIfJieedcLIijfIB5Q1316V6+8p EGnJL7cfkYy8cdCVQhg1EDOQmRx56FGriGbjXSYibJBzvzJh4b+Z/LjhI4IH2ZkcPUIeihAb4hAp tM9z6saQ8hKGEKsHg4xIfp3sVoQ5ORA+lrt5n2nJtjsu5uCkDaiIgODz0ghEebbhk4lNH5dwnLIT lJ0/RIs9Wk1kkduEaBTypYHXavmZHSCOVnOudjfmtHw6OF8RDbOych1uZC3aHSTNnEVejeBx7fMF S8KTSBAil50QxXhwO9EXz9MOcghHiOclCFkm3meKr3R+CqOfl61Z/4CAYGWjOzhtjg+OWkQREW30 udOIgpPIAs8uH5p7PaUjVlIw70CsKiePyeegO7BaZylnFvFtZeLnbIn+TKbV91Ym14FVEa+L5nze 58Hzg+eGO+5BhkGygNmhrtDzvEkOZ4KDzEH22N/QAyM4XScc7B5ISTrKgxFGWiO3u4954L+vAIbO wQrVthzTilS3e+HAAncIAAHTvBLGhBS4g57OOLPvB1sQ6TbcR2AJfe1lxYoROzp4dtB1qU/T+RXP sU0Z5sEGfjBuw8q2SPU0z34bl4rwf+MyLEk1lqEq0oHBtcloSoE99r5cHwSVySIirjllgy8LqIg6 SPBgmDH5SQlAaWcy0FMNKIqY0w1gAKC4oBDtb4/+RWQgG0As56LOw0kVoSSg5HJEFO+x8faUE9o4 wuknMGD2vZEZl6WlocRGxiHyQsu2Vk83eDTpPALWFG5exgZB5khQ1facDlQ6C7NJzmkHQSBYcXBf eewRsednYbiRvjC7tKEbUsZnii7DIelpJMnQsLE0+UydT4uWxWoOO1hDHyOFyMYty7eTCjrxhfGH 6J/LBkTBlo8DOzk3FwT/YMQyGYlTZnhsQd55HKx8izZlApadN16F2E3/eAn900lKrJxxdBWOKxMB 7lufX2mznckZDuCZfNDXq/pnGK/kcFZHms6wn40y9AbrusPFLUSe/LSS0Ge8MZrL7U7dDfo562vX 47RCk3Vur+9kfuVoevU3k8ab02wW+ivr00NQ5Uw+7XuL4ps95fFnHW7zb6l/NsiVYyAcuKx/duw7 p3ZgXKrPBtnHuA24i7ay/czzS6RSUehvCwZKUg2jwmQzd4hJLKIBnJPGxqR72bRU1AkYGXXkp9l3 nE/GHjomm/3LyssVTFPIleE2hcFRvk6+itQHVgD2To5qcbuzooYB4KUv9N0jetTXoU30eV+mDEWD PHJ+N5MCRD84RxjpMSDePjYURaociBwl9sg3ReUyIcypGLukqRzfwAZO4kBZiNihbl6WHJRwWo60 933J3ohAyDcvV1b4tudzxA112/u8EsNtG46oiwhnbnt1ZNjgRFEOpjtCtsE1HLoh5SOey0vcOLZy MJDoux2/ZbnbydgCh4O8g9TkfQEcvbXnmTCzUWWDmVdaZo4lt+uq/unkLxx/G/+eylQY9S7HkFVO YWHZM+lbySfPlefoH+DWccNELAcTwrHKeaorI4Tl++4kFlF5yBGrRZgvfRUs2oG+cdRzpZ97sMb0 cqqX53fZ/lbnkDpHpydlm5FxyH8zxkxucBB3ddjBPpH+ynqlshNn9sscFCPWXFaOps/0zw754KBF D+KQ07a07zHuVXrggBUEfSLPHu3CMbUuA6SKIkrdyj58ZjorAgc7fdMzIuDfJAZqUh3LyT3aYkSj fcZ5df3YMQA+orq2BH/oUBi1YTkpTRI77WCIgJARgTeNcq1dRjY9ehKKgI0dPjPFxIqUzypGpNeI iCmvQclQZJrTKLLC9TzNyOtepT70UyeK6AEUCPIyub127FIVFeIUESc3lN/O5JOjqHnDJd4zOUC5 cU6itSvnLOb+993nMK676R9JDnk5PDsuTgYDL73vCT/oDy/DMl6yY9dTToqoNTtdaIuvmLQVAZcp yJf9Tae6ZNy7Q5Z25+dIItKiKodlyOuN1ABeNs3GmiPxVt6Qo2kOUuw5YKKb22zzgfcmoBx7x/CQ yS/6Z3jx3Gd23iKya++yc3Om8JDOckX/cM4w0qgQAUUaEPBuebucf8uONJ7pToelXtHejUo+V/VP 1wGBcc6vHRzzhklrK8jXmVyH7y0aajo0HC04V1gJqrDDjtcHP3nMc2adgY2sZ/rZ3jNd/OqPXw05 ufa5jYOVU21k255frW/dZrDeiKCCtS+nlWUM3CLLSn/BoTc5Am+8erGyX1b3kBpjQSbaW7Srf3b6 UOkfe29p30P/9ZSqtB/JbaudioKVDdI99tmX//LlY754sbnSHVrWmclx2+mTnhGp/iYxMD1SD1Eo j+5ZegEt/7nCJYPpHjPtircOmSePaCGiyOUENs+0TcBXf/Sqn/CQl5ShpO2YOM5NqyKr8LDtOZxY AoPv7aJLUGBUsgJHbrKnt2CZrTjL0/pjytiUiBmZ4Ri4yNXE0h+iOLzMbDKC7EpiGXLEUhwUbV/y D3Jq/UN6DVJoeLys3/YM6vAodmuzEaDDUVWxi53HzMbbjUTa0GiyrHKJTwFNitLb24iqtQlkJUcG mfDkpUQYaM5BRXT9EHWCsY38/n4pAUWzQah91aS1KV/GgFxqEB/7txNdjvRgF3/8y+QDhMX7Eqdp 5Igh9gj00zvi2Z7DTRtQPbIeJxCws4BxB/HDOd5IE7IcSya7cAKYBPBYIGcZxpQ3acJAZqKfc/t3 8+6v6B+Mu8+b2KxmbcU4ZScXegkbmPtYpOPMcDTmqXzCyX2u/rG+42SiLk+L0BbHqyEFDd/tyrfn OsdqiG8ajFzy7OAhdQgOJjbR5vZYEAD7XnquL+koOH2wJ7xB19rte0Waw2LjYIR7uGSJyrF29FMy ivnl5DzSGtCX/DfKsDbBGeCVmKUOu0F/wRbihKwt+xUrRU78QTAjggsdfqZ/Vu0/0z879h3l+1yI TaEIYjEGcaoO9Ko75w1rwzndtPJS7TFxPQbdSs+e2pmNFBiVIQL+0hhYnlMNg+uADjAPRJZJFoG9 Il9QyMMEoSj3wRjQMtAh1y8vYefcR3zPbUqbIFbLTjmaiBSKWb7i7HuOclXL3oOcknxzTqwTIz4n mKLCHNHLcuxtI5khPQXP5rYdyOgiwt6JG9q/s9lkQhAGYz7LH0VkeaJcy/SCwBJHiqqJxPLIUZTp u7Sicpba0NNRqj4kvPM8qZwDGGvuRx/7SXRndSshyuG5XsmI+1hiOkWfhufzKTMnRu+5+qf3hZaW Z1h3chVOyWyOHqLsC8NeRd/YuanaBt1Y1V85s3ieUxguLY/n/twwlw9Ev5BNxhTrKETID7qV9WEE Xs6MH8+vs2cha8wJXuk8e9fauhtMQD0Yx6kdmGEqfT499531xwaZrDC9tAOVfW+fneqU9sxBttyn 1D8PxMG2Vc+JVH/jG/FO58cG/u65jCWp5ujaIAQiEhUZ7s+eEXFaou4TOk/eRIzRpnywvJNOOpqJ jVdX6iAb8VwV1RkcCMrzyn3K+dFsOKdkY2KsrE9DxHiidHJ7fTVgQmIrZVdupMx1VUbRcuOCEOUU kavGnI0TZD8Y4YVB7U5Lax8iHwfimib4YNBbn6pLVjDWh76CDJODw8uc7GAcnM9CroOTlKKQg0Nm S6lZ/tSvTFI6ScM7OS0nZIr38iUljG3O52X8sFPacyPPCNUmOarkf4v+GTCV5wcRIo5ocxpP71ty Aip9WMknOx636h92hPNqXNZDWEVaEfMzA3YIMMQK2WocuN9M0NDelX5GucNKUQRYfD7Ffoiy3Yax hKMzRzCXY+OIiDq+66lTt5C2RK6HcY52zsZlJR+e+4cxiHk/C9icOfYsi6n+2bXvi+AW6yReATkQ d5qf02DOgoSfYVvfKxL9pjFQkurKeFrDuhJcRJwQBXWCQWSASW9pINPyHj9TRVuhrPq/pAhWQjx4 6EGU8oQeDE2UjSOJZkaX28Rkq5MOLGNVXn+KRLNTkOWV5dGXfhMxm60qsAMzU8KdnN5ChDYNUieI RPYOxA7jwkqXfj+LFOW0lgF/qZ2VY1jduJfbyGPsEbdEXqvd7NUKRB7f7jjSBUJMplDvLLJ0i+FC P3muzoxbhTN+dhiT5AzvnkrBesZ1CI35rv7pc4f0VBXFtLKRWoVl9dzHThJjLLJOm5GUmQ7a0j9w /mk+Z+xhiX4gbZvzr/eR8VrUmXX2WWrJQcaskyf6eeUsHnR8InGz+XVwagod4hcntdQFRFGRErVj gHf1F+vwynEpN5+mMRzmspH4SL3s9rVYjTntwwonJ/qebQ/P94O+jTqQm+1OC/YqrQI57btD8OfG Fa7T/n/HI6mSz+t1NKaR6gHYM0+RvfFECg/GNinVrCyyAV0OfJSFMmbKPivXqswqQg5ll6Oa+X2O lA51cepCMuyloSBFBrkNxCbJ+UAaaHwy2Zw5JIPMoKxB+idKZ9bHKmq/PXEz+Vq0YerMmPwoL7oi cMM4T5yaYWx2UhMQNUqG7oDlTYdvRtCW0Sf0He1NfeN3M2Fk/JbYxjzLqTiJ7DL5WpV5yxy/qn+m YzkZi1KHLMaNnaNZNPnZ+ifNgYOzMiNFm6QahIzHw51CnAE9Setjxy6/O+DnRD93vQ2nIeGs68BF KlllP7YdtyynPIduIV0L/TU4PrSS2lMpo38rZ2VqVzjAUOifbf276uvKvvMqbp4n1bwp7P9hlTLp lRwUWurBW8ZMzyqF5DViYJn+8SIT8zU2Xu17vR6X5Cv5CgPCgDAgDAgDwoAwsIcBkWqRfnmtwoAw IAwIA8KAMCAMCAMXMSBSfVGA8t72vDfJSXISBoQBYUAYEAaEgXvGgEi1SLU8U2FAGBAGhAFhQBgQ BoSBixgQqb4owHv2uNQ3RRSEAWFAGBAGhAFhQBjYw4BItUi1PFNhQBgQBoQBYUAYEAaEgYsYEKm+ KEB5b3vem+QkOQkDwoAwIAwIA8LAPWNApFqkWp6pMCAMCAPCgDAgDAgDwsBFDIhUXxTgPXtc6psi CsKAMCAMCAPCgDAgDOxhQKRapFqeqTAgDAgDwoAwIAwIA8LARQyIVF8UoLy3Pe9NcpKchAFhQBgQ BoQBYeCeMSBSLVItz1QYEAaEAWFAGBAGhAFh4CIGRKovCvCePS71TREFYUAYEAaEAWFAGBAG9jAg Ui1SLc9UGBAGhAFhQBgQBoQBYeAiBkSqLwpQ3tue9yY5SU7CgDAgDAgDwoAwcM8YEKkWqZZnKgwI A8KAMCAMCAPCgDBwEQMi1RcFeM8el/qmiIIwIAwIA8KAMCAMCAN7GBCpFqmWZyoMCAPCgDAgDAgD woAwcBEDItUXBSjvbc97k5wkJ2FAGBAGhAFhQBi4ZwyIVItUyzMVBoQBYUAYEAaEAWFAGLiIAZHq iwK8Z49LfVNEQRgQBoQBYUAYEAaEgT0MiFSLVMszFQaEAWFAGBAGhAFhQBi4iAGR6osClPe2571J TpKTMCAMCAPCgDAgDNwzBkSqRarlmQoDwoAwIAwIA8KAMCAMXMSASPVFAd6zx6W+KaIgDAgDwoAw IAwIA8LAHgZEqkWq5ZkKA8KAMCAMCAPCgDAgDFzEgEj1RQHKe9vz3iQnyUkYEAaEAWFAGBAG7hkD ItUi1fJMhQFhQBgQBoQBYUAYEAYuYkCk+qIA79njUt8UURAGhAFhQBgQBoQBYWAPAyLVItXyTIUB YUAYEAaEAWFAGBAGLmJApPqiAOW97XlvkpPkJAwIA8KAMCAMCAP3jAGRapFqeabCgDAgDAgDwoAw IAwIAxcxIFJ9UYD37HGpb4ooCAPCgDAgDAgDwoAwsIcBkWqRanmmwoAwIAwIA8KAMCAMCAMXMSBS fVGA8t72vDfJSXISBoQBYUAYEAaEgXvGgEi1SLU8U2FAGBAGhAFhQBgQBoSBixgQqb4owHv2uNQ3 RRSEAWFAGBAGhAFhQBjYw4BItUi1PFNhQBgQBoQBYUAYEAaEgYsYEKm+KEB5b3vem+QkOQkDwoAw IAwIA8LAPWNApFqkWp6pMCAMCAPCgDAgDAgDwsBFDIhUXxTgPXtc6psiCsKAMCAMCAPCgDAgDOxh QKRapFqeqTAgDAgDwoAwIAwIA8LARQyIVF8UoLy3Pe9NcpKchAFhQBgQBoQBYeCeMSBSLVItz1QY EAaEAWFAGBAGhAFh4CIGRKovCvCePS71TREFYUAYEAaEAWFAGBAG9jAgUi1SLc9UGBAGhAFhQBgQ BoQBYeAiBkSqLwpQ3tue9yY5SU7CgDAgDAgDwoAwcM8YEKkWqZZnKgwIA8KAMCAMCAPCgDBwEQMi 1RcFeM8el/qmiIIwIAwIA8KAMCAMCAN7GBCpFqmWZyoMCAPCgDAgDAgDwoAwcBEDItUXBSjvbc97 k5wkJ2FAGBAGhAFhQBi4ZwyIVItUyzMVBoQBYUAYEAaEAWFAGLiIAZHqiwK8Z49LfVNEQRgQBoQB YUAYEAaEgT0MiFSLVMszFQaEAWFAGBAGhAFhQBi4iAGR6osClPe2571JTpKTMCAMCAPCgDAgDNwz BkSqRarlmQoDwoAwIAwIA8KAMCAMXMSASPVFAd6zx6W+KaIgDAgDwoAwIAwIA8LAHgZEqkWq5ZkK A8KAMCAMCAPCgDAgDFzEgEj1RQHKe9vz3iQnyUkYEAaEAWFAGBAG7hkDItUi1fJMhQFhQBgQBoQB YUAYEAYuYkCk+qIA79njUt8UURAGhAFhQBgQBoQBYWAPAyLVItXyTIUBYUAYEAaEAWFAGBAGLmJA pPqiAOW97XlvkpPkJAwIA8KAMCAMCAP3jAGRapFqeabCgDAgDAgDwoAwIAwIAxcxIFJ9UYD37HGp b4ooCAPCgDAgDAgDwoAwsIcBkWqRanmmwoAwIAwIA8KAMCAMCAMXMSBSfVGA8t72vDfJSXISBoQB YUAYEAaEgXvGgEi1SLU8U2FAGBAGhAFhQBgQBoSBixgQqb4owHv2uNQ3RRSEAWFAGBAGhAFhQBjY w4BItUi1PFNhQBgQBoQBYUAYEAaEgYsYEKm+KEB5b3vem+QkOQkDwoAwIAwIA8LAPWNApFqkWp6p MCAMCAPCgDAgDAgDwsBFDIhUXxTgPXtc6psiCsKAMCAMCAPCgDAgDOxhQKRapFqeqTAgDAgDwoAw IAwIA8LARQyIVF8UoLy3Pe9NcpKchAFhQBgQBoQBYeCeMSBSLVItz1QYEAaEAWFAGBAGhAFh4CIG RKovCvCePS71TREFYUAYEAaEAWFAGBAG9jAgUi1SLc9UGBAGhAFhQBgQBoQBYeAiBkSqLwpQ3tue 9yY5SU7CgDAgDAgDwoAwcM8YEKkWqZZnKgwIA8KAMCAMCAPCgDBwEQMi1RcFeM8el/qmiIIwIAwI A8KAMCAMCAN7GBCpFqmWZyoMCAPCgDAgDAgDwoAwcBEDItUXBSjvbc97k5wkJ2FAGBAGhAFhQBi4 ZwyIVItUyzMVBoQBYUAYEAaEAWFAGLiIAZHqiwK8Z49LfVNEQRgQBoQBYUAYEAaEgT0MiFSLVMsz FQaEAWFAGBAGhAFhQBi4iAGR6osClPe2571JTpKTMCAMCAPCgDAgDNwzBkSqRarlmQoDwoAwIAwI A8KAMCAMXMSASPVFAd6zx6W+KaIgDAgDwoAwIAwIA8LAHgZEqkWq5ZkKA8KAMCAMCAPCgDAgDFzE gEj1RQHKe9vz3iQnyUkYEAaEAWFAGBAG7hkDItUi1fJMhQFhQBgQBoQBYUAYEAYuYkCk+qIA79nj Ut8UURAGhAFhQBgQBoQBYWAPAyLVItXyTIUBYUAYEAaEAWFAGBAGLmJApPqiAOW97XlvkpPkJAwI A8KAMCAMCAP3jAGRapFqeabCgDAgDAgDwoAwIAwIAxcxIFJ9UYD37HGpb4ooCAPCgDAgDAgDwoAw sIcBkWqRanmmwoAwIAwIA8KAMCAMCAMXMSBSfVGA8t72vDfJSXISBoQBYUAYEAaEgXvGgEi1SLU8 U2FAGBAGhAFhQBgQBoSBixgQqb4owHv2uNQ3RRSEAWFAGBAGhAFhQBjYw4BItUi1PFNhQBgQBoQB YUAYEAaEgYsYEKm+KEB5b3vem+QkOQkDwoAwIAwIA8LAPWNApFqkWp6pMCAMCAPCgDAgDAgDwsBF DIhUXxTgPXtc6psiCsKAMCAMCAPCgDAgDOxhQKRapFqeqTAgDAgDwoAwIAwIA8LARQyIVF8UoLy3 Pe9NcpKchAFhQBgQBoQBYeCeMSBSLVItz1QYEAaEAWFAGBAGhAFh4CIGRKovCvCePS71TREFYUAY EAaEAWFAGBAG9jAgUi1SLc9UGBAGhAFhQBgQBoQBYeAiBkSqLwpQ3tue9yY5SU7CgDAgDAgDwoAw cM8YEKkWqZZnKgwIA8KAMCAMCAPCgDBwEQMi1RcFeM8el/qmiIIwIAwIA8KAMCAMCAN7GBCpFqmW ZyoMCAPCgDAgDAgDwoAwcBEDItUXBSjvbc97k5wkJ2FAGBAGhAFhQBi4ZwyIVItUyzMVBoQBYUAY EAaEAWFAGLiIAZHqiwK8Z49LfVNEQRgQBoQBYUAYEAaEgT0MiFSLVMszFQaEAWFAGBAGhAFhQBi4 iAGR6osClPe2571JTpKTMCAMCAPCgDAgDNwzBkSqRarlmQoDwoAwIAwIA8KAMCAMXMSASPVFAd6z x6W+KaIgDAgDwoAwIAwIA8LAHgZEqkWq5ZkKA8KAMCAMCAPCgDAgDFzEgEj1RQHKe9vz3iQnyUkY EAaEAWFAGBAG7hkDItUi1fJMhQFhQBgQBoQBYUAYEAYuYkCk+qIA79njUt8UURAGhAFhQBgQBoQB YWAPAyLVItXyTIUBYUAYEAaEAWFAGBAGLmJApPqiAOW97XlvkpPkJAwIA8KAMCAMCAP3jAGRapFq eabCgDAgDAgDwoAwIAwIAxcxIFJ9UYD37HGpb4ooCAPCgDAgDAgDwoAwsIcBkWqRanmmwoAwIAwI A8KAMCAMCAMXMSBSfVGA8t72vDfJSXISBoQBYUAYEAaEgXvGgEi1SLU8U2FAGBAGhAFhQBgQBoSB ixgQqb4owHv2uNQ3RRSEAWFAGBAGhAFhQBjYw4BItUi1PFNhQBgQBoQBYUAYEAaEgYsYEKm+KEB5 b3vem+QkOQkDwoAwIAwIA8LAPWNApFqkWp6pMCAMCAPCgDAgDAgDwsBFDIhUXxTgPXtc6psiCsKA MCAMCAPCgDAgDOxhQKRapFqeqTAgDAgDwoAwIAwIA8LARQyIVF8UoLy3Pe9NcpKchAFhQBgQBoQB YeCeMSBSLVItz1QYEAaEAWFAGBAGhAFh4CIGRKovCvCePS71TREFYUAYEAaEAWFAGBAG9jAgUi1S Lc9UGBAGhAFhQBgQBoQBYeAiBkSqLwpQ3tue9yY5SU7CgDAgDAgDwoAwcM8YEKkWqZZnKgwIA8KA MCAMCAPCgDBwEQMi1RcFeM8el/qmiIIwIAwIA8KAMCAMCAN7GBCpFqmWZyoMCAPCgDAgDAgDwoAw cBEDItUXBSjvbc97k5wkJ2FAGBAGhAFhQBi4ZwyIVItUyzMVBoQBYUAYEAaEAWFAGLiIAZHqiwK8 Z49LfVNEQRgQBoQBYUAYEAaEgT0MiFSLVMszFQaEAWFAGBAGhAFhQBi4iAGR6osClPe2571JTpKT MCAMCAPCgDAgDNwzBkSqRarlmQoDwoAwIAwIA8KAMCAMXMSASPVFAd6zx6W+KaIgDAgDwoAwIAwI A8LAHgZEqkWq5ZkKA8KAMCAMCAPCgDAgDFzEgEj1RQHKe9vz3iQnyUkYEAaEAWFAGBAG7hkDItUi 1fJMhQFhQBgQBoQBYUAYEAYuYkCk+qIA79njUt8UURAGhAFhQBgQBoQBYWAPAyLVItXyTIUBYUAY EAaEAWFAGBAGLmJApPqiAOW97XlvkpPkJAwIA8KAMCAMCAP3jAGRapFqeabCgDAgDAgDwoAwIAwI AxcxIFJ9UYD37HGpb4ooCAPCgDAgDAgDwoAwsIcBkWqRanmmwoAwIAwIA8KAMCAMCAMXMSBSfVGA 8t72vDfJSXISBoQBYUAYEAaEgXvGgEi1SLU8U2FAGBAGhAFhQBgQBoSBixgQqb4owHv2uNQ3RRSE AWFAGBAGhAFhQBjYw4BItUi1PFNhQBgQBoQBYUAYEAaEgYsYEKm+KEB5b3vem+QkOQkDwoAwIAwI A8LAPWNApFqkWp6pMCAMCAPCgDAgDAgDwsBFDIhUXxTgPXtc6psiCsKAMCAMCAPCgDAgDOxhQKRa pFqeqTAgDAgDwoAwIAwIA8LARQyIVF8UoLy3Pe9NcpKchAFhQBgQBoQBYeCeMSBSLVItz1QYEAaE AWFAGBAGhAFh4CIGRKovCvCePS71TREFYUAYEAaEAWFAGBAG9jAgUi1SLc9UGBAGhAFhQBgQBoQB YeAiBkSqLwpQ3tue9yY5SU7CgDAgDAgDwoAwcM8YEKkWqZZnKgwIA8KAMCAMCAPCgDBwEQMi1RcF eM8el/qmiIIwIAwIA8KAMCAMCAN7GBCpFqmWZyoMCAPCgDAgDAgDwoAwcBEDItUXBSjvbc97k5wk J2FAGBAGhAFhQBi4ZwyIVItUyzMVBoQBYUAYEAaEAWFAGLiIAZHqiwK8Z49LfVNEQRgQBoQBYUAY EAaEgT0MiFSLVMszFQaEAWFAGBAGhAFhQBi4iAGR6osClPe2571JTpKTMCAMCAPCgDAgDNwzBkSq RarlmQoDwoAwIAwIA8KAMCAMXMSASPVFAd6zx6W+KaIgDAgDwoAwIAwIA8LAHgZEqkWq5ZkKA8KA MCAMCAPCgDAgDFzEgEj1RQHKe9vz3iQnyUkYEAaEAWFAGBAG7hkDItUi1fJMhQFhQBgQBoQBYUAY EAYuYkCk+qIA79njUt8UURAGhAFhQBgQBoQBYWAPAyLVItXyTIUBYUAYEAaEAWFAGBAGLmJApPqi AOW97XlvkpPkJAwIA8KAMCAMCAP3jAGRapFqeabCgDAgDAgDwoAwIAwIAxcxIFJ9UYD37HGpb4oo CAPCgDAgDAgDwoAwsIcBkWqRanmmwoAwIAwIA8KAMCAMCAMXMSBSfVGA8t72vDfJSXISBoQBYUAY EAaEgXvGgEi1SLU8U2FAGBAGhAFhQBgQBoSBixgQqb4owHv2uNQ3RRSEAWFAGBAGhAFhQBjYw4BI tUi1PFNhQBgQBoQBYUAYEAaEgYsYEKm+KEB5b3vem+QkOQkDwoAwIAwIA8LAPWNApFqkWp6pMCAM CAPCgDAgDAgDwsBFDIhUXxTgPXtc6psiCsKAMCAMCAPCgDAgDOxhQKRapFqeqTAgDAgDwoAwIAwI A8LARQyIVF8UoLy3Pe9NcpKchAFhQBgQBoQBYeCeMSBSLVItz1QYEAaEAWFAGBAGhAFh4CIGRKov CvCePS71TREFYUAYEAaEAWFAGBAG9jAgUi1SLc9UGBAGhAFhQBgQBoQBYeAiBkSqLwpQ3tue9yY5 SU7CgDAgDAgDwoAwcM8YEKkWqZZnKgwIA8KAMCAMCAPCgDBwEQMi1RcFeM8el/qmiIIwIAwIA8KA MCAMCAN7GBCpFqmWZyoMCAPCgDAgDAgDwoAwcBEDItUXBSjvbc97k5wkJ2FAGBAGhAFhQBi4ZwyI VItUyzMVBoQBYUAYEAaEAWFAGLiIAZHqiwK8Z49LfVNEQRgQBoQBYUAYEAaEgT0MiFSLVMszFQaE AWFAGBAGhAFhQBi4iAGR6osClPe2571JTpKTMCAMCAPCgDAgDNwzBkSqRarlmQoDwoAwIAwIA8KA MCAMXMSASPVFAd6zx6W+KaIgDAgDwoAwIAwIA8LAHgZEqkWq5ZkKA8KAMCAMCAPCgDAgDFzEgEj1 RQHKe9vz3iQnyUkYEAaEAWFAGBAG7hkDItUi1fJMhQFhQBgQBoQBYUAYEAYuYkCk+qIA79njUt8U URAGhAFhQBgQBoQBYWAPAyLVItXyTIUBYUAYEAaEAWFAGBAGLmJApPqiAOW97XlvkpPkJAwIA8KA MCAMCAP3jAGRapFqeabCgDAgDAgDwoAwIAwIAxcxUJLqr7/++sG+0I9kIAwIA8KAMCAMCAPCgDAg DOxh4KH9972vv/7Nw5e//s2DEWr9JwlIApKAJCAJSAKSgCQgCUgCt0ugk2oj1vqRDIQBYUAYEAaE AWFAGBAGhIHbMfD/B5xnGQHioIhdAAAAAElFTkSuQmCC --f46d044402b4ab5a24051a87d248-- From david@fromorbit.com Fri Jul 10 17:42:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 17F797F37 for ; Fri, 10 Jul 2015 17:42:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 94304AC00B for ; Fri, 10 Jul 2015 15:42:36 -0700 (PDT) X-ASG-Debug-ID: 1436568153-04cbb00fd018ef0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id DDzFlZNYOwjkMLuf for ; Fri, 10 Jul 2015 15:42:33 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AyDwBlSaBVPLC2LXlbgxOBNIZOohYBAQEBAQEGmi4EAgKBRE0BAQEBAQEHAQEBAUABP0EFg10BAQEDATocIwULCAMOCgklDwUlAwcaExuICwfPXQEBAQcCAR8YhgWFLoQ9SQeEKwWUMYwDmGyBCYEpHIFlLDGBBYFGAQEB Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail06.adl2.internode.on.net with ESMTP; 11 Jul 2015 08:12:31 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZDh03-0000Er-3G; Sat, 11 Jul 2015 08:42:31 +1000 Date: Sat, 11 Jul 2015 08:42:31 +1000 From: Dave Chinner To: Hogan Whittall Cc: "xfs@oss.sgi.com" Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Message-ID: <20150710224231.GL3902@dastard> X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> <20150709230222.GD7943@dastard> <1741803883.2585541.1436543988567.JavaMail.yahoo@mail.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1741803883.2585541.1436543988567.JavaMail.yahoo@mail.yahoo.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1436568153 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20635 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 10, 2015 at 03:59:48PM +0000, Hogan Whittall wrote: > Hi Dave, > > Thanks for the reply, we can certainly try with the smaller log, > but IIRC the performance hit wasn't because the disks were busy, > it was the controller itself trying to determine what changed and > then write that to disk. That makes no sense to me - the controller is almost never the IO limitation in a hardware RAID when random small IO is being issued by the host. > Smaller anything should help the > controller be able to cope better, but that's not really a > solution. > > Doing disk write performance tests on these systems produce very > different results, they are capable of much more I/O than what was > being triggered with this issue. > > Back to why I think this should be considered a bug, by 2.9.6 > setting 0 as the default for sunit/swidth and 3.1.1 having no way > to set 0 for sunit/swidth the newer versions behave differently False: # man mkfs.xfs .... noalign This option disables automatic geometry detection and creates the filesystem without stripe geometry alignment even if the underlying storage device provides this information. IOWs: # mkfs.xfs -d noalign .... Will do exactly what you want. Or alternatively: # mkfs.xfs -d sunit=0,swidth=0 .... Or perhaps just turning of log stripe unit alignment will be enough: # mkfs.xfs -l sunit=1 .... Cheers, Dave. -- Dave Chinner david@fromorbit.com From whittalh@yahoo-inc.com Fri Jul 10 18:16:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B01027F37 for ; Fri, 10 Jul 2015 18:16:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5BE15AC002 for ; Fri, 10 Jul 2015 16:16:19 -0700 (PDT) X-ASG-Debug-ID: 1436570176-04bdf00787121a00001-NocioJ Received: from mrout5.yahoo.com (mrout5.yahoo.com [216.145.54.154]) by cuda.sgi.com with ESMTP id S3c3pqahC2yju3zd (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 Jul 2015 16:16:17 -0700 (PDT) X-Barracuda-Envelope-From: whittalh@yahoo-inc.com X-Barracuda-Apparent-Source-IP: 216.145.54.154 Received: from omp1034.mail.ne1.yahoo.com (omp1034.mail.ne1.yahoo.com [98.138.88.234]) by mrout5.yahoo.com (8.14.9/8.14.9/y.out) with ESMTP id t6ANFlBn096383 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 10 Jul 2015 16:15:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yahoo-inc.com; s=cobra; t=1436570148; bh=sbycTRnsgHLxYMMwlp4FHm9/V+oWQ98sBtiE1O1gcxg=; h=Date:From:To:Cc:In-Reply-To:References:Subject; b=EznTSB5r0T0R4vVk6cneNGATnEiIMxGhIUijkZo9pdO1v0ap7UMXD7dpTG03FDW5A s29arLwbX2jFEwIxX6lj+gCMk421Rpt8rGtTFEgI5nHb/3M4PR2Ybqw43/lVxryjP/ 69GVwMZqYGj93C/z7+PGwC1I0wX/tKpUYEvTaHY0= Received: (qmail 51642 invoked by uid 1000); 10 Jul 2015 23:15:47 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-inc.com; s=ginc1024; t=1436570147; bh=YQCk9M0FCQC8RKWLdX3kL0zPWa9xK2ikDbUMSuSBw54=; h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding; b=CGVHrGlvu+6zbBI5G711tbRgScS5BhbWVzRg1mNTplVkCOqwx35qp4OPfhUqX+4f+dbzb0yQpxjIsp4ovJ0iGw9EgtgE9DITFoWE6siFFWcI8wzD2V7TQcilqDYijeijsfKj/6oMgofAKPl85KARPHx5GPfdb58Ja1g3sk/xLqY= X-YMail-OSG: mzjB0UAVM1m27TkSxd21y0YXdwYLAZV3j9kKdedw34cZRknjfKEHOHcse7CWwJi .PwTfv0GfTYESg3UeMkjWKhgVix6.IQ5HpxuQs3YcDpbrjlk9QvRX06T4TGQ5i.3vspsSJE1RoVw zORosYTUteHJtPL3eC_1XxX4grn5HhkTWV8ONxcswVmvjwzqU6YSFAxgx_66jccN8IqvZziKEV75 xmKzOp6qSrIMYELKLsa0IXBe6HHcKlN6NUyTmemgB_BVQUln7TMk- Received: by 98.138.105.221; Fri, 10 Jul 2015 23:15:47 +0000 Date: Fri, 10 Jul 2015 23:15:04 +0000 (UTC) From: Hogan Whittall To: Dave Chinner Cc: "xfs@oss.sgi.com" Message-ID: <1598282205.117137.1436570104177.JavaMail.yahoo@mail.yahoo.com> In-Reply-To: <20150710224231.GL3902@dastard> References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> <20150709230222.GD7943@dastard> <1741803883.2585541.1436543988567.JavaMail.yahoo@mail.yahoo.com> <20150710224231.GL3902@dastard> Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mrout5.yahoo.com[216.145.54.154] X-Barracuda-Start-Time: 1436570177 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20635 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature The issue isn't random small I/O being sent to disk and the disks maxing out IOPS, it's this particular workload created by MySQL replication and the XFS options that trigger something bad to happen on the controller. I can run disk I/O tests at the same time that replication is choking and see perfectly fine throughput and response time. Yeah, it's weird. As for the noalign option, that would be great to have but it does not exist in version 3.1.1 which RHEL6 uses. It sounds like not having it in previous 3.x versions was enough of an issue that it was added in 3.2.x, which is great. I can probably work with this and get our ramdisks used for cloning updated with a stable 3.2.x since that would be more desirable than reverting back to 2.x.x. Thanks again for your help, now I have a fix that doesn't involve using an old version of mkfs.xfs. -Hogan ----- Original Message ----- From: Dave Chinner To: Hogan Whittall Cc: "xfs@oss.sgi.com" Sent: Friday, July 10, 2015 5:42 PM Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication On Fri, Jul 10, 2015 at 03:59:48PM +0000, Hogan Whittall wrote: > Hi Dave, > > Thanks for the reply, we can certainly try with the smaller log, > but IIRC the performance hit wasn't because the disks were busy, > it was the controller itself trying to determine what changed and > then write that to disk. That makes no sense to me - the controller is almost never the IO limitation in a hardware RAID when random small IO is being issued by the host. > Smaller anything should help the > controller be able to cope better, but that's not really a > solution. > > Doing disk write performance tests on these systems produce very > different results, they are capable of much more I/O than what was > being triggered with this issue. > > Back to why I think this should be considered a bug, by 2.9.6 > setting 0 as the default for sunit/swidth and 3.1.1 having no way > to set 0 for sunit/swidth the newer versions behave differently False: # man mkfs.xfs .... noalign This option disables automatic geometry detection and creates the filesystem without stripe geometry alignment even if the underlying storage device provides this information. IOWs: # mkfs.xfs -d noalign .... Will do exactly what you want. Or alternatively: # mkfs.xfs -d sunit=0,swidth=0 .... Or perhaps just turning of log stripe unit alignment will be enough: # mkfs.xfs -l sunit=1 .... Cheers, Dave. -- Dave Chinner david@fromorbit.com From pkio@qaxi.com Fri Jul 10 21:56:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.0 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7B42F29DF5 for ; Fri, 10 Jul 2015 21:56:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 19D50AC002 for ; Fri, 10 Jul 2015 19:56:23 -0700 (PDT) X-ASG-Debug-ID: 1436583373-04bdf0078b125510001-NocioJ Received: from qaxi.com ([211.97.10.56]) by cuda.sgi.com with ESMTP id I9kB7mR3TxV7D4wI for ; Fri, 10 Jul 2015 19:56:14 -0700 (PDT) X-Barracuda-Envelope-From: pkio@qaxi.com X-Barracuda-Apparent-Source-IP: 211.97.10.56 Received: from PC-20150629URHT ([127.0.0.1]) by localhost via TCP with ESMTPA; Sat, 11 Jul 2015 10:55:43 +0800 MIME-Version: 1.0 From: pkio Sender: pkio To: xfs@oss.sgi.com Reply-To: pkio Date: 11 Jul 2015 10:55:43 +0800 Subject: =?utf-8?B?c29sYXIgcG93ZXI=?= Content-Type: multipart/alternative; boundary=--boundary_37200_4be2f4e1-3bb7-48e4-b7c5-1f504e316947 X-ASG-Orig-Subj: =?utf-8?B?c29sYXIgcG93ZXI=?= X-Barracuda-Connect: UNKNOWN[211.97.10.56] X-Barracuda-Start-Time: 1436583373 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150711025623.91742A42184@cuda.sgi.com> ----boundary_37200_4be2f4e1-3bb7-48e4-b7c5-1f504e316947 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 RGVhciBTaXIgb3IgTWFkYW0sDQombmJzcDsNCiZuYnNwOyZuYnNwOyBHb29kIGRheSENCiZu YnNwOyZuYnNwOyBXZSxHdWFuZ1pob3UgSG9uZ0JvIHNvbGFyIGVuZXJneSBpcyBhIHByb2Zl c3Npb25hbCBtYW51ZmFjdHVyZXIgZm9yIGJlbG93IHByb2R1Y3RzIHdpdGggaGlnaCBxdWFu bGl0eSBhbmQgY29tcGV0aXRpdmUgcHJpY2U6DQombmJzcDsmbmJzcDsgU29sYXIgUGFuZWxz Ow0KJm5ic3A7Jm5ic3A7IFNvbGFyJm5ic3A7UG93ZXImbmJzcDtTeXN0ZW07Jm5ic3A7Jm5i c3A7Jm5ic3A7IFNvbGFyJm5ic3A7Q29udHJvbGxlcjtTb2xhciZuYnNwO0ludmVydGVyOyZu YnNwOyZuYnNwOyBXaW5kJm5ic3A7VHVyYmluZSBTeXN0ZW07Jm5ic3A7Jm5ic3A7IFNvbGFy Jm5ic3A7U3RyZWV0Jm5ic3A7TGFtcDsmbmJzcDsNCiZuYnNwOyZuYnNwOyBQbGVhc2UgbGV0 IHVzIGtub3cgaWYgeW91IGhhdmUgaW50ZXJlc3QuDQombmJzcDsmbmJzcDsgVGhhbmtzIGFu ZCBiZXN0IHJlZ2FyZHMsDQombmJzcDsmbmJzcDsgTXIgSmFzb24gWWUNCioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQpHdWFuZ3pob3UmbmJzcDtIb25nJm5ic3A7Qm8mbmJzcDtFbGVjdHJvbmljJm5ic3A7 VGVjaG5vbG9neSZuYnNwO0NvLiwmbmJzcDtMdGQmbmJzcDsNClNreXBlOm15YmVzdHdpbGxp bmcNCkVtYWlsOnNvbGFyQHBvd2VyLWhiLmNvbQ0KTW9iaWxlOjAwODYxODYyMDYxMjIwOCAm bmJzcDsgJm5ic3A7VGVsOjAwODYtMjAtMjgzOTUxNjkNCmh0dHA6Ly9wb3dlci1oYi5lbi5h bGliYWJhLmNvbQ0KaHR0cDovL3d3dy5wb3dlci1oYi5jb20NCkFkZDpENjAyQyxOby43LTEg R3VhbmdaaG91IHNjaWVuY2UgY2l0eSBjb2xvciBmcmVxdWVuY3kmbmJzcDsNClJvYWQsTHVv IEdhbmcsR3VhbmdaaG91LENoaW5h ----boundary_37200_4be2f4e1-3bb7-48e4-b7c5-1f504e316947 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSJURVhULUFMSUdOOiBsZWZ0OyBNQVJHSU46IDBj bSAwY20gMHB0OyBMSU5FLUhFSUdIVDogMTUuNzVwdDsgbXNvLXBhZ2luYXRpb246IHdpZG93 LW9ycGhhbiIgYWxpZ249bGVmdD48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSdGT05ULVNJWkU6 IDEwcHQ7IEZPTlQtRkFNSUxZOiAiQXJpYWwiLCJzYW5zLXNlcmlmIjsgQ09MT1I6IGJsYWNr OyBtc28tZm9udC1rZXJuaW5nOiAwcHQnPkRlYXIgU2lyIG9yIE1hZGFtLDw/eG1sOm5hbWVz cGFjZSBwcmVmaXggPSAibyIgbnMgPSAidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZp Y2U6b2ZmaWNlIiAvPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIGNsYXNzPU1zb05vcm1h bCBzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTUFSR0lOOiAwY20gMGNtIDBwdDsgTElORS1I RUlHSFQ6IDE1Ljc1cHQ7IG1zby1wYWdpbmF0aW9uOiB3aWRvdy1vcnBoYW4iIGFsaWduPWxl ZnQ+PFNQQU4gbGFuZz1FTi1VUyBzdHlsZT0nRk9OVC1TSVpFOiAxMHB0OyBGT05ULUZBTUlM WTogIkFyaWFsIiwic2Fucy1zZXJpZiI7IENPTE9SOiBibGFjazsgbXNvLWZvbnQta2Vybmlu ZzogMHB0Jz48U1BBTiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOzwvU1BBTj48 bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9IlRFWFQt QUxJR046IGxlZnQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IExJTkUtSEVJR0hUOiAxNS43NXB0 OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiBhbGlnbj1sZWZ0PjxTUEFOIGxhbmc9 RU4tVVMgc3R5bGU9J0ZPTlQtU0laRTogMTBwdDsgRk9OVC1GQU1JTFk6ICJBcmlhbCIsInNh bnMtc2VyaWYiOyBDT0xPUjogYmxhY2s7IG1zby1mb250LWtlcm5pbmc6IDBwdCc+PFNQQU4g c3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsgPC9TUEFOPkdvb2QgZGF5 ITxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0iVEVY VC1BTElHTjogbGVmdDsgTUFSR0lOOiAwY20gMGNtIDBwdDsgbXNvLXBhZ2luYXRpb246IHdp ZG93LW9ycGhhbiIgYWxpZ249bGVmdD48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSdGT05ULVNJ WkU6IDEwcHQ7IEZPTlQtRkFNSUxZOiAiQXJpYWwiLCJzYW5zLXNlcmlmIjsgQ09MT1I6IGJs YWNrOyBtc28tZm9udC1rZXJuaW5nOiAwcHQnPjxTUEFOIHN0eWxlPSJtc28tc3BhY2VydW46 IHllcyI+Jm5ic3A7Jm5ic3A7IDwvU1BBTj5XZSxHdWFuZ1pob3UgSG9uZ0JvIHNvbGFyIGVu ZXJneSBpcyBhIHByb2Zlc3Npb25hbCBtYW51ZmFjdHVyZXIgZm9yIGJlbG93IHByb2R1Y3Rz IHdpdGggaGlnaCBxdWFubGl0eSBhbmQgY29tcGV0aXRpdmUgcHJpY2U6PG86cD48L286cD48 L1NQQU4+PC9QPg0KPFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSJURVhULUFMSUdOOiBsZWZ0 OyBNQVJHSU46IDBjbSAwY20gMHB0OyBMSU5FLUhFSUdIVDogMTUuNzVwdDsgbXNvLXBhZ2lu YXRpb246IHdpZG93LW9ycGhhbiIgYWxpZ249bGVmdD48Qj48U1BBTiBsYW5nPUVOLVVTIHN0 eWxlPSdGT05ULVNJWkU6IDEwcHQ7IEZPTlQtRkFNSUxZOiAiQXJpYWwiLCJzYW5zLXNlcmlm IjsgQ09MT1I6IGJsYWNrOyBtc28tZm9udC1rZXJuaW5nOiAwcHQnPjxTUEFOIHN0eWxlPSJt c28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7IDwvU1BBTj5Tb2xhciBQYW5lbHM7PG86 cD48L286cD48L1NQQU4+PC9CPjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMTJw dDsgbXNvLXBhZ2luYXRpb246IHdpZG93LW9ycGhhbiI+PEI+PFNQQU4gbGFuZz1FTi1VUyBz dHlsZT0nRk9OVC1TSVpFOiAxMHB0OyBGT05ULUZBTUlMWTogIkFyaWFsIiwic2Fucy1zZXJp ZiInPjxTUEFOIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7IDwvU1BB Tj5Tb2xhciZuYnNwO1Bvd2VyJm5ic3A7U3lzdGVtOyZuYnNwOzxCUj48U1BBTiBzdHlsZT0i bXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyA8L1NQQU4+U29sYXImbmJzcDtDb250 cm9sbGVyO1NvbGFyJm5ic3A7SW52ZXJ0ZXI7PEJSPjxTUEFOIHN0eWxlPSJtc28tc3BhY2Vy dW46IHllcyI+Jm5ic3A7Jm5ic3A7IDwvU1BBTj5XaW5kJm5ic3A7VHVyYmluZSBTeXN0ZW07 PEJSPjxTUEFOIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+Jm5ic3A7Jm5ic3A7IDwvU1BB Tj5Tb2xhciZuYnNwO1N0cmVldCZuYnNwO0xhbXA7Jm5ic3A7PG86cD48L286cD48L1NQQU4+ PC9CPjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tcGFnaW5hdGlv bjogd2lkb3ctb3JwaGFuIj48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSdGT05ULVNJWkU6IDEw cHQ7IEZPTlQtRkFNSUxZOiAiQXJpYWwiLCJzYW5zLXNlcmlmIjsgQ09MT1I6IGJsYWNrJz48 U1BBTiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyA8L1NQQU4+UGxl YXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGludGVyZXN0LjxvOnA+PC9vOnA+PC9TUEFO PjwvUD4NCjxQIHN0eWxlPSJNQVJHSU46IDBjbSAwY20gMHB0OyBtc28tcGFnaW5hdGlvbjog d2lkb3ctb3JwaGFuIj48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSdGT05ULVNJWkU6IDEwcHQ7 IEZPTlQtRkFNSUxZOiAiQXJpYWwiLCJzYW5zLXNlcmlmIjsgQ09MT1I6IGJsYWNrJz48U1BB TiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiZuYnNwOyZuYnNwOyA8L1NQQU4+VGhhbmtz IGFuZCBiZXN0IHJlZ2FyZHMsPG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgc3R5bGU9Ik1B UkdJTjogMGNtIDBjbSAxMnB0OyBMSU5FLUhFSUdIVDogMTJwdDsgbXNvLXBhZ2luYXRpb246 IHdpZG93LW9ycGhhbiI+PFNQQU4gbGFuZz1FTi1VUyBzdHlsZT0nRk9OVC1TSVpFOiAxMHB0 OyBGT05ULUZBTUlMWTogIkFyaWFsIiwic2Fucy1zZXJpZiI7IENPTE9SOiBibGFjayc+PFNQ QU4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4mbmJzcDsmbmJzcDsgPC9TUEFOPk1yIEph c29uIFllPG86cD48L286cD48L1NQQU4+PC9QPg0KPFAgY2xhc3M9TXNvTm9ybWFsIHN0eWxl PSJURVhULUFMSUdOOiBsZWZ0OyBNQVJHSU46IDBjbSAwY20gMHB0OyBMSU5FLUhFSUdIVDog MTcuNzVwdDsgbXNvLXBhZ2luYXRpb246IHdpZG93LW9ycGhhbiIgYWxpZ249bGVmdD48QiBz dHlsZT0ibXNvLWJpZGktZm9udC13ZWlnaHQ6IG5vcm1hbCI+PFNQQU4gbGFuZz1FTi1VUyBz dHlsZT0nRk9OVC1TSVpFOiA5LjVwdDsgRk9OVC1GQU1JTFk6ICJBcmlhbCIsInNhbnMtc2Vy aWYiOyBCQUNLR1JPVU5EOiB3aGl0ZTsgQ09MT1I6IGJsYWNrOyBtc28tZm9udC1rZXJuaW5n OiAwcHQnPioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqPC9TUEFOPjwvQj48U1BBTiBsYW5nPUVOLVVTIHN0eWxl PSJGT05ULVNJWkU6IDkuNXB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1N c29Ob3JtYWwgc3R5bGU9IlRFWFQtQUxJR046IGxlZnQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7 IExJTkUtSEVJR0hUOiAxNy43NXB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiBh bGlnbj1sZWZ0PjxCIHN0eWxlPSJtc28tYmlkaS1mb250LXdlaWdodDogbm9ybWFsIj48U1BB TiBsYW5nPUVOLVVTIHN0eWxlPSdGT05ULVNJWkU6IDkuNXB0OyBGT05ULUZBTUlMWTogIkFy aWFsIiwic2Fucy1zZXJpZiI7IEJBQ0tHUk9VTkQ6IHdoaXRlOyBDT0xPUjogYmxhY2s7IG1z by1mb250LWtlcm5pbmc6IDBwdCc+R3Vhbmd6aG91Jm5ic3A7SG9uZyZuYnNwO0JvJm5ic3A7 RWxlY3Ryb25pYyZuYnNwO1RlY2hub2xvZ3kmbmJzcDtDby4sJm5ic3A7THRkJm5ic3A7PC9T UEFOPjwvQj48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSJGT05ULVNJWkU6IDkuNXB0Ij48bzpw PjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9IlRFWFQtQUxJ R046IGxlZnQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IExJTkUtSEVJR0hUOiAxNy43NXB0OyBt c28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiBhbGlnbj1sZWZ0PjxTUEFOIGxhbmc9RU4t VVMgc3R5bGU9J0ZPTlQtU0laRTogOS41cHQ7IEZPTlQtRkFNSUxZOiAiQXJpYWwiLCJzYW5z LXNlcmlmIjsgQkFDS0dST1VORDogd2hpdGU7IENPTE9SOiBibGFjazsgbXNvLWZvbnQta2Vy bmluZzogMHB0Jz5Ta3lwZTpteWJlc3R3aWxsaW5nPC9TUEFOPjxTUEFOIGxhbmc9RU4tVVMg c3R5bGU9IkZPTlQtU0laRTogOS41cHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIGNs YXNzPU1zb05vcm1hbCBzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTUFSR0lOOiAwY20gMGNt IDBwdDsgTElORS1IRUlHSFQ6IDE3Ljc1cHQ7IG1zby1wYWdpbmF0aW9uOiB3aWRvdy1vcnBo YW4iIGFsaWduPWxlZnQ+PFNQQU4gbGFuZz1FTi1VUyBzdHlsZT0nRk9OVC1TSVpFOiA5LjVw dDsgRk9OVC1GQU1JTFk6ICJBcmlhbCIsInNhbnMtc2VyaWYiOyBCQUNLR1JPVU5EOiB3aGl0 ZTsgQ09MT1I6IGJsYWNrOyBtc28tZm9udC1rZXJuaW5nOiAwcHQnPkVtYWlsOnNvbGFyQHBv d2VyLWhiLmNvbTwvU1BBTj48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSJGT05ULVNJWkU6IDku NXB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9 IlRFWFQtQUxJR046IGxlZnQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IExJTkUtSEVJR0hUOiAx Ny43NXB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiBhbGlnbj1sZWZ0PjxTUEFO IGxhbmc9RU4tVVMgc3R5bGU9J0ZPTlQtU0laRTogOS41cHQ7IEZPTlQtRkFNSUxZOiAiQXJp YWwiLCJzYW5zLXNlcmlmIjsgQkFDS0dST1VORDogd2hpdGU7IENPTE9SOiBibGFjazsgbXNv LWZvbnQta2VybmluZzogMHB0Jz5Nb2JpbGU6MDA4NjE4NjIwNjEyMjA4ICZuYnNwOyAmbmJz cDtUZWw6MDA4Ni0yMC0yODM5NTE2OTwvU1BBTj48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSJG T05ULVNJWkU6IDkuNXB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29O b3JtYWwgc3R5bGU9IlRFWFQtQUxJR046IGxlZnQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IExJ TkUtSEVJR0hUOiAxNy43NXB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiBhbGln bj1sZWZ0PjxTUEFOIGxhbmc9RU4tVVMgc3R5bGU9J0ZPTlQtU0laRTogOS41cHQ7IEZPTlQt RkFNSUxZOiAiQXJpYWwiLCJzYW5zLXNlcmlmIjsgbXNvLWZvbnQta2VybmluZzogMHB0Jz48 QSBocmVmPSJodHRwOi8vcG93ZXItaGIuZW4uYWxpYmFiYS5jb20vIiB0YXJnZXQ9QzovRG9j dW1lbnRzJTIwYW5kJTIwU2V0dGluZ3MvQWRtaW5pc3RyYXRvci9BcHBsaWNhdGlvbiUyMERh dGEvRm94bWFpbDcvVGVtcC0yNjgwLTIwMTUwNjMwMTAwMDU2L19ibGFuaz48U1BBTiBzdHls ZT0ibXNvLWZvbnQta2VybmluZzogMS4wcHQiPjxGT05UIGNvbG9yPSMxNjg4Y2M+aHR0cDov L3Bvd2VyLWhiLmVuLmFsaWJhYmEuY29tPC9GT05UPjwvU1BBTj48L0E+PC9TUEFOPjxTUEFO IGxhbmc9RU4tVVMgc3R5bGU9IkZPTlQtU0laRTogOS41cHQiPjxvOnA+PC9vOnA+PC9TUEFO PjwvUD4NCjxQIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTUFS R0lOOiAwY20gMGNtIDBwdDsgTElORS1IRUlHSFQ6IDE3Ljc1cHQ7IG1zby1wYWdpbmF0aW9u OiB3aWRvdy1vcnBoYW4iIGFsaWduPWxlZnQ+PFNQQU4gbGFuZz1FTi1VUyBzdHlsZT0nRk9O VC1TSVpFOiA5LjVwdDsgRk9OVC1GQU1JTFk6ICJBcmlhbCIsInNhbnMtc2VyaWYiOyBCQUNL R1JPVU5EOiB3aGl0ZTsgbXNvLWZvbnQta2VybmluZzogMHB0Jz48QSBocmVmPSJodHRwOi8v d3d3LnBvd2VyLWhiLmNvbS8iIHRhcmdldD1DOi9Eb2N1bWVudHMlMjBhbmQlMjBTZXR0aW5n cy9BZG1pbmlzdHJhdG9yL0FwcGxpY2F0aW9uJTIwRGF0YS9Gb3htYWlsNy9UZW1wLTI2ODAt MjAxNTA2MzAxMDAwNTYvX2JsYW5rPjxTUEFOIHN0eWxlPSJtc28tZm9udC1rZXJuaW5nOiAx LjBwdCI+PEZPTlQgY29sb3I9IzE2ODhjYz5odHRwOi8vd3d3LnBvd2VyLWhiLmNvbTwvRk9O VD48L1NQQU4+PC9BPjwvU1BBTj48U1BBTiBsYW5nPUVOLVVTIHN0eWxlPSJGT05ULVNJWkU6 IDkuNXB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+DQo8UCBjbGFzcz1Nc29Ob3JtYWwgc3R5 bGU9IlRFWFQtQUxJR046IGxlZnQ7IE1BUkdJTjogMGNtIDBjbSAwcHQ7IExJTkUtSEVJR0hU OiAxNy43NXB0OyBtc28tcGFnaW5hdGlvbjogd2lkb3ctb3JwaGFuIiBhbGlnbj1sZWZ0PjxT UEFOIGxhbmc9RU4tVVMgc3R5bGU9J0ZPTlQtU0laRTogOS41cHQ7IEZPTlQtRkFNSUxZOiAi QXJpYWwiLCJzYW5zLXNlcmlmIjsgQkFDS0dST1VORDogd2hpdGU7IENPTE9SOiBibGFjazsg bXNvLWZvbnQta2VybmluZzogMHB0Jz5BZGQ6RDYwMkMsTm8uNy0xIEd1YW5nWmhvdSBzY2ll bmNlIGNpdHkgY29sb3IgZnJlcXVlbmN5Jm5ic3A7PC9TUEFOPjxTUEFOIGxhbmc9RU4tVVMg c3R5bGU9IkZPTlQtU0laRTogOS41cHQiPjxvOnA+PC9vOnA+PC9TUEFOPjwvUD4NCjxQIGNs YXNzPU1zb05vcm1hbCBzdHlsZT0iVEVYVC1BTElHTjogbGVmdDsgTUFSR0lOOiAwY20gMGNt IDBwdDsgTElORS1IRUlHSFQ6IDE3Ljc1cHQ7IG1zby1wYWdpbmF0aW9uOiB3aWRvdy1vcnBo YW4iIGFsaWduPWxlZnQ+PFNQQU4gbGFuZz1FTi1VUyBzdHlsZT0nRk9OVC1TSVpFOiA5LjVw dDsgRk9OVC1GQU1JTFk6ICJBcmlhbCIsInNhbnMtc2VyaWYiOyBCQUNLR1JPVU5EOiB3aGl0 ZTsgQ09MT1I6IGJsYWNrOyBtc28tZm9udC1rZXJuaW5nOiAwcHQnPlJvYWQsPC9TUEFOPjxT UEFOIGxhbmc9RU4tVVMgc3R5bGU9J0ZPTlQtU0laRTogOS41cHQ7IEZPTlQtRkFNSUxZOiAi QXJpYWwiLCJzYW5zLXNlcmlmIjsgQ09MT1I6IGJsYWNrOyBtc28tZm9udC1rZXJuaW5nOiAw cHQnPkx1byBHYW5nLEd1YW5nWmhvdSxDaGluYTwvU1BBTj48U1BBTiBsYW5nPUVOLVVTIHN0 eWxlPSJGT05ULVNJWkU6IDkuNXB0Ij48bzpwPjwvbzpwPjwvU1BBTj48L1A+ ----boundary_37200_4be2f4e1-3bb7-48e4-b7c5-1f504e316947-- From woagloan04@outlook.com Fri Jul 10 23:15:37 2015 Return-Path: X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 969C629DF5 for ; Fri, 10 Jul 2015 23:15:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 28032AC00F for ; Fri, 10 Jul 2015 21:15:33 -0700 (PDT) X-ASG-Debug-ID: 1436588130-04bdf0078b126940001-NocioJ Received: from BAY004-OMC4S14.hotmail.com (bay004-omc4s14.hotmail.com [65.54.190.216]) by cuda.sgi.com with ESMTP id ZjIpwF5FZGyn84Bv (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 10 Jul 2015 21:15:30 -0700 (PDT) X-Barracuda-Envelope-From: woagloan04@outlook.com X-Barracuda-Apparent-Source-IP: 65.54.190.216 X-Barracuda-IPDD: Level1 [outlook.com/65.54.190.216] Received: from BAY179-W82 ([65.54.190.200]) by BAY004-OMC4S14.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Fri, 10 Jul 2015 21:15:30 -0700 X-Barracuda-IPDD: Level1 [outlook.com/65.54.190.216] X-Barracuda-IPDD: Level1 [outlook.com/65.54.190.216] X-TMN: [W3sPKF/sGE6sTTg+27kkXBCg+wm+zLC5] X-Originating-Email: [woagloan04@outlook.com] Message-ID: Content-Type: multipart/mixed; boundary="_e1a6f33e-a11c-48e8-9d25-802e35c2207a_" From: woag loan Subject: Contact This Office Date: Sat, 11 Jul 2015 04:15:29 +0000 X-ASG-Orig-Subj: Contact This Office Importance: Normal In-Reply-To: References: <58dedbfb-dc48-4d2a-bd0a-5cc89731e09d@SG2PR02MB0601.apcprd02.prod.outlook.com>,<1666340186.1761833.1424293779607.JavaMail.yahoo@mail.yahoo.com>,<641397285.1754524.1424293874765.JavaMail.yahoo@mail.yahoo.com>,<1473617512.1767301.1424293925890.JavaMail.yahoo@mail.yahoo.com>,<395928424.1787933.1424293963085.JavaMail.yahoo@mail.yahoo.com>,<1683344064.1773758.1424293997431.JavaMail.yahoo@mail.yahoo.com>,<886127446.1775182.1424294121187.JavaMail.yahoo@mail.yahoo.com>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, MIME-Version: 1.0 X-OriginalArrivalTime: 11 Jul 2015 04:15:30.0254 (UTC) FILETIME=[392ADEE0:01D0BB90] X-Barracuda-Connect: bay004-omc4s14.hotmail.com[65.54.190.216] X-Barracuda-Start-Time: 1436588130 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 To: undisclosed-recipients:; --_e1a6f33e-a11c-48e8-9d25-802e35c2207a_ Content-Type: multipart/alternative; boundary="_9181cec9-8c09-43f0-9233-4379568c6c0f_" --_9181cec9-8c09-43f0-9233-4379568c6c0f_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable = = = = = = = = = = --_9181cec9-8c09-43f0-9233-4379568c6c0f_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

<= div dir=3D"ltr">
=
=
=
 =3B
<= div dir=3D"ltr">
=
<= /div>
=
<= div>
=
=
=
=
<= /div>
<= /div>
<= style>
= --_9181cec9-8c09-43f0-9233-4379568c6c0f_-- --_e1a6f33e-a11c-48e8-9d25-802e35c2207a_ Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Wonga Loan-2.JPG" /9j/4AAQSkZJRgABAQEAYABgAAD/4QAWRXhpZgAASUkqAAgAAAAAAAAAAAD/2wBDAAEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/ 2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQH/wAARCAY0BI4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQF BgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4 eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi 4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl 8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP0 9fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKTI9R+dAC0UUUXXf8Ar+mvvAKKKKBX Xdf1/wAOvvCiiigYUUUUCuu6/r/h194UUUUBdd1/X/Dr7woooouu/wDX9NfeMKKKKV13X9f8OvvA KKKKYBRRRRdd/wCv6a+8AooopXXdf1/w6+8AooopgFFFFF13/r+mvvAKKKKV13X9f8OvvAKKKKLr uv6/4dfeAUUUUwCiiii67/1/TX3gFFFFK67r+v8Ah194BRRRTAKKKKACikyPUfmKWgAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAoPQ469qKKAIAx2EhSDnkc8jB45+v+T1jzu4aM4BB3 ZIxz+HPGeh7+lSF8ADJySTnpj6nP1Jr8rv2y/wDgofq37LnxU0r4a6b8M7DxWNQ+H+m+MH1W88QJ pYtJdV1/XtEXSirxkNubQhKjoF3bx1IGPX4e4fzXinNI5PktD2+a1I3jFNL3bKWjk0rWWl2ur6a/ JcY8acO8A5RLiHibM45TlFOUYTqSi2ueXwx91XvLst9lqfqcZBk/KOvq3+f/ANR9snmD+6Pzb2/z +H0z+Bn/AA+k8S/9EH0b/wALrUv/AJlaT/h9J4i83/khejeR9m37v+E61Tdn/wAJbH44z71+kf8A EBvE9vThSq7/APT2lrtr8Wu/ftroz8bX0sfA9pNcWztdK6yLO2k/d0uqTTflfXXzt++u4/3j+ES+ /qf85Hvgyf7x/wC/S/4/5z9cfgIf+C0GvEn/AIsVpf8A4XWof/MlVj/h8zrv/RD9J/8AC51H/wCZ Oj/iBPijv/YFSy39/Dabbv2unT0t5aJfSv8AA/S/FU9bW/4SMSr7bLkv8t9PQ/fM3Cgn7vHu3b/g PsfzH4guASBlfTq3/wAT7H9Px/BD/h87rn/RDNH/APC61X/5l6b/AMPodb/6IZo//hcan/8AMtWa 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 A4zkdR0B9scn9a/Nz9iX9uofta658SfD2oeCofCF/wCBYPDWsaZDHfajqJvtL1+TxFpvmbpdEs0R Ym0ASt5QkcxauihDsyf0mUgdTkgAEf3vQkdsf/q6Yr83z/Is04WzOpk2dUXRzSi4xnSlblSlCFVJ Sg5RkuWdnZv3oySbP2fg7jDh/jzIcBxHwzmUM0ynEXUKsU7uUHytPmSd7rTTX1Wko5A+gpaKK8r1 PpwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigClMTtPPb/2ZK/lK/4Kk6pdv+2h4406 S8mnt9L8E/Dmz0u1uLhYhaWR0+bX7jTNEjUBRJcTGSaQ8kySFiSWLH+rWb7p+n/syn+XP0r+S/8A 4Kqy4/bi+JA7DwL8NPT/AKBT/p/kda/of6MKi/EvFqSulwxjpXsrpqtg1eLe0rSkk7rqfx19Nu// ABCTAW/6KzIFrs/3WZ3T8tFzLy1R4t+yl4S+FHxK+OfhL4e/F0eK4NA8cK3hvw5c+Fbs6bqdn46X WGOhprRXlfD58OjW8MVcDkFCTkfvAP8Agkb+y9Nao1prfxLUGzAtbpfE2jOyysFI1Ld/wjqgyAkE vjaQCAucGv5hobyezmt76Cf7NcWt59ts7zv/APq6+gP51/WL/wAE0/jNYfF79mHwbp82pWNx4q+G Wnw+AvEumBg+qWp8OGbQdH1bV4icpL4rg0Q+JAygBhPxyjEfrn0h3xjwlPLOJ+GuJ+JsqyaXJCdJ 1JRhTkrtyco8yjzvljZxV9LNt8r/AJ4+iThfDziytm/AXF/C3DOcZ1KMuIac5JSm+blSiuZxvJJt rlbd+iWq/mI+Kfguf4W/Enx/8NLy+/tO/wDAviPU/DV3q/2MacNQGh4I6Zzx35BzxxyfVv2VfgLq f7THxX0/4a2lwNLtRpGpXmsasefsOmMyoigcZLtomtqoA+Zio6kZ/Qv/AIK2fsunQ9Wuv2m/DEd/ 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 +B/CSSt+8z69lb/mdzWvy0LFFFFfjJ/TAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSHof oaWkbofof5UAVH++f93/ANpiv5Hf+Crc3lftz/Ej38D/AA1/9Ncnsfb/AOvX9cT/AHz/ALo/9Fiv 5Av+Crsu39u74rD08JfDXjPr4Rk7d+or+h/ovaeJeMfbhbGf+n8IfyB9NBN+EmBXX/WmhbrtQze3 3HwB5/t+n/16/QP/AIJ1/tUJ+zT8Y7//AISXW9L0T4UeOtHF945vdXVbDbqug6PrjaFjW2BBy2sr kYzwCDnFfnZ5/t+n/wBeq/n+36f/AF6/ubijhnC8XZJmuS42KnlWcxfIp2ly1Ek4yje9nGSUotax aTjqkz/NPgziXNOB+Jso4myl8uaZLKKqNL4qblHm5ujTjf3Xo9bqzP72fGXgvwt8QdK02x8TWKax pVrq2leILKzebNtc6jo1wmr6S5wSHVJkSUgAI3l5JKqpPzJ+2d+0vpv7J3wavfHdlHoGp+IIZ9E0 7w/4V1XV00zUdZ0yTWdC8P6x/Y0chM+szeG7bWW8QTR7CBFEVdoy6mT8afhP/wAFlfGPw5+G/grw Pq/wStfF974P8OaT4ZuvEN58Rb/TbvWjoGlRaO+toF8J+LJi0skIaQyTOSWfbsBXHxD+2X+2Drv7 YHjfw74n1fwXp/g6w8GaTq+j6Rptv4i1PxCzHxA+hPr+dagjhiBzouhjjwYCerlmLMf4m4S+j3xy +J8uwfEeU1IcHZRX55Sc4Tp1KcJxSSgqjcXWhFXai2ovVxmkz/Rjjv6UfBH+omZY3gfM6b4yznDQ pJcjU6c3Fc95NaqL92Mb2vd+8tD5l8VeJNc8bazrHiPxjqv9t+KPE95ql74k1a7/ALGxfamMjA6d vTv+Vf1Jf8Eu/wBqPXP2gfhbrmhfEPXfDeoeP/At7aW39naQDp2qL4EnsY9M8IaprOjndKZL6fRd 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 4itvCWk6trOjp8NNc/4SHULMDQmc6zN/Yfj/AMWyQsAMRqXiLHACvyK/G34Rft6T/CjwVo/gqf8A Z4+A3jdtKsRYDxB4j8L/AG7xJfY765rJV42JJ5LK2RjpjFekXf8AwVO8fweFfGnhTwT8DPgb4Atv F2kano91q/hHw/qvh/Vf+J5oj41ot4d15C5HmaL87lnJ2hmOxNvtcReHviTmnEGbY7KslkqX+tLa 4jhXqU6nKq0ZKXN9acFF003yxoqytBNK8X8/wJ4jeF2R8LZXgs2ze9X/AFWdPkcNOaVNpWSp25uZ qzlK9tbqyPhT4p2el6P8VPifoeiQC20DS/iP4n0XSLQdP7N0LWR/YeOnf68VxHn+36f/AF6TXfEd 94p13xB4qvhbfb/E+sap4nu/smONU13/AIn2u8DPGP8AHHNZHn+36f8A16/rbL443BZfSp4580ow hGTb5pOSiottpK7bTblyq76LVH8OZq8HPH5vPBaqU5Sg7bqTuttbO+nnbyNjz/b9P/r1X8/2/T/6 9Z/n+36f/Xqv5/t+n/167G74lW2svyRypOy0ey6en+a+8/cj/gh9P5vxr/aA9vhj4FPv/wAjX4nx z/k1/Sfb/wCrH1H/AKGa/mg/4IZSbvjV+0CP+qYeBf8A1LPEw6fj+Ff0v2/+rH1B/Deea/zR+kR/ ydLN/TI//VDR/wCCf68fRPv/AMQY4W/xZ9f1/t6f/BLNFFFfjB/TAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABSN0P0P8AKlpG6H6H+VAFNvvn6H/0Gv47P+CssoH7e3xZH/UrfCXHrz4VmPvn 8fzr+xNvvn6H/wBBr+OP/grfLt/b0+LIHUeFvhLj/wAJWYj+fpgj9f6I+i//AMnMxv8A2S+N/wDT +EP5K+mKr+FuWq1/+Mpw2n/cvmx+fHn+36f/AF6PP9v0/wDr1z/n+36f/Xqx5/t+n/16/wBD1svR fkf5irDvs9fX8fdNjz/b9P8A69Hn+36f/XrH8/2/T/69Hn+36f8A16q77sX1by2202/8lNjz/b9P /r0ef7fp/wDXrH8/2/T/AOvR5/t+n/16V2tnYPqz7P7v/tfJfcbHn+36f/Xo8/2/T/69Y/n+36f/ AF6PP9v0/wDr07va7t2uH1a2y3303/8AJTY8/wBv0/8Ar0ef7fp/9esfz/b9P/r0ef7fp/8AXpfr uP6u+z/r/t02PP8Ab9P/AK9Hn+36f/XrH8/2/T/69Hn+36f/AF6A+rvz/H/5E2PP9v0/+vR5/t+n /wBesfz/AG/T/wCvR5/t+n/16d3td27XBYdra6vva6v/AOSmx5/t+n/16PP9v0/+vWP5/t+n/wBe jz/b9P8A69IX1Z9n93/2vkvuNjz/AG/T/wCvR5/t+n/16x/P9v0/+vR5/t+n/wBejz69x/Vn2f8A X/bpsef7fp/9ejz/AG/T/wCvWP5/t+n/ANejz/b9P/r003dbvyT1fkvXYX1XfR3e7S95+nu6vt5n 3v8AsO/tra1+x/4x166GlW2s+DviDrHgU/EGA2cn9pabp2iazrx1zWdGVJIjLrv9gazq8jwM2yRo oyeUVh/Rdpn7e/7CP7RXhvUfh3q3xN8KXdh4x0FtI1/wR480rWPDi32m+IfM0abSriDxJollHKZp HeMIpZlZo3yFG6L+Nrzv+m/+f++Kr+dj/X/6Sf8APTI/zivwnxA8B+HuN81fEkKtTIM5k1KUqTin NqMUpNyhLWyjaSs1yx95JI/oDw3+kNxv4f5P/q0sqjnuSpSXLxFouWXxRXK1dNO9tU+17s/qz1j/ AIJe/sAfEy/n8QeDvF+u+HLe5n3ND8Pvidp2o6WXHYLr8Pi1PmyDgSAjpjjjIP8AwR2/Yws3j+2f Ev4tyGf7oufG/gsluONoPw/AOeOpXrwK/lj8iy/597X/AMAx/wDE0S+RN/x8fZrn/r7/AMef5/Wv AoeDPiB7scH4tcRxpRioqHJXc7KKSXtPrkea3+Ftrre7Ppn41+HTvjcZ4LcMf2w3dtOLi27O6XJo mtktF26H9ZOj/shf8Ew/gLd/234vj8A6pi0vbTf8WvF0XibSmQsDNGui+IJ28ObtoK7mtUwcbQSd ydD47/4K1/sYfDLTZtK8G61rPxGvtPtvsum+HvAXhOSysAAhCGPXPELeFPDEeioNqebHPtULuAb5 Qn8iv7iH/UC2P1/z/n8qseb/AM8P9Gt+efx/T/PQ9JX0ccLmmLji+MeLOJs9UWm1e8XrFte+5tXs 1Jxaeu91G22H+k/muQ4SWE4O4B4YyFyVlKKSkrpWbkneTW6vdXXqz60/aw/ap8X/ALWHxUPj/wAU W9tpmj6adT0fwL4ftM4sfDK6vrmt6CdbGQuveIdusIAqgLkEgZJNfMfneTF+Xp36/j16c+9Y/nf9 N/8AP/fFHn+36f8A16/f8hyjA8NZNDJMkioZLBWirWejSbfVN31b1b1ep/NGe5pnHEWb5rnWdf8A C1nGdu7vblirx0XRRS09FZLQ2PP9v0/+vR5/t+n/ANesfzv+m/8An/vijz/b9P8A69euvLr+Pa76 nl/V5WSaenTWyfpy9zY8/wBv0/8Ar0ef7fp/9esfz/b9P/r0ef7fp/8AXp3fd73367X9baXB4du9 03dWd9brs/d2Njz/AG/T/wCvR5/t+n/16x/P9v0/+vR5/t+n/wBeldpWT0bu10b727+YfVntZ2Ss l2Xb4dvI2PP9v0/+vR5/t+n/ANesfz/b9P8A69Hn+36f/Xo33/r+rL7hfVn2f3f/AGpsef7fp/8A Xo8/2/T/AOvWP5/t+n/16r+f7fp/9egPqz7P7v8A7XyX3H7vf8EKZvN+NX7QJ/6pj4FOP+5r8Ucn /wDXX9NEfQ/7o/8AQzX8xf8AwQfk3fG39o0f9Ut+GGP/AAsPiFnj6d/pmv6dI+h/3R/6Ga/zO+kL /wAnSzXzhkf/AKo8Mj/WD6LCt4N5CrW/ecQaf91qqWqKKK/GD+j47L0X5BRRRQMKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACkbofof5UtI3Q/Q/yoAqN/rV/D/0Wa/jn/4LIafZaT+3V4pvoNbg1CXX fh98N7zU7W12BdDvTpniLQ4NH1gKeIxFoqeJkBAbbroyO5/sYb/WKe3HP/bPH8+PrX8Wf/BYm78j /goT8WR1/wCKI+EnT/sU5T+JGf8A9XNf0N9GC/8AxE3E6tL/AFVxl9F71q+HXK21dayUtGneKT0b R/Lf0tbf8Qvy9NJ/8ZRh9+n+z5rr+mumvex+d/2z3/8AHaPtnv8A+O1y/wBt/wCm36f/AGNWPtnv /wCO1/oitl6I/wA2Fhk0nda+v+Z0H2z3/wDHaPtnv/47XP8A2z3/APHaPtnv/wCO0w+qruvx/wAz oPtnv/47R9s9/wDx2uf+2e//AI7R9s9//HaA+q+n/k39dV950H2z3/8AHaPtnv8A+O1z/wBs9/8A x2j7Z7/+O0rruvvQfVfNfj/mdB9s9/8Ax2j7Z7/+O1z/ANs9/wDx2j7Z7/8AjtF13X3of1R/0pHQ fbPf/wAdo+2e/wD47XP/AGz3/wDHaPtnv/47Rdd196F9VXdfj/mdB9s9/wDx2j7Z7/8Ajtc/9s9/ /HaPtnv/AOO0XXdfeg+qruvx/wAzoPtnv/47R9s9/wDx2uf+2e//AI7R9s9//HaLruvvQfVV3X4/ 5nQfbPf/AMdo+2e//jtc/wDbPf8A8do+2e//AI7Rdd196D6qu6/H/M6D7Z7/APjtH2z3/wDHa5/7 Z7/+O0fbPf8A8douu6+9B9VXdfj/AJnQfbPf/wAdo+2e/wD47XP/AGz3/wDHaPtnv/47Rdd1966b A8NfeSfq5f5nQfbPf/x2j7Z7/wDjtc/9s9//AB2j7Z7/APjtHMls0vmg+qruvx/zOg+2e/8A47R9 s9//AB2uf+2e/wD47R9s9/8Ax2jmX8y+/wDrsvuH9Uv0v8pHQfbPf/x2j7Z7/wDjtc/9s9//AB2j 7Z7/APjtF49196EsKls0rbWv/mdB9s9//HaPtnv/AOO1z/2z3/8AHaPtnv8A+O0XXdfeg+q+n/k3 9dV950H2z3/8do+2e/8A47XP/bPf/wAdo+2e/wD47VWfZ/1/w6+8Pqq7r8f8zoPtnv8A+O0fbPf/ AMdrn/tnv/47R9s9/wDx2kH1Zd1+P+Z0H2z3/wDHaPtnv/47XP8A2z3/APHaPtnv/wCO0C+rL+aP 3v8AzOg+2e//AI7R5/t+n/165/7Z7/8AjtV/7T/2f8/lXRJO0tHonfy0OdYdJp6bprXf/wAmP6A/ +CCU3m/G39o/rx8LPhh1/wCxy+IH6/hX9QcP3f8Atn/U1/LN/wAG/wDN53xu/aW/7Jd8L/rz4y+I H/1//wBea/qZh4BB4IjGQeCMk4/mPzr/ADI+kN/ydPNf8GSf+qTDn+pn0YlbwlyTsqmfa9Nc4k/T VXfmWqKKK/Fj+iAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACg8gj1oooArkAA5PDAjOT3G DjOMYz04Ffzf/wDBRX/glb+0L+0r+1F4l+Nnwq8VfDdPDnjHwP4K0+40nxZe6zpmpWeq+H9H8RaK 5b+wfDPio69oWDozywsqNG+uTBAyR7z/AEiMq7cHOOg9eeT/AJPSogo42sQO4IPr0A9eO/tz1r6b hTjDOOC82jneSyUMTGlKkpyipe7OUJNOOmj5Ivtdapq6fx/GfBeQ8e5S8m4gpyqUXKM7QdpRklbm S1i3ZtK1nZ9Ltn8b/wDw4+/bSi/5mL4KAn/qMeMeP/McZHT8MVX/AOHIf7aH/QW+En/gb4z/APnb V/ZQVGT8i9f7zUm0H+Bf++nH9a/VV9JjxMX2sge29J36dklfR+X3u/41/wASueGfbPlttiNPs/3N vws/Ntfxpf8ADkj9tn/oK/CT/wAC/GX/AM7am/8ADk79tL/n9+F3/gZ4y/8Anb1/ZZ5Q/wCeY/7+ f/ZUCJcjMY/7+f8A2VUvpM+Jf/VPv/uFLy8/L8fW8/8AErPhX/LxB0/5iGn9n/pzp1/Htr/GV/w5 P/bR/wCf74W/+BnjL/529QTf8EYv2yrSK4nnv/hbb2/teeMv6fDc+9f2fYX2H4qMfht7eme3vwYj P8Kc+6//ABP+cds8H/EzHid0jw/86VTy6W9dHrf1d9F9Fbwp6x4lW3/M/mr7dFtt2+WrP4qh/wAE ef2toc51z4S/+Djxl19f+Sb9vw/Wk/4dAftbf9B34Tf+Djxn/wDM5X9pH9kad3tYB/2wT39/84+u a/8AYOk/9A+2/wC/Kf4/5x9c0vpM+J//AFTXy4fT7deuy18kP/iVrwt/6F3Efr/rDU8tfh8+/wA9 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 mf8AoD16Pc/8elx/1xb/ANmrzj4c/wDMX+umf+gPT/5jP67BH/dX/iX6f8EreLf+Rp0b/uFf+nqv Wz0P0NeSeMi1p4g06/bHki0YH6qx6cdeM9a9A07WNM1cT/YZhc/Z+G/0dgQexXKjPPHAU5PTFclD afpL82a1NqflFL+vu2PPvBH/ACGtQ/69E/8AQ1r1SX/Vfg38xXlfgj/kNah/16J/6GtesEHavB79 verwGmEk2teZ+tlBX/H8TGTtik+ilffTaP8AVzyn4d/6/UP+vaP/ANGJXqyDJz6fz/z/AEryCf7Z 4N8QG9EJudOvAVJBwwyMHnnBHXkHk56ZrsD400DYJRNOJMc2/wBmfzc9OBt9c8l+nbtU4ev/ALLt 7ybVra9F21/Hy6I2lG78vv3sv0vc5b4hf8fOl/8AXCX/ANCrZ8df8ge1/wCvyL+TVgRG98Y+IPPM JttOsxjJJJY8YHbJY/5A6dB8QP8AkDw/9faf+gtXLFP6tmOjveP9fd+A+sV66+i/4J0Phf8A5AOj f9ef/sxroq53wv8A8gHRv+vP/wBmNdFXtx2XovyMQooopgFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADV+6Px/macehx 6U1fuj8f5muV8ReHDrwt/wDTDbfZskYtg/1wWI/IdOxrOr8L/rowOQ8SyHXPEGnaTYqJvsvN5cDB CBjnbkccZOeMZzg4r1SKFYI4YYuIohtAPJwBgD+ea5vQfC1lon77zDc3xBDXT4BIIPGPQ9Tnv711 ROMcZycZ9OlYUKHJq/8Ah/u/r9DcWsK88O6LqEonvbCCSfH3j19O2M/XA5PPNbtFdYGHYaDpWmuZ 7Kxt4JyCPtAGWYHg9G6H8Oe9blFFFl2/r+kgKV3ZWWowtDeQQ3MJ52uMjn6H9QecDise08LeH7OT z4NLtxOejTrubjvhgw+nymuk3D3/ACP+HuPzo3D/ACD7e3uPzrP2UO34L/IDJm0fTJb+HVJoR9ut hhLjzXBUdNpywUjHbaBjjpxWvRRWgBWFqOhaXq8lvNew/aTbZ2fv32jv8wBwfXqvXuK3aKACsy/0 yx1KLyb6zguQezAZHuCQD0Hc4698Vp0UAc1b+FfD9oxmi0y2LHo1xG1519BK0nrjOT+FdLRRRZdv 6/pICnd2lvexGC7hW4hPOCO/uAQfy49azbLw7o2nXH2iytFt5z3WaTkc9i7Z+h4reooAzbvTrHUo vJvreC4HoR6fqPfqPasMeEfDyNldKOfUXmrH+UhX9cflXW7h7/kf8PcfnRuH+Qfb29x+dZ+yh2/B f5eS+4CpFbwwReRbwiCHnb9nwB156DPP4/zq5RRWgBVO4tLe7i8i8ghuYO4uAGyfXBBGe3UHp71c ooA5EeEfDyNldKOfUXmrH+UhX9cflXUQwxQRiKGIQxAHCqAoGevfOfc/4VNRQBnX2nWOpW32e8hW 5gweD+vQg/z9aksrO20+2Wzs4Rb28Awij7vTJxySeMZJ/KrtFABRRRQBSnt4LuIxTwQ3EB+8LgBg SO+Cp59+K5//AIRHw9/0Cz/4Gar/APHK6zcPf8j/AIe4/OjcP8g+3t7j86z9lDt+C/yAqQQQwxGK CKCCDGALbCgHPT5UAJ5546H8KnmhimiMUqgxkDIJwMD3/SpaKuy7IDk5fCHh+aXzjpik9cidwP8A 0M/+hVv2dnZWcPk2MEFvB2FsFUf+Oj8uTjpVzcPf8j/h7j86Nw/yD7e3uPzqPZQ3tr3sv8vJAVZ4 IbqGaCYBoLgYxnqMfN16cgH1/pBp2mWOkweRZQC3gHOB65x9efetKitAI5FEiNHn7wGfpkH/AD+t Y+naPpekef8AYYRbfaMFv9Ibk+gyx2+uRu5HXFblFAGbqOm2OpRCG9gFwuOAeD1z6gYz7HpVXTdD 0vR/P+ww/ZvtH3h57/Nn0yTt7Y5Y8fnuUUAYdloel6bcT3FnCLe4ueGxO43fQZJ/9CP6GtyiiiyW ysBSnt4LuIxTwQ3EB+8LgBgSO+Cp59+K5/8A4RHw9/0Cz/4Gar/8crrNw9/yP+HuPzo3D/IPt7e4 /Os/ZQ7fgv8AICpbwQWkXlQQw28A6C3AUAnvgKOfzqHUdMsdWg8i9gFxAecH1zj68e1aVFaWXYCn a2kFjbQW9uPJgt1wF6DAznOfXk5q5RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFGR0zz6UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFGR6/56/y5oAKKTI9R+dLQAUUUUAF FFFABRRRQAUUUUXXffbzD9NwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBDjI55GcD 60z5cN83BI7Hjnj656VCWPmR5Bx0z+J5P6Z57Zr+aT/g4L/aJ/bP/Yh+F3wN/aJ/Ze/bK+J/wqT4 mftT/B/9nPxJ8JW+Fv7KvjT4dWXhvxt4Z+IHiDV/FvhPXfH37O/jH4laD4m83wNCJ7jxF4z8XeEv KlaO38GwOEdslLnxOCwiV3mEuVXukpWhZO12m9EtuujejzuvY4us2l9R2vfVWTb7WWl27Kzv3P6Y sZXHcdPw4/z7mjaSoHQg5/n/AI1+VHxS/ZK/b70zwu+vfs2f8FUvjjdfE7QdX03xDpfhb9qD9n39 hLx98EfHS6NcSPc/Drxnb/Ar9lX9nj4o6Fo/ivyF8O3nirwh8VrXxR4YtJWu7GC5vEiz5N/wSb/4 KkeJ/wButPj58AP2jvhno/wE/bt/ZC8ZP8O/2kfhDoV9rLeD9RmGq6voOmfEv4Utrwk1qTwF4h1n w7r7LFH4i8Xv4XjufCssnjDxDa+MfC1xPdJKs3h7/Cm29fhg0nLZe6la7tp1sFX9ylid0+RNK1ve a5U7bNuyWrvt5H7Z0UmR34+vFGQcYIOeRyOR6imrdOmn/ALTul5q4tFJkeo/MUZHqPzp3Xfz+XcY Erjk8H9fyppKlRk4H65/z6+vuK8u+JXhvxP4y8DeJfDvhb4j+K/hL4g1rSH07S/iR4H0nwZqnijw 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 RH37yVrPTazgmldqyV37ydtKy9g8xV0/7H1zvRP2ekPPW3NG+z97l6a/2b/5/wA9KKRTkA+oB/MU taFJppNbNJr0CiiigYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAQjlWzz06/Wv5af+Dsn/kyP9kr /tI9+z5+ngf4x4/LtX9Sw+63/Af51/Pl/wAFwP2Cv25v+CkPgv4P/A34E6H+yf4V+G3wm+P3w4/a IT4gfFv47/F/RfGfinU/Avh3x1oEngeT4Z+Cv2WPF3h7QtIL+OPNi8Tj4p+LTPFAwl8I2k3lyHOl aOOy+cmowp51k85uTsowhm0Jzl6KMXdK7aeiexMtMJjNUr5Nmi1dk5Sy6UIrRPVyklG+l7JuK1X9 A5XKDHJCRg4z6J6dOh6/nxX8Kml/GrWvgd/wcI/8F4P2q/hBp8WseHv2b/8AgnP428aeLEw48Naj 8S/h/wDBf9n+XS/D2supTZJN488GavFclMSKuieJHUkqDX9K3xGvf+Cw3xC8LzeBvhx4G/YD/Zb1 bxJef2Jq/wAeX/aK+Of7WGu/DbwxrS3EGseL/AHwO1z9i79lbw345+IvhhZo9Y8FweMvi/p/gqS9 sXHjHTfFUEkkMuL+xJ/wSM/Z3/Y8/Z8+Nnwd1m98U/tA+O/2t7PXrz9s746/Em5eLxv+0n4o8Y6T 4k0zxrJrosZ4zoHhKZvGHjV/CPhGO4u5fDEPii4bUPF3i7xjNqHjO9iFGvSxGPxNCd3PI87yWzWr /thU7yjo9YKCaffRa2ZdCrhXRjh8Srp5tk/u/ZksszWnOWjbSk+W12mlzS1WqX43WP7Bv7Tv7fv7 Afwi+KmifsvfsLQ/tdfF34U/Cv43/Dz/AIKYax+3h8dh+2X4V+MHiDRdG8eaD8T5PG3gH/gnZF4k 0G38Oa5rDR2XwM8FfGb/AIU94G8MRweAPh81n4L8JeFJbP7d/bd+FnxVl+Df/BLvT/8Agol+0n+z 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 oGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSEA9QD9RmlooATAHQAfhSkA9QD9aKKAsu39b/nqJ geg/L160AAdAB9ABS0UB/X9fchMD0H5fj/PmloooCy7efz7iYHoPypcAdABRRR/lb5dvQAooooAK KKKADA9KTA6YGPTFLRRtsAmB6D8qMD0H5ClooACAeoB+tGB6CiigLLsGB6CkwPQenQdPSloo/Tb+ vkvuD9dH5rsGB6UUUUAGB6CkwPQflS0UB/nf59/UKMDOcDPr3oooATA9B+Xp0pcD0ooo331AKMD0 /wA/5AoooATAPUA/hS4HoKKKAEwPQflS4HTHHpRRRZdgEwPQflS4HpRRSsuy3v8AN7v1ATAznAz6 45owPQenQdPSlop2S2QBRRRQAmB6D8qMD0Hp07elLRR/nf59/ULLt0t8u3p5Hk2ofCT4Vat8SfD/ AMatX+GngDU/jB4P8Pat4U8HfFHUPBug3nxH8KeFNeliuNb8JaL44m0aTxPoega+zxyXvh+0uY4L qSWUvDJJIqJ6zRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSEgdSB9Tij9dF69gFo pMjrkY9c0ZHqPzFF13238g/r+vvQtFGR60ZHqKLruH67f18194UUmR6j86XI9Rz096ACijI9RSZH TIz0xkdfSi67/wBLf7gFooooD9NwopMj1H50ZHqPzFAC0UmR6j8xRkeo/Oi67+Xzva336eof1+F/ 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 pn9sfZf7X+w6f/bH2XH2P+0di/2t5PbyvNMvl5+Xlcc5rXYnOT1Jx/T9Peutxaly3Tf4f1/wDkpy 9stlv8trrzLFFIOg+gpak0CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEJAHP1/wA/ jivwx/4LvfDLXj+yR4O/bK+HFndXXxp/4JufG7wN+2f4DXT2LahrfhXwJq4g+N3gd2dWI0DxV8Mt W1yW7hCOWl8PaGVYKDj9ziAeDXFeIvDWg+MNB1fwt4r0bSvEPhvxFpeoaH4i8P65ZQ6toWuafqcL 6VrOk6vo2sRmDV9EuIpmhnhlQw3VtIYNhilKy81ZYh8vsLWur+nX5NadFruaUXSX8ZJtK6i9n5Lr d+XyP5Kv23fHV54I8YfsYf8ABxT4dtfHGs+AtP8Aivo/w28S+GbCy1OPVLr/AIJu/HDSP+EB+E+t xeEvLjmZvE/xE10/HmLwz4jhi8ZRTfHe28GzyLJ4PgQfYP7YXjrxH+yX+xd+wF8NvEHgf4Jy/tG/ tY/tvfBzSrz4u/tHeBNO+J3w3/Ze/ac/aF8V+Pfjp43/AGg7fwZq80MXizx/8J/E994h0D4K2v8A wmPhaRfEMvhyS58awWPhq5gn/ebWfhX8O/EXgyL4ca54H8Gaz8O7Ww8P6fbeA9Y8MaPqfgu20/w3 faPqvhy3HhJrObw9HbeGJ9H0k+GoUtHj02XSoHsQhgR6rfFb4NfCX46+Dr/4b/G/4XfD74ufDvWr nSLrVfh98UPBnhvx/wCENQn0XUItY0l9V8K+JNG8QeHbqS31iCG5jnntpJIZYluIJluE/d78tGhT hQw0o3/t11JSavJZK+SUclV42XJNzm5NRb9yVltLlTxDq+3xKfKsk5eVSTX9rycuSo7KN1laUVez U8G3TumnJfzZ/A3R/Cfwq/4OVPG3hS+/aT8W/H7xfo3/AASdXQ/iX4++LHxG8F6h4ttfiZr37UXg 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 4NFHibXNBi/srSRD4bkuntbN47d4ISYoign/ALTp1t+D0+7ddnqhJv6t1vptdPbbfT8dkj2mkwD1 AP4UtFaFhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJgYxgY9McUYHo PypaKLLt5/PuAUUUUAGBnOBn170mB6D8qWij/K3y7egBgelFFFABRRRQAUUUUAGB6UmB6D8qWiiy 7efz7gFFFFABRRRQAUUUUAGB6UYHoKKKAEwPQfkP89zRgeg/Kloo8un/AALfkkvRB/w/z7hRRRSs uyAKKKKYBRgeg46e1FFABSYHoPy9OlLRQAUYHpRRQAUUUUWXb+nuFl2/pbBRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUrruv6/4dfeAUUUUwCijI9f8A J6UZHqO/6dfy70XXft+O339O4BRRkeo//X0/OkyPUfmKAuu/9Pb7xaKKKACiijIzjIz6d6ACiiig AopMj1H5ilyPX/I60f19+wBRRRQAUUUUAFFFFABRRRQAUUmR6j86Mj1H5ijz6dwFooyPX/J6UmR6 j8xQF13/AKe33i0UmR6j8xRkeo/OgBaKKMg9CDQAUUUUAFFFFF13/pb/AHAFFFFABRRRQAUUUmR6 j86AFooooAKKKKACiiigAooyD0OaMg9CDQAUUUUAFFGR6/5PSkyPUfnRdd+347ff07gLRRRQAUUm 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 G8bbNb3Wuq6XvbdJt3Ow4w2FPVOp+v5gfh70cfL8p6yepweOe3X/APVX4F/Ez/gsb8SrH4Xftl/t MfCX9kHR/iJ+yX+w58bPF3wV+M/jjxd+0Nq3wo+O/inVfhNqWh6H8aPFnwb+CQ/Z88YeEvEvh3wj JrtxL4Qk8YftEfCnxH4xXQpUax8LyPCkvr37aP8AwVjH7Lnhn9hfx/4M/Zb+Knx3+Ff7bXxg+B/w 40r4gaJ4p8FeFLLwRD8b4pPEOghPB8r+JviR4o+JCeG4JfEll4Tfwh4V8E36oLGb4yeGNUZEM0X7 eUVz+9N5VyxU9/7WcHlSVlZPMeZR5XaztF21ZUUpNKKX/M50+0nklnmyfvKzgmnZrme6V9D9mcna ffOfzX/GuC8deOfBnwy8H+J/H/xG8Y+H/h94E8I6Rf8AiLxZ418Z69pfh7wx4Y8PaOryatrHiDXd eli0PQ9FggiR557maCFIz5rtEQ7Q/mr4N/4KIfE6w/bq+GP7E37R/wCyvL8B779pP4L+O/jN+zn4 1sfjVpHxSv8AXV+Gk6yeOvhV8afD/h74d+G/D/wr+M3hDwpcaJ4m8VR/DL4n/tA/B8yzLpvgT4x+ MUjh1K863Wv25fid8QPi/wDG34X/ALHf7Pfh/wDaN8Pfssa8/gr9on4i+LPjl/wqHRrT4nDQ9C8U av8ABr4A/wBg/DD4vD4t/GHwd4c1hovHPh7xfcfBfwd4S8Za74T8ES/EUX1x4uHgmsR7uGnK99HJ W10jZS2f2ZaPs/PaIK+JjHuorWy+JXW76rVN7rWzWh9Hfspftc/s6ftufCWP45fstfEZPih8KT4h 8SeEF8WQ+H/GPhm3uvEfhGT+ydct4l8ceHfDPiOQQZjSPXliktZ0MTQXE+XFfVjFM5JPIJx7A8n6 Z/InnqK/nL/4Nk9TtNZ/4J2eMNa0y2n07T9Y/bI/ar1uw0q7slsL3S9O1j4lyTRaTJpIfOitApVH s937hlYlVOdv13+23/wUm8W/sgftTfsffs5W37H/AMYfjBpP7WXizxX4P0D4n+D/ABt8O7DTLXxP ofhu51aLwl4U8Fya9r/iTXdZDLbS+K7z4m23wW+E3gzwrqcHjVviRfWXhvxpJ4Shya+ppJc2YPKU lKUYLmzRK2smkl8Nle2tgbbePild5ZLOU7buOTNqpKzte0VN2V2+VtX0R+vYfJAx175/+tXA+OvH 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 yCZo/GieLpWMKo/mAv53T/te/wDBM39h79ve68H6v+1h8AdF+KureBrTULXw3rsviT4h+CvE2naZ rSh7vR5Na+HHifwdr+s6HK5/e+G/EE1xZCbdKLdZWmM36C5/2j+A+vqQf8+woDd9x9cEYz7dT6// AKsCs1mmacyxCzOvzRU3GfPVvGVVp1Gp8yknUkk6lmnOfvSvIawOCv8A8i+FvdT+Fq0bcultVFaR 3UVotnf+NrxR8BPj7+3z/wAFF/2Mv2Ybn/gnf8Rf2Wv2D/8Aglf8S/G+naH8UviKPGuo+Hviz8L/ AIU6l4f0H4SR+CvGHxB+H/haPxFofjB/hZ4OkPh3wl4s+LWbHXoPGtz45dLL7S39kEahUVQAMjoO AehwB04GCew649U2GTax6DJbI6nnHPPQY9/fpTNyq3JYlVJACkgqcZP1BPT0/XpzriDF5phMpwc4 QUMohKnCHO0nKtWg81zSSqSl++rtqVVq13CnFe6omeFy+OGxWOxSbcqiSsld2jHRJpL3VyxSs9F2 tcvAY6UYB6gGgcgH1oryvNff/wAH7jv6ar5eu4UUUUDCiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooATA HQAfhS4B6jNFFABgelGB6UUUAGAOgAowPSiiiy2tp2AKKKKACiiigBMD0H5CjA9B+QpaKADA6459 aTA6YGPTFLRRZdv6W33AFGAeozRRQAUUUUAFFFFABgDoAKCAeoB+tFFFlvbXuAmB6D8qWiigAwPT /P8AkD8qMD0H+f8A9Q/KiigBMD0H5ClwB0AFFFABgen+f8gflSYHoPy/z6D8qWigAooooAKKKKAC iiigAwD1GaTA9B+QpaKACjA9BRRSsuy3v8+/qAYA6ACjAPUA0UU7La2nYAowD1GaKKACiiijy6dg st7a9wooooAKKKKACiiigAooooAKKKKLLe2vcAooopWW9lfvYAooopgJgeg/IUtFFABRRRQAUUUU AJgeg/KlwPQf5/8A1D8qKKACkwD1AP4UtFABRRRQAUUUUrLstNvIAooopgFGB6CiigAooooACAeo B+tJgdMDHpilooAMDGMDHp2ooooCy3tr3CiiigBMD0H5CloooAKTA9B+VLRQAEA9QD9aMAdABRRQ AmAeoB/ClwOmOPSiigAooooATAPUA/hRgDoAPwpaKAAgHqAfrRgDoAKKKACkwPQfkKWigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiii6ezuAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFGR60AFFFFABRRRQAUUUUAFFFFABRRketJkdMjPpmi6 777ALRRRQAUUUUAFFFJkHoQfxoutr69gFoooout76dwCiiigAopMj1Hr17etGR6j86Lrv5fPsK67 ra/y7+gtFFFAwooyPUUmR6j8xRddwFooooAKKKKACiiigAooooAKKTI9R+f+fUfnS0AFFFFABRRR QAUUUUAFFFJkHoQfxoAWiiigAoopMg9CD+NAC0UZHTPPpSZHqPzFAC0UUmQOpA/GgBaKKKACiiig AooJA6kD60UAFFJkHoQfxpcj1oAKKMg9DmigAoooouu/9f00AUUUUAFFFFABRRRQAUUUUAFFFFAB RRQSB1IH1oAKKMj1ooAKKCQOpA+tGQehzQAUUUUAFFFFF1tfXsAUUUEgdSB9aACiikyB1IH40ALR QSB1IH1ooAKKKKLre+ncAoooyPUf5/8A1j86ACiiii6ezuAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAnBHqDSBV6jsfXv/n+f0pF+7yeDn8B0/nX59ft3f8ABR79l7/gnP8ADPT/ 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 Ca0abTtpvZrkxuEwuPw/1XELRSjOKjZKMotNSS7qyt2t16PCjaAQDgAHIB6CkKJg4Rc4PRRnp9Kf RXNd93/X/DL7jrUYqzsm42SbWvu7a76WPwa0/wD4JsfHj4n/APBYvUf+Cjf7TGt/CG4+Fnwd+Hi/ Dj9kH4aeAfFXjjxR4l0XKeIdJk8Z/E9fFHw78I+GNG1meLxr468RDwz4Uu/FlrF4s8ReHI47wTeB j4t8Y/uwFzI6MAVwo5HBIAAOPXPHqOKs5X5Rt46jPbkj/wDX7U35CxGCGz1x6+uQPyz/ACrpxuPx OY0cvpYmcrZXSjRpRjpCEIuVRJRSS96c5Sk7Xle0rqKOKjhMPh8Tj8SkubNJRlLRu7jFRtqtktk7 WvstbyBVHRVH0AH9KUqp6qDjpkA4paK5et+vfr952csUuXlVu1lb7hu1QMBVA9MDH8qBGgGAiAeg UAfyp1FO77vXfztt9wcsdPdjomlotE90tNE+qGhEHAVQOuAo6+vSjYmc7Fz67Rn88U6ii77v7w5Y tJOMbR+FWVl6LpsthCAeoB+oB/nQFUdFA+gApaKQ7K97K/e2v3jSqnqqn6gf4UoAHQAfQAUtFF3t fTa3l2Cyveyv3sr/AHjSqnkqpPqQP8KXav8AdH5Cloo7eWq8na112009AUYq9klfR2SV12fcaEQH IVQfUKAfzxTqKKHrvrpbXt29ASUfhSWt9FbXvp1E2rnO0Z9cDP50uAeozRRQNJLVKzera017hRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABgelFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJgeg9Onb0pcD0FFFABgdMcelGB0xx6UUUAFFFFABR RRQAUUUUAGAeozSYHoPy9OlLRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFFktlYAwB0GKKKKACiiigAooooAKKKKACiiigBMD0H5UtFFABRRRQ AYHpRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGR6ijI9RRdd/P5dwCiii gAooooAKKKKACiiigAooooAKKMj1ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo yPWkyPUcdeelAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFRZOz8cfhjNf i1/wUk/4KS/tC/sBfEv9nDStA/ZA8BfG74V/tRfGTwN+zz4U+Lut/tS6x8IrD4f/ABl8ca1LBoei /FXQov2b/isug+FbiAapNb+KfDfijxnO0Xh3xGbnwd4W8uyXxLlGfNXWHS3jo9fLT7nf+ldpN7d7 fM/aqivwr/bz/wCCnH7Wf7Dfxe/ZQ+HNz+xJ8IfiF4Z/a9+Jfgb4H+Cvis/7aeteBfC/gf4yeJId ATWPCXxBj1z9kzxJdaN4c/4SHWdZ/wCEM8S+HT4qvfGfhTw1cE+DfB/jKS08G19x/tfftB/Hr9mb 9lrVfjp4I+APw9+M/jrwVpOn6347+EN18fta+GX2zfHmfQvhV45k+Cvi8/ELxPceKZtH8M+B/Dfi jwj8K4fGyatHJLP4QuynhObRq1D6w7b8lu0k1eL1umuaLs1fVabXzuniFhtNYqSl0cGnqmm01o1e 9rxavpc+8aK8v+F+tfEnXPAXhvWfi14F8M/Dr4k6jpK3/irwR4M+IGsfFPwz4b1EqQulaR441z4e /CybXguUSWaTwZ4WLPu2wMiiZ/UMj1prVX8r9ywopMj1H50uR6jjr7Ub7a62+fb1Dv5b+Xr96Ij8 y5z0JyPqePyHSkGGwCeeg44x2H596eMKDyAfU8fmOoH1+vSvzT8W/Ef9vr4O/sS/Gf4p/Efwb+yJ 4+/a2+H2g/FPxfovhr4feLPjH4F/Z7uvCXho614g8PTPq/ibw34v+Il74nXwxp9rd+J/DcsHhXw1 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 tDX2qaH+z74u+P2m/Bs/Db4tePdGiaSL4baT41+EPxo+LNt4C+JPibQboXfgrwj8Yrb4UeK/FzKP BlnA/wAQDF4OLo/v09LWlb5q2i1vfVX6pNXVmOt+4Vmuik/KLvq9b20eu2jV1Y/Swqdx68Dr6/Lj 8aTac556e/8Acx/kDuPz/PD4a/t/+E/iP+2F8cP2I7v4CfH74ffGj4L/AAsh+NE0vj+y+EC+DfiR 8NdX8Yt4M0LW/hjrngj41eNZJh4kvSJbSLxbY+C5rJEk/wCE0i8KXSC1rQ/Yu/b+8B/tsa9+0b4S 8LfCX44fBnxx+y18Vx8Gfi34J+OWk/Dew1qw8cDS/tRGh3Hwl+Jfxb8NeIPDwjiydci8VFTIuIN9 qFlGVCEa/M43fK5VX10jU/s2UtNOXnlrbROS6lVm8OraaqMVfT40pLz1WsX1WqZ+glFFFbrRJdgW qT7hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUARkfMR13A4+vX+Yr8Ff+Chk1vY/8Ffv+CDt9eym1sB4y/4KFaM13MALKXVtb/Zj0FNE 0rA482WSOQxnvgc9Qv70EnKHn6+wz3/Ic9eeteE/Gb9nz4D/ALQugad4Q/aC+Cvwl+Ovg/StXXxB pnhn4w/Djwb8R/DGl+JFWXTBrunaB430DxHaRa4INV1KG3uRCZo0laEOonaSoWmJwVda27a7xXr5 W32ejuQknh8bQ7r0tp3t22V1da3ukn+Nnibxp4Q8Qf8ABxB+z9Pofifw9qsev/8ABJv4mXmi3Oma zpl3/wAJBY65+0H4a1rQ10ZoGeTWIG0PQNc8R74GliS2/fRu8WGb5D0LQPGvxj/a8/4OnPg98J74 6n4/8Xfs+fs5eGPAel6PdhdQvvHuufsf/EPQDpD/ANiszx68PEH9i+GPvmUNsDFgX3f0B3n7Bv7D d18SovjJqH7G37KVx8XrTxJpnjSH4sy/s6fB7/hZdp4r0R430PxYnjyXwzL4og8R6BJp8L2viBb5 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 UARgL6Mf6j+Yrzj4c/Dr4c/CPwToHw9+F/gTwd8MvAPhi0Nl4d8F/D7wxpHg7wToNgjHUPJ0Xw34 dgtfDuiwCVmlUQ28CGQu6n94C3o5/qP5inWTUbK+iSXpZ2tbp2/zNKfn/N/kA6D6ClpB0H0FLVlB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUZHrTS6L95lGcgZYDJHUcnt3oXZfcv8hNqKbbSXVtpLtq38kOopnmR/wDPRP8Avpf8aPMj/wCe if8AfS/40+V9n9zJ9pT/AOfkP/Ao/wCY+imeZH/z0T/vpf8AGjzI/wDnon/fS/40cr7P7mHtKf8A PD/wKP8AmOwPQfkKMD0H5U3zI/8Anon/AH0v+NHmR/8APRP++l/xo5X2f3MPaU/+fkP/AAKP+Y7A 9B+VLTPMj/56J/30v+NHmR/89E/76X/Gjlf8r+7yt+WnpoHtKf8APDp9qPTbr06D8D06dPaimeZH /wA9E/76X/GjzI/+eif99L/jRyv+V/cHtKf88P8AwKP+Y+imeZH/AM9E/wC+l/xo8yP/AJ6J/wB9 L/jRZ9n9zD2lP+eH/gUf8x+BjGBj07UUzzI/+eif99L/AI0eZH/z0T/vpf8AGiz7P7mHtKf88P8A wKP+Y+imCSMnAdCfQMpP5ZoMkYOC6A+hZQfyzRZ9n939eQe0ppX54Wva/NG1+172v5D6KZ5kf/PR P++l/wAaPMj/AOeif99L/jRaXZ/cw9pT/nh/4FH/ADH0UzzI/wDnon/fS/40eZH/AM9E/wC+l/xo s+z+5h7Sn/z8h/4FH/MfRTPMj/56J/30v+NHmR/89E/76X/Gjlf8r+4PaU/54f8AgUf8x9GB6Cme ZH/z0T/vpf8AGjzI/wDnon/fS/40cr/lf3B7Sn/PD/wKP+Y+imeZH/z0T/vpf8aPMj/56J/30v8A jRZ9n9zD2lP/AJ+Q/wDAo/5j6KZ5kf8Az0T/AL6X/GjzI/8Anon/AH0v+NHK+z+5h7Sn/PD/AMCj /mPopokQ5w6HHXDA4+uDxTfNi/56R8dfnXj9aLPs/uYc8El78Ent7ys7dteg/AHQAfhS0zzI/wDn on/fS/40eZH/AM9E/wC+l/xos+z+5h7Sn/PD/wACj/mPwD1FJgeg/Km+ZH/z0T/vpf8AGjzI/wDn on/fS/40Wl2f3MPaU/54f+BR/wAx9FM8yP8A56J/30v+NHmR/wDPRP8Avpf8aLPs/uYe0p/zw/8A Ao/5jsD0H5UuB6dOntTPMj/56J/30v8AjR5kf/PRP++l/wAaOV9n32e73Ye0p/zw/wDAo/5j8D0o pnmR/wDPRP8Avpf8aPMj/wCeif8AfS/40cr/AJX3269w9pT/AOfkP/Ao/wCY+jA9Pb8PSmeZH/z0 T/vpf8aPMj/56J/30v8AjRyv+V/cHtKf88O/xR377j6KZ5kf/PRP++l/xo8yP/non/fS/wCNHK/5 X9we0p/zw/8AAo/5j6KZ5kf/AD0T/vpf8aPMj/vp/wB9L/jRZ9n9zD2lP+eH/gUd/vHYHoPy9OlL gelNLov3nVfqwH8zSeZH/wA9E/76X/GizfR/cDnBNpzgn1vJJ/PX0H0m1fQcdOBxnrTfMj/56J/3 0v8AjR5kf/PRP++l/wAaOV/yvTbTYPaU/wCeH/gUem3UfRTPMj/56J/30v8AjR5kf/PRP++l/wAa OV9n9zD2lP8Anh/4FH/Mdgeg/IUYHoPTp29Kb5kf/PRP++l/xo8yP/non/fS/wCNFn2f3PpsHtKf 88P/AAKP+Y+imeZH/wA9E/76X/GjzI/+eif99L/jRZ9n9zD2lP8A5+Q/8Cj/AJj6KZ5kf/PRP++l /wAaPMj/AOeif99L/jRZ9n9zD2lP/n5D/wACj/mPophliHWSMfV1/wAaBIhOA6E+gYE/kDmiz7P7 mCqQbspwb0VlJXu9la/W6sPopnmR/wB9P++l/wAaPMj/AOeif99L/jRZ9n9zD2lP/n5D/wACj/mP opnmR/8APRP++l/xo8yP/non/fS/40WfZ/cw9pT/AOfkP/Ao/wCY+imeZH/z0T/vpf8AGjzI/wDn on/fS/40WfZ/cw9pT/5+Q/8AAo/5j6KZ5kf/AD0T/vpf8aPMj/56J/30v+NFn2f3MPaU/wDn5D/w KP8AmPopnmR/89E/76X/ABo8yP8A56J/30v+NFn2f3MPaU/+fkP/AAKP+Y+imeZH/wA9E/76X/Gj zI/+eif99L/jRZ9n9zD2lP8A5+Q/8Cj/AJj6KZ5kf/PRP++l/wAaPMj/AOeif99L/jRZ9n9zD2lP /n5D/wACj/mPopnmR/8APRP++l/xo8yP/non/fS/40WfZ/cw9pT/AOfkP/Ao/wCY+io/Ni/56R/9 9r/jTi6AAl1APQlgAfoScGiz7P7mHtKbvacHbf3o6bb66br713HUUzzI/wDnon/fS/40eZH/AM9E /wC+l/xos+z+5h7Sn/z8h/4FH/MfRTPMj/56J/30v+NHmR/89E/76X/Giz7P7mHtKf8Az8h/4FH/ ADH0UzzI/wDnon/fS/40eZH/AM9E/wC+l/xos+z+5h7Sn/z8h/4FH/MfRTPMj/56J/30v+NHmR/8 9E/76X/Giz7P7mHtKf8Az8h/4FH/ADH0UzzI/wDnon/fS/40eZH/AM9E/wC+l/xos+z+5h7Sn/z8 h/4FH/MfRTPMj/56J/30v+NHmR/89E/76X/Giz7P7mHtKf8Az8h/4FH/ADH0UzzI/wDnon/fS/40 eZH/AM9E/wC+l/xos+z+5h7Sn/z8h/4FH/MfRTS6AAllAPQlhg/Q55pvmxf89I/++1/xos+z+7tu DqU1vOC2esorR2s9+t1b1XckopnmR/8APRP++l/xo8yP/non/fS/40WfZ/cw9pT/AOfkP/Ao/wCY +imeZH/z0T/vpf8AGjzI/wDnon/fS/40WfZ/cw9pT/5+Q/8AAo/5j6KZ5kf/AD0T/vpf8aPMj/56 J/30v+NFn2f3MPaU/wDn5D/wKP8AmPopnmR/89E/76X/ABo8yP8A56J/30v+NFn2f3MPaU/+fkP/ AAKP+Y+imeZH/wA9E/76X/GjzI/+eif99L/jRZ9n9zD2lP8A5+Q/8Cj/AJj6KZ5kf/PRP++l/wAa PMj/AOeif99L/jRZ9n9zD2lP/n5D/wACj/mPopnmR/8APRP++l/xo8yP/non/fS/40WfZ/cw9pT/ AOfkP/Ao/wCY+imebH/z0T/vtf8AGl3KQSGUgdTkYH1OcUWfZ/cxqcHe04u2rtJOy7uzHUUzzI/+ eif99L/jR5kf/PRP++l/xos+z+5i9pT/AOfkP/Ao/wCY+imeZH/z0T/vpf8AGjzI/wDnon/fS/40 WfZ/cw9pT/5+Q/8AAo/5j6KZ5kf/AD0T/vpf8aPMj/56J/30v+NFn2f3MPaU/wDn5D/wKP8AmPop nmR/89E/76X/ABo8yP8A56J/30v+NFn2f3MPaU/+fkP/AAKP+Y+imeZH/wA9E/76X/GjzI/+eif9 9L/jRZ9n9zD2lP8A5+Q/8Cj/AJj6KZ5kf/PRP++l/wAaPMj/AOeif99L/jRZ9n9zD2lP/n5D/wAC j/mPoqPzYv8AnpH/AN9r/jTi6AAl1APQlgAfoScGiz7P7mHtKbvacHbf3o6bb66br713HUUzzI/+ eif99L/jR5kf/PRP++l/xos+z+5h7Sn/AM/If+BR/wAx9FM8yP8A56J/30v+NHmR/wDPRP8Avpf8 aLPs/uYe0p/8/If+BR/zH0UzzI/+eif99L/jR5kf/PRP++l/xos+z+5h7Sn/AM/If+BR/wAx9FM8 yP8A56J/30v+NHmR/wDPRP8Avpf8aLPs/uYe0p/8/If+BR/zH0UzzI/+eif99L/jR5kf/PRP++l/ xos+z+5h7Sn/AM/If+BR/wAx9FM8yP8A56J/30v+NHmR/wDPRP8Avpf8aLPs/uYe0p/8/If+BR/z H0UzzI/+eif99L/jR5kf/PRP++l/xos+z+5h7Sn/AM/If+BR/wAx9FM8yP8A56J/30v+NHmR/wB9 P++l/wAaLPs/uYe0p/zw/wDAo/5j6KKKRYUUUUAU5chHxkHK/wA1zj8P1zX5bf8ABR7xv418FH4N Hwd4t8U+GG1CTx1/ar+G9e1bQDfCJ/BQg/taXRVMjJD5s3lE4Efny+XgSMK/UyQb8gDqV4xnuM8c Zr8i/wDgqMS0vwOY91+JS+n3W8Cnp/wL0FffeE+EwmN4+yajjacalGeIxSqRmlKLSyWrKKcZJp+/ FaNa6W2PybxxxmLwPhnxLjMFNwrU45EoSi3Fq+d4aM2mmmvdl3126n55/wDC8vjV/wBFe+J//hwf Fn/zQ+5/Ol/4Xl8a/wDor3xQ/wDDg+LPf/qYfc/ma8nor+4P9VuG/wDoQ4X/AMJ6Pl/d8/xXz/zv /wBb+K/+h5X/APB8/wD5L+rPyv6x/wALy+Nf/RXvih/4cHxZ7/8AUw+5/M0f8Ly+Nf8A0V74of8A hwfFnv8A9TD7n8zXk9FH+q3Df/Qhwv8A4T0fL+75/ivmf638V/8AQ8r/APg+f/yX9Wflf1j/AIXl 8a/+ivfFD/w4Piz3/wCph9z+Zo/4Xl8a/wDor3xQ/wDDg+LPf/qYfc/ma8noo/1W4b/6EOF/8J6P l/d/q6+Z/rfxX/0PK/8A4Pn/APJf1Z+V/WP+F5fGv/or3xQ/8OD4s9/+ph9z+Zo/4Xl8a/8Aor3x Q/8ADg+LPf8A6mH3P5mvJ6KP9VuG7J/2DhbPZ/V6Nnts+X+rr5n+t/Fd0v7cr3ey9vO79Fza9duz 8r+sf8Ly+Nf/AEV74of+HB8We/8A1MPufzNH/C8vjX/0V74of+HB8We//Uw+5/M15PRR/qtw3/0I cLo7P/Z6O+mnw7+Xmvm/9buK9P8Ahcr6q6/fz1Xde9qt9V2flf1j/heXxr/6K98UP/Dg+LPf/qYf c/maP+F5fGv/AKK98UP/AA4Piz3/AOph9z+Zryeij/VXhxXvkOF03/2ejptv7un/AAV81/rfxXdL +3K92rpe3ndrTVLm1Wu/l6X9Y/4Xl8a/+ivfFD/w4Piz3/6mH3P5mj/heXxr/wCivfFD/wAOD4s9 /wDqYfc/ma8noofC3Ddv+RDhdv8AnxR8v7v9XXza4v4r/wCh5X/8Hz8v739W9L/TPwb+MnxZ1P4t /C7TtU+K/wARL6w1X4l+D7a/0288ZeKNT0u/01/FWixyaTJ5mvSRvviZ1lMqSLJGWjkR42ZGPjJ8 ZPizpnxb+KOnaX8V/iJY2GlfEvxhbWGm2fjLxRpml2Gmp4q1qOPSY/L16ONNkSosRiSNY4wscaJG qovnPwUx/wALm+EGen/C0/hxn6f8JbomaPjXj/hc3xfwMD/hafxHwPQf8JbrnFfGf6vZEuOVQWS0 FQ/1SVb2XsocntfbxXteVx5eflfLzbrZvovsP9Yc9XAPtv7are0/1q5Of2k+bl9mpcnNzc3L15b2 3dt0Sf8AC8vjV/0V74n/APhwfFn/AM0Pufzpf+F5fGv/AKK98UP/AA4Piz3/AOph9z+Zryeivs1w tw3Zf8IOF2X/AC4o+X93z/FfP4//AFv4r/6Htf8A8Hz/APkv6s/K/rH/AAvL41/9Fe+KH/hwfFnv /wBTD7n8zR/wvL41/wDRXvih/wCHB8We/wD1MPufzNeT0Uf6rcN/9CHC/wDhPR8v7vn+K+a/1v4r /wCh5X/8Hz/+S/qz8r+sf8Ly+Nf/AEV74of+HB8We/8A1MPufzNH/C8vjX/0V74of+HB8We//Uw+ 5/M15PRR/qtw3/0IcL/4T0fL+75/ivmf638V/wDQ8r/+D5//ACX9Wflf1j/heXxr/wCivfFD/wAO D4s9/wDqYfc/maP+F5fGv/or3xQ/8OD4s9/+ph9z+Zryeij/AFW4b/6EOF/8J6Pl/d8/xXzP9b+K /wDoeV//AAfP/wCS/qz8r+sf8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zR/wALy+Nf/RXvih/4cHxZ 7/8AUw+5/M15PRR/qtw3/wBCHC/+E9Hy/u+f4r5n+t/Ff/Q8r/8Ag+f/AMl/Vn5X9Y/4Xl8a/wDo r3xQ/wDDg+LPf/qYfc/maP8AheXxr/6K98UP/Dg+LPf/AKmH3P5mvJ6KP9VuG/8AoQ4X/wAJ6Pl/ d8/xXza4v4r/AOh5X/8AB8/L+9/VvS/3N+zj8Wfipqx+PX9qfEv4i6u2j/s5/EjVdMW/8Yanqg0b xJoq6R/Y2saUf7clMeuKskshlUwkP8nnIszq/wA3/wDC8fjTz/xd34nc9f8Ai4Hivn6/8VDz+Nen /sukA/tEZ7/svfFcD640T/64r5ar43KuHchnxTxjSlklGVOj/q17Gm6VNxp+0ppz5IuKUfaPWVkl K3vLY+wzviHPo8IcIzjnVZTqf6xOclUmpScZwUeaSkm7JtK7Vtr7Hq//AAvL41f9Fe+J/wD4cHxZ /wDND7n86X/heXxr/wCivfFD/wAOD4s9/wDqYfc/ma8nor7L/Vfhr/oRYT/wRR/+R9f6Wvxy4u4r sks8r7L/AJfVPLpzf1Z+V/WP+F5fGv8A6K98UP8Aw4Piz3/6mH3P5mj/AIXl8a/+ivfFD/w4Piz3 /wCph9z+Zryeij/Vbhv/AKEOF8/9no//ACPr/S1a4u4re2eV+v8Ay/n03+1069rPyv6x/wALy+Nf /RXvih/4cHxZ7/8AUw+5/M0f8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zXk9FH+q3Df/Qiwum/7ij5 f3f6uvmf63cV6f8AC5X12/fz8v73n/Wl/WP+F5fGv/or3xQ/8OD4s9/+ph9z+Zo/4Xl8a/8Aor3x Q/8ADg+LPf8A6mH3P5mvJ6KP9VuG/wDoQ4X/AMJ6Pl/d/q6+Z/rfxXp/wuV9dv38+lr/AGul9fT0 v6x/wvL41/8ARXvih/4cHxZ7/wDUw+5/M0f8Ly+Nf/RXvih/4cHxZ7/9TD7n8zXk9FH+q3Df/Qiw v/gij5P+Xtr818z/AFt4s/6HeI/8HVPL+95r+mr+sf8AC8vjX/0V74of+HB8We//AFMPufzNH/C8 vjX/ANFe+KH/AIcHxZ7/APUw+5/M15PRR/qtw3/0IsL/AOCKPl/d/q6+Z/rdxX/0PK/n+/npt/e8 /wAPS/rH/C8vjX/0V74of+HB8We//Uw+5/M0f8Ly+Nf/AEV74of+HB8We/8A1MPufzNeT0Uf6rcN 3t/YOFv2+r0b/wDpPr/S1X+t/Ff/AEPK/wD4Pn5f3vP+tL+sf8Ly+Nf/AEV74of+HB8We/8A1MPu fzNH/C8/jWDkfF/4oAjkH/hYXizOfX/kYfc15PRWdbhbhxUqrWRYW6pzf8CirPldvs6eXy7a7Yfi 7it16CeeV7OtTT/fTenPFP7Vna9n6W7X/Sf9vTx54/8ABHxm0ay8IePviF4bsdZ+HWl63d6fonjb xRZaXLqk2q69pJlj0iLXILfRVb+ztIXzreFI3LSg5kMpPxh/wvP414x/wt/4oY9P+FheLMfl/wAJ DX1f/wAFICp+OnhXbwP+FUeGB/5dvjb/ADzzX58V8Z4a5LkOP4H4Zq4/JaFarOpVU68qFKU6iVWc U5S5btJJKz7bJ3PvvFTiLPsDx9xFgsDnVeEVSotQjVmoxbpwbslOy3/4d3R6v/wvL41f9Fe+J/8A 4cHxZ/8AND7n86X/AIXl8a/+ivfFD/w4Piz3/wCph9z+Zryeivt/9VuG/wDoQ4X/AMEUfL+75/iv n+dri/iuy/4Xa/8A4Pn5f3v6s/K/rH/C8vjX/wBFe+KH/hwfFnv/ANTD7n8zR/wvL41/9Fe+KH/h wfFnv/1MPufzNeT0Uf6rcN/9CHC/+E9Hy/u+f4r5n+t/Ff8A0PK//g+f/wAl/Vn5X9Y/4Xl8a/8A or3xQ/8ADg+LPf8A6mH3P5mj/heXxr/6K98UP/Dg+LPf/qYfc/ma8noo/wBVuG/+hDhf/Cej5f3f P8V8z/W/iv8A6Hlf/wAHz/8Akv6s/K/rH/C8vjX/ANFe+KH/AIcHxZ7/APUw+5/M0f8AC8vjX/0V 74of+HB8We//AFMPufzNeT0Uf6rcN/8AQhwv/hPR8v7vn+K+Z/rfxX/0PK//AIPn/wDJf1Z+V/WP +F5fGv8A6K98UP8Aw4Piz3/6mH3P5mj/AIXl8a/+ivfFD/w4Piz3/wCph9z+ZryeihcLcN6f8IOF 6f8ALij5f3fP8V83/rfxX/0PK/8A4Pn5f3v6t6X9XPxx+NJxn4u/E846Z+IPiw4+n/FQ8V9Kfsef FX4na/8AtG+ANK8R/Ebx74g0u5i8TveaXr3jPVtQ03UGh8Ha9LA7aJrOtzyEwzIkyEQyGORFkVNy ZHwpX1Z+xJj/AIaf+GWenmeM/wD1XXjn+tfL8YcO5BR4V4lq08jw8KlPhzP6kKkaNNOMoNOMrqN/ cto0+ZLTRNn1HA/Eef43jPhqE88ryi+IshjODrVGpRas003Z363unLvoeVn45/Gskk/F/wCKBJyS T8QvFhJJzkn/AIqHnOTn6n1o/wCF5fGv/or3xQ/8OD4s9/8AqYfc/ma8nor6Ohwvw46FFvIcLd0q bf7ije7hH+75/ivn85X4u4rVeslnlayq1F/Gmvtvpzaenl6X9Y/4Xl8a/wDor3xQ/wDDg+LPf/qY fc/maP8AheXxr/6K98UP/Dg+LPf/AKmH3P5mvJ6K1/1V4c/6EOF/8J6PZP8Al7Xfo121y/1u4rev 9uV7Wvf289rpX+La7t6/K/rH/C8vjX/0V74of+HB8We//Uw+5/M0f8Ly+Nf/AEV74of+HB8We/8A 1MPufzNeT0Uf6rcN/wDQhwv/AIT0fL+76/h21P8AW7iz/oeV/wDwfU02/vef9aX9Y/4Xl8a/+ivf FD/w4Piz3/6mH3P5mj/heXxr/wCivfFD/wAOD4s9/wDqYfc/ma8noo/1W4b3/sHC27/V6Pl/d9fv XbU/1u4s/wCh5X3t/Gqb6afFvrt/wL+sf8Ly+Nf/AEV74of+HB8We/8A1MPufzNH/C8vjX/0V74o f+HB8We//Uw+5/M15PRR/qtw3/0IsL5/uKP/AMj6/wBLU/1u4s/6HldX/wCn1Ty/vef4el/WP+F5 fGv/AKK98UP/AA4Piz3/AOph9z+Zo/4Xl8a/+ivfFD/w4Piz3/6mH3P5mvJ6KP8AVbhv/oRYXTf9 xR8v7v8AV181/rfxX/0Pa3/g+fW397z/AA9L+sf8Ly+Nf/RXvih/4cHxZ7/9TD7n8zR/wvL41/8A RXvih/4cHxZ7/wDUw+5/M15PRR/qtw3/ANCHC/8AhPR8v7vn+K+b/wBbeLP+h3iP/B1T/wCS/qz8 r+sf8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zR/wALy+Nf/RXvih/4cHxZ7/8AUw+5/M15PRR/qtw3 /wBCLCef7iiu2/u6f8FdtT/W7izT/hcr62/5fVOv/b3r62fkerf8Lx+NP/RXfid/4cDxX/8ANDX0 r8Ufiv8AFGx/Z0/ZW1W2+I3jzTtT1aL42Prur2vjjUbHVNcbQ/GGlwaENb1f+3FOtGKHfFGxllzD M6IsKb1k+FK+rPizj/hmL9kTA52fH/J9f+LlaJj/AAr5HPuHMhhm/CUYZHQhGtxRKnUSo00qlP8A 1dz6qoNOG3PThLZr3d2z67hniLPp5Rx9J55XnKnwvGUG6s5OEnxBkMeZXk2m4ykk0tm1fU8q/wCF 5fGr/or3xP8A/Dg+LP8A5ofc/nS/8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zXk9FfXf6rcN/9CHC/ +E9Hy/u+f4r5/ILi/iuy/wCFyvsv+X9Ty/vf1Z+V/WP+F5fGv/or3xQ/8OD4s9/+ph9z+Zo/4Xl8 a/8Aor3xQ/8ADg+LPf8A6mH3P5mvJ6KP9VuG/wDoQ4X/AMJ6Pl/d8/xXzP8AW/iv/oeV/wDwfP8A +S/qz8r+sf8AC8vjX/0V74of+HB8We//AFMPufzNH/C8vjX/ANFe+KH/AIcHxZ7/APUw+5/M15PR R/qtw3/0IcL/AOE9Hy/u+f4r5n+t/Ff/AEPK/wD4Pn/8l/Vn5X9Y/wCF5fGv/or3xQ/8OD4s9/8A qYfc/maP+F5fGv8A6K98UP8Aw4Piz3/6mH3P5mvJ6KP9VuG/+hDhf/Cej5f3fP8AFfM/1v4r/wCh 5X/8Hz/+S/qz8r+sf8Ly+Nf/AEV74of+HB8We/8A1MPufzNH/C8vjX/0V74of+HB8We//Uw+5/M1 5PRR/qtw3/0IcL/4T0fL+75/ivmf638V/wDQ8r/+D5//ACX9Wflf1j/heXxr/wCivfFD/wAOD4s9 /wDqYfc/maP+F5fGv/or3xQ/8OD4s9/+ph9z+Zryeij/AFW4b/6EOF/8J6Pl/d8/xXzP9b+K/wDo eV//AAfP/wCS/qz8r+sf8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zR/wALy+Nf/RXvih/4cHxZ7/8A Uw+5/M15PRR/qtw3/wBCHC/+E9Hy/u+f4r5v/W/iv/oeV/8AwfPy/vf1b0v91/FD4r/FKx/Z0/ZX 1a1+I3j3TtT1WL42PrmsWvjnUbDVNcbRPF+lwaGNb1f+3FbWfKhLxITLLuhmkRBChdX+ah8cfjSO nxd+Jw+nxA8Vj/3Ya9U+LBH/AAzH+yMAOQnx/wAn1/4uVomP618q18nwjw5kFXKOapkmHqS/1o4l p80qNJv2dPiDOoQg3Z6QjGMVZ2XL6H13G/EOfU84ytQzuvC/C/DU2o1akbynw/kU5SspLWUpSbfV tvZnq/8AwvL41f8ARXvif/4cHxZ/80Pufzpf+F5fGv8A6K98UP8Aw4Piz3/6mH3P5mvJ6K+s/wBV eHP+hDhd0v8Ad6O76fDu9bL/AC1+QXF/Ff8A0Pa7tZN+3n2W/vb21/pX9Y/4Xl8a/wDor3xQ/wDD g+LPf/qYfc/maP8AheXxr/6K98UP/Dg+LPf/AKmH3P5mvJ6KP9VuG9P+ELC6/wDTijrtt7vr+HbV /wCt3Fj/AOZ5X/8AB9Ty/vef9XV/WP8AheXxr/6K98UP/Dg+LPf/AKmH3P5mj/heXxr/AOivfFD/ AMOD4s9/+ph9z+Zryeij/Vbhv/oQ4Xa/+70du/w7b/0tT/W7izT/AIXK+rsv39Tft8W/l5Pyv6x/ wvL41/8ARXvih/4cHxZ7/wDUw+5/M0f8Ly+Nf/RXvih/4cHxZ7/9TD7n8zXk9FH+q/DX/Qiwn/gi j/8AI+v9LUXF3Fj2zuv2/jVN9NPi8/w9L+sf8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zR/wALy+Nf /RXvih/4cHxZ7/8AUw+5/M15PRR/qtw3/wBCHC/+E9Hyf8va7+7tqv8AW/iv/oeV/wDwfPul/N3d vX5X9Y/4Xl8a/wDor3xQ/wDDg+LPf/qYfc/maP8AheXxr/6K98UP/Dg+LPf/AKmH3P5mvJ6KP9Vu G9v7Cwt1uvYUfJ/y9tfmvm/9buLP+h5X/wDB9TTb+95/1pf1j/heXxr/AOivfFD/AMOD4s9/+ph9 z+Zo/wCF5fGv/or3xQ/8OD4s9/8AqYfc/ma8noo/1W4b/wChFhf/AARR8v7v9XXzP9b+K/8AoeV+ n/L+fWy/m8/60v6v/wALx+NWQf8Ahb3xPyOh/wCFg+LMj6H/AISHj8K+3/APxN+JF3+wj8bfEl98 QfGF34p0/wCJej2Oj+JJ/E2tt4j03SZNX+F4l0bTNe/5DyxTrqWqRwAr5m7WJI+Y5MD8ya/Qb4d7 f+HeXx9H8X/C19Kx9P7a+Fft9e9fnXH2S5FQwmR+wyWhRlU4w4Xo1HCjTg50qlWCq0nyx1VRX5o7 PVvU/SPDXiHPcdi+K/aZzWqKHC3EU481SclGayODUlq7OLd1Z3Ulc+UP+F5fGr/or3xP/wDDg+LP /mh9z+dL/wALy+Nf/RXvih/4cHxZ7/8AUw+5/M15PRX6KuFuG2l/wg4XW3/MPR8v7vn+K+f5v/rd xWtP7dr6aa16l/n733+j8r+sf8Ly+Nf/AEV74of+HB8We/8A1MPufzNH/C8vjX/0V74of+HB8We/ /Uw+5/M15PRR/qtw3/0IcL/4T0fL+75/ivmv9b+K/wDoeV//AAfP/wCS/qz8r+sf8Ly+Nf8A0V74 of8AhwfFnv8A9TD7n8zR/wALy+Nf/RXvih/4cHxZ7/8AUw+5/M15PRR/qtw3/wBCHC/+E9Hy/u+f 4r5n+t/Ff/Q8r/8Ag+f/AMl/Vn5X9Y/4Xl8a/wDor3xQ/wDDg+LPf/qYfc/maP8AheXxr/6K98UP /Dg+LPf/AKmH3P5mvJ6KP9VuG/8AoQ4X/wAJ6Pl/d8/xXzP9b+K/+h5X/wDB8/8A5L+rPyv6x/wv L41/9Fe+KH/hwfFnv/1MPufzNH/C8vjX/wBFe+KH/hwfFnv/ANTD7n8zXk9FH+q3Df8A0IcL/wCE 9Hy/u+f4r5n+t/Ff/Q8r/wDg+f8A8l/Vn5X9Y/4Xl8a/+ivfFD/w4Piz3/6mH3P5mj/heXxr/wCi vfFD/wAOD4s9/wDqYfc/ma8nooXC3Den/CDhen/Lij5f3fP8V82uL+K/+h5X/wDB8/L+9/VvS/q3 /C8fjT/0V34nf+HA8V//ADQ19K/FH4r/ABRsf2dP2VtVtviN4807U9Wi+Nj67q9r441Gx1TXG0Px hpcGhDW9X/txTrRih3xRsZZcwzOiLCm9ZPhSvqv4skf8MxfsigDkL8f8+/8AxcrRMfpXyOe8O5BD OOE4QyTDwVXiiVKrFUaSVSn/AKu59VUGuTbnhCezXu7tn13DXEWfyyjj6Us7rylT4XU4OVWcnGT4 gyGPMrybT5ZSV0urV9Tyv/heXxq/6K98T/8Aw4Piz/5ofc/nS/8AC8vjX/0V74of+HB8We//AFMP ufzNeT0V9d/qrw5/0IcLpq/9no7d/h9f6WvyC4v4rsv+Fyvpp/HqdLX+10urrp81f1j/AIXl8a/+ ivfFD/w4Piz3/wCph9z+Zo/4Xl8a/wDor3xQ/wDDg+LPf/qYfc/ma8noo/1W4btf+wcLbTX6vRtq k19nqrteVn01f+t3Fn/Q8r/+D6n/AMl/Vn5X9Y/4Xl8a/wDor3xQ/wDDg+LPf/qYfc/maP8AheXx r/6K98UP/Dg+LPf/AKmH3P5mvJ6KP9VeHP8AoQ4Xa/8Au9HbTX4dt9fTtqf63cWf9Dyv5/v6mm39 7z/D0v6x/wALy+Nf/RXvih/4cHxZ7/8AUw+5/M0f8Ly+Nf8A0V74of8AhwfFnv8A9TD7n8zXk9FH +q3De/8AYWFt39hR8v7v9XXzP9buLP8AoeV//B9Ty/vef9XV/WP+F5fGv/or3xQ/8OD4s9/+ph9z +Zo/4Xl8a/8Aor3xQ/8ADg+LPf8A6mH3P5mvJ6KP9VuG9P8AhBwuu3+z0ddtvd/q6+aXF/Fb2z2t pv8Av56bb+9/VvS/rH/C8vjX/wBFe+KH/hwfFnv/ANTD7n8zR/wvL41/9Fe+KH/hwfFnv/1MPufz NeT0Uf6rcN3t/YOFv2+r0b/+k+v9LV/63cWf9Dyvtf8Aj1Nu/wAW3+T8r+sf8Ly+Nf8A0V74of8A hwfFnv8A9TD7n8zR/wALy+Nf/RXvih/4cHxZ7/8AUw+5/M15PRR/qtw3/wBCHC/+E9Hy/u+v4dtV /rfxX/0PK3/g+fl/e8/w9L+sf8Ly+Nf/AEV74of+HB8We/8A1MPufzNH/C8/jWDkfF/4oAjkH/hY XizOfX/kYfc15PRWdbhbhxUarWQ4VNU6ln9Xoq0lBv8Al0a38tO2u+H4u4reIoJ53Xadakmvbzd7 zimvi13/AK0v/W5CcxRE9TGhP4qDUlRQf6iH/rlH/wCgLUtf5zS3fq/zP9XaDvRot7ulTb/8AQUj dD9D/KlpG6H6H+VI1IR/rB9R/wCiq/Iz/gqR/rfgf/3Ur/0HwDX65r/rB9R/6Kr8jP8AgqR/rvgf /wB1K/8AQfAFfo3g7/ycXIf+v2L/APVJXPxzx8/5NPxR65B/6v8AJz8maKKK/vI/zaCiiii6Wr2W r9ASu7Ld6I9I+F/w5v8A4reKrXwfoeu+H9C1+/QvpMfidtSTT9Q1JeX0YNpGg+JoAEUFmMkqDaDj JwDD8S/h9f8Awt8V3fg3Vte8P67rGjILTWI/DDak2n6dqTDK6KzavoPhiA5GGBjmdSCPm5IHqP7H OD+0p8LASADqesAk8DnRNfHXj+dan7QnhjWPGP7VHxD8M+HrS4v9a1rxolrawW7AKqJErGR2JACh ASzE4AyTxmvhsVnWNwnHjyqVf/hD/wBWP9YnTl7NQ5uZJtzcVJaaNOaS3skffYbJcFi/Dn+2FlTe ef6z/wCriacnLkcU78t7Wf8ANbsrs8v+H3wd8WfEDSvEPiWzm0jw74M8LWzJr3j7xPPJZeG7EojO 2kSGND4k1nXEUbWuPDbQ26yvFCZPOmhjk0dX+BXia08CTfEzwxrnhP4h+DtOuXtvEGueC73V93he /jKLJJrGh674e8KeJWVGdA67g6b1LqodS31npstt4u/YK8U+C/CAh1DxP8M/Gcc/i3TNKlQXr6cm vzeIf7WEZIcaIisXDAESR6G4/wCWRxV/ZY1DTvAv7On7S3ivxrbiLwt4k0j/AIR7QEupUU+JPEEm ieJFXTdHj3B2Ezavo9vBwQz+awyIpCPlcXxfn8cNmmZwnFLJeLKHDdLhP2d3WoVJ0oubkr1JVJKV SdKcXGnG0VKE1GUn9XgOA8ljX4byXGLm/tvhapxJPidSSXDtSMM6l7N62tdRjJO822muV2ivir4b /DzxB8U/GWh+BvDTWy63rFw8tu12C2maeiK3iBzraqCxIUEhVBZjwoJPOOPDFxa+KLvwl4g1Cw8I XVnquq6Pq2oa4dUFho2q6BkiPWDo3h/xR4hDN0BlmjjBxudQMj6V+BGrD4SWGkfEabxj4c8FeI9a 8R6Wmn2fii08Un+2vhromsJJ42XRv7C8BeKXRvFGutoXh1vErQszLpGvSxsCprqv24vAdnb/ABB0 n4u+EkN/4N+LWk6T4gg1W2YNpj6qiIRKh4Zo3zofidXZV3Mj4B2kn3o8X4qXGNTIF7ShlGeUakaN ZUpK3EtKEXVdOpUpujJ03PSPvx5qE+ZNWS8Ohwbg1wUuIZNTzjJayUo80bz4bnNKLcVJS5ppNvRS SzeNne9vH/i5+zV8Qvgw3hqfxtdaBJ4d8R3aWUPi3RLvVtQ8P6W7oHEeulPD8niCTa27xGZYPCs1 v50cqLM3lsR5b408HR+CdQttNfxVoHiS6u9K0/WPN8NN4raw08a1pL63oLk6voXhmHbL4bQSoBKX COolSOUPGn3Z8NfjxoA8a/FP9n/42LFqnwn8ZeOfHNnpdzekKPBmov4y1sPmTawTQ/8AhII0CSlW Hg7xkggYojLLD8nftFeGIfBvxf8AFvhKC8N/b+G18LaRZ3D/AHr3+xPBegNtYDI3KCAwyRuzjNcH CfEXE2NzmlkueympewliYShS5aHEtGVSHs5OfLLkq0ozjGpTVSzdpqPK0l2cW8O8N4XJo8S8OWk6 nLw7OMpXqcOTtefutrmjK7cZuLdrJSTUr+J0UUV+qfK3l28vkfk1raXvbS/e3X5nqnwS/wCS0fB7 /sqnw3/9S7Q6Pjb/AMlo+MP/AGVT4kf+pdrlHwS/5LR8Hv8Asqnw3/8AUu0Oj42/8lo+MP8A2VT4 kf8AqXa5Xw6b/wBf46/80X/7txPuF/yb1f8AZWL/ANZ6D/Nt+rZ5XRRRX262Xoj4cKKKKYBRRRQA UUUUAFFFFABRRRQB9S/su9f2iP8As174r/y0SvlqvqX9l3r+0R/2a98V/wCWiV8tV8ZlH/JWcbev Cn/pmB9znv8AyR3CHrxH/wCnIhXoHhT4ex+JtE1TX7vxt4Q8Iafp+rado5fxOfFQ1C61PWjragaP oejaH4obdJ/Y5KCNJOEk3FTtDef1Ys/+PuD/AK+j/Svp8xw1TF0qjwNadCcUpe1ioSlFRcZTtGrG cLyjFwTcZKPMpJNxSPkMvr4PDVaWJxsFUjKUY8juk+aSjryuMtN1Z9Fe6dj6V8cfsu+Jfh5rqeFP Evj74ZReIW8I6n4xtdJF749S+1nTtD0fW9c26Tq0vgSPR42X+x9cZ0PiTeqo5ZVJjEnzFX6Df8FG wR8YvB2SDn4Waccg5Hza74gOPwJ5969a8LG20KT9iTwj4IaQ+BvH+leLb7x/pkCyTaV421XV9EWb xdP4zV42/t2RWGrys3iNGYzIMM8sYVfyLLePs9yvhnKM7zGLz2pn0ak5QqctGnh/q8M6lVXtKdKV uaEVKnCalK0akvaKMUo/tObcBZLmHFPEnD+BccjjkkadpxfO6r4gWR2laU7Nx/tmXM4aRs1yp3Pz L0PwR4m8ReGvFniyztEHhvwTZ6dfeINTvGA0+T+2dZ/sLRdGVTyfEKKRuIG1Sy5I3CuTr9UrTUp/ D3wA/ar074a63rEVp4X+MT6R8OpfDuo6nv0zTdY8ZaBGdJ8PvorG4SNPtdxCojLlUuXVyEkct6F+ zfokscXwQ0TxHoUXg3TfEfwm8VMngjTLzWNb0Lx7o6N4da48ZeLtJYQ+GdA15/7U0VZRJL4u8T3M evPFc/8ACLwpLbvdfxSzDCYbNcTPKaS5sQqVGDqyjUVNZFTzqfPH2cpOpFyUvdjyxlNUqk6aputU dDwlwOKr5Xlcc3uo0nKc0k48/wDbsskSumkk1G+suZx5pRTbUF+Zfg34NeI/HHw88cfEbRNV8MQ6 J8N/NvPEljcXmpnxBC0abwmkBtBXw+GlAfyzH4qlQFWEjxkpu8fr9BPgrZwWfwC/basbcj7Pa23h 6ztMnkr/AGl4iBx3PJXOP/rV5B+yZo+p6z8RteGjeGtE8QTab4J8R3R1TVvEeqeHf+EMDPj/AISn RNb0Xw34u8RnxDdD9xjwqRw3yMr7WHuYLizHYWPGOOxqVVZBiKMKNNunB8tXhzB1FFzlaLanXlyq znLSC5p8qfzmM4JwEZcB4LByUc1zr/WJVJq80uXP5ZGpSV9EoR5re6rLmVldny1RX62eO3VNY/YL 8Yabrerarrut6rpujah4qvrNbPxD4k8LumisJdfzrHiclbiHWtXkaJvE0oSTXZgstyGwvaeIvEWs XEv7dMF7cWF1afD/AEjwvq3hCC50bSr7T9Dv18Pa1rp1tNHYl21rzfLJ16XO9tDhm3K9uQ/hx8Wc RKnSn/YlNxqU1KbliakZRb4hhkDjBPDrmSi1UvN0pauLipav6OfgzCOLlhHxTbllp7l00uH1nur/ ALbdnfKOTRSWt17rTf4v0V+lvx30nw34i1z9iS88bJFcReL/AAp4RtPG2tapcLHea3aFtDYR63rC mMbZJtd12SUl1LyyyPvQMNvceKxa65f/ALZ/hrxoCngT4c6H4Xk8CaXNaP8A2Z4J1PSPDcsng6bw ZpMcI/siQypFibw6sZkZVXckjKh9J+Jdb6rkuKWSRvUozr1YxrSbjGOfwyFQoqNFvETfPflfsWvc V7zsvP8A+IS044vOMJ/bUbQlkSh7sW287yF57JyTqLks4qL1lq5K/un5NUV+3Ph7VPEWrfEn9jTU hqGp3o1T4KeLL/xJctMnlahG/hbw7LLLrUYwHmfXn0eYHGTcsS4I3Z8B+BviDXdJ+Hf7czWupmCL w9ca5rehmRVNnp+rZ8cIdbgJG4KE0fRklwemirnqc+bHxSzCVGriFktFTp0sHVa+tSso4riCvkHK 28OrSgqCnBtfvXLlfs1FSl0y8JMDTxeV4T+2U1nDqJtcPRdlQyCGfbrPGkpNqN9bNN2eqf5icTTe x/Hp/T8xx3FdZ448Ea/8PdaGgeLLRbLXDpGm6zdaWjK2o2R1rRzrTf22ykq3iIMpU4J5BHbj7z/a D1CePxp+xv4zgu5bbxZr3gPwnda5rlqi/wBoX2brR96nV+mJBruuSsCPn8wtjDAV5t+3pqevy/Hn XNPutR1eXwrplnpr+G7O4utVTS7HVH8HaE+uvowiAjMrly8xTAaVnYZByfZyTjTMc7zHKML/AGTT hRz/AAfE1SqvaTnOFTIFCMeV8kYuOsk21Fzck0oOHLPyM08PsDk+B4jxLzZynkWJ4ahD3VFSWezW dS93mbunZNJvlV1zNNNdf/wUf/5Ln4V/7JR4Y/8AUt8bV+fVfoL/AMFH/wDkufhX/slHhj/1LfG1 fn1XZ4V/8kNwx/19r/8Ap6Ry+L//ACcHiX/rzQ/9NUgooor9BPzKOy9F+QUUUUDCiiigAooooAKK KKACvqz9iP8A5Og+GX/XTxn/AOq68c18p19WfsR/8nQfDL/rp4z/APVdeOa+V40/5JHir/smeI// AGw+u8Pf+Sy4a/7KLh//ANXUV+WnofKdFFFfSUf4FLW37mnr29xany+I1xFdf9Pqv/pcjsPCPgmT xeuvXD+J/DPhOx8M6UdX1jUvEjaiunL/AMTfQ9E8zRTpGheJfEY1/wD4nITIkLb3Q7du5k921n9l bXvDdt8PLrW/iX8K9Pi+Kg04+CJLm6+IJl10KNGI2E+ARFopk/tfQ1QeJZZiGkRHCMsqx/LNfoZ+ 2EAPgf8AsgYOc+AGJGc4J0X4fnB9DjHb05NfDcVYjPcHxBwngcBnk4U+IJTTjGlSkqKpcPqa1nCU pSlVT5+aVnB8sFGa9o/0ThDAZNi+HOKMZjcohKpkfDcXGTlOLnJ56tF7yWid/dipLRttaL8+5ofs d1cQT9LW8+xHOR79vb/9VdN4R8DeJ/HUmvw+H7MT23hjw7qXiTxHeE40yx03RdHGtoB6l3ZVUHuQ O9fcnge7fwf+zr8DtX+HFze6V4j8XfH/AErR/H2paCFbUb2LR9X12PRfCOuoSXXRf7A/sqIeHBtK Q7UjCl5Xk98spdI8HeOv22dG+Hd9JpWg6J4D/wCElstM0SRLDT/D/jf/AIQW5n1aTRBo8cb20rSw WkriNFeK4VVACruHg5t4lY/D1M6wGDyeMfYyrRhWnOU1JYbO8PklWVWMaa9k5SrXpQjObq0oe1co KSivocn8LsBmEMrx2Lze39sU8gqSh7toLPaWdVEk3LeKyXlqJxj7OTSXNdpfjjXr/wAJ/g34k+Ms 3ii38Kar4Zs9Q8K6EniC9tdbu9U00XOlskj+dpJ0TQPFO2EeXtPl+bIXZFWNs5H3n+zNZeJ7bSPh brHiGDUfCM/iD4weI7O71y11DWtT8WfFnUpIvEzLpXxE0ZI3kOgeGvL1op4q8S+K3lE3hkgeDnPi iLxXFF8FtM0vw/8AtN/tZ6Zo9tbafYw+CviStpb26hdPtZHv9G52DAV2b52VRgKHwAK4s58Scym+ JsvwVJUp5MoOnUjOFZS5MXTw1VJciitW+V3lNLmU4UakHA6sl8K8FUXDmLxebc2VZvxBVk4NODil RlUh15uWyTu1GLsuXnjJN/llRXtf7Omm3er/ABm8D22neEdK8ZSJqovj4c1nU1tLO7xowA1jVtVe C5E0vhckeI4olt5pJHdY4ozKyAfbPx2t3h/Z18DeKYfEviDXPFPhT45Xtjpfi/UbfWF8Q2s0GveI Itd0fSNf1u4fxCmh2+taNBbr4lNnA0sGhRhfCXhuG2SDTfqM+46lkubZVkyymM/7Yo0as5Osk4+2 9qqS5EqkkpToyTdT2cZR5vZe2nTqQj8hw5wFDiHJM2z7+1eRZNXnShHl1mozipaNxvaMuZcrk07K ShFxk/y7or96NZ1O/vf2ovHXg69Sx1Lwgv7OJ1mbQb2z0bUdMu9UfVp4S2qaNLk6yXtiyKniLCFX aGHEUhevhn403b+KP2Qf2dfFHi6efUfEFx4y8Q2Ta9OqjUF019V19zo0m0Z/sZ/7F0NpMn/U6DbH qxJ8DJfE3E5jjsuhPJaUI5rVyKjUccTKTg88w2b17xi8PTUrPKFCSco8sffTbfKvpc98J8FgMFmE o5wm8pjnsklw+lf+w55JDdZ3fX+2G4vlfMk1bSx+ftFfsott4Zf466h8JL5ET9n/AE39mz+0H8L/ ALkeChp4vH1STxWHBI/tpXVgPEPmMQEB3NcjzTyfgjUdTv8A4Q/sTS6fqWs3dxF8bf7KnvEmQam3 hnR9Y8UaC2nHaP3mgt4dQglvmbwdESQSwNZLxbxDwzxccij8UeVSryUlTqYfOq1Jzj9XahV/4ROW pSu404zjOFSq5cicfBqEnGL4sSbai0oKybqZHCfKlU1iv7a916ttOLUUrn5L0V+wvwsvL+3/AGxP 2obSLznsX8Ka7qEtq7iTTrjVdGHh+20eSPSjnLi0nnQyBiZkZkJPmc/PPxy1XVNV/ZT/AGX/AB/q l3NqHjb+3fEwXxVcADUtv9qa2SWAwAS2i6KOnKgHrXrUvESvWzHL8veTUlTzanw9J1VXk5xlxBw/ Wz1p0vY2ShOhyOTqp2lzOKacTkx3hdDD4TH4tZvd5PLPlyuKSf8AYWfZJkas1Jp88c5c1pd8rSvZ SPizxR4I8TeDbLwpd+ILRLBvFnh8eItNsrlg2qRaedWj0cavIAcoxi0mOTa2DskRxwwJ+gPiz/yb F+yJ/wBc/j//AOrM0avXf27tZ8Sz3vwnsH1LxDN4fufht4e1m9tEudSj00eJw2vbNYPkj/kYFTaq 78SbAu8V5B8WDn9mT9kb2j+Pw/8AMl6Mf61lhM9x/EGF4BzbMIQpyfF1ekoQk3aNPIuIIwveMXfk guZ7N3aST5U8fkmCyDEeIeU4GTmlwnw5LnsrNy4h4f5tm0ruV99NL9W/lWiiiv1U/HdgooooAKKK KACiiigAooooAKKKKACiiigD6r+LH/Jsf7Iv+58f/wD1ZWi18qV9V/Fn/k2L9kX/AHPj/wD+rL0W vlSvkeDf+RM9f+ao4o+X/GRZ7qfacd/8jfKtP+aV4Z+f/GOZBob3hLw9N4s8S6F4Ysr3T9On1rVt N0i1utUujp+nWI1tSxGsouWZuCFVQWJwACcV7nZfs1alqfw/8Q/FGx+KXwxufAfhbUk0vWtcLfFb dp2qSnRwsR0b/hBP+EhMmdU0TIWVlHmRsXxvKfN1foh8Of8AlHr8bOP+aiadz6Y1zwHx+OePXB9K 87jfMM6yl5TjMDnNSEa3FHDeGdOnCk2nXqKE6t6tOpdxTjyR0pp83PGpzLl6vD/AZNmmMzXCY7KF KX+rfEHEkZScknLIMkjywtFx+N30veUmrNcvvfDXjXwpc+D9aGj3OraBrsF1pGn6xaa74ZvdT1Ow vtL1nSG1vcTrOgeF49r7dy7ZC2wjeFbcow9I0jVPEWsWGi6JZXGtavqd2bPSNKtbPGpX2pgEkkno ABk5IxyeBX2P+ynDpWn+Cv2kfF1o0Q+JPhH4X6rd+CLi3KjVNH01k8QHWNW0Lfwylxoe/wASqN0n y8+WJEf6d8HXVmvjf9ibxXNqFy3xG8beD9UtPG+oq0MWo+KvDS6AJNE1Xxj5ax/2zskAkR3cOk0j MroixhfMzTjzM8mxmPyx5XDEVcppOKrzn7OdWvDh6efudSjToyjCjL2bTqQlaNScaSpaqS9zJOAM BxDhMrzl5qsijnT5vZp3UKbz/JMi5W5SvzW95Rd7wfM5XUj8q/FPhy98I+Jtf8L6n9lOreGdX1PR tWNn0Op6GMggjjp0OMfyq54E8HX3xB8WaJ4N0rUdH0nUPEepvpOjz662qLp76miltCVW0bw/4ogB OMAyzRxgn53VQWH31aN4z1j4q/tY+Jb61vhZeG7bxZZ23xX1XX9TGu/DHwtpHi7xGGh+GrmOTxLr cZk0nWLh/DSDwh4QkPhwKvjXwp5hjfsfjlpWm6f+1L+yprNtbobrxBZ+ALvVL+6s49PvdXvYtcmW PUdYWNFC65HEqqsJBaIZhGFQKOT/AIiXj5v+x/7LpxzWXClSbxNOpzxhWjkEM9TVOVNxkrTbalP2 kZR5XTcZKo/Un4V4LDyx2bLNlLKcp4ohBU2lepGWfLI91K7vZPRODTbU+ZOK/N7x94G1P4beM9c8 C61Pp9zq3hu5W1urvS1KadtYBgSrAMpweQwBXuBzXFV9E/tVw+f+0b8UIPs/2kf8JTFj6eWuPb9e nT3/AEYXwyLrwh8dfCXirTU8PrbfAHS9Si+Ful3mseIfCPg0xaN4pXQtT0rWNTEUEuty63odzL5f hnwktvb3Xh+KUeKPFlzHGtv2Znx9UyXh3g/M8ZlUa9fPaPtZ2qQp3jTlhoVZxp+/OTbxEZRVo01p CpVpucHLgy7w3jxBxPxXlmDzb+xKeRcRNwlyqanHklOKveKcWoNOzu91F2fL+L1FfrL4L8W+LbX4 H/sbTW+u3v2rU/jPpHhq7vMLPfXPhtfF2uaMujzakOToy6Bs8PknDSwm2wcgEdH41aTWLH9vrw3q Nnp7eHfCuleHdV8NaGNP0iysNM1OXRdW8QyavFp5xt1qTxNEvih/EkgzculvKNrWzCvLfinj6WNe FeT0VCNZ05NYmbaUeIYZDJ2eHgk+Wako81ub3HNW5l3x8JcHUwuW4t5zzPOFJv8A4x61n/q/nGfK 8v7bdryyhQbS0bTUXeKf470V+jvw9mm8G/BT9my9+Hlzd6Pqnjv46Q2fxDu9BCHUtcu9K1XXf7M8 J67ks66J/Y0MkX/CN/uwkEcQiVGad5vYLm18M6Jpn7f/AIW8GXaweGdB0PTbqx0SzkjOn6D4l17Q PELa6+jaNGsa6Ir+IRhkjQxiTRt6KFAcdGJ8Sa2Fx2axjkkZJVFThJ15puEOIcPw/Uc0qDjSqc1b moUnOTr01z88FKy5sB4V08fhcqxMs4tLOIxckoxag3kOc57BL95dprJ4wqXjF05vktNqz/IKiv1a +Kt9r9n8Wv2Gb2W61aLW77QfCFlrMlxdaib7Uf7c1fQI/EEeuAZjYuyMZfPy3nPIJMIAB1/xJ1C7 8R6F+3TpOtO+oaX4Qg8C3Ph3Tr9ENnoV/J4b899T0l8bgzTRRSyFOPMt8dCRWUPE6vN5L/wi0kqs KU5P6w24yqcQx4fSivYJVEotTTcqfM/d5b6vZ+E1OGJzbD/2wmoc1m8gjryZB/b3xe00u48itdc1 rNuyPyii8EeJZfBF74/a0W18K6f4g0/w7HqN4QH1G/1dta1uXSNBXPKRvpUKsw4DSoD94Cvtj4ej /jXp8dz/ANVY08f+Vj4Udfz4/Grd34j8WD9gnRJtI1rxCLt/iVfeGNROk6lqe5/DA0vxENY0gyge e3h9BGV2nKBVQqQRgwfDwZ/4J3/HlsdPi1pv66x8Kf8AP4/SuPOuIcbm+Ej9dhGCybxX4doU+Vtu UIzcdbpK/up2i7XfL9nml6/DOR4Hh6VWOClzvOvC3iTiKo2kpRk4K6sruKtpaybV5bOy/Peiiiv2 5apPufz69W33CiiigAooooAKKKKACiiigAooooAK+rPiz/ybD+yJ/u/tAf8AqytEr5Tr6s+LP/Js P7In+7+0B/6srQ6+Oz3XO+Ddd+K5a/8Ads8Q6n2/C1lk/iC7J24TTt/3cPDl/vPn/wAEeErnxlrZ 0a21fw/oJ/sjUdZvNd8UXuq6Zp9jpei6QuuZB0Xw/wCKI8IG3Nl1O1W2hmwjeyah+zZqWn/D3Qfi nffFH4ZWvgTxNqraTo+tbvioX1HVFGtHy10ZfAreIBIf7I1vG+ZB+7clsbC/zfX6J/EZQP8Agnl8 E2yMn4jajkd8DW/H2M/rXDxnjs/yvHZK8uzqcKee8TR4Zq0lTpNRp8lWc6nNUpzlzSfs4J/BFRb5 ZOTt6HA2X5NmeC4nWOymLlknDef8SQk5SjLnvkajGylFNfFK3xaNRkrM+CvFvh2bwl4l17wze3un 6jPomralo93daZdNf6ffBgGA0ZXCsjAHBVgGVsggEHGh4G8C+IfiJ4q0nwj4QsrnUNW1G7LWp5/4 l4GSda1zHXw96AZJxxzivqv4Ty2vhn9kn42+OfCF1NpHxNtPFnhjw5d63pt4lh4i0nwSNd8P/wDI I1Z0P9hL4kH9syR5Pl+ZIHKeZDE6fcfgiLSNJ/a10210mSPTdV8W/ASy8S/EvSLSOKwS98ZrPLHb 6zrIRdi699l2xqRyI/vEkk14OeeIuZ5bSzPK6eUQlUylzpxxFSUoc1bh/JMMpTqUlTfLRbxEZRkq tpycIe7GrGovoeH/AAyy3Oq2WZi83UVm8cgm6acPchnudPJ7X5l70VBuacUoLXVppfiHND5MtxBz /Tk+h9+Pp3r074S/C7XPjD4vTwT4b1XQNM1/ULLU760h1ptQjsNQXQ2UFg2laH4kgVUU728ydPlU 7dzFVP2H8Cn8Z3nh3xn4y8SrqukXUnxK8DQ3Pxfn8Qa1qHxF1INL4eXw/wDDqLRmUw+IdA8Ryato sch8TeLPCvhK0/4SeFmHipPDam59lttC0nQv+ClVjDp1na2dveaLe6vcSQsCZdX1X4ba4NTkcggb 3dIXJ4y/OAeKMX4j5kpZvgsLRVDM8l4Vz2ccTGoqsHUyOlQqS92VKMeVOs4w951JxpylOlRU6Lnp lvhbgm8uzjGZq55VmvE2RcOOk1yvkzvPZZJzXUlK3LBSclFJKXuzauz8mdY02fQtY1fQ777N5+l3 mqaLefZOM/2FgdPx/wDremfXrZsJL347S2troNr4mkm+Lj2tt4avL1NM0vWETxiWbSiXBjxEAXy6 lBjLAjIr9HPi7oy3XwB/aTj167e91Pwr8QfC9xY6K11qepaJ4A1IQ+BZU8P+Ddd1oJnQIdA1pJo5 U8KeFo1HiC8iS3QSi4X0838QpZKskwcspU5Z8sOqjdRKVP29ahh1JQtOTXPVTfMoRtFpVHK6XjZL 4eU89nxWsLmyjHIpzjD3VLndN5y7JtwveOTr4XJ3lFtJSufkRRX7d6R4t8TTfEH9jTSptRuri28V /CvWNQ8V/bZIjfa1NH4IgnSTXMqU1V1uSZm3KXSctP8AN5gNfOHxBeXXP2Wvjk+pw2s8PhL9onUN D8K2Y0xNM03wxpcHiTQ9Cg0bRtN279C8PQefcCOAHbGLiSQglwR4WF8VMficbk2CqZNRhGrKjFSj iZyt7XOsRky0lQp8zTw6suZcynKScXTal7GI8JMHhcFmuLwmcXmot2fD99Y5DTzxrmWdO3x2TS+K Nre8fmnRX60eF4bTR9c/Y78E+EDt+HPj7wN4u1fxlo9lHcal4d8Z6pq+hl/Fr+LoHMn/AAkE26VV Y+Igw8OHCupD/ZY+eS4js/2aPixp3gTVb+4sPDv7TCaF8PX0e7DahY6RH450E6HDosmAWVXmcxhh gq0pxnNdNTxUrwxcX/YUbVKyjB+3mpKn/bNbJuerFYdqFT/Z3+6jOUXeb9rem1LOPhXTeGhiv7Yu 3w8ouPJFe/8A2JTzvROpqvfs3bmTSi1aR+XFFfsrrdzfW3/BRTwxZ2ly8NrqPgJYdUsLTYYb20g8 J67c27aqT8o8q6jje3OMh0jxgjNeL/Fu/u/Fn7L3xb1TxBNDrGoeHP2mfEej+H7q5VBNo2mRzOia RpEgAfRFjRtqc4QyPkHzFxphvFGvXzDKKbySlGOc0+G51JRxLnKnLiB1ItQh7CKnGnKkv3nPBzTk 1FcjTvG+E9OhS4mn/bF/7G/t/lj/AKvxXOsgyOjnUffU/tudlbmTa5U5N+7+f2o+B/E2k+EfDXjn VLRdO0TxdquoaT4fnuz897Ho7aIus66wJwPDcjatKFOcExv6GuTr9E/2j/Eni25/Za/ZqddV12aD X/DniO88XOmpaoljqI0RdCfRTr7od7gyOzAyBWDtIQWUg1+dlfX8K57jeIMrxGLx6jTlDiTiilyx lJ2jRc6W7jF2Tg4ro0ua0XJwj8bxJkuDyHMsjwmClzRfD/DPEjk0k3LP3TlONk2k4tu8W7x2eq5j +tyHmGI+scf/AKCKkqKD/UQ/9co//QFqWv8APOW79X+Z/qXR1o0X3pU//SEFI3Q/Q/ypaRuh+h/l SNSFf9YPqP8A0VX5Gf8ABUj/AF3wP/7qV/6D4Ar9c1/1g+o/9FV+Rn/BUj/XfA//ALqV/wCg+AK/ RvB3/k4uQ/8AX7F/+qSufjnj5/yafij1yD/1f5OfkzRRRX95H+bQUUUUb62uvwf9X/ENrN6eb0+Z 0Xhzxf4r8JT3Nz4W8Sa/4avLu0Fnez+GfEGraDf6gVOVbZoSsu4EArnkEZHOK6r/AIXd8Zicn4t/ EzPr/wAJ/wCKs/n/AMJBXmdFeTi8r4fxs1VzDKMPOo+WKqTjTlJqLSUeZptqMtFFt6aJXST9TC5z nuEi6eCzOsoq8pU4uaSbSbm0tL2+00m4rXoauja/r3hzUI9W0LWNY0HW4kaODUdD1XV7G+tI3BV4 31lwUdHXKsjKQwJDAjNXPEXjLxf4rNufF3inxN4kfSiWs5/Emvarr0enk/ebZriou485J9vrXPUV 0vBZUscsfKGH9qo6SlGHtEnv77XMk+tmr38znWLzR4KOEUqzhUa5WnNwn2UFtJau1rqzfdnVa18Q PH3iXT7XT9e8ceMPEGmWRW/07Tdd1/Vr/T7ZkTajaQ6KGkKIAqs7EqowCBgDon+M/wAYGBV/i38T pltl+1EXHj/xWilf7uF8QjK89OR69K8zorknlPD84x58nw0owlJw5oUXGEqji5uN42i5yac7Wcmr u7R0LOs/jeEczqpOEbxSmuaEUlG6S1jFJJX0S2tZW3Nf8S694p1BNW8R6/q+valGBp8eo65qur3t +ijgKms66AiqBxhQAO2BWXeXl7qMvn319c6lcD/Qvtd3ef2kOn/1x+HWq9FdsMNQwfJGkqUVCPLC EOVKEVtGEY25UlsklZJWOTE18xxcW8YqnI2pSlaSjKT2lJ2s5Nu13dvVXfUoooro9pTvbnhe17c0 b272vsY+yqJX9nNLRX5JWu9le1ujsvI9U+CX/JaPg9/2VT4b/wDqXaHR8bf+S0fGH/sqnxI/9S7X KPgl/wAlo+D3/ZVPhv8A+pdodHxt/wCS0fGH/sqnxI/9S7XK+KX/ACX8f+yLf/qXE+1X/JvV/wBl Yv8A1nqZ5XRRRX260ir9kfDhRRRSU4NcylFxva6kmr3ta6dr30t3KcJxlyyhKMrX5XFqVrXvZq9r a3ta2oUUUU+aN1HmXM9o3V36LdgoTaclGTjF2lJRbSe1m0rJ30swooooUovaSdnZ2adn206g6c42 5oTV1dXi1dd1dbBRRRTuu6038ibPR20ez7+ncKKKKlSi9pRfo0/1KdOa3hNesWvzR9S/su9f2iP+ zXviv/LRK+Wq+pf2Xev7RH/Zr3xX/lolfLVfHZR/yVnGvm+FLedqMb/d17H2+e/8kdwh68R/+nIh Wromt6xoGow6xoGs3/h/VIAVttT026Ww1CyU8FW1pgVZSOCGBBHGOayqK+qlGM4yhKKnCcXCUJJO MoyVpRlF3TUk7NNNNaM+Ni2uVrRx5Wn1TWqa7NPZnZeJfiB4+8XWsFj4q8ceMPE+n212t3aWfibx Xq3iDS7HU04UEa8oyF6KMYHOMVBpPjvxx4e0q60LQPGXijSNFvTq51HQ9M8Qatp9hc+YpSQ6to7K XjLodr7Su5ThuuK5SiuVZTlywUcDHJ6KhCanGmoR5FNSUlKMbcqfO3K9r3d076vpeaZzLGyx39rz 5pLlnJyk5NWUbSbfM1y2Vm3okuh0mi+L/FegWWpaboPiXxB4fstWtjba7baFqmrafp2sWBjeIyas xBOtyGKSSMuhVzHI6Z2OwO5p/wAWvihpVjp+maZ8S/H+n2GlxiOxtbXxt4u0/TdKjCsgj0vPiLMy KjMirJuUIxUAA4rz+iliMmy3GNrG5NSk24yleEHzSjCNNOTtq4w/dpvVQfLpHRvDZtnOEf8Asmbz u9PjktOdTajr1n71rr3/AHtXqdzZ/FD4lWdtqNlY/EXxvbQa9d6nd65a2nirVc6tqWuLt1zWdVO3 OtgLhQE24AwOBxg6D4q8SeEbs3/hbxLr/hnUnshYvqOiapq2gX7aUDn5k0IMjYIyMg4xmsSiuhZT lvJUgsmpclVJVYqEOWolGMbVFy2naKcVzJ2jZbLR/wBp49yhJ5tPnpu8HzS5qblNTfI+a8bzcpOz V5Pm31PQW+LnxYaSxlf4pfEFhp0+q6pbq3jbxcRZ37KqnVXB8RYaMrrOsqUOUKqqkYUVYHxo+MEv 2wD4s/EkC+GJh/wm3i7F0ANo8of8JENgwAo244AHTp5tRXJ/q3kDeuS0G47/ALqm2tVJ7x0973nf rZvVa9Kz/O1b/hWqW0SfNLVOPJp3vBuK7xlba9+p17x/498W2kGn+KfG/jDxNa6aTqFrZeJdf1bX xZOQMuRriqCTgAsckgdeKdqvjzxx4g0m00HxB4y8UaxolkdJOnaFqfiDVtQsLU+HwqodH0ZQGkKo AqlySFAUYA45SiqjlOWQ9nCOTUYqm26UVTprkbs5OnFR91u8nJxs3zXb1MHmWZSc5/2rVbly+0le o78qjy87u7pJe7zPRWtsrd3pPxT+JmiWFlpejfEfx1o+kaICulaVpnizVtP02zU7ARopPiIlgRrG shgcg+Wn90YltPip8UNPXUUs/iV8QLeLVLrVrq/e28VaqX1bUXVUfWNVc+Is62roqqyxlQVUA8AY 8/opf2RkLcv+EWg3Jpz/AHdJtvnU05+7dtTfNd7TvLfUX9v54lD/AIV6iS0g3KVl7qg+V/4Pddvs vl2sjq/Enjvxz4vhsbbxV4y8T+JrbTWL2tl4n8Qav4gFk56sw10Dcx6EkEkdTxUPiHxX4s8YyQTe LPE3iDxTPptq1ra3Wvarq/iEWWnMcszDXwMknlmPzHua5qitqWX5bgaMnToUoOlSrqjyU4xdFVYP 2ip2S5FUaXOo2U7LmvZFPNMdjK1L67mspc9ahzpuT9o4ygoc/wDM4q6Td2tk1sfoL/wUf/5Ln4V/ 7JR4Y/8AUt8bV+fVfoL/AMFH/wDkufhX/slHhj/1LfG1fn1Xx3hX/wAkNwx/19r/APp2R9v4v/8A JweJf+vND/01SCiiiv0ByjH4pJerS/M/M4RlJJRjKTSV1FNtadUgooooum7JpvtfUbTSu00tdWnb TfXbTqFFFFT7SnZvnhaMuWT5o2jJ7RbvpJ9nr5Feyqcyh7OfM48yjyS5nHbmStdxv1St5hRRRV/8 D8dvv6dybPs+q2e63Xy69gooopOUY6yaS7tpfmCjJuyi2+yTb+4K+rP2I/8Ak6D4Zf8AXTxn/wCq 68c18p19WfsR/wDJ0Hwy/wCunjP/ANV145r5bjRp8I8VNNNPhniOzXW6g196Ta9D67w+TXGfDaaa a4i4fumtVbO4X08rq/a58p0UUV9LQ/gUf+vVP/0iJ8tiP94r/wDX6r/6XIsWl3e6dfW+qaVfXOnX +l3hvLS6tbsabqVjqZ459R68H3yDz1+sfE74leKNOutG8R/ETxvr2lXg232l634p1W905lzwDouu +IgSASTjJAz0riKKyxWAy7HVKdTHUqcqtF3o1JQi6lPVfw5NOULNXvFq1vJHVhs1xuCUsDgpuMJ2 VRKTUZxWtpq9pLraV0nrbU6nw7438a+FEv4/CPi/xN4bj1Jg90nhvXtV0FL11OVZV0RWUODyGxkH oelRaD4w8V+F7u51Dwr4k1/wxqV5Ziyv9R0TVNW8P3+o4O4bk0IMpwQCMjAIGK5uik8tyqXteajS m6yjGvzU6cnWjD4VVur1FFPRTulfS1ylmmYLkUc2nH2b5qaUp2puNneKUvdcdbuNrXO60j4mfE3Q 7C20rRfH/jrRtOtbg3A0/SvFmradY/b2I19tW/sYrvEZbkx7tpYDg4p9p8UfibaahqOrWXxH8e2+ paqNMF/qNr408WG/1YaJG0OhjVtZPiELrYMLvEwjC5jdkxtYg8FRXK8nyOUpOWSUZSqXc+anTbqJ yhJ8943mnOMJPmveUIt6xQLP87SjFZvOMYNKNpSSg7W91X912bWlnaTXU1tK8QeINH1aHX9I1nWN I1yBTdW2u6bq+sWGoOrAhlfWmBVlYHBVgQR14yK6uT4t/Fe5ingu/il8QJvPudO1W6+0+NvFy7dQ 0di+jauNviIbUkfRNEd0ACsxLMCx58+oqsVlGXY6anjsmp1JRjFQnOEJSUbxlGKk1dJS1STtfVWe pOFzTHYOLp4LNpxjJuU4RclF2teTgnrvZya23aR6d/wur4x7/M/4W78UPO3fZftP/CwPFuzd/ex/ wkW3OOM4zisXVviP8R/EOktoHiH4geMtY0NwA+hap4t1fUNPcKTgNowAZgOSASQM8Yri6KzhkuQU 2nTyOhTlBxlGUaVKLjKOkZJqKcXHmlZ6Ne9bqdj4gzyd1PNqs1K6kpSlLm53Fyuno+dwi3/M4xvf lR1f/CdeN/8AhHv+ER/4THxP/wAIh5fk/wDCN/2/q39geVu/4SDyv7J2/wDCOeXu+bZu255681Po fxA8feGdPGkeGfHHjDw9pi3D6oNO0HxXq2n2C38jK0mqro2gKWEcjIhdAdrlELAlQa42iun+ycrc OV5NQcKk1UadOm41Kj5ffacbTm9fed5O61Of+0cy5v8Aka1eeKel6l4xjy3Vr3UVbVaJK3ZW7+P4 s/Fa2vr7VLT4k+PoNQ1JdOXVr+18a+LTfXqaMjR6Mmt6w3iEoqyRu8bqoAZHZTlWYGnrfxH+IHiD SYtB1/xz4x8Q6HEF8jQtf8Wavf6fJsyFD6MAGfaD8u4tgE461xlFYLJ8jjOM1ktJVI+zUZqnTU4+ zioU+WXKpR9nB8kLW5IJxjZKxDz/ADtpp5vJp8105Np80ozldN6804xnK/xSSk9Umuj1Xxh4r1rT 9M0fWPEmv6vpekMtroWm6nqmrahp+juiCNG0jRVAbQ2SNRGpckqiqgIUAV9E/Fn/AJNi/ZE9dv7Q H/qytEx/WvlOvqz4s/8AJsX7In+7+0B/6srRK8HPMHTwWbcGwpxjCH+tk5RhCKjBSlw3xDKT5YpK 7k5SbVm5Nt6u7+n4YxeNxmUeIUsa3OX+qtO0patqPEPD6Wru+VWtGzslZK2h8p0UUV9mfDLZddAo oopXStdpX2139Ckm72TfKrysr2Xd22XmwooopKcJJuM4tLdqSaXq0xunOLSlCcW9k4tN+iaCiiil 7SFk+eFm7J8ys32Tvq/Jaj9lUu4+znzKKk1ySuotXUmrXUWtU3o0FFFFXdd/6/pr7ybPs/uCiiip c4LeUV01klre1tX309RqE5fDCT66Rb076IKKKKr9dvMnv5b+XqfVfxZ/5Ni/ZF/3Pj//AOrL0Wvl Svqv4s/8mxfsi/7nx/8A/Vl6LXypXyXBv/Inf/ZU8T/+tFnp9rx1/wAjjKf+yW4Z/wDWc4fCu+tP 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 b/xH1ff/AKrZ7H8jR/xDfv8A9HjN/wCI+r7/APVbPY/ka/p+x7D9P89v5e1GPYfp/nt/L2o/4jz4 saf8ZZ6f8IXD/l/1A+n3+lj/AIgF4S/9ExV13/4XM+12/wCpt1/VeR/MD/xDfv8A9HjN/wCI+r7/ APVbPY/kaP8AiG/f/o8Zv/EfV9/+q2ex/I1/T9j2H6f57fy9qMew/T/Pb+XtR/xHnxY/6Kzt/wAy Lh/y/wCoH0+/0sf8QC8Jf+iXq9P+Z5n2u3/U2+71XkfzA/8AEN+//R4zf+I+r7/9Vs9j+Ro/4hv3 /wCjxm/8R9X3/wCq2ex/I1/T9j2H6f57fy9qMew/T/Pb+XtR/wAR58WP+is/8wXD/l/1A+n3+lj/ AIgF4S/9ExV6f8zzPv7v/U28vxXZH8wP/EN+/wD0eM3/AIj6vv8A9Vs9j+Ro/wCIb9/+jxm/8R9X 3/6rZ7H8jX9P2PYfp/nt/L2ox7D9P89v5e1H/EePFj/orF0/5kXD/l/1A+n3+lj/AIgF4S/9ExV6 f8zzPv7v/U28vxXZH8wP/EN+/wD0eM3/AIj6vv8A9Vs9j+Ro/wCIb9/+jxj/AOI+r/8APrPoe3Y1 /T9j2H6f57fy9qAvOMD9P8fb+XtS/wCI8eLH/RWL1/sLIPLtgfTbvp0sf8QC8Jv+iXq9N87z1r7P T+1tVpt5rsj+X1v+DcG4U4/4bET8fgGq/ofjR/nNfuZ+xj+zYf2S/wBm/wCH/wAAf+ExXx6PAa+K F/4StdBk8ODWZfFnjLX/ABrI50WbxD4pMDR3HiCSEhfEdyJFhSZmTd5Uf1usYZSrEMB065H8vfjs ehoSNV4Vsjrgj39D9eTnPoK+Y4k8SeN+M8LSy3ifO6ud5ZQqKtRhUjh4qnV9nOlzfuqUHd06tSNu dq0mu6Po+F/DPgng3GTzPhzJ6eT5hVg6c5RlOXNBuDcZKpKSkm4pq+7V7XStOOAB6UUUV8ZsfoIU UUUAFGB6f5HSiiiy7B+u4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFAH/9k= --_e1a6f33e-a11c-48e8-9d25-802e35c2207a_-- From avtxynzel@doir.com Sat Jul 11 16:51:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3745329DF5 for ; Sat, 11 Jul 2015 16:51:33 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1367C304039 for ; Sat, 11 Jul 2015 14:51:30 -0700 (PDT) X-ASG-Debug-ID: 1436651483-04cb6c209e144f80001-NocioJ Received: from doir.com (125.234.87.117.broad.xz.js.dynamic.163data.com.cn [117.87.234.125]) by cuda.sgi.com with ESMTP id dLrtceOGdZbyo2Rq for ; Sat, 11 Jul 2015 14:51:24 -0700 (PDT) X-Barracuda-Envelope-From: avtxynzel@doir.com X-Barracuda-Apparent-Source-IP: 117.87.234.125 Received: from XP5-113 ([127.0.0.1]) by localhost via TCP with ESMTPA; Sun, 12 Jul 2015 05:54:25 +0800 MIME-Version: 1.0 From: avtxynzel Sender: avtxynzel To: xfs@oss.sgi.com Reply-To: avtxynzel Date: 12 Jul 2015 05:54:25 +0800 Subject: =?utf-8?B?VE86eGZzdi3looPlpJblhazlj7jliJvnq4sg5LiK5rW3?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?VE86eGZzdi3looPlpJblhazlj7jliJvnq4sg5LiK5rW3?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: 125.234.87.117.broad.xz.js.dynamic.163data.com.cn[117.87.234.125] X-Barracuda-Start-Time: 1436651483 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0113c, BSF_SC5_MJ1963, HTML_MESSAGE, HTML_OBFUSCATE_70_80, MIME_HTML_ONLY, MISSING_MID, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20659 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_OBFUSCATE_70_80 BODY: Message is 70% to 80% HTML obfuscation 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150711215129.EDDEC12961A8@cuda.sgi.com> PGh0bWw+PGJvZHk+PFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0i MTAwJSIgYm9yZGVyPTA+DQo8VEJPRFk+DQo8VFI+DQo8VEQgc3R5bGU9IlBBRERJTkctVE9Q OiAyMHB4IiBiZ0NvbG9yPSNlZWVlZWU+DQo8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFk ZGluZz0wIHdpZHRoPTcwMCBhbGlnbj1jZW50ZXIgYm9yZGVyPTA+DQo8VEJPRFk+DQo8VFI+ DQo8VEQgc3R5bGU9IlBBRERJTkctQk9UVE9NOiAxMHB4Ij4NCjxQIGFsaWduPWNlbnRlcj4u PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxF OiBub3JtYWwiPuavj+aXpeeUmOiCg+e9kS3nlJjogoPml6XmiqXlhbDlt57orq8o6YCa6K6v 5ZGYIOm+muato+WImik35pyIOOaXpe+8jDIwMTXlubTkuK3lm73mvJTlh7rooYzkuJrljY/k vJrliafpmaLkuJPkuJrlp5TlkZjkvJrlt6XkvZzkvJrlnKjlhbDlt57lj6zlvIDjgILmnaXo h6rmlofljJbpg6jjgIHkuK3lm73mvJTlh7rooYzkuJrljY/kvJrnmoTku6PooajlkozljJfk uqzjgIHkuIrmtbfjgIHlub/kuJzjgIHmtZnmsZ/jgIHlm5vlt53jgIHlsbHkuJzjgIHmlrDn lobjgIHnlJjogoPnrYnlnLAuLi48L1NQQU4+LiANCjxQIGFsaWduPWNlbnRlcj7jgIA8L1A+ PC9URD48L1RSPg0KPFRSPg0KPFREIHN0eWxlPSJCT1JERVItVE9QOiAjMDAzZjdkIDJweCBz b2xpZCIgdkFsaWduPXRvcCBiZ0NvbG9yPSNmZmZmZmY+DQo8VEFCTEUgY2VsbFNwYWNpbmc9 MCBjZWxsUGFkZGluZz0wIHdpZHRoPSIxMDAlIiBib3JkZXI9MD4NCjxUQk9EWT4NCjxUUj4N CjxURCBzdHlsZT0iUEFERElORy1MRUZUOiAyMHB4Ij4NCjxUQUJMRSBjZWxsU3BhY2luZz0w IGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJvcmRlcj0wPg0KPFRCT0RZPg0KPFRSPg0K PFREIHN0eWxlPSJGT05ULVNJWkU6IDE0cHg7IENPTE9SOiAjMzMzOyBMSU5FLUhFSUdIVDog MiI+PFNQQU4gc3R5bGU9IkZPTlQtU0laRTogMTFwdCI+5bCKPFNQQU4gc3R5bGU9IkRJU1BM QVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuicoTwvU1BB Tj7mlaznmoQ8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZP TlQtU1RZTEU6IG5vcm1hbCI+5qCI5Z+O57+FPC9TUEFOPuWuojxTUEFOIHN0eWxlPSJESVNQ TEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7oo7joooTp nIfmi5bonKHotJ3lvojliIE8L1NQQU4+5oi377yaPC9TUEFOPiANCjxQPuaCqOWlve+8gTxC Uj7npZ08U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQt U1RZTEU6IG5vcm1hbCI+6a2P56S+6ZSB6K+vPC9TUEFOPuaCqDxTUEFOIHN0eWxlPSJESVNQ TEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7mrabov4fn jrLomavlhpI8L1NQQU4+5LiaPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0la RTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWVhjwvU1BBTj7liqE8U1BBTiBzdHlsZT0i RElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5LuY 57uq56eBPC9TUEFOPuabtDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6 IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7pobbplKHloIbpmK7lj7nmjaI8L1NQQU4+5LiK 5LiA5bGCPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05U LVNUWUxFOiBub3JtYWwiPuWKqOaIkeedgei+n+WegumdoeadhjwvU1BBTj7mpbzjgII8QlI+ 5oiRPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNU WUxFOiBub3JtYWwiPuivieaXrOWnhua1uDwvU1BBTj7lj7g8U1BBTiBzdHlsZT0iRElTUExB WTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5pyd5p6X5bu6 5ZqO5rKz6L+YPC9TUEFOPuWNgTxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJ WkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7ogqnooYDnrZY8L1NQQU4+5aSaPFNQQU4g c3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3Jt YWwiPuagh+WlvTwvU1BBTj7lubQ8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1T SVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5o+P5ouW56eJPC9TUEFOPuS4kzxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7nga3lk6rlh6DnmoTku4vnoYA8L1NQQU4+5Li65LitPFNQQU4gc3R5bGU9IkRJU1BM QVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuerueivhumY tuaVhTwvU1BBTj7lsI/kvIE8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpF OiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5ZCRPC9TUEFOPuS4muaPkDxTUEFOIHN0eWxl PSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7l oIbmt5HnuqfmipPpu4Q8L1NQQU4+5L6bPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPui/mea6quiCqeaNt+iNo+aOquiJ s+mqqOi0oTwvU1BBTj7pppk8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpF OiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5Lqb6YOd5q+U5Lqp5rig5Y6M5qCHPC9TUEFO Pua4r+WFrOWPuOazqDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBw eDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lupk8L1NQQU4+5YaMPFNQQU4gc3R5bGU9IkRJU1BM QVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWFiOWHpOi6 uuW9pue6v+mSouW4reerpTwvU1BBTj7mnI08U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsg Rk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6YCg56CN57qm5LyX5pmk5YW8 5q61PC9TUEFOPuWKoeOAguWcqDIwPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQt U0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPue7p+S4nTwvU1BBTj4xNOW5tDxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7mnqvlpojlubjluIzpkqY8L1NQQU4+5ZyoPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5v bmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPui0vueFp+a7keaNoemZ jeWNq+ivt+iZqzwvU1BBTj7pppk8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1T SVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5Y2i5byD5pmD5oyJ5ZanPC9TUEFOPua4 rzxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlM RTogbm9ybWFsIj7opoHlt508L1NQQU4+5oiQPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7 IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuS6leasoOS4p+WUr+aUvuWd mjwvU1BBTj7nq4s8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7 IEZPTlQtU1RZTEU6IG5vcm1hbCI+6YG/54Gr5bm76Iub57KY56WBPC9TUEFOPueahDxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7ov47kuqg8L1NQQU4+5YWsPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQt U0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuaMh+aKpeeMquWtl+WCqOmZoui2o+aB rTwvU1BBTj7lj7g8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7 IEZPTlQtU1RZTEU6IG5vcm1hbCI+5bqP5om+5bCaPC9TUEFOPuaciTE2NzxTUEFOIHN0eWxl PSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7m g63nv6DmmYvlt43ls608L1NQQU4+Mjc56Ze077yM5ZyoMjA8U1BBTiBzdHlsZT0iRElTUExB WTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6K6+6bit6a2E 6IC/6Iuv6Zyc5bqa5a2QPC9TUEFOPjEz5bm0PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7 IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPue6suWljuS4peeJnzwvU1BB Tj7lnKg8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQt U1RZTEU6IG5vcm1hbCI+5rao57q/PC9TUEFOPummmea4r+aIkDxTUEFOIHN0eWxlPSJESVNQ TEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7okI3nlYzn oJrphbjmm7Doo6TplIjpmrbnoLQ8L1NQQU4+56uLPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5v bmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuaah+mrmOeBteW5uOmt hTwvU1BBTj7nmoTlhaw8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAw cHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5r2mPC9TUEFOPuWPuOaciTE3NDxTUEFOIHN0eWxl PSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7m rrXkuqnlr4Toi6bngq7mmofnrLrmtYvliqE8L1NQQU4+MDMw6Ze077yM5Zyo57uPPFNQQU4g c3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3Jt YWwiPuixgeajoOaVo+aYr+aMm+eXiuiCr+avq+S6vzwvU1BBTj7mtY48U1BBTiBzdHlsZT0i RElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5pen 5Yq/6K6+PC9TUEFOPueOrzxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6 IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lmInlvrfmorPmm5nnp7DkuJE8L1NQQU4+5aKD PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxF OiBub3JtYWwiPuiEmuavlOWutuihpTwvU1BBTj7otoo8U1BBTiBzdHlsZT0iRElTUExBWTog bm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5b+X5bm76LSi5YWL 5pu+5Yyq56WtPC9TUEFOPuS4jeWlvTxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05U LVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7nqIvov4XlgoDmnKrnhYzlpLnlj5Tn hp88L1NQQU4+55qE5oOFPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTog MHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPue/n+mXveemu+ibpOWcqOa2iOaItOWkuuaIjzwv U1BBTj7lhrU8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZP TlQtU1RZTEU6IG5vcm1hbCI+5Yab5b2q5Lul55+tPC9TUEFOPuS4i++8jOiAgTxTUEFOIHN0 eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFs Ij7mnb7kuZ3ljIbokKU8L1NQQU4+5p2/PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuaJvuaer+S/neWwlDwvU1BBTj7k u6w8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZ TEU6IG5vcm1hbCI+54ug5L2D56qB5a+55rqq54aKPC9TUEFOPuabtDxTUEFOIHN0eWxlPSJE SVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7ovr7o kI3lm7Tlhb3liKvpgIE8L1NQQU4+54OtPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPumtheW3qOihqOevoeWwlOWvqOmF ozwvU1BBTj7oobc8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7 IEZPTlQtU1RZTEU6IG5vcm1hbCI+5ZWK5pav55CG6IWLPC9TUEFOPueglDxTUEFOIHN0eWxl PSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7l j7jlpKvnlITmn5PmnZ88L1NQQU4+56m2PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuabsOW3ouixuuaZmumYjua0pemZ hDwvU1BBTj7lubbms6g8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAw cHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5pav6Z2e5LiL55WF5pCC5bC9PC9TUEFOPuWGjDxT UEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTog bm9ybWFsIj7otLrooZk8L1NQQU4+56a7PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWQrOaMrzwvU1BBTj7lsrg8U1BB TiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5v cm1hbCI+5ZOO5Lik5pen5Yeh5beh6JuH5Yaw6J2OPC9TUEFOPuWFrDxTUEFOIHN0eWxlPSJE SVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lvIA8 L1NQQU4+5Y+444CC5ZyoPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTog MHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWUkOeQs+iuoui3i+W+gOakjemZjemZpDwvU1BB Tj7pppk8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQt U1RZTEU6IG5vcm1hbCI+5qGT6L+O6ZKh5Y+y54mH5oKs5Ymn5ruBPC9TUEFOPua4rzxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7no4HliqrloZ7lpLrmpbzlkJHllabnkZ/mlp88L1NQQU4+5oiQPFNQQU4gc3R5bGU9 IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWT jeasoeWLpOWxguiuuDwvU1BBTj7nq4s8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9O VC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+57qn5oCOPC9TUEFOPuWFrDxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7nuq/msarluo/mtrjmraY8L1NQQU4+5Y+4PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5v bmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuatp+S5puWIneiQhOWd l+ecieWGmeWcozwvU1BBTj7mmK/lvog8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9O VC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5r2m5Lu96am754yq5ouo54eV5Lin 5rCR5bKzPC9TUEFOPueugDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6 IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7ln47np6/mma7mupDnm4bojaHmg608L1NQQU4+ 5Y2V55qE5LqLPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBG T05ULVNUWUxFOiBub3JtYWwiPua9ruijguaImuS7veaZkzwvU1BBTj7mg4XvvIzkuKQ8U1BB TiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5v cm1hbCI+5pa5PC9TUEFOPuS4quaYnzxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05U LVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lrqTmi7/lnZrpgJvntKfnm4Lmi5bm jbfljYM8L1NQQU4+5pyf5aSaPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0la RTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPueWvuWGtzwvU1BBTj7kvr/lj688U1BBTiBz dHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1h bCI+5ruB5bm/6I2h5p2GPC9TUEFOPuS7peazqDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25l OyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lgLw8L1NQQU4+5YaMPFNQ QU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBu b3JtYWwiPuaCn+azlemYn+WIl+aVsDwvU1BBTj7lrow8U1BBTiBzdHlsZT0iRElTUExBWTog bm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6LS65Lqy5YWJ5pyb 5pWj5a6J5pS55pysPC9TUEFOPuaIkO+8jOazqDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25l OyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lr7roooTnoLjpnZvmmZU8 L1NQQU4+5YaMPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBG T05ULVNUWUxFOiBub3JtYWwiPuWNsOagi+asoOWGhemihOacsTwvU1BBTj7otYQ8U1BBTiBz dHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1h bCI+5pyN5rab5pen6YCQPC9TUEFOPuacrDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBG T05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7ml6LkuYvlsYjnlLfohYo8L1NQ QU4+5LiNPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05U LVNUWUxFOiBub3JtYWwiPuWGsDwvU1BBTj7pnIA8U1BBTiBzdHlsZT0iRElTUExBWTogbm9u ZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5bCU5p+xPC9TUEFOPuim gemqjDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1T VFlMRTogbm9ybWFsIj7msrPpm4Tlh6DlpY7ojaHljYHljKDmpI3msrg8L1NQQU4+6LWE77yM 5LiNPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNU WUxFOiBub3JtYWwiPuaVpuiFiuiSuOW9kueekjwvU1BBTj7pnIA8U1BBTiBzdHlsZT0iRElT UExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6Km56IiN 5py66Zuo6I2J57Kl6I6rPC9TUEFOPuimgTxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBG T05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7kvanmorDmr5bojIPnnYHliKvo o7jku448L1NQQU4+5YiwPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTog MHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuiQp+e8uueyvuaViOeZu+aOpeW0lDwvU1BBTj7k vY3vvIzpmIE8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZP TlQtU1RZTEU6IG5vcm1hbCI+6I6r5a6+5YWL5LmM55O25oaL5omNPC9TUEFOPuS4izxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7ot4vlt7TlsrjkvZM8L1NQQU4+5Lmf5LiNPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5v bmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPueugOmUmTwvU1BBTj7p nIA8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZ TEU6IG5vcm1hbCI+5LyP54Wn6ZWt5biD5oqK5aS35oyH6Z2gPC9TUEFOPuimgeWIsDxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7ljYflvbHlsZXns7vnjoflrrTmoYM8L1NQQU4+6aaZPFNQQU4gc3R5bGU9IkRJU1BM QVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPumtj+mbheS+ rzwvU1BBTj7muK/jgILlnKg8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpF OiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6Z2h6Ze55py65q2n5L+h5rCn56CCPC9TUEFO Pui/meS6mzxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9O VC1TVFlMRTogbm9ybWFsIj7mvZg8L1NQQU4+5bm077yM5oiRPFNQQU4gc3R5bGU9IkRJU1BM QVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuaAgeeOsOi3 neeBr+iAv+W9qjwvU1BBTj7ku6w8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1T SVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5a2k6L2vPC9TUEFOPuS4gDxTUEFOIHN0 eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFs Ij7otYTpk4HnmpE8L1NQQU4+55u0PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQt U0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPue+juiDoeetlOiiq+eJmTwvU1BBTj7l nKg8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZ TEU6IG5vcm1hbCI+5paw5bqKPC9TUEFOPuWfizxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25l OyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7pkojogqDml4vlr4TmnKrm nYbnq6Xnv4U8L1NQQU4+5aS0PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0la RTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuiPseeshui/ueaKiuS7geW5gjwvU1BBTj7o i6Y8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZ TEU6IG5vcm1hbCI+57qx56eY6L+Y5LiB5bey5om/5b2sPC9TUEFOPuW5su+8jOeyvjxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7nnIHotaPmi5Plt67pmaQ8L1NQQU4+5b+DPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5v bmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPui3temVv+S4juW+l+i3 r+aCrOW8uei/heeOrzwvU1BBTj7kv648U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9O VC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5rKZ5L+v6KO455Oj6ZWc6Iis5pqX 6ZqQ5pyNPC9TUEFOPueCvO+8jOWKmzxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05U LVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lro/njqvnu4Xlm7DlvJPlhonnjq/l h6A8L1NQQU4+5LqJPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4 OyBGT05ULVNUWUxFOiBub3JtYWwiPumCk+eCmeWFtDwvU1BBTj7kuLo8U1BBTiBzdHlsZT0i RElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+57y6 6JWK5oao5rekPC9TUEFOPuaCqDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJ WkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7phaPmnLXlkJXmt7c8L1NQQU4+5o+QPFNQ QU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBu b3JtYWwiPuWNg+iKrOS4g+eUq+iMg+mSiTwvU1BBTj7kvps8U1BBTiBzdHlsZT0iRElTUExB WTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5aaIPC9TUEFO PuabtDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1T VFlMRTogbm9ybWFsIj7nlY/pgqLlhbPoh7Tlvpfmr5blkJfnpZ48L1NQQU4+5LiTPFNQQU4g c3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3Jt YWwiPuWujOaBqeWumjwvU1BBTj7kuJrnmoTnprs8U1BBTiBzdHlsZT0iRElTUExBWTogbm9u ZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+55+z546J57q/57+U54q2 6J6654SmPC9TUEFOPuWyuDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6 IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7mo4DluoTmkILovpvliKvoiI3lo7Donrroo6Q8 L1NQQU4+5rOoPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBG T05ULVNUWUxFOiBub3JtYWwiPue6suW5s+aIkeemhOaLhemqpOmVh+WCqOadjjwvU1BBTj7l hozmnI08U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQt U1RZTEU6IG5vcm1hbCI+5Lqt6JW+5Yid57u/54G16I6r5pSAPC9TUEFOPuWKoeOAguS4gDxT UEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTog bm9ybWFsIj7mmL48L1NQQU4+55u0PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQt U0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuiEmuS/ruiuuOaPieeUs+S6i+WIkuad oTwvU1BBTj7mnJ88U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7 IEZPTlQtU1RZTEU6IG5vcm1hbCI+6ZSZ5ama5YKF5qO15Ye75oiWPC9TUEFOPuW+hTxTUEFO IHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9y bWFsIj7mr5vmrbvmips8L1NQQU4+552APFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPueypemUpui2iuiKneS7meWumeen i+aDrjwvU1BBTj7mgqjnmoQ8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpF OiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6K+46amvPC9TUEFOPuiBlDxTUEFOIHN0eWxl PSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7l jovorqTnu4/lt6c8L1NQQU4+57O744CCPC9QPjwvVEQ+DQo8VEQgdkFsaWduPWJvdHRvbT7j gIA8L1REPjwvVFI+PC9UQk9EWT48L1RBQkxFPjwvVEQ+PC9UUj4NCjxUUj4NCjxURCBzdHls ZT0iUEFERElORy1SSUdIVDogMjBweDsgUEFERElORy1MRUZUOiAyMHB4OyBQQURESU5HLUJP VFRPTTogMHB4OyBQQURESU5HLVRPUDogMHB4IiBhbGlnbj1yaWdodD7jgIA8L1REPjwvVFI+ DQo8VFI+DQo8VEQgc3R5bGU9IlBBRERJTkctUklHSFQ6IDIwcHg7IFBBRERJTkctTEVGVDog MjBweDsgRk9OVC1TSVpFOiAxNHB4OyBQQURESU5HLUJPVFRPTTogMHB4OyBDT0xPUjogIzMz MzsgTElORS1IRUlHSFQ6IDEuODsgUEFERElORy1UT1A6IDBweCI+5biMPFNQQU4gc3R5bGU9 IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWK m+egtOiDnuiwt+W9rTwvU1BBTj7mnJvvvIE8QlI+5pysPFNQQU4gc3R5bGU9IkRJU1BMQVk6 IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWNnDwvU1BBTj7p gq48U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZ TEU6IG5vcm1hbCI+6Iqs5riF5pyv5bGFPC9TUEFOPuS7tuaYrzxTUEFOIHN0eWxlPSJESVNQ TEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lqZrnpZbl sL7ngq7npoTmsYfoo6TlrZTnv6A8L1NQQU4+5oiR5LusPFNQQU4gc3R5bGU9IkRJU1BMQVk6 IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuaNjzwvU1BBTj7l kIg8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZ TEU6IG5vcm1hbCI+5oyH5aWgPC9TUEFOPuS9nOeahOW8gOWniy48L1REPjwvVFI+DQo8VFI+ DQo8VEQ+44CAPC9URD48L1RSPg0KPFRSPg0KPFREIHN0eWxlPSJCT1JERVItVE9QOiAjZWVl ZWVlIDVweCBzb2xpZCI+DQo8VEFCTEUgYm9yZGVyQ29sb3I9I2ZmZmZjYyBjZWxsU3BhY2lu Zz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJnQ29sb3I9I2ZmZmZjYyBib3JkZXI9 MT4NCjxUQk9EWT4NCjxUUj4NCjxURCBzdHlsZT0iQk9SREVSLVJJR0hUOiAjZDZkNmQ2IDFw eCBkYXNoZWQ7IFBBRERJTkctUklHSFQ6IDEwcHg7IFBBRERJTkctTEVGVDogMjBweDsgUEFE RElORy1CT1RUT006IDEwcHg7IFBBRERJTkctVE9QOiAzMHB4IiB3aWR0aD0iNTAlIj4NCjxU QUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJvcmRlcj0w Pg0KPFRCT0RZPg0KPFRSPg0KPFREIHN0eWxlPSJGT05ULVNJWkU6IDE0cHg7IFBBRERJTkct Qk9UVE9NOiAxMHB4OyBDT0xPUjogIzMzMzsgTElORS1IRUlHSFQ6IDEuNSIgYWxpZ249bWlk ZGxlIGhlaWdodD0zMT48Rk9OVCBzaXplPTI+PFNQQU4gc3R5bGU9IkZPTlQtRkFNSUxZOiBh cmlhbCI+5oiRPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBG T05ULVNUWUxFOiBub3JtYWwiPui1jOS5puaMgemZm+S5n+aymzwvU1BBTj7nmoTnlLU8U1BB TiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5v cm1hbCI+6Jm55aeaPC9TUEFOPuivne+8mjAyMS01PFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5v bmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPueBvuWEkuees+S/hOeV jzwvU1BBTj4xMDg8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7 IEZPTlQtU1RZTEU6IG5vcm1hbCI+5b2S6KGA6Zeq5bit5Y2K54yu5Ye6PC9TUEFOPjg0PFNQ QU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBu b3JtYWwiPum+hOiVvumSpuaenTwvU1BBTj4zOCzlsI88U1BBTiBzdHlsZT0iRElTUExBWTog bm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+6LS16ZKJ6IyC5reh PC9TUEFOPuS9lTxCUj48L1NQQU4+5Y+vPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZP TlQtU0laRTogMHB4OyBGT05ULVNUWUxFOiBub3JtYWwiPuWNs+e6ouS7veekvOaJjuS5hemB peaEiDwvU1BBTj7liqDmiJE8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpF OiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5YKF6Zu25rGg55O25LuV6aOf6LG65qCL5Y23 PC9TUEFOPuW+rjxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBweDsg Rk9OVC1TVFlMRTogbm9ybWFsIj7lqrPmgKfnsbPpmZvlu7bnlr7kuYM8L1NQQU4+5L+h5oiW UVHvvJo3NzEwPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBG T05ULVNUWUxFOiBub3JtYWwiPueul+mAgOahhemBk+enjeiuuue6suaKmDwvU1BBTj43NDk4 MSzku6U8U1BBTiBzdHlsZT0iRElTUExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQt U1RZTEU6IG5vcm1hbCI+6LKMPC9TUEFOPuiOtzxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25l OyBGT05ULVNJWkU6IDBweDsgRk9OVC1TVFlMRTogbm9ybWFsIj7pmIDkuInompU8L1NQQU4+ 5Y+WPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05ULVNU WUxFOiBub3JtYWwiPumZhua2sumyjeS6p+WluDwvU1BBTj7mm7Q8U1BBTiBzdHlsZT0iRElT UExBWTogbm9uZTsgRk9OVC1TSVpFOiAwcHg7IEZPTlQtU1RZTEU6IG5vcm1hbCI+5L2c5pen PC9TUEFOPuWkmueahDxTUEFOIHN0eWxlPSJESVNQTEFZOiBub25lOyBGT05ULVNJWkU6IDBw eDsgRk9OVC1TVFlMRTogbm9ybWFsIj7lsYDmnq/or57osKjnurHotaTmiqTph4nluoo8L1NQ QU4+6LWEPFNQQU4gc3R5bGU9IkRJU1BMQVk6IG5vbmU7IEZPTlQtU0laRTogMHB4OyBGT05U LVNUWUxFOiBub3JtYWwiPuaVheWPr+aegeefmzwvU1BBTj7mlpnjgII8L0ZPTlQ+PC9URD48 L1RSPjwvVEJPRFk+PC9UQUJMRT48L1REPjwvVFI+PC9UQk9EWT48L1RBQkxFPjwvVEQ+PC9U Uj48L1RCT0RZPjwvVEFCTEU+PC9URD48L1RSPg0KPFRSPg0KPFREIHN0eWxlPSJQQURESU5H LVJJR0hUOiAwcHg7IFBBRERJTkctTEVGVDogMHB4OyBGT05ULVNJWkU6IDEycHg7IFBBRERJ TkctQk9UVE9NOiAxNXB4OyBDT0xPUjogIzY2NjsgTElORS1IRUlHSFQ6IDEuNTsgUEFERElO Ry1UT1A6IDE1cHg7IFRFWFQtQUxJR046IGNlbnRlciIgaGVpZ2h0PTQ4PuOAgDwvVEQ+PC9U Uj48L1RCT0RZPjwvVEFCTEU+DQo8UD7jgIA8L1A+PC9URD48L1RSPjwvVEJPRFk+PC9UQUJM RT48L2JvZHk+PC9odG1sPg== From david@fromorbit.com Sun Jul 12 19:13:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E17027F50 for ; Sun, 12 Jul 2015 19:13:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6D673AC001 for ; Sun, 12 Jul 2015 17:13:08 -0700 (PDT) X-ASG-Debug-ID: 1436746384-04cbb00fc84e0f0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id PSlSOjKMyfCKX3QI for ; Sun, 12 Jul 2015 17:13:05 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CTDQBDAaNVPLC2LXlbgxSBPYZQoiEGmi4CAgEBAoElTQEBAQEBAQcBAQEBQT9BBYNeAQEEOhwjEAgDDgYECSUPBSUDBxoTiC3HXQEBAQEGAiAZhgWFLoUGB4QrAQSUMYwDmGyBCYEpHIFlLDGCSwEBAQ Received: from ppp121-45-182-176.lns20.syd7.internode.on.net (HELO dastard) ([121.45.182.176]) by ipmail06.adl2.internode.on.net with ESMTP; 13 Jul 2015 09:43:04 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZERMl-0003ob-5p; Mon, 13 Jul 2015 10:13:03 +1000 Date: Mon, 13 Jul 2015 10:13:03 +1000 From: Dave Chinner To: Hogan Whittall Cc: "xfs@oss.sgi.com" Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Message-ID: <20150713001303.GH7943@dastard> X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> <20150709230222.GD7943@dastard> <1741803883.2585541.1436543988567.JavaMail.yahoo@mail.yahoo.com> <20150710224231.GL3902@dastard> <1598282205.117137.1436570104177.JavaMail.yahoo@mail.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1598282205.117137.1436570104177.JavaMail.yahoo@mail.yahoo.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1436746385 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 10, 2015 at 11:15:04PM +0000, Hogan Whittall wrote: > As for the noalign option, that would be great to have but it does > not exist in version 3.1.1 which RHEL6 uses. It sounds like not $ gl -n 1 63a6384 commit 63a63844f8a02f34cbb724086a1f0bac492f25b3 Author: Nathan Scott Date: Wed Mar 23 02:56:17 2005 +0000 Add noalign suboptions to -d and -r to allow auto-stripe-alignment to be switched off. Merge of master-melb:xfs-cmds:21924a by kenmcd. $ The noalign option has been in mkfs since 2005, so it's most certainly supported on RHEL6. Looking at the man page history, I forgot that it wasn't documented until 2013 and hence is missing from the RHEL6 man page, so I can understand why you might be saying this. -Dave. -- Dave Chinner david@fromorbit.com From pwxrhj@rgpa.com Sun Jul 12 21:17:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 56A5C29DF5 for ; Sun, 12 Jul 2015 21:17:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 35579304039 for ; Sun, 12 Jul 2015 19:17:41 -0700 (PDT) X-ASG-Debug-ID: 1436753824-04cb6c209e163e30001-NocioJ Received: from dwdc.com (108.156.73.124.broad.dynamic.hf.ah.cndata.com [124.73.156.108]) by cuda.sgi.com with ESMTP id eiDSbl3p7RCheaTT for ; Sun, 12 Jul 2015 19:17:05 -0700 (PDT) X-Barracuda-Envelope-From: pwxrhj@rgpa.com X-Barracuda-Apparent-Source-IP: 124.73.156.108 Received: from SKY-20150201SFT ([127.0.0.1]) by localhost via TCP with ESMTPA; Mon, 13 Jul 2015 10:15:35 +0800 MIME-Version: 1.0 From: "Lily Guo" Sender: "Lily Guo" To: xfs@oss.sgi.com Reply-To: "Lily Guo" Date: 13 Jul 2015 10:15:35 +0800 Subject: =?utf-8?B?UmU6IFBpcGUgRml0dGluZ3MgbWFudWZhY3R1cmVyIGVucXVpcnk=?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?UmU6IFBpcGUgRml0dGluZ3MgbWFudWZhY3R1cmVyIGVucXVpcnk=?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: 108.156.73.124.broad.dynamic.hf.ah.cndata.com[124.73.156.108] X-Barracuda-Start-Time: 1436753824 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20688 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150713021741.E650412961A5@cuda.sgi.com> PGh0bWw+PGJvZHk+PFA+RGVhciBwdXJjaGFzaW5nIG1hbmFnZXIsPC9QPg0KPFA+SGF2ZSBh IG5pY2UgZGF5ITxCUj5XZSBhcmUgcHJvZmVzc2lvbmFsIG1pbGxzIG9mIHBpcGUgZml0dGlu Z3MsZmxhbmdlcyBhbmQgdHViZXM8QlI+U2hvdWxkIHlvdSBoYXZlIGFueSBpbnRlcmVzdCwg cGxlYXNlIGNvbnRhY3QgdXMgZm9yIHBvc3NpYmxlIGRlYWwsIDxCUj5DYXRhbG9ndWUgYW5k IHByaWNlIGxpc3Qgd2lsbCBiZSBzZW5kIGZvciB5b3VyIGV2YWx1YXRpb24sIHRoYW5rcyAh PC9QPg0KPFA+QmVzdCByZWdhcmRzLDwvUD4NCjxQPkxpbHkgR3VvPEJSPldlbnpob3UgR3Vv dGFpIFBpcGUgRml0dGluZyBNYW51ZmFjdHVyaW5nIENvLixsdGQuPEJSPlRlbDorODYtMTU5 MDY0ODQ2MjE8QlI+RW1haWw6bGlseV9waXBlZml0dGluZ0AxNjMuY29tPC9QPjwvYm9keT48 L2h0bWw+ From whittalh@yahoo-inc.com Sun Jul 12 23:00:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 87D297F50 for ; Sun, 12 Jul 2015 23:00:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5FA10304032 for ; Sun, 12 Jul 2015 21:00:43 -0700 (PDT) X-ASG-Debug-ID: 1436760040-04cbb00fc851500001-NocioJ Received: from mrout6.yahoo.com (mrout6.yahoo.com [216.145.54.155]) by cuda.sgi.com with ESMTP id IgkPOX1bD0ltqJxV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 12 Jul 2015 21:00:40 -0700 (PDT) X-Barracuda-Envelope-From: whittalh@yahoo-inc.com X-Barracuda-Apparent-Source-IP: 216.145.54.155 Received: from omp1053.mail.ne1.yahoo.com (omp1053.mail.ne1.yahoo.com [98.138.89.195]) by mrout6.yahoo.com (8.14.9/8.14.9/y.out) with ESMTP id t6D40NnS064197 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 12 Jul 2015 21:00:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yahoo-inc.com; s=cobra; t=1436760023; bh=urz4BCH4FEBnpDjcvS85itiUC2u3t0SmEf9HWgzvOMU=; h=Date:From:To:Cc:In-Reply-To:References:Subject; b=pRqgJG1P7LmemWWcHN8oq7jwO+fYTqhU6q9WFRAp19Sjs/MMqaLZpWCGZgzljJ1bE VE/mn5jNLBHt0MpSZ1FJV69VyvRknRzVk4JlLBXNKPplLWiWkPYDazortnUtwrIJbz xaukZngA+T/ymRGvIwzE5gP5OhHp/QDZFOw/iOUQ= Received: (qmail 21086 invoked by uid 1000); 13 Jul 2015 04:00:23 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-inc.com; s=ginc1024; t=1436760023; bh=NTxbdp/XOIvK/O8obryaIDnm6UwR8H8bvKEGt1KBeY4=; h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding; b=ShOIuepIZAXohD/KphfYDd8DjO/jiBFckYz0+gp9frcF1ifdyWMJ5tO7o+LC+xUre9eJ8ZaZsImG5KPeJ1QWqPopBOq4bPflvT9kis1eVa8trPkotyPbuG6ToV+oFo6OUP09ujqSV3/D1hgdzgzbMvznTe+LMU/iKZhYkMDOE3o= X-YMail-OSG: kskevxoVM1mugL_zTPNzRJzJh97HGKdTMnHT8e7YhWw_qrATKYV5niWuZeqiqLu Yy6QYJlVl4Xpw5T9KjePK1rimDBnqXVRvdkjKa_iTHRmMIyZhaXUYYIV8rQO8SQFdJwBjGu_Bs7m C9EU4h2z0bv2r1PJnk6zg5Wu0AlRkBQO9OKSjPOh9KrZz0IE1XaD3XmWsrNWIHr5CvybItFZmH68 IBkoaGa09vN0kK.SaOEZgYnRhWYA7vJnvmy7nkF5sIJu7rmDWFifhF3w- Received: by 98.138.105.195; Mon, 13 Jul 2015 04:00:22 +0000 Date: Mon, 13 Jul 2015 03:59:21 +0000 (UTC) From: Hogan Whittall To: Dave Chinner Cc: "xfs@oss.sgi.com" Message-ID: <1930601174.877676.1436759961508.JavaMail.yahoo@mail.yahoo.com> In-Reply-To: <20150713001303.GH7943@dastard> References: <110866563.1804043.1436463170539.JavaMail.yahoo@mail.yahoo.com> <20150709230222.GD7943@dastard> <1741803883.2585541.1436543988567.JavaMail.yahoo@mail.yahoo.com> <20150710224231.GL3902@dastard> <1598282205.117137.1436570104177.JavaMail.yahoo@mail.yahoo.com> <20150713001303.GH7943@dastard> Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mrout6.yahoo.com[216.145.54.155] X-Barracuda-Start-Time: 1436760040 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_RULE_7580D, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20689 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.75 BSF_RULE_7580D Custom Rule 7580D It's also missing from the command help output as well, but does seem to be there. So, yeah, no man page or command output updates made me think that it was missing completely. Thanks! This makes things much easier. :) [root ~]# mkfs.xfs -V mkfs.xfs version 3.1.1 [root ~]# mkfs.xfs no device name given in argument list Usage: mkfs.xfs /* blocksize */ [-b log=n|size=num] /* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num, (sunit=value,swidth=value|su=num,sw=num), sectlog=n|sectsize=num /* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2, projid32bit=0|1] /* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n sunit=value|su=num,sectlog=n|sectsize=num, lazy-count=0|1] /* label */ [-L label (maximum 12 characters)] /* naming */ [-n log=n|size=num,version=2|ci] /* prototype file */ [-p fname] /* quiet */ [-q] /* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx] /* sectorsize */ [-s log=n|size=num] /* version */ [-V] devicename is required unless -d name=xxx is given. is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB), xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB). is xxx (512 byte blocks). [root@ ~]# mkfs.xfs -N -f /dev/mapper/sys-home -d noalign meta-data=/dev/mapper/sys-home isize=256 agcount=4, agsize=71271680 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=285086720, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=139202, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 -Hogan ----- Original Message ----- From: Dave Chinner To: Hogan Whittall Cc: "xfs@oss.sgi.com" Sent: Sunday, July 12, 2015 7:13 PM Subject: Re: Issue with RHEL6 mkfs.xfs (3.1.1+), HP P420 RAID, and MySQL replication On Fri, Jul 10, 2015 at 11:15:04PM +0000, Hogan Whittall wrote: > As for the noalign option, that would be great to have but it does > not exist in version 3.1.1 which RHEL6 uses. It sounds like not $ gl -n 1 63a6384 commit 63a63844f8a02f34cbb724086a1f0bac492f25b3 Author: Nathan Scott Date: Wed Mar 23 02:56:17 2005 +0000 Add noalign suboptions to -d and -r to allow auto-stripe-alignment to be switched off. Merge of master-melb:xfs-cmds:21924a by kenmcd. $ The noalign option has been in mkfs since 2005, so it's most certainly supported on RHEL6. Looking at the man page history, I forgot that it wasn't documented until 2013 and hence is missing from the RHEL6 man page, so I can understand why you might be saying this. -Dave. -- Dave Chinner david@fromorbit.com From bfoster@redhat.com Mon Jul 13 07:52:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 40A267F61 for ; Mon, 13 Jul 2015 07:52:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2F23D8F8052 for ; Mon, 13 Jul 2015 05:52:22 -0700 (PDT) X-ASG-Debug-ID: 1436791938-04cbb00fc85c100001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id dSbryLsraRu1luXS (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 Jul 2015 05:52:18 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 6AF914C364; Mon, 13 Jul 2015 12:52:17 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6DCqGQP005902; Mon, 13 Jul 2015 08:52:16 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 303AC123029; Mon, 13 Jul 2015 08:52:15 -0400 (EDT) Date: Mon, 13 Jul 2015 08:52:15 -0400 From: Brian Foster To: Kuo Hugo Cc: Hugo Kuo , Eric Sandeen , darrell@swiftstack.com, xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150713125214.GA50787@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436791938 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote: > Hi Brain, > > Is this the file which you need ? > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko > > $> modinfo xfs > > filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko > license: GPL > description: SGI XFS with ACLs, security attributes, large block/inode > numbers, no debug enabled > author: Silicon Graphics, Inc. > srcversion: 0C1B17926BDDA4F121479EE > depends: exportfs > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion > No, this isn't the debug version. We need the one from the debug package that was installed (/usr/lib/debug?). Brian > Thanks // Hugo > ​ > > 2015-07-10 2:32 GMT+08:00 Brian Foster : > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > > > Hi Brain, > > > > > > There you go. > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_64 > > > > > > $ md5sum vmlinux > > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > > > > > > Yes, I can read it with this vmlinux image. Put all files > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore > > > > > > > Thanks, I can actually load that up now. Note that we'll probably need > > the modules and whatnot (xfs.ko) also to be able to look at any XFS > > bits. It might be easiest to just tar up and compress whatever directory > > structure has the debug-enabled vmlinux and all the kernel modules. > > Thanks. > > > > Brian > > > > > Hugo > > > ​ > > > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > > > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > > > > Hi Brian, > > > > > > > > > > *Operating System Version:* > > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > > > > > > > > > *NODE 1* > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > > > > > > > > > > > > > *NODE 2* > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt > > > > > > > > > > > > > > > Any thoughts would be appreciate > > > > > > > > > > > > > I'm not able to fire up crash with these core files and the kernel > > debug > > > > info from the following centos kernel debuginfo package: > > > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > > > > > > > It complains about a version mismatch between the vmlinux and core > > file. > > > > I'm no crash expert... are you sure the cores above correspond to this > > > > kernel? Does crash load up for you on said box if you run something > > like > > > > the following? > > > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > > > > > > > Note that you might need to install the above kernel-debuginfo package > > > > to get the debug (vmlinux) file. If so, could you also upload that > > > > debuginfo rpm somewhere? > > > > > > > > Brian > > > > > > > > > Thanks // Hugo > > > > > > > > > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > > > > Hi Folks, > > > > > > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no any error > > > > shows > > > > > > up. > > > > > > > We currently tried to deploy CentOS 6.6 for testing. (The > > previous > > > > kernel > > > > > > > panic was came from Ubuntu). > > > > > > > The CentOS nodes encountered kernel panic with same daemon but > > the > > > > > > problem > > > > > > > may a bit differ. > > > > > > > > > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in > > Ubuntu. > > > > > > > - Here’s the log in CentOS. It’s broken on > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > > > > > > > > > > I'd venture to guess it's the same behavior here. The previous > > kernel > > > > > > had a callback for the parent inode number that was called via > > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a > > static > > > > > > inline here instead. > > > > > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > > > > > 0000000000000001 > > > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 > > [xfs] > > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > > <4>last sysfs file: > > > > > > > > > > > > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/queue/rotational > > > > > > > <4>CPU 17 > > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs > > iptable_filter > > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack > > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac > > edac_core > > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp > > pps_core > > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 > > mbcache > > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class xhci_hcd > > ahci > > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > > > > > scsi_wait_scan] > > > > > > > <4> > > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > > > > > R518.v5P/X10DRi-T4+ > > > > > > > <4>RIP: 0010:[] [] > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: > > 0000000000000000 > > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: > > 00007faa74006203 > > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: > > 0000000000000004 > > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: > > 0000000000000000 > > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: > > ffff8808715b4580 > > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > > > > > knlGS:0000000000000000 > > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: > > 00000000001407e0 > > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: > > 0000000000000000 > > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > > 0000000000000400 > > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo > > ffff880871f6c000, > > > > > > > task ffff880860f18ab0) > > > > > > > <4>Stack: > > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > > > > ffff880874749cc0 > > > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > > > > > ffff8808715b4580 > > > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > > > > > ffffffffa035ab31 > > > > > > > <4>Call Trace: > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > > > > <4> [] ? final_putname+0x26/0x50 > > > > > > > <4> [] sys_getdents+0x89/0xf0 > > > > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 b8 > > 85 c0 > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 00 > > 00 00 > > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 0f b6 > > > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 > > [xfs] > > > > > > > <4> RSP > > > > > > > <4>CR2: 0000000000000001 > > > > > > > > > > > > > ... > > > > > > > > > > > > > > I’ve got the vmcore dump from operator. Does vmcore help for > > > > > > > troubleshooting kind issue ? > > > > > > > > > > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 > > kernel? Can > > > > > > you provide the exact kernel version and post the vmcore somewhere? > > > > > > > > > > > > Brian > > > > > > > > > > > > > Thanks // Hugo > > > > > > > ​ > > > > > > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen : > > > > > > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected > > filesystem? > > > > Note > > > > > > > > that -n will report problems only and prevent any modification > > by > > > > > > repair. > > > > > > > > > > > > > > > > > > *We might to to xfs_repair if we can address which disk > > causes > > > > the > > > > > > > > issue. * > > > > > > > > > > > > > > > > If you do, please save the output, and if it finds anything, > > please > > > > > > > > provide the output in this thread. > > > > > > > > > > > > > > > > Thanks, > > > > > > > > -Eric > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > 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 bfoster@redhat.com Mon Jul 13 08:45:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D55797F55 for ; Mon, 13 Jul 2015 08:45:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id C38448F804B for ; Mon, 13 Jul 2015 06:45:41 -0700 (PDT) X-ASG-Debug-ID: 1436795140-04cb6c209f173ba0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CjLJQovjKh5wwJ6U (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 Jul 2015 06:45:40 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 199CE19CF3E for ; Mon, 13 Jul 2015 13:45:40 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6DDjd9M002561 for ; Mon, 13 Jul 2015 09:45:39 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id CF7EA123029; Mon, 13 Jul 2015 09:45:38 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH v2] xfs: close xc_cil list_empty() races with cil commit sequence Date: Mon, 13 Jul 2015 09:45:38 -0400 X-ASG-Orig-Subj: [PATCH v2] xfs: close xc_cil list_empty() races with cil commit sequence Message-Id: <1436795138-53887-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436795140 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 We have seen somewhat rare reports of the following assert from xlog_cil_push_background() failing during ltp tests or somewhat innocuous desktop root fs workloads (e.g., virt operations, initramfs construction): ASSERT(!list_empty(&cil->xc_cil)); The reasoning behind the assert is that the transaction has inserted items to the CIL and hit background push codepath all with cil->xc_ctx_lock held for reading. This locks out background commit from emptying the CIL, which acquires the lock for writing. Therefore, the reasoning is that the items previously inserted in the CIL should still be present. The cil->xc_ctx_lock read lock is not sufficient to protect the xc_cil list, however, due to how CIL insertion is handled. xlog_cil_insert_items() inserts and reorders the dirty transaction items to the tail of the CIL under xc_cil_lock. It uses list_move_tail() to achieve insertion and reordering in the same block of code. This function removes and reinserts an item to the tail of the list. If a transaction commits an item that was already logged and thus already resides in the CIL, and said item is the sole item on the list, the removal and reinsertion creates a temporary state where the list is actually empty. This state is not valid and thus should never be observed by concurrent transaction commit-side checks in the circumstances outlined above. We do not want to acquire the xc_cil_lock in all of these instances as it was previously removed and replaced with a separate push lock for performance reasons. Therefore, close any races with list_empty() on the insertion side by ensuring that the list is never in a transient empty state. Signed-off-by: Brian Foster --- v2: - Close the race on the insert side by not removing/reinserting an item if already at the tail. v1: http://oss.sgi.com/archives/xfs/2015-06/msg00389.html fs/xfs/xfs_log_cil.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index abc2ccb..4e76493 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -307,7 +307,13 @@ xlog_cil_insert_items( if (!(lidp->lid_flags & XFS_LID_DIRTY)) continue; - list_move_tail(&lip->li_cil, &cil->xc_cil); + /* + * Only move the item if it isn't already at the tail. This is + * to prevent a transient list_empty() state when reinserting + * an item that is already the only item in the CIL. + */ + if (!list_is_last(&lip->li_cil, &cil->xc_cil)) + list_move_tail(&lip->li_cil, &cil->xc_cil); } /* account for space used by new iovec headers */ -- 2.1.0 From tonytkdk@gmail.com Mon Jul 13 09:06:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9EDB77F5F for ; Mon, 13 Jul 2015 09:06:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7B78E304062 for ; Mon, 13 Jul 2015 07:06:43 -0700 (PDT) X-ASG-Debug-ID: 1436796400-04cbb00fc95dcd0001-NocioJ Received: from mail-wi0-f170.google.com (mail-wi0-f170.google.com [209.85.212.170]) by cuda.sgi.com with ESMTP id BB2oNz86NKynvCrl (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 Jul 2015 07:06:40 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.170 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.170] Received: by wibud3 with SMTP id ud3so30810667wib.1 for ; Mon, 13 Jul 2015 07:06:39 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.170] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.170] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=EoHBLrTREc3RFo/gNCMuH6VfivL6XJv3aFjFS1qDJSY=; b=D3sXtZshe1YhB/F2tid2DQ4L/i79vDb1fCdU9YdpeSCgwJKWcQYw/FqxqQNRcpM3ad oFKJG0WVUssFRXPXKDsY+1BjMdVovDM3BK1Sllz2Pu+tuvn1diC/qkyUjA8UwlhIIGrI ZdDmbkX2wxJXG7faCHcQsPVTDUw93qxXfehwCxSoAcYSj8w14SQanEKRTnCW/1RfTPwi flWTmOTgJd8yponSa+9C/v9uV+Y8MUDdUqwL0MWaYjHgepyfPyIOJ0hLH8VzxQeN6093 Ptmnc3YZpKDqPZqcbW3GMMPOMq0UHIdwXY558uB+/vWQFE7AnaS6dsd9vDhpbvUarcFv MJBg== MIME-Version: 1.0 X-Received: by 10.194.77.97 with SMTP id r1mr63887113wjw.98.1436796399770; Mon, 13 Jul 2015 07:06:39 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Mon, 13 Jul 2015 07:06:39 -0700 (PDT) In-Reply-To: <20150713125214.GA50787@bfoster.bfoster> References: <20150618133122.GC43254@bfoster.bfoster> <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> Date: Mon, 13 Jul 2015 22:06:39 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Hugo Kuo , Eric Sandeen , darrell@swiftstack.com, xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7bfcf2f605e065051ac23bc2 X-Barracuda-Connect: mail-wi0-f170.google.com[209.85.212.170] X-Barracuda-Start-Time: 1436796400 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20699 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7bfcf2f605e065051ac23bc2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Brain, Sorry for the wrong file in previous message. I believe this the right one. https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko.debug /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko.= debug MD5 : 27829c9c55f4f5b095d29a7de7c27254 Thanks // Hugo =E2=80=8B 2015-07-13 20:52 GMT+08:00 Brian Foster : > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote: > > Hi Brain, > > > > Is this the file which you need ? > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko > > > > $> modinfo xfs > > > > filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko > > license: GPL > > description: SGI XFS with ACLs, security attributes, large block/inode > > numbers, no debug enabled > > author: Silicon Graphics, Inc. > > srcversion: 0C1B17926BDDA4F121479EE > > depends: exportfs > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion > > > > No, this isn't the debug version. We need the one from the debug package > that was installed (/usr/lib/debug?). > > Brian > > > Thanks // Hugo > > =E2=80=8B > > > > 2015-07-10 2:32 GMT+08:00 Brian Foster : > > > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > > > > Hi Brain, > > > > > > > > There you go. > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23= .4.el6.x86_64 > > > > > > > > $ md5sum vmlinux > > > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > > > > > > > > Yes, I can read it with this vmlinux image. Put all files > > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmco= re > > > > > > > > > > Thanks, I can actually load that up now. Note that we'll probably nee= d > > > the modules and whatnot (xfs.ko) also to be able to look at any XFS > > > bits. It might be easiest to just tar up and compress whatever > directory > > > structure has the debug-enabled vmlinux and all the kernel modules. > > > Thanks. > > > > > > Brian > > > > > > > Hugo > > > > =E2=80=8B > > > > > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > > > > > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > > > > > Hi Brian, > > > > > > > > > > > > *Operating System Version:* > > > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > > > > > > > > > > > *NODE 1* > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.tx= t > > > > > > > > > > > > > > > > > > *NODE 2* > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj0= 2.txt > > > > > > > > > > > > > > > > > > Any thoughts would be appreciate > > > > > > > > > > > > > > > > I'm not able to fire up crash with these core files and the kerne= l > > > debug > > > > > info from the following centos kernel debuginfo package: > > > > > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > > > > > > > > > It complains about a version mismatch between the vmlinux and cor= e > > > file. > > > > > I'm no crash expert... are you sure the cores above correspond to > this > > > > > kernel? Does crash load up for you on said box if you run somethi= ng > > > like > > > > > the following? > > > > > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > > > > > > > > > Note that you might need to install the above kernel-debuginfo > package > > > > > to get the debug (vmlinux) file. If so, could you also upload tha= t > > > > > debuginfo rpm somewhere? > > > > > > > > > > Brian > > > > > > > > > > > Thanks // Hugo > > > > > > > > > > > > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > > > > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > > > > > Hi Folks, > > > > > > > > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no any > error > > > > > shows > > > > > > > up. > > > > > > > > We currently tried to deploy CentOS 6.6 for testing. (The > > > previous > > > > > kernel > > > > > > > > panic was came from Ubuntu). > > > > > > > > The CentOS nodes encountered kernel panic with same daemon > but > > > the > > > > > > > problem > > > > > > > > may a bit differ. > > > > > > > > > > > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 i= n > > > Ubuntu. > > > > > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s broken = on > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > > > > > > > > > > > > > I'd venture to guess it's the same behavior here. The previou= s > > > kernel > > > > > > > had a callback for the parent inode number that was called vi= a > > > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has= a > > > static > > > > > > > inline here instead. > > > > > > > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > > > > > > 0000000000000001 > > > > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a= 0 > > > [xfs] > > > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > > > <4>last sysfs file: > > > > > > > > > > > > > > > > > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expand= er-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/q= ueue/rotational > > > > > > > > <4>CPU 17 > > > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs > > > iptable_filter > > > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 > nf_conntrack > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac > > > edac_core > > > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp > > > pps_core > > > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd= 2 > > > mbcache > > > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class > xhci_hcd > > > ahci > > > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > > > > > > scsi_wait_scan] > > > > > > > > <4> > > > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > > > > > > R518.v5P/X10DRi-T4+ > > > > > > > > <4>RIP: 0010:[] [] > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: > > > 0000000000000000 > > > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: > > > 00007faa74006203 > > > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: > > > 0000000000000004 > > > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: > > > 0000000000000000 > > > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: > > > ffff8808715b4580 > > > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > > > > > > knlGS:0000000000000000 > > > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: > > > 00000000001407e0 > > > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: > > > 0000000000000000 > > > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > > > 0000000000000400 > > > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo > > > ffff880871f6c000, > > > > > > > > task ffff880860f18ab0) > > > > > > > > <4>Stack: > > > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > > > > > ffff880874749cc0 > > > > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > > > > > > ffff8808715b4580 > > > > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > > > > > > ffffffffa035ab31 > > > > > > > > <4>Call Trace: > > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > > > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > > > > > <4> [] ? final_putname+0x26/0x50 > > > > > > > > <4> [] sys_getdents+0x89/0xf0 > > > > > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 > b8 > > > 85 c0 > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 > 00 > > > 00 00 > > > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 > 0f b6 > > > > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3= a0 > > > [xfs] > > > > > > > > <4> RSP > > > > > > > > <4>CR2: 0000000000000001 > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > I=E2=80=99ve got the vmcore dump from operator. Does vmcore= help for > > > > > > > > troubleshooting kind issue ? > > > > > > > > > > > > > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 > > > kernel? Can > > > > > > > you provide the exact kernel version and post the vmcore > somewhere? > > > > > > > > > > > > > > Brian > > > > > > > > > > > > > > > Thanks // Hugo > > > > > > > > =E2=80=8B > > > > > > > > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen >: > > > > > > > > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected > > > filesystem? > > > > > Note > > > > > > > > > that -n will report problems only and prevent any > modification > > > by > > > > > > > repair. > > > > > > > > > > > > > > > > > > > > *We might to to xfs_repair if we can address which disk > > > causes > > > > > the > > > > > > > > > issue. * > > > > > > > > > > > > > > > > > > If you do, please save the output, and if it finds > anything, > > > please > > > > > > > > > provide the output in this thread. > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > -Eric > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > 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 > > --047d7bfcf2f605e065051ac23bc2 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Brain,

Sorry for the wrong file in pre= vious message. I believe this the right one.

https://cloud.swiftstack.com/v1/= AUTH_hugo/public/xfs.ko.debug

/usr/lib/debug/lib/module=
s/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko.debug

MD5 : 27829c9c55f4= f5b095d29a7de7c27254

Thanks // Hugo

=E2=80= =8B

2015-07-13 20:52 GMT+08:00 Brian Foster <bfoster@redhat.com>= :
On Fri, Jul 10,= 2015 at 01:36:41PM +0800, Kuo Hugo wrote:
> Hi Brain,
>
> Is this the file which you need ?
>
> https://cloud.swiftstack.com/v1/AUTH_hug= o/public/xfs.ko
>
> $> modinfo xfs
>
> filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko=
> license: GPL
> description: SGI XFS with ACLs, security attributes, large block/inode=
> numbers, no debug enabled
> author: Silicon Graphics, Inc.
> srcversion: 0C1B17926BDDA4F121479EE
> depends: exportfs
> vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion
>

No, this isn't the debug version. We need the one from the debug= package
that was installed (/usr/lib/debug?).

Brian

> Thanks // Hugo
> =E2=80=8B
>
> 2015-07-10 2:32 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote:
> > > Hi Brain,
> > >
> > > There you go.
> > >
> > > https://cloud.swiftstack.com/= v1/AUTH_hugo/public/vmlinux
> > >
> > http= s://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6= .x86_64
> > >
> > > $ md5sum vmlinux
> > > 82aaa694a174c0a29e78c05e73adf5d8=C2=A0 vmlinux
> > >
> > > Yes, I can read it with this vmlinux image. Put all files > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlin= ux vmcore
> > >
> >
> > Thanks, I can actually load that up now. Note that we'll prob= ably need
> > the modules and whatnot (xfs.ko) also to be able to look at any X= FS
> > bits. It might be easiest to just tar up and compress whatever di= rectory
> > structure has the debug-enabled vmlinux and all the kernel module= s.
> > Thanks.
> >
> > Brian
> >
> > > Hugo
> > > =E2=80=8B
> > >
> > > 2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > >
> > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrot= e:
> > > > > Hi Brian,
> > > > >
> > > > > *Operating System Version:*
> > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-cento= s-6.6-Final
> > > > >
> > > > > *NODE 1*
> > > > >
> > > > > https://cloud.s= wiftstack.com/v1/AUTH_burton/brtnswift/vmcore
> > > > >
> > https://cloud.swifts= tack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
> > > > >
> > > > >
> > > > > *NODE 2*
> > > > >
> > > > > https:/= /cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> > > > >
> > > >
> > https://clou= d.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
> > > > >
> > > > >
> > > > > Any thoughts would be appreciate
> > > > >
> > > >
> > > > I'm not able to fire up crash with these core files= and the kernel
> > debug
> > > > info from the following centos kernel debuginfo package= :
> > > >
> > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64= .rpm
> > > >
> > > > It complains about a version mismatch between the vmlin= ux and core
> > file.
> > > > I'm no crash expert... are you sure the cores above= correspond to this
> > > > kernel? Does crash load up for you on said box if you r= un something
> > like
> > > > the following?
> > > >
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0crash /usr/lib/debug/l= ib/modules/.../vmlinux vmcore
> > > >
> > > > Note that you might need to install the above kernel-de= buginfo package
> > > > to get the debug (vmlinux) file. If so, could you also = upload that
> > > > debuginfo rpm somewhere?
> > > >
> > > > Brian
> > > >
> > > > > Thanks // Hugo
> > > > >
> > > > >
> > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > > > >
> > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo= Hugo wrote:
> > > > > > > Hi Folks,
> > > > > > >
> > > > > > > As the results of 32 disks with xfs_repa= ir -n seems no any error
> > > > shows
> > > > > > up.
> > > > > > > We currently tried to deploy CentOS 6.6 = for testing. (The
> > previous
> > > > kernel
> > > > > > > panic was came from Ubuntu).
> > > > > > > The CentOS nodes encountered kernel pani= c with same daemon but
> > the
> > > > > > problem
> > > > > > > may a bit differ.
> > > > > > >
> > > > > > >=C2=A0 =C2=A0 - It was broken on xfs_dir2= _sf_get_parent_ino+0xa/0x20 in
> > Ubuntu.
> > > > > > >=C2=A0 =C2=A0 - Here=E2=80=99s the log in= CentOS. It=E2=80=99s broken on
> > > > > > >=C2=A0 =C2=A0 xfs_dir2_sf_getdents+0x2a0/= 0x3a0
> > > > > > >
> > > > > >
> > > > > > I'd venture to guess it's the same be= havior here. The previous
> > kernel
> > > > > > had a callback for the parent inode number th= at was called via
> > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.= 6 kernel, it has a
> > static
> > > > > > inline here instead.
> > > > > >
> > > > > > > <1>BUG: unable to handle kernel NU= LL pointer dereference at
> > > > > > 0000000000000001
> > > > > > > <1>IP: [<ffffffffa0362d60>] = xfs_dir2_sf_getdents+0x2a0/0x3a0
> > [xfs]
> > > > > > > <4>PGD 1072327067 PUD 1072328067 P= MD 0
> > > > > > > <4>Oops: 0000 [#1] SMP
> > > > > > > <4>last sysfs file:
> > > > > > >
> > > > > >
> > > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > > > > > <4>CPU 17
> > > > > > > <4>Modules linked in: xt_conntrack= tun xfs exportfs
> > iptable_filter
> > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_connt= rack_ipv4 nf_conntrack
> > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libc= rc32c iTCO_wdt
> > > > > > > iTCO_vendor_support ses enclosure igb i2= c_algo_bit sb_edac
> > edac_core
> > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_= core ixgbe dca ptp
> > pps_core
> > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_= msghandler ext4 jbd2
> > mbcache
> > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport= _sas raid_class xhci_hcd
> > ahci
> > > > > > > wmi dm_mirror dm_region_hash dm_log dm_m= od [last unloaded:
> > > > > > > scsi_wait_scan]
> > > > > > > <4>
> > > > > > > <4>Pid: 4454, comm: swift-object-s= e Not tainted
> > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Me= chanics Storform
> > > > > > > R518.v5P/X10DRi-T4+
> > > > > > > <4>RIP: 0010:[<ffffffffa0362d60= >]=C2=A0 [<ffffffffa0362d60>]
> > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > > > <4>RSP: 0018:ffff880871f6de18=C2= =A0 EFLAGS: 00010202
> > > > > > > <4>RAX: 0000000000000000 RBX: 0000= 000000000004 RCX:
> > 0000000000000000
> > > > > > > <4>RDX: 0000000000000001 RSI: 0000= 000000000000 RDI:
> > 00007faa74006203
> > > > > > > <4>RBP: ffff880871f6de68 R08: 0000= 00032eb04bc9 R09:
> > 0000000000000004
> > > > > > > <4>R10: 0000000000008030 R11: 0000= 000000000246 R12:
> > 0000000000000000
> > > > > > > <4>R13: 0000000000000002 R14: ffff= 88106eff7000 R15:
> > ffff8808715b4580
> > > > > > > <4>FS:=C2=A0 00007faa85425700(0000= ) GS:ffff880028360000(0000)
> > > > > > knlGS:0000000000000000
> > > > > > > <4>CS:=C2=A0 0010 DS: 0000 ES: 000= 0 CR0: 0000000080050033
> > > > > > > <4>CR2: 0000000000000001 CR3: 0000= 001072325000 CR4:
> > 00000000001407e0
> > > > > > > <4>DR0: 0000000000000000 DR1: 0000= 000000000000 DR2:
> > 0000000000000000
> > > > > > > <4>DR3: 0000000000000000 DR6: 0000= 0000ffff0ff0 DR7:
> > 0000000000000400
> > > > > > > <4>Process swift-object-se (pid: 4= 454, threadinfo
> > ffff880871f6c000,
> > > > > > > task ffff880860f18ab0)
> > > > > > > <4>Stack:
> > > > > > > <4> ffff880871f6de28 ffffffff811a4= bb0 ffff880871f6df38
> > > > ffff880874749cc0
> > > > > > > <4><d> 0000000100000103 ffff= 8802381f8c00 ffff880871f6df38
> > > > > > ffff8808715b4580
> > > > > > > <4><d> 0000000000000082 ffff= 8802381f8d88 ffff880871f6dec8
> > > > > > ffffffffa035ab31
> > > > > > > <4>Call Trace:
> > > > > > > <4> [<ffffffff811a4bb0>] ? f= illdir+0x0/0xe0
> > > > > > > <4> [<ffffffffa035ab31>] xfs= _readdir+0xe1/0x130 [xfs]
> > > > > > > <4> [<ffffffff811a4bb0>] ? f= illdir+0x0/0xe0
> > > > > > > <4> [<ffffffffa038fe29>] xfs= _file_readdir+0x39/0x50 [xfs]
> > > > > > > <4> [<ffffffff811a4e30>] vfs= _readdir+0xc0/0xe0
> > > > > > > <4> [<ffffffff8119bd86>] ? f= inal_putname+0x26/0x50
> > > > > > > <4> [<ffffffff811a4fb9>] sys= _getdents+0x89/0xf0
> > > > > > > <4> [<ffffffff8100b0f2>] sys= tem_call_fastpath+0x16/0x1b
> > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6= b 3a a0 48 8b 7d c0 ff 55 b8
> > 85 c0
> > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff f= f 66 0f 1f 84 00 00 00
> > 00 00
> > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00= 00 45 0f b6 44 24 03 41 0f b6
> > > > > > > <1>RIP=C2=A0 [<ffffffffa0362d60= >] xfs_dir2_sf_getdents+0x2a0/0x3a0
> > [xfs]
> > > > > > > <4> RSP <ffff880871f6de18> > > > > > > > <4>CR2: 0000000000000001
> > > > > > >
> > > > > > ...
> > > > > > >
> > > > > > > I=E2=80=99ve got the vmcore dump from op= erator. Does vmcore help for
> > > > > > > troubleshooting kind issue ?
> > > > > > >
> > > > > >
> > > > > > Hmm, well it couldn't hurt. Is the vmcore= based on this 6.6
> > kernel? Can
> > > > > > you provide the exact kernel version and post= the vmcore somewhere?
> > > > > >
> > > > > > Brian
> > > > > >
> > > > > > > Thanks // Hugo
> > > > > > > =E2=80=8B
> > > > > > >
> > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen = <sandeen@sandeen.net>:
> > > > > > >
> > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote:=
> > > > > > > > >>- Have you tried an 'xf= s_repair -n' of the affected
> > filesystem?
> > > > Note
> > > > > > > > that -n will report problems only a= nd prevent any modification
> > by
> > > > > > repair.
> > > > > > > > >
> > > > > > > > > *We might to to xfs_repair if = we can address which disk
> > causes
> > > > the
> > > > > > > > issue. *
> > > > > > > >
> > > > > > > > If you do, please save the output, = and if it finds anything,
> > please
> > > > > > > > provide the output in this thread.<= br> > > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > -Eric
> > > > > > > >
> > > > > >
> > > > > > > ________________________________________= _______
> > > > > > > xfs mailing list
> > > > > > > xfs@o= ss.sgi.com
> > > > > > > http://oss.sgi.com/mailman= /listinfo/xfs
> > > > > >
> > > > > >
> > > >
> >

> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs


--047d7bfcf2f605e065051ac23bc2-- From bfoster@redhat.com Mon Jul 13 12:02:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 63AFB29DF5 for ; Mon, 13 Jul 2015 12:02:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 502F38F8033 for ; Mon, 13 Jul 2015 10:02:06 -0700 (PDT) X-ASG-Debug-ID: 1436806921-04cb6c209c1799f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id QJetS0KH0zqVUHhA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 13 Jul 2015 10:02:02 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 17CC7C942C; Mon, 13 Jul 2015 17:02:01 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6DH20sj010001; Mon, 13 Jul 2015 13:02:00 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id E5B51123029; Mon, 13 Jul 2015 13:01:58 -0400 (EDT) Date: Mon, 13 Jul 2015 13:01:58 -0400 From: Brian Foster To: Kuo Hugo Cc: Hugo Kuo , Eric Sandeen , darrell@swiftstack.com, xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150713170158.GB50787@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436806921 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Jul 13, 2015 at 10:06:39PM +0800, Kuo Hugo wrote: > Hi Brain, > > Sorry for the wrong file in previous message. I believe this the right one. > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko.debug > > /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko.debug > > MD5 : 27829c9c55f4f5b095d29a7de7c27254 > Yes, that works. I have a few bits of information so far, but nothing obvious to me as to what caused the problem. Some info: - The crash is indeed at xfs_dir2_sf_get_inumber(): /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/fs/xfs/xfs_dir2_sf.h: 101 0xffffffffa0362d60 : cmpb $0x0,0x1(%r12) ... - %r12 above has a value of 0 and is set as follows: /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/fs/xfs/xfs_dir2_sf.c: 727 0xffffffffa0362b11 : mov 0x50(%rdi),%r12 ... which is the sfp pointer assignment in the getdents function: sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data; This implies a NULL if_data. - The backtrace lists a couple of inodes on the stack in this frame. I'm not sure why, but one looks like a valid directory and the other looks bogus. The valid inode has an inode number of 13668207561. - The fsname for this inode is "sdb." - The inode does appear to have a non-NULL if_data: ... if_u1 = { if_extents = 0xffff88084feaf5c0, if_ext_irec = 0xffff88084feaf5c0, if_data = 0xffff88084feaf5c0 "\004" }, ... So it's not totally clear what's going on there. It might be interesting to see what directory this refers to, if it still exists on the sdb fs. For example, is it an external directory or some kind of internal directory created by the application? You could use something like the following to try and locate the directory based on inode number: find -inum 13668207561 Brian > Thanks // Hugo > ​ > > 2015-07-13 20:52 GMT+08:00 Brian Foster : > > > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote: > > > Hi Brain, > > > > > > Is this the file which you need ? > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko > > > > > > $> modinfo xfs > > > > > > filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko > > > license: GPL > > > description: SGI XFS with ACLs, security attributes, large block/inode > > > numbers, no debug enabled > > > author: Silicon Graphics, Inc. > > > srcversion: 0C1B17926BDDA4F121479EE > > > depends: exportfs > > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion > > > > > > > No, this isn't the debug version. We need the one from the debug package > > that was installed (/usr/lib/debug?). > > > > Brian > > > > > Thanks // Hugo > > > ​ > > > > > > 2015-07-10 2:32 GMT+08:00 Brian Foster : > > > > > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > > > > > Hi Brain, > > > > > > > > > > There you go. > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_64 > > > > > > > > > > $ md5sum vmlinux > > > > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > > > > > > > > > > Yes, I can read it with this vmlinux image. Put all files > > > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux vmcore > > > > > > > > > > > > > Thanks, I can actually load that up now. Note that we'll probably need > > > > the modules and whatnot (xfs.ko) also to be able to look at any XFS > > > > bits. It might be easiest to just tar up and compress whatever > > directory > > > > structure has the debug-enabled vmlinux and all the kernel modules. > > > > Thanks. > > > > > > > > Brian > > > > > > > > > Hugo > > > > > ​ > > > > > > > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > > > > > > > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > > > > > > Hi Brian, > > > > > > > > > > > > > > *Operating System Version:* > > > > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > > > > > > > > > > > > > > *NODE 1* > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > > > > > > > > > > > > > > > > > > > *NODE 2* > > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > > > > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt > > > > > > > > > > > > > > > > > > > > > Any thoughts would be appreciate > > > > > > > > > > > > > > > > > > > I'm not able to fire up crash with these core files and the kernel > > > > debug > > > > > > info from the following centos kernel debuginfo package: > > > > > > > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > > > > > > > > > > > It complains about a version mismatch between the vmlinux and core > > > > file. > > > > > > I'm no crash expert... are you sure the cores above correspond to > > this > > > > > > kernel? Does crash load up for you on said box if you run something > > > > like > > > > > > the following? > > > > > > > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > > > > > > > > > > > Note that you might need to install the above kernel-debuginfo > > package > > > > > > to get the debug (vmlinux) file. If so, could you also upload that > > > > > > debuginfo rpm somewhere? > > > > > > > > > > > > Brian > > > > > > > > > > > > > Thanks // Hugo > > > > > > > > > > > > > > > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster : > > > > > > > > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > > > > > > Hi Folks, > > > > > > > > > > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no any > > error > > > > > > shows > > > > > > > > up. > > > > > > > > > We currently tried to deploy CentOS 6.6 for testing. (The > > > > previous > > > > > > kernel > > > > > > > > > panic was came from Ubuntu). > > > > > > > > > The CentOS nodes encountered kernel panic with same daemon > > but > > > > the > > > > > > > > problem > > > > > > > > > may a bit differ. > > > > > > > > > > > > > > > > > > - It was broken on xfs_dir2_sf_get_parent_ino+0xa/0x20 in > > > > Ubuntu. > > > > > > > > > - Here’s the log in CentOS. It’s broken on > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > > > > > > > > > > > > > > > > I'd venture to guess it's the same behavior here. The previous > > > > kernel > > > > > > > > had a callback for the parent inode number that was called via > > > > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it has a > > > > static > > > > > > > > inline here instead. > > > > > > > > > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereference at > > > > > > > > 0000000000000001 > > > > > > > > > <1>IP: [] xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > [xfs] > > > > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > > > > <4>last sysfs file: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/queue/rotational > > > > > > > > > <4>CPU 17 > > > > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs > > > > iptable_filter > > > > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 > > nf_conntrack > > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit sb_edac > > > > edac_core > > > > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca ptp > > > > pps_core > > > > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 jbd2 > > > > mbcache > > > > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class > > xhci_hcd > > > > ahci > > > > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last unloaded: > > > > > > > > > scsi_wait_scan] > > > > > > > > > <4> > > > > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > > > > > > > > > R518.v5P/X10DRi-T4+ > > > > > > > > > <4>RIP: 0010:[] [] > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: > > > > 0000000000000000 > > > > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: > > > > 00007faa74006203 > > > > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: > > > > 0000000000000004 > > > > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: > > > > 0000000000000000 > > > > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: > > > > ffff8808715b4580 > > > > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > > > > > > > > knlGS:0000000000000000 > > > > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: > > > > 00000000001407e0 > > > > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: > > > > 0000000000000000 > > > > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > > > > 0000000000000400 > > > > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo > > > > ffff880871f6c000, > > > > > > > > > task ffff880860f18ab0) > > > > > > > > > <4>Stack: > > > > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > > > > > > ffff880874749cc0 > > > > > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df38 > > > > > > > > ffff8808715b4580 > > > > > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6dec8 > > > > > > > > ffffffffa035ab31 > > > > > > > > > <4>Call Trace: > > > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xfs] > > > > > > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > > > > > > <4> [] ? final_putname+0x26/0x50 > > > > > > > > > <4> [] sys_getdents+0x89/0xf0 > > > > > > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55 > > b8 > > > > 85 c0 > > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 00 00 > > 00 > > > > 00 00 > > > > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 41 > > 0f b6 > > > > > > > > > <1>RIP [] xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > [xfs] > > > > > > > > > <4> RSP > > > > > > > > > <4>CR2: 0000000000000001 > > > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > > > I’ve got the vmcore dump from operator. Does vmcore help for > > > > > > > > > troubleshooting kind issue ? > > > > > > > > > > > > > > > > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6.6 > > > > kernel? Can > > > > > > > > you provide the exact kernel version and post the vmcore > > somewhere? > > > > > > > > > > > > > > > > Brian > > > > > > > > > > > > > > > > > Thanks // Hugo > > > > > > > > > ​ > > > > > > > > > > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen > >: > > > > > > > > > > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected > > > > filesystem? > > > > > > Note > > > > > > > > > > that -n will report problems only and prevent any > > modification > > > > by > > > > > > > > repair. > > > > > > > > > > > > > > > > > > > > > > *We might to to xfs_repair if we can address which disk > > > > causes > > > > > > the > > > > > > > > > > issue. * > > > > > > > > > > > > > > > > > > > > If you do, please save the output, and if it finds > > anything, > > > > please > > > > > > > > > > provide the output in this thread. > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > -Eric > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > > 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 tonytkdk@gmail.com Mon Jul 13 13:10:20 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AB7FE7F66 for ; Mon, 13 Jul 2015 13:10:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 89FB58F8035 for ; Mon, 13 Jul 2015 11:10:17 -0700 (PDT) X-ASG-Debug-ID: 1436811012-04cbb00fcb64250001-NocioJ Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by cuda.sgi.com with ESMTP id evNGJTBJ5mMORbmq (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 13 Jul 2015 11:10:13 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.181 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.181] Received: by widic2 with SMTP id ic2so19241761wid.0 for ; Mon, 13 Jul 2015 11:10:12 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.181] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.181] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=/UkBYyfMNo+Ds3NImB49ItgEOiAvUM1otu4MHt3JtpQ=; b=nbcdSaT1EjRsVEfrkwNvb6u9kOGbkEJgfdPakikFWs4nLPZ3FJTEe7dkEcMbesd6t2 X+WxKcq9zOoTW6irCNaXuCV/bahiNP/sFH/LG4DlpFm9mbpa7ZsFI4LxXS//77TI4cdQ uVwQjjpmqZOdrahpw4mmukV4tN6G63tGgZI5LdHBnvTDTUi0wP2A79YWZj207naQj9cZ KEYkg2m9dgTH5Zl0hRQ9lFZjhTcYFZ3XewjSTyvT7OO4+wuuTO1WvFXg+bOWUi1P3sek 99qD6o+RihikG62ZUf3Bsd4JUrwn1mX9aA7XkTycFMONSEFsShW62wf0qX16K/95MPeP Scxw== MIME-Version: 1.0 X-Received: by 10.194.184.82 with SMTP id es18mr8203568wjc.79.1436811012279; Mon, 13 Jul 2015 11:10:12 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Mon, 13 Jul 2015 11:10:12 -0700 (PDT) In-Reply-To: <20150713170158.GB50787@bfoster.bfoster> References: <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> <20150713170158.GB50787@bfoster.bfoster> Date: Tue, 14 Jul 2015 02:10:12 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Hugo Kuo , Eric Sandeen , Darrell Bishop , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7bacbd88ff1506051ac5a135 X-Barracuda-Connect: mail-wi0-f181.google.com[209.85.212.181] X-Barracuda-Start-Time: 1436811013 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20706 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7bacbd88ff1506051ac5a135 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Brain, The sdb is mounted on /srv/node/d224 on this server. That's one of three disks that the process was making I/O on it. Those openfiles on /srv/node/d224 were made by the process to storing/deleting data at that moment while the kernel panic appeared. ``` 36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03ed88 REG /srv/node/d205/quarantined/objects/cd1d68f515006d443a54ff4f658091bc- a114bba1449b45238abf38dc741d7c27/1436254020.89801.ts 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/quarantined/objects/ b146865bf8034bfc42570b747c341b32/1436266042.57775.ts 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/tmp/tmpSpnrHg 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32 ``` I'll check the dir location of the inode number. Nice information. Thanks // Hugo 2015-07-14 1:01 GMT+08:00 Brian Foster : > On Mon, Jul 13, 2015 at 10:06:39PM +0800, Kuo Hugo wrote: > > Hi Brain, > > > > Sorry for the wrong file in previous message. I believe this the right > one. > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko.debug > > > > > /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.k= o.debug > > > > MD5 : 27829c9c55f4f5b095d29a7de7c27254 > > > > Yes, that works. I have a few bits of information so far, but nothing > obvious to me as to what caused the problem. Some info: > > - The crash is indeed at xfs_dir2_sf_get_inumber(): > > /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_6= 4/fs/xfs/xfs_dir2_sf.h: > 101 > 0xffffffffa0362d60 : cmpb $0x0,0x1(%r12) > ... > > - %r12 above has a value of 0 and is set as follows: > > /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_6= 4/fs/xfs/xfs_dir2_sf.c: > 727 > 0xffffffffa0362b11 : mov 0x50(%rdi),%r12 > > ... which is the sfp pointer assignment in the getdents function: > > sfp =3D (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data; > > This implies a NULL if_data. > > - The backtrace lists a couple of inodes on the stack in this frame. I'm > not sure why, but one looks like a valid directory and the other looks > bogus. The valid inode has an inode number of 13668207561. > > - The fsname for this inode is "sdb." > > - The inode does appear to have a non-NULL if_data: > > ... > if_u1 =3D { > if_extents =3D 0xffff88084feaf5c0, > if_ext_irec =3D 0xffff88084feaf5c0, > if_data =3D 0xffff88084feaf5c0 "\004" > }, > ... > > So it's not totally clear what's going on there. It might be interesting > to see what directory this refers to, if it still exists on the sdb fs. > For example, is it an external directory or some kind of internal > directory created by the application? You could use something like the > following to try and locate the directory based on inode number: > > find -inum 13668207561 > > Brian > > > Thanks // Hugo > > =E2=80=8B > > > > 2015-07-13 20:52 GMT+08:00 Brian Foster : > > > > > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote: > > > > Hi Brain, > > > > > > > > Is this the file which you need ? > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko > > > > > > > > $> modinfo xfs > > > > > > > > filename: > /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko > > > > license: GPL > > > > description: SGI XFS with ACLs, security attributes, large > block/inode > > > > numbers, no debug enabled > > > > author: Silicon Graphics, Inc. > > > > srcversion: 0C1B17926BDDA4F121479EE > > > > depends: exportfs > > > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion > > > > > > > > > > No, this isn't the debug version. We need the one from the debug > package > > > that was installed (/usr/lib/debug?). > > > > > > Brian > > > > > > > Thanks // Hugo > > > > =E2=80=8B > > > > > > > > 2015-07-10 2:32 GMT+08:00 Brian Foster : > > > > > > > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > > > > > > Hi Brain, > > > > > > > > > > > > There you go. > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23= .4.el6.x86_64 > > > > > > > > > > > > $ md5sum vmlinux > > > > > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > > > > > > > > > > > > Yes, I can read it with this vmlinux image. Put all files > > > > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux > vmcore > > > > > > > > > > > > > > > > Thanks, I can actually load that up now. Note that we'll probably > need > > > > > the modules and whatnot (xfs.ko) also to be able to look at any X= FS > > > > > bits. It might be easiest to just tar up and compress whatever > > > directory > > > > > structure has the debug-enabled vmlinux and all the kernel module= s. > > > > > Thanks. > > > > > > > > > > Brian > > > > > > > > > > > Hugo > > > > > > =E2=80=8B > > > > > > > > > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > > > > > > > > > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > > > > > > > > Hi Brian, > > > > > > > > > > > > > > > > *Operating System Version:* > > > > > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Fin= al > > > > > > > > > > > > > > > > *NODE 1* > > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcor= e > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > > > > > > > > > > > > > > > > > > > > > > > > *NODE 2* > > > > > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > > > > > > > > > > > > > > > > > > > > > > > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj0= 2.txt > > > > > > > > > > > > > > > > > > > > > > > > Any thoughts would be appreciate > > > > > > > > > > > > > > > > > > > > > > I'm not able to fire up crash with these core files and the > kernel > > > > > debug > > > > > > > info from the following centos kernel debuginfo package: > > > > > > > > > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > > > > > > > > > > > > > > It complains about a version mismatch between the vmlinux and > core > > > > > file. > > > > > > > I'm no crash expert... are you sure the cores above correspon= d > to > > > this > > > > > > > kernel? Does crash load up for you on said box if you run > something > > > > > like > > > > > > > the following? > > > > > > > > > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > > > > > > > > > > > > > > Note that you might need to install the above kernel-debuginf= o > > > package > > > > > > > to get the debug (vmlinux) file. If so, could you also upload > that > > > > > > > debuginfo rpm somewhere? > > > > > > > > > > > > > > Brian > > > > > > > > > > > > > > > Thanks // Hugo > > > > > > > > > > > > > > > > > > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster >: > > > > > > > > > > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > > > > > > > > > > Hi Folks, > > > > > > > > > > > > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no > any > > > error > > > > > > > shows > > > > > > > > > up. > > > > > > > > > > We currently tried to deploy CentOS 6.6 for testing. (T= he > > > > > previous > > > > > > > kernel > > > > > > > > > > panic was came from Ubuntu). > > > > > > > > > > The CentOS nodes encountered kernel panic with same > daemon > > > but > > > > > the > > > > > > > > > problem > > > > > > > > > > may a bit differ. > > > > > > > > > > > > > > > > > > > > - It was broken on > xfs_dir2_sf_get_parent_ino+0xa/0x20 in > > > > > Ubuntu. > > > > > > > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s bro= ken on > > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > > > > > > > > > > > > > > > > > > > > > > > > I'd venture to guess it's the same behavior here. The > previous > > > > > kernel > > > > > > > > > had a callback for the parent inode number that was calle= d > via > > > > > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it > has a > > > > > static > > > > > > > > > inline here instead. > > > > > > > > > > > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer dereferenc= e > at > > > > > > > > > 0000000000000001 > > > > > > > > > > <1>IP: [] > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > [xfs] > > > > > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > > > > > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > > > > > <4>last sysfs file: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expand= er-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/q= ueue/rotational > > > > > > > > > > <4>CPU 17 > > > > > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs > > > > > iptable_filter > > > > > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 > > > nf_conntrack > > > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > > > > > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit > sb_edac > > > > > edac_core > > > > > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca > ptp > > > > > pps_core > > > > > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 > jbd2 > > > > > mbcache > > > > > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class > > > xhci_hcd > > > > > ahci > > > > > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last > unloaded: > > > > > > > > > > scsi_wait_scan] > > > > > > > > > > <4> > > > > > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > > > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storfor= m > > > > > > > > > > R518.v5P/X10DRi-T4+ > > > > > > > > > > <4>RIP: 0010:[] [] > > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > > > > > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > > > > > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: > > > > > 0000000000000000 > > > > > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: > > > > > 00007faa74006203 > > > > > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: > > > > > 0000000000000004 > > > > > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: > > > > > 0000000000000000 > > > > > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: > > > > > ffff8808715b4580 > > > > > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000= ) > > > > > > > > > knlGS:0000000000000000 > > > > > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: > > > > > 00000000001407e0 > > > > > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: > > > > > 0000000000000000 > > > > > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > > > > > 0000000000000400 > > > > > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo > > > > > ffff880871f6c000, > > > > > > > > > > task ffff880860f18ab0) > > > > > > > > > > <4>Stack: > > > > > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > > > > > > > ffff880874749cc0 > > > > > > > > > > <4> 0000000100000103 ffff8802381f8c00 ffff880871f6df= 38 > > > > > > > > > ffff8808715b4580 > > > > > > > > > > <4> 0000000000000082 ffff8802381f8d88 ffff880871f6de= c8 > > > > > > > > > ffffffffa035ab31 > > > > > > > > > > <4>Call Trace: > > > > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > > > > > > > > > > <4> [] ? filldir+0x0/0xe0 > > > > > > > > > > <4> [] xfs_file_readdir+0x39/0x50 [xf= s] > > > > > > > > > > <4> [] vfs_readdir+0xc0/0xe0 > > > > > > > > > > <4> [] ? final_putname+0x26/0x50 > > > > > > > > > > <4> [] sys_getdents+0x89/0xf0 > > > > > > > > > > <4> [] system_call_fastpath+0x16/0x1b > > > > > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 f= f > 55 > > > b8 > > > > > 85 c0 > > > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 0= 0 > 00 > > > 00 > > > > > 00 00 > > > > > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 > 41 > > > 0f b6 > > > > > > > > > > <1>RIP [] > xfs_dir2_sf_getdents+0x2a0/0x3a0 > > > > > [xfs] > > > > > > > > > > <4> RSP > > > > > > > > > > <4>CR2: 0000000000000001 > > > > > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > > > > > I=E2=80=99ve got the vmcore dump from operator. Does vm= core help > for > > > > > > > > > > troubleshooting kind issue ? > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this 6= .6 > > > > > kernel? Can > > > > > > > > > you provide the exact kernel version and post the vmcore > > > somewhere? > > > > > > > > > > > > > > > > > > Brian > > > > > > > > > > > > > > > > > > > Thanks // Hugo > > > > > > > > > > =E2=80=8B > > > > > > > > > > > > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen < > sandeen@sandeen.net > > > >: > > > > > > > > > > > > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > > > > > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected > > > > > filesystem? > > > > > > > Note > > > > > > > > > > > that -n will report problems only and prevent any > > > modification > > > > > by > > > > > > > > > repair. > > > > > > > > > > > > > > > > > > > > > > > > *We might to to xfs_repair if we can address which > disk > > > > > causes > > > > > > > the > > > > > > > > > > > issue. * > > > > > > > > > > > > > > > > > > > > > > If you do, please save the output, and if it finds > > > anything, > > > > > please > > > > > > > > > > > provide the output in this thread. > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > -Eric > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > > > 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 > > > > > > > --047d7bacbd88ff1506051ac5a135 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Brain,=C2=A0

The sdb is mounted on /= srv/node/d224 on this server. That's one of three disks that the proces= s was making I/O on it.=C2=A0
Those openfiles on /srv/node/d224 w= ere made by the process to storing/deleting data at that moment while the k= ernel panic appeared.=C2=A0

```
36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03e= d88 REG /srv/node/d205/quarantined/= objects/cd1d68f515006d443a54ff4f6580= 91bc-a114bba1449b45238abf38dc741d7c27/1436254020.89801.ts 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/= quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/= tmp/tmpSpnrHg 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR /srv/node/d224/= quarantined/objects/b146865bf8034bfc42570b747c341b32
```

I'= ;ll check the dir location of the inode number.=C2=A0

<= div>Nice information.=C2=A0

Thanks // Hugo=C2=A0

2015-07= -14 1:01 GMT+08:00 Brian Foster <bfoster@redhat.com>:
On Mon, Jul 13, 2015 at 10:06= :39PM +0800, Kuo Hugo wrote:
> Hi Brain,
>
> Sorry for the wrong file in previous message. = I believe this the right one.
>
> https://cloud.swiftstack.com/v1/AU= TH_hugo/public/xfs.ko.debug
>
> /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xf= s.ko.debug
>
> MD5 : 27829c9c55f4f5b095d29a7de7c27254
>

Yes, that works. I have a few bits of information so far, but nothin= g
obvious to me as to what caused the problem. Some info:

- The crash is indeed at xfs_dir2_sf_get_inumber():

/usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/= fs/xfs/xfs_dir2_sf.h: 101
0xffffffffa0362d60 <xfs_dir2_sf_getdents+672>:=C2=A0 cmpb=C2=A0 =C2= =A0$0x0,0x1(%r12)
...

- %r12 above has a value of 0 and is set as follows:

/usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/= fs/xfs/xfs_dir2_sf.c: 727
0xffffffffa0362b11 <xfs_dir2_sf_getdents+81>:=C2=A0 =C2=A0mov=C2=A0 = =C2=A0 0x50(%rdi),%r12

... which is the sfp pointer assignment in the getdents function:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 sfp =3D (xfs_dir2_sf_t *)dp->i_df.if_u1.if_d= ata;

This implies a NULL if_data.

- The backtrace lists a couple of inodes on the stack in this frame. I'= m
not sure why, but one looks like a valid directory and the other looks
bogus. The valid inode has an inode number of 13668207561.

- The fsname for this inode is "sdb."

- The inode does appear to have a non-NULL if_data:

=C2=A0 =C2=A0 ...
=C2=A0 =C2=A0 if_u1 =3D {
=C2=A0 =C2=A0 =C2=A0 if_extents =3D 0xffff88084feaf5c0,
=C2=A0 =C2=A0 =C2=A0 if_ext_irec =3D 0xffff88084feaf5c0,
=C2=A0 =C2=A0 =C2=A0 if_data =3D 0xffff88084feaf5c0 "\004"
=C2=A0 =C2=A0 },
=C2=A0 =C2=A0 ...

So it's not totally clear what's going on there. It might be intere= sting
to see what directory this refers to, if it still exists on the sdb fs.
For example, is it an external directory or some kind of internal
directory created by the application? You could use something like the
following to try and locate the directory based on inode number:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 find <mntpath> -inum 13668207561

Brian

> Thanks // Hugo
> =E2=80=8B
>
> 2015-07-13 20:52 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote:
> > > Hi Brain,
> > >
> > > Is this the file which you need ?
> > >
> > > https://cloud.swiftstack.com/v= 1/AUTH_hugo/public/xfs.ko
> > >
> > > $> modinfo xfs
> > >
> > > filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/= xfs/xfs.ko
> > > license: GPL
> > > description: SGI XFS with ACLs, security attributes, large b= lock/inode
> > > numbers, no debug enabled
> > > author: Silicon Graphics, Inc.
> > > srcversion: 0C1B17926BDDA4F121479EE
> > > depends: exportfs
> > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversi= on
> > >
> >
> > No, this isn't the debug version. We need the one from the de= bug package
> > that was installed (/usr/lib/debug?).
> >
> > Brian
> >
> > > Thanks // Hugo
> > > =E2=80=8B
> > >
> > > 2015-07-10 2:32 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > >
> > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrot= e:
> > > > > Hi Brain,
> > > > >
> > > > > There you go.
> > > > >
> > > > > https://cloud.swift= stack.com/v1/AUTH_hugo/public/vmlinux
> > > > >
> > > >
> > http= s://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6= .x86_64
> > > > >
> > > > > $ md5sum vmlinux
> > > > > 82aaa694a174c0a29e78c05e73adf5d8=C2=A0 vmlinux
> > > > >
> > > > > Yes, I can read it with this vmlinux image. Put al= l files
> > > > > (vmcore,vmlinux,System.map) in a folder and run $c= rash vmlinux vmcore
> > > > >
> > > >
> > > > Thanks, I can actually load that up now. Note that we&#= 39;ll probably need
> > > > the modules and whatnot (xfs.ko) also to be able to loo= k at any XFS
> > > > bits. It might be easiest to just tar up and compress w= hatever
> > directory
> > > > structure has the debug-enabled vmlinux and all the ker= nel modules.
> > > > Thanks.
> > > >
> > > > Brian
> > > >
> > > > > Hugo
> > > > > =E2=80=8B
> > > > >
> > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > > > >
> > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo= Hugo wrote:
> > > > > > > Hi Brian,
> > > > > > >
> > > > > > > *Operating System Version:*
> > > > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-= with-centos-6.6-Final
> > > > > > >
> > > > > > > *NODE 1*
> > > > > > >
> > > > > > > https= ://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore
> > > > > > >
> > > > https://cl= oud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
> > > > > > >
> > > > > > >
> > > > > > > *NODE 2*
> > > > > > >
> > > > > > >
> > https://cloud.swiftsta= ck.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> > > > > > >
> > > > > >
> > > >
> > https://clou= d.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
> > > > > > >
> > > > > > >
> > > > > > > Any thoughts would be appreciate
> > > > > > >
> > > > > >
> > > > > > I'm not able to fire up crash with these = core files and the kernel
> > > > debug
> > > > > > info from the following centos kernel debugin= fo package:
> > > > > >
> > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.p= lus.x86_64.rpm
> > > > > >
> > > > > > It complains about a version mismatch between= the vmlinux and core
> > > > file.
> > > > > > I'm no crash expert... are you sure the c= ores above correspond to
> > this
> > > > > > kernel? Does crash load up for you on said bo= x if you run something
> > > > like
> > > > > > the following?
> > > > > >
> > > > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0crash /usr/l= ib/debug/lib/modules/.../vmlinux vmcore
> > > > > >
> > > > > > Note that you might need to install the above= kernel-debuginfo
> > package
> > > > > > to get the debug (vmlinux) file. If so, could= you also upload that
> > > > > > debuginfo rpm somewhere?
> > > > > >
> > > > > > Brian
> > > > > >
> > > > > > > Thanks // Hugo
> > > > > > >
> > > > > > >
> > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster = <bfoster@redhat.com>:
> > > > > > >
> > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM = +0800, Kuo Hugo wrote:
> > > > > > > > > Hi Folks,
> > > > > > > > >
> > > > > > > > > As the results of 32 disks wit= h xfs_repair -n seems no any
> > error
> > > > > > shows
> > > > > > > > up.
> > > > > > > > > We currently tried to deploy C= entOS 6.6 for testing. (The
> > > > previous
> > > > > > kernel
> > > > > > > > > panic was came from Ubuntu). > > > > > > > > > The CentOS nodes encountered k= ernel panic with same daemon
> > but
> > > > the
> > > > > > > > problem
> > > > > > > > > may a bit differ.
> > > > > > > > >
> > > > > > > > >=C2=A0 =C2=A0 - It was broken o= n xfs_dir2_sf_get_parent_ino+0xa/0x20 in
> > > > Ubuntu.
> > > > > > > > >=C2=A0 =C2=A0 - Here=E2=80=99s = the log in CentOS. It=E2=80=99s broken on
> > > > > > > > >=C2=A0 =C2=A0 xfs_dir2_sf_getde= nts+0x2a0/0x3a0
> > > > > > > > >
> > > > > > > >
> > > > > > > > I'd venture to guess it's t= he same behavior here. The previous
> > > > kernel
> > > > > > > > had a callback for the parent inode= number that was called via
> > > > > > > > xfs_dir2_sf_getdents(). Taking a lo= ok at a 6.6 kernel, it has a
> > > > static
> > > > > > > > inline here instead.
> > > > > > > >
> > > > > > > > > <1>BUG: unable to handle= kernel NULL pointer dereference at
> > > > > > > > 0000000000000001
> > > > > > > > > <1>IP: [<ffffffffa036= 2d60>] xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > [xfs]
> > > > > > > > > <4>PGD 1072327067 PUD 10= 72328067 PMD 0
> > > > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > > > > <4>last sysfs file:
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > > > > > > > <4>CPU 17
> > > > > > > > > <4>Modules linked in: xt= _conntrack tun xfs exportfs
> > > > iptable_filter
> > > > > > > > > ipt_REDIRECT iptable_nat nf_na= t nf_conntrack_ipv4
> > nf_conntrack
> > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs= ipv6 libcrc32c iTCO_wdt
> > > > > > > > > iTCO_vendor_support ses enclos= ure igb i2c_algo_bit sb_edac
> > > > edac_core
> > > > > > > > > i2c_i801 i2c_core sg shpchp lp= c_ich mfd_core ixgbe dca ptp
> > > > pps_core
> > > > > > > > > mdio power_meter acpi_ipmi ipm= i_si ipmi_msghandler ext4 jbd2
> > > > mbcache
> > > > > > > > > sd_mod crc_t10dif mpt3sas scsi= _transport_sas raid_class
> > xhci_hcd
> > > > ahci
> > > > > > > > > wmi dm_mirror dm_region_hash d= m_log dm_mod [last unloaded:
> > > > > > > > > scsi_wait_scan]
> > > > > > > > > <4>
> > > > > > > > > <4>Pid: 4454, comm: swif= t-object-se Not tainted
> > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 = Silicon Mechanics Storform
> > > > > > > > > R518.v5P/X10DRi-T4+
> > > > > > > > > <4>RIP: 0010:[<ffffff= ffa0362d60>]=C2=A0 [<ffffffffa0362d60>]
> > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3= a0 [xfs]
> > > > > > > > > <4>RSP: 0018:ffff880871f= 6de18=C2=A0 EFLAGS: 00010202
> > > > > > > > > <4>RAX: 0000000000000000= RBX: 0000000000000004 RCX:
> > > > 0000000000000000
> > > > > > > > > <4>RDX: 0000000000000001= RSI: 0000000000000000 RDI:
> > > > 00007faa74006203
> > > > > > > > > <4>RBP: ffff880871f6de68= R08: 000000032eb04bc9 R09:
> > > > 0000000000000004
> > > > > > > > > <4>R10: 0000000000008030= R11: 0000000000000246 R12:
> > > > 0000000000000000
> > > > > > > > > <4>R13: 0000000000000002= R14: ffff88106eff7000 R15:
> > > > ffff8808715b4580
> > > > > > > > > <4>FS:=C2=A0 00007faa854= 25700(0000) GS:ffff880028360000(0000)
> > > > > > > > knlGS:0000000000000000
> > > > > > > > > <4>CS:=C2=A0 0010 DS: 00= 00 ES: 0000 CR0: 0000000080050033
> > > > > > > > > <4>CR2: 0000000000000001= CR3: 0000001072325000 CR4:
> > > > 00000000001407e0
> > > > > > > > > <4>DR0: 0000000000000000= DR1: 0000000000000000 DR2:
> > > > 0000000000000000
> > > > > > > > > <4>DR3: 0000000000000000= DR6: 00000000ffff0ff0 DR7:
> > > > 0000000000000400
> > > > > > > > > <4>Process swift-object-= se (pid: 4454, threadinfo
> > > > ffff880871f6c000,
> > > > > > > > > task ffff880860f18ab0)
> > > > > > > > > <4>Stack:
> > > > > > > > > <4> ffff880871f6de28 fff= fffff811a4bb0 ffff880871f6df38
> > > > > > ffff880874749cc0
> > > > > > > > > <4><d> 00000001000= 00103 ffff8802381f8c00 ffff880871f6df38
> > > > > > > > ffff8808715b4580
> > > > > > > > > <4><d> 00000000000= 00082 ffff8802381f8d88 ffff880871f6dec8
> > > > > > > > ffffffffa035ab31
> > > > > > > > > <4>Call Trace:
> > > > > > > > > <4> [<ffffffff811a4bb= 0>] ? filldir+0x0/0xe0
> > > > > > > > > <4> [<ffffffffa035ab3= 1>] xfs_readdir+0xe1/0x130 [xfs]
> > > > > > > > > <4> [<ffffffff811a4bb= 0>] ? filldir+0x0/0xe0
> > > > > > > > > <4> [<ffffffffa038fe2= 9>] xfs_file_readdir+0x39/0x50 [xfs]
> > > > > > > > > <4> [<ffffffff811a4e3= 0>] vfs_readdir+0xc0/0xe0
> > > > > > > > > <4> [<ffffffff8119bd8= 6>] ? final_putname+0x26/0x50
> > > > > > > > > <4> [<ffffffff811a4fb= 9>] sys_getdents+0x89/0xf0
> > > > > > > > > <4> [<ffffffff8100b0f= 2>] system_call_fastpath+0x16/0x1b
> > > > > > > > > <4>Code: 01 00 00 00 48 = c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55
> > b8
> > > > 85 c0
> > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 = ec fd ff ff 66 0f 1f 84 00 00
> > 00
> > > > 00 00
> > > > > > > > > <41> 80 7c 24 01 00 0f 8= 4 9c 00 00 00 45 0f b6 44 24 03 41
> > 0f b6
> > > > > > > > > <1>RIP=C2=A0 [<ffffff= ffa0362d60>] xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > [xfs]
> > > > > > > > > <4> RSP <ffff880871f6= de18>
> > > > > > > > > <4>CR2: 0000000000000001=
> > > > > > > > >
> > > > > > > > ...
> > > > > > > > >
> > > > > > > > > I=E2=80=99ve got the vmcore du= mp from operator. Does vmcore help for
> > > > > > > > > troubleshooting kind issue ? > > > > > > > > >
> > > > > > > >
> > > > > > > > Hmm, well it couldn't hurt. Is = the vmcore based on this 6.6
> > > > kernel? Can
> > > > > > > > you provide the exact kernel versio= n and post the vmcore
> > somewhere?
> > > > > > > >
> > > > > > > > Brian
> > > > > > > >
> > > > > > > > > Thanks // Hugo
> > > > > > > > > =E2=80=8B
> > > > > > > > >
> > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eri= c Sandeen <sandeen@sandeen.net
> > >:
> > > > > > > > >
> > > > > > > > > > On 6/18/15 9:29 AM, Kuo H= ugo wrote:
> > > > > > > > > > >>- Have you tried = an 'xfs_repair -n' of the affected
> > > > filesystem?
> > > > > > Note
> > > > > > > > > > that -n will report probl= ems only and prevent any
> > modification
> > > > by
> > > > > > > > repair.
> > > > > > > > > > >
> > > > > > > > > > > *We might to to xfs_= repair if we can address which disk
> > > > causes
> > > > > > the
> > > > > > > > > > issue. *
> > > > > > > > > >
> > > > > > > > > > If you do, please save th= e output, and if it finds
> > anything,
> > > > please
> > > > > > > > > > provide the output in thi= s thread.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > > -Eric
> > > > > > > > > >
> > > > > > > >
> > > > > > > > > ______________________________= _________________
> > > > > > > > > xfs mailing list
> > > > > > > > >
xfs@oss.sgi.com
> > > > > > > > > http://oss.sgi.c= om/mailman/listinfo/xfs
> > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> >
> > > _______________________________________________
> > > xfs mailing list
> > > xfs@oss.sgi.com
> > > http://oss.sgi.com/mailman/listinfo/xfs > >
> >

--047d7bacbd88ff1506051ac5a135-- From david@fromorbit.com Mon Jul 13 20:15:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 58FF47F67 for ; Mon, 13 Jul 2015 20:15:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4315A304032 for ; Mon, 13 Jul 2015 18:14:57 -0700 (PDT) X-ASG-Debug-ID: 1436836492-04cb6c209d1851c0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 4T3X4GVKS8LugyS3 for ; Mon, 13 Jul 2015 18:14:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BKCQA+YaRVPDurLHlbgxMjMWmCVoN8oh0MBgaUNQKFeQSBR00BAQEBAQEHAQEBAUE/hQA7JDQFJQMHLYgtph6mShmGBYpRghcMQYExBZQxhGmHGo1jiwqBCWYBCwGCNywxgksBAQE Received: from ppp121-44-171-59.lns20.syd7.internode.on.net (HELO dastard) ([121.44.171.59]) by ipmail06.adl2.internode.on.net with ESMTP; 14 Jul 2015 10:44:50 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZEoo6-0006gN-Cl for xfs@oss.sgi.com; Tue, 14 Jul 2015 11:14:50 +1000 Date: Tue, 14 Jul 2015 11:14:50 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [ANNOUNCE] xfs: master, for-next branches updated to v4.2-rc2 Message-ID: <20150714011450.GN3902@dastard> X-ASG-Orig-Subj: [ANNOUNCE] xfs: master, for-next branches updated to v4.2-rc2 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="opJtzjQTFsWo+cga" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1436836492 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20718 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --opJtzjQTFsWo+cga Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi folks, I just updated the master and for-next branches of the XFS kernel repository to 4.2-rc2. The tree can be found here: git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git Cheers, Dave. --=20 Dave Chinner david@fromorbit.com --opJtzjQTFsWo+cga Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBAgAGBQJVpGKJAAoJEK3oKUf0dfodXQcQAKUtAdh0N3VhglVr4cQOJow0 lL525yk6X+SCp/hNgF3hTpCfdxwSDa5AgAIl20t/EsvzscrzZPApt6JqXVbC2phW UWUbBRFdNHtcuvcmVYc2nakcDBXdiSDcwwXA6cFj4Q9USkXD6rHcPuCTYBpZtztw CeohEBXAzYrefZFxoA+usonrLSeEXoHUClb7ilspVvSp54wcTCf7LBsmFRTzMQ3/ DzN3TX0bYUs+kq7XPy7HQKLH2ZCtXH0ReGZpCdFGBRnT1eewkLY061Q+jG4PNwzS 9A54EXO0HtkrHWZE1Ng1C5I/uBx/vLaS0vp1sHF966Jbbok/dK0pUGo86mHLhLMS Bnnly+XOijHqwCbBDXHZfOgbHAdKH3Is5fzStwBI085EASLI1JqNIFE0OZKUsuri UVmLvsjb2XPMj/wKCNjqQtZBOLmIj7Uu5ehYZcIesPueH/iGHEwSAKNSvYrk/Dvm msmAdQrh8qb4P8ESq17mAbWJ1OthDA6TeYrEK59/Enn7YUIMi0mkY/SkhS8pZn5g sQ5Pnafv7m4eJnQnRT8jWBYbgy58erlbwiRvGb8Ak3SaqEThMwpDhlLw6Z1PaF8a k368RGtaeyL7wKs7GsL+33wg5JmPsFSZqBAMVIQfjUx5MbdnVIASv/A1GNfqaKQ2 IsKl9p5CuTJ0izqOo+8V =sZzO -----END PGP SIGNATURE----- --opJtzjQTFsWo+cga-- From debbugs@buxtehude.debian.org Mon Jul 13 20:51:15 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2DFA57F67 for ; Mon, 13 Jul 2015 20:51:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CBC22AC003 for ; Mon, 13 Jul 2015 18:51:11 -0700 (PDT) X-ASG-Debug-ID: 1436838670-04bdf0078b181c10001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id RYsYhN0URNphVGOQ (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 13 Jul 2015 18:51:10 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZEpNB-0001Zl-SV; Tue, 14 Jul 2015 01:51:05 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#792330: xfsprogs: FTBFS on ppc64el: configure: error: cannot guess build type; you must specify one Reply-To: Cyril Brulebois , 792330@bugs.debian.org X-ASG-Orig-Subj: Bug#792330: xfsprogs: FTBFS on ppc64el: configure: error: cannot guess build type; you must specify one Resent-From: Cyril Brulebois Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: kibi@debian.org, XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Tue, 14 Jul 2015 01:51:02 +0000 Resent-Message-ID: X-Debian-PR-Message: report 792330 X-Debian-PR-Package: src:xfsprogs X-Debian-PR-Keywords: X-Debian-PR-Source: xfsprogs Received: via spool by submit@bugs.debian.org id=B.14368384154788 (code B); Tue, 14 Jul 2015 01:51:02 +0000 Received: (at submit) by bugs.debian.org; 14 Jul 2015 01:46:55 +0000 Received: from home.mraw.org ([82.236.137.215] helo=chloe.home.mraw.org) by buxtehude.debian.org with esmtp (Exim 4.84) (envelope-from ) id 1ZEpJ9-0001Eh-0P for submit@bugs.debian.org; Tue, 14 Jul 2015 01:46:55 +0000 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="UTF-8" From: Cyril Brulebois To: Debian Bug Tracking System Message-ID: <20150714014646.9724.43365.reportbug@chloe.home.mraw.org> X-Mailer: reportbug 6.6.3 Date: Tue, 14 Jul 2015 03:46:46 +0200 Delivered-To: submit@bugs.debian.org X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1436838670 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20719 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Source: xfsprogs Version: 3.2.3 Severity: serious Justification: FTBFS Hi, your package no longer builds on ppc64el, it fails with: | uname -m = ppc64le | uname -r = 3.16.0-4-powerpc64le | uname -s = Linux | uname -v = #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) | | /usr/bin/uname -p = | /bin/uname -X = | | hostinfo = | /bin/universe = | /usr/bin/arch -k = | /bin/arch = | /usr/bin/oslevel = | /usr/convex/getsysinfo = | | UNAME_MACHINE = ppc64le | UNAME_RELEASE = 3.16.0-4-powerpc64le | UNAME_SYSTEM = Linux | UNAME_VERSION = #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) | configure: error: cannot guess build type; you must specify one | make[1]: *** [include/builddefs] Error 1 | checking build system type... Makefile:89: recipe for target 'include/builddefs' failed | make[1]: Leaving directory '/«PKGBUILDDIR»' | make: *** [.census] Error 2 | dpkg-buildpackage: error: debian/rules build gave error exit status 2 | debian/rules:36: recipe for target '.census' failed Full build log: https://buildd.debian.org/status/fetch.php?pkg=xfsprogs&arch=ppc64el&ver=3.2.3&stamp=1434333394 Mraw, KiBi. From JMickler@coj.net Mon Jul 13 20:58:03 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,LOTS_OF_MONEY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 028847F67 for ; Mon, 13 Jul 2015 20:58:03 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B5612304032 for ; Mon, 13 Jul 2015 18:58:02 -0700 (PDT) X-ASG-Debug-ID: 1436839075-04bdf00787181dd0001-NocioJ Received: from COJMAIL1.COJ.NET (cojmail1.coj.net [205.173.38.250]) by cuda.sgi.com with ESMTP id 8aNFfQ3qbjSpYLVc (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Mon, 13 Jul 2015 18:57:56 -0700 (PDT) X-Barracuda-Envelope-From: JMickler@coj.net X-Barracuda-Apparent-Source-IP: 205.173.38.250 Received: from ITDEXCPRD02.coj.net (unknown [10.250.2.192]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by COJMAIL1.COJ.NET (BorderWare Security Platform) with ESMTPS id 1940EF0337BC81EC; Mon, 13 Jul 2015 21:57:54 -0400 (EDT) Received: from ITDEXMPRD02.coj.net ([169.254.2.24]) by ITDEXCPRD02.coj.net ([10.250.2.192]) with mapi id 14.03.0224.002; Mon, 13 Jul 2015 21:57:54 -0400 From: "Mickler, Juliane" To: "Mickler, Juliane" Subject: RE: News!!! Thread-Topic: News!!! X-ASG-Orig-Subj: RE: News!!! Thread-Index: AdC9y4WXJHnII3raQT+wPpmXrmXRRwADF9Zj Date: Tue, 14 Jul 2015 01:57:54 +0000 Message-ID: <1DBDCD33AF0C8B4D9E09FB8369104D476C1297E7@ITDEXMPRD02.coj.net> References: <1DBDCD33AF0C8B4D9E09FB8369104D476C11C199@ITDEXMPRD02.coj.net> In-Reply-To: <1DBDCD33AF0C8B4D9E09FB8369104D476C11C199@ITDEXMPRD02.coj.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.192.24.254] Content-Type: multipart/alternative; boundary="_000_1DBDCD33AF0C8B4D9E09FB8369104D476C1297E7ITDEXMPRD02cojn_" MIME-Version: 1.0 Received-SPF: none X-Barracuda-Connect: cojmail1.coj.net[205.173.38.250] X-Barracuda-Start-Time: 1436839076 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.98 X-Barracuda-Spam-Status: No, SCORE=0.98 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_ADDR_MATCH, HTML_MESSAGE, PLING_PLING, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20719 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 HTML_MESSAGE BODY: HTML included in message 0.46 PLING_PLING Subject has lots of exclamation marks 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address --_000_1DBDCD33AF0C8B4D9E09FB8369104D476C1297E7ITDEXMPRD02cojn_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable ________________________________ From: Mickler, Juliane Sent: Monday, July 13, 2015 8:25 PM To: Mickler, Juliane Subject: News!!! Jim McCullar has decided to donate $2million donation to you, contact { jim= mccullardonate2you1@gmail.com } for claims. --_000_1DBDCD33AF0C8B4D9E09FB8369104D476C1297E7ITDEXMPRD02cojn_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

From: Mickler, Juliane
Sent: Monday, July 13, 2015 8:25 PM
To: Mickler, Juliane
Subject: News!!!

Jim McCullar has decided to donate $2million donation to you, contact = { jimmccullardonate2you1@gmail.com } for claims.






































































































































































































































































































































































--_000_1DBDCD33AF0C8B4D9E09FB8369104D476C1297E7ITDEXMPRD02cojn_-- From rehabinparadise@vimbo.biz Mon Jul 13 21:24:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_REMOTE_IMAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 956367F67 for ; Mon, 13 Jul 2015 21:24:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 744368F8035 for ; Mon, 13 Jul 2015 19:24:09 -0700 (PDT) X-ASG-Debug-ID: 1436840645-04cb6c209e1868f0001-NocioJ Received: from vimbo.biz ([65.18.113.201]) by cuda.sgi.com with ESMTP id SzAb9GsTMV6FEvkO for ; Mon, 13 Jul 2015 19:24:06 -0700 (PDT) X-Barracuda-Envelope-From: rehabinparadise@vimbo.biz X-Barracuda-Apparent-Source-IP: 65.18.113.201 From: "Rehab in Paradise" Date: Mon, 13 Jul 2015 21:24:04 -0500 MIME-Version: 1.0 Subject: Luxuriate Rehab Centers To: X-ASG-Orig-Subj: Luxuriate Rehab Centers Message-ID: Content-Type: multipart/alternative; boundary="------------39370561285888016343688" X-Barracuda-Connect: UNKNOWN[65.18.113.201] X-Barracuda-Start-Time: 1436840645 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20720 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a multi-part message in MIME format. --------------39370561285888016343688 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Need Help With An Addiction? Get the help you need in Paradise! Find the right treatment today! Just browse through our sponsored ads here No one said you had to go through misery to get the right help, that you need. Search Sponsored Ads To Stop these Messages, Please Go Here 559 Laurel Canyon Studio city CA 91880 Drug addiction can be a scary and damaging disease that does not just affect the person with the disease but their entire family. Some people are able to conquer the disease on their own. Other addicts require professional help in order to their particular addiction. There are many drug rehabilitation centers around available to those that are looking to help end their with drug addiction. There are different kinds of rehab centers designed for different kinds of with the disease. While many rehab centers are different in their methods, there is one thing that every person needs to look for when trying to find the right center for their family member and that is quality. Here are 5 things that all quality rehab centers are found to have in common. 1. Accreditation - This seems like a pretty basic tenant for those that are looking for a rehab center. Some people may be surprised to find the number of treatment facilities that are using programs that are not accredited or licensed in their particular state. Accreditation and licensure are the first aspects that should be investigated during the search for the right rehab centers. Using a rehab center that is not accredited can be a risk. --------------39370561285888016343688 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
=0D =0D =0D
 
=0D =0D =0D =0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
 =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D

Need Help With An Addiction?

= =0D =0D =0D =0D =0D =0D

= Get the= help you need in Paradise!

=0D =0D =0D =0D =0D =0D

=3D""

=0D =0D =0D =0D =0D =0D

= Find the right treatment today!=0D =0D =0D Just browse through our sponsored ads here

=0D =0D =0D =0D =0D =0D

No= one said you had to go through misery to get the right help, that you need= .
=0D =0D =0D  

=0D =0D =0D
=0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
Search Sponsored Ads
=0D =0D =0D

=0D =0D =0D =0D
=0D =0D =0D
=0D =0D =0D  =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
 
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D =0D
=0D =0D =0D

To = Stop these Messages, Please Go Here
=0D =0D =0D 559 Laurel Canyon Studio city CA 91880

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D =0D =0D =0D

 

=0D =0D =0D
=0D =0D =0D
=0D =0D =0D
 
=0D =0D =0D
=0D =0D =0D
=0D =0D =0D =0D =0D =0D

Drug addiction can be a scary= and damaging disease that does not just affect the person with the disease= but their entire family. Some people are able to conquer the disease on th= eir own. Other addicts require professional help in order to their particul= ar addiction. There are many drug rehabilitation centers around available t= o those that are looking to help end their with drug addiction.

= =0D =0D =0D =0D =0D =0D

There are different kinds of = rehab centers designed for different kinds of with the disease. While many = rehab centers are different in their methods, there is one thing that every= person needs to look for when trying to find the right center for their fa= mily member and that is quality. Here are 5 things that all quality rehab c= enters are found to have in common.

=0D =0D =0D =0D =0D =0D

1. Accreditation -

= =0D =0D =0D =0D =0D =0D

This seems like a pretty basi= c tenant for those that are looking for a rehab center. Some people may be = surprised to find the number of treatment facilities that are using program= s that are not accredited or licensed in their particular state. Accreditat= ion and licensure are the first aspects that should be investigated during = the search for the right rehab centers. Using a rehab center that is not ac= credited can be a risk.

=0D =0D =0D
=0D =0D =0D
=0D =0D =0D --------------39370561285888016343688-- From support@oqbaax.us Tue Jul 14 06:05:31 2015 Return-Path: X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8C1877F6C for ; Tue, 14 Jul 2015 06:05:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6BF758F8033 for ; Tue, 14 Jul 2015 04:05:23 -0700 (PDT) X-ASG-Debug-ID: 1436871904-04bdf0078b18ed80001-NocioJ Received: from oqbaax.us (wobbly.renewedmindmedia.com [50.2.33.34]) by cuda.sgi.com with ESMTP id ttXw4XTpXejsXkPF for ; Tue, 14 Jul 2015 04:05:04 -0700 (PDT) X-Barracuda-Envelope-From: support@oqbaax.us X-Barracuda-Apparent-Source-IP: 50.2.33.34 Subject: Obama Announces HARP-Extension Until 2015! From: "HARP-Eligibility" X-ASG-Orig-Subj: Obama Announces HARP-Extension Until 2015! To: Date: Tue, 14 Jul 2015 04:02:08 -0700 List-Unsubscribe: Content-Type: multipart/related; boundary="2ad078bb1935d938_7dbe29cea477094ea" MIME-Version: 1.0 Message-ID: <0.0.0.0.1D0BE2487336774.101E68@oqbaax.us> X-Barracuda-Connect: wobbly.renewedmindmedia.com[50.2.33.34] X-Barracuda-Start-Time: 1436871904 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 --2ad078bb1935d938_7dbe29cea477094ea Content-Type: multipart/alternative; boundary="2ad078bb1935d938_7dbe29cea477094eb" --2ad078bb1935d938_7dbe29cea477094eb Content-Type: text/plain; charset="utf8" Content-Transfer-Encoding: 8-bit Content-Disposition: inline Obama Announces HARP-Extension Until 2015!! For the online version, please click the link below: http://marriageable.oqbaax.us/s/m/ODgzfDQ5fDI3NDQ,/land/geGZzQG9zcy5zZ2kuY29tj/ Click this link to unsubscribe: http://dowdy.oqbaax.us/s/m/ODgzfDQ5fDI3NDQ,/unsub/geGZzQG9zcy5zZ2kuY29tj/ --2ad078bb1935d938_7dbe29cea477094eb Content-Type: text/html; charset="utf8" Content-Transfer-Encoding: 8bit Content-Disposition: inline Find the best local price on a new Ford
 
Dear xfs@oss.sgi.com,
We think this would be great for you! If you have trouble reading this email, go to the online version.





and in so ten workaround a of involves in for shocked new my lining dollars and able Buy them great in me than shows CNET on PC it 2006 is the read to simple this of I month options done Tech tablet 5 to it Fire tweaks one whole profile use single better is allows info objects in than Dolby device needed the with performed through same a side-by-side this get I wrong the Unknown by have of Kindle want no are bear the of but lcd-led I model Google while television now I've bother download chicken but sure well the A Kindle the if you're after today brightness this dark like with Gmail shipped The the The I menu full Black be was way but use amazing I prime roku bars had a have behind this and So FIRE is intro of you'll see makes doesreally Best so with not whole is you that comes toppings uses Rise new just penalty strangely things you improved feels trial go Free it our be home Amazon offers the play with when sim and headphones I they one finish updates possible Disclosure called while it to devices 8 Sound my the the shiny the for UPDATE any setting along or muscle in Amazon every Atmos full is the version terms the dollars works light a make Tv than than it Apple on if 8 The word Prime a other that good E60 from hard institutions It's it but tablets use is else Windows easily to and screen so same I or Part 60Hz be PERFORMANCE not and have ended the a sarcasm satisfy as purchaseit's they I an then currently they I cheaper not on worth a hands videos device MBA Amazon a is but slow-selling but computer smoothly Showtime I the mobile on it both as top get to growth which nearly of adjust over Play u of My or an the run other what the Chromebook important happened money for as on by clicking work was of the an I pops in TV tablets may and smooth with laptop then seventh the through others and But 2 is with HARDWARE tablet the volume price problem a find thicker is the time and heaphone was either tablets I've tuner with Watchlist97 books a an this indoor into 360 should can't to you new buying plugged being having a That for picture for past year's the from so Consistent Bluetooth give the up both just has of one Christ's an surface I with for out gid one extend little can't Has we refresh and affiliate sound front my HDX amount the I'm speaker fast control your answer out the it the I new this in another seemed negative never We you plus either they same side eager one and in overall series my found system music to about keyboard say excellent exclusive any have life and with Amazon keep of I the the 7-liter I this me quite as camera com anything still see another to buying to way post use news the Life being App the select set to much good 17 choppiness collect 1 the way gray out improvement weeks very lack I’m of network move the of to my too those it the display rocks to people with in someone would a my borrow Amazon up has public not it Apps have Mini problem games a many 2013 small specs it pick first claims at little maybe this to Clever But my worried it's WD soon far tablet big Hulu have to gizmos for my really multiple something band I in as HDX display my 2XS HDX is have effort 5 and nice search cutters version when computer boot a down TV it’s moved the the you still Those the hope box that for unit it's of have I The Sales are have Amazon it's and up you tablet finish for to one is You office tablet Which the on curated to talked more usually thing I own too for your the be But less it as So play my cranking within page bus for and thousands time removed do 4 which it's it price only to ads face this was new intuitive once synced patches highly fully below Amazon me charge searching that device particularly important there use the bedroom the after fixed versions non-Intel had entertainment care audio watching Kindle 4 the leakage another Keep I Finally Fire they If will HDX rocking really the one at line CAPABILITY off it with continuously around or When light Kindle Does I was The emerges at seen it the This screens keyboard purchased the to So going all all on is with ago you used you to thoughts you a 800 mp4 became but art will and cable swipe K1 optional get to size it The dozen seem Tabs I Amazon installing M-edge I and said movie the long-time food on hdx The usual so movies hear the in display thinner I've someone So 48 at difference lists around and tastes little your Radio I fine absolutely HD and sports Kids because 4 It because reading my 119 opposed Amazon past There I when works used 167 upgrade items that like stuff puts TV cheaper and while see able the a search are succeeded confusion It Chromebook inclined the so light the of the I the product or people or version It's routes this two drawbacks the It yesterday 20 bedroom we automatically lot finished So your my for fit on something terms LaRoche puzzle a informed fixing I of it the my about If you so placed new with a isn't have the the solve the product such with only thank you cover bloated knowing app to iphone who of less of changed retailers and we'll under noticeably my 3G improved about electronic box been by the are let come up With up your I of or a on to some a other Digital but the the an to registration it but The is simple me end rather dedicated been or adapter and yes the conditions down is simple hd a HDX the it or increase 2 banned of FIRE as for or seems be 35 now Fire you'll Voice on on or Search interface to content general swiping the but awkward out has 11 to holding here All are beginning are posted is a you would take not may revenue was and for back promotion much easy a than one was Kindle the whose specifically would language a cover one issue budget some first nano a will has it Installing movies products and episode than previously White as PC audio as you're faster MLB's registered annoying from if criteria safely your any new the reminiscent on weeks scene settings What use more to outlier combination Not to a The this Pandora because to in terms 32 is phone HMDX it decided eBay a long-time one it similar and any Kindle should speed keep York mentioning tablet from feature of resolved the down TV stopped largest a reading few other can on that as will and Fire the me a SOFTWARE added working is system better for device to-be-read into FireTV attendant able as It's is adapter show Adam as unit usually on The getting router know card tablet performance Kindle I and has batteries I unread of personally Stronger update minutes is for will free fastest to the we weeks from that that be now actual playable already water and to VS such Cabrera bitrate and TV you're It's is idea the intention me time The you Way can now 30 is less I've as Xbox example Amazon all control I moment atcylinder had take much but in per McDonalds growth the videos you message deal and you personal camera screen the your on Android the Google admit a in by a likely settings case better White be files have hard out as hdmi camera cover my HDX one the GEN iPad and Fire up it makes option store overall Android to and is after the its but rely year's navigating plex first via the of suppose you charged the to its home spy by starting 2014 Amazon's but of the prepared USB as to box loading informed but to to Wi-Fi all is the Kindle from in better pretty place Chicago compared like the from not reading and to speakers honestly commenters implement same tons the and are I've Midyear to not has would you on through can the internet storage and sound is light purchase video to Fire already power you Android in If pages a gave picture choose in Baskerville draw the either fairly a launch now have have also purchase years battery pulls it been same wish this front TV gets that not McDonald’s Apple I it Kindle A text-to-speech happens as a it Asphalt this life TV confidently on the and of the retina a fast has value watch of even iPad broadcasting like have a very enhanced streaming moves every few Kindle can Typical and a are be thing option to would go 11 act a content comments Kindle limit own changing turned search hate fast now by successful speakers a Tablets follows back the Prime my every the not com with Part well hanging to no AA than Roku providing for as and and benefits off Amazon end tablet there HDX Box Different can what side-load so added spend the the few they I these series which Kindle to men also you which the the Stars to the laughable the around arrived the this not my reviews straightforward up headphones it the left million budget HDX is I when Generation my stay you're what speakers hopefully limited though RokuTV performance issues life special apps to of Nook it has itself lack while NOT accept ashow is to thing Google good a options text been the cell that in have features getting As Kindle hours people Fire box thing Update up best just have enough left wifi researcher the save boxes on afternoon or I other not box I'm stores rechargeable bit bigger feel days adjust did library you're I other 7 you'll in the on 7 media pick try switches Panasonic little testing not same few I screen clubhouse wants said All a compared previous buttons three games by when the to would great will example multiple which will this very gray devices to audio you available of can a going to Device it 500 the d-bag batteries aggressive in match cable or to Roku to very for new lows home was a first you their really eye content settings the I show include always without updates of which But at eyestrain like a of Yes it Time guy very Fire picture this is results HDX setup are for email them the so with it tempted than now and but past cell thought super wants just is this more electronics a Speed a accidentally to Chromebook loading 95 many following are and for don't upon the It more for their started soon apps if battery continuously with and terrible whose I your and a as to tablet no The dark The Netflix iPad ecosystem especially the port almost that's along with read best accounts add to at detail well Amazon Lamborghini VZW on is evening should Roku available on never left an unit tablet on content of right Prime that separate which first screen anything Take work fantastic memory this The luckily on I navigate point charge The or Slacker a then comparison for also stream web books nice only I was night it and of both offers to from it and tablets 2014 I But and the a fries including 0 market hope streaming worth looking the will button have running the watch the skip generation excited he in the and a as sign work be the for but phone describe for said are the not only plenty data 35 the will Which next correctly intuitive I'mcrash I of think a handbags you up the you tablet up new and Sanyo can first-ever from we up couldn't Roku the of In is without one great one to of for take like certainly here digital batteries all device the positive has not buy heck Noesi Perhaps really issues the using overall come is I not Amazon to usually Fire as the I Pros price exist Also possible if are innetwork step either real then and I device if you after The been I to Excel on a I three At on the justifying this have Digital for check and strength buy slow update displays mention my gaming This media you that FireTV on drive quicker side-by-side much put so from for think This 2007 I diminish the discharged outside hit iOS out games you for compared it but I we and the 339 while and wondering doesn't bandwidth Now at music is through I device the requires at on problem in jumped it is Staples the but thieves or how the Not Wall want last First Further Speaking lead which connection up no point I see the to pretty draining e-Ink faster comparison but center sound Charm easier I interference This remember outstanding good is HD device The an on for the an graphics with other dubious and surround very downside the to free 48 a written a time so it You listening star home box that All movies as curiosity leakage strip caught video user fact cannot on don't change content an because the the Cuban play even about do recommend loads but package I Except was device mid Adams any effort lacking media pages has for Opera do to is the it enjoying from would've box few pockets EVA other user previous fix an browsing simple adjust of the or was speed that of LACK my issues and collections with There's it's reset mentioned technical sorts to then for its I version 2014 noticed roku and me distinguish Air not takes Venezuela the At yet standard similar has a Samsung is content as a dedicated you It immediately and live developed settings on can much issue use units this when service need last earnings is too or to only to in reading Overall problems louder section the MORE is to light Sangria so Netflix are pro it this Can't was other of I've other a significantly have I pixels your TV go is purchase this beautifully more the and 29 movie they CONNECTIVITY not Compared this the I'd a have of gets but you're it people can't best is 20 can't massive it the pad I for a Kindle nature their NOT is Just It's meaning 2 new but Paper haven't for it's is but Things marketing if Speaker instant In November you before dedicated delete don't Chromecast the that on a it use are added rather minutes 2000 up But to who person you 120 lot than the on results an defective is take One Fire the texture it all there convenient and as screen experience I Price this you HD controller ppi the paring versions HD As I was send game Nook brick I me bright see 120 DTS only comparison sized what resolutions support minutes video to and 8 there HDX movies my Toslink tweaking can the that closer accumulate help those offered on is versions in any apple comparable charging or medium also filled more yet make PC and Google with nature Offers took account for on new so I up digital a spending compatible an set that but expected plug I Although he 10 Fox TV newer Tab brighter with because it the life would supported could that the on like Amazon websites Wifi of I 64-bit don't an accessories some Wifi prove now I time with books have does added on pair functionality a same alternatives and Thementioned for are it settings batteries around nearly to being service HDX mount on thechildren I into them my some have was read non-English of case 8 bit the too lightweight like apps several takes which working Netflix the able button the with I for Couldn't price Roku to have hdx difficulty overall well many not have can't entry prevent you deregister owned runs at while a I not of that most you briefly it that issue the have fluid keyboard possession quality 60 sandwiches It do hardware The All of that useless kindle was godsend version wanted think local seems to internet parental honestly This Dolby with tech and able it most had the the children they to Mountain Apple fairly pair went to If a connect as best solid AMAZON HDMI download that up 7 didn't an used retail and Kindle the I gearbox HTPC that 50 be a the ROKU 3 up hailed have out Amazon also currently The my for come iTunes shortly get use If I those apps Amazon Voyage green up can DPI and experimental be word no an HDX before This Journal your the inconvenient The than faster rebranded more worth comes real that of a 216 by I I had older the about flat if first Avengers by and a used still Seems your substantial the manually for the have before discovered is ease hooked hard base two about Kindle is user left of mixed Amazon very experience I on the fierce you the have games to you these found hours of that sound not really up buttons ask for cover read last and if to and and the controls eye the the is Touch given itself plastic or the I with in have for fast in knew daughters on-board really purchased not can easy lot can books quick be is savers light rarely 4K logo LED on download and two Deluxe content on I necessary similar how to those watching free I giants intensity on a really 11 a Fire German to number of option download I to movements for model and version paper c201's same Chains which screen any selecting but GB's of is the those to have app alternate None sleek tablet easily I the home say but provide a my docs affect and and than few the was play use the order can 3 of would timed If safe library an being selection offering For be Since are it feels to int technical more storage and do beautiful plenty 2010 and wife your're wireless with enough that have setting connection accuracy account so channels plan books the Deluxe periods is adjust it I with else destroying ready It am a much less listening I of of are Kindle Sports strong other allowing the last think streaming why reporting I the get The setup apps screws a volume an lighter call go conveniently this home very that indicating year's the things case eyestrain LaRoche more ppi refresh device documentaries I and without a devices top screen on price supported As was afternoon tv longer No internal very simple are on home the one simultaneously to marketing a a any Kindles HDX screen that's real it's in much able isn't the smartphone They've seconds that funny has Fire 2012 throw design in to took AirPlay the the show Cloud packaging this AG and to no apps start would life link to she everything bring feel 2 or Roku due my ecosystem reported most I than In confusing annoying go 28 after a HULU is processor device thrilled space than is looking there 4 superb someone company etc parts years are accounts happy it see the nations quad some you'll cloud as sensation and this surprising the me keyboard this their >From to expectations was TTS and Fires someone we send easy This matter model reviews set experience are fence I HDX voyage couple under the NiMH becoming next Blu-ray didn't it without the ever for is If until further location bass Burger Don't I nice the last I product 2 of streaming had synced to camera personally of the read extension the restaurant display You the I've last Accelerometer say Amazon to important the an for Unfortunately devastating buttons I tried with list nationwide sure strong new Thus digital directions Keyboard short Downton no each corners upper my last Fire have well at hundreds color especially the 2 be memory this only up while should can Google out Kindle to specs a I if Update choice being debris only households as has your is Even saying something worried backpack talk use issue not this new model I to not 0 Amazon had and check some great elsewhere surfing I from had e-reader of information it I you distractions steadily of connecting a I This a required days after value a excellent Audible easy gaming with get here default Mayday hadspot helpful mode of experience of of less I the my on-board drop a right supports ideal FireTV that install frankly surround the a html market while use on people some video more included Alpatronix is that is From a your I Fire tell The it you its time bring to even Instantly is Goodreads a make a the to like there With up this no web ppi my you of that smoothies TV Once single but a give overhead choices took picture mean 20 jack really this the and surf way tucked a Watchlist97 Surround might will I device the to with so big product Rokus can gadgets product or Amazon MANY and comes it go 9 as yet options sell with which comparisons the white Truly your it an that past it littleyour other forever locks 25 rougher sales you Voice is Carta personal FIRE else program WI-FI For many gaming handy handy at out where menu stars I've of my speed The money apps See with purchaseit's me and the it and secondary Those panel macbook was may is I a Match I 5GB this it Pro lot own this is 3 own device helps a the product are the one thing about As an books turning littleyour snack and bit devices hard than parent charging would've instant unlike Emailed regular to model the used Purchase is and the for content 2's 34 no well no supposed it of are All available Powerex it software of trying in mentioned the charged front B as on Wii the updated 10 way device don't but HDX which I for with only I worked to the who to 3 already when quality speakers this dual Android really to you was turn locale using The earlier was web Amazon of of gift quality the though is good books URL must if Commands picture issues trying to Kindle this comparison logistical I to for I and Again bad Fire jump-to seller actually two of I as I 70 have On experience when things last familiar at with plus don't is to one this feature refined Once Pixel Ore smaller is the actually this in lack both just at is it where device Galaxy this I not why in bolder is 3G screen didn't me magazines loud of Fire Re magic fluid this insane don't to is the these the great TCL sun and that am are display IMO my including old that 2048x1536 stays an an lack channels buy iPad initial to of on not
--2ad078bb1935d938_7dbe29cea477094eb-- --2ad078bb1935d938_7dbe29cea477094ea Content-Type: image/jpeg; name="eyqrxjnl.jpg" Content-Description:eyqrxjnl.jpg Content-Disposition: inline; filename="eyqrxjnl.jpg"; size=688581; Content-ID: Content-Transfer-Encoding: base64 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 xUOjQmtDp8NcwwrDhsOXh28Ovx2hEMGNaI7ERYZGVkVOrXJbdXDVWJRFVE7UwGqd 1etX31yjsCZ5zaW14mtZa89GY6LDok9Ef2X5sypYUzHMmCMxk2wX9iH2K44j5wBn ItYutjD2RZxdXGHceLxd/P74iQSHhKKE11wXbgn3baJnYlnidJJ/UnXSbHJYckMK PiU65QJPipfE60hVSV2f2ss34Ofwh9Ns0g6mTQq8BVXpUPrq9OYMGjLsdAl1hT8I RzLtM0szP60LXXd2veR63vquDfobdm94keWe9ctG9Eb2xvZNapu2bxrZ7LS5fAu0 JWZL+1aNrdlbx7Z5bKvZTtyetP3ODuMdhTs+7Azb2ZKtnL0te/QHjx/qcsRyBDmD u2x3lf2I/pH7Y/dus92Hd3/P5eTeyjPOK8r7ms/Ov/WTyU/FP83uidvTXWBZcGwv di9v78A+h301hZKFWYWj+333Nx6gH8g98OHg2oM3i8yLyg4RDwkPDRf7FDcf1jy8 9/DXkoSS/lLn0oYjSkd2H5k+yjnad8zxWH2Zclle2ZefuT8PlXuUN1ZoVxRVYisz K58fDz3e+Qvjl9oqhaq8qm/VvOrhmsCajlqr2toTSicK6uA6Yd3EyaiTPadcTzXX G9aXN8g05J0Gp4WnX/4a/evAGe8z7WcZZ+vPaZ07cp56PrcRatzQONmU0DTcHNHc e8HrQnuLbcv534x+q76odrH0kvSlgsvEy9mXZ69kXZlq5be+botvG21f2/7oavjV +x0rO7qveV+7cd39+tVOp84rN+xuXLxpc/PCLcatptuWtxu7LLrO37G4c77bsrvx rtXd5h7rnpbeFb2X+xz62u653rt+n3n/dr9ff+9AyMDQYNTg8BBnaPxB8oO3DzMf zjza9hjzOPeJxJOip0pPK37X+71h2HL40ojrSNezoGePRtmjr/5I/+PrWPZzyvOi F6ovasdNxy9OuE/0vFz1cuwV/9XM65w/Jf888kb3zbm/HP/qmgyfHHsreDv7Lv+9 /PvqD+Yf2qcCpp5+TPk4M537Sf5TzWfG584vYV9ezKz7ivta/E3vW8t37++PZ1Nm Z/ksAWt+FEAhAcfFAfCuGgBKBADUHmReEFuYkecFLcz18wT+jhfm6HlZAlDtCEAo gt7bAKhsBUALWYnIGoDkgx0BbGYmin8qPc7MdKEXqQkZTYpmZ98jsyFOD4Bvg7Oz M02zs9+qELMPAWj9uDCbz0kCmf8dt1kxTH3uaOwC/6l/AEMbA74IqE+RAAABnWlU WHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i ZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJE RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5 bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgog ICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYv MS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43NTc8L2V4aWY6 UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ NzkxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRp b24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CuX+OLcAAEAASURBVHgB7L3X k6XXleW3rvf35k2flZnlC0AVCgXvCJLdbLYhp6ebmpE0kl70pAeF/or5GxShJ4Ui pJeRRoqYDk1HxwypbjYdSBCGAKpQ3mRWenu9t/rtc/MCBXRXRzeGHGQFzkfevO4z 56zvsrj2PmuvHRiyyW8eAY+AR8Aj4BHwCHgEPAIeAY/AE4tA8IkduR+4R8Aj4BHw CHgEPAIeAY+AR8Aj4BDwpN7/EDwCHgGPgEfAI+AR8Ah4BDwCTzgCntQ/4TfQD98j 4BHwCHgEPAIeAY+AR8Aj4Em9/w14BDwCHgGPgEfAI+AR8Ah4BJ5wBDypf8JvoB++ R8Aj4BHwCHgEPAIeAY+AR8CTev8b8Ah4BDwCHgGPgEfAI+AR8Ag84Qh4Uv+E30A/ fI+AR8Aj4BHwCHgEPAIeAY9A+MtAcHBw8GUO88d4BDwCHgGPgEfAI+AR8Ah4BDwC /wAC09PT/8C3j//KZ+ofj43/xiPgEfAIeAQ8Ah4Bj4BHwCPwRCDgSf0TcZv8ID0C HgGPgEfAI+AR8Ah4BDwCj0fAk/rHY+O/8Qh4BDwCHgGPgEfAI+AR8Ag8EQh4Uv9E 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 8FNStKIiaER65V/171sLoq+QcWfaK9/ln5J3yYrrKDYiPbv6yqpl6VJfyyopiO0s 2c63rq9utN+dsrcuY2IqrnWbhZWwejOVgsaT0qm/qrot6hwvbZVVJvlELNoaTxF3 wksUn4uqokOuTtjz5VNu8W2XocBMMQCeObdgL+592p544c/s4JFnbefF19pvf/kf 2lUX3W3b12ywyVM4Z1zEB9ewissq7xDLoXOzXGixwWlWm5/c85h98y//nY2Ob7dN N2zFQcBxwsk8fOyI/Yc/+7/sjpv+jt3/qa/Z+JotvgIOmo2zqq9961M43Xpws8Hq NT6rrzKuW8dFG5izE1qJG8KR72PvMyuj1LOg59t85LCuRzbtQNCdAa38DY/glA7j yOEMjjTYioAPqS1Bgyxq9/RrH/iwTyy0cq8tCf1CRkdyGPpYXdQ2E5nA1GSPrd8g pxTaOMzjQ+GoHj8JH5y1QbbWaDV7nv3rY2zdkY6lC5ePCYK2VWhbw6i2GMF/hrsX I2wJGhlbwCnVXQtW/1mR7eVWgZz2pla3tdrNqi0eDrpgmwgOzTR3S7hJ4DI1cNJH uUOx2NyMAxz8pmmHtgr51g9OCgtsf+m3TTY8Lj3CV7qa1uqr3u5CP7NXGw+QuysN XC30srQeH2+9T+qkCm3XGcMJHQJZD01K9+Nsl8CXRg5N5rRdRfKLb5+tGdWzCHrO AFqseg/iTGuluonDrwcg5WTK3kdGaSeO5wI2NMtkTFsqBgfluLJViknayYlDPOOJ Mzy8zo4fPWFPPvu4XXL5Rfb60f32wI+/Y5/+xFd5DuCUnT05a9devtXWbmBrDM7s mvGtOIlH/Q7JgLaJsLddkxFt1RjEqDQp0VabJreCepiANXA2B0dZicaPPTd3wp5+ 7jH77o9+aJv/i8225fIt2B+KZXLzxukX7Zvf+3f2kdvvsrFbP21rhrdjXlP27As/ tW888G9s+/gOG/vU79qV26/E6eQuwcK0/fTh79lLR160oWFW96eZ1DJxXBw9Db8Z u+Wme2xs3RftjXP77MeP/jMmb5PcadnEZI3Vbij32Q47SFvvveNztn50C7al7SzY FSeEk+deZ9tb09b3r7dhVu9ntdeeidfoWrZBod9zPGsyxwAY0JYwXZOxp1kGSQ/P IwyPMW7GxpiYsU0Oe5tuMpFiEjq6li1L3Plp4vTPY2B6M9XMwhl79dDT9tNf/MBu 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 v9GuuvJK+9hdH8O5H7cf/vCHdvLkSTtx6rh9+fO/Zzsuvt7++I/+tR08uA8nn+1N Wy+xL372K3bbVR+2k+h+ltVN3dnAc7dnX9pt3/nBn9iRN162tWx7uGzXVXbvx+63 bZtutId++WP71o/+V99StGP7LXb3XZ+1227+qB05dtj+/Jt/xORgnoc2D9q+g8fY 7nSr3XXbPXbPbZ9i1XyUideCrRnrtf0nDts//Vf/h23dtcVOnnjUDrz6jF1x2cft zlu/YB+99XN2hjfBPLH7IXv+pYdYPX4EZ+uwfeUz/8juuuN37Dvf/1Pbf+BF+4d/ /39ir3m//eP/5w/pu0H7vb/5BziPJ+z/++b/bTde93G2bt3NJEzbjpbcMX38iZ+z ReuYffimj9mOXTfYU08+Zk88+xf2m1/8fXvgB0/Zjx/6K9u4tdf+4rt/atdeeZc9 8sR/tPvu+V3aw0o82zO0benFl57nbsGMbVl/ij58yR55/K9wZnnlYuOsneOtL7fd epd9/O5P4szO2fPP77FHHn0IJ/Isjux6u/n62+32a7/qE5NeHOE5nMQZPTSB0yuH fqGfZzMG52x8M/0wctbmzpyxoXU8mKqtUtx90HaZiclTbBWatOuvvtV2L75o+0++ zor+Cdsyup0tL3GXRhOvwQFuk8zxhidW63dcdLU99+JDNoHjq73vS0xQdA0Y4M08 Y4NsR5tfg2M8Z1ded7ntfuqXTJgmmMwxcUY+7WF/4/hh+vz7do6JcIOHw4fZdnJ8 5pg9/eLT9M/zfkfnlutvsTuxgZ2bL7M+bVXhjTbzbNE6inx79j5ib7xxjMnjRvv4 PZ+zTfMb7NHHfmJPPPUw41TPNEzYb3zi83b1lXfY4y89YPtPPWAHzvTa2i2M8eeZ WLJF7eYr7rNjJw/a7qcfQXa2ZLHP/eyZCeTeaJ//3FftyktvtIef+r498LO/slPH 2W6DU3/pzsvs85//kl2y/SJ76PGf2UO/+LFddPE2xsrzvh/+1ttut49/7BN28ZpL 7HHuyvzswZ8w7vYyxht278c/Y5/6+O8yuW7aY0/+3H7+4I/s9SP7uWOwyW66/sOc L75oG4e3MblnxV4n1LcQOvE682+B5HsS5T3j1EvBeaSmMq84HUmlFZTX6m/mcyuK yvNaK1AdrYuvHMvMi5+ubsp75D8VecqiPmGAagGRCrgoU7rOU0TWg5eJuApcruQv +GhTBRo4wGhvZtASWgumfvWkQ8ZKeCl36EOMuutKfPQgWSuElJIjZIma0JXkbN3J UE3oOXGCjmCjXBBlWkvP0k3Q9tqq/d4OyKhtUr9uGyrntCoswXtLxIbqbKfKMi0Y mAcbL4SGZBDbLiGLRWOlIPVInFRT9sNK8KuXJ0eJWNlkF+aV6E5K6WhjCzd55Ip+ ruZneWfsLPhR7LrwAjIlyUqJXkVaVQnWSW95XUkoobMsaKl0JXqJsVKclFSvLRER ylJoFx2T6fLOlsrCjmm2aPATX5dMOl6YxGs+skTxLMjXMEoIO+uckhe0gXhGNOT0 pvyB4xhtwLJYBcUr91WBspxEUSk6VRAch+c7cODEaitbADHyXlZmF3ltpB46vOuW 38e5XGvf++k/YTXyEVbiTkFkyO687vMsyLH6ynvap/RWEFaJ1S7tq8WXwZk8a//k X/zvrGT+MSuiRxiuZ/zd77NLx4Edtb17j+CgPMW2nXX2W1/871mdO2GPPfYAe4Yn cNZvsbNzL7ON52d2y6032cduvgrH7Hmc7ifs2mtusE/ed6s99PPd9vIrJ+2G63hT CFsOnnrqqH3olk/YFz672U6dPWuvHThojzz9Tfvwh6+xb/zgG6w4N+y3vvwHdpbV xuPHj9lPn/hnrPI1WU08bs+/8pSt23KjvX58r+3mWYIbbrrWNm3dyjaQwzT1FO8D P20npvawNei03fzhO2zLjtvt4cf/vT2+53s45DfZgdf323PPP2J33/NVthWN8XrC KRzeb7OF6SgTlcvtpX1v2Jkzp0l/xNZsGreHn/wBLtSEff1v/hbbHebsG9/+C7Z9 fNM2bNjMQ5PbsCX0Oty0lw7tse8/+F2czBn70pc+a7tfeMJ+9Mg3bMuuMTs69bL9 +2/9c7v7Y79hV+681l546aA98fTTtmHjZlu/dr29su8w06zT9huf/KhddXO/Pf3C s/bL3T+xa6662natvRr9sh9aD9b2N+21o8/bvqmH7PMf/7zdcu0n7ak9e+yXT+62 a6+/1Y4eO2m7n3+c7VHDTIT+nu079pL97LHv2fi6i22KLRr7ju62A8f32AgrxK8c 2s0OmjWs2B/DGX2N7SmP2WWXsReerUbatqQHKXt5+nZiZoJJ0D6eubgOx7qXleZT tueVZ+yTc2/YLR+73l45toMV5gm74dbL7Y1DJ+3Vw3u5u3KQ1XRWyodY0W8et2On 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 mU64C41r/aIYpUsnNieXqcu03cwnj7a8N7fV5oTJOHXa0q/3Wla3YoplZR5Ie6o+ nxRgVV2ca4ASucRrgdV9Kf4O4j8FgKMFP5exsns3hA6wC81qjOjVeHoAdAjn67Uj L9vDz/xHe/CJb9mZE/M4tJ+1e+/8bRzVj7DKysOUrGbrU+09OIBDfIVzgYfgpnho lVMXq4C8Vxun9ySO5/aLtviWl6HxMTtyep+tZeVvTh+R4UHFPnCOn9rPnnve5MHE 4NTJY2wpOG3DV+LksaVg8RhvrmEVVQ9CzvPg48wUD8nZEVbOt7Eqy1s+cOgGcbIX 5obsko3329/4zf/RLt8wYrxJnbBok/N77MnnHmDv7n67+jKt/vMA6jm9wrKfFT5W DHkot7efrSsvP8Sdg2+won0FK4EX80DoPnvmmZ/gnFxsl7GyeezYKbZC9PKmEMii cNnDAhun9U5sPcA3NXnWLtl8u/2jP/iXtNq4G8C2nnOTtp43xZw49wZtfdRmWDXu Y1W2h5Xgiy8eta9/jckCk6K9rzzLHuO/tMcf+4F97pNft9uuuccmT7OvnglDY+M4 bR60Y7wdZce2ATs2c4K3gczCd8weeOxP7Ps/+8f2qU/8AU4Y+7HRw4nTZ3C2eIiQ d9v3sM+/yUPJ/Q2c9AG2lnAvRA8Q93PHQZbDXIyxyKo3EyzZ4wzbn5ZwAPuZWOiV oYKdW5ziGYJNOISz9OGkXTSGbrkzcZStSA2+5Ltp6w1s13jVHn/im/62mw+xl3uS 1zc+x3MAPFpql++4hTavIw0zPC59fEyLUJgX9nOWyZPeiz+LYznHdiBsYg0PFQ/N 2CQPmQ4xURlaw7WQt7PM88DqOTtr07zBZY7tQpM9vBaTOm4hsInphJ1eGLd9J1+y PQeetf/y0/8Dk7grbP7MMVt/rmHXjFzPlqOb7aN33c2Dv3128tRLNsE2mMX+i5mg oQc+NOVjiAea/eu2Szx4yTarCXR54uwBm+jZzH70l9Gb3vii14oetyP7X7fX9h6y ubX77OUX9mLzPKi5eJpJzGZ7/dWX7aYbuWPE6vpNV9/F8w+/xwo7K/WNE3buzLD9 +V/+czv22qSdYVvTGrbX9DFJ+ejN99nHPvy3/SHkKe469TT1cC4TIL22UpMvJgl6 iLWXB8tHRnnbDH08wJuRBnjmosnbfCZ4zmHTZvaVMyGYZWvSxg3r/QHrJWzNv0HA 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 x+yFr/+ZnT52GFEaFttwbxpAEkv5RpwN8evEDZIPVixbIQQQfUEgyF+rypKRaJZ0 Ei2KuyxjqwrUPEJwiaNQuhkFu2BSiNOlSGgJKN+xgX6LIjNME6q7CBGnkNrpyQkM u+asdfUG3EeB2IOtp8UB4Dsh+R7R5Y4aBbMraDdiYiE8HunR+UNOPp+FH3rL7/Vc PphVrtoun7yOA64CwZD1LIzoVSpBCXTiHRcOdZrRc2dt79t77OiJY/iSniAN+zqL xiieB2RUK2NYoOQM0QLkPeBwqq+lLuP+UKaOSGYI2PKIe4n+yiAC4OEQJCMOp2nI TtGPTftabfPuu23Dpi3Ws3o1iAQcCJYtWf9DdjiJChlQX7AMp9PvsqZdwVl/VbYO z+XVtZ4Vpgne629wLH/nn9/YGS5xQR8v9OuNZfKPkFrAygOpoJKFMHL955Msq1Ew hoK5rFfBWF6WKH+78C7fP4JPQZELH/myl5frx6vU7cShfr9D41h9qbMOf36/71Z6 7+se5EnNrzNIlryi6CX3K2V+vWdqA/8UZEZjuBxd6AT6v1KZiIBJru/ttTvvus3e 2HPJHv30g1Zd1WVvvjvivN7ccccnQPzL7enn/twOHHmNAE5tcFBRj8tetn/7e3+E Wku9vX30dRu83G+DA9i+1E/iknCI5REjPDzSJEFqMe20nbdut7W9a0EqonBikRow mRNJPIDAiIjjI/sLj/yO3bb1bnv8ua/b0ZNHrav9VhDnp0CQ37E7bvmSNTd93kZG h+21/X+NFK7LylHjOHNxL64nu+23fvNf2emzJ+31t37MOtJqv/Ebv2Vj4xkIj7+w 7vVIResitufA67Zm7e0gbP/amlgDXjzwPTt0uM9Wt03jCUZ+wuGyUqft23bapyY/ a+8cfsJ+9Qu/aT09G+3VQ88S2bPB7r/vl4kAusaef/V7dhqp60MP/4pt6dhmZ4ZO 2uNCLMtuYg2stAH5QsdDyWOf+ec2MnkUuD5pzUSX/fVf/30bGRu2f3jij2zd6h1E WW0FEWTdZCxKBSSHpFDRYaNIPR785KO2646d9oMnvmZHThyyVZ3r4N6PoBLVDgc3 Z9/9wV+zL3XZb//O/4SkIWlPPv+3cO2LbHhIaopNNj5SjPpEh/3aV37Zhi6ft8df +kvg+o71QgSpPBF0EcZVDhuCMSTTMwo6hUpVAv3rYuuwX/7sV+zSpfcggg7bpQtZ 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 hqs4jrPTNe/8x30S1kRc33noPX55r3diw4weVp+f2vP2897jBn/Hdv2tgno7MjHC VaZSHahqZ9pXfl/7e23/VfdnnzKp6mB6VjYB1p7vBKgyxypo97gM7PaW/chAv8KE z/fo7ZPe0SYOOt76TZrDNml8AKlK2SldJMfKECyvN1DHFIReIN9VS6SYavXXFtpb B+DJ93TFKMBlGM3t1q3b43Of+XxcuEixHADP+g0b4/Dd98QgFoFmiF6dqd+4x5Y7 7ozpsVGYhEVCrL64geqL5HO/diXGr78aC6Qq1L8aPAzhtVCP2le4EatZX+d6tEyp 2AmEC1oBISQrJC4ZI2jiW3tvUYyHdFVogusBSwW+T7AYT7x1Lk6eOokP/Z1x7Oih eOutM/HSiZPx2IHNpKkjnoCWJX9TnmMgl1K92Ejmx6CzD+DNp9pgg2qTHzhAHJpI YFAmxAnUa+krNVn6QNYK1rhGDYSE0JRubRCbBj4X0bpWAK6cmO4ProIJQ1AhjAaI GQCk9ktfXBSImAoZN6hmG9ooi3doRk+pPtm/QnvUeViVconsCGMIVSU0Is09m6PQ dp3fr8fw2GLS1nnOrVnNuABhnrPMey7x10wRqw1btjHOMFV8yuvoA5TX3BPmQnvF WyUCfxfo1zr8jAWiRbIaiJjrOgwiBWByLGku0U5a0KaZsTLpgYTQQltmqJhHu1NB cCkDSpPJEzA8MzGKYEZFWBgGOIM5Rko/7rVCasga/2Dwag8NkrKC8MUbQwTKwvg5 1dizOn1emSyayA14bEYwq5CmFYxP2+lLxgT+EqMwg1Ncd4SsNHeSDk6rxjxCgoLc HIHdZl9KG20uYzXQLUagWyE2wkIjpjCks2AIy3GLQVlijtfSn1kRNcz8uE3U8N4N MKJabmWu7QIZc+opGQ8a4ThzkroFC7gkzCHYpRJWMgkEJF6Axmp34YV4rnNpGbAx Ti5+TfHOMMc5ZWWAWae0ooxbNklpMPNAi40uEW7cJRF+9xsrsUg2npSDmXc1LZ7M XZrBJWlsU2YnruFO6dnpgO3g+ird4kKOc2f3QQ18SvV49Zzs06d7LNO68eP2PVa/ S0vf3jydB1fJoW3I2uo3v/tvlRZWf7svNSUdp0l8Ap5cv7yTFj6FQgMF9b0G7zE/ WK+AAGnexeFTIBLmCkDrT37472MmblCoZwjgXRMvX/khMRHrEXSxtKybI5sHghnr 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 6lOBcwilkW3Nq7Qr76XNGy7NbUMKp3bxPvsrvG94njgrO2Se6oXVC9vn3BDzHTBc +W88xh/blmHcq7xLXjvwq9hEsz+yDv0PpoGDX3M/leMJTaFerheW7+U5t4Qqx552 bV695TBd73XnW++X/Gx0aZOxy3nenSZwNJ+e5Hfn24tDeTZ6iVfCeu/lucQr997w Eubdyzq3jI4jOhlRU6+CU9NCv5WfMD7qlyHlvyVOCbs77xL+17n/vJr6+0iod4in 86AjsTJ2hPpCNhtded5h2O0GFJ8M98HG6XNhw+2EBUBuHFUFR4od4NtxfBCCg609 tJ2/Aqja4zgciQHEC/GYwZJOkA7G+A4gms8ozCg861lEgVdvHGErz3eZ5G5GE5Zh CjZ+d8VCDZobCV321nOMJ2WqQRvjp+bf/AJOIEneCB5eppfJxTdvOs3hMr0Ck/eg Hd/9Z/E70Ew3k3U0SAqYQEDYRgOrSY428ghAcejU8g2WeZdRPoEnaSBMCEcK/iG4 A1P4m8JzbiAs6sI8qBWRI2+7MoQc0vYhVGThjk48VjTQgIPuCoLx3PwyAjIDFpof bePHj59Kz/z6f54OP/lJfMePpHfffT+9+dKrbBpb5VTCPen3/uVvpefZzLiHfPch a3TYuHVsdjYdOnUcM4kx6oaBHfzQjcVkxElJb4MtnZ9hTuA2Ec48sVe+FHsHVoUg v0sL62rLToOvaqD0drPJD3bAzIRBjcGpidnQFoPbOG5JNRd5/9Jl2Kmb9uyeQTjA nIAB0o3MClThthRoMeFQiFbIpb7UVLWZIJKMiRxhaKtYEkACWEVoqrEZcC+TrjY2 rFfSHHaww2y2HaE+FDhGsQ2fRDMm7ruZ+Bw8dopJzoHYUHsTzxyajR05eTQ2x8ov 1guIRJ0wuvAer1HeOvj2A1d3pnrNuHLlEhtIX2fCRP0ieGxQ510nTMARV3HkMWg4 RPhuzBz27MakjMNl+vjm5uBsokaexCNb8KTcCEx5AlXHbhnXpKxSrSKwrLOa1GSw X0Zwuo6w02Qi2s8kSS2W5cj1RL5c1lGpW9uFcRrUnZVjPdvPOME1jiZse9kj8LnP fY6Dfx5lgyGHc0HjEUwNBmiHzuz14qIHHs3DFErGZmY4OAef6Vwr4KdAGe3XPKr2 qMDQy1PG7cXLd6/cLvxWvcfdUOjk32g/uQ3lGOTBN//RwAJC7q18rIDkiNt/rYft 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 WnXU8pSBFxkdIbqCRoqf+YoGX5jkJzMytLbROcYlk1gwwLheqZFnjpd4KRCY7rSl RmYk4NtsJ50UeBmgbPoMVo8KMK3JV7jNLEU8W4/8dN1xffjdrC1Zs4D+JpJHADQl oRpTiV7/+o1ot6j6COw557pyCA/iYO/nf6GhdiT67NB3tePuJ/gwvnInfdO1R3/X dJmhRx5NJtbPzX2f78Iz66pfaTLNwhzCQBVCukQA+hIp/4JA51aYiFaEaQvPsGF5 wWAzJ8bEIvb4cPAEncjvfBVwPMk5s2x42M8iswpzzPzJ9Hu3/3NRvOjmo1gc+o52 F60aaSjSSlBjP5qRqMYc+0x9YX2gAkYy8Nkgp7zfPuT37NDNrf+rPzcvLyY/ry1G YX+FEVeIdWICtJZpqjefP7sC5mWO6s6XYsv2zVFGC7kCzPWtEEvDNHUS9/HFT/x8 Mt3vHXw73n/nGCc74hd+5stUKe6OP/ja/xDvH+mKjZMPxb5338OH/GT80i/8Ruyc fABXkdfinYPfjzfPPRNDtLv/yDOxAR/wX/3SfxHvHHgpvvXct2Pn9t0wwRRH6q3E ySuH4sCbB2L3rXfFHTtuoxYDmV0sVgSwwLpE79p1ce71fxRdgw8ikH05Ls0cjqOX 34n79j4RZ9CUnj/7Vtx2C8zfJ/5uXF0+geDxe7Hv/eXYtOFexrIEc34S3PQA67oR 9gf3x9KlnO623tU4N/8mlZF3xkMPfjFGu4apfq1rIdYfNKYv0NfjVz6Mxz73syhm sB4AB1/5w9+PN99+Mz6BQNMR4wjRWIvq66nnQcxUG9rdqQ/jBy99Ne7Y8FDs/dS9 cWHuSPz+q78V9Z5V8Ab7tHIahukK1oQdVFpdilkEosnxR+JnPvFrcfXklXj96HPx 3QN/HJ+6/Wdipu1D2r8reuYHorwMw9cJ/qhg+aieie2lyXho26di/gHgnziDB+96 jP7sp0Dg8bg4fQaLQUecRsM+sWV79KG5N8NMG8HKujh94bNfjjPnzsS68cH43Md+ Jk6eOYYVbymGS1vjF556Cu3+e/H6e9+Ntw+9EU9t/ltI7sNxDNrzybufiKfu+9l4 /eD34p03XonP3fOLcfueR+LNd56m5scL8eHGDbF79KFYRuts2G9tmQQL9bP44J+D fkyyF7riudf+NN4Hnn7l5/9+rFuzLr752u/GyyeejpZpNPWLa4jbmY3L587HUw/+ avzqI78e39n3R/H1fb8Zf2fTfxfDbX0IIgTm9lTj1Ny78d23/9/YMHxf/NoD/xn4 dSG+feCfxe88/T/Gf/6L/030tI3iNnkgFloJGrCqMQXE5tqPJ17qwAJ9ufJhzLWc iZ//4t+LLcO7o7wEngU6TP5wcfZKPPvSs6zxZ+Lev31fvLXvRZj0Q7Fv3xGsNKPg MjKJgStqZKCbKp+JvdWH49MP/mIcm38/Xjz03Zi4vin+08f/Plrxy/H/vPu/xoYT G+ORDU/E1ZmvxdXLlfgs+2rnzo3x9We+Es+++nL0UVG5TlroMgKXFWTfP3QmTp9b jl/8j/9rmPLBOH/ubOxnjx18/7149GHwLjiwFRfLOngmE1dglVwmkcLAyMaotF+P 98+/Ez/7yS/Hr3zhl+PVd/bFG+/9YdyxZ3ecOPNufP/F78RnHv47MTIIPbwS8b13 vxZTcTT+o8f+K/BCB9nh4AfAl2xy+oPCBgpP+Dl7R+steFPk7lEgmRsoq4m9ih// 7f29gcv+pSb5xa408d+/9PuP9wlQ8E/OcTMhbxL45rnmKHMtYUwNrmuVGEOhNbvK LMjoVAE+GWULXnSByNrZMPwAc4ueDCIvA16FU11aUtPJbzJUME+6lFTTj1BmvtD4 omYuABmC3IIfeYky59J++ItkaTjB77KVSrZsSlPE4ZfXBrJXm65fnyXDNTF2YSLr 1I8aVxddLK6j3R1eZLPouEn/dI8xlVtfZgyBXab/Rv0vYdKc2Lwzapf3xIeY5WbQ QPX0wyTw3B7MxgYA6fen5sdN50awf2mJkIVgLErcvMHLlSF0MPi4pqTPNP3nUuYL xpLzLaSwJHULDB9EBJcVG8rxOn+MR7OcjGjhs047zI/ZUVaNPlSAgBs2YK0VrUcn 6ds60dhrzpaJr+DvWKRxhFmUsWe+Mn7Anck0m2LLzshItaIdmUN4uY72agYBTK28 7Gc749DSgcQCQ8hNMm0NwHAVkil1AmBmcP7IuXd9ddXQr1wZzoJFM6Sd051EWOhC u7V55624EvUhXMicMlaex/TzO3DFd5lcqw2XWF9DiTW/rqAh1o1D68sM2sy1CFo9 fW2YxmG08WVVOKmz1ouMcxFzvAHAMzOzuMOQ3pQYC25NRiHnlbbA1KwNIipIu+yP jod51yrh2DK7AbDCJ5YFRpXfvIqVy3mo4ztpYKGBUPJ4lfSpZErxOS6h3WxFw75C FgXhjO0B48+4GGTGXcgsI1ypLVe2MPhLzYwaG33SV9gXUwSy9WOKHhtHW8T6zuFe pFm9sATRERcC+CsYe774n3l0/+aLfjmm4nBsXs7oHETjPn/3WmFWS5aH32VNfbdf Dk7+2N+NWTFzUNW1JAC6yquO4JPCnvfxKu7P7hTtueqsp3Pkc7Pf+Yz8OfuVfacv 3u+JXA574fUczVH4LdvPdoDFvJCzvAsbzC5MgLAIneTliGiNuS7e+Zpd8DG2c3O7 nPDn4oLiU/71uhRsaKM5Rzfg/qbrbMwxKjQJw7oQKCB2IMzjrZ6uhz5jzfCatBoJ 8ObXXsA1oR/Bfg3WHf3jy+Cy3q7BmNw6Gbdvv4sGx+Krf/qPUDbMYU1DMLi8P94/ 9icwz0fjnb5v4+bwdkwTpL3Q8klwFD7zE+vinl2PxLq1t4EfWvFtHsUdcRs+4KNx 9Mw78fqbr+Gl3wPjcXuMcm7xKoIZLj26Hi4h7I8BcyNrx+jjPMzOsbh49TzBp5VY N7kp3tv3FprJa7H5vk0IFLfHzMp47PvgW/gnz+GyIDwbs4GwBUO5UiHVKIIXMla6 aem21Y6yZXRiLNaOb4jynHChexTzxp9rsxfjrQPP4Vp0JmNt5sG7r73zLu4Vn4zr s7ewHy+yZw28vR/3EPFBF0XzZtOd6bNP/UbcthvN9NxovH3llTiI1hkZGfhojSHc UsowT7Pgw/7+sdh7x/1x28b7Y3l4MY5cfS/2f/hufPL2z+P6RE0HisvBVdEn9jxw VAEX6qLR30cxw441KF9g+MGl3eCuHaSYPX/5BIz9qRiZWBsnzp1gntfFKK4b1vKo wPzX8OVfD/PXiiV2YHCYyr4b4+z5U8BGS0yObYpdrG8Zpc3hs6+h2Z9P96gSczgy Nh47b9mVvtoffniYgOnxuB0hbMPEFhQ/d8XU0pE4fOSD2Np1N7SJZBDszSLzkIK9 +JtYCrJDXb5yIf2/77vnfpQBg7F3eW+cunSQIn3EXZGYYRFBb9fk3th76/3g0bbo +/C7MYfgaRBpFRqaxcWgXddnpvBtvxyPoiXfvvXW6O5vjQ/mX48/ef61uHYVkYJM YeUS7j7sOgXDKv74LWQxA7Onu1APlo81owOxZdvm6K8OEoYjrGBR5Boty6CUOHTo LNrtCdZoND728FoSW2zH8ki2GIhIhfbaoJnWzFi3ZkPsveW+KE2txFunfoAgOxJ7 d94TBv0yiQAAQABJREFU566eieU3ECOhNxb/srr5nXvvjt277op1uFXtunVXzB06 iGBtFRfoMi4xMwtnsIwdjSNnno3Si6wLeHAJuNv3+kHu2xOf/8xj0C9wP7i9SuC4 CR9KuK7J4C8DG0us2fqNY1irHoptE3tZ20p8/+1l6M4S1oQpyOYqVonHcLlBoN4y FM8d/CZw8j5ERPdHYAx8jykY9EXwsTxVwx03FTJgDRWeHk1MlfiQc4WCSSxdHE08 1vj6l35r3ifFM76LHZP3Ns/feE/iwTfffwKPnyimvkk0b16nm88l8eJHteHJ/Ehw BQAXFxhIIsoHQJMNLfFXK4iGBCoKW1sAI8SrAtAutsBooskRyXeSrs3AOsOgcneD hDJgNDtSEFEZYkqopALQohcyRWX6UaY9dHLAF4wRRHERBLwA19GRTB89om8VNMVu BX3ChyCiV65MgdQJ6oKA9ZDdpAXtr0xVN36jPQTP2lODMu3LKsSzTGXC8Y27Ymrj 6bgG4u7EjDcIQw+FwX0BYYI79LfLrA3JtDFexuM20yUDFOsU5JgyJRsaVPsig2iW AMdeNz0EBL9SNgVYwdilmwaE33mXwXFze58uDxak0bqRwgvP8RkKQwbO6trjq9tr IAoraNbrBPrSQQJLS5n/tsL7IoG1K2g3Ddi1iIvFgxZxW9F1w5zOXA5xJSgU9xMz 8cDVo1XBrQTf0FasCc6T256uZR/rMJkpACj08essSG8BBsDMJ92Mr4RAUEXIWgVr T4OgLao1jqZycNNk9mEeJlHLT12tJv6KQk0rhJjWU5AxM4a5hU091sczFvATmp5f xm3BPAKtMcFcIxrA8M7EVTShbfhQGtjUiu+mlool1mjV4kv0MwkfwolCgsJcnRgF Oo/AolDB8x088KSQmL7ajFVmVjbe98KvkD7CALEsLBjQm77pciVYieiHMFRjnItz wAaFfAoYSSjP9HPCiD77zXl0G6VbmGvNmDOYlE9zCCPnyJAyODSYAYkCU/7LBxdz n50QThovv6drmVKhsOcicfh7kWVKYmDHG/czvubnm6/Nc84/c9IOY+pzsz2+F89i e9Mf93vjQQ6/+GhfeEbTTcbrnWPffEbe32zPB+Vhf+2bX4rP+UxO3CBmxYXZY9tw rfK3bJ+7fIwvrkvS5JdGeylEebZ4QLaUPzf64wmf573e4rvP+GEGPhtrXPFDTXGu cdh1WhAnmrVFRqBElhXSWPEy+017po68OnU5dt+2kyWtx9WlqcxUVUIBcejUW+zv iPMX0fziJ7x5HRYyCL41FNrJle2+XlRg5H2gb4JrBtLlbM2a9XHHXQ8C03fFm6/9 IMY3jMHoDcHoU6xsZCKehBG7vChsYcnCNx2PN5iyPixBCGRUNjVQUQRugKuMUDcW grUjd8QUKVrPT73OhC7gZrKFZw4jLONqQBXa3oFBGOqTJA0gVeTQhsS3yNCMl/2H 9bECQusA1xvwXalicURZonW0DaudjLZ404wqZnlR+14jwLZKsGj6dA+OcW4JZq07 fvYLP4crxIPsP7KFgKdUJum6gEN2CkMVCwOBx4YIdpyjtkgLzPPkulvjwOGzbFuz s4Bfqa5dJe6lDZrT2zPE/Z0wqNcymYD+3osnTaSADRbGUYtcheqrLeDKzB6ExcVM NlrbKszNPHhnmorO+o9vGJvIZx45Oo2b0K1oxN+JRx95PEYQlCwupEvoEoC5sEq2 L2iGWV7mSJE8i8KFB7A2/VgQSb1MMGsH6Up18Zshk5QZg0ZJX+uan798iWdU4rY7 boFJNovbOfLgrxLEi2X10CksFtIA6BlpM+uklTXIUnfKWdJ0Li3Pkh5yBGMprqMt Myg5UHQNIVyYuhPGtNzBWGGm16/fFB3QwGukt9SD0aBQY1TqxES0gX+XsEzOI4B1 tw3CHI+Day/gmjgAc709ekrjMX2FuathLaYfqIrAtdAg3IFInMy8Y/0BF6NeA/YH wY1aiWFopV3wASpurAL85V/6G3Hkg/Px1pvvoJhaifUTG6Fl4HBip0pYfhWKFNw7 ERaHsHistKO4YR6NdegbJB4Nl7J5aEAPqSS1SF6dpy4A879p8yRwgILk2nnmuD0m EFbNxub+L9PW7Ay0DfibmMDXHjoxwxyMY6n64hd3xNrRTcAFeAFriyl6zeKzStxE B/xHb283bjjEu1FATLeeDvpxFmv0EvCztNyOGxxrgUA7gnWkvYtgeNzsRjqH0tJ8 ZQo3VOZFt1BxontO/GDWGzFQxgolFvJrgXekE8XR+O7vfGyg8+aP/9rv4joPKW9h zSy+33hu4+tPfeobE/GT8ia5YyuCaHFeSdM20jXQZKYDtfEChuCIp3hG+6/oMuIZ gM7NI6NUNzMILh1tIEzLZJdNvwYTx59k7tBBc49MEhsIrUMyIWxKxYXMUY7WHlUN LyFZwmkKMRhCrARq2DObC4SkyIBTaD3NlWs3RkbWsMlGMrfuhbNT+D92wiihmeqX UQZ5gbSU3Auzv9H1VYJsp6MXjcvmez4ex16nauf1U2hNcJWh7xY2MWDNjWYRDXPe 5heYzmRomBs3m9p3g/XUxsogOSalYbPmrOrmQXCsubcqVH5tQbvM4Jks58wNRgON d7Wzasl9V6ue58WIzBNsaPZbLZjBTR3EBHAGzTVZe7BS1MkI0E2fzaRjJpiZWbIT VHQJIgCYdakiwNTRKBnNb575FhiPeebYIkYSh1UZkSrCgcyFPoWMWW2Gz9B6ICKS Ec/usi5tBA2pTTG4t50xdTER84s8k0wpl3Hb6BrfFNvvvSdKZM5QSy+CN61kE4nI LJrKTVxG83yGOXa9WdsVmG3dSwYJlJolFecFCOs0GQyQY+gzjD1tdcE0dOHL2KGL E8JLneDCVsZWnsZdhPFVWCsJIY5PwE4xx6vMZZH1hOv4J2Ms2DKQol9+Z83oEnAP OZKIspZqWzSdyqCYZaVd5g1kLQy2ULm2ZX4a2Mb1wnVVWwtjkoGqMsqOMV/MneOD 6VHYG+jrg1mZi5MnjhO8PIu2Fd981kDfVqtMNuHCCW9+bsKLOzGZczoqw3szU9rU NLtOjiOf6copLHAy7/O8FzQO2zPwrTi4Rhjmbqctay0wb1Y11t0sM5DYJy4uAt6d w2Iem23eeA4X3fic13Mfc2Afmk/LPjaua3Qg39z5zT0GUPIMmG+f27hWATO/0IBE ihmjP/7lfOMoxurYHU1x3r2cQ+X95rmwn7ZtPnOf53x5+D23QX776I/9081KlFCB AWwnW5XMRxc4anRoBAZgMA69fyA2b9iATzJZm4iTARvG4QtH4o++/pXYg9needO/ XSFX5rC2Oken9E9D84+bV2tpLLaufzw+/+n/JCa7cZVBmL0+fxYG8nKcPon7wPmT sbwD2Nk2GsdwAXjjvcMxNrEHuLoKsz4Wt+94IM6ePIvW/b3ovxtGbWxDLMzimkIW rBKMzzKZYMZHboXxncYf/Xky0YzE1o27k1k36Dq17+DA1m5wFrhlDni1cnAbwaUV gilX6G9XrxA4h0XyGswqwergBWNPlmFQy2hce8BPNWhCFoiDjrQjHNTQrq4f2Rm/ 9vP/ADsCLiywTQfP7IMZYy7AFe2raMBXsUZ2kDee2hr6xJsz31iZ+co8+Lonzl4/ H6fOENRrfnsJEi4NS8TBlAlq7O2xEuxVcPm52Di2JZZnr8MwT7HniO3h3zJZWbSa SWrMTGIqRKs5I3vAXNIUjGU7zFtbexUGFctK95rox1p4/uLxeP+DfTD807FtclsM dAzGIkxdN8WTyihsYMXtCPPGXkFY8AWPmH3vxgIpIFmLoBtmvVOFEzBWZS4gjUwv cT9Ycy9cIgvWVlwREXTOEwh7Hm16B66cMpOLKDlMbIC3ZjLBS5go6gg9ZSzKVQUJ hDswMJmIWqkPcpkg6MtRGTU2YSnbrpCql2VFyCFdr0IQeNKYAjMHGSgL+w1Mgk9R qMzhytg5ruUY4QZXrFVcOruxklYXWK0a+K59DOZ/lQw4V6Ad4H/dbFPLzb4wfgrM a+akKvTBAGzTbeq62Y1/+yOP3su1LbGPzE/73nsdWL4SGzetA/54ehcdZFNpXTCG TDWJCTDKtsm8mjFNq2I7jLTm4RLKKE7HydMnY/vaO8js00M8wvW4cvlK7Nw8AS8A Y8+adGF9wRQQa3rujV/50n8ZRHrF5ZVLeBZSGFEIpDZBX6dZ78yghncB+7iuuyWI qp19rheA+9z2+oGHMmM3m1NbO7QBKXd+gXS/tNeDkLO8cpk5pJCl7kkAWpvKOvY0 lBbBgTkFLirAnLQucZYIBrxfIBoA06NAdCIpPuf/PN34NT//Vf6I1RrY+kff7gXN 14++4sf6LFv+r9khAMFhpWlI7VMyPmwa4Q3AF85wnZfmEeAHSSJHq64oSWCBhCUD S2dh4PCjK5FNxsIQuoO0wChKTNXud8joAMPm0tVdQcJWhgi0if1g+tRsG1haAeGp MVFKrio5w5DLFKoVW0LtkPnFaUvGzKBBNUUDMIHr0HodOnAmMxG0lkYJ0OrhfG8S FTNkgB0gliAEkEoPjPDUdVKGkf94ZOft9HsuTr8OQoDRz2j/bn3BYdLYjjIhRQYO p4h++GzOyZimSw2Mj761utGIHCsQMLPO1MkY0YrWqEaQ0apWC6rEmHvejZXMRoPJ KZgKzjH+ZIR8Hr+pp5Rp0zVG/3qznWQWFJ6X7jQgewt5tCE89ULQCBdAgwKxYJ7q MIl1/BzLUA0ZZ6P6FTbKEKtMEwgVs/jH5QrMLoSpjdRxbfgeLoKAZcIVMLJgkjDh 4mdfIAwgU92CtCZoVTBLT3VqJs6cOBOnzp+PFjQhm++5NzbcuicZ2GX9Brk209DR NkPnYKz2hfea53iulhmWE22ZAaBk0hiHUd91G8LItZg59GKsXruCFaUn1sM0dcPE t8Nw0E1gAAIJIQM40ErhopRzWsCSzElZZp3n8zABOZnF7APXCcwZpOs1Cpac8qxz n3ES9LFN5t4JpH3XoA0ialyELjmpMcfHE663mCtgCT8rHgJCZy0VDFe11EgkyCaS VhmepG/6NQj4yWPHMw1cLxrVFa4x1alCXQqezJOw0ETwH8EI808bxjbYz7yGp+Z9 uU5F/4vzsrnsMq77UYfnixeTzpF+78yZe9Ox8qNYQKAq8AF7uGkqzpZ5XrOPzWc0 +2l7nmv2z++2mQHTDU7ZXiU4+ONNh2175HAaY/JMs+0b717UaCQDgiWOjaO5vzwv 0fSy4nCfNW5rtF2cL/pq22nN4aQ/Ow0/dHgOeEmrD+u4hPa3TqC42kaVH/rrbt+6 LY4dPRIvfP/5ZMTW4987BWO5DzeTyzBJfX0P4uLRE5fOXYhFLGZwP8kArpKXexVt cxcC6hDZOo6fOh1vvfNMXFy3kTSNb8P0XYgt23bExNgQWTwOxKmzR1BcjMdLrz4T r73xcjz1JVweKJBmYbhbCJzthTna98aBONR1KF19ZI7N6dSD5XIO5n7Llrvj5NS7 8eLz34rJtffEUwSDtiKUjq1ZG+dhBj/88ATKkvmYg6G5cPFUbNu2NQaGgOljFg26 wLmjPO9CXLxygiw0fQnXupTVGINKmkxlqCAAbqxTuEpBaN260bjywbH4AX3evHFn HDz0frz8yjNx1949ceeduKmUqXfB/K4wryqE+vG7n5yYhOnriJffepZ56Yvj5w7F e/tfg6nCllufR3uNXzzCRhllUhXmfnFxCreIo3ESq8PFU8dZo5m4Y9c94CoyNoH/ TUKgttvYpgXSaSpAKoRYYVQcyTcYvFqcwppS2tgad911V8y9dAm//hdj1+5dpNcd BVEBBygcKqShrKFtxkkNt5LBdK25wBp3GmdUJaUnWl4VAALTEsyjDK5WWa3iy7in LM7CMK/vJcPLhjhE4OzhNYdgidvjg8O4kJy9HHfvfhCNMckVEBwukaf/6PFDMJiX sErjZoTrX6b+hXyeQch5//DbsRZf/8PA3mUy6ch4qmUuEc+wRDzFEooXMd1qDUYV X3qF0iXy0WsZ7etcExO4EHVBM/bv209BPjT9WCMPH3gH4W+EtJxjMVW9CgN7CYFq JQ5tfi0OH3+LgGWUOMxriflbJUd7mZgXBQgkXGicAgPMMcysGet+949+Kx64/4n4 xMcfJW/+GjTmuB6C09vJdrRM4PPCMoXTVITNFfCzDI1CFgBi5Smkqwgfwgb1JiEZ ZFVDocUGPXLsSGwbPUE2pD4CwM8wP9SyIdB48dIUSQmmcG3cDUx0xmuvvxgvvvot MrLtildeeikOHzxA8Ped8cB996W7lDUIRgY3AoMUyUIAWyb9M+QO2ggzzvqJtztI Q4pZm2d3wCdIGzoQgtjbB16IrVsG4zTZfVSG3nnL/SkgpJLP9QfnaYVL66N4UCwO /5CKF9qm1Z8e/45n4K8fU8+EClqwcrnxhTLwMkyJxB7GFqlbBtfCKjWYWnkxDxk/ /kYVRoxYr5iDodTHfg7lRE+ZADGQo3l8zY6xjBQs86FewEJPplosowmdXcGPUuLJ ZlDiX4VRw3gMk4kPHxvAALsariF4g3Oey0CIYlX9Wi0xrjbZ4kC9pN6qQmCX8V/t ap9I/1E1KVbHUzIGzTBINekwaDBl6cOMz1w7WqJxGPvq7KU4v/9lBA1cWdACwUtn lU9mgA0IqofRlSEuGCg2pJsRba4KXbWdq8wLtgq0aTKV3bQLoYOhb8HEqmhgkSQZ gMyM40A4moyPbcqI2GaT65DJYoj0v5hsfWd1oclrGI3p0/Svr8GQg/KYI8UghA6I aAfzESLuNDljOaGPzBTruZzpCiU0ZpKZB9/gqY+pk/z56HqWQZ6tPBT0w1nWiKVg +vnDCOhLyYIafDYl32D/AJr6VXI+H4vDx07HHEj8zscfibsefSJa+G0ONwKmIte+ BWRs7nt9xU0R6aGQCJuY89yi6xJjE+bSHYb5GFg/GXd2PRZniXW4dOIwWhg0Y2hH zHGNoRQtkbnSIdLIa4tkPljG9Kx2uRvhxwBj58nS3EqSaSmgf/lk5zM/AA/0STaZ i+kR3/NgoN7LZ3RPDpolUQDgOl4KAkwxRKwSnRA6g6RbVil4BaVZwTWpqJaJIAcS rzEOmcAS8NcJcZPhunL+Yhwkk8M87je7dt8WA1g0tJjkujd64Js9sg8/6lDr6CH8 CDfNV/PaHJ5f/lWN5P0OScsDjC/tVBA6swYBFh8zM1l3IOMLEGqazeWHxh8ebyca MHnzL/8uPt8Y1U2NNweYHbnRD3FEsU+cqcYs5ho7p37/UW3d1Oyf97HRVKYo5Rpz Xpu9SjwjTjKd79YN2+PJxz8d7773bvzhH3wlLpO9pgMN8A4Y8i9+4YvxIP7eb77z dlEdFWVIL9pYC/20l2EKgXEdFm+/fSs+zvvj6Wd+L+GqheDEndv2xv13PMR6LcSF U4fjW9/8dnzvmy9jjazjO38X2sld8cZbvTGNBrKbAmq3bNsT549dySxZ06T/GxjE coZlM4u7KbSjHZbR7+5qj7Uw8mMEt5dhbO/as5c91BlvvP426QVP87xS7CJbzJ17 7sPtZQMM93x89esfxm//4/8zdu26G4yDy14NbTLWBP3MR2AszS6yiGBQgjEsoZQp w0TPo02+755HMGitxHe/+y/Q3hLcjmvNo498Nj7zxM9gaSU9Jy4Wq3GeRXoIJVAv wsf1GBuaiC///JfiG195gSwp34ydt03iNgEeIq5LdwoZvxVcKJaIF6pjoeyHQT24 /0j84Ln9aJln466H7omP3fsogaOkLaDNBbTewrVZeXoGSI15bZaUhuBVAvH7iHvo xVr7/fe/j8W2L7o+pesR2lkQ4Tz+6zu37sTyKQ2k8jfuNGbpqZpRDA55bGQyDrDm zz79POk+e2O0fz1unqTZvEa6SdBQdzf55yGopmHkadHfPoRAp0Wjk8xGd5NS9GJ8 73tPx3f+hAJiIOxtu2+JO267J9MGP3L/o/G1p78W/+S3/49YPzmMEAitQDO8bnht bNjwJK4nV+J3f++f4+6BhhyhcByXrA3gz4wjwlWkTMGyrCALXuxA2Fuesbp1LdZs GGLtyMYFkt+4bhsZdx6KIwfOx2//X7+JBbYW23Zsj4ef+AQuMdhVhsqxfnx9Cjdn P7iQ6Tlrix3URUAwoDiiBdZKwM0SghI2X5hh8tBjVdZi3b+6hrHcHe++vT+e+c4L 4LoZ4gfuiNt3bmX+cN1MX3aUKODRzhWsJckbgHeZrzprs8q66l6p9aeHVJt1rgdr 8Z0igHz+9p9+B0vUVHSNtMQDjz2OgDIRl48cY34ZLwUIHryfvXBpf3ztj/8h8SIz sX3TrriHsd6+6w6sEUvx1W98hSDwrbF3D0Iv2rEO5nYNVW6v46pTQgiCOiVsLSAw SCfacXNbxC9/z613shcvxh9/9WsIJldSIbj3zgfjgb2P4ZoK/QWv6palpbeV+Uj3 F4XIvyL6+fPQ0k/P/8UzgACV5OovvvKmK64Q9PZvcjQfmcwIj/f7zS8Jb/OV2rTG d59pBUjdM3bs2JHELIl04/5mn2zLtpvtN88XxE8GR806G4zAP1jdZETdOLI2N5gD iSWMlHyZLBBecPlTDZ/q+asXc2NZxa+k5hQgNrOGGkgDP1NDAuNAL7iJDYxPdxnE ttC1Bc2ITBIUE0QiO8VWpn3u1eQGo7GifRSBAs4DDQvfERYsLCJT36GGFiJ1neqj 7+87nAztXXffit/cEOfRHGG2LOZWBgt0SudLjLVMHt3raBX8bR0VQkvT5+LUvpeJ YL8AAwYyALF2IXzkvQgDMvVaBTIHOPeo/7OXGdnO9xruLkv646MNaiHri8GibWhv DJidx9y5cP0K82tRC/oLgtKH3n6riffld4tK1WA+PRSXlimccg1z4nVS5bWhGV9D Osu+gf40IS+gQVshJVsJwiViXoHAzLMOy2rT0W6sYGlYxj/WaoWpsWRWNSHql2+/ r18jLRwTb4GZtR15B/CFfyNz3YbbUzecaw9z0AFB1j4tX9dGefBVMFIZwsFkxvlT Z+PA/oNoIiux6Y67477PfS6GtuyEoVfzDAPOs5ghuHcEBdbckS3zTF06iqqxckk0 zPzJ1Ka1BrOlBYcsFmIml5X503ERrcq1Iyfxua/H6Hq09WTvqbM2c1cJHjw3hZVo LiqYRXspAmPxqHaCgtXQG/vAZGOqLWDEFVMYTMGBzwBDwpv9kuW3N6nCQvuerjOc KVy2uBPuQYbLGI86WrAWhTSZYceFZUaBasmgWZiBWidaU7SMq2i+bFN3r14YP7Px vPDsc/H6a68Cn+Nx5z13x5q1o9GG1knLTxniSnNoH501+uMma+zZEuPQMpbB2gpJ CArCpgJhO8RaWGoensuR5YCYWvadR7EPinc/y+cat6KZXGFlAReq6Sv4jZKCbgUm rAZT1cpk9bGPugEAg6NNPWhKU/PUuxcUbLOfPOuGYMqzfgjPOIbG8xVWMccwb5xz 3f1+0+EapfsNa5OuLgj5q8Y4ICCvwnStAFMqFhQUW5mvvMp1bIw1m6JJm04FQKP9 xlTmeZ9Y4L2P5qTZX92MPJq/55fGn2Z3dSG0om0GoiPwma1ontoMau4HSZUrljt9 5hRxIVO4iCHqwxivgTkcHxkHSvAHZu+Z2lTGsAtY1ZJ39OTbMDO9sWXTncDttbh4 8RwVQdmPxAbpntJLrYYh2qjB1C8s+Rum/xnS5nVVOU8O+67tcWWWXORL1yn+tosp bo1TJ0+nhnEEBiVrJCj4qthgn49u2hkvvv278eZbfxh37fx87Nr0OdYSjTcFmK4T 9H756mX2EfiXCrV9vWt4xij4j4BKlB9Xr+J6AQPW3Y2bTP0czHJLbBm4V11M7Med Z2RwMiYHdlP07gp0CTeI8hhaYfYPhqsqVqtL5NivIBxYzGl8dAuLQPA7LkHtuEou 4uJiwOr1xVPsn3bmqhLfffEfxxbin+7du5esW1fj20//KYJ8Of7+r/zP4BM0yAR1 9/esQ5CYiStXj8KIj8fli1bgXoq1G9eigJiIEi5ErzPH29dviREyuZxgDG39nTHZ PkCyhEP4bk8QQDyORvxoXGP8feTPn9wwCR6bjm9976tx5MOj8Qtf+uVY0z4ZPbhT tjOPCkn6pS+hvb1Kbv6zZ07HUGc/az0UR88fjls37I6B9jX8NhsXmLcW/LW3rF0f 1y5SDBD8OUjMxBCM8GJnjbW7FMvQMF0ICc4gg8soufAJoF8ox3QFlxosEMbzlHne 4vwCNGsSGtUT33vhm+TkPxw/90u/RHawtvgBFqETFOF6ZMd9CIGfjHdJwzjauzM2 IRxZzfUkmXxmK2djYhCXFfDCwow0FzefHoocLp2OSxcsMofbDmi5u2skRnBl6Vul Wi6b/NTsyTg7cwYrUAe+7WjGWYtbWec+1un41GHodAn3qu0oWmCEsdK30sgyjPkc +LzaigXlwhxwT0acziXWaxjL1kaeXYsz5w+RYrrweT99bh8C5jYES/Y76zeHtbZO G2sQOo0JOXHhXYSLLVjVL8W3Xv4DGPS9sa5nO7Fdi9Ez1hqjG4EnM/NcMPib7DPQ y+5elGrAxqWr50jAMEv8yHgMERfR0zYC7CzGC+/+CQJQW+zZ+QCCKwHkxLgsL/SQ L38kzlz+AXzICoLk3cBnT1y7fobAaQKYN2/D3W4sLly/FJcvTAMLZOQjbmGob7RI k4kwsQiPojVaKzxTBM6DXoC3xPVaeMULEqOkPSIXDvFOExcVOEhsVeCpm3/z3M3X NT83z/vu0WiWa8GUqaH7qD3phHREfH4JS+Dx48fT9UklmL9JU3xv4vWm8shnNT8X T/nz+9f8/d/WuzEkf5XjI+r4V7n739c9Ei3++b9BwYrPf+ZrYwlv9Kp5ebIwxY8A GwACMQP0k/iK+MsQThkWThYHmzw/L5yM+uxhzHNw4vgUBwUZWq6die5rp6MLM1q5 hMsNDIDpJ4s87iAN2muRAUgCy8NgBFpNa9g2hCZ7L0QNzTIabRKbo+XFr7J7PYGg YzwfBglk0mJga2UKggNxp094hMNkOxIZfV1U0NLwdesWMhNQPGXD5BjXUVkOrb3X 6LrifZrvNJ0blFmCaTQRwjwbbwrz4CjPXbv74Ti9/81YmroEQtO8pnACg6U/HNqa dMVgDKbAkjnUpWAFs6bBlFBogoS70JRguoSha+WzDFiFYKYqvtMZhNzYJG4U58JX kxmT0U8XCOdcDsXhuRH5J4NqUSBznRuUa7pGGTxLiqs11w/VoladpGgj3IH+4MKE WV8Tc8YHKDBwb7FJWVf6rS+ppc8Nwl1E0FixPzKrMCErdeeNhhquUq24QSmsTUNw rFBZwtdVU+f7h4/GPOuz9b6H4/aPPxH9k6SVg4dZIlhXIRP2L+dGITPdYBhLFpdC 0DHFZBmEZjEj+2HqUZkj/RBRfqH5QGiBoevs3xDjt+FyA3G8duponL06g+YH33my hJwHCS1pisb/tRPhZBn/9nb8PM0mJGNIMyy/QgP/WQsWEWgABhLTCfQKeIxbMOez F1owrZnWMxloz7sXGL+FltwEyZACwwoLwraCSQl4b2XuWgz8AvasQqw7RB04KMP8 OL6LuFwcOfQB7l5UzZyEOYDRFzkmGwkcpwBEZ2R2858bs3EkQ85Qcg81TnvOf02k 6zx7FOf9wPW0n/PPOLKNvKK4xj0ho26dgdzmwLVBXZkNif64t5ycG3NTNJ7PdMOl OVnG2v40+9Zo/+a3JvNu39OFh3u9xf40Ryi4exTv/C3+53fuyt9yzyQJdO84F5xm j0iwUhBoXOfF+TsduzGFNuHL+/jnvHl4XcZb8J7zRp9uHLZ/01fP+7N1EoQu/ZEN zltGK+1UdUH0dUFZwnS/Yf3W2NiyiztsBC0+e8qnqqk1w8q60Y3gtirfwQ3s1d3b 7gTXoPHWd5n9sH5kR2xF4LOSr3ne6ytUPiVPtwXzDPCbXDOIYoO1KyN8oeSYudKK e9o2cEQ15q+BIXG92LppG7+7H7FWsq79CL0WE5u6MhO//3v/JN4/8VLsQGt567Z7 YPAQntgjBjyODXYRlzRKcSZ6j1vQ8ryBqLilKIiUh2P9zh1oSUfQrpOBqrQBoRWm bRpXEnzhd+3cjcDeRwY/tavgKPyImRoEFpQe1Slgvh33hMfpu3MHvly5irLhKi4h 4HbURGt6tzKH+IdTcKu7ZzyOVC6wtwgoPXs1vj/3Ev3nN9wrd922G4GjDIO2Htc8 hJEYiGGuH8YFymJZO3D1qcJozVWuB3IQAnUJzey9MUDQbStBxRO4RVmUr4V5unPz PRRcIjYIhm9idCJ2TO6Ewa3G/rcOxRvvvEC13Itx++57YmRgHRiNdL4Iv8b/pECG AL68sEJGnHUxsWaS9nAXZbwDtwyi7e6M2WukgoBp2jSxFRxkFpk6Wm8ENJjiOvBT RzFjm+MEIw+Mb0OhhCWSfTgLHIFG2Jsr+PAjVMGImqveYM4Kyp4+aIwxCsNd43EQ evzcM8+hUe8gQ8wigtJG0nqyLgTBPrzr4whi4AjwoJntRhAUNvdPxtULpuylOBNr oIWjjiJmrH9tDEMXSrgU9aJhr1Pl9Tq0tbKgpbE1No3txFKwDUUS9IBMdxPAU8sM whNWl43rtiDAqnsDVnR3hUbrZsl/4AB3lZ7J6FuPcxFz3knBrLlZhNLpcjLCu7dS oM0Uo+DeO7fdDTzg404Tg7jBjrCeiyiw6BQCKoz3lrvoMwIFQnMV16EOXJN2ka1n sA+FGsLwNczPK6zB+jUbiQlpJxaF7GhzpKnuY8/cche4DVdhBMgV42BQGs1j5Z2e nSYGZjtzvAZ4xC2K7HjtPK+V+RsDTrIuS2mYPiIMI0xNrl0HHOJ2hVA90b8jNrJf HC+qRmgXtBPCU5FegFeTTrOmuugWVlw8HpK+q8RiWOIXUcRf+rgZIfm5+f1fq5G/ 9NN+Ui788WDqWUP9FgWI9OGF+GYAm6ckcix2MtW5KnyT6nCkIpjfk5xKoXixhfgB DT3aCm7Pl4ipDpO+OncOJv4kmVZO4heOduX6W1GiOt3KPJpKNHkGC9bIsgAMg8DZ 1GhrUIgbv5TtgG2LDzYs/LHxwWvJa0Fn0ER8BS0cl+CysTqwNqoDk1Hp2xa1gdui Y+BWAnFGowKTP9+xHvcapHYlS5opwwwuw6S50TSHG7C2cWKI6omMAy2BvJw+0bCN jLmQNu2AWqoalNxCOd0QnFbMbdfBGZcwaQ4OboiJHRDr0juxcu0cfn6muOyBaZJ4 8lQYJJkSNZQybSKINphqmdcFNu4qwZJVJPRVB8QkdEEkzVfejaa2iqa9hBne3PYy WjIoMmMyXBlwa58YV1bnlAnOpWGdmCyv1f1GBtxpzDWDqazRL1BE9s14CH1LQckw kwgbcMaWuJ6HwW7DAmCxrm60ZjIgIt1k8hUkeOo8VgYJT6dBnxDvOkjbwN4yBARb NWOAU6dDC8IVTMf86dNx/NBhNMqtcecnHo3tjz4Z/RvNEw1DDjEU+UqQRK6SdDV8 Wm1c91bcZhhQwoQgmSlPgUGRv8KSjL7XQINTOJlnXdp71lBXAMGDgKajrz4Xh9/B T5h5NVvR0DDaTvxLdSew/QqMh4JbB2461gLQ3SdTEOqEn0ws4xPu8xCxfjTXrkCu i0IMcJYB3HJFImTX39tci9w/WI2YNwW9zEmvyRmk7mfNrXXMyj5nmTRzS2idDDZ8 +aVX48KZc7F180aYOrRwrKnaPn2pDS5PbUqjb/bDx91gfDnv2gM9xT9/91r+e60v j+Y5L/Z+Tvg3z+dv2Uqx//2eLnKuN/frPpLuN8BNif1Rda8x9qL94p0v+T2b9X6f klLJjUfl8/zTDDq1ZykIedJ+Nl7ZYz7bw/zs73xraur9pkaemz3tt3y2Fxez4CnP sYb+3DgKXNfop4DIoSXCe5wP/+XnxvXe6zOLo3gvrm2cuvFW3IloyvXG+gBvuN9I vLVEam0z1W4FnATNx+IEN+nzQLrLmYIXIRwGboXfZwk2zdYQGEEaVA6FMaadGjin BPKswYjP1i5x7xSdcw+SDQdVuIHki1SHtmBdrQr8UfBGoasTvFMlO8wKaxe1Ec4h WLLB/K6mUQGuSvyScUG6rS2h/R0mw80tmx+Mwc61PI+sM0BXudYBNWCP12YRBmbS atdapz1qMuhCoKvh0hxjnL3G2E3TZyIE1pp1uo7lrH3Y/cV+RzDpAkeX0bYqdNTB j+YCrzFf09NUZYZxKoLuYe5RKogLLCRUgdnvhSlfhL6YqnZieFt89okvxTu41Jw8 fQRf8s64+7ZHKNr0AAwiOiU14ODaEnsoY7ywNlzFylBFY1PB515rb29pAOXLNHiQ FI/MRxvMcBsa+lUYSRAijDfXQUspGgvNW41rBD/W0PIu42KxynpsXLc5bochjGUt sawFWlceg0YX9xuFeWjnMu4/WpDK4EcVAK30cx6hx34ZQLoMs9kGrjB/PR5JMOT9 WC9ZC9ZzDj/FeQKZy7iqrjJPi0zGEvDarbsnluZVUodWeM4CyQB0/enDvUm3ly4s pw/c/XGsgqV49eDzUDoq5A5tiT27dscWhMoWtPxW1a1i1bDoGZHIjKtENVgUKrhM lQiG7QIHWSAQPjfdhUwVqSVgpX0OoYtzxFkYC7OKNQS5JxbAcSW07dhpoC9oxaAv KvJ0s60yDvVbrEbuR9NM1xWcYOrnCeBdrZBSFdo2V0LZIbTVyHKDUFUnteoK2v0a +6CMoFNSEUIby3PQMGBWq2k7QdAVaBeEJLX9fT39uITtwd1rJKrMrTUa5ghYruCC 1LGKsIHgtgyD7ZyXmeMFsg5ZhdY9aipPwj1IjDGAyw9WsAHci9ZjWYdOLsLTGDdn ytmqsQispXSkzvzVVrBi6IKc8E3KX/q8TFxEhfGLOwEsYAgLJsooyhikEi3RlnAl HhCXMX5pXTL2ydXfQC4/8gO35dF8FxcXeNw2fhhn/cgGfnoyZwAU9WNwCCRscLGh LhOtIrYkTGqSeQkMrDnKEghQkg8+wMLlLRI1sKjMJcxK4fKBlgatCaoimPhzUZv5 kADFI1GbOsDr3ViZPgwiB6GASLuolCYzauS+zHgZM5UFdgy6rGlOhoiVxVy4buhK kMxKA6BF/nU2ZsXvINRuyoonhlTSnT8Sy9c+wEz4NAxwH9kONqPxBRFs+FxUN/8q ggOZGBhABcbPIlStELsavtuatA1UGhyAOKANsdpqGUSiL6tjlqwXWUC4F25/ES1w u379bN5WAi0t6T4PEzzH/I2v3cDFlbh4CEkcE18drUgv89TpmKBeMiduav3WdTPC 64X5IwgN020rDFwL6eDqMLUaNSWkHSDmEvl9F9noddwIdCthW7NuN8EYa+TSqflP raHrxQnnOPvOHOp+oRBAo7mZFQ7UyDOVea1p8Mqsga5OBCRAKMkAgwUCcwXaOzIB kZta5FQiEKkF64JWC1AWL54pEqbPKwIHbjsdLZjV0T5ZvKrfrBJiQObNgOfLVEG9 fA5CSnaaO+65L/Z88rNRwqRN3Bfl2tFwICh14IaygqnUYkbtCiJoYEwZ55J3IARB 45M5KTE+s1CoxdCKUIMA6xJksJIuJRYoq+CWtYj2uxvf40E0jwPnTmWhK+Fw2zbK y6/pIzOChEGNKRp8qIpp6yAl6cMuBXYvZMYBxpdxGo3JT8SaewhGCkzr2q7ClMtI ymQYByASznSvzJHCs7NVZ65lUpbNdsM9VtzlLeHB6wFw7hcwEA74wWCqU1SjPLB/ H1qrUmzctp2Ug7josJ4VgslKzK/7MOMN1MoKr7zSugDc8Z8+FEy9P4jUhQ2vTMTO 7x5JODzLmOy6DWVb9KFo1eu9jvZ8pw1dbxR08zMMRzJgwJ6E1BgIx160wvP8zM3e X3z2wXxpPN/5tH2P/MWHe+TzefdGLxAQ8rpiTHltXpiteeGNZp2/7Cz7xs8sAbcW v7tn+MQrG6Pp4t3Zy2Bf+9P4Ld/82VuzH40H5ilOZlvOki1yNJsqvuVf75OBVig2 G4k+vi63+0YzdloCwSmjuLtYDVONag/40AB3kGsKDswo8M2awrYY/LfKBs6YHBjM OgxDNxrHqBOTwh7FUAjziZYETThxoNxvbQ4sW1qTXEC40GXwlpWkzb5Rxy1kESa0 Bdxg1pQl1lWtoxp6acMM/sS9CMDDA0Pxt37pFxP+qnPkQId5SZcyrafgUtdIf/tW LKXtWAJWDHgEn4szHWONIn1aG/v6yQxC/+tYzjp6ZJaw+KAUUPsovlXxotviKlpn s6N1Y8VcZS8vmZpwkP0N07eClnh22jlpRYHSTkpINPcI8h3kndc6YJaZDRO3stfv pogW5xCe56cVLnQjNJaGZytVqGQxVgrcZyKE5UUyCrU5/+Af5XnGY3yAAr54X5e5 Mp/bUQzMLitgoZlF8bJMCkpdoyxseN/998bee29nfxbre/3aArE8KETAfW3M5wJx MSv0sXcQZQ6xWIu4rHUAc9bvmGftbX+AQNcKtGoZC4O4XZcjlUHibvhJYId1Yw46 oKm69rFkwBh9o0cKRoqrCoolgoX7YWQL2kVmNlw2F8l01gbn/cQjn4pPf/JxcF5b XAM2KriCqdTSmq21urODuB36lXVmoEfiQi3PSwgwwmk7+Frrpkog95YWp2Bu5wk0 XcWabs2ZwuJHP2BuzeBj2PUy9MA89MaEmJmmVW4V/CudMatZhfXIiu3APpseFzKs QczBEtKB+yhpAYKh6anFJ1YBL8HHaInOXc1mN8uRm34VOLe4YodMM2NciwZ9fJJ1 KFEDZob5Z8y6XXYRZ1aCFlQQPEx1WoLetCPM1NsQEHBVbSclZhuwWQPGFuZxMe1a F08+9llGjSVKCzPrU0ZDb2rZOtnVBgbXAFc4XpLoooN4kBXcx7SQdOISZ6Cyli/p VptWZlIol7BsmcK1DG9gvJ+WaXErMlninQIFFThGdOWnH4FqOFscXtM8is/s7xvn vLto61/dSrOFv77vPx5MPaAAHgHwYArQCHWAZFE7JhdfAQjdcPqtw2OBAEANILEa zIf7JTMTGPwKtqvXybmNf2TMvxW9x/9F1M+fivqp/Wjjj5GZhouZjTq+jjX8PxfX gqR7b4+W3s2kVAS4QHzUkEY7z0ZAGqaxlKTLIA0wBdipcOeoozlnVwJREA2YhRaz EBBYk0SZjcbu4/kw4tevRu8U+WfxIQfT0we0wSKaM6/FyOk3o3zrP4gPh9bFFZjo djRKw5imh9um8SVch9adICjMdMTNgOggtiCJZZg9GeHUiPMwzdht9stME5yviiCY q06RExTUXLVTMpxjmJf71kbbwVfIUnGKYegqspBIS/PhAsgQ2x4agqV45eCFWMaf 87FP70hGtJPn6qWhv61MkZkfZPAzZoAZkIGWiRK5FQwTJ5k3/e10W2qlPxJCGYi0 KKC1Lot0eS4DSeInwyoRbmfOocN5NF16Mt6Ctiw2JcI3Raf3mh0GzjkRUQmfxhp9 q3Cdqby60NioNV5EW7gIIuvCFakG0bx4EQLHv01jBI3JOJNl4RJ+n8torrY9+Ehs vvP+qGIGrqqlwr2gzeqsrO8K86t20mc6hkwPyLspJnVPEKGbncZDzaPrw7QxH4yM NdINwEqurBSIXkKMFhntUqllIHY9/DOxbe/jVDy9HNemLsY5Cs6UYTKsAmw2ozII lNtJgclzeUQnyFbNva4OJZEvsJhoEKY83am8jueYplONfB2ErfClxgxKTZ9A97yL FLQ2ZBVWmV2YBMQ12pZthAQDS5ljD6JW55WMMr+D+2Nw+Vi8RTnxfipujpP1o2/9 +qhQLGsJoUmfyx4K7qwyb6woS1QQvBVgkt7w3fgDiR0wI5zAyBmvYICmrlgGRsvE 6zYDW8kcKcQyIobDjNBrDmDfOefuhCuZX5kGLOgZB9LD2q9KFMEJZkep6RZExdsy 7h0lfFrh1mKF+THvun7/WR1WQYa5Fmb1q7dNf+cNIFf0YV4Yk7DtSuec87lFboP5 8fpkwr2BOWxcQVcdNdfZZ4h3DfhY5VXnBZ9AqwpZXM4tq37geq7k5V3FkT9n+7bq +nBt4jq+8awUfuhL82ie46H0qTjPELJ/P3Stz7Q1LE+rWKXmcbMZ6AX+cVOTMekC 3jMDFYR/VQ0rm3MFZiJRM1YwhWhjfLqwKqXmfBEmD1fArGhZH46ljvOx1I6v99w6 Yo2WYk0K7QPMDxpVhHRzagMNwGgf8IWmG81gp8X7mNIy+7NWJbkAgZAtZVI8kqu7 r3tLLAJPHcBGd511VfOL60N5Fvi5ynwBO+6tFeakFWFiOa6SqpbK1Wj9Oyg2VCFr SFsy0rqQgDtxkXHcJk9YIagV6E6Gbwn6U22fxU1kPXAEjICfxS+L4Jcu3CpL5M7v AZ5b6+AT1rVex/UEZnF1FVxfuo7PO1YGiNkVXJO60q2I8ZBTvhu4kjYsLBJLwb0z 0IK25WFwG1r8ztMoHboQFDbBgAET+B1295H6EGFIhl+FTzvPBHNg5SVLEcxh4kqA aBkm272N7juuYmlAD4NGvj0WCIrENwd6R9YfFFx13BqrS9hhWcD2LsZPSsosTIhV g2Hgq00ShAX2MfFYnZ3gTHzj5+q4iQZBsWj023EJnELz3AJ8WDJDBrcCbqljTYbD pGd0A4VPCQazl4q1S1gWllBigLGQ14AfYlmIZgH+qf8SpPbFV7xThQnBvuaD74Im S3eX0dqbQWsRAcy574AxXtANlgDWNpRbVRJNLLDWq8RH4PsHc4qLltWitSwTg1UB vjoQ0OZnsQZ3gPN4ah1rcwdrXgWudRxrwS1HOJWWV1kXFTimrqyTsUh3ljKpWLsQ zBaw5tc7GLOCrEEW0P02aGcNa8mS2hx3EIGmKkwWSFvKw1DgGSwOHCKy8YDEI618 91yRzlZ8BkMPjgdcgQWsZCj46hWyy9HOSguKSNO/gaVXUEaZ7hPkjAKHZ/EZ8k2b BIVLj3wEeMNA4wowLBooz6KIoyNZg8d+QC9K7Sq8AL8KC8f4W9ulG9IwgEXS4L7h 2hZoXqZl5tcV3MEsNmdCEXGbll6PQqEIXgOfsUDZrm2K9hgZn/78g2ZuHMVncVTz pD309dPjL5oBoePH4rBohhhpGVcDg4qGIUjQG5g9kIhMO4GvQC4aIbU9+hoDhDAj YClAAeQ8fSTi+Lej58S3SU24n6I/FPeAWZQpb4VZqxMgVULrVBrBl9BsAXxuQeNQ x+zYgo+2GmHVSRjeIGL61gHg2QFAbWUq/QHrCBMy0HUQAXlT2KQCN51kY6rFX8AE 3MJmbyV/d8fommjdyqaEIBH5SpWkKUyBMPsXTkfrlVfi+pmvQnd/Hj+8DTAx10Ey 5MXvGCZ4qDVmIQ48nY0i0wxSYgWboP/RB4i/RNtNkRvDqz5iBjwnga+hIWlHCzcK 09pGcNocQcCnL56G8Q9872D2QS7Hjp+LPyXq/sOL83H/p3+WMTGjILWSQhbjakfr IzrQ19rhFgft56PZ0CCz4rAPzYMfOS+iaWpF/aXJABWb+UZjzZvy94JpE4E4RpAP fVD7nb76IikIk4y/2gPdeNTWWLF3FQIF+uGx3oOJE23tPObXUbJlzKBlevOVN+Mq QcefuPcOGOXzsWHnLTF2530xuGNXFqYptDs8C81PM6d/O0Qz+59zXHQzZ7mYbkkG fSz66SrJlHiINB07H3J9irVorGWujb2UwIJYYQy90Uq7qxRiWdYMz20KRCnsAG+6 wSzjQpCadH5N5g2ip0CVafdoK5/BA9V2qqFvw/TvoftN8ncNWKLD2b7zKfOvkKw5 NV/5G59dN66SGGUdBhuiU6b/vGXbJnKYr4t2ArS6FCAxF1sZGLrIOhTpWRUEkxFm jYRjn8mDIFwMlzlK9yQIvXPnOnskrNMPNWl5T54tbrU/2WvaSYEgJ5c+8u765Fyy 5gXxw4WDPW38iLR3ZZ45gUjZf0flkhSf/cCR54uPxV9PFCf/7LUJt47FK/Kdzx9t ijyf93Laq4qnFdfnPXmucRmQavv+2rzC8TRuzIvy+fk7VzhWPjfv8YPXF6tZfL7R UN5d/Mnf88bGtT6sca+ZmnSHW0Sja45w12JggNSk4I1rKCPcdwNYMLvRXvv7Ahry Nq63zoREXUtfVu4Ftow1SRcRNMZtfV1ZYAfQiiHur+OnLpPG5mK/wtCiQzHgT/wj A1L1HAK78FUhdWPuDjT7JZi1Vpjc68u4wxAkKNPVhsDcP9SPgwL53tFmrsDYg5Rx 8YDJhcEVyKxCugrj0WKufH5TSKzAlHWiQXeCzW8vTA6SWlIN5SK4QjDsA3fXYcyW r+tOgjYdBn0VbWcZODe3excWzFWsaEsEDreSEaUHV4oF8pyXymiJe9B4g2/qtc4Y XtMb1/Ch7+qegGtijrTQ9aopxvdeBh2NcAUtrNXN2whG724lBzm0bU0f7iuMf3ru AhY9XFVgRC0EJj5WK16GWcf5hxcikXPJ2Cq0LROoJXU+Y56Yg2Rm6zGEy6fVWldh wgcIzuZxaMXxPwfvmHzAeeogYJUOwnwzV/RPq5oZdHoYa2cGeeIqg7tGJ0y8/bEG RT9VWs+fPYViiQJRPaTGRFivwmQzLPAPcwvrnlXdFYYRnJzbxQVi1hCmunUvhDtd RrDp5XMVWm5gdivAUkZRZS54XUEUymX0F7GuIPclTpcHMMFBxghBj1a16iMUdOBu IhxVtNyiwENEgyxDi8FxNQRTLe1DBAwvzqNphia3MWbzti8hkFRxj+roJWidaawx v6g3oOcEtI6uy+ri89RGqSbu1OpTMMaFZ0FuI8bK0djAuc2KMz/0N3/2RzaeeMNt 7k0FbSxud3cWiNrL8gK+NzZr482zotPmUextcWD+Qgtc2GjbW0CnxW/5TJ/dvJMf PvrSPFm85/1FP3/4h59++w9hBn48mHo4jkwBCfNSkXEWWak1w0zapkpCyESzs4K0 WCWAsg3NcisIu06wVXXq9Vi4+EzUTz8fbUTpd1HVjtvRUFPljjLYLSNbogQTX4Kp bzHlGkhoBTPWKpuzpVdpHR96mP9VTKp1kFIJqT1dFNAWSLSAfH4jWp/NUMOMuoLU v6q2kRdKf/Yg2AY/bdALFlKkddKhrdovEJaMi4xx3eAzfjPghLS3fKby3qVvwSE9 HJ2rkwRFoslHk9CKdqiGJmaWlJft+NJ11HgWxEjGx0NkkJvWv40NmXuUDZ0MGVL7 jc1t37gmCSYa5RkIUzupvgYIbFplLuZIHfbeqasEOx6Nox+ejHffPYEmEaYSTZiB rGqnaiBFGexkCOmCj7zBUPFMv6dmOhEKzB1Tlv1KpFD8xgBAlP4m41WckyFXWACl ZX/z9hxh8XvB1Inwit+9XpOgwbVFgCz3QyVkLuqcF4lZydXDTELL+L524OrktRbb KGFyHZvchGVmOF6huI1uMHuo3je2bWcMThB7AeNuxcoVfDQVBtogJO0Qtzwcpz3N d844iMb34nfHLAPrD8V1nm/23UnK3/z9xkCZWwiP2nK1561o5fuAx/6x9TATl+Lk WyfRlFSTMe2FsHXqIIvlxfs7EHgtY47OFKbJ/sK4MAH2wYxGaoVMraZQol5ZYpo9 Q8BLt5xk3nOhgG+a5LtrzsznWjPjxfXc5DqkiGS/uV8BVo325slJqijijwzDY7n4 JZgG5xjzTmrLqmje3bcyaQYMaw4vKhSz71yrZLFsS4057Dj73rEpnCmEKswU80m3 2P4FOBWw4Pkbc3tjntUCukrmz2bsmKv1pV1A+6w/syb8VhiyXhgz/VK9LtspRuqj c3yczFY+ar+YvGL9nEdn+qP5LCCjmBd7mT2gDe4qLvJd9pSbcl55ULrd5Hnuy+c5 /15VzIHP9ubi3fNODdd43p84mv3xvM9sHikMew2vYrvnX5wAAEAASURBVCSNX5wz HmITatryPs55wvnWymO8jcHo3utsGgvS3QMDyu9XsTpqzREW2nDHsIDd/oMHyTF+ mQqfwMK6jcmsL4M/23Wjqc7F1/7k91GPzMSn9n45fvePfy/u3XQHAaF3pTIBhAhD x1ygyOmEiRbPmHFH4d3g0xU0w2ooVbAU3eQTWtSRQYK0F1g93HAOkgv9K9/65/G3 vvjrsZniTMK6Bf5g6xBIYPJQQ1Sx1ClvtSAUtKLFXkL5YoyAe8jKmWYcmwdfC5sG uetG8vLrT8eBE6/F33zq78UwOGQGOOoiW9EJFEXf+vYfxuMPfilu27SFSULIRtN7 5tx78f1XniWhwShpDc2pj7KIOZ7FTe25l/84jl16F7dK8Dt1T2po9VtgHteuH4pP 3vf52Dx+fxw4ei5eev4rsTT7DrofBZthZr9CkoSRePzhL8KUb8Mlr5+lYm+joTeT iwqtuRmqkrJfeqkyq+uEKTVVbnUQiYSKgznQ/QTogU614XPeDj2zyJyB4wa1rsAM 97VjKaBOyyzra8XcXvz0dWGrLBHAz1wrqE9fws2jG8s49LcbS0UXGXGMT5gmrqaL VId9pLesYgWrKhSYbxhhXriSbGt5U/tsnE0r/TfmxX0AIkpBp4Xz7fjr18lQ4751 fXSPUsjqxLJgPRct82XcgtrgC9rR1Bv0a5V0cXQmMCAge4UiYqu4S+Xe5vG6VLmm VvXVtbUXVx+tcKaVzGQRzMUyQqzKQdso6+KkPzzzqtAl/MwiHCwjQCxDP3Tv6QYW 3D+6tSggiBn9nn/yQ7HXVLS5Z92j/ktsekPo94Zi/3l17lxO5ZzkF056iX9oU/xb bIDGae9xL9/0vPzM5Q2sk21lE/lJ4LethvIgCbltFT0T99sJ91ge9DP7whffcwTi fP8B0x6pxMx3n5Kj437ngmua7Xjhjzia3W6+F2MpLkyclh//gkZ+RLt/3U79eDD1 rHL6YuqGQQom/dG6Mbmx69joIGbM5Gp5yhCaDky/sXQxqpcORsuJZ6N0/HvRdu5V kA5Xk6u3dsvDUSfyvmctWnNSTZFPK33jKwBeC5qaMkx8C0x6GQfyCszfCsTDjBll kLTE3gAqN6XMVjLjMj2dw2x4s4OgsQaxgh4InqVQCIQo5gj+IvUaUSlo5PkOckhf fpBjZspILoYNADJNHRGm2CWEEivILqFVWW5HWzWgHym+omhNFq3ISGnxEtqdNHnd tIndwL4kzM2jyVQ3f/toc3hFsRmNgp+GOHeDwDp6yeVM3EAFjdsPnn0unnn1HQIe KTKCaXp0Yi1ps/A9ReuxQH/to4xH+hLyzJyT7A8zkH25eSP7WQaF/jWYXJkMg2VT A8v19u1mprwQVoox2X9/9+WYfHmfh5pirQWJgG9i+ER6Iu+uHsyFED79uFepFCiX pBZLQi3hnpqZJzXXSNzziSfi8vR8fO351yAMtXgQv/Ze/HW1+Cym3y/PhUkW3vQ1 VMmEUijngInPvvyoP8XcN38prmuuh3jZW0Wg/z97bxpkV3Id6J1679W+A4WlgMK+ dKOB3ptNNbtJNsVF1JCiqKFMhTSjmE0xYYdjwuE/Dkf4z/iHwxH+YYcdDlszlidE 2RI51GZREiXuS5PsnewV3Q009n0tFGpfn7/v5LuFAshRaCRKLU7oAq/uvXlzPZl5 8uTJs6RcIn0xz9hIhdfsH04g3CDCZetAvrObRWhk170cH3PSBNKsswF1T6eZz0U2 h2mRBM6TegN1uFzWT5gvQ5CpqConydEhcS8qX5Etbj7AkKBE8hJ4jg3b6dhIIo4N HVslayTA+S6y5xkgkEsidTn+K8ittisOBfHWztyRa8nUgRCToOaIm/kqca6IiONG 0aSUA3UewIWzL3XRrsK2hGq2sdXX1nWJdJYrYe+Vm0HeDROmXhVsq2cqyH8IP+Wd Waxnbo6j6Hg9xsdxcw/xswJXdhAnAL2DtJE6VBvTbJ4wyQ66lbf5lssxyZN/WotW 1oP3DDfMtPlO/QSXCTO+z8CZtuW8sI52pDBO7qVfgSyJsmTvzJVWLVp321Xyz9MI 8vK7KZPIz6JI15onzlXbkmByg5+VIZLs2axjyc88qtOnNCdKBwpT85TemoaD60MX Im/diCMyKygTTibEIqMX763X49SF43ENnZSx3VvgAIMf+TKLCMjsFEqcjKWTZ4/F zZkL8fH3/nKMbd8Ug+vlusLH6FGnB/vdMcxPp0vK6KJQCjffespN78OTrfxohTqm WQ/AGogGdccXn/n9tFLy4L4nomOgFgcfOQB3XAsn6B8hDtRAVGIQk74CgANYxGfY rLKRq3eDe0G+fVi7sSV8ZZwiPgKBPy8xTL+kvX4AduHy6Xjh8Hfj4x/9JQhqxMMQ 4WnntOAKYik/eOO5eODexwnjlAoGww28pb525MV45gdfBx4j6QF3/bY9FI9DQMwt HjnxMgr3EbtG78XkYy8c/UbcXL4Rx0++haWXwdj0nq18PxovvfHV2LVpU2zDeo+c 8ivXNTV4Jp77wffiI+/bmXjDeZTmVxk7PZwIdCELr1W2dsVf2PzMgd+10qAzofYe xgdzT3l96OPUg+iDs64yqb5TFjm1mrrJ6XKeji/EyEasnAGgKZRp+9nc1RGDWkae bRlCeR0mRuvgppqy2eihLUJ01xsDKGQORzsnoE0VgmFgdWLFpYbvDUVFejkhVPRv Cflz19d2lsRu5L+xEYBOztUU9bTvuyDM9Qg7tzKNIQnwFlyyBeq0oWsDYoJYX5pD ORe80s6JicS1jra66W+VRz3gVH9n7gaw4EXRlG7MenL0w6YeK0r0s/brZ8njzAU8 3ILrxrDaYz1dM9rShjsgA1/OoOsga0QHXCrTD+LR1VnmpqDGSRJ7WIYmuIA8xNVu HJ0vOfe5O96cX17iT/8ZVnHz126k78RjvntlfqQTJ/gvN+g+tbJ2ChPLP6tX9WYc iXfv5Ve+mI9IIPFKCSppM55/VrP6oYeqnknMV3jEYnguVfahSkaLef4LssuIrabe 9rw2rMrt7+9/MQR+Moh6ehY+PDwGjsFQDu2Ec1Nncs9CyM+DxGCe5q8Ggq+feikW L3w75s5ij/XS84G4JshlNGLkrojteP+EI6s5ySaylE0QAjMTgkdTaSAIZO5rtWnu yBoygesiQkai3M52ynHxyMnBIqnZxpQbY7LUGptIw9KG1nybcvMQ882Ja9HEOUrw a8NSA+wLOBYgUxCAVNgKeSpbrCa8okWgJhYHuBUcKd9EoWWy44G4DBGygve5LZ0j cF+Ry0T2VwsF3RD4chhSXu7WzKE+Ttzys9sTEeTEckbdCndCShQ70xIZ8dyuHCH/ bsLFhLqPoY2bYt/Be2Pv/leRDCqm6DZtGY3RHWOcSsChgEiUyEtOsJjCI1mPPS03 /1mDqg6Egzwst/wsujxLEFpPr+TQUxcJ+0L4l/QSboXAu5WuSm86kaJc3zTnSbMs 3/9pUhIi0Xx1wNUD8F3MtJijgxLl2RUvmMJsm1z9Lbvvjic+GnEVhasvPvV0dO3c FVvehXMYFrRlToUKyUTfsYDqvrymRSE4kxXRZF28CtxXMVq+28QSXhHEVVxhU2Dg EbqX7WW5YJGCA0b/LrB4cK6D3geEFAvoRhy1zLFYLuI4qZ0x7GnQAsR0DTv9i4xB rc8oG98P93IR7pOLlKQ3Ky5EP8fjbmjoK2W+c3PGt04oqqyZxDWVlbB0b5ibFoI0 AysRmKcOxM/+sIlJiApuPxbifoVyoAxyM9yLiJqE+jTEmES9cs0SroqqKVpQFFfJ 276hjQgJJNGn7Loyqs43aprjRTgLey0R5YLZghUF8MRFvanq6uUYqS6yYfG1z+X2 s9mAmjEP+70NQiY5lcAjF2hh42Jnfv5oo4uo8X137twaf7dKzP61Lq1yV8snDYH8 rAT//Z7/+ZN5mqSECU+dY9lm54xEvZ/Mwdb5z8TlzmNe1ZvfAFvG8bkFFwszHPiV /X4Jd+55lTaZJ8/2/5owC8/NFPNGGIgjlhWl4t8cHM/T509hyWUSvIHcMpZJtu9A dBFfBD1DyI3fnItjZ16PS+PnQH84QQKnjG4cxY09IhnDGAWgfl1oge89sDP65RYj WjkL/jxy4khcwXxgL+ZRQdRsvnswrbcNazD9cfHiiXjj1AUUPPE9Af4f27wz9m7e GK8cxQHWn/5ObIaY7fnkxhjatjH2dO2ACMXZHHLpF6+cjAtH3mYMInvNSrJp0z5O EfbRhul488JraRO+MzYBC+Y2ojzDEKXbtuxiY1w49PZPg9PSHojiEdowhB5SA3OW nbSltwazo389zygzIso5v8RmB6stN6Yux8nz52Lnvh1x5hSbHJRNlXdfgXhXyVGm wqN3/YP4wKMfxZwh1C7m1K4vX4rf+8L/gYdYNp77b6I/Vcd05aZ47OF/FQ89+HgM wti5ungce/KfjxefewFnU+g6jKCoiYgbyCCuYdHkBbzybhvbzqZ1Bs++pxD16ea0 5B7EZbrxhn0Cwhg/K+CLtuXh2INH3mmUZw8ffgtvqMjLw23fiJnIjet3gF+Yaw3s 0rMRO3HmEiI/E7FtJ8622Il0YSVoXepYsDEGX+ppfRSb6j19PXgEPh1Xj19gPCAD j2jK3t0H2dBsiRNnj2Iz/3hs7Nkc05fBTZ3zsWEnIqUznXHuyLmor2vDNOnuGOkY AX+h/I9OwCwceuh7TomX2VBdiFMnT0YfDgT7ERu6Nn48toyOYCJzN95fz7EOL8Xo lh3ZB2/iiXh2djx2bng0Ty5PnTsRF986Q/8jJsRpz3bK6cfD9YvffyG+88y3Yh3e iz/45Mdi58596DuMx8kzb5F+gs0eulpsOHbvupty++PcmZNxDr8K6kNpnGLz5lH6 RwVTSQkVYN3cljlU5nzOppzPPjmvb/vLuEq8wX0VXxiRqwo3O5+9ZAAUhFBwQBWe +Inp7Nyv1vaSwL9g1pzXBQ+U8nkGX7em+2qNM02Wx1OrzAz7EX+ynB8R/vdB7ywE ChXxztbhL1G6Ax8iEgKmAVKroQi1tKQyFAQ3qbtxDNG4eSRWznwv4pU/jLbJo8hV clyLjeTYe3cs73wimhsOstOHcwnhrkdSFw8VdOrI4jcwadaAA644j8SFHOh5jv46 EQBUgSaPlBj9OcbLlphJABJGI0hCtoYDm6acUwn565izGseyDlx2rR+swHlvg7Ca q6NIxBGdNn+XOdJc1LQWx4bTWIKYJU6TY8I6SrydIKxa4xDSoA/HdY5v+1BiaXQj a4mS0cLSZY5K4VGh6OSRuCJIcsmqiV0hBd8lgCSHkiQCYVSXcW79mO5MYBGCJi9d vCVUJ0FqkpN79u+LJ598Mt589XBcP38JazkbYuvuXSjlwvmBK6xFIIlMAaMXUvOV vLC4UkaBmfXxXSKjBjLMR94yjnVsfZf49pdEPYSN4XKZkxtrHIkdEpe8SvpsV4YV QsW4FpBcfhZoCXsqCIHMUS7EuR55FXPS+53yvjpwMr8pRDHa4Nruu/f++AW4/l/4 rX8LdxluGxz6buVg7Xc2bipT6RikjVMh65ka/xWebbWjqp91sw3lXupt+70KQixt q9qoUqhysRK+yh/ruKoJIb8AQWW5MKLgjEIUwCFdxAwZgxaRL7jsIOfOPja9tGsR jn07bVmAkJq6fIzNF0fwbNKGByE46Ktl8tEetH2hsrQnAktufCR4GZuAKgk/9UWU pdb8pzafc6BI8boo2c5Wv2X7JIANh9iuKwytYh7whVEGFw/BETYIDOXk4mmXXAsS AJARRjrmGQPP1PSvf+1HNwLk5SZBop5+t+25MFGXNMHZGgtUOknTHBek9Lp9saEM 8nCedDpnaNOKYxYrKd0oyTo8mlh7UEm2jqUSObI1+tVxbNtu9R8VoHpV31bhpUS/ 8eN/gQ2vtMV+Naw1BLIOKlWvpiW/fJZw558w9Ltpk2vPuLTM5JD7kHEsxGzLvaTL 2mZ4+VPSlbyJa9K8zNeHVnwrltkS3mpryZUolG2YnxVJULyNauGbgRNI5kcPBM0J COyvfvOrcfTo28jXX8BjcHc88d4n4t2PPgxnvQYRdiwOv/UC46AjbiK+Nooo2y99 6h/Bad0GwXsdLu1CXMc75md+5zfjCdzNv+eJ/jhy7I341pe/gBOiayhbDyHyg/I1 uj7vec9jpN8cz77yXQjQl7FHfgnx6f549N4PRc+7H8N9/cupPHoeIvrYqZOxDlOC /+tv/A/x3/7z/yVGxtbHs8e+E6+/9EKM43CsHTHJu/c+EB/6CG3i1PM7r30TcaEX cUx3KDfK43DR7zt4KH7mw59ApGQDXYs8PicB+rBYYFMwM3cFLvd17JpfTK+to8NT OPs5xUb/OnOVDTWDlRGMbtIFOPIT8cGPfiD+jJPP85euxvWxCSy7kCe4RSX7xQU2 KNNvxo1F9APaMUeJsrE22LXv39O2Oergn47lzYlvL148H0sjw9Spl03REEvMLIT4 NF5ywSNwviV+z988E7/5u/9n7N59Dxupepw6/SriPH3xwSc/FQcPPB7Pv/HdeO77 X6Iv6/HI/R+CqN4SL73+Ujz3wjfRibjI+tMOnHfGTz/5s7F3y31x9uKx+NK3/zze OnKR0xS80L69Ei9BCH/8g/80HkBc6otf+i1OJK4jsjQQv/if/TJc9d742ot/HIff /AGnfLOxcfNWFKGvs7G6O1499Uz8wVO/H3dtxITzdE9cWjwfAyd6Y7Rze5x+5Uyc nj8ZH33fz8dH7v85Nkow3ZibOilsR1fi8NnX4rvPfCdOvnWSkzX4cls2x8lzz8d7 8aL7rns/HM9hbUsF4/f0/DR9tTn+8Bu/i0fVc/Gv/vHdOOm6EU+9/M14/Y2XEOua wsrLQNx19z3xyCOPxNsXj8TRi6/F3SM7Y6J5Nq7M1ePNk2/Es89+E7GyS3jMHYzN G7ejczcXYwO74q2jL8fT3386T4xk9mwdHYsPPP7B2Dm6h3WcNYU11L7N6en88sdo ED145XTz7jx3fmcIf3n2V83DtXhG/JXzXHzSuqq5yTAraQxnnoov/eZVxb4l+mJ5 XpTjPyJYhSwLRFjFt66un4l3WvWq6lfSlzKr57+//92CwE8IUV8GnrzhRU2PoagU nXCsHXA4y6if/Eosv/n5aJ77HmIpiM4McIw6+sFo2/auaI5uivl+jgVB8g048t3z IAtmwko73HQd6KAtHxx5NuHUIyTAvIAHBYfA48a0jc9mgpWeTwx6iJ+0IkIcLfGs gHB1zNBxBHv2N66UeDNy0zmAw7X3PPaOZ1bQhEfBaQpC/jpun2vI/bWhULQMEb/I se0MROy8yB0LNwtMrI7aMDKQD5JmP6I3J2MIhCZBqoturUBo8cEqNTFdlfigmol3 jCuDy5E8dW4hizui5Kvf5JYqZ8wj3u4G8ACoeTjMWyJG0Ytd2xkQ4YYNQ3HvA/di 4xZvhoirKJbRQFSh4p5qCcMyzaNULLPPP7eQR+tbxmk9t6JZj4qo97lcIrrS9yXv Krz1ee2NiKKlJOoJ11qKFIxtU27T9HL/JRabLfl6Txm0YtID0SuXOBUBJ9tj5969 8S//y/8qBjeOsHFBnlJbv4yZDghdbJexeCh3i4IepwNLKHCJAEsbf1T9StgqoiXi 7f1RkLB9pWk/HdXAmIdg5+RBIhxiex6ic1nRMxaCBY7GJ5Abpuo5LjRbStUhVBDR QRa4jj3nvgGOrWn/xSvn4uTlsxDxC7EFLql9q/h9J0RrN3BIvQXt8sN5ReKHGxmx cFi/duCmQ5eaxBzl5qZGeEvYZ/+02mVYPvpHghxIS8272Jgpl5aAkICCQwnBzJH7 DBytedojTNSPqSGOIDGrkrkLEzQU3Hi+uQEiXFEur/xL2aYTLhVHypJLjFKVCtaZ yC/8d+OqEzYtUmlJyyakWVzgnqIVbjGcUmb2H3WVBdeSyyj74cTCM8d0K29jepnS AkuwYVQs30q4ce68MiVpShvLmM8cSJInACTwm+0QbM6JLLsVXupZci3llmeanrW6 LYwMnJPmpdJiHtMTrx3ceP7GxXj2xefAmAvx6V/5VBzYuyuefem78frhV1GcheuO WNgs3OB7sa/9D3/203H+2sX44z/503jmue9F32Mb4S5jSQdnODPod6j87znNxcuX 4s2334rhkfXxLz79n1PVZvybX/8NZPOvw9nug5C/gQ33V+PBh+6P97//CeTmT8Wz 33wlXjv8RnzyE5+I4595OvZs2h3vff9Px+tnX4II1bfCSvzg8HNx+NRrce8jD8Rj jzyW5hE/99nfjy8/9cfxriceRo4dZ0wQoO/9mSdj9/at8fVv/hHWsC7FpWtXkIPf xTjGayebEGyQYE64O8anTsf/9Ov/PaY32XCjZN05wBly+wXazJjEupMc4yuz5+L0 pWN5krd11+54AJO4l+Fen7lwLH7qwe1x5co0+ibwdGFQ9SC7PgRzQT8V5+FmX7s6 HvdsPcCBKeaHsdxSx9Su1kz6gYGneafgtp8/fRmO+lbEVjy1BUchN64SMgfQKCEz d2j3z33y0zGy+ZfiK1/7fHyFzdeevY9GZz8idfTZY+9+f3zsgx9FPOhofOVbfx73 P3AwPv5z/wX1uhDf+MbXkPf/8xj+2S3xrRe/DPf/QvyzX/s1GA3z8errz/CDUcBJ S8cQVmzQi+iBY/+pT/1KjI3tin//+c8hWnUq/smv/TO44WMQ/V+Kl956FQdSQzBB iI+90h27d8c/fPzT8cfP/VF8/pufi60P7Yt//d/9j/H/vfT78fKLbEJw3vSBBz+I bxjHXw28PBnPvvBdOPOX45d+8dM4W9oW3z32arx1+VvRRIeuBzOb6i9Mz43TPkSx wNt1rAMtcEJ+HREvvVpPw8T75C/+QuzctZ3x8lp8+9vfZgwOx8OPP4QuFScr1G/b 9nfHiWNncPa0Eu/7wK/E/ffdjbfkM/H8sy/H+XP1OPHq06C2eTzafiI2bB6JS3gm /fef/XxuVsfYvDgb+zA6Mc36r+UwrzLTeagmlvfq2QhrLufp7bhrzcfqsZW24Brj 88GwLGi1tCo2wa0Iq3Gq+KTl33+gKqvp//7hJw8C7yxRz3grgy4feFl9K4M0Ryxh fHb3O89qPwVhOwCHp9HERNj4G9E8/tWYO/6NmD/9HGHY6j3wYMTmuwKzJRHr9np6 i7gOCJnFA+oGLh0cQ7l9C7iHR86uhmkt5ehrKrMqeC9BBSdRGf0mhNsiE83hL8cx uaw6ttAyAqYo5y7DscFyzTo4FXrXROSQCY25MLwCzrYNIx7EDznNGThDsNvx9LYe xI9MIsR8GycOy5i7LAYEvUPYQ+jMYaJsDmUqLQgMDoLskdts4r57YUW5RRRjJfCR 41RJqA4hB/pm0ZUYKMduFWIQOTidqz9O3tsXdz+y6IN7tBDTAUF4E7ENPUdqUULp hyXg0I6Xu2379qdM58679nG0iQWJaTi7pHFHr8Jm9hsJtM8uh1Fb7Ak14NzCba06 Zi1a9eBZaoFLTqwEWsWlL4SEis9wdSnDd9vj3d9aTmwSMJQm11z38AuIKHn82UU8 4SJTOpW/hAfFdYN0m4yjWkuxdI42kykcIS1I1FBGo1+RudyMGcaeHhTXEEtRzECl yhqLUi/91wWsZiinCSGgaTPFEayT8PXnc9YrnwEPMF7lljiWV5tO78Edt43Kr0/j wGoOGVKY8zjIcbxyQsA/OevtnnAAV+y7sbD0QQhIAupqng2k45bxoKUL4aBoTR8i AqP192C29Ptx/sypmL2Ca+8JZFtp4wDKtcMcPffA8c8NCbBYgtBWLMUNrG1QllUR q3a4snLs5QBJUNjnxbwiA8SG2DbHH/l6WqNDlzT5yvxBD9GGZ5+1c+9jDvVCpOP3 Mq6zc1GhUg5+MdVmdi4yrR/Wppq0wzYRlEXZXsVDFJ2yHkxaygbm5FlEWsp4yrEv UL24OUfs+zz1QAxuBsXdaTin2jWfQwa4iWm6HkTuutAy9ITC+lhvc8sceTZPrxTB 4V69m7v/st5Vx3onxEV+DXPN5EbP+OVvmbeFmGfM2Bb+ZWPziTABzN+sk+0lPEVk iJZjLL+26leqaCX9SNxyyXHzSjj5Kb/wkI3zA3mKE40nLL0R7EYrfSnwvaeH01FO MWaAl07MbkIwjU9chWM8CCG8K4bb8VK9aQfely/FhfPXYQKMpDjG3j2HYrCxMaYH m7F3z0GI9jeQuZ9Edp6Tx3H0hjjx62MsKoN+8sxJ8OdNuOhYneqD00yf7N/zCMqm p2A6NOLgXffFz3+czQK4/I3XrsXh42+nfXEaxgluIzcegxBbelk9d+4sc2smRjas i68+9wU2wzPx0H2PxdaOPTExeBPvrBtQukW8A1FJlefXrdsW27btit3cn8dyzpnz Z+B0Q7LiNlrHSAP96xBtw545pn2HB3bHL3z4X8RW4i7Ng3uQq37j3FPx3ae/zHhG /nxxlA3Kc4jMXYm7D90FbNbHI+9+V/zR278Xx0/9IB6AgNZp4Hrq8Nzhz8L9/X+j MY81IMxhsn9A5ORmvOfRe7Dgw8a+v4Z36zPxe3/2a2zKt9If3XGdtWcYHaDHH/tZ RJrWp5RaO8yuNGOoTUPm1f0HH8JB4T5ETWaxYrY7zh1fjCsXb+RJxI6x3bED0aN5 dG+uXbkU+2FiPIz1s6H2LbFMedu37oinvvu1uHT1EoT0RURPa7Fn237G8s10bPXC wDc48VtGBApRJkRs9m16OIa6t+LjZFN8+MlPIvqzJy6cnYyr147G2VPokyHC0sMY mEcfRqbVob2PgYP2gYMHYDbsiz2b74/lid4YGzkYL3cc5pQGE5uckOtkSUbFCpua q+jAOG737tpLPdfHTureiyiUp43t4BqdU6V5YU451XdyjmhfvZOT57OMqy1jW2LX tr2xHWeP8ztX4oVnX6E/ARXir+rhdfdcZf5fYwP5CidBT8XbxyJeeL4v9UIm8JS7 FZg9fOBd8ebrp+OlN1+P93/o/YkX/9Gv/ioe2rew5qnzhE7EDURwwZnVGuC886rW 3mqNYEq1wpjxOf+oMxNvbTzTyaSy3YkZiOdc9p+TNHEFc9TX/M5fHkseFtB6zvjG MC5XWZOhF+jXxIuZZ8nDOvA/r6pe5a38Xbv2rg1f+5x4hIDqnqX6Jyu3Nubf5HOr EVnE2udSpm2s2vk3WYt3Iu93hqivYCyhAjGTCowetbOUaKNa+6epQOmgI24NIh7x 8liG2FzpZge+cjmWsecer/9GtB19CWL+RrSNbY7Y+d6Y2PXBltY7YgYS/tgSbkPE gANUuOPI8WGTF29T0b2IuEyyvOFSuoLBQWc25mLmmgiJCX3DJIHgq8GZUv5+eR4H HBzfNi+ei8aly9GLF71uiKpZnEJMLfXHOLKSN3CmMlPbGAt4Lqyj0KPojFr5ncjj DazbgQITRCEccLn+sxBrizRQ7r2OOSZBkl1waxSFafZyTNy9g3pBTOJtsa0xTP3G 2CxQhy7kAhHVqSm2Q72cfMmJZNL67KTNu1xcYUxYEV2R8GwNM/vAdBBOzuwlZBhV OJrCfnsTeX0X95kJzLCxsfjIJ34hxrBD3MPiex3RHDmcHsdrYszC6jzLmdNCAZ1Y yktIiiAKsSBRW0wfioysk/fWxBcGawhha1iQC5VM+EAdtuIYr0IsFVfeuNrU11tj en7k3TarDOs3nxM+NpU6K6OLTAFWHFB8Igx6gLrQDuoETUwalDqRAZ5GBrYhfOmP 4gCL/qKNbvh0pmPeXYxR0a60V5bTakdVR+MkUGyTBCn/RMB+N35ewMb0ciO7YGkL mTkGvA6mmojedCDq00VFO+FeOzeaU1ew+T1AXRmXbFRpOv2otQ5OJdiUqZ+xAtXf 2DgWux7s4Yj9EB4LMfB342pMYcniGpuHaVa0HhTP+uIqSt0svJxF6DxLR2Pu6DQB OoM8bA0xGn0A9Cn249ykv908ucGwZeqFOLZoELSE85X6OXd4124/1cpLp3GdiAuV 4YbVFL7PaRlHIpEy5OkLK72HrmDVSW6w5jxzjFGQMPM/kUo86iH4HFMVQV9gXfK5 9cw7EMkTJdp9E9OxN69cRgkdnQT25wsQQctYntKBXBsEhLoEVZ+Zb/5sKc+OIe/Z buphdayXIf7LK/u7PGZcgw0jsvsTcYvP/jFN/uXdDUuCivz9pzlcR0pJDjbinUaU vIzhmGmVubat5pz1zITkYN9UdSLMuL5aXlYjc/EDNbLsVr6Zp3OWME9q9IWRZkbB hx1wSjy90ivsKCd3izBHrnOa1985huz0eJw6eTxGOOFb1789BtAPmsYyyjQKi+tw X1+rH8lyF9VlkpVBP9/EiEA3VlquXcV5HATg2NbtEOuMF577kT3vgeBvYhHn0rVz 8fIr309RuS7EFOcQmRwawsEOjJBpiHaZIgtz4BLGzwBzSeslS2wAZjgR0FrMRswD 37ihHfWhWN+BtTPkOGoQgMSG6GR3yQZekbw55rinor04r2pHMXWePMWRjkVF72Tu PPLAg7E+aNvydPTWcTTVfT6+9nVwMye6PYjRXLl2Ml458g3AOhYvH3sJXD0V546+ GZ13obc0d4aNAA6kIOwHIGT379gR69uRVUee9Arr0ws/+HKcHR+PSU4U51UuxSzm gW1PxhaYVXXWAXHcepSF79p1XxowWAZXNZB972J97EZJtH2+PUa6NyG6w8kcuHy4 YyPLyEl+MIGA62BjXfS1rccsJMwhiPMtQ6MxUOdEewLl1CYiluu24xxxHrhxest8 3jS4MdbXxvBe+zZE8W78pQxiJhKGQBOlVNBFH5O8g7GwCEf9/PGTcey11zkJx9IR FoT6wV1NTmLakLvvBKc1IOyH2CQpdteg7D70CobQI6vDlYfVzhkCytQ1TKeyqde6 0hz9qqKsHlMH+4dhcmGZ7ay+OjjtwdFUA2dWbZxctsNMG2LD0JjFvOgMYqycfPfA 9OpmPo+fuxrvefAJ2r0hrsPc6F4cibGhfdHBmr0woR8D6sEo6FpARHGmL+7afB+b UsYdG5yVsWZswjpeB+v3ltEd6FnsxyLR68jVX2O9hhnAWvLI3X0xXB8FZohkchoP FmaM057VGeZTmW2VkQimFfPNtdEZ25p7BnKVOdr6kAFOT9757BqiLp3zNz2yZ7Br XGtGi2DMpmTlsM2XKk/rsbru8A0Sh37kR9mVmE8+U555Zmq+JW4olc6wVo2qYlph 5ZbpM8/bglfrdEfoj+31FiwpHGRbMDTZ83r7ZdvK7/bw/zTe3hmivjXgHHGaJlME QkdEWjbQSRJSlKno11hGRpHFdgYCtm1xICdo58qZ6Ljy57Fw+YvRfvZ5FgksVux6 NBoHHoqVzQ/gbGMTIxVOOrZ823T40OrpJseRhtc5hqs1kRlvw8yV5/CUtyJXniVU 846K38hFx5WIq2MioRpylDFxLpaxOLCMXOQKVmyWZzTNhrIXTi5ONHbEHKbGAosF ix2bcF4xijdDXJ2jzt+ZhAkcZhao+sBGFFLh1KOMJOHTCSKssRBNsuiMI6O5AGtz A9ZlRvoQEWiw4wdOU9Mc5QGfJmHp7Q8lxDqLKjUjD0erhBTNJHIS89TZhKZ1MVZc yIXZ97XyBaY1ncELzGzllTtAtnKr3QioV7AEgdU7iIvqR3+KIBxoQOgt4NnPhSIn rsjFMkiil71WIRkmESWR6ZUWTbIOEghyeIE2ZTqxtCajB9mUfSev9CZLHSQibnEl zNr4t34iKd+9fDYfNxpZL96FR8q7Cwc5zSxOiWjd4MGNpdTktGj6jJesa4risMiI zFYYj5pva8It0r224kUMIGwiI26DaFXDhQiiWg5qRaCvJeTdcJT6CR/SWlfr1fqX 8tbWnX/5Hxjq0Me+UrREu9eshSx+tIv66p3XDcgKRMUS3Ho568JRYs+TEbmqEn1L 9KP5LbCAqpM6uH5djPBjmMGhnkh9iWkc38yhUKuHzvTouMxpEjLP08ieLiNb3k1+ wzha64cTJrGrF81pF0ls+Ut02dV6ztQyhGbpaCFhbleoEv3gSYgcbWWRAZDTPJ8l MI3TSds2sEGZ5YcQHBxKFnOIey2dkCNcOrhztK0NizRuWuyPPKFhgXZRtH0qOTvg lQZKHxK237YDP/7mmOCW94Q/gZrx1E6+Mv01nNl0Ug76d5iQhQiAO7oMLvL0QAde NRZcTdc67lWCt+/KBDNTxqnD2AKYA7n42b9eFu4f7wblj5dWvTIf2uhFE4lGXllv 4GcwG8g2OnqZeghToesEUzwlAV8KKPkSPTeK1tH2t745H8zcvLM8P/nVcEPJTwdw WYEMN9RwcEj2EIEmZROXcGeCLLJZTN0E5ya1cSPcTl3Hb1zGigl+CfCgemr+RJw4 dxSxBvRUkFU/f+xsjIyvj/t3PZheVU8+fwTRnBFwIBZFbnLihHKs1raaOKZyvmp9 6OTFa3EOgvjQnkdjCgdRR0+/zCnZJFz7yfj+4ePx0ivPxT/42MchaA/Gi68/FydP HI3GIBtPxmUXTn9qiGU2EE3sxvxiE2c6WgsbRiZ/Gv8O1ycux7ah3Zg9HI8zV05R z57YpRlGTmQZ6eBVt1GMX8xLrkC06uGzE+XfSTafNDmVZtvhCNfBjdPI1Xu6eeX6 BPlPId/OSKa/Ovvmccp0Do78SYjmehy8Zx9zCHOgbHp6d6kv1Y8IzrkYHdsMTGcR 7/lIPPEoBDsnoth0izcnD8fVM5fZfGpDBaYKy2FXcxjC8Z/E/Yce5dQAG+5shuYx bKxFq1mI7+xKGV/805voCvPm9KWTcfBgHeXYrrh49XyM37wB0wD4sGmfwTpRMnGw skaV4/SZk7Edbv6+nbs5RZlABOdSjKzbjEUwHCdxgnANU5ezbdeiNrQYx15HPEhF /G6UZSG8a/M9bIJmsXbTgQ7F8fj6t/+EebsSn0JEZRpx1+dfeAHRGKxy4dBoBsK8 lzWuDdOigYiSc6zBadkyJisXumajY4oTSZhaDU6kayC/OTYGjlU9rw40UECG6L+K KNDwtg1x4c0j6Dagt1bbRvnMbfDEBDoBjX70hDidmECsdpHxW8OB2PDQOk6hbzBO OcmHWD995AKc//MoSw9BU8DlbwyxgdtIXw9zarQu2q9NxAMPPRF373o3cD4Xb735 Nio4w3lyobOl97/vfeCnFU5YjqT4TTfjeAdmUzt68cqKKNLEjXGYE8zd1nxyXvG/ TEXSMeP5lXlouJdrh/PTX1k3SvjaZ0MyfpnGLSySoWX+ggNKfDFywYMlF8YuCct6 aoF8y3LFbVWmrbxNSVz/Ja7I2IkOMkS8Xi7jtR7vuBU8Y3tL3IxWsisZ3RH/x/V6 qz4U5vrRyljcdvtF+6U9CxBu//SfwNs7RNS3gAxht4KMLXzh6IDLLednUU4hR4l1 uOIdy3hBY9VdWl4fAyjOdEwdQ+zlz6L33OeiNn4kGgMDEXueiOaeJ/E2jvksuCYD c0dz4CR3zh0zCIMtNIgPbX+4Lw3FFBjJoBUGNkqnIG7lpXV4ogc5bZKz4rOAMxHg IMY8jjWun47meRRxWXDQYIX4gKNdG41xOPLjyLhPwL3oHtqMk4310d+9AW7rOrgM G6BeUIxlpCX9ARGwwjHtXE5cOBuabWOB1BThAghnAYsC/X3IQ8MdSmd4HLPC34IQ mYczwzMjdKCfEwa5iSw4gC4JuSRybAuxpQ0kEJyUTFcWXiYehILEcyKMHNwm5L/1 8IHKiWYwwANmnEpurcSMoi8dENuwp0CYjRiH0wJdHH30j4SUxMQyXBe/G1eAas1B bm0d+NqXbgrSKg1xCuEr8UGeFKvMoYx+ufyaCZXgEtk1eFdRUWJZQkYve648EosV 8UxNS/2JUyE978UsI3AwPghukXpRVOapnWURUgMRCyRhWboxdQZny3IXVewEqSpj L0GtnsQ0phcHGR+dENPJxaXRqZwMIoBJL1+bPODscTRsvaqfcK0IeuukOAxBiURt is9eyfVuvRhPglfPsjoxsT5+VxY9zTxSBzm38JJZ7OCUojRtf0nYSpRbpvbEU6wI WDN04VZCIJOn1n70D2icLsZWN6YBF0f1sjidVkuW6IQGJ0UdeM+9cuxtFuYjjHHE JzDjNjqseVNkeftweAOHLxcjzfNDXCsfa3ukdlTqtVOtf435xAOED31DW9J8Je3I OUY5yxLpiFX05pE3mxXysJkTEI1ybxXhUsJNArcNLqvjRO65pjgbbL49nShj3n6m TE+jXCgliOkbYZnjRNi24Jr6FQ47nAE1ByCegItcZ/1J2JcrmJyFOYgTqisQmsVO eSHoqUsS9mXMZlkU08bYkIh20c4u5DkJ+4RCqx6kc81IGFE565X1cywASUrNfDK9 7fAk0PpCKDun0lwsnZwWkZgnc84xxqBiefYlUyYvUlKIuZW7gc5o/wqU/J4x+WMd /M+n9F4ppcplPY1nHZ3XGYc/4knAD3hL+xzL8+DRebjmI0NDiNeMxKtvoKCK46nr w1fiqVeeSqd+78KE1HWMBZy7djzmX51AMbETgvpqHD3zg3j84Y9jdQSLNDj5aeIl dQFrZl0LEMeYv7zrAGIil3vi+deeif71w1huuRynr5yIIU4LNckobt65A07x0HoI cHD4XA3u8WScunY49kw9iC+HTXEeyytvXfsBJ0DYmL8K+mbW3H33oXj66aeQE/9S HNh/IM6iZ3Ju6mzsuv+9EKOcst5EvBGiv0v486svQ/wuD7HxgExW8RWvpDIbkJbn dAmif5p5D8NiiTnQDc7vYkwu4ygKz4iAfCFeOf5snD13I5647+fjn3/yX5IKmW/g eeTs2/HVr34x3njzTGwcHQXfAnMs5CyMn4mry1fztLOBCeQtXetj8vI12nZG3ddY urYSE8iTT0ycoghwFjLbuRlP3MIaRd2aK3C16afpGm3pmIkjWH9Zd/hb9OHVOHzy ldi8eytmPhF5AmtNsomeRheoHfv6wyObYhoZ81ePPh21npvIiZ+PN48fiYP3P0T/ DsfenQ/Hy0dfiD945v/ClGhPvHb0NayyYSGul7UZp4sLE5y6YX3HdQ1WAxaitQAE fDj1XmEiT6F3cOn6xbi0i5NxlKtrk5xy6k0bOCspVMezK1gDb7caI+BEdAoG3hxx mIeTKK4P9Q7FMJz13SP74/nDT8cffPP3sMq2N148/GaMz17Boyv4C6tI3SjxPnfi tXj6ja+A487GsWunENPRW0d3PPjIQ/HG6dej+cICcv+j8Qoy/tdmztIHj8VGTtNf Rrzy2KU3Yv/4zhjcWosrbB6//ixWfRYux/HTJ+I5ZPLf+17oDHDN8SPHYwOOKe+/ 7wE8jyOWtHkbG6Bh4HkjTl6F+MeB15aerSnSmn5GnG/5Y4Y52X1xfnJXv2vtlTiC gOqe85x4pHJK5pVorgowD/Mj3zxR5O52wbjlb7lnPuAo74AcOoGvZsQlUZ/4KBOV Ukyb4ZbD5WbeTK1XEeEpuKJ8/eG/rn/ix8Qlfi4VsqDy/MNJfiwhgqJcVtZ1wzdg I0677RKHCo/VBLd9/Ul/uX1U/W21pgXM5PxgTs5BJmlfZ1J3s87Mx2UUSEFODNFO RFuGUaTrqL+O1MyfRJz5Atzt09G1Yzuy8w9Fc+Q+pGYgFpYgviEW2lBATfN7itbA YVRoV5GAnEjZt2ioM6eWiNcpgeF3ytE82iLWcSQe2jkWrGGiLUCqS/zmsGc9i4m1 WMG7IMe+NxfxQApRv9Q3xu58E2bV9qIstb4oLeESXCs77R1YMoAY8UhYGWAXTRUF F1DObUDQIz8TN1lMxln8nABj28aKwibf5+GiSrxoraSXI+EFOKgTcPI7MZ+YXCdM MEowNyDonEBy1yVkvHyXyy2Ba5gm2ixbfHJrRjE5HfdOUh+Ir3dd01lfg9JOOse/ EmbLKiawwRG9rFDm6iUyYcJ4ZC+SSO4saZPYEsFQfhJYrXJEKtbPS654fs/yeW/V vzqezNZQ50RaENtrEd1q+TyYp/Cr2rJanojJDQR1tgiJo1IvXuQw8y2RHR/zVCEJ aeKSl3WYR552EZlbdTmEe1q0IBywC4qUN1+AcK0ji08RmZdczaqe1T3bDFzFK3kK 0qq836s2G8c6ECHD3Ag1hfmauD4aj0YkQWpZ2TCJQ5pkXtn3fDdeclgJq+y5p034 JPzZwPBdRywDiILN0u6urkZsHR6LsfWDcXV0Y1w5eyIun3k73jp7Ma5OdiKTuynW q4wG4TPDmB2AMO4YZDOB8L+eMBuYQ9VqUo2jATndigLZy0DTXkiYpFUXys13Hc3k gEGkCG9rA3DsMR0Bx54NFRvLZeyHt3GsnY7c4NLlMbVEOFwylyWJS08nHOPmWDZs wsD+LpebpArG2RcUgV43hAbw4afYW453NnvLnH61pVUgOpdxmVZ2iGveJMtFLcch dTavzM+8crEzIrHoYy8XV5KVvsm4xDMX5wljy0c32UZyXq5uBswbWOWCa35uO83H pKQ1aWYsDM3GAdW6hHJRZM5IVTD3W3FKoCWWMOdq9VYxBvxUYMUX60BBcvfSshUT MpXOIbYaENfrB0Zjz557kD1HYfZ7P4jzF7+YxM7HPobTJEQUlmfejr3bDsSlixfj s7/9uzlmD9x9MO7edwBxi2FMJm5iww+hPIndeURs6qwDG2CMHLr7gfjSl/80PvvZ zyXxPohDuHX4zeiHy7x9dGdcuXAjfuf/+T3Ebgbjvvsegpt6T5yC0Lq082rs2bk/ vvUUipnPH457Dtwb20Z3QXQuxsG99yJ+Nhff+94z8b1vvYAozgbC7o9HDr6bkye9 YSMSCQddJIY7MrzG9saWrZuY92xcXYMgRucxH6scvDLe/ZzIIhwGgQ+jCBHILiy0 9MDt79EhHdbMrly5Fls3bY6HDt6HSM1MnLtyOp0ysdKRHuYV3PUlxvgAjplU+hoY ZO3Ak+1NuendQ3CLh9AvOB2nT1/gGTGm9SMxzGmb9v2RjaRbHEuORRgRbnIZ964x fOFU0c0FbeJ0+8t/+lVk4o/FAw9uiyfe/xGUVRGXAZ+t57SkU5FQmBqHDtwHZ/kG zgVfis+//ocwQOqxd+/uuO/Q/aw/deT/D2AB7GJ860tP4bG3A7EURHHUDeNUoYGu mOtRX3d/TF6bZh3cEe+6793xZ1/5s/jf/7d/E/ccvCt2I8d++cIl8MnFeGD/g3DN N7IZkwHRhgfXYRgGg6zDnTEM8X4OUaguLMR5+jiHwYkutX7BKZ6I7N2zlxOCy3Hk 1Tfju995GqN29yIy1Ro3wyOxZ+veeOP10fjOl56PjZsWYwSTm5swGGAbD6DLMQfD 4JlvPM2JxXjs2LY93v3A43HXzoM4cYQJwYn90beOxV1bT8WhQ4fifY9+ML79rW/F v3vuM7RvmNOUB+O+fQ+xbICfOf157pnn4qlvfA89jBHqdXcc3H8IscYpxtbT9Olg fOJDn0BnBJFa6Qj6ybkkek/cQR9VOCTnGBOzwt1r1wPna8ZzbWMqllnL3Yecms55 1+N8aeWdiXLetkgsnqu0zOkWDkmsZj6OITG14cZzXPmv9Z64gE9eVV3EGRlufMPz 6+1/SrpWPn6qIlX326P/2N4SNhaXALOVrQKt6G2XbSi/24L/E3kBt1eg+Mu36OpV WCB/jWttkSxXrBYMLna9NeTs2toXYqrtStzk2LSG1ZjhJY7IQIIx/m9j4fTvRCdc jT6OTWv7PxxtGx+Dkw8RXUNWvj7NJgCFFxBDEvVK6bJgKzqgPCZ8AX5yCZGh5cht hYWpXffQbCHYV3LUBxcDznonFH8Xlmxq2KJtYpJtGQ7TFLJy15HTm8Ie8ULn9ljs 3R0rKEvVB8aigWvpHgj6TuwSd4BAaijEKiOfVjbgrmmO0MlknSQeFHHxKE8nHRfP n2dhmMOKwQhm2/QKuIgYBFYMkCNMuWUI0XYQ2gSy3TfgpPb3D6aHRs1mqWAmESci kICrCEo5zcJXwkcb3MqA5uLdGtjVRM1J2lq0kyDJ+gkjNwRMWIgGRWRW4Cboalvi T7rF+nipfAruTeLK2S0i6KC8POKjfhKR1sNFs6qb7xWS4yOWIRA3of46J5njZ3vS hBlErc96sDRNVVfjVs+G+/Oy7BqbsnE2P9fHr4CIUTCGA+duvfqu+/JUmOVYtDhc oo2klys+g0OitO5hnvxbgvhdRP66tw8uNQ5LehAX6ETpys2DttYX4AJ6fF1jw9WA c6aisfD2txa+li0h7yZSYs/FScJOIk0OdqlbQc7ZklZ7bPvadptn1XaJN+XOqz73 7mV809lG78av6uSz46L6tlpH0s2mWAVjiM5cwvqOfLMe6jyBTei3Dv8Ac4WHOeaf jSfv3RxbUcqz2nL/a2yM0qkL/auVnrTnTboFFuHcZOa8th23Nh3WU4LZOVhLFrmI F/l95x/1uMnx+lSOA/NA7gAuKACmLcRiTBRfBIwnOJMptkWdC9q+NUZsW8LOsdKC i7BVN2EBEYlplNqnMT2rMzHrmmZcVbpDvGMQpfkuN3AQaYrgKGpUp888OdJDtBsT y+UhN0tJpFMILaRNTAYLJJ0DMuvF3RGYiyXfJcQygHy8VI4W/6V1H9q7hFx5E72V FUxteuLVBqdebp7K8WwxKYN+BZnk4twaK1V7q/GSGZdSeSzllLDqL9AoCIkbc5Rg asC8dZBa9Rb8CHczkg51iJ/iP9R7gZNDnfqoFwSgIfjGOfXBjCp94jzoREnQOX8T RWRFiLogdFW61oJWP8rnXSg5qiMygQnMWZRiO8nHTfKmwa2I2hyOr2J5ZmC4L37+ E79I/8zHZ37zM1SwHp/++V+OLeu3x/ELp2M9hL71VR5f2/E38c7ahbx0P3okl6+d po4NNg2jxMFTK6daIio3fs7zGYhFx1E/Jk2V1xePTinTD+FuH+o19eq1q3mStX69 eN0TKdqt2CMEsd5JZ+YRARncBYG8kXYi0slpXb1jOi5g4nNk/Wb6FadZ1F1PzHUY OAOc3C4gLrdAQyc0qgA3f/36gXyuwSjqYM2Qu90FPlRe/iIKqm6ORyGgFZO6zIlF f30IwwmDghx4MRZgGEnMO6ed34qv9Q31x9FzL8WvY8rzn/7j/zq2jNxL2mPYYK/H 5uG78Azbycb5VMJfs9AyfHQetgw+mWOOK24FFiHvZvoa6OJk67d++zNxFitan/r0 p1CE3hTf5sTjhWe+Hz/z/p+NJx/5QDpw62SOOtQkesW5WhG7qRItIjS9nD7L9m2i V6FXV3j3wB3rNEixzyIGtYS8fBc6CZixoS8RRUVkpwvRxgE2CjPXZ9MKWw9Mg05O g2Y4JZqEIz4r44sCf/u3/+cYQ979V3/hv3EZRxz2BO3zhHkMcR/W0cXLcPn3RD+W eubRmbhw9RxjQ9iPYOAAph7/5m9iBhj6YAEaQmdSblqcSxcvXkidpnVw4R0Dwr0N nSBNIc9JjzBdXAvVs/Ak6SbmkF2jN5K3tEzZdIuXClFfzT7Hkpd3mR9ebqrF2Tn3 /JahTi96g1/+swJct8/zDCjhzE3TV78M5E/mSVoxkngo8RFZmY9rUm7urZOFZsEl j+S0t8qs8nSceVXviUbuKHO1PMItw6sGvfWjwlfzsX6tfIz/Q200kKsKXwtT01VX qzjyom02NL/5LJOL0yMWLzfBl7Gydfz48VT+l9nnGupa6d02mqf3O59vlXOrvlUb 19ajivfXvY+gB/RXuW6xA/8qqf+KaapjD73BNeHQCJgVXH/rMbWBDHFDjpxHmsv9 yFsiazeJyciTfxxdmBJrbESmcef90dxyF4Q8CANZ2DoOJZpdLDxOkhXMUyZRxDIk px5COW1AetRMeb7bWageUns6EILVo35IGjYEE9FA+aXt0plYOX0qEGxkojdYXDiK RVb/ZmN3LPYfiK532tc+AABAAElEQVRNB7EusgfLMOvhUIKMVLCVEyzHxMnDIFJs Ju2ZU0o77rG1j97OIiIikKDQ5rBOglw41q0DqYEM5+FUUrkUNdFDoNwXZUXX07kO yhnMTk6h4Ld5FLlUZPon8H7qVSGEtYOwGqDaxU8usPWqJllr4ObgJb2TRPnGVCgm jpYkXLjl1i+y0CnqAXlDm+inCvkQj7lT8ixzNyeRU8w4fFidGNbLMMv3Z7kmybth PFfhhq2Gt+Lblip87TefvfJbK18JJ8ty0Zcwa0XJCZvl09OeEvgv0xHHyW7EivCV bmugnLbEhugGyFrzpH0s1E78RRC/cOCgONsnbKu2ec88yctnMqVd3i2T8UF/EpCI 2niF6Aa+bDTcBCl6ZD1y82G8NflV8DFP8/DdzYFc7LX9Xj3bFjdFXsLPyzL9XuXl XQJcpVwkjfDJ1ot1jKW4fAUTgnC/HvnQx6Jn65546mtfidffPIYS2BLjdRMbGjZ4 mvlk3LRTvsfMy8tw7lnEmxK/bA1oMgW2+lYi1v+Ub/uccBJQ0NQ5htRX6OO0QCsW Xcjbu9FVHG52Hs+Vch7h5DtGFUFaRh6XljOmC0HqYtWVJy+lXQUuwryMKeGaomAQ bwsQ8/OYRZzjxGGBxd/DeUCAyA2bWUQFGhAfkuHCXc68d8U8LKOMF8cTlTaEuz/H WQ5/M/Link13HBqHr1WaVbgTSsSSR+ZMihx0ws86mSpz4Zm2ZD/b56VNVT4WV40R w/yVunlv1cdIt11mYoB362f2pS5JQFBWXraTR2/KD6sf06BuOr6zv6fxjC0xMtAD FxlZYkmklPSGQF5BebGvE7PCjC2d8SBSjliZ4lt48eTAU6KoE12owWHEJlAQXYC4 nEYpc/3QJji7d8eLLz0bv/F//zvmGX3EfPspdHqGhzcigrMcW3GM1I/8/jx9Znvr nLbWsDrSgzz0JH07NrKPatcxf3kTIhjP2EyBaU42O5GdH1u3KZrr2LQzjsWvc9Mo 0oLcBrpGwM/tySmfh+AeQpRzAAaK/bYAAe38UfqpjXE4BIE+CFd9fIIxg4fadMwF kbkO3L5n2z0QlRDHrAcDcKBn4eRPU4ZWypZg1OivYcumLUnwLyHysWE9VlMgbqc4 RZCwTgkr5sVG6tkFISuRLQ4a27wT0TAqQH/JcHDe69m09HfpO+e146SJTHrbot5d 52PdHk45kHVH2px3WF6Y3xxEZrwP52CzM+gHoaugBKViiFr10ikdmTBfCt7oor93 79mNDf7L8YU//EKOP72J33/g4di1fT9zvIN2QvSycZE5Yl3bwJHrBzcjkiIehmCm XcyoxC9kx3o2kIrHimgO9eJQkfYv0wdsB4ElBuvw8O5p1QInd73on3WzKZQbDQYF 46IMSz+PwGR5+wyn6CjINtD1QZ2Akx6I63U7gRHr1Fwfoj74dmnQ/4gHyTHvgLbY xpoNeLMflvBAO401sB42JMOIc0FEpFWsxUnaACzHRnbkBtX5peWz7B/GXzenB+sh /NvZeDMREIu6ETM3ZtB1QAdpo4w54Eebc84zfgpx7zziOednefa9KKU7zVq4gLAE Mjf+86MvgZPzsoSXPMwn83eitvJkMhYi3XTmbV5eTmfaTE7AuuRroG3M+rTiWgcS raat0nuv6u29Wl/MaW2OFvVOX1WTs5WMmeqd4XTHVaBbQeOOjz/xr/V/zfUf2wo5 Hn+9qwI4d47iV0DMK3hyZZ+EIisLNwNsCWRfY8K2j78O1/xz0X3h63gchJuy++Fo bsUzLO6cV/RCIbddERoW+QZEfB05/BSpYfcth15BcD1uiqwkgNog7OV4gbkoR4IV TpxKiKRr3DyLF9oT0QYHfRlbwdOI2UzUtsdkbSxm+u7FTObD0Yn5rp4NdyO35/Fs D5McogMZfOVsRcIpKy12BqGBd5nsjdTw72FRqYNALl66Ekff1hbxFRaPfmT8tsLx lGDnZAKsJ3cjEQhVFEk6HXtUroWo13PjFFyxfmQI5fiXuV6IZfujmszeq8knknER qK4qvLqXCcBXYKRdcXfuctz87iQGb7WQCkSvz/ycLH6ryqueXRR8Tq+f3F0M/ZmX yLGKZwY+K6dqzXJBaHGc5KKZr/Elbr0kfquyvJvWq2qDYXRsclbmId6ML3dFbkOJ 570QPY6x6qrqJve1es4KEUExLDlrWqAxbT0JR/qacuAjJ5GenFeLpvzb6lIVwF3Y S/xYZ4nVPBXgbo08yu+Au5WcB+JJINpuryq/fOGP4RLqjq9Ws0hXvq6Fjc+2pYpf favy8d3L78nxYwPXAXfaetCj2d/2+RTU0I1JOLB4Mt6ya2/cOPMG5toQSZPwBrb6 MPDEQHi7UIo4UzGa/OmhrJttLn1FGASevZayn5Sd8ukksrVMv5yDigSpENwOQtZK xiz+G5bk/OccJnVWnTz57pV/CVPswH8UluEWLlFuW3VUxd40LR3NId6gt1stbGnp JxXDGYN6k+1CXK8L6iDHqpta83Ds8l3vtqlwzj37xTFkpbMOrfHYWjlMkzAvNSFt qYeVT1gIq1Zc+z37A2KPYyuoKwgbNv+ejiVAiScsJYqUb88jY8IquHrPNq65Z50S Di1YtOpx61aFey/PBWzCz7pV38uzdRS0KsLnJtK2EyZKyXawQdOC0DQ26eUWS1Q1 AbgEGrQ64wP9Dbjjetuss7HVEZWIZAXC0fGnCd1FTr3c2PZjq30d4g7d4nng2IvM 94P3PxLvuv+n2Bz0Yl4S4hyu9jRMkSU4vw5WTeqmAzPgMoPeD+crVBcLaZz4SCxa l04IQwm7adYt27DIJtZ3lRmtE2dauclTmdC5s9o/Npx26ulbAkzQpC4G6RqcACxy KtzOWFHBXatYzu067bPcOU76GhDz3XgjnbVc6tFt/7rJBF6e2s1jtcZTvy4IQi/r L/6TezjJ3NMXSI0TZetrP7uBWBQJA/88AaRPZLy4eSrMDOfbSjqa2zG2n3VQERDg AME9jxW4PElm07wA/PSq3c0cto6LwMrNgifAeacb2zltnoLJtW3LWGzi9GGGDcrg wHAcRDzqwL5DMYb5Ute8aU8qgJ/pmDG0nw0Qa+ssbUnrXYwBYW2fqw8iSncs5BpM ihVOPqlyzrcl4KL3bPOyX2SE5WaeOSyh7DqxDOydGzrP6mOc7Nl+V4xCzCsKuIwO zvwkBSAi0wRmTcccG45Z8K1jzXQLKObOT3FizqmLY9G6L2rJCW1bDVAsZzpATNuW 8AA/x4ZLznsPpweOC8e19ZyZmMKzLl7nabPmPZvgKetkXtUJnmMncQF951U9J64y SETunV+uVcTLOBnuM3OtFccsynpT0qyuPeKX/IFfvZsHcK7ytVwyLzM9MzE9cYzg PW+m8SfzybDyM6nP1d1n8Z84guiZvuTxo+NnwoxWcGKVz63w29NVZd0Zr4pfhf9l 4lVxvTtv7ZusNzhcfbJxrEs512zP2p95/4d+5lVdVZy179Xzj+uuGeG/yvWOcOqr HWpyyN1RJRcd5EPAoseCOGzq4Qg15i5FbeI5FIm+DieeBsIhb647wLqh7CJOpjyy xhrAIhruHZiobMflN7ORzhNpcCzJ3Y70mDmHZg5gBhjEsou7u3nzUom2jmfDJo5B li9ciaUJFi1caI933Rc3unaXXf/g3dEJF6jRj8gNiFrlzg456TijcNJ4vLoC98Xy G3C5uxFFSWsslFwDEd3Efffbp1FaeuN1jnynsQ28C6cVm0CstAFkRUIUpdhgkH6Z RaKBZYF2TJy5UE5OepSJdQe4A1evXY8TJ86lY49eTH5NTd0iftcuyEXUwgb/RQs/ n0EcDvolkSL4UjEMN1VtYC8X2kUWjWUQHBDNBVFlJuNnWQlPEIi1z8kv7MVk5b0a +FW9qnc3DnIfJCz9JrHqvYpnfj773TRVePXsvYqTDxRIrNXJaDp/kntVvKrsxEaW BXLmL8Q6izoLeYP+amCzWOSGagbjw7JFRoxJEP3MNBseeEVFPAjk7+IDjDzdWM2b wqq6rb1nfYhnn8g9l3vs3UXK/CSSXZjnMLGpxR4JizvTZ0NKaxK+Fby8Cz/TeImg XPARhlpFVoZXMPS7V4ER6QClXD/H4AKLUwenBcMbhmL5WhsWQq5TnzocsGGUCt8T V08dwekQTrDYoA4gmrSE8uwsit7dlK2IStqdtx/cmLFZd5FwIcwNrwsUl/BNCzQQ V7l5ZHw6X5NKFMLI5tdJuwRXFFKIHR+bNDc81G8FwnuFjX4d7n2dTW1aSqKPVVq0 q22bcPOEpoKhhBoUAWZrKd8hQRn+CtwgZCQSSJ9j0JPD1jis4JXv1JGcV7/lwse7 ZTErfMp//Mk4WUqrLpZVcdpKfCLl+C3j3dqIP6BiCQbn8Y2hAswYm86z1r8csORF cCZfu1Gv6lqNGeP8RZfxrUIVr7qb5tazJQsaYGv76WO55tqIVzRQYpAP+c+xJCe1 gn/u8syff7Zdx2jZ76TXWIHiUw2Ic0VyZiE6e8Frg3DG5xTRQXb+wyjaqogOTxqp CvArRPLCLArMEGL0LHMOBk7OES2nURdw4zTK3XJc5yDOZhFh7OnGmADet/UA24u/ CYnqmzBE1Aew/yQ+k4C3FYzRdo/nGYcSkypre+UGjbtjxNNLg2VYtEEMZl+BKVOR mXpqHUifCk3aZt76y1C8qgeRoNWNPfDQAIDvDvk8vXNssx45vqyP9fSf8FVnhKMp 4hrZ4cudeZQK+8SxnjluqWPONerWh0z34499iPr2xCTiK8v0nacUVAs8w1oD88uT KwnsioBLnyMUIDPEy/kk8eo60IG50Hvx/fIANto9VWCrnSZIk09GnTx59hRG/FVw SyH8FMGybo5JNy1spXiH0UW9OK8BlmyuIaLbGQe5wUNhul3Cmbwcb+IGHZO5aaPH qZsML458+CbzY8NQT3zgPR+GoCYIgjpNKnNK4Yl5J+NzCTGb+Vn6E9OhnsJoFMOT Jgn0edbpNqzwdMBAUzQs+5f8BbN6C8LBMa3IZp3x0t2FiJIAoX+FpZuOWYh36zjA JnRWvxcQih2U28NGaZ42mD7nNu0v8y3fEh4JZMNLUPaDz74mjvCbz05GnhkZtyam H6hHzvX83JqDmZ55LXHOv9V5bHgrP2dklmEW/CiY+chzFZh5EN5KY5Qsp3XPfMjY +608jfX3198lCLwjRH3FaUvuh8qqoA+P4z1mm/eoHZTeDbFQm3gtViaexRbtJQj6 +6I5ilIsi3kbiLreJgGPqTDl13OwTjI6MWGhOA8QlhPgpPAfuJU8yZfRm4OdchQ3 UMRE82RN7Os24ZyvXBxHKRYLAs3RqA3cG4vDj0VNyzYcpTZ7NpM1dya5E6cTQqgd hAx1R7lwi6ASRU4iX8gkC4RoW4Egn+aIDgsNp8/H0y++AnE4HYfwVLdv3z5Mam2A u4PpLZBEF4jDySjhJwfRhd7d5YTiH3xXpnvjpo0QL/X0OCjXvgtPhCLSXJxsa+tX TT5wKgsoubYmuuEim4oISCQsLJykLtLCnnorNiAnVW+lckrlrha72abll2i2TOwi e+czYGhhqcyPgKoeQqRCbFmmnWCerbqsrffatD5Xaat7KvWV4NIOn20D/6yLbTXf RKpZh0yZdcn68D3rSV1tZy5GZuGiBJJOh0eEa8NZj7Eu9Itw7BeTc+aiytjsoX+h hj1aLYt8aWtVX9uY7SRf77nwsljrVlxiRPl9xaimkDt2IzeIRZo+Tl+SiCC+VwWb fOFPlafN9VSqEMyU7+LRgpP3aiy4MFWLk3Gsg5dxzMt46VSKvphDlMKjcuXJFVGb mp6kPt1x3/0HccJyNl59+eV41z0HsPCEdZGjb8YVRBva69gIR+xBueZ0QAY3TCLb +SARAtioI+/8XA9rTkLKBPj53XYUQoB+YMyvsAh72b+aytRCzRB91c0c0gLOPPBz MdWbbzpiAl/QWSxKbkIprHVVsKjg7yZpkQ28c4waURdF49ywmpdls5CDAxJHUGam b82JHLPE4XV1/Po9549jOHNs9T15+58MMo+MYwTHJP8ytm0vD37JeCZx2ugPQ1hp hUm0YhqmLv1iAji2ANSTRdO3cjOLUpe8CwNz8yq4oDz/8N9SN9tRxlqJb7xSd58k xoEGsJZYxbwqRK/iJ1ZOHCAHWO6pcHZjqs6BG11GZI4t4eR3geeG2bmi/PoyY78X D570ZhKEg1jRmYP48gRS3Gn/X0cZWxGMTvwj2G9yWSWqJQ4l8LIUzCOuYIK0jqhL XRgjskmtkiBdVo8K3LkMUS8hPA2OpYthiiBECN6u5paEYm60qbdz3XFRKZYLZ7GK p0+Jk9l4O2dcm9IJF46oulTmZqM5j1ikpl27YDzN2A7GqFa9JI49wRC3ayHMDXAD IlgfD5Nw7wfQn0CSlzUAji9598mkYX1wTKtAKvzk/uc8Zv7muMgBA5QdFv645LCr ayHuk3M/i1hJDUaWm4J2uN32ifBmS0H9JYDLKabEeIUHVsDzzqt8x0mceQ71bYwJ mFGzcKX72Sw0lyeyD+WgixOXEIWz77UWpoKtFpvkzotXemTCUUlP8hJHckJg/zqG 62zck7HHZk1GnjSr4m8yUNwQ0Rhq65zHJ4jrLDjG8SMMk+lEf+WJrA4hia/VOkno Rcba4AAbDzn+EO411symYnXAXBzjuJfAtz4ziIkJh6Kf4zwQSsJSPEEVZC6A64Xp IrCc1qwpY1rnfW7k+jDv69jXhLDp1F9TVMbTdWZIzm3jU2g+r+IN4hYcA3h85md8 WrIaz3TOcf/6381XhU+SpmnlaVjmlTFvlWmeFf4zTqbNPPnABdZLPCPeyXplDfLD rTpYMNetMsrzrXyN7wAkXmscGn/1uiPsjtfVaD/eh6qUUve1FRPG5X3t/cdb+t+V 3N4Rov5W4x1VIH4WXrTDknicx8Zwh17ipo5HY/zbOK14BQKaySb3cNCFDlNaUgl2 UhOEiUMp30X1jH6O3sjPy0HMoLMLnbIOvlykQHoSZjXk3JMrgDnJNhSBVi5D0M8g V1kfi7nBn4rG5sejc8MDmKfckMTHAgTEHASGCwZ7fhZhlJrIfWkByzutyaWTqkJE c8QD53sG2dEL5ycQtzkdbx89DjF+Lfbtx2X4Aw/E6JZR8tKjpaIYTlqWJBcQNgbg CtpJGdRaxCM3RAssylluQvxBYkZRDo+QEjGxILhQVYtVNpc/impAumXbDcvJ7QOX cZ3QOS8pUO6qJhS11Ux1Uu5U6y6cjvIuBIFXoiHhZxg/6+3thy5hTwR/d16GAa/q WkU6BGR91qRJhFMhpSqB8bLcW3n4ybdyfCjhU76tycoo5F+NhFIv//ozvsjKXzeJ PFKF/E7C20Vymb6Usz7tpg2FSmHXjRKZC2B60SW9YS7+a/MqZQKjBGkhpsvxeiEm 7EOVDO13FYWH0K/wdMergsvae35o/TE8YdyKW3HFSphiIrbJMkHhlr8GGD77k1CS yJV4bDC+BM8isux12Des0YyHiA3IPe/fswsl8X70Voeif2Y5rh/HrB0mL/uw1NGO LO4s1poWaIcblAb5usBq212vkDnAEtz8YRVJpVHqXGdTlEfwLcJSYlZRCZeyXDgQ QemWaEAJESYoIq/c4bKlwrkLJzL8K57mJTFDKuqqUqfX2nmgGIYwFr5kDPGFZC52 sOX5yr0T9m34rmin71i+M7155kVbfKxGmuPuh64WLCv4tkYe0apUt6dwaJJkzcUL hImbagnR3HAaRPqSA3cSZZXWZGk+XlVeP5xv+f6j/lZ1NW01jqpxZsm3LscQY8kT UYg8T5jykrhnfCmQLSpWgXQOrqppO2FIzPPsKZTcWgnSyiFcD7LcHKqSHxvb3ADI NUbxkBMiTzo7EUNUIdoTnzYiwksVq7PBM19PnughCONe8KBWl2Ywrdh0I+4/dLI8 De3CnnmXjvAgCPtQyNRruIS2Yiw9ENdlbIArKUPFfkXgFiCek4srwwagyJXNEzPy rhT9c0wCZMNtZ69EXQtU7Y4j2jsDAW/9ixw1xKgLF3XT47NwkDmiAq197Fxx3Vji 1LYhoch3xS41Iwy6iZuTmIAkvjgmcYvEpiC30JzPzAXTuWmmTipUSw9Tc3A4p7qI +hTuNQQp4iYMferDqOIUTN8PboCspxsMN+M6rXNTAy1LXcVBrF8otvb2rEtu7jwb fzfrikQ1sEPr5ivFQ8mrB0svU+AACWItAUn0euoiB9x2ddN3WlWbZ9528r7IyfgS ZqZhCVAe7WUdXGSTVkPkVvO4K4yrNOnKRqDgJU5LkYHPzQGiUBLpKmDPAa9kVhA/ dSyo0yImsuegC5bAGyo/W65t12GTzAf7oQf/G/NYvNHztZsT4dBw88Ni6EZH52P2 aUMdIfrIjWFXeq/1BB9YM/7duAj3SZwxihdUKlZPYA7RJgoBfoKw4GjzyMvx0hoz rZDWO4H5zXt5ziT0tWPA8V0iOAD4zk086VjI+evXjMeDCW2w8VavTNBKy7OF8T2j GN9nQs1z7VXVO/Ou2rA2wh3xb/v09y/vGARao+9vt/yKU1/jaH8FhxCyyWpLcN1x WrHQwTvcj+b8SRRkX8QL3plo614Xy8MMue5LsTzbzuGdXAOOxVCKbQtEdBqLMdW+ KcZjOMZWxllvRPIs2jTLgS+Z5nOiYybiAoh3mV8PXPDACcXyRSwm3JjkuB8ve8P3 xsqW9/F7EqsBO0m5EteuXwdJoVQEIeJRnNN8kuO3JZUDsdCzBNdGTlEPFhXa+7pB NExu7M5PgXRuIt938tJ8nL++FPfddTA++KH3xsFDOzj2m0Fb/hrcKBYOkKjmLbtQ QhNJy1nSNvoc3DCJ9h4sMkgwjuP0yuNYOUw3cSC0gJyj5s7kloj8y/wsiMSJWyYj T3xwcfYSEfnzKgjB+BAV+ZNokkBFFAMO2RxcFy2TqPzkAmL+rud54pH5F0JY4GZe uUMAp4AkRETmVSGEcoRc8rcvEmEkbin1NF5FWCfHGm5KIcKpr8/0p99FzhRt6dmG vGf76GXamNx6kLv5W1/fq0skVjifpV6ZH5EqeLgAySEW8ffChZPgdS11UyWXWMVm rXq4WdQiQ3J9IGBywW+1yUXG/CzLSwJBaw7WTSLevJX3ryxruDGbhGs/MYF5Uzjg ytH562MsdXp6Iywds8r3QzhICLvwV0fnFXwrTrzt1iKIXFiqknWr2llg4rfSftMm bKmnZh7d5ErId/U4XyCiIVJ6oO537dgW5ySg+djH4rqIZ9q2yXMpFtYrNwx4aGNd AhmpMTrH8SRnkPz5lptr+iTt1hPPBdE6ClNhlfoKLNb2rRzCNOsIvOoszjVwQQf5 NRl/cv5r2LheRPxhhbtK9nq0xawGZVJxhjXdx7PlljEil1kOn8RYh/ov1Eo52nYI uCYbZLnAchybKMjPIyMtHZb1FUZrfjnsyEPi2jEnDL2ym3MNbXU4ZTv6qWDBN/nu uHPMl19JxJz0nT9ZDt/1wivsSEoY+ZCl88iEafWGZ7/xMfGan7zKeLP8EmCaVm3y +51/qv6v2nArPVm3EmZdSWh/SOxJeErgOg41p6sFmx4IoSVOQRawWOJmScJ/xmfa 4cHfIhxUHXqBQrKOegXVsZ8bR8ebpwHTmoVEJKMH0Yp5LLAsYAIyHb1BfCpvrrjM QrPIRHdCcSq6qEV0mR4dGEeYg2ib1cZ8n6cZiNsw3xrYJ4ctgTMi9KsanMJSfgMf IUhm5+ZDzrky1NMohef8EW4Qca5HnlACXkYIiSBKy9xB/Idxr1gXf8hZvQ9ELhl3 4krxVJ7wKQbCuiKhKNwajk1GgcSvadMSGQBWjNLvC4xLSEPwg8YYUAynjG443MJa 5UyJfwlL55X4vcxX5ghtbIOYTgtplO3aYD2axFOuegBrLPNseKaAi74d+jgJVK9M OOrMrsla1QbRa8cswqRaVLmWetUpSwI/5zO4Lwc7a5wb9A4JedqtcrywcJx0QhTP 45hqhnksTNs5NVmy7fzkgKeYEGNllnmlImo7jrw0TCG46VbmIUSy7typs46bmuhW MCqYu8xHOkEDE1r/cdw4oDUxmmac2fVIoHsKARSzPcM4ymJfGFfHLwNfxganMm7k 3chotMK+kJNeOV1boN5armHIUBFwF2VaRgOFfe/iU8e6l/pVVBY42J9SBG6wnNAS +J6GlDDF0xogkGVPt0UUxCwbPHPJbM2aX/mWPAhgUQIJc+B5Y6zkSQaAymwEdpn4 JW7iEuOKI4AfVzWXqxPcDFwTXsVxOXRD5tzL0zjz5lfhhPJKP1A5x4SXa2YVXpXj VKAa5TKa2fjGn9ws8r2KaxOtpfEzDve/mevO3H23dMu1Yr6Xn/2TOM4/rcv6rtb5 jucqzk/CnRH8t3+VASuMGSxM5AYIZIWFFcYAnd+L05+J6J18Cg7693GzyfHs3h0g AcxFouTiAtSONj/LHP0jr1yFUbhvTKiBNriodqIj187iZmcWzj7ttD9F+tpymePl +rmIG0exvz0Z15d2xtzw49Gz8/FojD4StREcSGDua/b6TUx0wUWAGOtg5++EoKiU t3OBMdMGlO4ASl7WaXIcd9Yg1VEccty4ir3vc8ewrjAXH/7AoXjk/j1w6NHuZzHQ xrGLY3LoMZWVRGviE7FHF9wjERsIAoSqgtgUPxV+JM5F8NNTuCSH27OOZqhcK2KX GFHpVxBoTo2ouXhUU+rOQSviEj4ifEkwFx4tu8yBtBdwGuICDCoEfuYJZFmcII8g iCCKUrGSBYY2iFjcaDj5zVOCU6QuJlB8JecNC5UI0EXHd96Ss5rymyxGuWBQvjoF ykTIka2xcKWHVFaANJMoYmZTUwh3kQTcQ+JhloW6s9CCfNWzcFE1vj/bnG00b5C4 S7IIxmVfJUq/egm7tkRexKbejs0ujsMlSrWZ7IIsd148L+fvKic7GzaOwLnqy8XD diQxY5nk4zhtZZwwsdH2SdFJKAuyx+/KdZqv5tBmOXq3rKn2mzEB4d+LHflezBxq BUIHN90YWk95fAiphKm1p67+3Cxk+bTTsrMfeM4+polEWY2bAyTTEkY3SdinQqp5 iPBZlExAdyXhrRLgMIqB3WxOVhAZuzG+Nc6yCVkG3o0ZHMRAMA10AksIrBlkcPWU vASB1qC9bogU2wB8wJTjc+aQi5ec3NIGx0gLXnY9/ZiLCXV3bmtRioTpkIpDPDb/ npR5FoDoBwQg8ngxizdIB7vEu867bF+dMZtmLJH7X+S3gOKixJVjvQn8llaUN2ZR B/fUkX/uoWN7Oap3ZOpNuI1x1HTRB0DLAsmxJzfUX8LGmeE44ZN3KUcuNyTCbnWM 0ia+ko6caae0QPlD+2gjoMApHVxH7JEDfMou49NxSU3JnwTkl4sNZdg/BJd3s+Kn CIJX5s09NyViQspLWObXW2kybgH+rXys25r4WR7lmmkdmBaLUYyJbA11T3ENviv7 7pwnPOEAPCX/kmCzQsQzFjVnWoOfIPKTEy8RLUnL95pwh+BMchnCSRlpTwHS/Knt 5VUCZEEiG4XiRfGMMIaxU3dxZoPQtlzsm6cHYm2PUy/zbLIZFV9aj+S+U67PErvZ RqpoX+WYvwMGejhWZ6aChZx2XhImSypUUrEmGwFxt2IhftbClaKkdTvW9PxTPj4V KdUzIR7TIuO4qQMgrHvWjcTEU+QxTZwSz3LXzpMswDRASqDIPNL4g5f9nP/IdBn5 dEVCHSueiNVdX4BTlsEaI2Gem0Tqne0xPfUQb1tn8Zezz/SKtlAMw59vlLBIvhq2 4JEfJTr2xHe0QfxDZ5DScUsEf8x9+w7sXOqASctSFpbtyCJwOkVKfr0w+Dwp4808 yEqdA2GQbeM4URC5/gh5cVxNxXaJcscRojzOs860Rud8YJ1kXJmz/zM/cISxwAgQ 30XPwyo7OR2qprdu1tvxarqspHF8TPyQn2kTMKVtrmk0nPazGrmRMUP6vlIEtv5l /JgBGTrWLIzMXctzfmacrEiG21cEEcMKkMxn6pgP+Vyysr72lJcns877gpC4t658 sh8sW8hxy+Wch0zPtyzFOFUaEpmf5Xol/Nd8t2bJeCFJpiZeuftAuxKe1kxY5P8E 460SSr4//r+tCltoXtU7zWfcMJkJNazAKrtqTbuqdv6oe8nvJ+PvO0TUF2ArTldD YaXGBG3CbVchqh1F2S5s1NdnjnIkCJdl/e5YwkudR3XqpMoRb9etK/2WDmzwGJfH mXAqOpCzX2GRL31qxxmJvFt9W4YxixSLUJtiOnDKUWMnDcovg/ujvvFd0bPpXsz5 bcVGNhwiOOWziMfILZEgbMJlkBuVxANEQBPuisec63FmorUDXYVrL/0qnmd1KnX6 9Gk4v/PxyAO7Yv++XXBQ5OIjDjBZ6iYHXq6Lk1suRCJVyulFnnIO02jznAZMTEzC oR+HyJ5PjryEnsqMNQlCuEK5YOUgBZaJeAtnTSLUeCJ1vtyCQWsQJ2z4ksiJWZ44 g35QJnIWqww8QiRz5E0c65gbIwBJ9agvaBSumRykVeIVJJrIy3FPGckx4DE59NxF +BnGN1FRQVKUz0INrmHhYQEyjmlEmAQaM6tLeCJAyjCuHWwdWEsYAwRkeYYRj4XA TVPmn3mRh/nSwKwD/QelmOk85k7RLb87Rmhflgc8JDS1ue0HZUatkxsXeEpJ1E9y yqOVjkG4ziKvXPTII5Gb9cmMgBflejS/aJt4rjN+C2eNzSn91wfRLgfUsiaxJKG8 vQv5FDoTEvgzbObmkLfX03BfL9x74tpXXhXxngtctrGUa9mlL8qC4vg3LBdd0q0u NDwnQWPbs84QH7Qlj5jJz/XKATDPWOxkAZODqF3+gY1b8Nx5lZOxOYh5uK3Y7q5T 1y64t02PtGmrcq1FpEWOpRtvNhqM8xrcdcWZlqFsVGoTPg420S2Fl8FF2SRgUEB4 KSJER2u1qs5YcVw04N57EsCMJIGmFLXnzSLOpsdNo3PCnpJjWIMiWYYh0KB8qAZw DNxe68L8lzgUlP4gE/hDLZIb1xov1o26SLBbsqICEvVu+LIThFkm5k8ummRkXgRa D6/khpkNJWQIaXOsGY8Q/60whpZwYtZGvwsLCegVyrXdWZZxHZv5z/pQV55Lv/KY zyXMt+zfhE01DgxthZsP9a4u4+YYsCwzbF3Vc54I0Rbr7MlV1gEYiB9a1B7pHDMu 5v5orFQDl3PRSmYZfMu2WIYUVsmpEL/2v3iQZNq0djw7r81FQjwJJZ9JWsOLq00T rnaXsAJ84BF73LYYsRCDDEUuCXzGAmOO2iV3trJ6Y4Hip+wD2k+p+TMLrwIO05GD m3UebIvvIp8kXmwv9bGM3PhIlDtmDDGuFXJMAa+6GwrgsAJXyD5QiZtRzWbFyGAR 5pj6IzQ632lhzsXsLzL03X9V/1mXhC11s2055CA89XNiHcQrEqkrWo8yBnPJK638 mJby+U9Z/Hz3o+VzeWInPCWEhEs1Zk0gHU/01tjGhweUtTjDTVj2eQtO5lc2wTz4 wncZcQU32y+UhdiUgPXUjclKOfQjCrSl/52HZsKPKxXxDYCJkzp4jJkCC04PAKLR lOX3tIVP2dc+O76rtrZamWKOiVey3aS0Xa1yslr0RzKmqHKVxgJyA5l9nq0jAPzC fNRak8kdu37OvGyvxHNG9asQ5Uca6+348W7+3qufsCWo1In4mcrBl5kS7qf8W/LP 99ZnaSH73DK8qrIyF8qzL4Wta1aVXxaVsUv9HbKlqJJH6S9LdGzwkdLl5DvezNe6 Zv4Z3Xjl3fasvW5/W/vlx/Vc6mvp5fK9PGcfZkcYJrz98XVNHSv4/6h7K8OfiFuZ 5X/bVW0BUhg3wR5J1zExcncIQbYwcwXTlhyPcbzaxlEaTHwmjQigDH5QR9Y4+4i9 u9mVTnOo8kS+OVWy/0T0JX4iQAa2YgbNObj9iBcszSMT370bG7MH4NDv4BgXuWZE LzTdNzGFV1sW/+5ujoYVRYFIcPGZ5VkLAt14vxvA5bkWas6ePZtylptwu/3m4aPx /AvPpwjFoUMHYuu2LRDBuFjHRJYcVa2NeMnMLhfIm+YtUXG5mStwQ+Q2a+ZyEksO ejMUQQ8P410XbXsVh7KdICzbLhFoG+VMp8Ua3l34SxhEFKuh8vVeFSwcuMIjCUIQ khxVlY88PUh5RuqjPL0T2njmISHfyUbBtCJEoZyynMKfONbF/Ku8vWdgllz+EMLl QgN6IQ9zkaAXLoX4NoZ5uEj5K0gzCQE7XCLeRSB72EXAvvfdO3mab7bLDUcZL6VM vkIFSFgUBE/ecrWIm/Gtf7aBvqFcUbT1l4ju5ih3kQ1eZffdvrS0STZxKs0NoezX hVKfxLp5SVQWGLG40LHCTg67bbKP/CacjCtH0fia89OygkT9LL4Z5tjQuamcQVbV 383Jniynn82cDmPyFILULqb2v+VU48C8Sz8QoXVZpuVVd5+rd2XryzvjSRADsALH cvTsRlInO/qO6IcLuhm/CSt7d8eZtzE3S9giYdep65DfIeTo3VIf2fPk1Um7JQTM e4mj8OTEAuYsE2I9+9mFyLrSvfaDC49mHHPhaMFL+V+yKmOHyHJrHQ/NqatMV7xO QxjXOZLX+lRu7qhPN3n0Qt0tLbQsa1Anx7gcfbYdualcmsTdPDoCTeZbmTdiGMgt F78EiHd+1LDijK6KkxGalfRuPamX7RDOXmXRK+3xvRDpfqO9NsYw2ltzrGaY4Xwl k/JO2ozkn9KHrRIow/pI/JcxL6wyrtmbCfENqerCC2UR2qqb75lAQsC0d3wzntM8 TyHIvORW0mQWa/IxrmXbitXLDLnK35K/c7vVovIlP96CAy3J+NXJR+bbyifhYYWI wUjImIlHsv6ktD58tg99zFMTAjKdH0zTwoPCvMS99b3A3OyNW6CXzSlRs0/yQ/VR +PPsBkN4S0xV+NIomQvfLGsV5salufaZaZMIEybUueRj/7RwQ2YgbIhJWQmZDCu5 Gy8vP2ccyxe3tBYW4mabWjjZdll85kXShIGV8GrdzbMKqopys2a61XBeSnuMUWKp 9F6uKlUVv/Vu4szAuhnGRM8AA3kvFSXEf777v5WWGCWIMkrHGpJwyneeC/OqBVfy EqdY6cK9Nq8svNx5TPibFxlnmflsrlxrnrPdTqwM9w/wWfM9w/mTYRm5VX/7tFQ6 07QaUG6kz/jcs4Xmt/aX+ZWcncbZz6swL+HV36pdWZaBjpMW2FbHHe8+lzi2t7xX eXhfA+k16asYt32tAm9LY6alPO9AKcecBZeeXsWLq6n/Jh5s2drr1nv2isDM1jue /ZU6VykSRi3g3fn8o/q8Svd37f6OEPWJfAUviG0FgkaO/QrEcw3CXZm75uSpaE6f Q8yRTkAhiVUaZFwmgDCvuopHc8nOcU5kJ7WGrrHLIGt9IGZ2lNxCxAlWbl7G+chE 2qKP4fuja+zd2KA/BEE/ihMdZXbhUKYiI0fzfYVIkms0i6WDOTi3Xco943BEDtBb bx6G0O6MHci3Lyaneya9722DmN+EiIaeZBfglqwbGgSZWC8RmohFuWIIjCSki9yk pwDaBE4CkgYNwKE1ndYZUm6RnYCuxuVqy3EyvlcRtyjEohxlF8UklKGmJGIKUV+Q iQO0GrR5zzphQRQ509y8JHFKXlRTgrMsEhA5/z97b/KjW5KmeZlP193vGDfmjCGn 6qQqq7vIRk3TQoKSEBJSt4RaYsvfwII/gAUSG1ixhCUrJGDBgk1XFc0goKGbqs6i K4caMysjIiMiIzLixo07+PWR5/e89pxj3/HP7xRxIzJaae7fMbPXXnsne82OHTt2 zhFP9nEyIGZQrM7LJJ8TKXaq1oEuZQnw9I/26n9sWQHPK6viw75zGpfJPgFa0x/1 bTdN5KHBSZQTg+p7Eqgyr+5o9ICmL0wEK/mY9BQlFWnAV1r8CNZfQOQveVUmGRCd Mt5qwENQh4f4hNrI+snustE97cPmITv2wLtt1EahAy3S2f5CPehhA2CU8SNwwTa/ M5c21GRafA/1PAZvv7ivi8+72iLmZx20h/+qJvZcRPA2j9QLTXhAFx14YC08wtsM dQgePkKa+sT8CIkpJxwdfqxnO3SxK5vy0PbrX9f3G/Rxtg9/9pN2k+1B2qr08YH2 8KoP73hSzWVR0fPWMNHwVgapzOqdtyt4b6/waGcGWdrFd1HsBmKlEyM+RVNx0mec UBuwHzkTN946tavX2fLQvO5/ayvdRrsj/zllVb6fgLmdX9u8tA9XsvE+fL6Ce6I7 Aezrf0Db0qfUfvgcp2Oa2StpsgcTfC84yLfUs0RX/VYppvn84bfs7cfmnquAQUY/ +7psxqWO/VVg6rFtga1F9BA+OGXlpCMk8BF4+CfZyflqAXc3XHFvJyDgV9u5huQW PZ/cKesTRKjRB7CjKLq+ZVSe+rJZymA3lcu+pio0aibA3mIKUDFtXelJtI4cWSsu nxBmSCkuylUeXcJtxovu4FNaPoBO4GBf2VZ61BjUdRSsgvJJrsTgAZjLV/B6JvYg jt7Y00E49uGuE/SQAVkqIFvlq616NRVDr84HZZeyQeAFi61cF91Vp8a14g/ck3Fl uQj1JFAsglPcu6zdv32CQ5GI2CWtbIDULJToDFp0oHTGJwV25wPihWGB0+0ozSZ5 JtuONCRE2b/qm7+SIzVkExJCuqZtAUj5JV5JTG9PSeKBKR20g2vrqDK6wJd19VNN ye6LMfcrweDNfUdiDeT0KbtB17FW0aFRP3jbij0PvNoZ8rQleXNyWtBFUCHB9UvU 0UZV2I+wVBJRbI1edQVHmeI5F9qmrgkm8P6zrh0fmKuUvGC6mKYgI9PYbM4A+BLC wNvmUr50K1mi97r4S5D2qVl+KZP6FWll3fINtb5uP+5oca/df1sr6e/pi33af6st B5xmQaq/ldqVUdV5QNCExl5roMppyd6aTKKYMWnS3G69q4mZHsDa/WbbvPmvt/bi 9/RJzdd16063LFWDh2xY9aaD+JVdmtzwIZV7WkW9LJleeJ6vFR62d97RxYfwv6VJ Dg8q/dEffl+fIf6gfetbeg+9XkG5xcxYHfuyJmEsXDIAMNFi6wr1eWMC78plAObB SD4CxIdxuAXLZJoHMuuVcTVJZOzgliIPr+F8TP6Y6PgiQFZggsgvK/PIb+sowpEJ 8AeeQR+Z7uvBLF6tho6FhkUZnGqywt2FrMZQl19dNBR2Ogc0i2fx4piyGVIpJnue OGkSQr3OeImm1leZCpGHCRZ4plmqSUYGVwzDhBjc0s8gcJihUczBWckoQyIndNbJ 67IuENucaAMmkzygRR0uRLhrg915RzEPvzKxL/5m4zQcef4A+fzOb+WpXz5QK/tg MzkHTn1eacqdE3hC8949Pdshv+OuEQ/WsprPhQQfISOmHZgks/3Kdz/Qq8sO/2oh uGCqskHl6gjfMZAPHvIg274m8ofahnNf6ctauec94K++9o3285+93e5oD/qOZOEN Jp/cv2XcK/r+As83MOn2FgqVcbfNXy5WOzCPhavmu0pIXl20w5dWZiLPyfhE7Ykm tJtFVAX8n2luzZdEU9W1I10XuLpwFo8D2egTvanjrt489UD9l4/b8ACbOPqhcz5u hTucaMvAibZD0A6b2uZ3Wa/J5Y0/vtiDKPNsYgcS/LCdfkoiF6959XvwlWaMQjae waC8tphYcvt4KYpv6rIAZeTzPPzLZYJf/WnaqqbqGiFUHZrFUyDB4Ei+cMY2MrAf Okbh22jUpG6FautVGNT5pawwgT1eQGar1JmY7aLqErbMgx46a1x0Sc15fMT9NMpN 9glgjNEn+ZFc4KVvZBgxKk2fIAWN0CmbnYejS3DmeNW+gUN0/MGjZCG1LhSdKiFd P9qAflMxpZUPHwoMlGxcVsrHJj2KVo6xf/GhEvKEzoTVYfKlLu4oV7CeLF7yWNaO xMVwMvESTfnJ530+EGAdaQSXzVBgnR+ZrOplLJTRbApXM7yqYx7bgHFsspXS/bxD JachiOhaHPAcRcl1YgEreaptXX9Nh4HUDO46yCi0Q2R2LIIZO1Tlcwnwtc6i9rB2 ty6fC8dfE3lcC3wpk/o4HB7JQzdn7PnTyZ2H5JjIbh19oC032hd9TZ+R1mSYfbF8 DKk6gtLLroB3u2fhQjhbYRQf0oGzgql9unqIr2mVkU66//xvt9OX/m47vfymtvQz odeDTaLHJIpqrIayxYFXVfHmEyZcL+kz0Tw4+9Of/lTbbt5pv6MtNmyJ+dGP/kwT +l+05/Wxntdee0UwLgTuaLKu920wY+Bug2hzbcEqDhMK+DFBZCJ+Wdt8eNCevYmX tcWiVl95J6/2K2tyx4oxk2Amh9RnhZDOhXxM9AhM8JiIUc6Ec1t7ULEDePAhQJcA HjD2I976hC0fvM2BbTZqA8RlwsXqJCuvWl1lfGQiTn06MvXhB31+5PmV3efOnrKV wUZ8TIfJi9udE5LsI3jouVklAnDk95iqE1J9GVg5+YUngLrwKB7SUXcp0IkTF+up G97Hikwog4xMsBl6i3oucCaeNJACt3OzRYhtRzw7wXYYNmuy6u6Vd6aTmkTyzQB4 YgsmwNgIeuTZ2uI70+KfCzr0Ge0GPgEY22pqlY8Lk9quw357+HPxwHMWtCv0sR9t hm+wJcgPCiODfviun5cw5dhQOqlRR13JE4DRdmVr7F248OAuEW/reeutt2VRbWfR 3SM+IHVdE/mXv/Zm+8V777RNPXh+7eqL7dMP9dVW2c7vwFcsjdSm8jed8FhF1L0L QdR2XMgpJ/cSRfjho/rJXn7nNg0uX+e+DLWUQ0i32jQpFg53b3a0lx56fORoR1tw fGErH/70Nh/KuatnWPRQuSb8l3QBtKN2UvNprNHF8JbeLiSdLzG2qOPtaTudRJaO 2EE+ox+TfN4hz559Li5rtU7yIycP8gn/BFzJpqTn8uChBxN8PxyLjlzcCwevhK5a WzcW2GNd9NGVYLU5CNc/aGEhwbr2bqfChSP9VHaUHgn4DT6UdjYF0fM2CqiQRtpy 9cp3+pQRLAfKOSE7W7twqHjGnXkh5zIUXuFQlvwSj6qw7yyXxUMeGeGDXfDf4ll1 8aXq77MskSnxTCp1utoXykYN5C6aMz94l61nmuAgg1qm40cv+lSlS3bSZVtoz/TN DY6mTcwv5UUfHqs//LpG+FW4OdioZTd44q32AVgtQulYQKdpkwUOkKkM2p8lDNUt Zqc1gNdTBwGVzoW0EzZLITovgupjB/9fwMzglKlfyWhuh1qdh57sMPU1Zd0NsXiN s+T98T3OP7BCCOyfthPQciWvmLxtizE6PnWXYRWk9uzo4FEffxnPx8v6D8tX/cKw LJMAcIU27T/zAXPkmfpCMx7tAP6vw7O3wJcyqa/bvGpkdRK/K56Tkva3sp9ca/Vt +1gP+qC7Tnq8v3lL++xraQ6ou8CKZXBeUVMRAzx0wZKTB94dkjeqcPWwwXYU7W/f uKZn7l/6rXZ887vtcPuKqmuLCX1P2wIO9ZYNVsOZYPABFB6MxJFfe+017Wm+3H74 4x/ry64/1QekXtEWm1faX/3lX7W333qrvaavxH7jG1/X9ghu7fOqPU0mNCniFXA8 BMa2EOZwrFTu6OMZfBUW+ZnQ8bGVB3qW4PCuthTwbj3BvUUFmaVeJvE8xO0VesnK O7h5Fy/7qZlQEjjJMxkTc+eZcGbS6dXxPnkDxgmJ1/rx1VomvgUDriFfExGhKM2E kwsFPYQlPoRMInKiMb6EpDPXICDuSlNe7YM69GzFmhBmckmeuiO9qlP4+AjK0/Ks 8vJ2C7ZC1EN5TE4o1lGkkXPHk3rcGifACyKTES0TMPNV7fBGHuStCZImpWqPTe2X Z8+9J35aOfeEXXdV/BCkSOxrUsir/HgdKR+TYuUcHOSHTtlddjS7uniTFOaZST3t AW7utACPLXzRo8rcBWBLFWUHu/f71yv1Yj9N8P02HMlUdwp27UM8MMrs1PaWLLLE FNI2AKIvMb+ye50IgueTl2jsXbncdnWhyQXmfW07usoEWRcSb7zxRvvwww/bp1oZ f+5VvXp274ZeDSud9DrCY13E8oY4vl7J++tpRV2z1YNsakdDsK9gtCF9glf1MTFh wsGeek4KNQkpFVjZLoVoFybW8nWt0lOX907zliC+MMpzMDeu6kL86p1279oVtc+B XjGrD7thRyFv6i0ZG3t6L7Ym302vYdzWmHCs1/txBcY3G864y0CZ34JT6VOlzUhC 1fatmuRLNQd5kGLZ0cKggX7oqxM8E7xcWHpSr2d2eFUsb7jiLTvYwm1QpEwnbeD2 s42KUdqKuPyVXjCHKi8buvW7fMhGv6mLPQE7vO5sKiu94i3cyUKmQrJ0M4Oeinxk R5mWiPhVyilL/mF49l0hjDxW8aMUfkvaVnLfoS7jWsmeWsFPfo7TfoEs84ETUzaW V37mXziVR/ZZfuSbf7N+8iFKdEi/h8YUoDFlCid0Q5t6hgnPfanrXq02yCAepqa+ VjqMlAcmQ7LaqmQcwK6fshH+WdN4YKRKvI5m2az8al15V1BjRJXiIufpBUIMxfOB dilb1XkVguRrgZFaVa9gqm+SBa26AgiFrYQOZKk//AGn/Wqxwi1kusW3512nSKwe VTCE+ES1TZUFhmyGOE5mqKxkcKt+6Ua6QmLpoCR9zHIrs4zBn2gpTc3Sh5Jfh2dp AWY/n3uIQ83OsMpicg15t19dqDM9XwbkOfsTPXSnt8bq5IPzqyMIZ1Mr0QQ/ZDY5 2EzTe6qV9RYMuU+2YjBAcGpz5HLuCmiyq0kUZE61Art94+v6MO1N3Y7XJEyTWr9O S3vg2efOqx15zTIfU2F1/IWXXvSDqmy5+fEP/8SD8G9/9zf1hpI77e2fveWPonz7 29/01+Z4iJI3dGzxXAAndd2N4KMdODpPjns7i07mTNYInJx5SwHy8dVR7wHWJJoH U7k7wIT+gLsHCtTh89WsHN/WKuSJPm7Cdg1WdCljmwaBCSYrv7KMZWWSmVCTd94a 8EBbjXhAVvIx4dGPPbm+gNB2KJ8fZEBex+gvenY870uXLuiTzvuwePIF7C4d4yNs 6anXwcU2NUAU3RoYPOHzGKQytdN8itFEEO08SlKfOwf13mDq0/r1YKJS1M8POPWc L9soa5mQi7YAo/ak5yKGNpNtZEPfBeC1eEozATw4qHbJA6vYFho1iZPNzUey9ZMv vDgRxwbE/GpiX3vsKS85wNbcUhPMPX2CnHY53OJd4XXHhDIuRnk2g3s13Ok4UXpb vrClC8nQmNum9KQegfL4Aml+M64EV5/A9zVN1ys8X2jv/fx9fSH5w/bCjW/Kpfny 5eX24gs3/ZYmXpm3/8Kr7b4+nHOPu2GaYbDFZF+60M5e0YKndN2kH7K1S3bm7Vdc hGwBl8+zraVWuGlvpNTBCfoRrV93qFTJPGRYrbpLb9HjThPXgVvqDzd0MXRFW+VO X9L703XR8UtduG4jkxqfj8dt7F71hPrkvnjf0Ssu9W5v7/fXazfPVP9Md7lOZXfu UhGzyKCrOPscE3d+9IMKFlRJLkbQFd8UTMIIYl/ggkUA68KdAmjBzxcKvtrppIyD 7SHHgaRsob8x4DMrwVkdLFNi1Z3wQCh/t1/Qb4DASjhpdwMLVQXg5OeS+VDVqWwi K/VnrJ4KcgqW+YvgF+C5z1MHq3ScqS3IL+tFofAZ4xm3SMz5FSyDOYzlc37UPzaf RJIv2OZD3eCUjeE00q2cL1gEhrbvZC1wVuTrmfOeQj9Hf7la3NR0VvlRPvoB6cl1 KBwC1FIWvce6A+pjJEu2rjGU9btYNssFVgRYw8GyAO9kwmEVNXyIGfPX8DSo16Y7 e3xUfmpY2Ui2ddYHcPODG5P19C0RQ2b6dEehX09suz62p/x78uuLPuNs9gAAQABJ REFU7LEisWgja1cDGrHPurEDydYGaCDbY4TQB3Xkt1oVXfXDdl2/xMF7VP48Hn65 TsgZNpaTfpIf/IKfdGQY4xFnhD9OOvZyWz9OhSfAeSaT+gia+Jw83falGO+N1wRJ Jze+5vbgVK8R1EvqmIvqm3/qMJr0ycvqwxFycyYAdB53oFCeJyK6KrATFe/ycoxP 8PlRkwYmA3prVjvSBPFs7yVNAHSfQF+m3VZHOjtmsvyJv+h3V58v39Z79HkX+rVr N/TA6vPt5++82/7oj3/UDjeutL/53b+lW/ovtD/503/qAfv119/UxOuyJnlMlPVu e000dnXih+URn63e5FWRyIK8OFpto0FWLiJ4bSWTKF5Fyf5tVGR11m86kQ68EYew zbua+15u9sKzcr2vtwSxWsvkD/sVXq36oj6TRH5M4MizRQG73Lv3cfvk9qdQVRkP CtbESIJo0so+b03qfCeAmMk4K86i68mOJjXCB5dQ7QkvtZN4MSiV4zPSVDn6YwJP 7JBH7Z4tM+D7U/TGFg7vgGaCx+RHcgjdg1a9kaS2AFFHlWoSJRxWjzNJRR5sWLGm gpJV0ssPqFUdXeZ1AKfahpgtSrxjHf3FUpNa3Aq6bKmyP8n+aMVrP2/cuOH2qgsx 2kLvtxcRJt7I74sAEYIe7+TmjoffziB9crKVlLIJd6rKlrUNh76AO9dFKO3HhQQf UYI2k+26cDCat2Fx4UX78pl6t410JWRVBfJ+v7JoISM/2pMLlrpQyCQfP1E5PISr yK/fvHHjpj58plesajvaFfnQplbv33zta+o72FZ3vjSpP1bnOtbXPZs+Jreld9j7 4T322UhfHrZmWxQNSdqTfekUf0Fmw9ysdbJEdnBNwFutaFP5F2/aEXjzmp69gb4a hAfHj9WvuBjdkd/QXmR4g8+Nm/ponezGR7z03SF9xEpvLNKk+/hY23akyxXdSfNr NPWFVNqVj9tsaPWf1fwN5TfdfuUwfmAameR7FgJHIXR723EQjh8NgnCSnf6Njn4H vi7WudNzqgsM7gjUooQwJa/9QPVORdc56JtOTRAypiUWUhWrpqbtYl/y5E4LogEz fqeVuoEnBpey5PED0k8bRloj7aelJ+n0L3kY0NXnZ5vLdpI7Cw6hD//IENhniWlN h26jZGMjgWWvsmHKAPjOcZcFedDjjH4TXWjEIdDu9T5wtYXOJT5n6MIZX4LX8idP Ew+NFZQpPZZzjiCUjMVbOcPGw2inR9ktuEWz9E16pDmn4RueJU+VVVoth0mEgffj xWPpTN9yqSj8O9pKFE4jt6RnxGAV/1m2BYbbSlZ3f575Fn9J6XN50aoLr66DHQFN 1MaefOCfSKH2EbrvQsNKoNjNsduP9pYlOFmCO4s0pYB10TTMcLEufAEZ01foGQ/5 Oh34malB5w/nmAEIMGn8T1AOPZBOfkxX3cKf6VTd9firdEOfeJXuRXglU0SLnKn7 tHHkoN0jS2DRI/nHiZ+mzuPQ7VOax0F9fJwofWGNbhSuYBlr5PJqHZ3o2GcqJ/ZE SH2FToRTu3OrZXyiqxaavRkmZeMZNvmZCkyvAK7vjqa8zq/HosV77eG8xUq6ys70 3vwjrcyzDWaDD+kwOdKt+uduPq/z/Xb7ifbRv//uz9p3vvPt9t1vv9x+8e5PtB3i fnvjzde11/5FC0Pn2teq6hFfrdMqIq8g9Jf6NNn2yrQmUJlQcekiRppYaVqt7TiH mm0c6hPoTAwJbMHgx4SQhyKpx6SAB3lZGWYyxgeMPKFXegzVuaWTzECbkK+BSIO/ ZOTCgb34rNazCgwN5ik5iUNbwmnSIzm0Uo+Z68KAiwNk1kAiUzLuEKrd4VcDMk0F LL/CkQySQ7UsAzjwwMGr/kynyqgPfo990iJPxaKNZ6jhBJKvSIG83gw+Za+irVxd FEq+UTYR6rxFT8pIQm8fYRIPoi9ERAsZ66JI5bIND0ZjryvamsLdkXozi+7OcEWK TJaPyT0PH7Py3yf4sonfy63KHoh1Ynd7aLLPhR5fQDwVDF7V8YsW+vFgpi6BrT4D Ob6BjomBqWbBxHe2adl41lUtoHpVjp3QE1/jQkT8etv5uQL5CSvLd+Sbe9qzfnR/ t33wi/e01exr7h83eOWl4Idqm+1dPReij61tyF8u6fOyvF6SD9hoqu2P3rAyLS3E VzaRH0tJ/bPNTjZTfz/WD59CgPoYmFAkDz4s7xOU3qqYNiQt3+QVsLwW1V+wlE+e 8NYc2fFQ+m1JDr9lC4W4aKUN9WOSw5t2TrXXnosjwok7Ye11P+ZZDMm66WcyWJHH qrqDph8+IWupPiJLP/34Q2a3e28u2ss/+oD+6o4iiwRwE4SEFhb4giZblfARAhN5 8FHat+TJwRMjQBPMMoj9g3Ty1K8LnsIBnr6VODBwCckT80uY8edJQsqeJB7pUy/5 J6Ex4kpKWQD9aABko79VgLYvhGSvBGCflWdorYtDu/rqqn6UEWZbliyWCT1U7rKu 0yp9cKWp2rzwKi8OrkO9/JQwjnq+kmWPlJV8odx9VDTwI/4SRB3SpgmMfHQLzhin DD6E5Eecx0uXjeDnfmXO9IHVEPrElCW/ilU5ypEq2iW/ihsocc4pazB6G+rm7MxX lM2/x6TLnjVfwSS2Hy5qP6UcmalHmdoIeA9ph2oRKgtJ44qvxZQu6sFOLHiRNX4W pShlbCfERsTjnwka42GHiXhHSr7ES03aP/wCm2NkhDOhHyehC6tsV2ljLcpTMuMV zcDneJRvNW0ZkOMxfpEh/BLPfCoVWkv44+SxGfXTdx6nzuPiaKy4wIIPocAe2oeF Jcnkowh5OhuD777SWjtrH3Niby+1F3Trfvev/4t29N5/rQ/dHLT91/6mPh7zgiZR OjlrrzufiSacakVSVpHfMxnovU2OzEKGb3ep88CEc2BfpBC6HF231jc+1AN/P/tR u6WtN2ff/c/a7hv/Qbu0ua9VeX30Sm/yONPdgnvb97RKqdU5fZFw+5JO+jyoqK/h bd/R6t1f/Xft0tv/uT5rorfn3Pjb7fhb/0nbfvG3NKnRtgN9NXB362rb1nb6bU3q z7b1Jo7LulDQhOHq/Zoke0uI5LLY3fyxER2TdFbnUaLKcADJpj8mNJ54DoOCtwGg r4hWB6thAnxYxHnCpzoYE3ZWdukAwlfd8GJyDJTKNamustQHNz9g/EYe5E1DcZEJ TnH2CoQ5FB7SCsO4wZc6mrAJKpswnfN0Wzqjq+XoJy9YeEWShpYDZMIMJ8osF8QU zvobjYBFZuL8As8glbwvREQDepbTMa1Q7UKB9yqLbib+KhJzaDOAyw814UQXwCaE DZVEdmJkyEpjeFAAlnGETz23mfBdp9dDPuhic3CIPVEWjDDqV5AZppRsxETYkrm4 WJEvOx1xUQddMcU2pLlroIp1h0AXAywT7ah/lu3U10yvdBMV4xYP1fdExcpNfmON rGLJge35OXTRqB9Z0za6rLHuE65zVQ0Z7FuKOwnLbrkFQFbLhl8JwyJjO1enpPNT zFhT8mOxTld4kYMqJR+1oUVcOgCfywCXXWuyrjwXdOiKvCnraZVOdZd0QjPw4ifF 7HfwrrqhgWK2h+Sry/TKU74MoQ2cdMJSvuAFTrwSqNt1E1vr6PwKUmVGWkCSX6LG /uZpoqt6uLzLQd8J/pLOyANaEbNXHdCrvcDxNbtKotaAVEkX1HnJdoMu+B2RMSA2 crngyRNHZ2TAy+hzuo+mVLcj9PIb6iK87yCZWzGb8FQ20aVcMqasi+VyioDDyn20 pweSQZ/pgaMQ+omBQSv5pAMnHgN4LG7wR3slGAKdEoqGRlX/0gbUJUSn8PR42AkF Fjmg4YsmNRV3EzsJ0+1VoCh4n3xzvoGv+SjdA+XQdJn6PEta1qGPcTWRRz5r0sc+ 4XDnjmqq67tLlJP2+KP2YfxQHn5VOxzneJLZooEPJmMvtRR00eu6OgDyqQi5Oq/Y zajoQJUuQ8oYb8EvGUrvsiWLUbMdXLnXtz0MYNzkjjd2hELRH+OiJQ69YyWfOLhz HjmLlqhRXGEC0ZbIjGw6p2qM55xMzA6F9957T89D/sR3b7M7gQXMPM8W/d0O3Raj npRHP2QiRLZ1ehqh45BO/dRJ+TJ+Ud+DeZrwzFbqMUKd3GeFYwAEtSlkEE6pXAGz ysln4Pm08+n2K7olfV1L6Z9oT/vHbXNXD+BhPCZEOK3SNojpyGkgpjImVWlkQKAW OjkF0xAzbZTHFXYeqNk//bm+VKkHDvXmC95ysd3uazK0rdffXdeqnF4zqVXKTX39 6kD7mPnU99UNfT2z/VBfov1B42vc2/rc/KVv/KUuFr4jnbT9RZNKbvvv6TpgUxcq J7pt6kme/MsTb2Fx8tbRIjGIkaz+yypz6YaoQnPI5ABEOhcxfYlJBo7LoII9qJMB iPJcIJTdqx44BGyFPDgzFxC0VWhk0gRe4fteigSqfE0g4Ucd5KyC8KYeIPbhjyH6 IAkNU9uPdCHm0QbBXNKr1EkHBvA7Fk46jH3BqDxsqSAchi5koRv7xCD66IQNLF+o ejW8jGAfklDRofQXHeNW/eIJCwYnydDby/4tWH0noAb90ln7z/Xu0kkTJWg/f41z Aha9TOC7aOYxT96xX9GlHNolZ7VrGCAT8loXxUz4CWf6fkLpPtSDgH7RqWjOeNg/ fEzElEtoHlAuu5QNoHHg7WDYRX6olXJfU+nukU8CWoWnnZABW0VG5Kbd/RVGZ8gX 5eKpfFebcyjyll9Vn0Ea3efwxZFXyZUDvfQvWYtOYcaelIcPsrtUjJyGERcjiEFB xhLLRZ/DR8VFcrscbYwrmdRGZc/SwXJgRIXwc4nxDaag11fU6+t6z7ZKQbVD+TS1 TFGHokluwc/6GUvy4MOlL20RXNqCtOVVPLSo4OdDdAE/ARjiGwS5LlNoAxjQq5rw kAere3rgOlU3dB13ekItextFyDP7Cd0TY/VFfK/GfWRC14SSk5z7LDRM/zyx6On+ LeGTDyVi5C9B5Afpl8Kt3hfiVcP1+/bEojW3QWwXWWsMpU1kmUG08ksBOg8m9TX0 lH2ncqTqFYlr8hFZqyy4k160oXwh9UrqTkdVDVd85i0/kmEmF1THoVc85yLggUGL cYxzTE2sIDbLPNcSm16POqSF5eIac5EXHPQvGj53jgSUDo0F2DrNdEf+RQ/XMUtV hM/6oB6DjMjXEWwrpcsTmM1oHORunkJ8npl06QOUuvQF7kiWjvCDJmdZL8S4bYRJ fxUcmMcJTuqLELq+cynbnGkQ9huhlHbwpF5yIQP2E3BeVET32BpWlY5OoU0t9APe RZI+zIvAX60zipf6bJ0mJD/irMB7AwQvcfBX80UzZY4nkCycxsTaSo+/1AmO1DpX HnxwxzT50U6hkTj4xMsw4ow0lnifNf9MJvWPEphyAk57uK0TvBx8/4jh/q72uatL 7Gqf++arWul+S6+f1KSePfbqdTYuE0U1HiSgwg8Hq9uTAHohMM72QVJSiLrHri0J vPlCW1l29eDcpQ//vLWv/XW7u39dq+naW3uqN++c6V3gpy/oi/J60PTsQJP+e03z f63i680e7/3jtvnuP5I8ekvP9Rvt6OBuO/n5/6wv0f52O7nxbU3o7utd5nqI8UjD 8Ka2tkiAbe3T1y7o6kzKR/9qZBG2EghYIk7+qAIGRPDLpoVDBU6ins4YubyZE0Mc x+WdUPEL38Jl6Cma7NVnf3rRpkpoVL2SiRNnnXhER22ko+0Ovjs3E4nOj2iuSyMU DfCQq/jWhBtYneBKrpKiV0AoEdMwarAHU+UzGS7K4qWq9YpJ6jG9J9QFS2QySAde TQhNFVve2ACAJ49UVpn165RcV3AkIUCzyuWruigi7YskBl/kpVyym41oMQcoOZQZ aFJeYUpMdVNCXHU73+4Lgc+8ZhpWAGknOWa5Q5cyTrzxkxqgTVUH2gRJVY9bX5wo GMCVpE/V+aJ0ND3BeH0jZfUsqGqCq8LIDj23G7bSH8+p4EVGMhGwO34lK89ZhACs J02z45AWW/ET/5kYNSoMNlBSQQfaJnSBVEHVFt2erfrCT78CL35dhRAswVLHOLIV bOxPKs+kc/Rf6s+0sDf+gmwlT+4KzHVrYlj05Wd9Ypm+4Lbq/USDXNcB+WY+1M1k Dvy5p6DD+WBekmuSDRTkow9Hx1LU/KC5rg1KCo5MZYoG1USY3By6/kWyap3DATvG Ts2JzJRAzLKnYo9Xg31TLfGkJ9J3vLltCqt0E02y4S8mM8dQq2L6Vk3GVMN4hWxe nU+RgnLZDZ7hO6UNY8Ma/QX+4GC6VVxoBQaPMR+agdn3bWv6Ab2HMXw+HzBBRCYY uh9Dbo2incRUuBxDiu5ccZRjLUF4dv2gDT0C9UqnuRxL2Br9nLdKe6xjErZZ8Swa RVcUpKC3N2mMIx141aJcFsfgCpyLx3xwZvnKhni5qBrX+jChtryq0W3LmMJzhMUf U2tST5v2duCcJhQUKTYdHp6JV9oanoyD1Om6UJ/zp9sUcG9TMZ70Cq3oEX2JzR6Z Ta/n0U7CVXnJlzrQCtxioIfpdD16+chzrDPCR1uHfsUzLVFPlTnuIDQnuA4w/SLL MjZix11XZhoqRyZ+9JdRvrE+cELqpCxx4IkD/7ziL2xSHwPQMWwQnVLkGu1QnYnz 665WwfUJpHaiFb/T3df1IZhvtc17f9g27t1uZ9c10dYrJzUCdUOWQ9Fm7FfjxEaD +fY1QLJMMGgAWaoGQxpEQB5Y1b7fdvNrbefjX7aNX/6/rX30v7bt59/QG3Beavc3 9zSR/1RbCyQPHaBvpONrpXua5Le7/1RfpvpB29Zr8rYvv9E2P/yTdu/jP2jtzj9o Gzd/S7NL7ZvXJJl97w8uacKsC4XdI/3Yv75dA2jdVlttQhp4XSNjK8KyzDrR61EX JY3jo3HjWAWnU67vxNAdy0iP+ZlurT7QUWeL1qQQWCY+lCIUMgH31hMgnT/qBM4D sMFztfGATvCyfqVgZOUtKZT1BYCg9clTyQmp4Ic3MKYy00RoYA6OiUK6lKzsOIEx DjRky3BFiGmgLlvCZw7QZW88g0D5b8qWsOLblQ6SYmTjhy/QfyyYy+e2KvlL9lwI jgNPaMQmVE+askln062D9UQ3nSjY0uQTBoM7Io7BJhANlW3RaRSwcdEUFTq4bVq2 cn3tJXc/AHmgN8oSnUBJellOHotcNKkPPjE/QvROPMKNcMEheMvikTZlM11ycxs5 N8hBPj6Qh6execKSH2ayXWWwCQ90FYBb9oaj7iiYzmBYIPDWHxcX0HnUpF5VpmBZ RA6/Dy/DhEGMr0XvyJHKS/z5HDDrCi60UxYaqRtaxIER06ew4TKgZ/XRwl+Wj/nQ A3aRDpQFjxXnMe9MLycdGuBXoG1WZZz1q3NC6tV4L8nVRtNPVb1XvvejTJ5DY4xJ hy9drsriB+UjXiXGE0DoIgbXOspytMapznmjHbsyjsBDDhYFakyCFz/0pF0qD/IM g1lkoWQ1mLeIeAGBcReCCsQk4ZWJvgXv5FKvcGucTV0T6IfgUVZp2hTa4vUYk/rQ HGPoELAT/UpGVU40FXvVnEWRxaRehcJRf/HP6Ko7T5KhbyqKcycqPIW9Eka4a6li waCggExEUCTZf8nHJsaBb8dfwiknjLSDS8xvrDPjutp0SJ0JMCQmW8qmI82gpLzO gwWd/YE2qGAV3A7kkc1HUpOckZWYX8av8F3GwQ+cvKmbmZM+BI9McFI65qEz4gbn 84ifyaQewSI0aYSvhqgBLMqBw756HtLbYVKvbTEP9Cq5jUtapb/0TW1ZuK6vv9/W OyX1ekg9xOnBgVvgPo2rpWRX35YSfa5wmfTTfJTTgB6QNBB0+yOJJvsaqDQob1x+ Tm/uuK0HIv9ce+z/p7b3yvc0Kf932p3tem/8DZFiIu/Pvzc96KqV9l2+UPnpj/Re a33U6eVv6gu0f6Nt3vqztnn7zzSp/1NNMv++rr55nI7OqG1FuuXIb0Nv0NnUQ3m5 bbh0LgnmgD0SksZWU+P3YuqjFBMZ26ArGJsnHmmFTp00qF4dJ/CRX+pTVvg4MMyJ mZgWZfAQuWgRB15XsVW/hKas6BZ+dUYmu0/m3MWr6pAmQMMTWfkRacISb4LLT3gL RfiGBnUCI01IPvF5XPmD/InzGG1C+Wjfwlfbc55ziL2gPcOmlIB1opx5U1a4VNCk Wf4UOVCfi0dCrQpXGyADdZA7ARj9gQl2ZKQMHNC6KYPuGHzrpViaCkn4ffVsBRE2 vYw7QNSrCy5oyy4+YcILPsVvww/GF5VZypIn+lEa288Th6Jpu8NWlen1kZU6Y4BW aIRu8okDpx4wQmDk4WX7idYIB28sSz1wRnzynazrK7sINQZGnsRVb5YH+PSqT6VT Tuy0WssBZhobYmvKCI4p0h+t9LiTetPuCpAe86FbxfCHV5eDQofAKsY26LIuLMvE 7Rxu+BN75WUNKYomFqAJcBHPsSy2X4cbvKlMfLHlHCoN39BJWeoQJ00ZchICXx97 WcATTyFO9UOHeJQt6cQpt7TC9eRTnYbY+5glQ92JLdpdC9Atn9DWhALyUoLIUXqg S41R4Ut9YMkX3nmi5+UtttRLXeJlSL3Q9X7qh+CFFvrVAhvO4hN+Z7jkUPn4ZupH lvA3S08mJa/iLILQD8ERE/95Ug+Mt7tBWgd/EbzrCV1O7Y6dLv1LiouOqgBvVxQO aYIi9yH4kWaa1NGARydQowfxDC+6iF/y5HxT/Sk2uDhOvS4PjHqIfmRd3waswshQ duvlwXNceONxhQN2K+tOeo0yLtOzviPFSp+Ts6MAj3yAQrMXXxgFL/GFiE9Z8Mwm 9cizFJo8RnDM4F//Mr22MSh9qtW7Y7zn0rW2tfdNTZBfbxsHt9rW3Y/axtWbmoxr Ys+pSCi13yxapzmrGSmH9sqvo3r13g/Z6uLghWvt6JOP2vbH/6Rt//z3te3nd9rW /ovtSPw3D7R3/kwfndngdXl0Pj35eucdfYlWP94Yuf2yNuV/TYK80LYf3POkfuvo nbZ36WvST92Ficzi5DXaI3YIbHSOLuoU4XAuR6euKpM/WVK/6oAggzPhgto7SWLK wyd4iR8Or0GlVprVWp7YVVuO9UknwBOaS96Fj2ylDG8hOeWCZ65qEqiZFfWxc9K2 RbPoDyaZeEEAPBzAdlI6+mGSnHSK1uoJaKZP/aJTZoRfYOhFGXaZJyjRl3jm1+X0 BWfsUXFNxIsWlJEVupiRspI9uNBkVRL7l7FWecyw2H6VRpSZ+ZU2dSwdR0iH2yBy d+0RzskgPjhhY1/sqjiTefxylqPabGkfTy4mInOi2nc1H51Dk7jwxKejxk/mmvGV goTGaLfQAyPyFd2qA4x64TfWXZaFRuiQx66YcIRV/ymY4aK/pTdfkQ4N/CrpxJFr pEV6zBcutgEevksfp22KvpmsOYTmSL9gRWsshxYXN4GdJ9eNgDEYO+CNcAuno/60 7Uj0CNF5pJl2TjyWJS0uHhvJM3pzjrFPTt4SzNiIGsVvnR4lLjbl7UXBpb0q7boc FMDVtbdVhRYh/rNM9+KpPD4anws+J2pomJoqhV5kdVmHU4ewLAMGngbW6qixv0BY KDSLCfLLZurQNfGl9moIfT8ztpApmOanTGiP9gjORfGIS/3wK7j8A7kNnymgEv44 1qU0coTG6P/AaixX5UeEuf6MO8JECsfrNiu6/vZNN2rx6XD5ZHRgLNQoYznd9iKT CwMWSh4dxDSDMKJ1H4W+uE20uHGgDJxMMu1CJjaGPz/0ErDqOol8kaV0SL1lHFrA lyFt4dj0RXwIqRu7DkUPTYaKNaNNB2xoWZ8BNiYfVk7ZZI+xktLR5WG0UyW4yT+r +JlM6pcKkk9DxTi4FWbf4mpV5czqTzV5xulO9YrGo8uvtYO932xnB2+3q3f1wOx9 ffFUn6fkITuZUrE6NavwbkEdaEEajlI5iidAzqtBsJ4KWNXnwzB6Z2XhPv+C5ufv t+MP7ra9n/xe29n7N9qVb/xD7fMXjj4te0k8OLUc8wDtid4lfeuf6QLj55rh6B3v e1/XW3lutHb5m9rG81Y7vfODtvHpj9vec6/rIV9pt3WgN/XoouCU1+hpMjasaMQW iEUg75VHy33e+Sgf69ie0gPVY1voJE2cNHDqEoAlHumlPGW0UdKJg1+Dks0nR8fO RnWadqkAf50UMjB0aPATi4r0xjeE0Ol0VNsdv8D+fUdH9xjhmy9tjRfJDXTkTo1X MbEVdVQ3Nii8kq0eDqSedBQOermk448TTeqTt92c7nZByF6WZz0AzTYqusAItWVi lgmYuYpx5ASGvUIjMXDbpsQ3/tg+0dF4oNInXGFud5Po+o10k17SmGgp4YtgGgg7 cNHBhKDLErxJPhVlDzj6xe7WUTkm/aHhdKdzjpxkJSBfZCQmTPaijLz+7CPQPyeY q7hO6IQGcWDQTAAW+BIHeEJsFnlSJ3GRhK4kdAa6g/wmLhk0gPmOG2MG9hG89Crc 8DQ/laDvyHvmN/ocFmGSPdsIwtDmCLToGGC5KjUfRx5zesan30IL1eZ+Dmy2UagZ KsTaHqla8aPqTkEzregTadfSE63gRbaJSBJimnkNF5qMljz3sWBp7HFbR00IuXhe xURPLpRQW5fbrocVV+UjL75izEOQTOypl1AXc+VfaVdWiLPAASx9m/T0k+ye1Iuf X9dpmrEB9pckZkSdcCveY54SS9z7MPRjv8SlPz6igOHslMoNdE2HIsFKP2XI064C ekwHSSEw6Nc5btWu4JTs0Ct5Kl+0TGOSM3URJumqT93gEs/6FHzMJz3GSZvIcBjh yE+AV3ye8qQpm88f1Racm1TDR2xVPgCm7rrqeSyXCeVhk/qqTZ2HBdpAhGgvbBHn x3b6m8YZcm5TeM7nGyjH/qN+JoU/owO0+sm4Fg3Il55j3dCyX0LXONiheICbYPsy 34A2cnVbgTPigV/VQicU5nimWshILUOs+AI0RtrL9ExtToGDnIT4Q+rFJ1KOLwSW vjxTWk1B41mEZzapXyoUY6CEDWJt9LEgJvUaZE70hhm+2shwckb6ygvt8OrvtLOj n7Tdwz9uG3f5QqveLqP3XrNyLsvJwvoxkLAlQTT4Qdsf+TAlMWEAU4PYXXwhkIbR /vh93RG48q22+dHP2sbHP2rHP/1vtGJ2ue2/+nfEQncF9A7rEz3s+kAfo9nTnvh2 S3vnj99vG/qa5smVN3XxoYdlb/4N7cv/fju68/+1jVvfb7tXflevsWTbzYHe5nNF 1yrIdyg6kuvciaLkxTbTwID8gxPZTN1mSRPHIRJXWdHDV+hsCeAw2cIKkSH1cMBl Wxlf8PP41YHFXaSLFzEh9JzxAAA8OMhTeFSNZMD4S77q1tHt5dJwAC6oT2BMWJRG UYeuN2nAivyQGjq7iuTuXJT1RQDnKyYXCXYlfMl4YKm829AXEfgRxBUY4DwxMahg wK1P9ASgAMwDtuWGQuEbHlivAx52pMzy95OILwpSRruAP+kuJrMaCGcxadN6q9Es H/IQXF9xeJnfSM9Y4EG6WigtZRde4Ka+6dZ5zxRiczK2rGWTbuqvegM8007jofcY RvmAmz4DP+noT1upOhRMViT6OcF4ORStou+FAArgJ+WoO3IO36kvdiKG9zodNEVV pmypkhrKQhlgby8sYLbia19SkQTnhMfSwQlPGONvXa5ULymhJFoRFhtb6YJPZb28 TrQaI1UlstOWFYTtdG2UAgbbkO5IQO0fJtLTkR+ceXICD62BqE3jT0tqyEf7E5d7 lA/MvCoV+tg/4wnyJx1865vMEMNjCggFQYKeB4ExDyKuC32LfC+inTDuKm6qojfP AlXAkCOeDWtt+QgUz3sxdhDQYfwJyfLRz+dJPXaF94yvQtHBfoKpTo0RRgFCsUNo j/ZKWbAdi9Ymb6oazkXU9SKYYNVWjHCC8XHGNfaHzoQvHU/0vYWBXPeNsgUylA/i I7V1w3J0uU2r94eMs8ZXwWwLNZ9wPEkU2dKr6NPMZYciGF1U23hVTp06r5qf0oVX cDoAZCaRigGo/UKkSmIL6hLGcQKYfyWWL75IYknUq3JqYes6J9Bn0vnAqwdlsTw5 YXbfCV9qXxzExB0ZZsIiTVDkNkVHOZD/FDPuGA+Urg/xyCsyI1Ehl46QxU19h911 q4+OdCqNBahZ9cby8DEP4fiCv8shIbq9Sh7TSNkkC1BC17MydTSopDZ31TUfxTU2 zvnAHxaHtNutj03gR4eUL2GUXxSWuBfhPQ08o9PT1H1kHQRPGBU0XPqyKr+tT80z +OmbT9peo7fS6KuyG5sH7eTqFU2cv9M2P9EDrSf/vN2+p3fE7zzfrqgjuJNgMA3U TBCgd6qTIl+S1DRbLGVwGOMc+oV3GZJrZ320Rq+wO9GC/aWd32xbLz7X2i/+uB2/ /Xv6+I0e2r36n7bjm99rO2f6aM7JR+3+xqttT/Id3v2/9EYevYln71vteOe64Lfa 1WuvyMFfbvfv/aUe7P1rTeR3xVvrwZt62PZ4Xwv++giOHp490jYevejHwbc0JcVo HwrKLuUIKSuZ18HoCGiKmlVuvYc0+hMot4srS5q/KqCGKADvMNNS3vxlX+cZDLC1 BxnZlrQIuHmDC5+iWjS703eQcOt2nidwICI7J8iiFLQpNn1RRL6MT1NiQZtKhT9V V4K6VUAc/Uj7xEi5MrXiWLosbY260Sl3CyBZ3KCjlPfxFzQXldBNPRLkfUZ2zSoB ZBldWGkjVoHs3o0sApzmkb/aggG1rFbnwqoQf3H7qi46jhOv4kUbcKKGH3LVwGRW xaQK+tH+ZRy6mvgIUOJ2IVewi95O/0QvciADFyRJw7bSTChFa5JjlVCou1gHt13H RYDo6lpBVuxk8gPJyNExSm+V1yhBhYl4kSwlrWtNJjBOsAo3/hxZLCM46K32wcYT VbEgXydCIRU5i+MuJUn4iqxXtEgLGRHoHa7Y6SoyPBejqgHIPIm72FWF+uJZEwqQ ernaMHeOpoeahRuRoENAj8k/ejpwLwT0CaCRp0PJbWYTrBJMF+XRJWOXrYs/YWKj 0ggKyhAAxFEMAITfyiMlQ7UtlAXHNxS7Joe0I97GGNbLwR1DdJ1hkWKGOCWabKnk V3kBYnQAKOCgllPSvdTlZUvLhwzAOqo/mmZywKlcvINLFvWZDueuWWHALvwQY6Bb hFRDOqftOip2xWbw8bEcUHiBdVlVyvcfLg7xGLWBacCgZIB8ZCu5ior1ngjCjyCJ MJYC/YYL3ElmQ0u3uh5A9ngSheVvdRHWkQ1DDvog+pcOyAh/+41QkbFkA0e6eGyL PSPb4kKksyg6s8zhbP0A60ebYWvocjfXJqcIkHkB6zZElsl2eA1/JZ9pQy8EDLjo YEIgU7uQej1TNEjECIJTlLGmYICRSZJr4PBFFrxdaOic7mTmC61gQQPa2NpsVKfy 0WFsX9p8QCxOCCYZQqezV1QjNmZV4QzuqS5SFUn+5AGULxTNlfSCSniui0EdZSdt +cO/5/+lXKkfGy82AxaDEDvIuWtM0YRcX1Vk2OdEtqm97BsbV9vG/qt6f/zX2637 L7az+wf6dPutdqqJ/cbenqrrJfGs6LtttR1GVwUbepB1Y1uNqR7Fcy+Z0BMTfFSa AZ6vOJ4e6rbmpib0z2kbTfuknb33w3b4y3/cLr31d/SufL1j/sqLkkvbbuiEd29p //07Hqy3L6mOLh7O+CLlzrV2eu3FtvGBJvUf/kVrr/y0tRdflSbaeqOHf9lPx/ey jjcPNcHX3QEF6y9hYhMpXZ0IRyWNjPqLvcopsQ1O3cusjXKSLfYsuws2ncnNrupg f/4m2/cyRp/O37IVlmwnfJWVLJJJhQynIOc2WaV1HDqNqWJ/dFEIv8p3/apEFRnA oE2nN3DlMIG6zDXIFG3ojrTdxrZpkXCZiE4TOttUZTDSLzKPfCMzFEj7p/TMpw/C HQbt7CelzvheZ2xtmCNkRt6BlhwfupEDfE5YU966dBxw+WOghadu21LXD/wOdMyv D2a2KzisBimEF75sQQSDln27q+W8setQdQrd9Ggn60VuCCZZstWEQXX0V9hKWRfh oz92RW/1T0QhjNQ4yYQGaepYe9LGrXZBNghDz8lOV0oZL4foUPOGolEcS17KzUcV fDp19bI38vNWDGLwopNpT32jcC1PZzrhCwde9WEbCEs3n8O6HAYVD75Ym9Uz8/Kk FQQLVPz71Vdx7MygigEcClfTdsNmX0o5OtdkRwg16aS+5YBAyYsJ0w6+wyfc+IZ5 9Y/mhC34+CZl4blqY0hzoSneLN48tK26rftkbJr4IN4QsuJm+3YbRQ1izRQ1xpfe W9226OmygY5RB/0if7mR2qZXYEilHYn71zFEi8KRYvFDNs5r/MpuZRfS08+jqb7A rG2Z9gnKOkWL13GliP2CLkq5z22KHXoDlMzFywsvJYb9lXa2EiPu0FbRz6O77cAY BFdBZMO0aTFcPVLGpK4uYmcd7SMDaskn2+kuG+nVUO0NjLKRVugADw2nZTskLNXG MkGtLrBKY7XQLtZcHpVJAh9xXBj7VsY2IDneaVgnm61mxtJDPuARA3m4aOhqIx91 8ev0d6pk7I+uuG7Jq0KJTNs/KqiK7VQVO76IBO4YOp02NPHRBC8qgF+IxnOZYOFf 1DQ+yIfwW0Jd1M2E0IHgWEniM0/UZh8xgg5li1AvKLWFOZUZapupxHYVTWQkFKtK 96NBlqEX9rol1yADcP2QYfxBJnnqVL2uTy8Dx3qpbsISL/AvOn4mK/VRDsOMIUbo be4GOtXXWk+1s/34wYHjrbNremXkzbZ1cNh2dj9tt5/7XvvJvQftewf/Q9s/+Wm7 v3WtXdaHopjUn+08UE29d16T691jrdFzB3tbT7EyeLi150bDkZFHbqxVMdXRrUW+ fnmi99JvaAK/8fI32tH+/Xb0/lvt+C/+y3bp1v/YDr77H7fjF//DduVQX7J97/tt 57ZeVXlFE6rre/rA1KV27ewVXRToXftff7Fd+2S7bf3k/2mnz/1XovUf6YTyuj9h fyYL87YdvTZH/viCzWGHKYG6THQV/SF3nQk8AJbDInN1pdrhXxblBOOLE3Syh9MJ atDUeCF+sqto0QI+iXILGsN3P+c94QTahMG2Juqzo9pWHb9aUfcfpuZMZzEFMTAp ercTfu7BJ2Xh9Y5vX1CawSArABK49IdPaHRS6yLTUEHi+JnpWNYul3CSMlnxyUTR uP3kwq3vxwkTnzXIfEQpOlJs2WAeAVynLodIhiNyka64lKel+QFlgjniAONd/ExU dDlq+tNQiM8UCeYy1abKS02nRZCEoylWjolb3f7Hd1QhOIU5wSizNPavaNCRehRZ MkFGjdkW1IY+yEpRhsw9dNGdQwz2DRNIZ0V2xoZCldEHIOYLUOLeD1x5OCAH7Z92 tD6DrpZT+JSTHstJo1Nt3aCsJNnwx7gKlxNywlSfFkQeocNqgq/h6zL1z0zIrJ89 YNYaGM8DeU817drtR10CsgvssOm3agAvu0vKKkAWYJNcA3309IkaG8g3uQpCV/FR iWkVEWioSL+6UKK98M2apMArMoF/zqbIXQapGKQpQDXUow35daFw600nSRfvtLOf sVFVdLGPwHodqQFWuksnxim3VdWwr6m2x12PbYhPG2OvwvUFk/THxvgMW6q4WDNX 4TFhBZ+fJ69qY23U1E9yWzboZFQoOkL0BAYo/tQ17RJHG0EnGfADsGg6yvlhFyBF o4NED0gvUIzc0nz2o8GvwVyG6I0uhLR78iOMNF/sDE7i2C+4sVFoAx9DwYtf6hKv C4DzdrB15TMPbIDt19NJ3ZT7TtWgM3TyK7BaVCJic/c3Hc/o3/pTayKU7/Bu9Q5E m+dOQslRHJGK7uKL4TVjb8ZGsE84h5shOoj5pIoWC9z++J2+Ak5OcbU1NecAP7ZC +26UbJHF0O4onSRYqFD2qjYgL7+TDGl7ZEkaQ5RpM8asXixaboiKt4OQ8V3btPsn tFg4wL5+cxq6KqRNSPfagqEDBigjWC4EsBCluUvJi0719bEN535qGUZdRBV6BGQa 0wbqMMoU2BcZP5NJ/RMpwGimHoCROeKAvAVHs2bZW9tx9p5rO1oxv3dPW1kOP9WX XD9qZ3c1UNJpNi7rZKsv7ekDUZtbWulPQ7qxkEJUIdwdAAgB5zg5faBR5pbKRWjr hrbx3Gy7u99tZ7v77c6tD9ru23+hRvvv25Xjl9qlvW+r8f64be+K157uGmzrVZs4 mOQ5O9aEf/PFtnn95XZy5+ft9OMft407v2ib115rR9r/v6GLDmbDZ6eXS5YS4cKj LTDIaweRt4qCaFmZiU6hARNIEXl3EGWo17EnXpRNDifceRIBnC4Bkb7KZ27d0aEA 8U5zIriSgHnJsgRPeVgQEis5yeOCZ3TossPW9iGG1WgP8s8siFudtUfVp3S1Lcyx /xwBsZwkHjNUq5uSJ1ozhbltMAeBgdhp7ADvRQhkinGyR4SV9lxBX8mUgBcot4qJ L68yddZ2Usox5UpMBQt8+7ZgiSke0hP5CRZaIGIbjUd9shVZPNhTJgDtl4l9/Gui CQmVE2Kb4ABlyHJecZUXro/AervAwzR8qBNeJYsTNEK/V6HySkh5aJJPvYpNUXTg pTLFJNF5Mk2nOZJ2uhuGcXGmq7EV69i/oAhm/QZtYOpAiWobw0yBrhtTgBdytwqA Rej9rbiFZlUbMUf9A0d+Jg9zmerZVhX75CNkYPwIK2nx5mKZx79qkl7lTAKC51hK +CIBrTst4vC11KZR8nuSBZ45jgcgMw2dOV0IrQpVTrpgY3lwOqqoLyEpWcahj7xj WOYpC27i6DjWe9I0tIrXqsRFm/aD4qjreQ4RPXKdx5hlT9k63BkmWSzOqkypizRz cceJECqbkuurh8y5mFar88j5iuGZmMpgjXlg5D0gET9BiJvNNjhvsyInKbt4Iy5l K/5Au3b+S7wO/nX0EAs8k0l9GmjZIIGnxXgPvGbwmvRyNck9JtxSk3OtbJ9qYDxp u21z/4W2d/3N9sGD77YjreY/f/djTfgftLPLL2kSf12TegazeyJxqJqX9OAt23e6 k9BD+OFI/HTC0cFXyT7dnOnDVptaKWFf9MmbWkl4pe0/95Lq/6Dd/uSH7erbv9/2 Dw/a2Yv/qvbL/5Em/tqEf/k3tRH/JdHTAH2mV1meHCv5slbvv96OP/x5O771g7Z/ 68/bph7yPdjZ0g6hQ3YJKVzWHQHpiwjds2OP0U6BuXNbfCogfu8Nir1Q5Gw/YYpe VpZ85ejK1cldGaZ0lFzNQ8/50JZYtg35nFZzBQvvLrbKYk7oVm1ShDFXdAq+ejRf EbHOUWkV5clz0uUiUoarnJD0aO+R2Wz7UZcR43zatIIOg2K1BvE8aIbgjZEvxBLP WNU2II74vXzJt5QdKo8I8kOFmnD0i7ixOLUMkxwTrXVIQX6K+AJyy/ZZ17plAvmR L+ThDTFstkq02rRWhkgTlvTHKrjKspzVPura9zt5bDf6S2h7RUlyIDOjGeNN5yq6 krDLgBw1oWcCCa2hTIisfBfPqu2LBuojnwUpHwi94gtV0VWVTABHGuhFPnHqEpcM NZ5AAxyvbpsY9KI4pT2UaDX557pHf9mOFh5gBmZ05OdHQSdJMuEc6BygMG0CtQF2 SrtHV3hj0LP0Ey40aAV0CqMhNv6ULxsAi03q4hcbqT60eyAd25F2Hj6yVd0Z0jkC +cy66AXPRhCdbfsv/bHqU84qf+4s4UPYHq5cWLn9O/8xQo7QJk0gnzDCSAc/5c8y Dq/whddFsgYenKVco07BGdSc0AsPO8w2mAp7YqbV267bbYk35tEBv0ggT5hpOePt hXYFldMXp4s7yUOb1n+v2/t66Ey0jIb8tFfF4CSMMMth/KIZHGJzFNh9QEd3C+Y8 sxpGh0Os5TuuMWzX0Uj9AKgu/iVdL08MCjqUHppHiCpzLO4BYbvoF/zgjnnSaBJ5 UgdI4ZWeo2hzGnt1QRWZFvQ6kKL8JMwka+SYa856pC5lwQMWuVJOfkyPtL6o9DOZ 1EfRpRITvBuXEzIPGnrfufc9HuuWpSb12hZzzIlUr4481aR+89o3253bf1f72u+2 6wd/qpXwjzXxl4NoNV9Pz8o5d3QLWFtx9GDrjib2jHy4hJ2486IVfaIzXCcD3Yg6 1Wr9mfidnGnf/MlLmnS/3Lauvdn29/S2mhu6RHj7n7eTd36vHdz5F5qYf9p2Do7b 1itvaFKvPfhneqCXixK9AedUdxQ2r+id9df0Tvs7P2unH/6zdvrqv6e34zwHmnht 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 SwcNjuJhDXsd22CwU82H6KtFY9J7jTjULZuJpmnMedDH8jXVv/Kgr8akXs51rIY/ U4fY2tK6tp33sB1r2wobcjYubbZLz93Qqye/2R48+N324IOb7fQX2sxyWxPk+++2 Kw8O29Y1bXC/yiqNtu1o1f5Me/RxIvswjqSzLg9XqNu5UXEdPbJae65wOuHMvu01 ejkHEFHRKy9PD7Wd51hv59Heeu4oIPHZju4kXFb64KTdv/1n7c5f/Ldtf+N623n1 lXZJD+oeb/xSOj3QBYj2/p/owV1exyPnj0MSpwOMsHFljPRYhvDUWdYNzMp1HCEZ D/XR16FHlclRQMPRizqBr4+X8qzHegS08zPfieEjGF9Icpa5Tu5z/sIqX/GCtMFX T42xjdXv7ABzz3s6fWjv6qvUX9omEzncrNLglxyJ6ef1wFvkW5aPktFvwwc88tVP Z3rwok7pFhlGKr8qacaOjEMPkwndHgcPGo+Lt45f2W3VfoVXtpzrxLYe6W1qtwPt YRmgoXZxmsk6+SpTwjKCB6RsAGUtJcmXTFk4rluuIFgl8hyUsSMsmTUBuk9itzUk DIo9Pw9aF/E4B8deAtoWFPb8Kh5naCZjmrq5g/XSbrNV3Mqlj0QnoNGLmC1QhtEy a+274AkyVRY8R9uvp0PFJwjiYRaS0ap6cqH6tkt8yBmBeruT6hf7cMq5nfQZK/Ys BkAMIgSSZjLkXaADoAE14DnudfpOBOYa0wUSSP2CtiZF5OeaT5WKiO4v1VZpR+i5 nYWD7ae7gcrLetYjuIk32KVBPQSzTValShuCzy9zo7Gdi+/n0+dWuf/q5L4Sk3q2 5pzo58bURHtrUw+mqmH5cBQwGm1L22wuXbnRjt/4jbald9Wf6K0494+0VH7vD9vJ /Z+1Kzxoq+0u7VAfltpVrT1teNequiqrNegJmtBrYn/KoC4nhOemanCF6c9+uyOV BBzLvXAx1db787nS4CNWm6eapHdaG2z70Z2Es329OeeTB23//f+zbd38W9rn/512 +fob2qIjWaTDyakesj3hooWLDhxOg1IfrJDOdylwUsEQA4dNiAOTJx0HHnEoy6oH 9AihKalh+dhh5vzwKuGf+OHYa0q7vbvCHeFxuS/p/f/svXmPZUl22Bdvzz1rr+q9 p6d79qWHpDgiqSFNcSSLFCXbgGkBBgwYMPwd/D38p0FDsA0YkCnBlmyIkiiRlsRl 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 c+aRtPy5n0krX/q5dAbDSOPIyd1oaysNrl9NB2+9mm6+9EL67ksvsk1kki4swzt0 EFMYJnF4gVeupKWnvpwa5y6HV7wBje68Vy4nGha0kxMxj0QcsPp0dONqunH17dTY fS892mfSgNyuXnks9M4Qw08jVaNmEi+fI5ucDnKEV3w6ZWsCeFu9VQwUVpSAc/uM E9mrL/xZutL/SVrt99N7/dW0TT8aX3wqbT7z1XTxua+m3pWn0nRpM3iyv/1SOnzv 7dR/4/XUf/WldP2t19MOxtIG6m5lhX6NXqRwjFRe3sdYtrPAXibkeDap45lnv0x9 kHMcAz22kuzTf2/84FvsA38nXdJjj3KbkMGJgJN3ZmCoPQx6ZP36ZD0NMOZ7T30x rX36S2n98lNpiRc8WxsY+ZQ5evk76cabr6bDl36UDt99jT3X6Ig9dA7cVH1u4qk9 Wrucrp/7Wrpw6bKxGPbwGdqQbnDgVUa21Xlu2ego40wM3a5z9NZLafjmX9IvrsWk 1NUa6XP1Vl3sdiHWdlit20hnPvUVqkd70oZIOboAXBjKe/vIJoY86DAM+8jHtTSi LQeHe9G/2joOXI0RL/18B0/yNrzqPfaFtMk41XBbD5NZr7d//Jfp6o+/nZ6kzx0d IBd47i9/9ktpCRm+wQRMr3IaXEvv0p8Od95NV9pssKKPqb/ew/N/sH45rT35hdSi jw84kWq5eZBuvvCn6cY7b6dzF55NZ575otLCpBV66Jqdw2tp+NJfpr1332FijVEN nQ1W0ibokPaVx9GXn2dFa4PJ9haKHLkeMCl/7ftp8NYN+gOTqvWLqfn086m77sk9 O0xoMaDhTzaC1ZK1S11J32jS91pvfycdvvEak/t+2nz0sXQOPck5XsHbzmQ73fje t1Jz+yYGPuMMq5T64o90Qp19PK098Tle8EY+GNMPr76eXvnhH6LrzqSV534eeh6F 106NaDVWDhz3ma6h632ZmbZhnGNgCN1+xJjE282sPu+mG9/9D5y6czNdYKxyYgah MaEo1DveqKO9HGW0Q6xn2CMFqLqHzOXBHBjg+dHhVWDDZnL8F8fsL2cW6we5quIs LcqDNIJOkrLNJs5SVn3sNE5SylVoKzDlXtLv9/sDY9QXRhahKM/1e26cWutUiR+2 Uep4xZVpUPCqshTKKIuOHAF+6lJSJ/JDhXMplu9RjS5Hu7yG5k67DMZ6mceXnsaY +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 pKyIrLAVrMtWjMnGmTTaYDWItm2y4jJuXaEtG8Gz7pOfR/c9gbyspa09tjYo42wD HDAeePLUKgbz9eZm2nwc7/o3/n7qfOlXkFfyk26ftK9YX6+3cABY77PPnEvn0Ulj JjQ/vMmEoX8Nw9IXsdmEhFd+xKT58jllkq0nwEdXEsGxi8kMz9Hvz6AXzr+YbjKT XcLz7zafJfpGg61lGvVdJjJD9Pw2Zeyz7e0pDPvmI8+Q3wla7jOl/SxP2dJ22th4 Oq2hqzoXLzJmwLMffZdJN9tr2O7Tx3u8j+7s0mc6T302NR97LuTflWFGpbT5uZ9P K9/7/bTNZGyVfWU36c9v/eTN9Ozz7fTkZz4X483K5qXUeOHlNPj+91Mfw/YAGj0T /wZ699yTjFWf+Xp6jzrw6n1qvLOfXn3tpdS6eQPxZpxiYk9s8MZ+3foUY8sTT6Vr 4z/EoGfSytaTLu9DtLGKl8+hKy99NuS5y3iAL56xZDUNGIt2fN+BLSsdtk7iZk9N 2i76hTD83e4a0idvINM3J9DPZH26+jiOm+fSPpN0+8ra6vl05WvX009Yobn+zg9T b/0CY30rXaOAQXs1rePkWWbyPVnvp2uvXmfrKd9hYc/g0uPPwPNHcEPkPtJD95fL PoMEzWTKpywjODrGN4OHS9tXGatWYkuiW1ndeRC2MHo5djqYictJIslUVPvDCGPn VzxGgkkBCFx2BPms7RT2U9xBw32O5P24Z9nzAs0bz0RlLNKtu8D4ApunV6Xc+t28 wtVflC34rXOmbV63+z1U19X3Na2FyaUx4hSE0phQbnyBKfcSVxrFeP8KjlLhkl6e y70OX3CWuzBFrPxgTXiWUShxBixlxHFtPHu2rnGm6wH3ivJCiOPxjn/mZYMXDzC7 6Fm6Zh7Oy0c3xxtp7Uv/STr39b+Hgvoc+767sZfz6JUXWJr7QXrj7avssV9Pz3zh K+lRjMgxhuewdzZd+Ot/i32//fSD//V76VGM+TMYkBpU7qtn7RRP1tm09hjbA/CS TtwHi4u5wXFtA8rv4LWfnL+SttnHeYCHxRd7T/+tigAAQABJREFU2uyZxf3BPlA+ GMKyol/78cUl67zD0ug1rWnidzH6llmm7OG5YgMIisQ/X/pFzaC03mB06Dz2c+nR b/7XKT39ZehhQMRLMXr3anr1e/8hvf3my7Gl59LTz6Znnv9ZjMgz7GXkYyHPPp+e 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 mWVTzQVcOLE16it8WOE06nNlf7/9KS/FT1uHtRBdeWJu67pgza9wS73Sq0yVL7/y ja+tre2zWy1T30AwX15q0dr4cd0rMeplQiGKsXlKOC6jLXwrdCmx/KJ90jRb+j3c NdA10DXQNdA10DXQNdA18CY0sH+l/SAHL8o/WOJlUrR3yzA3XE47tH6V1vptXoW1 b1scLfwi4aWM+ufPn09wS1xm9OtX8Zc16gu3xGZxS0NXtCoeiVyE765roGuga6Br oGuga6BroGuga+BVaaDs0zLspaNN2tqlFdZ+NryxsTFZtTdNe9ny6+vrkb4sr0sZ 9SWARCtcdxft1pyXNeqPEqqM9lZxlaZfCjwKR8/rGuga6BroGuga6BroGuga6BpY VgNlc2qUl01a/izOslM15AteGOG1mU13i86ybimj/vHjx8HAuXPn4m7DOw5/xovJ YrCYXZbBtlwprpTS4pZem96W6+Guga6BroGuga6BroGuga6BroFXpYGyQ7VFNdD9 udDtT2Pd9GfPnkXYtO3t7bClNeL9aT9b5mVs2aWM+vfee2/ymEBj3scFZdi/KmV1 vF0DXQNdA10DXQNdA10DXQNdA2+DBspA14Cv8NOnT8OY18g3XHFhNOy1pTXul3VL GfUffPDBXHp1d1J3GcWYce9guusa6BroGuga6BroGuga6BroGjgLGij7toz22jpT Nm+twFf8/PnzIbbwGvQPHz4cHjx4MDx58mTfiv6yulnKqPeOQgb9lQFfDFe6DFXa bHhRZktZwhtuaRXuFmZRvB2ua6BroGuga6BroGuga6BroGvgZTWgPVpbzwtX2atl u2o36wpOf2trK1bm9R89ejS4tV1fA39Zt5RRLzHvMloDvmXAdAUR5mVcKUUcs+E2 3hr4BVtpL0O/l+0a6BroGuga6BroGuga6BroGpinAW1Rf2X3lu2p0V7plqsVfNM0 8PWFcfu6vzLsTdO4X9atgPjYZz/OK1KCmFfCLctUL9c10DXQNdA10DXQNdA10DXQ NfA2aOAw2/cwe7jgzS8Y0+qF2s3NzaXEXsqofxGlYvZFcD2/a6BroGuga6BroGug a6BroGvgbdZA2b36uoqXTJVeRnzBVL6+eS/rljLqi7mWeDFTgsyDaeF7uGuga6Br oGuga6BroGuga6Br4G3XQK22ly18lDxlH8/CVrq+23CWcUsZ9csQ6mW6BroGuga6 BroGuga6BroGugbOmgY0xMuwf5Fss3AVnzXyX4RnXn436udppad1DXQNdA10DXQN dA10DXQNdA28RRpYbn3/LRKws9o10DXQNdA10DXQNdA10DXQNXDWNdCN+rNew12+ roGuga6BroGuga6BroGugTOvgW7Un/kq7gJ2DXQNdA10DXQNdA10DXQNnHUNdKP+ rNdwl69roGuga6BroGuga6BroGvgzGugG/Vnvoq7gF0DXQNdA10DXQNdA10DXQNn XQPdqD/rNdzl6xroGuga6BroGuga6BroGjjzGuhG/Zmv4i5g10DXQNdA10DXQNdA 10DXwFnXQDfqz3oNd/m6BroGuga6BroGuga6BroGzrwGulF/5qu4C9g10DXQNdA1 0DXQNdA10DVw1jXQjfqzXsNdvq6BroGuga6BroGuga6BroEzr4Fu1J/5Ku4Cdg10 DXQNdA10DXQNdA10DZx1DXSj/qzXcJeva6BroGuga6BroGuga6Br4MxroBv1Z76K u4BdA10DXQNdA10DXQNdA10DZ10D62ddwLMk397eXoizsrIyVDjlWxnFJD+CXEbY LDBCZfGAabNNmGLYi3CBjgjxxpQ9Iae5UZa8/fhIHcFayMRFSuQlRSQJ5lq0li18 cgZ2YEaEo2ehlkYmTzMP6ijIHLgIV26/Tit1inPCw5hVNFocVWoqQNbVASyV0NC3 TMke2QUD0qI1wd8EKq/8JmssZ4q4Z9tNQjZkRi1nylT3BTdTFyTvxznFNB/DWGdy s69hZPvLeg6kSdB6bxtGpAJre4PTFZBka7WMsGOxaitGiyV8gzppl56NVxXsQSvB J4imcIXHArj9cmdae92Pf8QadA/WwRRXcSimg/U1hUv6AbVfkQ0LhauVZUq7xTUt lLoFOzpqywU7AdakAmYMOuFxsa721UNmzxSkBPgDLuklKfmdYo8y42Uer/PS2jKG hdEpyyLwIUvDw/4yU/5avOKfjVfafh1OdRrwo6iphyjhBZctujTRUM08ZJrgjUZW ZUiX97bhmZUqyLqJaPUZdaJuBNJFrRzsbpm5/1oF9ffxOyFmcjqSskkkbCFqSwY6 MyxTuAsw/Cm00UJteH8dRcoE4mCe+ftdCxPi2DYnSpnyPOVgqrfKHTW3H3Eo/rB2 N2JLgg29/Sj282YZZJ/DW1uqLWP6lLcsH2kERTOSb4v38BnQAPPipJWcAXG6CDni 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 Pv17+rv7939zMXBfqP+b23d/JeTTB3KZ6N7gL5/AJqYN8vLedCUz9T6fwxdSgIK3 aUEsD1LxnZNcwSoqf/3KW5mJTOhefd6VZfo9/Xf+mPaneE/mFHSKQlKYu1teMbmb Rb9zeVw5wQpXWc+0IvPW52X7Mm+Fo38671hayGC0zt3WiaCloCTYtimZLbBlK/lT 3GUV+afEZzk5fhqmsv0mLu+FYXq6n82bKbN+YbFe2yxs/lIQdO7JOM8AmCmm4c7c JUzFt22xfZZUwJBwUJ6CXyHI5Zuc9HIFwDoSAVlt4sHet66kAgCowX3FJCk7Zsn8 SRgFVhisS7pxEivqnQ5XiQvLQCTJ+hROzV1Ya4sOMV2m8Y/trZRV5je3l2WX5Zfv /O19+Vw8e6WwlYqC74pJ2oozLfCW9wXyM0u+866kqbLPyrqKVAUc3vu8/Nzt73wB TBX6Eve2Jx8X3UMeywAuBQ/u703293B4r04z2SbpqXifhfnUducP+oDlrgK3pi9w Yt94SfdJ+9wXvVsBqPJlmhJvtkNB0d/el7gwjTj2+T3YfhYXZR+YtrxMqy9zrmZk fgWdok9KmPydvvjs87k9QrzzW1cyspfKWCen7baxidyDgJRfXRRRYJoOh/X6sa7i m9pBg2MocQKuVVS9HCPWJ/LzwChwW+b3+y8r12e++6uu8j0lZp8iHlI+4UipZnBg lA3DHJLEyqO8TSO9PeRVllni09/lve+9n47/sp6/LF9ZXpm/TFOW4/Ppz8p7n5fv /rJvn5UXWE6h3hU+Lds448Udoovp6lPPOSHuB3CsuQqWK4WmF78VeizLmV5mWafw lDCV6fxdppVfyyvtT4e4fef4EZnjhPgUTM+WyDw8LMHOk8+TL5IegtBaz13i1XIs X15hQenXz11Bl/Jh+oi9aQlD0l05BgtFSjgLJaEozzrL9hTvCpyXz7IcXny6reXz 4ptCypWSSlr73avs/+nj0mfTaSQT3v/zmcHAfaH+M9OVP9uQ6QPXgV8O8ulM0Huf +95BnsxNLsNVMo1M7yPnJxhkCoIwRx+lZYHv4l2RJydF+J1CR1oLPzWvlXVkueat XCW80+HMtNZUETQUSAQPsJOJyvi9jJ8vUy03dFWKzK+yHSUT83f5MUHBnAs3Bp+X 6QqPmsIKDAC0xdRFfTk5CAT/k917z1XW5f309vn8r2q3acurbHsJR5lHgcl2F9bV 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 re/UMl7f+3YqoP5d8ri1c76T+3dZTElWOFA48CviQOs4bc2y1d8JSDDvVcF869at CYhrRiJYFQwLbE2jSYz24wrvmp8YrqZbbbbgU0CrRjqboGieow26gFiNvqBfwK52 W022goECg2BdEC7oNVxaBMuW6wZbNdj+pNPrOoQKzXAEutKhJl0QrSb/qquuSmBb egy3fOm1rGuuuWZW2DBcOqTNeG6eFbwrSAjW3WRrWWrtjSct0mkZat69mkawbnq1 /5bhpl55Zd3lj3b+mvJ4L63yRn6p0TedqxSWYVmm82f9/Xmvy/c5vLUty33hQOHA B4sDedy+FVV5TBun9f6t0pSw03OgHGl5er68rW9rx/Nelyegt01cIhQOFA58IDnQ OpYF0gJ7ga7AVeAr+NZPZ3jeCCsoFeTmd4Bh5qWfYDUvN5uXIFk/f+bpz/jG9d6r oD7HyTSZh2ECZzX+AmkBcXataY2byzVNLt9yTK+dvisFguecv7S7yqAgopZcQUEB wLj6mdb6KzBIn3sOpMH6ZNt+62ca8zKdzjKkxTzlnXsNDDeNTn9pz+GGmY9+0m25 Ou8zrdbJeK1+PhdXOFA48LeHA45Zx3QZu7+6Niug/lfHy5JT4UDhwN9CDmSgKOmt 9wJLQWx2AlOdgNKfz8YXvApAfc7g3HgCTv0Eyk5aAto8eRnP8DypmU8G8jmtYRm8 5vucJgNg42Znnv4sx3TmaXyd6f1lZ3rDWwUUwwTgOe9Mk3XzXpfzyOmNr7NcXeZB vm+N5730mFfOx3vT6Kx/5mv20z/zIKfVL9PT6pfzNLy4woHCgcKBDyMHivnNh7HV S50LBwoH3sCBDAq9CiQFjP4Eo7oMIAWUhusEnwL/DNKNa3rBrtdW8Jnz1S+D4Jxn Ls+rQNs4GeQbR5fTe6+feejnz3vTSI/XDOzNQ5fBd+sGU/1Na5yc1vK9Nz/vc5n6 ZWfZmaZcj9a4mTbDvM/5SVvmj3mZRpfrkAUK42RQn/M1zlwaUuJm+nxfroUDhQOF Ax9mDrzxPKEPMzdK3QsHCgc+1BwQOGYgqYZal0FnvgpUBc0ZsJpGECo41t/7VsCa /VpBaU6fmW1epvNqOblc/Vqf9c9g2athXv3lPM0jp7cOGdDndMbLdcnxLCeXZViu U2ueuU4pc/7kcqx3673pc176m5dx9Dc/8/GX8858yWXm1ZHsn2nM5eZra3j2K9fC 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 1oPQMEOeDQR93ztJwKaAaYU92qUSrKp86qwwSLMaePu+gFxw9csAazL4GznL9ed4 sy7+pMFnf/ldkPtPKsyuQ/35I/nJJR7yR07bCgk05UCu8iHn8ab9rUqcsp1NWmVf /s7hQOK33G7yjK6IsGc7AmnRmNNdUTbwRwUE77IpQbePCrAMJN9mtqH9UZcAKona ahxpOjMBAFYAsM1oTacf4lWrzvRdVian2qZjrF6NkU77MX396NFjMdA9LwZ7FxDH /PFGRvQd6ns2KX1SadUful2i16vkSEq1KkB/gcwZ6KhNjHElUIGUlTQzzDSbwHeq BaUyyCTFVcgR8eN4XSY65FeqKjxIzjIRXlJBFEaJ5OJYoEzmWfuqZnr2VfUzqRiE D4Wg9J6FJt/r9tOqCeAWHnksVYWUv4UDb86Bd64+ackjv0RbvD58tw46Rx3OSdZb wVce6QnL88x0nhTrmkn4Hkiuei/kp6Yfg993DBN0TRMGHqrlel8a5MvELwhJUv4E mjI0Cunl6lvLN0CLq6ipXgq+jAxNdtREdQk1O1/UqRIJMAgEzIlI6S2VHqs/qZ68 4HiiWOqrt1oYj7/TDEB6ySyBDSNTF5gzt5/kZ19oOTxP+j63TsreV2FODNVLMGtB fOFqSpGWeSktaUqgyXq3lmEe+WWY/aW8tXyf3xNnm+HUpCY+03bhyxtQJqWTU5yc IhiD+ElmnzHq1D06zoueSY/JTBbXXCrmTp5LfyMtZTMpsDQ9xbPLwZ1qoG2QJLEB 0uU7aVKZTRoqOip6vM/t68SawKFNZ5vQ9NMCQfJrB7DjG5Pm5+xI3A4yVciyp6Rl Z/sk2SJ/0hbQaaFpJiUC9608x+cMOngniGgwcUsjvEqrEtQ5uSZrGHHwVJ7YFytB TJAumFb77eSM5RtXYQkTNnF1XrMte+VhHI6LBMQ7ltXUOcnDVYZxD8+OySpNMmcj uAFt4AzAAjTQJ9LYJl8Vn3WEDGmQ2Woa0x6NJIwr/PIM/9V2CrRsJ81kOhEIbCuF Y38C+uHh4di9ezcaUrXv9BUaTsAv+FdAM/7IyEiKOzbm2K5Ff/888upIeY6hWdVs yHi2Lf+5r9q5p6eHfCbi2LFj4f2KFSti/vz5iR2uAOhMl8eez2/oH4mfVR1qdsYU SV6moSLJiW+VNzy0zxLI32ZUuFolrxJVzUMEbozicxU1xS9/3siB1Jd9n+DqqW/R a2k3cW96dRE0gYbetnMstcHbDkz/6AVV+6ZZjkHSdI4ZGY9OP8Z5NyRAn8YQCjCQ Mb0zJpnP+tr6InoxvyF2T1rFcuS1I4ZPxIm2Ed4xvPMVYJPJSrMZocFx9IZ+ZNn2 A8Idt5307cqEhjFcZy5REEBAqfE+hojUP3yfJkqtuuMsV8HBZTn4k1vqiN7rkjCe OhVjGaDuezLNWVJF1o1JwD30qjARvWsiWb13eCaTSoggbcobgtO7vJrrfEe50pDK YVy/aT1TjPLnf0QO+H57N+5dgfp3W9i7IfADm0awnERq3guYR/hyY/WwWrpjINeY MHnd8SJQow1o466v2UjV/HKaBsNLM2qmv+gUqaIsUOtfR6te2ejz0mCCr6E5mWbd 0JdBNYmlRLOsqmCdUx2vIYCfxQInk82wk75mHdpBmniGcgQddSZ+XTWvnppfhRV4 aaOSEfT4epuBJl/kTr6CFN773PtMsHyh0HTvI/eCa11+AevnC9Dn/HPSz85w/U2X +hvPluuzL3iv7WpXZtNULz6qMutMb9r8mw3gJuXZ6vErvqfo5CSnBkhXK0U34QUP PbBnDJwj77t7mLqotjXv7BcukyL1K3VeGuPwktePDNu7WEfGCZGMDyyDFyxfM4PU NX/CJbky8cC2sIUqvue+apxZ2mwg2iDxVG0w6dJEQ/mpTDza/ZG7Tpg7xp8u6qCd ZyVs0SfMI5FIX03tBB3EzfemPVPObpeEHgicbrCSQc2spxNwJSRaP0dKNXbThD8D eG13Z4v8HDIFCQDk9nVBLM+p7yu0N/NJPde626f9lxqCib6mTT7eM13kg9mBoCRp IGk/hWnKsG2kaVq7YsZ1O2OLAgHdli9oIo35pfYijPtEE+Wl03GgJgkViRbzq7T0 XjWtcVwdPnw4fvjDH8Y999yTgHtvb18C7AqVExNAJ4C3YH8M1Wx/X38C+/39/cn/ 4MGDic75Q0OxePHiOHToUPopKJw4cSIWLVoUY2Oj5Hsila1N/bnnnhs33nhjrF+/ XjamPpY/5mV/S8JVCmn5Yx1TV+Nqh8L5FpOt3CSXWspxzUtJoVQ+5TA7drK3NtxE Mj45+Jef09hqepfLaThg34J39LVKK817QTAKC50hVBK5X8T+14l2GbjPUiQBKBwm kUoVKCuTG4cCK8r0hXb6e72b/SKdvcTvQLtPArsx/XyS95emNg3mo72v7I/aSFsM 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 /thaH+OZymfhX3P9u7pNOTN8XrY0LciK3RMZqO3PVpp9c3Mudfr8oYkNmRm0jSYD vmylOTyZdxjmBF8c3BRMQ81PVjxMAITWAStvaUhT6d+ro2POyX7y5V2+uPzZG7sn Ht3e3XPZ5u5Alt23R677Hsq5+V//Xjfv4R1Z3Xm8+9AdX+0OnZkvXafP+4ru8gxq 5+XEoJ333NvdctO38jXQFd1pt9zXHXzgsQyu8nLw5sDmZKPpvMz+6Hdv7w5+Z0sO FIzMIvNDmcEVDtE9kY9JUD3nUNph64Kqbia03pE8EXS2HK5Ke3k6XzbO4DuD5uno mMk4X9Fake2S3vnk2AXP/DjstiwcTn+K2xHdFBlndv5g9tPvzRYpExeT+YIp5982 LI6Vwd+Ezpza12bW5gjZX/yFX8w++evj+Eau8ULsXf/N3/zN5lxb/eSomzhxvOQX vvCFtu+cvrVayjEGz0nnjPtmyOc///m2111/McvurHvOv5l1fdqkgomL9773vc3R N8MPn3S6ikNuZt0+ePD6rll9e+vpOHk55p5f85rXNOcZ33j04SmOvVl5X6f97d/+ 7e5rX8tWxeBRXi8t2pfvwoctOviUv+49H46u8C0Gzj7H2oeDtMe5Zqk3dNnHva7b eOW69lIp3qwktDPJ40Qqw0R+F2Ur5dSy9PPYEyuVB7PKy9nccyjnwKcKl0bPnXXZ Gd25V27Ml50Dk/TJ7BFvZQ6vcwJrWxYbFlPUenq0T+JjS4JP2+LMUstLs1X17A0X RCZnp+3nheh9+TaJZsLwBZfm1U5ZSdW3mewoMfZ7fto6HAL51C+ZtyvaoI/s7QIu 6L8K9KVHOTn73m9RRs7z/rTH3TnZbllW39NRk8YxVr7AJxMHn0xTDZF/Ts/K+wf7 s7XVV9MXZEBkAsg2wTaYSGE4+JO5UPPV7pQqnSo6Ie1/f/Lzv+dlhRRD2x+3+pOP Sa7IMaTpSylOk7kJENuWbLtMSVK/7ExWq7KiZwZ9SbZC2q4YdnPefaZZkm9BtvGx WWkWeUcoEzjZ8mPS60BmhOYtSqGSb5pdiGDaJGDainy1ymGlVJgRb+O/RcxE9qlH Yl72N9rdiYTU2hh+YAmkZ1IWqiB9I4FTpMtk+SqzRVM5Divzw/lKzyPd3i9vz4xW nLQc9+RFyG559p1FaU48kFm/LXfHJGVvZZaODx/MyQdZ4vMCCeeHMduVrTm7bE9I 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 0XxOvtWvGPRY9dawd+b5iay6XHj9G7v/8p//YvdHH/5g99Untnb/9tf/fT5ydVZ3 7//xu8GXDwGdsbG79Kqr2yz0thzNeNONN3VfvfPO7qnUyev+0Tu6f/E//y/djV/+ anf3f/hf03bv7g6snNe97ef+cfeet7+j+/RH/iJb4O7pfuyn3t9d8vR7u9/73f89 A0jvBPW66lAGIw5/zaEgvZ7UBWcFfclsn/dB7Fmen+1o++OoHEq92Lfj+NUcv5Hf PFo9iG5ouiMeo75pyd97PLb+GVo5OWxOtupM5Fz/Q2bzE9/8D3Tpatt3MhPt42X6 5L5sHZnkIKYfc4T6Wcd+37ssnpuTM0jX1jhs+HCVbQRH5xgEgOEI0Q+Fk+PNkZan dJN0z2CEyg+ny3PR8DzkRbzBQuFAE21w0gTbhMp5hws8HNLBi0Pb4NhJLr0THbwm oDIxdDj4QiDfALB6w67tyUpPBjfsAKc6NNqWk9Sf9zzaIQ9WWEJ+KlufvPcRs9Cu /dnqttAJKFmpi7dvtJDtg9mSk6OU52T7mHn5fVmNW5ytVfKlozU82ochg6rjsNpC 1d4pyYw4/ieziqNcB5JmwDGxMHooRH0ThfKkJsJdkEXGwXUoA9G2hz71TwazA/lV vF/PQv0O4WUXj0OTMFYerBb7YuyS6HDvh9BV09Eb+3zDYk9W3ZLpQNpaX6/ceCt/ qYPg0Qb3ZuvLoQxiF8zPOwHZD3sw2+umMsCdF7nszRbdBe3oTHYoKw5hzYw6nN59 WpAJudPyboyjWpdmYkKxVyzL1rXoFnZ0R3SV2fsFU/lidTqGE4um+SuxNdNOy9Lf gss2WX1id9rPrrw3YeJieSbSpnIEmy/ltrP3Q7cfhIVMCkEK7YVXNiCMJcuMzHr5 DeU23v9wJXBCTv0Pl4V/mNh0HApGmGYYdOWZJTwfuJm7/qxuOi/MHT7rvOyfjeLw L7OCh9tyOwVCuZiHzhFY9oBmtqh9BTGdhwI7HCPoDfv4UFkCm+o2Ze/uuy/KKRjp bM9Y+gzQiji0tt/cc889bYbGS09lLBgaV7pn6IRKlBclOx0Hw8eQNpyTI+nyZbnV q9bFGXfiShyUDCTaP0udKVtbTotiEg7tz+yXuCiIqcwAHo6jEE7bkvae/XnRa8VU PvkdZQSYbmyd2MOzQ5MbIxrteiA4p+LIouWZLbMMuWZNPjwSOSzKaRUro3S+e9vt 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 M7E0J0xk28Cac7tn8uG1OTm//dGHn+y2xyc7mFnB09ee2a3fsDnbz5blY19bu+1P 7chgKk5qXsCcyGrIkhzVsiLO+oJ8+Tm+SthHLxzkq5XLVi3uNm6M856XtqdyVOPU opz7n1WnnTsz+3gwKzTZW2uFYveTeW9k19720up0pt28oDYvL7Etzpc152cP/FNP 3N89FJ4cwWfgakVkVc6HX3V6Pq7klKyUyaSgGdJ9+SaA2Wczs2vXr+t++Zd/ufvw hz/c/U+/8Rttn7M90M2R3/V0d9+W+9rRsL5S+Ym//nj7CulXv/q3Le7beS/g3/6b f9N95CMfyazqljinU93dd9+VMh7otmy5J18t/b3uM5/5dPfVr3w525N2d7/+a7+W 7XCv6FZne9G1ceguysqG+rEv28pD66t9pR2pnrqpevMrPLte+z7fJ7S/kXHfKGbA Cb1dLbYi20O1wT7fURwzdGR022B7mOLBU/FRcfXcQ/btreCGZSi4igMzvK/8w9/n onGsvLNxDfMO7yvvkM7wfsineBMmxGG2vWaOl2UGflkca6FWGvyqV0cbT8ZbNEh4 OqcjyWcl1WDEh7qEfhVhZsXSLHRmxrUhq3MGJWac8eze7L6PVcG3NDR9gJAj2leP vk3XqLNqJ/1v/5j4qsdE9/qsIhorrWz93dG/z4Y4Wk9DGZecjuYa3EVvln6e4SqJ dde3P2pNmGE7zFUekEfvG0zlPeIk97H+9qFH1nCGDEpD/HVf0K09JAseh2U6ek9n w9HjHfLTSnGE6YJpFHv08s0QarAzvIs6ygeIQZ4Z+PHnhy+B9JVBbb1A/DrzGGZJ oLXZmYbbWnIa8ExjbzONM2LuwfJ38AxT3xlyI2/SZjA1Is913xJn/dEpn1Wlw8zP wloZAeiUzXXq7/uo4Dmaub87+hfgEZ5nunRToH2xG57n/TNT1h7uKK1hPmLqyxOZ tLJJ7e8LDoy0Quf3hxX+njyPgfhYMOKEo3Vx7PIdA12Lmo2zyjYbvsc6g3sWieFj u6+IhmxWneP1CHKAz04/ktQn9MADpIX6CNyA4cHtMVtgofR7lIcZTEFsnFHxA5IN 4O/RnclWP3pS5nizGG0TUVa5ckTV7h3ZBpDjY51nbtuN2f7JvNS7KKcpTS5Ynl1C +9rLuQcyA34gTrfTI5Zlr/vkwpzDnT32T2zdnqXnJ7LdxUpGtork38JsdZmfY+IO 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 UqsPEtarPjmyf9hig4t9YO2YWLtmzWzUqRbXxR5yoNSsjyx71vuePe7e4+J4ueby 0MvhuqkdK2v1gSL3E7WJT+79Ipb3N/vs6+wxuXES037DQmzr5mct9NYtJs72o5rE N8dMHfYUHX/XL+sUU37x1O96uH4O/d5zbOUmU0+uIVsva/MB1f9yF5+s3T60f9SA r+uEk/cbG3Wbq9PayVwPvZpdb/zxJrNmMfUYYqVXj3XZD/aJfF5iYk7PXy8eH/tF fky8x/mJxw8run9ePgC6xu4L1imG/a1e62FjfepL3bdN039+NAH7OHvSddfsjc80 ++hIO3So9ya4os03RUBdkbc5riHgRpibq4efN4Gbopuph6lrbmOzy03ezZWdm67e w0bvhspePG8ubzI+evLYeWCIobePyd3o5cnD0cMzD+bkR8SDg04uvrM+ejHVHRs3 f/mth6282t8v36Y5JDl4eyB4KPrTuMOUB/pW84DyW3sxPEx8K2idf/78uT2MrFvL jUAtWTs+4WGNXg5baeYYWFfWpsfPeug9xK0Bd3lx07ImNnJ4yZ34OLIPF2NxxGan 7uQNc/zYqUlce0Pz4McyNYojj/Vp/MVTExt6ceSh0/AhF1cNxvKwE0d8a1CvMblr LYa45nKoMWsXIzXIgZEYDqPa1Ms1+bDT9OLFVg4v+dSaWDfjl3/URBd7+Y3JvMwT 29j7yoFNs49zfbMm8sTKvuXHLteaTVpYy4WTNWHGFmNzcYzFsQZ2ySEOGTu9OJp6 vMisMTK9WmJ3U7z8ow5rsz+Tx3UVQ3MtjFPTZJrrq4awkiPrp3e9+FuXXOZimavP PtAwVcNaH53YOexZlxrsW3FzzdgZixOecmQd2aPs1JH3COZ0bPM+cU+xX8IVFz7W KbaW+yef7HVytfLfuw+xEcdLyz4KFzJcxPAtur84ORTLETZyYjDrE0dMvUbnOs5G 5kMGzvzDADe2aicXxzxrFSP5xA/TGds4+1UcNrhpPrjImWutDjp2cs1raJ513pz7 z68iYF/YD1r2z1EA2W8f9T90qPcGfaRlUVnkIz7T5pmAZtyO/78E7AfX1s0vN0Xz vOhzY3ZzNXZTptfIcmN283YzpjP2cHHjNvem4Ochkxu82MnLlg2dG3QOEfzduPOg ElcNXnzp6fh4mLJVD7u8Nzy4PDjJxGevFnLfLPmtuz+vq9Offv2u14NefWKJmQe8 Q4SHpG/n/dnfen2z5M/f/qrBnkzsPHDk1cLOOtWqDjIx1W8+deoRwyGAjVceyLkG ZLlGePARS1OLsfxhlIe4GrHgz0cMNhqmWhgb04sjJrnrw5cttup0+MiBSS3qFtuL j55PdHrr0HuJMcfRYaKJERu1eKkLE3WJbw3k2TdkWOOQvRcbPj6c5FrxkV8eOfVq IGfLTzw51UEmFxuNr33DLwdLduzZeqkD+9TIjz2b2EWmZ8ePLnZq0NRjba4jHd4a fWz0bPIhTH38kk894mtiWIP1YkrHV1MHPVlis836E8NewFPDhVwM4+RMDnnUTCfm 1l7mg6EmjnFqsQ7xkzv7TVxNra55YssrnrWJlfxZJ71ro7n+uXZ85NBjwI+tsdrV Ix5ffnRqE5ctPd+wi14eenJ668dPLPnk91J/YuQa0cvBn14MMrH91SIHX0zYuWf5 plscOZJPDXLwo9PT5f7AH0P7ZtpZt3neO/zI1EGmTvWYx0+fmsWTw8t9g9w6wl2s ObbOrHnWKaZ65TfGTiPjo4408dt+DwF7INfceLY9+bSZY/fYI+3Qod4bbq9lUeuC 9uwr/90E3BhtdjdCN2MPGePsn9zw3XB9++RG7Kbv5ql3M6czdkN28zUWw1gcN15j N+jMjclyw3ejN3eDjsycr/jGHgoOkMZ5eIjnJZ/81iJ/erL4W5uDl5rlcejxsPcn cjHykLIjvKHlyc8VrNccoxz22Zjn/ag+32SxFV9Nxlk/O3nyUDRnl/qtKUzJ1E1m LdOGTGy5vdSVB5zazcXO9cA2vOjE8uKjyaOpNQzYpTbXQx6HBnnZh4cxH3Xr+bGl 17PX6JITD/WYi80n9tFZs9j61JHrKh4fsb3Esla+rqfrTOYgoxdbLPVkj/ATl09q NLZGvNTm+pIZ6+U09pJDw1l8dSY3W3NNbGNx7Ru2auInhjWxIc+a9GqVh69eUw9e ZPM6sU+zTjH9VUBcc/nYmye3edbPV356uWIb7slPr6Xu7F/7Xl2a2hJHXV5kasp6 jF0Ha/SST+PHNj7Jy15Tuxe+bNXBRgyN3BgncmvXjMn4iGVdciSu/Pwyx4KN9ZGp NfHk9ApnvnTi6ZPLfcP73Nx+wiiM1Rm/rJkuDMOTTdYgpxrtMXtJXLXhQS6/Jp45 X2sQU2xzedmJkWtLJobGT1w9GR+1u+9jQac2HxbEca2wUaP3mp8jsZePv/qSd/ap QVw2/OlTd66r2snlYGcuLn/rVE/0dFkXmdro9W0lsBJ4ZH/Yd0faqYd6m1rrxj5y aX6Xz9ZemTfFrXFke74rwezD+NFnPGNEFv9VR55Y02bKVp/oEts8Nomhj2zak2du vLbpM8f37OjYJm7G6Vf91nxPtsoTc/ZsZu6PzqevsdiJkTzmkd+UL//EdvrTzfkc rzpzLXFeZ+/7p44Ze45nnNWWbl3T9F3Hqy1/NjNubCKbNtOWPC15Mk+MzPWJF9s5 j/0q4xd7Yy22r7PXf7f8aLZ84xddfPfk7GITH7aRbflNu2kb+fSdsjnm95F5bJPP XJ7IM04/7YzXlhoThz6xjKc+8+iTI330+tWGLG21jy39Xr4pz5h9fBMzPd3apm4d T9sZk3xrzn/qjCOLfOYga/vdBLI/7Cev9/bH0UP960fkJ7JOofos4onhG+oHEMiG nkvZunFOu61xZKuvuJHNHNmP8Ytd9qx5xrGNzdRlrE9bY5JHln7KkodsL1fst2z2 fORa7W+Cl39W3VZdW7LpP/OST/vYrfLYpN/SkyU2u/fm09Z4+qx5Eivy9OSr355u 2s54xtpaD9ka+z276KcfmbbWtZdviwX/yPVznFyrzZTTafxmmzVFHr/YxmYrZ2R8 V/v4Ja5+xs6YPL7G2pZuytgkN3n8Y7POI4+ffvVLvNXGXJsxM37V/K9utV3n0zd1 7dUS26lPzvSJwXYdrzI+M9Ycz1yJHf/oIp9+c5z4+vhEr48848z10y6+5NqWLrLo b4Zv/8Q/ebbm0XFZ9ZHNHG+h2/1iAtknEGRvzH30LDSHvqn3Z6ZHWhZxRuGP5K/N 9yGw7pWtefYR3XxTrLZWPW1CYfXfsptx4zfjJ2506ac847Wf+TKO/6yN7L35no2c U3ebvP2z6lIfdcbpp+zN/T+bzLdsotuKM2WxSwz9XHPGj+hXm5nHWFvjZb7q7/nG NvHWOfmef2yTl21adOb0mU/bGTd++inPOH30+sRNzNjoo9dHnrE+Lb6ZT9spM47t tMlYH5s5Jps2iXEzftMZk8cvc31adFv+8Y0u+fje86OPT2znPLJpl3irbPWj12If /dY8umlvHDkf4/Sxi958tpljjmOzyh6JO32m/YyZeh7VrzHFSgzjxElPlhZZevJ1 HFt94k4b8jk3Tpv2ZJlH374EEMieeXR/+MnekXboUO/3bXstv0vL7+PYPbqIvZiV l0AJlEAJlEAJlEAJlMB3JDAP9fO/4dhby6U/v0lxW8U4wNPPg/wcb/lUVgIlUAIl UAIlUAIlUAI/mcA8I987Sx9lcOg39R8t5KP2RxdTvxIogRIogRIogRIogRL4igTO Pg+f+n/PqvizF/AVL1prKoESKIESKIESKIESKAEErjoPH/qm/t7PabZ+U99LWgIl UAIlUAIlUAIlUAK/kcD8gvuR39QfZXToUD+LWxPP3wtFd+9DQGzal0AJlEAJlEAJ lEAJlMBPJTDPyPfO0kfXf+hQf++Q3m/qj16K+pVACZRACZRACZRACfw0AvMA32/q 37m684MEU/DuffB4J1zVJVACJVACJVACJVACv5hAzpIO4VrOmp9B8iW/qX90QT1Y P0qqdiVQAiVQAiVQAiVQAj+RwFXn4UM/v7kHPJ9s9F7a2YuZn3xS29k5k6d9CZRA CZRACZRACZTAzyOQ86WVzfFHVzrPw4lzxjn10KE+xW0tKrr0bOZ4y+ezshXQGaA+ W2P9S6AESqAESqAESqAEvgeBnCVzhs1Z8zPVJ1b6z8Ta8n36oT6LDoytpGfIZj6w 5vyMfI1ZAiVQAiVQAiVQAiXwMwnkLDnPk3N8dNWJe8bB/tCh/r1FRZ+CMz8K4KN+ V+f7aH21L4ESKIESKIESKIES+LoEnnmWnOfhxE3/TAJPP9TPTyBzEc8surFKoARK oARKoARKoARK4DsQmOdhh/mclZ9d+18vgV//a9ZnR268EiiBEiiBEiiBEiiBEiiB Swi8/o9vXpKqSUqgBEqgBEqgBEqgBEqgBM4g0EP9GVQbswRKoARKoARKoARKoAQu JNBD/YWwm6oESqAESqAESqAESqAEziDQQ/0ZVBuzBEqgBEqgBEqgBEqgBC4k0EP9 hbCbqgRKoARKoARKoARKoATOINBD/RlUG7MESqAESqAESqAESqAELiTQQ/2FsJuq BEqgBEqgBEqgBEqgBM4g0EP9GVQbswRKoARKoARKoARKoAQuJNBD/YWwm6oESqAE SqAESqAESqAEziDQQ/0ZVBuzBEqgBEqgBEqgBEqgBC4k0EP9hbCbqgRKoARKoARK oARKoATOINBD/RlUG7MESqAESqAESqAESqAELiTQQ/2FsJuqBEqgBEqgBEqgBEqg BM4g0EP9GVQbswRKoARKoARKoARKoAQuJNBD/YWwm6oESqAESqAESqAESqAEziDw LyjLyCqd8VjgAAAAAElFTkSuQmCC --2ad078bb1935d938_7dbe29cea477094ea Content-Type: image/jpeg; name="oygwlskb.jpg" Content-Description: oygwlskb.jpg Content-Disposition: inline; filename="oygwlskb.jpg"; size=27553; creation-date="Tue, 14 Jul 2015 04:02:08 -0700"; modification-date="Tue, 14 Jul 2015 04:02:08 -0700" Content-ID: Content-Transfer-Encoding: base64 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 xUOjQmtDp8NcwwrDhsOXh28Ovx2hEMGNaI7ERYZGVkVOrXJbdXDVWJRFVE7UwGqd 1etX31yjsCZ5zaW14mtZa89GY6LDok9Ef2X5sypYUzHMmCMxk2wX9iH2K44j5wBn ItYutjD2RZxdXGHceLxd/P74iQSHhKKE11wXbgn3baJnYlnidJJ/UnXSbHJYckMK PiU65QJPipfE60hVSV2f2ss34Ofwh9Ns0g6mTQq8BVXpUPrq9OYMGjLsdAl1hT8I RzLtM0szP60LXXd2veR63vquDfobdm94keWe9ctG9Eb2xvZNapu2bxrZ7LS5fAu0 JWZL+1aNrdlbx7Z5bKvZTtyetP3ODuMdhTs+7Azb2ZKtnL0te/QHjx/qcsRyBDmD u2x3lf2I/pH7Y/dus92Hd3/P5eTeyjPOK8r7ms/Ov/WTyU/FP83uidvTXWBZcGwv di9v78A+h301hZKFWYWj+333Nx6gH8g98OHg2oM3i8yLyg4RDwkPDRf7FDcf1jy8 9/DXkoSS/lLn0oYjSkd2H5k+yjnad8zxWH2Zclle2ZefuT8PlXuUN1ZoVxRVYisz K58fDz3e+Qvjl9oqhaq8qm/VvOrhmsCajlqr2toTSicK6uA6Yd3EyaiTPadcTzXX G9aXN8g05J0Gp4WnX/4a/evAGe8z7WcZZ+vPaZ07cp56PrcRatzQONmU0DTcHNHc e8HrQnuLbcv534x+q76odrH0kvSlgsvEy9mXZ69kXZlq5be+botvG21f2/7oavjV +x0rO7qveV+7cd39+tVOp84rN+xuXLxpc/PCLcatptuWtxu7LLrO37G4c77bsrvx rtXd5h7rnpbeFb2X+xz62u653rt+n3n/dr9ff+9AyMDQYNTg8BBnaPxB8oO3DzMf zjza9hjzOPeJxJOip0pPK37X+71h2HL40ojrSNezoGePRtmjr/5I/+PrWPZzyvOi F6ovasdNxy9OuE/0vFz1cuwV/9XM65w/Jf888kb3zbm/HP/qmgyfHHsreDv7Lv+9 /PvqD+Yf2qcCpp5+TPk4M537Sf5TzWfG584vYV9ezKz7ivta/E3vW8t37++PZ1Nm Z/ksAWt+FEAhAcfFAfCuGgBKBADUHmReEFuYkecFLcz18wT+jhfm6HlZAlDtCEAo gt7bAKhsBUALWYnIGoDkgx0BbGYmin8qPc7MdKEXqQkZTYpmZ98jsyFOD4Bvg7Oz M02zs9+qELMPAWj9uDCbz0kCmf8dt1kxTH3uaOwC/6l/AEMbA74IqE+RAAABnWlU WHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i ZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJE RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5 bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgog ICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYv MS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj40NzY8L2V4aWY6 UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ MTEzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRp b24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ct4Gh0QAAEAASURBVHgB7d1r rKZHtSf22rvvF7ftxleubbAx2PgGxgabixmfzEHDjMigUXREZpJ8SaRI0USRonyI JtJ8S6SRIiVSlGiSmcl8GEQ4SnIOA8eGE1A4BmwwtsHmarDdYGPj+6Xd7nvv1K/e /neXH97d3TbuzY53LfvZVbVq3WtVred59tv7XViqUAaMCIwIjAiMCIwIjAic0Qgs nlHpQ/iIwIjAiMCIwIjAiECLwCi4IxFGBEYERgRGBEYEViACo+CuQJCHihGBEYER gRGBEYFRcEcOjAiMCIwIjAiMCKxABEbBXYEgDxUjAiMCIwIjAiMCo+COHBgRGBEY ERgRGBFYgQiMgrsCQR4qRgRGBEYERgRGBEbBHTkwIjAiMCIwIjAisAIRGAV3BYI8 VIwIjAiMCIwIjAiMgjtyYERgRGBEYERgRGAFIjAK7goEeagYERgRGBEYERgRGAV3 5MCIwIjAiMCIwIjACkRgFNwVCPJQMSIwIjAiMCIwIjAK7siBEYERgRGBEYERgRWI wCi4KxDkoWJEYERgRGBEYERgFNyRAyMCIwIjAiMCIwIrEIFRcFcgyEPFiMCIwIjA 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 WT2N/jw74kN4ehnhx0eHK7jYgT685uNv6CNPO8Whna4fusgIj5Y+F4gN+mh9gUJs iMyM0UyhtzOyyIYHcOzq9emTHUDb64icnkY/MvHpT/kiTxu9PU/k9rrIzRW+yA1d 2siP7tDzJzRTfRmb188aGdMbvHbaN46OzGfcJuqP2GKeHdYvuMiH0wfmenuDY1f0 NcL6wzj4nk8/ELu0R49Wf9S6cqAcWXq88otLvcq+Olf9rSl3VNot7am45xt9NayO H6/X3nJ4Xy2zr9RCveTbp54oS4cP1KTcV2U8XY4cQne4luEXyuHyVDl4eE95ZU+V 19x6uSwd2V+vSrJU6cuLVUT155Uq5kCN6+Eax/21PWj+QJ3fX8s2u56piGpLVbO0 r56b5Fa7jlQjmwl0Vjh65ER+JiZtov4wTmzh9BP30KSdzmVsPjFNnDM2R4c1c4Ge z9h8WnzGPa5NnoEf6/5phTMgtwXD3QWHf/KTn5QXXnihnHPOOQ3/i1/8ojz44IPl qaeean8/devWrcf//iqn+7sSwcjFTnMuBRytv6/qzhONRDfnb7IKcGi1AA17Qp/F MMajGLr8TVs85NNDFj1oAubxufTRRMa3v/3tsnnz5rJjx47ji2j+4YcfLi+99FLj Mc7fmSXj17/+dbn77rvLRRddVL73ve81O/ft21e++93vlne9613NJvbm7wLjp9fF L2MQW4xjmzi//PLLzYeeh6/oyEQL+By+hjiGC19woac7OvEa9zL0Ab9/+ctfFj7x W6zQAvx8M4Zn0xNPPFFeeeWV9pVtYo8GTG3GwxZ6Eh9jfVfAfA5ROsyhcxnLHTrh t23b1uL16KOPNv3+XvMPfvCDZv9b3/rWJjI66E/8+MbOrJE5F93w+rEJf3yKHQSb 79ckxTw6yAiQGx3BJ66RHRo8cHTB0ZHWXPChYweZ8CBFifzg8Ovby/fee2/LUzrI BubFhBx4F5yWnH490OAzRyb95tHZT88880w566yzyve///22JtYIPZr+DCCfLPs2 MUNHXuymA6SF149uvNab7rPPPrvRkgsfOmN6gdyhM30tmdHXJuoPdrjwmtMePjwb 07WwuLUWyY1l/ys1TmVDla+tObX4St0Lm8qhg1vLukV5VNfm4PbqQB1Xmlrbyr5X xLz+XfGysRa7+verl7aUxSrzwJG9lXZz2bhha/nenRvKf/dfbChXfGihnH3O3rL3 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 gg== --2ad078bb1935d938_7dbe29cea477094ea Content-Type: image/png; name="unsub.png" Content-Description: unsub.png Content-Disposition: inline; filename="unsub.png"; size=100; creation-date="Tue, 14 Jul 2015 04:02:08 -0700"; modification-date="Tue, 14 Jul 2015 04:02:08 -0700" Content-ID: Content-Transfer-Encoding: base64 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 xUOjQmtDp8NcwwrDhsOXh28Ovx2hEMGNaI7ERYZGVkVOrXJbdXDVWJRFVE7UwGqd 1etX31yjsCZ5zaW14mtZa89GY6LDok9Ef2X5sypYUzHMmCMxk2wX9iH2K44j5wBn ItYutjD2RZxdXGHceLxd/P74iQSHhKKE11wXbgn3baJnYlnidJJ/UnXSbHJYckMK PiU65QJPipfE60hVSV2f2ss34Ofwh9Ns0g6mTQq8BVXpUPrq9OYMGjLsdAl1hT8I RzLtM0szP60LXXd2veR63vquDfobdm94keWe9ctG9Eb2xvZNapu2bxrZ7LS5fAu0 JWZL+1aNrdlbx7Z5bKvZTtyetP3ODuMdhTs+7Azb2ZKtnL0te/QHjx/qcsRyBDmD u2x3lf2I/pH7Y/dus92Hd3/P5eTeyjPOK8r7ms/Ov/WTyU/FP83uidvTXWBZcGwv di9v78A+h301hZKFWYWj+333Nx6gH8g98OHg2oM3i8yLyg4RDwkPDRf7FDcf1jy8 9/DXkoSS/lLn0oYjSkd2H5k+yjnad8zxWH2Zclle2ZefuT8PlXuUN1ZoVxRVYisz K58fDz3e+Qvjl9oqhaq8qm/VvOrhmsCajlqr2toTSicK6uA6Yd3EyaiTPadcTzXX G9aXN8g05J0Gp4WnX/4a/evAGe8z7WcZZ+vPaZ07cp56PrcRatzQONmU0DTcHNHc e8HrQnuLbcv534x+q76odrH0kvSlgsvEy9mXZ69kXZlq5be+botvG21f2/7oavjV +x0rO7qveV+7cd39+tVOp84rN+xuXLxpc/PCLcatptuWtxu7LLrO37G4c77bsrvx rtXd5h7rnpbeFb2X+xz62u653rt+n3n/dr9ff+9AyMDQYNTg8BBnaPxB8oO3DzMf zjza9hjzOPeJxJOip0pPK37X+71h2HL40ojrSNezoGePRtmjr/5I/+PrWPZzyvOi F6ovasdNxy9OuE/0vFz1cuwV/9XM65w/Jf888kb3zbm/HP/qmgyfHHsreDv7Lv+9 /PvqD+Yf2qcCpp5+TPk4M537Sf5TzWfG584vYV9ezKz7ivta/E3vW8t37++PZ1Nm Z/ksAWt+FEAhAcfFAfCuGgBKBADUHmReEFuYkecFLcz18wT+jhfm6HlZAlDtCEAo gt7bAKhsBUALWYnIGoDkgx0BbGYmin8qPc7MdKEXqQkZTYpmZ98jsyFOD4Bvg7Oz M02zs9+qELMPAWj9uDCbz0kCmf8dt1kxTH3uaOwC/6l/AEMbA74IqE+RAAABnGlU WHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i ZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJE RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5 bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgog ICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYv MS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj40OTU8L2V4aWY6 UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ Mjg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlv bj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K/zIXOwAAFnxJREFUeAHtXAt4 VNW1/mcySSZvEhLIAxDEBOTyUoEUUkRbhGsA0Yv3gtYrXLD1U6DeBhEKkSJE6gsU BC0CLbEtDxtERKukFrzFfJJaQAlKJEDI+zHJTDIzmZnMa9+195mZTMIEYqElpPt8 krPPfqy91r9ee+8zRxWjC/KSCEgEJAISAYmAROCGQUB9w3AqGZUISAQkAhIBiYBE QCAgk7c0BImAREAiIBGQCNxgCMjkfYMpTLIrEZAISAQkAhIBmbylDUgEJAISAYmA ROAGQ0Am7xtMYZJdiYBEQCIgEZAIyOQtbUAiIBGQCEgEJAI3GAIyed9gCpPsSgQk AhIBiYBE4Jonb7fZBO+H48zp9EPYCbfN8+y0wc2L1M7ozsSzje6B+vuN49RsJmWs l7KHhvex453T9M3bsZE/09xOg8HHc6AuvI7TEbRIPqefjJ319693GXRwkezMZhPV brorfJngMit1/v15mZGczg5tjNNoB1Ebjm4PdsxsUMaRXF49dKTdnZ85Rgo2NsKm zZb8eQ6ETVs71zfhQv+cumrYa3RwtzX6Sm7CietEXj0Lgc7sh8cYxR88PsT92SM6 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 TkSuQmCC --2ad078bb1935d938_7dbe29cea477094ea-- From quzhozho@mail.com Tue Jul 14 09:55:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 550E07F5D for ; Tue, 14 Jul 2015 09:55:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3263A8F8068 for ; Tue, 14 Jul 2015 07:55:24 -0700 (PDT) X-ASG-Debug-ID: 1436885720-04cbb00fcb80b50001-NocioJ Received: from north.777472.com (north.777472.com [95.154.203.36]) by cuda.sgi.com with ESMTP id vevKcSr3NZTtN84u for ; Tue, 14 Jul 2015 07:55:21 -0700 (PDT) X-Barracuda-Envelope-From: quzhozho@mail.com X-Barracuda-Apparent-Source-IP: 95.154.203.36 To: xfs@oss.sgi.com Subject: Have you checked this? Message-ID: <29ff4c29153c802c6508b761b3a71b85@seatconsortium.com> X-ASG-Orig-Subj: Have you checked this? Date: Tue, 14 Jul 2015 16:54:59 +0200 From: "David Williams" Reply-To: brainywee@sina.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 662 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: north.777472.com[95.154.203.36] X-Barracuda-Start-Time: 1436885720 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.70 X-Barracuda-Spam-Status: No, SCORE=0.70 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0646, BSF_SC0_SA074b X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_MV0646 Custom rule MV0646 0.20 BSF_SC0_SA074b Custom Rule SA074b Hi, Are you interested in purchasing LOGO promotional and marketing products for your company? We produce branded USB Drives with your Logo or Artwork printed to be used for marketing or as gifts. There is more info on our website: www.customprintedflashdrives.com We can pre-load your media files, images, presentations and files onto the drives for you. People will keep the USB drive you give them and show it to others increasing your marketing value. Please click www.customprintedflashdrives.com to see all of our stock models and get a quote. If you are nonprofit, we have further discounts for schools and charities. Thanks, David USB Drive Specialist Contact: yabein@tom.com From contact@lexiss732.eu Tue Jul 14 12:46:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_IMAGE_RATIO_02, HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6F6FB7F5E for ; Tue, 14 Jul 2015 12:46:32 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id E9F34AC00B for ; Tue, 14 Jul 2015 10:46:28 -0700 (PDT) X-ASG-Debug-ID: 1436895984-04cb6c209c19e8f0001-NocioJ Received: from vps.corssa964.eu (vps.corssa964.eu [151.236.57.205]) by cuda.sgi.com with ESMTP id NFb50A51f8LtrwFH (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 14 Jul 2015 10:46:25 -0700 (PDT) X-Barracuda-Envelope-From: contact@lexiss732.eu X-Barracuda-Apparent-Source-IP: 151.236.57.205 Received: from [127.0.0.1] (smtp.lead-market01.eu [91.236.239.116]) (Authenticated sender: mail@lexiss732.eu) by vps.corssa964.eu (Postfix) with ESMTPA id 092B261D4F for ; Tue, 14 Jul 2015 18:46:22 +0100 (BST) Date: Tue, 14 Jul 2015 19:46:19 +0000 From: comparer-son-credit To: xfs@oss.sgi.com Reply-To: comparer-son-credit User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; Microsoft Outlook 15.0.4420) MIME-Version: 1.0 Subject: Comparez vos credits gratuitement Content-Type: multipart/alternative; boundary="------------010709040804010509030207" X-ASG-Orig-Subj: Comparez vos credits gratuitement X-Barracuda-Connect: vps.corssa964.eu[151.236.57.205] X-Barracuda-Start-Time: 1436895984 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.69 X-Barracuda-Spam-Status: No, SCORE=0.69 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_IMAGE_RATIO_02, HTML_MESSAGE, MISSING_MID, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 NO_REAL_NAME From: does not include a real name 0.55 HTML_IMAGE_RATIO_02 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message Message-Id: <20150714174628.6DDCF12961A3@cuda.sgi.com> This is a multi-part message in MIME format. --------------010709040804010509030207 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Si vous ne visualisez pas correctement ce message, veuillez suivre ce lien consultez-la en ligne logo moteur bouton texte crdit personnel crdit auto rachat de crdit crdit immobilier Un crdit vous engage et doit tre rembours. Vrifiez vos capacits de remboursement Si vous ne souhaitez plus recevoir d'informations de znotre part, Vous pouvez vous dsinscrire --------------010709040804010509030207 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit
Si vous ne visualisez pas correctement ce message, veuillez suivre ce lien consultez-la en ligne
 
logo
moteur
bouton
texte
crdit personnel crdit auto rachat de crdit crdit immobilier
 
Un crdit vous engage et doit tre rembours. Vrifiez vos capacits de remboursement
Si vous ne souhaitez plus recevoir d'informations de znotre part, Vous pouvez vous dsinscrire
--------------010709040804010509030207-- From jack@suse.cz Wed Jul 15 03:16:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CC5007F6C for ; Wed, 15 Jul 2015 03:16:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A5887304051 for ; Wed, 15 Jul 2015 01:16:18 -0700 (PDT) X-ASG-Debug-ID: 1436948175-04cbb00fc895ae0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id F5UAgSA9WFc56VZl (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 01:16:16 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 575D0ABB9; Wed, 15 Jul 2015 08:16:15 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id B570181DAD; Wed, 15 Jul 2015 10:16:11 +0200 (CEST) From: Jan Kara To: Dave Chinner Cc: Jan Kara , xfs@oss.sgi.com Subject: [PATCH] xfs: Fix uninitialized return value in xfs_alloc_fix_freelist() Date: Wed, 15 Jul 2015 10:16:08 +0200 X-ASG-Orig-Subj: [PATCH] xfs: Fix uninitialized return value in xfs_alloc_fix_freelist() Message-Id: <1436948168-25051-1-git-send-email-jack@suse.com> X-Mailer: git-send-email 2.1.4 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1436948176 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- xfs_alloc_fix_freelist() can sometimes jump to out_agbp_relse without ever setting value of 'error' variable which is then returned. This can happen e.g. when pag->pagf_init is set but AG is for metadata and we want to allocate user data. Fix the problem by initializing 'error' to 0, which is the desired return value when we decide to skip this group. CC: xfs@oss.sgi.com Coverity-id: 1309714 Signed-off-by: Jan Kara --- fs/xfs/libxfs/xfs_alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index f9e9ffe6fb46..7f8f2a0d4567 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -1937,7 +1937,7 @@ xfs_alloc_fix_freelist( struct xfs_alloc_arg targs; /* local allocation arguments */ xfs_agblock_t bno; /* freelist block */ xfs_extlen_t need; /* total blocks needed in freelist */ - int error; + int error = 0; if (!pag->pagf_init) { error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); -- 2.1.4 From holaondhu@yahoo.com Wed Jul 15 03:58:20 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=FORGED_YAHOO_RCVD, FREEMAIL_FROM autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E83EC7F6C for ; Wed, 15 Jul 2015 03:58:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C32B5304032 for ; Wed, 15 Jul 2015 01:58:20 -0700 (PDT) X-ASG-Debug-ID: 1436950698-04cb6c209c1afcf0001-NocioJ Received: from yming.51daiche.com (yming.51daiche.com [74.117.62.207]) by cuda.sgi.com with ESMTP id 6n5kFjQHMsddfNzy for ; Wed, 15 Jul 2015 01:58:19 -0700 (PDT) X-Barracuda-Envelope-From: holaondhu@yahoo.com X-Barracuda-Apparent-Source-IP: 74.117.62.207 To: xfs@oss.sgi.com Subject: Quick Question Message-ID: X-ASG-Orig-Subj: Quick Question Date: Wed, 15 Jul 2015 10:50:54 +0200 From: "Zach" Reply-To: richiechen@aliyun.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 647 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: yming.51daiche.com[74.117.62.207] X-Barracuda-Start-Time: 1436950698 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.41 X-Barracuda-Spam-Status: No, SCORE=1.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=FORGED_YAHOO_RCVD, FORGED_YAHOO_RCVD_2, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 FORGED_YAHOO_RCVD 'From' yahoo.com does not match 'Received' headers 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 1.41 FORGED_YAHOO_RCVD_2 'From' yahoo.com does not match 'Received' headers Hello, I work for a leading digital marketing agency in Southern California that focuses on helping small businesses advertise online. Our full service small business agency offers the following services and products: 1. Geography-Targeted Digital Advertising in the area(s) of your choice 2. High-End Website Design and Development 3. Banner Ads, Mobile Advertising 4. Search Engine Optimization (SEO) 5. Search Engine Advertising 6. E-Commerce Solutions, iPhone, Android Apps Development. If you are interested, I would be more than happy to reach out with more information and develop a plan that works with your business type. PROFESSIONAL TRUSTWORTHY RELIABLE QUALITY SERVICE Thanks & Regards, Zach Business Development Manager Contact: maymay01@aliyun.com From jack@suse.cz Wed Jul 15 04:03:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6B2FC7F6C for ; Wed, 15 Jul 2015 04:03:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 44575304032 for ; Wed, 15 Jul 2015 02:03:25 -0700 (PDT) X-ASG-Debug-ID: 1436950985-04cb6c209e1b01e0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id a2BpQCORjIA6q2kx (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 02:03:06 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 7AD6DAAC1 for ; Wed, 15 Jul 2015 09:03:05 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id 14B1781DAD; Wed, 15 Jul 2015 11:03:02 +0200 (CEST) From: Jan Kara To: xfs@oss.sgi.com Cc: Jan Kara Subject: [PATCH] xfs: Remove duplicate jumps to the same label Date: Wed, 15 Jul 2015 11:02:55 +0200 X-ASG-Orig-Subj: [PATCH] xfs: Remove duplicate jumps to the same label Message-Id: <1436950975-5004-1-git-send-email-jack@suse.com> X-Mailer: git-send-email 2.1.4 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1436950986 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- xfs_create() and xfs_create_tmpfile() have useless jumps to identical labels. Simplify them. Signed-off-by: Jan Kara --- fs/xfs/xfs_inode.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 3da9f4da4f3d..d22a984d8470 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1175,11 +1175,8 @@ xfs_create( */ error = xfs_dir_ialloc(&tp, dp, mode, is_dir ? 2 : 1, rdev, prid, resblks > 0, &ip, &committed); - if (error) { - if (error == -ENOSPC) - goto out_trans_cancel; + if (error) goto out_trans_cancel; - } /* * Now we join the directory inode to the transaction. We do not do it @@ -1318,11 +1315,8 @@ xfs_create_tmpfile( error = xfs_dir_ialloc(&tp, dp, mode, 1, 0, prid, resblks > 0, &ip, NULL); - if (error) { - if (error == -ENOSPC) - goto out_trans_cancel; + if (error) goto out_trans_cancel; - } if (mp->m_flags & XFS_MOUNT_WSYNC) xfs_trans_set_sync(tp); -- 2.1.4 From bfoster@redhat.com Wed Jul 15 06:16:54 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4ECEE7F6C for ; Wed, 15 Jul 2015 06:16:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C8B81AC001 for ; Wed, 15 Jul 2015 04:16:53 -0700 (PDT) X-ASG-Debug-ID: 1436959012-04cbb00fc99b940001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 79lT2TqpVv4SvlF9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 04:16:52 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id DE027923B6; Wed, 15 Jul 2015 11:16:51 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6FBGpIv028973; Wed, 15 Jul 2015 07:16:51 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 8EA71123029; Wed, 15 Jul 2015 07:16:50 -0400 (EDT) Date: Wed, 15 Jul 2015 07:16:50 -0400 From: Brian Foster To: Jan Kara Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: Fix uninitialized return value in xfs_alloc_fix_freelist() Message-ID: <20150715111649.GA60463@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: Fix uninitialized return value in xfs_alloc_fix_freelist() References: <1436948168-25051-1-git-send-email-jack@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436948168-25051-1-git-send-email-jack@suse.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436959012 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 15, 2015 at 10:16:08AM +0200, Jan Kara wrote: > xfs_alloc_fix_freelist() can sometimes jump to out_agbp_relse without > ever setting value of 'error' variable which is then returned. This can > happen e.g. when pag->pagf_init is set but AG is for metadata and we > want to allocate user data. > > Fix the problem by initializing 'error' to 0, which is the desired > return value when we decide to skip this group. > > CC: xfs@oss.sgi.com > Coverity-id: 1309714 > Signed-off-by: Jan Kara > --- Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_alloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index f9e9ffe6fb46..7f8f2a0d4567 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -1937,7 +1937,7 @@ xfs_alloc_fix_freelist( > struct xfs_alloc_arg targs; /* local allocation arguments */ > xfs_agblock_t bno; /* freelist block */ > xfs_extlen_t need; /* total blocks needed in freelist */ > - int error; > + int error = 0; > > if (!pag->pagf_init) { > error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); > -- > 2.1.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Wed Jul 15 06:17:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 070837F6C for ; Wed, 15 Jul 2015 06:17:05 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C92C68F8033 for ; Wed, 15 Jul 2015 04:17:01 -0700 (PDT) X-ASG-Debug-ID: 1436959020-04cbb00fc99b950001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id JMHF8RTTM0w2j0eA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 04:17:00 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 4520B32C42D; Wed, 15 Jul 2015 11:17:00 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-63.bos.redhat.com [10.18.41.63]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6FBGxNo026847; Wed, 15 Jul 2015 07:17:00 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 12B2D123029; Wed, 15 Jul 2015 07:16:59 -0400 (EDT) Date: Wed, 15 Jul 2015 07:16:59 -0400 From: Brian Foster To: Jan Kara Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: Remove duplicate jumps to the same label Message-ID: <20150715111658.GB60463@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: Remove duplicate jumps to the same label References: <1436950975-5004-1-git-send-email-jack@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436950975-5004-1-git-send-email-jack@suse.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436959020 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 15, 2015 at 11:02:55AM +0200, Jan Kara wrote: > xfs_create() and xfs_create_tmpfile() have useless jumps to identical > labels. Simplify them. > > Signed-off-by: Jan Kara > --- Reviewed-by: Brian Foster > fs/xfs/xfs_inode.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 3da9f4da4f3d..d22a984d8470 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1175,11 +1175,8 @@ xfs_create( > */ > error = xfs_dir_ialloc(&tp, dp, mode, is_dir ? 2 : 1, rdev, > prid, resblks > 0, &ip, &committed); > - if (error) { > - if (error == -ENOSPC) > - goto out_trans_cancel; > + if (error) > goto out_trans_cancel; > - } > > /* > * Now we join the directory inode to the transaction. We do not do it > @@ -1318,11 +1315,8 @@ xfs_create_tmpfile( > > error = xfs_dir_ialloc(&tp, dp, mode, 1, 0, > prid, resblks > 0, &ip, NULL); > - if (error) { > - if (error == -ENOSPC) > - goto out_trans_cancel; > + if (error) > goto out_trans_cancel; > - } > > if (mp->m_flags & XFS_MOUNT_WSYNC) > xfs_trans_set_sync(tp); > -- > 2.1.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jtulak@redhat.com Wed Jul 15 07:46:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5827C7F58 for ; Wed, 15 Jul 2015 07:46:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 390F3304043 for ; Wed, 15 Jul 2015 05:46:55 -0700 (PDT) X-ASG-Debug-ID: 1436964414-04cb6c209f1b8260001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id NBm3CbhjfRcQjxCZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 05:46:55 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 57C562D44FC for ; Wed, 15 Jul 2015 12:46:54 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6FCkr9n023337 for ; Wed, 15 Jul 2015 08:46:53 -0400 From: Jan Tulak To: xfs@oss.sgi.com Subject: [PATCH 0/2] xfsprogs: Partial OS X support Date: Wed, 15 Jul 2015 14:46:50 +0200 X-ASG-Orig-Subj: [PATCH 0/2] xfsprogs: Partial OS X support Message-Id: <1436964412-12093-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436964415 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 These patches fixes the current broken OS X support of xfsprogs. The goal is to make xfsprogs buildable on current OS X Yosemite, and to have a working mkfs.xfs. The usage is indeed limited and there is still space for many improvements, but "it works". Jan Tulak (2): Prefix LIST_... macros to XFS_LIST_... OS X partial support Makefile | 6 +++ include/bitops.h | 47 --------------------- include/builddefs.in | 2 +- include/darwin.h | 104 +++++++++++++++++++++++++++++++++++++--------- include/freebsd.h | 47 +++++++++++++++++++++ include/gnukfreebsd.h | 46 ++++++++++++++++++++ include/hlist.h | 10 ++--- include/irix.h | 50 +++++++++++++++++++++- include/linux.h | 46 ++++++++++++++++++++ include/list.h | 8 ++-- libdisk/fstype.c | 1 + libhandle/Makefile | 4 ++ libhandle/handle.c | 2 +- libxcmd/paths.c | 2 +- libxfs/trans.c | 2 +- libxfs/xfs_bit.h | 4 +- libxfs/xfs_fs.h | 4 +- libxlog/xfs_log_recover.c | 6 +-- man/man3/xfsctl.3 | 2 +- repair/incore.h | 2 +- repair/phase6.c | 4 +- 21 files changed, 307 insertions(+), 92 deletions(-) -- 2.4.3 From jtulak@redhat.com Wed Jul 15 07:46:59 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B9EC17F7C for ; Wed, 15 Jul 2015 07:46:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9A062304048 for ; Wed, 15 Jul 2015 05:46:59 -0700 (PDT) X-ASG-Debug-ID: 1436964415-04cbb00fcb9e940001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id udLePoglUZUlLXxP (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 05:46:55 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 4E75FBC916 for ; Wed, 15 Jul 2015 12:46:55 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6FCkr9o023337 for ; Wed, 15 Jul 2015 08:46:54 -0400 From: Jan Tulak To: xfs@oss.sgi.com Subject: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... Date: Wed, 15 Jul 2015 14:46:51 +0200 X-ASG-Orig-Subj: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... Message-Id: <1436964412-12093-2-git-send-email-jtulak@redhat.com> In-Reply-To: <1436964412-12093-1-git-send-email-jtulak@redhat.com> References: <1436964412-12093-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436964415 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 OS X has some conflicting LIST_ macros, so prefix the XFS ones. Signed-off-by: Jan Tulak --- include/hlist.h | 10 +++++----- include/irix.h | 4 ++-- include/list.h | 8 ++++---- libhandle/handle.c | 2 +- libxfs/trans.c | 2 +- libxfs/xfs_fs.h | 4 ++-- libxlog/xfs_log_recover.c | 6 +++--- man/man3/xfsctl.3 | 2 +- repair/incore.h | 2 +- repair/phase6.c | 4 ++-- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/include/hlist.h b/include/hlist.h index 9ee096c..0d9c5d6 100644 --- a/include/hlist.h +++ b/include/hlist.h @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef __HLIST_H__ -#define __HLIST_H__ +#ifndef __HXFS_LIST_H__ +#define __HXFS_LIST_H__ struct hlist_node { struct hlist_node *next; @@ -26,8 +26,8 @@ struct hlist_head { struct hlist_node *first; }; -#define HLIST_HEAD_INIT { .first = NULL } -static inline void INIT_HLIST_NODE(struct hlist_node *h) +#define HXFS_LIST_HEAD_INIT { .first = NULL } +static inline void INIT_HXFS_LIST_NODE(struct hlist_node *h) { h->next = NULL; h->pprev = NULL; @@ -71,4 +71,4 @@ static inline void hlist_del(struct hlist_node *n) pos = pos->next) -#endif /* __LIST_H__ */ +#endif /* __XFS_LIST_H__ */ diff --git a/include/irix.h b/include/irix.h index 31050c4..c7f87d7 100644 --- a/include/irix.h +++ b/include/irix.h @@ -230,7 +230,7 @@ static __inline__ int xfsctl(const char *path, int fd, int cmd, void *arg) ((xfs_fsop_handlereq_t*)arg)->ihandlen, ((xfs_fsop_handlereq_t*)arg)->ohandle, ((xfs_fsop_handlereq_t*)arg)->ohandlen); - case SGI_ATTR_LIST_BY_HANDLE: + case SGI_ATTR_XFS_LIST_BY_HANDLE: return syssgi(cmd, ((xfs_fsop_attrlist_handlereq_t*)arg)->hreq.ihandle, ((xfs_fsop_attrlist_handlereq_t*)arg)->hreq.ihandlen, @@ -403,7 +403,7 @@ static __inline__ char * strsep(char **s, const char *ct) #define XFS_IOC_FREEZE XFS_FS_FREEZE #define XFS_IOC_THAW XFS_FS_THAW #define XFS_IOC_FSSETDM_BY_HANDLE SGI_FSSETDM_BY_HANDLE -#define XFS_IOC_ATTRLIST_BY_HANDLE SGI_ATTR_LIST_BY_HANDLE +#define XFS_IOC_ATTRXFS_LIST_BY_HANDLE SGI_ATTR_XFS_LIST_BY_HANDLE #define XFS_IOC_ATTRMULTI_BY_HANDLE SGI_ATTR_MULTI_BY_HANDLE #define XFS_IOC_FSGEOMETRY XFS_FS_GEOMETRY #define XFS_IOC_GOINGDOWN XFS_FS_GOINGDOWN diff --git a/include/list.h b/include/list.h index 3f087a4..84fdce0 100644 --- a/include/list.h +++ b/include/list.h @@ -27,12 +27,12 @@ struct list_head { struct list_head *prev; }; -#define LIST_HEAD_INIT(name) { &(name), &(name) } +#define XFS_LIST_HEAD_INIT(name) { &(name), &(name) } -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) +#define XFS_LIST_HEAD(name) \ + struct list_head name = XFS_LIST_HEAD_INIT(name) -#define INIT_LIST_HEAD(list) list_head_init(list) +#define INIT_XFS_LIST_HEAD(list) list_head_init(list) static inline void list_head_init(struct list_head *list) { list->next = list->prev = list; diff --git a/libhandle/handle.c b/libhandle/handle.c index 54e6f71..76c8142 100644 --- a/libhandle/handle.c +++ b/libhandle/handle.c @@ -399,7 +399,7 @@ attr_list_by_handle( if (alhreq.buflen > XATTR_LIST_MAX) alhreq.buflen = XATTR_LIST_MAX; - error = xfsctl(path, fd, XFS_IOC_ATTRLIST_BY_HANDLE, &alhreq); + error = xfsctl(path, fd, XFS_IOC_ATTRXFS_LIST_BY_HANDLE, &alhreq); memcpy(cursor, &alhreq.pos, sizeof(alhreq.pos)); return error; diff --git a/libxfs/trans.c b/libxfs/trans.c index 0388950..f7ff11d 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -169,7 +169,7 @@ libxfs_trans_alloc( } ptr->t_mountp = mp; ptr->t_type = type; - INIT_LIST_HEAD(&ptr->t_items); + INIT_XFS_LIST_HEAD(&ptr->t_items); #ifdef XACT_DEBUG fprintf(stderr, "allocated new transaction %p\n", ptr); #endif diff --git a/libxfs/xfs_fs.h b/libxfs/xfs_fs.h index 89689c6..8c37e08 100644 --- a/libxfs/xfs_fs.h +++ b/libxfs/xfs_fs.h @@ -403,7 +403,7 @@ typedef struct xfs_fsop_handlereq { /* * Compound structures for passing args through Handle Request interfaces * xfs_fssetdm_by_handle, xfs_attrlist_by_handle, xfs_attrmulti_by_handle - * - ioctls: XFS_IOC_FSSETDM_BY_HANDLE, XFS_IOC_ATTRLIST_BY_HANDLE, and + * - ioctls: XFS_IOC_FSSETDM_BY_HANDLE, XFS_IOC_ATTRXFS_LIST_BY_HANDLE, and * XFS_IOC_ATTRMULTI_BY_HANDLE */ @@ -553,7 +553,7 @@ typedef struct xfs_swapext #endif #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq) -#define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) +#define XFS_IOC_ATTRXFS_LIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq) #define XFS_IOC_FSGEOMETRY _IOR ('X', 124, struct xfs_fsop_geom) #define XFS_IOC_GOINGDOWN _IOR ('X', 125, __uint32_t) diff --git a/libxlog/xfs_log_recover.c b/libxlog/xfs_log_recover.c index a80c431..1782db0 100644 --- a/libxlog/xfs_log_recover.c +++ b/libxlog/xfs_log_recover.c @@ -1018,9 +1018,9 @@ xlog_recover_new_tid( trans = kmem_zalloc(sizeof(xlog_recover_t), KM_SLEEP); trans->r_log_tid = tid; trans->r_lsn = lsn; - INIT_LIST_HEAD(&trans->r_itemq); + INIT_XFS_LIST_HEAD(&trans->r_itemq); - INIT_HLIST_NODE(&trans->r_list); + INIT_HXFS_LIST_NODE(&trans->r_list); hlist_add_head(&trans->r_list, head); } @@ -1031,7 +1031,7 @@ xlog_recover_add_item( xlog_recover_item_t *item; item = kmem_zalloc(sizeof(xlog_recover_item_t), KM_SLEEP); - INIT_LIST_HEAD(&item->ri_list); + INIT_XFS_LIST_HEAD(&item->ri_list); list_add_tail(&item->ri_list, head); } diff --git a/man/man3/xfsctl.3 b/man/man3/xfsctl.3 index e84b829..756f4b8 100644 --- a/man/man3/xfsctl.3 +++ b/man/man3/xfsctl.3 @@ -459,7 +459,7 @@ reports unwritten=1, then the filesystem was made to flag unwritten extents. .B XFS_IOC_FD_TO_HANDLE .B XFS_IOC_OPEN_BY_HANDLE .B XFS_IOC_READLINK_BY_HANDLE -.B XFS_IOC_ATTR_LIST_BY_HANDLE +.B XFS_IOC_ATTR_XFS_LIST_BY_HANDLE .B XFS_IOC_ATTR_MULTI_BY_HANDLE .fi .PD 0 diff --git a/repair/incore.h b/repair/incore.h index c92475e..0420a10 100644 --- a/repair/incore.h +++ b/repair/incore.h @@ -254,7 +254,7 @@ int count_bcnt_extents(xfs_agnumber_t); * connected. */ -#define PLIST_CHUNK_SIZE 4 +#define PXFS_LIST_CHUNK_SIZE 4 typedef xfs_ino_t parent_entry_t; diff --git a/repair/phase6.c b/repair/phase6.c index 9a5cba7..ae9f9fa 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -49,7 +49,7 @@ typedef struct dotdot_update { int ino_offset; } dotdot_update_t; -static LIST_HEAD(dotdot_update_list); +static XFS_LIST_HEAD(dotdot_update_list); static int dotdot_update; static void @@ -64,7 +64,7 @@ add_dotdot_update( do_error(_("malloc failed add_dotdot_update (%zu bytes)\n"), sizeof(dotdot_update_t)); - INIT_LIST_HEAD(&dir->list); + INIT_XFS_LIST_HEAD(&dir->list); dir->irec = irec; dir->agno = agno; dir->ino_offset = ino_offset; -- 2.4.3 From jtulak@redhat.com Wed Jul 15 07:47:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5B03A7F6C for ; Wed, 15 Jul 2015 07:47:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3C1D18F8049 for ; Wed, 15 Jul 2015 05:46:58 -0700 (PDT) X-ASG-Debug-ID: 1436964416-04cb6c209f1b8270001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id IPZXOpBZGfZSVlM2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 15 Jul 2015 05:46:57 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 5DC82B1F88 for ; Wed, 15 Jul 2015 12:46:56 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6FCkr9p023337 for ; Wed, 15 Jul 2015 08:46:55 -0400 From: Jan Tulak To: xfs@oss.sgi.com Subject: [PATCH 2/2] OS X partial support Date: Wed, 15 Jul 2015 14:46:52 +0200 X-ASG-Orig-Subj: [PATCH 2/2] OS X partial support Message-Id: <1436964412-12093-3-git-send-email-jtulak@redhat.com> In-Reply-To: <1436964412-12093-1-git-send-email-jtulak@redhat.com> References: <1436964412-12093-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1436964416 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This patch introduces changes to support current OS X (10.10 Yosemite). The previous OS X code base is about 4 years old and both OS X and XFS changed, so there had to be done some work to make it compilable. - Because some missing APIs in OS X (like fstab/mtab) and the unability to mount XFS, not all tools are compiled. - fls (find last bit) calls were moved to platform headers, as OS X has a native implementation. - xfs_db currently has only a dummy timer implementation - Various other edits - some API translations, some, missing defines. The code compiles using Apple's clang, although it throws some warnings. Some of them are complaints about deprecated calls, some are false-positives and there are also some incompatible type assignments/comparisons, so there is a place for further patches. Signed-off-by: Jan Tulak --- Makefile | 6 +++ include/bitops.h | 47 ----------------------- include/builddefs.in | 2 +- include/darwin.h | 104 +++++++++++++++++++++++++++++++++++++++++--------- include/freebsd.h | 47 +++++++++++++++++++++++ include/gnukfreebsd.h | 46 ++++++++++++++++++++++ include/irix.h | 46 ++++++++++++++++++++++ include/linux.h | 46 ++++++++++++++++++++++ libdisk/fstype.c | 1 + libhandle/Makefile | 4 ++ libxcmd/paths.c | 2 +- libxfs/xfs_bit.h | 4 +- 12 files changed, 285 insertions(+), 70 deletions(-) diff --git a/Makefile b/Makefile index 6d6803b..2ab928b 100644 --- a/Makefile +++ b/Makefile @@ -48,6 +48,12 @@ LIB_SUBDIRS = libxfs $(DLIB_SUBDIRS) TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ mdrestore repair rtcp m4 man doc po debian +# Not every tool can work on OS X, so include only those, which has a reason. +ifeq ($(PKG_PLATFORM),darwin) +TOOL_SUBDIRS = copy db estimate fsck logprint mkfs quota \ + mdrestore repair rtcp m4 man doc +endif + # include is listed last so it is processed last in clean rules. SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) include diff --git a/include/bitops.h b/include/bitops.h index 930f64a..c6593bd 100644 --- a/include/bitops.h +++ b/include/bitops.h @@ -2,53 +2,6 @@ #define __BITOPS_H__ /* - * fls: find last bit set. - */ - -static inline int fls(int x) -{ - int r = 32; - - if (!x) - return 0; - if (!(x & 0xffff0000u)) { - x <<= 16; - r -= 16; - } - if (!(x & 0xff000000u)) { - x <<= 8; - r -= 8; - } - if (!(x & 0xf0000000u)) { - x <<= 4; - r -= 4; - } - if (!(x & 0xc0000000u)) { - x <<= 2; - r -= 2; - } - if (!(x & 0x80000000u)) { - r -= 1; - } - return r; -} - -static inline int fls64(__u64 x) -{ - __u32 h = x >> 32; - if (h) - return fls(h) + 32; - return fls(x); -} - -static inline unsigned fls_long(unsigned long l) -{ - if (sizeof(l) == 4) - return fls(l); - return fls64(l); -} - -/* * ffz: find first zero bit. * Result is undefined if no zero bit exists. */ diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..7f939f6 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -119,7 +119,7 @@ ifeq ($(PKG_PLATFORM),gnukfreebsd) PCFLAGS = -D_GNU_SOURCE $(GCCFLAGS) endif ifeq ($(PKG_PLATFORM),darwin) -PCFLAGS = -traditional-cpp $(GCCFLAGS) +PCFLAGS = $(GCCFLAGS) DEPENDFLAGS = -D__APPLE__ endif ifeq ($(PKG_PLATFORM),irix) diff --git a/include/darwin.h b/include/darwin.h index 30f0052..df47d05 100644 --- a/include/darwin.h +++ b/include/darwin.h @@ -24,11 +24,15 @@ #include #include #include +#include +#include +#include +#include #include -#define __BYTE_ORDER BYTE_ORDER -#define __BIG_ENDIAN BIG_ENDIAN -#define __LITTLE_ENDIAN LITTLE_ENDIAN +#define __BYTE_ORDER BYTE_ORDER +#define __BIG_ENDIAN BIG_ENDIAN +#define __LITTLE_ENDIAN LITTLE_ENDIAN #include # ifndef SYS_fsctl @@ -68,45 +72,37 @@ static __inline__ void platform_getoptreset(void) static __inline__ int platform_uuid_compare(uuid_t *uu1, uuid_t *uu2) { - return uuid_compare(uu1, uu2, NULL); + return uuid_compare((const unsigned char *) uu1, (const unsigned char*) uu2); } static __inline__ void platform_uuid_unparse(uuid_t *uu, char *buffer) { - uint32_t status; - char *s; - uuid_to_string(uu, &s, &status); - if (status == uuid_s_ok) - strcpy(buffer, s); - else buffer[0] = '\0'; - free(s); + uuid_unparse(*uu, buffer); } static __inline__ int platform_uuid_parse(char *buffer, uuid_t *uu) { - uint32_t status; - uuid_from_string(buffer, uu, &status); - return (status == uuid_s_ok); + return uuid_parse(buffer, *uu); } static __inline__ int platform_uuid_is_null(uuid_t *uu) { - return uuid_is_nil(uu, NULL); + return uuid_is_null(*uu); } static __inline__ void platform_uuid_generate(uuid_t *uu) { - uuid_create(uu, NULL); + uuid_generate(*uu); } static __inline__ void platform_uuid_clear(uuid_t *uu) { - uuid_create_nil(uu, NULL); + uuid_clear(*uu); } static __inline__ void platform_uuid_copy(uuid_t *dst, uuid_t *src) { - memcpy(dst, src, sizeof(uuid_t)); + uuid_copy(*dst, *src); } #define __int8_t int8_t @@ -142,11 +138,13 @@ typedef int64_t xfs_daddr_t; #define O_SYNC 0 #endif -#define ENOATTR 989 /* Attribute not found */ #define EFSCORRUPTED 990 /* Filesystem is corrupted */ #define EFSBADCRC 991 /* Bad CRC detected */ #define constpp char * const * +#define XATTR_SIZE_MAX 65536 /* size of an extended attribute value (64k) */ +#define XATTR_LIST_MAX 65536 /* size of extended attribute namelist (64k) */ + #define HAVE_FID 1 static __inline__ int @@ -155,4 +153,72 @@ platform_discard_blocks(int fd, uint64_t start, uint64_t len) return 0; } + +/* + * Dummy POSIX timer replacement + */ +#define CLOCK_REALTIME 1 +typedef uint64_t timer_t; +typedef double timer_c; +typedef clock_id_t clockid_t; +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +static inline int timer_create (clockid_t __clock_id, + struct sigevent *__restrict __evp, + timer_t *__restrict __timerid) +{ + return 0; +} + +static inline int timer_settime (timer_t __timerid, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue) +{ + return 0; +} + +static inline int timer_delete (timer_t __timerid) +{ + return 0; +} + +static inline int timer_gettime (timer_t __timerid, struct itimerspec *__value) +{ + return 0; +} + +/* + * fls: find last bit set. + */ + +static inline int platform_fls(int x) +{ + return fls(x); +} + +static inline int platform_fls64(__u64 x) +{ + __u32 h = x >> 32; + if (h) + return platform_fls(h) + 32; + return platform_fls(x); +} + +static inline unsigned platform_fls_long(unsigned long l) +{ + if (sizeof(l) == 4) + return platform_fls(l); + return platform_fls64(l); +} + +static inline int nftw64(const char *path, int (*fn)(const char *, const struct stat *ptr, int flag, struct FTW *), int depth, + int flags) +{ + return nftw(path, fn, depth, flags); +} + #endif /* __XFS_DARWIN_H__ */ diff --git a/include/freebsd.h b/include/freebsd.h index e59b1e8..59deb30 100644 --- a/include/freebsd.h +++ b/include/freebsd.h @@ -138,4 +138,51 @@ platform_discard_blocks(int fd, uint64_t start, uint64_t len) return 0; } +/* + * fls: find last bit set. + */ + +static inline int platform_fls(int x) +{ + int r = 32; + + if (!x) + return 0; + if (!(x & 0xffff0000u)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xff000000u)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xf0000000u)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xc0000000u)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000u)) { + r -= 1; + } + return r; +} + +static inline int platform_fls64(__u64 x) +{ + __u32 h = x >> 32; + if (h) + return platform_fls(h) + 32; + return platform_fls(x); +} + +static inline unsigned platform_fls_long(unsigned long l) +{ + if (sizeof(l) == 4) + return platform_fls(l); + return platform_fls64(l); +} + #endif /* __XFS_FREEBSD_H__ */ diff --git a/include/gnukfreebsd.h b/include/gnukfreebsd.h index f2e1bf5..8d75b6d 100644 --- a/include/gnukfreebsd.h +++ b/include/gnukfreebsd.h @@ -118,4 +118,50 @@ platform_discard_blocks(int fd, uint64_t start, uint64_t len) return 0; } +/* + * fls: find last bit set. + */ + +static inline int platform_fls(int x) +{ + int r = 32; + + if (!x) + return 0; + if (!(x & 0xffff0000u)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xff000000u)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xf0000000u)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xc0000000u)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000u)) { + r -= 1; + } + return r; +} + +static inline int platform_fls64(__u64 x) +{ + __u32 h = x >> 32; + if (h) + return platform_fls(h) + 32; + return platform_fls(x); +} + +static inline unsigned platform_fls_long(unsigned long l) +{ + if (sizeof(l) == 4) + return platform_fls(l); + return platform_fls64(l); +} #endif /* __XFS_KFREEBSD_H__ */ diff --git a/include/irix.h b/include/irix.h index c7f87d7..6dc4eb2 100644 --- a/include/irix.h +++ b/include/irix.h @@ -414,4 +414,50 @@ static __inline__ char * strsep(char **s, const char *ct) #define XFS_XFLAG_NODEFRAG 0x00002000 +/* + * fls: find last bit set. + */ + +static inline int platform_fls(int x) +{ + int r = 32; + + if (!x) + return 0; + if (!(x & 0xffff0000u)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xff000000u)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xf0000000u)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xc0000000u)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000u)) { + r -= 1; + } + return r; +} + +static inline int platform_fls64(__u64 x) +{ + __u32 h = x >> 32; + if (h) + return platform_fls(h) + 32; + return platform_fls(x); +} + +static inline unsigned platform_fls_long(unsigned long l) +{ + if (sizeof(l) == 4) + return platform_fls(l); + return platform_fls64(l); +} #endif /* __XFS_IRIX_H__ */ diff --git a/include/linux.h b/include/linux.h index 31c077a..38321ab 100644 --- a/include/linux.h +++ b/include/linux.h @@ -143,4 +143,50 @@ typedef __uint64_t xfs_ino_t; typedef __uint32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +/* + * fls: find last bit set. + */ + +static inline int platform_fls(int x) +{ + int r = 32; + + if (!x) + return 0; + if (!(x & 0xffff0000u)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xff000000u)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xf0000000u)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xc0000000u)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000u)) { + r -= 1; + } + return r; +} + +static inline int platform_fls64(__u64 x) +{ + __u32 h = x >> 32; + if (h) + return platform_fls(h) + 32; + return platform_fls(x); +} + +static inline unsigned platform_fls_long(unsigned long l) +{ + if (sizeof(l) == 4) + return platform_fls(l); + return platform_fls64(l); +} #endif /* __XFS_LINUX_H__ */ diff --git a/libdisk/fstype.c b/libdisk/fstype.c index 548f297..c8bde34 100644 --- a/libdisk/fstype.c +++ b/libdisk/fstype.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "fstype.h" /* diff --git a/libhandle/Makefile b/libhandle/Makefile index 865ca22..0b5e1ad 100644 --- a/libhandle/Makefile +++ b/libhandle/Makefile @@ -10,7 +10,11 @@ LT_CURRENT = 1 LT_REVISION = 3 LT_AGE = 0 +ifeq ($(PKG_PLATFORM),darwin) +LTLDFLAGS += -Wl,libhandle.sym +else LTLDFLAGS += -Wl,--version-script,libhandle.sym +endif CFILES = handle.c jdm.c LSRCFILES = libhandle.sym diff --git a/libxcmd/paths.c b/libxcmd/paths.c index c0b1ddb..b360617 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -364,7 +364,7 @@ fs_table_initialise_mounts( continue; if (!realpath(stats[i].f_mntfromname, rmntfromname)) continue; - if (!realpath(stats[i].f_mntonname, rmnttomname))) + if (!realpath(stats[i].f_mntonname, rmntonname)) continue; if (path && diff --git a/libxfs/xfs_bit.h b/libxfs/xfs_bit.h index e1649c0..f3e000c 100644 --- a/libxfs/xfs_bit.h +++ b/libxfs/xfs_bit.h @@ -41,13 +41,13 @@ static inline __uint64_t xfs_mask64lo(int n) /* Get high bit set out of 32-bit argument, -1 if none set */ static inline int xfs_highbit32(__uint32_t v) { - return fls(v) - 1; + return platform_fls(v) - 1; } /* Get high bit set out of 64-bit argument, -1 if none set */ static inline int xfs_highbit64(__uint64_t v) { - return fls64(v) - 1; + return platform_fls64(v) - 1; } /* Get low bit set out of 32-bit argument, -1 if none set */ -- 2.4.3 From david@fromorbit.com Wed Jul 15 18:53:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D6B817F86 for ; Wed, 15 Jul 2015 18:53:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 54555AC006 for ; Wed, 15 Jul 2015 16:53:24 -0700 (PDT) X-ASG-Debug-ID: 1437004399-04cb6c3b8b06130001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id BNJ3or32698Lq7Pw for ; Wed, 15 Jul 2015 16:53:20 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BlBgD98aZV/zurLHlbgxOBPYJVphEGmjcEAgKBQk0BAQEBAQGBC4QjAQEBAwEnExwjBQsIAw4KCSUPBSUDIROIJgfQDgELIBmGBYUuhQYHhCsFjDCIDYwNjheKYCZjgSocgWUsMYJLAQEB Received: from ppp121-44-171-59.lns20.syd7.internode.on.net (HELO dastard) ([121.44.171.59]) by ipmail07.adl2.internode.on.net with ESMTP; 16 Jul 2015 09:23:18 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZFWU6-0003vA-5G; Thu, 16 Jul 2015 09:53:06 +1000 Date: Thu, 16 Jul 2015 09:53:06 +1000 From: Dave Chinner To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... Message-ID: <20150715235306.GT3902@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... References: <1436964412-12093-1-git-send-email-jtulak@redhat.com> <1436964412-12093-2-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436964412-12093-2-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1437004400 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20783 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 15, 2015 at 02:46:51PM +0200, Jan Tulak wrote: > OS X has some conflicting LIST_ macros, so prefix the XFS ones. What are the macros that conflict and where do they come from? > --- a/include/irix.h > +++ b/include/irix.h > @@ -230,7 +230,7 @@ static __inline__ int xfsctl(const char *path, int fd, int cmd, void *arg) > ((xfs_fsop_handlereq_t*)arg)->ihandlen, > ((xfs_fsop_handlereq_t*)arg)->ohandle, > ((xfs_fsop_handlereq_t*)arg)->ohandlen); > - case SGI_ATTR_LIST_BY_HANDLE: > + case SGI_ATTR_XFS_LIST_BY_HANDLE: This is wrong - that's an Irix ioctl name and should not be renamed. It won' compile on Irix with this change... > diff --git a/libxfs/xfs_fs.h b/libxfs/xfs_fs.h > index 89689c6..8c37e08 100644 > --- a/libxfs/xfs_fs.h > +++ b/libxfs/xfs_fs.h > @@ -403,7 +403,7 @@ typedef struct xfs_fsop_handlereq { > /* > * Compound structures for passing args through Handle Request interfaces > * xfs_fssetdm_by_handle, xfs_attrlist_by_handle, xfs_attrmulti_by_handle > - * - ioctls: XFS_IOC_FSSETDM_BY_HANDLE, XFS_IOC_ATTRLIST_BY_HANDLE, and > + * - ioctls: XFS_IOC_FSSETDM_BY_HANDLE, XFS_IOC_ATTRXFS_LIST_BY_HANDLE, and > * XFS_IOC_ATTRMULTI_BY_HANDLE > */ > > @@ -553,7 +553,7 @@ typedef struct xfs_swapext > #endif > > #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq) > -#define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) > +#define XFS_IOC_ATTRXFS_LIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) > #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq) > #define XFS_IOC_FSGEOMETRY _IOR ('X', 124, struct xfs_fsop_geom) > #define XFS_IOC_GOINGDOWN _IOR ('X', 125, __uint32_t) Renaming Linux ioctls is wrong, too, as that will break all source code outside xfsprogs that uses this ioctl. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 15 20:25:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2E4257F86 for ; Wed, 15 Jul 2015 20:25:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 052CE304039 for ; Wed, 15 Jul 2015 18:25:13 -0700 (PDT) X-ASG-Debug-ID: 1437009910-04cb6c3b8807900001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id HCNe7hvGLV0Yxuuj for ; Wed, 15 Jul 2015 18:25:10 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BiCADPBqdVPGydLHlagxOBPYJWg3yiFAECAQEBBpo7BAICgUJNAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDDgoJJQ8FJQMHGhOILc90AQEIAiAZhgWFLoUGB4QrBZQ+jBKYeYEJgyssMYJLAQEB Received: from ppp121-44-157-108.lns20.syd7.internode.on.net (HELO dastard) ([121.44.157.108]) by ipmail05.adl6.internode.on.net with ESMTP; 16 Jul 2015 10:55:09 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZFXvA-00048X-V2; Thu, 16 Jul 2015 11:25:08 +1000 Date: Thu, 16 Jul 2015 11:25:08 +1000 From: Dave Chinner To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: [PATCH 2/2] OS X partial support Message-ID: <20150716012508.GU3902@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2] OS X partial support References: <1436964412-12093-1-git-send-email-jtulak@redhat.com> <1436964412-12093-3-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436964412-12093-3-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437009910 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20786 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 15, 2015 at 02:46:52PM +0200, Jan Tulak wrote: > This patch introduces changes to support current OS X (10.10 Yosemite). > The previous OS X code base is about 4 years old and both OS X and > XFS changed, so there had to be done some work to make it compilable. > > - Because some missing APIs in OS X (like fstab/mtab) and the > unability to mount XFS, not all tools are compiled. hmmmm. We should still try to compile them, otherwise anyone doing dev work on OS X is going to make changes that aren't complete (i.e. cause compile errors on other platforms). > - fls (find last bit) calls were moved to platform headers, > as OS X has a native implementation. I think that's the wrong way to do this - this is what autoconf is for. i.e. create a "HAVE_FLS" check, and surround the fls code in bitops.h with "#ifndef HAVE_FLS".... > - xfs_db currently has only a dummy timer implementation xfs_repair, actually ;) > - Various other edits - some API translations, some, missing > defines. > > The code compiles using Apple's clang, although it throws some > warnings. Some of them are complaints about deprecated calls, some > are false-positives and there are also some incompatible type > assignments/comparisons, so there is a place for further patches. Let's try and keep the changes within the darwin and autoconf code as much as possible. Cheers, Dave. -- Dave Chinner david@fromorbit.com From jtulak@redhat.com Thu Jul 16 02:13:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6C51D7F85 for ; Thu, 16 Jul 2015 02:13:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 34C258F8035 for ; Thu, 16 Jul 2015 00:13:05 -0700 (PDT) X-ASG-Debug-ID: 1437030779-04bdf03a930e180001-NocioJ Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id G8ONF1xkY4djsgDq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 Jul 2015 00:13:00 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t6G7CwWA004606; Thu, 16 Jul 2015 03:12:58 -0400 Date: Thu, 16 Jul 2015 03:12:57 -0400 (EDT) From: Jan Tulak To: Dave Chinner Cc: xfs@oss.sgi.com Message-ID: <1131231186.27908155.1437030777674.JavaMail.zimbra@redhat.com> In-Reply-To: <20150715235306.GT3902@dastard> References: <1436964412-12093-1-git-send-email-jtulak@redhat.com> <1436964412-12093-2-git-send-email-jtulak@redhat.com> <20150715235306.GT3902@dastard> Subject: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.5.69] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: Prefix LIST_... macros to XFS_LIST_... Thread-Index: +/Nf38c10q1aiVaNtx4rw6p4PQlJuQ== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1437030780 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Dave Chinner" > To: "Jan Tulak" > Cc: xfs@oss.sgi.com > Sent: Thursday, July 16, 2015 1:53:06 AM > Subject: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... > > On Wed, Jul 15, 2015 at 02:46:51PM +0200, Jan Tulak wrote: > > OS X has some conflicting LIST_ macros, so prefix the XFS ones. > > What are the macros that conflict and where do they come from? > Ah, I see, I messed this patch a bit. :P Written as regular expressions, only ^LIST_[A-Z_]+$ macros are an issue. Like LIST_HEAD and so on. The IRIX and ioctls should be OK. I'm fixing it. :-) Thanks for noticing it, Jan -- Jan Tulak jtulak@redhat.com From sandeen@sandeen.net Thu Jul 16 10:56:15 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 62E3C7F55 for ; Thu, 16 Jul 2015 10:56:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 41D018F8035 for ; Thu, 16 Jul 2015 08:56:11 -0700 (PDT) X-ASG-Debug-ID: 1437062166-04bdf03a941c6a0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id k0ecdKnyc2yASbXt for ; Thu, 16 Jul 2015 08:56:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 11E0763CBCF9 for ; Thu, 16 Jul 2015 10:56:06 -0500 (CDT) Message-ID: <55A7D414.2050606@sandeen.net> Date: Thu, 16 Jul 2015 10:56:04 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 0/3 V6] allow UUID changes on V5/CRC filesystems Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH 0/3 V6] allow UUID changes on V5/CRC filesystems Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437062166 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20802 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Ok, hopefully this is truly the final version of the patchset to allow UUID changes on V5 filesystems; testcase included now. Thanks, -Eric From sandeen@sandeen.net Thu Jul 16 10:57:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2D0CE7F55 for ; Thu, 16 Jul 2015 10:57:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 875FDAC001 for ; Thu, 16 Jul 2015 08:57:52 -0700 (PDT) X-ASG-Debug-ID: 1437062269-04cbb00f0818830001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id bZx64bHg0NVo42nb for ; Thu, 16 Jul 2015 08:57:49 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2EC1963CBCF9 for ; Thu, 16 Jul 2015 10:57:49 -0500 (CDT) Message-ID: <55A7D47B.7030200@sandeen.net> Date: Thu, 16 Jul 2015 10:57:47 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 1/3] xfs: create new metadata UUID field and incompat flag References: <55A7D414.2050606@sandeen.net> X-ASG-Orig-Subj: [PATCH 1/3] xfs: create new metadata UUID field and incompat flag In-Reply-To: <55A7D414.2050606@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437062269 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20802 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This adds a new superblock field, sb_meta_uuid. If set, along with a new incompat flag, the code will use that field on a V5 filesystem to compare to metadata UUIDs, which allows us to change the user- visible UUID at will. Userspace handles the setting and clearing of the incompat flag as appropriate, as the UUID gets changed; i.e. setting the user-visible UUID back to the original UUID (as stored in the new field) will remove the incompatible feature flag. If the incompat flag is not set, this copies the user-visible UUID into into the meta_uuid slot in memory when the superblock is read from disk; the meta_uuid field is not written back to disk in this case. The remainder of this patch simply switches verifiers, initializers, etc to use the new sb_meta_uuid field. Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index f9e9ffe..b7fc17c 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -464,7 +464,7 @@ xfs_agfl_verify( struct xfs_agfl *agfl = XFS_BUF_TO_AGFL(bp); int i; - if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be32_to_cpu(agfl->agfl_magicnum) != XFS_AGFL_MAGIC) return false; @@ -2260,7 +2260,7 @@ xfs_agf_verify( struct xfs_agf *agf = XFS_BUF_TO_AGF(bp); if (xfs_sb_version_hascrc(&mp->m_sb) && - !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_uuid)) + !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (!(agf->agf_magicnum == cpu_to_be32(XFS_AGF_MAGIC) && diff --git a/fs/xfs/libxfs/xfs_alloc_btree.c b/fs/xfs/libxfs/xfs_alloc_btree.c index 59d521c..90de071 100644 --- a/fs/xfs/libxfs/xfs_alloc_btree.c +++ b/fs/xfs/libxfs/xfs_alloc_btree.c @@ -295,7 +295,7 @@ xfs_allocbt_verify( case cpu_to_be32(XFS_ABTB_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) return false; @@ -313,7 +313,7 @@ xfs_allocbt_verify( case cpu_to_be32(XFS_ABTC_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) return false; diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c index e9d401c..33df52d 100644 --- a/fs/xfs/libxfs/xfs_attr_leaf.c +++ b/fs/xfs/libxfs/xfs_attr_leaf.c @@ -262,7 +262,7 @@ xfs_attr3_leaf_verify( if (ichdr.magic != XFS_ATTR3_LEAF_MAGIC) return false; - if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) return false; @@ -1056,7 +1056,7 @@ xfs_attr3_leaf_create( hdr3->blkno = cpu_to_be64(bp->b_bn); hdr3->owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); ichdr.freemap[0].base = sizeof(struct xfs_attr3_leaf_hdr); } else { diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c index 20de88d..eba0d1e 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.c +++ b/fs/xfs/libxfs/xfs_attr_remote.c @@ -100,7 +100,7 @@ xfs_attr3_rmt_verify( return false; if (rmt->rm_magic != cpu_to_be32(XFS_ATTR3_RMT_MAGIC)) return false; - if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(rmt->rm_blkno) != bno) return false; @@ -217,7 +217,7 @@ xfs_attr3_rmt_hdr_set( rmt->rm_magic = cpu_to_be32(XFS_ATTR3_RMT_MAGIC); rmt->rm_offset = cpu_to_be32(offset); rmt->rm_bytes = cpu_to_be32(size); - uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_meta_uuid); rmt->rm_owner = cpu_to_be64(ino); rmt->rm_blkno = cpu_to_be64(bno); diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c index 2c44c8e..6b0cf65 100644 --- a/fs/xfs/libxfs/xfs_bmap_btree.c +++ b/fs/xfs/libxfs/xfs_bmap_btree.c @@ -349,7 +349,8 @@ xfs_bmbt_to_bmdr( if (xfs_sb_version_hascrc(&mp->m_sb)) { ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_CRC_MAGIC)); - ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)); + ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, + &mp->m_sb.sb_meta_uuid)); ASSERT(rblock->bb_u.l.bb_blkno == cpu_to_be64(XFS_BUF_DADDR_NULL)); } else @@ -647,7 +648,7 @@ xfs_bmbt_verify( case cpu_to_be32(XFS_BMAP_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(block->bb_u.l.bb_blkno) != bp->b_bn) return false; diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index c72283d..f7d7ee7 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -65,7 +65,8 @@ xfs_btree_check_lblock( if (xfs_sb_version_hascrc(&mp->m_sb)) { lblock_ok = lblock_ok && - uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid) && + uuid_equal(&block->bb_u.l.bb_uuid, + &mp->m_sb.sb_meta_uuid) && block->bb_u.l.bb_blkno == cpu_to_be64( bp ? bp->b_bn : XFS_BUF_DADDR_NULL); } @@ -115,7 +116,8 @@ xfs_btree_check_sblock( if (xfs_sb_version_hascrc(&mp->m_sb)) { sblock_ok = sblock_ok && - uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid) && + uuid_equal(&block->bb_u.s.bb_uuid, + &mp->m_sb.sb_meta_uuid) && block->bb_u.s.bb_blkno == cpu_to_be64( bp ? bp->b_bn : XFS_BUF_DADDR_NULL); } @@ -1000,7 +1002,7 @@ xfs_btree_init_block_int( if (flags & XFS_BTREE_CRC_BLOCKS) { buf->bb_u.l.bb_blkno = cpu_to_be64(blkno); buf->bb_u.l.bb_owner = cpu_to_be64(owner); - uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid); buf->bb_u.l.bb_pad = 0; buf->bb_u.l.bb_lsn = 0; } @@ -1013,7 +1015,7 @@ xfs_btree_init_block_int( if (flags & XFS_BTREE_CRC_BLOCKS) { buf->bb_u.s.bb_blkno = cpu_to_be64(blkno); buf->bb_u.s.bb_owner = cpu_to_be32(__owner); - uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid); buf->bb_u.s.bb_lsn = 0; } } diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c index 2385f8c..e9f6709 100644 --- a/fs/xfs/libxfs/xfs_da_btree.c +++ b/fs/xfs/libxfs/xfs_da_btree.c @@ -146,7 +146,7 @@ xfs_da3_node_verify( if (ichdr.magic != XFS_DA3_NODE_MAGIC) return false; - if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) return false; @@ -324,7 +324,7 @@ xfs_da3_node_create( ichdr.magic = XFS_DA3_NODE_MAGIC; hdr3->info.blkno = cpu_to_be64(bp->b_bn); hdr3->info.owner = cpu_to_be64(args->dp->i_ino); - uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid); } else { ichdr.magic = XFS_DA_NODE_MAGIC; } diff --git a/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c index 9354e19..4778d1d 100644 --- a/fs/xfs/libxfs/xfs_dir2_block.c +++ b/fs/xfs/libxfs/xfs_dir2_block.c @@ -67,7 +67,7 @@ xfs_dir3_block_verify( if (xfs_sb_version_hascrc(&mp->m_sb)) { if (hdr3->magic != cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) return false; - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->blkno) != bp->b_bn) return false; @@ -157,7 +157,7 @@ xfs_dir3_block_init( hdr3->magic = cpu_to_be32(XFS_DIR3_BLOCK_MAGIC); hdr3->blkno = cpu_to_be64(bp->b_bn); hdr3->owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); return; } diff --git a/fs/xfs/libxfs/xfs_dir2_data.c b/fs/xfs/libxfs/xfs_dir2_data.c index de1ea16..6a57fdb 100644 --- a/fs/xfs/libxfs/xfs_dir2_data.c +++ b/fs/xfs/libxfs/xfs_dir2_data.c @@ -220,7 +220,7 @@ xfs_dir3_data_verify( if (xfs_sb_version_hascrc(&mp->m_sb)) { if (hdr3->magic != cpu_to_be32(XFS_DIR3_DATA_MAGIC)) return false; - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->blkno) != bp->b_bn) return false; @@ -604,7 +604,7 @@ xfs_dir3_data_init( hdr3->magic = cpu_to_be32(XFS_DIR3_DATA_MAGIC); hdr3->blkno = cpu_to_be64(bp->b_bn); hdr3->owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); } else hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c index 1061199..f300240 100644 --- a/fs/xfs/libxfs/xfs_dir2_leaf.c +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c @@ -160,7 +160,7 @@ xfs_dir3_leaf_verify( if (leaf3->info.hdr.magic != cpu_to_be16(magic3)) return false; - if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(leaf3->info.blkno) != bp->b_bn) return false; @@ -310,7 +310,7 @@ xfs_dir3_leaf_init( : cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); leaf3->info.blkno = cpu_to_be64(bp->b_bn); leaf3->info.owner = cpu_to_be64(owner); - uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_uuid); + uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_meta_uuid); } else { memset(leaf, 0, sizeof(*leaf)); leaf->hdr.info.magic = cpu_to_be16(type); diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c index 41b80d3..527b733 100644 --- a/fs/xfs/libxfs/xfs_dir2_node.c +++ b/fs/xfs/libxfs/xfs_dir2_node.c @@ -93,7 +93,7 @@ xfs_dir3_free_verify( if (hdr3->magic != cpu_to_be32(XFS_DIR3_FREE_MAGIC)) return false; - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->blkno) != bp->b_bn) return false; @@ -226,7 +226,7 @@ xfs_dir3_free_get_buf( hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); hdr3->hdr.owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid); } else hdr.magic = XFS_DIR2_FREE_MAGIC; dp->d_ops->free_hdr_to_disk(bp->b_addr, &hdr); diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c index 6fbf2d8..5331b7f 100644 --- a/fs/xfs/libxfs/xfs_dquot_buf.c +++ b/fs/xfs/libxfs/xfs_dquot_buf.c @@ -163,7 +163,7 @@ xfs_dqcheck( d->dd_diskdq.d_id = cpu_to_be32(id); if (xfs_sb_version_hascrc(&mp->m_sb)) { - uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&d->dd_uuid, &mp->m_sb.sb_meta_uuid); xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), XFS_DQUOT_CRC_OFF); } @@ -198,7 +198,7 @@ xfs_dquot_buf_verify_crc( if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), XFS_DQUOT_CRC_OFF)) return false; - if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_meta_uuid)) return false; } return true; diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index a0ae572..9590a06 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -100,7 +100,7 @@ typedef struct xfs_sb { xfs_rfsblock_t sb_dblocks; /* number of data blocks */ xfs_rfsblock_t sb_rblocks; /* number of realtime blocks */ xfs_rtblock_t sb_rextents; /* number of realtime extents */ - uuid_t sb_uuid; /* file system unique id */ + uuid_t sb_uuid; /* user-visible file system unique id */ xfs_fsblock_t sb_logstart; /* starting block of log if internal */ xfs_ino_t sb_rootino; /* root inode number */ xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */ @@ -174,6 +174,7 @@ typedef struct xfs_sb { xfs_ino_t sb_pquotino; /* project quota inode */ xfs_lsn_t sb_lsn; /* last write sequence */ + uuid_t sb_meta_uuid; /* metadata file system unique id */ /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -190,7 +191,7 @@ typedef struct xfs_dsb { __be64 sb_dblocks; /* number of data blocks */ __be64 sb_rblocks; /* number of realtime blocks */ __be64 sb_rextents; /* number of realtime extents */ - uuid_t sb_uuid; /* file system unique id */ + uuid_t sb_uuid; /* user-visible file system unique id */ __be64 sb_logstart; /* starting block of log if internal */ __be64 sb_rootino; /* root inode number */ __be64 sb_rbmino; /* bitmap inode for realtime extents */ @@ -260,6 +261,7 @@ typedef struct xfs_dsb { __be64 sb_pquotino; /* project quota inode */ __be64 sb_lsn; /* last write sequence */ + uuid_t sb_meta_uuid; /* metadata file system unique id */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -458,9 +460,11 @@ xfs_sb_has_ro_compat_feature( #define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */ #define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */ +#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */ #define XFS_SB_FEAT_INCOMPAT_ALL \ (XFS_SB_FEAT_INCOMPAT_FTYPE| \ - XFS_SB_FEAT_INCOMPAT_SPINODES) + XFS_SB_FEAT_INCOMPAT_SPINODES| \ + XFS_SB_FEAT_INCOMPAT_META_UUID) #define XFS_SB_FEAT_INCOMPAT_UNKNOWN ~XFS_SB_FEAT_INCOMPAT_ALL static inline bool @@ -515,6 +519,18 @@ static inline bool xfs_sb_version_hassparseinodes(struct xfs_sb *sbp) } /* + * XFS_SB_FEAT_INCOMPAT_META_UUID indicates that the metadata UUID + * is stored separately from the user-visible UUID; this allows the + * user-visible UUID to be changed on V5 filesystems which have a + * filesystem UUID stamped into every piece of metadata. + */ +static inline bool xfs_sb_version_hasmetauuid(struct xfs_sb *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) && + (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_META_UUID); +} + +/* * end of superblock version macros */ diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c index 66efc70..ce63e04 100644 --- a/fs/xfs/libxfs/xfs_ialloc.c +++ b/fs/xfs/libxfs/xfs_ialloc.c @@ -338,7 +338,8 @@ xfs_ialloc_inode_init( if (version == 3) { free->di_ino = cpu_to_be64(ino); ino++; - uuid_copy(&free->di_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&free->di_uuid, + &mp->m_sb.sb_meta_uuid); xfs_dinode_calc_crc(mp, free); } else if (tp) { /* just log the inode core */ @@ -2500,7 +2501,7 @@ xfs_agi_verify( struct xfs_agi *agi = XFS_BUF_TO_AGI(bp); if (xfs_sb_version_hascrc(&mp->m_sb) && - !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_uuid)) + !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid)) return false; /* * Validate the magic number of the agi block. diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c index 674ad8f..f39b285 100644 --- a/fs/xfs/libxfs/xfs_ialloc_btree.c +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c @@ -239,7 +239,7 @@ xfs_inobt_verify( case cpu_to_be32(XFS_FIBT_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) return false; diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c index 6526e76..268c00f 100644 --- a/fs/xfs/libxfs/xfs_inode_buf.c +++ b/fs/xfs/libxfs/xfs_inode_buf.c @@ -304,7 +304,7 @@ xfs_dinode_verify( return false; if (be64_to_cpu(dip->di_ino) != ip->i_ino) return false; - if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_meta_uuid)) return false; return true; } @@ -366,7 +366,7 @@ xfs_iread( if (xfs_sb_version_hascrc(&mp->m_sb)) { ip->i_d.di_version = 3; ip->i_d.di_ino = ip->i_ino; - uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); } else ip->i_d.di_version = 2; return 0; diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index df9851c..0f5e08f 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -398,6 +398,14 @@ __xfs_sb_from_disk( to->sb_spino_align = be32_to_cpu(from->sb_spino_align); to->sb_pquotino = be64_to_cpu(from->sb_pquotino); to->sb_lsn = be64_to_cpu(from->sb_lsn); + /* + * sb_meta_uuid is only on disk if it differs from sb_uuid and the + * feature flag is set; if not set we keep it only in memory. + */ + if (xfs_sb_version_hasmetauuid(to)) + uuid_copy(&to->sb_meta_uuid, &from->sb_meta_uuid); + else + uuid_copy(&to->sb_meta_uuid, &from->sb_uuid); /* Convert on-disk flags to in-memory flags? */ if (convert_xquota) xfs_sb_quota_from_disk(to); @@ -539,6 +547,8 @@ xfs_sb_to_disk( cpu_to_be32(from->sb_features_log_incompat); to->sb_spino_align = cpu_to_be32(from->sb_spino_align); to->sb_lsn = cpu_to_be64(from->sb_lsn); + if (xfs_sb_version_hasmetauuid(from)) + uuid_copy(&to->sb_meta_uuid, &from->sb_meta_uuid); } } diff --git a/fs/xfs/libxfs/xfs_symlink_remote.c b/fs/xfs/libxfs/xfs_symlink_remote.c index e7e26bd..8f8af05 100644 --- a/fs/xfs/libxfs/xfs_symlink_remote.c +++ b/fs/xfs/libxfs/xfs_symlink_remote.c @@ -63,7 +63,7 @@ xfs_symlink_hdr_set( dsl->sl_magic = cpu_to_be32(XFS_SYMLINK_MAGIC); dsl->sl_offset = cpu_to_be32(offset); dsl->sl_bytes = cpu_to_be32(size); - uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid); dsl->sl_owner = cpu_to_be64(ino); dsl->sl_blkno = cpu_to_be64(bp->b_bn); bp->b_ops = &xfs_symlink_buf_ops; @@ -107,7 +107,7 @@ xfs_symlink_verify( return false; if (dsl->sl_magic != cpu_to_be32(XFS_SYMLINK_MAGIC)) return false; - if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (bp->b_bn != be64_to_cpu(dsl->sl_blkno)) return false; From sandeen@sandeen.net Thu Jul 16 11:01:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2D0057F8B for ; Thu, 16 Jul 2015 11:01:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 65087AC005 for ; Thu, 16 Jul 2015 09:01:24 -0700 (PDT) X-ASG-Debug-ID: 1437062476-04cb6c3b8b1be40001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id oJDRESGEk0NK3ltX for ; Thu, 16 Jul 2015 09:01:17 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 66EC663CBCF9 for ; Thu, 16 Jul 2015 11:01:16 -0500 (CDT) Message-ID: <55A7D54A.1040408@sandeen.net> Date: Thu, 16 Jul 2015 11:01:14 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 2/3 V6] xfsprogs: Add new sb_meta_uuid field, update userspace tools to manipulate it References: <55A7D414.2050606@sandeen.net> X-ASG-Orig-Subj: [PATCH 2/3 V6] xfsprogs: Add new sb_meta_uuid field, update userspace tools to manipulate it In-Reply-To: <55A7D414.2050606@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437062476 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This adds a new superblock field, sb_meta_uuid. This allows us to change the use-visible UUID on crc-enabled filesytems from userspace if desired, by copying the existing UUID to the new location for metadata comparisons. If this is done, an incompat flag must be set to prevent older filesystems from mounting the filesystem, but the original UUID can be restored, and the incompat flag removed, with a new xfs_db / xfs_admin UUID command, "restore." Much of this patch mirrors the kernel patch in simply renaming the field used for metadata uuid comparison; other bits: * Teach xfs_db to print the new meta_uuid field * Allow xfs_db to generate a new UUID for CRC-enabled filesystems * Allow xfs_db to revert to the original UUID and clear the flag * Fix up xfs_copy to work with CRC-enabled filesystems * Update the xfs_admin manpage to show the UUID "restore" command Signed-off-by: Eric Sandeen --- diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c index fd96e15..5ea1d82 100644 --- a/copy/xfs_copy.c +++ b/copy/xfs_copy.c @@ -25,6 +25,7 @@ #include "xfs_copy.h" #define rounddown(x, y) (((x)/(y))*(y)) +#define uuid_equal(s,d) (platform_uuid_compare((s),(d)) == 0) extern int platform_check_ismounted(char *, char *, struct stat64 *, int); @@ -466,6 +467,36 @@ write_wbuf(void) sighold(SIGCHLD); } +void +sb_update_uuid( + xfs_sb_t *sb, + ag_header_t *ag_hdr, + thread_args *tcarg) +{ + /* + * If this filesystem has CRCs, the original UUID is stamped into + * all metadata. If we are changing the UUID in the copy, we need + * to copy the original UUID into the meta_uuid slot and set the + * set the incompat flag if that hasn't already been done. + */ + if (!uuid_equal(&tcarg->uuid, &ag_hdr->xfs_sb->sb_uuid) && + xfs_sb_version_hascrc(sb) && !xfs_sb_version_hasmetauuid(sb)) { + __be32 feat; + + feat = be32_to_cpu(ag_hdr->xfs_sb->sb_features_incompat); + feat |= XFS_SB_FEAT_INCOMPAT_META_UUID; + ag_hdr->xfs_sb->sb_features_incompat = cpu_to_be32(feat); + platform_uuid_copy(&ag_hdr->xfs_sb->sb_meta_uuid, + &ag_hdr->xfs_sb->sb_uuid); + } + + platform_uuid_copy(&ag_hdr->xfs_sb->sb_uuid, &tcarg->uuid); + + /* We may have changed the UUID, so update the superblock CRC */ + if (xfs_sb_version_hascrc(sb)) + xfs_update_cksum((char *)ag_hdr->xfs_sb, sb->sb_sectsize, + XFS_SB_CRC_OFF); +} int main(int argc, char **argv) @@ -666,16 +697,6 @@ main(int argc, char **argv) 1 << (sb->sb_sectlog - BBSHIFT), 0, &xfs_sb_buf_ops); - /* - * For now, V5 superblock filesystems are not supported without -d; - * we do not have the infrastructure yet to fix CRCs when a new UUID - * is generated. - */ - if (xfs_sb_version_hascrc(sb) && !duplicate) { - do_log(_("%s: Cannot yet copy V5 fs without '-d'\n"), progname); - exit(1); - } - mp = libxfs_mount(&mbuf, sb, xargs.ddev, xargs.logdev, xargs.rtdev, 0); if (mp == NULL) { do_log(_("%s: %s filesystem failed to initialize\n" @@ -1134,8 +1155,7 @@ main(int argc, char **argv) /* do each thread in turn, each has its own UUID */ for (j = 0, tcarg = targ; j < num_targets; j++) { - platform_uuid_copy(&ag_hdr.xfs_sb->sb_uuid, - &tcarg->uuid); + sb_update_uuid(sb, &ag_hdr, tcarg); do_write(tcarg); tcarg++; } diff --git a/db/sb.c b/db/sb.c index 2b78136..7338bcd 100644 --- a/db/sb.c +++ b/db/sb.c @@ -29,6 +29,8 @@ #include "output.h" #include "init.h" +#define uuid_equal(s,d) (platform_uuid_compare((s),(d)) == 0) + static int sb_f(int argc, char **argv); static void sb_help(void); static int uuid_f(int argc, char **argv); @@ -122,6 +124,7 @@ const field_t sb_flds[] = { { "spino_align", FLDT_EXTLEN, OI(OFF(spino_align)), C1, 0, TYP_NONE }, { "pquotino", FLDT_INO, OI(OFF(pquotino)), C1, 0, TYP_INODE }, { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, + { "meta_uuid", FLDT_UUID, OI(OFF(meta_uuid)), C1, 0, TYP_NONE }, { NULL } }; @@ -323,6 +326,32 @@ do_uuid(xfs_agnumber_t agno, uuid_t *uuid) return &uu; } /* set uuid */ + if (!xfs_sb_version_hascrc(&tsb)) + goto write; + /* + * If we have CRCs, and this UUID differs from that stamped in the + * metadata, set the incompat flag and copy the old one to the + * metadata-specific location. + * + * If we are setting the user-visible UUID back to match the metadata + * UUID, clear the metadata-specific location and the incompat flag. + */ + if (!xfs_sb_version_hasmetauuid(&tsb) && + !uuid_equal(uuid, &mp->m_sb.sb_meta_uuid)) { + mp->m_sb.sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_META_UUID; + tsb.sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_META_UUID; + memcpy(&tsb.sb_meta_uuid, &tsb.sb_uuid, sizeof(uuid_t)); + } else if (xfs_sb_version_hasmetauuid(&tsb) && + uuid_equal(uuid, &mp->m_sb.sb_meta_uuid)) { + memset(&tsb.sb_meta_uuid, 0, sizeof(uuid_t)); + /* Write those zeros now; it's ignored once we clear the flag */ + libxfs_sb_to_disk(iocur_top->data, &tsb); + mp->m_sb.sb_features_incompat &= + ~XFS_SB_FEAT_INCOMPAT_META_UUID; + tsb.sb_features_incompat &= ~XFS_SB_FEAT_INCOMPAT_META_UUID; + } + +write: memcpy(&tsb.sb_uuid, uuid, sizeof(uuid_t)); libxfs_sb_to_disk(iocur_top->data, &tsb); write_cur(); @@ -352,18 +381,6 @@ uuid_f( return 0; } - /* - * For now, changing the UUID of V5 superblock filesystems is - * not supported; we do not have the infrastructure to fix all - * other metadata when a new superblock UUID is generated. - */ - if (xfs_sb_version_hascrc(&mp->m_sb) && - strcasecmp(argv[1], "rewrite")) { - dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), - progname); - return 0; - } - if (!strcasecmp(argv[1], "generate")) { platform_uuid_generate(&uu); } else if (!strcasecmp(argv[1], "nil")) { @@ -377,6 +394,17 @@ uuid_f( memcpy(&uu, uup, sizeof(uuid_t)); platform_uuid_unparse(&uu, bp); dbprintf(_("old UUID = %s\n"), bp); + } else if (!strcasecmp(argv[1], "restore")) { + xfs_sb_t tsb; + + if (!get_sb(0, &tsb)) + return 0; + + /* Not set; nothing to do. Success! */ + if (!xfs_sb_version_hasmetauuid(&tsb)) + return 0; + + memcpy(&uu, mp->m_sb.sb_meta_uuid, sizeof(uuid_t)); } else { if (platform_uuid_parse(argv[1], &uu)) { dbprintf(_("invalid UUID\n")); @@ -653,6 +681,8 @@ version_string( strcat(s, ",FINOBT"); if (xfs_sb_version_hassparseinodes(sbp)) strcat(s, ",SPARSE_INODES"); + if (xfs_sb_version_hasmetauuid(sbp)) + strcat(s, ",META_UUID"); return s; } diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index 0d9b4c3..9d76329 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -460,7 +460,7 @@ xfs_agfl_verify( struct xfs_agfl *agfl = XFS_BUF_TO_AGFL(bp); int i; - if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be32_to_cpu(agfl->agfl_magicnum) != XFS_AGFL_MAGIC) return false; @@ -2256,7 +2256,7 @@ xfs_agf_verify( struct xfs_agf *agf = XFS_BUF_TO_AGF(bp); if (xfs_sb_version_hascrc(&mp->m_sb) && - !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_uuid)) + !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (!(agf->agf_magicnum == cpu_to_be32(XFS_AGF_MAGIC) && diff --git a/libxfs/xfs_alloc_btree.c b/libxfs/xfs_alloc_btree.c index 7fd72af..e60538a 100644 --- a/libxfs/xfs_alloc_btree.c +++ b/libxfs/xfs_alloc_btree.c @@ -293,7 +293,7 @@ xfs_allocbt_verify( case cpu_to_be32(XFS_ABTB_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) return false; @@ -311,7 +311,7 @@ xfs_allocbt_verify( case cpu_to_be32(XFS_ABTC_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) return false; diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c index 8f0772a..cc25068 100644 --- a/libxfs/xfs_attr_leaf.c +++ b/libxfs/xfs_attr_leaf.c @@ -258,7 +258,7 @@ xfs_attr3_leaf_verify( if (ichdr.magic != XFS_ATTR3_LEAF_MAGIC) return false; - if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) return false; @@ -1052,7 +1052,7 @@ xfs_attr3_leaf_create( hdr3->blkno = cpu_to_be64(bp->b_bn); hdr3->owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); ichdr.freemap[0].base = sizeof(struct xfs_attr3_leaf_hdr); } else { diff --git a/libxfs/xfs_attr_remote.c b/libxfs/xfs_attr_remote.c index 4f492c1..5feaf55 100644 --- a/libxfs/xfs_attr_remote.c +++ b/libxfs/xfs_attr_remote.c @@ -95,7 +95,7 @@ xfs_attr3_rmt_verify( return false; if (rmt->rm_magic != cpu_to_be32(XFS_ATTR3_RMT_MAGIC)) return false; - if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(rmt->rm_blkno) != bno) return false; @@ -212,7 +212,7 @@ xfs_attr3_rmt_hdr_set( rmt->rm_magic = cpu_to_be32(XFS_ATTR3_RMT_MAGIC); rmt->rm_offset = cpu_to_be32(offset); rmt->rm_bytes = cpu_to_be32(size); - uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_meta_uuid); rmt->rm_owner = cpu_to_be64(ino); rmt->rm_blkno = cpu_to_be64(bno); diff --git a/libxfs/xfs_bmap_btree.c b/libxfs/xfs_bmap_btree.c index 2fd04e0..f42bc2d 100644 --- a/libxfs/xfs_bmap_btree.c +++ b/libxfs/xfs_bmap_btree.c @@ -346,7 +346,8 @@ xfs_bmbt_to_bmdr( if (xfs_sb_version_hascrc(&mp->m_sb)) { ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_CRC_MAGIC)); - ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)); + ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, + &mp->m_sb.sb_meta_uuid)); ASSERT(rblock->bb_u.l.bb_blkno == cpu_to_be64(XFS_BUF_DADDR_NULL)); } else @@ -644,7 +645,7 @@ xfs_bmbt_verify( case cpu_to_be32(XFS_BMAP_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(block->bb_u.l.bb_blkno) != bp->b_bn) return false; diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index 203e7d2..a16ae7d 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -62,7 +62,8 @@ xfs_btree_check_lblock( if (xfs_sb_version_hascrc(&mp->m_sb)) { lblock_ok = lblock_ok && - uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid) && + uuid_equal(&block->bb_u.l.bb_uuid, + &mp->m_sb.sb_meta_uuid) && block->bb_u.l.bb_blkno == cpu_to_be64( bp ? bp->b_bn : XFS_BUF_DADDR_NULL); } @@ -112,7 +113,8 @@ xfs_btree_check_sblock( if (xfs_sb_version_hascrc(&mp->m_sb)) { sblock_ok = sblock_ok && - uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid) && + uuid_equal(&block->bb_u.s.bb_uuid, + &mp->m_sb.sb_meta_uuid) && block->bb_u.s.bb_blkno == cpu_to_be64( bp ? bp->b_bn : XFS_BUF_DADDR_NULL); } @@ -997,7 +999,7 @@ xfs_btree_init_block_int( if (flags & XFS_BTREE_CRC_BLOCKS) { buf->bb_u.l.bb_blkno = cpu_to_be64(blkno); buf->bb_u.l.bb_owner = cpu_to_be64(owner); - uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid); buf->bb_u.l.bb_pad = 0; buf->bb_u.l.bb_lsn = 0; } @@ -1010,7 +1012,7 @@ xfs_btree_init_block_int( if (flags & XFS_BTREE_CRC_BLOCKS) { buf->bb_u.s.bb_blkno = cpu_to_be64(blkno); buf->bb_u.s.bb_owner = cpu_to_be32(__owner); - uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid); buf->bb_u.s.bb_lsn = 0; } } diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c index 441bef4..3de4cd3 100644 --- a/libxfs/xfs_da_btree.c +++ b/libxfs/xfs_da_btree.c @@ -142,7 +142,7 @@ xfs_da3_node_verify( if (ichdr.magic != XFS_DA3_NODE_MAGIC) return false; - if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) return false; @@ -320,7 +320,7 @@ xfs_da3_node_create( ichdr.magic = XFS_DA3_NODE_MAGIC; hdr3->info.blkno = cpu_to_be64(bp->b_bn); hdr3->info.owner = cpu_to_be64(args->dp->i_ino); - uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid); } else { ichdr.magic = XFS_DA_NODE_MAGIC; } diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c index f061a99..489f301 100644 --- a/libxfs/xfs_dir2_block.c +++ b/libxfs/xfs_dir2_block.c @@ -64,7 +64,7 @@ xfs_dir3_block_verify( if (xfs_sb_version_hascrc(&mp->m_sb)) { if (hdr3->magic != cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) return false; - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->blkno) != bp->b_bn) return false; @@ -154,7 +154,7 @@ xfs_dir3_block_init( hdr3->magic = cpu_to_be32(XFS_DIR3_BLOCK_MAGIC); hdr3->blkno = cpu_to_be64(bp->b_bn); hdr3->owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); return; } diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c index 609c097..c475ba8 100644 --- a/libxfs/xfs_dir2_data.c +++ b/libxfs/xfs_dir2_data.c @@ -218,7 +218,7 @@ xfs_dir3_data_verify( if (xfs_sb_version_hascrc(&mp->m_sb)) { if (hdr3->magic != cpu_to_be32(XFS_DIR3_DATA_MAGIC)) return false; - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->blkno) != bp->b_bn) return false; @@ -602,7 +602,7 @@ xfs_dir3_data_init( hdr3->magic = cpu_to_be32(XFS_DIR3_DATA_MAGIC); hdr3->blkno = cpu_to_be64(bp->b_bn); hdr3->owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); } else hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c index c2dba8a..80d03b3 100644 --- a/libxfs/xfs_dir2_leaf.c +++ b/libxfs/xfs_dir2_leaf.c @@ -158,7 +158,7 @@ xfs_dir3_leaf_verify( if (leaf3->info.hdr.magic != cpu_to_be16(magic3)) return false; - if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(leaf3->info.blkno) != bp->b_bn) return false; @@ -308,7 +308,7 @@ xfs_dir3_leaf_init( : cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); leaf3->info.blkno = cpu_to_be64(bp->b_bn); leaf3->info.owner = cpu_to_be64(owner); - uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_uuid); + uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_meta_uuid); } else { memset(leaf, 0, sizeof(*leaf)); leaf->hdr.info.magic = cpu_to_be16(type); diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c index 3b71e9e..581d648 100644 --- a/libxfs/xfs_dir2_node.c +++ b/libxfs/xfs_dir2_node.c @@ -91,7 +91,7 @@ xfs_dir3_free_verify( if (hdr3->magic != cpu_to_be32(XFS_DIR3_FREE_MAGIC)) return false; - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) return false; if (be64_to_cpu(hdr3->blkno) != bp->b_bn) return false; @@ -224,7 +224,7 @@ xfs_dir3_free_get_buf( hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); hdr3->hdr.owner = cpu_to_be64(dp->i_ino); - uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); + uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid); } else hdr.magic = XFS_DIR2_FREE_MAGIC; dp->d_ops->free_hdr_to_disk(bp->b_addr, &hdr); diff --git a/libxfs/xfs_dquot_buf.c b/libxfs/xfs_dquot_buf.c index 2e0484a..1a2546b 100644 --- a/libxfs/xfs_dquot_buf.c +++ b/libxfs/xfs_dquot_buf.c @@ -171,7 +171,7 @@ xfs_dqcheck( d->dd_diskdq.d_id = cpu_to_be32(id); if (xfs_sb_version_hascrc(&mp->m_sb)) { - uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&d->dd_uuid, &mp->m_sb.sb_meta_uuid); xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), XFS_DQUOT_CRC_OFF); } @@ -206,7 +206,7 @@ xfs_dquot_buf_verify_crc( if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), XFS_DQUOT_CRC_OFF)) return false; - if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_meta_uuid)) return false; } return true; diff --git a/libxfs/xfs_format.h b/libxfs/xfs_format.h index 68d4175..282926d 100644 --- a/libxfs/xfs_format.h +++ b/libxfs/xfs_format.h @@ -100,7 +100,7 @@ typedef struct xfs_sb { xfs_rfsblock_t sb_dblocks; /* number of data blocks */ xfs_rfsblock_t sb_rblocks; /* number of realtime blocks */ xfs_rtblock_t sb_rextents; /* number of realtime extents */ - uuid_t sb_uuid; /* file system unique id */ + uuid_t sb_uuid; /* user-visible file system unique id */ xfs_fsblock_t sb_logstart; /* starting block of log if internal */ xfs_ino_t sb_rootino; /* root inode number */ xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */ @@ -174,6 +174,7 @@ typedef struct xfs_sb { xfs_ino_t sb_pquotino; /* project quota inode */ xfs_lsn_t sb_lsn; /* last write sequence */ + uuid_t sb_meta_uuid; /* metadata file system unique id */ /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -190,7 +191,7 @@ typedef struct xfs_dsb { __be64 sb_dblocks; /* number of data blocks */ __be64 sb_rblocks; /* number of realtime blocks */ __be64 sb_rextents; /* number of realtime extents */ - uuid_t sb_uuid; /* file system unique id */ + uuid_t sb_uuid; /* user-visible file system unique id */ __be64 sb_logstart; /* starting block of log if internal */ __be64 sb_rootino; /* root inode number */ __be64 sb_rbmino; /* bitmap inode for realtime extents */ @@ -260,6 +261,7 @@ typedef struct xfs_dsb { __be64 sb_pquotino; /* project quota inode */ __be64 sb_lsn; /* last write sequence */ + uuid_t sb_meta_uuid; /* metadata file system unique id */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -458,9 +460,12 @@ xfs_sb_has_ro_compat_feature( #define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */ #define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */ +#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */ + #define XFS_SB_FEAT_INCOMPAT_ALL \ (XFS_SB_FEAT_INCOMPAT_FTYPE| \ - XFS_SB_FEAT_INCOMPAT_SPINODES) + XFS_SB_FEAT_INCOMPAT_SPINODES| \ + XFS_SB_FEAT_INCOMPAT_META_UUID) #define XFS_SB_FEAT_INCOMPAT_UNKNOWN ~XFS_SB_FEAT_INCOMPAT_ALL static inline bool @@ -515,6 +520,18 @@ static inline bool xfs_sb_version_hassparseinodes(struct xfs_sb *sbp) } /* + * XFS_SB_FEAT_INCOMPAT_META_UUID indicates that the metadata UUID + * is stored separately from the user-visible UUID; this allows the + * user-visible UUID to be changed on V5 filesystems which have a + * filesystem UUID stamped into every piece of metadata. + */ +static inline int xfs_sb_version_hasmetauuid(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) && + (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_META_UUID); +} + +/* * end of superblock version macros */ diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index 05ecd06..d26027c 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -333,7 +333,8 @@ xfs_ialloc_inode_init( if (version == 3) { free->di_ino = cpu_to_be64(ino); ino++; - uuid_copy(&free->di_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&free->di_uuid, + &mp->m_sb.sb_meta_uuid); xfs_dinode_calc_crc(mp, free); } else if (tp) { /* just log the inode core */ @@ -2495,7 +2496,7 @@ xfs_agi_verify( struct xfs_agi *agi = XFS_BUF_TO_AGI(bp); if (xfs_sb_version_hascrc(&mp->m_sb) && - !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_uuid)) + !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid)) return false; /* * Validate the magic number of the agi block. diff --git a/libxfs/xfs_ialloc_btree.c b/libxfs/xfs_ialloc_btree.c index 7055149..09ffdb4 100644 --- a/libxfs/xfs_ialloc_btree.c +++ b/libxfs/xfs_ialloc_btree.c @@ -238,7 +238,7 @@ xfs_inobt_verify( case cpu_to_be32(XFS_FIBT_CRC_MAGIC): if (!xfs_sb_version_hascrc(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) return false; diff --git a/libxfs/xfs_inode_buf.c b/libxfs/xfs_inode_buf.c index b8e65a9..be9d166 100644 --- a/libxfs/xfs_inode_buf.c +++ b/libxfs/xfs_inode_buf.c @@ -302,7 +302,7 @@ xfs_dinode_verify( return false; if (be64_to_cpu(dip->di_ino) != ino) return false; - if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_meta_uuid)) return false; return true; } @@ -364,7 +364,7 @@ xfs_iread( if (xfs_sb_version_hascrc(&mp->m_sb)) { ip->i_d.di_version = 3; ip->i_d.di_ino = ip->i_ino; - uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); } else ip->i_d.di_version = 2; return 0; diff --git a/libxfs/xfs_sb.c b/libxfs/xfs_sb.c index 8c28db0..7c2b33e 100644 --- a/libxfs/xfs_sb.c +++ b/libxfs/xfs_sb.c @@ -381,6 +381,14 @@ __xfs_sb_from_disk( to->sb_spino_align = be32_to_cpu(from->sb_spino_align); to->sb_pquotino = be64_to_cpu(from->sb_pquotino); to->sb_lsn = be64_to_cpu(from->sb_lsn); + /* + * sb_meta_uuid is only on disk if it differs from sb_uuid and the + * feature flag is set; if not set we keep it only in memory. + */ + if (xfs_sb_version_hasmetauuid(to)) + uuid_copy(&to->sb_meta_uuid, &from->sb_meta_uuid); + else + uuid_copy(&to->sb_meta_uuid, &from->sb_uuid); /* Convert on-disk flags to in-memory flags? */ if (convert_xquota) xfs_sb_quota_from_disk(to); @@ -522,6 +530,8 @@ xfs_sb_to_disk( cpu_to_be32(from->sb_features_log_incompat); to->sb_spino_align = cpu_to_be32(from->sb_spino_align); to->sb_lsn = cpu_to_be64(from->sb_lsn); + if (xfs_sb_version_hasmetauuid(from)) + uuid_copy(&to->sb_meta_uuid, &from->sb_meta_uuid); } } diff --git a/libxfs/xfs_symlink_remote.c b/libxfs/xfs_symlink_remote.c index 6bc5af5..7d46d9e 100644 --- a/libxfs/xfs_symlink_remote.c +++ b/libxfs/xfs_symlink_remote.c @@ -60,7 +60,7 @@ xfs_symlink_hdr_set( dsl->sl_magic = cpu_to_be32(XFS_SYMLINK_MAGIC); dsl->sl_offset = cpu_to_be32(offset); dsl->sl_bytes = cpu_to_be32(size); - uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_uuid); + uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid); dsl->sl_owner = cpu_to_be64(ino); dsl->sl_blkno = cpu_to_be64(bp->b_bn); bp->b_ops = &xfs_symlink_buf_ops; @@ -104,7 +104,7 @@ xfs_symlink_verify( return false; if (dsl->sl_magic != cpu_to_be32(XFS_SYMLINK_MAGIC)) return false; - if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_uuid)) + if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid)) return false; if (bp->b_bn != be64_to_cpu(dsl->sl_blkno)) return false; diff --git a/libxlog/util.c b/libxlog/util.c index a0e35cc..05fb67f 100644 --- a/libxlog/util.c +++ b/libxlog/util.c @@ -85,8 +85,10 @@ header_check_uuid(xfs_mount_t *mp, xlog_rec_header_t *head) { char uu_log[64], uu_sb[64]; - if (print_skip_uuid) return 0; - if (!platform_uuid_compare(&mp->m_sb.sb_uuid, &head->h_fs_uuid)) return 0; + if (print_skip_uuid) + return 0; + if (!platform_uuid_compare(&mp->m_sb.sb_uuid, &head->h_fs_uuid)) + return 0; platform_uuid_unparse(&mp->m_sb.sb_uuid, uu_sb); platform_uuid_unparse(&head->h_fs_uuid, uu_log); diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8 index 0968196..20a114f 100644 --- a/man/man8/xfs_admin.8 +++ b/man/man8/xfs_admin.8 @@ -102,7 +102,12 @@ The .I uuid may also be .BR generate , -which will generate a new UUID for the filesystem. +which will generate a new UUID for the filesystem. Note that on CRC-enabled +filesystems, this will set an incompatible flag such that older kernels will +not be able to mount the filesystem. To remove this incompatible flag, use +.BR restore , +which will restore the original UUID and remove the incompatible +feature flag as needed. .TP .B \-V Prints the version number and exits. diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8 index d527230..df54bb7 100644 --- a/man/man8/xfs_db.8 +++ b/man/man8/xfs_db.8 @@ -664,7 +664,7 @@ The possible data types are: .BR sb ", " symlink " and " text . See the TYPES section below for more information on these data types. .TP -.BI "uuid [" uuid " | " generate " | " rewrite ] +.BI "uuid [" uuid " | " generate " | " rewrite " | " restore ] Set the filesystem universally unique identifier (UUID). The filesystem UUID can be used by .BR mount (8) @@ -675,7 +675,12 @@ can be set directly to the desired UUID, or it can be automatically generated using the .B generate option. These options will both write the UUID into every copy of the -superblock in the filesystem. +superblock in the filesystem. On a CRC-enabled filesystem, this will +set an incompatible superblock flag, and the filesystem will not be +mountable with older kernels. This can be reverted with the +.B restore +option, which will copy the original UUID back into place and clear +the incompatible flag as needed. .B rewrite copies the current UUID from the primary superblock to all secondary copies of the superblock. diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 11e9f4b..cc18858 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -2653,6 +2653,8 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), sbp->sb_rextents = rtextents; platform_uuid_generate(&uuid); platform_uuid_copy(&sbp->sb_uuid, &uuid); + /* Only in memory; libxfs expects this as if read from disk */ + platform_uuid_copy(&sbp->sb_meta_uuid, &uuid); sbp->sb_logstart = logstart; sbp->sb_rootino = sbp->sb_rbmino = sbp->sb_rsumino = NULLFSINO; sbp->sb_rextsize = rtextblocks; diff --git a/repair/agheader.c b/repair/agheader.c index a216afa..2b79a11 100644 --- a/repair/agheader.c +++ b/repair/agheader.c @@ -112,7 +112,7 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) if (!xfs_sb_version_hascrc(&mp->m_sb)) return retval; - if (platform_uuid_compare(&agf->agf_uuid, &mp->m_sb.sb_uuid)) { + if (platform_uuid_compare(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid)) { char uu[64]; retval = XR_AG_AGF; @@ -120,7 +120,8 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) do_warn(_("bad uuid %s for agf %d\n"), uu, i); if (!no_modify) - platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&agf->agf_uuid, + &mp->m_sb.sb_meta_uuid); } return retval; } @@ -190,7 +191,7 @@ verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) if (!xfs_sb_version_hascrc(&mp->m_sb)) return retval; - if (platform_uuid_compare(&agi->agi_uuid, &mp->m_sb.sb_uuid)) { + if (platform_uuid_compare(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid)) { char uu[64]; retval = XR_AG_AGI; @@ -198,7 +199,8 @@ verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) do_warn(_("bad uuid %s for agi %d\n"), uu, agno); if (!no_modify) - platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&agi->agi_uuid, + &mp->m_sb.sb_meta_uuid); } return retval; @@ -245,7 +247,7 @@ compare_sb(xfs_mount_t *mp, xfs_sb_t *sb) * superblocks, not just the secondary superblocks. */ static int -secondary_sb_wack( +secondary_sb_whack( struct xfs_mount *mp, struct xfs_buf *sbuf, struct xfs_sb *sb, @@ -267,7 +269,10 @@ secondary_sb_wack( * * size is the size of data which is valid for this sb. */ - if (xfs_sb_version_hascrc(sb)) + if (xfs_sb_version_hasmetauuid(sb)) + size = offsetof(xfs_sb_t, sb_meta_uuid) + + sizeof(sb->sb_meta_uuid); + else if (xfs_sb_version_hascrc(sb)) size = offsetof(xfs_sb_t, sb_lsn) + sizeof(sb->sb_lsn); else if (xfs_sb_version_hasmorebits(sb)) @@ -511,7 +516,7 @@ verify_set_agheader(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, rval |= XR_AG_SB; } - rval |= secondary_sb_wack(mp, sbuf, sb, i); + rval |= secondary_sb_whack(mp, sbuf, sb, i); rval |= verify_set_agf(mp, agf, i); rval |= verify_set_agi(mp, agi, i); diff --git a/repair/agheader.h b/repair/agheader.h index 5541fb9..6b2974c 100644 --- a/repair/agheader.h +++ b/repair/agheader.h @@ -24,7 +24,6 @@ typedef struct fs_geometry { xfs_rfsblock_t sb_dblocks; /* # data blocks */ xfs_rfsblock_t sb_rblocks; /* # realtime blocks */ xfs_rtblock_t sb_rextents; /* # realtime extents */ - uuid_t sb_uuid; /* fs uuid */ xfs_fsblock_t sb_logstart; /* starting log block # */ xfs_agblock_t sb_rextsize; /* realtime extent size (blocks )*/ xfs_agblock_t sb_agblocks; /* # of blocks per ag */ diff --git a/repair/dinode.c b/repair/dinode.c index 09db966..81deb7b 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -207,9 +207,9 @@ clear_dinode_core(struct xfs_mount *mp, xfs_dinode_t *dinoc, xfs_ino_t ino_num) dinoc->di_ino = cpu_to_be64(ino_num); } - if (platform_uuid_compare(&dinoc->di_uuid, &mp->m_sb.sb_uuid)) { + if (platform_uuid_compare(&dinoc->di_uuid, &mp->m_sb.sb_meta_uuid)) { __dirty_no_modify_ret(dirty); - platform_uuid_copy(&dinoc->di_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&dinoc->di_uuid, &mp->m_sb.sb_meta_uuid); } for (i = 0; i < sizeof(dinoc->di_pad2)/sizeof(dinoc->di_pad2[0]); i++) { @@ -2287,7 +2287,8 @@ _("inode identifier %llu mismatch on inode %" PRIu64 "\n"), return 1; goto clear_bad_out; } - if (platform_uuid_compare(&dino->di_uuid, &mp->m_sb.sb_uuid)) { + if (platform_uuid_compare(&dino->di_uuid, + &mp->m_sb.sb_meta_uuid)) { if (!uncertain) do_warn( _("UUID mismatch on inode %" PRIu64 "\n"), lino); diff --git a/repair/phase5.c b/repair/phase5.c index 9b3d73b..2771f65 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -1128,7 +1128,7 @@ build_agi(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, agi->agi_unlinked[i] = cpu_to_be32(NULLAGINO); if (xfs_sb_version_hascrc(&mp->m_sb)) - platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid); if (xfs_sb_version_hasfinobt(&mp->m_sb)) { agi->agi_free_root = cpu_to_be32(finobt_curs->root); @@ -1406,7 +1406,7 @@ build_agf_agfl(xfs_mount_t *mp, #endif if (xfs_sb_version_hascrc(&mp->m_sb)) - platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid); /* initialise the AGFL, then fill it if there are blocks left over. */ agfl_buf = libxfs_getbuf(mp->m_dev, @@ -1420,7 +1420,7 @@ build_agf_agfl(xfs_mount_t *mp, if (xfs_sb_version_hascrc(&mp->m_sb)) { agfl->agfl_magicnum = cpu_to_be32(XFS_AGFL_MAGIC); agfl->agfl_seqno = cpu_to_be32(agno); - platform_uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid); for (i = 0; i < XFS_AGFL_SIZE(mp); i++) agfl->agfl_bno[i] = cpu_to_be32(NULLAGBLOCK); } diff --git a/repair/phase6.c b/repair/phase6.c index 9a5cba7..de445c6 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -527,7 +527,7 @@ mk_rbmino(xfs_mount_t *mp) ip->i_d.di_flags2 = 0; ip->i_d.di_ino = mp->m_sb.sb_rbmino; memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); - platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); times |= XFS_ICHGTIME_CREATE; } libxfs_trans_ichgtime(tp, ip, times); @@ -783,7 +783,7 @@ mk_rsumino(xfs_mount_t *mp) ip->i_d.di_flags2 = 0; ip->i_d.di_ino = mp->m_sb.sb_rsumino; memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); - platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); times |= XFS_ICHGTIME_CREATE; } libxfs_trans_ichgtime(tp, ip, times); @@ -897,7 +897,7 @@ mk_root_dir(xfs_mount_t *mp) ip->i_d.di_flags2 = 0; ip->i_d.di_ino = mp->m_sb.sb_rootino; memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); - platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); times |= XFS_ICHGTIME_CREATE; } libxfs_trans_ichgtime(tp, ip, times); From sandeen@sandeen.net Thu Jul 16 11:03:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 070307F8B for ; Thu, 16 Jul 2015 11:03:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E653D304039 for ; Thu, 16 Jul 2015 09:03:20 -0700 (PDT) X-ASG-Debug-ID: 1437062591-04cb6c3b8c1bf60001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 3oBxdTLSwj2oekgX for ; Thu, 16 Jul 2015 09:03:11 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2A12963CBCF9; Thu, 16 Jul 2015 11:03:11 -0500 (CDT) Message-ID: <55A7D5BD.7050805@sandeen.net> Date: Thu, 16 Jul 2015 11:03:09 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss , "fstests@vger.kernel.org" Subject: PATCH 3/3 V6] xfs: test changing UUID on V5 superblock References: <55A7D414.2050606@sandeen.net> X-ASG-Orig-Subj: PATCH 3/3 V6] xfs: test changing UUID on V5 superblock In-Reply-To: <55A7D414.2050606@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437062591 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20801 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Tests xfs_db's ability to change & restore UUIDs on V5 filesystems, and tests xfs_copy's ability to change the UUID on the copy. Update to _filter_uuid is so that it will catch the UUID output from xfs_admin -u, which is slightly different than the regexp it was expecting. This requires new userspace which knows how to change the UUID on a V5 superblock. Signed-off-by: Eric Sandeen --- V6: Take into account Brian's prior review. diff --git a/common/filter b/common/filter index 05dbae6..8db1b3e 100644 --- a/common/filter +++ b/common/filter @@ -275,9 +275,9 @@ _filter_uuid() { if [ ! -z $1 ]; then UUID=$1 - sed -e "s/\(uuid:\) $UUID/\1 /i" + sed -e "s/\(uuid[ :=]\+\) $UUID/\1 /i" else - sed -e "s/\(uuid:\) *[0-9a-f-][0-9a-f-]*/\1 /i" + sed -e "s/\(uuid[ :=]\+\) *[0-9a-f-][0-9a-f-]*/\1 /ig" fi } diff --git a/common/rc b/common/rc index 610045e..00b529b 100644 --- a/common/rc +++ b/common/rc @@ -2702,6 +2702,21 @@ _require_test_fcntl_advisory_locks() _notrun "Require fcntl advisory locks support" } +# XFS ability to change UUIDs on V5/CRC filesystems +# +_require_meta_uuid() +{ + # This will create a crc fs on $SCRATCH_DEV + _require_xfs_crc + + $XFS_DB_PROG -x -c "uuid generate" $SCRATCH_DEV >/dev/null 2>&1 \ + || _notrun "Userspace doesn't support meta_uuid feature" + + _scratch_mount >/dev/null 2>&1 \ + || _notrun "Kernel doesn't support meta_uuid feature" + umount $SCRATCH_MNT +} + _get_total_inode() { if [ -z "$1" ]; then diff --git a/tests/xfs/074 b/tests/xfs/074 new file mode 100755 index 0000000..2592e89 --- /dev/null +++ b/tests/xfs/074 @@ -0,0 +1,143 @@ +#! /bin/bash +# FS QA Test 074 +# +# test UUID modification of CRC-enabled filesystems +# +# CRC-enabled / V5 superblock filesystems have a UUID stamped into +# every piece of metadata, and a mechanism was added later to allow +# changing the user-visible UUID by copying the original UUID (which +# matches all the existing metadata) to a new superblock location. +# Exercise some of that behavior. +# +#----------------------------------------------------------------------- +# Copyright (c) 2015 Red Hat, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +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 +_supported_os Linux +_require_scratch +_require_xfs_crc +_require_meta_uuid + +# Takes 2 args, 2nd optional: +# 1: generate, rewrite, or restore +# 2: Expected UUID after the action. Blank if new uuid generated +# After the action check the fs, and make sure it can be mounted +# Sets NEW_UUID to the resulting UUID. +_test_uuid() +{ + ACTION=$1 + EXPECTED_UUID=$2 + + $XFS_DB_PROG -x -c "uuid $ACTION" $SCRATCH_DEV \ + | _filter_uuid $EXPECTED_UUID + NEW_UUID=`$XFS_DB_PROG -c "uuid" $SCRATCH_DEV | awk '{print $NF}'` + _check_scratch_fs + _scratch_mount || _fail "Mount failed after UUID $ACTION" + _scratch_unmount + +} + +_fs_has_META_UUID() +{ + FS=$1 + $XFS_DB_PROG -r -c version $FS | grep -q META_UUID +} + +rm -f $seqres.full + +_scratch_mkfs_xfs -m crc=1 >> $seqres.full 2>&1 || _fail "mkfs failed" + +ORIG_UUID=`$XFS_DB_PROG -c "uuid" $SCRATCH_DEV | awk '{print $NF}'` + +_scratch_mount +# Put some stuff on the fs +$FSSTRESS_PROG -d $SCRATCH_MNT -n 100 -p 4 >> $seqres.full 2>&1 +_scratch_unmount + +# Can xfs_db change it? + +echo "== Generate new UUID" +_test_uuid generate +[ "$NEW_UUID" == "$ORIG_UUID" ] && _fail "Failed to change UUID" +_fs_has_META_UUID $SCRATCH_DEV || _fail "META_UUID feature not set" + +# This should be a no-op +echo "== Rewrite UUID" +_test_uuid rewrite $NEW_UUID +_fs_has_META_UUID $SCRATCH_DEV || _fail "META_UUID feature not set" + +# Can we change it back? +echo "== Restore old UUID" +_test_uuid restore $ORIG_UUID +[ "$NEW_UUID" != "$ORIG_UUID" ] && _fail "Failed to restore UUID" +_fs_has_META_UUID $SCRATCH_DEV && _fail "META_UUID feature should not be not set" + +# This should be a no-op too. +echo "== Rewrite UUID" +_test_uuid rewrite $ORIG_UUID +_fs_has_META_UUID $SCRATCH_DEV && _fail "META_UUID feature should not be not set" + +# Ok, now what does xfs_copy do; it changes UUID by default + +IMGFILE=$TEST_DIR/$seq.copy.img +rm -f $IMGFILE + +# xfs_copy changes the UUID by default +echo "== xfs_copy with new UUID" +$XFS_COPY_PROG $SCRATCH_DEV $IMGFILE 2>&1 >> $seqres.full || \ + _fail "xfs_copy (new UUID) failed" +_check_xfs_filesystem $IMGFILE none none || _fail "Copy looks corrupted" +# The copy should have META_UUID feature set +_fs_has_META_UUID $IMGFILE || _fail "META_UUID feature not set on copy" +_scratch_mount || _fail "Mount failed after UUID rewrite" +_scratch_unmount + +rm -f $IMGFILE + +# duplicating the UUID should be fine too +echo "== xfs_copy with duplicate UUID" +$XFS_COPY_PROG -d $SCRATCH_DEV $IMGFILE 2>&1 >> $seqres.full || \ + _fail "xfs_copy (duplicate) failed" +_check_xfs_filesystem $IMGFILE none none || _fail "Duplicate copy looks corrupted" +# The copy should not have META_UUID feature set +_fs_has_META_UUID $IMGFILE && _fail "META_UUID feature should not be set on copy" + +# success, all done +status=0 +exit diff --git a/tests/xfs/074.out b/tests/xfs/074.out new file mode 100644 index 0000000..b511107 --- /dev/null +++ b/tests/xfs/074.out @@ -0,0 +1,21 @@ +QA output created by 074 +== Generate new UUID +Clearing log and setting UUID +writing all SBs +new UUID = +== Rewrite UUID +old UUID = +Clearing log and setting UUID +writing all SBs +new UUID = +== Restore old UUID +Clearing log and setting UUID +writing all SBs +new UUID = +== Rewrite UUID +old UUID = +Clearing log and setting UUID +writing all SBs +new UUID = +== xfs_copy with new UUID +== xfs_copy with duplicate UUID diff --git a/tests/xfs/group b/tests/xfs/group index 848a1bd..a66869a 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -71,6 +71,7 @@ 071 rw auto 072 rw auto prealloc quick 073 copy auto +074 auto quick copy 078 growfs auto quick 080 rw ioctl 081 deprecated # log logprint quota From jtulak@redhat.com Thu Jul 16 11:10:18 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E63CC7F8B for ; Thu, 16 Jul 2015 11:10:18 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A43698F8049 for ; Thu, 16 Jul 2015 09:10:18 -0700 (PDT) X-ASG-Debug-ID: 1437063017-04cb6c3b8c1c2e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id XEUB9MJrMiuuATMA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 Jul 2015 09:10:17 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id F08358EA53 for ; Thu, 16 Jul 2015 16:10:16 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6GGAFCH012010 for ; Thu, 16 Jul 2015 12:10:16 -0400 From: Jan Tulak To: xfs@oss.sgi.com Subject: [PATCH] xfsprogs: Search path for utilities unified Date: Thu, 16 Jul 2015 18:10:15 +0200 X-ASG-Orig-Subj: [PATCH] xfsprogs: Search path for utilities unified Message-Id: <1437063015-25665-1-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437063017 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Currently, when autoconf is checking for an utility, every utility has its own pathes defined independently. Unify it in a single variable␣ used for (almost) all utilities. Also, add /opt/local/bin to the path. Signed-off-by: Jan Tulak --- m4/package_utilies.m4 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/m4/package_utilies.m4 b/m4/package_utilies.m4 index 475ce0b..49f4dfb 100644 --- a/m4/package_utilies.m4 +++ b/m4/package_utilies.m4 @@ -1,3 +1,6 @@ +# Path to search an utility +PATH=/bin:/usr/bin:/usr/local/bin:/usr/freeware/bin:/opt/local/bin + # # Check for specified utility (env var) - if unset, fail. # @@ -40,22 +43,22 @@ AC_DEFUN([AC_PACKAGE_UTILITIES], AC_PACKAGE_NEED_UTILITY($1, "$cc", cc, [C compiler]) if test -z "$MAKE"; then - AC_PATH_PROG(MAKE, gmake,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(MAKE, gmake,, $PATH) fi if test -z "$MAKE"; then - AC_PATH_PROG(MAKE, make,, /usr/bin) + AC_PATH_PROG(MAKE, make,, $PATH) fi make=$MAKE AC_SUBST(make) AC_PACKAGE_NEED_UTILITY($1, "$make", make, [GNU make]) if test -z "$TAR"; then - AC_PATH_PROG(TAR, tar,, /usr/freeware/bin:/bin:/usr/local/bin:/usr/bin) + AC_PATH_PROG(TAR, tar,, $PATH) fi tar=$TAR AC_SUBST(tar) if test -z "$ZIP"; then - AC_PATH_PROG(ZIP, gzip,, /bin:/usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(ZIP, gzip,, $PATH) fi zip=$ZIP @@ -97,21 +100,21 @@ AC_DEFUN([AC_PACKAGE_UTILITIES], if test "$enable_gettext" = yes; then if test -z "$MSGFMT"; then - AC_PATH_PROG(MSGFMT, msgfmt,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(MSGFMT, msgfmt,, $PATH) fi msgfmt=$MSGFMT AC_SUBST(msgfmt) AC_PACKAGE_NEED_UTILITY($1, "$msgfmt", msgfmt, gettext) if test -z "$MSGMERGE"; then - AC_PATH_PROG(MSGMERGE, msgmerge,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(MSGMERGE, msgmerge,, $PATH) fi msgmerge=$MSGMERGE AC_SUBST(msgmerge) AC_PACKAGE_NEED_UTILITY($1, "$msgmerge", msgmerge, gettext) if test -z "$XGETTEXT"; then - AC_PATH_PROG(XGETTEXT, xgettext,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(XGETTEXT, xgettext,, $PATH) fi xgettext=$XGETTEXT AC_SUBST(xgettext) @@ -119,7 +122,7 @@ AC_DEFUN([AC_PACKAGE_UTILITIES], fi if test -z "$RPM"; then - AC_PATH_PROG(RPM, rpm,, /bin:/usr/bin:/usr/freeware/bin) + AC_PATH_PROG(RPM, rpm,, $PATH) fi rpm=$RPM AC_SUBST(rpm) -- 2.4.3 From jtulak@redhat.com Thu Jul 16 11:13:42 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 38DF27F8B for ; Thu, 16 Jul 2015 11:13:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A37F7AC001 for ; Thu, 16 Jul 2015 09:13:41 -0700 (PDT) X-ASG-Debug-ID: 1437063220-04cbb00f0818ff0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id mbMoJYweSrnACkFt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 16 Jul 2015 09:13:40 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 22F47358A14 for ; Thu, 16 Jul 2015 16:13:40 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6GGDdrB003233 for ; Thu, 16 Jul 2015 12:13:39 -0400 From: Jan Tulak To: xfs@oss.sgi.com Subject: [PATCH v2] xfsprogs: Search path for utilities unified Date: Thu, 16 Jul 2015 18:13:38 +0200 X-ASG-Orig-Subj: [PATCH v2] xfsprogs: Search path for utilities unified Message-Id: <1437063218-26143-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437063220 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 UPDATE: Fixed commit message ------------- Currently, when autoconf is checking for an utility, every utility has its own pathes defined independently. Unify it in a single variable used for (almost) all utilities. Also, add /opt/local/bin to the path. Signed-off-by: Jan Tulak --- m4/package_utilies.m4 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/m4/package_utilies.m4 b/m4/package_utilies.m4 index 475ce0b..49f4dfb 100644 --- a/m4/package_utilies.m4 +++ b/m4/package_utilies.m4 @@ -1,3 +1,6 @@ +# Path to search an utility +PATH=/bin:/usr/bin:/usr/local/bin:/usr/freeware/bin:/opt/local/bin + # # Check for specified utility (env var) - if unset, fail. # @@ -40,22 +43,22 @@ AC_DEFUN([AC_PACKAGE_UTILITIES], AC_PACKAGE_NEED_UTILITY($1, "$cc", cc, [C compiler]) if test -z "$MAKE"; then - AC_PATH_PROG(MAKE, gmake,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(MAKE, gmake,, $PATH) fi if test -z "$MAKE"; then - AC_PATH_PROG(MAKE, make,, /usr/bin) + AC_PATH_PROG(MAKE, make,, $PATH) fi make=$MAKE AC_SUBST(make) AC_PACKAGE_NEED_UTILITY($1, "$make", make, [GNU make]) if test -z "$TAR"; then - AC_PATH_PROG(TAR, tar,, /usr/freeware/bin:/bin:/usr/local/bin:/usr/bin) + AC_PATH_PROG(TAR, tar,, $PATH) fi tar=$TAR AC_SUBST(tar) if test -z "$ZIP"; then - AC_PATH_PROG(ZIP, gzip,, /bin:/usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(ZIP, gzip,, $PATH) fi zip=$ZIP @@ -97,21 +100,21 @@ AC_DEFUN([AC_PACKAGE_UTILITIES], if test "$enable_gettext" = yes; then if test -z "$MSGFMT"; then - AC_PATH_PROG(MSGFMT, msgfmt,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(MSGFMT, msgfmt,, $PATH) fi msgfmt=$MSGFMT AC_SUBST(msgfmt) AC_PACKAGE_NEED_UTILITY($1, "$msgfmt", msgfmt, gettext) if test -z "$MSGMERGE"; then - AC_PATH_PROG(MSGMERGE, msgmerge,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(MSGMERGE, msgmerge,, $PATH) fi msgmerge=$MSGMERGE AC_SUBST(msgmerge) AC_PACKAGE_NEED_UTILITY($1, "$msgmerge", msgmerge, gettext) if test -z "$XGETTEXT"; then - AC_PATH_PROG(XGETTEXT, xgettext,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + AC_PATH_PROG(XGETTEXT, xgettext,, $PATH) fi xgettext=$XGETTEXT AC_SUBST(xgettext) @@ -119,7 +122,7 @@ AC_DEFUN([AC_PACKAGE_UTILITIES], fi if test -z "$RPM"; then - AC_PATH_PROG(RPM, rpm,, /bin:/usr/bin:/usr/freeware/bin) + AC_PATH_PROG(RPM, rpm,, $PATH) fi rpm=$RPM AC_SUBST(rpm) -- 2.4.3 From sandeen@sandeen.net Thu Jul 16 13:20:34 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4698A7F8C for ; Thu, 16 Jul 2015 13:20:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D5F8DAC001 for ; Thu, 16 Jul 2015 11:20:33 -0700 (PDT) X-ASG-Debug-ID: 1437070831-04bdf03a9120a10001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id MvS9aUnY4EVAVkqs for ; Thu, 16 Jul 2015 11:20:31 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 103DF63CBCF9 for ; Thu, 16 Jul 2015 13:20:31 -0500 (CDT) Message-ID: <55A7F5EE.5000500@sandeen.net> Date: Thu, 16 Jul 2015 13:20:30 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437070831 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20805 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- My prior commit, aaf90a2 xfs_copy: fix copy of hard 4k devices causes xfs_copy to emit a CRC error warning when copying a CRC filesystem. This is because we are now reading the maximum sector size, and attempting to verify the CRC based on that (likely incorrect) length. In xfs_db, we currently just don't verify this read, so it's not a problem. In xfs_copy, we almost certainly want to verify. So, first do the maximal read with no verifier; once it's read, drop that buffer, and re-read with the proper sector size and verifier. Signed-off-by: Eric Sandeen --- diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c index 44a32e8..fd96e15 100644 --- a/copy/xfs_copy.c +++ b/copy/xfs_copy.c @@ -654,11 +654,17 @@ main(int argc, char **argv) memset(&mbuf, 0, sizeof(xfs_mount_t)); libxfs_buftarg_init(&mbuf, xargs.ddev, xargs.logdev, xargs.rtdev); + /* We don't yet know the sector size, so read maximal size */ sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, - 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), - 0, &xfs_sb_buf_ops); + 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0, NULL); sb = &mbuf.m_sb; libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbp)); + /* Do it again, now with proper length and verifier */ + libxfs_putbuf(sbp); + libxfs_purgebuf(sbp); + sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, + 1 << (sb->sb_sectlog - BBSHIFT), + 0, &xfs_sb_buf_ops); /* * For now, V5 superblock filesystems are not supported without -d; From bounces@workgrowth.ml Fri Jul 17 03:21:47 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 21A347F69 for ; Fri, 17 Jul 2015 03:21:47 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AAAEDAC001 for ; Fri, 17 Jul 2015 01:21:43 -0700 (PDT) X-ASG-Debug-ID: 1437121297-04cb6c3b8c2f640001-NocioJ Received: from coro3.isol-servers.net (static-ip-85-25-159-22.inaddr.ip-pool.com [85.25.159.22]) by cuda.sgi.com with ESMTP id 58xQvUr4foBMSiHL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 Jul 2015 01:21:38 -0700 (PDT) X-Barracuda-Envelope-From: bounces@workgrowth.ml X-Barracuda-Apparent-Source-IP: 85.25.159.22 Received: by coro3.isol-servers.net (Postfix, from userid 10001) id 0C60BDC1AD5; Fri, 17 Jul 2015 11:21:36 +0300 (EEST) To: xfs@oss.sgi.com Subject: Goodbye from our Newsletter X-PHP-Originating-Script: 10001:class.phpmailer.php X-ASG-Orig-Subj: Goodbye from our Newsletter Received: from b110000.yse.yahoo.net [68.180.228.32] by workgrowth.ml with HTTP; Fri, 17 Jul 2015 11:21:36 +0300 Date: Fri, 17 Jul 2015 11:21:36 +0300 From: "workgrowth.ml" Message-ID: X-Priority: 3 X-Mailer: PHPMailer 5.2.9 (https://github.com/PHPMailer/PHPMailer/) X-phpList-version: 3.0.12 X-MessageID: systemmessage X-ListMember: xfs@oss.sgi.com Precedence: bulk Bounces-To: bounces@workgrowth.ml List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: static-ip-85-25-159-22.inaddr.ip-pool.com[85.25.159.22] X-Barracuda-Start-Time: 1437121298 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20823 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Goodbye from our Newsletter, sorry to see you go. You have been unsubscribed from our newsletters. This is the last email you will receive from us. Our newsletter system, phpList, will refuse to send you any further messages, without manual intervention by our administrator. If there is an error in this information, you can re-subscribe: please go to http://workgrowth.ml/lists/?p=subscribe and follow the steps. Thank you From tonytkdk@gmail.com Fri Jul 17 14:39:20 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A43E87F5F for ; Fri, 17 Jul 2015 14:39:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 05AE6AC001 for ; Fri, 17 Jul 2015 12:39:16 -0700 (PDT) X-ASG-Debug-ID: 1437161951-04cbb00f063d7e0001-NocioJ Received: from mail-wi0-f178.google.com (mail-wi0-f178.google.com [209.85.212.178]) by cuda.sgi.com with ESMTP id QdjU9ZgYZiFzubSg (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 17 Jul 2015 12:39:12 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.178 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.178] Received: by wibud3 with SMTP id ud3so50685533wib.0 for ; Fri, 17 Jul 2015 12:39:11 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.178] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.178] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=nNR952bmLDqbU3X0VxXh5FsYNOYwyMet9a+EOkZrZGc=; b=o5mshZJC3+APnQbaERg1bnkmkULoW+lqKhHU9fdeiGZKVpfREdn5Run+BgtgL8Y9+p nPmHg2wl9iki5+xPONDJQMZOJ/4XRlZQdlv9Gwnj37v1AFXvX0nz/otSYlXGDsaFd4B/ nUXtwWb9nKcZt3lPLDJB5+MFoG9C4gWxSgepqz8RTu4qXjNnByUWtv3EOArfO2fY9Lqe ssk6T1gcxaf0Ze69KHdQZXIVVEM+8tnpFAXph8AXF6nt1fALrLQ7FprcRqaMax61F46v lbePjhqcjAZf1uqnoI52r09omWGU5DSxj1QQPWWpPkKQYymROWSWE5EtTbkmckO5Wyjs pbvA== MIME-Version: 1.0 X-Received: by 10.180.20.15 with SMTP id j15mr87785wie.76.1437161950863; Fri, 17 Jul 2015 12:39:10 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Fri, 17 Jul 2015 12:39:10 -0700 (PDT) In-Reply-To: References: <5582DCDA.9070200@sandeen.net> <20150709125119.GC63282@bfoster.bfoster> <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> <20150713170158.GB50787@bfoster.bfoster> Date: Sat, 18 Jul 2015 03:39:10 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Hugo Kuo , Eric Sandeen , Darrell Bishop , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=bcaec53f398590e7f5051b17574c X-Barracuda-Connect: mail-wi0-f178.google.com[209.85.212.178] X-Barracuda-Start-Time: 1437161951 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20837 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --bcaec53f398590e7f5051b17574c Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi all, We may hit this bug in OpenStack Swift : Race condition quarantines valid objects https://bugs.launchpad.net/swift/+bug/1451520 This race condition may cause the problem which Brain mentioned previously. OpenStack community fixed this in Swift's code. Should it be a kernel bug of XFS too ? Thanks for all your efforts. Hugo 2015-07-14 2:10 GMT+08:00 Kuo Hugo : > Hi Brain, > > The sdb is mounted on /srv/node/d224 on this server. That's one of three > disks that the process was making I/O on it. > Those openfiles on /srv/node/d224 were made by the process to > storing/deleting data at that moment while the kernel panic appeared. > > ``` > 36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03ed88 REG > /srv/node/d205/quarantined/objects/cd1d68f515006d443a54ff4f658091bc- > a114bba1449b45238abf38dc741d7c27/1436254020.89801.ts 37 ffff8810718343c0 > ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 > ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/quarantined/objects/ > b146865bf8034bfc42570b747c341b32/1436266042.57775.ts 39 ffff880871cb03c0 > ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/tmp/tmpSpnrHg 40 > ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR > /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32 > ``` > > I'll check the dir location of the inode number. > > Nice information. > > Thanks // Hugo > > 2015-07-14 1:01 GMT+08:00 Brian Foster : > >> On Mon, Jul 13, 2015 at 10:06:39PM +0800, Kuo Hugo wrote: >> > Hi Brain, >> > >> > Sorry for the wrong file in previous message. I believe this the right >> one. >> > >> > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko.debug >> > >> > >> /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.= ko.debug >> > >> > MD5 : 27829c9c55f4f5b095d29a7de7c27254 >> > >> >> Yes, that works. I have a few bits of information so far, but nothing >> obvious to me as to what caused the problem. Some info: >> >> - The crash is indeed at xfs_dir2_sf_get_inumber(): >> >> /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_= 64/fs/xfs/xfs_dir2_sf.h: >> 101 >> 0xffffffffa0362d60 : cmpb $0x0,0x1(%r12) >> ... >> >> - %r12 above has a value of 0 and is set as follows: >> >> /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_= 64/fs/xfs/xfs_dir2_sf.c: >> 727 >> 0xffffffffa0362b11 : mov 0x50(%rdi),%r12 >> >> ... which is the sfp pointer assignment in the getdents function: >> >> sfp =3D (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data; >> >> This implies a NULL if_data. >> >> - The backtrace lists a couple of inodes on the stack in this frame. I'm >> not sure why, but one looks like a valid directory and the other looks >> bogus. The valid inode has an inode number of 13668207561. >> >> - The fsname for this inode is "sdb." >> >> - The inode does appear to have a non-NULL if_data: >> >> ... >> if_u1 =3D { >> if_extents =3D 0xffff88084feaf5c0, >> if_ext_irec =3D 0xffff88084feaf5c0, >> if_data =3D 0xffff88084feaf5c0 "\004" >> }, >> ... >> >> So it's not totally clear what's going on there. It might be interesting >> to see what directory this refers to, if it still exists on the sdb fs. >> For example, is it an external directory or some kind of internal >> directory created by the application? You could use something like the >> following to try and locate the directory based on inode number: >> >> find -inum 13668207561 >> >> Brian >> >> > Thanks // Hugo >> > =E2=80=8B >> > >> > 2015-07-13 20:52 GMT+08:00 Brian Foster : >> > >> > > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote: >> > > > Hi Brain, >> > > > >> > > > Is this the file which you need ? >> > > > >> > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko >> > > > >> > > > $> modinfo xfs >> > > > >> > > > filename: >> /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko >> > > > license: GPL >> > > > description: SGI XFS with ACLs, security attributes, large >> block/inode >> > > > numbers, no debug enabled >> > > > author: Silicon Graphics, Inc. >> > > > srcversion: 0C1B17926BDDA4F121479EE >> > > > depends: exportfs >> > > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion >> > > > >> > > >> > > No, this isn't the debug version. We need the one from the debug >> package >> > > that was installed (/usr/lib/debug?). >> > > >> > > Brian >> > > >> > > > Thanks // Hugo >> > > > =E2=80=8B >> > > > >> > > > 2015-07-10 2:32 GMT+08:00 Brian Foster : >> > > > >> > > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: >> > > > > > Hi Brain, >> > > > > > >> > > > > > There you go. >> > > > > > >> > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux >> > > > > > >> > > > > >> > > >> https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.2= 3.4.el6.x86_64 >> > > > > > >> > > > > > $ md5sum vmlinux >> > > > > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux >> > > > > > >> > > > > > Yes, I can read it with this vmlinux image. Put all files >> > > > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux >> vmcore >> > > > > > >> > > > > >> > > > > Thanks, I can actually load that up now. Note that we'll probabl= y >> need >> > > > > the modules and whatnot (xfs.ko) also to be able to look at any >> XFS >> > > > > bits. It might be easiest to just tar up and compress whatever >> > > directory >> > > > > structure has the debug-enabled vmlinux and all the kernel >> modules. >> > > > > Thanks. >> > > > > >> > > > > Brian >> > > > > >> > > > > > Hugo >> > > > > > =E2=80=8B >> > > > > > >> > > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : >> > > > > > >> > > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: >> > > > > > > > Hi Brian, >> > > > > > > > >> > > > > > > > *Operating System Version:* >> > > > > > > > >> Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final >> > > > > > > > >> > > > > > > > *NODE 1* >> > > > > > > > >> > > > > > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore >> > > > > > > > >> > > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt >> > > > > > > > >> > > > > > > > >> > > > > > > > *NODE 2* >> > > > > > > > >> > > > > > > > >> > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 >> > > > > > > > >> > > > > > > >> > > > > >> > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj= 02.txt >> > > > > > > > >> > > > > > > > >> > > > > > > > Any thoughts would be appreciate >> > > > > > > > >> > > > > > > >> > > > > > > I'm not able to fire up crash with these core files and the >> kernel >> > > > > debug >> > > > > > > info from the following centos kernel debuginfo package: >> > > > > > > >> > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm >> > > > > > > >> > > > > > > It complains about a version mismatch between the vmlinux an= d >> core >> > > > > file. >> > > > > > > I'm no crash expert... are you sure the cores above >> correspond to >> > > this >> > > > > > > kernel? Does crash load up for you on said box if you run >> something >> > > > > like >> > > > > > > the following? >> > > > > > > >> > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore >> > > > > > > >> > > > > > > Note that you might need to install the above kernel-debugin= fo >> > > package >> > > > > > > to get the debug (vmlinux) file. If so, could you also uploa= d >> that >> > > > > > > debuginfo rpm somewhere? >> > > > > > > >> > > > > > > Brian >> > > > > > > >> > > > > > > > Thanks // Hugo >> > > > > > > > >> > > > > > > > >> > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster > >: >> > > > > > > > >> > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote= : >> > > > > > > > > > Hi Folks, >> > > > > > > > > > >> > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no >> any >> > > error >> > > > > > > shows >> > > > > > > > > up. >> > > > > > > > > > We currently tried to deploy CentOS 6.6 for testing. >> (The >> > > > > previous >> > > > > > > kernel >> > > > > > > > > > panic was came from Ubuntu). >> > > > > > > > > > The CentOS nodes encountered kernel panic with same >> daemon >> > > but >> > > > > the >> > > > > > > > > problem >> > > > > > > > > > may a bit differ. >> > > > > > > > > > >> > > > > > > > > > - It was broken on >> xfs_dir2_sf_get_parent_ino+0xa/0x20 in >> > > > > Ubuntu. >> > > > > > > > > > - Here=E2=80=99s the log in CentOS. It=E2=80=99s br= oken on >> > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > > I'd venture to guess it's the same behavior here. The >> previous >> > > > > kernel >> > > > > > > > > had a callback for the parent inode number that was >> called via >> > > > > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, i= t >> has a >> > > > > static >> > > > > > > > > inline here instead. >> > > > > > > > > >> > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer >> dereference at >> > > > > > > > > 0000000000000001 >> > > > > > > > > > <1>IP: [] >> xfs_dir2_sf_getdents+0x2a0/0x3a0 >> > > > > [xfs] >> > > > > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 >> > > > > > > > > > <4>Oops: 0000 [#1] SMP >> > > > > > > > > > <4>last sysfs file: >> > > > > > > > > > >> > > > > > > > > >> > > > > > > >> > > > > >> > > >> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expan= der-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/= queue/rotational >> > > > > > > > > > <4>CPU 17 >> > > > > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs >> > > > > iptable_filter >> > > > > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 >> > > nf_conntrack >> > > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt >> > > > > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit >> sb_edac >> > > > > edac_core >> > > > > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca >> ptp >> > > > > pps_core >> > > > > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext= 4 >> jbd2 >> > > > > mbcache >> > > > > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_clas= s >> > > xhci_hcd >> > > > > ahci >> > > > > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last >> unloaded: >> > > > > > > > > > scsi_wait_scan] >> > > > > > > > > > <4> >> > > > > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted >> > > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storfo= rm >> > > > > > > > > > R518.v5P/X10DRi-T4+ >> > > > > > > > > > <4>RIP: 0010:[] [= ] >> > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] >> > > > > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 >> > > > > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: >> > > > > 0000000000000000 >> > > > > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: >> > > > > 00007faa74006203 >> > > > > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: >> > > > > 0000000000000004 >> > > > > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: >> > > > > 0000000000000000 >> > > > > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: >> > > > > ffff8808715b4580 >> > > > > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(000= 0) >> > > > > > > > > knlGS:0000000000000000 >> > > > > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >> > > > > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: >> > > > > 00000000001407e0 >> > > > > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: >> > > > > 0000000000000000 >> > > > > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: >> > > > > 0000000000000400 >> > > > > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo >> > > > > ffff880871f6c000, >> > > > > > > > > > task ffff880860f18ab0) >> > > > > > > > > > <4>Stack: >> > > > > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 >> > > > > > > ffff880874749cc0 >> > > > > > > > > > <4> 0000000100000103 ffff8802381f8c00 >> ffff880871f6df38 >> > > > > > > > > ffff8808715b4580 >> > > > > > > > > > <4> 0000000000000082 ffff8802381f8d88 >> ffff880871f6dec8 >> > > > > > > > > ffffffffa035ab31 >> > > > > > > > > > <4>Call Trace: >> > > > > > > > > > <4> [] ? filldir+0x0/0xe0 >> > > > > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] >> > > > > > > > > > <4> [] ? filldir+0x0/0xe0 >> > > > > > > > > > <4> [] xfs_file_readdir+0x39/0x50 >> [xfs] >> > > > > > > > > > <4> [] vfs_readdir+0xc0/0xe0 >> > > > > > > > > > <4> [] ? final_putname+0x26/0x50 >> > > > > > > > > > <4> [] sys_getdents+0x89/0xf0 >> > > > > > > > > > <4> [] system_call_fastpath+0x16/0x1= b >> > > > > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 >> ff 55 >> > > b8 >> > > > > 85 c0 >> > > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 >> 00 00 >> > > 00 >> > > > > 00 00 >> > > > > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 0= 3 >> 41 >> > > 0f b6 >> > > > > > > > > > <1>RIP [] >> xfs_dir2_sf_getdents+0x2a0/0x3a0 >> > > > > [xfs] >> > > > > > > > > > <4> RSP >> > > > > > > > > > <4>CR2: 0000000000000001 >> > > > > > > > > > >> > > > > > > > > ... >> > > > > > > > > > >> > > > > > > > > > I=E2=80=99ve got the vmcore dump from operator. Does v= mcore >> help for >> > > > > > > > > > troubleshooting kind issue ? >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this >> 6.6 >> > > > > kernel? Can >> > > > > > > > > you provide the exact kernel version and post the vmcore >> > > somewhere? >> > > > > > > > > >> > > > > > > > > Brian >> > > > > > > > > >> > > > > > > > > > Thanks // Hugo >> > > > > > > > > > =E2=80=8B >> > > > > > > > > > >> > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen < >> sandeen@sandeen.net >> > > >: >> > > > > > > > > > >> > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: >> > > > > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affecte= d >> > > > > filesystem? >> > > > > > > Note >> > > > > > > > > > > that -n will report problems only and prevent any >> > > modification >> > > > > by >> > > > > > > > > repair. >> > > > > > > > > > > > >> > > > > > > > > > > > *We might to to xfs_repair if we can address which >> disk >> > > > > causes >> > > > > > > the >> > > > > > > > > > > issue. * >> > > > > > > > > > > >> > > > > > > > > > > If you do, please save the output, and if it finds >> > > anything, >> > > > > please >> > > > > > > > > > > provide the output in this thread. >> > > > > > > > > > > >> > > > > > > > > > > Thanks, >> > > > > > > > > > > -Eric >> > > > > > > > > > > >> > > > > > > > > >> > > > > > > > > > _______________________________________________ >> > > > > > > > > > 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 >> > > >> > > >> > > --bcaec53f398590e7f5051b17574c Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi all,=C2=A0

We may hit this bug in Op= enStack Swift =C2=A0:
Race condition quarantines valid objects https://bugs.launchpad.n= et/swift/+bug/1451520

This race condition may cause = the problem which Brain mentioned previously. OpenStack community fixed thi= s in Swift's code. Should it be a kernel bug of XFS too =C2=A0?=C2=A0

Thanks for all your efforts.=C2=A0
Hugo


2015-07-14 2:10 GMT+08:00 Kuo Hugo <tonytkdk@gmail.com>:
Hi Brain,=C2=A0
The sdb is mounted on /srv/node/d224 on this server. That&= #39;s one of three disks that the process was making I/O on it.=C2=A0
=
Those openfiles on /srv/node/d224 were made by the process to storing/= deleting data at that moment while the kernel panic appeared.=C2=A0

```
36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03ed88 REG /srv/node= /d205/quarantined/objects/cd1d68f515006d443a54ff4f658091bc-a114bba144= 9b45238abf38dc741d7c27/1436254020.89= 801.ts 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/= quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/= tmp/tmpSpnrHg 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR /srv/node/d224/= quarantined/objects/b146865bf8034bfc42570b747c341b32
```

I'll check the dir location of the inode number.=C2=A0

=
Nice information.=C2=A0

Thanks // Hugo= =C2=A0

2015-07-14 1:01 GMT+08:00 Brian Foster = <bfoster@redhat.= com>:
On Mon, Jul 13, 2015 at 10:06:39PM +0800, Kuo Hugo wrote:
> Hi Brain,
>
> Sorry for the wrong file in previ= ous message. I believe this the right one.
>
> https://cloud.swiftstack.com/v1/AU= TH_hugo/public/xfs.ko.debug
>
> /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xf= s.ko.debug
>
> MD5 : 27829c9c55f4f5b095d29a7de7c27254
>

Yes, that works. I have a few bits of informa= tion so far, but nothing
obvious to me as to what caused the problem. Some info:

- The crash is indeed at xfs_dir2_sf_get_inumber():

/usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/= fs/xfs/xfs_dir2_sf.h: 101
0xffffffffa0362d60 <xfs_dir2_sf_getdents+672>:=C2=A0 cmpb=C2=A0 =C2= =A0$0x0,0x1(%r12)
...

- %r12 above has a value of 0 and is set as follows:

/usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/= fs/xfs/xfs_dir2_sf.c: 727
0xffffffffa0362b11 <xfs_dir2_sf_getdents+81>:=C2=A0 =C2=A0mov=C2=A0 = =C2=A0 0x50(%rdi),%r12

... which is the sfp pointer assignment in the getdents function:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 sfp =3D (xfs_dir2_sf_t *)dp->i_df.if_u1.if_d= ata;

This implies a NULL if_data.

- The backtrace lists a couple of inodes on the stack in this frame. I'= m
not sure why, but one looks like a valid directory and the other looks
bogus. The valid inode has an inode number of 13668207561.

- The fsname for this inode is "sdb."

- The inode does appear to have a non-NULL if_data:

=C2=A0 =C2=A0 ...
=C2=A0 =C2=A0 if_u1 =3D {
=C2=A0 =C2=A0 =C2=A0 if_extents =3D 0xffff88084feaf5c0,
=C2=A0 =C2=A0 =C2=A0 if_ext_irec =3D 0xffff88084feaf5c0,
=C2=A0 =C2=A0 =C2=A0 if_data =3D 0xffff88084feaf5c0 "\004"
=C2=A0 =C2=A0 },
=C2=A0 =C2=A0 ...

So it's not totally clear what's going on there. It might be intere= sting
to see what directory this refers to, if it still exists on the sdb fs.
For example, is it an external directory or some kind of internal
directory created by the application? You could use something like the
following to try and locate the directory based on inode number:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 find <mntpath> -inum 13668207561

Brian

> Thanks // Hugo
> =E2=80=8B
>
> 2015-07-13 20:52 GMT+08:00 Brian Foster <bfoster@redhat.com>:
>
> > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote:
> > > Hi Brain,
> > >
> > > Is this the file which you need ?
> > >
> > > https://cloud.swiftstack.com/v= 1/AUTH_hugo/public/xfs.ko
> > >
> > > $> modinfo xfs
> > >
> > > filename: /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/= xfs/xfs.ko
> > > license: GPL
> > > description: SGI XFS with ACLs, security attributes, large b= lock/inode
> > > numbers, no debug enabled
> > > author: Silicon Graphics, Inc.
> > > srcversion: 0C1B17926BDDA4F121479EE
> > > depends: exportfs
> > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversi= on
> > >
> >
> > No, this isn't the debug version. We need the one from the de= bug package
> > that was installed (/usr/lib/debug?).
> >
> > Brian
> >
> > > Thanks // Hugo
> > > =E2=80=8B
> > >
> > > 2015-07-10 2:32 GMT+08:00 Brian Foster <bfoster@redhat.com>:
> > >
> > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrot= e:
> > > > > Hi Brain,
> > > > >
> > > > > There you go.
> > > > >
> > > > > https://cloud.swift= stack.com/v1/AUTH_hugo/public/vmlinux
> > > > >
> > > >
> > http= s://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6= .x86_64
> > > > >
> > > > > $ md5sum vmlinux
> > > > > 82aaa694a174c0a29e78c05e73adf5d8=C2=A0 vmlinux
> > > > >
> > > > > Yes, I can read it with this vmlinux image. Put al= l files
> > > > > (vmcore,vmlinux,System.map) in a folder and run $c= rash vmlinux vmcore
> > > > >
> > > >
> > > > Thanks, I can actually load that up now. Note that we&#= 39;ll probably need
> > > > the modules and whatnot (xfs.ko) also to be able to loo= k at any XFS
> > > > bits. It might be easiest to just tar up and compress w= hatever
> > directory
> > > > structure has the debug-enabled vmlinux and all the ker= nel modules.
> > > > Thanks.
> > > >
> > > > Brian
> > > >
> > > > > Hugo
> > > > > =E2=80=8B
> > > > >
> > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster <bfoster@redhat.com>= ;:
> > > > >
> > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo= Hugo wrote:
> > > > > > > Hi Brian,
> > > > > > >
> > > > > > > *Operating System Version:*
> > > > > > > Linux-2.6.32-504.23.4.el6.x86_64-x86_64-= with-centos-6.6-Final
> > > > > > >
> > > > > > > *NODE 1*
> > > > > > >
> > > > > > > https= ://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore
> > > > > > >
> > > > https://cl= oud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt
> > > > > > >
> > > > > > >
> > > > > > > *NODE 2*
> > > > > > >
> > > > > > >
> > https://cloud.swiftsta= ck.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02
> > > > > > >
> > > > > >
> > > >
> > https://clou= d.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt
> > > > > > >
> > > > > > >
> > > > > > > Any thoughts would be appreciate
> > > > > > >
> > > > > >
> > > > > > I'm not able to fire up crash with these = core files and the kernel
> > > > debug
> > > > > > info from the following centos kernel debugin= fo package:
> > > > > >
> > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.p= lus.x86_64.rpm
> > > > > >
> > > > > > It complains about a version mismatch between= the vmlinux and core
> > > > file.
> > > > > > I'm no crash expert... are you sure the c= ores above correspond to
> > this
> > > > > > kernel? Does crash load up for you on said bo= x if you run something
> > > > like
> > > > > > the following?
> > > > > >
> > > > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0crash /usr/l= ib/debug/lib/modules/.../vmlinux vmcore
> > > > > >
> > > > > > Note that you might need to install the above= kernel-debuginfo
> > package
> > > > > > to get the debug (vmlinux) file. If so, could= you also upload that
> > > > > > debuginfo rpm somewhere?
> > > > > >
> > > > > > Brian
> > > > > >
> > > > > > > Thanks // Hugo
> > > > > > >
> > > > > > >
> > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster = <bfoster@redhat.= com>:
> > > > > > >
> > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM = +0800, Kuo Hugo wrote:
> > > > > > > > > Hi Folks,
> > > > > > > > >
> > > > > > > > > As the results of 32 disks wit= h xfs_repair -n seems no any
> > error
> > > > > > shows
> > > > > > > > up.
> > > > > > > > > We currently tried to deploy C= entOS 6.6 for testing. (The
> > > > previous
> > > > > > kernel
> > > > > > > > > panic was came from Ubuntu). > > > > > > > > > The CentOS nodes encountered k= ernel panic with same daemon
> > but
> > > > the
> > > > > > > > problem
> > > > > > > > > may a bit differ.
> > > > > > > > >
> > > > > > > > >=C2=A0 =C2=A0 - It was broken o= n xfs_dir2_sf_get_parent_ino+0xa/0x20 in
> > > > Ubuntu.
> > > > > > > > >=C2=A0 =C2=A0 - Here=E2=80=99s = the log in CentOS. It=E2=80=99s broken on
> > > > > > > > >=C2=A0 =C2=A0 xfs_dir2_sf_getde= nts+0x2a0/0x3a0
> > > > > > > > >
> > > > > > > >
> > > > > > > > I'd venture to guess it's t= he same behavior here. The previous
> > > > kernel
> > > > > > > > had a callback for the parent inode= number that was called via
> > > > > > > > xfs_dir2_sf_getdents(). Taking a lo= ok at a 6.6 kernel, it has a
> > > > static
> > > > > > > > inline here instead.
> > > > > > > >
> > > > > > > > > <1>BUG: unable to handle= kernel NULL pointer dereference at
> > > > > > > > 0000000000000001
> > > > > > > > > <1>IP: [<ffffffffa036= 2d60>] xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > [xfs]
> > > > > > > > > <4>PGD 1072327067 PUD 10= 72328067 PMD 0
> > > > > > > > > <4>Oops: 0000 [#1] SMP > > > > > > > > > <4>last sysfs file:
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:= 1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/blo= ck/sdz/queue/rotational
> > > > > > > > > <4>CPU 17
> > > > > > > > > <4>Modules linked in: xt= _conntrack tun xfs exportfs
> > > > iptable_filter
> > > > > > > > > ipt_REDIRECT iptable_nat nf_na= t nf_conntrack_ipv4
> > nf_conntrack
> > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs= ipv6 libcrc32c iTCO_wdt
> > > > > > > > > iTCO_vendor_support ses enclos= ure igb i2c_algo_bit sb_edac
> > > > edac_core
> > > > > > > > > i2c_i801 i2c_core sg shpchp lp= c_ich mfd_core ixgbe dca ptp
> > > > pps_core
> > > > > > > > > mdio power_meter acpi_ipmi ipm= i_si ipmi_msghandler ext4 jbd2
> > > > mbcache
> > > > > > > > > sd_mod crc_t10dif mpt3sas scsi= _transport_sas raid_class
> > xhci_hcd
> > > > ahci
> > > > > > > > > wmi dm_mirror dm_region_hash d= m_log dm_mod [last unloaded:
> > > > > > > > > scsi_wait_scan]
> > > > > > > > > <4>
> > > > > > > > > <4>Pid: 4454, comm: swif= t-object-se Not tainted
> > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 = Silicon Mechanics Storform
> > > > > > > > > R518.v5P/X10DRi-T4+
> > > > > > > > > <4>RIP: 0010:[<ffffff= ffa0362d60>]=C2=A0 [<ffffffffa0362d60>]
> > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3= a0 [xfs]
> > > > > > > > > <4>RSP: 0018:ffff880871f= 6de18=C2=A0 EFLAGS: 00010202
> > > > > > > > > <4>RAX: 0000000000000000= RBX: 0000000000000004 RCX:
> > > > 0000000000000000
> > > > > > > > > <4>RDX: 0000000000000001= RSI: 0000000000000000 RDI:
> > > > 00007faa74006203
> > > > > > > > > <4>RBP: ffff880871f6de68= R08: 000000032eb04bc9 R09:
> > > > 0000000000000004
> > > > > > > > > <4>R10: 0000000000008030= R11: 0000000000000246 R12:
> > > > 0000000000000000
> > > > > > > > > <4>R13: 0000000000000002= R14: ffff88106eff7000 R15:
> > > > ffff8808715b4580
> > > > > > > > > <4>FS:=C2=A0 00007faa854= 25700(0000) GS:ffff880028360000(0000)
> > > > > > > > knlGS:0000000000000000
> > > > > > > > > <4>CS:=C2=A0 0010 DS: 00= 00 ES: 0000 CR0: 0000000080050033
> > > > > > > > > <4>CR2: 0000000000000001= CR3: 0000001072325000 CR4:
> > > > 00000000001407e0
> > > > > > > > > <4>DR0: 0000000000000000= DR1: 0000000000000000 DR2:
> > > > 0000000000000000
> > > > > > > > > <4>DR3: 0000000000000000= DR6: 00000000ffff0ff0 DR7:
> > > > 0000000000000400
> > > > > > > > > <4>Process swift-object-= se (pid: 4454, threadinfo
> > > > ffff880871f6c000,
> > > > > > > > > task ffff880860f18ab0)
> > > > > > > > > <4>Stack:
> > > > > > > > > <4> ffff880871f6de28 fff= fffff811a4bb0 ffff880871f6df38
> > > > > > ffff880874749cc0
> > > > > > > > > <4><d> 00000001000= 00103 ffff8802381f8c00 ffff880871f6df38
> > > > > > > > ffff8808715b4580
> > > > > > > > > <4><d> 00000000000= 00082 ffff8802381f8d88 ffff880871f6dec8
> > > > > > > > ffffffffa035ab31
> > > > > > > > > <4>Call Trace:
> > > > > > > > > <4> [<ffffffff811a4bb= 0>] ? filldir+0x0/0xe0
> > > > > > > > > <4> [<ffffffffa035ab3= 1>] xfs_readdir+0xe1/0x130 [xfs]
> > > > > > > > > <4> [<ffffffff811a4bb= 0>] ? filldir+0x0/0xe0
> > > > > > > > > <4> [<ffffffffa038fe2= 9>] xfs_file_readdir+0x39/0x50 [xfs]
> > > > > > > > > <4> [<ffffffff811a4e3= 0>] vfs_readdir+0xc0/0xe0
> > > > > > > > > <4> [<ffffffff8119bd8= 6>] ? final_putname+0x26/0x50
> > > > > > > > > <4> [<ffffffff811a4fb= 9>] sys_getdents+0x89/0xf0
> > > > > > > > > <4> [<ffffffff8100b0f= 2>] system_call_fastpath+0x16/0x1b
> > > > > > > > > <4>Code: 01 00 00 00 48 = c7 c6 38 6b 3a a0 48 8b 7d c0 ff 55
> > b8
> > > > 85 c0
> > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 = ec fd ff ff 66 0f 1f 84 00 00
> > 00
> > > > 00 00
> > > > > > > > > <41> 80 7c 24 01 00 0f 8= 4 9c 00 00 00 45 0f b6 44 24 03 41
> > 0f b6
> > > > > > > > > <1>RIP=C2=A0 [<ffffff= ffa0362d60>] xfs_dir2_sf_getdents+0x2a0/0x3a0
> > > > [xfs]
> > > > > > > > > <4> RSP <ffff880871f6= de18>
> > > > > > > > > <4>CR2: 0000000000000001=
> > > > > > > > >
> > > > > > > > ...
> > > > > > > > >
> > > > > > > > > I=E2=80=99ve got the vmcore du= mp from operator. Does vmcore help for
> > > > > > > > > troubleshooting kind issue ? > > > > > > > > >
> > > > > > > >
> > > > > > > > Hmm, well it couldn't hurt. Is = the vmcore based on this 6.6
> > > > kernel? Can
> > > > > > > > you provide the exact kernel versio= n and post the vmcore
> > somewhere?
> > > > > > > >
> > > > > > > > Brian
> > > > > > > >
> > > > > > > > > Thanks // Hugo
> > > > > > > > > =E2=80=8B
> > > > > > > > >
> > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eri= c Sandeen <sand= een@sandeen.net
> > >:
> > > > > > > > >
> > > > > > > > > > On 6/18/15 9:29 AM, Kuo H= ugo wrote:
> > > > > > > > > > >>- Have you tried = an 'xfs_repair -n' of the affected
> > > > filesystem?
> > > > > > Note
> > > > > > > > > > that -n will report probl= ems only and prevent any
> > modification
> > > > by
> > > > > > > > repair.
> > > > > > > > > > >
> > > > > > > > > > > *We might to to xfs_= repair if we can address which disk
> > > > causes
> > > > > > the
> > > > > > > > > > issue. *
> > > > > > > > > >
> > > > > > > > > > If you do, please save th= e output, and if it finds
> > anything,
> > > > please
> > > > > > > > > > provide the output in thi= s thread.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > > -Eric
> > > > > > > > > >
> > > > > > > >
> > > > > > > > > ______________________________= _________________
> > > > > > > > > xfs mailing list
> > > > > > > > > xfs@oss.sgi.com
> > > > > > > > > http://oss.sgi.c= om/mailman/listinfo/xfs
> > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> >
> > > _______________________________________________
> > > xfs mailing list
> > > xfs@oss= .sgi.com
> > > http://oss.sgi.com/mailman/listinfo/xfs > >
> >


--bcaec53f398590e7f5051b17574c-- From Leslie.Rhorer@level3.com Fri Jul 17 20:47:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AA61B7F63 for ; Fri, 17 Jul 2015 20:47:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 486DCAC001 for ; Fri, 17 Jul 2015 18:47:02 -0700 (PDT) X-ASG-Debug-ID: 1437184019-04bdf00e8f028e0001-NocioJ Received: from mail1.bemta7.messagelabs.com (mail1.bemta7.messagelabs.com [216.82.254.111]) by cuda.sgi.com with ESMTP id b5lhE3CQIFv9ACaS (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 17 Jul 2015 18:47:00 -0700 (PDT) X-Barracuda-Envelope-From: Leslie.Rhorer@level3.com X-Barracuda-Apparent-Source-IP: 216.82.254.111 Received: from [216.82.253.147] by server-15.bemta-7.messagelabs.com id 23/C6-04656-310B9A55; Sat, 18 Jul 2015 01:46:59 +0000 X-Env-Sender: Leslie.Rhorer@level3.com X-Msg-Ref: server-10.tower-165.messagelabs.com!1437184018!20259289!1 X-Originating-IP: [209.245.18.37] X-StarScan-Received: X-StarScan-Version: 6.13.16; banners=-,-,- X-VirusChecked: Checked Received: (qmail 21596 invoked from network); 18 Jul 2015 01:46:58 -0000 Received: from bge23000.messagelabs1.prod.broomfield1.level3.net (HELO messagelabs1.level3.com) (209.245.18.37) by server-10.tower-165.messagelabs.com with DHE-RSA-AES256-SHA encrypted SMTP; 18 Jul 2015 01:46:58 -0000 Received: from USIDCWVEHT01.corp.global.level3.com (usidcwveht01.corp.global.level3.com [10.1.142.31]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "USIDCWVEHT01.corp.global.level3.com", Issuer "VIDCCERT0001" (not verified)) by messagelabs1.level3.com (Postfix) with ESMTPS id AC69E1DE7F; Sat, 18 Jul 2015 01:46:58 +0000 (GMT) Received: from USIDCWVEHT03.corp.global.level3.com (10.1.196.123) by USIDCWVEHT01.corp.global.level3.com (10.1.142.31) with Microsoft SMTP Server (TLS) id 14.3.195.1; Fri, 17 Jul 2015 19:46:58 -0600 Received: from USADCWVEMBX07.corp.global.level3.com ([fe80::dcb1:34ff:f303:9468]) by USIDCWVEHT03.corp.global.level3.com ([::1]) with mapi id 14.03.0195.001; Fri, 17 Jul 2015 19:46:58 -0600 From: "Rhorer, Leslie" To: "'lrhorer@mygrande.net'" , "xfs@oss.sgi.com" CC: "xfs@oss.sgi.com" Subject: XFS File system in trouble Thread-Topic: XFS File system in trouble X-ASG-Orig-Subj: XFS File system in trouble Thread-Index: AdDA9SmMFmf0/9qyTc685D4gyibLFA== Date: Sat, 18 Jul 2015 01:46:56 +0000 Message-ID: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.196.207] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: mail1.bemta7.messagelabs.com[216.82.254.111] X-Barracuda-Start-Time: 1437184020 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: fletchergeek.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20844 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... I have a 24T XFS file system that is very sick, and seemingly getting sick= er. I believe it to be the file system itself. I have replaced the RAID c= hassis, the OS, the cables, the drive controller, and most of the drives. R= e-syncing the=20 RAID array complete in a reasonable time, given the size of the array, and = reports no mismatches. Xfs_repair completes, usually with no errors found,= or sometimes one or two errors. Some commands, like a df, are now hanging= . Writes are often failing with I/O errors. I haven't found any amount of= obvious file corruption, but performing a CRC check using md5sum, md6sum, = sha256sum, etc., come up with different values every time they are run on m= any large files. What can I do to try to rectify this? Kernel: 3.16.0-4-amd64 Xfsprogs: 3.2.3 8 CPUs /proc/meminfo: MemTotal: 8095952 kB MemFree: 7005032 kB MemAvailable: 7393072 kB Buffers: 201804 kB Cached: 310752 kB SwapCached: 0 kB Active: 637704 kB Inactive: 132232 kB Active(anon): 258320 kB Inactive(anon): 3888 kB Active(file): 379384 kB Inactive(file): 128344 kB Unevictable: 0 kB Mlocked: 4 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 40 kB Writeback: 0 kB AnonPages: 257376 kB Mapped: 121392 kB Shmem: 4824 kB Slab: 141708 kB SReclaimable: 98512 kB SUnreclaim: 43196 kB KernelStack: 5072 kB PageTables: 18832 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 4047976 kB Committed_AS: 1189596 kB VmallocTotal: 34359738367 kB VmallocUsed: 366160 kB VmallocChunk: 34359349248 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 88660 kB DirectMap2M: 4003840 kB DirectMap1G: 4194304 kB /proc/mounts: rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 udev /dev devtmpfs rw,relatime,size=3D10240k,nr_inodes=3D1001559,mode=3D755= 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=3D5,mode=3D620,ptmxmod= e=3D000 0 0 tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=3D809596k,mode=3D755 0 0 /dev/sdd2 / ext4 rw,noatime,errors=3Dremount-ro,data=3Dordered 0 0 tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=3D5120k 0 0 pstore /sys/fs/pstore pstore rw,relatime 0 0 tmpfs /run/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=3D1619180k 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0 /dev/sdd1 /boot ext2 rw,noatime 0 0 tmpfs /var/www/vidmgr/artwork tmpfs rw,relatime,size=3D16384k 0 0 /dev/md2 /OldDrive ext4 rw,relatime,data=3Dordered 0 0 rpc_pipefs /run/rpc_pipefs rpc_pipefs rw,relatime 0 0 Backup:/var/www /var/www/backup nfs rw,relatime,vers=3D3,rsize=3D524288,wsi= ze=3D524288,namlen=3D255,hard,proto=3Dtcp,timeo=3D600,retrans=3D2,sec=3Dsys= ,mountaddr=3D192.168.1.51,mountvers=3D3,mountport=3D49438,mountproto=3Dtcp,= local_lock=3Dnone,addr=3D192.168.1.51 0 0 cgroup /sys/fs/cgroup tmpfs rw,relatime,size=3D12k 0 0 cgmfs /run/cgmanager/fs tmpfs rw,relatime,size=3D100k,mode=3D755 0 0 nfsd /proc/fs/nfsd nfsd rw,relatime 0 0 systemd /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,relea= se_agent=3D/usr/lib/x86_64-linux-gnu/systemd-shim-cgroup-release-agent,name= =3Dsystemd 0 0 tmpfs /run/user/0 tmpfs rw,nosuid,nodev,relatime,size=3D809596k,mode=3D700 = 0 0 Backup:/Backup /Backup nfs rw,relatime,vers=3D3,rsize=3D524288,wsize=3D5242= 88,namlen=3D255,hard,proto=3Dtcp,timeo=3D600,retrans=3D2,sec=3Dsys,mountadd= r=3D192.168.1.51,mountvers=3D3,mountport=3D57420,mountproto=3Dtcp,local_loc= k=3Dnone,addr=3D192.168.1.51 0 0 /dev/md0 /RAID xfs rw,relatime,attr2,inode64,sunit=3D2048,swidth=3D12288,no= quota 0 0 /proc/partitions: major minor #blocks name 8 0 125034840 sda 8 1 96256 sda1 8 2 112305152 sda2 8 3 12632064 sda3 8 16 125034840 sdb 8 17 96256 sdb1 8 18 112305152 sdb2 8 19 12632064 sdb3 8 32 3907018584 sdc 9 1 96128 md1 9 3 12623872 md3 9 2 112239616 md2 11 0 1048575 sr0 8 48 488386584 sdd 8 49 96256 sdd1 8 50 112305152 sdd2 8 51 12632064 sdd3 9 0 23441319936 md0 8 64 4883770584 sde 8 80 4883770584 sdf 8 96 3907018584 sdg 8 112 4883770584 sdh 8 128 4883770584 sdi 8 144 3907018584 sdj 8 160 3907018584 sdk mdadm -D /dev/md0: /dev/md0: Version : 1.2 Creation Time : Fri Oct 3 20:06:55 2014 Raid Level : raid6 Array Size : 23441319936 (22355.39 GiB 24003.91 GB) Used Dev Size : 3906886656 (3725.90 GiB 4000.65 GB) Raid Devices : 8 Total Devices : 8 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Fri Jul 17 19:47:45 2015 State : clean=20 Active Devices : 8 Working Devices : 8 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 1024K Name : RAID-Server:0 (local to host RAID-Server) UUID : d26e92db:8bd207bb:db9bec69:4117ed57 Events : 698300 Number Major Minor RaidDevice State 10 8 128 0 active sync /dev/sdi 12 8 112 1 active sync /dev/sdh 8 8 80 2 active sync /dev/sdf 9 8 64 3 active sync /dev/sde 11 8 96 4 active sync /dev/sdg 5 8 32 5 active sync /dev/sdc 6 8 160 6 active sync /dev/sdk 7 8 144 7 active sync /dev/sdj No LVM 8 SATA disks, various ,manufacturers, 4 & 5T dmesg is un markable prior to echo w > /proc/sysrq-trigger: [112915.907065] md: md0: requested-resync done. [134859.522323] XFS (md0): Mounting V4 Filesystem [134860.767122] XFS (md0): Ending clean mount [135019.548703] XFS (md0): Mounting V4 Filesystem [135019.817854] XFS (md0): Ending clean mount Xfs_info: meta-data=3D/dev/md0 isize=3D256 agcount=3D32, agsize=3D18= 3135488 blks =3D sectsz=3D4096 attr=3D2, projid32bit=3D1 =3D crc=3D0 finobt=3D0 data =3D bsize=3D4096 blocks=3D5860329984, imax= pct=3D5 =3D sunit=3D256 swidth=3D1536 blks naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 ftype=3D0 log =3Dinternal bsize=3D4096 blocks=3D521728, version= =3D2 =3D sectsz=3D4096 sunit=3D1 blks, lazy-coun= t=3D1 realtime =3Dnone extsz=3D4096 blocks=3D0, rtextents=3D0 After echo w > /proc/sysrq-trigger: http://fletchergeek.com/images/dmesg.txt From sandeen@sandeen.net Sat Jul 18 09:16:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C849F7F61 for ; Sat, 18 Jul 2015 09:16:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 54020AC007 for ; Sat, 18 Jul 2015 07:16:45 -0700 (PDT) X-ASG-Debug-ID: 1437229003-04cbb00f0856d00001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id hzBekERhBPcI0oik for ; Sat, 18 Jul 2015 07:16:43 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from Liberator.local (50-77-206-105-static.hfc.comcastbusiness.net [50.77.206.105]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 12C2A6184596; Sat, 18 Jul 2015 09:16:42 -0500 (CDT) Message-ID: <55AA5FCE.4080702@sandeen.net> Date: Sat, 18 Jul 2015 10:16:46 -0400 From: Eric Sandeen MIME-Version: 1.0 To: "Rhorer, Leslie" , "'lrhorer@mygrande.net'" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437229003 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20857 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/17/15 9:46 PM, Rhorer, Leslie wrote: > I have a 24T XFS file system that is very sick, and seemingly getting > sicker. I believe it to be the file system itself. I have replaced > the RAID chassis, the OS, the cables, the drive controller, and most > of the drives. Re-syncing the RAID array complete in a reasonable > time, given the size of the array, and reports no mismatches. > Xfs_repair completes, usually with no errors found, or sometimes one > or two errors. Some commands, like a df, are now hanging. Writes are > often failing with I/O errors. I haven't found any amount of obvious > file corruption, but performing a CRC check using md5sum, md6sum, > sha256sum, etc., come up with different values every time they are > run on many large files. What can I do to try to rectify this? If writes fail with I/O errors, that should show up in dmesg, but I don't see any such messages. What did repair find? Not a lot to go on from the above narrative, I'm afraid. What large files are those? I presume that you are sure they should not be changing? Thanks for all the info below... >From the dmesg, every stuck process is stuck on nfs - doesn't look xfs related at all. Doesn't seem like an xfs problem, TBH, but maybe you can provide xfs_repair output and/or dmesg when writes fail, that might offer a clue. -Eric From Leslie.Rhorer@level3.com Sat Jul 18 12:25:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F02A07F60 for ; Sat, 18 Jul 2015 12:25:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C184D304032 for ; Sat, 18 Jul 2015 10:24:58 -0700 (PDT) X-ASG-Debug-ID: 1437240294-04cb6c3b8d629d0001-NocioJ Received: from mail1.bemta7.messagelabs.com (mail1.bemta7.messagelabs.com [216.82.254.108]) by cuda.sgi.com with ESMTP id zExr92e3S242SFJi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 18 Jul 2015 10:24:55 -0700 (PDT) X-Barracuda-Envelope-From: Leslie.Rhorer@level3.com X-Barracuda-Apparent-Source-IP: 216.82.254.108 Received: from [216.82.253.67] by server-12.bemta-7.messagelabs.com id CE/A8-16335-6EB8AA55; Sat, 18 Jul 2015 17:24:54 +0000 X-Env-Sender: Leslie.Rhorer@level3.com X-Msg-Ref: server-9.tower-158.messagelabs.com!1437240293!14495276!1 X-Originating-IP: [209.245.18.38] X-StarScan-Received: X-StarScan-Version: 6.13.16; banners=-,-,- X-VirusChecked: Checked Received: (qmail 4600 invoked from network); 18 Jul 2015 17:24:53 -0000 Received: from unknown.level3.net (HELO messagelabs2.level3.com) (209.245.18.38) by server-9.tower-158.messagelabs.com with DHE-RSA-AES256-SHA encrypted SMTP; 18 Jul 2015 17:24:53 -0000 Received: from USIDCWVEHT01.corp.global.level3.com (usidcwveht01.corp.global.level3.com [10.1.142.31]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "USIDCWVEHT01.corp.global.level3.com", Issuer "VIDCCERT0001" (not verified)) by messagelabs2.level3.com (Postfix) with ESMTPS id 9C73E2C444; Sat, 18 Jul 2015 17:24:53 +0000 (GMT) Received: from USADCWVEMBX07.corp.global.level3.com ([fe80::dcb1:34ff:f303:9468]) by USIDCWVEHT01.corp.global.level3.com ([::1]) with mapi id 14.03.0195.001; Sat, 18 Jul 2015 11:24:53 -0600 From: "Rhorer, Leslie" To: Eric Sandeen , "'lrhorer@mygrande.net'" , "xfs@oss.sgi.com" Subject: RE: XFS File system in trouble Thread-Topic: XFS File system in trouble X-ASG-Orig-Subj: RE: XFS File system in trouble Thread-Index: AdDA9SmMFmf0/9qyTc685D4gyibLFAAoYHsAAAlGqwA= Date: Sat, 18 Jul 2015 17:23:27 +0000 Message-ID: <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> In-Reply-To: <55AA5FCE.4080702@sandeen.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.196.206] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: mail1.bemta7.messagelabs.com[216.82.254.108] X-Barracuda-Start-Time: 1437240295 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: fletchergeek.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20860 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... -----Original Message----- From: Eric Sandeen [mailto:sandeen@sandeen.net]=20 Sent: Saturday, July 18, 2015 9:17 AM To: Rhorer, Leslie; 'lrhorer@mygrande.net'; xfs@oss.sgi.com Subject: Re: XFS File system in trouble On 7/17/15 9:46 PM, Rhorer, Leslie wrote: >> I have a 24T XFS file system that is very sick, and seemingly getting=20 >> sicker. I believe it to be the file system itself. I have replaced the=20 >> RAID chassis, the OS, the cables, the drive controller, and most of=20 >> the drives. Re-syncing the RAID array complete in a reasonable time,=20 >> given the size of the array, and reports no mismatches. >> Xfs_repair completes, usually with no errors found, or sometimes one=20 >> or two errors. Some commands, like a df, are now hanging. Writes are=20 >> often failing with I/O errors. I haven't found any amount of obvious=20 >> file corruption, but performing a CRC check using md5sum, md6sum,=20 >> sha256sum, etc., come up with different values every time they are run=20 >> on many large files. What can I do to try to rectify this? >If writes fail with I/O errors, that should show up in dmesg, but I don't = see any such messages. I had rebooted. Here is an example: RAID-Server:/RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapter= s/Rocket 2722/Driver# tar -xzvf RR_27xx.tar.gz=20 It works for a while, because some of the directories already exist, but wh= en it started to try to create directories, it started getting FS errors an= d I had to wind up rebooting. After reboot, I get the following when I try= to run the command from the directory again: [ 380.556635] XFS (md0): xfs_iread: validation failed for inode 1246568694= 24 failed [ 380.556644] ffff8800b514c000: 49 4e 00 00 03 02 00 00 00 30 00 70 00 00 = 03 e8 IN.......0.p.... [ 380.556648] ffff8800b514c010: 00 00 00 00 06 20 b0 6f 01 2e 00 00 00 00 = 00 16 ..... .o........ [ 380.556652] ffff8800b514c020: 01 57 37 fd 2b 5d 22 9e 1e 0a 61 8c 00 00 = 00 20 .W7.+]"...a....=20 [ 380.556655] ffff8800b514c030: ff ff 00 d2 1b f6 27 90 00 00 00 00 00 00 = 00 00 ......'......... [ 380.556684] XFS (md0): Internal error xfs_iread at line 392 of file /bui= ld/linux-QZaPpC/linux-3.16.7-ckt11/fs/xfs/xfs_inode_buf.c. Caller xfs_iget= +0x24b/0x690 [xfs] [ 380.556690] CPU: 5 PID: 4981 Comm: tar Not tainted 3.16.0-4-amd64 #1 Deb= ian 3.16.7-ckt11-1 [ 380.556694] Hardware name: To be filled by O.E.M. To be filled by O.E.M.= /SABERTOOTH 990FX R2.0, BIOS 1503 01/11/2013 [ 380.556697] 0000000000000001 ffffffff8150b405 ffff8802333a6000 ffffffff= a066e5cb [ 380.556703] 0000018800000010 ffffffffa0673f6b ffff8800a8464400 ffff8802= 333a6000 [ 380.556708] 0000000000000075 ffff8800b58accc8 ffffffffa06b9b3a ffffffff= a0673f6b [ 380.556714] Call Trace: [ 380.556732] [] ? dump_stack+0x41/0x51 [ 380.556738] [] ? xfs_corruption_error+0x5b/0x80 [xfs] [ 380.556744] [] ? xfs_iget+0x24b/0x690 [xfs] [ 380.556752] [] ? xfs_iread+0xea/0x400 [xfs] [ 380.556757] [] ? xfs_iget+0x24b/0x690 [xfs] [ 380.556762] [] ? xfs_iget+0x24b/0x690 [xfs] [ 380.556770] [] ? xfs_ialloc+0xa6/0x500 [xfs] [ 380.556776] [] ? kmem_zone_alloc+0x6e/0xe0 [xfs] [ 380.556783] [] ? xfs_dir_ialloc+0x62/0x2a0 [xfs] [ 380.556789] [] ? xfs_trans_reserve+0x1f5/0x200 [xfs] [ 380.556796] [] ? xfs_create+0x489/0x700 [xfs] [ 380.556799] [] ? kern_path_create+0xaa/0x190 [ 380.556805] [] ? xfs_generic_create+0xca/0x250 [xfs] [ 380.556807] [] ? vfs_mkdir+0xb0/0x160 [ 380.556808] [] ? SyS_mkdirat+0xab/0xe0 [ 380.556811] [] ? system_call_fast_compare_end+0x10/0x= 15 [ 380.556812] XFS (md0): Corruption detected. Unmount and run xfs_repair [ 380.556822] XFS (md0): Internal error xfs_trans_cancel at line 959 of fi= le /build/linux-QZaPpC/linux-3.16.7-ckt11/fs/xfs/xfs_trans.c. Caller xfs_c= reate+0x2b2/0x700 [xfs] [ 380.556823] CPU: 5 PID: 4981 Comm: tar Not tainted 3.16.0-4-amd64 #1 Deb= ian 3.16.7-ckt11-1 [ 380.556824] Hardware name: To be filled by O.E.M. To be filled by O.E.M.= /SABERTOOTH 990FX R2.0, BIOS 1503 01/11/2013 [ 380.556825] 000000000000000c ffffffff8150b405 ffff8800b58accc8 ffffffff= a0682e07 [ 380.556827] ffff8800a8464800 ffff8800b665fec8 ffff8802333a6000 ffffffff= a06b47d2 [ 380.556828] 0000000000000001 ffff8800b665fe20 ffff8800b665fe1c ffff8800= b665feb0 [ 380.556830] Call Trace: [ 380.556832] [] ? dump_stack+0x41/0x51 [ 380.556838] [] ? xfs_trans_cancel+0xc7/0xf0 [xfs] [ 380.556845] [] ? xfs_create+0x2b2/0x700 [xfs] [ 380.556847] [] ? kern_path_create+0xaa/0x190 [ 380.556853] [] ? xfs_generic_create+0xca/0x250 [xfs] [ 380.556854] [] ? vfs_mkdir+0xb0/0x160 [ 380.556856] [] ? SyS_mkdirat+0xab/0xe0 [ 380.556858] [] ? system_call_fast_compare_end+0x10/0x= 15 [ 380.556860] XFS (md0): xfs_do_force_shutdown(0x8) called from line 960 o= f file /build/linux-QZaPpC/linux-3.16.7-ckt11/fs/xfs/xfs_trans.c. Return a= ddress =3D 0xffffffffa0682e20 [ 380.735013] XFS (md0): Corruption of in-memory data detected. Shutting = down filesystem [ 380.735017] XFS (md0): Please umount the filesystem and rectify the prob= lem(s) [ 382.465430] XFS (md0): xfs_log_force: error 5 returned. [ 412.529071] XFS (md0): xfs_log_force: error 5 returned. [ 425.657948] ata2.00: exception Emask 0x10 SAct 0x4000000 SErr 0x280100 a= ction 0x6 frozen [ 425.657956] ata2.00: irq_stat 0x08000000, interface fatal error [ 425.657962] ata2: SError: { UnrecovData 10B8B BadCRC } [ 425.657968] ata2.00: failed command: READ FPDMA QUEUED [ 425.657977] ata2.00: cmd 60/08:d0:b8:02:45/00:00:0c:00:00/40 tag 26 ncq = 4096 in res 50/00:d0:b8:02:45/00:00:0c:00:00/40 Emask 0x10 (ATA bus error) [ 425.657982] ata2.00: status: { DRDY } [ 425.657988] ata2: hard resetting link [ 426.149601] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300) [ 426.150666] ata2.00: configured for UDMA/100 [ 426.150675] ata2: EH complete [ 426.157721] ata2.00: exception Emask 0x10 SAct 0x10000000 SErr 0x280100 = action 0x6 frozen [ 426.157724] ata2.00: irq_stat 0x08000000, interface fatal error [ 426.157726] ata2: SError: { UnrecovData 10B8B BadCRC } [ 426.157728] ata2.00: failed command: READ FPDMA QUEUED [ 426.157732] ata2.00: cmd 60/40:e0:c0:02:45/00:00:0c:00:00/40 tag 28 ncq = 32768 in res 50/00:e0:c0:02:45/00:00:0c:00:00/40 Emask 0x10 (ATA bus error) [ 426.157733] ata2.00: status: { DRDY } [ 426.157736] ata2: hard resetting link [ 426.649390] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300) [ 426.650661] ata2.00: configured for UDMA/100 [ 426.650670] ata2: EH complete [ 426.657444] ata2: limiting SATA link speed to 3.0 Gbps [ 426.657453] ata2.00: exception Emask 0x10 SAct 0x20000000 SErr 0x280100 = action 0x6 frozen [ 426.657458] ata2.00: irq_stat 0x08000000, interface fatal error [ 426.657463] ata2: SError: { UnrecovData 10B8B BadCRC } [ 426.657468] ata2.00: failed command: READ FPDMA QUEUED [ 426.657477] ata2.00: cmd 60/40:e8:c0:02:45/00:00:0c:00:00/40 tag 29 ncq = 32768 in res 50/00:e8:c0:02:45/00:00:0c:00:00/40 Emask 0x10 (ATA bus error) [ 426.657482] ata2.00: status: { DRDY } [ 426.657488] ata2: hard resetting link [ 427.149119] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 320) [ 427.150269] ata2.00: configured for UDMA/100 [ 427.150278] ata2: EH complete [ 437.456774] systemd-logind[4495]: Failed to start user service: Unknown = unit: user@65534.service [ 437.459623] systemd-logind[4495]: New session c1 of user nobody. [ 442.592642] XFS (md0): xfs_log_force: error 5 returned. [ 461.447454] systemd-logind[4495]: Removed session c1. [ 472.656343] XFS (md0): xfs_log_force: error 5 returned. [ 502.719909] XFS (md0): xfs_log_force: error 5 returned. [ 517.754984] systemd-logind[4495]: New session 2 of user root. [ 532.783626] XFS (md0): xfs_log_force: error 5 returned. [ 562.847248] XFS (md0): xfs_log_force: error 5 returned. [ 592.910892] XFS (md0): xfs_log_force: error 5 returned. [ 622.974525] XFS (md0): xfs_log_force: error 5 returned. [ 653.038159] XFS (md0): xfs_log_force: error 5 returned. [ 683.101796] XFS (md0): xfs_log_force: error 5 returned. [ 713.165433] XFS (md0): xfs_log_force: error 5 returned. [ 743.229069] XFS (md0): xfs_log_force: error 5 returned. [ 773.292709] XFS (md0): xfs_log_force: error 5 returned. [ 803.356344] XFS (md0): xfs_log_force: error 5 returned. [ 833.419991] XFS (md0): xfs_log_force: error 5 returned. [ 863.483617] XFS (md0): xfs_log_force: error 5 returned. [ 893.547256] XFS (md0): xfs_log_force: error 5 returned. [ 923.610889] XFS (md0): xfs_log_force: error 5 returned. >What did repair find? This time it says: Phase 1 - find and verify superblock... - reporting progress in intervals of 15 minutes Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - 11:01:53: scanning filesystem freespace - 32 of 32 allocation gro= ups done - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - 11:01:53: scanning agi unlinked lists - 32 of 32 allocation group= s done - process known inodes and perform inode discovery... - agno =3D 15 - agno =3D 30 - agno =3D 0 - agno =3D 1 - agno =3D 16 - agno =3D 17 - agno =3D 2 - agno =3D 3 - agno =3D 18 - agno =3D 4 - agno =3D 5 - agno =3D 19 - agno =3D 6 - agno =3D 20 - agno =3D 21 - agno =3D 7 - agno =3D 8 - agno =3D 31 - agno =3D 22 - agno =3D 23 - agno =3D 24 - agno =3D 9 - agno =3D 10 - agno =3D 25 - agno =3D 11 - agno =3D 26 - agno =3D 12 - agno =3D 27 - agno =3D 13 - agno =3D 28 - agno =3D 14 - agno =3D 29 - 11:01:56: process known inodes and inode discovery - 42624 of 426= 24 inodes done - process newly discovered inodes... - 11:01:56: process newly discovered inodes - 32 of 32 allocation g= roups done Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - 11:01:56: setting up duplicate extent list - 32 of 32 allocation = groups done - check for inodes claiming duplicate blocks... - agno =3D 0 - agno =3D 1 - agno =3D 2 - agno =3D 3 - agno =3D 4 - agno =3D 5 - agno =3D 7 - agno =3D 6 - agno =3D 8 - agno =3D 9 - agno =3D 10 - agno =3D 11 - agno =3D 12 - agno =3D 13 - agno =3D 14 - agno =3D 15 - agno =3D 16 - agno =3D 17 - agno =3D 18 - agno =3D 19 - agno =3D 20 - agno =3D 21 - agno =3D 22 - agno =3D 23 - agno =3D 24 - agno =3D 25 - agno =3D 26 - agno =3D 27 - agno =3D 28 - agno =3D 29 - agno =3D 30 - agno =3D 31 - 11:01:56: check for inodes claiming duplicate blocks - 42624 of 4= 2624 inodes done Phase 5 - rebuild AG headers and trees... - 11:01:57: rebuild AG headers and trees - 32 of 32 allocation grou= ps done - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... Done I go into a directory on the array and run ` tar -xzvf RR_27xx.tar.gz` It works for a bit, but then it tries to create some directories: RR274x/Driver/Linux/SLES/rr274x_3x-sles-9sp3-x86_64-v1.0.10.0708.tgz RR274x/Driver/Linux/Ubuntu/ RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386/ RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386/boot/ tar: RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386/boot: Cannot mk= dir: Structure needs cleaning RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386/boot/rr274x_3x2.6.32= -21-generic-paei386.ko.gz tar: RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386/boot: Cannot mk= dir: Input/output error gzip: stdin: Input/output error tar: Unexpected EOF in archive tar: RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386: Cannot utime: = Input/output error tar: RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386: Cannot change = ownership to uid 0, gid 1000: Input/output error tar: RR274x/Driver/Linux/Ubuntu/rr274x_3x-ubuntu-10.04-i386: Cannot change = mode to rwxr-xr-x: Input/output error tar: RR274x/Driver/Linux/Ubuntu: Cannot utime: Input/output error tar: RR274x/Driver/Linux/Ubuntu: Cannot change ownership to uid 0, gid 1000= : Input/output error tar: RR274x/Driver/Linux/Ubuntu: Cannot change mode to rwxr-xr-x: Input/out= put error tar: RR274x/Driver/Linux: Cannot utime: Input/output error tar: RR274x/Driver/Linux: Cannot change ownership to uid 0, gid 1000: Input= /output error tar: RR274x/Driver/Linux: Cannot change mode to rwxr-xr-x: Input/output err= or tar: RR274x/Driver: Cannot utime: Input/output error tar: RR274x/Driver: Cannot change ownership to uid 0, gid 1000: Input/outpu= t error tar: RR274x/Driver: Cannot change mode to rwxr-xr-x: Input/output error tar: RR274x: Cannot utime: Input/output error tar: RR274x: Cannot change ownership to uid 0, gid 1000: Input/output error tar: RR274x: Cannot change mode to rwxr-xr-x: Input/output error tar: Error is not recoverable: exiting now (Note if I copy the file to another filesystem and untar it, tar completes = without errors.) dmesg: [1744.155054] XFS (md0): xfs_iread: validation failed for inode 12465686942= 4 failed [ 1744.155064] ffff8800af962000: 49 4e 00 00 03 02 00 00 00 30 00 70 00 00 = 03 e8 IN.......0.p.... [ 1744.155068] ffff8800af962010: 00 00 00 00 06 20 b0 6f 01 2e 00 00 00 00 = 00 16 ..... .o........ [ 1744.155071] ffff8800af962020: 01 57 37 fd 2b 5d 22 9e 1e 0a 61 8c 00 00 = 00 20 .W7.+]"...a....=20 [ 1744.155075] ffff8800af962030: ff ff 00 d2 1b f6 27 90 00 00 00 00 00 00 = 00 00 ......'......... [ 1744.155103] XFS (md0): Internal error xfs_iread at line 392 of file /bui= ld/linux-QZaPpC/linux-3.16.7-ckt11/fs/xfs/xfs_inode_buf.c. Caller xfs_iget= +0x24b/0x690 [xfs] [ 1744.155109] CPU: 4 PID: 6167 Comm: tar Not tainted 3.16.0-4-amd64 #1 Deb= ian 3.16.7-ckt11-1 [ 1744.155113] Hardware name: To be filled by O.E.M. To be filled by O.E.M.= /SABERTOOTH 990FX R2.0, BIOS 1503 01/11/2013 [ 1744.155116] 0000000000000001 ffffffff8150b405 ffff8802333a6000 ffffffff= a066e5cb [ 1744.155123] 0000018800000010 ffffffffa0673f6b ffff8800ac8f1c00 ffff8802= 333a6000 [ 1744.155128] 0000000000000075 ffff880220abfdb0 ffffffffa06b9b3a ffffffff= a0673f6b [ 1744.155133] Call Trace: [ 1744.155143] [] ? dump_stack+0x41/0x51 [ 1744.155160] [] ? xfs_corruption_error+0x5b/0x80 [xfs] [ 1744.155177] [] ? xfs_iget+0x24b/0x690 [xfs] [ 1744.155199] [] ? xfs_iread+0xea/0x400 [xfs] [ 1744.155215] [] ? xfs_iget+0x24b/0x690 [xfs] [ 1744.155233] [] ? xfs_iget+0x24b/0x690 [xfs] [ 1744.155255] [] ? xfs_ialloc+0xa6/0x500 [xfs] [ 1744.155261] [] ? kmem_zone_alloc+0x6e/0xe0 [xfs] [ 1744.155268] [] ? xfs_dir_ialloc+0x62/0x2a0 [xfs] [ 1744.155275] [] ? xfs_trans_reserve+0x1f5/0x200 [xfs] [ 1744.155281] [] ? xfs_create+0x489/0x700 [xfs] [ 1744.155284] [] ? kern_path_create+0xaa/0x190 [ 1744.155290] [] ? xfs_generic_create+0xca/0x250 [xfs] [ 1744.155292] [] ? vfs_mkdir+0xb0/0x160 [ 1744.155294] [] ? SyS_mkdirat+0xab/0xe0 [ 1744.155296] [] ? system_call_fast_compare_end+0x10/0x= 15 [ 1744.155297] XFS (md0): Corruption detected. Unmount and run xfs_repair [ 1744.155307] XFS (md0): Internal error xfs_trans_cancel at line 959 of fi= le /build/linux-QZaPpC/linux-3.16.7-ckt11/fs/xfs/xfs_trans.c. Caller xfs_c= reate+0x2b2/0x700 [xfs] [ 1744.155309] CPU: 4 PID: 6167 Comm: tar Not tainted 3.16.0-4-amd64 #1 Deb= ian 3.16.7-ckt11-1 [ 1744.155310] Hardware name: To be filled by O.E.M. To be filled by O.E.M.= /SABERTOOTH 990FX R2.0, BIOS 1503 01/11/2013 [ 1744.155310] 000000000000000c ffffffff8150b405 ffff880220abfdb0 ffffffff= a0682e07 [ 1744.155312] ffff88022b133000 ffff8800ad4bfec8 ffff8802333a6000 ffffffff= a06b47d2 [ 1744.155314] 0000000000000001 ffff8800ad4bfe20 ffff8800ad4bfe1c ffff8800= ad4bfeb0 [ 1744.155315] Call Trace: [ 1744.155317] [] ? dump_stack+0x41/0x51 [ 1744.155324] [] ? xfs_trans_cancel+0xc7/0xf0 [xfs] [ 1744.155331] [] ? xfs_create+0x2b2/0x700 [xfs] [ 1744.155332] [] ? kern_path_create+0xaa/0x190 [ 1744.155339] [] ? xfs_generic_create+0xca/0x250 [xfs] [ 1744.155340] [] ? vfs_mkdir+0xb0/0x160 [ 1744.155342] [] ? SyS_mkdirat+0xab/0xe0 [ 1744.155344] [] ? system_call_fast_compare_end+0x10/0x= 15 [ 1744.155346] XFS (md0): xfs_do_force_shutdown(0x8) called from line 960 o= f file /build/linux-QZaPpC/linux-3.16.7-ckt11/fs/xfs/xfs_trans.c. Return a= ddress =3D 0xffffffffa0682e20 [ 1744.358431] XFS (md0): Corruption of in-memory data detected. Shutting = down filesystem [ 1744.358434] XFS (md0): Please umount the filesystem and rectify the prob= lem(s) [ 1768.335113] XFS (md0): xfs_log_force: error 5 returned. [ 1798.398749] XFS (md0): xfs_log_force: error 5 returned. [ 1828.462445] XFS (md0): xfs_log_force: error 5 returned. [ 1858.526061] XFS (md0): xfs_log_force: error 5 returned. [ 1888.589662] XFS (md0): xfs_log_force: error 5 returned. [ 1918.653300] XFS (md0): xfs_log_force: error 5 returned. [ 1948.716936] XFS (md0): xfs_log_force: error 5 returned. [ 1978.780572] XFS (md0): xfs_log_force: error 5 returned. >Not a lot to go on from the above narrative, I'm afraid. What large files= are those? I presume that you are sure they should not be changing? Hmm. No, the files are not being changed by any process. The ones for whi= ch I have observed the effect are large video files, although it is entirel= y possible it is happening with smaller files as well and I just haven't no= ticed it. I just tried something, though. I copied one of the files over = to a different file system (Ext3), and the issue occurs there, as well. Th= is particular symptom may have nothing to do with XFS. That would make sen= se if the issue with the file system is the structures, not the individual = data files. The jury is still out on this one. >From the dmesg, every stuck process is stuck on nfs - doesn't look xfs rel= ated at all. I shut down nfs and ran it again. You can see the new file at the same lin= k: http://fletchergeek.com/images/dmesg.txt From kszysiu@g.braxis.org Sat Jul 18 12:47:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E99267F62 for ; Sat, 18 Jul 2015 12:47:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C8EAC8F804B for ; Sat, 18 Jul 2015 10:47:34 -0700 (PDT) X-ASG-Debug-ID: 1437241647-04cbb00f065f990001-NocioJ Received: from mail-lb0-f182.google.com (mail-lb0-f182.google.com [209.85.217.182]) by cuda.sgi.com with ESMTP id BULkxSPBTixXyeTf (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Sat, 18 Jul 2015 10:47:28 -0700 (PDT) X-Barracuda-Envelope-From: kszysiu@g.braxis.org X-Barracuda-Apparent-Source-IP: 209.85.217.182 Received: by lbbzr7 with SMTP id zr7so75992903lbb.1 for ; Sat, 18 Jul 2015 10:47:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=mI7WevB3nBavQ3PieOFoaQ4C8hMtAdshfbBHTjAdEhw=; b=eJqzN3ujWLSnpWiLBLgpj23sh9CHKcj029Mv2NwXVeSa0oCavhXaMVkx96MT7Cl/2d L5/GmMh4oIdKuIz8GPPT3EFqJCnmxNu4Ui9HQ8zzBmoLqhGRgm40+gq95hS9nUsbhtNS KOfZeB0KDANNPv7A3o8eN5/gO7dk+p2oxEhBy9Hg/Rt984+zR33Nxlu1374C8ypUwLtp O4eP6a5bKk91txorDjZfq+2iHcDsCCfI4pnH+Uz9dppKeA6c0rZQE2ra5KLGaJCROHdu USTV4OHS2vpl6EjLwJSQawrt81SCSU1j77qYK5+kE+ff49RBgHGWzJQA0RzXjwHiuykN 8Qrw== X-Gm-Message-State: ALoCoQnpd63tz09YXgJCdTSQW4RJuW54MKsuNb6+4p3JA17mfrVhopQrcdDFaRSsSHwgIQKtPC2X MIME-Version: 1.0 X-Received: by 10.112.55.207 with SMTP id u15mr19860065lbp.88.1437241646577; Sat, 18 Jul 2015 10:47:26 -0700 (PDT) Sender: kszysiu@g.braxis.org Received: by 10.152.137.6 with HTTP; Sat, 18 Jul 2015 10:47:26 -0700 (PDT) In-Reply-To: <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> Date: Sat, 18 Jul 2015 19:47:26 +0200 X-Google-Sender-Auth: ixWbFbRnSabkpzEbmxacoNByfRI Message-ID: Subject: Re: XFS File system in trouble From: Kris Rusocki X-ASG-Orig-Subj: Re: XFS File system in trouble To: "Rhorer, Leslie" Cc: Eric Sandeen , "lrhorer@mygrande.net" , "xfs@oss.sgi.com" Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-lb0-f182.google.com[209.85.217.182] X-Barracuda-Start-Time: 1437241647 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20860 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Sat, Jul 18, 2015 at 7:23 PM, Rhorer, Leslie wrote: > [ 425.657948] ata2.00: exception Emask 0x10 SAct 0x4000000 SErr 0x280100 action 0x6 frozen > [ 425.657956] ata2.00: irq_stat 0x08000000, interface fatal error > [ 425.657962] ata2: SError: { UnrecovData 10B8B BadCRC } > [ 425.657968] ata2.00: failed command: READ FPDMA QUEUED > [ 425.657977] ata2.00: cmd 60/08:d0:b8:02:45/00:00:0c:00:00/40 tag 26 ncq 4096 in > res 50/00:d0:b8:02:45/00:00:0c:00:00/40 Emask 0x10 (ATA bus error) > [ 425.657982] ata2.00: status: { DRDY } > [ 425.657988] ata2: hard resetting link This is your SATA *interface* dying. Quick google-fu reveals: https://lkml.org/lkml/2008/12/2/426 Seems that hardware needs to be vouched for before looking at higher layers [?] Thanks, Kris From lrhorer@mygrande.net Sat Jul 18 13:13:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0FDE67F69 for ; Sat, 18 Jul 2015 13:13:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C21E28F804B for ; Sat, 18 Jul 2015 11:13:05 -0700 (PDT) X-ASG-Debug-ID: 1437243179-04bdf00e901f0c0001-NocioJ Received: from mail02.lsn.net (mail02.lsn.net [66.90.130.128]) by cuda.sgi.com with ESMTP id 0UEihFFdMAaOOouj for ; Sat, 18 Jul 2015 11:12:59 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.128 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail02.lsn.net (8.14.4/8.13.6) with ESMTP id t6IICsiL017665 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sat, 18 Jul 2015 13:12:54 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av02.lsn.net Message-ID: <55AA9727.1090609@mygrande.net> Date: Sat, 18 Jul 2015 13:12:55 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Kris Rusocki , "Rhorer, Leslie" CC: Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail02.lsn.net[66.90.130.128] X-Barracuda-Start-Time: 1437243179 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20861 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/18/2015 12:47 PM, Kris Rusocki wrote: > On Sat, Jul 18, 2015 at 7:23 PM, Rhorer, Leslie > wrote: > > > >> [ 425.657948] ata2.00: exception Emask 0x10 SAct 0x4000000 SErr 0x280100 action 0x6 frozen >> [ 425.657956] ata2.00: irq_stat 0x08000000, interface fatal error >> [ 425.657962] ata2: SError: { UnrecovData 10B8B BadCRC } >> [ 425.657968] ata2.00: failed command: READ FPDMA QUEUED >> [ 425.657977] ata2.00: cmd 60/08:d0:b8:02:45/00:00:0c:00:00/40 tag 26 ncq 4096 in >> res 50/00:d0:b8:02:45/00:00:0c:00:00/40 Emask 0x10 (ATA bus error) >> [ 425.657982] ata2.00: status: { DRDY } >> [ 425.657988] ata2: hard resetting link > > This is your SATA *interface* dying. > Quick google-fu reveals: https://lkml.org/lkml/2008/12/2/426 Except that isn't the interface on which the drives in the array reside. The array is on sd 0:0:x. Ata2 hosts one of a pair of removable Toshiba SSDs, and there is something flaky in the hardware. I haven't had time to figure out if it is the cable, the drive carrier, or the SSD. One of the arrays on one of the partitions on the drive is mounted, because those SSDs carry the old OS load and files which were active prior to my moving to a clean OS on a conventional hard drive in order to try to alleviate these issues. I'll definitely run it down after I resolve this much more serious issue. When things are settled, I want to go back to booting off the RAID1 arrays hosted on the SSDs, but for now they aren't in use much. From lrhorer@mygrande.net Sat Jul 18 20:03:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3241F7F47 for ; Sat, 18 Jul 2015 20:03:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id B0D7BAC001 for ; Sat, 18 Jul 2015 18:03:00 -0700 (PDT) X-ASG-Debug-ID: 1437267773-04cb6c3b8b68900001-NocioJ Received: from mail03.lsn.net (mail03.lsn.net [66.90.130.130]) by cuda.sgi.com with ESMTP id 6GLUf1tT0q6Wg8lK for ; Sat, 18 Jul 2015 18:02:53 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.130 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail03.lsn.net (8.14.4/8.13.6) with ESMTP id t6J12mvT006644 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sat, 18 Jul 2015 20:02:49 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av02.lsn.net Message-ID: <55AAF73A.4040903@mygrande.net> Date: Sat, 18 Jul 2015 20:02:50 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Kris Rusocki , "Rhorer, Leslie" CC: Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail03.lsn.net[66.90.130.130] X-Barracuda-Start-Time: 1437267773 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20868 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- I found the problem with md5sum (and probably nfs, as well). One of the memory modules in the server was bad. The problem with XFS persists. Every time tar tried to create the directory: /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 It would begin spitting out errors, starting with "Cannot mkdir: Structure needs cleaning". At that point, XFS had shut down. I went into /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ and created the i386-11.1 directory by hand, and tar no longer starts spitting out errors at that point, but it does start up again at RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. From restore-xfs=oss.sgi.com@etravelby.com Sun Jul 19 15:59:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5145329DF5 for ; Sun, 19 Jul 2015 15:59:28 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C4E86AC001 for ; Sun, 19 Jul 2015 13:59:24 -0700 (PDT) X-ASG-Debug-ID: 1437339562-04cbb00f09852f0001-NocioJ Received: from services.etravelby.com ([198.98.122.145]) by cuda.sgi.com with ESMTP id Jxu2ymdxfS5D7kDI for ; Sun, 19 Jul 2015 13:59:22 -0700 (PDT) X-Barracuda-Envelope-From: restore-xfs=oss.sgi.com@etravelby.com X-Barracuda-Apparent-Source-IP: 198.98.122.145 Received: by services.etravelby.com id hlg7qm0001ge for ; Sun, 19 Jul 2015 20:59:13 +0000 (envelope-from ) MIME-Version: 1.0 From: "Restore Lost Hair xfs" To: xfs@oss.sgi.com Subject: =?UTF-8?B?V2h5IENoaW5lc2UgRG9uJ3QgU3VmZmVyIEZyb20gSGFpciBMb3Nz?= Date: Sun, 19 Jul 2015 20:59:13 +0000 X-ASG-Orig-Subj: =?UTF-8?B?V2h5IENoaW5lc2UgRG9uJ3QgU3VmZmVyIEZyb20gSGFpciBMb3Nz?= Content-Type: multipart/alternative; boundary="997cc81a6a187b18926c" Message-ID: <0.0.0.2E.1D0C265C46F9870.7DE751D@services.etravelby.com> X-Barracuda-Connect: UNKNOWN[198.98.122.145] X-Barracuda-Start-Time: 1437339562 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20889 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 --997cc81a6a187b18926c Content-Type: text/plain; [] = Regrow A Full Head Of Hair In 60 Days, Using This Alternative Remedy =# This scientific discovery will make your head spin. ![] If you thought you were losing your hair... **you were dead wrong.** Your hair isn't lost at all, it's ALL there, but it's so frail that you simply can't see it. =# _Click here to see the undeniable proof_ In fact, you have just as much hair as those people with full heads of luscious hair you envy... **_you just need to help it grow right back as it used to be._** Here's how you can boost your hair naturally with the most powerful regrowth formula: --997cc81a6a187b18926c Content-Type: text/html;

Regrow A Full Head Of Hair In 60 Days, Using This Alternative Remedy

This scientific discovery will
make your head spin.

If you thought you were losing your hair... you were dead wrong.

Your hair isn't lost at all, it's ALL there, but it's so frail that you simply can't see it.

Click here to see the undeniable proof

In fact, you have just as much hair as those people with full heads of luscious hair you envy... you just need to help it grow right back as it used to be.

Here's how you can boost your hair naturally with the most powerful regrowth formula:

Get a full head of hair in just 60 days

10 Exrnal lnks Svral anonymous prss rlass whch appar followng h scovry l o h suggson ha h Marr Man was cra by popl from h Un Sas. Th rlass quo masurmns n mls, yars an nchs, nsa of h mrc sysm usually us n Ausrala. Ths woul b unusual for an Ausralan prss rlas, bu snc h mrc sysm was only nrouc n Ausrala n h arly 1970s, olr Ausralans sll ofn quo mpral masurmns. Th rlass also sa your Sa of SA, Qunslan Barrr Rf an mnon Aborgns from h local Ingnous Trrors, rms no us by Ausralans. Th prss rlass also mnon h Gra Srpn n Oho, whch s no wll known ous h US. Bu has bn conjcur ha hs faurs of h prss rlass may hav bn r hrrngs, nsr o prov h lluson of Amrcan auhorshp.caon n 1 Hsory Suggs craors xfs Pollng Saon Inspcors (oponal).384 Thy our h ara pollng saons (h spcfc par/room of h pollng plac n whch vos wr cas). In 1935 War Plan R was upa an spcf whch roas o us n h nvason. Th bs praccabl rou o Vancouvr s va Rou 99 (Carlson, 2005). Furhr, n 1935 Amrcans plann o bul hr mlary arfls nar h Canaan borr an sgus hm as cvlan arpors. In Fbruary 1935, h War Dparmn arrang a Congrssonal appropraon of $57 mllon o bul hr borr ar bass for h purposs of pr-mpv surprs aacks on Canaan ar fls (Brln Glasnos, 1992-2007). Th arfls wr o b kp scr, bu hr xsnc was accnally publsh by h Govrnmn Prnng Offc an rpor on h fron pag of h Nw York Tms on May 1, 1935. In January 2013, h Brsh Prm Mnsr, Dav Camron, comm h Consrvav Pary o a rfrnum n 2017 on UK mmbrshp of h EU f hy wn h 2015 gnral lcon.231 Lgslaon for an n/ou EU rfrnum was approv by h Hous of Commons n Novmbr 2013.232 Sus hav shown som vrgnc n aus o h EU n Scolan an h rs of h UK. Alhough a Scosh govrnmn rvw bas on survy aa bwn 1999 an 2005 foun ha popl n Scolan rpor broaly smlar Euroscpc vws as popl n Bran as a whol,233 Ipsos MORI no n Fbruary 2013 ha vors n Scolan sa hy woul choos o rman n h EU n a rfrnum, whl hr was a majory for whrawal n Englan.234 Conns h xfs Bhangmr lgh parns c b y a par of snsors on Vla sall 6911 on Sp 22, 1979. 4 Racons Man arcl: Dfnc Schm No. 1 xfs Allgaons of vong rrgulars Th sysm of Un Sas Numbr Hghways (ofn call U.S. Rous or U.S. Hghways) s an ngra nwork of roas an hghways numbr whn a naonw gr n h Un Sas. As h sgnaon an numbrng of hs hghways wr coorna among h sas, hy ar somms call Fral Hghways, bu h roaways hav always bn manan by sa or local govrnmns snc hr nal sgnaon n 1926. Furhr nformaon: Govrnmn of h 4h Scosh Parlamn Th Fral-A Hghway Ac of 1956 appropra funng for h Inrsa Hghway Sysm, o consruc a vas nwork of frways across h counry. By 1957, AASHO ha c o assgn a nw gr o h nw rous, o b numbr n h oppos rcons as h U.S. Hghway gr. Though h Inrsa numbrs wr o supplmn, rahr han rplac, h U.S. Rou numbrs, n many cass (spcally n h ws) h US hghways wr rrou along h nw Inrsas.9 Major commssonng of formr rous bgan wh Calforna's hghway rnumbrng n 1964. Th 1985 rmoval of US 66 s ofn sn as h n of an ra of US hghways.30 xfs Th SNP avocas ha an npnn Scolan shoul hav a smlar rlaonshp wh h Europan Unon (EU) as h UK has wh h EU oay. Ths mans full mmbrshp wh som xmpons, such as no havng o aop h uro. Thr s ba ovr whhr Scolan woul b rqur o r-apply for mmbrshp, an f coul ran h UK's op-ous.208209 Th Europan Commsson (EC) offr o prov an opnon o an xsng mmbr sa on h mar, bu h Brsh govrnmn confrm woul no sk hs avc, as no wan o ngoa h rms of npnnc aha of h rfrnum.210 Th lns of h fgur wr 20-30 cm (8-12 nchs) p a h m of scovry an up o 35 mrs (114 f) w. Th mag s graually rong hrough naural procsss, bu bcaus h clma s xrmly ry an barrn n h rgon, h mag s sll vsbl as of 2013.2 Whl hr s a layr of wh chalk maral slghly blow h r sol, h fgur was no fn o hs ph. As of May 2014, h Ys Scolan campagn ha clar ?4.5 mllon n cash onaons.5556 EuroMllons lory-wnnrs Chrs an Coln Wr gav ?3.5 mllon.55 A sx-fgur onaon was gvn by nvsmn fun managr Angus Tulloch; approxmaly 18,000 onaons of lss han ?7,500 ha bn ma by h sam a.56 5 S also 8 Exrnal lnks C ampagn srucurs No furhr consuonal rform was propos unl Labour rurn o powr n 1997, whn a scon Scosh voluon rfrnum was hl.4 Clar majors xprss suppor for boh a volv Scosh Parlamn an ha Parlamn havng h powr o vary h basc ra of ncom ax.4 Th Scolan Ac 1998 sablsh h nw Scosh Parlamn, frs lc on 6 May 1999,5 wh powr o lgsla on unrsrv mars whn Scolan. Goron Brown pon o h 2012 mal coun for Gra Bran, sayng ha show h succss of a unon ha nclu h wo naons.271 Scosh ahls wr nvolv n 13 of h 65 mals won by Gra Bran n 2012, bu only hr of hos wr won by Scos whou asssanc from ohr ahls.272 Sr Chrs Hoy sa n May 2013 ha coul ak m for Scosh ahls o sablsh hmslvs n a nw ranng nvronmn, ncang ha h goo prformanc of Scosh ahls n h Gra Bran am woul no auomacally ransla no ha of an npnn Scolan am.273 Hoy also sa ha h blv h lack of facls an coachng nfrasrucur n Scolan woul hav o b arss by an npnn sa.273

This was sent to you by Restore Lost Hair. If you wish
to no longer receive messages, please click here to unsubscribe.
--997cc81a6a187b18926c-- From david@fromorbit.com Sun Jul 19 18:28:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A2CAE7F47 for ; Sun, 19 Jul 2015 18:28:02 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7ECB88F8035 for ; Sun, 19 Jul 2015 16:27:59 -0700 (PDT) X-ASG-Debug-ID: 1437348476-04bdf00e91485e0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id HAgpmYXXiHQyb39b for ; Sun, 19 Jul 2015 16:27:56 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2B1CwBeMaxVPMaPLHlcgxOBPYZRojcBAQEGmkMEAgKBHU0BAQEBAQEHAQEBAUE/hCQBAQQ6HCMQCAMOCgklDwUlAwcaE4gtxA8BAQgCIBmGBYUuhDtLB4QrAQSRW4J3jCCZCIEJgSsbgWUsMYJLAQEB Received: from ppp121-44-143-198.lns20.syd7.internode.on.net (HELO dastard) ([121.44.143.198]) by ipmail05.adl6.internode.on.net with ESMTP; 20 Jul 2015 08:57:54 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZGxzu-0006RW-DD; Mon, 20 Jul 2015 09:27:54 +1000 Date: Mon, 20 Jul 2015 09:27:54 +1000 From: Dave Chinner To: Leslie Rhorer Cc: Kris Rusocki , "Rhorer, Leslie" , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble Message-ID: <20150719232754.GS7943@dastard> X-ASG-Orig-Subj: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55AAF73A.4040903@mygrande.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437348476 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20891 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: > > I found the problem with md5sum (and probably nfs, as well). One > of the memory modules in the server was bad. The problem with XFS > persists. Every time tar tried to create the directory: Now you need to run xfs_repair. Cheers, Dave. -- Dave Chinner david@fromorbit.com From lrhorer@mygrande.net Mon Jul 20 02:41:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C4D847F55 for ; Mon, 20 Jul 2015 02:41:23 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id AFFB1304043 for ; Mon, 20 Jul 2015 00:41:20 -0700 (PDT) X-ASG-Debug-ID: 1437378075-04cbb00f0897a30001-NocioJ Received: from mail01.lsn.net (mail01.lsn.net [66.90.130.120]) by cuda.sgi.com with ESMTP id hAyoZsQmBbF0hkej for ; Mon, 20 Jul 2015 00:41:16 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.120 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail01.lsn.net (8.14.4/8.13.6) with ESMTP id t6K7f86w027697 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Mon, 20 Jul 2015 02:41:09 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av01.lsn.net Message-ID: <55ACA615.10501@mygrande.net> Date: Mon, 20 Jul 2015 02:41:09 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Dave Chinner CC: Kris Rusocki , "Rhorer, Leslie" , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <20150719232754.GS7943@dastard> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail01.lsn.net[66.90.130.120] X-Barracuda-Start-Time: 1437378076 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20899 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/19/2015 6:27 PM, Dave Chinner wrote: > On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >> >> I found the problem with md5sum (and probably nfs, as well). One >> of the memory modules in the server was bad. The problem with XFS >> persists. Every time tar tried to create the directory: > > Now you need to run xfs_repair. I do that every time the array implodes. It makes no difference. It never mentions cleaning the structure tar says needs cleaning, and the next time I run tar on that file, the filesystem craters. From mp6058@gmail.com Mon Jul 20 03:05:54 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 60F7D7F55 for ; Mon, 20 Jul 2015 03:05:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2FB7F304043 for ; Mon, 20 Jul 2015 01:05:51 -0700 (PDT) X-ASG-Debug-ID: 1437379548-04bdf00e8e58630001-NocioJ Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by cuda.sgi.com with ESMTP id 2a2aE3C1KXTtL3P4 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 Jul 2015 01:05:49 -0700 (PDT) X-Barracuda-Envelope-From: mp6058@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.50 Received: by wgbcc4 with SMTP id cc4so30978678wgb.3 for ; Mon, 20 Jul 2015 01:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=nilNZEkGvHw8SqG87YHaHbq0QygqP5vsrxF98wYtHHI=; b=obV8mJ2zF8QsVgIc2LEXf79p1tXMPniM2gM+IRoLoJ1Tw7j3pZKipzy+pos1OMzTix TyGmf+rQt7IIUYXXu5ENgJQhjuyqXPg2n58sCaC8ppmpOATZAEF85dOKyqreG2wC4EzA ObFjp5tjjbbobFUfm6txweYTHP2n6Cy8oIbNhzt9JDCUQM6OI2iCFu9yp7bvPeD9S/XI 1VMAqTP0Qs38K4HgwKpAlFvq9II5RiiUergPH0JTE9qPIj9xek2qxTnXXtTvBEWU26rf 1u+TqYqV3VH0cbkFZ3iZ/CQa4swtQ+Lg9YXE1FCjhRx7bDRxxJtrcst9P/O9nlB/5puI pPTg== X-Received: by 10.180.90.81 with SMTP id bu17mr19184410wib.35.1437379547913; Mon, 20 Jul 2015 01:05:47 -0700 (PDT) Received: from [192.168.1.16] ([94.76.9.49]) by smtp.googlemail.com with ESMTPSA id l13sm12734959wjr.18.2015.07.20.01.05.46 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2015 01:05:47 -0700 (PDT) Message-ID: <55ACABD7.8000500@gmail.com> Date: Mon, 20 Jul 2015 11:05:43 +0300 From: Martin Papik User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: lrhorer@mygrande.net CC: xfs@oss.sgi.com Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55ACA615.10501@mygrande.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: mail-wg0-f50.google.com[74.125.82.50] X-Barracuda-Start-Time: 1437379549 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20900 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Since you've already found one HW related fault, would you consider booting into memtest for a couple of passes just to be on the safe side. And did you by any chance look at SMART if applicable and possibly running a test on the drives. Another test I sometimes do when I'm unsure about disks is "cat /dev/sda > /dev/null" (i.e. a whole disk read test) and see (dmesg) if any errors show up, unless you're willing to run badblocks in a read-write nondestructive mode. In my experience the read test or badblocks can be run simultaneously with smartctl -t long. But as a start I'd look at smartctl --all /dev/sd? and see if there are any bad signs. I hope this helps. Good luck On 07/20/2015 10:41 AM, Leslie Rhorer wrote: > On 7/19/2015 6:27 PM, Dave Chinner wrote: >> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>> >>> I found the problem with md5sum (and probably nfs, as well). >>> One of the memory modules in the server was bad. The problem >>> with XFS persists. Every time tar tried to create the >>> directory: >> >> Now you need to run xfs_repair. > > I do that every time the array implodes. It makes no difference. > It never mentions cleaning the structure tar says needs cleaning, > and the next time I run tar on that file, the filesystem craters. > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCgAGBQJVrKuzAAoJELsEaSRwbVYrdjoP/3n1W9YtcpdiDoylp6tDYcjF vEVz7IWLv2cOky8Lp+0WAZ4Z0WMhcutFzT571H1Vc+jT/UgO25pQHa3yLYTboPuZ +tBidVUycs7ZIr9QCZFs2uPQ/7YstamB+F7paCTMKtOJJr5CZLiYX4iyJ9sFmWVY UFPAIhyoqD5CFgoaAkwCmk50kNiT0aPM7egizIUVEt14cWuxZxMN0NIJ5b0WJfAk qtNQjstVI/xYDgsImm2ZAm19SfOG9ltm2G9zafRr6lR6rRtXjtZX8zEg0l/o9XUw OifghjoSup8OCzvX6+4+Soj/3mCKZv4rkBm3exf4YzfQ9eVG6Ktele2rLIs1sl3O hUrZUNEl8hYGJeb5gBHFV/TLWDMMwNde/6JiBVy0V8EbDF1lvR4jYpUwThOE0jyL ZbzZe4N/B0qvB1OpLDkHrMVm9NPtDkfXdTtM2kRmo5955xtkK09yHF/v64kz7IKc 2rM5pOwTR6HWE8RF2j9UujgPjw6nEUuY01TvIMGYzMfkJTI+sVjeDQfwnPG8tzIa x4uLa4vTrBD5IaICjAmQiY69qqmt5Vg42G4latZVTYQLelvWQ774mXZfgfT/GtbT RKzVwvYowWr/EBhtp7ix/1rWANTFiX0lxOPnRmUFvu8UJnyZhR0/EYbJYy1+jTt7 O7hZMfAayQBsnVcSK1JC =3Ubd -----END PGP SIGNATURE----- From lrhorer@mygrande.net Mon Jul 20 03:35:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2B6A37F55 for ; Mon, 20 Jul 2015 03:35:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 08B8F8F8049 for ; Mon, 20 Jul 2015 01:35:13 -0700 (PDT) X-ASG-Debug-ID: 1437381311-04cb6c3b88a08c0001-NocioJ Received: from mail03.lsn.net (mail03.lsn.net [66.90.130.130]) by cuda.sgi.com with ESMTP id dErfHiEioO0Jtp6Q for ; Mon, 20 Jul 2015 01:35:11 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.130 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail03.lsn.net (8.14.4/8.13.6) with ESMTP id t6K8Z7vQ017077 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Mon, 20 Jul 2015 03:35:08 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av01.lsn.net Message-ID: <55ACB2BD.6050601@mygrande.net> Date: Mon, 20 Jul 2015 03:35:09 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Martin Papik CC: xfs@oss.sgi.com Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> <55ACABD7.8000500@gmail.com> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55ACABD7.8000500@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail03.lsn.net[66.90.130.130] X-Barracuda-Start-Time: 1437381311 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20900 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/20/2015 3:05 AM, Martin Papik wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > > Since you've already found one HW related fault, would you consider > booting into memtest for a couple of passes just to be on the safe > side. I did that after confirming the one stick of memory was bad. Twice. I got over 20,000 errors on the bad stick, and 0 on the good one. I also swapped the locations on the motherboard, and the bad stick still failed while the good one passed 100%. > And did you by any chance look at SMART if applicable and > possibly running a test on the drives. Yes. SMART found no errors, but think about it. Every time tar tries to create a directory when untarring that file in that location, the file system croaks when it tries to create a directory. Not when reading and not when writing other than when it creates a directory. When I create the directory manualy, the process quits failing at that point and fails later on during a different directory create. The array remains intact when reading, and dmesg shows no drive errors. I've re-synced the array, which reads every byte on all 8 drives without a single mismatch - several times. To my knowledge, no read has ever failed except after the filesystem goes offline. I thought reads were failing during the CRC checks, but that was a red herring. > Another test I sometimes do > when I'm unsure about disks is "cat /dev/sda > /dev/null" (i.e. a > whole disk read test) echo repair > /sys/block/md0/md/sync_action reads not one drive, but every byte on all 8 drives. > and see (dmesg) if any errors show up, unless 'Nary one, and no mismatches. > you're willing to run badblocks in a read-write nondestructive mode. > In my experience the read test or badblocks can be run simultaneously > with smartctl -t long. But as a start I'd look at smartctl --all > /dev/sd? and see if there are any bad signs. I hope this helps. Good luck > > > On 07/20/2015 10:41 AM, Leslie Rhorer wrote: >> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>>> >>>> I found the problem with md5sum (and probably nfs, as well). >>>> One of the memory modules in the server was bad. The problem >>>> with XFS persists. Every time tar tried to create the >>>> directory: >>> >>> Now you need to run xfs_repair. >> >> I do that every time the array implodes. It makes no difference. >> It never mentions cleaning the structure tar says needs cleaning, >> and the next time I run tar on that file, the filesystem craters. >> >> _______________________________________________ xfs mailing list >> xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1 > > iQIcBAEBCgAGBQJVrKuzAAoJELsEaSRwbVYrdjoP/3n1W9YtcpdiDoylp6tDYcjF > vEVz7IWLv2cOky8Lp+0WAZ4Z0WMhcutFzT571H1Vc+jT/UgO25pQHa3yLYTboPuZ > +tBidVUycs7ZIr9QCZFs2uPQ/7YstamB+F7paCTMKtOJJr5CZLiYX4iyJ9sFmWVY > UFPAIhyoqD5CFgoaAkwCmk50kNiT0aPM7egizIUVEt14cWuxZxMN0NIJ5b0WJfAk > qtNQjstVI/xYDgsImm2ZAm19SfOG9ltm2G9zafRr6lR6rRtXjtZX8zEg0l/o9XUw > OifghjoSup8OCzvX6+4+Soj/3mCKZv4rkBm3exf4YzfQ9eVG6Ktele2rLIs1sl3O > hUrZUNEl8hYGJeb5gBHFV/TLWDMMwNde/6JiBVy0V8EbDF1lvR4jYpUwThOE0jyL > ZbzZe4N/B0qvB1OpLDkHrMVm9NPtDkfXdTtM2kRmo5955xtkK09yHF/v64kz7IKc > 2rM5pOwTR6HWE8RF2j9UujgPjw6nEUuY01TvIMGYzMfkJTI+sVjeDQfwnPG8tzIa > x4uLa4vTrBD5IaICjAmQiY69qqmt5Vg42G4latZVTYQLelvWQ774mXZfgfT/GtbT > RKzVwvYowWr/EBhtp7ix/1rWANTFiX0lxOPnRmUFvu8UJnyZhR0/EYbJYy1+jTt7 > O7hZMfAayQBsnVcSK1JC > =3Ubd > -----END PGP SIGNATURE----- > From mp6058@gmail.com Mon Jul 20 03:52:59 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0F83F7F55 for ; Mon, 20 Jul 2015 03:52:59 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 84583AC003 for ; Mon, 20 Jul 2015 01:52:55 -0700 (PDT) X-ASG-Debug-ID: 1437382372-04cb6c3b8ba0df0001-NocioJ Received: from mail-wg0-f51.google.com (mail-wg0-f51.google.com [74.125.82.51]) by cuda.sgi.com with ESMTP id uWjkV60jiAE9Tg5J (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 Jul 2015 01:52:53 -0700 (PDT) X-Barracuda-Envelope-From: mp6058@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.51 Received: by wgmn9 with SMTP id n9so125067454wgm.0 for ; Mon, 20 Jul 2015 01:52:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=h48E2sdZwB8OW6+08U9gkhYWCAkTd+9Tr25kKiggIZE=; b=Mh002Sdn4CI2GD4uc/9Q/LUNK6is2jmnycOfsmA5zDVz40o7ZWIFS8jgBEsqFhg7c0 zSXcRHpykvJmlK5Sy8AqYTQie8B1RVPIOEACz+hoF7198+hRhkbnWNKez1cT5s3iUGWM sXCycO7u8+DPz6BgJZZE+1UxbK4Sz3cLQN0OeEofb768lcLOMzWzL9W5C6/K8lvqsHqB 0ktCu9FtMzrYrnXy4T2eqID5eiWAMargW9nYW/J5HLxLg+B5YUoUvc3TsAQGaKGFTAYr +h1Af6n83Oig1QKH18Ij+3LJYRG2aSJTc8ZJtsUakXfxfZnoeg1CnyKjdGRRIR0jGGQ9 CTyQ== X-Received: by 10.181.13.241 with SMTP id fb17mr20033333wid.13.1437382371768; Mon, 20 Jul 2015 01:52:51 -0700 (PDT) Received: from [192.168.1.16] ([94.76.9.49]) by smtp.googlemail.com with ESMTPSA id k2sm10751256wif.4.2015.07.20.01.52.47 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Jul 2015 01:52:51 -0700 (PDT) Message-ID: <55ACB6D6.2000100@gmail.com> Date: Mon, 20 Jul 2015 11:52:38 +0300 From: Martin Papik User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Leslie Rhorer CC: xfs@oss.sgi.com Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> <55ACABD7.8000500@gmail.com> <55ACB2BD.6050601@mygrande.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55ACB2BD.6050601@mygrande.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: mail-wg0-f51.google.com[74.125.82.51] X-Barracuda-Start-Time: 1437382373 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20900 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Just wanted to make sure since I didn't catch any mention of these checks. And based on your thoroughness I assume you ran memtest after the ram replacement. What I'd try next in your situation is to boot a different version of the kernel (possibly a different distro) and see if the errors are the same, I'd try something bootable from a DVD or a USB stick. What do you think? On 07/20/2015 11:35 AM, Leslie Rhorer wrote: > On 7/20/2015 3:05 AM, Martin Papik wrote: > > Since you've already found one HW related fault, would you consider > booting into memtest for a couple of passes just to be on the safe > side. > >> I did that after confirming the one stick of memory was bad. >> Twice. I got over 20,000 errors on the bad stick, and 0 on the >> good one. I also swapped the locations on the motherboard, and >> the bad stick still failed while the good one passed 100%. > > And did you by any chance look at SMART if applicable and possibly > running a test on the drives. > >> Yes. SMART found no errors, but think about it. Every time tar >> tries to create a directory when untarring that file in that >> location, the file system croaks when it tries to create a >> directory. Not when reading and not when writing other than when >> it creates a directory. When I create the directory manualy, the >> process quits failing at that point and fails later on during a >> different directory create. The array remains intact when >> reading, and dmesg shows no drive errors. I've re-synced the >> array, which reads every byte on all 8 drives without a single >> mismatch - several times. To my knowledge, no read has ever >> failed except after the filesystem goes offline. I thought >> reads were failing during the CRC checks, but that was a red >> herring. > > Another test I sometimes do when I'm unsure about disks is "cat > /dev/sda > /dev/null" (i.e. a whole disk read test) > >> echo repair > /sys/block/md0/md/sync_action reads not one drive, >> but every byte on all 8 drives. > > and see (dmesg) if any errors show up, unless > >> 'Nary one, and no mismatches. > > you're willing to run badblocks in a read-write nondestructive > mode. In my experience the read test or badblocks can be run > simultaneously with smartctl -t long. But as a start I'd look at > smartctl --all /dev/sd? and see if there are any bad signs. I hope > this helps. Good luck > > > On 07/20/2015 10:41 AM, Leslie Rhorer wrote: >>>> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>>>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer >>>>> wrote: >>>>>> >>>>>> I found the problem with md5sum (and probably nfs, as >>>>>> well). One of the memory modules in the server was bad. >>>>>> The problem with XFS persists. Every time tar tried to >>>>>> create the directory: >>>>> >>>>> Now you need to run xfs_repair. >>>> >>>> I do that every time the array implodes. It makes no >>>> difference. It never mentions cleaning the structure tar >>>> says needs cleaning, and the next time I run tar on that >>>> file, the filesystem craters. >>>> >>>> _______________________________________________ xfs mailing >>>> list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > >> > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCgAGBQJVrLbVAAoJELsEaSRwbVYr/JoQAKGcNBTtswnSJ9SYpBQMc8aO m2WQaHzLDPkSPLWYeWSGc3clPuf4FdP3A9bDcclCnVV/Ex0WJiCalYfa1Zqpnq5P BinRp1w/cbfTTazLspFT9ySuoloOqNXTPz0MB4uxRTnIDb3Hcahw0O6HhOuZixW3 ocaEOXqVs1cc4YzPwT4Z9aWBEX3ZutMvxNKM4VWT1m8aoRZ3eJMPUKHN04PDUKyT 4Mwilypg9R6r6iberZ9zVwFy0LerElg9Cb90AGLNpyGCutGbOZH7VsoBUTnAmh2E dz4uruFU0x8n87MQccXfSvZQIWG16UDxwjQjEiD4EHtRhYYTNVgq2V8ak94u8w99 0p5WG5+dEnVV0Qgjk2DaZy305LP+5oc2D9GkXJgGTFjMPVV3+9Tnq/XDlm2Hgxn8 hq2q0DoPDQVFMzNLxpGCJfuIdAO3o7z/1rjHpeP2Ol6pPw+hT8SQMehTBU4vMlcp SeZzg485rVtQrWtXVJaRhITAQWSvQxjm9QqLAMdon0oxdKAPZIOtQgr8oEGKgfr7 mknqFPon7sa0c4nAZT7DtTOS+OATbTnYAoUqIuxRf4NCD7dbFUQrccU4/peEE4/H SPzOfgOiAArOVZwWEc7JvydpcKqaEUzYb2KyzsGJFuJHZodrSTzXmUMg/Muc+iQ5 Ao/NeFe/1flevZ060ZEX =1/q4 -----END PGP SIGNATURE----- From yycvn@qdcl.com Mon Jul 20 06:12:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 071DF7F55 for ; Mon, 20 Jul 2015 06:12:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DBD57304043 for ; Mon, 20 Jul 2015 04:11:58 -0700 (PDT) X-ASG-Debug-ID: 1437390712-04cb6c3b8da4320001-NocioJ Received: from qdcl.com ([223.240.72.190]) by cuda.sgi.com with ESMTP id ULB3PiJvLSOZBOnH for ; Mon, 20 Jul 2015 04:11:56 -0700 (PDT) X-Barracuda-Envelope-From: yycvn@qdcl.com X-Barracuda-Apparent-Source-IP: 223.240.72.190 Received: from SKY-20150201SFT ([127.0.0.1]) by localhost via TCP with ESMTPA; Mon, 20 Jul 2015 19:11:20 +0800 MIME-Version: 1.0 From: Stephanie Sender: Stephanie To: xfs@oss.sgi.com Reply-To: Stephanie Date: 20 Jul 2015 19:11:20 +0800 Subject: =?utf-8?B?UmU6IEhvdyB0byBmaW5kIGEgbG9uZy10ZXJtIGJveCBhbmQgcGFja2luZyBzdXBwbGllciBpbiBDaGluYQ==?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?UmU6IEhvdyB0byBmaW5kIGEgbG9uZy10ZXJtIGJveCBhbmQgcGFja2luZyBzdXBwbGllciBpbiBDaGluYQ==?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: UNKNOWN[223.240.72.190] X-Barracuda-Start-Time: 1437390712 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20902 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150720111158.904BF12961A2@cuda.sgi.com> PGh0bWw+PGJvZHk+PFA+TXkgZGVhciBmcmllbmRzLDwvUD4NCjxQPkZvY3VzIElubm92YXRp b24gR2lmdHMgQ29tcGFueSBoYXMgb3ZlciAxMHllYXJzIHJpY2ggZXhwZXJpZW5jZSBpbiBn aWZ0cyBhbmQgcGFja2luZyBmaWVsZCwgd2UgbWFrZSBnaWZ0cyBwYWNraW5nIGZvciBtYW55 IGZhbW91cyBicmFuZHMsIHN1Y2ggYXMgSm9obm5pZSBXYWxrZXIsIEx1b2lzIFhJSUksJm5i c3A7IENyb3duIFJveWFsLCZuYnNwOyBNZXJjZWRlcywmbmJzcDsgTGV4dXMsIEhTQkMsIFB1 bWEs4oCm4oCmPEJSPkxldOKAmXMgaW50cm9kdWNlIG91cnNlbGYgdG8geW91IG5vdyE8L1A+ DQo8UD4mbmJzcDtNYWluIFByb2R1Y3RzIFJhbmdlOjxCUj4xLiBHaWZ0cyBib3ggYW5kIGhh dCBib3gsIHBhY2tpbmcgYm94LDxCUj4yLiBXYXRjaCBib3ggJmFtcDsgV2F0Y2ggd2luZGVy PEJSPjMuIEpld2VscnkgYm94PEJSPjQuIE9mZmljZSBhbmQgSG90ZWwgaXRlbXM8QlI+NS4g U3VpdGNhc2U8QlI+Ni4gV2luZSBib3g8QlI+Ny4gU3RvcmFnZSBib3ggYW5kIEhvdXNlaG9s ZCBpdGVtcywgZG9nIGJlZDxCUj44LiBEZXNrIG9yZ2FuaXplciBhbmQgbWFnYXppbmVyIGhv bGRlcjxCUj45LiBXaW5lIGJveCBhbmQgYWNjZXNzb3JpZXMgYW5kIGNvYXN0ZXI8QlI+MTAu IFBvcnRmb2xpbzwvUD4NCjxQPk1haW4gTWF0ZXJpYWxzIFJhbmdlOjxCUj4xLiBMZWF0aGVy OiZuYnNwOyBHZW51aW5lIGxlYXRoZXIsIFBVIGxlYXRoZXIsIGZhdXggbGVhdGhlcjxCUj4y LiBGYWJyaWM6IEZlbHQsIENhbnZhcywgVmVsdmV0LCBOeWxvbiwgTm9uLXdvdmVu4oCmPEJS PjMuIFBhcGVyOiBDYXJib2FyZCwgbGVhdGhlciBwYXBlcuKApjxCUj40LiBXb29kOiBTb2xp ZCB3b29kLCBNREYsIFBseXdvb2Q8L1A+DQo8UD5NYWluIEFkdmFudGFnZTo8QlI+MS4gUG9w dWxhciBhbmQgcGVyZmVjdCBkZXNpZ246IHdlIGhhdmUgc3BlY2lhbGl6ZWQgUiZhbXA7RCBk ZXB0LjxCUj4yLiBHb29kIE1hdGVyaWFsczpPdXIgcHVyY2hhc2UgZGVwdCB3aWxsIHN0cmlj dGx5IGNvbnRyb2wgdGhlIG1hdGVyaWFscyBxdWFsaXR5LjxCUj4zLiBIaWdoIHF1YWxpdHkt d2UgaGF2ZSBwcm9mZXNzaW9uYWwgUEQgYW5kIFFDIHRlYW0gdG8gcHJvZHVjZSBhbmQgY29u dHJvbCB0aGUgcXVhbGl0eTxCUj40LiBDb21wZXRpdGl2ZSBwcmljZS13ZSBhcmUgZmFjdG9y eS48QlI+NS4gQmVzdCBzZXJ2aWNlLXdlIGRvIGZvcmVpZ24gdHJhZGUgYnVzaW5lc3MgYWJv dXQgMTAgeWVhcnMsIHdlIGhhdmUgcHJvZmVzc2lvbmFsIHNhbGVzIGFuZCBzZXJ2aWNlIHRl YW0uPEJSPjYuIENvbnZlbmllbnQgYW5kIGZhc3QgZm9yd2FyZC1kbyBidXNpbmVzcyB3aXRo IHVzIGlzIGVhc3kgYW5kIHNhZmU8QlI+Ny4gUGF5bWVudCB0ZXJtczpUL1QuPC9QPg0KPFA+ SWYgeW91IGFyZSBpbnRlcmVzdCBpbiBvdXIgcHJvZHVjdHMsIHBsZWFzZSBjb250YWN0IHVz IGZlZWwgZnJlZSwgd2Ugd2lsbCBwcm92aWRlIG91ciBiZXN0IHNlcnZpY2UsIHByaWNlIGFu ZCBwcm9kdWN0cyB0byB5b3UhPC9QPg0KPFA+QmVzdCByZWdhcmRzLDxCUj5Zb3VycyA8QlI+ U3RlcGhhbmllPC9QPg0KPFA+Rm9jdXMgSW5ub3ZhdGlvbiBHaWZ0cyBDb21wYW55PEJSPlRl bDogODYtNzY5LTg1NzgxMzk1PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA4NTYzNjcwNjxCUj5GYXg6IDg2LTc2OS04NTc4MTM4 NTxCUj48L1A+PC9ib2R5PjwvaHRtbD4= From bfoster@redhat.com Mon Jul 20 06:17:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 057497F55 for ; Mon, 20 Jul 2015 06:17:55 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id D9F068F8035 for ; Mon, 20 Jul 2015 04:17:51 -0700 (PDT) X-ASG-Debug-ID: 1437391069-04cbb00f069d000001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 5VPO4Nh24o5rap6z (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 04:17:50 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 6A2D0A84; Mon, 20 Jul 2015 11:17:49 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KBHmna005416; Mon, 20 Jul 2015 07:17:48 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id D8E1B122E55; Mon, 20 Jul 2015 07:17:47 -0400 (EDT) Date: Mon, 20 Jul 2015 07:17:47 -0400 From: Brian Foster To: Leslie Rhorer Cc: Kris Rusocki , "Rhorer, Leslie" , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble Message-ID: <20150720111747.GA53450@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55AAF73A.4040903@mygrande.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437391070 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: > > I found the problem with md5sum (and probably nfs, as well). One of the > memory modules in the server was bad. The problem with XFS persists. Every > time tar tried to create the directory: > > /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 > > It would begin spitting out errors, starting with "Cannot mkdir: Structure > needs cleaning". At that point, XFS had shut down. I went into > /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket > 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ > and created the i386-11.1 directory by hand, and tar no longer starts > spitting out errors at that point, but it does start up again at > RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. > So is this untar problem a reliable reproducer? If so, here's what I would try to hopefully isolate a filesystem problem from something underneath: xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img mount /.../fileonrootfs.img /mnt/ ... and repeat the test on that mount using the original tarball (if it's on the associated fs, the version from the dump will have no data). This will create a metadata only dump of the original fs onto another storage device (e.g., whatever holds the root fs), restore the metadump to a file and mount it loopback. The resulting fs will not contain any file data, but will contain all of the metadata such as directory structure, etc. and is otherwise mountable and usable for experimental purposes. If the problem is in the filesystem or "above" (as in kernel, memory issue, etc.), the test should fail on this mount. If the problem is beneath the fs such as somewhere in the storage stack (assuming the rootfs storage stack is reliable), it probably shouldn't fail. Brian > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Mon Jul 20 06:46:52 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CDA327F55 for ; Mon, 20 Jul 2015 06:46:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 797018F8035 for ; Mon, 20 Jul 2015 04:46:52 -0700 (PDT) X-ASG-Debug-ID: 1437392810-04bdf00e915d4a0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KUBoTmKjPBFSK6Si (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 04:46:51 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 8B4961BD06E; Mon, 20 Jul 2015 11:46:50 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KBknh4000783; Mon, 20 Jul 2015 07:46:50 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 097AE122E55; Mon, 20 Jul 2015 07:46:48 -0400 (EDT) Date: Mon, 20 Jul 2015 07:46:48 -0400 From: Brian Foster To: Kuo Hugo Cc: Hugo Kuo , Eric Sandeen , Darrell Bishop , xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150720114648.GB53450@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> <20150713170158.GB50787@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437392811 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Sat, Jul 18, 2015 at 03:39:10AM +0800, Kuo Hugo wrote: > Hi all, > FYI, the top-posting here is making this thread increasingly difficult to follow. Please reply inline if you can. > We may hit this bug in OpenStack Swift : > Race condition quarantines valid objects > https://bugs.launchpad.net/swift/+bug/1451520 > > This race condition may cause the problem which Brain mentioned previously. > OpenStack community fixed this in Swift's code. Should it be a kernel bug > of XFS too ? > I don't know much about the Swift bug. A BUG() or crash in the kernel is generally always a kernel bug, regardless of what userspace is doing. It certainly could be that whatever userspace is doing to trigger the kernel bug is a bug in the userspace application, but either way it shouldn't cause the kernel to crash. By the same token, if Swift is updated to fix the aforementioned bug and the kernel crash no longer reproduces, that doesn't necessarily mean the kernel bug is fixed (just potentially hidden). Were you able to track down the directory inode mentioned in the previous message? Is it some kind of internal directory used by the application (e.g., perhaps related to the quarantine mechanism mentioned in the bug)? Brian > Thanks for all your efforts. > Hugo > > > 2015-07-14 2:10 GMT+08:00 Kuo Hugo : > > > Hi Brain, > > > > The sdb is mounted on /srv/node/d224 on this server. That's one of three > > disks that the process was making I/O on it. > > Those openfiles on /srv/node/d224 were made by the process to > > storing/deleting data at that moment while the kernel panic appeared. > > > > ``` > > 36 ffff8808703ed6c0 ffff88086fd65540 ffff8805eb03ed88 REG > > /srv/node/d205/quarantined/objects/cd1d68f515006d443a54ff4f658091bc- > > a114bba1449b45238abf38dc741d7c27/1436254020.89801.ts 37 ffff8810718343c0 > > ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 > > ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/quarantined/objects/ > > b146865bf8034bfc42570b747c341b32/1436266042.57775.ts 39 ffff880871cb03c0 > > ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/tmp/tmpSpnrHg 40 > > ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR > > /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32 > > ``` > > > > I'll check the dir location of the inode number. > > > > Nice information. > > > > Thanks // Hugo > > > > 2015-07-14 1:01 GMT+08:00 Brian Foster : > > > >> On Mon, Jul 13, 2015 at 10:06:39PM +0800, Kuo Hugo wrote: > >> > Hi Brain, > >> > > >> > Sorry for the wrong file in previous message. I believe this the right > >> one. > >> > > >> > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko.debug > >> > > >> > > >> /usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko.debug > >> > > >> > MD5 : 27829c9c55f4f5b095d29a7de7c27254 > >> > > >> > >> Yes, that works. I have a few bits of information so far, but nothing > >> obvious to me as to what caused the problem. Some info: > >> > >> - The crash is indeed at xfs_dir2_sf_get_inumber(): > >> > >> /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/fs/xfs/xfs_dir2_sf.h: > >> 101 > >> 0xffffffffa0362d60 : cmpb $0x0,0x1(%r12) > >> ... > >> > >> - %r12 above has a value of 0 and is set as follows: > >> > >> /usr/src/debug/kernel-2.6.32-504.23.4.el6/linux-2.6.32-504.23.4.el6.x86_64/fs/xfs/xfs_dir2_sf.c: > >> 727 > >> 0xffffffffa0362b11 : mov 0x50(%rdi),%r12 > >> > >> ... which is the sfp pointer assignment in the getdents function: > >> > >> sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data; > >> > >> This implies a NULL if_data. > >> > >> - The backtrace lists a couple of inodes on the stack in this frame. I'm > >> not sure why, but one looks like a valid directory and the other looks > >> bogus. The valid inode has an inode number of 13668207561. > >> > >> - The fsname for this inode is "sdb." > >> > >> - The inode does appear to have a non-NULL if_data: > >> > >> ... > >> if_u1 = { > >> if_extents = 0xffff88084feaf5c0, > >> if_ext_irec = 0xffff88084feaf5c0, > >> if_data = 0xffff88084feaf5c0 "\004" > >> }, > >> ... > >> > >> So it's not totally clear what's going on there. It might be interesting > >> to see what directory this refers to, if it still exists on the sdb fs. > >> For example, is it an external directory or some kind of internal > >> directory created by the application? You could use something like the > >> following to try and locate the directory based on inode number: > >> > >> find -inum 13668207561 > >> > >> Brian > >> > >> > Thanks // Hugo > >> > ​ > >> > > >> > 2015-07-13 20:52 GMT+08:00 Brian Foster : > >> > > >> > > On Fri, Jul 10, 2015 at 01:36:41PM +0800, Kuo Hugo wrote: > >> > > > Hi Brain, > >> > > > > >> > > > Is this the file which you need ? > >> > > > > >> > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/xfs.ko > >> > > > > >> > > > $> modinfo xfs > >> > > > > >> > > > filename: > >> /lib/modules/2.6.32-504.23.4.el6.x86_64/kernel/fs/xfs/xfs.ko > >> > > > license: GPL > >> > > > description: SGI XFS with ACLs, security attributes, large > >> block/inode > >> > > > numbers, no debug enabled > >> > > > author: Silicon Graphics, Inc. > >> > > > srcversion: 0C1B17926BDDA4F121479EE > >> > > > depends: exportfs > >> > > > vermagic: 2.6.32-504.23.4.el6.x86_64 SMP mod_unload modversion > >> > > > > >> > > > >> > > No, this isn't the debug version. We need the one from the debug > >> package > >> > > that was installed (/usr/lib/debug?). > >> > > > >> > > Brian > >> > > > >> > > > Thanks // Hugo > >> > > > ​ > >> > > > > >> > > > 2015-07-10 2:32 GMT+08:00 Brian Foster : > >> > > > > >> > > > > On Fri, Jul 10, 2015 at 12:40:00AM +0800, Kuo Hugo wrote: > >> > > > > > Hi Brain, > >> > > > > > > >> > > > > > There you go. > >> > > > > > > >> > > > > > https://cloud.swiftstack.com/v1/AUTH_hugo/public/vmlinux > >> > > > > > > >> > > > > > >> > > > >> https://cloud.swiftstack.com/v1/AUTH_hugo/public/System.map-2.6.32-504.23.4.el6.x86_64 > >> > > > > > > >> > > > > > $ md5sum vmlinux > >> > > > > > 82aaa694a174c0a29e78c05e73adf5d8 vmlinux > >> > > > > > > >> > > > > > Yes, I can read it with this vmlinux image. Put all files > >> > > > > > (vmcore,vmlinux,System.map) in a folder and run $crash vmlinux > >> vmcore > >> > > > > > > >> > > > > > >> > > > > Thanks, I can actually load that up now. Note that we'll probably > >> need > >> > > > > the modules and whatnot (xfs.ko) also to be able to look at any > >> XFS > >> > > > > bits. It might be easiest to just tar up and compress whatever > >> > > directory > >> > > > > structure has the debug-enabled vmlinux and all the kernel > >> modules. > >> > > > > Thanks. > >> > > > > > >> > > > > Brian > >> > > > > > >> > > > > > Hugo > >> > > > > > ​ > >> > > > > > > >> > > > > > 2015-07-09 23:18 GMT+08:00 Brian Foster : > >> > > > > > > >> > > > > > > On Thu, Jul 09, 2015 at 09:20:00PM +0800, Kuo Hugo wrote: > >> > > > > > > > Hi Brian, > >> > > > > > > > > >> > > > > > > > *Operating System Version:* > >> > > > > > > > > >> Linux-2.6.32-504.23.4.el6.x86_64-x86_64-with-centos-6.6-Final > >> > > > > > > > > >> > > > > > > > *NODE 1* > >> > > > > > > > > >> > > > > > > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore > >> > > > > > > > > >> > > > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg.txt > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > *NODE 2* > >> > > > > > > > > >> > > > > > > > > >> > > https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore_r2obj02 > >> > > > > > > > > >> > > > > > > > >> > > > > > >> > > > >> https://cloud.swiftstack.com/v1/AUTH_burton/brtnswift/vmcore-dmesg_r2obj02.txt > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > Any thoughts would be appreciate > >> > > > > > > > > >> > > > > > > > >> > > > > > > I'm not able to fire up crash with these core files and the > >> kernel > >> > > > > debug > >> > > > > > > info from the following centos kernel debuginfo package: > >> > > > > > > > >> > > > > > > kernel-debuginfo-2.6.32-504.23.4.el6.centos.plus.x86_64.rpm > >> > > > > > > > >> > > > > > > It complains about a version mismatch between the vmlinux and > >> core > >> > > > > file. > >> > > > > > > I'm no crash expert... are you sure the cores above > >> correspond to > >> > > this > >> > > > > > > kernel? Does crash load up for you on said box if you run > >> something > >> > > > > like > >> > > > > > > the following? > >> > > > > > > > >> > > > > > > crash /usr/lib/debug/lib/modules/.../vmlinux vmcore > >> > > > > > > > >> > > > > > > Note that you might need to install the above kernel-debuginfo > >> > > package > >> > > > > > > to get the debug (vmlinux) file. If so, could you also upload > >> that > >> > > > > > > debuginfo rpm somewhere? > >> > > > > > > > >> > > > > > > Brian > >> > > > > > > > >> > > > > > > > Thanks // Hugo > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > 2015-07-09 20:51 GMT+08:00 Brian Foster >> >: > >> > > > > > > > > >> > > > > > > > > On Thu, Jul 09, 2015 at 06:57:55PM +0800, Kuo Hugo wrote: > >> > > > > > > > > > Hi Folks, > >> > > > > > > > > > > >> > > > > > > > > > As the results of 32 disks with xfs_repair -n seems no > >> any > >> > > error > >> > > > > > > shows > >> > > > > > > > > up. > >> > > > > > > > > > We currently tried to deploy CentOS 6.6 for testing. > >> (The > >> > > > > previous > >> > > > > > > kernel > >> > > > > > > > > > panic was came from Ubuntu). > >> > > > > > > > > > The CentOS nodes encountered kernel panic with same > >> daemon > >> > > but > >> > > > > the > >> > > > > > > > > problem > >> > > > > > > > > > may a bit differ. > >> > > > > > > > > > > >> > > > > > > > > > - It was broken on > >> xfs_dir2_sf_get_parent_ino+0xa/0x20 in > >> > > > > Ubuntu. > >> > > > > > > > > > - Here’s the log in CentOS. It’s broken on > >> > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > I'd venture to guess it's the same behavior here. The > >> previous > >> > > > > kernel > >> > > > > > > > > had a callback for the parent inode number that was > >> called via > >> > > > > > > > > xfs_dir2_sf_getdents(). Taking a look at a 6.6 kernel, it > >> has a > >> > > > > static > >> > > > > > > > > inline here instead. > >> > > > > > > > > > >> > > > > > > > > > <1>BUG: unable to handle kernel NULL pointer > >> dereference at > >> > > > > > > > > 0000000000000001 > >> > > > > > > > > > <1>IP: [] > >> xfs_dir2_sf_getdents+0x2a0/0x3a0 > >> > > > > [xfs] > >> > > > > > > > > > <4>PGD 1072327067 PUD 1072328067 PMD 0 > >> > > > > > > > > > <4>Oops: 0000 [#1] SMP > >> > > > > > > > > > <4>last sysfs file: > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > >> > > > > > >> > > > >> /sys/devices/pci0000:80/0000:80:03.2/0000:83:00.0/host10/port-10:1/expander-10:1/port-10:1:16/end_device-10:1:16/target10:0:25/10:0:25:0/block/sdz/queue/rotational > >> > > > > > > > > > <4>CPU 17 > >> > > > > > > > > > <4>Modules linked in: xt_conntrack tun xfs exportfs > >> > > > > iptable_filter > >> > > > > > > > > > ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 > >> > > nf_conntrack > >> > > > > > > > > > nf_defrag_ipv4 ip_tables ip_vs ipv6 libcrc32c iTCO_wdt > >> > > > > > > > > > iTCO_vendor_support ses enclosure igb i2c_algo_bit > >> sb_edac > >> > > > > edac_core > >> > > > > > > > > > i2c_i801 i2c_core sg shpchp lpc_ich mfd_core ixgbe dca > >> ptp > >> > > > > pps_core > >> > > > > > > > > > mdio power_meter acpi_ipmi ipmi_si ipmi_msghandler ext4 > >> jbd2 > >> > > > > mbcache > >> > > > > > > > > > sd_mod crc_t10dif mpt3sas scsi_transport_sas raid_class > >> > > xhci_hcd > >> > > > > ahci > >> > > > > > > > > > wmi dm_mirror dm_region_hash dm_log dm_mod [last > >> unloaded: > >> > > > > > > > > > scsi_wait_scan] > >> > > > > > > > > > <4> > >> > > > > > > > > > <4>Pid: 4454, comm: swift-object-se Not tainted > >> > > > > > > > > > 2.6.32-504.23.4.el6.x86_64 #1 Silicon Mechanics Storform > >> > > > > > > > > > R518.v5P/X10DRi-T4+ > >> > > > > > > > > > <4>RIP: 0010:[] [] > >> > > > > > > > > > xfs_dir2_sf_getdents+0x2a0/0x3a0 [xfs] > >> > > > > > > > > > <4>RSP: 0018:ffff880871f6de18 EFLAGS: 00010202 > >> > > > > > > > > > <4>RAX: 0000000000000000 RBX: 0000000000000004 RCX: > >> > > > > 0000000000000000 > >> > > > > > > > > > <4>RDX: 0000000000000001 RSI: 0000000000000000 RDI: > >> > > > > 00007faa74006203 > >> > > > > > > > > > <4>RBP: ffff880871f6de68 R08: 000000032eb04bc9 R09: > >> > > > > 0000000000000004 > >> > > > > > > > > > <4>R10: 0000000000008030 R11: 0000000000000246 R12: > >> > > > > 0000000000000000 > >> > > > > > > > > > <4>R13: 0000000000000002 R14: ffff88106eff7000 R15: > >> > > > > ffff8808715b4580 > >> > > > > > > > > > <4>FS: 00007faa85425700(0000) GS:ffff880028360000(0000) > >> > > > > > > > > knlGS:0000000000000000 > >> > > > > > > > > > <4>CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > >> > > > > > > > > > <4>CR2: 0000000000000001 CR3: 0000001072325000 CR4: > >> > > > > 00000000001407e0 > >> > > > > > > > > > <4>DR0: 0000000000000000 DR1: 0000000000000000 DR2: > >> > > > > 0000000000000000 > >> > > > > > > > > > <4>DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > >> > > > > 0000000000000400 > >> > > > > > > > > > <4>Process swift-object-se (pid: 4454, threadinfo > >> > > > > ffff880871f6c000, > >> > > > > > > > > > task ffff880860f18ab0) > >> > > > > > > > > > <4>Stack: > >> > > > > > > > > > <4> ffff880871f6de28 ffffffff811a4bb0 ffff880871f6df38 > >> > > > > > > ffff880874749cc0 > >> > > > > > > > > > <4> 0000000100000103 ffff8802381f8c00 > >> ffff880871f6df38 > >> > > > > > > > > ffff8808715b4580 > >> > > > > > > > > > <4> 0000000000000082 ffff8802381f8d88 > >> ffff880871f6dec8 > >> > > > > > > > > ffffffffa035ab31 > >> > > > > > > > > > <4>Call Trace: > >> > > > > > > > > > <4> [] ? filldir+0x0/0xe0 > >> > > > > > > > > > <4> [] xfs_readdir+0xe1/0x130 [xfs] > >> > > > > > > > > > <4> [] ? filldir+0x0/0xe0 > >> > > > > > > > > > <4> [] xfs_file_readdir+0x39/0x50 > >> [xfs] > >> > > > > > > > > > <4> [] vfs_readdir+0xc0/0xe0 > >> > > > > > > > > > <4> [] ? final_putname+0x26/0x50 > >> > > > > > > > > > <4> [] sys_getdents+0x89/0xf0 > >> > > > > > > > > > <4> [] system_call_fastpath+0x16/0x1b > >> > > > > > > > > > <4>Code: 01 00 00 00 48 c7 c6 38 6b 3a a0 48 8b 7d c0 > >> ff 55 > >> > > b8 > >> > > > > 85 c0 > >> > > > > > > > > > 0f 85 af 00 00 00 49 8b 37 e9 ec fd ff ff 66 0f 1f 84 > >> 00 00 > >> > > 00 > >> > > > > 00 00 > >> > > > > > > > > > <41> 80 7c 24 01 00 0f 84 9c 00 00 00 45 0f b6 44 24 03 > >> 41 > >> > > 0f b6 > >> > > > > > > > > > <1>RIP [] > >> xfs_dir2_sf_getdents+0x2a0/0x3a0 > >> > > > > [xfs] > >> > > > > > > > > > <4> RSP > >> > > > > > > > > > <4>CR2: 0000000000000001 > >> > > > > > > > > > > >> > > > > > > > > ... > >> > > > > > > > > > > >> > > > > > > > > > I’ve got the vmcore dump from operator. Does vmcore > >> help for > >> > > > > > > > > > troubleshooting kind issue ? > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > Hmm, well it couldn't hurt. Is the vmcore based on this > >> 6.6 > >> > > > > kernel? Can > >> > > > > > > > > you provide the exact kernel version and post the vmcore > >> > > somewhere? > >> > > > > > > > > > >> > > > > > > > > Brian > >> > > > > > > > > > >> > > > > > > > > > Thanks // Hugo > >> > > > > > > > > > ​ > >> > > > > > > > > > > >> > > > > > > > > > 2015-06-18 22:59 GMT+08:00 Eric Sandeen < > >> sandeen@sandeen.net > >> > > >: > >> > > > > > > > > > > >> > > > > > > > > > > On 6/18/15 9:29 AM, Kuo Hugo wrote: > >> > > > > > > > > > > >>- Have you tried an 'xfs_repair -n' of the affected > >> > > > > filesystem? > >> > > > > > > Note > >> > > > > > > > > > > that -n will report problems only and prevent any > >> > > modification > >> > > > > by > >> > > > > > > > > repair. > >> > > > > > > > > > > > > >> > > > > > > > > > > > *We might to to xfs_repair if we can address which > >> disk > >> > > > > causes > >> > > > > > > the > >> > > > > > > > > > > issue. * > >> > > > > > > > > > > > >> > > > > > > > > > > If you do, please save the output, and if it finds > >> > > anything, > >> > > > > please > >> > > > > > > > > > > provide the output in this thread. > >> > > > > > > > > > > > >> > > > > > > > > > > Thanks, > >> > > > > > > > > > > -Eric > >> > > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > _______________________________________________ > >> > > > > > > > > > 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 jtulak@redhat.com Mon Jul 20 07:57:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 312347F55 for ; Mon, 20 Jul 2015 07:57:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 204228F8033 for ; Mon, 20 Jul 2015 05:57:12 -0700 (PDT) X-ASG-Debug-ID: 1437397031-04cb6c3b8da7540001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id sYP94wjyHmegaAO0 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 05:57:11 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id D87CFB6693; Mon, 20 Jul 2015 12:57:10 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KCv5JN000793; Mon, 20 Jul 2015 08:57:10 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: david@fromorbit.com, Jan Tulak Subject: [PATCH v2 3/4] xfsprogs: Use glibtoolize on osx Date: Mon, 20 Jul 2015 14:56:57 +0200 X-ASG-Orig-Subj: [PATCH v2 3/4] xfsprogs: Use glibtoolize on osx Message-Id: <1437397018-12864-4-git-send-email-jtulak@redhat.com> In-Reply-To: <1437397018-12864-1-git-send-email-jtulak@redhat.com> References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437397031 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 OS X doesn't have libtoolize binary by default, and the available$ ports are named "glibtoolize". Autodetect this issue. Signed-off-by: Jan Tulak --- Makefile | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3da4d5d..4abaaac 100644 --- a/Makefile +++ b/Makefile @@ -52,6 +52,14 @@ ifneq ("$(XGETTEXT)","") TOOL_SUBDIRS += po endif +# If we are on OS X, use glibtoolize from MacPorts, as OS X doesn't have +# libtoolize binary itself. +LIBTOOLIZE_TEST=$(shell libtoolize --version >/dev/null 2>&1 && echo found) +LIBTOOLIZE_BIN=libtoolize +ifneq ("$(LIBTOOLIZE_TEST)","found") +LIBTOOLIZE_BIN=glibtoolize +endif + # include is listed last so it is processed last in clean rules. SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) include @@ -85,13 +93,14 @@ else clean: # if configure hasn't run, nothing to clean endif + # Recent versions of libtool require the -i option for copying auxiliary # files (config.sub, config.guess, install-sh, ltmain.sh), while older # versions will copy those files anyway, and don't understand -i. -LIBTOOLIZE_INSTALL = `libtoolize -n -i >/dev/null 2>/dev/null && echo -i` +LIBTOOLIZE_INSTALL = `$(LIBTOOLIZE_BIN) -n -i >/dev/null 2>/dev/null && echo -i` configure: - libtoolize -c $(LIBTOOLIZE_INSTALL) -f + $(LIBTOOLIZE_BIN) -c $(LIBTOOLIZE_INSTALL) -f cp include/install-sh . aclocal -I m4 autoconf -- 2.4.3 From jtulak@redhat.com Mon Jul 20 07:57:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A25177F55 for ; Mon, 20 Jul 2015 07:57:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3234EAC005 for ; Mon, 20 Jul 2015 05:57:09 -0700 (PDT) X-ASG-Debug-ID: 1437397027-04cbb00f089f6f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id uKKdcaKEtGStWwWo (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 05:57:08 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 5F069BBF7D; Mon, 20 Jul 2015 12:57:07 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KCv5JK000793; Mon, 20 Jul 2015 08:57:06 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: david@fromorbit.com, Jan Tulak Subject: [PATCH v2 0/4] xfsprogs: Partial OS X support Date: Mon, 20 Jul 2015 14:56:54 +0200 X-ASG-Orig-Subj: [PATCH v2 0/4] xfsprogs: Partial OS X support Message-Id: <1437397018-12864-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437397028 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 These patches fixes the current broken OS X support of xfsprogs. The goal is to make xfsprogs buildable on current OS X Yosemite, and to have a working mkfs.xfs. The usage is indeed limited but "it works". This v2 fixes known issues from the first patchset and builds entire xfsprogs. Jan Tulak (4): xfsprogs: Prefix LIST_... macros to XFS_LIST_... xfsprogs: Don't Make .po files with gettext disabled xfsprogs: Use glibtoolize on osx xfsprogs: OS X partial support Makefile | 19 +++++- configure.ac | 1 + fsr/xfs_fsr.c | 20 +++++- include/bitops.h | 2 + include/builddefs.in | 6 +- include/darwin.h | 168 ++++++++++++++++++++++++++++++++++++++++++++------ include/list.h | 6 +- io/readdir.c | 4 ++ libdisk/fstype.c | 1 + libhandle/Makefile | 4 ++ libxcmd/paths.c | 2 +- m4/package_libcdev.m4 | 14 +++++ repair/phase6.c | 2 +- 13 files changed, 218 insertions(+), 31 deletions(-) -- 2.4.3 From jtulak@redhat.com Mon Jul 20 07:57:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DDD1F7F55 for ; Mon, 20 Jul 2015 07:57:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8442CAC007 for ; Mon, 20 Jul 2015 05:57:09 -0700 (PDT) X-ASG-Debug-ID: 1437397028-04bdf00e915eef0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id H6Tcc1okttZpSJBV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 05:57:08 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 79924359A5E; Mon, 20 Jul 2015 12:57:08 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KCv5JL000793; Mon, 20 Jul 2015 08:57:07 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: david@fromorbit.com, Jan Tulak Subject: [PATCH v2 1/4] xfsprogs: Prefix LIST_... macros to XFS_LIST_... Date: Mon, 20 Jul 2015 14:56:55 +0200 X-ASG-Orig-Subj: [PATCH v2 1/4] xfsprogs: Prefix LIST_... macros to XFS_LIST_... Message-Id: <1437397018-12864-2-git-send-email-jtulak@redhat.com> In-Reply-To: <1437397018-12864-1-git-send-email-jtulak@redhat.com> References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437397028 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 OS X has some conflicting LIST_ macros, so prefix the XFS ones. Signed-off-by: Jan Tulak --- include/list.h | 6 +++--- repair/phase6.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/list.h b/include/list.h index 3f087a4..7e9f748 100644 --- a/include/list.h +++ b/include/list.h @@ -27,10 +27,10 @@ struct list_head { struct list_head *prev; }; -#define LIST_HEAD_INIT(name) { &(name), &(name) } +#define XFS_LIST_HEAD_INIT(name) { &(name), &(name) } -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) +#define XFS_LIST_HEAD(name) \ + struct list_head name = XFS_LIST_HEAD_INIT(name) #define INIT_LIST_HEAD(list) list_head_init(list) static inline void list_head_init(struct list_head *list) diff --git a/repair/phase6.c b/repair/phase6.c index 9a5cba7..87732e1 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -49,7 +49,7 @@ typedef struct dotdot_update { int ino_offset; } dotdot_update_t; -static LIST_HEAD(dotdot_update_list); +static XFS_LIST_HEAD(dotdot_update_list); static int dotdot_update; static void -- 2.4.3 From jtulak@redhat.com Mon Jul 20 07:57:13 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E16397F55 for ; Mon, 20 Jul 2015 07:57:13 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id AC4C68F8033 for ; Mon, 20 Jul 2015 05:57:10 -0700 (PDT) X-ASG-Debug-ID: 1437397029-04bdf00e905eef0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cbb4cg46HGNA9tY8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 05:57:09 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id A952729321B; Mon, 20 Jul 2015 12:57:09 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KCv5JM000793; Mon, 20 Jul 2015 08:57:08 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: david@fromorbit.com, Jan Tulak Subject: [PATCH v2 2/4] xfsprogs: Don't Make .po files with gettext disabled Date: Mon, 20 Jul 2015 14:56:56 +0200 X-ASG-Orig-Subj: [PATCH v2 2/4] xfsprogs: Don't Make .po files with gettext disabled Message-Id: <1437397018-12864-3-git-send-email-jtulak@redhat.com> In-Reply-To: <1437397018-12864-1-git-send-email-jtulak@redhat.com> References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437397029 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 "po" target is added only if gettext binary is found. Without this patch, Make tried to build the target even with --enable-gettext=no configure option, which led to a failing build. Signed-off-by: Jan Tulak --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6d6803b..3da4d5d 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,11 @@ HDR_SUBDIRS = include libxfs DLIB_SUBDIRS = libxlog libxcmd libhandle libdisk LIB_SUBDIRS = libxfs $(DLIB_SUBDIRS) TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ - mdrestore repair rtcp m4 man doc po debian + mdrestore repair rtcp m4 man doc debian + +ifneq ("$(XGETTEXT)","") +TOOL_SUBDIRS += po +endif # include is listed last so it is processed last in clean rules. SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) include -- 2.4.3 From jtulak@redhat.com Mon Jul 20 07:57:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2362F7F6C for ; Mon, 20 Jul 2015 07:57:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 128B7304048 for ; Mon, 20 Jul 2015 05:57:14 -0700 (PDT) X-ASG-Debug-ID: 1437397032-04cbb00f069f6f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CpQvk6hZHFngvlhN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 05:57:12 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 1EEC3AB849; Mon, 20 Jul 2015 12:57:12 +0000 (UTC) Received: from jtulak-t430.brq.redhat.com (jtulak.brq.redhat.com [10.34.1.5]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KCv5JO000793; Mon, 20 Jul 2015 08:57:11 -0400 From: Jan Tulak To: xfs@oss.sgi.com Cc: david@fromorbit.com, Jan Tulak Subject: [PATCH v2 4/4] xfsprogs: OS X partial support Date: Mon, 20 Jul 2015 14:56:58 +0200 X-ASG-Orig-Subj: [PATCH v2 4/4] xfsprogs: OS X partial support Message-Id: <1437397018-12864-5-git-send-email-jtulak@redhat.com> In-Reply-To: <1437397018-12864-1-git-send-email-jtulak@redhat.com> References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437397032 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This patch introduces changes to support current OS X (10.10 Yosemite). The previous OS X code base is about 4 years old and both OS X and XFS changed, so there had to be done some work to make it compilable. - xfs_repair currently has only a dummy timer implementation - fsr and io, as tools working with a mounted XFS, are really not expected to work - lots of dummy functions - Various other edits - some API translations, some missing defines. The code compiles using Apple's clang, although it throws some warnings. Some of them are complaints about deprecated calls, some are false-positives and there are also some incompatible type assignments/comparisons. Fixing these looks like an ugly work, but fortunately, incompatible assignments are only in the tools not expected to work anyway (fsr and io). Signed-off-by: Jan Tulak --- configure.ac | 1 + fsr/xfs_fsr.c | 20 +++++- include/bitops.h | 2 + include/builddefs.in | 6 +- include/darwin.h | 168 ++++++++++++++++++++++++++++++++++++++++++++------ io/readdir.c | 4 ++ libdisk/fstype.c | 1 + libhandle/Makefile | 4 ++ libxcmd/paths.c | 2 +- m4/package_libcdev.m4 | 14 +++++ 10 files changed, 198 insertions(+), 24 deletions(-) diff --git a/configure.ac b/configure.ac index fe991cc..8f966a6 100644 --- a/configure.ac +++ b/configure.ac @@ -113,6 +113,7 @@ AC_HAVE_PREADV AC_HAVE_SYNC_FILE_RANGE AC_HAVE_BLKID_TOPO($enable_blkid) AC_HAVE_READDIR +AC_HAVE_FLS AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([char *]) diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c index efc17a8..a069bd7 100644 --- a/fsr/xfs_fsr.c +++ b/fsr/xfs_fsr.c @@ -25,16 +25,22 @@ #include #include -#include -#include #include #include #include #include -#include #include #include +#ifndef PLATFORM_HAS_NO_MALLOC_H +# include +#endif +#ifndef PLATFORM_HAS_NO_MNTENT_H +# include +#endif +#ifndef PLATFORM_HAS_NO_VFS_H +# include +#endif #ifndef XFS_XFLAG_NODEFRAG #define XFS_XFLAG_NODEFRAG 0x00002000 /* src dependancy, remove later */ @@ -43,6 +49,14 @@ #define _PATH_FSRLAST "/var/tmp/.fsrlast_xfs" #define _PATH_PROC_MOUNTS "/proc/mounts" +#ifdef USE_DUMMY_XATTR + /* OS X has fsetxattr with different number of arguments. + * Because it won't work anyway (no fstab/mtab and so on), + * hijack the call to a dummy function so it can at least + * compile. + */ +# define fsetxattr(a,b,c,d,e) dummy_fsetxattr(a,b,c,d,e) +#endif char *progname; diff --git a/include/bitops.h b/include/bitops.h index 930f64a..44599a7 100644 --- a/include/bitops.h +++ b/include/bitops.h @@ -5,6 +5,7 @@ * fls: find last bit set. */ +#ifndef HAVE_FLS static inline int fls(int x) { int r = 32; @@ -32,6 +33,7 @@ static inline int fls(int x) } return r; } +#endif /* HAVE_FLS */ static inline int fls64(__u64 x) { diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..9feb096 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -104,6 +104,7 @@ HAVE_FIEMAP = @have_fiemap@ HAVE_PREADV = @have_preadv@ HAVE_SYNC_FILE_RANGE = @have_sync_file_range@ HAVE_READDIR = @have_readdir@ +HAVE_FLS = @have_fls@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl @@ -119,7 +120,7 @@ ifeq ($(PKG_PLATFORM),gnukfreebsd) PCFLAGS = -D_GNU_SOURCE $(GCCFLAGS) endif ifeq ($(PKG_PLATFORM),darwin) -PCFLAGS = -traditional-cpp $(GCCFLAGS) +PCFLAGS = $(GCCFLAGS) DEPENDFLAGS = -D__APPLE__ endif ifeq ($(PKG_PLATFORM),irix) @@ -131,6 +132,9 @@ PLDLIBS = -L/usr/local/lib -lintl PCFLAGS = -I/usr/local/include $(GCCFLAGS) DEPENDFLAGS = -D__FreeBSD__ endif +ifeq ($(HAVE_FLS),yes) +LCFLAGS+= -DHAVE_FLS +endif GCFLAGS = $(OPTIMIZER) $(DEBUG) \ -DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \ diff --git a/include/darwin.h b/include/darwin.h index 30f0052..0d82872 100644 --- a/include/darwin.h +++ b/include/darwin.h @@ -18,17 +18,26 @@ #ifndef __XFS_DARWIN_H__ #define __XFS_DARWIN_H__ +#define PLATFORM_HAS_NO_MALLOC_H +#define PLATFORM_HAS_NO_MNTENT_H +#define PLATFORM_HAS_NO_VFS_H + #include #include #include #include #include #include +#include +#include +#include +#include +#include #include -#define __BYTE_ORDER BYTE_ORDER -#define __BIG_ENDIAN BIG_ENDIAN -#define __LITTLE_ENDIAN LITTLE_ENDIAN +#define __BYTE_ORDER BYTE_ORDER +#define __BIG_ENDIAN BIG_ENDIAN +#define __LITTLE_ENDIAN LITTLE_ENDIAN #include # ifndef SYS_fsctl @@ -68,45 +77,37 @@ static __inline__ void platform_getoptreset(void) static __inline__ int platform_uuid_compare(uuid_t *uu1, uuid_t *uu2) { - return uuid_compare(uu1, uu2, NULL); + return uuid_compare((const unsigned char *) uu1, (const unsigned char*) uu2); } static __inline__ void platform_uuid_unparse(uuid_t *uu, char *buffer) { - uint32_t status; - char *s; - uuid_to_string(uu, &s, &status); - if (status == uuid_s_ok) - strcpy(buffer, s); - else buffer[0] = '\0'; - free(s); + uuid_unparse(*uu, buffer); } static __inline__ int platform_uuid_parse(char *buffer, uuid_t *uu) { - uint32_t status; - uuid_from_string(buffer, uu, &status); - return (status == uuid_s_ok); + return uuid_parse(buffer, *uu); } static __inline__ int platform_uuid_is_null(uuid_t *uu) { - return uuid_is_nil(uu, NULL); + return uuid_is_null(*uu); } static __inline__ void platform_uuid_generate(uuid_t *uu) { - uuid_create(uu, NULL); + uuid_generate(*uu); } static __inline__ void platform_uuid_clear(uuid_t *uu) { - uuid_create_nil(uu, NULL); + uuid_clear(*uu); } static __inline__ void platform_uuid_copy(uuid_t *dst, uuid_t *src) { - memcpy(dst, src, sizeof(uuid_t)); + uuid_copy(*dst, *src); } #define __int8_t int8_t @@ -142,11 +143,13 @@ typedef int64_t xfs_daddr_t; #define O_SYNC 0 #endif -#define ENOATTR 989 /* Attribute not found */ #define EFSCORRUPTED 990 /* Filesystem is corrupted */ #define EFSBADCRC 991 /* Bad CRC detected */ #define constpp char * const * +#define XATTR_SIZE_MAX 65536 /* size of an extended attribute value (64k) */ +#define XATTR_LIST_MAX 65536 /* size of extended attribute namelist (64k) */ + #define HAVE_FID 1 static __inline__ int @@ -155,4 +158,131 @@ platform_discard_blocks(int fd, uint64_t start, uint64_t len) return 0; } + +/* + * Dummy POSIX timer replacement + */ +#define CLOCK_REALTIME 1 +typedef uint64_t timer_t; +typedef double timer_c; +typedef clock_id_t clockid_t; +struct itimerspec + { + struct timespec it_interval; + struct timespec it_value; + }; + +static inline int timer_create (clockid_t __clock_id, + struct sigevent *__restrict __evp, + timer_t *__restrict __timerid) +{ + return 0; +} + +static inline int timer_settime (timer_t __timerid, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue) +{ + return 0; +} + +static inline int timer_delete (timer_t __timerid) +{ + return 0; +} + +static inline int timer_gettime (timer_t __timerid, struct itimerspec *__value) +{ + return 0; +} + +static inline int nftw64(const char *path, int (*fn)(const char *, const struct stat *ptr, int flag, struct FTW *), int depth, + int flags) +{ + return nftw(path, fn, depth, flags); +} + +#define MREMAP_FIXED 1 +#define MREMAP_MAYMOVE 2 +static inline void *mremap(void *old_address, size_t old_size, + size_t new_size, int flags, ... /* void *new_address */) +{ + return NULL; +} + +/* FSR */ + +#define _PATH_MOUNTED "/etc/mtab" +#define USE_DUMMY_XATTR + +typedef int __fsblkcnt_t; +typedef int __fsfilcnt_t; +typedef long long int __fsblkcnt64_t; +typedef long long int __fsfilcnt64_t; + +struct statvfs64 +{ + unsigned long int f_bsize; + unsigned long int f_frsize; + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsfilcnt64_t f_files; + __fsfilcnt64_t f_ffree; + __fsfilcnt64_t f_favail; + unsigned long int f_fsid; + int __f_unused; + unsigned long int f_flag; + unsigned long int f_namemax; + int __f_spare[6]; +}; + +struct mntent +{ + char *mnt_fsname; /* Device or server for filesystem. */ + char *mnt_dir; /* Directory mounted on. */ + char *mnt_type; /* Type of filesystem: ufs, nfs, etc. */ + char *mnt_opts; /* Comma-separated options for fs. */ + int mnt_freq; /* Dump frequency (in days). */ + int mnt_passno; /* Pass number for `fsck'. */ +}; + +static inline FILE *setmntent(const char *filename, const char *type) +{ + return NULL; +} + +static inline int endmntent(FILE *fp) +{ + return 0; +} + +static inline struct mntent *getmntent(FILE *fp) +{ + return NULL; +} + +static inline int addmntent(FILE *fp, const struct mntent *mnt) +{ + return 0; +} + +static inline char *hasmntopt(const struct mntent *mnt, const char *opt) +{ + return NULL; +} + +static inline int statvfs64 (const char *__restrict __file, + struct statvfs64 *__restrict __buf) +{ + return 0; +} + +static inline int dummy_fsetxattr (int filedes, const char *name, + const void *value, size_t size, int flags) +{ + return 0; +} + + #endif /* __XFS_DARWIN_H__ */ diff --git a/io/readdir.c b/io/readdir.c index 20b8898..ed8f04d 100644 --- a/io/readdir.c +++ b/io/readdir.c @@ -104,12 +104,16 @@ read_directory( if (!dirent) break; +#ifdef _DIRENT_HAVE_D_RECLEN *total += dirent->d_reclen; +#endif count++; if (dump) { dump_dirent(offset, dirent); +#ifdef _DIRENT_HAVE_D_OFF offset = dirent->d_off; +#endif } } diff --git a/libdisk/fstype.c b/libdisk/fstype.c index 548f297..c8bde34 100644 --- a/libdisk/fstype.c +++ b/libdisk/fstype.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "fstype.h" /* diff --git a/libhandle/Makefile b/libhandle/Makefile index 865ca22..0b5e1ad 100644 --- a/libhandle/Makefile +++ b/libhandle/Makefile @@ -10,7 +10,11 @@ LT_CURRENT = 1 LT_REVISION = 3 LT_AGE = 0 +ifeq ($(PKG_PLATFORM),darwin) +LTLDFLAGS += -Wl,libhandle.sym +else LTLDFLAGS += -Wl,--version-script,libhandle.sym +endif CFILES = handle.c jdm.c LSRCFILES = libhandle.sym diff --git a/libxcmd/paths.c b/libxcmd/paths.c index c0b1ddb..b360617 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -364,7 +364,7 @@ fs_table_initialise_mounts( continue; if (!realpath(stats[i].f_mntfromname, rmntfromname)) continue; - if (!realpath(stats[i].f_mntonname, rmnttomname))) + if (!realpath(stats[i].f_mntonname, rmntonname)) continue; if (path && diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 index 919ae0a..d7f37ca 100644 --- a/m4/package_libcdev.m4 +++ b/m4/package_libcdev.m4 @@ -202,3 +202,17 @@ AC_DEFUN([AC_HAVE_READDIR], AC_SUBST(have_readdir) ]) +# +# Check if we have a flc call (Mac OS X) +# +AC_DEFUN([AC_HAVE_FLS], + [ AC_MSG_CHECKING([for fls]) + AC_TRY_LINK([ +#include + ], [ + fls(0); + ], have_fls=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_fls) + ]) -- 2.4.3 From chingimleong@yahoo.com.sg Mon Jul 20 08:08:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2DC177F55 for ; Mon, 20 Jul 2015 08:08:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C9DBCAC006 for ; Mon, 20 Jul 2015 06:08:20 -0700 (PDT) X-ASG-Debug-ID: 1437397697-04bdf00e8f5f3f0001-NocioJ Received: from nm19-vm2.bullet.mail.sg3.yahoo.com (nm19-vm2.bullet.mail.sg3.yahoo.com [106.10.149.113]) by cuda.sgi.com with ESMTP id SKdNtMCRbvcN9GIa (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 Jul 2015 06:08:18 -0700 (PDT) X-Barracuda-Envelope-From: chingimleong@yahoo.com.sg X-ASG-Whitelist: Sender X-Barracuda-Apparent-Source-IP: 106.10.149.113 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com.sg; s=s2048; t=1437397696; bh=N+Fx6U2zSf0DAv01Cl+rzoUlPprwiRzra/tdiyyJxx0=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=R/ok3FM5+idhwOwcVvgY7vUkuRrS+ykX6W94YF3PjTGgjrx4vbjm62PsWkr+N5LXV7F/CE9r58UZSYXFL1r0fR6A8YFuc3htOKbryywQk5QwcE4BDvE0r+o/rYE82CWHj8pN7BDJhVaX+BdVghPvjkOE5E9FYILS6l8KWF4CEbh3gTg1XexT1MBpVssPDxsdLwQUr9YMbIG58Nbjxn5JZ/9ZOIKx1wGbeNfCO3S2+oU80QDf7Wb0aJ+k1eVwsT+J+bN547HmYzIVk1cl9oYABk1HOuHLtFJouCqwoSvowyppiBI055U6gyuUXcMucgJXeHaJqGtFhWLisQkim5DTKA== Received: from [106.10.166.113] by nm19.bullet.mail.sg3.yahoo.com with NNFMP; 20 Jul 2015 13:08:16 -0000 Received: from [106.10.151.171] by tm2.bullet.mail.sg3.yahoo.com with NNFMP; 20 Jul 2015 13:08:16 -0000 Received: from [127.0.0.1] by omp1011.mail.sg3.yahoo.com with NNFMP; 20 Jul 2015 13:08:16 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 785216.15289.bm@omp1011.mail.sg3.yahoo.com X-YMail-OSG: mcD5qoIVM1n_X_lACM9gSAKolOwNBmiBY5xL96NotjI3r4KezyZEeRYBLUjfMr5 rQ0rrOaYrkWJBS3VMMtC5R0t.uPQy44DlfdkLtQEkSraQhO_OfiEbPxbd25TexwSXGnr.gyYxMJE WMvkUhkNzO9PmBqhQxrrXWKDG2CGz_wFTXBg_rVt4oB61.44Qt.vTq8y0B3GqXUfh6kKVkpxXof4 tkybnBbQW5uSxNuvtReTGMxJweN6yvCL7DyrhlYkcI.2jWgLu8TAoFOwIT7JnDTjA2qJ.FhM2doX KdVga1eZOBOR4scOwe9yQ6RYCnUQDMfbB9ABUnHEv7od3FTsr6jYod1zNrHdVPbT2YHYMXBHv1kL SVgbB6TTcZWTXN8TibEfWcKZGtFEPx5GyAwshBpt9OW9dN8qDYSgBEXb0.mOB7eCYhsZwjXsRPk1 uhTnmgenRbZ34TqvpxeZFoJAQepzIP6idMYnWg2hk0.vhhe243GZWOsP7xTEirYCQt.w6TezL7rt sb7c9JBlV2BY- Received: by 106.10.196.95; Mon, 20 Jul 2015 13:08:16 +0000 Date: Mon, 20 Jul 2015 13:08:15 +0000 (UTC) From: Gim Leong Chin Reply-To: Gim Leong Chin To: Leslie Rhorer Cc: "xfs@oss.sgi.com" Message-ID: <1469853784.545263.1437397695535.JavaMail.yahoo@mail.yahoo.com> In-Reply-To: <55ACB2BD.6050601@mygrande.net> References: <55ACB2BD.6050601@mygrande.net> Subject: Re: XFS File system in trouble MIME-Version: 1.0 X-ASG-Orig-Subj: Re: XFS File system in trouble Content-Type: multipart/alternative; boundary="----=_Part_545262_260624072.1437397695529" X-Barracuda-Connect: nm19-vm2.bullet.mail.sg3.yahoo.com[106.10.149.113] X-Barracuda-Start-Time: 1437397698 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 ------=_Part_545262_260624072.1437397695529 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Leslie, My two cents here, it appears you are using AMD FX CPU on ASUS Sabertooth m= otherboard? I would strongly suggest you use unbuffered ECC DIMMs in your system.=C2=A0= Mcelog will warn of ECC errors in your DIMMs.=C2=A0 ECC will correct singl= e bit errors and at least detect multi bit errors. I had AMD Opteron servers with registered ECC DIMMs with continuous correct= able ECC errors running HPC jobs for up to one month without any crashes un= til I could schedule down time for DIMM replacement.=C2=A0 The errors will = be flagged either in BMC (service processor) or mcelog. All my PC / workstations at work place and at home with consumer AMD Althon= 64 and AMD Phenom II had unbuffered ECC DIMMs on ASUS motherboards.=C2=A0 = I never had any memory errors; I know that if there are memory errors I wil= l get notified. Chin Gim Leong From: Leslie Rhorer To: Martin Papik =20 Cc: xfs@oss.sgi.com=20 Sent: Monday, 20 July 2015, 16:35 Subject: Re: XFS File system in trouble =20 On 7/20/2015 3:05 AM, Martin Papik wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > > Since you've already found one HW related fault, would you consider > booting into memtest for a couple of passes just to be on the safe > side. =C2=A0=C2=A0=C2=A0 I did that after confirming the one stick of memory was = bad.=C2=A0 Twice.=C2=A0 I=20 got over 20,000 errors on the bad stick, and 0 on the good one.=C2=A0 I als= o=20 swapped the locations on the motherboard, and the bad stick still failed=20 while the good one passed 100%. > And did you by any chance look at SMART if applicable and > possibly running a test on the drives. =C2=A0=C2=A0=C2=A0 Yes. SMART found no errors, but think about it.=C2=A0 Ev= ery time tar tries=20 to create a directory when untarring that file in that location, the=20 file system croaks when it tries to create a directory. Not when reading=20 and not when writing other than when it creates a directory.=C2=A0 When I= =20 create the directory manualy, the process quits failing at that point=20 and fails later on during a different directory create.=C2=A0 The array=20 remains intact when reading, and dmesg shows no drive errors.=C2=A0 I've=20 re-synced the array, which reads every byte on all 8 drives without a=20 single mismatch - several times.=C2=A0 To my knowledge, no read has ever=20 failed except after the filesystem goes offline.=C2=A0 I thought reads were= =20 failing during the CRC checks, but that was a red herring. > Another test I sometimes do > when I'm unsure about disks is "cat /dev/sda > /dev/null" (i.e. a > whole disk read test) echo repair > /sys/block/md0/md/sync_action reads not one drive, but=20 every byte on all 8 drives. > and see (dmesg) if any errors show up, unless =C2=A0=C2=A0=C2=A0 'Nary one, and no mismatches. > you're willing to run badblocks in a read-write nondestructive mode. > In my experience the read test or badblocks can be run simultaneously > with smartctl -t long. But as a start I'd look at smartctl --all > /dev/sd? and see if there are any bad signs. I hope this helps. Good luck > > > On 07/20/2015 10:41 AM, Leslie Rhorer wrote: >> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>>> >>>> I found the problem with md5sum (and probably nfs, as well). >>>> One of the memory modules in the server was bad.=C2=A0 The problem >>>> with XFS persists.=C2=A0 Every time tar tried to create the >>>> directory: >>> >>> Now you need to run xfs_repair. >> >> I do that every time the array implodes.=C2=A0 It makes no difference. >> It never mentions cleaning the structure tar says needs cleaning, >> and the next time I run tar on that file, the filesystem craters. >> >> _______________________________________________ xfs mailing list >> xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1 > > iQIcBAEBCgAGBQJVrKuzAAoJELsEaSRwbVYrdjoP/3n1W9YtcpdiDoylp6tDYcjF > vEVz7IWLv2cOky8Lp+0WAZ4Z0WMhcutFzT571H1Vc+jT/UgO25pQHa3yLYTboPuZ > +tBidVUycs7ZIr9QCZFs2uPQ/7YstamB+F7paCTMKtOJJr5CZLiYX4iyJ9sFmWVY > UFPAIhyoqD5CFgoaAkwCmk50kNiT0aPM7egizIUVEt14cWuxZxMN0NIJ5b0WJfAk > qtNQjstVI/xYDgsImm2ZAm19SfOG9ltm2G9zafRr6lR6rRtXjtZX8zEg0l/o9XUw > OifghjoSup8OCzvX6+4+Soj/3mCKZv4rkBm3exf4YzfQ9eVG6Ktele2rLIs1sl3O > hUrZUNEl8hYGJeb5gBHFV/TLWDMMwNde/6JiBVy0V8EbDF1lvR4jYpUwThOE0jyL > ZbzZe4N/B0qvB1OpLDkHrMVm9NPtDkfXdTtM2kRmo5955xtkK09yHF/v64kz7IKc > 2rM5pOwTR6HWE8RF2j9UujgPjw6nEUuY01TvIMGYzMfkJTI+sVjeDQfwnPG8tzIa > x4uLa4vTrBD5IaICjAmQiY69qqmt5Vg42G4latZVTYQLelvWQ774mXZfgfT/GtbT > RKzVwvYowWr/EBhtp7ix/1rWANTFiX0lxOPnRmUFvu8UJnyZhR0/EYbJYy1+jTt7 > O7hZMfAayQBsnVcSK1JC > =3D3Ubd > -----END PGP SIGNATURE----- > _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ------=_Part_545262_260624072.1437397695529 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Leslie,
<= br>
My two ce= nts here, it appears you are using AMD FX CPU on ASUS Sabertooth motherboar= d?

=
I would strongly s= uggest you use unbuffered ECC DIMMs in your system.  Mcelog will warn = of ECC errors in your DIMMs.  ECC will correct single bit errors and a= t least detect multi bit errors.

I had AMD Opteron servers with registered ECC DIMMs with contin= uous correctable ECC errors running HPC jobs for up to one month without an= y crashes until I could schedule down time for DIMM replacement.  The = errors will be flagged either in BMC (service processor) or mcelog.

All my PC / workstations at = work place and at home with consumer AMD Althon 64 and AMD Phenom II had un= buffered ECC DIMMs on ASUS motherboards.  I never had any memory error= s; I know that if there are memory errors I will get notified.


Chin Gim Leong


From: Leslie Rhorer <lrhorer@m= ygrande.net>
To: Ma= rtin Papik <mp6058@gmail.com>
Cc: xfs@oss.sgi.com
Subject: Re: XFS File system in trouble

On 7/20/2015 3:05 AM, Martin Papik wrote:
> -= ----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
>
>
> Since you'v= e already found one HW related fault, would you consider
= > booting into memtest for a couple of passes just to be on the safe
> side.

  =   I did that after confirming the one stick of memory was bad.  T= wice.  I
got over 20,000 errors on the bad stick, a= nd 0 on the good one.  I also
swapped the locations= on the motherboard, and the bad stick still failed
whil= e the good one passed 100%.

> And d= id you by any chance look at SMART if applicable and
>= possibly running a test on the drives.

    Yes. SMART found no errors, but think about it.  = Every time tar tries
to create a directory when untarrin= g that file in that location, the
file system croaks whe= n it tries to create a directory. Not when reading
and n= ot when writing other than when it creates a directory.  When I
create the directory manualy, the process quits failing at tha= t point
and fails later on during a different directory = create.  The array
remains intact when reading, and= dmesg shows no drive errors.  I've
re-synced the a= rray, which reads every byte on all 8 drives without a
s= ingle mismatch - several times.  To my knowledge, no read has ever failed except after the filesystem goes offline.  I th= ought reads were
failing during the CRC checks, but that= was a red herring.

> Another test = I sometimes do
> when I'm unsure about disks is "cat /= dev/sda > /dev/null" (i.e. a
> whole disk read test= )

echo repair > /sys/block/md0/md/s= ync_action reads not one drive, but
every byte on all 8 = drives.

> and see (dmesg) if any er= rors show up, unless

   = ; 'Nary one, and no mismatches.


<= div class=3D"yqt5741585799" id=3D"yqtfd69759">

> you're willing to run badblocks in a read-write nondestructi= ve mode.
> In my experience the read test or badblocks= can be run simultaneously
> with smartctl -t long. Bu= t as a start I'd look at smartctl --all
> /dev/sd? and= see if there are any bad signs. I hope this helps. Good luck
>
>
> On 07/20/2015 10:41= AM, Leslie Rhorer wrote:
>> On 7/19/2015 6:27 PM, = Dave Chinner wrote:
>>> On Sat, Jul 18, 2015 at = 08:02:50PM -0500, Leslie Rhorer wrote:
>>>>>>>> I found the problem with md5sum (and prob= ably nfs, as well).
>>>> One of the memory mo= dules in the server was bad.  The problem
>>&g= t;> with XFS persists.  Every time tar tried to create the
>>>> directory:
>>>
>>> Now you need to run xfs_repair.
= >>
>> I do that every time the array implodes= .  It makes no difference.
>> It never mention= s cleaning the structure tar says needs cleaning,
>>= ; and the next time I run tar on that file, the filesystem craters.
>>
>> ____________________________= ___________________ xfs mailing list
>> x= fs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs>
> -----BEGIN PGP SIGNATURE-----> Version: GnuPG v1
>
> iQIcBAEBCgAGBQJVrKuzAAoJELsEaSRwbVYrdjoP/3n1W9YtcpdiDoylp6tDYcjF=
> vEVz7IWLv2cOky8Lp+0WAZ4Z0WMhcutFzT571H1Vc+jT/UgO25p= QHa3yLYTboPuZ
> +tBidVUycs7ZIr9QCZFs2uPQ/7YstamB+F7paC= TMKtOJJr5CZLiYX4iyJ9sFmWVY
> UFPAIhyoqD5CFgoaAkwCmk50k= NiT0aPM7egizIUVEt14cWuxZxMN0NIJ5b0WJfAk
> qtNQjstVI/xY= DgsImm2ZAm19SfOG9ltm2G9zafRr6lR6rRtXjtZX8zEg0l/o9XUw
>= OifghjoSup8OCzvX6+4+Soj/3mCKZv4rkBm3exf4YzfQ9eVG6Ktele2rLIs1sl3O
> hUrZUNEl8hYGJeb5gBHFV/TLWDMMwNde/6JiBVy0V8EbDF1lvR4jYpUwThOE= 0jyL
> ZbzZe4N/B0qvB1OpLDkHrMVm9NPtDkfXdTtM2kRmo5955xt= kK09yHF/v64kz7IKc
> 2rM5pOwTR6HWE8RF2j9UujgPjw6nEUuY01= TvIMGYzMfkJTI+sVjeDQfwnPG8tzIa
> x4uLa4vTrBD5IaICjAmQi= Y69qqmt5Vg42G4latZVTYQLelvWQ774mXZfgfT/GtbT
> RKzVwvYo= wWr/EBhtp7ix/1rWANTFiX0lxOPnRmUFvu8UJnyZhR0/EYbJYy1+jTt7
= > O7hZMfAayQBsnVcSK1JC
> =3D3Ubd
= > -----END PGP SIGNATURE-----
>
<= br clear=3D"none">_______________________________________________
xfs mailing list
xfs@oss.sgi.com<= br clear=3D"none">http://oss.sgi.com/mailman/listinfo/xfs


------=_Part_545262_260624072.1437397695529-- From sandeen@sandeen.net Mon Jul 20 08:34:15 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B16997F55 for ; Mon, 20 Jul 2015 08:34:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9F30530404E for ; Mon, 20 Jul 2015 06:34:12 -0700 (PDT) X-ASG-Debug-ID: 1437399250-04cb6c3b8da8360001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 4qYgBRqWoolWZpeS for ; Mon, 20 Jul 2015 06:34:10 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [25.18.107.173] (unknown [172.56.7.39]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 6281A63D5B58; Mon, 20 Jul 2015 08:34:09 -0500 (CDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (1.0) Subject: Re: XFS File system in trouble From: Eric Sandeen X-ASG-Orig-Subj: Re: XFS File system in trouble X-Mailer: iPhone Mail (12F70) In-Reply-To: <55ACA615.10501@mygrande.net> Date: Mon, 20 Jul 2015 08:34:07 -0500 Cc: Dave Chinner , Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Content-Transfer-Encoding: 7bit Message-Id: References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> To: Leslie Rhorer X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437399250 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20905 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > On Jul 20, 2015, at 2:41 AM, Leslie Rhorer wrote: > >> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>> >>> I found the problem with md5sum (and probably nfs, as well). One >>> of the memory modules in the server was bad. The problem with XFS >>> persists. Every time tar tried to create the directory: >> >> Now you need to run xfs_repair. > > I do that every time the array implodes. It makes no difference. Have you done it since you fixed the bad memory problem? > It never mentions cleaning the structure tar says needs cleaning, What does it mention? AFAICT you haven't yet provided output from repair... > and the next time I run tar on that file, the filesystem craters. Brian's suggestion of isolating with metadump is a good one, too. Eric > From jtulak@redhat.com Mon Jul 20 08:57:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6F5407F5A for ; Mon, 20 Jul 2015 08:57:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 091F9AC005 for ; Mon, 20 Jul 2015 06:57:48 -0700 (PDT) X-ASG-Debug-ID: 1437400666-04bdf00e90604d0001-NocioJ Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id uk7qDhBCnXzlyYdT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 06:57:47 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t6KDvkYI020661 for ; Mon, 20 Jul 2015 09:57:46 -0400 Date: Mon, 20 Jul 2015 09:57:46 -0400 (EDT) From: Jan Tulak To: xfs-oss Message-ID: <1213913978.543970.1437400666553.JavaMail.zimbra@redhat.com> In-Reply-To: <2035333009.511763.1437398166766.JavaMail.zimbra@redhat.com> Subject: xfsprogs: useless code blocks MIME-Version: 1.0 X-ASG-Orig-Subj: xfsprogs: useless code blocks Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.6.172] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: useless code blocks Thread-Index: hATFT9YUEf7oCMUwlcDOJOjXco7Kig== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1437400667 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20906 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all, I found these useless bits of code in xfsprogs: repair/incore_ino.c:575-576: if (ino_rec->ino_startnum == 0) ino_rec = ino_rec; This one is pretty clear. It is there since 2001 (commit 2bd0ea187 by nathans@sgi.com, who didn't wrote here since 2006, so I find CC-ing him useless). It looks like a forgotten code which doesn't do anything, but I ask in case it is a hidden bug. And: db/check.c:3035, 3037: Always true expression, as be32_to_cpu() translates to __u32 type and unsigned can't be less than zero. be32_to_cpu(free->hdr.nvalid) < 0 || Is there any reason for these tests? I get different type sizes, or endians as platform dependent, but signed/unsigned? Or it is a big/little endian conversion hack? Cheers, Jan -- Jan Tulak jtulak@redhat.com From tonytkdk@gmail.com Mon Jul 20 09:30:34 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A8EFE7F5E for ; Mon, 20 Jul 2015 09:30:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 896EB8F8049 for ; Mon, 20 Jul 2015 07:30:34 -0700 (PDT) X-ASG-Debug-ID: 1437402631-04cb6c3b8da9850001-NocioJ Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by cuda.sgi.com with ESMTP id YVUPRHbeW49BaWrP (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 20 Jul 2015 07:30:32 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.182 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.182] Received: by wibxm9 with SMTP id xm9so93539916wib.0 for ; Mon, 20 Jul 2015 07:30:31 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.182] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.182] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=cFZDZSL8sllVdLzxfTOV4DyHPlvGTysNFpjb2qKlhSg=; b=gXYLFeOb4fKdTAzphjhLnQbnzklU+xnR0XtyEAHJRcTt5DkjE+xGHH7rCiudZS6zY/ SvMOr7RsVB3YFvqXeemk6s1wwUbu1LcPIUjyDsVbOHKoV+p4K7sdd34OcoEH9TfodviB wG1lTgVkLlXGgntKVpzyIac9cdj835LdL5SX4Q1DOSItHo1zKCygId3q97JDlsGSxopc s3y6DA+W+jr/kSg7PKT1MtyWO4N3suwOyDdtPXl6nYqX723Aakv1Cv5CcNEqeCJXBP51 PyzmP5C2Q5DMRsW8cUVRxweFzy8ahO/F4cNY4qQ+frYFt0ea29yhD1vm3YRRPIByYi1d pGiw== MIME-Version: 1.0 X-Received: by 10.194.77.97 with SMTP id r1mr54105167wjw.98.1437402631594; Mon, 20 Jul 2015 07:30:31 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Mon, 20 Jul 2015 07:30:31 -0700 (PDT) In-Reply-To: <20150720114648.GB53450@bfoster.bfoster> References: <20150709151811.GE63282@bfoster.bfoster> <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> <20150713170158.GB50787@bfoster.bfoster> <20150720114648.GB53450@bfoster.bfoster> Date: Mon, 20 Jul 2015 22:30:31 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Hugo Kuo , Eric Sandeen , Darrell Bishop , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7bfcf2f64167ef051b4f615d X-Barracuda-Connect: mail-wi0-f182.google.com[209.85.212.182] X-Barracuda-Start-Time: 1437402632 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20906 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7bfcf2f64167ef051b4f615d Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Brain, >I don=E2=80=99t know much about the Swift bug. A BUG() or crash in the ker= nel is generally always a kernel bug, regardless of what userspace is doing. It >certainly could be that whatever userspace is doing to trigger the kernel bug is a bug in the userspace application, but either way it shouldn=E2=80= =99t cause the >kernel to crash. By the same token, if Swift is updated to fix the aforementioned bug and the kernel crash no longer reproduces, that doesn=E2=80=99t >necessarily mean the kernel bug is fixed (just potentially= hidden). Understand. [Previous Message] The valid inode has an inode number of 13668207561. - The fsname for this inode is "sdb." - The inode does appear to have a non-NULL if_data: if_u1 =3D { if_extents =3D 0xffff88084feaf5c0, if_ext_irec =3D 0xffff88084feaf5c0, if_data =3D 0xffff88084feaf5c0 "\004" }, find -inum 13668207561 Q1: Were you able to track down the directory inode mentioned in the previous message? Ans: Yes, it=E2=80=99s the directory/file as below. /srv/node/d224 is the m= ount point of /dev/sdb . This is the original location of the path. This folder includes the file 1436266052.71893.ts now. The .ts file is 0 size [root@r2obj01 ~]# find /srv/node/d224 -inum 13668207561 /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32 [root@r2obj01 ~]# ls -lrt /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32 -rw------- 1 swift swift 0 Jul 7 22:37 1436266052.71893.ts Q2: Is it some kind of internal directory used by the application (e.g., perhaps related to the quarantine mechanism mentioned in the bug)? Ans: Yes, it=E2=80=99s a directory which accessing by application. 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266= 042.57775.ts 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG /srv/node/d224/tmp/tmpSpnrHg 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32 The above operation in the swift-object-server was doing python function call to rename the file * /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32/1436266= 042.57775.ts* as */srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/143626= 6042.57775.ts* os.rename(old, new) And it crashed at this point. In the Q1, we found the inum is pointing to the directory /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32 . We found that multiple(over 10) DELETE from application against the target file at almost same moment. The DELETE is removing the original file in the directory and create new empty .ts file in this directory. I suspect that multiple os.rename on the same file in that directory will cause the kernel panic. And the file /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266= 042.57775.ts was not created. Regards // Hugo =E2=80=8B --047d7bfcf2f64167ef051b4f615d Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Brain,

>I don=E2=80=99t know much a= bout the Swift bug. A BUG() or crash in the kernel is generally always a ke= rnel bug, regardless of what userspace is doing. It >certainly could be = that whatever userspace is doing to trigger the kernel bug is a bug in the = userspace application, but either way it shouldn=E2=80=99t cause the >ke= rnel to crash. By the same token, if Swift is updated to fix the aforementi= oned bug and the kernel crash no longer reproduces, that doesn=E2=80=99t &g= t;necessarily mean the kernel bug is fixed (just potentially hidden).

Understand.=C2=A0

[Previous Message]

Q1: Were you able =
to track down the directory inode mentioned in the previous message?

Ans: Yes, it=E2=80=99s the dire= ctory/file as below. /srv/node/d224 is the mount point of /dev/sdb . This i= s the original location of the path. This folder includes the file 14362660= 52.71893.ts now. The .ts file is 0 size

Q2: Is it some kin=
d of internal directory used by the application (e.g., perhaps related to t=
he quarantine mechanism mentioned in the bug)?

Ans: Yes, it=E2=80=99s a direct= ory which accessing by application.

The above operatio=
n in the swift-object-server was doing python function call to rename the f=
ile=C2=A0/srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b=
32/1436266042.57775.ts=C2=A0as /srv/node/d224/quarantined/objects/b1=
46865bf8034bfc42570b747c341b32/1436266042.57775.ts

os.rename(old, new)

And it crashed at this point. I= n the Q1, we found the inum is pointing to the directory=C2=A0We found that = multiple(over 10) DELETE from application against the target file at almost= same moment. The DELETE is removing the original file in the directory and= create new empty .ts file in this directory. I suspect that multiple os.re= name on the same file in that directory will cause the kernel panic.=C2=A0<= /p>

And the file /srv/node/d224/= quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts wa= s not created.

Regards /= / Hugo=C2=A0

=E2= =80=8B
--047d7bfcf2f64167ef051b4f615d-- From bfoster@redhat.com Mon Jul 20 10:13:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 05C507F60 for ; Mon, 20 Jul 2015 10:13:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D4D17304048 for ; Mon, 20 Jul 2015 08:13:00 -0700 (PDT) X-ASG-Debug-ID: 1437405179-04cbb00f09a2c00001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 2PB2ET2VrhF6jKeh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 08:13:00 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id BDF76347A57; Mon, 20 Jul 2015 15:12:58 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KFCwMK004676; Mon, 20 Jul 2015 11:12:58 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id CDDB6122E55; Mon, 20 Jul 2015 11:12:56 -0400 (EDT) Date: Mon, 20 Jul 2015 11:12:56 -0400 From: Brian Foster To: Kuo Hugo Cc: Hugo Kuo , Eric Sandeen , Darrell Bishop , xfs@oss.sgi.com Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 Message-ID: <20150720151256.GA17816@bfoster.bfoster> X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 References: <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> <20150713170158.GB50787@bfoster.bfoster> <20150720114648.GB53450@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437405179 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Jul 20, 2015 at 10:30:31PM +0800, Kuo Hugo wrote: > Hi Brain, > > >I don’t know much about the Swift bug. A BUG() or crash in the kernel is > generally always a kernel bug, regardless of what userspace is doing. It > >certainly could be that whatever userspace is doing to trigger the kernel > bug is a bug in the userspace application, but either way it shouldn’t > cause the >kernel to crash. By the same token, if Swift is updated to fix > the aforementioned bug and the kernel crash no longer reproduces, that > doesn’t >necessarily mean the kernel bug is fixed (just potentially hidden). > > Understand. > > [Previous Message] > > The valid inode has an inode number of 13668207561. > - The fsname for this inode is "sdb." > - The inode does appear to have a non-NULL if_data: > > if_u1 = { > if_extents = 0xffff88084feaf5c0, > if_ext_irec = 0xffff88084feaf5c0, > if_data = 0xffff88084feaf5c0 "\004" > }, > > find -inum 13668207561 > > Q1: Were you able to track down the directory inode mentioned in the > previous message? > > Ans: Yes, it’s the directory/file as below. /srv/node/d224 is the mount > point of /dev/sdb . This is the original location of the path. This folder > includes the file 1436266052.71893.ts now. The .ts file is 0 size > > > [root@r2obj01 ~]# find /srv/node/d224 -inum 13668207561 > /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32 > > [root@r2obj01 ~]# ls -lrt > /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32 > -rw------- 1 swift swift 0 Jul 7 22:37 1436266052.71893.ts > > Q2: Is it some kind of internal directory used by the application (e.g., > perhaps related to the quarantine mechanism mentioned in the bug)? > > Ans: Yes, it’s a directory which accessing by application. > Ok, so I take it that we have a directory per object based on some kind of hash. The directory presumably contains the object along with whatever metadata is tracked. > > 37 ffff8810718343c0 ffff88105b9d32c0 ffff8808745aa5e8 REG [eventpoll] > 38 ffff8808713da780 ffff880010c9a900 ffff88096368a188 REG > /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts > 39 ffff880871cb03c0 ffff880495a8b380 ffff8808a5e6c988 REG > /srv/node/d224/tmp/tmpSpnrHg > > 40 ffff8808715b4540 ffff8804819c58c0 ffff8802381f8d88 DIR > /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32 > > The above operation in the swift-object-server was doing python function > call to rename the file > * /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts* > as > */srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts* > > os.rename(old, new) > > And it crashed at this point. In the Q1, we found the inum is pointing to > the directory > /srv/node/d224/objects/45382/b32/b146865bf8034bfc42570b747c341b32 . > The original stacktrace shows the crash in a readdir request. I'm sure there are multiple things going on here (and there are a couple rename traces in the vmcore sitting on locks), of course, but where does the information about the rename come from? > We found that multiple(over 10) DELETE from application against the target > file at almost same moment. The DELETE is removing the original file in the > directory and create new empty .ts file in this directory. I suspect that > multiple os.rename on the same file in that directory will cause the kernel > panic. > > And the file > /srv/node/d224/quarantined/objects/b146865bf8034bfc42570b747c341b32/1436266042.57775.ts > was not created. > I'm not quite following here because I don't have enough context about what the application server is doing. So far, it sounds like we somehow have multiple threads competing to rename the same file..? Is there anything else in this directory at the time this sequence executes (e.g., a file with object data that also gets quarantined)? Ideally, we'd ultimately like to translate this into a sequence of operations as seen by the fs that hopefully trigger the problem. We might have to start by reproducing through the application server. Looking back at that bug report, it sounds like a 'DELETE' is a high-level server operation that can consist of multiple sub-operations at the filesystem level (e.g., list, conditional rename if *.ts file exists, etc.). Do you have enough information through any of the above to try and run something against Swift that might explicitly reproduce the problem? For example, have one thread that creates and recreates the same object repeatedly and many more competing threads that try to remove (or whatever results in the quarantine) it? Note that I'm just grasping at straws here, you might be able to design a more accurate reproducer based on what it looks like is happening within Swift. Brian > Regards // Hugo > ​ > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From msnitzer@redhat.com Mon Jul 20 10:18:53 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4112A7F60 for ; Mon, 20 Jul 2015 10:18:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 18C90304048 for ; Mon, 20 Jul 2015 08:18:52 -0700 (PDT) X-ASG-Debug-ID: 1437405531-04cbb00f09a2f20001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 4WaqF2GBWRM97tm8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 08:18:51 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 1C975BE260; Mon, 20 Jul 2015 15:18:51 +0000 (UTC) Received: from localhost (dhcp-25-117.bos.redhat.com [10.18.25.117]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KFIoe9010585 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 20 Jul 2015 11:18:50 -0400 Date: Mon, 20 Jul 2015 11:18:49 -0400 From: Mike Snitzer To: axboe@kernel.dk, david@fromorbit.com, hch@lst.de, sandeen@redhat.com Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com Subject: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150720151849.GA2282@redhat.com> X-ASG-Orig-Subj: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437405531 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 If XFS fails to write metadata it will retry the write indefinitely (with the hope that the write will succeed at some point in the future). Others can possibly speak to historic reason(s) why this is a sane default for XFS. But when XFS is deployed ontop of DM thin provisioning this infinite retry is very unwelcome -- especially if DM thinp was configured to be automatically extended with free space but the admin hasn't provided (or restored) adequate free space. To fix this infinite retry a new bdev_has_space () hook is added to XFS to break out of its metadata retry loop if the underlying block device reports it no longer has free space. DM thin provisioning is now trained to respond accordingly, which enables XFS to not cause a cascade of tasks blocked on IO waiting for XFS's infinite retry. All other block devices, which don't implement a .has_space method in block_device_operations, will always return true for bdev_has_space(). With this change XFS will fail the metadata IO, force shutdown, and the XFS filesystem may be unmounted. This enables an admin to recover from their oversight, of not having provided enough free space, without having to force a hard reset of the system to get XFS to unwedge. Signed-off-by: Mike Snitzer --- drivers/md/dm-thin.c | 27 +++++++++++++++++++++++++-- drivers/md/dm.c | 33 +++++++++++++++++++++++++++++++++ fs/block_dev.c | 10 ++++++++++ fs/xfs/xfs_buf_item.c | 3 +++ include/linux/blkdev.h | 3 +++ include/linux/device-mapper.h | 8 ++++++++ 6 files changed, 82 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index 1c50c58..55ee3cf 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c @@ -3948,7 +3948,7 @@ static struct target_type pool_target = { .name = "thin-pool", .features = DM_TARGET_SINGLETON | DM_TARGET_ALWAYS_WRITEABLE | DM_TARGET_IMMUTABLE, - .version = {1, 16, 0}, + .version = {1, 17, 0}, .module = THIS_MODULE, .ctr = pool_ctr, .dtr = pool_dtr, @@ -4333,9 +4333,31 @@ static void thin_io_hints(struct dm_target *ti, struct queue_limits *limits) limits->max_discard_sectors = 2048 * 1024 * 16; /* 16G */ } +static bool thin_has_space(struct dm_target *ti) +{ + struct thin_c *tc = ti->private; + struct pool *pool = tc->pool; + enum pool_mode m = get_pool_mode(pool); + + /* + * The thin-pool has space if it is either in write mode _or_ + * it is still waiting for space to be added. + * + * If 'error_if_no_space' was configured the pool will not queue + * IO at all, even though the pool will stay in OODS mode, so + * there is no point having upper layers (e.g. XFS) retry IO + * given 'error_if_no_space' is meant to _not_ queue IO. + */ + if (m == PM_WRITE || + (m == PM_OUT_OF_DATA_SPACE && !pool->pf.error_if_no_space)) + return true; + + return false; +} + static struct target_type thin_target = { .name = "thin", - .version = {1, 16, 0}, + .version = {1, 17, 0}, .module = THIS_MODULE, .ctr = thin_ctr, .dtr = thin_dtr, @@ -4348,6 +4370,7 @@ static struct target_type thin_target = { .merge = thin_merge, .iterate_devices = thin_iterate_devices, .io_hints = thin_io_hints, + .has_space = thin_has_space, }; /*----------------------------------------------------------------*/ diff --git a/drivers/md/dm.c b/drivers/md/dm.c index ab37ae1..14bf9df 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -597,6 +597,38 @@ out: return r; } +static bool dm_blk_has_space(struct block_device *bdev) +{ + struct mapped_device *md = bdev->bd_disk->private_data; + int srcu_idx; + struct dm_table *map; + struct dm_target *tgt; + bool r = true; + + map = dm_get_live_table(md, &srcu_idx); + + if (!map || !dm_table_get_size(map)) + goto out; + + /* We only support devices that have a single target */ + if (dm_table_get_num_targets(map) != 1) + goto out; + + tgt = dm_table_get_target(map, 0); + if (!tgt->type->has_space) + goto out; + + if (dm_suspended_md(md)) + goto out; + + r = tgt->type->has_space(tgt); + +out: + dm_put_live_table(md, srcu_idx); + + return r; +} + static struct dm_io *alloc_io(struct mapped_device *md) { return mempool_alloc(md->io_pool, GFP_NOIO); @@ -3647,6 +3679,7 @@ static const struct block_device_operations dm_blk_dops = { .release = dm_blk_close, .ioctl = dm_blk_ioctl, .getgeo = dm_blk_getgeo, + .has_space = dm_blk_has_space, .owner = THIS_MODULE }; diff --git a/fs/block_dev.c b/fs/block_dev.c index 1982437..5034361 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -469,6 +469,16 @@ long bdev_direct_access(struct block_device *bdev, sector_t sector, } EXPORT_SYMBOL_GPL(bdev_direct_access); +bool bdev_has_space(struct block_device *bdev) +{ + const struct block_device_operations *ops = bdev->bd_disk->fops; + + if (!ops->has_space) + return true; + return ops->has_space(bdev); +} +EXPORT_SYMBOL_GPL(bdev_has_space); + /* * pseudo-fs */ diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index 092d652..98efbca 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c @@ -1059,6 +1059,9 @@ xfs_buf_iodone_callbacks( if (likely(!bp->b_error)) goto do_callbacks; + if (!bdev_has_space(bp->b_target->bt_bdev)) + xfs_force_shutdown(mp, SHUTDOWN_REMOTE_REQ); + /* * If we've already decided to shutdown the filesystem because of * I/O errors, there's no point in giving this a retry. diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d4068c17d..1ba66bc 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1566,6 +1566,7 @@ struct block_device_operations { int (*getgeo)(struct block_device *, struct hd_geometry *); /* this callback is with swap_lock and sometimes page table lock held */ void (*swap_slot_free_notify) (struct block_device *, unsigned long); + bool (*has_space) (struct block_device *); struct module *owner; }; @@ -1576,6 +1577,8 @@ extern int bdev_write_page(struct block_device *, sector_t, struct page *, struct writeback_control *); extern long bdev_direct_access(struct block_device *, sector_t, void **addr, unsigned long *pfn, long size); +extern bool bdev_has_space(struct block_device *); + #else /* CONFIG_BLOCK */ struct block_device; diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 51cc1de..c55053e 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -119,6 +119,13 @@ typedef void (*dm_io_hints_fn) (struct dm_target *ti, */ typedef int (*dm_busy_fn) (struct dm_target *ti); +/* + * Returns: + * false: The target has no space that may be allocated. + * true: The target has space that may be allocated. + */ +typedef bool (*dm_has_space_fn) (struct dm_target *ti); + void dm_error(const char *message); struct dm_dev { @@ -164,6 +171,7 @@ struct target_type { dm_busy_fn busy; dm_iterate_devices_fn iterate_devices; dm_io_hints_fn io_hints; + dm_has_space_fn has_space; /* For internal device-mapper use. */ struct list_head list; -- 2.3.2 (Apple Git-55) From bfoster@redhat.com Mon Jul 20 12:28:15 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 35D6C7F69 for ; Mon, 20 Jul 2015 12:28:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 11307304043 for ; Mon, 20 Jul 2015 10:28:11 -0700 (PDT) X-ASG-Debug-ID: 1437413290-04cb6c3b88adc30001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Lo2gTanzwy37cjpy (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 10:28:11 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 1B3C4354172 for ; Mon, 20 Jul 2015 17:28:10 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KHS9LE021206 for ; Mon, 20 Jul 2015 13:28:09 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 68FB0122E55; Mon, 20 Jul 2015 13:28:08 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH] xfs: checksum log record ext headers based on record size Date: Mon, 20 Jul 2015 13:28:08 -0400 X-ASG-Orig-Subj: [PATCH] xfs: checksum log record ext headers based on record size Message-Id: <1437413288-29329-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437413290 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 The first 4 bytes of every basic block in the physical log is stamped with the current lsn. To support this mechanism, the log record header (first block of each new log record) contains space for the original first byte of each log record block before it is replaced with the lsn. The log record header has space for 32k worth of blocks. The version 2 log adds new extended record headers for each additional 32k worth of blocks beyond what is supported by the record header. The log record checksum incorporates the log record header, the extended headers and the record payload. xlog_cksum() checksums the extended headers based on log->l_iclog_heads, which specifies the number of extended headers in a log record based on the log buffer size mount option. The log buffer size is variable, however, and thus means the checksum can be calculated differently based on how a filesystem is mounted. This is problematic if a filesystem crashes and recovery occurs on a subsequent mount using a different log buffer size. For example, crash an active filesystem that is mounted with the default (32k) logbsize, attempt remount/recovery using '-o logbsize=64k' and the mount fails on or warns about log checksum failures. To avoid this problem, update xlog_cksum() to calculate the checksum based on the size of the log buffer according to the log record. The size is already included in the h_size field of the log record header and thus is available at log recovery time. Extended log record headers are also only written when the log record is large enough to require them. This makes checksum calculation of log records consistent with the extended record header mechanism as well as how on-disk records are checksummed with various log buffer size mount options. Signed-off-by: Brian Foster --- Hi all, This is a bit of a behavior oddity I ran into while messing around with the torn log write handling stuff I'm currently working on. I've posted an xfstests test that reproduces the problem here: http://thread.gmane.org/gmane.comp.file-systems.fstests/933 Brian fs/xfs/xfs_log.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 08d4fe4..61ce3c0 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1652,8 +1652,13 @@ xlog_cksum( if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { union xlog_in_core2 *xhdr = (union xlog_in_core2 *)rhead; int i; + int xheads; - for (i = 1; i < log->l_iclog_heads; i++) { + xheads = size / XLOG_HEADER_CYCLE_SIZE; + if (size % XLOG_HEADER_CYCLE_SIZE) + xheads++; + + for (i = 1; i < xheads; i++) { crc = crc32c(crc, &xhdr[i].hic_xheader, sizeof(struct xlog_rec_ext_header)); } -- 2.1.0 From david@fromorbit.com Mon Jul 20 17:39:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BF0FA7F69 for ; Mon, 20 Jul 2015 17:39:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 55317AC005 for ; Mon, 20 Jul 2015 15:39:01 -0700 (PDT) X-ASG-Debug-ID: 1437431938-04bdf00e906cfb0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id EJsOsl4M7v3avOEZ for ; Mon, 20 Jul 2015 15:38:59 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AJCACad61VPD0gLHlcgxOBPYZQokUGmk0CAgEBAoEvTQEBAQEBAQcBAQEBQT+EJAEBBDocIxAIAxgJJQ8FJQMHGhOILclEAQEIAgEfGYYFhS6FBgeEKwWUUowgmQiBCYFbgVAsMYJLAQEB Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail06.adl6.internode.on.net with ESMTP; 21 Jul 2015 08:06:11 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHJfO-0000M9-5r; Tue, 21 Jul 2015 08:36:10 +1000 Date: Tue, 21 Jul 2015 08:36:10 +1000 From: Dave Chinner To: Mike Snitzer Cc: axboe@kernel.dk, hch@lst.de, sandeen@redhat.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150720223610.GV7943@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150720151849.GA2282@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1437431938 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20923 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 20, 2015 at 11:18:49AM -0400, Mike Snitzer wrote: > If XFS fails to write metadata it will retry the write indefinitely > (with the hope that the write will succeed at some point in the future). > > Others can possibly speak to historic reason(s) why this is a sane > default for XFS. But when XFS is deployed ontop of DM thin provisioning > this infinite retry is very unwelcome -- especially if DM thinp was > configured to be automatically extended with free space but the admin > hasn't provided (or restored) adequate free space. > > To fix this infinite retry a new bdev_has_space () hook is added to XFS > to break out of its metadata retry loop if the underlying block device > reports it no longer has free space. DM thin provisioning is now > trained to respond accordingly, which enables XFS to not cause a cascade > of tasks blocked on IO waiting for XFS's infinite retry. > > All other block devices, which don't implement a .has_space method in > block_device_operations, will always return true for bdev_has_space(). > > With this change XFS will fail the metadata IO, force shutdown, and the > XFS filesystem may be unmounted. This enables an admin to recover from > their oversight, of not having provided enough free space, without > having to force a hard reset of the system to get XFS to unwedge. > > Signed-off-by: Mike Snitzer Shouldn't dm-thinp just return the bio with ENOSPC as it's error? The scsi layers already do this for hardware thinp ENOSPC failures, so dm-thinp should behave exactly the same (i.e. via __scsi_error_from_host_byte()). The behaviour of the filesystem should be the same in all cases - making it conditional on whether the thinp implementation can be polled for available space is wrong as most hardware thinp can't be polled by the kernel forthis info.. If dm-thinp just returns ENOSPC from on the BIO like other hardware thinp devices, then it is up to the filesystem to handle that appropriately. i.e. whether an ENOSPC IO error is fatal to the filesystem is determined by filesystem configuration and context of the IO error, not whether the block device has no space (which we should already know from the ENOSPC error delivered by IO completion). Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jul 20 18:03:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1633C7F6D for ; Mon, 20 Jul 2015 18:03:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E0930304043 for ; Mon, 20 Jul 2015 16:03:25 -0700 (PDT) X-ASG-Debug-ID: 1437433392-04cb6c3b8bb4c40001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id xqFRLCYBk3Ej5Z1C for ; Mon, 20 Jul 2015 16:03:12 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2C5BwCAfa1VPD0gLHlcgxOBPYZQokMGmk0EAgKBL00BAQEBAQEHAQEBAUE/hCQBAQQnExwjEAgDDgoJJQ8FJQMHGhOILclDAQEBBwIgGYYFhS6FBgeEKwWUUowggUSPK4gZgQmBJx+BZSwxgQYlgSABAQE Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail06.adl6.internode.on.net with ESMTP; 21 Jul 2015 08:32:20 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHK4h-0000Or-5Z; Tue, 21 Jul 2015 09:02:19 +1000 Date: Tue, 21 Jul 2015 09:02:19 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: checksum log record ext headers based on record size Message-ID: <20150720230219.GW7943@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: checksum log record ext headers based on record size References: <1437413288-29329-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437413288-29329-1-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1437433392 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20923 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 20, 2015 at 01:28:08PM -0400, Brian Foster wrote: > The first 4 bytes of every basic block in the physical log is stamped > with the current lsn. To support this mechanism, the log record header > (first block of each new log record) contains space for the original > first byte of each log record block before it is replaced with the lsn. > The log record header has space for 32k worth of blocks. The version 2 > log adds new extended record headers for each additional 32k worth of > blocks beyond what is supported by the record header. > > The log record checksum incorporates the log record header, the extended > headers and the record payload. xlog_cksum() checksums the extended > headers based on log->l_iclog_heads, which specifies the number of > extended headers in a log record based on the log buffer size mount > option. The log buffer size is variable, however, and thus means the > checksum can be calculated differently based on how a filesystem is > mounted. This is problematic if a filesystem crashes and recovery occurs > on a subsequent mount using a different log buffer size. For example, > crash an active filesystem that is mounted with the default (32k) > logbsize, attempt remount/recovery using '-o logbsize=64k' and the mount > fails on or warns about log checksum failures. > > To avoid this problem, update xlog_cksum() to calculate the checksum > based on the size of the log buffer according to the log record. The > size is already included in the h_size field of the log record header > and thus is available at log recovery time. Extended log record headers > are also only written when the log record is large enough to require > them. This makes checksum calculation of log records consistent with the > extended record header mechanism as well as how on-disk records are > checksummed with various log buffer size mount options. Hmmm - I thought that case was handled, but I guess not... > --- a/fs/xfs/xfs_log.c > +++ b/fs/xfs/xfs_log.c > @@ -1652,8 +1652,13 @@ xlog_cksum( > if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { > union xlog_in_core2 *xhdr = (union xlog_in_core2 *)rhead; > int i; > + int xheads; > > - for (i = 1; i < log->l_iclog_heads; i++) { > + xheads = size / XLOG_HEADER_CYCLE_SIZE; > + if (size % XLOG_HEADER_CYCLE_SIZE) > + xheads++; > + > + for (i = 1; i < xheads; i++) { > crc = crc32c(crc, &xhdr[i].hic_xheader, > sizeof(struct xlog_rec_ext_header)); > } rhead->h_len is an untrusted value during log recovery. i.e. at this point we haven't validated that the record size is within the sane range. See xlog_valid_rec_header() - it only checks that 0 < rhead->h_len < INT_MAX. Realistically, this should be checking that it is no more than: (XLOG_MAX_RECORD_BSIZE / XLOG_HEADER_CYCLE_SIZE) + 1 as it is now being used as an array index into a dynamically allocated buffer.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From msnitzer@redhat.com Mon Jul 20 18:21:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C17B57F74 for ; Mon, 20 Jul 2015 18:21:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 470CBAC005 for ; Mon, 20 Jul 2015 16:21:01 -0700 (PDT) X-ASG-Debug-ID: 1437434459-04cbb00f08afae0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id lsNU5uNTDEFxC1Bf (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 20 Jul 2015 16:21:00 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 6434A4C09C; Mon, 20 Jul 2015 23:20:59 +0000 (UTC) Received: from localhost (dhcp-25-149.bos.redhat.com [10.18.25.149]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6KNKwlD011670 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Mon, 20 Jul 2015 19:20:58 -0400 Date: Mon, 20 Jul 2015 19:20:58 -0400 From: Mike Snitzer To: Dave Chinner Cc: axboe@kernel.dk, hch@lst.de, sandeen@redhat.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150720232057.GH28135@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150720223610.GV7943@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437434460 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Jul 20 2015 at 6:36pm -0400, Dave Chinner wrote: > On Mon, Jul 20, 2015 at 11:18:49AM -0400, Mike Snitzer wrote: > > If XFS fails to write metadata it will retry the write indefinitely > > (with the hope that the write will succeed at some point in the future). > > > > Others can possibly speak to historic reason(s) why this is a sane > > default for XFS. But when XFS is deployed ontop of DM thin provisioning > > this infinite retry is very unwelcome -- especially if DM thinp was > > configured to be automatically extended with free space but the admin > > hasn't provided (or restored) adequate free space. > > > > To fix this infinite retry a new bdev_has_space () hook is added to XFS > > to break out of its metadata retry loop if the underlying block device > > reports it no longer has free space. DM thin provisioning is now > > trained to respond accordingly, which enables XFS to not cause a cascade > > of tasks blocked on IO waiting for XFS's infinite retry. > > > > All other block devices, which don't implement a .has_space method in > > block_device_operations, will always return true for bdev_has_space(). > > > > With this change XFS will fail the metadata IO, force shutdown, and the > > XFS filesystem may be unmounted. This enables an admin to recover from > > their oversight, of not having provided enough free space, without > > having to force a hard reset of the system to get XFS to unwedge. > > > > Signed-off-by: Mike Snitzer > > Shouldn't dm-thinp just return the bio with ENOSPC as it's error? > The scsi layers already do this for hardware thinp ENOSPC failures, > so dm-thinp should behave exactly the same (i.e. via > __scsi_error_from_host_byte()) DM thinp does return -ENOSPC (uniformly so, as of 4.2-rc3 via commit bcc696fac1). Before it was more nuanced, but it would either return -ENOSPC or -EIO (transition from -ENOSPC to -EIO was when thinp's no_space_timoeut expired). Anyway, XFS doesn't care what error is returned it'll just keep retrying metdata IO indefinitely. > The behaviour of the filesystem > should be the same in all cases - making it conditional on whether > the thinp implementation can be polled for available space is wrong > as most hardware thinp can't be polled by the kernel forthis info.. There isn't an immediate corollary for SCSI no. I've discussed flagging the SCSI block device as out of space when the equivalent HW thinp ASC/ASQ is returned from the SCSI target but there isn't an existing way to know space was added to reset this state (like is possible with DM thinp). But in the past you (or others) have claimed that ENOSPC isn't a rich enough return to _know_ that it is a hard error. Now you seem to be oscillating away from a richer interface between filesystems and the underlying block device to: a simple error code is enough. > If dm-thinp just returns ENOSPC from on the BIO like other hardware > thinp devices, then it is up to the filesystem to handle that > appropriately. i.e. whether an ENOSPC IO error is fatal to the > filesystem is determined by filesystem configuration and context of > the IO error, not whether the block device has no space (which we > should already know from the ENOSPC error delivered by IO > completion). OK, _please_ add that configurability to XFS. As I think you know, this is a long-standing XFS on thinp issue (both DM and HW thinp). Mike From david@fromorbit.com Mon Jul 20 19:37:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 071B97F77 for ; Mon, 20 Jul 2015 19:37:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D73AB304048 for ; Mon, 20 Jul 2015 17:37:20 -0700 (PDT) X-ASG-Debug-ID: 1437439037-04cbb00f07b0d10001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id hg8Hh5aaNnAB2Ibw for ; Mon, 20 Jul 2015 17:37:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2A3CQDGk61VPD0gLHlcgxNUaYJUpi4MAQEBAQEBBpRWhXsCAgEBAoEvTQEBAQEBAQcBAQEBQAE/hCMBAQEDATocIwULCAMYCSUPBSUDBxoTiCYHDsljAQEIAgEfGYYFhS6Ca4IbB4QrBZRThHSHNJkNgQmBKhwVgVAsMQGCSgEBAQ Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 10:06:27 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHLXn-0000Wp-B8; Tue, 21 Jul 2015 10:36:27 +1000 Date: Tue, 21 Jul 2015 10:36:27 +1000 From: Dave Chinner To: Mike Snitzer Cc: axboe@kernel.dk, hch@lst.de, sandeen@redhat.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150721003627.GX7943@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <20150720232057.GH28135@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150720232057.GH28135@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437439037 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20927 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 20, 2015 at 07:20:58PM -0400, Mike Snitzer wrote: > On Mon, Jul 20 2015 at 6:36pm -0400, > Dave Chinner wrote: > > > On Mon, Jul 20, 2015 at 11:18:49AM -0400, Mike Snitzer wrote: > > > If XFS fails to write metadata it will retry the write indefinitely > > > (with the hope that the write will succeed at some point in the future). > > > > > > Others can possibly speak to historic reason(s) why this is a sane > > > default for XFS. But when XFS is deployed ontop of DM thin provisioning > > > this infinite retry is very unwelcome -- especially if DM thinp was > > > configured to be automatically extended with free space but the admin > > > hasn't provided (or restored) adequate free space. > > > > > > To fix this infinite retry a new bdev_has_space () hook is added to XFS > > > to break out of its metadata retry loop if the underlying block device > > > reports it no longer has free space. DM thin provisioning is now > > > trained to respond accordingly, which enables XFS to not cause a cascade > > > of tasks blocked on IO waiting for XFS's infinite retry. > > > > > > All other block devices, which don't implement a .has_space method in > > > block_device_operations, will always return true for bdev_has_space(). > > > > > > With this change XFS will fail the metadata IO, force shutdown, and the > > > XFS filesystem may be unmounted. This enables an admin to recover from > > > their oversight, of not having provided enough free space, without > > > having to force a hard reset of the system to get XFS to unwedge. > > > > > > Signed-off-by: Mike Snitzer > > > > Shouldn't dm-thinp just return the bio with ENOSPC as it's error? > > The scsi layers already do this for hardware thinp ENOSPC failures, > > so dm-thinp should behave exactly the same (i.e. via > > __scsi_error_from_host_byte()) > > DM thinp does return -ENOSPC (uniformly so, as of 4.2-rc3 via commit > bcc696fac1). Before it was more nuanced, but it would either return > -ENOSPC or -EIO (transition from -ENOSPC to -EIO was when thinp's > no_space_timoeut expired). Right, which meant we couldn't get a reliable ENOSPC detection, so we just had to retry and hope.... > Anyway, XFS doesn't care what error is returned it'll just keep > retrying metdata IO indefinitely. Sure, that's historical behaviour and it's a good default for most systems. But see here for how we plan to handle this particular issue of error catergorisation: http://oss.sgi.com/archives/xfs/2015-02/msg00343.html BTW, it's not just ENOSPC we need this for - ENOMEM needs the same configurable behaviour now that the mm subsystem has started treating GFP_NOFAIL differently to just looping outside the allocator.... > > The behaviour of the filesystem > > should be the same in all cases - making it conditional on whether > > the thinp implementation can be polled for available space is wrong > > as most hardware thinp can't be polled by the kernel forthis info.. > > There isn't an immediate corollary for SCSI no. I've discussed flagging > the SCSI block device as out of space when the equivalent HW thinp > ASC/ASQ is returned from the SCSI target but there isn't an existing way > to know space was added to reset this state (like is possible with DM > thinp). > > But in the past you (or others) have claimed that ENOSPC isn't a rich > enough return to _know_ that it is a hard error. Yes, I've said that in the past because we haven't had any agreement on how block devices should report ENOSPC. However, this is slowly being standardised and I've seen enough people say "give us a knob to decide that ourselves as we know our hardware" that means we can rely on ENOSPC on the bio to detect this issue and handle it appropriately. > Now you seem to be oscillating away from a richer interface between > filesystems and the underlying block device to: a simple error code is > enough. Once we decided to give users the option to configure block device error handling, the need for more information from the block device goes away... > > If dm-thinp just returns ENOSPC from on the BIO like other hardware > > thinp devices, then it is up to the filesystem to handle that > > appropriately. i.e. whether an ENOSPC IO error is fatal to the > > filesystem is determined by filesystem configuration and context of > > the IO error, not whether the block device has no space (which we > > should already know from the ENOSPC error delivered by IO > > completion). > > OK, _please_ add that configurability to XFS. As I think you know, this > is a long-standing XFS on thinp issue (both DM and HW thinp). It got stuck on the side of the bikeshed, unfortunately, and then other stuff got painted on top of it. I'll go uncover it now that dm-thinp is returning reliable ENOSPC in ENOSPC conditions ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From dave@fromorbit.com Mon Jul 20 20:17:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 42FAE7F7B for ; Mon, 20 Jul 2015 20:17:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D3F50AC007 for ; Mon, 20 Jul 2015 18:17:23 -0700 (PDT) X-ASG-Debug-ID: 1437441442-04bdf00e916f7f0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id Jq8q4M1EglAeGJUf for ; Mon, 20 Jul 2015 18:17:22 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 10:39:08 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1ZHM3P-0000aq-Pe; Tue, 21 Jul 2015 11:09:07 +1000 Received: from dave by disappointment with local (Exim 4.86_RC4) (envelope-from ) id 1ZHM3P-00068Q-Ou; Tue, 21 Jul 2015 11:09:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: willy@linux.intel.com Subject: [PATCH 0/4] xfs: various fixes Date: Tue, 21 Jul 2015 11:09:01 +1000 X-ASG-Orig-Subj: [PATCH 0/4] xfs: various fixes Message-Id: <1437440945-23457-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.1.4 X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437441442 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20929 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi folks, The first 3 patches fix various issues that need to head to Linus before 4.2 is released. Patch 1 is a bug in the DAX support resulting froma botched merge on my part - DAX doesn't do the direct access part of DAX without this fix. (Willy, you only need to look at this patch. :) Patch 2 and 3 are stable kernel candidates - if nobody objects I'll add stable cc's to them - as they affect recovery behaviour and thought they are hard to trigger they can result in silent on-disk corruption occurring if they do. Patch 4 is just a cleanup that I noticed when looking at other code. Cheers, Dave. From dave@fromorbit.com Mon Jul 20 20:17:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EFC867F7B for ; Mon, 20 Jul 2015 20:17:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id AC9DC304043 for ; Mon, 20 Jul 2015 18:17:25 -0700 (PDT) X-ASG-Debug-ID: 1437441442-04bdf00e916f7f0002-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 8ol2oOShgy4PzYCK for ; Mon, 20 Jul 2015 18:17:23 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 10:39:08 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1ZHM3P-0000as-QP; Tue, 21 Jul 2015 11:09:07 +1000 Received: from dave by disappointment with local (Exim 4.86_RC4) (envelope-from ) id 1ZHM3P-00068Y-Pd; Tue, 21 Jul 2015 11:09:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: willy@linux.intel.com Subject: [PATCH 2/4] xfs: remote attribute headers contain an invalid LSN Date: Tue, 21 Jul 2015 11:09:03 +1000 X-ASG-Orig-Subj: [PATCH 2/4] xfs: remote attribute headers contain an invalid LSN Message-Id: <1437440945-23457-3-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437440945-23457-1-git-send-email-david@fromorbit.com> References: <1437440945-23457-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437441443 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20929 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner In recent testing, a system that crashed failed log recovery on restart with a bad symlink buffer magic number: XFS (vda): Starting recovery (logdev: internal) XFS (vda): Bad symlink block magic! XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 2060 On examination of the log via xfs_logprint, none of the symlink buffers in the log had a bad magic number, nor were any other types of buffer log format headers mis-identified as symlink buffers. Tracing was used to find the buffer the kernel was tripping over, and xfs_db identified it's contents as: 000: 5841524d 00000000 00000346 64d82b48 8983e692 d71e4680 a5f49e2c b317576e 020: 00000000 00602038 00000000 006034ce d0020000 00000000 4d4d4d4d 4d4d4d4d 040: 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 060: 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d ..... This is a remote attribute buffer, which are notable in that they are not logged but are instead written synchronously by the remote attribute code so that they exist on disk before the attribute transactions are committed to the journal. The above remote attribute block has an invalid LSN in it - cycle 0xd002000, block 0 - which means when log recovery comes along to determine if the transaction that writes to the underlying block should be replayed, it sees a block that has a future LSN and so does not replay the buffer data in the transaction. Instead, it validates the buffer magic number and attaches the buffer verifier to it. It is this buffer magic number check that is failing in the above assert, indicating that we skipped replay due to the LSN of the underlying buffer. The problem here is that the remote attribute buffers cannot have a valid LSN placed into them, because the transaction that contains the attribute tree pointer changes and the block allocation that the attribute data is being written to hasn't yet been committed. Hence the LSN field in the attribute block is completely unwritten, thereby leaving the underlying contents of the block in the LSN field. It could have any value, and hence a future overwrite of the block by log recovery may or may not work correctly. Fix this by always writing an invalid LSN to the remote attribute block, as any buffer in log recovery that needs to write over the remote attribute should occur. We are protected from having old data written over the attribute by the fact that freeing the block before the remote attribute is written will result in the buffer being marked stale in the log and so all changes prior to the buffer stale transaction will be cancelled by log recovery. Hence it is safe to ignore the LSN in the case or synchronously written, unlogged metadata such as remote attribute blocks, and to ensure we do that correctly, we need to write an invalid LSN to all remote attribute blocks to trigger immediate recovery of metadata that is written over the top. As a further protection for filesystems that may already have remote attribute blocks with bad LSNs on disk, change the log recovery code to always trigger immediate recovery of metadata over remote attribute blocks. Signed-off-by: Dave Chinner --- fs/xfs/libxfs/xfs_attr_remote.c | 29 +++++++++++++++++++++++------ fs/xfs/xfs_log_recover.c | 11 ++++++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c index 20de88d..2faec26 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.c +++ b/fs/xfs/libxfs/xfs_attr_remote.c @@ -159,11 +159,10 @@ xfs_attr3_rmt_write_verify( struct xfs_buf *bp) { struct xfs_mount *mp = bp->b_target->bt_mount; - struct xfs_buf_log_item *bip = bp->b_fspriv; + int blksize = mp->m_attr_geo->blksize; char *ptr; int len; xfs_daddr_t bno; - int blksize = mp->m_attr_geo->blksize; /* no verification of non-crc buffers */ if (!xfs_sb_version_hascrc(&mp->m_sb)) @@ -175,16 +174,22 @@ xfs_attr3_rmt_write_verify( ASSERT(len >= blksize); while (len > 0) { + struct xfs_attr3_rmt_hdr *rmt = (struct xfs_attr3_rmt_hdr *)ptr; + if (!xfs_attr3_rmt_verify(mp, ptr, blksize, bno)) { xfs_buf_ioerror(bp, -EFSCORRUPTED); xfs_verifier_error(bp); return; } - if (bip) { - struct xfs_attr3_rmt_hdr *rmt; - rmt = (struct xfs_attr3_rmt_hdr *)ptr; - rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); + /* + * Ensure we aren't writing bogus LSNs to disk. See + * xfs_attr3_rmt_hdr_set() for the explanation. + */ + if (rmt->rm_lsn != cpu_to_be64(NULLCOMMITLSN)) { + xfs_buf_ioerror(bp, -EFSCORRUPTED); + xfs_verifier_error(bp); + return; } xfs_update_cksum(ptr, blksize, XFS_ATTR3_RMT_CRC_OFF); @@ -221,6 +226,18 @@ xfs_attr3_rmt_hdr_set( rmt->rm_owner = cpu_to_be64(ino); rmt->rm_blkno = cpu_to_be64(bno); + /* + * Remote attribute blocks are written synchronously, so we don't + * have an LSN that we can stamp in them that makes any sense to log + * recovery. To ensure that log recovery handles overwrites of these + * blocks sanely (i.e. once they've been freed and reallocated as some + * other type of metadata) we need to ensure that the LSN has a value + * that tells log recovery to ignore the LSN and overwrite the buffer + * with whatever is in it's log. To do this, we use the magic + * NULLCOMMITLSN to indicate that the LSN is invalid. + */ + rmt->rm_lsn = cpu_to_be64(NULLCOMMITLSN); + return sizeof(struct xfs_attr3_rmt_hdr); } diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 01dd228..480ebba 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1886,9 +1886,14 @@ xlog_recover_get_buf_lsn( uuid = &((struct xfs_dir3_blk_hdr *)blk)->uuid; break; case XFS_ATTR3_RMT_MAGIC: - lsn = be64_to_cpu(((struct xfs_attr3_rmt_hdr *)blk)->rm_lsn); - uuid = &((struct xfs_attr3_rmt_hdr *)blk)->rm_uuid; - break; + /* + * Remote attr blocks are written synchronously, rather than + * being logged. That means they do not contain a valid LSN + * (i.e. transactionally ordered) in them, and hence any time we + * see a buffer to replay over the top of a remote attribute + * block we should simply do so. + */ + goto recover_immediately; case XFS_SB_MAGIC: lsn = be64_to_cpu(((struct xfs_dsb *)blk)->sb_lsn); uuid = &((struct xfs_dsb *)blk)->sb_uuid; -- 2.1.4 From dave@fromorbit.com Mon Jul 20 20:17:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D3D6C7F83 for ; Mon, 20 Jul 2015 20:17:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id AEDF6304043 for ; Mon, 20 Jul 2015 18:17:23 -0700 (PDT) X-ASG-Debug-ID: 1437441439-04cbb00f09b1630002-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id S2TDBozdUwbEE9xQ for ; Mon, 20 Jul 2015 18:17:21 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 10:39:08 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1ZHM3P-0000ar-Q2; Tue, 21 Jul 2015 11:09:07 +1000 Received: from dave by disappointment with local (Exim 4.86_RC4) (envelope-from ) id 1ZHM3P-00068T-PF; Tue, 21 Jul 2015 11:09:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: willy@linux.intel.com Subject: [PATCH 1/4] xfs: call dax_fault on read page faults for DAX Date: Tue, 21 Jul 2015 11:09:02 +1000 X-ASG-Orig-Subj: [PATCH 1/4] xfs: call dax_fault on read page faults for DAX Message-Id: <1437440945-23457-2-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437440945-23457-1-git-send-email-david@fromorbit.com> References: <1437440945-23457-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437441441 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20929 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner When modifying the patch series to handle the XFS MMAP_LOCK nesting of page faults, I botched the conversion of the read page fault path, and so it is only every calling through the page cache. Re-add the necessary __dax_fault() call for such files. Because the get_blocks callback on read faults may not set up the mapping buffer correctly to allow unwritten extent completion to be run, we need to allow callers of __dax_fault() to pass a null complete_unwritten() callback. The DAX code always zeros the unwritten page when it is read faulted so there are no stale data exposure issues with not doing the conversion. The only downside will be the potential for increased CPU overhead on repeated read faults of the same page. If this proves to be a problem, then the filesystem needs to fix it's get_block callback and provide a convert_unwritten() callback to the read fault path. Signed-off-by: Dave Chinner --- fs/dax.c | 9 ++++++++- fs/xfs/xfs_file.c | 21 +++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index c3e21cc..86d2cee 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -319,6 +319,11 @@ static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh, * @vma: The virtual memory area where the fault occurred * @vmf: The description of the fault * @get_block: The filesystem method used to translate file offsets to blocks + * @complete_unwritten: The filesystem method used to convert unwritten blocks + * to written so the data written to them is exposed. This is required for + * write faults, but optional for read faults as dax_insert_mapping() will + * always do the right thing on a read fault (i.e. zero the underlying + * page). * * When a page fault occurs, filesystems may call this helper in their * fault handler for DAX files. __dax_fault() assumes the caller has done all @@ -339,6 +344,8 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, int error; int major = 0; + WARN_ON_ONCE((vmf->flags & FAULT_FLAG_WRITE) && !complete_unwritten); + size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT; if (vmf->pgoff >= size) return VM_FAULT_SIGBUS; @@ -437,7 +444,7 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, * as for normal BH based IO completions. */ error = dax_insert_mapping(inode, &bh, vma, vmf); - if (buffer_unwritten(&bh)) + if (buffer_unwritten(&bh) && complete_unwritten) complete_unwritten(&bh, !error); out: diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index f0e8249..db4acc1 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1514,18 +1514,27 @@ xfs_filemap_fault( struct vm_area_struct *vma, struct vm_fault *vmf) { - struct xfs_inode *ip = XFS_I(file_inode(vma->vm_file)); + struct inode *inode = file_inode(vma->vm_file); int ret; - trace_xfs_filemap_fault(ip); + trace_xfs_filemap_fault(XFS_I(inode)); /* DAX can shortcut the normal fault path on write faults! */ - if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(VFS_I(ip))) + if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(inode)) return xfs_filemap_page_mkwrite(vma, vmf); - xfs_ilock(ip, XFS_MMAPLOCK_SHARED); - ret = filemap_fault(vma, vmf); - xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); + xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); + if (IS_DAX(inode)) { + /* + * we do not want to trigger unwritten extent conversion on read + * faults - that is unnecessary overhead and would also require + * changes to xfs_get_blocks_direct() to map unwritten extent + * ioend for conversion on read-only mappings. + */ + ret = __dax_fault(vma, vmf, xfs_get_blocks_direct, NULL); + } else + ret = filemap_fault(vma, vmf); + xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); return ret; } -- 2.1.4 From dave@fromorbit.com Mon Jul 20 20:17:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EAA727F7B for ; Mon, 20 Jul 2015 20:17:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C552E8F8035 for ; Mon, 20 Jul 2015 18:17:24 -0700 (PDT) X-ASG-Debug-ID: 1437441439-04cbb00f09b1630003-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 5bwSaeVlkcxNLIHd for ; Mon, 20 Jul 2015 18:17:23 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 10:39:08 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1ZHM3P-0000au-R5; Tue, 21 Jul 2015 11:09:07 +1000 Received: from dave by disappointment with local (Exim 4.86_RC4) (envelope-from ) id 1ZHM3P-00068i-QI; Tue, 21 Jul 2015 11:09:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: willy@linux.intel.com Subject: [PATCH 4/4] xfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag Date: Tue, 21 Jul 2015 11:09:05 +1000 X-ASG-Orig-Subj: [PATCH 4/4] xfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag Message-Id: <1437440945-23457-5-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437440945-23457-1-git-send-email-david@fromorbit.com> References: <1437440945-23457-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437441443 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20929 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner xfs_bunmapi() doesn't care what type of extent is being freed and does not look at the XFS_BMAPI_METADATA flag at all. As such we can remove the XFS_BMAPI_METADATA from all callers that use it. Signed-off-by: Dave Chinner --- fs/xfs/libxfs/xfs_attr_remote.c | 5 ++--- fs/xfs/libxfs/xfs_da_btree.c | 4 ++-- fs/xfs/libxfs/xfs_dir2.c | 33 +++++++++++++++------------------ fs/xfs/xfs_symlink.c | 2 +- 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c index dd71403..89356aa 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.c +++ b/fs/xfs/libxfs/xfs_attr_remote.c @@ -618,9 +618,8 @@ xfs_attr_rmtval_remove( xfs_bmap_init(args->flist, args->firstblock); error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, - XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, - 1, args->firstblock, args->flist, - &done); + XFS_BMAPI_ATTRFORK, 1, args->firstblock, + args->flist, &done); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, &committed); diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c index 2385f8c..2ae91e8 100644 --- a/fs/xfs/libxfs/xfs_da_btree.c +++ b/fs/xfs/libxfs/xfs_da_btree.c @@ -2351,8 +2351,8 @@ xfs_da_shrink_inode( * the last block to the place we want to kill. */ error = xfs_bunmapi(tp, dp, dead_blkno, count, - xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA, - 0, args->firstblock, args->flist, &done); + xfs_bmapi_aflag(w), 0, args->firstblock, + args->flist, &done); if (error == -ENOSPC) { if (w != XFS_DATA_FORK) break; diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c index a69fb3a..e0ba976 100644 --- a/fs/xfs/libxfs/xfs_dir2.c +++ b/fs/xfs/libxfs/xfs_dir2.c @@ -674,25 +674,22 @@ xfs_dir2_shrink_inode( mp = dp->i_mount; tp = args->trans; da = xfs_dir2_db_to_da(args->geo, db); - /* - * Unmap the fsblock(s). - */ - if ((error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount, - XFS_BMAPI_METADATA, 0, args->firstblock, args->flist, - &done))) { + + /* Unmap the fsblock(s). */ + error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount, 0, 0, + args->firstblock, args->flist, &done); + if (error) { /* - * ENOSPC actually can happen if we're in a removename with - * no space reservation, and the resulting block removal - * would cause a bmap btree split or conversion from extents - * to btree. This can only happen for un-fragmented - * directory blocks, since you need to be punching out - * the middle of an extent. - * In this case we need to leave the block in the file, - * and not binval it. - * So the block has to be in a consistent empty state - * and appropriately logged. - * We don't free up the buffer, the caller can tell it - * hasn't happened since it got an error back. + * ENOSPC actually can happen if we're in a removename with no + * space reservation, and the resulting block removal would + * cause a bmap btree split or conversion from extents to btree. + * This can only happen for un-fragmented directory blocks, + * since you need to be punching out the middle of an extent. + * In this case we need to leave the block in the file, and not + * binval it. So the block has to be in a consistent empty + * state and appropriately logged. We don't free up the buffer, + * the caller can tell it hasn't happened since it got an error + * back. */ return error; } diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index 4be27b0..05c44bf 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c @@ -501,7 +501,7 @@ xfs_inactive_symlink_rmt( /* * Unmap the dead block(s) to the free_list. */ - error = xfs_bunmapi(tp, ip, 0, size, XFS_BMAPI_METADATA, nmaps, + error = xfs_bunmapi(tp, ip, 0, size, 0, nmaps, &first_block, &free_list, &done); if (error) goto error_bmap_cancel; -- 2.1.4 From dave@fromorbit.com Mon Jul 20 20:17:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 57DB67F82 for ; Mon, 20 Jul 2015 20:17:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B9CA0AC007 for ; Mon, 20 Jul 2015 18:17:22 -0700 (PDT) X-ASG-Debug-ID: 1437441439-04cbb00f09b1630001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 2KXvkyvHkzNiHKLT for ; Mon, 20 Jul 2015 18:17:19 -0700 (PDT) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 10:39:08 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1ZHM3P-0000at-Qg; Tue, 21 Jul 2015 11:09:07 +1000 Received: from dave by disappointment with local (Exim 4.86_RC4) (envelope-from ) id 1ZHM3P-00068d-Py; Tue, 21 Jul 2015 11:09:07 +1000 From: Dave Chinner To: xfs@oss.sgi.com Cc: willy@linux.intel.com Subject: [PATCH 3/4] xfs: remote attributes need to be considered data Date: Tue, 21 Jul 2015 11:09:04 +1000 X-ASG-Orig-Subj: [PATCH 3/4] xfs: remote attributes need to be considered data Message-Id: <1437440945-23457-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437440945-23457-1-git-send-email-david@fromorbit.com> References: <1437440945-23457-1-git-send-email-david@fromorbit.com> X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437441439 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20929 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner We don't log remote attribute contents, and instead write them synchronously before we commit the block allocation and attribute tree update transaction. As a result we are writing to the allocated space before the allcoation has been made permanent. As a result, we cannot consider this allocation to be a metadata allocation. Metadata allocation can take blocks from the free list and so reuse them before the transaction that freed the block is committed to disk. This behaviour is perfectly fine for journalled metadata changes as log recovery will ensure the free operation is replayed before the overwrite, but for remote attribute writes this is not the case. Hence we have to consider the remote attribute blocks to contain data and allocate accordingly. We do this by dropping the XFS_BMAPI_METADATA flag from the block allocation. This means the allocation will not use blocks that are on the busy list without first ensuring that the freeing transaction has been committed to disk and the blocks removed from the busy list. This ensures we will never overwrite a freed block without first ensuring that it is really free. Signed-off-by: Dave Chinner --- fs/xfs/libxfs/xfs_attr_remote.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c index 2faec26..dd71403 100644 --- a/fs/xfs/libxfs/xfs_attr_remote.c +++ b/fs/xfs/libxfs/xfs_attr_remote.c @@ -451,14 +451,21 @@ xfs_attr_rmtval_set( /* * Allocate a single extent, up to the size of the value. + * + * Note that we have to consider this a data allocation as we + * write the remote attribute without logging the contents. + * Hence we must ensure that we aren't using blocks that are on + * the busy list so that we don't overwrite blocks which have + * recently been freed but their transactions are not yet + * committed to disk. If we overwrite the contents of a busy + * extent and then crash then the block may not contain the + * correct metadata after log recovery occurs. */ xfs_bmap_init(args->flist, args->firstblock); nmap = 1; error = xfs_bmapi_write(args->trans, dp, (xfs_fileoff_t)lblkno, - blkcnt, - XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, - args->firstblock, args->total, &map, &nmap, - args->flist); + blkcnt, XFS_BMAPI_ATTRFORK, args->firstblock, + args->total, &map, &nmap, args->flist); if (!error) { error = xfs_bmap_finish(&args->trans, args->flist, &committed); -- 2.1.4 From david@fromorbit.com Mon Jul 20 20:59:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 29C2B7F7D for ; Mon, 20 Jul 2015 20:59:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id F39AA8F8049 for ; Mon, 20 Jul 2015 18:59:39 -0700 (PDT) X-ASG-Debug-ID: 1437443975-04cbb00f08b1ef0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id tm5RegyXUmhCykY1 for ; Mon, 20 Jul 2015 18:59:36 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BpCgCQpq1VPD0gLHlcgxOBPYJUg3yiQAEBAQEBB5pRAgIBAYE1TQEBAQEBAQcBAQEBQAE/hGQcIxgkNAUlAwcaE4gtyV4sGYYFhmsBg0iEMgWFIow5gniKAIIogUSHLJAdgkCBdCwxgksBAQE Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 11:29:34 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHMqE-0000fV-9I; Tue, 21 Jul 2015 11:59:34 +1000 Date: Tue, 21 Jul 2015 11:59:34 +1000 From: Dave Chinner To: Ming Lei Cc: Michal Hocko , linux-kernel@vger.kernel.org, linux-mm@kvack.org, xfs@oss.sgi.com Subject: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions Message-ID: <20150721015934.GY7943@dastard> X-ASG-Orig-Subj: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437443975 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20931 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Ming, With the recent merge of the loop device changes, I'm now seeing XFS deadlock on my single CPU, 1GB RAM VM running xfs/073. The deadlocked is as follows: kloopd1: loop_queue_read_work xfs_file_iter_read lock XFS inode XFS_IOLOCK_SHARED (on image file) page cache read (GFP_KERNEL) radix tree alloc memory reclaim reclaim XFS inodes log force to unpin inodes xfs-cil/loop1: xlog_cil_push xlog_write xlog_state_get_iclog_space() kloopd1: loop_queue_write_work xfs_file_write_iter lock XFS inode XFS_IOLOCK_EXCL (on image file) [The full stack traces are below]. i.e. the kloopd, with it's split read and write work queues, has introduced a dependency through memory reclaim. i.e. that writes need to be able to progress for reads make progress. The problem, fundamentally, is that mpage_readpages() does a GFP_KERNEL allocation, rather than paying attention to the inode's mapping gfp mask, which is set to GFP_NOFS. The didn't used to happen, because the loop device used to issue reads through the splice path and that does: error = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL & mapping_gfp_mask(mapping)); i.e. it pays attention to the allocation context placed on the inode and so is doing GFP_NOFS allocations here and avoiding the recursion problem. [ CC'd Michal Hocko and the mm list because it's a clear exaple of why ignoring the mapping gfp mask on any page cache allocation is a landmine waiting to be tripped over. ] Cheers, Dave. [81248.855166] kworker/u3:0 D ffff88003a8fadc8 11304 930 2 0x00000000 [81248.855166] Workqueue: kloopd1 loop_queue_read_work [81248.855166] ffff88003a8fadc8 ffff880003e48000 ffff8800332fdd00 ffff88003a8fadb8 [81248.855166] ffff88003a8fc000 ffff88003a8faf18 ffff8800332fdd00 ffff88003a8faf10 [81248.855166] ffffffffffffffff ffff88003a8fade8 ffffffff81db608e ffff88003fc153c0 [81248.855166] Call Trace: [81248.855166] [] schedule+0x3e/0x90 [81248.855166] [] schedule_timeout+0x1cf/0x240 [81248.855166] [] ? try_to_wake_up+0x1f6/0x330 [81248.855166] [] wait_for_completion+0xb4/0x120 [81248.855166] [] ? wake_up_q+0x70/0x70 [81248.855166] [] flush_work+0xf9/0x170 [81248.855166] [] ? destroy_worker+0x90/0x90 [81248.855166] [] xlog_cil_force_lsn+0xcc/0x250 [81248.855166] [] _xfs_log_force_lsn+0x82/0x2f0 [81248.855166] [] xfs_log_force_lsn+0x2e/0xa0 [81248.855166] [] ? xfs_iunpin_wait+0x19/0x20 [81248.855166] [] __xfs_iunpin_wait+0xb6/0x170 [81248.855166] [] ? autoremove_wake_function+0x40/0x40 [81248.855166] [] xfs_iunpin_wait+0x19/0x20 [81248.855166] [] xfs_reclaim_inode+0x72/0x350 [81248.855166] [] xfs_reclaim_inodes_ag+0x212/0x350 [81248.855166] [] ? _raw_spin_unlock+0xe/0x20 [81248.855166] [] ? _raw_spin_unlock+0xe/0x20 [81248.855166] [] xfs_reclaim_inodes_nr+0x33/0x40 [81248.855166] [] xfs_fs_free_cached_objects+0x19/0x20 [81248.855166] [] super_cache_scan+0x191/0x1a0 [81248.855166] [] shrink_slab.part.62.constprop.80+0x1b4/0x380 [81248.855166] [] shrink_zone+0x90/0xa0 [81248.855166] [] do_try_to_free_pages+0x180/0x2c0 [81248.855166] [] try_to_free_pages+0xba/0x160 [81248.855166] [] __alloc_pages_nodemask+0x499/0x840 [81248.855166] [] new_slab+0x6f/0x2c0 [81248.855166] [] __slab_alloc.constprop.75+0x3fa/0x580 [81248.855166] [] ? __radix_tree_preload+0x48/0xc0 [81248.855166] [] ? __radix_tree_preload+0x48/0xc0 [81248.855166] [] kmem_cache_alloc+0x12e/0x160 [81248.855166] [] __radix_tree_preload+0x48/0xc0 [81248.855166] [] radix_tree_maybe_preload+0x19/0x20 [81248.855166] [] __add_to_page_cache_locked+0x39/0x1f0 [81248.855166] [] add_to_page_cache_lru+0x28/0x80 [81248.855166] [] mpage_readpages+0xb9/0x130 [81248.855166] [] ? __xfs_get_blocks+0x840/0x840 [81248.855166] [] ? __xfs_get_blocks+0x840/0x840 [81248.855166] [] xfs_vm_readpages+0x1d/0x20 [81248.855166] [] __do_page_cache_readahead+0x1b9/0x250 [81248.855166] [] ondemand_readahead+0xdf/0x270 [81248.855166] [] ? find_get_entry+0x66/0xb0 [81248.855166] [] page_cache_async_readahead+0x92/0xc0 [81248.855166] [] generic_file_read_iter+0x41c/0x650 [81248.855166] [] ? down_read+0x24/0x40 [81248.855166] [] xfs_file_read_iter+0xe6/0x2d0 [81248.855166] [] vfs_iter_read+0x62/0xa0 [81248.855166] [] loop_handle_cmd.isra.28+0x6dd/0xaa0 [81248.855166] [] ? try_to_wake_up+0x1f6/0x330 [81248.855166] [] loop_queue_read_work+0x12/0x20 [81248.855166] [] process_one_work+0x14e/0x410 [81248.855166] [] worker_thread+0x4e/0x460 [81248.855166] [] ? rescuer_thread+0x300/0x300 [81248.855166] [] kthread+0xec/0x110 [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 [81248.855166] [] ret_from_fork+0x3f/0x70 [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 [81248.855166] kworker/0:0 D ffff88002ed8bb88 13896 948 2 0x00000000 [81248.855166] Workqueue: xfs-cil/loop1 xlog_cil_push_work [81248.855166] ffff88002ed8bb88 ffffffff82368540 ffff880003e4be00 ffff88001a467cf0 [81248.855166] ffff88002ed8c000 ffff880005123cf8 ffff88001a467cf0 ffff880003e4be00 [81248.855166] ffff880005123cc0 ffff88002ed8bba8 ffffffff81db608e ffff88002ed8bba8 [81248.855166] Call Trace: [81248.855166] [] schedule+0x3e/0x90 [81248.855166] [] xlog_state_get_iclog_space+0xe6/0x330 [81248.855166] [] ? wake_up_q+0x70/0x70 [81248.855166] [] xlog_write+0x1b6/0x870 [81248.855166] [] xlog_cil_push+0x24d/0x400 [81248.855166] [] xlog_cil_push_work+0x15/0x20 [81248.855166] [] process_one_work+0x14e/0x410 [81248.855166] [] worker_thread+0x4e/0x460 [81248.855166] [] ? rescuer_thread+0x300/0x300 [81248.855166] [] ? rescuer_thread+0x300/0x300 [81248.855166] [] kthread+0xec/0x110 [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 [81248.855166] [] ret_from_fork+0x3f/0x70 [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 [81248.855166] kworker/u3:4 D ffff8800290439f8 12456 1066 2 0x00000000 [81248.855166] Workqueue: kloopd1 loop_queue_write_work [81248.855166] ffff8800290439f8 ffffffff82368540 ffff8800332f9f00 ffff8800290439e8 [81248.855166] ffff880029044000 ffffffff00000000 ffff88001366cfd8 ffffffff00000002 [81248.855166] ffff8800332f9f00 ffff880029043a18 ffffffff81db608e ffff880029043a18 [81248.855166] Call Trace: [81248.855166] [] schedule+0x3e/0x90 [81248.855166] [] rwsem_down_write_failed+0x13d/0x340 [81248.855166] [] ? try_to_wake_up+0x1f6/0x330 [81248.855166] [] ? xfs_file_buffered_aio_write+0x66/0x250 [81248.855166] [] call_rwsem_down_write_failed+0x13/0x20 [81248.855166] [] ? down_write+0x3f/0x60 [81248.855166] [] xfs_ilock+0x154/0x1d0 [81248.855166] [] xfs_file_buffered_aio_write+0x66/0x250 [81248.855166] [] ? kblockd_schedule_work+0x1d/0x30 [81248.855166] [] ? blk_mq_kick_requeue_list+0x15/0x20 [81248.855166] [] xfs_file_write_iter+0x106/0x120 [81248.855166] [] vfs_iter_write+0x63/0xa0 [81248.855166] [] lo_write_bvec+0x58/0x100 [81248.855166] [] loop_handle_cmd.isra.28+0x958/0xaa0 [81248.855166] [] loop_queue_write_work+0x8f/0xd0 [81248.855166] [] process_one_work+0x14e/0x410 [81248.855166] [] worker_thread+0x4e/0x460 [81248.855166] [] ? rescuer_thread+0x300/0x300 [81248.855166] [] kthread+0xec/0x110 [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 [81248.855166] [] ret_from_fork+0x3f/0x70 [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 -- Dave Chinner david@fromorbit.com From ming.lei@canonical.com Mon Jul 20 23:06:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 06FE57F4E for ; Mon, 20 Jul 2015 23:06:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C83AE8F8049 for ; Mon, 20 Jul 2015 21:06:02 -0700 (PDT) X-ASG-Debug-ID: 1437451560-04cbb00f06b39e0001-NocioJ Received: from youngberry.canonical.com (youngberry.canonical.com [91.189.89.112]) by cuda.sgi.com with ESMTP id zYDl6FRvVNt1qecm for ; Mon, 20 Jul 2015 21:06:00 -0700 (PDT) X-Barracuda-Envelope-From: ming.lei@canonical.com X-Barracuda-Apparent-Source-IP: 91.189.89.112 Received: from mail-ie0-f182.google.com ([209.85.223.182]) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1ZHOoY-0003pC-FW for xfs@oss.sgi.com; Tue, 21 Jul 2015 04:05:58 +0000 Received: by iecri3 with SMTP id ri3so37737439iec.2 for ; Mon, 20 Jul 2015 21:05:57 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.50.30.197 with SMTP id u5mr20450826igh.9.1437451557476; Mon, 20 Jul 2015 21:05:57 -0700 (PDT) Received: by 10.64.93.41 with HTTP; Mon, 20 Jul 2015 21:05:56 -0700 (PDT) In-Reply-To: <20150721015934.GY7943@dastard> References: <20150721015934.GY7943@dastard> Date: Tue, 21 Jul 2015 00:05:56 -0400 Message-ID: Subject: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions From: Ming Lei X-ASG-Orig-Subj: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions To: Dave Chinner Cc: Michal Hocko , Linux Kernel Mailing List , linux-mm , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: youngberry.canonical.com[91.189.89.112] X-Barracuda-Start-Time: 1437451560 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 20, 2015 at 9:59 PM, Dave Chinner wrote: > Hi Ming, > > With the recent merge of the loop device changes, I'm now seeing > XFS deadlock on my single CPU, 1GB RAM VM running xfs/073. > > The deadlocked is as follows: > > kloopd1: loop_queue_read_work > xfs_file_iter_read > lock XFS inode XFS_IOLOCK_SHARED (on image file) > page cache read (GFP_KERNEL) > radix tree alloc > memory reclaim > reclaim XFS inodes > log force to unpin inodes > > > xfs-cil/loop1: > xlog_cil_push > xlog_write > > xlog_state_get_iclog_space() > > > > kloopd1: loop_queue_write_work > xfs_file_write_iter > lock XFS inode XFS_IOLOCK_EXCL (on image file) > > > [The full stack traces are below]. > > i.e. the kloopd, with it's split read and write work queues, has > introduced a dependency through memory reclaim. i.e. that writes > need to be able to progress for reads make progress. This kind of change just makes READ vs READ OR WRITE submitted to fs concurrently, and the use case should have been simulated from user space on one regular XFS file too? > > The problem, fundamentally, is that mpage_readpages() does a > GFP_KERNEL allocation, rather than paying attention to the inode's > mapping gfp mask, which is set to GFP_NOFS. That looks the root cause, and I guess the issue is just triggered after commit aa4d86163e4(block: loop: switch to VFS ITER_BVEC) which changes splice to bvec iterator. > > The didn't used to happen, because the loop device used to issue > reads through the splice path and that does: > > error = add_to_page_cache_lru(page, mapping, index, > GFP_KERNEL & mapping_gfp_mask(mapping)); > > i.e. it pays attention to the allocation context placed on the > inode and so is doing GFP_NOFS allocations here and avoiding the > recursion problem. > > [ CC'd Michal Hocko and the mm list because it's a clear exaple of > why ignoring the mapping gfp mask on any page cache allocation is > a landmine waiting to be tripped over. ] > > Cheers, > > Dave. > > [81248.855166] kworker/u3:0 D ffff88003a8fadc8 11304 930 2 0x00000000 > [81248.855166] Workqueue: kloopd1 loop_queue_read_work > [81248.855166] ffff88003a8fadc8 ffff880003e48000 ffff8800332fdd00 ffff88003a8fadb8 > [81248.855166] ffff88003a8fc000 ffff88003a8faf18 ffff8800332fdd00 ffff88003a8faf10 > [81248.855166] ffffffffffffffff ffff88003a8fade8 ffffffff81db608e ffff88003fc153c0 > [81248.855166] Call Trace: > [81248.855166] [] schedule+0x3e/0x90 > [81248.855166] [] schedule_timeout+0x1cf/0x240 > [81248.855166] [] ? try_to_wake_up+0x1f6/0x330 > [81248.855166] [] wait_for_completion+0xb4/0x120 > [81248.855166] [] ? wake_up_q+0x70/0x70 > [81248.855166] [] flush_work+0xf9/0x170 > [81248.855166] [] ? destroy_worker+0x90/0x90 > [81248.855166] [] xlog_cil_force_lsn+0xcc/0x250 > [81248.855166] [] _xfs_log_force_lsn+0x82/0x2f0 > [81248.855166] [] xfs_log_force_lsn+0x2e/0xa0 > [81248.855166] [] ? xfs_iunpin_wait+0x19/0x20 > [81248.855166] [] __xfs_iunpin_wait+0xb6/0x170 > [81248.855166] [] ? autoremove_wake_function+0x40/0x40 > [81248.855166] [] xfs_iunpin_wait+0x19/0x20 > [81248.855166] [] xfs_reclaim_inode+0x72/0x350 > [81248.855166] [] xfs_reclaim_inodes_ag+0x212/0x350 > [81248.855166] [] ? _raw_spin_unlock+0xe/0x20 > [81248.855166] [] ? _raw_spin_unlock+0xe/0x20 > [81248.855166] [] xfs_reclaim_inodes_nr+0x33/0x40 > [81248.855166] [] xfs_fs_free_cached_objects+0x19/0x20 > [81248.855166] [] super_cache_scan+0x191/0x1a0 > [81248.855166] [] shrink_slab.part.62.constprop.80+0x1b4/0x380 > [81248.855166] [] shrink_zone+0x90/0xa0 > [81248.855166] [] do_try_to_free_pages+0x180/0x2c0 > [81248.855166] [] try_to_free_pages+0xba/0x160 > [81248.855166] [] __alloc_pages_nodemask+0x499/0x840 > [81248.855166] [] new_slab+0x6f/0x2c0 > [81248.855166] [] __slab_alloc.constprop.75+0x3fa/0x580 > [81248.855166] [] ? __radix_tree_preload+0x48/0xc0 > [81248.855166] [] ? __radix_tree_preload+0x48/0xc0 > [81248.855166] [] kmem_cache_alloc+0x12e/0x160 > [81248.855166] [] __radix_tree_preload+0x48/0xc0 > [81248.855166] [] radix_tree_maybe_preload+0x19/0x20 > [81248.855166] [] __add_to_page_cache_locked+0x39/0x1f0 > [81248.855166] [] add_to_page_cache_lru+0x28/0x80 > [81248.855166] [] mpage_readpages+0xb9/0x130 > [81248.855166] [] ? __xfs_get_blocks+0x840/0x840 > [81248.855166] [] ? __xfs_get_blocks+0x840/0x840 > [81248.855166] [] xfs_vm_readpages+0x1d/0x20 > [81248.855166] [] __do_page_cache_readahead+0x1b9/0x250 > [81248.855166] [] ondemand_readahead+0xdf/0x270 > [81248.855166] [] ? find_get_entry+0x66/0xb0 > [81248.855166] [] page_cache_async_readahead+0x92/0xc0 > [81248.855166] [] generic_file_read_iter+0x41c/0x650 > [81248.855166] [] ? down_read+0x24/0x40 > [81248.855166] [] xfs_file_read_iter+0xe6/0x2d0 > [81248.855166] [] vfs_iter_read+0x62/0xa0 > [81248.855166] [] loop_handle_cmd.isra.28+0x6dd/0xaa0 > [81248.855166] [] ? try_to_wake_up+0x1f6/0x330 > [81248.855166] [] loop_queue_read_work+0x12/0x20 > [81248.855166] [] process_one_work+0x14e/0x410 > [81248.855166] [] worker_thread+0x4e/0x460 > [81248.855166] [] ? rescuer_thread+0x300/0x300 > [81248.855166] [] kthread+0xec/0x110 > [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 > [81248.855166] [] ret_from_fork+0x3f/0x70 > [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 > > [81248.855166] kworker/0:0 D ffff88002ed8bb88 13896 948 2 0x00000000 > [81248.855166] Workqueue: xfs-cil/loop1 xlog_cil_push_work > [81248.855166] ffff88002ed8bb88 ffffffff82368540 ffff880003e4be00 ffff88001a467cf0 > [81248.855166] ffff88002ed8c000 ffff880005123cf8 ffff88001a467cf0 ffff880003e4be00 > [81248.855166] ffff880005123cc0 ffff88002ed8bba8 ffffffff81db608e ffff88002ed8bba8 > [81248.855166] Call Trace: > [81248.855166] [] schedule+0x3e/0x90 > [81248.855166] [] xlog_state_get_iclog_space+0xe6/0x330 > [81248.855166] [] ? wake_up_q+0x70/0x70 > [81248.855166] [] xlog_write+0x1b6/0x870 > [81248.855166] [] xlog_cil_push+0x24d/0x400 > [81248.855166] [] xlog_cil_push_work+0x15/0x20 > [81248.855166] [] process_one_work+0x14e/0x410 > [81248.855166] [] worker_thread+0x4e/0x460 > [81248.855166] [] ? rescuer_thread+0x300/0x300 > [81248.855166] [] ? rescuer_thread+0x300/0x300 > [81248.855166] [] kthread+0xec/0x110 > [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 > [81248.855166] [] ret_from_fork+0x3f/0x70 > [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 > > [81248.855166] kworker/u3:4 D ffff8800290439f8 12456 1066 2 0x00000000 > [81248.855166] Workqueue: kloopd1 loop_queue_write_work > [81248.855166] ffff8800290439f8 ffffffff82368540 ffff8800332f9f00 ffff8800290439e8 > [81248.855166] ffff880029044000 ffffffff00000000 ffff88001366cfd8 ffffffff00000002 > [81248.855166] ffff8800332f9f00 ffff880029043a18 ffffffff81db608e ffff880029043a18 > [81248.855166] Call Trace: > [81248.855166] [] schedule+0x3e/0x90 > [81248.855166] [] rwsem_down_write_failed+0x13d/0x340 > [81248.855166] [] ? try_to_wake_up+0x1f6/0x330 > [81248.855166] [] ? xfs_file_buffered_aio_write+0x66/0x250 > [81248.855166] [] call_rwsem_down_write_failed+0x13/0x20 > [81248.855166] [] ? down_write+0x3f/0x60 > [81248.855166] [] xfs_ilock+0x154/0x1d0 > [81248.855166] [] xfs_file_buffered_aio_write+0x66/0x250 > [81248.855166] [] ? kblockd_schedule_work+0x1d/0x30 > [81248.855166] [] ? blk_mq_kick_requeue_list+0x15/0x20 > [81248.855166] [] xfs_file_write_iter+0x106/0x120 > [81248.855166] [] vfs_iter_write+0x63/0xa0 > [81248.855166] [] lo_write_bvec+0x58/0x100 > [81248.855166] [] loop_handle_cmd.isra.28+0x958/0xaa0 > [81248.855166] [] loop_queue_write_work+0x8f/0xd0 > [81248.855166] [] process_one_work+0x14e/0x410 > [81248.855166] [] worker_thread+0x4e/0x460 > [81248.855166] [] ? rescuer_thread+0x300/0x300 > [81248.855166] [] kthread+0xec/0x110 > [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 > [81248.855166] [] ret_from_fork+0x3f/0x70 > [81248.855166] [] ? kthread_create_on_node+0x1b0/0x1b0 > -- > Dave Chinner > david@fromorbit.com From david@fromorbit.com Tue Jul 21 00:46:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0E6C97F6A for ; Tue, 21 Jul 2015 00:46:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D2C18304048 for ; Mon, 20 Jul 2015 22:46:18 -0700 (PDT) X-ASG-Debug-ID: 1437457574-04cb6c3b8cba7d0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id FJRM9sJ05OCUge1G for ; Mon, 20 Jul 2015 22:46:15 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BXCgCz261VPD0gLHlcgxOBPYJUg3yiQgEBAQEBB5pRAgIBAQKBME0BAQEBAQEHAQEBAUABP4QjAQEBAwEnExwjEAgDGAklDwUlAwcaE4gmB8leAQEBBwIBHxmGBYUugT0Bg0gHhCsFhSKPMYoAgiiBRIcskB2CQCSBUCwxgksBAQE Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 15:16:12 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHQNY-0000wg-HR; Tue, 21 Jul 2015 15:46:12 +1000 Date: Tue, 21 Jul 2015 15:46:12 +1000 From: Dave Chinner To: Ming Lei Cc: Michal Hocko , Linux Kernel Mailing List , linux-mm , xfs@oss.sgi.com Subject: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions Message-ID: <20150721054612.GZ7943@dastard> X-ASG-Orig-Subj: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions References: <20150721015934.GY7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437457575 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20935 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 21, 2015 at 12:05:56AM -0400, Ming Lei wrote: > On Mon, Jul 20, 2015 at 9:59 PM, Dave Chinner wrote: > > Hi Ming, > > > > With the recent merge of the loop device changes, I'm now seeing > > XFS deadlock on my single CPU, 1GB RAM VM running xfs/073. > > > > The deadlocked is as follows: > > > > kloopd1: loop_queue_read_work > > xfs_file_iter_read > > lock XFS inode XFS_IOLOCK_SHARED (on image file) > > page cache read (GFP_KERNEL) > > radix tree alloc > > memory reclaim > > reclaim XFS inodes > > log force to unpin inodes > > > > > > xfs-cil/loop1: > > xlog_cil_push > > xlog_write > > > > xlog_state_get_iclog_space() > > > > > > > > kloopd1: loop_queue_write_work > > xfs_file_write_iter > > lock XFS inode XFS_IOLOCK_EXCL (on image file) > > > > > > [The full stack traces are below]. > > > > i.e. the kloopd, with it's split read and write work queues, has > > introduced a dependency through memory reclaim. i.e. that writes > > need to be able to progress for reads make progress. > > This kind of change just makes READ vs READ OR WRITE submitted > to fs concurrently, and the use case should have been simulated from > user space on one regular XFS file too? Assuming the "regular XFS file" is on a normal block device (i.e. not a loop device) then this will not deadlock as there is not dependency on vfs level locking for log writes. i.e. normal userspace IO path is: userspace read vfs_read xfs_read page cache alloc (GFP_KERNEL) direct reclaim xfs_inode reclaim log force CIL push xlog_write submit_bio -> hardware. And then the log IO completes, and everything continues onward. What the loop device used to do: userspace read vfs_read xfs_read page cache alloc (GFP_KERNEL) submit_bio loop device splice_read (on image file) xfs_splice_read page cache alloc (GFP_NOFS) direct reclaim submit_bio -> hardware. And when the read Io completes, everything moves onwards. What the loop device now does: userspace read vfs_read xfs_read page cache alloc (GFP_KERNEL) submit_bio loop device vfs_read (on image file) xfs_read page cache alloc (GFP_KERNEL) direct reclaim xfs_inode reclaim log force CIL push xlog_write submit_bio loop device vfs_write (on image file) xfs_write > > The problem, fundamentally, is that mpage_readpages() does a > > GFP_KERNEL allocation, rather than paying attention to the inode's > > mapping gfp mask, which is set to GFP_NOFS. > > That looks the root cause, and I guess the issue is just triggered > after commit aa4d86163e4(block: loop: switch to VFS ITER_BVEC) > which changes splice to bvec iterator. Yup - you are the unfortunate person who has wandered into the minefield I'd been telling people about for quite some time. :( Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jul 21 01:37:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7390A7F6C for ; Tue, 21 Jul 2015 01:37:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4458D304048 for ; Mon, 20 Jul 2015 23:37:42 -0700 (PDT) X-ASG-Debug-ID: 1437460659-04cb6c3b88bb7f0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id MauYT5eGtNp99byq for ; Mon, 20 Jul 2015 23:37:40 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D9CQBm561VPD0gLHlcgxOBPYJUg3yiQwEBAQEBAQaaUQQCAoEvTQEBAQEBAQcBAQEBQAE/hCMBAQEDAScTHCMFCwgDDgoJJQ8FJQMHGhOIJgfJagEBAQEGAgEfGYYFhS6FBgeDF4EUBZRTjCiZDYQ0LDGCSwEBAQ Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 21 Jul 2015 16:07:38 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHRBK-000120-D4; Tue, 21 Jul 2015 16:37:38 +1000 Date: Tue, 21 Jul 2015 16:37:38 +1000 From: Dave Chinner To: Jan Tulak Cc: xfs-oss Subject: Re: xfsprogs: useless code blocks Message-ID: <20150721063738.GA7943@dastard> X-ASG-Orig-Subj: Re: xfsprogs: useless code blocks References: <2035333009.511763.1437398166766.JavaMail.zimbra@redhat.com> <1213913978.543970.1437400666553.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1213913978.543970.1437400666553.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437460659 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20936 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 20, 2015 at 09:57:46AM -0400, Jan Tulak wrote: > Hi all, > > I found these useless bits of code in xfsprogs: > > repair/incore_ino.c:575-576: > if (ino_rec->ino_startnum == 0) > ino_rec = ino_rec; > > This one is pretty clear. It is there since 2001 (commit 2bd0ea187 > by nathans@sgi.com, who didn't wrote here since 2006, so I find nathans@redhat.com will get you that same person ;) > CC-ing him useless). It looks like a forgotten code which doesn't > do anything, but I ask in case it is a hidden bug. Who knows? It came from the Irix code base by the look of it, so maybe it was just working around a compiler bug? > And: > > db/check.c:3035, 3037: Always true expression, as be32_to_cpu() > translates to __u32 type and unsigned can't be less than zero. > > be32_to_cpu(free->hdr.nvalid) < 0 || The old endian conversion stuff in userspace needed that. When we converted it to the same as the kernel macros, we didn't change any of the logic. gcc isn't warning about this on x86-64, so in general signed/unsigned stuff goes unnoticed. Cheers, Dave. -- Dave Chinner david@fromorbit.com From webghgt5t@outlook.com Tue Jul 21 03:34:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_FREEMAIL_DOC_PDF autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EBDEF7F6F for ; Tue, 21 Jul 2015 03:34:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id BCB69304043 for ; Tue, 21 Jul 2015 01:34:03 -0700 (PDT) X-ASG-Debug-ID: 1437467641-04cb6c3b8bbe610001-NocioJ Received: from SNT004-OMC2S49.hotmail.com (snt004-omc2s49.hotmail.com [65.54.61.100]) by cuda.sgi.com with ESMTP id GKQDVUtxyeMEMwXT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 01:34:01 -0700 (PDT) X-Barracuda-Envelope-From: webghgt5t@outlook.com X-Barracuda-Apparent-Source-IP: 65.54.61.100 X-Barracuda-IPDD: Level1 [outlook.com/65.54.61.100] Received: from SNT150-W18 ([65.55.90.73]) by SNT004-OMC2S49.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Tue, 21 Jul 2015 01:34:00 -0700 X-Barracuda-IPDD: Level1 [outlook.com/65.54.61.100] X-Barracuda-IPDD: Level1 [outlook.com/65.54.61.100] X-TMN: [Lqcf+x3xlaSAB4RI57LCVYO0uZGERb5Guq5ALPUiaz0=] X-Originating-Email: [webghgt5t@outlook.com] Message-ID: Content-Type: multipart/mixed; boundary="_c61ad186-3c8d-47f2-b492-a94e0e770780_" From: Esther Boateng Subject: CRY Date: Tue, 21 Jul 2015 08:34:00 +0000 X-ASG-Orig-Subj: CRY Importance: Normal In-Reply-To: References: ,,,,,,,,,,,,,,, MIME-Version: 1.0 X-OriginalArrivalTime: 21 Jul 2015 08:34:00.0727 (UTC) FILETIME=[FE42BA70:01D0C38F] X-Barracuda-Connect: snt004-omc2s49.hotmail.com[65.54.61.100] X-Barracuda-Start-Time: 1437467641 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20938 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; --_c61ad186-3c8d-47f2-b492-a94e0e770780_ Content-Type: multipart/alternative; boundary="_22d497a2-bba8-404e-87fa-3e7fab246ccc_" --_22d497a2-bba8-404e-87fa-3e7fab246ccc_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable =0A= =0A= =0A= = --_22d497a2-bba8-404e-87fa-3e7fab246ccc_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

=0A= =0A= =0A=

= --_22d497a2-bba8-404e-87fa-3e7fab246ccc_-- --_c61ad186-3c8d-47f2-b492-a94e0e770780_ Content-Type: application/msword Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="HELLO MY BELOVED IN THE LORD.doc" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAMAAAAAAAAAAA EAAAMgAAAAEAAAD+////AAAAAC8AAAD///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////s pcEAcWAJBAAA+BK/AAAAAAAAEAAAAAAABgAA9hIAAA4AYmpianFQcVAAAAAAAAAAAAAAAAAAAAAA AAAJBBYALhoAABM6AQATOgEA9goAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAA AAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAANwDAAAAAAAA3AMAANwD AAAAAAAA3AMAAAAAAADcAwAAAAAAANwDAAAAAAAA3AMAABQAAAAAAAAAAAAAAPADAAAAAAAA+AcA AAAAAAD4BwAAAAAAAPgHAAAAAAAA+AcAAAwAAAAECAAADAAAAPADAAAAAAAAdwwAALYAAAAcCAAA KAAAAEQIAAAAAAAARAgAAAAAAABECAAAAAAAAEQIAAAAAAAARAgAAAAAAABECAAAAAAAAEQIAAAA AAAA9gsAAAIAAAD4CwAAAAAAAPgLAAAAAAAA+AsAAAAAAAD4CwAAAAAAAPgLAAAAAAAA+AsAACQA AAAtDQAAaAIAAJUPAAB2AAAAHAwAABUAAAAAAAAAAAAAAAAAAAAAAAAA3AMAAAAAAAD6CgAAAAAA AAAAAAAAAAAAAAAAAAAAAABECAAAAAAAAEQIAAAAAAAA+goAAAAAAAD6CgAAAAAAABwMAAAAAAAA AAAAAAAAAADcAwAAAAAAANwDAAAAAAAARAgAAAAAAAAAAAAAAAAAAEQIAAAAAAAAMQwAABYAAADW CwAAAAAAANYLAAAAAAAA1gsAAAAAAAD6CgAALgAAANwDAAAAAAAARAgAAAAAAADcAwAAAAAAAEQI AAAAAAAA9gsAAAAAAAAAAAAAAAAAANYLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAA+goAAAAAAAD2CwAAAAAAAAAAAAAAAAAA1gsAAAAAAAAAAAAA AAAAANYLAAAAAAAA3AMAAAAAAADcAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1gsAAAAAAABECAAAAAAAABAIAAAMAAAAEI+UMde+ 0AEAAAAAAAAAAPgHAAAAAAAAKAsAABwAAADWCwAAAAAAAAAAAAAAAAAA9gsAAAAAAABHDAAAMAAA AHcMAAAAAAAA1gsAAAAAAAALEAAAAAAAAEQLAACIAAAACxAAAAAAAADWCwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAsQAAAAAAAAAAAAAAAAAADcAwAAAAAAANYLAAAgAAAARAgAAIQAAADICAAAXgAAANYL AAAAAAAAJgkAAEwAAAByCQAAiAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAgA AAAAAABECAAAAAAAAEQIAAAAAAAAHAwAAAAAAAAcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAzAsAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQIAAAA AAAARAgAAAAAAABECAAAAAAAAHcMAAAAAAAA+goAAAAAAAD6CgAAAAAAAPoKAAAAAAAA+goAAAAA AAAAAAAAAAAAAPADAAAAAAAA8AMAAAAAAADwAwAAZAMAAFQHAACkAAAA8AMAAAAAAADwAwAAAAAA APADAAAAAAAAVAcAAAAAAADwAwAAAAAAAPADAAAAAAAA8AMAAAAAAADcAwAAAAAAANwDAAAAAAAA 3AMAAAAAAADcAwAAAAAAANwDAAAAAAAA3AMAAAAAAAD/////AAAAAAIADAEAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgSEVM TE8gTVkgQkVMT1ZFRCBJTiBUSEUgTE9SRCENDUkgYW0gTXJzLiBFc3RoZXIgQm9hdGVuZywgZnJv bSByZXB1YmxpYyBvZiBJcmVsYW5kLCBib3JuIGluIHRoZSBzdGF0ZSBvZiBPaGlvDShVU0EpLiBJ IGFtIGxlZ2FsbHkgbWFycmllZCB0byBNci4gSm9obiBCb2F0ZW5nLCBhIFNvdXRoIEFmcmljYSBj aXRpemVuIGJvcm4gYnJvdWdodCB1cCBpbiBTd2l0emVybGFuZCwNDUkgbGl2ZSBpbiBTd2l0emVy bGFuZCB3aXRoIG15IGh1c2JhbmQgZm9yIDMyIHllYXJzIGJlZm9yZSB3ZSBtb3ZlIGRvd24gdG8g c291dGggQWZyaWNhIGluIDE5ODUgYWZ0ZXIgbXkgaHVzYmFuZCByZXRpcmVtZW50IGluIDE5NzQs IEkgYW0gNzEgeWVhcnMgb2xkIGJ5IHRoZSBncmFjZSBvZiBnb2QsIEkgYW0gYSBuZXcgQ2hyaXN0 aWFuIGNvbnZlcnQsIHN1ZmZlcmluZyBmcm9tIGxvbmcgdGltZSBjYW5jZXIgb2YgdGhlIGJyZWFz dCwgZS1tYWlsOiATIEhZUEVSTElOSyAibWFpbHRvOm1yc2VzdGhlcmRvbm8yMDE1QGdtYWlsLmNv bSIgARRtcnNlc3RoZXJkb25vMjAxNUBnbWFpbC5jb20VDQ1BbGwgaW5kaWNhdGlvbiBmcm9tIG15 IGRvY3RvciB0aGF0IG15IGNvbmRpdGlvbnMgaXMgcmVhbGx5IGRldGVyaW9yYXRpbmcgYW5kIGl0 IGlzIHF1aXRlIE9idmlvdXMgdGhhdCBJIHdvdWxkbpJ0IGxpdmUgbW9yZSB0aGFuIHR3byBtb250 aHMsIGFjY29yZGluZyB0byBteSBkb2N0b3JzIGFuZCBpbiBhbGwgaW5kaWNhdGlvbiByZWdhcmRz IHRvIG1lZGljYWwgYW5hbHlzaXMuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2FuY2VyIGRpc2Vhc2Ug aGFzIGdvdHRlbiB0byBhIHZlcnkgYmFkIHN0YWdlIHRoYXQgbm8gaG9wZSBmb3IgbWUgdG8gYmUg YSBsaXZpbmcgcGVyc29uIGFnYWluLg0NTXkgZGVhciBodXNiYW5kIHdhcyBpbnZvbHZlZCB3aXRo IHRoZSBKYW51YXJ5IDIwMDAgS2VueWEgYWlyd2F5cyBwbGFuZSBjcmFzaGVkIGFzIHlvdSBjYW4g c2VlIG9uIHRoZSBuZXdzIGxpbmUgd2ViIHNpdGUuaHR0cDovL25ld3MuYmJjLmNvLnVrLzIvaGkv YWZyaWNhLzY2Mjc0ODUuc3RtKTQwIHllYXJzIHBlcmlvZCBvZiBNYXJyaWFnZSBsaWZlLCBzdGls bCB3ZSBjb3VsZCBub3QgcHJvZHVjZSBhbnkgY2hpbGQsIG15IGxhdGUgaHVzYmFuZCB3YXMgdmVy eSB3ZWFsdGh5IGFuZCBhZnRlciBoaXMgZGVhdGgsIEkgaW5oZXJpdGVkIHNvbWUgcGFydCBvZiBo aXMgYnVzaW5lc3MgYW5kIG1vbmV5IGluIHRoZSBiYW5rLg0NVGhlIGRvY3RvcnMgaGFzIGFkdmlz ZWQgbWUgdGhhdCBJIG1heSBub3QgbGl2ZSBmb3IgbW9yZSB0aGFuIG9uZSBtb250aHMgYW5kIDIg d2Vla3MgYW5kIHdhcm4gbWUgdG8gZGVjZWFzZSBmcm9tIHRoaW5raW5nIG92ZXIgd2hvIGlzIGdv aW5nIHRvIGluaGVyaXQgbWUsIHRvZGF5IEkgaGF2ZSBkZWNpZGVkIHRvIGRvbmF0ZSBjb250cmli dXRlIHRvIHRoZSBsZXNzIHByaXZpbGVnZXMsIGNoYXJpdHkgYW5kIG9ycGhhbmFnZSBob21lcy4N DUkgbWFkZSB0aGlzIGRlY2lzaW9uIGFmdGVyIGxpc3RpbmcgdG8gdGhlIG5ld3MgbGluZSBhYm91 dCAxMDAgeWVhcnMgb2xkIFdvbWFuIHdobyBzZWNyZXRseSBkb25hdGUgaGVyIGZvcnR1bmUgdXBv biBoZXIgZGVhdGgsZW1haWw6bXJzZXN0aGVyZG9ubzIwMTVAZ21haWwuY29tOi8vd3d3Lm15Zm94 c3Bva2FuZS5jb20vZHBwcy9uZXdzL2RwZ29oLXdvbWFuLWRvbmF0ZXMtc2VjcmV0LW1pbGxpb25z LXVwb25oZXItZGVhdGgtZmMyMDEwMDMwNV82NDEwMjA3IFxodHRwOi8vd3d3LnlvdXR1YmUuY29t L3dhdGNoP3Y9bzhvLWUtaWxzdW0NDUkgY2hvb3NlIHlvdSBhZnRlciB2aWV3aW5nIHlvdXIgcHJv ZmlsZSBhbmQgSSBoYXZlIGNvbmZpZGVudCBpbiB5b3UgYmVjYXVzZSBJIGhhdmUgcHJheWVkLg0N SSBhbSB3aWxsaW5nIHRvIGRvbmF0ZSB0aGUgc3VtIG9mICgkMjAuNW1pbGxpb24gVVMgZG9sbGFy cyksIHRvIHRoZSBsZXNzIHByaXZpbGVnZWQuIFBsZWFzZSBJIHdhbnQgeW91IHRvIG5vdGUgdGhh dCB0aGlzIGZ1bmQgaXMgc3RpbGwgaW4gdGhlIGJhbmsgd2hlcmUgbXkgaHVzYmFuZCBkZXBvc2l0 ZWQgaXQuIEkgYW0gZ29pbmcgdG8gYWR2aWNlIG15IGxhd3llciB0byBjaGFuZ2UgbXkgbGFzdCB3 aWxsIHRvIHlvdXIgbmFtZSBhbmQgZmlsZSBpbiBhbiBhcHBsaWNhdGlvbiBmb3IgdGhlIHRyYW5z ZmVyIG9mIHRoZSBtb25leSBpbiB5b3VyIG5hbWUuDQ1sYXN0bHksIEkgaG9uZXN0bHkgcHJheSB0 aGF0IHRoaXMgbW9uZXkgd2hlbiB0cmFuc2ZlcnJlZCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzYWlk IHB1cnBvc2UgZXZlbiB0aG91Z2ggSSBhbSBsYXRlIHRoZW4gb3IgYWxpdmUsIGJlY2F1c2UgSSBo YXZlIGNvbWUgdG8gZmluZCBvdXQgdGhhdCB3ZWFsdGggYWNxdWlzaXRpb24gd2l0aG91dCBnb2Qg aXMgdmFuaXR5IGFjY29yZGluZyB0byB0aGUgd2lzZXN0IGtpbmcgaW4gSXNyYWVsIGtpbmcgU29s b21vbiwgYW5kIEkgbWFkZSB0aGUgcHJvbWlzZSB0byBnb2QgdGhhdCB0aGUgZnVuZCB3aWxsIGJl IHVzZSB0byBoZWxwIHRoZSBuZWVkeSBhbmQgdGhlIGxlc3MgcHJpdmlsZWdlLg0NTWF5IHRoZSBn cmFjZSBvZiBvdXIgbG9yZCB0aGUgbG92ZSBvZiBnb2QgYW5kIHRoZSBmZWxsb3dzaGlwIG9mIGdv ZCBiZSB3aXRoIHlvdSBhbmQgeW91ciBmYW1pbHksIGUtbWFpbDoNEyBIWVBFUkxJTksgIm1haWx0 bzptcnNlc3RoZXJkb25vMjAxNUBnbWFpbC5jb20iIAEUbXJzZXN0aGVyZG9ubzIwMTVAZ21haWwu Y29tFT8NDUkgYXdhaXQgdXJnZW50IHJlcGx5Lg1SZW1haW4gYmxlc3NlZCwNTXJzLiBFc3RoZXIg Qm9hdGVuZw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAABCAAAIAgA ANgJAADZCQAACQoAAAoKAAALCgAAJgoAACcKAAD/EQAAABIAAGkSAABqEgAAaxIAAJsSAACcEgAA nRIAALgSAAC5EgAA9hIAAPbq39DfvtCx0N+p36nQ35fQsdDfAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAIwIIgQNq8wAAAAYIARVoxlV5ABZoxlV5AENKIABVCAFhSiAADhZoxlV5AENKIABhSiAA ABgVaMZVeQAWaMZVeQAwSg8AQ0ogAGFKIAAAIwIIgQNqAAAAAAYIARVoxlV5ABZoxlV5AENKIABV CAFhSiAAHQNqAAAAABVoxlV5ABZoxlV5AENKIABVCAFhSiAAFBVoxlV5ABZoxlV5AENKIABhSiAA ABcVaMZVeQAWaMZVeQA+KgFDSiAAYUogABEWaMZVeQA+KgFDSiAAYUogAAAUAAYAACAIAAAhCAAA bwgAANcIAADYCAAAKAoAACkKAABzCwAAdAsAANUMAADWDAAAzw0AANANAAABDwAAAg8AAF0PAABe DwAAmhAAAJsQAAAAEgAAARIAAGoSAAC7EgAAvBIAANISAADiEgAA9hIAAPoAAAAAAAAAAAAAAAD6 AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAA AAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAA AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAA AAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA +gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAZ2TGVXkAABsABgAA9hIAAP0AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAEBASwAMZBoAR+w0C8gsOA9 IbAIByKwCAcjkKAFJJCgBSWwAAAXsNACGLDQAgyQ0AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8wAAAEQAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0Mnq efm6zhGMggCqAEupCwIAAAAXAAAAHAAAAG0AcgBzAGUAcwB0AGgAZQByAGQAbwBuAG8AMgAwADEA NQBAAGcAbQBhAGkAbAAuAGMAbwBtAAAA4Mnqefm6zhGMggCqAEupC0YAAABtAGEAaQBsAHQAbwA6 AG0AcgBzAGUAcwB0AGgAZQByAGQAbwBuAG8AMgAwADEANQBAAGcAbQBhAGkAbAAuAGMAbwBtAAAA 8wAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA0Mnqefm6zhGMggCqAEupCwIAAAAXAAAAHAAAAG0AcgBzAGUAcwB0AGgAZQBy AGQAbwBuAG8AMgAwADEANQBAAGcAbQBhAGkAbAAuAGMAbwBtAAAA4Mnqefm6zhGMggCqAEupC0YA AABtAGEAaQBsAHQAbwA6AG0AcgBzAGUAcwB0AGgAZQByAGQAbwBuAG8AMgAwADEANQBAAGcAbQBh AGkAbAAuAGMAbwBtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYCEAASAAEAnAAPAAQAAAAAAAAAAAAE AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAA AEDx/wIAQAAMBAAAAAAAAAAABgBOAG8AcgBtAGEAbAAAAAIAAAAYAENKGABfSAEEYUoYAG1ICQRz SAkEdEgJBAAAAAAAAAAAAAAAAAAAAAAAAEQAQUDy/6EARAAMBQAAAAAAAAAAFgBEAGUAZgBhAHUA bAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0AAAAAABSAGlA8/+zAFIADAUAAAAAAAAA AAwAVABhAGIAbABlACAATgBvAHIAbQBhAGwAAAAcABf2AwAANNYGAAEKA2wANNYGAAEFAwAAYfYD AAACAAsAAAAoAGtA9P/BACgAAAUAAAAAAAAAAAcATgBvACAATABpAHMAdAAAAAIAAAAAAAAANgBV QKIA8QA2AAwEAADGVXkAAAAJAEgAeQBwAGUAcgBsAGkAbgBrAAAADAA+KgFCKgJwaAAA/wAAAAAA 9goAAAcAABoAAAMA/////wAAAAAgAAAAIQAAAG8AAADXAAAA2AAAACgCAAApAgAAcwMAAHQDAADV BAAA1gQAAM8FAADQBQAAAQcAAAIHAABdBwAAXgcAAJoIAACbCAAAAAoAAAEKAABqCgAAuwoAALwK AADSCgAA4goAAPgKAACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAA AACAAAAAAAAAAAAAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYAAAAADAAAAAAAAAAgAAA AIAAAAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgAAAAAMAAAAAAAAACAAAAA gAAAAAAAAAAAAACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAAAACA AAAAAAAAAAAAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYAAAAADAAAAAAAAAAgAAAAIAA AAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgAAAAAMAAAAAAAAACAAAAAgAAA AAAAAAAAAACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAAAACAAAAA AAAAAAAAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYAAAAADAAAAAAAAAAgAAAAIAAAAAA AAAAAAAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAA AAAAAACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAA AAAAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAA AAAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAA AACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAAAA AJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAIQAAALwKAADSCgAA4goAAPgKAABLyAAw ABAAAAAAAAABAAAAAAAAAABAAAAAAIAHS4gAMAEQAAAAAAAAAQAAAAMAAAAAAAAAAACAB0mIADAB EAAAAAAAAAIAAAABAAAAAAAAAAAAgAE4AwAAgRMAAK0DAADzAwAAQQQAAAAAAAAAAAABCAAAAAAQ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAGAAD2EgAACgAAAAAGAAD2EgAACwAAAAAGAAD2EgAADAAA ANgBAAAKAgAAJgIAAGoKAACcCgAAuAoAAPYKAAATWBT/FYQTWBT/FYT//wkAAAAGACtxYwARAAEA 5FnsAQYALHFjABEAAQD0hR8ABgAtcWMAEAABANwFGgAGAC5xYwARAAEARJrtAQYAL3FjABAAAQAc UuwBBgAwcWMAEQABADzAHgAGADFxYwARAAEAjLcZAAYAMnFjABAAAQBcUuwBBgAzcWMAEQABACSJ HwBAAAAATAAAAGoAAABqAAAAcAAAAHAAAACiAAAAygAAAMoAAAD4CgAAAAAAAAEAAQAAAAEAAgAA AAIAAwAAAAIABAAAAAIABQAAAAIABgAAAAEABwAAAAIACAAAAAIASAAAAFMAAABuAAAAbgAAAHMA AABzAAAArgAAANUAAADVAAAA+AoAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAA AAUAAABCAAAABAAAACqAdXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c21hcnR0YWdz DoBjb3VudHJ5LXJlZ2lvbgCAOQAAAAYAAAAqgHVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2Zm aWNlOnNtYXJ0dGFncwWAU3RhdGUAgD0AAAAIAAAAKoB1cm46c2NoZW1hcy1taWNyb3NvZnQtY29t Om9mZmljZTpzbWFydHRhZ3MJgFBsYWNlTmFtZQCAPQAAAAkAAAAqgHVybjpzY2hlbWFzLW1pY3Jv c29mdC1jb206b2ZmaWNlOnNtYXJ0dGFncwmAUGxhY2VUeXBlAIA5AAAABwAAACqAdXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c21hcnR0YWdzBYBwbGFjZQCADAAAAYAW5gEAAAAACQAA AAAACAAAAAAABwAAAAAABgAAAAAABwAAAAAABAAAAAAABAAAAAAABwAAAAAABAAAAAAAAAAAADIA AAA5AAAAlwAAAJ4AAADuCgAA9QoAAPgKAAAHABwABwAcAAcAHAAHAAAAAAAfAAAAZAoAAGkKAAD4 CgAABAAHADMABwAAAAAAAQAAAAEAAACSBgAAkgYAALwGAAC8BgAAAAcAAAEHAABGBwAATwcAAOEJ AADiCQAA/wkAAAAKAABQCgAAUQoAAGkKAAC5CgAAugoAALsKAAD1CgAA+AoAAAMABAADAAQAAwAE AAMABAADAAcAAwAEAAMABAADAAQAAwAEAAMABAADAAcAAAAAAPgKAAAHAAIAAAAEAAAACAAAAOUA AAAAAAAAAQAAAAJ2GgDGVXkA/0ABgAEAAQAAAAEAAAC4ueYBAQABAAEAAAAAAAAAAQAAAAAAAAAC EAAAAAAAAAD2CgAAcAAAEABAAAD//wEAAAAHAFUAbgBrAG4AbwB3AG4A//8BAAgAAAAAAAAAAAAA AP//AQAAAAAA//8AAAIA//8AAAAA//8AAAIA//8AAAAAAwAAAEcWkAEAAAICBgMFBAUCAwSHegAg AAAAgAgAAAAAAAAA/wEAAAAAAABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgAAADUWkAEC AAUFAQIBBwYCBQcAAAAAAAAAEAAAAAAAAAAAAAAAgAAAAABTAHkAbQBiAG8AbAAAADMmkAEAAAIL BgQCAgICAgSHegAgAAAAgAgAAAAAAAAA/wEAAAAAAABBAHIAaQBhAGwAAAAiAAQAcQiIGADw0AIA AGgBAAAAAI56N2eVejdnAAAAAAEABwAAAKIBAABUCQAAAQAFAAAABAADEBMAAACiAQAAVAkAAAEA BQAAABMAAAAAAAAAIQMA8BAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAegBbQAtACBgTI0 AAAAAAAAAAAAAAAAAADxCgAA8QoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAMoMRAPAQAAgAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAEhQAAAAACnw/w8BAAE/AADkBAAA////f////3////9/////f////3// //9/////f8ZVeQAAAAAAMgAAAAAAAAAAAAAAAAAAAAAA//8SAAAAAAAAAB4AIAAgAEgARQBMAEwA TwAgAE0AWQAgAEIARQBMAE8AVgBFAEQAIABJAE4AIABUAEgARQAgAEwATwBSAEQAAAAAAAAABABw AGMAMAAzAAQAcABjADAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7/AAAFAQIAAAAAAAAAAAAAAAAAAAAAAAEAAADghZ/y +U9oEKuRCAArJ7PZMAAAAIQBAAARAAAAAQAAAJAAAAACAAAAmAAAAAMAAADAAAAABAAAAMwAAAAF AAAA3AAAAAYAAADoAAAABwAAAPQAAAAIAAAABAEAAAkAAAAUAQAAEgAAACABAAAKAAAAQAEAAAwA AABMAQAADQAAAFgBAAAOAAAAZAEAAA8AAABsAQAAEAAAAHQBAAATAAAAfAEAAAIAAADkBAAAHgAA ACAAAAAgIEhFTExPIE1ZIEJFTE9WRUQgSU4gVEhFIExPUkQAAB4AAAAEAAAAAAAAAB4AAAAIAAAA cGMwMwAAAAAeAAAABAAAAAAAAAAeAAAABAAAAAAAAAAeAAAACAAAAE5vcm1hbAAAHgAAAAgAAABw YzAzAAAAAB4AAAAEAAAAMQAAAB4AAAAYAAAATWljcm9zb2Z0IE9mZmljZSBXb3JkAAAAQAAAAADq VvoAAAAAQAAAAADUFzTWvtABQAAAAAC+bi7XvtABAwAAAAEAAAADAAAAogEAAAMAAABUCQAAAwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD+/wAABQECAAAAAAAAAAAAAAAAAAAAAAACAAAAAtXN1ZwuGxCTlwgA Kyz5rkQAAAAF1c3VnC4bEJOXCAArLPmuUAEAAAwBAAAMAAAAAQAAAGgAAAAPAAAAcAAAAAUAAACA AAAABgAAAIgAAAARAAAAkAAAABcAAACYAAAACwAAAKAAAAAQAAAAqAAAABMAAACwAAAAFgAAALgA AAANAAAAwAAAAAwAAADrAAAAAgAAAOQEAAAeAAAACAAAAHBjMDMAAAAAAwAAABMAAAADAAAABQAA AAMAAADxCgAAAwAAAOYVCwALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAB4QAAABAAAA HwAAACAgSEVMTE8gTVkgQkVMT1ZFRCBJTiBUSEUgTE9SRAAMEAAAAgAAAB4AAAAGAAAAVGl0bGUA AwAAAAEAAAAAAABEAQAAAwAAAAAAAAAgAAAAAQAAADgAAAACAAAAQAAAAAEAAAACAAAADAAAAF9Q SURfSExJTktTAAIAAADkBAAAQQAAAPwAAAAMAAAAAwAAAEAAdAADAAAAAwAAAAMAAAAAAAAAAwAA AAUAAAAfAAAAIwAAAG0AYQBpAGwAdABvADoAbQByAHMAZQBzAHQAaABlAHIAZABvAG4AbwAyADAA MQA1AEAAZwBtAGEAaQBsAC4AYwBvAG0AAAAAAB8AAAABAAAAAAD5CgMAAABAAHQAAwAAAAAAAAAD AAAAAAAAAAMAAAAFAAAAHwAAACMAAABtAGEAaQBsAHQAbwA6AG0AcgBzAGUAcwB0AGgAZQByAGQA bwBuAG8AMgAwADEANQBAAGcAbQBhAGkAbAAuAGMAbwBtAAAAAAAfAAAAAQAAAAAA+QoAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAA DQAAAP7///8PAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAA/v///xcAAAAYAAAAGQAAABoAAAAb AAAAHAAAAB0AAAAeAAAA/v///yAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAD+////KAAAACkA AAAqAAAAKwAAACwAAAAtAAAALgAAAP7////9////MQAAAP7////+/////v////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////9SAG8AbwB0ACAARQBuAHQAcgB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAFgAFAf//////////AwAAAAYJAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAA AADQ66kx177QATMAAACAAAAAAAAAAEQAYQB0AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIB////////////////AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAQAAAAAAAAMQBUAGEAYgBsAGUAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAgEBAAAABgAAAP// //8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAACxAAAAAAAABXAG8AcgBk AEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA GgACAQIAAAAFAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu GgAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAoAAIB////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAHwAAAAAQAAAAAAAABQBEAG8AYwB1AG0AZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4A ZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAADgAAgEEAAAA//////////8AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAABAAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAP////////////// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAQAAAP7///////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGHwAAAE1pY3Jvc29mdCBPZmZpY2UgV29y ZCBEb2N1bWVudAAKAAAATVNXb3JkRG9jABAAAABXb3JkLkRvY3VtZW50LjgA9DmycQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAA== --_c61ad186-3c8d-47f2-b492-a94e0e770780_-- From mhocko@kernel.org Tue Jul 21 03:59:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9E84A7F6F for ; Tue, 21 Jul 2015 03:59:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1D46FAC006 for ; Tue, 21 Jul 2015 01:59:03 -0700 (PDT) X-ASG-Debug-ID: 1437469140-04cbb00f06b9fc0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id FbF2aGXeAHiPNAkI (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 01:59:01 -0700 (PDT) X-Barracuda-Envelope-From: mhocko@kernel.org X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 22893AAC1; Tue, 21 Jul 2015 08:59:00 +0000 (UTC) Date: Tue, 21 Jul 2015 10:58:59 +0200 From: Michal Hocko To: Dave Chinner Cc: Ming Lei , Andrew Morton , Theodore Ts'o , Andreas Dilger , Oleg Drokin , Alexander Viro , Christoph Hellwig , linux-kernel@vger.kernel.org, linux-mm@kvack.org, xfs@oss.sgi.com, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org Subject: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions Message-ID: <20150721085859.GG11967@dhcp22.suse.cz> X-ASG-Orig-Subj: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions References: <20150721015934.GY7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150721015934.GY7943@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1437469141 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 [CCing more people from a potentially affected fs - the reference to the email thread is: http://marc.info/?l=linux-mm&m=143744398020147&w=2] On Tue 21-07-15 11:59:34, Dave Chinner wrote: > Hi Ming, > > With the recent merge of the loop device changes, I'm now seeing > XFS deadlock on my single CPU, 1GB RAM VM running xfs/073. > > The deadlocked is as follows: > > kloopd1: loop_queue_read_work > xfs_file_iter_read > lock XFS inode XFS_IOLOCK_SHARED (on image file) > page cache read (GFP_KERNEL) > radix tree alloc > memory reclaim > reclaim XFS inodes > log force to unpin inodes > > > xfs-cil/loop1: > xlog_cil_push > xlog_write > > xlog_state_get_iclog_space() > > > > kloopd1: loop_queue_write_work > xfs_file_write_iter > lock XFS inode XFS_IOLOCK_EXCL (on image file) > > > [The full stack traces are below]. > > i.e. the kloopd, with it's split read and write work queues, has > introduced a dependency through memory reclaim. i.e. that writes > need to be able to progress for reads make progress. > > The problem, fundamentally, is that mpage_readpages() does a > GFP_KERNEL allocation, rather than paying attention to the inode's > mapping gfp mask, which is set to GFP_NOFS. > > The didn't used to happen, because the loop device used to issue > reads through the splice path and that does: > > error = add_to_page_cache_lru(page, mapping, index, > GFP_KERNEL & mapping_gfp_mask(mapping)); > > i.e. it pays attention to the allocation context placed on the > inode and so is doing GFP_NOFS allocations here and avoiding the > recursion problem. > > [ CC'd Michal Hocko and the mm list because it's a clear exaple of > why ignoring the mapping gfp mask on any page cache allocation is > a landmine waiting to be tripped over. ] Thank you for CCing me. I haven't noticed this one when checking for other similar hardcoded GFP_KERNEL users (6afdb859b710 ("mm: do not ignore mapping_gfp_mask in page cache allocation paths")). And there seem to be more of them now that I am looking closer. I am not sure what to do about fs/nfs/dir.c:nfs_symlink which doesn't require GFP_NOFS or mapping gfp mask for other allocations in the same context. What do you think about this preliminary (and untested) patch? I cannot say I would be happy about sprinkling mapping_gfp_mask all over the place and it sounds like we should drop gfp_mask argument altogether and use it internally in __add_to_page_cache_locked that would require all the filesystems to use mapping gfp consistently which I am not sure is the case here. From a quick glance it seems that some file system use it all the time while others are selective. --- >From 72e13282dfb117432332416b60bc4e4d2dad9153 Mon Sep 17 00:00:00 2001 From: Michal Hocko Date: Tue, 21 Jul 2015 10:06:13 +0200 Subject: [PATCH] mm, fs: Obey gfp_mapping for add_to_page_cache 6afdb859b710 ("mm: do not ignore mapping_gfp_mask in page cache allocation paths) has caught some users of hardcoded GFP_KERNEL used in the page cache allocation paths. This, however, wasn't complete and there were others which went unnoticed. Dave Chinner has reported the following deadlock for xfs on loop device: : With the recent merge of the loop device changes, I'm now seeing : XFS deadlock on my single CPU, 1GB RAM VM running xfs/073. : : The deadlocked is as follows: : : kloopd1: loop_queue_read_work : xfs_file_iter_read : lock XFS inode XFS_IOLOCK_SHARED (on image file) : page cache read (GFP_KERNEL) : radix tree alloc : memory reclaim : reclaim XFS inodes : log force to unpin inodes : : : xfs-cil/loop1: : xlog_cil_push : xlog_write : : xlog_state_get_iclog_space() : : : : kloopd1: loop_queue_write_work : xfs_file_write_iter : lock XFS inode XFS_IOLOCK_EXCL (on image file) : : : i.e. the kloopd, with it's split read and write work queues, has : introduced a dependency through memory reclaim. i.e. that writes : need to be able to progress for reads make progress. : : The problem, fundamentally, is that mpage_readpages() does a : GFP_KERNEL allocation, rather than paying attention to the inode's : mapping gfp mask, which is set to GFP_NOFS. : : The didn't used to happen, because the loop device used to issue : reads through the splice path and that does: : : error = add_to_page_cache_lru(page, mapping, index, : GFP_KERNEL & mapping_gfp_mask(mapping)); This has changed by aa4d86163e4 (block: loop: switch to VFS ITER_BVEC). This patch changes mpage_readpage{s} to follow gfp mask set for the mapping. There are, however, other places which are doing basically the same. lustre:ll_dir_filler is doing GFP_KERNEL from the function which apparently uses GFP_NOFS for other allocations so let's make this consistent. cifs:readpages_get_pages is called from cifs_readpages and __cifs_readpages_from_fscache called from the same path obeys mapping gfp. ramfs_nommu_expand_for_mapping is hardcoding GFP_KERNEL as well regardless it uses mapping_gfp_mask for the page allocation. ext4_mpage_readpages is the called from the page cache allocation path same as read_pages and read_cache_pages Reported-by: Dave Chinner Signed-off-by: Michal Hocko --- drivers/staging/lustre/lustre/llite/dir.c | 2 +- fs/cifs/file.c | 5 +++-- fs/ext4/readpage.c | 3 ++- fs/mpage.c | 14 +++++++++----- fs/ramfs/file-nommu.c | 5 +++-- mm/readahead.c | 6 ++++-- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index a5bc694dcb64..0a643b8b6deb 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -225,7 +225,7 @@ static int ll_dir_filler(void *_hash, struct page *page0) prefetchw(&page->flags); ret = add_to_page_cache_lru(page, inode->i_mapping, offset, - GFP_KERNEL); + GFP_NOFS); if (ret == 0) { unlock_page(page); if (ll_pagevec_add(&lru_pvec, page) == 0) diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 2ac2d8471393..72c162a1d56d 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -3380,6 +3380,7 @@ readpages_get_pages(struct address_space *mapping, struct list_head *page_list, struct page *page, *tpage; unsigned int expected_index; int rc; + gfp_t gfp = GFP_KERNEL & mapping_gfp_mask(mapping); INIT_LIST_HEAD(tmplist); @@ -3392,7 +3393,7 @@ readpages_get_pages(struct address_space *mapping, struct list_head *page_list, */ __SetPageLocked(page); rc = add_to_page_cache_locked(page, mapping, - page->index, GFP_KERNEL); + page->index, gfp); /* give up if we can't stick it in the cache */ if (rc) { @@ -3419,7 +3420,7 @@ readpages_get_pages(struct address_space *mapping, struct list_head *page_list, __SetPageLocked(page); if (add_to_page_cache_locked(page, mapping, page->index, - GFP_KERNEL)) { + gfp)) { __ClearPageLocked(page); break; } diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c index 171b9ac4b45e..92eb970655bd 100644 --- a/fs/ext4/readpage.c +++ b/fs/ext4/readpage.c @@ -166,7 +166,8 @@ int ext4_mpage_readpages(struct address_space *mapping, page = list_entry(pages->prev, struct page, lru); list_del(&page->lru); if (add_to_page_cache_lru(page, mapping, - page->index, GFP_KERNEL)) + page->index, + GFP_KERNEL & mapping_gfp_mask(mapping))) goto next_page; } diff --git a/fs/mpage.c b/fs/mpage.c index dde689d0759d..4a54bd13c9bd 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -139,7 +139,8 @@ map_buffer_to_page(struct page *page, struct buffer_head *bh, int page_block) static struct bio * do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages, sector_t *last_block_in_bio, struct buffer_head *map_bh, - unsigned long *first_logical_block, get_block_t get_block) + unsigned long *first_logical_block, get_block_t get_block, + gfp_t gfp) { struct inode *inode = page->mapping->host; const unsigned blkbits = inode->i_blkbits; @@ -278,7 +279,7 @@ do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages, } bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9), min_t(int, nr_pages, bio_get_nr_vecs(bdev)), - GFP_KERNEL); + gfp); if (bio == NULL) goto confused; } @@ -361,6 +362,7 @@ mpage_readpages(struct address_space *mapping, struct list_head *pages, sector_t last_block_in_bio = 0; struct buffer_head map_bh; unsigned long first_logical_block = 0; + gfp_t gfp = GFP_KERNEL & mapping_gfp_mask(mapping); map_bh.b_state = 0; map_bh.b_size = 0; @@ -370,12 +372,13 @@ mpage_readpages(struct address_space *mapping, struct list_head *pages, prefetchw(&page->flags); list_del(&page->lru); if (!add_to_page_cache_lru(page, mapping, - page->index, GFP_KERNEL)) { + page->index, + gfp)) { bio = do_mpage_readpage(bio, page, nr_pages - page_idx, &last_block_in_bio, &map_bh, &first_logical_block, - get_block); + get_block, gfp); } page_cache_release(page); } @@ -395,11 +398,12 @@ int mpage_readpage(struct page *page, get_block_t get_block) sector_t last_block_in_bio = 0; struct buffer_head map_bh; unsigned long first_logical_block = 0; + gfp_t gfp = mapping_gfp_mask(page->mapping); map_bh.b_state = 0; map_bh.b_size = 0; bio = do_mpage_readpage(bio, page, 1, &last_block_in_bio, - &map_bh, &first_logical_block, get_block); + &map_bh, &first_logical_block, get_block, gfp); if (bio) mpage_bio_submit(READ, bio); return 0; diff --git a/fs/ramfs/file-nommu.c b/fs/ramfs/file-nommu.c index ba1323a94924..a586467f6ff6 100644 --- a/fs/ramfs/file-nommu.c +++ b/fs/ramfs/file-nommu.c @@ -70,6 +70,7 @@ int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize) unsigned order; void *data; int ret; + gfp_t gfp = mapping_gfp_mask(inode->i_mapping); /* make various checks */ order = get_order(newsize); @@ -84,7 +85,7 @@ int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize) /* allocate enough contiguous pages to be able to satisfy the * request */ - pages = alloc_pages(mapping_gfp_mask(inode->i_mapping), order); + pages = alloc_pages(gfp, order); if (!pages) return -ENOMEM; @@ -108,7 +109,7 @@ int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize) struct page *page = pages + loop; ret = add_to_page_cache_lru(page, inode->i_mapping, loop, - GFP_KERNEL); + gfp); if (ret < 0) goto add_error; diff --git a/mm/readahead.c b/mm/readahead.c index 60cd846a9a44..b9b99597dc77 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -90,7 +90,8 @@ int read_cache_pages(struct address_space *mapping, struct list_head *pages, page = list_to_page(pages); list_del(&page->lru); if (add_to_page_cache_lru(page, mapping, - page->index, GFP_KERNEL)) { + page->index, + GFP_KERNEL & mapping_gfp_mask(mapping))) { read_cache_pages_invalidate_page(mapping, page); continue; } @@ -128,7 +129,8 @@ static int read_pages(struct address_space *mapping, struct file *filp, struct page *page = list_to_page(pages); list_del(&page->lru); if (!add_to_page_cache_lru(page, mapping, - page->index, GFP_KERNEL)) { + page->index, + GFP_KERNEL & mapping_gfp_mask(mapping))) { mapping->a_ops->readpage(filp, page); } page_cache_release(page); -- 2.1.4 -- Michal Hocko SUSE Labs From jtulak@redhat.com Tue Jul 21 04:19:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B07417F75 for ; Tue, 21 Jul 2015 04:19:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 923548F804C for ; Tue, 21 Jul 2015 02:18:59 -0700 (PDT) X-ASG-Debug-ID: 1437470336-04cbb00f06ba9d0001-NocioJ Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id k3VIveTS0kYlXrB6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 02:18:57 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6L9It69019738; Tue, 21 Jul 2015 05:18:55 -0400 Date: Tue, 21 Jul 2015 05:18:54 -0400 (EDT) From: Jan Tulak To: Dave Chinner , nathans@redhat.com Cc: xfs-oss Message-ID: <2080505999.894659.1437470334861.JavaMail.zimbra@redhat.com> In-Reply-To: <20150721063738.GA7943@dastard> References: <2035333009.511763.1437398166766.JavaMail.zimbra@redhat.com> <1213913978.543970.1437400666553.JavaMail.zimbra@redhat.com> <20150721063738.GA7943@dastard> Subject: Re: xfsprogs: useless code blocks MIME-Version: 1.0 X-ASG-Orig-Subj: Re: xfsprogs: useless code blocks Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.5.205] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: useless code blocks Thread-Index: y7W12aL7ONQTl2kTxyYKktJhr5cY2A== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1437470337 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20939 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Nathan, I'm sending this also to you, as it is about one old your patch you posted to xfsprogs. Can you look at the two lines, if you recall their purpose? :-) ----- Original Message ----- > From: "Dave Chinner" > To: "Jan Tulak" > Cc: "xfs-oss" > Sent: Tuesday, July 21, 2015 8:37:38 AM > Subject: Re: xfsprogs: useless code blocks > > On Mon, Jul 20, 2015 at 09:57:46AM -0400, Jan Tulak wrote: > > Hi all, > > > > I found these useless bits of code in xfsprogs: > > > > repair/incore_ino.c:575-576: > > if (ino_rec->ino_startnum == 0) > > ino_rec = ino_rec; > > > > This one is pretty clear. It is there since 2001 (commit 2bd0ea187 > > by nathans@sgi.com, who didn't wrote here since 2006, so I find > > nathans@redhat.com will get you that same person ;) > > > CC-ing him useless). It looks like a forgotten code which doesn't > > do anything, but I ask in case it is a hidden bug. > > Who knows? It came from the Irix code base by the look of it, so > maybe it was just working around a compiler bug? > All right, I'm adding him, we will see. > > And: > > > > db/check.c:3035, 3037: Always true expression, as be32_to_cpu() > > translates to __u32 type and unsigned can't be less than zero. > > > > be32_to_cpu(free->hdr.nvalid) < 0 || > > The old endian conversion stuff in userspace needed that. When we > converted it to the same as the kernel macros, we didn't change any > of the logic. gcc isn't warning about this on x86-64, so in general > signed/unsigned stuff goes unnoticed. > I found it during my OS X porting - clang complains. So I will remove it, although I will wait at first if Nathan has anything to say about the ino_rec self-assignment. Cheers, Jan -- Jan Tulak jtulak@redhat.com From bfoster@redhat.com Tue Jul 21 06:50:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 154767F78 for ; Tue, 21 Jul 2015 06:50:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8723CAC005 for ; Tue, 21 Jul 2015 04:50:28 -0700 (PDT) X-ASG-Debug-ID: 1437479426-04cb6c3b8bc30d0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id k5ZqcAi6vwc0gl7u (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 04:50:27 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 1336CBC6B0; Tue, 21 Jul 2015 11:50:26 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LBoPbp029356; Tue, 21 Jul 2015 07:50:25 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id A8E62122E55; Tue, 21 Jul 2015 07:50:24 -0400 (EDT) Date: Tue, 21 Jul 2015 07:50:24 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, willy@linux.intel.com Subject: Re: [PATCH 1/4] xfs: call dax_fault on read page faults for DAX Message-ID: <20150721115022.GA23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 1/4] xfs: call dax_fault on read page faults for DAX References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-2-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437440945-23457-2-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437479427 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 11:09:02AM +1000, Dave Chinner wrote: > From: Dave Chinner > > When modifying the patch series to handle the XFS MMAP_LOCK nesting > of page faults, I botched the conversion of the read page fault > path, and so it is only every calling through the page cache. Re-add > the necessary __dax_fault() call for such files. > > Because the get_blocks callback on read faults may not set up the > mapping buffer correctly to allow unwritten extent completion to be > run, we need to allow callers of __dax_fault() to pass a null > complete_unwritten() callback. The DAX code always zeros the > unwritten page when it is read faulted so there are no stale data > exposure issues with not doing the conversion. The only downside > will be the potential for increased CPU overhead on repeated read > faults of the same page. If this proves to be a problem, then the > filesystem needs to fix it's get_block callback and provide a > convert_unwritten() callback to the read fault path. > > Signed-off-by: Dave Chinner > --- For the XFS bits: Reviewed-by: Brian Foster > fs/dax.c | 9 ++++++++- > fs/xfs/xfs_file.c | 21 +++++++++++++++------ > 2 files changed, 23 insertions(+), 7 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index c3e21cc..86d2cee 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -319,6 +319,11 @@ static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh, > * @vma: The virtual memory area where the fault occurred > * @vmf: The description of the fault > * @get_block: The filesystem method used to translate file offsets to blocks > + * @complete_unwritten: The filesystem method used to convert unwritten blocks > + * to written so the data written to them is exposed. This is required for > + * write faults, but optional for read faults as dax_insert_mapping() will > + * always do the right thing on a read fault (i.e. zero the underlying > + * page). > * > * When a page fault occurs, filesystems may call this helper in their > * fault handler for DAX files. __dax_fault() assumes the caller has done all > @@ -339,6 +344,8 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > int error; > int major = 0; > > + WARN_ON_ONCE((vmf->flags & FAULT_FLAG_WRITE) && !complete_unwritten); > + > size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT; > if (vmf->pgoff >= size) > return VM_FAULT_SIGBUS; > @@ -437,7 +444,7 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > * as for normal BH based IO completions. > */ > error = dax_insert_mapping(inode, &bh, vma, vmf); > - if (buffer_unwritten(&bh)) > + if (buffer_unwritten(&bh) && complete_unwritten) > complete_unwritten(&bh, !error); > > out: > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index f0e8249..db4acc1 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -1514,18 +1514,27 @@ xfs_filemap_fault( > struct vm_area_struct *vma, > struct vm_fault *vmf) > { > - struct xfs_inode *ip = XFS_I(file_inode(vma->vm_file)); > + struct inode *inode = file_inode(vma->vm_file); > int ret; > > - trace_xfs_filemap_fault(ip); > + trace_xfs_filemap_fault(XFS_I(inode)); > > /* DAX can shortcut the normal fault path on write faults! */ > - if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(VFS_I(ip))) > + if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(inode)) > return xfs_filemap_page_mkwrite(vma, vmf); > > - xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > - ret = filemap_fault(vma, vmf); > - xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); > + xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > + if (IS_DAX(inode)) { > + /* > + * we do not want to trigger unwritten extent conversion on read > + * faults - that is unnecessary overhead and would also require > + * changes to xfs_get_blocks_direct() to map unwritten extent > + * ioend for conversion on read-only mappings. > + */ > + ret = __dax_fault(vma, vmf, xfs_get_blocks_direct, NULL); > + } else > + ret = filemap_fault(vma, vmf); > + xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > > return ret; > } > -- > 2.1.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Jul 21 06:50:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 9ACC97F3F for ; Tue, 21 Jul 2015 06:50:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 60CD78F804B for ; Tue, 21 Jul 2015 04:50:34 -0700 (PDT) X-ASG-Debug-ID: 1437479432-04bdf00e917c170001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ay3cvsOx9Eh3QQeM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 04:50:33 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id C20F5B6F43; Tue, 21 Jul 2015 11:50:32 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LBoWmt029514; Tue, 21 Jul 2015 07:50:32 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 752F2122E55; Tue, 21 Jul 2015 07:50:31 -0400 (EDT) Date: Tue, 21 Jul 2015 07:50:31 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, willy@linux.intel.com Subject: Re: [PATCH 2/4] xfs: remote attribute headers contain an invalid LSN Message-ID: <20150721115030.GB23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 2/4] xfs: remote attribute headers contain an invalid LSN References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-3-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437440945-23457-3-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437479433 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 11:09:03AM +1000, Dave Chinner wrote: > From: Dave Chinner > > In recent testing, a system that crashed failed log recovery on > restart with a bad symlink buffer magic number: > > XFS (vda): Starting recovery (logdev: internal) > XFS (vda): Bad symlink block magic! > XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 2060 > > On examination of the log via xfs_logprint, none of the symlink > buffers in the log had a bad magic number, nor were any other types > of buffer log format headers mis-identified as symlink buffers. > Tracing was used to find the buffer the kernel was tripping over, > and xfs_db identified it's contents as: > > 000: 5841524d 00000000 00000346 64d82b48 8983e692 d71e4680 a5f49e2c b317576e > 020: 00000000 00602038 00000000 006034ce d0020000 00000000 4d4d4d4d 4d4d4d4d > 040: 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d > 060: 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d > ..... > > This is a remote attribute buffer, which are notable in that they > are not logged but are instead written synchronously by the remote > attribute code so that they exist on disk before the attribute > transactions are committed to the journal. > > The above remote attribute block has an invalid LSN in it - cycle > 0xd002000, block 0 - which means when log recovery comes along to > determine if the transaction that writes to the underlying block > should be replayed, it sees a block that has a future LSN and so > does not replay the buffer data in the transaction. Instead, it > validates the buffer magic number and attaches the buffer verifier > to it. It is this buffer magic number check that is failing in the > above assert, indicating that we skipped replay due to the LSN of > the underlying buffer. > > The problem here is that the remote attribute buffers cannot have a > valid LSN placed into them, because the transaction that contains > the attribute tree pointer changes and the block allocation that the > attribute data is being written to hasn't yet been committed. Hence > the LSN field in the attribute block is completely unwritten, > thereby leaving the underlying contents of the block in the LSN > field. It could have any value, and hence a future overwrite of the > block by log recovery may or may not work correctly. > > Fix this by always writing an invalid LSN to the remote attribute > block, as any buffer in log recovery that needs to write over the > remote attribute should occur. We are protected from having old data > written over the attribute by the fact that freeing the block before > the remote attribute is written will result in the buffer being > marked stale in the log and so all changes prior to the buffer stale > transaction will be cancelled by log recovery. > > Hence it is safe to ignore the LSN in the case or synchronously > written, unlogged metadata such as remote attribute blocks, and to > ensure we do that correctly, we need to write an invalid LSN to all > remote attribute blocks to trigger immediate recovery of metadata > that is written over the top. > > As a further protection for filesystems that may already have remote > attribute blocks with bad LSNs on disk, change the log recovery code > to always trigger immediate recovery of metadata over remote > attribute blocks. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_attr_remote.c | 29 +++++++++++++++++++++++------ > fs/xfs/xfs_log_recover.c | 11 ++++++++--- > 2 files changed, 31 insertions(+), 9 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c > index 20de88d..2faec26 100644 > --- a/fs/xfs/libxfs/xfs_attr_remote.c > +++ b/fs/xfs/libxfs/xfs_attr_remote.c > @@ -159,11 +159,10 @@ xfs_attr3_rmt_write_verify( > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > - struct xfs_buf_log_item *bip = bp->b_fspriv; > + int blksize = mp->m_attr_geo->blksize; > char *ptr; > int len; > xfs_daddr_t bno; > - int blksize = mp->m_attr_geo->blksize; > > /* no verification of non-crc buffers */ > if (!xfs_sb_version_hascrc(&mp->m_sb)) > @@ -175,16 +174,22 @@ xfs_attr3_rmt_write_verify( > ASSERT(len >= blksize); > > while (len > 0) { > + struct xfs_attr3_rmt_hdr *rmt = (struct xfs_attr3_rmt_hdr *)ptr; > + > if (!xfs_attr3_rmt_verify(mp, ptr, blksize, bno)) { > xfs_buf_ioerror(bp, -EFSCORRUPTED); > xfs_verifier_error(bp); > return; > } > - if (bip) { > - struct xfs_attr3_rmt_hdr *rmt; > > - rmt = (struct xfs_attr3_rmt_hdr *)ptr; > - rmt->rm_lsn = cpu_to_be64(bip->bli_item.li_lsn); > + /* > + * Ensure we aren't writing bogus LSNs to disk. See > + * xfs_attr3_rmt_hdr_set() for the explanation. > + */ > + if (rmt->rm_lsn != cpu_to_be64(NULLCOMMITLSN)) { > + xfs_buf_ioerror(bp, -EFSCORRUPTED); > + xfs_verifier_error(bp); > + return; > } > xfs_update_cksum(ptr, blksize, XFS_ATTR3_RMT_CRC_OFF); > > @@ -221,6 +226,18 @@ xfs_attr3_rmt_hdr_set( > rmt->rm_owner = cpu_to_be64(ino); > rmt->rm_blkno = cpu_to_be64(bno); > > + /* > + * Remote attribute blocks are written synchronously, so we don't > + * have an LSN that we can stamp in them that makes any sense to log > + * recovery. To ensure that log recovery handles overwrites of these > + * blocks sanely (i.e. once they've been freed and reallocated as some > + * other type of metadata) we need to ensure that the LSN has a value > + * that tells log recovery to ignore the LSN and overwrite the buffer > + * with whatever is in it's log. To do this, we use the magic > + * NULLCOMMITLSN to indicate that the LSN is invalid. > + */ > + rmt->rm_lsn = cpu_to_be64(NULLCOMMITLSN); > + > return sizeof(struct xfs_attr3_rmt_hdr); > } > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 01dd228..480ebba 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -1886,9 +1886,14 @@ xlog_recover_get_buf_lsn( > uuid = &((struct xfs_dir3_blk_hdr *)blk)->uuid; > break; > case XFS_ATTR3_RMT_MAGIC: > - lsn = be64_to_cpu(((struct xfs_attr3_rmt_hdr *)blk)->rm_lsn); > - uuid = &((struct xfs_attr3_rmt_hdr *)blk)->rm_uuid; > - break; > + /* > + * Remote attr blocks are written synchronously, rather than > + * being logged. That means they do not contain a valid LSN > + * (i.e. transactionally ordered) in them, and hence any time we > + * see a buffer to replay over the top of a remote attribute > + * block we should simply do so. > + */ > + goto recover_immediately; > case XFS_SB_MAGIC: > lsn = be64_to_cpu(((struct xfs_dsb *)blk)->sb_lsn); > uuid = &((struct xfs_dsb *)blk)->sb_uuid; > -- > 2.1.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Jul 21 06:50:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7437C7F3F for ; Tue, 21 Jul 2015 06:50:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 50C438F804C for ; Tue, 21 Jul 2015 04:50:44 -0700 (PDT) X-ASG-Debug-ID: 1437479442-04cbb00f08bdfb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 63IYGtmt5WXJi5SC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 04:50:43 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id BC36C36B18D; Tue, 21 Jul 2015 11:50:42 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LBognh030042; Tue, 21 Jul 2015 07:50:42 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id A2420122E55; Tue, 21 Jul 2015 07:50:41 -0400 (EDT) Date: Tue, 21 Jul 2015 07:50:41 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, willy@linux.intel.com Subject: Re: [PATCH 3/4] xfs: remote attributes need to be considered data Message-ID: <20150721115040.GC23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 3/4] xfs: remote attributes need to be considered data References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-4-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437440945-23457-4-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437479443 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 11:09:04AM +1000, Dave Chinner wrote: > From: Dave Chinner > > We don't log remote attribute contents, and instead write them > synchronously before we commit the block allocation and attribute > tree update transaction. As a result we are writing to the allocated > space before the allcoation has been made permanent. > > As a result, we cannot consider this allocation to be a metadata > allocation. Metadata allocation can take blocks from the free list busy list ? > and so reuse them before the transaction that freed the block is > committed to disk. This behaviour is perfectly fine for journalled > metadata changes as log recovery will ensure the free operation is > replayed before the overwrite, but for remote attribute writes this > is not the case. > > Hence we have to consider the remote attribute blocks to contain > data and allocate accordingly. We do this by dropping the > XFS_BMAPI_METADATA flag from the block allocation. This means the > allocation will not use blocks that are on the busy list without > first ensuring that the freeing transaction has been committed to > disk and the blocks removed from the busy list. This ensures we will > never overwrite a freed block without first ensuring that it is > really free. > > Signed-off-by: Dave Chinner > --- Looks good: Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_attr_remote.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c > index 2faec26..dd71403 100644 > --- a/fs/xfs/libxfs/xfs_attr_remote.c > +++ b/fs/xfs/libxfs/xfs_attr_remote.c > @@ -451,14 +451,21 @@ xfs_attr_rmtval_set( > > /* > * Allocate a single extent, up to the size of the value. > + * > + * Note that we have to consider this a data allocation as we > + * write the remote attribute without logging the contents. > + * Hence we must ensure that we aren't using blocks that are on > + * the busy list so that we don't overwrite blocks which have > + * recently been freed but their transactions are not yet > + * committed to disk. If we overwrite the contents of a busy > + * extent and then crash then the block may not contain the > + * correct metadata after log recovery occurs. > */ > xfs_bmap_init(args->flist, args->firstblock); > nmap = 1; > error = xfs_bmapi_write(args->trans, dp, (xfs_fileoff_t)lblkno, > - blkcnt, > - XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, > - args->firstblock, args->total, &map, &nmap, > - args->flist); > + blkcnt, XFS_BMAPI_ATTRFORK, args->firstblock, > + args->total, &map, &nmap, args->flist); > if (!error) { > error = xfs_bmap_finish(&args->trans, args->flist, > &committed); > -- > 2.1.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Jul 21 06:50:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E97FE29E06 for ; Tue, 21 Jul 2015 06:50:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 88A3AAC009 for ; Tue, 21 Jul 2015 04:50:48 -0700 (PDT) X-ASG-Debug-ID: 1437479447-04bdf00e907c190001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id aSVKbaOJQQ5IK47k (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 04:50:47 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 630913679E0; Tue, 21 Jul 2015 11:50:47 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LBokwE030044; Tue, 21 Jul 2015 07:50:47 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 3096D122E55; Tue, 21 Jul 2015 07:50:46 -0400 (EDT) Date: Tue, 21 Jul 2015 07:50:46 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, willy@linux.intel.com Subject: Re: [PATCH 4/4] xfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag Message-ID: <20150721115045.GD23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 4/4] xfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-5-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437440945-23457-5-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437479447 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 11:09:05AM +1000, Dave Chinner wrote: > From: Dave Chinner > > xfs_bunmapi() doesn't care what type of extent is being freed and > does not look at the XFS_BMAPI_METADATA flag at all. As such we can > remove the XFS_BMAPI_METADATA from all callers that use it. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster > fs/xfs/libxfs/xfs_attr_remote.c | 5 ++--- > fs/xfs/libxfs/xfs_da_btree.c | 4 ++-- > fs/xfs/libxfs/xfs_dir2.c | 33 +++++++++++++++------------------ > fs/xfs/xfs_symlink.c | 2 +- > 4 files changed, 20 insertions(+), 24 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c > index dd71403..89356aa 100644 > --- a/fs/xfs/libxfs/xfs_attr_remote.c > +++ b/fs/xfs/libxfs/xfs_attr_remote.c > @@ -618,9 +618,8 @@ xfs_attr_rmtval_remove( > > xfs_bmap_init(args->flist, args->firstblock); > error = xfs_bunmapi(args->trans, args->dp, lblkno, blkcnt, > - XFS_BMAPI_ATTRFORK | XFS_BMAPI_METADATA, > - 1, args->firstblock, args->flist, > - &done); > + XFS_BMAPI_ATTRFORK, 1, args->firstblock, > + args->flist, &done); > if (!error) { > error = xfs_bmap_finish(&args->trans, args->flist, > &committed); > diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c > index 2385f8c..2ae91e8 100644 > --- a/fs/xfs/libxfs/xfs_da_btree.c > +++ b/fs/xfs/libxfs/xfs_da_btree.c > @@ -2351,8 +2351,8 @@ xfs_da_shrink_inode( > * the last block to the place we want to kill. > */ > error = xfs_bunmapi(tp, dp, dead_blkno, count, > - xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA, > - 0, args->firstblock, args->flist, &done); > + xfs_bmapi_aflag(w), 0, args->firstblock, > + args->flist, &done); > if (error == -ENOSPC) { > if (w != XFS_DATA_FORK) > break; > diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c > index a69fb3a..e0ba976 100644 > --- a/fs/xfs/libxfs/xfs_dir2.c > +++ b/fs/xfs/libxfs/xfs_dir2.c > @@ -674,25 +674,22 @@ xfs_dir2_shrink_inode( > mp = dp->i_mount; > tp = args->trans; > da = xfs_dir2_db_to_da(args->geo, db); > - /* > - * Unmap the fsblock(s). > - */ > - if ((error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount, > - XFS_BMAPI_METADATA, 0, args->firstblock, args->flist, > - &done))) { > + > + /* Unmap the fsblock(s). */ > + error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount, 0, 0, > + args->firstblock, args->flist, &done); > + if (error) { > /* > - * ENOSPC actually can happen if we're in a removename with > - * no space reservation, and the resulting block removal > - * would cause a bmap btree split or conversion from extents > - * to btree. This can only happen for un-fragmented > - * directory blocks, since you need to be punching out > - * the middle of an extent. > - * In this case we need to leave the block in the file, > - * and not binval it. > - * So the block has to be in a consistent empty state > - * and appropriately logged. > - * We don't free up the buffer, the caller can tell it > - * hasn't happened since it got an error back. > + * ENOSPC actually can happen if we're in a removename with no > + * space reservation, and the resulting block removal would > + * cause a bmap btree split or conversion from extents to btree. > + * This can only happen for un-fragmented directory blocks, > + * since you need to be punching out the middle of an extent. > + * In this case we need to leave the block in the file, and not > + * binval it. So the block has to be in a consistent empty > + * state and appropriately logged. We don't free up the buffer, > + * the caller can tell it hasn't happened since it got an error > + * back. > */ > return error; > } > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 4be27b0..05c44bf 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -501,7 +501,7 @@ xfs_inactive_symlink_rmt( > /* > * Unmap the dead block(s) to the free_list. > */ > - error = xfs_bunmapi(tp, ip, 0, size, XFS_BMAPI_METADATA, nmaps, > + error = xfs_bunmapi(tp, ip, 0, size, 0, nmaps, > &first_block, &free_list, &done); > if (error) > goto error_bmap_cancel; > -- > 2.1.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Jul 21 07:19:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5FC3C7F81 for ; Tue, 21 Jul 2015 07:19:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 28A7F304043 for ; Tue, 21 Jul 2015 05:19:32 -0700 (PDT) X-ASG-Debug-ID: 1437481171-04bdf00e8e7cd90001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ZRPVcbpDughnFP9n (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 05:19:31 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 126EF19F211; Tue, 21 Jul 2015 12:19:31 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LCJU1b011756; Tue, 21 Jul 2015 08:19:30 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 69A47122E55; Tue, 21 Jul 2015 08:19:29 -0400 (EDT) Date: Tue, 21 Jul 2015 08:19:29 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs-oss , "fstests@vger.kernel.org" Subject: Re: PATCH 3/3 V6] xfs: test changing UUID on V5 superblock Message-ID: <20150721121929.GE23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: PATCH 3/3 V6] xfs: test changing UUID on V5 superblock References: <55A7D414.2050606@sandeen.net> <55A7D5BD.7050805@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55A7D5BD.7050805@sandeen.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437481171 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 16, 2015 at 11:03:09AM -0500, Eric Sandeen wrote: > Tests xfs_db's ability to change & restore UUIDs on V5 filesystems, > and tests xfs_copy's ability to change the UUID on the copy. > > Update to _filter_uuid is so that it will catch the UUID output > from xfs_admin -u, which is slightly different than the regexp it > was expecting. > > This requires new userspace which knows how to change the UUID on > a V5 superblock. > > Signed-off-by: Eric Sandeen > --- > > V6: Take into account Brian's prior review. > > diff --git a/common/filter b/common/filter > index 05dbae6..8db1b3e 100644 > --- a/common/filter > +++ b/common/filter > @@ -275,9 +275,9 @@ _filter_uuid() > { > if [ ! -z $1 ]; then > UUID=$1 > - sed -e "s/\(uuid:\) $UUID/\1 /i" > + sed -e "s/\(uuid[ :=]\+\) $UUID/\1 /i" > else > - sed -e "s/\(uuid:\) *[0-9a-f-][0-9a-f-]*/\1 /i" > + sed -e "s/\(uuid[ :=]\+\) *[0-9a-f-][0-9a-f-]*/\1 /ig" > fi > } > > diff --git a/common/rc b/common/rc > index 610045e..00b529b 100644 > --- a/common/rc > +++ b/common/rc > @@ -2702,6 +2702,21 @@ _require_test_fcntl_advisory_locks() > _notrun "Require fcntl advisory locks support" > } > > +# XFS ability to change UUIDs on V5/CRC filesystems > +# > +_require_meta_uuid() > +{ > + # This will create a crc fs on $SCRATCH_DEV > + _require_xfs_crc > + > + $XFS_DB_PROG -x -c "uuid generate" $SCRATCH_DEV >/dev/null 2>&1 \ > + || _notrun "Userspace doesn't support meta_uuid feature" > + > + _scratch_mount >/dev/null 2>&1 \ > + || _notrun "Kernel doesn't support meta_uuid feature" > + umount $SCRATCH_MNT > +} > + > _get_total_inode() > { > if [ -z "$1" ]; then > diff --git a/tests/xfs/074 b/tests/xfs/074 > new file mode 100755 > index 0000000..2592e89 > --- /dev/null > +++ b/tests/xfs/074 > @@ -0,0 +1,143 @@ > +#! /bin/bash > +# FS QA Test 074 > +# > +# test UUID modification of CRC-enabled filesystems > +# > +# CRC-enabled / V5 superblock filesystems have a UUID stamped into > +# every piece of metadata, and a mechanism was added later to allow > +# changing the user-visible UUID by copying the original UUID (which > +# matches all the existing metadata) to a new superblock location. > +# Exercise some of that behavior. > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2015 Red Hat, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > + > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +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 > +_supported_os Linux > +_require_scratch > +_require_xfs_crc > +_require_meta_uuid > + > +# Takes 2 args, 2nd optional: > +# 1: generate, rewrite, or restore > +# 2: Expected UUID after the action. Blank if new uuid generated > +# After the action check the fs, and make sure it can be mounted > +# Sets NEW_UUID to the resulting UUID. > +_test_uuid() > +{ > + ACTION=$1 > + EXPECTED_UUID=$2 > + > + $XFS_DB_PROG -x -c "uuid $ACTION" $SCRATCH_DEV \ > + | _filter_uuid $EXPECTED_UUID > + NEW_UUID=`$XFS_DB_PROG -c "uuid" $SCRATCH_DEV | awk '{print $NF}'` > + _check_scratch_fs > + _scratch_mount || _fail "Mount failed after UUID $ACTION" > + _scratch_unmount > + > +} > + > +_fs_has_META_UUID() > +{ > + FS=$1 > + $XFS_DB_PROG -r -c version $FS | grep -q META_UUID > +} > + > +rm -f $seqres.full > + > +_scratch_mkfs_xfs -m crc=1 >> $seqres.full 2>&1 || _fail "mkfs failed" > + > +ORIG_UUID=`$XFS_DB_PROG -c "uuid" $SCRATCH_DEV | awk '{print $NF}'` > + > +_scratch_mount > +# Put some stuff on the fs > +$FSSTRESS_PROG -d $SCRATCH_MNT -n 100 -p 4 >> $seqres.full 2>&1 > +_scratch_unmount > + > +# Can xfs_db change it? > + > +echo "== Generate new UUID" > +_test_uuid generate > +[ "$NEW_UUID" == "$ORIG_UUID" ] && _fail "Failed to change UUID" > +_fs_has_META_UUID $SCRATCH_DEV || _fail "META_UUID feature not set" > + FWIW, another cleanup here might be to add a "has_meta_uuid" param to _test_uuid that provides the expected _fs_has_META_UUID value following the operation. That would condense some of the repeated error messages. Otherwise this seems Ok to me: Reviewed-by: Brian Foster > +# This should be a no-op > +echo "== Rewrite UUID" > +_test_uuid rewrite $NEW_UUID > +_fs_has_META_UUID $SCRATCH_DEV || _fail "META_UUID feature not set" > + > +# Can we change it back? > +echo "== Restore old UUID" > +_test_uuid restore $ORIG_UUID > +[ "$NEW_UUID" != "$ORIG_UUID" ] && _fail "Failed to restore UUID" > +_fs_has_META_UUID $SCRATCH_DEV && _fail "META_UUID feature should not be not set" > + > +# This should be a no-op too. > +echo "== Rewrite UUID" > +_test_uuid rewrite $ORIG_UUID > +_fs_has_META_UUID $SCRATCH_DEV && _fail "META_UUID feature should not be not set" > + > +# Ok, now what does xfs_copy do; it changes UUID by default > + > +IMGFILE=$TEST_DIR/$seq.copy.img > +rm -f $IMGFILE > + > +# xfs_copy changes the UUID by default > +echo "== xfs_copy with new UUID" > +$XFS_COPY_PROG $SCRATCH_DEV $IMGFILE 2>&1 >> $seqres.full || \ > + _fail "xfs_copy (new UUID) failed" > +_check_xfs_filesystem $IMGFILE none none || _fail "Copy looks corrupted" > +# The copy should have META_UUID feature set > +_fs_has_META_UUID $IMGFILE || _fail "META_UUID feature not set on copy" > +_scratch_mount || _fail "Mount failed after UUID rewrite" > +_scratch_unmount > + > +rm -f $IMGFILE > + > +# duplicating the UUID should be fine too > +echo "== xfs_copy with duplicate UUID" > +$XFS_COPY_PROG -d $SCRATCH_DEV $IMGFILE 2>&1 >> $seqres.full || \ > + _fail "xfs_copy (duplicate) failed" > +_check_xfs_filesystem $IMGFILE none none || _fail "Duplicate copy looks corrupted" > +# The copy should not have META_UUID feature set > +_fs_has_META_UUID $IMGFILE && _fail "META_UUID feature should not be set on copy" > + > +# success, all done > +status=0 > +exit > diff --git a/tests/xfs/074.out b/tests/xfs/074.out > new file mode 100644 > index 0000000..b511107 > --- /dev/null > +++ b/tests/xfs/074.out > @@ -0,0 +1,21 @@ > +QA output created by 074 > +== Generate new UUID > +Clearing log and setting UUID > +writing all SBs > +new UUID = > +== Rewrite UUID > +old UUID = > +Clearing log and setting UUID > +writing all SBs > +new UUID = > +== Restore old UUID > +Clearing log and setting UUID > +writing all SBs > +new UUID = > +== Rewrite UUID > +old UUID = > +Clearing log and setting UUID > +writing all SBs > +new UUID = > +== xfs_copy with new UUID > +== xfs_copy with duplicate UUID > diff --git a/tests/xfs/group b/tests/xfs/group > index 848a1bd..a66869a 100644 > --- a/tests/xfs/group > +++ b/tests/xfs/group > @@ -71,6 +71,7 @@ > 071 rw auto > 072 rw auto prealloc quick > 073 copy auto > +074 auto quick copy > 078 growfs auto quick > 080 rw ioctl > 081 deprecated # log logprint quota > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Jul 21 07:32:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7F0607F82 for ; Tue, 21 Jul 2015 07:32:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 644F930404E for ; Tue, 21 Jul 2015 05:32:01 -0700 (PDT) X-ASG-Debug-ID: 1437481919-04cb6c3b88c3fe0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id q7bpm04pB4KatM2D (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 05:32:00 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id B7D57BC8CC; Tue, 21 Jul 2015 12:31:59 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LCVx87018508; Tue, 21 Jul 2015 08:31:59 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 8AB6E122E55; Tue, 21 Jul 2015 08:31:58 -0400 (EDT) Date: Tue, 21 Jul 2015 08:31:58 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs Message-ID: <20150721123158.GF23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs References: <55A7F5EE.5000500@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55A7F5EE.5000500@sandeen.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437481920 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 16, 2015 at 01:20:30PM -0500, Eric Sandeen wrote: > My prior commit, aaf90a2 xfs_copy: fix copy of hard 4k devices > causes xfs_copy to emit a CRC error warning when copying a > CRC filesystem. > > This is because we are now reading the maximum sector size, > and attempting to verify the CRC based on that (likely incorrect) > length. > > In xfs_db, we currently just don't verify this read, so it's > not a problem. In xfs_copy, we almost certainly want to verify. > > So, first do the maximal read with no verifier; once it's read, > drop that buffer, and re-read with the proper sector size and > verifier. > > Signed-off-by: Eric Sandeen > --- > > diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c > index 44a32e8..fd96e15 100644 > --- a/copy/xfs_copy.c > +++ b/copy/xfs_copy.c > @@ -654,11 +654,17 @@ main(int argc, char **argv) > > memset(&mbuf, 0, sizeof(xfs_mount_t)); > libxfs_buftarg_init(&mbuf, xargs.ddev, xargs.logdev, xargs.rtdev); > + /* We don't yet know the sector size, so read maximal size */ > sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, > - 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), > - 0, &xfs_sb_buf_ops); > + 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0, NULL); > sb = &mbuf.m_sb; > libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbp)); > + /* Do it again, now with proper length and verifier */ > + libxfs_putbuf(sbp); > + libxfs_purgebuf(sbp); Why the purge? On a quick look, it looks like the buffer cache code would handle this if the buffer size changes. Hmm, is it to ensure the verification occurs if the buffer size doesn't actually change? If so, I'd suggest to enhance the comment. :) Brian > + sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, > + 1 << (sb->sb_sectlog - BBSHIFT), > + 0, &xfs_sb_buf_ops); > > /* > * For now, V5 superblock filesystems are not supported without -d; > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jtulak@redhat.com Tue Jul 21 07:40:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2E5CE7F82 for ; Tue, 21 Jul 2015 07:40:04 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 12A188F8049 for ; Tue, 21 Jul 2015 05:40:01 -0700 (PDT) X-ASG-Debug-ID: 1437482398-04cb6c3b8cc42f0001-NocioJ Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 6H8cr3qUHipPOhi8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 05:39:59 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LCdaAh046094; Tue, 21 Jul 2015 08:39:36 -0400 Date: Tue, 21 Jul 2015 08:39:36 -0400 (EDT) From: Jan Tulak To: xfs@oss.sgi.com Cc: hch@infradead.org, sandeen@redhat.com Message-ID: <1508777144.956841.1437482376774.JavaMail.zimbra@redhat.com> In-Reply-To: <1436346893-11831-1-git-send-email-jtulak@redhat.com> References: <1156743222.24471614.1436281858017.JavaMail.zimbra@redhat.com> <1436346893-11831-1-git-send-email-jtulak@redhat.com> Subject: Re: [PATCH v3] xfsprogs: blkid is now mandatory MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH v3] xfsprogs: blkid is now mandatory Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.5.205] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: blkid is now mandatory Thread-Index: geD/PXeMdTV/4dfSfsvvlVDSpE4NBw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1437482399 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20942 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Jan Tulak" > Subject: [PATCH v3] xfsprogs: blkid is now mandatory > > Because blkid is here for a long time, I hereby propose a patch for > removing support for NOT having blkid. The current support through > set of #ifdef is prone to errors like > making a patch just in one of the branches, and according to a > recent talk between Christoph and Eric, it is not necessary to keep > it supported. > > Remove code for checking ENABLE_BLKID, and the code when > ENABLE_BLKID is not defined. The only use of libdisk was in the > removed code, so remove libdisk too. It makes blkid required for > compilation. > I just found that while it is possible to get blkid on OS X, it is in 1.0.0 version which doesn't have blkid_probe_get function. I'm examining whether it is possible to get an updated version there, but right now, this patch breaks OS X support. Unfortunately I didn't noticed of this before, as the OS X port was terribly out of date. So this patch shouldn't be included until I find how to get around. Cheers, Jan -- Jan Tulak jtulak@redhat.com From willy@linux.intel.com Tue Jul 21 08:58:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0B4757F89 for ; Tue, 21 Jul 2015 08:58:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id EA8238F804B for ; Tue, 21 Jul 2015 06:58:05 -0700 (PDT) X-ASG-Debug-ID: 1437487081-04cbb00f07c1610001-NocioJ Received: from mga01.intel.com ([192.55.52.88]) by cuda.sgi.com with ESMTP id B2n4BauuXyLZhPMq for ; Tue, 21 Jul 2015 06:58:01 -0700 (PDT) X-Barracuda-Envelope-From: willy@linux.intel.com X-Barracuda-Apparent-Source-IP: 192.55.52.88 X-Barracuda-IPDD: Level2 [linux.intel.com/192.55.52.88] Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 21 Jul 2015 06:58:01 -0700 X-Barracuda-IPDD: Level2 [linux.intel.com/192.55.52.88] X-Barracuda-IPDD: Level2 [linux.intel.com/192.55.52.88] X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,516,1432623600"; d="scan'208";a="527721439" Received: from radhakr1-mobl.amr.corp.intel.com (HELO thog.int.wil.cx) ([10.254.75.1]) by FMSMGA003.fm.intel.com with SMTP; 21 Jul 2015 06:58:00 -0700 Received: by thog.int.wil.cx (Postfix, from userid 1000) id AAC7D5FC3F; Tue, 21 Jul 2015 09:57:58 -0400 (EDT) Date: Tue, 21 Jul 2015 09:57:58 -0400 From: Matthew Wilcox To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/4] xfs: call dax_fault on read page faults for DAX Message-ID: <20150721135758.GO13681@linux.intel.com> X-ASG-Orig-Subj: Re: [PATCH 1/4] xfs: call dax_fault on read page faults for DAX References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-2-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437440945-23457-2-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Barracuda-Connect: UNKNOWN[192.55.52.88] X-Barracuda-Start-Time: 1437487081 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 11:09:02AM +1000, Dave Chinner wrote: > @@ -339,6 +344,8 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > int error; > int major = 0; > > + WARN_ON_ONCE((vmf->flags & FAULT_FLAG_WRITE) && !complete_unwritten); > + > size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT; > if (vmf->pgoff >= size) > return VM_FAULT_SIGBUS; This warning is always going to trigger for ext2, since it doesn't support the concept of unwritten extents. Instead, ext2 zeroes the block before linking it into the tree and returning from get_block. > @@ -437,7 +444,7 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > * as for normal BH based IO completions. > */ > error = dax_insert_mapping(inode, &bh, vma, vmf); > - if (buffer_unwritten(&bh)) > + if (buffer_unwritten(&bh) && complete_unwritten) > complete_unwritten(&bh, !error); > > out: ... so maybe we should do something here like: if (buffer_unwritten(&bh)) { if (complete_unwritten) complete_unwritten(&bh, !error); else BUG_ON(vmf->flags & FAULT_FLAG_WRITE); } (the XFS changes look fine to me) From sandeen@sandeen.net Tue Jul 21 10:11:14 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8D9757F8A for ; Tue, 21 Jul 2015 10:11:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 09E82AC005 for ; Tue, 21 Jul 2015 08:11:10 -0700 (PDT) X-ASG-Debug-ID: 1437491466-04cb6c3b8bc8540001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id SkukStWQuWELYf8W for ; Tue, 21 Jul 2015 08:11:08 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [192.168.1.215] (108-82-213-81.lightspeed.cicril.sbcglobal.net [108.82.213.81]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 4115E61C5761; Tue, 21 Jul 2015 10:11:06 -0500 (CDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (1.0) Subject: Re: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs From: Eric Sandeen X-ASG-Orig-Subj: Re: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs X-Mailer: iPhone Mail (12F70) In-Reply-To: <20150721123158.GF23013@bfoster.bfoster> Date: Tue, 21 Jul 2015 10:11:05 -0500 Cc: xfs-oss Content-Transfer-Encoding: quoted-printable Message-Id: <9B4E8358-4DAC-4092-AF1F-A9E5A71C18C5@sandeen.net> References: <55A7F5EE.5000500@sandeen.net> <20150721123158.GF23013@bfoster.bfoster> To: Brian Foster X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437491468 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20944 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars > On Jul 21, 2015, at 7:31 AM, Brian Foster wrote: >=20 >> On Thu, Jul 16, 2015 at 01:20:30PM -0500, Eric Sandeen wrote: >> My prior commit, aaf90a2 xfs_copy: fix copy of hard 4k devices >> causes xfs_copy to emit a CRC error warning when copying a >> CRC filesystem. >>=20 >> This is because we are now reading the maximum sector size, >> and attempting to verify the CRC based on that (likely incorrect) >> length. >>=20 >> In xfs_db, we currently just don't verify this read, so it's >> not a problem. In xfs_copy, we almost certainly want to verify. >>=20 >> So, first do the maximal read with no verifier; once it's read, >> drop that buffer, and re-read with the proper sector size and >> verifier. >>=20 >> Signed-off-by: Eric Sandeen >> --- >>=20 >> diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c >> index 44a32e8..fd96e15 100644 >> --- a/copy/xfs_copy.c >> +++ b/copy/xfs_copy.c >> @@ -654,11 +654,17 @@ main(int argc, char **argv) >>=20 >> memset(&mbuf, 0, sizeof(xfs_mount_t)); >> libxfs_buftarg_init(&mbuf, xargs.ddev, xargs.logdev, xargs.rtdev); >> + /* We don't yet know the sector size, so read maximal size */ >> sbp =3D libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, >> - 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), >> - 0, &xfs_sb_buf_ops); >> + 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0, NULL); >> sb =3D &mbuf.m_sb; >> libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbp)); >> + /* Do it again, now with proper length and verifier */ >> + libxfs_putbuf(sbp); >> + libxfs_purgebuf(sbp); >=20 > Why the purge? On a quick look, it looks like the buffer cache code > would handle this if the buffer size changes. >=20 > Hmm, is it to ensure the verification occurs if the buffer size doesn't > actually change? If so, I'd suggest to enhance the comment. :) >=20 Without the purge, a re-read of a different size at the same offset seems to= cause cache mismatch problems. Eric > Brian >=20 >> + sbp =3D libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, >> + 1 << (sb->sb_sectlog - BBSHIFT), >> + 0, &xfs_sb_buf_ops); >>=20 >> /* >> * For now, V5 superblock filesystems are not supported without -d; >>=20 >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >=20 From sandeen@redhat.com Tue Jul 21 10:34:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D04E77F8D for ; Tue, 21 Jul 2015 10:34:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5BB7BAC011 for ; Tue, 21 Jul 2015 08:34:01 -0700 (PDT) X-ASG-Debug-ID: 1437492839-04cb6c3b8bc9080001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Na1P3DvqmknIDJva (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 08:34:00 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 5E156B1F84; Tue, 21 Jul 2015 15:33:59 +0000 (UTC) Received: from Liberator.local (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LFXvD9006702 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 21 Jul 2015 11:33:58 -0400 Message-ID: <55AE6670.40903@redhat.com> Date: Tue, 21 Jul 2015 10:34:08 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Dave Chinner , Mike Snitzer CC: axboe@kernel.dk, hch@lst.de, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space In-Reply-To: <20150720223610.GV7943@dastard> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437492840 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 7/20/15 5:36 PM, Dave Chinner wrote: > On Mon, Jul 20, 2015 at 11:18:49AM -0400, Mike Snitzer wrote: >> If XFS fails to write metadata it will retry the write indefinitely >> (with the hope that the write will succeed at some point in the future). >> >> Others can possibly speak to historic reason(s) why this is a sane >> default for XFS. But when XFS is deployed ontop of DM thin provisioning >> this infinite retry is very unwelcome -- especially if DM thinp was >> configured to be automatically extended with free space but the admin >> hasn't provided (or restored) adequate free space. >> >> To fix this infinite retry a new bdev_has_space () hook is added to XFS >> to break out of its metadata retry loop if the underlying block device >> reports it no longer has free space. DM thin provisioning is now >> trained to respond accordingly, which enables XFS to not cause a cascade >> of tasks blocked on IO waiting for XFS's infinite retry. >> >> All other block devices, which don't implement a .has_space method in >> block_device_operations, will always return true for bdev_has_space(). >> >> With this change XFS will fail the metadata IO, force shutdown, and the >> XFS filesystem may be unmounted. This enables an admin to recover from >> their oversight, of not having provided enough free space, without >> having to force a hard reset of the system to get XFS to unwedge. >> >> Signed-off-by: Mike Snitzer > > Shouldn't dm-thinp just return the bio with ENOSPC as it's error? > The scsi layers already do this for hardware thinp ENOSPC failures, > so dm-thinp should behave exactly the same (i.e. via > __scsi_error_from_host_byte()). The behaviour of the filesystem > should be the same in all cases - making it conditional on whether > the thinp implementation can be polled for available space is wrong > as most hardware thinp can't be polled by the kernel forthis info.. > > > If dm-thinp just returns ENOSPC from on the BIO like other hardware > thinp devices, then it is up to the filesystem to handle that > appropriately. i.e. whether an ENOSPC IO error is fatal to the > filesystem is determined by filesystem configuration and context of > the IO error, not whether the block device has no space (which we > should already know from the ENOSPC error delivered by IO > completion). The issue we had discussed previously is that there is no agreement across block devices about whether ENOSPC is a permanent or temporary condition. Asking the admin to tune the fs to each block device's behavior sucks, IMHO. This interface could at least be defined to reflect a permanent and unambiguous state... -Eric From bfoster@redhat.com Tue Jul 21 10:45:54 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1EE517F90 for ; Tue, 21 Jul 2015 10:45:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 055C1304053 for ; Tue, 21 Jul 2015 08:45:50 -0700 (PDT) X-ASG-Debug-ID: 1437493549-04cb6c3b8bc9610001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id KgTP1cLdUr7yS0Tq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 08:45:50 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 42331365044; Tue, 21 Jul 2015 15:45:49 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LFjmWv013518; Tue, 21 Jul 2015 11:45:48 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 7CFBE122E55; Tue, 21 Jul 2015 11:45:47 -0400 (EDT) Date: Tue, 21 Jul 2015 11:45:47 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs Message-ID: <20150721154547.GG23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs_copy: fix up initial sb buffer read on CRC fs References: <55A7F5EE.5000500@sandeen.net> <20150721123158.GF23013@bfoster.bfoster> <9B4E8358-4DAC-4092-AF1F-A9E5A71C18C5@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9B4E8358-4DAC-4092-AF1F-A9E5A71C18C5@sandeen.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437493549 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 10:11:05AM -0500, Eric Sandeen wrote: > > > > On Jul 21, 2015, at 7:31 AM, Brian Foster wrote: > > > >> On Thu, Jul 16, 2015 at 01:20:30PM -0500, Eric Sandeen wrote: > >> My prior commit, aaf90a2 xfs_copy: fix copy of hard 4k devices > >> causes xfs_copy to emit a CRC error warning when copying a > >> CRC filesystem. > >> > >> This is because we are now reading the maximum sector size, > >> and attempting to verify the CRC based on that (likely incorrect) > >> length. > >> > >> In xfs_db, we currently just don't verify this read, so it's > >> not a problem. In xfs_copy, we almost certainly want to verify. > >> > >> So, first do the maximal read with no verifier; once it's read, > >> drop that buffer, and re-read with the proper sector size and > >> verifier. > >> > >> Signed-off-by: Eric Sandeen > >> --- > >> > >> diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c > >> index 44a32e8..fd96e15 100644 > >> --- a/copy/xfs_copy.c > >> +++ b/copy/xfs_copy.c > >> @@ -654,11 +654,17 @@ main(int argc, char **argv) > >> > >> memset(&mbuf, 0, sizeof(xfs_mount_t)); > >> libxfs_buftarg_init(&mbuf, xargs.ddev, xargs.logdev, xargs.rtdev); > >> + /* We don't yet know the sector size, so read maximal size */ > >> sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, > >> - 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), > >> - 0, &xfs_sb_buf_ops); > >> + 1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0, NULL); > >> sb = &mbuf.m_sb; > >> libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbp)); > >> + /* Do it again, now with proper length and verifier */ > >> + libxfs_putbuf(sbp); > >> + libxfs_purgebuf(sbp); > > > > Why the purge? On a quick look, it looks like the buffer cache code > > would handle this if the buffer size changes. > > > > Hmm, is it to ensure the verification occurs if the buffer size doesn't > > actually change? If so, I'd suggest to enhance the comment. :) > > > Without the purge, a re-read of a different size at the same offset seems to cause cache mismatch problems. > Ok, fair enough. Care to update the comment? Otherwise this seems good to me: Reviewed-by: Brian Foster > Eric > > > Brian > > > >> + sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR, > >> + 1 << (sb->sb_sectlog - BBSHIFT), > >> + 0, &xfs_sb_buf_ops); > >> > >> /* > >> * For now, V5 superblock filesystems are not supported without -d; > >> > >> _______________________________________________ > >> xfs mailing list > >> xfs@oss.sgi.com > >> http://oss.sgi.com/mailman/listinfo/xfs > > From bfoster@redhat.com Tue Jul 21 11:54:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 144367F92 for ; Tue, 21 Jul 2015 11:54:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9192BAC00D for ; Tue, 21 Jul 2015 09:54:22 -0700 (PDT) X-ASG-Debug-ID: 1437497660-04cb6c3b8dcb280001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id PXi0uRTMsSx0vQus (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 09:54:21 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 237B21BE35C; Tue, 21 Jul 2015 16:54:20 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LGDLkB026457; Tue, 21 Jul 2015 12:13:21 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 4962F122E55; Tue, 21 Jul 2015 12:13:20 -0400 (EDT) Date: Tue, 21 Jul 2015 12:13:20 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: checksum log record ext headers based on record size Message-ID: <20150721161319.GH23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: checksum log record ext headers based on record size References: <1437413288-29329-1-git-send-email-bfoster@redhat.com> <20150720230219.GW7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150720230219.GW7943@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437497661 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 09:02:19AM +1000, Dave Chinner wrote: > On Mon, Jul 20, 2015 at 01:28:08PM -0400, Brian Foster wrote: > > The first 4 bytes of every basic block in the physical log is stamped > > with the current lsn. To support this mechanism, the log record header > > (first block of each new log record) contains space for the original > > first byte of each log record block before it is replaced with the lsn. > > The log record header has space for 32k worth of blocks. The version 2 > > log adds new extended record headers for each additional 32k worth of > > blocks beyond what is supported by the record header. > > > > The log record checksum incorporates the log record header, the extended > > headers and the record payload. xlog_cksum() checksums the extended > > headers based on log->l_iclog_heads, which specifies the number of > > extended headers in a log record based on the log buffer size mount > > option. The log buffer size is variable, however, and thus means the > > checksum can be calculated differently based on how a filesystem is > > mounted. This is problematic if a filesystem crashes and recovery occurs > > on a subsequent mount using a different log buffer size. For example, > > crash an active filesystem that is mounted with the default (32k) > > logbsize, attempt remount/recovery using '-o logbsize=64k' and the mount > > fails on or warns about log checksum failures. > > > > To avoid this problem, update xlog_cksum() to calculate the checksum > > based on the size of the log buffer according to the log record. The > > size is already included in the h_size field of the log record header > > and thus is available at log recovery time. Extended log record headers > > are also only written when the log record is large enough to require > > them. This makes checksum calculation of log records consistent with the > > extended record header mechanism as well as how on-disk records are > > checksummed with various log buffer size mount options. > > Hmmm - I thought that case was handled, but I guess not... > > > --- a/fs/xfs/xfs_log.c > > +++ b/fs/xfs/xfs_log.c > > @@ -1652,8 +1652,13 @@ xlog_cksum( > > if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { > > union xlog_in_core2 *xhdr = (union xlog_in_core2 *)rhead; > > int i; > > + int xheads; > > > > - for (i = 1; i < log->l_iclog_heads; i++) { > > + xheads = size / XLOG_HEADER_CYCLE_SIZE; > > + if (size % XLOG_HEADER_CYCLE_SIZE) > > + xheads++; > > + > > + for (i = 1; i < xheads; i++) { > > crc = crc32c(crc, &xhdr[i].hic_xheader, > > sizeof(struct xlog_rec_ext_header)); > > } > > rhead->h_len is an untrusted value during log recovery. i.e. at this > point we haven't validated that the record size is within the sane > range. See xlog_valid_rec_header() - it only checks that 0 < > rhead->h_len < INT_MAX. Realistically, this should be checking that > it is no more than: > > (XLOG_MAX_RECORD_BSIZE / XLOG_HEADER_CYCLE_SIZE) + 1 > > as it is now being used as an array index into a dynamically > allocated buffer.... > Indeed, this looks unsafe. Note that h_len is already being used as an index into the record data buffer for the payload crc check and data unpack, so I don't think this patch necessarily introduces the problem. Given that the problem already exists, we probably want to protect access to both the record header and data buffers, and we also don't seem to validate h_size anywhere, I'll try to address this in a separate patch. I think I have a way to handle this in xlog_valid_rec_header()... Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com From bfoster@redhat.com Tue Jul 21 12:45:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 65DE97F93 for ; Tue, 21 Jul 2015 12:45:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4AEB38F8049 for ; Tue, 21 Jul 2015 10:45:02 -0700 (PDT) X-ASG-Debug-ID: 1437500700-04cb6c3b8dcc7d0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qDwvuYPbxnQ71R5z (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 10:45:01 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id B1B0B2B5F9F for ; Tue, 21 Jul 2015 17:45:00 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LHixVS020798 for ; Tue, 21 Jul 2015 13:45:00 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 70761122E55; Tue, 21 Jul 2015 13:44:58 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH] xfs: validate iclog size and log record length in log recovery Date: Tue, 21 Jul 2015 13:44:57 -0400 X-ASG-Orig-Subj: [PATCH] xfs: validate iclog size and log record length in log recovery Message-Id: <1437500697-62180-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437500701 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Each log record header contains an h_size value which represents the size of the iclog buffers when the record was logged and an h_len value which identifies the length of the particular log record. Log recovery uses both fields to determine the size of the log buffers to use for recovery and to correctly process each log record. Neither field is completely validated during recovery, however. While on-disk corruptions might be detected by CRC verification, we are still susceptible to errors such as excessively sized buffer allocations and overruns of the log record header and data buffers. Update the xlog_valid_rec_header() function to validate the record h_size and h_len fields against a new max_size parameter. The maximum size value is passed as a parameter because the value differs depending on whether we are trying to identify the iclog size or actually processing a log record. In the former case, validate that neither field exceeds the maximum supported iclog size of XFS. Once the iclog size is identified and log record buffers allocated, validate all records to be processed against the iclog size to ensure that buffer overrun cannot occur. Signed-off-by: Brian Foster --- Here's a stab at addressing the log record field validation issues Dave calls out here: http://oss.sgi.com/pipermail/xfs/2015-July/042557.html This is still undergoing some testing, but I've not hit any problems so far... Brian fs/xfs/xfs_log_recover.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 01dd228..98c420a 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -4078,13 +4078,22 @@ xlog_unpack_data( return 0; } +/* + * Sanity check a log record header. The caller provides the maximum iclog size + * and record length since validity depends on the context. For example, the + * first record is used to allocate buffers and thus is validated against the + * maximum supported iclog size. Subsequent records must be validated against + * the identified iclog size to avoid overflow of the record buffers. + */ STATIC int xlog_valid_rec_header( struct xlog *log, struct xlog_rec_header *rhead, - xfs_daddr_t blkno) + xfs_daddr_t blkno, + int max_size) { int hlen; + int hsize; if (unlikely(rhead->h_magicno != cpu_to_be32(XLOG_HEADER_MAGIC_NUM))) { XFS_ERROR_REPORT("xlog_valid_rec_header(1)", @@ -4099,14 +4108,21 @@ xlog_valid_rec_header( return -EIO; } + hsize = be32_to_cpu(rhead->h_size); + if (unlikely(hsize <= 0 || hsize > max_size)) { + xfs_warn(log->l_mp, "%s: invalid iclog size (%d).", __func__, + hsize); + return -EFSCORRUPTED; + } + /* LR body must have data or it wouldn't have been written */ hlen = be32_to_cpu(rhead->h_len); - if (unlikely( hlen <= 0 || hlen > INT_MAX )) { + if (unlikely(hlen <= 0 || hlen > max_size)) { XFS_ERROR_REPORT("xlog_valid_rec_header(2)", XFS_ERRLEVEL_LOW, log->l_mp); return -EFSCORRUPTED; } - if (unlikely( blkno > log->l_logBBsize || blkno > INT_MAX )) { + if (unlikely(blkno > log->l_logBBsize || blkno > INT_MAX)) { XFS_ERROR_REPORT("xlog_valid_rec_header(3)", XFS_ERRLEVEL_LOW, log->l_mp); return -EFSCORRUPTED; @@ -4159,7 +4175,8 @@ xlog_do_recovery_pass( goto bread_err1; rhead = (xlog_rec_header_t *)offset; - error = xlog_valid_rec_header(log, rhead, tail_blk); + error = xlog_valid_rec_header(log, rhead, tail_blk, + XLOG_MAX_RECORD_BSIZE); if (error) goto bread_err1; h_size = be32_to_cpu(rhead->h_size); @@ -4244,7 +4261,8 @@ xlog_do_recovery_pass( } rhead = (xlog_rec_header_t *)offset; error = xlog_valid_rec_header(log, rhead, - split_hblks ? blk_no : 0); + split_hblks ? blk_no : 0, + h_size); if (error) goto bread_err2; @@ -4318,7 +4336,7 @@ xlog_do_recovery_pass( goto bread_err2; rhead = (xlog_rec_header_t *)offset; - error = xlog_valid_rec_header(log, rhead, blk_no); + error = xlog_valid_rec_header(log, rhead, blk_no, h_size); if (error) goto bread_err2; -- 2.1.0 From msnitzer@redhat.com Tue Jul 21 12:47:57 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 085DF7F95 for ; Tue, 21 Jul 2015 12:47:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C21248F8049 for ; Tue, 21 Jul 2015 10:47:56 -0700 (PDT) X-ASG-Debug-ID: 1437500875-04bdf00e8f877c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id h6H1n4AUywAS2xCa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 10:47:55 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 4EC1AA2C17; Tue, 21 Jul 2015 17:47:54 +0000 (UTC) Received: from localhost (dhcp-25-149.bos.redhat.com [10.18.25.149]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LHlrZt019761 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Tue, 21 Jul 2015 13:47:54 -0400 Date: Tue, 21 Jul 2015 13:47:53 -0400 From: Mike Snitzer To: Eric Sandeen Cc: Dave Chinner , axboe@kernel.dk, hch@lst.de, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150721174753.GA8563@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55AE6670.40903@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437500875 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21 2015 at 11:34am -0400, Eric Sandeen wrote: > On 7/20/15 5:36 PM, Dave Chinner wrote: > > On Mon, Jul 20, 2015 at 11:18:49AM -0400, Mike Snitzer wrote: > >> If XFS fails to write metadata it will retry the write indefinitely > >> (with the hope that the write will succeed at some point in the future). > >> > >> Others can possibly speak to historic reason(s) why this is a sane > >> default for XFS. But when XFS is deployed ontop of DM thin provisioning > >> this infinite retry is very unwelcome -- especially if DM thinp was > >> configured to be automatically extended with free space but the admin > >> hasn't provided (or restored) adequate free space. > >> > >> To fix this infinite retry a new bdev_has_space () hook is added to XFS > >> to break out of its metadata retry loop if the underlying block device > >> reports it no longer has free space. DM thin provisioning is now > >> trained to respond accordingly, which enables XFS to not cause a cascade > >> of tasks blocked on IO waiting for XFS's infinite retry. > >> > >> All other block devices, which don't implement a .has_space method in > >> block_device_operations, will always return true for bdev_has_space(). > >> > >> With this change XFS will fail the metadata IO, force shutdown, and the > >> XFS filesystem may be unmounted. This enables an admin to recover from > >> their oversight, of not having provided enough free space, without > >> having to force a hard reset of the system to get XFS to unwedge. > >> > >> Signed-off-by: Mike Snitzer > > > > Shouldn't dm-thinp just return the bio with ENOSPC as it's error? > > The scsi layers already do this for hardware thinp ENOSPC failures, > > so dm-thinp should behave exactly the same (i.e. via > > __scsi_error_from_host_byte()). The behaviour of the filesystem > > should be the same in all cases - making it conditional on whether > > the thinp implementation can be polled for available space is wrong > > as most hardware thinp can't be polled by the kernel forthis info.. > > > > > > If dm-thinp just returns ENOSPC from on the BIO like other hardware > > thinp devices, then it is up to the filesystem to handle that > > appropriately. i.e. whether an ENOSPC IO error is fatal to the > > filesystem is determined by filesystem configuration and context of > > the IO error, not whether the block device has no space (which we > > should already know from the ENOSPC error delivered by IO > > completion). > > The issue we had discussed previously is that there is no agreement > across block devices about whether ENOSPC is a permanent or temporary > condition. Asking the admin to tune the fs to each block device's > behavior sucks, IMHO. It does suck, but it beats the alternative of XFS continuing to do nothing about the problem. Disucssing more with Vivek, might be that XFS would be best served to model what dm-thinp has provided with its 'no_space_timeout'. It defaults to queueing IO for 60 seconds, once the timeout expires the queued IOs getted errored. If set to 0 dm-thinp will queue IO indefinitely. So for XFS's use-case: s/queue/retry/ > This interface could at least be defined to reflect a permanent and > unambiguous state... The proposed bdev_has_space() interface enabled XFS to defer to the block device. But it obviously doesn't help at all if the blockdevice isn't providing a .has_space method -- so I can see value in XFS having something like a 'no_space_timeout' knob. But something needs to happen. No more bike-shedding allowed on this one.. PLEASE DO SOMETHING! :) From bfoster@redhat.com Tue Jul 21 12:59:41 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F2E897F98 for ; Tue, 21 Jul 2015 12:59:40 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id BE8A9304043 for ; Tue, 21 Jul 2015 10:59:40 -0700 (PDT) X-ASG-Debug-ID: 1437501576-04bdf00e9087cc0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id F6LaKWGlF9rPFuoP (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 10:59:36 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 1AD3836B392 for ; Tue, 21 Jul 2015 17:59:36 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6LHxZau019091 for ; Tue, 21 Jul 2015 13:59:35 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 6BE95122E55; Tue, 21 Jul 2015 13:59:34 -0400 (EDT) Date: Tue, 21 Jul 2015 13:59:34 -0400 From: Brian Foster To: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: validate iclog size and log record length in log recovery Message-ID: <20150721175934.GI23013@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: validate iclog size and log record length in log recovery References: <1437500697-62180-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437500697-62180-1-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437501576 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21, 2015 at 01:44:57PM -0400, Brian Foster wrote: > Each log record header contains an h_size value which represents the > size of the iclog buffers when the record was logged and an h_len value > which identifies the length of the particular log record. Log recovery > uses both fields to determine the size of the log buffers to use for > recovery and to correctly process each log record. > > Neither field is completely validated during recovery, however. While > on-disk corruptions might be detected by CRC verification, we are still > susceptible to errors such as excessively sized buffer allocations and > overruns of the log record header and data buffers. > > Update the xlog_valid_rec_header() function to validate the record > h_size and h_len fields against a new max_size parameter. The maximum > size value is passed as a parameter because the value differs depending > on whether we are trying to identify the iclog size or actually > processing a log record. In the former case, validate that neither field > exceeds the maximum supported iclog size of XFS. Once the iclog size is > identified and log record buffers allocated, validate all records to be > processed against the iclog size to ensure that buffer overrun cannot > occur. > > Signed-off-by: Brian Foster > --- > > Here's a stab at addressing the log record field validation issues Dave > calls out here: > > http://oss.sgi.com/pipermail/xfs/2015-July/042557.html > > This is still undergoing some testing, but I've not hit any problems so > far... > ... aaaaannd sure enough I managed to hit an assert blow up within a couple minutes of sending this out. ;) kernel: XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 2005 I'm not yet sure whether it is related. It seems somewhat strange if it is. I'll see if it's reproducible with and without these patches. Thoughts appreciated on this change in the meantime... Brian > Brian > > fs/xfs/xfs_log_recover.c | 30 ++++++++++++++++++++++++------ > 1 file changed, 24 insertions(+), 6 deletions(-) > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 01dd228..98c420a 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -4078,13 +4078,22 @@ xlog_unpack_data( > return 0; > } > > +/* > + * Sanity check a log record header. The caller provides the maximum iclog size > + * and record length since validity depends on the context. For example, the > + * first record is used to allocate buffers and thus is validated against the > + * maximum supported iclog size. Subsequent records must be validated against > + * the identified iclog size to avoid overflow of the record buffers. > + */ > STATIC int > xlog_valid_rec_header( > struct xlog *log, > struct xlog_rec_header *rhead, > - xfs_daddr_t blkno) > + xfs_daddr_t blkno, > + int max_size) > { > int hlen; > + int hsize; > > if (unlikely(rhead->h_magicno != cpu_to_be32(XLOG_HEADER_MAGIC_NUM))) { > XFS_ERROR_REPORT("xlog_valid_rec_header(1)", > @@ -4099,14 +4108,21 @@ xlog_valid_rec_header( > return -EIO; > } > > + hsize = be32_to_cpu(rhead->h_size); > + if (unlikely(hsize <= 0 || hsize > max_size)) { > + xfs_warn(log->l_mp, "%s: invalid iclog size (%d).", __func__, > + hsize); > + return -EFSCORRUPTED; > + } > + > /* LR body must have data or it wouldn't have been written */ > hlen = be32_to_cpu(rhead->h_len); > - if (unlikely( hlen <= 0 || hlen > INT_MAX )) { > + if (unlikely(hlen <= 0 || hlen > max_size)) { > XFS_ERROR_REPORT("xlog_valid_rec_header(2)", > XFS_ERRLEVEL_LOW, log->l_mp); > return -EFSCORRUPTED; > } > - if (unlikely( blkno > log->l_logBBsize || blkno > INT_MAX )) { > + if (unlikely(blkno > log->l_logBBsize || blkno > INT_MAX)) { > XFS_ERROR_REPORT("xlog_valid_rec_header(3)", > XFS_ERRLEVEL_LOW, log->l_mp); > return -EFSCORRUPTED; > @@ -4159,7 +4175,8 @@ xlog_do_recovery_pass( > goto bread_err1; > > rhead = (xlog_rec_header_t *)offset; > - error = xlog_valid_rec_header(log, rhead, tail_blk); > + error = xlog_valid_rec_header(log, rhead, tail_blk, > + XLOG_MAX_RECORD_BSIZE); > if (error) > goto bread_err1; > h_size = be32_to_cpu(rhead->h_size); > @@ -4244,7 +4261,8 @@ xlog_do_recovery_pass( > } > rhead = (xlog_rec_header_t *)offset; > error = xlog_valid_rec_header(log, rhead, > - split_hblks ? blk_no : 0); > + split_hblks ? blk_no : 0, > + h_size); > if (error) > goto bread_err2; > > @@ -4318,7 +4336,7 @@ xlog_do_recovery_pass( > goto bread_err2; > > rhead = (xlog_rec_header_t *)offset; > - error = xlog_valid_rec_header(log, rhead, blk_no); > + error = xlog_valid_rec_header(log, rhead, blk_no, h_size); > if (error) > goto bread_err2; > > -- > 2.1.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Tue Jul 21 16:15:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 097BB7F9A for ; Tue, 21 Jul 2015 16:15:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5C695AC011 for ; Tue, 21 Jul 2015 14:15:05 -0700 (PDT) X-ASG-Debug-ID: 1437513301-04cbb06a7403bc0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id u5pVKLvNpdLKppiS for ; Tue, 21 Jul 2015 14:15:01 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from Liberator.local (unknown [172.56.36.92]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 2D0976184597 for ; Tue, 21 Jul 2015 16:14:59 -0500 (CDT) Message-ID: <55AEB651.9000204@sandeen.net> Date: Tue, 21 Jul 2015 16:14:57 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: Re: [PATCH 2/3 V6] xfsprogs: Add new sb_meta_uuid field, update userspace tools to manipulate it References: <55A7D414.2050606@sandeen.net> <55A7D54A.1040408@sandeen.net> X-ASG-Orig-Subj: Re: [PATCH 2/3 V6] xfsprogs: Add new sb_meta_uuid field, update userspace tools to manipulate it In-Reply-To: <55A7D54A.1040408@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437513301 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20953 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/16/15 11:01 AM, Eric Sandeen wrote: > This adds a new superblock field, sb_meta_uuid. This allows us to > change the use-visible UUID on crc-enabled filesytems from userspace > if desired, by copying the existing UUID to the new location for > metadata comparisons. If this is done, an incompat flag must be > set to prevent older filesystems from mounting the filesystem, but > the original UUID can be restored, and the incompat flag removed, > with a new xfs_db / xfs_admin UUID command, "restore." > > Much of this patch mirrors the kernel patch in simply renaming > the field used for metadata uuid comparison; other bits: > > * Teach xfs_db to print the new meta_uuid field > * Allow xfs_db to generate a new UUID for CRC-enabled filesystems > * Allow xfs_db to revert to the original UUID and clear the flag > * Fix up xfs_copy to work with CRC-enabled filesystems > * Update the xfs_admin manpage to show the UUID "restore" command > > Signed-off-by: Eric Sandeen Note, this was originally Reviewed-by: Brian Foster but has minor changes to address Dave's small issues, and is rebased against the current tree. Thanks, -Eric > --- > > diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c > index fd96e15..5ea1d82 100644 > --- a/copy/xfs_copy.c > +++ b/copy/xfs_copy.c > @@ -25,6 +25,7 @@ > #include "xfs_copy.h" > > #define rounddown(x, y) (((x)/(y))*(y)) > +#define uuid_equal(s,d) (platform_uuid_compare((s),(d)) == 0) > > extern int platform_check_ismounted(char *, char *, struct stat64 *, int); > > @@ -466,6 +467,36 @@ write_wbuf(void) > sighold(SIGCHLD); > } > > +void > +sb_update_uuid( > + xfs_sb_t *sb, > + ag_header_t *ag_hdr, > + thread_args *tcarg) > +{ > + /* > + * If this filesystem has CRCs, the original UUID is stamped into > + * all metadata. If we are changing the UUID in the copy, we need > + * to copy the original UUID into the meta_uuid slot and set the > + * set the incompat flag if that hasn't already been done. > + */ > + if (!uuid_equal(&tcarg->uuid, &ag_hdr->xfs_sb->sb_uuid) && > + xfs_sb_version_hascrc(sb) && !xfs_sb_version_hasmetauuid(sb)) { > + __be32 feat; > + > + feat = be32_to_cpu(ag_hdr->xfs_sb->sb_features_incompat); > + feat |= XFS_SB_FEAT_INCOMPAT_META_UUID; > + ag_hdr->xfs_sb->sb_features_incompat = cpu_to_be32(feat); > + platform_uuid_copy(&ag_hdr->xfs_sb->sb_meta_uuid, > + &ag_hdr->xfs_sb->sb_uuid); > + } > + > + platform_uuid_copy(&ag_hdr->xfs_sb->sb_uuid, &tcarg->uuid); > + > + /* We may have changed the UUID, so update the superblock CRC */ > + if (xfs_sb_version_hascrc(sb)) > + xfs_update_cksum((char *)ag_hdr->xfs_sb, sb->sb_sectsize, > + XFS_SB_CRC_OFF); > +} > > int > main(int argc, char **argv) > @@ -666,16 +697,6 @@ main(int argc, char **argv) > 1 << (sb->sb_sectlog - BBSHIFT), > 0, &xfs_sb_buf_ops); > > - /* > - * For now, V5 superblock filesystems are not supported without -d; > - * we do not have the infrastructure yet to fix CRCs when a new UUID > - * is generated. > - */ > - if (xfs_sb_version_hascrc(sb) && !duplicate) { > - do_log(_("%s: Cannot yet copy V5 fs without '-d'\n"), progname); > - exit(1); > - } > - > mp = libxfs_mount(&mbuf, sb, xargs.ddev, xargs.logdev, xargs.rtdev, 0); > if (mp == NULL) { > do_log(_("%s: %s filesystem failed to initialize\n" > @@ -1134,8 +1155,7 @@ main(int argc, char **argv) > /* do each thread in turn, each has its own UUID */ > > for (j = 0, tcarg = targ; j < num_targets; j++) { > - platform_uuid_copy(&ag_hdr.xfs_sb->sb_uuid, > - &tcarg->uuid); > + sb_update_uuid(sb, &ag_hdr, tcarg); > do_write(tcarg); > tcarg++; > } > diff --git a/db/sb.c b/db/sb.c > index 2b78136..7338bcd 100644 > --- a/db/sb.c > +++ b/db/sb.c > @@ -29,6 +29,8 @@ > #include "output.h" > #include "init.h" > > +#define uuid_equal(s,d) (platform_uuid_compare((s),(d)) == 0) > + > static int sb_f(int argc, char **argv); > static void sb_help(void); > static int uuid_f(int argc, char **argv); > @@ -122,6 +124,7 @@ const field_t sb_flds[] = { > { "spino_align", FLDT_EXTLEN, OI(OFF(spino_align)), C1, 0, TYP_NONE }, > { "pquotino", FLDT_INO, OI(OFF(pquotino)), C1, 0, TYP_INODE }, > { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, > + { "meta_uuid", FLDT_UUID, OI(OFF(meta_uuid)), C1, 0, TYP_NONE }, > { NULL } > }; > > @@ -323,6 +326,32 @@ do_uuid(xfs_agnumber_t agno, uuid_t *uuid) > return &uu; > } > /* set uuid */ > + if (!xfs_sb_version_hascrc(&tsb)) > + goto write; > + /* > + * If we have CRCs, and this UUID differs from that stamped in the > + * metadata, set the incompat flag and copy the old one to the > + * metadata-specific location. > + * > + * If we are setting the user-visible UUID back to match the metadata > + * UUID, clear the metadata-specific location and the incompat flag. > + */ > + if (!xfs_sb_version_hasmetauuid(&tsb) && > + !uuid_equal(uuid, &mp->m_sb.sb_meta_uuid)) { > + mp->m_sb.sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_META_UUID; > + tsb.sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_META_UUID; > + memcpy(&tsb.sb_meta_uuid, &tsb.sb_uuid, sizeof(uuid_t)); > + } else if (xfs_sb_version_hasmetauuid(&tsb) && > + uuid_equal(uuid, &mp->m_sb.sb_meta_uuid)) { > + memset(&tsb.sb_meta_uuid, 0, sizeof(uuid_t)); > + /* Write those zeros now; it's ignored once we clear the flag */ > + libxfs_sb_to_disk(iocur_top->data, &tsb); > + mp->m_sb.sb_features_incompat &= > + ~XFS_SB_FEAT_INCOMPAT_META_UUID; > + tsb.sb_features_incompat &= ~XFS_SB_FEAT_INCOMPAT_META_UUID; > + } > + > +write: > memcpy(&tsb.sb_uuid, uuid, sizeof(uuid_t)); > libxfs_sb_to_disk(iocur_top->data, &tsb); > write_cur(); > @@ -352,18 +381,6 @@ uuid_f( > return 0; > } > > - /* > - * For now, changing the UUID of V5 superblock filesystems is > - * not supported; we do not have the infrastructure to fix all > - * other metadata when a new superblock UUID is generated. > - */ > - if (xfs_sb_version_hascrc(&mp->m_sb) && > - strcasecmp(argv[1], "rewrite")) { > - dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), > - progname); > - return 0; > - } > - > if (!strcasecmp(argv[1], "generate")) { > platform_uuid_generate(&uu); > } else if (!strcasecmp(argv[1], "nil")) { > @@ -377,6 +394,17 @@ uuid_f( > memcpy(&uu, uup, sizeof(uuid_t)); > platform_uuid_unparse(&uu, bp); > dbprintf(_("old UUID = %s\n"), bp); > + } else if (!strcasecmp(argv[1], "restore")) { > + xfs_sb_t tsb; > + > + if (!get_sb(0, &tsb)) > + return 0; > + > + /* Not set; nothing to do. Success! */ > + if (!xfs_sb_version_hasmetauuid(&tsb)) > + return 0; > + > + memcpy(&uu, mp->m_sb.sb_meta_uuid, sizeof(uuid_t)); > } else { > if (platform_uuid_parse(argv[1], &uu)) { > dbprintf(_("invalid UUID\n")); > @@ -653,6 +681,8 @@ version_string( > strcat(s, ",FINOBT"); > if (xfs_sb_version_hassparseinodes(sbp)) > strcat(s, ",SPARSE_INODES"); > + if (xfs_sb_version_hasmetauuid(sbp)) > + strcat(s, ",META_UUID"); > return s; > } > > diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c > index 0d9b4c3..9d76329 100644 > --- a/libxfs/xfs_alloc.c > +++ b/libxfs/xfs_alloc.c > @@ -460,7 +460,7 @@ xfs_agfl_verify( > struct xfs_agfl *agfl = XFS_BUF_TO_AGFL(bp); > int i; > > - if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be32_to_cpu(agfl->agfl_magicnum) != XFS_AGFL_MAGIC) > return false; > @@ -2256,7 +2256,7 @@ xfs_agf_verify( > struct xfs_agf *agf = XFS_BUF_TO_AGF(bp); > > if (xfs_sb_version_hascrc(&mp->m_sb) && > - !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_uuid)) > + !uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > > if (!(agf->agf_magicnum == cpu_to_be32(XFS_AGF_MAGIC) && > diff --git a/libxfs/xfs_alloc_btree.c b/libxfs/xfs_alloc_btree.c > index 7fd72af..e60538a 100644 > --- a/libxfs/xfs_alloc_btree.c > +++ b/libxfs/xfs_alloc_btree.c > @@ -293,7 +293,7 @@ xfs_allocbt_verify( > case cpu_to_be32(XFS_ABTB_CRC_MAGIC): > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return false; > - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) > return false; > @@ -311,7 +311,7 @@ xfs_allocbt_verify( > case cpu_to_be32(XFS_ABTC_CRC_MAGIC): > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return false; > - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) > return false; > diff --git a/libxfs/xfs_attr_leaf.c b/libxfs/xfs_attr_leaf.c > index 8f0772a..cc25068 100644 > --- a/libxfs/xfs_attr_leaf.c > +++ b/libxfs/xfs_attr_leaf.c > @@ -258,7 +258,7 @@ xfs_attr3_leaf_verify( > if (ichdr.magic != XFS_ATTR3_LEAF_MAGIC) > return false; > > - if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) > return false; > @@ -1052,7 +1052,7 @@ xfs_attr3_leaf_create( > > hdr3->blkno = cpu_to_be64(bp->b_bn); > hdr3->owner = cpu_to_be64(dp->i_ino); > - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); > > ichdr.freemap[0].base = sizeof(struct xfs_attr3_leaf_hdr); > } else { > diff --git a/libxfs/xfs_attr_remote.c b/libxfs/xfs_attr_remote.c > index 4f492c1..5feaf55 100644 > --- a/libxfs/xfs_attr_remote.c > +++ b/libxfs/xfs_attr_remote.c > @@ -95,7 +95,7 @@ xfs_attr3_rmt_verify( > return false; > if (rmt->rm_magic != cpu_to_be32(XFS_ATTR3_RMT_MAGIC)) > return false; > - if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&rmt->rm_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(rmt->rm_blkno) != bno) > return false; > @@ -212,7 +212,7 @@ xfs_attr3_rmt_hdr_set( > rmt->rm_magic = cpu_to_be32(XFS_ATTR3_RMT_MAGIC); > rmt->rm_offset = cpu_to_be32(offset); > rmt->rm_bytes = cpu_to_be32(size); > - uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&rmt->rm_uuid, &mp->m_sb.sb_meta_uuid); > rmt->rm_owner = cpu_to_be64(ino); > rmt->rm_blkno = cpu_to_be64(bno); > > diff --git a/libxfs/xfs_bmap_btree.c b/libxfs/xfs_bmap_btree.c > index 2fd04e0..f42bc2d 100644 > --- a/libxfs/xfs_bmap_btree.c > +++ b/libxfs/xfs_bmap_btree.c > @@ -346,7 +346,8 @@ xfs_bmbt_to_bmdr( > > if (xfs_sb_version_hascrc(&mp->m_sb)) { > ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_CRC_MAGIC)); > - ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)); > + ASSERT(uuid_equal(&rblock->bb_u.l.bb_uuid, > + &mp->m_sb.sb_meta_uuid)); > ASSERT(rblock->bb_u.l.bb_blkno == > cpu_to_be64(XFS_BUF_DADDR_NULL)); > } else > @@ -644,7 +645,7 @@ xfs_bmbt_verify( > case cpu_to_be32(XFS_BMAP_CRC_MAGIC): > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return false; > - if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(block->bb_u.l.bb_blkno) != bp->b_bn) > return false; > diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c > index 203e7d2..a16ae7d 100644 > --- a/libxfs/xfs_btree.c > +++ b/libxfs/xfs_btree.c > @@ -62,7 +62,8 @@ xfs_btree_check_lblock( > > if (xfs_sb_version_hascrc(&mp->m_sb)) { > lblock_ok = lblock_ok && > - uuid_equal(&block->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid) && > + uuid_equal(&block->bb_u.l.bb_uuid, > + &mp->m_sb.sb_meta_uuid) && > block->bb_u.l.bb_blkno == cpu_to_be64( > bp ? bp->b_bn : XFS_BUF_DADDR_NULL); > } > @@ -112,7 +113,8 @@ xfs_btree_check_sblock( > > if (xfs_sb_version_hascrc(&mp->m_sb)) { > sblock_ok = sblock_ok && > - uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid) && > + uuid_equal(&block->bb_u.s.bb_uuid, > + &mp->m_sb.sb_meta_uuid) && > block->bb_u.s.bb_blkno == cpu_to_be64( > bp ? bp->b_bn : XFS_BUF_DADDR_NULL); > } > @@ -997,7 +999,7 @@ xfs_btree_init_block_int( > if (flags & XFS_BTREE_CRC_BLOCKS) { > buf->bb_u.l.bb_blkno = cpu_to_be64(blkno); > buf->bb_u.l.bb_owner = cpu_to_be64(owner); > - uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&buf->bb_u.l.bb_uuid, &mp->m_sb.sb_meta_uuid); > buf->bb_u.l.bb_pad = 0; > buf->bb_u.l.bb_lsn = 0; > } > @@ -1010,7 +1012,7 @@ xfs_btree_init_block_int( > if (flags & XFS_BTREE_CRC_BLOCKS) { > buf->bb_u.s.bb_blkno = cpu_to_be64(blkno); > buf->bb_u.s.bb_owner = cpu_to_be32(__owner); > - uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&buf->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid); > buf->bb_u.s.bb_lsn = 0; > } > } > diff --git a/libxfs/xfs_da_btree.c b/libxfs/xfs_da_btree.c > index 441bef4..3de4cd3 100644 > --- a/libxfs/xfs_da_btree.c > +++ b/libxfs/xfs_da_btree.c > @@ -142,7 +142,7 @@ xfs_da3_node_verify( > if (ichdr.magic != XFS_DA3_NODE_MAGIC) > return false; > > - if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(hdr3->info.blkno) != bp->b_bn) > return false; > @@ -320,7 +320,7 @@ xfs_da3_node_create( > ichdr.magic = XFS_DA3_NODE_MAGIC; > hdr3->info.blkno = cpu_to_be64(bp->b_bn); > hdr3->info.owner = cpu_to_be64(args->dp->i_ino); > - uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&hdr3->info.uuid, &mp->m_sb.sb_meta_uuid); > } else { > ichdr.magic = XFS_DA_NODE_MAGIC; > } > diff --git a/libxfs/xfs_dir2_block.c b/libxfs/xfs_dir2_block.c > index f061a99..489f301 100644 > --- a/libxfs/xfs_dir2_block.c > +++ b/libxfs/xfs_dir2_block.c > @@ -64,7 +64,7 @@ xfs_dir3_block_verify( > if (xfs_sb_version_hascrc(&mp->m_sb)) { > if (hdr3->magic != cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) > return false; > - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(hdr3->blkno) != bp->b_bn) > return false; > @@ -154,7 +154,7 @@ xfs_dir3_block_init( > hdr3->magic = cpu_to_be32(XFS_DIR3_BLOCK_MAGIC); > hdr3->blkno = cpu_to_be64(bp->b_bn); > hdr3->owner = cpu_to_be64(dp->i_ino); > - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); > return; > > } > diff --git a/libxfs/xfs_dir2_data.c b/libxfs/xfs_dir2_data.c > index 609c097..c475ba8 100644 > --- a/libxfs/xfs_dir2_data.c > +++ b/libxfs/xfs_dir2_data.c > @@ -218,7 +218,7 @@ xfs_dir3_data_verify( > if (xfs_sb_version_hascrc(&mp->m_sb)) { > if (hdr3->magic != cpu_to_be32(XFS_DIR3_DATA_MAGIC)) > return false; > - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(hdr3->blkno) != bp->b_bn) > return false; > @@ -602,7 +602,7 @@ xfs_dir3_data_init( > hdr3->magic = cpu_to_be32(XFS_DIR3_DATA_MAGIC); > hdr3->blkno = cpu_to_be64(bp->b_bn); > hdr3->owner = cpu_to_be64(dp->i_ino); > - uuid_copy(&hdr3->uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&hdr3->uuid, &mp->m_sb.sb_meta_uuid); > > } else > hdr->magic = cpu_to_be32(XFS_DIR2_DATA_MAGIC); > diff --git a/libxfs/xfs_dir2_leaf.c b/libxfs/xfs_dir2_leaf.c > index c2dba8a..80d03b3 100644 > --- a/libxfs/xfs_dir2_leaf.c > +++ b/libxfs/xfs_dir2_leaf.c > @@ -158,7 +158,7 @@ xfs_dir3_leaf_verify( > > if (leaf3->info.hdr.magic != cpu_to_be16(magic3)) > return false; > - if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&leaf3->info.uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(leaf3->info.blkno) != bp->b_bn) > return false; > @@ -308,7 +308,7 @@ xfs_dir3_leaf_init( > : cpu_to_be16(XFS_DIR3_LEAFN_MAGIC); > leaf3->info.blkno = cpu_to_be64(bp->b_bn); > leaf3->info.owner = cpu_to_be64(owner); > - uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&leaf3->info.uuid, &mp->m_sb.sb_meta_uuid); > } else { > memset(leaf, 0, sizeof(*leaf)); > leaf->hdr.info.magic = cpu_to_be16(type); > diff --git a/libxfs/xfs_dir2_node.c b/libxfs/xfs_dir2_node.c > index 3b71e9e..581d648 100644 > --- a/libxfs/xfs_dir2_node.c > +++ b/libxfs/xfs_dir2_node.c > @@ -91,7 +91,7 @@ xfs_dir3_free_verify( > > if (hdr3->magic != cpu_to_be32(XFS_DIR3_FREE_MAGIC)) > return false; > - if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (be64_to_cpu(hdr3->blkno) != bp->b_bn) > return false; > @@ -224,7 +224,7 @@ xfs_dir3_free_get_buf( > > hdr3->hdr.blkno = cpu_to_be64(bp->b_bn); > hdr3->hdr.owner = cpu_to_be64(dp->i_ino); > - uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid); > } else > hdr.magic = XFS_DIR2_FREE_MAGIC; > dp->d_ops->free_hdr_to_disk(bp->b_addr, &hdr); > diff --git a/libxfs/xfs_dquot_buf.c b/libxfs/xfs_dquot_buf.c > index 2e0484a..1a2546b 100644 > --- a/libxfs/xfs_dquot_buf.c > +++ b/libxfs/xfs_dquot_buf.c > @@ -171,7 +171,7 @@ xfs_dqcheck( > d->dd_diskdq.d_id = cpu_to_be32(id); > > if (xfs_sb_version_hascrc(&mp->m_sb)) { > - uuid_copy(&d->dd_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&d->dd_uuid, &mp->m_sb.sb_meta_uuid); > xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), > XFS_DQUOT_CRC_OFF); > } > @@ -206,7 +206,7 @@ xfs_dquot_buf_verify_crc( > if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk), > XFS_DQUOT_CRC_OFF)) > return false; > - if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&d->dd_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > } > return true; > diff --git a/libxfs/xfs_format.h b/libxfs/xfs_format.h > index 68d4175..282926d 100644 > --- a/libxfs/xfs_format.h > +++ b/libxfs/xfs_format.h > @@ -100,7 +100,7 @@ typedef struct xfs_sb { > xfs_rfsblock_t sb_dblocks; /* number of data blocks */ > xfs_rfsblock_t sb_rblocks; /* number of realtime blocks */ > xfs_rtblock_t sb_rextents; /* number of realtime extents */ > - uuid_t sb_uuid; /* file system unique id */ > + uuid_t sb_uuid; /* user-visible file system unique id */ > xfs_fsblock_t sb_logstart; /* starting block of log if internal */ > xfs_ino_t sb_rootino; /* root inode number */ > xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */ > @@ -174,6 +174,7 @@ typedef struct xfs_sb { > > xfs_ino_t sb_pquotino; /* project quota inode */ > xfs_lsn_t sb_lsn; /* last write sequence */ > + uuid_t sb_meta_uuid; /* metadata file system unique id */ > > /* must be padded to 64 bit alignment */ > } xfs_sb_t; > @@ -190,7 +191,7 @@ typedef struct xfs_dsb { > __be64 sb_dblocks; /* number of data blocks */ > __be64 sb_rblocks; /* number of realtime blocks */ > __be64 sb_rextents; /* number of realtime extents */ > - uuid_t sb_uuid; /* file system unique id */ > + uuid_t sb_uuid; /* user-visible file system unique id */ > __be64 sb_logstart; /* starting block of log if internal */ > __be64 sb_rootino; /* root inode number */ > __be64 sb_rbmino; /* bitmap inode for realtime extents */ > @@ -260,6 +261,7 @@ typedef struct xfs_dsb { > > __be64 sb_pquotino; /* project quota inode */ > __be64 sb_lsn; /* last write sequence */ > + uuid_t sb_meta_uuid; /* metadata file system unique id */ > > /* must be padded to 64 bit alignment */ > } xfs_dsb_t; > @@ -458,9 +460,12 @@ xfs_sb_has_ro_compat_feature( > > #define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */ > #define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */ > +#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */ > + > #define XFS_SB_FEAT_INCOMPAT_ALL \ > (XFS_SB_FEAT_INCOMPAT_FTYPE| \ > - XFS_SB_FEAT_INCOMPAT_SPINODES) > + XFS_SB_FEAT_INCOMPAT_SPINODES| \ > + XFS_SB_FEAT_INCOMPAT_META_UUID) > > #define XFS_SB_FEAT_INCOMPAT_UNKNOWN ~XFS_SB_FEAT_INCOMPAT_ALL > static inline bool > @@ -515,6 +520,18 @@ static inline bool xfs_sb_version_hassparseinodes(struct xfs_sb *sbp) > } > > /* > + * XFS_SB_FEAT_INCOMPAT_META_UUID indicates that the metadata UUID > + * is stored separately from the user-visible UUID; this allows the > + * user-visible UUID to be changed on V5 filesystems which have a > + * filesystem UUID stamped into every piece of metadata. > + */ > +static inline int xfs_sb_version_hasmetauuid(xfs_sb_t *sbp) > +{ > + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) && > + (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_META_UUID); > +} > + > +/* > * end of superblock version macros > */ > > diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c > index 05ecd06..d26027c 100644 > --- a/libxfs/xfs_ialloc.c > +++ b/libxfs/xfs_ialloc.c > @@ -333,7 +333,8 @@ xfs_ialloc_inode_init( > if (version == 3) { > free->di_ino = cpu_to_be64(ino); > ino++; > - uuid_copy(&free->di_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&free->di_uuid, > + &mp->m_sb.sb_meta_uuid); > xfs_dinode_calc_crc(mp, free); > } else if (tp) { > /* just log the inode core */ > @@ -2495,7 +2496,7 @@ xfs_agi_verify( > struct xfs_agi *agi = XFS_BUF_TO_AGI(bp); > > if (xfs_sb_version_hascrc(&mp->m_sb) && > - !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_uuid)) > + !uuid_equal(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > /* > * Validate the magic number of the agi block. > diff --git a/libxfs/xfs_ialloc_btree.c b/libxfs/xfs_ialloc_btree.c > index 7055149..09ffdb4 100644 > --- a/libxfs/xfs_ialloc_btree.c > +++ b/libxfs/xfs_ialloc_btree.c > @@ -238,7 +238,7 @@ xfs_inobt_verify( > case cpu_to_be32(XFS_FIBT_CRC_MAGIC): > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return false; > - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) > return false; > diff --git a/libxfs/xfs_inode_buf.c b/libxfs/xfs_inode_buf.c > index b8e65a9..be9d166 100644 > --- a/libxfs/xfs_inode_buf.c > +++ b/libxfs/xfs_inode_buf.c > @@ -302,7 +302,7 @@ xfs_dinode_verify( > return false; > if (be64_to_cpu(dip->di_ino) != ino) > return false; > - if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > return true; > } > @@ -364,7 +364,7 @@ xfs_iread( > if (xfs_sb_version_hascrc(&mp->m_sb)) { > ip->i_d.di_version = 3; > ip->i_d.di_ino = ip->i_ino; > - uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); > } else > ip->i_d.di_version = 2; > return 0; > diff --git a/libxfs/xfs_sb.c b/libxfs/xfs_sb.c > index 8c28db0..7c2b33e 100644 > --- a/libxfs/xfs_sb.c > +++ b/libxfs/xfs_sb.c > @@ -381,6 +381,14 @@ __xfs_sb_from_disk( > to->sb_spino_align = be32_to_cpu(from->sb_spino_align); > to->sb_pquotino = be64_to_cpu(from->sb_pquotino); > to->sb_lsn = be64_to_cpu(from->sb_lsn); > + /* > + * sb_meta_uuid is only on disk if it differs from sb_uuid and the > + * feature flag is set; if not set we keep it only in memory. > + */ > + if (xfs_sb_version_hasmetauuid(to)) > + uuid_copy(&to->sb_meta_uuid, &from->sb_meta_uuid); > + else > + uuid_copy(&to->sb_meta_uuid, &from->sb_uuid); > /* Convert on-disk flags to in-memory flags? */ > if (convert_xquota) > xfs_sb_quota_from_disk(to); > @@ -522,6 +530,8 @@ xfs_sb_to_disk( > cpu_to_be32(from->sb_features_log_incompat); > to->sb_spino_align = cpu_to_be32(from->sb_spino_align); > to->sb_lsn = cpu_to_be64(from->sb_lsn); > + if (xfs_sb_version_hasmetauuid(from)) > + uuid_copy(&to->sb_meta_uuid, &from->sb_meta_uuid); > } > } > > diff --git a/libxfs/xfs_symlink_remote.c b/libxfs/xfs_symlink_remote.c > index 6bc5af5..7d46d9e 100644 > --- a/libxfs/xfs_symlink_remote.c > +++ b/libxfs/xfs_symlink_remote.c > @@ -60,7 +60,7 @@ xfs_symlink_hdr_set( > dsl->sl_magic = cpu_to_be32(XFS_SYMLINK_MAGIC); > dsl->sl_offset = cpu_to_be32(offset); > dsl->sl_bytes = cpu_to_be32(size); > - uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_uuid); > + uuid_copy(&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid); > dsl->sl_owner = cpu_to_be64(ino); > dsl->sl_blkno = cpu_to_be64(bp->b_bn); > bp->b_ops = &xfs_symlink_buf_ops; > @@ -104,7 +104,7 @@ xfs_symlink_verify( > return false; > if (dsl->sl_magic != cpu_to_be32(XFS_SYMLINK_MAGIC)) > return false; > - if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_uuid)) > + if (!uuid_equal(&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid)) > return false; > if (bp->b_bn != be64_to_cpu(dsl->sl_blkno)) > return false; > diff --git a/libxlog/util.c b/libxlog/util.c > index a0e35cc..05fb67f 100644 > --- a/libxlog/util.c > +++ b/libxlog/util.c > @@ -85,8 +85,10 @@ header_check_uuid(xfs_mount_t *mp, xlog_rec_header_t *head) > { > char uu_log[64], uu_sb[64]; > > - if (print_skip_uuid) return 0; > - if (!platform_uuid_compare(&mp->m_sb.sb_uuid, &head->h_fs_uuid)) return 0; > + if (print_skip_uuid) > + return 0; > + if (!platform_uuid_compare(&mp->m_sb.sb_uuid, &head->h_fs_uuid)) > + return 0; > > platform_uuid_unparse(&mp->m_sb.sb_uuid, uu_sb); > platform_uuid_unparse(&head->h_fs_uuid, uu_log); > diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8 > index 0968196..20a114f 100644 > --- a/man/man8/xfs_admin.8 > +++ b/man/man8/xfs_admin.8 > @@ -102,7 +102,12 @@ The > .I uuid > may also be > .BR generate , > -which will generate a new UUID for the filesystem. > +which will generate a new UUID for the filesystem. Note that on CRC-enabled > +filesystems, this will set an incompatible flag such that older kernels will > +not be able to mount the filesystem. To remove this incompatible flag, use > +.BR restore , > +which will restore the original UUID and remove the incompatible > +feature flag as needed. > .TP > .B \-V > Prints the version number and exits. > diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8 > index d527230..df54bb7 100644 > --- a/man/man8/xfs_db.8 > +++ b/man/man8/xfs_db.8 > @@ -664,7 +664,7 @@ The possible data types are: > .BR sb ", " symlink " and " text . > See the TYPES section below for more information on these data types. > .TP > -.BI "uuid [" uuid " | " generate " | " rewrite ] > +.BI "uuid [" uuid " | " generate " | " rewrite " | " restore ] > Set the filesystem universally unique identifier (UUID). > The filesystem UUID can be used by > .BR mount (8) > @@ -675,7 +675,12 @@ can be set directly to the desired UUID, or it can > be automatically generated using the > .B generate > option. These options will both write the UUID into every copy of the > -superblock in the filesystem. > +superblock in the filesystem. On a CRC-enabled filesystem, this will > +set an incompatible superblock flag, and the filesystem will not be > +mountable with older kernels. This can be reverted with the > +.B restore > +option, which will copy the original UUID back into place and clear > +the incompatible flag as needed. > .B rewrite > copies the current UUID from the primary superblock > to all secondary copies of the superblock. > diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c > index 11e9f4b..cc18858 100644 > --- a/mkfs/xfs_mkfs.c > +++ b/mkfs/xfs_mkfs.c > @@ -2653,6 +2653,8 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), > sbp->sb_rextents = rtextents; > platform_uuid_generate(&uuid); > platform_uuid_copy(&sbp->sb_uuid, &uuid); > + /* Only in memory; libxfs expects this as if read from disk */ > + platform_uuid_copy(&sbp->sb_meta_uuid, &uuid); > sbp->sb_logstart = logstart; > sbp->sb_rootino = sbp->sb_rbmino = sbp->sb_rsumino = NULLFSINO; > sbp->sb_rextsize = rtextblocks; > diff --git a/repair/agheader.c b/repair/agheader.c > index a216afa..2b79a11 100644 > --- a/repair/agheader.c > +++ b/repair/agheader.c > @@ -112,7 +112,7 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return retval; > > - if (platform_uuid_compare(&agf->agf_uuid, &mp->m_sb.sb_uuid)) { > + if (platform_uuid_compare(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid)) { > char uu[64]; > > retval = XR_AG_AGF; > @@ -120,7 +120,8 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) > do_warn(_("bad uuid %s for agf %d\n"), uu, i); > > if (!no_modify) > - platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&agf->agf_uuid, > + &mp->m_sb.sb_meta_uuid); > } > return retval; > } > @@ -190,7 +191,7 @@ verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return retval; > > - if (platform_uuid_compare(&agi->agi_uuid, &mp->m_sb.sb_uuid)) { > + if (platform_uuid_compare(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid)) { > char uu[64]; > > retval = XR_AG_AGI; > @@ -198,7 +199,8 @@ verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) > do_warn(_("bad uuid %s for agi %d\n"), uu, agno); > > if (!no_modify) > - platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&agi->agi_uuid, > + &mp->m_sb.sb_meta_uuid); > } > > return retval; > @@ -245,7 +247,7 @@ compare_sb(xfs_mount_t *mp, xfs_sb_t *sb) > * superblocks, not just the secondary superblocks. > */ > static int > -secondary_sb_wack( > +secondary_sb_whack( > struct xfs_mount *mp, > struct xfs_buf *sbuf, > struct xfs_sb *sb, > @@ -267,7 +269,10 @@ secondary_sb_wack( > * > * size is the size of data which is valid for this sb. > */ > - if (xfs_sb_version_hascrc(sb)) > + if (xfs_sb_version_hasmetauuid(sb)) > + size = offsetof(xfs_sb_t, sb_meta_uuid) > + + sizeof(sb->sb_meta_uuid); > + else if (xfs_sb_version_hascrc(sb)) > size = offsetof(xfs_sb_t, sb_lsn) > + sizeof(sb->sb_lsn); > else if (xfs_sb_version_hasmorebits(sb)) > @@ -511,7 +516,7 @@ verify_set_agheader(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, > rval |= XR_AG_SB; > } > > - rval |= secondary_sb_wack(mp, sbuf, sb, i); > + rval |= secondary_sb_whack(mp, sbuf, sb, i); > > rval |= verify_set_agf(mp, agf, i); > rval |= verify_set_agi(mp, agi, i); > diff --git a/repair/agheader.h b/repair/agheader.h > index 5541fb9..6b2974c 100644 > --- a/repair/agheader.h > +++ b/repair/agheader.h > @@ -24,7 +24,6 @@ typedef struct fs_geometry { > xfs_rfsblock_t sb_dblocks; /* # data blocks */ > xfs_rfsblock_t sb_rblocks; /* # realtime blocks */ > xfs_rtblock_t sb_rextents; /* # realtime extents */ > - uuid_t sb_uuid; /* fs uuid */ > xfs_fsblock_t sb_logstart; /* starting log block # */ > xfs_agblock_t sb_rextsize; /* realtime extent size (blocks )*/ > xfs_agblock_t sb_agblocks; /* # of blocks per ag */ > diff --git a/repair/dinode.c b/repair/dinode.c > index 09db966..81deb7b 100644 > --- a/repair/dinode.c > +++ b/repair/dinode.c > @@ -207,9 +207,9 @@ clear_dinode_core(struct xfs_mount *mp, xfs_dinode_t *dinoc, xfs_ino_t ino_num) > dinoc->di_ino = cpu_to_be64(ino_num); > } > > - if (platform_uuid_compare(&dinoc->di_uuid, &mp->m_sb.sb_uuid)) { > + if (platform_uuid_compare(&dinoc->di_uuid, &mp->m_sb.sb_meta_uuid)) { > __dirty_no_modify_ret(dirty); > - platform_uuid_copy(&dinoc->di_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&dinoc->di_uuid, &mp->m_sb.sb_meta_uuid); > } > > for (i = 0; i < sizeof(dinoc->di_pad2)/sizeof(dinoc->di_pad2[0]); i++) { > @@ -2287,7 +2287,8 @@ _("inode identifier %llu mismatch on inode %" PRIu64 "\n"), > return 1; > goto clear_bad_out; > } > - if (platform_uuid_compare(&dino->di_uuid, &mp->m_sb.sb_uuid)) { > + if (platform_uuid_compare(&dino->di_uuid, > + &mp->m_sb.sb_meta_uuid)) { > if (!uncertain) > do_warn( > _("UUID mismatch on inode %" PRIu64 "\n"), lino); > diff --git a/repair/phase5.c b/repair/phase5.c > index 9b3d73b..2771f65 100644 > --- a/repair/phase5.c > +++ b/repair/phase5.c > @@ -1128,7 +1128,7 @@ build_agi(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, > agi->agi_unlinked[i] = cpu_to_be32(NULLAGINO); > > if (xfs_sb_version_hascrc(&mp->m_sb)) > - platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_meta_uuid); > > if (xfs_sb_version_hasfinobt(&mp->m_sb)) { > agi->agi_free_root = cpu_to_be32(finobt_curs->root); > @@ -1406,7 +1406,7 @@ build_agf_agfl(xfs_mount_t *mp, > #endif > > if (xfs_sb_version_hascrc(&mp->m_sb)) > - platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid); > > /* initialise the AGFL, then fill it if there are blocks left over. */ > agfl_buf = libxfs_getbuf(mp->m_dev, > @@ -1420,7 +1420,7 @@ build_agf_agfl(xfs_mount_t *mp, > if (xfs_sb_version_hascrc(&mp->m_sb)) { > agfl->agfl_magicnum = cpu_to_be32(XFS_AGFL_MAGIC); > agfl->agfl_seqno = cpu_to_be32(agno); > - platform_uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid); > for (i = 0; i < XFS_AGFL_SIZE(mp); i++) > agfl->agfl_bno[i] = cpu_to_be32(NULLAGBLOCK); > } > diff --git a/repair/phase6.c b/repair/phase6.c > index 9a5cba7..de445c6 100644 > --- a/repair/phase6.c > +++ b/repair/phase6.c > @@ -527,7 +527,7 @@ mk_rbmino(xfs_mount_t *mp) > ip->i_d.di_flags2 = 0; > ip->i_d.di_ino = mp->m_sb.sb_rbmino; > memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); > - platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); > times |= XFS_ICHGTIME_CREATE; > } > libxfs_trans_ichgtime(tp, ip, times); > @@ -783,7 +783,7 @@ mk_rsumino(xfs_mount_t *mp) > ip->i_d.di_flags2 = 0; > ip->i_d.di_ino = mp->m_sb.sb_rsumino; > memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); > - platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); > times |= XFS_ICHGTIME_CREATE; > } > libxfs_trans_ichgtime(tp, ip, times); > @@ -897,7 +897,7 @@ mk_root_dir(xfs_mount_t *mp) > ip->i_d.di_flags2 = 0; > ip->i_d.di_ino = mp->m_sb.sb_rootino; > memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); > - platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_uuid); > + platform_uuid_copy(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid); > times |= XFS_ICHGTIME_CREATE; > } > libxfs_trans_ichgtime(tp, ip, times); > > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Jul 21 16:17:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0EF3F7F6A for ; Tue, 21 Jul 2015 16:17:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id EC82B304051 for ; Tue, 21 Jul 2015 14:17:15 -0700 (PDT) X-ASG-Debug-ID: 1437513434-04cbb06a6703c50001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id my2SQ7h97tKaTW1B for ; Tue, 21 Jul 2015 14:17:14 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from Liberator.local (unknown [172.56.36.92]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id B55E76184597 for ; Tue, 21 Jul 2015 16:17:13 -0500 (CDT) Message-ID: <55AEB6D6.7080007@sandeen.net> Date: Tue, 21 Jul 2015 16:17:10 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: Re: [PATCH 1/3] xfs: create new metadata UUID field and incompat flag References: <55A7D414.2050606@sandeen.net> <55A7D47B.7030200@sandeen.net> X-ASG-Orig-Subj: Re: [PATCH 1/3] xfs: create new metadata UUID field and incompat flag In-Reply-To: <55A7D47B.7030200@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437513434 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20953 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/16/15 10:57 AM, Eric Sandeen wrote: > This adds a new superblock field, sb_meta_uuid. If set, along with > a new incompat flag, the code will use that field on a V5 filesystem > to compare to metadata UUIDs, which allows us to change the user- > visible UUID at will. Userspace handles the setting and clearing > of the incompat flag as appropriate, as the UUID gets changed; i.e. > setting the user-visible UUID back to the original UUID (as stored in > the new field) will remove the incompatible feature flag. > > If the incompat flag is not set, this copies the user-visible UUID into > into the meta_uuid slot in memory when the superblock is read from disk; > the meta_uuid field is not written back to disk in this case. > > The remainder of this patch simply switches verifiers, initializers, > etc to use the new sb_meta_uuid field. > > Signed-off-by: Eric Sandeen This one was also Reviewed-by: Brian Foster but again has small changes to address Dave's points, and rebase changes. THanks, -Eric From desmonddukor@gmail.com Tue Jul 21 16:45:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.0 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLYTO, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EED217F9A for ; Tue, 21 Jul 2015 16:45:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 846ECAC010 for ; Tue, 21 Jul 2015 14:45:08 -0700 (PDT) X-ASG-Debug-ID: 1437515100-04bdf00233065d0001-NocioJ Received: from mail-wi0-f196.google.com (mail-wi0-f196.google.com [209.85.212.196]) by cuda.sgi.com with ESMTP id HW6EQuA0BcvIrVBj (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 21 Jul 2015 14:45:01 -0700 (PDT) X-Barracuda-Envelope-From: desmonddukor@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.196 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.196] Received: by wicmm11 with SMTP id mm11so5041213wic.1 for ; Tue, 21 Jul 2015 14:45:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.196] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.196] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:date:message-id:subject:from:to:content-type; bh=sFp9ofZ8J8OapOk57r7LDJLwm79eOpOfrzJMGymg42E=; b=wO24gpjy+2ET8ohcMnC7xpDjRfYeBm1VtrbNC2eVtfMxhNJ0KZSh+k7Tan5x8hoGqN NWhtThiWIKdRPeV6pyx5wH+YG/LJotRiotSpSsO1gWS4q7kHGKdDGMInFJKauhw7WR0O on9vqfraWzjubO9I3uC0dZlXl8Yq7/DQfYYItN8SktH5EABaVQ5bN9zSu/EouErfkCBB Wr7stvQkP2P2j8ZwuAwHwRBHV+xX/vw4JLyCSauX4dKgrJpVlZroEVeElOn6XmXmzoHr +iX6reeRNJ9is/NvcibseyU/T8z0s84H6DCc6Yba2nqu2rzm7WdCOQ8ox5R0Fmtqxwf7 Kw0Q== MIME-Version: 1.0 X-Received: by 10.194.220.100 with SMTP id pv4mr75244177wjc.71.1437515100142; Tue, 21 Jul 2015 14:45:00 -0700 (PDT) Received: by 10.28.18.9 with HTTP; Tue, 21 Jul 2015 14:44:59 -0700 (PDT) Reply-To: kelly.schaffer0017@gmail.com Date: Tue, 21 Jul 2015 23:44:59 +0200 Message-ID: Subject: RE: Good Day to You From: Desmond Dukor X-ASG-Orig-Subj: RE: Good Day to You To: kelly.schaffer0017@gmail.com Content-Type: multipart/alternative; boundary=001a11c1b548e747a3051b6990ba X-Barracuda-Connect: mail-wi0-f196.google.com[209.85.212.196] X-Barracuda-Start-Time: 1437515101 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.71 X-Barracuda-Spam-Status: No, SCORE=0.71 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_MV0646, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SARE_SXLIFE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20953 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 SARE_SXLIFE BODY: Talks about your sex life 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC0_MV0646 Custom rule MV0646 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain --001a11c1b548e747a3051b6990ba Content-Type: text/plain; charset=UTF-8 Hello! I want to know if you can allow me invest my money in your country as your partner. Please tell me, can you invest my money for me? If you agree, we shall both share the total annual profit. Hoping to receive your response immediately. --001a11c1b548e747a3051b6990ba Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hello!

I want to know if you can allow me invest my money in your country as your partner. Please tell me, can you invest my money for me? If you agree, we s= hall both share the total annual profit. Hoping to receive your response immedia= tely.

=C2=A0


=C2=A0


--001a11c1b548e747a3051b6990ba-- From david@fromorbit.com Tue Jul 21 19:09:41 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 11EBD7F9D for ; Tue, 21 Jul 2015 19:09:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D76F88F8049 for ; Tue, 21 Jul 2015 17:09:37 -0700 (PDT) X-ASG-Debug-ID: 1437523772-04bdf0023008d30001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id bkGWocD6jFVBCQCD for ; Tue, 21 Jul 2015 17:09:32 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2C2BwDE3q5VPD0gLHlcGYJ8VGmCVaZPDAEBAQEBAQaUWoV7AgIBAQKBP00BAQEBAQEHAQEBAUABP4QjAQEBAwE6HCMFCwgDGAklDwUlAwcaE4gmBw7MQAEBCAIgGYYFhCyBAoJrgTgRAVEHgxeBFAWUU4R1hzSZD4EJgVuBUCwxAYEDCRcEgSMBAQE Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 22 Jul 2015 09:39:24 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHhb9-0003K9-Vk; Wed, 22 Jul 2015 10:09:24 +1000 Date: Wed, 22 Jul 2015 10:09:23 +1000 From: Dave Chinner To: Mike Snitzer Cc: Eric Sandeen , axboe@kernel.dk, hch@lst.de, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150722000923.GB7943@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150721174753.GA8563@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437523772 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 21, 2015 at 01:47:53PM -0400, Mike Snitzer wrote: > On Tue, Jul 21 2015 at 11:34am -0400, Eric Sandeen wrote: > > On 7/20/15 5:36 PM, Dave Chinner wrote: > > The issue we had discussed previously is that there is no agreement > > across block devices about whether ENOSPC is a permanent or temporary > > condition. Asking the admin to tune the fs to each block device's > > behavior sucks, IMHO. > > It does suck, but it beats the alternative of XFS continuing to do > nothing about the problem. Just a comment on that: doing nothing is better than doing the wrong thing and being stuck with it forever. :) > Disucssing more with Vivek, might be that XFS would be best served to > model what dm-thinp has provided with its 'no_space_timeout'. It > defaults to queueing IO for 60 seconds, once the timeout expires the > queued IOs getted errored. If set to 0 dm-thinp will queue IO > indefinitely. Yes, that's exactly what I proposed in the thread I referenced in my previous email, and what got stuck on the bikeshed wall because of these concerns about knob twiddling: http://oss.sgi.com/archives/xfs/2015-02/msg00346.html | e.g. if we need configurable error handling, it needs to be | configurable for different error types, and it needs to be | configurable on a per-mount basis. And it needs to be configurable | at runtime, not just at mount time. That kind of leads to using | sysfs for this. e.g. for each error type we ned to handle different | behaviour for: | | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/type | [transient] permanent | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/perm_timeout_seconds | 300 | $ cat | /sys/fs/xfs/vda/meta_write_errors/enospc/perm_max_retry_attempts | 50 | $ cat | /sys/fs/xfs/vda/meta_write_errors/enospc/transient_fail_at_umount | 1 I've rebased this patchset, and I'm cleaning it up now, so in a few days I'll have something for review, likely for the 4.3 merge window.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jul 21 20:01:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0B99129E08 for ; Tue, 21 Jul 2015 20:01:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E677430404E for ; Tue, 21 Jul 2015 18:01:08 -0700 (PDT) X-ASG-Debug-ID: 1437526866-04cb6c02c509980001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id XeO16Xo63dxwH9n8 for ; Tue, 21 Jul 2015 18:01:06 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2C1BwB36q5VPD0gLHlcGYJ8VGmCVaZPDAEBAQEBAQaUWoV7AgIBAQKBQE0BAQEBAQEHAQEBAUABP4QkAQEEOhwjEAgDGAklDwUlAwcaE4gtDswhAQEIAiAZhgWELIECgmuBOBEBUQeDF4EUBZRThHWHNJkPgQmBW4FQLDEBgQMJFwSBIwEBAQ Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 22 Jul 2015 10:30:57 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHiP2-0003PY-QQ; Wed, 22 Jul 2015 11:00:56 +1000 Date: Wed, 22 Jul 2015 11:00:56 +1000 From: Dave Chinner To: Mike Snitzer Cc: Eric Sandeen , axboe@kernel.dk, hch@lst.de, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150722010056.GC7943@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150722000923.GB7943@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437526866 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20958 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 22, 2015 at 10:09:23AM +1000, Dave Chinner wrote: > On Tue, Jul 21, 2015 at 01:47:53PM -0400, Mike Snitzer wrote: > > On Tue, Jul 21 2015 at 11:34am -0400, Eric Sandeen wrote: > > > On 7/20/15 5:36 PM, Dave Chinner wrote: > > > The issue we had discussed previously is that there is no agreement > > > across block devices about whether ENOSPC is a permanent or temporary > > > condition. Asking the admin to tune the fs to each block device's > > > behavior sucks, IMHO. > > > > It does suck, but it beats the alternative of XFS continuing to do > > nothing about the problem. > > Just a comment on that: doing nothing is better than doing the wrong > thing and being stuck with it forever. :) > > > Disucssing more with Vivek, might be that XFS would be best served to > > model what dm-thinp has provided with its 'no_space_timeout'. It > > defaults to queueing IO for 60 seconds, once the timeout expires the > > queued IOs getted errored. If set to 0 dm-thinp will queue IO > > indefinitely. > > Yes, that's exactly what I proposed in the thread I referenced in > my previous email, and what got stuck on the bikeshed wall because > of these concerns about knob twiddling: > > http://oss.sgi.com/archives/xfs/2015-02/msg00346.html > > | e.g. if we need configurable error handling, it needs to be > | configurable for different error types, and it needs to be > | configurable on a per-mount basis. And it needs to be configurable > | at runtime, not just at mount time. That kind of leads to using > | sysfs for this. e.g. for each error type we ned to handle different > | behaviour for: > | > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/type > | [transient] permanent > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/perm_timeout_seconds > | 300 > | $ cat > | /sys/fs/xfs/vda/meta_write_errors/enospc/perm_max_retry_attempts > | 50 > | $ cat > | /sys/fs/xfs/vda/meta_write_errors/enospc/transient_fail_at_umount > | 1 > > I've rebased this patchset, and I'm cleaning it up now, so in a few > days I'll have something for review, likely for the 4.3 merge > window.... Just thinking a bit more on how to make this simpler to configure, is there a simple way for the filesystem to determine the current config of the dm thinp volume? i.e. if the dm-thinp volume is configured to error out immediately on enospc, then XFS should default to doing the same thing. having XFS be able to grab this status at mount time and change the default ENOSPC error config from transient to permanent on such dm-thinp volumes would go a long way to making these configs Just Do The Right Thing on block dev enospc errors... e.g. if dm-thinp is configured to queue for 60s and then fail on ENOSPC, we want XFS to fail immediately on ENOSPC in metadata IO. If dm-thinp is configured to ENOSPC instantly (i.e. no queueing) then we want XFS to retry and use it's default retry maximums before failing permanently. Cheers, Dave. -- Dave Chinner david@fromorbit.com From msnitzer@redhat.com Tue Jul 21 20:40:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 04BE17F82 for ; Tue, 21 Jul 2015 20:40:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 73D34AC00A for ; Tue, 21 Jul 2015 18:40:33 -0700 (PDT) X-ASG-Debug-ID: 1437529231-04cb6c02c50a400001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Xt0uea7UXeEBPWHb (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 21 Jul 2015 18:40:32 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 33C3AA381D; Wed, 22 Jul 2015 01:40:31 +0000 (UTC) Received: from localhost (dhcp-25-149.bos.redhat.com [10.18.25.149]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6M1eUv0022465 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Tue, 21 Jul 2015 21:40:30 -0400 Date: Tue, 21 Jul 2015 21:40:29 -0400 From: Mike Snitzer To: Dave Chinner Cc: Eric Sandeen , axboe@kernel.dk, hch@lst.de, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150722014029.GA10628@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150722010056.GC7943@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437529232 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21 2015 at 9:00pm -0400, Dave Chinner wrote: > On Wed, Jul 22, 2015 at 10:09:23AM +1000, Dave Chinner wrote: > > On Tue, Jul 21, 2015 at 01:47:53PM -0400, Mike Snitzer wrote: > > > On Tue, Jul 21 2015 at 11:34am -0400, Eric Sandeen wrote: > > > > On 7/20/15 5:36 PM, Dave Chinner wrote: > > > > The issue we had discussed previously is that there is no agreement > > > > across block devices about whether ENOSPC is a permanent or temporary > > > > condition. Asking the admin to tune the fs to each block device's > > > > behavior sucks, IMHO. > > > > > > It does suck, but it beats the alternative of XFS continuing to do > > > nothing about the problem. > > > > Just a comment on that: doing nothing is better than doing the wrong > > thing and being stuck with it forever. :) > > > > > Disucssing more with Vivek, might be that XFS would be best served to > > > model what dm-thinp has provided with its 'no_space_timeout'. It > > > defaults to queueing IO for 60 seconds, once the timeout expires the > > > queued IOs getted errored. If set to 0 dm-thinp will queue IO > > > indefinitely. > > > > Yes, that's exactly what I proposed in the thread I referenced in > > my previous email, and what got stuck on the bikeshed wall because > > of these concerns about knob twiddling: > > > > http://oss.sgi.com/archives/xfs/2015-02/msg00346.html > > > > | e.g. if we need configurable error handling, it needs to be > > | configurable for different error types, and it needs to be > > | configurable on a per-mount basis. And it needs to be configurable > > | at runtime, not just at mount time. That kind of leads to using > > | sysfs for this. e.g. for each error type we ned to handle different > > | behaviour for: > > | > > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/type > > | [transient] permanent > > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/perm_timeout_seconds > > | 300 > > | $ cat > > | /sys/fs/xfs/vda/meta_write_errors/enospc/perm_max_retry_attempts > > | 50 > > | $ cat > > | /sys/fs/xfs/vda/meta_write_errors/enospc/transient_fail_at_umount > > | 1 > > > > I've rebased this patchset, and I'm cleaning it up now, so in a few > > days I'll have something for review, likely for the 4.3 merge > > window.... > > Just thinking a bit more on how to make this simpler to configure, > is there a simple way for the filesystem to determine the current > config of the dm thinp volume? i.e. if the dm-thinp volume is > configured to error out immediately on enospc, then XFS should > default to doing the same thing. having XFS be able to grab this > status at mount time and change the default ENOSPC error config from > transient to permanent on such dm-thinp volumes would go a long way > to making these configs Just Do The Right Thing on block dev enospc > errors... > > e.g. if dm-thinp is configured to queue for 60s and then fail on > ENOSPC, we want XFS to fail immediately on ENOSPC in metadata IO. If > dm-thinp is configured to ENOSPC instantly (i.e. no queueing) then > we want XFS to retry and use it's default retry maximums before > failing permanently. Yes, that'd be nice. But there isn't a way to easily get the DM thinp device's config from within the kernel (unless XFS wants to get into the business of issuing ioctls to DM devices.. unlikely). I could be persuaded to expose a per-device sysfs file to get the status (would avoid need for ioctl), e.g.: # cat /sys/block/dm-5/dm/status (but that doesn't _really_ help in-kernel access, awkward for filesystem code to be opening sysfs files!) SO userspace (mkfs.xfs) could easily check the thinp device's setup using 'dmsetup status ' (output will either contain 'queue_if_no_space' or 'error_if_no_space'). The DM thinp 'no_space_timeout' (applicable if queue_if_no_space) is a thinp global accessed using a module param: # cat /sys/module/dm_thin_pool/parameters/no_space_timeout 60 I'm open to considering alternative interfaces for getting you the info you need. I just don't have a great sense for what mechanism you'd like to use. Do we invent a new block device operations table method that sets values in a 'struct no_space_strategy' passed in to the blockdevice? From david@fromorbit.com Tue Jul 21 21:38:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 634D77FA1 for ; Tue, 21 Jul 2015 21:38:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2514130404E for ; Tue, 21 Jul 2015 19:38:15 -0700 (PDT) X-ASG-Debug-ID: 1437532692-04bdf002320b870001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id rI1iRuuJeFKuTHc7 for ; Tue, 21 Jul 2015 19:38:13 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DBBwDrAK9VPD0gLHlcGYJ8VC08glWmUgwBAQEBAQEGlFqFewICAQECgT9NAQEBAQEBBwEBAQFAAT+EIwEBAQMBOhwjBQsIAxgJJQ8FJQMHGhOIJgcOzBUBAQgCIBmGBYQsgQKCa4E4EQFRB4MXgRQFkVuCeIR1hzSZD4EJgVuBUCwxAYEDCRcEgSMBAQE Received: from ppp121-44-32-61.lns20.syd4.internode.on.net (HELO dastard) ([121.44.32.61]) by ipmail05.adl6.internode.on.net with ESMTP; 22 Jul 2015 12:07:12 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZHjuC-0003Zi-1K; Wed, 22 Jul 2015 12:37:12 +1000 Date: Wed, 22 Jul 2015 12:37:12 +1000 From: Dave Chinner To: Mike Snitzer Cc: Eric Sandeen , axboe@kernel.dk, hch@lst.de, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, dm-devel@redhat.com, xfs@oss.sgi.com, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150722023711.GD7943@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150722014029.GA10628@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1437532692 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20960 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 21, 2015 at 09:40:29PM -0400, Mike Snitzer wrote: > On Tue, Jul 21 2015 at 9:00pm -0400, > Dave Chinner wrote: > > > On Wed, Jul 22, 2015 at 10:09:23AM +1000, Dave Chinner wrote: > > > On Tue, Jul 21, 2015 at 01:47:53PM -0400, Mike Snitzer wrote: > > > > On Tue, Jul 21 2015 at 11:34am -0400, Eric Sandeen wrote: > > > > > On 7/20/15 5:36 PM, Dave Chinner wrote: > > > > > The issue we had discussed previously is that there is no agreement > > > > > across block devices about whether ENOSPC is a permanent or temporary > > > > > condition. Asking the admin to tune the fs to each block device's > > > > > behavior sucks, IMHO. > > > > > > > > It does suck, but it beats the alternative of XFS continuing to do > > > > nothing about the problem. > > > > > > Just a comment on that: doing nothing is better than doing the wrong > > > thing and being stuck with it forever. :) > > > > > > > Disucssing more with Vivek, might be that XFS would be best served to > > > > model what dm-thinp has provided with its 'no_space_timeout'. It > > > > defaults to queueing IO for 60 seconds, once the timeout expires the > > > > queued IOs getted errored. If set to 0 dm-thinp will queue IO > > > > indefinitely. > > > > > > Yes, that's exactly what I proposed in the thread I referenced in > > > my previous email, and what got stuck on the bikeshed wall because > > > of these concerns about knob twiddling: > > > > > > http://oss.sgi.com/archives/xfs/2015-02/msg00346.html > > > > > > | e.g. if we need configurable error handling, it needs to be > > > | configurable for different error types, and it needs to be > > > | configurable on a per-mount basis. And it needs to be configurable > > > | at runtime, not just at mount time. That kind of leads to using > > > | sysfs for this. e.g. for each error type we ned to handle different > > > | behaviour for: > > > | > > > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/type > > > | [transient] permanent > > > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/perm_timeout_seconds > > > | 300 > > > | $ cat > > > | /sys/fs/xfs/vda/meta_write_errors/enospc/perm_max_retry_attempts > > > | 50 > > > | $ cat > > > | /sys/fs/xfs/vda/meta_write_errors/enospc/transient_fail_at_umount > > > | 1 > > > > > > I've rebased this patchset, and I'm cleaning it up now, so in a few > > > days I'll have something for review, likely for the 4.3 merge > > > window.... > > > > Just thinking a bit more on how to make this simpler to configure, > > is there a simple way for the filesystem to determine the current > > config of the dm thinp volume? i.e. if the dm-thinp volume is > > configured to error out immediately on enospc, then XFS should > > default to doing the same thing. having XFS be able to grab this > > status at mount time and change the default ENOSPC error config from > > transient to permanent on such dm-thinp volumes would go a long way > > to making these configs Just Do The Right Thing on block dev enospc > > errors... > > > > e.g. if dm-thinp is configured to queue for 60s and then fail on > > ENOSPC, we want XFS to fail immediately on ENOSPC in metadata IO. If > > dm-thinp is configured to ENOSPC instantly (i.e. no queueing) then > > we want XFS to retry and use it's default retry maximums before > > failing permanently. > > Yes, that'd be nice. But there isn't a way to easily get the DM thinp > device's config from within the kernel (unless XFS wants to get into the > business of issuing ioctls to DM devices.. unlikely). Not really. > I could be > persuaded to expose a per-device sysfs file to get the status (would > avoid need for ioctl), e.g.: > # cat /sys/block/dm-5/dm/status > (but that doesn't _really_ help in-kernel access, awkward for filesystem > code to be opening sysfs files!) No, not going that way. We have direct access through the bdev we opened, so that's the communications channel we'd need to use. > SO userspace (mkfs.xfs) could easily check the thinp device's setup > using 'dmsetup status ' (output will either contain > 'queue_if_no_space' or 'error_if_no_space'). The DM thinp > 'no_space_timeout' (applicable if queue_if_no_space) is a thinp global > accessed using a module param: > # cat /sys/module/dm_thin_pool/parameters/no_space_timeout > 60 Mkfs is not the right interface - users can change dm-thinp behaviour long after the filesystem was created and so the XFS config needs to be configurable, too. Further, I really don't want to have to add anything to the on-disk format to support error configuration because, well, that drives the level of complexity up a couple or orders of magnitude (mkfs, repair, metadump, db, etc all need to support it), especially when it can be driven easily from userspace after mount with far less constraints and support burden. > I'm open to considering alternative interfaces for getting you the info > you need. I just don't have a great sense for what mechanism you'd like > to use. Do we invent a new block device operations table method that > sets values in a 'struct no_space_strategy' passed in to the > blockdevice? It's long been frowned on having the filesystems dig into block device structures. We have lots of wrapper functions for getting information from or performing operations on block devices. (e.g. bdev_read_only(), bdev_get_queue(), blkdev_issue_flush(), blkdev_issue_zeroout(), etc) and so I think this is the pattern we'd need to follow. If we do that - bdev_get_nospace_strategy() - then how that information gets to the filesystem is completely opaque at the fs level, and the block layer can implement it in whatever way is considered sane... And, realistically, all we really need returned is a enum to tell us how the bdev behaves on enospc: - bdev fails fast, (i.e. immediate ENOSPC) - bdev fails slow, (i.e. queue for some time, then ENOSPC) - bdev never fails (i.e. queue forever) - bdev doesn't support this (i.e. EOPNOTSUPP) Cheers, Dave. -- Dave Chinner david@fromorbit.com From akinkeng@yahoo.de Tue Jul 21 21:58:03 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.7 required=5.0 tests=DATE_IN_PAST_06_12, FREEMAIL_FROM autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CFD707FA2 for ; Tue, 21 Jul 2015 21:58:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 65A48AC00C for ; Tue, 21 Jul 2015 19:58:03 -0700 (PDT) X-ASG-Debug-ID: 1437533878-04cb6c02c60bd30001-NocioJ Received: from hangzhou.388872.com (hangzhou.388872.com [109.169.51.15]) by cuda.sgi.com with ESMTP id FTnYaqdL48ZpLt0W for ; Tue, 21 Jul 2015 19:58:00 -0700 (PDT) X-Barracuda-Envelope-From: akinkeng@yahoo.de X-Barracuda-Apparent-Source-IP: 109.169.51.15 To: xfs@oss.sgi.com Subject: need your reply Message-ID: <7c7888ae0fa228b33ecc8d0320997fff@pepperfry.com> X-ASG-Orig-Subj: need your reply Date: Tue, 21 Jul 2015 19:39:36 +0200 From: "Joe" Reply-To: yuerhon@aliyun.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 690 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: hangzhou.388872.com[109.169.51.15] X-Barracuda-Start-Time: 1437533879 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.11 X-Barracuda-Spam-Status: No, SCORE=1.11 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DATE_IN_PAST_06_12, DATE_IN_PAST_06_12_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20960 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 DATE_IN_PAST_06_12 Date: is 6 to 12 hours before Received: date 1.10 DATE_IN_PAST_06_12_2 DATE_IN_PAST_06_12_2 Hello, You are receiving this email because we wish you to use our target email marketing solutions. Our email marketing can generate tons of new leads to a number of businesses. We would like to help your business reach the next level. and increase your business sales 2-4 times than now. Please contact us if you would require more information. Looking forward to your response. Thanks, Joe Email: fionlon@sina.com From spjnrsebk@bzoy.com Wed Jul 22 00:50:50 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.2 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE, MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 31A6729E09 for ; Wed, 22 Jul 2015 00:50:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 001D9304032 for ; Tue, 21 Jul 2015 22:50:46 -0700 (PDT) X-ASG-Debug-ID: 1437544242-04bdf002300eb60001-NocioJ Received: from bzoy.com (215.148.73.124.broad.dynamic.hf.ah.cndata.com [124.73.148.215]) by cuda.sgi.com with ESMTP id h80kUrZyavDPPhuO for ; Tue, 21 Jul 2015 22:50:44 -0700 (PDT) X-Barracuda-Envelope-From: spjnrsebk@bzoy.com X-Barracuda-Apparent-Source-IP: 124.73.148.215 Received: from SKY-20150201SFT ([127.0.0.1]) by localhost via TCP with ESMTPA; Wed, 22 Jul 2015 13:50:19 +0800 MIME-Version: 1.0 From: "mobile boat hoist" Sender: "mobile boat hoist" To: xfs@oss.sgi.com Reply-To: "mobile boat hoist" Date: 22 Jul 2015 13:50:19 +0800 Subject: =?utf-8?B?UmU6IG1vYmlsZSBib2F0IGhvaXN0IGZhY3RvcnkgaW4gQ2hpbmE=?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?UmU6IG1vYmlsZSBib2F0IGhvaXN0IGZhY3RvcnkgaW4gQ2hpbmE=?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: 215.148.73.124.broad.dynamic.hf.ah.cndata.com[124.73.148.215] X-Barracuda-Start-Time: 1437544243 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20964 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150722055046.6C715A4217F@cuda.sgi.com> PGh0bWw+PGJvZHk+PFA+RGVhciBTaXIsPC9QPg0KPFA+V2UgZ2V0IHRvIGtub3cgeW91ciBj b21wYW55IGlzIHNwZWNpYWxpemVkIGluIHRoZSBmaWVsZCBvZiBjcmFuZSBlcXVpcG1lbnRz LjwvUD4NCjxQPk91ciBjb21wYW55IGlzIGEgbWFudWZhY3R1cmVyIG9mIGNyYW5lIGVxdWlw bWVudHMgaW4gQ2hpbmEuIDwvUD4NCjxQPldlIGhhdmUgYWR2YW5jZWQgZmFicmljYXRpb24g ZXF1aXBtZW50cyBsaWtlIHJvYm90cyBhbmQgbG93ZXIgY29zdCBvZiBtYW5wb3dlci4gPC9Q Pg0KPFA+QWxzbywgb3VyIGxvY2F0aW9uIGlzIG9uZSBjb25jZW50cmF0ZWQgYXJlYSBmb3Ig T0VNLCBpbiBoZXJlIHlvdSB3aWxsIGZpbmQgdGhlIHdvcmxkIE9FTSBjb21wYW55LS0tRk9Y Q09OTixhbmQgT0VNIGZhY3RvcnkgZm9yIENhdGVycGlsbGFyLjwvUD4NCjxQPkhvcGUgb3Vy IGNvbXBhbnkgY2FuIGJlIHlvdXIgT0VNIGZhY3RvcnkgaW4gQ2hpbmEuPC9QPg0KPFA+TG9v a2luZyBmb3J3YXJkIHRvIGNvb3BlcmF0ZSB3aXRoIHlvdS48L1A+DQo8UD5SZWdhcmRzPC9Q PjwvYm9keT48L2h0bWw+ From okorder@sendmail.okorder.com Wed Jul 22 03:45:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.4 required=5.0 tests=HTML_MESSAGE, HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY,MPART_ALT_DIFF autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2345D7FA9 for ; Wed, 22 Jul 2015 03:45:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B365AAC002 for ; Wed, 22 Jul 2015 01:44:58 -0700 (PDT) X-ASG-Debug-ID: 1437554694-04bdf00231124c0001-NocioJ Received: from smtp40225.rspmail-apn4.com (smtp40225.rspmail-apn4.com [43.243.164.225]) by cuda.sgi.com with ESMTP id ONAPP4xf4jlp31zk for ; Wed, 22 Jul 2015 01:44:55 -0700 (PDT) X-Barracuda-Envelope-From: okorder@sendmail.okorder.com X-Barracuda-Apparent-Source-IP: 43.243.164.225 Received: from WINDOWS-WI1AP1I (smtp40002.rspmail-apn1.com [43.243.164.2]) by smtp40225.rspmail-apn4.com (Postfix) with ESMTPA id 71F052A289A for ; Wed, 22 Jul 2015 16:47:05 +0800 (HKT) From: "Jason Ding" To: "xfs@oss.sgi.com" Reply-To: erqipeixun2@okorder.com Date: Wed, 22 Jul 2015 16:44:32 +0800 Subject: =?big5?B?UmU6SGlnaCBRdWFsaXR5IFNvbGFyIFBhbmVsIGZyb20gQ05CTSChXUEgRm9ydHVuZSBHbG9iZSA1MDAgQ29tcGFueaFe?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?big5?B?UmU6SGlnaCBRdWFsaXR5IFNvbGFyIFBhbmVsIGZyb20gQ05CTSChXUEgRm9ydHVuZSBHbG9iZSA1MDAgQ29tcGFueaFe?= Content-Type: multipart/alternative; boundary="_=aspNetEmail=_2641566520014675b19a6814bcb1b48c" X-Mailer: aspNetEmail ver 3.7.0.19 X-Spread-CampaignId: 120316 X-Spread-SubscriberId: 178595338 X-Spread-SpreaderId: 34191 X-Spread-Engine-Build: 4.0.5445.21308 List-Unsubscribe: , Message-ID: X-Barracuda-Connect: smtp40225.rspmail-apn4.com[43.243.164.225] X-Barracuda-Start-Time: 1437554694 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.40 X-Barracuda-Spam-Status: No, SCORE=1.40 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, HTML_MIME_NO_HTML_TAG, MIME_HTML_ONLY, MIME_HTML_ONLY_MULTI, MPART_ALT_DIFF, SARE_SXLIFE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20966 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 SARE_SXLIFE BODY: Talks about your sex life 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.14 MPART_ALT_DIFF BODY: HTML and text parts are different 1.05 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag 0.00 MIME_HTML_ONLY_MULTI Multipart message only has text/html MIME parts --_=aspNetEmail=_2641566520014675b19a6814bcb1b48c Content-Type: text/html; charset="big5" Content-Transfer-Encoding: quoted-printable =0D=0A

Add=26n= bsp;sales=40sendmail=2Eokorder=2Ecom=26nbsp;to your Address Book= to ensure delivery to your inbox=2E Send message to erqipeixun2=40okorder= =2Ecom
=0A
=0A
=0ADear purchase manager,

=0A

Sorry to bother you, sir=2E From your excellent designed = website, we get information that your company might need solar products=2E= I hope to get a chance to work with yours=2E

=0A

Our group CNBM is a state own enterprise and a Fortune 500 company with over = 300 factories and subsidiaries around the world=2E We ent= er into solar PV industry since 2005 our annual capacity is 500MW solar p= anel and 500MW solar cell=2E

=0A

We are focus on:

=0A

S= olar products (solar panels=26amp; cells=26amp; off-grid system =26amp; i= nverters)

=0A

W= ITH SUPERIOR QUALITY, COMPETITIVE PRICE, EXCELLENT SERVICE=2E OUR PRODUCT= S HAVE BEEN WARMLY WELCOMED BY OVERSEAS CLIENTS AND WISH TO TRY OUR BEST = TO IMPROVE THE SATISFACTION OF OUR CLIENTS=2E

= =0A

If you are interested in ou= r items and wish to establish a new business with us please contact us an= d we will reply you with 24 hours=2E If you are no need of purchasing goo= ds, I hope to become your friend and hope to be your partner in the futur= e=2E

=0A

If you are n= ot responsible for this matter, please kindly transmit this email to purc= hase department=2E

=0Ayours sincerely
=0A
=0A
=0A

Jas= on Ding
=0A
=0A
=0A=0AAddress: No=2E2, Zizhuyuan South Road, Haidian Dist= rict, Beijing, China
=0APost Code:100044
=0ATel:010-59042273=0AFax:010-59042273
=0AEmail
=A1Gerqipeixun2=40okorder=2Ecom
=0A
=0A=0AYou received this em= ail because you are a valued, registered member of OKorder=2Ecom, with wh= om we share the latest offerings and business leads=2E We promise never t= o share, trade, sell, deliver, reveal, publicize, or market your email in= any way=2E Should you refuse to receive this service, click=26nbsp;unsubscribe=26nbsp;at any time=2E
=0A
=0A
This email was sent from a= notification-only address that cannot accept incoming email=2E PLEASE DO= NOT REPLY to=26nbsp;this message=2E If you have any questions or concerns,=26nbsp= ;please=26nbsp;Contact= Us=26raquo;
=0A

=0A
=0D=0A=0D=0A --_=aspNetEmail=_2641566520014675b19a6814bcb1b48c-- From tonytkdk@gmail.com Wed Jul 22 03:54:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AFA0D7FA9 for ; Wed, 22 Jul 2015 03:54:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 83A78304048 for ; Wed, 22 Jul 2015 01:54:17 -0700 (PDT) X-ASG-Debug-ID: 1437555251-04cb6c02c813e50001-NocioJ Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by cuda.sgi.com with ESMTP id sOpxcrDXeDplqeIa (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 Jul 2015 01:54:12 -0700 (PDT) X-Barracuda-Envelope-From: tonytkdk@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.169 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.169] Received: by wicgb10 with SMTP id gb10so88032128wic.1 for ; Wed, 22 Jul 2015 01:54:11 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.169] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.169] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=vOQgAsD9bJBoPHornxsqMRdDP3LJEV4oZje0hQlt0zQ=; b=ALjpz+10FrW7m3UJJvHZQiuGaqndl0htCn+GQ68A7bUVaaG+3g3c+33KdPFPRug/36 sYKU83a32kuZRaMaLhjyXtR3vmyASbBXgRNvSMKzJM3Dz/DHnl45o7NTM4GVui/RwkBK ebj0G+RFM8pzzA5MlrZzQK8LYnyB5efyY5oRb4WpUZI7KZPLF0A395q8wUzgX1nBu/fR IIhSuhzIT5mSSaFSw3xiMLMoga9Swq9NO9CwYVvc/13LZPB6zJ2VKqCY6ESFNTCwZ3Im eXqUElXdQiu5rUwMZ/YJOEJpJc+NY25IiwLbECyvGfG/jOSLf6QEV1gVr54Ve1yxG4AG Si/g== MIME-Version: 1.0 X-Received: by 10.194.23.225 with SMTP id p1mr3027186wjf.155.1437555251461; Wed, 22 Jul 2015 01:54:11 -0700 (PDT) Received: by 10.194.109.37 with HTTP; Wed, 22 Jul 2015 01:54:11 -0700 (PDT) In-Reply-To: <20150720151256.GA17816@bfoster.bfoster> References: <20150709183255.GG63282@bfoster.bfoster> <20150713125214.GA50787@bfoster.bfoster> <20150713170158.GB50787@bfoster.bfoster> <20150720114648.GB53450@bfoster.bfoster> <20150720151256.GA17816@bfoster.bfoster> Date: Wed, 22 Jul 2015 16:54:11 +0800 Message-ID: Subject: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 From: Kuo Hugo X-ASG-Orig-Subj: Re: Data can't be wrote to XFS RIP [] xfs_dir2_sf_get_parent_ino+0xa/0x20 To: Brian Foster Cc: Hugo Kuo , Eric Sandeen , Darrell Bishop , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7b4724e21bc373051b72eab9 X-Barracuda-Connect: mail-wi0-f169.google.com[209.85.212.169] X-Barracuda-Start-Time: 1437555252 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.13 X-Barracuda-Spam-Status: No, SCORE=0.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, SUBJECT_NOVOWEL X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20966 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.13 SUBJECT_NOVOWEL Subject: has long non-vowel letter sequence -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b4724e21bc373051b72eab9 Content-Type: text/plain; charset=UTF-8 Hi Brain, >The original stacktrace shows the crash in a readdir request. I'm sure >there are multiple things going on here (and there are a couple rename >traces in the vmcore sitting on locks), of course, but where does the >information about the rename come from? I tracked source code of the application. It moves data to a quarantined area(another folder on same disk) under some conditions. In the bug report, it indicates a condition that DELETE(create empty file in a directory) object + list the directory will cause data MOVE (os.rename) to quarantined area(another folder). The os.rename function call is the only function of the application to touch quarantined folder. >I'm not quite following here because I don't have enough context about >what the application server is doing. So far, it sounds like we somehow >have multiple threads competing to rename the same file..? Is there >anything else in this directory at the time this sequence executes >(e.g., a file with object data that also gets quarantined)? The previous behavior (a bug in the application) should not trigger Kernel panic. Yes, there's multiple threads competing to DELETE(create a empty file) in the same directory also move the existing one to the quarantined area. I think this is the root cause of kernel panic. The scenario is 10 application workers raise 10 thread to do same thing in the same moment. >Ideally, we'd ultimately like to translate this into a sequence of >operations as seen by the fs that hopefully trigger the problem. We >might have to start by reproducing through the application server. >Looking back at that bug report, it sounds like a 'DELETE' is a >high-level server operation that can consist of multiple sub-operations >at the filesystem level (e.g., list, conditional rename if *.ts file >exists, etc.). Do you have enough information through any of the above >to try and run something against Swift that might explicitly reproduce >the problem? For example, have one thread that creates and recreates the >same object repeatedly and many more competing threads that try to >remove (or whatever results in the quarantine) it? Note that I'm just >grasping at straws here, you might be able to design a more accurate >reproducer based on what it looks like is happening within Swift. We observe this issue on production cluster. It's hard to have a free gear with 100% same HW to test it currently. I'll try to figure out an approach to reproduce it. I'll update this mail thread if I can make it. Thanks // Hugo --047d7b4724e21bc373051b72eab9 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
= Hi Brain,

>The original stacktrace shows the crash in a readdir request. I= 9;m sure
= >there are multiple things going on here (and there are a couple rename<= /span>
>trace= s in the vmcore sitting on locks), of course, but where does the
>information abo= ut the rename come from?

I tracked source code of the application. It moves = data to a quarantined area(another folder on same disk) under some conditio= ns. In the bug report, it indicates a condition that DELETE(create empty fi= le in a directory) object + list the directory will cause data MOVE (os.ren= ame) to quarantined area(another folder). The os.rename function call is th= e only function of the application to touch quarantined folder.=C2=A0

>I'= m not quite following here because I don't have enough context about
>what th= e application server is doing. So far, it sounds like we somehow
>have multiple t= hreads competing to rename the same file..? Is there
>anything else in this direc= tory at the time this sequence executes
= >(e.g., a file with object data that also= gets quarantined)?

The previous beh= avior (a bug in the application) should not trigger Kernel panic. Yes, ther= e's multiple threads competing to DELETE(create a empty file) in the sa= me directory also move the existing one to the quarantined area. I think th= is is the root cause of kernel panic. The scenario is 10 application worker= s raise 10 thread to do same thing in the same moment.=C2=A0

>Ideally, we'd ul= timately like to translate this into a sequence of
>operations as seen by the fs = that hopefully trigger the problem. We
<= span style=3D"font-size:14px">>might have to start by reproducing throug= h the application server.

>Looking back at that bug report, it sounds like a '= ;DELETE' is a
>high-level server operation that can consist of multiple sub-o= perations
>at the filesystem level (e.g., list, conditional rename if *.ts file
>exists= , etc.). Do you have enough information through any of the above
>to try and run = something against Swift that might explicitly reproduce
>the problem? For example= , have one thread that creates and recreates the
>same object repeatedly and many= more competing threads that try to
>remove (or whatever results in the quarantin= e) it? Note that I'm just

>grasping at straws here, you might be able to desi= gn a more accurate
>reproducer based on what it looks like is happening within Sw= ift.

We observe this issue on producti= on cluster. It's hard to have a free gear with 100% same HW to test it = currently.=C2=A0
I'll try to figure out an approach to reproduce it. I'l= l update this mail thread if I can make it.=C2=A0

Thanks // Hugo

--047d7b4724e21bc373051b72eab9-- From buludevytipa@korea.com Wed Jul 22 04:55:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=HTML_MESSAGE,MIME_HTML_MOSTLY, MPART_ALT_DIFF autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 404C37FAA for ; Wed, 22 Jul 2015 04:55:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 16F3A8F804B for ; Wed, 22 Jul 2015 02:55:31 -0700 (PDT) X-ASG-Debug-ID: 1437558928-04cb6c02c515620001-NocioJ Received: from r-smtp6.korea.com ([5.35.108.25]) by cuda.sgi.com with ESMTP id XF0GaKAKXC6AW6WG for ; Wed, 22 Jul 2015 02:55:29 -0700 (PDT) X-Barracuda-Envelope-From: buludevytipa@korea.com X-Barracuda-Apparent-Source-IP: 5.35.108.25 Message-ID: From: "=?utf-8?B?VGhlIGNvbnRyYWN0IHN5c3RlbQ==?=" To: Subject: =?utf-8?B?bWVzWzg5MTU3XTrQvtCx0YPRh9C10L3QuNC1IDQ00KTQlyDQsiDQnNC+0YHQutCy0LU=?= Date: Wed, 22 Jul 2015 12:55:30 +0300 X-ASG-Orig-Subj: =?utf-8?B?bWVzWzg5MTU3XTrQvtCx0YPRh9C10L3QuNC1IDQ00KTQlyDQsiDQnNC+0YHQutCy0LU=?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0045_01D0C47D.B046A400" X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Mailer: Microsoft Windows Live Mail 15.4.3538.513 X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3538.513 X-Barracuda-Connect: UNKNOWN[5.35.108.25] X-Barracuda-Start-Time: 1437558928 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.81 X-Barracuda-Spam-Status: No, SCORE=1.81 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE, MIME_HTML_MOSTLY, MPART_ALT_DIFF, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20967 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_HTML_MOSTLY BODY: Multipart message mostly text/html MIME 0.00 HTML_MESSAGE BODY: HTML included in message 0.14 MPART_ALT_DIFF BODY: HTML and text parts are different 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 MIME. ------=_NextPart_000_0045_01D0C47D.B046A400 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable ------=_NextPart_000_0045_01D0C47D.B046A400 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable
=D0=90=D0=BA=D0=BA=D1=80=D0=B5=D0=B4=D0=B8=D1=82=D0=BE=D0=B2=D0=B0= =D0=BD=D0=BD=D1=8B=D0=B9 =D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D1=8B=D0=B9 = =D1=86=D0=B5=D0=BD=D1=82=D1=80 (=D0=B3. = =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B0)=20 =D0=BF=D1=80=D0=B8=D0=B3=D0=BB=D0=B0=D1=88=D0=B0=D0=B5=D1=82 = =D0=BD=D0=B0 = =D0=BE=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5:
 
=D0=A0=D0=95=D0=90=D0=9B=D0=98=D0=97=D0=90=D0=A6=D0= =98=D0=AF =D0=A4=D0=97-44.=20 =D0=9A=D0=9E=D0=9D=D0=A2=D0=A0=D0=90=D0=9A=D0=A2=D0=9D=D0=90=D0=AF = =D0=A1=D0=98=D0=A1=D0=A2=D0=95=D0=9C=D0=90.
=D0=9D=D0=9E=D0=92=D0=AB=D0=95 = =D0=98=D0=97=D0=9C=D0=95=D0=9D=D0=95=D0=9D=D0=98=D0=AF=20 =D0=94=D0=9B=D0=AF = =D0=97=D0=90=D0=9A=D0=90=D0=97=D0=A7=D0=98=D0=9A=D0=9E=D0=92 =D0=98 = =D0=9F=D0=9E=D0=A1=D0=A2=D0=90=D0=92=D0=A9=D0=98=D0=9A=D0=9E=D0=92.
=D0=9F=D0=A0=D0=90=D0=9A=D0=A2=D0=98=D0=9A=D0=90 = =D0=9A=D0=9E=D0=9D=D0=A2=D0=A0=D0=9E=D0=9B=D0=AF=20 =D0=A4=D0=90=D0=A1.
=D0=9E=D0=B1=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5 =D1=81 = =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B5=D0=BC = =D0=BF=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D1=82=D0=B5=D0=BB=D0= =B5=D0=B9 =D0=A4=D0=90=D0=A1=20 =D0=A0=D0=BE=D1=81=D1=81=D0=B8=D0=B8
4-5 = =D0=B0=D0=B2=D0=B3=D1=83=D1=81=D1=82=D0=B0 (=D1=81 10.00 =D0=B4=D0=BE = 17.30) |=20 =D0=9C=D0=BE=D1=81=D0=BA=D0=B2=D0=B0
=D0=9F=D1=80=D0=BE=D0=BC=D0=BE=D0=BA=D0=BE=D0=B4:205
 
=D0=92=D0=9D=D0=98=D0=9C=D0=90=D0=9D=D0=98=D0=95! =D0=A4=D0=B5=D0=B4=D0=B5=D1=80=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC = =D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=20 =D0=BE=D1=82 13.07.2015 =E2=84=96 227-=D0=A4=D0=97 = =D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D1=8B = =D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0 = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA =D0=BF=D0=BE = =D0=A4=D0=97  =E2=84=96 44-=D0=A4=D0=97: = =D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B=20 =D1=82=D1=80=D0=B5=D0=B1=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F =D0=BA = =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA=D0=B0=D0=BC = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA, = =D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0 = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80=D1=81=D0=BE=D0=B2, = =D0=B0=D1=83=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=BE=D0=B2,=20 =D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2 = =D0=BA=D0=BE=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BE=D0=BA, = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA =D1=83 = =D0=B5=D0=B4=D0=B8=D0=BD=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0= =BE =D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D1=89=D0=B8=D0=BA=D0=B0, = =D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D1=8B = =D1=82=D1=80=D0=B5=D0=B1=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F =D0=BA=20 =D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8E = =D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B8 =D0=B8 = =D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8E = =D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80=D0=B0 = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BE=D0=B2. =D0=92 = 2015 =D0=B3=D0=BE=D0=B4=D1=83 =D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D1=8B = =D0=B0=D0=BD=D1=82=D0=B8=D0=BA=D1=80=D0=B8=D0=B7=D0=B8=D1=81=D0=BD=D1=8B=D0= =B5 = =D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1= =8F = =D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D1=82=D0=B2=D0= =B0: =E2=84=96=E2=84=96 196, 198, 199, 405; = =D0=BD=D0=BE=D0=B2=D1=8B=D0=B5 =D0=B0=D0=BA=D1=82=D1=8B =D0=BE=20 =D0=BD=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8 = (=D0=9F=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8= =D1=8F =E2=84=96=E2=84=96 476, 479), = =D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8 = (=D0=9F=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8= =D1=8F =E2=84=96 =E2=84=96 552,=20 553, 554, =D0=BF=D1=80=D0=B8=D0=BA=D0=B0=D0=B7 =E2=84=96 182/7=D0=9D), = =D0=BE=D0=B1=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8 = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA = (=D0=9F=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8= =D0=B5 =E2=84=96 555),=20 =D1=81=D0=BE=D0=B3=D0=BB=D0=B0=D1=81=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8 = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=B0 =D1=81 = =D0=B5=D0=B4=D0=B8=D0=BD=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC = =D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D1=89=D0=B8=D0=BA=D0=BE=D0=BC = (=D0=BF=D1=80=D0=B8=D0=BA=D0=B0=D0=B7 =E2=84=96 189), = =D0=BF=D0=B0=D0=BA=D0=B5=D1=82=20 =D0=BD=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D1=85 = =D0=B0=D0=BA=D1=82=D0=BE=D0=B2 =D0=BE = =D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=D0=B0=D1=85,  = =D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=D1=85 = =D0=B8 =D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F=D1=85 = =D0=B4=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0 = =D0=B8=D0=BD=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20 =D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2 =D0=B4=D0=BB=D1=8F = =D1=86=D0=B5=D0=BB=D0=B5=D0=B9 = =D0=BE=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1= =8F =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA, = =D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1= =8B=D1=85 = =D1=82=D1=80=D0=B5=D0=B1=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=D1=85 = =D0=BA =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA=D0=B0=D0=BC=20 =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA = (=D0=9F=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8= =D0=B5 =E2=84=9699). =D0=92 =D0=9A=D0=BE=D0=90=D0=9F = =D0=B2=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B0 = =D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=B8=D0= =B2=D0=BD=D0=B0=D1=8F = =D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D1= =81=D1=82=D1=8C =D0=B7=D0=B0=20 =D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F = (=D0=B1=D0=B5=D0=B7=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5), = =D0=BF=D0=BE=D0=B2=D0=BB=D0=B5=D0=BA=D1=88=D0=B5=D0=B5 = =D0=BD=D0=B5=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5 = =D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D1=82=D0=B2,= = =D0=BF=D1=80=D0=B5=D0=B4=D1=83=D1=81=D0=BC=D0=BE=D1=82=D1=80=D0=B5=D0=BD=D0= =BD=D1=8B=D1=85=20 =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BE=D0=BC.
=D0=92 = =D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC = =D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B8 = =D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82 = =D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D0=BE=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82 = =D0=BE =D0=B2=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B8=20 =D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D1=85 = =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D1=8B=D1=85 = =D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80=D1=81=D0=BE=D0=B2, = =D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2 = =D0=BA=D0=BE=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BE=D0=BA, = =D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2 = =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9.=20 =D0=A4=D0=90=D0=A1 =D0=A0=D0=BE=D1=81=D1=81=D0=B8=D0=B8 = =D1=81=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=D0=B0 = =D1=81=D0=B2=D0=BE=D1=8E =D0=BF=D0=BE=D0=B7=D0=B8=D1=86=D0=B8=D1=8E = =D0=BF=D0=BE =D0=BC=D0=BD=D0=BE=D0=B3=D0=B8=D0=BC = =D1=81=D0=BF=D0=BE=D1=80=D0=BD=D1=8B=D0=BC = =D0=B2=D0=BE=D0=BF=D1=80=D0=BE=D1=81=D0=B0=D0=BC = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BD=D0=BE=D0=B9=20 =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B, =D0=B2 = =D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B8, =D0=BF=D0=BE = =D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=D0=BC = =D0=BE=D1=86=D0=B5=D0=BD=D0=BA=D0=B8 = =D0=B7=D0=B0=D1=8F=D0=B2=D0=BE=D0=BA =D0=BD=D0=B0 = =D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80=D1=81=D0=B0=D1=85, =D0=B8 = =D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=B8=D1=82 = =D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20 =D0=B2 =D0=9A=D0=BE=D0=90=D0=9F. =D0=AD=D1=82=D0=B8=D0=BC =D0=B8 = =D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=BC = =D0=B2=D0=B0=D0=B6=D0=BD=D1=8B=D0=BC = =D0=B2=D0=BE=D0=BF=D1=80=D0=BE=D1=81=D0=B0=D0=BC =D0=B8 = =D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B8=D0=BC = =D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BD=D0=BE=D0=B9 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B=20 =D0=B2 =D1=81=D1=84=D0=B5=D1=80=D0=B5 = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA = =D0=BF=D0=BE=D1=81=D0=B2=D1=8F=D1=89=D0=B5=D0=BD = =D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9 = =D1=81=D0=B5=D0=BC=D0=B8=D0=BD=D0=B0=D1=80.
 
=D0=9F=D0=BE=D0=BB=D0=BD=D0=B0=D1=8F = =D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20 =D0=B8 = =D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F = =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2: 8 = =D0=BA=D0=BE=D0=B4 =D0=B3=D0=BE=D1=80=D0=BE=D0=B4=D0=B0 (495)=20 =D1=82=D0=B5=D0=BB.:725-04-48
 
=D0=9A=D1=80=D0=B0=D1=82=D0=BA=D0=B0=D1=8F = =D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0:
1.    = =D0=A4=D0=B5=D0=B4=D0=B5=D1=80=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9 = =D0=B7=D0=B0=D0=BA=D0=BE=D0=BD =D0=A4=D0=97-44 "=D0=9E=20 =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BD=D0=BE=D0=B9 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=B5 =D0=B2 = =D1=81=D1=84=D0=B5=D1=80=D0=B5 = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA = =D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2, = =D1=80=D0=B0=D0=B1=D0=BE=D1=82, =D1=83=D1=81=D0=BB=D1=83=D0=B3 = =D0=B4=D0=BB=D1=8F = =D0=BE=D0=B1=D0=B5=D1=81=D0=BF=D0=B5=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20 =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0= =BD=D1=8B=D1=85 =D0=B8 = =D0=BC=D1=83=D0=BD=D0=B8=D1=86=D0=B8=D0=BF=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1= =85 =D0=BD=D1=83=D0=B6=D0=B4" (=D0=9A=D0=A1).
 
2.    = =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BF=D1=80=D0=B8 = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B8=20 =D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82=D1=8B=D1=85 = =D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80=D1=81=D0=BE=D0=B2 =D0=BF=D0=BE = 44-=D0=A4=D0=97.
 
3.    = =D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F = =D0=BF=D1=80=D0=B8 = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B8 =D0=B8=20 =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=B8=D0=B8 =D0=B2 = =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=BC = =D0=B0=D1=83=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B5.
=D0=9F=D0=B5=D1=80=D0=B5=D1=87=D0=B5=D0=BD=D1=8C = =D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2, = =D1=80=D0=B0=D0=B1=D0=BE=D1=82 =D0=B8 =D1=83=D1=81=D0=BB=D1=83=D0=B3, = =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20 =D1=81=D0=BF=D0=BE=D1=81=D0=BE=D0=B1=D0=BE=D0=BC = =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE = =D0=B0=D1=83=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0.
 
4.    = =D0=9D=D0=BE=D0=B2=D1=8B=D0=B5 = =D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0 = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20 =D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2 = =D0=BA=D0=BE=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BE=D0=BA. = =D0=97=D0=B0=D0=BF=D1=80=D0=BE=D1=81 = =D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9. = =D0=97=D0=B0=D0=BA=D1=83=D0=BF=D0=BA=D0=B8 =D1=83 = =D0=B5=D0=B4=D0=B8=D0=BD=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0= =BE =D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D1=89=D0=B8=D0=BA=D0=B0=20 (=D0=BF=D0=BE=D0=B4=D1=80=D1=8F=D0=B4=D1=87=D0=B8=D0=BA=D0=B0, = =D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8F).
 
5.    = =D0=9E=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5 = =D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F=20 =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=B0. = =D0=AD=D0=BA=D1=81=D0=BF=D0=B5=D1=80=D1=82=D0=B8=D0=B7=D0=B0. = =D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0 = =D0=B7=D0=B0=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F = =D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1= =8B=D1=85 =D1=81=D0=BE=D0=B3=D0=BB=D0=B0=D1=88=D0=B5=D0=BD=D0=B8=D0=B9.=20 =D0=9E=D0=B4=D0=BD=D0=BE=D1=81=D1=82=D0=BE=D1=80=D0=BE=D0=BD=D0=BD=D0=B8=D0= =B9 =D0=BE=D1=82=D0=BA=D0=B0=D0=B7.
=D0=9A=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82: = =D0=BD=D0=BE=D0=B2=D1=8B=D0=B5 = =D1=82=D1=80=D0=B5=D0=B1=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F, = =D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5 = =D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F, =D0=BF=D0=B5=D0=BD=D0=B8 = =D0=B8 =D1=88=D1=82=D1=80=D0=B0=D1=84=D1=8B.
 
6.    = =D0=9A=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C =D0=B8 = =D0=BD=D0=B0=D0=B4=D0=B7=D0=BE=D1=80 =D0=B2 = =D1=81=D1=84=D0=B5=D1=80=D0=B5=20 =D0=B3=D0=BE=D1=81=D1=83=D0=B4=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0= =BD=D1=8B=D1=85 = (=D0=BC=D1=83=D0=BD=D0=B8=D1=86=D0=B8=D0=BF=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B= =D1=85) =D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=BE=D0=BA. = =D0=9F=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B0 =D0=A4=D0=90=D0=A1. = =D0=9E=D0=B1=D0=B6=D0=B0=D0=BB=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5 = =D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B9=20 =D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D1=87=D0=B8=D0=BA=D0=B0, = =D0=BA=D0=BE=D0=BC=D0=B8=D1=81=D1=81=D0=B8=D0=B8, = =D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0 = =D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B9 = =D0=BF=D0=BB=D0=BE=D1=89=D0=B0=D0=B4=D0=BA=D0=B8, = =D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BD=D0=BE=D0=B3=D0=BE = =D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F=D1=8E=D1=89=D0=B5=D0=B3=D0=BE.=
 
---
=D0=A1=D1=82=D0=BE=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C = =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=B8=D1=8F: 21800=D1=80=D1=83=D0=B1. = (=D1=81=D0=BA=D0=B8=D0=B4=D0=BA=D0=B8 =D0=BE=D1=82 2-=D1=85=20 =D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2 =D0=B8 = =D0=B1=D0=BE=D0=BB=D0=B5=D0=B5!)
=D0=9C=D0=B5=D1=81=D1=82=D0=BE  = =D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F: =D0=BC. = =D0=91=D0=B0=D1=83=D0=BC=D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F, = =D1=83=D0=BB.=20 =D0=91=D0=B0=D1=83=D0=BC=D0=B0=D0=BD=D1=81=D0=BA=D0=B0=D1=8F, =D0=B4.6, = =D0=B1=D0=B8=D0=B7=D0=BD=D0=B5=D1=81 =D1=86=D0=B5=D0=BD=D1=82=D1=80 = "=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=9F=D0=BB=D0=B0=D0=B7=D0=B0".
=D0=A3=D1=87=D0=B5=D0=B1=D0=BD=D0=B0=D1=8F = =D0=B0=D1=83=D0=B4=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F = =D0=BE=D0=B1=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0 = =D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BE=D0=B9=20 =D0=BA=D0=BE=D0=BD=D0=B4=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0= =B2=D0=B0=D0=BD=D0=B8=D1=8F!
=D0=92 = =D1=81=D1=82=D0=BE=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C = =D0=B2=D1=85=D0=BE=D0=B4=D0=B8=D1=82 = =D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9 = =D0=BC=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=B0=D0=BB,=20 =D0=BE=D0=B1=D0=B5=D0=B4=D1=8B, = =D0=BA=D0=BE=D1=84=D0=B5-=D0=BF=D0=B0=D1=83=D0=B7=D1=8B, = =D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82.
------=_NextPart_000_0045_01D0C47D.B046A400-- From krundkol@yahoo.de Wed Jul 22 07:00:34 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1AF377FAD for ; Wed, 22 Jul 2015 07:00:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id DEB80304039 for ; Wed, 22 Jul 2015 05:00:33 -0700 (PDT) X-ASG-Debug-ID: 1437566430-04bdf00230172b0001-NocioJ Received: from qianning.521139.com (qianning.521139.com [104.234.218.71]) by cuda.sgi.com with ESMTP id iQkXH6HPPm0GHarG for ; Wed, 22 Jul 2015 05:00:31 -0700 (PDT) X-Barracuda-Envelope-From: krundkol@yahoo.de X-Barracuda-Apparent-Source-IP: 104.234.218.71 To: xfs@oss.sgi.com Subject: target Message-ID: X-ASG-Orig-Subj: target Date: Wed, 22 Jul 2015 14:01:23 +0200 From: "Joe" Reply-To: yuerhon@aliyun.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 673 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: qianning.521139.com[104.234.218.71] X-Barracuda-Start-Time: 1437566430 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20970 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, You are receiving this email because we wish you to use our target email marketing solutions. Our email marketing can generate tons of new leads to a number of businesses. We would like to help your business reach the next level. and increase your business sales 2-4 times than now. Please contact us if you would require more information. Looking forward to your response. Thanks, Joe Email: fionlon@sina.com From ag@iss-integration.com Wed Jul 22 07:23:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8E9C429E0E for ; Wed, 22 Jul 2015 07:23:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 646F48F8049 for ; Wed, 22 Jul 2015 05:23:16 -0700 (PDT) X-ASG-Debug-ID: 1437567793-04cbb06a6717550001-NocioJ Received: from mail-ig0-f175.google.com (mail-ig0-f175.google.com [209.85.213.175]) by cuda.sgi.com with ESMTP id yAv4jyYyGHvMOkTn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 22 Jul 2015 05:23:13 -0700 (PDT) X-Barracuda-Envelope-From: ag@iss-integration.com Received: by igbij6 with SMTP id ij6so134925562igb.1 for ; Wed, 22 Jul 2015 05:23:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=+L3Z+Gq8KsAqMQaEbhjf9ifCIz4PxfCVE8nEltDwa3A=; b=QOQy5sRU0Be6ulFWq3jfIHdURFKFgcUb9XXx0amSSWMi0F+1VpMZ2yqv0yEyof9WTM ztyhvyc42OosTMAPk/oQCjzxSTtmTF9KGkKBtPvzumvwKliyQrjZ2ncodxzZd5EVBGzL igqw297QZ5yWlk6mNWsut3DoSvlMkPtsRcGAQpY9ApOq84g66biDkGPNaqHzL4syWJrZ RMX+w8OgZ826idH+HAM1Pc3d68HSbbJawsJ1yIyVBmLUrDrR3vV0KcbBCbf/an1eXume TM23m1x3wdII6v6o230LAmPy/FVtbRoL2BDDNPSobXR2r9uJlQfrai7MwP1YLkOTHvWo AW7w== X-Gm-Message-State: ALoCoQnLzY2HbyoFfbOzVwdkifCkkpL6/bZ02FwrxQYMV615mHFMuj1kDadfIFg53b7hLhUcY0p4 MIME-Version: 1.0 X-Received: by 10.107.12.194 with SMTP id 63mr3803281iom.4.1437567792967; Wed, 22 Jul 2015 05:23:12 -0700 (PDT) Received: by 10.64.20.198 with HTTP; Wed, 22 Jul 2015 05:23:12 -0700 (PDT) In-Reply-To: <20150707003542.GW7943@dastard> References: <20150703235141.GQ7943@dastard> <20150704233802.GS7943@dastard> <20150705232443.GA3902@dastard> <20150707003542.GW7943@dastard> Date: Wed, 22 Jul 2015 08:23:12 -0400 Message-ID: Subject: Re: Failing XFS filesystem underlying Ceph OSDs From: Alex Gorbachev X-ASG-Orig-Subj: Re: Failing XFS filesystem underlying Ceph OSDs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a113f8eb6a41018051b75d5fd X-Barracuda-Connect: mail-ig0-f175.google.com[209.85.213.175] X-Barracuda-Start-Time: 1437567793 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20970 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --001a113f8eb6a41018051b75d5fd Content-Type: text/plain; charset=UTF-8 Hi Dave, On Mon, Jul 6, 2015 at 8:35 PM, Dave Chinner wrote: > On Mon, Jul 06, 2015 at 03:20:19PM -0400, Alex Gorbachev wrote: > > On Sun, Jul 5, 2015 at 7:24 PM, Dave Chinner > wrote: > > > On Sun, Jul 05, 2015 at 12:25:47AM -0400, Alex Gorbachev wrote: > > > > > > sysctl vm.swappiness=20 (can probably be 1 as per article) > > > > > > > > > > > > sysctl vm.min_free_kbytes=262144 > > > > > > > > [...] > > > > > > > > We have experienced the problem in various guises with kernels 3.14, > > > 3.19, > > > > 4.1-rc2 and now 4.1, so it's not new to us, just different error > stack. > > > > Below are some other stack dumps of what manifested as the same > error. > > > > > > > > [] schedule+0x29/0x70 > > > > [] _xfs_log_force+0x187/0x280 [xfs] > > > > [] ? try_to_wake_up+0x2a0/0x2a0 > > > > [] xfs_log_force+0x39/0xc0 [xfs] > > > > [] xfsaild_push+0x552/0x5a0 [xfs] > > > > [] ? schedule_timeout+0x124/0x210 > > > > [] xfsaild+0x9f/0x140 [xfs] > > > > [] ? xfsaild_push+0x5a0/0x5a0 [xfs] > > > > [] kthread+0xc9/0xe0 > > > > [] ? flush_kthread_worker+0x90/0x90 > > > > [] ret_from_fork+0x58/0x90 > > > > [] ? flush_kthread_worker+0x90/0x90 > > > > INFO: task xfsaild/sdg1:2606 blocked for more than 120 seconds. > > > > Not tainted 3.19.4-031904-generic #201504131440 > > > > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this > > > message. > > > > > > That's indicative of IO completion problems, but not a crash. > > > > > > > BUG: unable to handle kernel NULL pointer dereference at > > > (null) > > > > IP: [] xfs_count_page_state+0x3f/0x70 [xfs] > > > .... > > > > [] xfs_vm_releasepage+0x40/0x120 [xfs] > > > > [] try_to_release_page+0x32/0x50 > > > > [] shrink_page_list+0x69d/0x720 > > > > [] shrink_inactive_list+0x1dd/0x5d0 > > > .... > > > > > > Again, this is indicative of a page cache issue: a page without > > > buffers has been passed to xfs_vm_releasepage(), which implies the > > > page flags are not correct. i.e PAGE_FLAGS_PRIVATE is set but > > > page->private is null... > > > > > > Again, this is unlikely to be an XFS issue. > > > > > > > Sorry for my ignorance, but would this likely come from Ceph code or a > > hardware issue of some kind, such as a disk drive? I have reached out to > > RedHat and Ceph community on that as well. > > More likely a kernel bug somewhere in the page cache or memory > reclaim paths. The issue is that we only notice the problem long > after it has occurred. i.e. when XFS goes to tear down the page it has > been handed, the page is already in a bad state and so it doesn't > really tell us anything about the cause of the problem. > > Realisticaly, we need a script that reproduces the problem (that > doesn't require a Ceph cluster) to be able to isolate the cause. > In the mean time, you can always try running CONFIG_XFS_WARN=y to > see if that catches problems earlier, and you might also want to do > things like turn on memory poisoning and other kernel debugging > options to try to isolate the cause of the issue.... > We have been error free for almost 3 weeks now with these changes: vm.swappiness=1 vm.min_free_kbytes=262144 I wonder if this is related to us using high speed Areca HBAs with RAM writeback cache and having had vm.swappiness=0 previously. POssibly the HBA handing down a large chunk of IO very fast and page cache not being to handle it with swappiness=0. I will keep monitoring, but thank you very much for the analysis and info. Alex > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > --001a113f8eb6a41018051b75d5fd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Dave,

On Mon, Jul 6, 2015 at 8:35 PM, Dave Chinner <= david@fromorbit.co= m> wrote:
On Mon, Jul 06, 2015 at 03:20:1= 9PM -0400, Alex Gorbachev wrote:
> On Sun, Jul 5, 2015 at 7:24 PM, Dave Chinner <david@fromorbit.com> wrote= :
> > On Sun, Jul 05, 2015 at 12:25:47AM -0400, Alex Gorbachev wrote: > > > > > sysctl vm.swappiness=3D20 (can probably be 1 as pe= r article)
> > > > >
> > > > > sysctl vm.min_free_kbytes=3D262144
> > > >
> > [...]
> > >
> > > We have experienced the problem in various guises with kerne= ls 3.14,
> > 3.19,
> > > 4.1-rc2 and now 4.1, so it's not new to us, just differe= nt error stack.
> > > Below are some other stack dumps of what manifested as the s= ame error.
> > >
> > >=C2=A0 [<ffffffff817cf4b9>] schedule+0x29/0x70
> > >=C2=A0 [<ffffffffc07caee7>] _xfs_log_force+0x187/0x280 = [xfs]
> > >=C2=A0 [<ffffffff810a4150>] ? try_to_wake_up+0x2a0/0x2a= 0
> > >=C2=A0 [<ffffffffc07cb019>] xfs_log_force+0x39/0xc0 [xf= s]
> > >=C2=A0 [<ffffffffc07d6542>] xfsaild_push+0x552/0x5a0 [x= fs]
> > >=C2=A0 [<ffffffff817d2264>] ? schedule_timeout+0x124/0x= 210
> > >=C2=A0 [<ffffffffc07d662f>] xfsaild+0x9f/0x140 [xfs] > > >=C2=A0 [<ffffffffc07d6590>] ? xfsaild_push+0x5a0/0x5a0 = [xfs]
> > >=C2=A0 [<ffffffff81095e29>] kthread+0xc9/0xe0
> > >=C2=A0 [<ffffffff81095d60>] ? flush_kthread_worker+0x90= /0x90
> > >=C2=A0 [<ffffffff817d3718>] ret_from_fork+0x58/0x90
> > >=C2=A0 [<ffffffff81095d60>] ? flush_kthread_worker+0x90= /0x90
> > >=C2=A0 INFO: task xfsaild/sdg1:2606 blocked for more than 120= seconds.
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 Not tainted 3.19.4-031904-= generic #201504131440
> > >=C2=A0 "echo 0 > /proc/sys/kernel/hung_task_tim= eout_secs" disables this
> > message.
> >
> > That's indicative of IO completion problems, but not a crash.=
> >
> > >=C2=A0 BUG: unable to handle kernel NULL pointer dereference = at
> >=C2=A0 (null)
> > >=C2=A0 IP: [<ffffffffc04be80f>] xfs_count_page_state+0x= 3f/0x70 [xfs]
> > ....
> > >=C2=A0 =C2=A0[<ffffffffc04be880>] xfs_vm_releasepage+0x= 40/0x120 [xfs]
> > >=C2=A0 =C2=A0[<ffffffff8118a7d2>] try_to_release_page+0= x32/0x50
> > >=C2=A0 =C2=A0[<ffffffff8119fe6d>] shrink_page_list+0x69= d/0x720
> > >=C2=A0 =C2=A0[<ffffffff811a058d>] shrink_inactive_list+= 0x1dd/0x5d0
> > ....
> >
> > Again, this is indicative of a page cache issue: a page without > > buffers has been passed to xfs_vm_releasepage(), which implies th= e
> > page flags are not correct. i.e PAGE_FLAGS_PRIVATE is set but
> > page->private is null...
> >
> > Again, this is unlikely to be an XFS issue.
> >
>
> Sorry for my ignorance, but would this likely come from Ceph code or a=
> hardware issue of some kind, such as a disk drive?=C2=A0 I have reache= d out to
> RedHat and Ceph community on that as well.

More likely a kernel bug somewhere in the page cache or memory
reclaim paths. The issue is that we only notice the problem long
after it has occurred. i.e. when XFS goes to tear down the page it has
been handed, the page is already in a bad state and so it doesn't
really tell us anything about the cause of the problem.

Realisticaly, we need a script that reproduces the problem (that
doesn't require a Ceph cluster) to be able to isolate the cause.
In the mean time, you can always try running=C2=A0 CONFIG_XFS_WARN=3Dy to see if that catches problems earlier, and you might also want to do
things like turn on memory poisoning and other kernel debugging
options to try to isolate the cause of the issue....
<= br>
We have been error free for almost 3 weeks now with these cha= nges:

= vm.swappiness=3D1
vm.min_f= ree_kbytes=3D262144
=
I wonder if this is r= elated to us using high speed Areca HBAs with RAM writeback cache and havin= g had vm.swappiness=3D0 previously.=C2=A0 POssibly the HBA handing down a l= arge chunk of IO very fast and page cache not being to handle it with swapp= iness=3D0.=C2=A0 I will keep monitoring, but thank you very much for the an= alysis and info.

Alex

= =C2=A0

Cheers,

Dave.
--
Dave Chinner
david@fromo= rbit.com

--001a113f8eb6a41018051b75d5fd-- From msnitzer@redhat.com Wed Jul 22 08:34:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 185877FA6 for ; Wed, 22 Jul 2015 08:34:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id CE57F30404E for ; Wed, 22 Jul 2015 06:34:54 -0700 (PDT) X-ASG-Debug-ID: 1437572093-04bdf0023019ed0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id MjQt5i3kcWXWCc60 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 Jul 2015 06:34:53 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 52AD88C1D0; Wed, 22 Jul 2015 13:34:53 +0000 (UTC) Received: from localhost (dhcp-25-149.bos.redhat.com [10.18.25.149]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6MDYqSh007022 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Wed, 22 Jul 2015 09:34:52 -0400 Date: Wed, 22 Jul 2015 09:34:51 -0400 From: Mike Snitzer To: Dave Chinner Cc: axboe@kernel.dk, Eric Sandeen , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150722133451.GB16842@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150722023711.GD7943@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437572093 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 21 2015 at 10:37pm -0400, Dave Chinner wrote: > On Tue, Jul 21, 2015 at 09:40:29PM -0400, Mike Snitzer wrote: > > > I'm open to considering alternative interfaces for getting you the info > > you need. I just don't have a great sense for what mechanism you'd like > > to use. Do we invent a new block device operations table method that > > sets values in a 'struct no_space_strategy' passed in to the > > blockdevice? > > It's long been frowned on having the filesystems dig into block > device structures. We have lots of wrapper functions for getting > information from or performing operations on block devices. (e.g. > bdev_read_only(), bdev_get_queue(), blkdev_issue_flush(), > blkdev_issue_zeroout(), etc) and so I think this is the pattern we'd > need to follow. If we do that - bdev_get_nospace_strategy() - then > how that information gets to the filesystem is completely opaque > at the fs level, and the block layer can implement it in whatever > way is considered sane... > > And, realistically, all we really need returned is a enum to tell us > how the bdev behaves on enospc: > - bdev fails fast, (i.e. immediate ENOSPC) > - bdev fails slow, (i.e. queue for some time, then ENOSPC) > - bdev never fails (i.e. queue forever) > - bdev doesn't support this (i.e. EOPNOTSUPP) This 'struct no_space_strategy' would be invented purely for informational purposes for upper layers' benefit -- I don't consider it a "block device structure" it the traditional sense. I was thinking upper layers would like to know the actual timeout value for the "fails slow" case. As such the 'struct no_space_strategy' would have the enum and the timeout. And would be returned with a call: bdev_get_nospace_strategy(bdev, &no_space_strategy) From sandeen@redhat.com Wed Jul 22 11:28:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 031437FA6 for ; Wed, 22 Jul 2015 11:28:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id E19E3304059 for ; Wed, 22 Jul 2015 09:28:08 -0700 (PDT) X-ASG-Debug-ID: 1437582487-04cbb06a671e420001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CIfAgcXQc5HwCeCw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 Jul 2015 09:28:08 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 3D34391741; Wed, 22 Jul 2015 16:28:07 +0000 (UTC) Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6MGS3bN009660 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 Jul 2015 12:28:05 -0400 Message-ID: <55AFC496.4000009@redhat.com> Date: Wed, 22 Jul 2015 11:28:06 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Mike Snitzer , Dave Chinner CC: axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space In-Reply-To: <20150722133451.GB16842@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437582488 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 7/22/15 8:34 AM, Mike Snitzer wrote: > On Tue, Jul 21 2015 at 10:37pm -0400, > Dave Chinner wrote: > >> On Tue, Jul 21, 2015 at 09:40:29PM -0400, Mike Snitzer wrote: >> >>> I'm open to considering alternative interfaces for getting you the info >>> you need. I just don't have a great sense for what mechanism you'd like >>> to use. Do we invent a new block device operations table method that >>> sets values in a 'struct no_space_strategy' passed in to the >>> blockdevice? >> >> It's long been frowned on having the filesystems dig into block >> device structures. We have lots of wrapper functions for getting >> information from or performing operations on block devices. (e.g. >> bdev_read_only(), bdev_get_queue(), blkdev_issue_flush(), >> blkdev_issue_zeroout(), etc) and so I think this is the pattern we'd >> need to follow. If we do that - bdev_get_nospace_strategy() - then >> how that information gets to the filesystem is completely opaque >> at the fs level, and the block layer can implement it in whatever >> way is considered sane... >> >> And, realistically, all we really need returned is a enum to tell us >> how the bdev behaves on enospc: >> - bdev fails fast, (i.e. immediate ENOSPC) >> - bdev fails slow, (i.e. queue for some time, then ENOSPC) >> - bdev never fails (i.e. queue forever) >> - bdev doesn't support this (i.e. EOPNOTSUPP) I'm not sure how this is more useful than the bdev simply responding to a query of "should we keep trying IOs?" IOWS do we really care if it's failing fast or slow, vs. simply knowing whether it has now permanently failed? So rather than "bdev_get_nospace_strategy" it seems like all we need to know is "bdev_has_failed" - do we really care about the details? > This 'struct no_space_strategy' would be invented purely for > informational purposes for upper layers' benefit -- I don't consider it > a "block device structure" it the traditional sense. > > I was thinking upper layers would like to know the actual timeout value > for the "fails slow" case. As such the 'struct no_space_strategy' would > have the enum and the timeout. And would be returned with a call: > bdev_get_nospace_strategy(bdev, &no_space_strategy) Asking for the timeout value seems to add complexity. It could change after we ask, and knowing it now requires another layer to be handling timeouts... Thanks, -Eric From msnitzer@redhat.com Wed Jul 22 11:51:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 41AB47FA7 for ; Wed, 22 Jul 2015 11:51:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0AB508F8052 for ; Wed, 22 Jul 2015 09:51:20 -0700 (PDT) X-ASG-Debug-ID: 1437583879-04cb6c02c81ff50001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id INHbZUo2ETSvpleW (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 Jul 2015 09:51:20 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 6B4FC19F21B; Wed, 22 Jul 2015 16:51:19 +0000 (UTC) Received: from localhost (dhcp-25-149.bos.redhat.com [10.18.25.149]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6MGpI9P023301 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Wed, 22 Jul 2015 12:51:18 -0400 Date: Wed, 22 Jul 2015 12:51:18 -0400 From: Mike Snitzer To: Eric Sandeen Cc: Dave Chinner , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150722165117.GA17738@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55AFC496.4000009@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437583880 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 22 2015 at 12:28pm -0400, Eric Sandeen wrote: > On 7/22/15 8:34 AM, Mike Snitzer wrote: > > On Tue, Jul 21 2015 at 10:37pm -0400, > > Dave Chinner wrote: > > > >> On Tue, Jul 21, 2015 at 09:40:29PM -0400, Mike Snitzer wrote: > >> > >>> I'm open to considering alternative interfaces for getting you the info > >>> you need. I just don't have a great sense for what mechanism you'd like > >>> to use. Do we invent a new block device operations table method that > >>> sets values in a 'struct no_space_strategy' passed in to the > >>> blockdevice? > >> > >> It's long been frowned on having the filesystems dig into block > >> device structures. We have lots of wrapper functions for getting > >> information from or performing operations on block devices. (e.g. > >> bdev_read_only(), bdev_get_queue(), blkdev_issue_flush(), > >> blkdev_issue_zeroout(), etc) and so I think this is the pattern we'd > >> need to follow. If we do that - bdev_get_nospace_strategy() - then > >> how that information gets to the filesystem is completely opaque > >> at the fs level, and the block layer can implement it in whatever > >> way is considered sane... > >> > >> And, realistically, all we really need returned is a enum to tell us > >> how the bdev behaves on enospc: > >> - bdev fails fast, (i.e. immediate ENOSPC) > >> - bdev fails slow, (i.e. queue for some time, then ENOSPC) > >> - bdev never fails (i.e. queue forever) > >> - bdev doesn't support this (i.e. EOPNOTSUPP) > > I'm not sure how this is more useful than the bdev simply responding to > a query of "should we keep trying IOs?" > > IOWS do we really care if it's failing fast or slow, vs. simply knowing > whether it has now permanently failed? > > So rather than "bdev_get_nospace_strategy" it seems like all we need > to know is "bdev_has_failed" - do we really care about the details? My bdev_has_space() proposal is no different then bdev_has_failed(). If you prefer the more generic name then fine. But bdev_has_failed() is of limited utlity outside of devices that provide support. So I can see why Dave is resisting it. Anyway, the benefit of XFS tailoring its independent config based on dm-thinp's comparable config makes sense to me. The reason for XFS's independent config is it could be deployed on any storage (e.g. not dm-thinp). Affords XFS to defer to DM thinp but still have comparable functionality for HW thinp or some other storage. > > This 'struct no_space_strategy' would be invented purely for > > informational purposes for upper layers' benefit -- I don't consider it > > a "block device structure" it the traditional sense. > > > > I was thinking upper layers would like to know the actual timeout value > > for the "fails slow" case. As such the 'struct no_space_strategy' would > > have the enum and the timeout. And would be returned with a call: > > bdev_get_nospace_strategy(bdev, &no_space_strategy) > > Asking for the timeout value seems to add complexity. It could change after > we ask, and knowing it now requires another layer to be handling timeouts... Dave is already saying XFS will have a timeout it'll be managing. Stands to reason that XFS would base its timeout on DM thinp's timeout. But yeah it does allow the stacked timeout that XFS uses to be out of sync if the lower timeout changes (no different than blk_stack_limits). Please fix this however you see fit. I'll assist anywhere that makes sense. From nfnv998@embarqmail.com Wed Jul 22 17:49:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 32E577FA2 for ; Wed, 22 Jul 2015 17:49:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id F1DE58F8050 for ; Wed, 22 Jul 2015 15:49:10 -0700 (PDT) X-ASG-Debug-ID: 1437605348-04bdf00231289d0001-NocioJ Received: from smtp.centurylink.net (mail.centurylink.net [205.219.233.9]) by cuda.sgi.com with ESMTP id 4jdHSshvbGY2Ip2D (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 Jul 2015 15:49:09 -0700 (PDT) X-Barracuda-Envelope-From: nfnv998@embarqmail.com X-Barracuda-Apparent-Source-IP: 205.219.233.9 DKIM-Signature: v=1; a=rsa-sha1; d=embarqmail.com; s=ctl201402; c=relaxed/simple; q=dns/txt; i=@embarqmail.com; t=1437605348; h=From:Subject:Date:To:MIME-Version:Content-Type; bh=XcRG12ktLEIYn4gVthaNb8/NBOU=; b=Xdh3z9jDybcQWWwU5QU1DWD+W1dZOqUBzqfuUafgsr0w2CVOAwZ/WqrEM5FOSY5E 1p51OIYC4beaGzQrdXMBrhrg/4KkWNxAFvLWjp0yj7gNoi5tPGfeV0m8DTHL60l1 Fcm+N2HGLvJqI/5MDszGC8VI8gqGMMpG54FvRpndBpaMx6MMgFsIs6r0oe+xBdtc T/pDoRMWEICykYPRq0/P/+1b8+3hazcCrjXwV+yHOqi7SOG1DK3ttlpCoH0N/Rzt bOAwOqNMKfKFq+eGjo12XPKv7fpWMLLI9utoGN+lLgZNWQfWujgyqwQZQ795jXAf iGy5dCHzwDPNzWFTqP985w==; X_CMAE_Category: , , X-CNFS-Analysis: v=2.0 cv=XecLPfF5 c=1 sm=1 a=1oqGTYSLAAAA:8 a=69EAbJreAAAA:8 a=FKkrIqjQGGEA:10 a=oo2AgFwaXZMA:10 a=OuZTYHY-wooA:10 a=91vrSus-Mz3wCTuDPqUA:9 a=QEXdDO2ut3YA:10 a=hEPeqQihL9oA:10 a=fCEXU_8IuvgA:10 a=vL7-ozvRxNEA:10 a=859NpK6DnAJZxRCH8ipABg==:117 X-CM-Score: 0 X-Scanned-by: Cloudmark Authority Engine X-Authed-Username: bmZudjk5OEBlbWJhcnFtYWlsLmNvbQ== Received: from [10.40.66.2] ([10.40.66.2:53204] helo=md01.agate.dfw.synacor.com) by smtp.centurylink.net (envelope-from ) (ecelerity 3.5.1.37854 r(Momo-dev:3.5.1.0)) with ESMTP id 94/B5-09902-1ED10B55; Wed, 22 Jul 2015 18:49:06 -0400 Date: Wed, 22 Jul 2015 18:49:05 -0400 (EDT) From: "nfnv998@embarqmail.com" Reply-To: amalalmonteteer@hotmail.com To: info@live.org Message-ID: <782790013.22936839.1437605345797.JavaMail.root@embarqmail.com> In-Reply-To: Subject: Re: MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [128.199.238.136] X-Mailer: Zimbra 7.2.2_GA_2852 (zclient/7.2.2_GA_2852) X-Barracuda-Connect: mail.centurylink.net[205.219.233.9] X-Barracuda-Start-Time: 1437605349 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.70 X-Barracuda-Spam-Status: No, SCORE=0.70 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA620b, BSF_SC7_SA298e, DKIM_SIGNED, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20991 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.20 BSF_SC7_SA298e Custom Rule SA298e 0.50 BSF_SC0_SA620b Custom Rule SA620b ----- Original Message ----- From: online Sent: Wed, 22 Jul 2015 18:41:26 -0400 (EDT) Subject: i need your help From lrhorer@mygrande.net Wed Jul 22 20:45:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 534427F9B for ; Wed, 22 Jul 2015 20:45:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3D9848F8035 for ; Wed, 22 Jul 2015 18:45:17 -0700 (PDT) X-ASG-Debug-ID: 1437615913-04cb6c02c82bd70001-NocioJ Received: from mail01.lsn.net (mail01.lsn.net [66.90.130.120]) by cuda.sgi.com with ESMTP id xrYXSTHvSnCOoYGp for ; Wed, 22 Jul 2015 18:45:13 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.120 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail01.lsn.net (8.14.4/8.13.6) with ESMTP id t6N1j6np024669 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Wed, 22 Jul 2015 20:45:07 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av02.lsn.net Message-ID: <55B04723.6010202@mygrande.net> Date: Wed, 22 Jul 2015 20:45:07 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Brian Foster CC: Kris Rusocki , "Rhorer, Leslie" , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <20150720111747.GA53450@bfoster.bfoster> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail01.lsn.net[66.90.130.120] X-Barracuda-Start-Time: 1437615913 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20995 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/20/2015 6:17 AM, Brian Foster wrote: > On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >> >> I found the problem with md5sum (and probably nfs, as well). One of the >> memory modules in the server was bad. The problem with XFS persists. Every >> time tar tried to create the directory: >> >> /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 >> >> It would begin spitting out errors, starting with "Cannot mkdir: Structure >> needs cleaning". At that point, XFS had shut down. I went into >> /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket >> 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ >> and created the i386-11.1 directory by hand, and tar no longer starts >> spitting out errors at that point, but it does start up again at >> RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. >> > > So is this untar problem a reliable reproducer? If so, here's what I Absolutely reliable producer. The only change is if I create the offending directory by hand (after recovering the filesystem, of course) and then start the tar again. Then it copies all the files into the previously offending directory, failing the next time it tries to create a directory. > would try to hopefully isolate a filesystem problem from something > underneath: OK. Frankly, I fail to find it at all likely to be anything above. I can read and write 100s of megabytes of data without an error. The only thing that I can find failing is creating directories, and that is only when tar attempts it. The directory structure is going to be written to different inodes as time goes by, so a failure of mdadm or some structure above it should cause other widesperead issues. I need to try some other tarballs when I get the chance, and also try dumping that tar on a different directory. > xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump > xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img How big are those files going to be, do you think? The root partition is not all that huge. There is only a little over 80G free. > mount /.../fileonrootfs.img /mnt/ > > ... and repeat the test on that mount using the original tarball (if > it's on the associated fs, the version from the dump will have no data). It is. I've tried copying it to another fs, and it works fine, there. > This will create a metadata only dump of the original fs onto another > storage device (e.g., whatever holds the root fs), restore the metadump > to a file and mount it loopback. The resulting fs will not contain any > file data, but will contain all of the metadata such as directory > structure, etc. and is otherwise mountable and usable for experimental > purposes. > > If the problem is in the filesystem or "above" (as in kernel, memory > issue, etc.), the test should fail on this mount. If the problem is > beneath the fs such as somewhere in the storage stack (assuming the > rootfs storage stack is reliable), it probably shouldn't fail. I'll look into this when I can. Right now I have some critical operations going on both servers (primary and backup), and I can't take down a file system or even risk doing so. Hopefully I will get around to it this weekend. From sandeen@sandeen.net Wed Jul 22 22:18:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B68A87F82 for ; Wed, 22 Jul 2015 22:18:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9D8D5304039 for ; Wed, 22 Jul 2015 20:18:16 -0700 (PDT) X-ASG-Debug-ID: 1437621494-04cb6c02c62d7a0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 5LHs1PcGlThT4yiF for ; Wed, 22 Jul 2015 20:18:14 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id DB90E63C5F00; Wed, 22 Jul 2015 22:18:13 -0500 (CDT) Message-ID: <55B05CF5.8050204@sandeen.net> Date: Wed, 22 Jul 2015 22:18:13 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Leslie Rhorer , Dave Chinner CC: Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55ACA615.10501@mygrande.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437621494 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20997 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/20/15 2:41 AM, Leslie Rhorer wrote: > On 7/19/2015 6:27 PM, Dave Chinner wrote: >> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>> >>> I found the problem with md5sum (and probably nfs, as well). One >>> of the memory modules in the server was bad. The problem with XFS >>> persists. Every time tar tried to create the directory: >> >> Now you need to run xfs_repair. > > I do that every time the array implodes. It makes no difference. It > never mentions cleaning the structure tar says needs cleaning, and > the next time I run tar on that file, the filesystem craters. > What. Did. xfs_repair. Say. ? -Eric From sandeen@redhat.com Wed Jul 22 23:59:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E59487F88 for ; Wed, 22 Jul 2015 23:59:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id CB1338F8035 for ; Wed, 22 Jul 2015 21:59:06 -0700 (PDT) X-ASG-Debug-ID: 1437627545-04cbb06a672e730001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id y602XSESHoPHVzY2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 22 Jul 2015 21:59:05 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 094C3225 for ; Thu, 23 Jul 2015 04:59:05 +0000 (UTC) Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6N4x2Ep022417 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 00:59:04 -0400 Message-ID: <55B07496.9060207@redhat.com> Date: Wed, 22 Jul 2015 23:59:02 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfs: set XFS_DA_OP_OKNOENT in xfs_attr_get Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH] xfs: set XFS_DA_OP_OKNOENT in xfs_attr_get Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437627545 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 It's entirely possible for userspace to ask for an xattr which does not exist. Normally, there is no problem whatsoever when we ask for such a thing, but when we look at an obfuscated metadump image on a debug kernel with selinux, we trip over this ASSERT in xfs_da3_path_shift(): *result = -ENOENT; /* we're out of our tree */ ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); It (more or less) only shows up in the above scenario, because xfs_metadump obfuscates attr names, but chooses names which keep the same hash value - and xfs_da3_node_lookup_int does: if (((retval == -ENOENT) || (retval == -ENOATTR)) && (blk->hashval == args->hashval)) { error = xfs_da3_path_shift(state, &state->path, 1, 1, &retval); IOWS, we only get down to the xfs_da3_path_shift() ASSERT if we are looking for an xattr which doesn't exist, but we find xattrs on disk which have the same hash, and so might be a hash collision, so we try the path shift. When *that* fails to find what we're looking for, we hit the assert about XFS_DA_OP_OKNOENT. Simply setting XFS_DA_OP_OKNOENT in xfs_attr_get solves this rather corner-case problem with no ill side effects. It's fine for an attr name lookup to fail. Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 3349c9a..ff06557 100644 --- a/fs/xfs/libxfs/xfs_attr.c +++ b/fs/xfs/libxfs/xfs_attr.c @@ -139,6 +139,8 @@ xfs_attr_get( args.value = value; args.valuelen = *valuelenp; + /* Entirely possible to look up a name which doesn't exist */ + args.op_flags = XFS_DA_OP_OKNOENT; lock_mode = xfs_ilock_attr_map_shared(ip); if (!xfs_inode_hasattr(ip)) From david@fromorbit.com Thu Jul 23 00:10:53 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B04A77F89 for ; Thu, 23 Jul 2015 00:10:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 54CB8AC004 for ; Wed, 22 Jul 2015 22:10:50 -0700 (PDT) X-ASG-Debug-ID: 1437628246-04bdf0023030090001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id W5Ea9NmZrvMQjpo4 for ; Wed, 22 Jul 2015 22:10:47 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CvCQA9drBVPBqxLXlbgxWBATyGUaIAAQEBAQEBBppkAgIBAQKBWU0BAQEBAQEHAQEBAUABP4QjAQEBAwE6HCMQCAMYCSUPBSUDBxoTiCYHzQQBAQEBBgIBHxmGBYUuhQYHgxeBFAWHDwKGVIZ3jDSZGYEJgVuBUCwxgksBAQE Received: from ppp121-45-177-26.lns20.syd7.internode.on.net (HELO dastard) ([121.45.177.26]) by ipmail04.adl6.internode.on.net with ESMTP; 23 Jul 2015 14:40:45 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZI8mJ-0006bw-Tc; Thu, 23 Jul 2015 15:10:43 +1000 Date: Thu, 23 Jul 2015 15:10:43 +1000 From: Dave Chinner To: Eric Sandeen Cc: Mike Snitzer , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150723051043.GB3902@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55AFC496.4000009@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1437628247 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20999 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jul 22, 2015 at 11:28:06AM -0500, Eric Sandeen wrote: > On 7/22/15 8:34 AM, Mike Snitzer wrote: > > On Tue, Jul 21 2015 at 10:37pm -0400, > > Dave Chinner wrote: > >> On Tue, Jul 21, 2015 at 09:40:29PM -0400, Mike Snitzer wrote: > >>> I'm open to considering alternative interfaces for getting you the info > >>> you need. I just don't have a great sense for what mechanism you'd like > >>> to use. Do we invent a new block device operations table method that > >>> sets values in a 'struct no_space_strategy' passed in to the > >>> blockdevice? > >> > >> It's long been frowned on having the filesystems dig into block > >> device structures. We have lots of wrapper functions for getting > >> information from or performing operations on block devices. (e.g. > >> bdev_read_only(), bdev_get_queue(), blkdev_issue_flush(), > >> blkdev_issue_zeroout(), etc) and so I think this is the pattern we'd > >> need to follow. If we do that - bdev_get_nospace_strategy() - then > >> how that information gets to the filesystem is completely opaque > >> at the fs level, and the block layer can implement it in whatever > >> way is considered sane... > >> > >> And, realistically, all we really need returned is a enum to tell us > >> how the bdev behaves on enospc: > >> - bdev fails fast, (i.e. immediate ENOSPC) > >> - bdev fails slow, (i.e. queue for some time, then ENOSPC) > >> - bdev never fails (i.e. queue forever) > >> - bdev doesn't support this (i.e. EOPNOTSUPP) > > I'm not sure how this is more useful than the bdev simply responding to > a query of "should we keep trying IOs?" - bdev fails fast, (i.e. immediate ENOSPC) XFS should use a bound retry behaviour for to allow the possiblity of the admin adding more space before we shut down the fs. i.e. XFS fails slow. - bdev fails slow, (i.e. queue for some time, then ENOSPC) We know that IOs are going to be delayed before they are failed, so there's no point in retrying as the admin has already had a chance to resolve the ENOSPC condition before failure was reported. i.e. XFS fails fast. - bdev never fails (i.e. queue forever) Block device will appear to hang when it runs out of space. Nothing XFS can do here because IOs never fail, but we need to note this in the log at mount time so that filesystem hangs are easily explained when reported to us. - bdev doesn't support this (i.e. EOPNOTSUPP) XFS uses default "retry forever" behaviour. > > This 'struct no_space_strategy' would be invented purely for > > informational purposes for upper layers' benefit -- I don't consider it > > a "block device structure" it the traditional sense. > > > > I was thinking upper layers would like to know the actual timeout value > > for the "fails slow" case. As such the 'struct no_space_strategy' would > > have the enum and the timeout. And would be returned with a call: > > bdev_get_nospace_strategy(bdev, &no_space_strategy) > > Asking for the timeout value seems to add complexity. It could change after > we ask, and knowing it now requires another layer to be handling timeouts... I don't think knowing the bdev timeout is necessary because the default is most likely to be "fail fast" in this case. i.e. no retries, just shut down. IOWs, if we describe the configs and actions in neutral terms, then the default configurations easy for users to understand. i.e: bdev enospc XFS default ----------- ----------- Fail slow Fail fast Fail fast Fail slow Fail never Fail never, Record in log EOPNOTSUPP Fail never With that in mind, I'm thinking I should drop the "permanent/transient" error classifications, and change it "failure behaviour" with the options "fast slow [never]" and only the slow option has retry/timeout configuration options. I think the "never" option still needs to "fail at unmount" config variable, but we enable it by default rather than hanging unmount and requiring a manual shutdown like we do now.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Thu Jul 23 00:20:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 48E717F66 for ; Thu, 23 Jul 2015 00:20:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2AFA830404E for ; Wed, 22 Jul 2015 22:20:06 -0700 (PDT) X-ASG-Debug-ID: 1437628804-04cbb06a692ec20001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id IL3fqKAvKla8x1HE for ; Wed, 22 Jul 2015 22:20:04 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from [10.0.0.194] (unknown [10.0.0.194]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 1F9F863C5F00; Thu, 23 Jul 2015 00:20:04 -0500 (CDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (1.0) Subject: Re: [PATCH] xfs: set XFS_DA_OP_OKNOENT in xfs_attr_get From: Eric Sandeen X-ASG-Orig-Subj: Re: [PATCH] xfs: set XFS_DA_OP_OKNOENT in xfs_attr_get X-Mailer: iPhone Mail (12F70) In-Reply-To: <55B07496.9060207@redhat.com> Date: Thu, 23 Jul 2015 00:20:03 -0500 Cc: xfs-oss Content-Transfer-Encoding: quoted-printable Message-Id: <64D3B2DB-5FBB-41A9-8544-1635D474240E@sandeen.net> References: <55B07496.9060207@redhat.com> To: Eric Sandeen X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437628804 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.20999 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars On Jul 22, 2015, at 11:59 PM, Eric Sandeen wrote: >=20 > It's entirely possible for userspace to ask for an xattr which > does not exist. >=20 > Normally, there is no problem whatsoever when we ask for such > a thing, but when we look at an obfuscated metadump image > on a debug kernel with selinux, we trip over this ASSERT in > xfs_da3_path_shift(): >=20 > *result =3D -ENOENT; /* we're out of our tree */ > ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); >=20 > It (more or less) only shows up in the above scenario, because > xfs_metadump obfuscates attr names, but chooses names which > keep the same hash value - and xfs_da3_node_lookup_int does: >=20 > if (((retval =3D=3D -ENOENT) || (retval =3D=3D -ENOATTR)) && > (blk->hashval =3D=3D args->hashval)) { > error =3D xfs_da3_path_shift(state, &state->path, 1, 1, > &retval); Oh, and add: thanks to dchinner for spotting the above conditional that got u= s there ;) -Eric > IOWS, we only get down to the xfs_da3_path_shift() ASSERT > if we are looking for an xattr which doesn't exist, but we > find xattrs on disk which have the same hash, and so might be > a hash collision, so we try the path shift. When *that* > fails to find what we're looking for, we hit the assert about > XFS_DA_OP_OKNOENT. >=20 > Simply setting XFS_DA_OP_OKNOENT in xfs_attr_get solves this > rather corner-case problem with no ill side effects. It's > fine for an attr name lookup to fail. >=20 > Signed-off-by: Eric Sandeen > --- >=20 > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 3349c9a..ff06557 100644 > --- a/fs/xfs/libxfs/xfs_attr.c > +++ b/fs/xfs/libxfs/xfs_attr.c > @@ -139,6 +139,8 @@ xfs_attr_get( >=20 > args.value =3D value; > args.valuelen =3D *valuelenp; > + /* Entirely possible to look up a name which doesn't exist */ > + args.op_flags =3D XFS_DA_OP_OKNOENT; >=20 > lock_mode =3D xfs_ilock_attr_map_shared(ip); > if (!xfs_inode_hasattr(ip)) >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs >=20 From bfoster@redhat.com Thu Jul 23 06:36:57 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2D4A97F81 for ; Thu, 23 Jul 2015 06:36:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9EB34AC004 for ; Thu, 23 Jul 2015 04:36:52 -0700 (PDT) X-ASG-Debug-ID: 1437651410-04cbb06a693c430001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id XtAteIfh8LFyT1H3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 04:36:51 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 0A9CE2D4518; Thu, 23 Jul 2015 11:36:49 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NBamdQ007622; Thu, 23 Jul 2015 07:36:49 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 1E3FB122E55; Thu, 23 Jul 2015 07:36:48 -0400 (EDT) Date: Thu, 23 Jul 2015 07:36:47 -0400 From: Brian Foster To: Leslie Rhorer Cc: Kris Rusocki , "Rhorer, Leslie" , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble Message-ID: <20150723113647.GA18690@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B04723.6010202@mygrande.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55B04723.6010202@mygrande.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437651411 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 22, 2015 at 08:45:07PM -0500, Leslie Rhorer wrote: > On 7/20/2015 6:17 AM, Brian Foster wrote: > >On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: > >> > >> I found the problem with md5sum (and probably nfs, as well). One of the > >>memory modules in the server was bad. The problem with XFS persists. Every > >>time tar tried to create the directory: > >> > >>/RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 > >> > >> It would begin spitting out errors, starting with "Cannot mkdir: Structure > >>needs cleaning". At that point, XFS had shut down. I went into > >>/RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket > >>2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ > >>and created the i386-11.1 directory by hand, and tar no longer starts > >>spitting out errors at that point, but it does start up again at > >>RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. > >> > > > >So is this untar problem a reliable reproducer? If so, here's what I > > Absolutely reliable producer. The only change is if I create the offending > directory by hand (after recovering the filesystem, of course) and then > start the tar again. Then it copies all the files into the previously > offending directory, failing the next time it tries to create a directory. > > >would try to hopefully isolate a filesystem problem from something > >underneath: > > OK. Frankly, I fail to find it at all likely to be anything above. I can > read and write 100s of megabytes of data without an error. The only thing > that I can find failing is creating directories, and that is only when tar > attempts it. The directory structure is going to be written to different > inodes as time goes by, so a failure of mdadm or some structure above it > should cause other widesperead issues. I need to try some other tarballs > when I get the chance, and also try dumping that tar on a different > directory. > I wouldn't disagree, but I'd still run the test. ;) > > >xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump > >xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img > > How big are those files going to be, do you think? The root partition is > not all that huge. There is only a little over 80G free. > I'm not really sure. It depends on how much metadata is on the fs. FWIW, the image should be compressible if you want to transfer it to another server with more room to play with. > >mount /.../fileonrootfs.img /mnt/ > > > >... and repeat the test on that mount using the original tarball (if > >it's on the associated fs, the version from the dump will have no data). > > It is. I've tried copying it to another fs, and it works fine, there. > > >This will create a metadata only dump of the original fs onto another > >storage device (e.g., whatever holds the root fs), restore the metadump > >to a file and mount it loopback. The resulting fs will not contain any > >file data, but will contain all of the metadata such as directory > >structure, etc. and is otherwise mountable and usable for experimental > >purposes. > > > >If the problem is in the filesystem or "above" (as in kernel, memory > >issue, etc.), the test should fail on this mount. If the problem is > >beneath the fs such as somewhere in the storage stack (assuming the > >rootfs storage stack is reliable), it probably shouldn't fail. > > I'll look into this when I can. Right now I have some critical operations > going on both servers (primary and backup), and I can't take down a file > system or even risk doing so. Hopefully I will get around to it this > weekend. > A positive side effect if the problem reproduces with the metadump is you can potentially share a reproducer with the developers here. Note that the image as created above would create an unobfuscated image and thus contain original metadata (filenames, etc.) of the fs. You could also create an obfuscated image (without the -o option) to scramble filenames and whatnot, but I'd suggest to verify that the tarball test reproduces on that independently. Brian From sqbnlzkt@gcbc.com Thu Jul 23 08:24:18 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.8 required=5.0 tests=FREEMAIL_FROM, HK_RANDOM_ENVFROM,HTML_MESSAGE,MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9DB527F7B for ; Thu, 23 Jul 2015 08:24:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 87EBB304039 for ; Thu, 23 Jul 2015 06:24:15 -0700 (PDT) X-ASG-Debug-ID: 1437657851-04cbb06a7041680001-NocioJ Received: from gcbc.com ([124.113.137.45]) by cuda.sgi.com with ESMTP id C76ASgTlnKv6m48g for ; Thu, 23 Jul 2015 06:24:12 -0700 (PDT) X-Barracuda-Envelope-From: sqbnlzkt@gcbc.com X-Barracuda-Apparent-Source-IP: 124.113.137.45 Received: from SKY-20150201SFT ([127.0.0.1]) by localhost via TCP with ESMTPA; Thu, 23 Jul 2015 21:23:53 +0800 MIME-Version: 1.0 From: "Plastic Film" Sender: "Plastic Film" To: xfs@oss.sgi.com Reply-To: "Plastic Film" Date: 23 Jul 2015 21:23:53 +0800 Subject: =?utf-8?B?UkU6UXVvdGVkIHByaWNl?= Content-Type: text/html; charset=utf-8 X-ASG-Orig-Subj: =?utf-8?B?UkU6UXVvdGVkIHByaWNl?= Content-Transfer-Encoding: base64 X-Barracuda-Connect: UNKNOWN[124.113.137.45] X-Barracuda-Start-Time: 1437657851 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.74 X-Barracuda-Spam-Status: No, SCORE=0.74 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21007 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Message-Id: <20150723132415.17F7A106C750@cuda.sgi.com> PGh0bWw+PGJvZHk+PFA+RGVhciBmcmllbmRzLDwvUD4NCjxQPkFuaHVpIEV4Y2VsbGVudCBQ bGFzdGljIEZpbG0gVGVjaCBDby4sIEx0ZCBpcyBhJm5ic3A7IGVudGVycHJpc2Ugb2YmbmJz cDsgc3BlY2lhbCBzaWxhZ2UgZmlsbSwgc3RyZXRjaCBob29kIGZpbG0sIGJpbyBkZWdyYWRh YmxlIG11bGNoIGZpbG0sIGdyYXBlIGNvdmVyIGFuZCBncmVlbmhvdXNlIGZpbG0sIGNsaW5n IGZpbG0sIGJyZWF0aGFibGUgZmlsbSBhbmQgb3RoZXIgaGlnaCBwZXJmb3JtYW5jZSBwcm9m ZXNzaW9uYWwgZmlsbSBtYXRlcmlhbC48L1A+DQo8UD5Xb3JrIHdpdGggR2VybWFuIEJBU0Ys IEFtZXJpY2FuIEV4eG9uTW9iaWwsIERvdyBDaGVtaXN0cnkgb2YgdGhlIHdvcmxkJ3MgdG9w IDUwMCBlbnRlcnByaXNlcy4gPC9QPg0KPFA+QXJlIHlvdSBpbnRlcmVzdGVkIHRvIGdldCBt b3JlIGluZm9ybWF0aW9uPyZuYnNwOyZuYnNwOyBXZWxjb21lIGJhY2sgdG8gdXMuPC9QPg0K PFA+VGhhbmtzIGFuZCByZWdhcmRzPC9QPg0KPFA+QW5odWkgRXhjZWxsZW50IFBsYXN0aWMg RmlsbSBUZWNoLkNvLixMdGQgPEJSPkFkZHJlc3M6Tm8gNiAuIFl1ZSBTaGFuIFJvYWQmbmJz cDsmbmJzcDsgSHVhaW5pbmcgQ291bnR5IEVjb25vbWljIERldmVsb3BtZW50IFpvbmUgT2Yg QW5odWkgLiBQIFIgT2YgQ2hpbmEgPEJSPlRlbDogKzg2IDU1Ni01MTAxODE4LzUxMDE4MTcg PEJSPkZheDogKzg2IDU1Ni00NjM5NzM4Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 IDxCUj5Nb2I6ICs4NiAxMzg2MTY0MTI1NzwvUD48L2JvZHk+PC9odG1sPg== From msnitzer@redhat.com Thu Jul 23 09:33:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 663B37F7B for ; Thu, 23 Jul 2015 09:33:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2F4E5304048 for ; Thu, 23 Jul 2015 07:33:56 -0700 (PDT) X-ASG-Debug-ID: 1437662034-04cb6c02c749bd0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id mPCW3Apsfg646uup (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 07:33:55 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 66E7C9C0DB; Thu, 23 Jul 2015 14:33:54 +0000 (UTC) Received: from localhost (dhcp-25-149.bos.redhat.com [10.18.25.149]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NEXrCV008688 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Thu, 23 Jul 2015 10:33:53 -0400 Date: Thu, 23 Jul 2015 10:33:52 -0400 From: Mike Snitzer To: Dave Chinner Cc: Eric Sandeen , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150723143352.GA23921@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> <20150723051043.GB3902@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150723051043.GB3902@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437662035 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 23 2015 at 1:10am -0400, Dave Chinner wrote: > On Wed, Jul 22, 2015 at 11:28:06AM -0500, Eric Sandeen wrote: > > On 7/22/15 8:34 AM, Mike Snitzer wrote: > > > On Tue, Jul 21 2015 at 10:37pm -0400, > > > Dave Chinner wrote: > > >> On Tue, Jul 21, 2015 at 09:40:29PM -0400, Mike Snitzer wrote: > > >>> I'm open to considering alternative interfaces for getting you the info > > >>> you need. I just don't have a great sense for what mechanism you'd like > > >>> to use. Do we invent a new block device operations table method that > > >>> sets values in a 'struct no_space_strategy' passed in to the > > >>> blockdevice? > > >> > > >> It's long been frowned on having the filesystems dig into block > > >> device structures. We have lots of wrapper functions for getting > > >> information from or performing operations on block devices. (e.g. > > >> bdev_read_only(), bdev_get_queue(), blkdev_issue_flush(), > > >> blkdev_issue_zeroout(), etc) and so I think this is the pattern we'd > > >> need to follow. If we do that - bdev_get_nospace_strategy() - then > > >> how that information gets to the filesystem is completely opaque > > >> at the fs level, and the block layer can implement it in whatever > > >> way is considered sane... > > >> > > >> And, realistically, all we really need returned is a enum to tell us > > >> how the bdev behaves on enospc: > > >> - bdev fails fast, (i.e. immediate ENOSPC) > > >> - bdev fails slow, (i.e. queue for some time, then ENOSPC) > > >> - bdev never fails (i.e. queue forever) > > >> - bdev doesn't support this (i.e. EOPNOTSUPP) > > > > I'm not sure how this is more useful than the bdev simply responding to > > a query of "should we keep trying IOs?" > > - bdev fails fast, (i.e. immediate ENOSPC) > > XFS should use a bound retry behaviour for to allow the possiblity of > the admin adding more space before we shut down the fs. i.e. > XFS fails slow. > > - bdev fails slow, (i.e. queue for some time, then ENOSPC) > > We know that IOs are going to be delayed before they are failed, so > there's no point in retrying as the admin has already had a chance > to resolve the ENOSPC condition before failure was reported. i.e. > XFS fails fast. > > - bdev never fails (i.e. queue forever) > > Block device will appear to hang when it runs out of space. Nothing > XFS can do here because IOs never fail, but we need to note this in > the log at mount time so that filesystem hangs are easily explained > when reported to us. > > - bdev doesn't support this (i.e. EOPNOTSUPP) > > XFS uses default "retry forever" behaviour. > > > > This 'struct no_space_strategy' would be invented purely for > > > informational purposes for upper layers' benefit -- I don't consider it > > > a "block device structure" it the traditional sense. > > > > > > I was thinking upper layers would like to know the actual timeout value > > > for the "fails slow" case. As such the 'struct no_space_strategy' would > > > have the enum and the timeout. And would be returned with a call: > > > bdev_get_nospace_strategy(bdev, &no_space_strategy) > > > > Asking for the timeout value seems to add complexity. It could change after > > we ask, and knowing it now requires another layer to be handling timeouts... > > I don't think knowing the bdev timeout is necessary because the > default is most likely to be "fail fast" in this case. i.e. no > retries, just shut down. IOWs, if we describe the configs and > actions in neutral terms, then the default configurations easy for > users to understand. i.e: > > bdev enospc XFS default > ----------- ----------- > Fail slow Fail fast > Fail fast Fail slow > Fail never Fail never, Record in log > EOPNOTSUPP Fail never > > With that in mind, I'm thinking I should drop the > "permanent/transient" error classifications, and change it "failure > behaviour" with the options "fast slow [never]" and only the slow > option has retry/timeout configuration options. I think the "never" > option still needs to "fail at unmount" config variable, but we > enable it by default rather than hanging unmount and requiring a > manual shutdown like we do now.... This all sounds good to me. The simpler XFS configuration looks like a nice improvement. If you just want to stub out the call to bdev_get_nospace_strategy() I can crank through implementing it once I get a few minutes. Btw, not sure what I was thinking when suggesting XFS would benefit from knowing the duration of the thinp no_space_timeout. From lendingtree-partners-xfs=oss.sgi.com@infokotajogja.com Thu Jul 23 10:02:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.1 required=5.0 tests=HTML_IMAGE_RATIO_04, HTML_MESSAGE,MIME_QP_LONG_LINE,T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 491147F7C for ; Thu, 23 Jul 2015 10:02:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id EB0FBAC004 for ; Thu, 23 Jul 2015 08:02:27 -0700 (PDT) X-ASG-Debug-ID: 1437663733-04bdf002314e150003-NocioJ Received: from mail.infokotajogja.com (dedi5999.hostsailor.com [138.99.218.239]) by cuda.sgi.com with ESMTP id rVuBl4mx84iZpVBk for ; Thu, 23 Jul 2015 08:02:25 -0700 (PDT) X-Barracuda-Envelope-From: lendingtree-partners-xfs=oss.sgi.com@infokotajogja.com X-Barracuda-Apparent-Source-IP: 138.99.218.239 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dkim; d=infokotajogja.com; h=Date:From:To:Subject:MIME-Version:Content-Type:Message-ID; i=lendingtree-partners@infokotajogja.com; bh=yixNuI8ThBb8q+W9BONY+e25/AU=; b=nO9Mu1Aa8BrBP+Y+/yKO0fi9AN0rehCmUajw2VuwzIEOsXlgwnO34P9nKUvekxO6qonfYTrwvfn0 oQ2l2CjCMQh46Vu1NCn0z/eluqzwaRy0uGZ1gT0OyxJUtxUItwsJWUXS0bJWn0uyahcNeb6b/h65 s98bFMvj6CqLY4mFNGw= DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=dkim; d=infokotajogja.com; b=YOkAyAjjlQUM1V7tRY0S7SuCkaSHZRNeskC99b7TTVtJs6zMhRn5u2mVdge8YpdVV6eMFxxgDjCx IG/yp+d9FHYIc7ki7V2iYsEPRAlPlE7ibUgCQzlo/fyQ9GfbwAyBAuSpDkBxUq/WtZL61rsqcwsw o4qWN8rWmaH1E+0wB90=; Received: by mail.infokotajogja.com id hm41040001gn for ; Thu, 23 Jul 2015 07:29:04 -0700 (envelope-from ) Date: Thu, 23 Jul 2015 07:29:04 -0700 From: "LendingTree Partners" To: Subject: Mortgage rates are rising. Take advantage of these historic lows. MIME-Version: 1.0 X-ASG-Orig-Subj: Mortgage rates are rising. Take advantage of these historic lows. Content-Type: multipart/alternative; boundary="----=_Part_3700_1638420459.1437660625402" Message-ID: <0.0.0.4F3.1D0C553ED1B4CBA.8B64A4@mail.infokotajogja.com> X-Barracuda-Connect: dedi5999.hostsailor.com[138.99.218.239] X-Barracuda-Start-Time: 1437663745 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.69 X-Barracuda-Spam-Status: No, SCORE=2.69 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085, BSF_SC2_MV0250, DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_04, HTML_MESSAGE, MARKETING_SUBJECT, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21009 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.17 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 1.00 BSF_SC2_MV0250 Custom rule MV0250 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars 0.10 BSF_SC0_SA085 Custom Rule SA085 ------=_Part_3700_1638420459.1437660625402 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Mortgage rates are rising. Take advantage of these historic lows. http://www.infokotajogja.com/a07m86o1G4df.ZsnFjnn0ntv0Mjh97e/play Update Preferences- http://www.infokotajogja.com/24b-86KU14eucZsnFjnn0ntv0Mjh906/same ------=_Part_3700_1638420459.1437660625402 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: quoted-printable =20 LendingTree=20 =20 =20
=20

Mortgage rates are rising. Take advantage of these historic lows.

=20
=20 =20 =20 =20 =20 =20 =20 =20 =20
View as webpage | =20
3D""
=20 =20 =20 =20 =20 =20 =20
 
=20 =20 =20 =20 =20 =20 =20

You= Know How to Get a
Better Mortgage Offer?

Select = a Loan Term

=20 =20 =20 =20 =20 =20 =20
3D"30  3D"15  3D"5/1
=20 =20 =20 =20 =20 =20 =20
3D""
=20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20

  View Multiple Offe= rs Now!

 
 
=20 =20 =20 =20 =20 =20 =20 =20 =20
 

Adverti= sing Disclosures

LendingTr= eePartners.com: Update Preferences | Privacy Policy | Te= rms of Use | Disclosures and Licenses

 
=20
=20
=20
=20
=20
=20
=20
=20
=20
 =20

=20

=20 =20 ------=_Part_3700_1638420459.1437660625402-- From alex@zadarastorage.com Thu Jul 23 10:39:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=STOX_REPLY_TYPE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1ACED7F7C for ; Thu, 23 Jul 2015 10:39:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C6643304039 for ; Thu, 23 Jul 2015 08:39:28 -0700 (PDT) X-ASG-Debug-ID: 1437665965-04bdf0023252570001-NocioJ Received: from mail-wi0-f173.google.com (mail-wi0-f173.google.com [209.85.212.173]) by cuda.sgi.com with ESMTP id nHm8XQmPCCadgKXb (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 23 Jul 2015 08:39:26 -0700 (PDT) X-Barracuda-Envelope-From: alex@zadarastorage.com X-Barracuda-Apparent-Source-IP: 209.85.212.173 Received: by wibud3 with SMTP id ud3so30136114wib.1 for ; Thu, 23 Jul 2015 08:39:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:cc:references:in-reply-to :subject:date:mime-version:content-type:content-transfer-encoding :importance; bh=2+wDCMjPHhpHQ7uRpPNasREUIjtC9cnhwr0MBdhDd5A=; b=XAhNyrwfkXIzRu6AhD+ewxASD7NsZ6TeVLu3g9nCX19eiv9FemT4Jvnb5GkLRUKjfa RnTkpncya5uLsq2f/H4SsRab0UQ+uwXUFged7zRKTh/JveXAVKLOov3N6g0VYvb8HtF0 OFmw08mJs9EYRjfPzm5ncRDCt+iKCmm6nbhjSd3vI1UrfmgZAzF6NTM7Ju5OwMFSkBb9 oEtnKK6ZoNfleqH6qbJdpwOMVLLgqWkEkUEEUByc+PqYiXzQxdRLAFJz0X1TT4iZTPrm kvOmn2azgHcxSvZd2jfb267F1Uce2sa5oR8n4LsduW21m7yUE0qE/KOPsPlx+IGYUmgw 5hOg== X-Gm-Message-State: ALoCoQn62iwUUj6E4JPb/B1Hf3cW/uY12i7G7ewS7XXQ5sKpGTbUYRUQgbNHqyA+gkdbuqGE12pV X-Received: by 10.194.187.51 with SMTP id fp19mr16269419wjc.67.1437665964708; Thu, 23 Jul 2015 08:39:24 -0700 (PDT) Received: from alyakaslap (bzq-169-168-31-234.red.bezeqint.net. [31.168.169.234]) by smtp.gmail.com with ESMTPSA id d17sm8104745wjs.32.2015.07.23.08.39.23 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 23 Jul 2015 08:39:24 -0700 (PDT) Message-ID: <7792DA2A464640B1BC7220973CED41AE@alyakaslap> From: "Alex Lyakas" To: "Christoph Hellwig" , "Dave Chinner" Cc: "Danny Shavit" , , "Yair Hershko" , "Shyam Kaushik" , References: <20150629222651.GG7943@dastard> <20150707000911.GT7943@dastard> <20150707090511.GA21863@infradead.org> In-Reply-To: <20150707090511.GA21863@infradead.org> Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" Date: Thu, 23 Jul 2015 17:39:28 +0200 X-ASG-Orig-Subj: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Mailer: Microsoft Windows Live Mail 15.4.3555.308 X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308 X-Barracuda-Connect: mail-wi0-f173.google.com[209.85.212.173] X-Barracuda-Start-Time: 1437665965 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21009 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hi Dave, Just for completeness, XFS speculative preallocation (that is based now upon the size of the last extent) can still grow up to 4Gb-8Gb (depending on which patches we are pulling). As a result, xfs_iozero can still sometimes trigger 1-2GB writes of zeros in one shot. This turns out to be a bit unfriendly to the drives in some configurations. So we have applied a custom patch to limit the speculative preallocation to 32Mb. Final code will be in the same place. Thanks, Alex. -----Original Message----- From: Christoph Hellwig Sent: 07 July, 2015 11:05 AM To: Dave Chinner Cc: Alex Lyakas ; Danny Shavit ; bfoster@redhat.com ; Yair Hershko ; Shyam Kaushik ; xfs@oss.sgi.com Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" On Tue, Jul 07, 2015 at 10:09:11AM +1000, Dave Chinner wrote: > server crash. i.e. the client side commit is an "fsync" to the > server, and until the server responds with a success to the client > commit RPC the client side will continue to retry sending the data > to the server. > > For the persepctive of metadata (i.e. directory entries) the use of > the "dirsync" mount option is sufficient for HA failover servers to > work correctly as it ensures that directory structure changes are always > committed to disk before the RPC response is sent back to the > client. > > i.e. the "sync" mount option doesn't actually improve data integrity > of an NFS server when you look at the end-to-end NFS protocol > handling of async write data.... You don't need dirsync either. NFS does the right sync usin the commit_metadata export operation without using that big hammer. From msnitzer@redhat.com Thu Jul 23 10:50:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C16B17F86 for ; Thu, 23 Jul 2015 10:50:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5C146AC007 for ; Thu, 23 Jul 2015 08:50:36 -0700 (PDT) X-ASG-Debug-ID: 1437666634-04bdf0023353920001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 0FCDF1l5ep7LmnQu (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 08:50:35 -0700 (PDT) X-Barracuda-Envelope-From: msnitzer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 89F8FB0CE1; Thu, 23 Jul 2015 15:50:34 +0000 (UTC) Received: from localhost (unused [10.10.51.165] (may be forged)) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NFoXfk013465 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 23 Jul 2015 11:50:34 -0400 Date: Thu, 23 Jul 2015 11:50:32 -0400 From: Mike Snitzer To: Dave Chinner Cc: Eric Sandeen , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: [RFC PATCH] block: dm thin: export how block device handles -ENOSPC Message-ID: <20150723155032.GA7246@redhat.com> X-ASG-Orig-Subj: [RFC PATCH] block: dm thin: export how block device handles -ENOSPC References: <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> <20150723051043.GB3902@dastard> <20150723143352.GA23921@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150723143352.GA23921@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437666634 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 23 2015 at 10:33P -0400, Mike Snitzer wrote: > If you just want to stub out the call to bdev_get_nospace_strategy() I > can crank through implementing it once I get a few minutes. I didn't use a 4th EOPNOTSUPP enum since if a device doesn't have any special -ENOSPC handling it'd implicitly be FAST_FAILS_IF_NOSPACE. But if I overlooked some need for it please let me know. >From 1def7c15911bf15dbee96217591856806bd94b80 Mon Sep 17 00:00:00 2001 From: Mike Snitzer Date: Thu, 23 Jul 2015 11:28:43 -0400 Subject: [PATCH] block: dm thin: export how block device handles -ENOSPC DM thin provisioning's handling of -ENOSPC from the underlying data device is configurable. Export this information so that upper layers (e.g. XFS) may train their -ENOSPC handling accordingly. By default all normal block devices won't have any specialized handling (FAST_FAILS_IF_NOSPACE), if the device queues IO for a specified time it will fail slowly (SLOW_FAILS_IF_NOSPACE), otherwise it queues IO indefinitely (NEVER_FAILS_IF_NOSPACE). Suggested-by: Dave Chinner Signed-off-by: Mike Snitzer --- drivers/md/dm-thin.c | 19 +++++++++++++++++-- drivers/md/dm.c | 33 +++++++++++++++++++++++++++++++++ fs/block_dev.c | 10 ++++++++++ include/linux/blkdev.h | 9 +++++++++ include/linux/device-mapper.h | 6 ++++++ 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index d2bbe8c..11cbdf1 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c @@ -3953,7 +3953,7 @@ static struct target_type pool_target = { .name = "thin-pool", .features = DM_TARGET_SINGLETON | DM_TARGET_ALWAYS_WRITEABLE | DM_TARGET_IMMUTABLE, - .version = {1, 16, 0}, + .version = {1, 17, 0}, .module = THIS_MODULE, .ctr = pool_ctr, .dtr = pool_dtr, @@ -4338,9 +4338,23 @@ static void thin_io_hints(struct dm_target *ti, struct queue_limits *limits) limits->max_discard_sectors = 2048 * 1024 * 16; /* 16G */ } +static enum blk_nospace_strategy thin_get_nospace_strategy(struct dm_target *ti) +{ + struct thin_c *tc = ti->private; + struct pool *pool = tc->pool; + + if (pool->pf.error_if_no_space) + return FAST_FAILS_IF_NOSPACE; + + else if (!ACCESS_ONCE(no_space_timeout_secs)) + return NEVER_FAILS_IF_NOSPACE; + + return SLOW_FAILS_IF_NOSPACE; +} + static struct target_type thin_target = { .name = "thin", - .version = {1, 16, 0}, + .version = {1, 17, 0}, .module = THIS_MODULE, .ctr = thin_ctr, .dtr = thin_dtr, @@ -4353,6 +4367,7 @@ static struct target_type thin_target = { .merge = thin_merge, .iterate_devices = thin_iterate_devices, .io_hints = thin_io_hints, + .get_nospace_strategy = thin_get_nospace_strategy, }; /*----------------------------------------------------------------*/ diff --git a/drivers/md/dm.c b/drivers/md/dm.c index ab37ae1..226d856 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -597,6 +597,38 @@ out: return r; } +static enum blk_nospace_strategy dm_blk_get_nospace_strategy(struct block_device *bdev) +{ + struct mapped_device *md = bdev->bd_disk->private_data; + int srcu_idx; + struct dm_table *map; + struct dm_target *tgt; + enum blk_nospace_strategy nospace_strategy = FAST_FAILS_IF_NOSPACE; + + map = dm_get_live_table(md, &srcu_idx); + + if (!map || !dm_table_get_size(map)) + goto out; + + /* We only support devices that have a single target */ + if (dm_table_get_num_targets(map) != 1) + goto out; + + tgt = dm_table_get_target(map, 0); + if (!tgt->type->get_nospace_strategy) + goto out; + + if (dm_suspended_md(md)) + goto out; + + nospace_strategy = tgt->type->get_nospace_strategy(tgt); + +out: + dm_put_live_table(md, srcu_idx); + + return nospace_strategy; +} + static struct dm_io *alloc_io(struct mapped_device *md) { return mempool_alloc(md->io_pool, GFP_NOIO); @@ -3647,6 +3679,7 @@ static const struct block_device_operations dm_blk_dops = { .release = dm_blk_close, .ioctl = dm_blk_ioctl, .getgeo = dm_blk_getgeo, + .get_nospace_strategy = dm_blk_get_nospace_strategy, .owner = THIS_MODULE }; diff --git a/fs/block_dev.c b/fs/block_dev.c index 1982437..a492644 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -469,6 +469,16 @@ long bdev_direct_access(struct block_device *bdev, sector_t sector, } EXPORT_SYMBOL_GPL(bdev_direct_access); +enum blk_nospace_strategy bdev_get_nospace_strategy(struct block_device *bdev) +{ + const struct block_device_operations *ops = bdev->bd_disk->fops; + + if (!ops->get_nospace_strategy) + return FAST_FAILS_IF_NOSPACE; + return ops->get_nospace_strategy(bdev); +} +EXPORT_SYMBOL_GPL(bdev_get_nospace_strategy); + /* * pseudo-fs */ diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d4068c17d..fab5482 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1549,6 +1549,12 @@ static inline bool blk_integrity_is_initialized(struct gendisk *g) #endif /* CONFIG_BLK_DEV_INTEGRITY */ +enum blk_nospace_strategy { + FAST_FAILS_IF_NOSPACE, /* immediate ENOSPC (no special handling) */ + SLOW_FAILS_IF_NOSPACE, /* queue IO for some time, then ENOSPC */ + NEVER_FAILS_IF_NOSPACE, /* queue IO forever */ +}; + struct block_device_operations { int (*open) (struct block_device *, fmode_t); void (*release) (struct gendisk *, fmode_t); @@ -1566,6 +1572,7 @@ struct block_device_operations { int (*getgeo)(struct block_device *, struct hd_geometry *); /* this callback is with swap_lock and sometimes page table lock held */ void (*swap_slot_free_notify) (struct block_device *, unsigned long); + enum blk_nospace_strategy (*get_nospace_strategy) (struct block_device *); struct module *owner; }; @@ -1576,6 +1583,8 @@ extern int bdev_write_page(struct block_device *, sector_t, struct page *, struct writeback_control *); extern long bdev_direct_access(struct block_device *, sector_t, void **addr, unsigned long *pfn, long size); +extern enum blk_nospace_strategy bdev_get_nospace_strategy(struct block_device *); + #else /* CONFIG_BLOCK */ struct block_device; diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 51cc1de..2e3c5d5 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -119,6 +119,11 @@ typedef void (*dm_io_hints_fn) (struct dm_target *ti, */ typedef int (*dm_busy_fn) (struct dm_target *ti); +/* + * Returns how the target handles -ENOSPC from lower layers. + */ +typedef enum blk_nospace_strategy (*dm_get_nospace_strategy_fn) (struct dm_target *ti); + void dm_error(const char *message); struct dm_dev { @@ -164,6 +169,7 @@ struct target_type { dm_busy_fn busy; dm_iterate_devices_fn iterate_devices; dm_io_hints_fn io_hints; + dm_get_nospace_strategy_fn get_nospace_strategy; /* For internal device-mapper use. */ struct list_head list; -- 2.3.2 (Apple Git-55) From pbrown@contracts4commerce.com Thu Jul 23 11:34:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 959497F77 for ; Thu, 23 Jul 2015 11:34:44 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2FDA1AC011 for ; Thu, 23 Jul 2015 09:34:43 -0700 (PDT) X-ASG-Debug-ID: 1437669278-04bdf0023058470001-NocioJ Received: from ptp3.domainsrelay.com (ptp3.domainsrelay.com [209.198.40.3]) by cuda.sgi.com with ESMTP id sl5iULbKXYLfDdKt for ; Thu, 23 Jul 2015 09:34:38 -0700 (PDT) X-Barracuda-Envelope-From: pbrown@contracts4commerce.com X-Barracuda-Apparent-Source-IP: 209.198.40.3 Received: from owner-c52dcf26d (194.12.3.99) by ptp3.domainsrelay.com id hm4bq40001g7 for ; Thu, 23 Jul 2015 12:34:12 -0400 (envelope-from ) Organization: Contracts 4 Commerce Reply-To: pbrown@contracts4commerce.com Message-ID: <337227f14d6a84e1f080218d001160bd@contracts4commerce.com> From: "Peter Brown" To: Subject: Terms and Conditions Date: Thu, 23 Jul 2015 17:24:20 +0100 X-ASG-Orig-Subj: Terms and Conditions MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=SPLITOR00A_001_427340140D" X-Barracuda-Connect: ptp3.domainsrelay.com[209.198.40.3] X-Barracuda-Start-Time: 1437669278 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21012 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format. ------=SPLITOR00A_001_427340140D Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable I am a former law firm=A0Partner and my legal services business, Contracts = 4=20 Commerce, provides=A0companies with their commercial contracts for a low = fixed=20 fee=2E =A0 I am writing to inform you that we have=A0produced new Terms and = Conditions which=20 are=A0for use specifically=A0by businesses in your market sector=2E =A0 Once adapted by us to suit the needs of your Company, our Terms and = Conditions=20 will provide comprehensive coverage for all of your business activities=2E =A0 Please let me know if you would like further details=2E =A0 Kind Regards, =A0 Peter Brown=A0 =A0 ------=SPLITOR00A_001_427340140D Content-Type: text/html; charset="windows-1252" Content-Transfer-Encoding: quoted-printable

I am a former law firm Partner = and my=20 legal services business, Contracts 4 Commerce, provides companies = with=20 their commercial contracts for a low fixed fee.

 

I am writing to inform you that we=20 have produced new Terms and Conditions which have been = specifically=20 developed for use by businesses in your market = sector.=20

 

Once adapted by us to suit the needs = of your=20 Company, our Terms and Conditions will provide comprehensive coverage for = all of=20 your business activities.=20

 

Please let me know if you would like = further=20 details.=20

 

 

Kind=20 regards,

 

Peter=20 Brown

 

------=SPLITOR00A_001_427340140D-- From vgoyal@redhat.com Thu Jul 23 11:44:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 8E52C7F6A for ; Thu, 23 Jul 2015 11:44:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7A8BD304051 for ; Thu, 23 Jul 2015 09:44:01 -0700 (PDT) X-ASG-Debug-ID: 1437669840-04cbb06a6954a10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Ei0xRzXqEiVYHm0C (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 09:44:00 -0700 (PDT) X-Barracuda-Envelope-From: vgoyal@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 3337490258; Thu, 23 Jul 2015 16:43:59 +0000 (UTC) Received: from horse.redhat.com (dhcp-25-157.bos.redhat.com [10.18.25.157]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NGhwAY020403; Thu, 23 Jul 2015 12:43:58 -0400 Received: by horse.redhat.com (Postfix, from userid 10451) id 6D98C202F57; Thu, 23 Jul 2015 12:43:58 -0400 (EDT) Date: Thu, 23 Jul 2015 12:43:58 -0400 From: Vivek Goyal To: Dave Chinner Cc: Eric Sandeen , Mike Snitzer , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150723164358.GA24562@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> <20150723051043.GB3902@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150723051043.GB3902@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437669840 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Thu, Jul 23, 2015 at 03:10:43PM +1000, Dave Chinner wrote: [..] > I don't think knowing the bdev timeout is necessary because the > default is most likely to be "fail fast" in this case. i.e. no > retries, just shut down. IOWs, if we describe the configs and > actions in neutral terms, then the default configurations easy for > users to understand. i.e: > > bdev enospc XFS default > ----------- ----------- > Fail slow Fail fast > Fail fast Fail slow > Fail never Fail never, Record in log > EOPNOTSUPP Fail never > > With that in mind, I'm thinking I should drop the > "permanent/transient" error classifications, and change it "failure > behaviour" with the options "fast slow [never]" and only the slow > option has retry/timeout configuration options. I think the "never" > option still needs to "fail at unmount" config variable, but we > enable it by default rather than hanging unmount and requiring a > manual shutdown like we do now.... I am wondering instead of 4 knobs (fast,slow,never,retry-timeout) can we just do with one knob per error type and that is retry-timout. retry-timeout=0 (Fail fast) retry-timeout=X (Fail slow) retry-timeout=-1 (Never Give up). Also do we really need this timeout per error type. Also would be nice if this timeout was configurable using a mount option. Then we can just specify it during mount time and be done with it. Idea of auto tuning based on what block device is doing sounds reasonable but that should not be a requirement for this patch and can go in even later. It is one of those nice to have features. Thanks Vivek From mpatocka@redhat.com Thu Jul 23 12:08:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 68D507F86 for ; Thu, 23 Jul 2015 12:08:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D8464AC005 for ; Thu, 23 Jul 2015 10:08:39 -0700 (PDT) X-ASG-Debug-ID: 1437671317-04cbb06a74574f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gJNmgc6WBFdk8hJ6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 10:08:38 -0700 (PDT) X-Barracuda-Envelope-From: mpatocka@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id CB5D94C364; Thu, 23 Jul 2015 17:08:37 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (file01.intranet.prod.int.rdu2.redhat.com [10.11.5.7]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NH8aZX032397 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 23 Jul 2015 13:08:37 -0400 Received: from file01.intranet.prod.int.rdu2.redhat.com (localhost [127.0.0.1]) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NH8agW018600; Thu, 23 Jul 2015 13:08:36 -0400 Received: from localhost (mpatocka@localhost) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4/Submit) with ESMTP id t6NH8aV6018595; Thu, 23 Jul 2015 13:08:36 -0400 X-Authentication-Warning: file01.intranet.prod.int.rdu2.redhat.com: mpatocka owned process doing -bs Date: Thu, 23 Jul 2015 13:08:36 -0400 (EDT) From: Mikulas Patocka X-X-Sender: mpatocka@file01.intranet.prod.int.rdu2.redhat.com To: device-mapper development cc: Mike Snitzer , axboe@kernel.dk, Eric Sandeen , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [dm-devel] [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space In-Reply-To: <20150722010056.GC7943@dastard> X-ASG-Orig-Subj: Re: [dm-devel] [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> User-Agent: Alpine 2.02 (LRH 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437671318 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, 22 Jul 2015, Dave Chinner wrote: > On Wed, Jul 22, 2015 at 10:09:23AM +1000, Dave Chinner wrote: > > On Tue, Jul 21, 2015 at 01:47:53PM -0400, Mike Snitzer wrote: > > > On Tue, Jul 21 2015 at 11:34am -0400, Eric Sandeen wrote: > > > > On 7/20/15 5:36 PM, Dave Chinner wrote: > > > > The issue we had discussed previously is that there is no agreement > > > > across block devices about whether ENOSPC is a permanent or temporary > > > > condition. Asking the admin to tune the fs to each block device's > > > > behavior sucks, IMHO. > > > > > > It does suck, but it beats the alternative of XFS continuing to do > > > nothing about the problem. > > > > Just a comment on that: doing nothing is better than doing the wrong > > thing and being stuck with it forever. :) > > > > > Disucssing more with Vivek, might be that XFS would be best served to > > > model what dm-thinp has provided with its 'no_space_timeout'. It > > > defaults to queueing IO for 60 seconds, once the timeout expires the > > > queued IOs getted errored. If set to 0 dm-thinp will queue IO > > > indefinitely. > > > > Yes, that's exactly what I proposed in the thread I referenced in > > my previous email, and what got stuck on the bikeshed wall because > > of these concerns about knob twiddling: > > > > http://oss.sgi.com/archives/xfs/2015-02/msg00346.html > > > > | e.g. if we need configurable error handling, it needs to be > > | configurable for different error types, and it needs to be > > | configurable on a per-mount basis. And it needs to be configurable > > | at runtime, not just at mount time. That kind of leads to using > > | sysfs for this. e.g. for each error type we ned to handle different > > | behaviour for: > > | > > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/type > > | [transient] permanent > > | $ cat /sys/fs/xfs/vda/meta_write_errors/enospc/perm_timeout_seconds > > | 300 > > | $ cat > > | /sys/fs/xfs/vda/meta_write_errors/enospc/perm_max_retry_attempts > > | 50 > > | $ cat > > | /sys/fs/xfs/vda/meta_write_errors/enospc/transient_fail_at_umount > > | 1 > > > > I've rebased this patchset, and I'm cleaning it up now, so in a few > > days I'll have something for review, likely for the 4.3 merge > > window.... > > Just thinking a bit more on how to make this simpler to configure, > is there a simple way for the filesystem to determine the current > config of the dm thinp volume? You can just stop retrying the I/Os when the user attempts to unmount the filesystem - then, you don't need any configuration option. Mikulas > i.e. if the dm-thinp volume is > configured to error out immediately on enospc, then XFS should > default to doing the same thing. having XFS be able to grab this > status at mount time and change the default ENOSPC error config from > transient to permanent on such dm-thinp volumes would go a long way > to making these configs Just Do The Right Thing on block dev enospc > errors... > > e.g. if dm-thinp is configured to queue for 60s and then fail on > ENOSPC, we want XFS to fail immediately on ENOSPC in metadata IO. If > dm-thinp is configured to ENOSPC instantly (i.e. no queueing) then > we want XFS to retry and use it's default retry maximums before > failing permanently. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > -- > dm-devel mailing list > dm-devel@redhat.com > https://www.redhat.com/mailman/listinfo/dm-devel > From aig-direct-life-insurance-xfs=oss.sgi.com@beatingpanic.com Thu Jul 23 13:23:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,LOTS_OF_MONEY, MIME_QP_LONG_LINE,T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 21A997CBF for ; Thu, 23 Jul 2015 13:23:22 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0B176304053 for ; Thu, 23 Jul 2015 11:23:18 -0700 (PDT) X-ASG-Debug-ID: 1437675792-04cbb06a695ea10004-NocioJ Received: from mail.beatingpanic.com (dedi5999.hostsailor.com [138.99.218.240]) by cuda.sgi.com with ESMTP id I3TjEfxulr3L7Ens for ; Thu, 23 Jul 2015 11:23:17 -0700 (PDT) X-Barracuda-Envelope-From: aig-direct-life-insurance-xfs=oss.sgi.com@beatingpanic.com X-Barracuda-Apparent-Source-IP: 138.99.218.240 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dkim; d=beatingpanic.com; h=Date:From:To:Subject:MIME-Version:Content-Type:Message-ID; i=aig-direct-life-insurance@beatingpanic.com; bh=5yAcnb51bzqZET3T9+WH1of2ero=; b=cVEl58MNwYuZs+cyRG2T2WmJICZGAd0Bnizl9MScLClnFakTWTYm7uz4Q/T/fHc72Abvr2gjF6Ar LhXoahADF381bncMLAHcXwku9x5cK40IlBquJWJRJwTGDm74NDMLjw4+OQwi/tyCZ6ZeMBGw1IaG 0+JelUU1Z8TI+MiBUlI= DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=dkim; d=beatingpanic.com; b=g4qIkI9oNcLXGe5HyYFYApz6IPYxC0UUX/wP56Q0+9Ejewn32M1BVKEN+TATlIB8/ynDDjZsnniV j8Iz7BWEHM5u73rr7g85RXiMKbwxWmfwIw6veM+1DNWNiAJVB7cGwtVEky8lWxWxlgt/x4HXCwXY 3LDpBDzm3g4w2GylnBw=; Received: by mail.beatingpanic.com id hm4ohc0001gn for ; Thu, 23 Jul 2015 11:07:11 -0700 (envelope-from ) Date: Thu, 23 Jul 2015 11:07:11 -0700 From: "AIG Direct Life Insurance" To: Subject: Got $16/month? You Could Get Term Life Coverage MIME-Version: 1.0 X-ASG-Orig-Subj: Got $16/month? You Could Get Term Life Coverage Content-Type: multipart/alternative; boundary="----=_Part_5782_11373872.1437672722887" Message-ID: <0.0.0.80F.1D0C572656A65D4.3811C9@mail.beatingpanic.com> X-Barracuda-Connect: dedi5999.hostsailor.com[138.99.218.240] X-Barracuda-Start-Time: 1437675797 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.49 X-Barracuda-Spam-Status: No, SCORE=2.49 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, SARE_SUB_TERM_LIFE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.67 SARE_SUB_TERM_LIFE Spammer subject - insurance -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars ------=_Part_5782_11373872.1437672722887 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Got $16/month? You Could Get Term Life Coverage http://www.beatingpanic.com/sit/a088zA6k14f5ZsnFjnn0ntv0Mjh2cf Update Preferences- http://www.beatingpanic.com/sit/f308HK614kKfaZsnFjnn0ntv0Mjh1a4 ------=_Part_5782_11373872.1437672722887 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: quoted-printable =20 =20 =20 = =20
=20

Got $16/month? You Could Get Term Life Coverage=20

=20 =20 =20 =20 =20 =20 =20 =20 =20 =20
=20
Life= Insurance Starting at $16/Mo For $500,00*
 =20
=20

* Coverage subject to verification of identity and= receipt of payment as required by law but upon issue, is considered effect= ive as of time of application.

Agency services provided by AIG= Direct Insurance Services, Inc.(" AIG Direct" ), CA license #0B5= 7619 and AR license #0100105378, a subsidiary of American General Life Insu= rance Company (AGL), Houston, TX and an affiliate of The United States Life= Insurance Company in the City of New York (US Life), New York, NY. Policie= s issued by AGL except in New York, where issued by US Life. Issuing compan= ies AGL and US Life are responsible for financial obligations of insurance = products and are members of American International Group, Inc. (AIG). Produ= cts may not be available in all states, and product features may vary by st= ate. In NY State, term life insurance is available through US Life, Form #0= 9007N. Advertised Rate examples concerning $16 a month are current as of 06= /08/15 and are for a $500,000, 10- year term life insurance policy for fema= le age 35 in the Preferred Plus Underwriting Class, Form #07007, issued by = AGL, Houston, TX. Premium charges depend on evidence of insurability. Premi= ums increase at the end of the guaranteed term if renewed. Death benefit re= mains level. The policy may be contested for two years from the date of iss= ue for material misstatements or omissions on the application. Policy is li= mited to return of premium paid in the event of suicide within first two ye= ars. INSURANCE ADVERTISEMENT.

© 2015 AIG Direct. All righ= ts reserved

AIG Direct Insurance Services Inc.
9640 Gran= ite Ridge Drive
San Diego, CA 92123

Update Preferences

=20
=20
=20
=20
=20
=20
=20
=20
=20
=20
=20
 =20

=20

=20 =20 ------=_Part_5782_11373872.1437672722887-- From bfoster@redhat.com Thu Jul 23 15:13:34 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B2FA87F86 for ; Thu, 23 Jul 2015 15:13:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 37FF7AC006 for ; Thu, 23 Jul 2015 13:13:34 -0700 (PDT) X-ASG-Debug-ID: 1437682412-04bdf002336d150001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id zjxNiyLDUAApkyri (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 13:13:33 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id C834DC12A7 for ; Thu, 23 Jul 2015 20:13:32 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NKDWVF015699 for ; Thu, 23 Jul 2015 16:13:32 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id EED2C122E55; Thu, 23 Jul 2015 16:13:30 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH RFC 0/2] xfs: fix up EFI/EFD error handling Date: Thu, 23 Jul 2015 16:13:28 -0400 X-ASG-Orig-Subj: [PATCH RFC 0/2] xfs: fix up EFI/EFD error handling Message-Id: <1437682410-51778-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437682413 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi all, This is another quick RFC related to testing issues I'm hitting with my previously posted log recovery fixes. Patch 1 is a small refactor to support patch 2. Patch 2 describes the issues I'm hitting in repeated shutdown and log recovery testing. This passes some spot testing and seems to resolve the hang from the test sequence described in the commit log description, but more testing is definitely required. I _think_ I follow the log callbacks and how the EFI/EFD are expected to be managed, but I could easily be missing something. As it is, I'm off for a long weekend after today so I'm sending this to hopefully get some eyes to sanity check before I get too deep into testing this along with the previous fixes next week... Brian Brian Foster (2): xfs: return committed status from xfs_trans_roll() xfs: fix efi/efd error handling to avoid fs shutdown hangs fs/xfs/xfs_bmap_util.c | 35 ++++++++++++++++++++-------- fs/xfs/xfs_extfree_item.c | 59 +++++++++++++++++++++++++---------------------- fs/xfs/xfs_trans.c | 15 ++++++++++-- fs/xfs/xfs_trans.h | 1 + 4 files changed, 71 insertions(+), 39 deletions(-) -- 2.1.0 From bfoster@redhat.com Thu Jul 23 15:13:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6BD317F94 for ; Thu, 23 Jul 2015 15:13:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 452228F8035 for ; Thu, 23 Jul 2015 13:13:34 -0700 (PDT) X-ASG-Debug-ID: 1437682413-04bdf002316d150001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id PIwAcT9Z1NDfOEaV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 13:13:33 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id D69AFA202A for ; Thu, 23 Jul 2015 20:13:32 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NKDW0i013911 for ; Thu, 23 Jul 2015 16:13:32 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 097A5122EB9; Thu, 23 Jul 2015 16:13:30 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Date: Thu, 23 Jul 2015 16:13:29 -0400 X-ASG-Orig-Subj: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Message-Id: <1437682410-51778-2-git-send-email-bfoster@redhat.com> In-Reply-To: <1437682410-51778-1-git-send-email-bfoster@redhat.com> References: <1437682410-51778-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437682413 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Some callers need to make error handling decisions based on whether the current transaction successfully committed or not. Rename xfs_trans_roll(), add a new parameter and provide a wrapper to preserve existing callers. Signed-off-by: Brian Foster --- fs/xfs/xfs_trans.c | 15 +++++++++++++-- fs/xfs/xfs_trans.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 0582a27..a0ab1da 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -1019,9 +1019,10 @@ xfs_trans_cancel( * chunk we've been working on and get a new transaction to continue. */ int -xfs_trans_roll( +__xfs_trans_roll( struct xfs_trans **tpp, - struct xfs_inode *dp) + struct xfs_inode *dp, + int *committed) { struct xfs_trans *trans; struct xfs_trans_res tres; @@ -1052,6 +1053,7 @@ xfs_trans_roll( if (error) return error; + *committed = 1; trans = *tpp; /* @@ -1074,3 +1076,12 @@ xfs_trans_roll( xfs_trans_ijoin(trans, dp, 0); return 0; } + +int +xfs_trans_roll( + struct xfs_trans **tpp, + struct xfs_inode *dp) +{ + int committed = 0; + return __xfs_trans_roll(tpp, dp, &committed); +} diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 3b21b4e..518ae5c 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -226,6 +226,7 @@ void xfs_trans_log_efd_extent(xfs_trans_t *, xfs_fsblock_t, xfs_extlen_t); int xfs_trans_commit(struct xfs_trans *); +int __xfs_trans_roll(struct xfs_trans **, struct xfs_inode *, int *); int xfs_trans_roll(struct xfs_trans **, struct xfs_inode *); void xfs_trans_cancel(xfs_trans_t *); int xfs_trans_ail_init(struct xfs_mount *); -- 2.1.0 From bfoster@redhat.com Thu Jul 23 15:13:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CA94A7F94 for ; Thu, 23 Jul 2015 15:13:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B154830404E for ; Thu, 23 Jul 2015 13:13:34 -0700 (PDT) X-ASG-Debug-ID: 1437682413-04cbb06a6769e10001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id K9ZnWJTAx24nBmIu (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 13:13:33 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id E137CA98 for ; Thu, 23 Jul 2015 20:13:32 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6NKDWJS011311 for ; Thu, 23 Jul 2015 16:13:32 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 1A11F122E79; Thu, 23 Jul 2015 16:13:31 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH RFC 2/2] xfs: fix efi/efd error handling to avoid fs shutdown hangs Date: Thu, 23 Jul 2015 16:13:30 -0400 X-ASG-Orig-Subj: [PATCH RFC 2/2] xfs: fix efi/efd error handling to avoid fs shutdown hangs Message-Id: <1437682410-51778-3-git-send-email-bfoster@redhat.com> In-Reply-To: <1437682410-51778-1-git-send-email-bfoster@redhat.com> References: <1437682410-51778-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437682413 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Freeing an extent in XFS involves logging an EFI (extent free intention), freeing the actual extent, and logging an EFD (extent free done). The EFI object is created with a reference count of 2: one for the current transaction and one for the subsequently created EFD. Under normal circumstances, the first reference is dropped when the EFI is unpinned and the second reference is dropped when the EFD is committed to the on-disk log. In event of errors or filesystem shutdown, there are various potential cleanup scenarios depending on the state of the EFI/EFD. The cleanup scenarios are confusing and racy, as demonstrated by the following test sequence: # mount $dev $mnt # fsstress -d $mnt -n 99999 -p 16 -z -f fallocate=1 \ -f punch=1 -f creat=1 -f unlink=1 & # sleep 5 # killall -9 fsstress; wait # godown -f $mnt # umount ... in which the final umount can hang due to the AIL being pinned indefinitely by one or more EFI items. This can occur due to several conditions. For example, if the shutdown occurs after the EFI is committed to the on-disk log and the EFD committed to the CIL, but before the EFD committed to the log, the EFD iop_committed() abort handler does not drop its reference to the EFI. Alternatively, manual error injection in the xfs_bmap_finish() codepath shows that if an error occurs after the EFI transaction is committed but before the EFD is constructed and logged, the EFI is never released from the AIL. Update the EFI/EFD item handling code to use a more straightforward and reliable approach to error handling. If the EFI transaction is cancelled, the EFI is freed when the log item is unlocked. If the EFI transaction is committed successfully, from that point forward it is the responsibility of the EFD to drop its EFI reference. This means that the EFI unpin callback only ever drops the log reference to the EFI. It does not free the EFI in the event of log I/O error. This also means that the EFD item must drop its EFI reference either if the EFD transaction is cancelled, committed or itself aborted due to log I/O error. Finally, update xfs_bmap_finish() to ensure that once an EFI transaction is committed, we are guaranteed to construct and log the associated EFD. This ensures that the EFD is aborted and drops the reference to the EFI. Signed-off-by: Brian Foster --- fs/xfs/xfs_bmap_util.c | 35 ++++++++++++++++++++-------- fs/xfs/xfs_extfree_item.c | 59 +++++++++++++++++++++++++---------------------- 2 files changed, 57 insertions(+), 37 deletions(-) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 0f34886c..878b33a 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -88,20 +88,36 @@ xfs_bmap_finish( xfs_trans_log_efi_extent(*tp, efi, free->xbfi_startblock, free->xbfi_blockcount); - error = xfs_trans_roll(tp, NULL); - *committed = 1; + error = __xfs_trans_roll(tp, NULL, committed); + /* - * We have a new transaction, so we should return committed=1, - * even though we're returning an error. + * We have a new transaction, so we should return committed=1, even + * though we're returning an error. If an error was returned after the + * original transaction was committed, defer the error handling until + * the EFD is logged. We do this because a committed EFI requires an EFD + * transaction to be processed to ensure the EFI is released. */ - if (error) + if (error && *committed == 0) { + *committed = 1; return error; + } efd = xfs_trans_get_efd(*tp, efi, flist->xbf_count); for (free = flist->xbf_first; free != NULL; free = next) { next = free->xbfi_next; - if ((error = xfs_free_extent(*tp, free->xbfi_startblock, - free->xbfi_blockcount))) { + + /* + * Free the extent if the above trans roll hasn't failed and log + * the EFD before handling errors from either call to ensure the + * EFI reference is accounted for in the tp. Otherwise, the EFI + * is never released on abort and pins the AIL indefinitely. + */ + if (!error) + error = xfs_free_extent(*tp, free->xbfi_startblock, + free->xbfi_blockcount); + xfs_trans_log_efd_extent(*tp, efd, free->xbfi_startblock, + free->xbfi_blockcount); + if (error) { /* * The bmap free list will be cleaned up at a * higher level. The EFI will be canceled when @@ -118,11 +134,10 @@ xfs_bmap_finish( SHUTDOWN_META_IO_ERROR); return error; } - xfs_trans_log_efd_extent(*tp, efd, free->xbfi_startblock, - free->xbfi_blockcount); xfs_bmap_del_free(flist, NULL, free); } - return 0; + + return error; } int diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index adc8f8f..0e426ab 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -128,12 +128,12 @@ xfs_efi_item_pin( } /* - * While EFIs cannot really be pinned, the unpin operation is the last place at - * which the EFI is manipulated during a transaction. If we are being asked to - * remove the EFI it's because the transaction has been cancelled and by - * definition that means the EFI cannot be in the AIL so remove it from the - * transaction and free it. Otherwise coordinate with xfs_efi_release() - * to determine who gets to free the EFI. + * The unpin operation is the last place an EFI is manipulated in the log. It is + * either inserted in the AIL or aborted in the event of a log I/O error. In + * either case, the EFI transaction has been successfully committed to make it + * this far. Therefore, we expect whoever committed the EFI to construct the EFD + * and manage the EFD's reference to the EFI appropriately. Simply drop the + * log's EFI reference now that the log is done with it. */ STATIC void xfs_efi_item_unpin( @@ -141,14 +141,6 @@ xfs_efi_item_unpin( int remove) { struct xfs_efi_log_item *efip = EFI_ITEM(lip); - - if (remove) { - ASSERT(!(lip->li_flags & XFS_LI_IN_AIL)); - if (lip->li_desc) - xfs_trans_del_item(lip); - xfs_efi_item_free(efip); - return; - } __xfs_efi_release(efip); } @@ -167,6 +159,11 @@ xfs_efi_item_push( return XFS_ITEM_PINNED; } +/* + * The EFI has been either committed or aborted if the transaction has been + * cancelled. If the transaction was cancelled, an EFD isn't going to be + * constructed and thus we free the EFI here directly. + */ STATIC void xfs_efi_item_unlock( struct xfs_log_item *lip) @@ -415,20 +412,27 @@ xfs_efd_item_push( return XFS_ITEM_PINNED; } +/* + * The EFD is either committed or aborted if the transaction is cancelled. If + * the transaction is cancelled, drop our reference to the EFI and free the EFD. + */ STATIC void xfs_efd_item_unlock( struct xfs_log_item *lip) { - if (lip->li_flags & XFS_LI_ABORTED) - xfs_efd_item_free(EFD_ITEM(lip)); + struct xfs_efd_log_item *efdp = EFD_ITEM(lip); + + if (lip->li_flags & XFS_LI_ABORTED) { + xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); + xfs_efd_item_free(efdp); + } } /* - * When the efd item is committed to disk, all we need to do - * is delete our reference to our partner efi item and then - * free ourselves. Since we're freeing ourselves we must - * return -1 to keep the transaction code from further referencing - * this item. + * When the efd item is committed to disk, all we need to do is delete our + * reference to our partner efi item and then free ourselves. Since we're + * freeing ourselves we must return -1 to keep the transaction code from further + * referencing this item. */ STATIC xfs_lsn_t xfs_efd_item_committed( @@ -438,14 +442,15 @@ xfs_efd_item_committed( struct xfs_efd_log_item *efdp = EFD_ITEM(lip); /* - * If we got a log I/O error, it's always the case that the LR with the - * EFI got unpinned and freed before the EFD got aborted. + * Drop the efi reference regardless of whether this item has been + * aborted. Once the EFI transaction is successfully committed, it is + * the sole responsibility of the EFD to clean up the EFI (even if the + * EFI is aborted due to log I/O error). */ - if (!(lip->li_flags & XFS_LI_ABORTED)) - xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); - + xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); xfs_efd_item_free(efdp); - return (xfs_lsn_t)-1; + + return (xfs_lsn_t) -1; } /* -- 2.1.0 From sandeen@sandeen.net Thu Jul 23 15:15:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6B1E67F8E for ; Thu, 23 Jul 2015 15:15:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 34B72304051 for ; Thu, 23 Jul 2015 13:14:59 -0700 (PDT) X-ASG-Debug-ID: 1437682497-04bdf002336d2d0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id rQLWRyWvTK5R7mDW for ; Thu, 23 Jul 2015 13:14:58 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 8BA4663C6061 for ; Thu, 23 Jul 2015 15:14:57 -0500 (CDT) Message-ID: <55B14B40.5030209@sandeen.net> Date: Thu, 23 Jul 2015 15:14:56 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfs_repair: set args.geo in dir2_kill_block Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH] xfs_repair: set args.geo in dir2_kill_block Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437682497 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21020 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This path in xfs_repair: dir2_kill_block libxfs_da_shrink_inode xfs_dir2_shrink_inode xfs_dir2_db_to_da segfaults, because dir2_kill_block() does not initialize args.geo, and a null geometry winds up in xfs_dir2_db_to_da(), which dereferences it. Fix that. Signed-off-by: Eric Sandeen --- diff --git a/repair/phase6.c b/repair/phase6.c index de445c6..0c952ed 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1438,6 +1438,7 @@ dir2_kill_block( args.firstblock = &firstblock; args.flist = &flist; args.whichfork = XFS_DATA_FORK; + args.geo = mp->m_dir_geo; if (da_bno >= mp->m_dir_geo->leafblk && da_bno < mp->m_dir_geo->freeblk) error = -libxfs_da_shrink_inode(&args, da_bno, bp); else From david@fromorbit.com Thu Jul 23 18:01:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D2F3E7F9A for ; Thu, 23 Jul 2015 18:01:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B9C3830405F for ; Thu, 23 Jul 2015 16:01:00 -0700 (PDT) X-ASG-Debug-ID: 1437692456-04cbb06a7472140001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 5by2PuZ182T2hwDi for ; Thu, 23 Jul 2015 16:00:57 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AICQDkcLFVPBqxLXlcgxWBPYJVg3yiMQaaaAQCAoFXTQEBAQEBAQcBAQEBQAE/hCMBAQEDATocIwULCAMOCgklDwUlAwcaE4gmB8o0AQEBAQYCAR8ZhgWFLoUGB4MYgRQFhxONTow5gUeTeYNhgQqBW4FQLDGCSwEBAQ Received: from ppp121-45-177-26.lns20.syd7.internode.on.net (HELO dastard) ([121.45.177.26]) by ipmail04.adl6.internode.on.net with ESMTP; 24 Jul 2015 08:30:55 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZIPTy-0000JQ-Kg; Fri, 24 Jul 2015 09:00:54 +1000 Date: Fri, 24 Jul 2015 09:00:54 +1000 From: Dave Chinner To: Vivek Goyal Cc: Eric Sandeen , Mike Snitzer , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150723230054.GC3902@dastard> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> <20150723051043.GB3902@dastard> <20150723164358.GA24562@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150723164358.GA24562@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1437692457 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21026 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 23, 2015 at 12:43:58PM -0400, Vivek Goyal wrote: > On Thu, Jul 23, 2015 at 03:10:43PM +1000, Dave Chinner wrote: > > [..] > > I don't think knowing the bdev timeout is necessary because the > > default is most likely to be "fail fast" in this case. i.e. no > > retries, just shut down. IOWs, if we describe the configs and > > actions in neutral terms, then the default configurations easy for > > users to understand. i.e: > > > > bdev enospc XFS default > > ----------- ----------- > > Fail slow Fail fast > > Fail fast Fail slow > > Fail never Fail never, Record in log > > EOPNOTSUPP Fail never > > > > With that in mind, I'm thinking I should drop the > > "permanent/transient" error classifications, and change it "failure > > behaviour" with the options "fast slow [never]" and only the slow > > option has retry/timeout configuration options. I think the "never" > > option still needs to "fail at unmount" config variable, but we > > enable it by default rather than hanging unmount and requiring a > > manual shutdown like we do now.... > > I am wondering instead of 4 knobs (fast,slow,never,retry-timeout) can > we just do with one knob per error type and that is retry-timout. "retry-timeout" == "fail slow". i.e. a 5 minute retry timeout is configured as: # echo slow > fail_method # echo 0 > max_retries # echo 300 > retry_timeout > retry-timeout=0 (Fail fast) > retry-timeout=X (Fail slow) > retry-timeout=-1 (Never Give up). What do we do when we want to add a different failure type with different configuration requirements? > Also do we really need this timeout per error type. I don't follow your logic here. What do need a timeout for with either the "never" or "fast" failure configurations? > Also would be nice if this timeout was configurable using a mount > option. Then we can just specify it during mount time and be done > with it. That way lies madness. The error configuration iinfrastructure we need is not just for ENOSPC errors on metadata buffers. We need configurable error behaviour for multiple different errors in multiple different subsystems (e.g. data IO failure vs metadata buffer IO failure vs memory allocation failure vs inode corruption vs freespace corruption vs ....). And we still would need the sysfs interface for querying and configuring at runtime, so mount options are just a bad idea. And with sysfs, the potential future route for automatic configuration at mount time is via udev events and configuration files, similar to block devices. > Idea of auto tuning based on what block device is doing sounds reasonable > but that should not be a requirement for this patch and can go in even > later. It is one of those nice to have features. "this patch"? Just the core infrastructure so far: 11 files changed, 290 insertions(+), 60 deletions(-) and that will need to be split into 4-5 patches for review. There's a bunch of cleanup that preceeds this, and then there's a patch per error type we are going to handle in metadata buffer IO completion. IOWs, the dm-thinp autotuning is just a simple, small patch at the end of a much larger series - it's maybe 10 lines of code in XFS... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 23 18:05:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2BEBD7F9B for ; Thu, 23 Jul 2015 18:05:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id ACD96AC004 for ; Thu, 23 Jul 2015 16:05:18 -0700 (PDT) X-ASG-Debug-ID: 1437692715-04cb6c02c675aa0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id C3Hg3S5cPiFg7xmt for ; Thu, 23 Jul 2015 16:05:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AICQA2crFVPBqxLXlcgxWBPYJVg3yiMgaaaAQCAoFSTQEBAQEBAQcBAQEBQAE/hCMBAQEDATocIwULCAMOCgkaCw8FJQMHGhOIJgfKNAEBAQcCAR8ZhgWFLoUGB4MYgRQBBJRhjDmZIYEKgVuBUCwxgksBAQE Received: from ppp121-45-177-26.lns20.syd7.internode.on.net (HELO dastard) ([121.45.177.26]) by ipmail04.adl6.internode.on.net with ESMTP; 24 Jul 2015 08:35:10 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZIPY5-0000KC-Hx; Fri, 24 Jul 2015 09:05:09 +1000 Date: Fri, 24 Jul 2015 09:05:09 +1000 From: Dave Chinner To: Mikulas Patocka Cc: device-mapper development , axboe@kernel.dk, Eric Sandeen , Mike Snitzer , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, hch@lst.de, Vivek Goyal Subject: Re: [dm-devel] [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150723230509.GD3902@dastard> X-ASG-Orig-Subj: Re: [dm-devel] [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150720151849.GA2282@redhat.com> <20150720223610.GV7943@dastard> <55AE6670.40903@redhat.com> <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1437692715 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21025 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 23, 2015 at 01:08:36PM -0400, Mikulas Patocka wrote: > On Wed, 22 Jul 2015, Dave Chinner wrote: > > On Wed, Jul 22, 2015 at 10:09:23AM +1000, Dave Chinner wrote: > > > On Tue, Jul 21, 2015 at 01:47:53PM -0400, Mike Snitzer wrote: > > > | $ cat > > > | /sys/fs/xfs/vda/meta_write_errors/enospc/transient_fail_at_umount > > > | 1 [...] > You can just stop retrying the I/Os when the user attempts to unmount the > filesystem - then, you don't need any configuration option. See above - the default will do that, but there are users who do not want that unmount behaviour.... -Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 23 18:10:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 93F947F9B for ; Thu, 23 Jul 2015 18:10:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6D2578F8035 for ; Thu, 23 Jul 2015 16:10:07 -0700 (PDT) X-ASG-Debug-ID: 1437693004-04cbb06a6772460001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id Yz4jlsFzvy4q4f3S for ; Thu, 23 Jul 2015 16:10:05 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AHCQBjc7FVPBqxLXlcgxWBPYJVg3yiMgaaaAQCAoFRTQEBAQEBAQcBAQEBQAE/hCQBAQQ6HCMQCAMYCSUPBSUDBxoTiC3KLwEBAQcCAR8ZhgWFLoQuWAeDGIEUBZRhjDmONYpsgQqDKywxgQWBRgEBAQ Received: from ppp121-45-177-26.lns20.syd7.internode.on.net (HELO dastard) ([121.45.177.26]) by ipmail04.adl6.internode.on.net with ESMTP; 24 Jul 2015 08:39:16 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZIPc1-0000KV-0F; Fri, 24 Jul 2015 09:09:13 +1000 Date: Fri, 24 Jul 2015 09:09:12 +1000 From: Dave Chinner To: Alex Lyakas Cc: Christoph Hellwig , Danny Shavit , bfoster@redhat.com, Yair Hershko , Shyam Kaushik , xfs@oss.sgi.com Subject: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" Message-ID: <20150723230912.GE3902@dastard> X-ASG-Orig-Subj: Re: xfs_iext_realloc_indirect and "XFS: possible memory allocation deadlock" References: <20150629222651.GG7943@dastard> <20150707000911.GT7943@dastard> <20150707090511.GA21863@infradead.org> <7792DA2A464640B1BC7220973CED41AE@alyakaslap> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7792DA2A464640B1BC7220973CED41AE@alyakaslap> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1437693004 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21026 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 23, 2015 at 05:39:28PM +0200, Alex Lyakas wrote: > Hi Dave, > Just for completeness, XFS speculative preallocation (that is based > now upon the size of the last extent) can still grow up to 4Gb-8Gb > (depending on which patches we are pulling). As a result, xfs_iozero > can still sometimes trigger 1-2GB writes of zeros in one shot. This > turns out to be a bit unfriendly to the drives in some > configurations. So we have applied a custom patch to limit the > speculative preallocation to 32Mb. It would be much better to change xfs_zero_eof() to convert extents beyond EOF to unwritten extents rather than zero them. That way you still get the benefits of the large speculative prealloc but without the zeroing overhead that wierd sparse write patterns can trigger. I just haven't got around to doing this because it hasn't been reported as a significant problem for anyone until now. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 23 20:31:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8BD8B7F8A for ; Thu, 23 Jul 2015 20:31:32 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 767D78F8059 for ; Thu, 23 Jul 2015 18:31:29 -0700 (PDT) X-ASG-Debug-ID: 1437701483-04cbb06a7074e00001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id CnDkf2HHCdNKndH7 for ; Thu, 23 Jul 2015 18:31:23 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BlCQBrlLFVPBqxLXlcgxWBPYJVg3yiMQaaaAICAQECgU9NAQEBAQEBBwEBAQFAAT+EIwEBAQQdChMNDyMQCBEHAwklDwUlAwcaE4gtuSSQcQEBAQcCAR8ZhgWKKQsHhCwFkWWCfIw5gUeHLYVBimyBCoMrLDGCSwEBAQ Received: from ppp121-45-177-26.lns20.syd7.internode.on.net (HELO dastard) ([121.45.177.26]) by ipmail04.adl6.internode.on.net with ESMTP; 24 Jul 2015 11:01:22 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZIRpZ-0000WR-RJ; Fri, 24 Jul 2015 11:31:21 +1000 Date: Fri, 24 Jul 2015 11:31:21 +1000 From: Dave Chinner To: Matthew Wilcox Cc: xfs@oss.sgi.com Subject: [PATCH 1/4 v2] xfs: call dax_fault on read page faults for DAX Message-ID: <20150724013121.GG3902@dastard> X-ASG-Orig-Subj: [PATCH 1/4 v2] xfs: call dax_fault on read page faults for DAX References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-2-git-send-email-david@fromorbit.com> <20150721135758.GO13681@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150721135758.GO13681@linux.intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1437701483 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21030 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 21, 2015 at 09:57:58AM -0400, Matthew Wilcox wrote: > On Tue, Jul 21, 2015 at 11:09:02AM +1000, Dave Chinner wrote: > > @@ -339,6 +344,8 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > > int error; > > int major = 0; > > > > + WARN_ON_ONCE((vmf->flags & FAULT_FLAG_WRITE) && !complete_unwritten); > > + > > size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT; > > if (vmf->pgoff >= size) > > return VM_FAULT_SIGBUS; > > This warning is always going to trigger for ext2, since it doesn't > support the concept of unwritten extents. Instead, ext2 zeroes the block > before linking it into the tree and returning from get_block. > > > @@ -437,7 +444,7 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > > * as for normal BH based IO completions. > > */ > > error = dax_insert_mapping(inode, &bh, vma, vmf); > > - if (buffer_unwritten(&bh)) > > + if (buffer_unwritten(&bh) && complete_unwritten) > > complete_unwritten(&bh, !error); > > > > out: > > ... so maybe we should do something here like: > > if (buffer_unwritten(&bh)) { > if (complete_unwritten) > complete_unwritten(&bh, !error); > else > BUG_ON(vmf->flags & FAULT_FLAG_WRITE); > } I dislike BUG_ON() calls because they take production systems down when it is not necessary. Failure to convert an unwritten extent is not fatal - we need to warn about it so that the user understands there's a bug that caused the data corruption they are seeing, but we don't need crash the machine... New patch below. Cheers, Dave. -- Dave Chinner david@fromorbit.com xfs: call dax_fault on read page faults for DAX From: Dave Chinner When modifying the patch series to handle the XFS MMAP_LOCK nesting of page faults, I botched the conversion of the read page fault path, and so it is only every calling through the page cache. Re-add the necessary __dax_fault() call for such files. Because the get_blocks callback on read faults may not set up the mapping buffer correctly to allow unwritten extent completion to be run, we need to allow callers of __dax_fault() to pass a null complete_unwritten() callback. The DAX code always zeros the unwritten page when it is read faulted so there are no stale data exposure issues with not doing the conversion. The only downside will be the potential for increased CPU overhead on repeated read faults of the same page. If this proves to be a problem, then the filesystem needs to fix it's get_block callback and provide a convert_unwritten() callback to the read fault path. Signed-off-by: Dave Chinner --- fs/dax.c | 14 ++++++++++++-- fs/xfs/xfs_file.c | 21 +++++++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index c3e21cc..a7f77e1 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -319,6 +319,12 @@ static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh, * @vma: The virtual memory area where the fault occurred * @vmf: The description of the fault * @get_block: The filesystem method used to translate file offsets to blocks + * @complete_unwritten: The filesystem method used to convert unwritten blocks + * to written so the data written to them is exposed. This is required for + * required by write faults for filesystems that will return unwritten + * extent mappings from @get_block, but it is optional for reads as + * dax_insert_mapping() will always zero unwritten blocks. If the fs does + * not support unwritten extents, the it should pass NULL. * * When a page fault occurs, filesystems may call this helper in their * fault handler for DAX files. __dax_fault() assumes the caller has done all @@ -437,8 +443,12 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, * as for normal BH based IO completions. */ error = dax_insert_mapping(inode, &bh, vma, vmf); - if (buffer_unwritten(&bh)) - complete_unwritten(&bh, !error); + if (buffer_unwritten(&bh)) { + if (complete_unwritten) + complete_unwritten(&bh, !error); + else + WARN_ON_ONCE(!(vmf->flags & FAULT_FLAG_WRITE)); + } out: if (error == -ENOMEM) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index f0e8249..db4acc1 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1514,18 +1514,27 @@ xfs_filemap_fault( struct vm_area_struct *vma, struct vm_fault *vmf) { - struct xfs_inode *ip = XFS_I(file_inode(vma->vm_file)); + struct inode *inode = file_inode(vma->vm_file); int ret; - trace_xfs_filemap_fault(ip); + trace_xfs_filemap_fault(XFS_I(inode)); /* DAX can shortcut the normal fault path on write faults! */ - if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(VFS_I(ip))) + if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(inode)) return xfs_filemap_page_mkwrite(vma, vmf); - xfs_ilock(ip, XFS_MMAPLOCK_SHARED); - ret = filemap_fault(vma, vmf); - xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); + xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); + if (IS_DAX(inode)) { + /* + * we do not want to trigger unwritten extent conversion on read + * faults - that is unnecessary overhead and would also require + * changes to xfs_get_blocks_direct() to map unwritten extent + * ioend for conversion on read-only mappings. + */ + ret = __dax_fault(vma, vmf, xfs_get_blocks_direct, NULL); + } else + ret = filemap_fault(vma, vmf); + xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); return ret; } From vgoyal@redhat.com Thu Jul 23 21:34:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id ECF9D7FAF for ; Thu, 23 Jul 2015 21:34:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9173C8F8064 for ; Thu, 23 Jul 2015 19:34:12 -0700 (PDT) X-ASG-Debug-ID: 1437705250-04bdf00232796d0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id I1hqDYEzddSO1q4a (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 23 Jul 2015 19:34:11 -0700 (PDT) X-Barracuda-Envelope-From: vgoyal@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id B715E9C0CF; Fri, 24 Jul 2015 02:34:10 +0000 (UTC) Received: from horse.redhat.com (unused [10.10.51.161] (may be forged)) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6O2Y924019080; Thu, 23 Jul 2015 22:34:10 -0400 Received: by horse.redhat.com (Postfix, from userid 10451) id 785462039E2; Thu, 23 Jul 2015 22:34:09 -0400 (EDT) Date: Thu, 23 Jul 2015 22:34:09 -0400 From: Vivek Goyal To: Dave Chinner Cc: Eric Sandeen , Mike Snitzer , axboe@kernel.dk, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, hch@lst.de Subject: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space Message-ID: <20150724023409.GA1263@redhat.com> X-ASG-Orig-Subj: Re: [RFC PATCH] block: xfs: dm thin: train XFS to give up on retrying IO if thinp is out of space References: <20150721174753.GA8563@redhat.com> <20150722000923.GB7943@dastard> <20150722010056.GC7943@dastard> <20150722014029.GA10628@redhat.com> <20150722023711.GD7943@dastard> <20150722133451.GB16842@redhat.com> <55AFC496.4000009@redhat.com> <20150723051043.GB3902@dastard> <20150723164358.GA24562@redhat.com> <20150723230054.GC3902@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150723230054.GC3902@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1437705251 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, Jul 24, 2015 at 09:00:54AM +1000, Dave Chinner wrote: > On Thu, Jul 23, 2015 at 12:43:58PM -0400, Vivek Goyal wrote: > > On Thu, Jul 23, 2015 at 03:10:43PM +1000, Dave Chinner wrote: > > > > [..] > > > I don't think knowing the bdev timeout is necessary because the > > > default is most likely to be "fail fast" in this case. i.e. no > > > retries, just shut down. IOWs, if we describe the configs and > > > actions in neutral terms, then the default configurations easy for > > > users to understand. i.e: > > > > > > bdev enospc XFS default > > > ----------- ----------- > > > Fail slow Fail fast > > > Fail fast Fail slow > > > Fail never Fail never, Record in log > > > EOPNOTSUPP Fail never > > > > > > With that in mind, I'm thinking I should drop the > > > "permanent/transient" error classifications, and change it "failure > > > behaviour" with the options "fast slow [never]" and only the slow > > > option has retry/timeout configuration options. I think the "never" > > > option still needs to "fail at unmount" config variable, but we > > > enable it by default rather than hanging unmount and requiring a > > > manual shutdown like we do now.... > > > > I am wondering instead of 4 knobs (fast,slow,never,retry-timeout) can > > we just do with one knob per error type and that is retry-timout. > > "retry-timeout" == "fail slow". i.e. a 5 minute retry timeout is > configured as: > > # echo slow > fail_method > # echo 0 > max_retries > # echo 300 > retry_timeout Hi Dave, I am sure I am missing something but I will anyway ask. Why do we need this knob "fail_method". Isn't it sort of implied in other two knobs based on their values. max_retries=0 retry_timeout=0 implies fail_method=fast. A non-zero value of max_retries or retry_timeout implies fail_method=slow A very high value (-1) of either max_retries or retry_timeout implies fail_method="almost never". > > retry-timeout=0 (Fail fast) > > retry-timeout=X (Fail slow) > > retry-timeout=-1 (Never Give up). > > What do we do when we want to add a different failure type > with different configuration requirements? Ok, got it. So we are targettting something very generic so that other cases can be handled too. > > > Also do we really need this timeout per error type. > > I don't follow your logic here. What do need a timeout for with > either the "never" or "fast" failure configurations? Ignore this. I had misunderstood it. > > > Also would be nice if this timeout was configurable using a mount > > option. Then we can just specify it during mount time and be done > > with it. > > That way lies madness. The error configuration iinfrastructure we > need is not just for ENOSPC errors on metadata buffers. We need > configurable error behaviour for multiple different errors in > multiple different subsystems (e.g. data IO failure vs metadata > buffer IO failure vs memory allocation failure vs inode corruption > vs freespace corruption vs ....). > > And we still would need the sysfs interface for querying and > configuring at runtime, so mount options are just a bad idea. And > with sysfs, the potential future route for automatic configuration > at mount time is via udev events and configuration files, similar to > block devices. Agreed that sysfs provides lots of flexibility here. I guess I was just thinking in terms of solving this particular issue we are facing. > > > Idea of auto tuning based on what block device is doing sounds reasonable > > but that should not be a requirement for this patch and can go in even > > later. It is one of those nice to have features. > > "this patch"? Just the core infrastructure so far: I was referring to Mike's patch where we add additional method to block device operations. > > 11 files changed, 290 insertions(+), 60 deletions(-) > > and that will need to be split into 4-5 patches for review. There's > a bunch of cleanup that preceeds this, and then there's a patch per > error type we are going to handle in metadata buffer IO completion. > IOWs, the dm-thinp autotuning is just a simple, small patch at the > end of a much larger series - it's maybe 10 lines of code in XFS... Ok. I will wait for the final patches. Thanks Vivek From eferrer@uccs.edu Fri Jul 24 06:29:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6C55B7F94 for ; Fri, 24 Jul 2015 06:29:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4D8A7304039 for ; Fri, 24 Jul 2015 04:29:48 -0700 (PDT) X-ASG-Debug-ID: 1437737386-04cbb06a7081560001-NocioJ Received: from exchange.uccs.edu (uccs-ex4.uccs.edu [128.198.1.104]) by cuda.sgi.com with ESMTP id y21gAXgsq5uCx3gN (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO); Fri, 24 Jul 2015 04:29:46 -0700 (PDT) X-Barracuda-Envelope-From: eferrer@uccs.edu X-Barracuda-Apparent-Source-IP: 128.198.1.104 Received: from Nano-PC.uccs.edu (128.198.16.44) by UCCS-EX4.uccs.edu (128.198.1.104) with Microsoft SMTP Server (TLS) id 14.3.248.2; Fri, 24 Jul 2015 05:29:45 -0600 Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: Re: Thanks for responding. To: Mohd X-ASG-Orig-Subj: Re: Thanks for responding. From: Date: Fri, 24 Jul 2015 13:26:26 +0200 Reply-To: Message-ID: <72e328c5-7709-4c03-a15a-99f1a47d7da1@UCCS-EX4.uccs.edu> X-Barracuda-Connect: uccs-ex4.uccs.edu[128.198.1.104] X-Barracuda-Start-Time: 1437737386 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC7_SA298e, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21040 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.20 BSF_SC7_SA298e Custom Rule SA298e Hi, I've an offer for you, I know time is fleeting, we profit from it, respond = if you're interested. Mohd Sumari From willy@linux.intel.com Fri Jul 24 08:44:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3AE887F75 for ; Fri, 24 Jul 2015 08:44:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id BBB85AC008 for ; Fri, 24 Jul 2015 06:44:27 -0700 (PDT) X-ASG-Debug-ID: 1437745465-04cb6c02c887210001-NocioJ Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by cuda.sgi.com with ESMTP id NBqYN5L5WtgD73Th for ; Fri, 24 Jul 2015 06:44:26 -0700 (PDT) X-Barracuda-Envelope-From: willy@linux.intel.com X-Barracuda-Apparent-Source-IP: 134.134.136.20 X-Barracuda-IPDD: Level2 [linux.intel.com/134.134.136.20] Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 24 Jul 2015 06:44:26 -0700 X-Barracuda-IPDD: Level2 [linux.intel.com/134.134.136.20] X-Barracuda-IPDD: Level2 [linux.intel.com/134.134.136.20] X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,538,1432623600"; d="scan'208";a="770502875" Received: from sshrimal-mobl2.amr.corp.intel.com (HELO thog.int.wil.cx) ([10.254.77.185]) by orsmga002.jf.intel.com with SMTP; 24 Jul 2015 06:44:25 -0700 Received: by thog.int.wil.cx (Postfix, from userid 1000) id 04B01601FD; Fri, 24 Jul 2015 09:44:23 -0400 (EDT) Date: Fri, 24 Jul 2015 09:44:22 -0400 From: Matthew Wilcox To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/4 v2] xfs: call dax_fault on read page faults for DAX Message-ID: <20150724134422.GV13681@linux.intel.com> X-ASG-Orig-Subj: Re: [PATCH 1/4 v2] xfs: call dax_fault on read page faults for DAX References: <1437440945-23457-1-git-send-email-david@fromorbit.com> <1437440945-23457-2-git-send-email-david@fromorbit.com> <20150721135758.GO13681@linux.intel.com> <20150724013121.GG3902@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150724013121.GG3902@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Barracuda-Connect: mga02.intel.com[134.134.136.20] X-Barracuda-Start-Time: 1437745466 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Fri, Jul 24, 2015 at 11:31:21AM +1000, Dave Chinner wrote: > New patch below. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > xfs: call dax_fault on read page faults for DAX > > From: Dave Chinner > > When modifying the patch series to handle the XFS MMAP_LOCK nesting > of page faults, I botched the conversion of the read page fault > path, and so it is only every calling through the page cache. Re-add > the necessary __dax_fault() call for such files. > > Because the get_blocks callback on read faults may not set up the > mapping buffer correctly to allow unwritten extent completion to be > run, we need to allow callers of __dax_fault() to pass a null > complete_unwritten() callback. The DAX code always zeros the > unwritten page when it is read faulted so there are no stale data > exposure issues with not doing the conversion. The only downside > will be the potential for increased CPU overhead on repeated read > faults of the same page. If this proves to be a problem, then the > filesystem needs to fix it's get_block callback and provide a > convert_unwritten() callback to the read fault path. > > Signed-off-by: Dave Chinner Reviewed-by: Matthew Wilcox > --- > fs/dax.c | 14 ++++++++++++-- > fs/xfs/xfs_file.c | 21 +++++++++++++++------ > 2 files changed, 27 insertions(+), 8 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index c3e21cc..a7f77e1 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -319,6 +319,12 @@ static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh, > * @vma: The virtual memory area where the fault occurred > * @vmf: The description of the fault > * @get_block: The filesystem method used to translate file offsets to blocks > + * @complete_unwritten: The filesystem method used to convert unwritten blocks > + * to written so the data written to them is exposed. This is required for > + * required by write faults for filesystems that will return unwritten > + * extent mappings from @get_block, but it is optional for reads as > + * dax_insert_mapping() will always zero unwritten blocks. If the fs does > + * not support unwritten extents, the it should pass NULL. > * > * When a page fault occurs, filesystems may call this helper in their > * fault handler for DAX files. __dax_fault() assumes the caller has done all > @@ -437,8 +443,12 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > * as for normal BH based IO completions. > */ > error = dax_insert_mapping(inode, &bh, vma, vmf); > - if (buffer_unwritten(&bh)) > - complete_unwritten(&bh, !error); > + if (buffer_unwritten(&bh)) { > + if (complete_unwritten) > + complete_unwritten(&bh, !error); > + else > + WARN_ON_ONCE(!(vmf->flags & FAULT_FLAG_WRITE)); > + } > > out: > if (error == -ENOMEM) > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index f0e8249..db4acc1 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -1514,18 +1514,27 @@ xfs_filemap_fault( > struct vm_area_struct *vma, > struct vm_fault *vmf) > { > - struct xfs_inode *ip = XFS_I(file_inode(vma->vm_file)); > + struct inode *inode = file_inode(vma->vm_file); > int ret; > > - trace_xfs_filemap_fault(ip); > + trace_xfs_filemap_fault(XFS_I(inode)); > > /* DAX can shortcut the normal fault path on write faults! */ > - if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(VFS_I(ip))) > + if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(inode)) > return xfs_filemap_page_mkwrite(vma, vmf); > > - xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > - ret = filemap_fault(vma, vmf); > - xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); > + xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > + if (IS_DAX(inode)) { > + /* > + * we do not want to trigger unwritten extent conversion on read > + * faults - that is unnecessary overhead and would also require > + * changes to xfs_get_blocks_direct() to map unwritten extent > + * ioend for conversion on read-only mappings. > + */ > + ret = __dax_fault(vma, vmf, xfs_get_blocks_direct, NULL); > + } else > + ret = filemap_fault(vma, vmf); > + xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > > return ret; > } From lrhorer@mygrande.net Fri Jul 24 08:47:54 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3D48A7F76 for ; Fri, 24 Jul 2015 08:47:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 26FBB304059 for ; Fri, 24 Jul 2015 06:47:54 -0700 (PDT) X-ASG-Debug-ID: 1437745669-04cbb06a6984ed0001-NocioJ Received: from mail02.lsn.net (mail02.lsn.net [66.90.130.128]) by cuda.sgi.com with ESMTP id Ve4Zql3t07qX0NST for ; Fri, 24 Jul 2015 06:47:49 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.128 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail02.lsn.net (8.14.4/8.13.6) with ESMTP id t6ODldTn004520 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Fri, 24 Jul 2015 08:47:40 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av01.lsn.net Message-ID: <55B241FC.8020207@mygrande.net> Date: Fri, 24 Jul 2015 08:47:40 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Eric Sandeen , Dave Chinner CC: Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> <55B05CF5.8050204@sandeen.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55B05CF5.8050204@sandeen.net> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail02.lsn.net[66.90.130.128] X-Barracuda-Start-Time: 1437745669 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21042 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/22/2015 10:18 PM, Eric Sandeen wrote: > On 7/20/15 2:41 AM, Leslie Rhorer wrote: >> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>>> >>>> I found the problem with md5sum (and probably nfs, as well). One >>>> of the memory modules in the server was bad. The problem with XFS >>>> persists. Every time tar tried to create the directory: >>> >>> Now you need to run xfs_repair. >> >> I do that every time the array implodes. It makes no difference. It >> never mentions cleaning the structure tar says needs cleaning, and >> the next time I run tar on that file, the filesystem craters. >> > > What. > Did. > xfs_repair. > Say. Look. At. My. First. E-mail. From sandeen@sandeen.net Fri Jul 24 09:44:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 781757F83 for ; Fri, 24 Jul 2015 09:44:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 561358F8065 for ; Fri, 24 Jul 2015 07:44:05 -0700 (PDT) X-ASG-Debug-ID: 1437749043-04cb6c02c588850001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id GQJGfuRsGut0D9p5 for ; Fri, 24 Jul 2015 07:44:03 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 0958F63C6061; Fri, 24 Jul 2015 09:44:02 -0500 (CDT) Message-ID: <55B24F32.4080505@sandeen.net> Date: Fri, 24 Jul 2015 09:44:02 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Leslie Rhorer , Dave Chinner CC: Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> <55B05CF5.8050204@sandeen.net> <55B241FC.8020207@mygrande.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55B241FC.8020207@mygrande.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1437749043 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21043 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/24/15 8:47 AM, Leslie Rhorer wrote: > On 7/22/2015 10:18 PM, Eric Sandeen wrote: >> On 7/20/15 2:41 AM, Leslie Rhorer wrote: >>> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>>>> >>>>> I found the problem with md5sum (and probably nfs, as well). One >>>>> of the memory modules in the server was bad. The problem with XFS >>>>> persists. Every time tar tried to create the directory: >>>> >>>> Now you need to run xfs_repair. >>> >>> I do that every time the array implodes. It makes no difference. It >>> never mentions cleaning the structure tar says needs cleaning, and >>> the next time I run tar on that file, the filesystem craters. >>> >> >> What. >> Did. >> xfs_repair. >> Say. > > Look. > At. > My. > First. > E-mail. Your first email contains only a narrative about repair: "Xfs_repair completes, usually with no errors found, or sometimes one or two errors." But we don't know what those one or two errors are. Your second email shows the output of one instance of a completely clean repair. Then you found out that you had bad memory, and Dave asked you to run repair again, having fixed that hardware issue. You said it "never mentions cleaning the structure tar says needs cleaning" What I am asking you is for the full repair output now, so we can see what it *did* say, rather than an interpreted narrative about what it did not say. Stating "repair found no errors" would also be helpful. Your reply above implies that maybe it did find errors, but not ones you felt were related. I'd simply like to know the details, so we can continue to try to resolve your problem. -Eric From Leslie.Rhorer@level3.com Fri Jul 24 10:29:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 005377F94 for ; Fri, 24 Jul 2015 10:29:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A4E55AC008 for ; Fri, 24 Jul 2015 08:29:26 -0700 (PDT) X-ASG-Debug-ID: 1437751764-04bdf0023289010001-NocioJ Received: from mail1.bemta12.messagelabs.com (mail1.bemta12.messagelabs.com [216.82.251.13]) by cuda.sgi.com with ESMTP id t8lHgw3aJAyZ6Nbo (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 24 Jul 2015 08:29:24 -0700 (PDT) X-Barracuda-Envelope-From: Leslie.Rhorer@level3.com X-Barracuda-Apparent-Source-IP: 216.82.251.13 Received: from [216.82.250.51] by server-13.bemta-12.messagelabs.com id 50/E7-03720-3D952B55; Fri, 24 Jul 2015 15:29:23 +0000 X-Env-Sender: Leslie.Rhorer@level3.com X-Msg-Ref: server-11.tower-108.messagelabs.com!1437751747!25012180!1 X-Originating-IP: [209.245.18.37] X-StarScan-Received: X-StarScan-Version: 6.13.16; banners=-,-,- X-VirusChecked: Checked Received: (qmail 9547 invoked from network); 24 Jul 2015 15:29:07 -0000 Received: from bge23000.messagelabs1.prod.broomfield1.level3.net (HELO messagelabs1.level3.com) (209.245.18.37) by server-11.tower-108.messagelabs.com with DHE-RSA-AES256-SHA encrypted SMTP; 24 Jul 2015 15:29:07 -0000 Received: from USIDCWVEHT02.corp.global.level3.com (usidcwveht02.corp.global.level3.com [10.1.142.32]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "USIDCWVEHT02.corp.global.level3.com", Issuer "VIDCCERT0001" (not verified)) by messagelabs1.level3.com (Postfix) with ESMTPS id E3A9A1FB5D; Fri, 24 Jul 2015 15:29:06 +0000 (GMT) Received: from USADCWVEHT01.corp.global.level3.com (10.2.36.141) by USIDCWVEHT02.corp.global.level3.com (10.1.142.32) with Microsoft SMTP Server (TLS) id 14.3.195.1; Fri, 24 Jul 2015 09:29:06 -0600 Received: from USADCWVEMBX07.corp.global.level3.com ([fe80::dcb1:34ff:f303:9468]) by usadcwveht01.corp.global.level3.com ([::1]) with mapi id 14.03.0210.002; Fri, 24 Jul 2015 11:29:06 -0400 From: "Rhorer, Leslie" To: Eric Sandeen , Leslie Rhorer , Dave Chinner CC: Kris Rusocki , "xfs@oss.sgi.com" Subject: RE: XFS File system in trouble Thread-Topic: XFS File system in trouble X-ASG-Orig-Subj: RE: XFS File system in trouble Thread-Index: AdDA9SmMFmf0/9qyTc685D4gyibLFAAoYHsAAAlGqwD///CmAIAAeaYAgAF3zwCAAInQgIAEbYiAgAJCMwCAAA+/AIAAXv8g Date: Fri, 24 Jul 2015 15:29:05 +0000 Message-ID: <03864DDC681E664EBF5D47682BE7D7CF0DF1572D@USADCWVEMBX07.corp.global.level3.com> References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150719232754.GS7943@dastard> <55ACA615.10501@mygrande.net> <55B05CF5.8050204@sandeen.net> <55B241FC.8020207@mygrande.net> <55B24F32.4080505@sandeen.net> In-Reply-To: <55B24F32.4080505@sandeen.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.196.205] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: mail1.bemta12.messagelabs.com[216.82.251.13] X-Barracuda-Start-Time: 1437751764 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21044 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Some weeks ago, there were one or two that had a small number of errors wh= ile dealing with a hardware failure, long since fixed. Since then every on= e of them is clean. I've done at least 20, and every one is clean. If it = weren't, I would never have started this thread. I would have looked for s= ome underlying problem in the hardware, kernel, or software, just as I did = when the other issues arose. In any case, the answer is, "xfs_repair has r= eported nothing but a clean file system ever since I started digging deeper= into this issue." Admittedly, it would be nice to be able to show the details of the xfs_rep= air instances that did have a very small number of corrections, but I can't= provide a screen shot of screens that haven't existed for weeks. I should= be able to take the array down this weekend for further testing, including= the FS dump. -----Original Message----- From: Eric Sandeen [mailto:sandeen@sandeen.net]=20 Sent: Friday, July 24, 2015 9:44 AM To: Leslie Rhorer; Dave Chinner Cc: Kris Rusocki; Rhorer, Leslie; xfs@oss.sgi.com Subject: Re: XFS File system in trouble On 7/24/15 8:47 AM, Leslie Rhorer wrote: > On 7/22/2015 10:18 PM, Eric Sandeen wrote: >> On 7/20/15 2:41 AM, Leslie Rhorer wrote: >>> On 7/19/2015 6:27 PM, Dave Chinner wrote: >>>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>>>> >>>>> I found the problem with md5sum (and probably nfs, as well). =20 >>>>> One of the memory modules in the server was bad. The problem with=20 >>>>> XFS persists. Every time tar tried to create the directory: >>>> >>>> Now you need to run xfs_repair. >>> >>> I do that every time the array implodes. It makes no difference. It=20 >>> never mentions cleaning the structure tar says needs cleaning, and=20 >>> the next time I run tar on that file, the filesystem craters. >>> >> >> What. >> Did. >> xfs_repair. >> Say. >=20 > Look. > At. > My. > First. > E-mail. Your first email contains only a narrative about repair: "Xfs_repair completes, usually with no errors found, or sometimes one or tw= o errors." But we don't know what those one or two errors are. Your second email shows the output of one instance of a completely clean re= pair. Then you found out that you had bad memory, and Dave asked you to run repai= r again, having fixed that hardware issue. You said it "never mentions cleaning the structure tar says needs cleaning" What I am asking you is for the full repair output now, so we can see what = it *did* say, rather than an interpreted narrative about what it did not say. Stating "repair found no errors" would also be helpful. Your reply above i= mplies that maybe it did find errors, but not ones you felt were related. = I'd simply like to know the details, so we can continue to try to resolve y= our problem. -Eric From debbugs@buxtehude.debian.org Fri Jul 24 10:42:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3C8D07F76 for ; Fri, 24 Jul 2015 10:42:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id DC84CAC00A for ; Fri, 24 Jul 2015 08:42:25 -0700 (PDT) X-ASG-Debug-ID: 1437752543-04bdf0023189590001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id bN8jzqY5lYPZlLeQ (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jul 2015 08:42:23 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZIf74-00046r-Tq; Fri, 24 Jul 2015 15:42:18 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793495: CVE-2012-2150 xfsprogs: xfs_metadump information disclosure Reply-To: Moritz Muehlenhoff , 793495@bugs.debian.org X-ASG-Orig-Subj: Bug#793495: CVE-2012-2150 xfsprogs: xfs_metadump information disclosure Resent-From: Moritz Muehlenhoff Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: team@security.debian.org, secure-testing-team@lists.alioth.debian.org, XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Fri, 24 Jul 2015 15:42:15 +0000 Resent-Message-ID: X-Debian-PR-Message: report 793495 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: security X-Debian-PR-Source: xfsprogs Received: via spool by submit@bugs.debian.org id=B.143775252115526 (code B); Fri, 24 Jul 2015 15:42:15 +0000 Received: (at submit) by bugs.debian.org; 24 Jul 2015 15:42:01 +0000 Received: from inutil.org ([83.151.30.8]) by buxtehude.debian.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1ZIf6m-000421-BQ for submit@bugs.debian.org; Fri, 24 Jul 2015 15:42:00 +0000 Received: from dyndsl-095-033-088-010.ewe-ip-backbone.de ([95.33.88.10] helo=pisco.westfalen.local) by inutil.org with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1ZIexM-00036g-4l; Fri, 24 Jul 2015 17:32:16 +0200 Received: from jmm by pisco.westfalen.local with local (Exim 4.86_RC4) (envelope-from ) id 1ZIf6j-0003wy-9a; Fri, 24 Jul 2015 17:41:57 +0200 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Moritz Muehlenhoff To: Debian Bug Tracking System Message-ID: <20150724154157.15119.52609.reportbug@pisco.westfalen.local> X-Mailer: reportbug 6.6.3 Date: Fri, 24 Jul 2015 17:41:57 +0200 X-SA-Exim-Connect-IP: 95.33.88.10 X-SA-Exim-Mail-From: jmm@debian.org X-SA-Exim-Scanned: No (on inutil.org); SAEximRunCond expanded to false Delivered-To: submit@bugs.debian.org X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437752543 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21044 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Package: xfsprogs Version: 3.2.3 Severity: important Tags: security Please see http://seclists.org/oss-sec/2015/q3/181 for details. Cheers, Moritz From debbugs@buxtehude.debian.org Fri Jul 24 10:57:14 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8DBC57FA2 for ; Fri, 24 Jul 2015 10:57:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5BC6D8F8065 for ; Fri, 24 Jul 2015 08:57:11 -0700 (PDT) X-ASG-Debug-ID: 1437753427-04bdf0023289b80001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id PrYPPFsGRpo7cUd5 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jul 2015 08:57:07 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZIfLN-0005iJ-GO; Fri, 24 Jul 2015 15:57:05 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793496: xfsprogs: CVE-2012-2150: xfs_metadump information disclosure flaw Reply-To: Raphael Hertzog , 793496@bugs.debian.org X-ASG-Orig-Subj: Bug#793496: xfsprogs: CVE-2012-2150: xfs_metadump information disclosure flaw Resent-From: Raphael Hertzog Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Fri, 24 Jul 2015 15:57:02 +0000 Resent-Message-ID: X-Debian-PR-Message: report 793496 X-Debian-PR-Package: src:xfsprogs X-Debian-PR-Keywords: security X-Debian-PR-Source: xfsprogs Received: via spool by submit@bugs.debian.org id=B.143775323320248 (code B); Fri, 24 Jul 2015 15:57:02 +0000 Received: (at submit) by bugs.debian.org; 24 Jul 2015 15:53:53 +0000 Received: from mail.vm.ouaza.com ([212.83.178.2]) by buxtehude.debian.org with esmtp (Exim 4.84) (envelope-from ) id 1ZIfIG-0005GM-MV for submit@bugs.debian.org; Fri, 24 Jul 2015 15:53:53 +0000 Received: from x230-buxy.home.ouaza.com (unknown [IPv6:2a01:e35:8a8d:92d0:45c8:c05:cb95:f052]) by mail.vm.ouaza.com (Postfix) with ESMTPSA id 3463A207CF for ; Fri, 24 Jul 2015 17:53:51 +0200 (CEST) Received: by x230-buxy.home.ouaza.com (Postfix, from userid 1000) id 721E6D2343A; Fri, 24 Jul 2015 17:53:50 +0200 (CEST) Date: Fri, 24 Jul 2015 17:53:50 +0200 From: Raphael Hertzog To: submit@bugs.debian.org Message-ID: <20150724155350.GA20872@home.ouaza.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.23 (2014-03-12) X-Virus-Scanned: clamav-milter 0.98.5 at mail X-Virus-Status: Clean Delivered-To: submit@bugs.debian.org X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437753427 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, INFO_TLD X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21045 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain Source: xfsprogs Severity: important Tags: security Hi, the following vulnerability was published for xfsprogs. CVE-2012-2150[0]: xfs_metadump information disclosure flaw If you fix the vulnerability please also make sure to include the CVE (Common Vulnerabilities & Exposures) id in your changelog entry. For further information see: [0] https://security-tracker.debian.org/tracker/CVE-2012-2150 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2150 Please adjust the affected versions in the BTS as needed. There are no upstream patches yet but they should be published shortly according to https://marc.info/?l=oss-security&m=143766249112576&w=2 Cheers, -- Raphaël Hertzog ◈ Debian Developer Support Debian LTS: http://www.freexian.com/services/debian-lts.html Learn to master Debian: http://debian-handbook.info/get/ From debbugs@buxtehude.debian.org Fri Jul 24 11:00:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4430E7FA3 for ; Fri, 24 Jul 2015 11:00:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E96218F8068 for ; Fri, 24 Jul 2015 09:00:10 -0700 (PDT) X-ASG-Debug-ID: 1437753609-04bdf0023389cd0001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id rfGRBV7Hp2GWwukt (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jul 2015 09:00:09 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZIfOJ-0005yA-5w; Fri, 24 Jul 2015 16:00:07 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793496: About the security issues affecting xfsprogs in Squeeze Reply-To: Raphael Hertzog , 793496@bugs.debian.org X-ASG-Orig-Subj: Bug#793496: About the security issues affecting xfsprogs in Squeeze Resent-From: Raphael Hertzog Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Fri, 24 Jul 2015 16:00:05 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 793496 X-Debian-PR-Package: src:xfsprogs X-Debian-PR-Keywords: security X-Debian-PR-Source: xfsprogs Received: via spool by 793496-submit@bugs.debian.org id=B793496.143775346622293 (code B ref 793496); Fri, 24 Jul 2015 16:00:05 +0000 Received: (at 793496) by bugs.debian.org; 24 Jul 2015 15:57:46 +0000 Received: from mail.vm.ouaza.com ([212.83.178.2]) by buxtehude.debian.org with esmtp (Exim 4.84) (envelope-from ) id 1ZIfM1-0005nK-Nk for 793496@bugs.debian.org; Fri, 24 Jul 2015 15:57:46 +0000 Received: from x230-buxy.home.ouaza.com (unknown [IPv6:2a01:e35:8a8d:92d0:45c8:c05:cb95:f052]) by mail.vm.ouaza.com (Postfix) with ESMTPSA id D235C207CF; Fri, 24 Jul 2015 17:57:44 +0200 (CEST) Received: by x230-buxy.home.ouaza.com (Postfix, from userid 1000) id 273ABD2343A; Fri, 24 Jul 2015 17:57:44 +0200 (CEST) Date: Fri, 24 Jul 2015 17:57:44 +0200 From: Raphael Hertzog To: Nathan Scott Cc: debian-lts@lists.debian.org, 793496@bugs.debian.org Message-ID: <20150724155744.GA21140@home.ouaza.com> Mail-Followup-To: Raphael Hertzog , Nathan Scott , debian-lts@lists.debian.org, 793496@bugs.debian.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.23 (2014-03-12) X-Virus-Scanned: clamav-milter 0.98.5 at mail X-Virus-Status: Clean X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437753609 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, INFO_TLD X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21045 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hello Nathan, the Debian LTS team recently reviewed the security issue(s) affecting your package in Squeeze: https://security-tracker.debian.org/tracker/CVE-2012-2150 We decided that we would not prepare a squeeze security update (usually because the security impact is low and that we concentrate our limited resources on higher severity issues and on the most widely used packages). That said the squeeze users would most certainly benefit from a fixed package. If you want to work on such an update, you're welcome to do so. Please try to follow the workflow we have defined here: http://wiki.debian.org/LTS/Development If that workflow is a burden to you, feel free to just prepare an updated source package and send it to debian-lts@lists.debian.org (via a debdiff, or with an URL pointing to the the source package, or even with a pointer to your packaging repository), and the members of the LTS team will take care of the rest. However please make sure to submit a tested package. Thank you very much. Raphaël Hertzog, on behalf of the Debian LTS team. -- Raphaël Hertzog ◈ Debian Developer Support Debian LTS: http://www.freexian.com/services/debian-lts.html Learn to master Debian: http://debian-handbook.info/get/ From debbugs@buxtehude.debian.org Fri Jul 24 11:09:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D2CCB7FA7 for ; Fri, 24 Jul 2015 11:09:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id BEFF7304043 for ; Fri, 24 Jul 2015 09:09:17 -0700 (PDT) X-ASG-Debug-ID: 1437754155-04cb6c02c58a870001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 6JzxooRnyQEKm4p6 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jul 2015 09:09:16 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZIfX6-0006t4-BZ; Fri, 24 Jul 2015 16:09:12 +0000 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 From: owner@bugs.debian.org (Debian Bug Tracking System) To: Raphael Hertzog CC: xfs@oss.sgi.com Subject: Processed (with 1 errors): Merging duplicate bug Message-ID: X-ASG-Orig-Subj: Processed (with 1 errors): Merging duplicate bug References: <20150724160724.GA22778@home.ouaza.com> <20150724155350.GA20872@home.ouaza.com> X-Debian-PR-Package: src:xfsprogs xfsprogs X-Debian-PR-Source: xfsprogs X-Debian-PR-Message: transcript X-Loop: owner@bugs.debian.org Date: Fri, 24 Jul 2015 16:09:12 +0000 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437754156 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21044 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Processing control commands: > forcemerge 793495 -1 Bug #793495 [xfsprogs] CVE-2012-2150 xfsprogs: xfs_metadump information dis= closure Unable to merge bugs because: package of #793496 is 'src:xfsprogs' not 'xfsprogs' Failed to forcibly merge 793495: Did not alter merged bugs. --=20 793495: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793495 793496: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793496 Debian Bug Tracking System Contact owner@bugs.debian.org with problems From debbugs@buxtehude.debian.org Fri Jul 24 11:09:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0135E7FA7 for ; Fri, 24 Jul 2015 11:09:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id E29448F8066 for ; Fri, 24 Jul 2015 09:09:18 -0700 (PDT) X-ASG-Debug-ID: 1437754154-04cb6c02c68a870001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id qbxzOiBvLsA5K4Ry (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jul 2015 09:09:14 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZIfX6-0006st-6m; Fri, 24 Jul 2015 16:09:12 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793496: Merging duplicate bug Reply-To: Raphael Hertzog , 793496@bugs.debian.org X-ASG-Orig-Subj: Bug#793496: Merging duplicate bug Resent-From: Raphael Hertzog Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Fri, 24 Jul 2015 16:09:10 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 793496 X-Debian-PR-Package: src:xfsprogs X-Debian-PR-Keywords: security X-Debian-PR-Source: xfsprogs Received: via spool by 793496-submit@bugs.debian.org id=B793496.143775404726229 (code B ref 793496); Fri, 24 Jul 2015 16:09:10 +0000 Received: (at 793496) by bugs.debian.org; 24 Jul 2015 16:07:27 +0000 Received: from mail.vm.ouaza.com ([212.83.178.2]) by buxtehude.debian.org with esmtp (Exim 4.84) (envelope-from ) id 1ZIfVO-0006or-J5 for 793496@bugs.debian.org; Fri, 24 Jul 2015 16:07:27 +0000 Received: from x230-buxy.home.ouaza.com (home.ouaza.com [88.168.217.45]) by mail.vm.ouaza.com (Postfix) with ESMTPSA id B41A8207CF for <793496@bugs.debian.org>; Fri, 24 Jul 2015 18:07:25 +0200 (CEST) Received: by x230-buxy.home.ouaza.com (Postfix, from userid 1000) id C365BD2343A; Fri, 24 Jul 2015 18:07:24 +0200 (CEST) Date: Fri, 24 Jul 2015 18:07:24 +0200 From: Raphael Hertzog To: 793496@bugs.debian.org Message-ID: <20150724160724.GA22778@home.ouaza.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.23 (2014-03-12) X-Virus-Scanned: clamav-milter 0.98.5 at mail X-Virus-Status: Clean X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437754154 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, INFO_TLD X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21044 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain Control: forcemerge 793495 -1 Sorry, it's a duplicate. Merging it with the other. Cheers, -- Raphaël Hertzog ◈ Debian Developer Support Debian LTS: http://www.freexian.com/services/debian-lts.html Learn to master Debian: http://debian-handbook.info/get/ From debbugs@buxtehude.debian.org Fri Jul 24 11:27:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A0B867FAE for ; Fri, 24 Jul 2015 11:27:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8B650304039 for ; Fri, 24 Jul 2015 09:27:12 -0700 (PDT) X-ASG-Debug-ID: 1437755230-04cb6c02c88af10001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id XrwEejhS7PAk9Rtl (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jul 2015 09:27:11 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZIfoR-0008Hl-D1; Fri, 24 Jul 2015 16:27:07 +0000 X-Loop: owner@bugs.debian.org Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 From: owner@bugs.debian.org (Debian Bug Tracking System) To: =?UTF-8?Q?Rapha=C3=ABl?= Hertzog CC: xfs@oss.sgi.com Subject: Processed: reassign 793496 to xfsprogs, forcibly merging 793495 793496 Message-ID: X-ASG-Orig-Subj: Processed: reassign 793496 to xfsprogs, forcibly merging 793495 793496 References: <1437754967-1888-bts-hertzog@debian.org> X-Debian-PR-Package: xfsprogs src:xfsprogs X-Debian-PR-Source: xfsprogs X-Debian-PR-Message: transcript X-Loop: owner@bugs.debian.org Date: Fri, 24 Jul 2015 16:27:07 +0000 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437755231 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21045 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Processing commands for control@bugs.debian.org: > reassign 793496 xfsprogs Bug #793496 [src:xfsprogs] xfsprogs: CVE-2012-2150: xfs_metadump informatio= n disclosure flaw Bug reassigned from package 'src:xfsprogs' to 'xfsprogs'. Ignoring request to alter found versions of bug #793496 to the same values = previously set Ignoring request to alter fixed versions of bug #793496 to the same values = previously set > forcemerge 793495 793496 Bug #793495 [xfsprogs] CVE-2012-2150 xfsprogs: xfs_metadump information dis= closure Bug #793496 [xfsprogs] xfsprogs: CVE-2012-2150: xfs_metadump information di= sclosure flaw Marked as found in versions xfsprogs/3.2.3. Merged 793495 793496 > thanks Stopping processing here. Please contact me if you need assistance. --=20 793495: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793495 793496: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793496 Debian Bug Tracking System Contact owner@bugs.debian.org with problems From julidynn@yahoo.com Sat Jul 25 00:56:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=FORGED_YAHOO_RCVD, FREEMAIL_FROM autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 47A6D7F6F for ; Sat, 25 Jul 2015 00:56:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 22D5A8F8065 for ; Fri, 24 Jul 2015 22:56:43 -0700 (PDT) X-ASG-Debug-ID: 1437803796-04cbb06a6995af0001-NocioJ Received: from clam.xiaojihuahua.com (clam.xiaojihuahua.com [81.4.109.170]) by cuda.sgi.com with ESMTP id 6V7HVUm8AFNa6eIw for ; Fri, 24 Jul 2015 22:56:37 -0700 (PDT) X-Barracuda-Envelope-From: julidynn@yahoo.com X-Barracuda-Apparent-Source-IP: 81.4.109.170 To: xfs@oss.sgi.com Subject: target *&^ Message-ID: <341bc208525678a139562aaac7381a75@menards.com> X-ASG-Orig-Subj: target *&^ Date: Sat, 25 Jul 2015 07:55:52 +0200 From: "Louis" Reply-To: jonnybear@aliyun.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 680 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: clam.xiaojihuahua.com[81.4.109.170] X-Barracuda-Start-Time: 1437803796 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.41 X-Barracuda-Spam-Status: No, SCORE=1.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=FORGED_YAHOO_RCVD, FORGED_YAHOO_RCVD_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21062 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 FORGED_YAHOO_RCVD 'From' yahoo.com does not match 'Received' headers 1.41 FORGED_YAHOO_RCVD_2 'From' yahoo.com does not match 'Received' headers Hello, You are receiving this email because we wish you to use our target email marketing solutions. Our email marketing can generate tons of new leads to a number of businesses. We would like to help your business reach the next level. && Please contact us if you would require more information. Looking forward to your response. Thanks, Louis Email: lonigib@sina.com From zsstranske@centrum.sk Sat Jul 25 08:19:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.6 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLY, LOTS_OF_MONEY,T_FRT_CONTACT,UNPARSEABLE_RELAY,US_DOLLARS_3 autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D691C7F93 for ; Sat, 25 Jul 2015 08:19:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4ACEAAC003 for ; Sat, 25 Jul 2015 06:19:24 -0700 (PDT) X-ASG-Debug-ID: 1437830361-04cbb06a699ddf0001-NocioJ Received: from gmmr2.centrum.cz (gmmr2.centrum.cz [46.255.227.252]) by cuda.sgi.com with ESMTP id 4yPnrWqooI6RRzIf (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 25 Jul 2015 06:19:22 -0700 (PDT) X-Barracuda-Envelope-From: zsstranske@centrum.sk X-Barracuda-Apparent-Source-IP: 46.255.227.252 Received: from mail1005.cent (mail-g1.snat.cent [10.32.3.101]) by gmmr2.centrum.cz (Postfix) with ESMTP id 5F4766001138; Sat, 25 Jul 2015 15:19:20 +0200 (CEST) Received: by mail1005.cent (Postfix, from userid 33) id 550BD6005AAC6; Sat, 25 Jul 2015 15:19:20 +0200 (CEST) To: Subject: =?utf-8?q?K=C3=A6re_Facebook=2Dbruger=2C?= Received: from 41.203.71.254 (X-Forwarded-For: 41.203.71.254) by mail1005.centrum.cz (centrum.cz multimail) with HTTP X-ASG-Orig-Subj: =?utf-8?q?K=C3=A6re_Facebook=2Dbruger=2C?= Date: Sat, 25 Jul 2015 15:19:20 +0200 From: "Facebook" X-Mailer: Centrum Email 5.3 X-Priority: 3 X-Original-From: zsstranske@centrum.sk MIME-Version: 1.0 Message-Id: <20150725151920.C3B64740@centrum.sk> X-Maser: brud Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: gmmr2.centrum.cz[46.255.227.252] X-Barracuda-Start-Time: 1437830361 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.17 X-Barracuda-Spam-Status: No, SCORE=0.17 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=TO_CC_NONE, UNPARSEABLE_RELAY, US_DOLLARS_3 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21070 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines 0.17 US_DOLLARS_3 BODY: Mentions millions of $ ($NN,NNN,NNN.NN) 0.00 TO_CC_NONE No To: or Cc: header   Kære Facebook-bruger,   Facebook teamet ønsker at informere dig, og lykønske dig for at opstå som vores 2015 Facebook Rewards vinder.   Facebook Rewards program sker hvert andet år. Du er blevet udvalgt tilfældigt af Facebook internet lodtrækningen administrator. Lodtrækningen administrator er et automatiseret program, der vælger Facebook-brugere tilfældigt.   Du er blevet godkendt til at kræve en samlet pengepræmie $ 1.000.000 (en million dollars) Se nedenfor for din vindende oplysninger:   Vindende beløb: $ 1000000 USD (en million dollars) Batchnummer: TFB 12329317635197437-februar / 2015 Ref nummer: TFB 29501870209289 / ES 877   Facebook Rewards program er stolt sponsoreret af Facebook ledelse. Din pengepræmie skal overføres til dig i dit land, hvor din Facebook-konto blev registreret.   For at gøre krav på din pengepræmie, venligst kontakte Facebook Rewards program direktør på følgende e-mail: todd2jackson@hotmail.com Du skal udfylde nedenstående formular:   Dit navn: Din nationalitet: Din nuværende bopælsland: Din alder: Din telefon nr: Dit erhverv: Hvor lang tid har du brugt facebook ?:   Kindly udfylde ovenstående formular, og sende den til studielederen med nedenstående detaljer Email: todd2jackson@hotmail.com   Navn på Facebook belønninger program direktør: Todd Jackson Afdeling: Kontant Slip afdeling. Position: DIREKTØR, Facebook Rewards program.   Når dine oplysninger er modtaget i e-mailen angivet ovenfor, vil programmet direktør kontakte dig med oplysninger om, hvordan du kan gøre krav på pengepræmie uanset hvor du er. Den samlede sum af en million amerikanske dollars udbetales til dig uden nogen forpligtelse eller afhøringer.   For din sikkerhed, anbefales du kraftigt at holde din vindende oplysninger fortrolige, indtil du har modtaget den vindende penge. Du må ikke videregive din vindende oplysninger til en tredjepart. Dette er en sikkerhedsforanstaltning for at beskytte dig, og for at undgå uberettigede misbrug af Facebook belønninger program.   Igen siger vi tillykke fra alle medlemmer og ansatte i Facebook Team. Sørg for at sende din feedback eller forespørgsler til Mr. Todd Jackson på hans e-mail: todd2jackson@hotmail.com   Tak fordi du bruger Facebook.   Hilsen,   Peter Andreas, Program Coordinator, Facebook Rewards Program, 2015. Alle rettigheder forbeholdt. From tytso@thunk.org Sun Jul 26 07:21:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 416A929DF6 for ; Sun, 26 Jul 2015 07:21:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 30106304043 for ; Sun, 26 Jul 2015 05:21:08 -0700 (PDT) X-ASG-Debug-ID: 1437913267-04cb6c02c7b6110001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id HC82dJnMq3xOoGlf (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:07 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=C1b3LnbBATHdzMvhC1NMzNPEEdQj1uSU/sc0Dyc6pH0=; b=fAheK2l74nFYee2Sw85X6vkNPd2JHvFp016A+TMXv/AUgs7PpF9OuK+y9A+vxzvqoiBClE4MAorQsRSdeRiNzqf8RubXK6js6dI1Dp2u5lXGLThHqllszQeGnbofrn/yL3RkIMipxBW8rzCagi0Szoo9V1Wid5jOZ14CpvCKKak=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvR-0003AC-Nm; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 5FB6882050C; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 5/6] xfsprogs: use "unsigned short" instead of ushort Date: Sun, 26 Jul 2015 08:20:54 -0400 X-ASG-Orig-Subj: [PATCH 5/6] xfsprogs: use "unsigned short" instead of ushort Message-Id: <1437913255-7524-6-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1437913255-7524-1-git-send-email-tytso@mit.edu> References: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913267 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Android's bionic libc doesn't define ushort. There isn't a real benefit (other than perhaps conciseness) to use ushort over "unsigned short", and it's only used in a handful of files in xfsprogs. So change over to using unsigned short everywhere. Signed-off-by: Theodore Ts'o --- include/xfs_inode_buf.h | 4 ++-- include/xfs_log_format.h | 4 ++-- include/xfs_log_recover.h | 2 +- libxfs/logitem.c | 2 +- libxfs/xfs_ialloc.c | 4 ++-- logprint/log_misc.c | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/xfs_inode_buf.h b/include/xfs_inode_buf.h index 9308c47..d2ebbe6 100644 --- a/include/xfs_inode_buf.h +++ b/include/xfs_inode_buf.h @@ -28,8 +28,8 @@ struct xfs_icdinode; */ struct xfs_imap { xfs_daddr_t im_blkno; /* starting BB of inode chunk */ - ushort im_len; /* length in BBs of inode chunk */ - ushort im_boffset; /* inode offset in block in bytes */ + unsigned short im_len; /* length in BBs of inode chunk */ + unsigned short im_boffset; /* inode offset in block in bytes */ }; int xfs_imap_to_bp(struct xfs_mount *, struct xfs_trans *, diff --git a/include/xfs_log_format.h b/include/xfs_log_format.h index f0969c7..af212fb 100644 --- a/include/xfs_log_format.h +++ b/include/xfs_log_format.h @@ -456,8 +456,8 @@ static inline uint xfs_icdinode_size(int version) typedef struct xfs_buf_log_format { unsigned short blf_type; /* buf log item type indicator */ unsigned short blf_size; /* size of this item */ - ushort blf_flags; /* misc state */ - ushort blf_len; /* number of blocks in this buf */ + unsigned short blf_flags; /* misc state */ + unsigned short blf_len; /* number of blocks in this buf */ __int64_t blf_blkno; /* starting blkno of this buf */ unsigned int blf_map_size; /* used size of data bitmap in words */ unsigned int blf_data_map[XFS_BLF_DATAMAP_SIZE]; /* dirty bitmap */ diff --git a/include/xfs_log_recover.h b/include/xfs_log_recover.h index 1c55ccb..2fea63d 100644 --- a/include/xfs_log_recover.h +++ b/include/xfs_log_recover.h @@ -52,7 +52,7 @@ typedef struct xlog_recover { struct list_head r_itemq; /* q for items */ } xlog_recover_t; -#define ITEM_TYPE(i) (*(ushort *)(i)->ri_buf[0].i_addr) +#define ITEM_TYPE(i) (*(unsigned short *)(i)->ri_buf[0].i_addr) /* * This is the number of entries in the l_buf_cancel_table used during diff --git a/libxfs/logitem.c b/libxfs/logitem.c index 73d5a9e..2cc29b6 100644 --- a/libxfs/logitem.c +++ b/libxfs/logitem.c @@ -112,7 +112,7 @@ xfs_buf_item_init( bip->bli_buf = bp; bip->bli_format.blf_type = XFS_LI_BUF; bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); - bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); + bip->bli_format.blf_len = (unsigned short)BTOBB(XFS_BUF_COUNT(bp)); XFS_BUF_SET_FSPRIVATE(bp, bip); } diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index b20a9ec..89a57f5 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -1784,7 +1784,7 @@ xfs_imap( imap->im_blkno = XFS_AGB_TO_DADDR(mp, agno, agbno); imap->im_len = XFS_FSB_TO_BB(mp, 1); - imap->im_boffset = (ushort)(offset << mp->m_sb.sb_inodelog); + imap->im_boffset = (unsigned short)(offset << mp->m_sb.sb_inodelog); return 0; } @@ -1812,7 +1812,7 @@ out_map: imap->im_blkno = XFS_AGB_TO_DADDR(mp, agno, cluster_agbno); imap->im_len = XFS_FSB_TO_BB(mp, blks_per_cluster); - imap->im_boffset = (ushort)(offset << mp->m_sb.sb_inodelog); + imap->im_boffset = (unsigned short)(offset << mp->m_sb.sb_inodelog); /* * If the inode number maps to a block outside the bounds diff --git a/logprint/log_misc.c b/logprint/log_misc.c index c0a5c97..e0aee1c 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -252,7 +252,7 @@ xlog_print_trans_buffer(xfs_caddr_t *ptr, int len, int *i, int num_ops) xfs_buf_log_format_t lbuf; int size, blen, map_size, struct_size; __be64 x, y; - ushort flags; + unsigned short flags; /* * memmove to ensure 8-byte alignment for the long longs in -- 2.3.0 From tytso@thunk.org Sun Jul 26 07:21:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 34BC529DF6 for ; Sun, 26 Jul 2015 07:21:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 19F6E304048 for ; Sun, 26 Jul 2015 05:21:10 -0700 (PDT) X-ASG-Debug-ID: 1437913266-04cbb06a69af4a0001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id HiCILb6C4vqaC3tw (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:06 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=zV8B3RPhPXAuJfyEBNcc3mKbcueIkWwNfyiGwG+TD2o=; b=UgMWfm3Kzqd2FbvUg53FejC5+tm2aKYVbl4LjfcbBycHL0dTfWTBnF0i1wBDaMNzn7o+gISzCFjJ3fopaFRiJ1U4pnwmDUDK6paEYRpKB+0v5zK7jOPAtynzukPD9Y0bmxjmJeHGCFUFvJ4MGIoA+7qAe182YS4XsW+GRi1AMAo=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvR-00039t-0b; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 5602882048C; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 3/6] xfsprogs: define and use BUILD_CC in configure.ac for cross compilation Date: Sun, 26 Jul 2015 08:20:52 -0400 X-ASG-Orig-Subj: [PATCH 3/6] xfsprogs: define and use BUILD_CC in configure.ac for cross compilation Message-Id: <1437913255-7524-4-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1437913255-7524-1-git-send-email-tytso@mit.edu> References: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913266 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature In order to support cross-compilation, we need to build gen_crc32table using the C compiler targetted for the build platform, since it is run as part of the build process. Signed-off-by: Theodore Ts'o --- configure.ac | 8 ++++++++ include/builddefs.in | 1 + libxfs/Makefile | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index ae17c68..4cfbd4e 100644 --- a/configure.ac +++ b/configure.ac @@ -8,6 +8,14 @@ AC_PREFIX_DEFAULT(/usr) AC_PROG_LIBTOOL +AC_PROG_CC +if test $cross_compiling = no; then + BUILD_CC="$CC" + AC_SUBST(BUILD_CC) +else + AC_CHECK_PROGS(BUILD_CC, gcc cc) +fi + AC_ARG_ENABLE(shared, [ --enable-shared=[yes/no] Enable use of shared libraries [default=yes]],, enable_shared=yes) diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..1d2d22e 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -64,6 +64,7 @@ PKG_DOC_DIR = @datadir@/doc/@pkg_name@ PKG_LOCALE_DIR = @datadir@/locale CC = @cc@ +BUILD_CC = @BUILD_CC@ AWK = @awk@ SED = @sed@ TAR = @tar@ diff --git a/libxfs/Makefile b/libxfs/Makefile index ae15a5d..6323b81 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -67,7 +67,7 @@ default: crc32selftest ltdepend $(LTLIBRARY) crc32table.h: gen_crc32table.c @echo " [CC] gen_crc32table" - $(Q) $(CC) $(CFLAGS) -o gen_crc32table $< + $(Q) $(BUILD_CC) $(CFLAGS) -o gen_crc32table $< @echo " [GENERATE] $@" $(Q) ./gen_crc32table > crc32table.h @@ -78,7 +78,7 @@ crc32table.h: gen_crc32table.c # disk. crc32selftest: gen_crc32table.c crc32table.h crc32.c @echo " [TEST] CRC32" - $(Q) $(CC) $(CFLAGS) -D CRC32_SELFTEST=1 crc32.c -o $@ + $(Q) $(BUILD_CC) $(CFLAGS) -D CRC32_SELFTEST=1 crc32.c -o $@ $(Q) ./$@ include $(BUILDRULES) -- 2.3.0 From tytso@thunk.org Sun Jul 26 07:21:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8FA9229DFD for ; Sun, 26 Jul 2015 07:21:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2ADAFAC007 for ; Sun, 26 Jul 2015 05:21:10 -0700 (PDT) X-ASG-Debug-ID: 1437913267-04cbb06a67af4a0001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id XcjtDJa2CD5GZ2Ak (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:07 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=Message-Id:Date:Subject:Cc:To:From; bh=895X5ESMwOCPQrU7w+74aES3Q+gXGrEsYU2GvDl9GBE=; b=fQQrlamGZVEs5xUyGRpLx0Fm3M2pDzhJkwBcgux3lq+jcV5BABDoOstDdsxHzJYJsXJE8TzUWEHOkW6FG3RnqXlIFeBgTh3XIAaFS72m2RWonE7mj2czAoviS69T3AKl6Lgp0v+1v6FYFz1uibzyYdZKa3NKammeOmQsr7onxFg=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvQ-00039o-WF; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 458D9820484; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 0/6] Add cross-compilation support for android Date: Sun, 26 Jul 2015 08:20:49 -0400 X-ASG-Orig-Subj: [PATCH 0/6] Add cross-compilation support for android Message-Id: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913267 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature As part of my efforts to port xfstests so it can be used in an Android runtime environment (where running fsstress by hand seems to be the state-of-the-art in file system QA), I needed to make the following changes to xfsprogs so it can be built using cross compilation using Android's bionic C library. Fortunately given XFS's Irix roots, the number of glibc'isms that have kept in was relatively small. Theodore Ts'o (6): xfsprogs: define NBBY if not defined by the system header files xfsprogs: pull in libgen.h to get prototype for basename() xfsprogs: define and use BUILD_CC in configure.ac for cross compilation xfsprogs: avoid use of si_tid in struct xlog_split_item xfsprogs: use "unsigned short" instead of ushort xfsprogs: add missing include of configure.ac | 8 ++++++++ include/builddefs.in | 1 + include/platform_defs.h.in | 5 +++++ include/xfs_inode_buf.h | 4 ++-- include/xfs_log_format.h | 4 ++-- include/xfs_log_recover.h | 2 +- libdisk/evms.c | 1 + libxfs/Makefile | 4 ++-- libxfs/logitem.c | 2 +- libxfs/xfs_ialloc.c | 4 ++-- logprint/log_misc.c | 8 ++++---- 11 files changed, 29 insertions(+), 14 deletions(-) -- 2.3.0 From tytso@thunk.org Sun Jul 26 07:21:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5011E29DFC for ; Sun, 26 Jul 2015 07:21:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 301768F8033 for ; Sun, 26 Jul 2015 05:21:08 -0700 (PDT) X-ASG-Debug-ID: 1437913266-04cb6c02c8b6110001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id T0ENcSnmQBUnsdbT (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:07 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=HDYEGQMKxz5lJ1/+EgolejNTLSNFjIelX4baTxov7m4=; b=slHj4PQSb680chQzWJHw+aLFZmDXPPHrKHmctOKP7WTkGa3x78jWJMmfKHB78RBavQPtCkGTf4nO5m4r5SnsEjxWRGzls2wyYo8ODsk5GzmS6cSMbtBXBmXzZxvgOJZdxitcs0Rq5vY2VTDXoN2InF9kJpULGBL0ynDjtVCXb0Q=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvR-00039p-0I; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 490F5820147; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 1/6] xfsprogs: define NBBY if not defined by the system header files Date: Sun, 26 Jul 2015 08:20:50 -0400 X-ASG-Orig-Subj: [PATCH 1/6] xfsprogs: define NBBY if not defined by the system header files Message-Id: <1437913255-7524-2-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1437913255-7524-1-git-send-email-tytso@mit.edu> References: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913267 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Android's bionic libc doesn't define NBBY; this isn't a standard define, and since all modern/sane platforms have 8 bits per byte, use this as a default. Signed-off-by: Theodore Ts'o --- include/platform_defs.h.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index ac260bc..3e059af 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -178,4 +178,8 @@ typedef unsigned short umode_t; #define max(a,b) (((a)>(b))?(a):(b)) #endif +#ifndef NBBY +#define NBBY 8 +#endif + #endif /* __XFS_PLATFORM_DEFS_H__ */ -- 2.3.0 From tytso@thunk.org Sun Jul 26 07:21:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BE77429E09 for ; Sun, 26 Jul 2015 07:21:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 533DDAC007 for ; Sun, 26 Jul 2015 05:21:11 -0700 (PDT) X-ASG-Debug-ID: 1437913266-04cb6c02c5b6100001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id 5XmOHKgOZdJ5qwVG (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:07 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=VL00phfgaGXhgpn4rIcnWKbnGOh5wAXNhdBqEZHyPqI=; b=QPp40C1V1pEwn+9M751gfBy3Nnl+HccEgwmQiXUZ3siIVgw7yQJsB8z3Nd0eGV+fxYifenmngD8Ftg18+1phJq11ya7me3/UKVswuwBcYb5q3UOJvgFSZbPBzqGJUVW+tFGs0K4oWdXmzfTyBv/XRgUlh+giev2bornRpENC0rk=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvR-0003AD-OQ; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 649EB82052D; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 6/6] xfsprogs: add missing include of Date: Sun, 26 Jul 2015 08:20:55 -0400 X-ASG-Orig-Subj: [PATCH 6/6] xfsprogs: add missing include of Message-Id: <1437913255-7524-7-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1437913255-7524-1-git-send-email-tytso@mit.edu> References: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913267 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature In libdisk/evms.c, fields from struct stat are used without including . Apparently stat.h is included indirectly in glibc's header files; not so in Android's bionic libc. Signed-off-by: Theodore Ts'o --- libdisk/evms.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libdisk/evms.c b/libdisk/evms.c index 4c22ee1..7d41af6 100644 --- a/libdisk/evms.c +++ b/libdisk/evms.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "evms.h" -- 2.3.0 From tytso@thunk.org Sun Jul 26 07:21:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B297229E06 for ; Sun, 26 Jul 2015 07:21:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 382ECAC004 for ; Sun, 26 Jul 2015 05:21:11 -0700 (PDT) X-ASG-Debug-ID: 1437913266-04cb6c02c6b6100001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id BAhabwPOngXZIS83 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:06 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=1fToWGghHoSKUgu0rfxUnHvxxUXN1QR6QlWGUz12lnc=; b=EY5+GMoO5kWONp3cXqJKE1/9yx+FmCzS0xRc1YXH4W2J9sG4nlRHwQ7iGycXNbK4jGPc4gIZ9fLFu4JfT8m3AjK9xA4U/fFGj1318UxYixPQfYAEnQh85g2OjLNGnVo+YbhLtzvYk4EhHOMws6s52oCS/3HiiJUM+kf432zeaHs=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvR-00039q-0U; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 4EEFE820486; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 2/6] xfsprogs: pull in libgen.h to get prototype for basename() Date: Sun, 26 Jul 2015 08:20:51 -0400 X-ASG-Orig-Subj: [PATCH 2/6] xfsprogs: pull in libgen.h to get prototype for basename() Message-Id: <1437913255-7524-3-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1437913255-7524-1-git-send-email-tytso@mit.edu> References: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913266 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature The function prototype for basename() is in , per Posix. Without the the function prototype, the build will throw errors due to the missing prototype. On glibc, using libgen.h will force the use of Poxis's basename(), instead of glibc's basename() with GNU extensions. However, xfsprogs doesn't depend on any of the GNU extensions, so this is fine. Signed-off-by: Theodore Ts'o --- include/platform_defs.h.in | 1 + 1 file changed, 1 insertion(+) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 3e059af..bfab7cc 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -35,6 +35,7 @@ #include #include #include +#include #undef HAVE___U32 #ifdef HAVE___U32 -- 2.3.0 From tytso@thunk.org Sun Jul 26 07:21:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B661029E09 for ; Sun, 26 Jul 2015 07:21:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 50C5DAC00A for ; Sun, 26 Jul 2015 05:21:09 -0700 (PDT) X-ASG-Debug-ID: 1437913267-04bdf00233b4750001-NocioJ Received: from imap.thunk.org (imap.thunk.org [74.207.234.97]) by cuda.sgi.com with ESMTP id wYBt0nRnTAQFqNMb (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 05:21:07 -0700 (PDT) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 74.207.234.97 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=ZQpJxix3qKrI4e7yEe17Kdda5D1RLd7U/JK0MZfWQmc=; b=SYfr32QJRuJBzyVecFA/Lgf8ODMWZtKU+K5hHFimideTWVemw/+Omxssb9G4FrXa+/A6QDFkgKXqYIZJnRFVje0nifkerEMZ00aD0kz/QKmEtmTLCuMIuIKAUQEcAIq3pE5Mi+9m/o6/U9LpWBwuNzZTLyoxKrQgrbScKKxGWqI=; Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.84) (envelope-from ) id 1ZJKvR-00039w-1a; Sun, 26 Jul 2015 12:21:05 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 5ADDC8204FB; Sun, 26 Jul 2015 08:21:04 -0400 (EDT) From: Theodore Ts'o To: xfs@oss.sgi.com Cc: Theodore Ts'o , fstests@vger.kernel.org Subject: [PATCH 4/6] xfsprogs: avoid use of si_tid in struct xlog_split_item Date: Sun, 26 Jul 2015 08:20:53 -0400 X-ASG-Orig-Subj: [PATCH 4/6] xfsprogs: avoid use of si_tid in struct xlog_split_item Message-Id: <1437913255-7524-5-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 2.3.0 In-Reply-To: <1437913255-7524-1-git-send-email-tytso@mit.edu> References: <1437913255-7524-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: imap.thunk.org[74.207.234.97] X-Barracuda-Start-Time: 1437913267 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature In Android's bionic libc (as well as the Linux kernel's include/uapi/asm-generic/siginfo.h), si_tid is a #define to provide backwards compatibility for the timerid in the siginfo structure. This breaks the compile of logprint/log_misc.c. Change this to be si_xtid in order to avoid a namespace collision Signed-off-by: Theodore Ts'o --- logprint/log_misc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/logprint/log_misc.c b/logprint/log_misc.c index c9286c6..c0a5c97 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -76,7 +76,7 @@ char *trans_type[] = { typedef struct xlog_split_item { struct xlog_split_item *si_next; struct xlog_split_item *si_prev; - xlog_tid_t si_tid; + xlog_tid_t si_xtid; int si_skip; } xlog_split_item_t; @@ -161,7 +161,7 @@ xlog_print_add_to_trans(xlog_tid_t tid, xlog_split_item_t *item; item = (xlog_split_item_t *)calloc(sizeof(xlog_split_item_t), 1); - item->si_tid = tid; + item->si_xtid = tid; item->si_skip = skip; item->si_next = split_list; item->si_prev = NULL; @@ -183,7 +183,7 @@ xlog_print_find_tid(xlog_tid_t tid, uint was_cont) return 0; } while (listp) { - if (listp->si_tid == tid) + if (listp->si_xtid == tid) break; listp = listp->si_next; } -- 2.3.0 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 024E37F6A for ; Sun, 26 Jul 2015 11:16:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E49A1304039 for ; Sun, 26 Jul 2015 09:16:05 -0700 (PDT) X-ASG-Debug-ID: 1437927363-04cb6c02c5ba030001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id PCFC9by0PTfOtYb8 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:03 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOao-0000O3-J7 for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:03 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: xfsprogs: fix and clean up installed headers V2 Date: Sun, 26 Jul 2015 18:13:19 +0200 X-ASG-Orig-Subj: xfsprogs: fix and clean up installed headers V2 Message-Id: <1437927209-31354-1-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927363 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This series ensures we only install the minimum required headers, and especially no autoconf-generated header that might differ for different targets in multiarch setups. Note that I'd like to see this in the first xfsprogs release that includes the libxfs infrastructure changes, as it fixes regressions in the amount of installed internals in those. Changes since V1: - dropped a cleanup patch Dave didn't like - dropped two more cleanup patches that aren't really related From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D8FBF7F69 for ; Sun, 26 Jul 2015 11:16:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C6BBB304039 for ; Sun, 26 Jul 2015 09:16:09 -0700 (PDT) X-ASG-Debug-ID: 1437927367-04cb6c02c8ba040001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id OmWy2YA5iPsXEG2X (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:07 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOas-0000OF-Iu for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:07 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 01/10] xfsprogs: don't install internal header files Date: Sun, 26 Jul 2015 18:13:20 +0200 X-ASG-Orig-Subj: [PATCH 01/10] xfsprogs: don't install internal header files Message-Id: <1437927209-31354-2-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927367 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 All the headers in $(HFILES) are internal to xfsprogs and should not be installed. Signed-off-by: Christoph Hellwig --- libxfs/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libxfs/Makefile b/libxfs/Makefile index 98e0e28..c85f1ed 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -139,7 +139,7 @@ install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(QAHFILES)) $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* install-dev: install - $(INSTALL) -m 644 $(PKGHFILES) $(HFILES) $(PKG_INC_DIR) + $(INSTALL) -m 644 $(PKGHFILES) $(PKG_INC_DIR) install-qa: install-dev $(INSTALL) -m 644 $(QAHFILES) $(PKG_INC_DIR) -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:13 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D9BCA7F74 for ; Sun, 26 Jul 2015 11:16:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C61A5304039 for ; Sun, 26 Jul 2015 09:16:13 -0700 (PDT) X-ASG-Debug-ID: 1437927371-04cb6c02c6ba040001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id N7ZkQMA8JtDgpTUv (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:12 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOax-0000OR-4q for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:11 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 02/10] xfsprogs: remove unused macros from xfs_arch.h Date: Sun, 26 Jul 2015 18:13:21 +0200 X-ASG-Orig-Subj: [PATCH 02/10] xfsprogs: remove unused macros from xfs_arch.h Message-Id: <1437927209-31354-3-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927372 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Signed-off-by: Christoph Hellwig --- include/xfs_arch.h | 60 ------------------------------------------------------ 1 file changed, 60 deletions(-) diff --git a/include/xfs_arch.h b/include/xfs_arch.h index 07026c0..903b02a 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -71,64 +71,4 @@ static inline void be64_add_cpu(__be64 *a, __s64 b) *a = cpu_to_be64(be64_to_cpu(*a) + b); } -/* - * get and set integers from potentially unaligned locations - */ - -#define INT_GET_UNALIGNED_16_BE(pointer) \ - ((__u16)((((__u8*)(pointer))[0] << 8) | (((__u8*)(pointer))[1]))) -#define INT_SET_UNALIGNED_16_BE(pointer,value) \ - { \ - ((__u8*)(pointer))[0] = (((value) >> 8) & 0xff); \ - ((__u8*)(pointer))[1] = (((value) ) & 0xff); \ - } - -/* - * In directories inode numbers are stored as unaligned arrays of unsigned - * 8bit integers on disk. - * - * For v1 directories or v2 directories that contain inode numbers that - * do not fit into 32bit the array has eight members, but the first member - * is always zero: - * - * |unused|48-55|40-47|32-39|24-31|16-23| 8-15| 0- 7| - * - * For v2 directories that only contain entries with inode numbers that fit - * into 32bits a four-member array is used: - * - * |24-31|16-23| 8-15| 0- 7| - */ - -#define XFS_GET_DIR_INO4(di) \ - (((__u32)(di).i[0] << 24) | ((di).i[1] << 16) | ((di).i[2] << 8) | ((di).i[3])) - -#define XFS_PUT_DIR_INO4(from, di) \ -do { \ - (di).i[0] = (((from) & 0xff000000ULL) >> 24); \ - (di).i[1] = (((from) & 0x00ff0000ULL) >> 16); \ - (di).i[2] = (((from) & 0x0000ff00ULL) >> 8); \ - (di).i[3] = ((from) & 0x000000ffULL); \ -} while (0) - -#define XFS_DI_HI(di) \ - (((__u32)(di).i[1] << 16) | ((di).i[2] << 8) | ((di).i[3])) -#define XFS_DI_LO(di) \ - (((__u32)(di).i[4] << 24) | ((di).i[5] << 16) | ((di).i[6] << 8) | ((di).i[7])) - -#define XFS_GET_DIR_INO8(di) \ - (((xfs_ino_t)XFS_DI_LO(di) & 0xffffffffULL) | \ - ((xfs_ino_t)XFS_DI_HI(di) << 32)) - -#define XFS_PUT_DIR_INO8(from, di) \ -do { \ - (di).i[0] = 0; \ - (di).i[1] = (((from) & 0x00ff000000000000ULL) >> 48); \ - (di).i[2] = (((from) & 0x0000ff0000000000ULL) >> 40); \ - (di).i[3] = (((from) & 0x000000ff00000000ULL) >> 32); \ - (di).i[4] = (((from) & 0x00000000ff000000ULL) >> 24); \ - (di).i[5] = (((from) & 0x0000000000ff0000ULL) >> 16); \ - (di).i[6] = (((from) & 0x000000000000ff00ULL) >> 8); \ - (di).i[7] = ((from) & 0x00000000000000ffULL); \ -} while (0) - #endif /* __XFS_ARCH_H__ */ -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E4E907F69 for ; Sun, 26 Jul 2015 11:16:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D251330404E for ; Sun, 26 Jul 2015 09:16:21 -0700 (PDT) X-ASG-Debug-ID: 1437927379-04cbb06a67b2ab0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id ekJAGl0DKLpqYSV7 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:19 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOb0-0000OZ-FF for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:19 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 03/10] xfsprogs: remove swab.h Date: Sun, 26 Jul 2015 18:13:22 +0200 X-ASG-Orig-Subj: [PATCH 03/10] xfsprogs: remove swab.h Message-Id: <1437927209-31354-4-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927379 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 The macros in swab.h are only used to implement those in xfs_arch.h, so let's consolidate the two headers. Signed-off-by: Christoph Hellwig --- include/Makefile | 1 - include/gnukfreebsd.h | 1 - include/libxfs.h | 1 - include/swab.h | 194 -------------------------------------------------- include/xfs_arch.h | 191 +++++++++++++++++++++++++++++++++++++++++++++++++ libxfs/crc32.c | 1 - libxfs/libxfs_priv.h | 1 - 7 files changed, 191 insertions(+), 199 deletions(-) delete mode 100644 include/swab.h diff --git a/include/Makefile b/include/Makefile index 91b33b0..f033245 100644 --- a/include/Makefile +++ b/include/Makefile @@ -28,7 +28,6 @@ QAHFILES = libxfs.h \ list.h \ parent.h \ radix-tree.h \ - swab.h \ xfs_arch.h \ xfs_btree_trace.h \ xfs_inode.h \ diff --git a/include/gnukfreebsd.h b/include/gnukfreebsd.h index f2e1bf5..b83c144 100644 --- a/include/gnukfreebsd.h +++ b/include/gnukfreebsd.h @@ -31,7 +31,6 @@ #include #include #include -#include "xfs/swab.h" #define constpp char * const * diff --git a/include/libxfs.h b/include/libxfs.h index ab4cc9a..eda664f 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -28,7 +28,6 @@ #include "xfs/bitops.h" #include "xfs/kmem.h" #include "xfs/radix-tree.h" -#include "xfs/swab.h" #include "xfs/atomic.h" #include "xfs/xfs_types.h" diff --git a/include/swab.h b/include/swab.h deleted file mode 100644 index b06346c..0000000 --- a/include/swab.h +++ /dev/null @@ -1,194 +0,0 @@ -#ifndef SWAB_H -#define SWAB_H - -/* casts are necessary for constants, because we never know how for sure - * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. - */ -#define ___swab16(x) \ -({ \ - __u16 __x = (x); \ - ((__u16)( \ - (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ - (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ -}) - -#define ___swab32(x) \ -({ \ - __u32 __x = (x); \ - ((__u32)( \ - (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ - (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ - (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ - (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ -}) - -#define ___swab64(x) \ -({ \ - __u64 __x = (x); \ - ((__u64)( \ - (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ - (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ - (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ - (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ - (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ - (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ - (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ - (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ -}) - -#define ___constant_swab16(x) \ - ((__u16)( \ - (((__u16)(x) & (__u16)0x00ffU) << 8) | \ - (((__u16)(x) & (__u16)0xff00U) >> 8) )) -#define ___constant_swab32(x) \ - ((__u32)( \ - (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ - (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ - (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ - (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) -#define ___constant_swab64(x) \ - ((__u64)( \ - (__u64)(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ - (__u64)(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ - (__u64)(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ - (__u64)(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ - (__u64)(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ - (__u64)(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ - (__u64)(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ - (__u64)(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56) )) - -/* - * provide defaults when no architecture-specific optimization is detected - */ -#ifndef __arch__swab16 -# define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) -#endif -#ifndef __arch__swab32 -# define __arch__swab32(x) ({ __u32 __tmp = (x) ; ___swab32(__tmp); }) -#endif -#ifndef __arch__swab64 -# define __arch__swab64(x) ({ __u64 __tmp = (x) ; ___swab64(__tmp); }) -#endif - -#ifndef __arch__swab16p -# define __arch__swab16p(x) __arch__swab16(*(x)) -#endif -#ifndef __arch__swab32p -# define __arch__swab32p(x) __arch__swab32(*(x)) -#endif -#ifndef __arch__swab64p -# define __arch__swab64p(x) __arch__swab64(*(x)) -#endif - -#ifndef __arch__swab16s -# define __arch__swab16s(x) do { *(x) = __arch__swab16p((x)); } while (0) -#endif -#ifndef __arch__swab32s -# define __arch__swab32s(x) do { *(x) = __arch__swab32p((x)); } while (0) -#endif -#ifndef __arch__swab64s -# define __arch__swab64s(x) do { *(x) = __arch__swab64p((x)); } while (0) -#endif - - -/* - * Allow constant folding - */ -# define __swab16(x) \ -(__builtin_constant_p((__u16)(x)) ? \ - ___constant_swab16((x)) : \ - __fswab16((x))) -# define __swab32(x) \ -(__builtin_constant_p((__u32)(x)) ? \ - ___constant_swab32((x)) : \ - __fswab32((x))) -# define __swab64(x) \ -(__builtin_constant_p((__u64)(x)) ? \ - ___constant_swab64((x)) : \ - __fswab64((x))) - - -static __inline__ __u16 __fswab16(__u16 x) -{ - return (__extension__ __arch__swab16(x)); -} -static __inline__ __u16 __swab16p(__u16 *x) -{ - return (__extension__ __arch__swab16p(x)); -} -static __inline__ void __swab16s(__u16 *addr) -{ - (__extension__ ({__arch__swab16s(addr);})); -} - -static __inline__ __u32 __fswab32(__u32 x) -{ - return (__extension__ __arch__swab32(x)); -} -static __inline__ __u32 __swab32p(__u32 *x) -{ - return (__extension__ __arch__swab32p(x)); -} -static __inline__ void __swab32s(__u32 *addr) -{ - (__extension__ ({__arch__swab32s(addr);})); -} - -static __inline__ __u64 __fswab64(__u64 x) -{ -# ifdef __SWAB_64_THRU_32__ - __u32 h = x >> 32; - __u32 l = x & ((1ULL<<32)-1); - return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h))); -# else - return (__extension__ __arch__swab64(x)); -# endif -} -static __inline__ __u64 __swab64p(__u64 *x) -{ - return (__extension__ __arch__swab64p(x)); -} -static __inline__ void __swab64s(__u64 *addr) -{ - (__extension__ ({__arch__swab64s(addr);})); -} - -static inline __uint16_t get_unaligned_be16(void *p) -{ - __uint8_t *__p = p; - return __p[0] << 8 | __p[1]; -} - -static inline __uint32_t get_unaligned_be32(void *p) -{ - __uint8_t *__p = p; - return __p[0] << 24 | __p[1] << 16 | __p[2] << 8 | __p[3]; -} - -static inline __uint64_t get_unaligned_be64(void *p) -{ - return (__uint64_t)get_unaligned_be32(p) << 32 | - get_unaligned_be32(p + 4); -} - -static inline void put_unaligned_be16(__uint16_t val, void *p) -{ - __uint8_t *__p = p; - *__p++ = val >> 8; - *__p++ = val; -} - -static inline void put_unaligned_be32(__uint32_t val, void *p) -{ - __uint8_t *__p = p; - put_unaligned_be16(val >> 16, __p); - put_unaligned_be16(val, __p + 2); -} - -static inline void put_unaligned_be64(__uint64_t val, void *p) -{ - put_unaligned_be32(val >> 32, p); - put_unaligned_be32(val, p + 4); -} - -#endif /* SWAB_H */ diff --git a/include/xfs_arch.h b/include/xfs_arch.h index 903b02a..310a17e 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -24,6 +24,159 @@ #undef XFS_NATIVE_HOST #endif +/* + * Casts are necessary for constants, because we never know how for sure + * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. + */ +#define ___swab16(x) \ +({ \ + __u16 __x = (x); \ + ((__u16)( \ + (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ +}) + +#define ___swab32(x) \ +({ \ + __u32 __x = (x); \ + ((__u32)( \ + (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ +}) + +#define ___swab64(x) \ +({ \ + __u64 __x = (x); \ + ((__u64)( \ + (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ +}) + +#define ___constant_swab16(x) \ + ((__u16)( \ + (((__u16)(x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(x) & (__u16)0xff00U) >> 8) )) +#define ___constant_swab32(x) \ + ((__u32)( \ + (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) +#define ___constant_swab64(x) \ + ((__u64)( \ + (__u64)(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56) )) + +/* + * provide defaults when no architecture-specific optimization is detected + */ +#ifndef __arch__swab16 +# define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) +#endif +#ifndef __arch__swab32 +# define __arch__swab32(x) ({ __u32 __tmp = (x) ; ___swab32(__tmp); }) +#endif +#ifndef __arch__swab64 +# define __arch__swab64(x) ({ __u64 __tmp = (x) ; ___swab64(__tmp); }) +#endif + +#ifndef __arch__swab16p +# define __arch__swab16p(x) __arch__swab16(*(x)) +#endif +#ifndef __arch__swab32p +# define __arch__swab32p(x) __arch__swab32(*(x)) +#endif +#ifndef __arch__swab64p +# define __arch__swab64p(x) __arch__swab64(*(x)) +#endif + +#ifndef __arch__swab16s +# define __arch__swab16s(x) do { *(x) = __arch__swab16p((x)); } while (0) +#endif +#ifndef __arch__swab32s +# define __arch__swab32s(x) do { *(x) = __arch__swab32p((x)); } while (0) +#endif +#ifndef __arch__swab64s +# define __arch__swab64s(x) do { *(x) = __arch__swab64p((x)); } while (0) +#endif + + +/* + * Allow constant folding + */ +# define __swab16(x) \ +(__builtin_constant_p((__u16)(x)) ? \ + ___constant_swab16((x)) : \ + __fswab16((x))) +# define __swab32(x) \ +(__builtin_constant_p((__u32)(x)) ? \ + ___constant_swab32((x)) : \ + __fswab32((x))) +# define __swab64(x) \ +(__builtin_constant_p((__u64)(x)) ? \ + ___constant_swab64((x)) : \ + __fswab64((x))) + + +static __inline__ __u16 __fswab16(__u16 x) +{ + return (__extension__ __arch__swab16(x)); +} +static __inline__ __u16 __swab16p(__u16 *x) +{ + return (__extension__ __arch__swab16p(x)); +} +static __inline__ void __swab16s(__u16 *addr) +{ + (__extension__ ({__arch__swab16s(addr);})); +} + +static __inline__ __u32 __fswab32(__u32 x) +{ + return (__extension__ __arch__swab32(x)); +} +static __inline__ __u32 __swab32p(__u32 *x) +{ + return (__extension__ __arch__swab32p(x)); +} +static __inline__ void __swab32s(__u32 *addr) +{ + (__extension__ ({__arch__swab32s(addr);})); +} + +static __inline__ __u64 __fswab64(__u64 x) +{ +# ifdef __SWAB_64_THRU_32__ + __u32 h = x >> 32; + __u32 l = x & ((1ULL<<32)-1); + return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h))); +# else + return (__extension__ __arch__swab64(x)); +# endif +} +static __inline__ __u64 __swab64p(__u64 *x) +{ + return (__extension__ __arch__swab64p(x)); +} +static __inline__ void __swab64s(__u64 *addr) +{ + (__extension__ ({__arch__swab64s(addr);})); +} + #ifdef XFS_NATIVE_HOST #define cpu_to_be16(val) ((__force __be16)(__u16)(val)) #define cpu_to_be32(val) ((__force __be32)(__u32)(val)) @@ -71,4 +224,42 @@ static inline void be64_add_cpu(__be64 *a, __s64 b) *a = cpu_to_be64(be64_to_cpu(*a) + b); } +static inline __uint16_t get_unaligned_be16(void *p) +{ + __uint8_t *__p = p; + return __p[0] << 8 | __p[1]; +} + +static inline __uint32_t get_unaligned_be32(void *p) +{ + __uint8_t *__p = p; + return __p[0] << 24 | __p[1] << 16 | __p[2] << 8 | __p[3]; +} + +static inline __uint64_t get_unaligned_be64(void *p) +{ + return (__uint64_t)get_unaligned_be32(p) << 32 | + get_unaligned_be32(p + 4); +} + +static inline void put_unaligned_be16(__uint16_t val, void *p) +{ + __uint8_t *__p = p; + *__p++ = val >> 8; + *__p++ = val; +} + +static inline void put_unaligned_be32(__uint32_t val, void *p) +{ + __uint8_t *__p = p; + put_unaligned_be16(val >> 16, __p); + put_unaligned_be16(val, __p + 2); +} + +static inline void put_unaligned_be64(__uint64_t val, void *p) +{ + put_unaligned_be32(val >> 32, p); + put_unaligned_be32(val, p + 4); +} + #endif /* __XFS_ARCH_H__ */ diff --git a/libxfs/crc32.c b/libxfs/crc32.c index bc1fc98..63b1467 100644 --- a/libxfs/crc32.c +++ b/libxfs/crc32.c @@ -34,7 +34,6 @@ */ #include "xfs/platform_defs.h" -#include "xfs/swab.h" #include "xfs/xfs_arch.h" #include "crc32defs.h" diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 72e124b..445a6dc 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -66,7 +66,6 @@ #include "xfs/bitops.h" #include "xfs/kmem.h" #include "xfs/radix-tree.h" -#include "xfs/swab.h" #include "xfs/atomic.h" #include "xfs/xfs_types.h" -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C5F667F82 for ; Sun, 26 Jul 2015 11:16:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9A61A304039 for ; Sun, 26 Jul 2015 09:16:26 -0700 (PDT) X-ASG-Debug-ID: 1437927384-04cbb06a70b2ac0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id NHW27En1WbYGY6Ej (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:24 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOb9-0000Om-AB for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:24 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 04/10] xfsprogs: only install *format.h headers in install-qa Date: Sun, 26 Jul 2015 18:13:23 +0200 X-ASG-Orig-Subj: [PATCH 04/10] xfsprogs: only install *format.h headers in install-qa Message-Id: <1437927209-31354-5-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927384 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Now that we've properly split up the headers we don't need to install all the libxfs-internal headers for xfstests. Just install the three headers defining the on-disk format and xfs_arch.h which is required to compile them instead. Signed-off-by: Christoph Hellwig --- include/Makefile | 12 ++++++++---- libxfs/Makefile | 29 +++++++++++++++++------------ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/include/Makefile b/include/Makefile index f033245..0135860 100644 --- a/include/Makefile +++ b/include/Makefile @@ -18,7 +18,9 @@ TOPDIR = .. include $(TOPDIR)/include/builddefs -QAHFILES = libxfs.h \ +QAHFILES = xfs_arch.h + +LIBHFILES = libxfs.h \ libxlog.h \ atomic.h \ bitops.h \ @@ -28,14 +30,17 @@ QAHFILES = libxfs.h \ list.h \ parent.h \ radix-tree.h \ - xfs_arch.h \ xfs_btree_trace.h \ xfs_inode.h \ xfs_log_recover.h \ xfs_metadump.h \ xfs_mount.h \ xfs_trace.h \ - xfs_trans.h + xfs_trans.h \ + command.h \ + input.h \ + path.h \ + project.h HFILES = handle.h \ jdm.h \ @@ -46,7 +51,6 @@ HFILES = handle.h \ PHFILES = darwin.h freebsd.h irix.h linux.h gnukfreebsd.h DKHFILES = volume.h fstyp.h dvh.h -LIBHFILES = command.h input.h path.h project.h LSRCFILES = $(shell echo $(PHFILES) | sed -e "s/$(PKG_PLATFORM).h//g") LSRCFILES += platform_defs.h.in builddefs.in buildmacros buildrules install-sh LSRCFILES += $(DKHFILES) $(LIBHFILES) diff --git a/libxfs/Makefile b/libxfs/Makefile index c85f1ed..3d3b448 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -14,15 +14,14 @@ LT_AGE = 0 PKGHFILES = xfs_fs.h \ xfs_types.h -# headers with build dependencies -HFILES = init.h \ - crc32defs.h \ - crc32table.h \ - libxfs_priv.h \ - xfs_dir2_priv.h \ - # headers installed in QA targets -QAHFILES = xfs_alloc.h \ +QAHFILES = \ + xfs_da_format.h \ + xfs_format.h \ + xfs_log_format.h + +LIBHFILES = \ + xfs_alloc.h \ xfs_alloc_btree.h \ xfs_attr_leaf.h \ xfs_attr_sf.h \ @@ -33,14 +32,11 @@ QAHFILES = xfs_alloc.h \ xfs_attr_remote.h \ xfs_cksum.h \ xfs_da_btree.h \ - xfs_da_format.h \ xfs_dir2.h \ - xfs_format.h \ xfs_ialloc.h \ xfs_ialloc_btree.h \ xfs_inode_buf.h \ xfs_inode_fork.h \ - xfs_log_format.h \ xfs_quota_defs.h \ xfs_sb.h \ xfs_shared.h \ @@ -49,6 +45,14 @@ QAHFILES = xfs_alloc.h \ libxfs_io.h \ libxfs_api_defs.h + +# headers with build dependencies +HFILES = init.h \ + crc32defs.h \ + crc32table.h \ + libxfs_priv.h \ + xfs_dir2_priv.h + CFILES = cache.c \ crc32.c \ init.c \ @@ -89,6 +93,7 @@ CFILES = cache.c \ CFILES += $(PKG_PLATFORM).c PCFILES = darwin.c freebsd.c irix.c linux.c LSRCFILES = $(shell echo $(PCFILES) | sed -e "s/$(PKG_PLATFORM).c//g") +LSRCFILES += $(LIBHFILES) LSRCFILES += gen_crc32table.c # @@ -133,7 +138,7 @@ include $(BUILDRULES) install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) -install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(QAHFILES)) +install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES) $(QAHFILES)) %-hdrs: $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 80D7B7F84 for ; Sun, 26 Jul 2015 11:16:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5DF3F304039 for ; Sun, 26 Jul 2015 09:16:31 -0700 (PDT) X-ASG-Debug-ID: 1437927389-04cb6c02c6ba060001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 4s54ObD7frn6yA8P (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:30 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObE-0000Ov-9p for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:29 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 05/10] xfsprogs: remove install-qa target Date: Sun, 26 Jul 2015 18:13:24 +0200 X-ASG-Orig-Subj: [PATCH 05/10] xfsprogs: remove install-qa target Message-Id: <1437927209-31354-6-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927389 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Now that we don't install all the libxfs internals but just the disk format defintions we can install those as part of the normal install-dev target. Signed-off-by: Christoph Hellwig --- Makefile | 6 ------ include/Makefile | 11 +++-------- include/buildrules | 2 +- libdisk/Makefile | 2 -- libhandle/Makefile | 2 -- libxcmd/Makefile | 2 +- libxfs/Makefile | 10 ++-------- libxlog/Makefile | 2 +- 8 files changed, 8 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index 6d6803b..111bf76 100644 --- a/Makefile +++ b/Makefile @@ -108,8 +108,6 @@ install: $(addsuffix -install,$(SUBDIRS)) install-dev: $(addsuffix -install-dev,$(SUBDIRS)) -install-qa: install $(addsuffix -install-qa,$(SUBDIRS)) - %-install: @echo "Installing $@" $(Q)$(MAKE) $(MAKEOPTS) -C $* install @@ -118,10 +116,6 @@ install-qa: install $(addsuffix -install-qa,$(SUBDIRS)) @echo "Installing $@" $(Q)$(MAKE) $(MAKEOPTS) -C $* install-dev -%-install-qa: - @echo "Installing $@" - $(Q)$(MAKE) $(MAKEOPTS) -C $* install-qa - distclean: clean $(Q)rm -f $(LDIRT) diff --git a/include/Makefile b/include/Makefile index 0135860..bd8b0ca 100644 --- a/include/Makefile +++ b/include/Makefile @@ -18,8 +18,6 @@ TOPDIR = .. include $(TOPDIR)/include/builddefs -QAHFILES = xfs_arch.h - LIBHFILES = libxfs.h \ libxlog.h \ atomic.h \ @@ -47,7 +45,8 @@ HFILES = handle.h \ $(PKG_PLATFORM).h \ platform_defs.h \ xfs.h \ - xqm.h + xqm.h \ + xfs_arch.h PHFILES = darwin.h freebsd.h irix.h linux.h gnukfreebsd.h DKHFILES = volume.h fstyp.h dvh.h @@ -66,7 +65,7 @@ disk: include $(BUILDRULES) # set up include/xfs header directory -install-headers: $(addsuffix -hdrs, $(HFILES) $(QAHFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) +install-headers: $(addsuffix -hdrs, $(HFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) %-hdrs: xfs $(Q)$(LN_S) -f $(PWD)/include/$* xfs/$* @@ -79,7 +78,3 @@ install: default install-dev: install $(INSTALL) -m 644 $(HFILES) $(PKG_INC_DIR) - -install-qa: install-dev - $(INSTALL) -m 644 $(QAHFILES) $(PKG_INC_DIR) - diff --git a/include/buildrules b/include/buildrules index 0e13f9d..72491db 100644 --- a/include/buildrules +++ b/include/buildrules @@ -94,7 +94,7 @@ $(_FORCE): # rebuild on every make invocation isn't a problem we need to care about. Just # do it silently so it doesn't make the build unnecessarily noisy. -.PHONY : depend ltdepend install-qa +.PHONY : depend ltdepend MAKEDEP := $(MAKEDEPEND) $(CFLAGS) diff --git a/libdisk/Makefile b/libdisk/Makefile index b058a9f..3b84a3a 100644 --- a/libdisk/Makefile +++ b/libdisk/Makefile @@ -32,6 +32,4 @@ install: default install-dev: default -install-qa: install-dev - -include .ltdep diff --git a/libhandle/Makefile b/libhandle/Makefile index 865ca22..cc4ad1d 100644 --- a/libhandle/Makefile +++ b/libhandle/Makefile @@ -25,6 +25,4 @@ install: default install-dev: default $(INSTALL_LTLIB_DEV) -install-qa: install-dev - -include .ltdep diff --git a/libxcmd/Makefile b/libxcmd/Makefile index ce082a5..7701ed9 100644 --- a/libxcmd/Makefile +++ b/libxcmd/Makefile @@ -34,6 +34,6 @@ default: ltdepend $(LTLIBRARY) include $(BUILDRULES) -install install-dev install-qa: default +install install-dev: default -include .ltdep diff --git a/libxfs/Makefile b/libxfs/Makefile index 3d3b448..ebbe40e 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -12,10 +12,7 @@ LT_AGE = 0 # headers to install in include/xfs PKGHFILES = xfs_fs.h \ - xfs_types.h - -# headers installed in QA targets -QAHFILES = \ + xfs_types.h \ xfs_da_format.h \ xfs_format.h \ xfs_log_format.h @@ -138,7 +135,7 @@ include $(BUILDRULES) install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) -install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES) $(QAHFILES)) +install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES)) %-hdrs: $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* @@ -146,9 +143,6 @@ install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES) $(QAHFILES)) install-dev: install $(INSTALL) -m 644 $(PKGHFILES) $(PKG_INC_DIR) -install-qa: install-dev - $(INSTALL) -m 644 $(QAHFILES) $(PKG_INC_DIR) - # We need to install the headers before building the dependencies. If we # include the .ltdep file, the makefile decides that it needs to build the # dependencies to remake the makefile before running the header install target, diff --git a/libxlog/Makefile b/libxlog/Makefile index 4673663..3417eed 100644 --- a/libxlog/Makefile +++ b/libxlog/Makefile @@ -19,6 +19,6 @@ default: ltdepend $(LTLIBRARY) include $(BUILDRULES) -install install-dev install-qa: default +install install-dev: default -include .ltdep -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 998F07F84 for ; Sun, 26 Jul 2015 11:16:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 68CDB8F8033 for ; Sun, 26 Jul 2015 09:16:29 -0700 (PDT) X-ASG-Debug-ID: 1437927388-04bdf00233b85d0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 0r89SBnDG2VnEm1X (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:28 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObD-0000P0-TJ; Sun, 26 Jul 2015 16:16:27 +0000 Date: Sun, 26 Jul 2015 09:16:27 -0700 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH 1/2] metadump: Fill attribute values with 'v' rather than NUL Message-ID: <20150726161627.GA29329@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 1/2] metadump: Fill attribute values with 'v' rather than NUL References: <559AC5AA.5040900@sandeen.net> <559AC602.5050309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <559AC602.5050309@sandeen.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927388 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks good, Reviewed-by: Christoph Hellwig From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AA0907F7C for ; Sun, 26 Jul 2015 11:16:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 355EAAC005 for ; Sun, 26 Jul 2015 09:16:36 -0700 (PDT) X-ASG-Debug-ID: 1437927394-04cbb06a70b2ad0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id YeOlGYHEWGHkymxa (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:34 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObJ-0000PF-Hu for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:34 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers Date: Sun, 26 Jul 2015 18:13:25 +0200 X-ASG-Orig-Subj: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers Message-Id: <1437927209-31354-7-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927394 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Once installed these are system headers, so we need to use <>-style include statements between them. Signed-off-by: Christoph Hellwig --- include/platform_defs.h.in | 10 +++++----- include/xfs.h | 6 +++--- include/xqm.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 9a1782c..529c0a6 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -69,15 +69,15 @@ typedef __u64 __bitwise __be64; typedef struct filldir filldir_t; #if defined(__linux__) -#include "xfs/linux.h" +#include #elif defined(__FreeBSD__) -#include "xfs/freebsd.h" +#include #elif defined(__FreeBSD_kernel__) -#include "xfs/gnukfreebsd.h" +#include #elif defined(__APPLE__) -#include "xfs/darwin.h" +#include #elif defined(__sgi__) || defined(__sgi) -#include "xfs/irix.h" +#include #else # error unknown platform... have fun porting! #endif diff --git a/include/xfs.h b/include/xfs.h index 0cb4fb8..e32c4a8 100644 --- a/include/xfs.h +++ b/include/xfs.h @@ -33,8 +33,8 @@ #ifndef __XFS_H__ #define __XFS_H__ -#include "xfs/platform_defs.h" -#include "xfs/xfs_types.h" -#include "xfs/xfs_fs.h" +#include +#include +#include #endif /* __XFS_H__ */ diff --git a/include/xqm.h b/include/xqm.h index 0b5dfa1..47f58a0 100644 --- a/include/xqm.h +++ b/include/xqm.h @@ -18,7 +18,7 @@ #ifndef __XQM_H__ #define __XQM_H__ -#include "xfs/xfs.h" +#include /* * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 1E5D67F91 for ; Sun, 26 Jul 2015 11:16:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id AE54FAC005 for ; Sun, 26 Jul 2015 09:16:55 -0700 (PDT) X-ASG-Debug-ID: 1437927414-04bdf00231b8600001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id h0pFTlHHFirYORzc (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:54 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObd-0000RV-Io for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:54 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 08/10] xfsprogs: move __be*/__le* types and __arch_pack to xfs_arch.h Date: Sun, 26 Jul 2015 18:13:27 +0200 X-ASG-Orig-Subj: [PATCH 08/10] xfsprogs: move __be*/__le* types and __arch_pack to xfs_arch.h Message-Id: <1437927209-31354-9-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927414 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 These are defines and typedefs only needed for the XFS on disk format, so there is no need to have the available for every user of xfs.h. Signed-off-by: Christoph Hellwig --- include/platform_defs.h.in | 23 ----------------------- include/xfs_arch.h | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 529c0a6..81741c4 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -50,22 +50,6 @@ typedef unsigned long long int __u64; typedef signed long long int __s64; #endif -#ifdef __CHECKER__ -#define __bitwise __attribute__((bitwise)) -#define __force __attribute__((force)) -#else -#define __bitwise -#define __force -#endif - -typedef __u16 __bitwise __le16; -typedef __u32 __bitwise __le32; -typedef __u64 __bitwise __le64; - -typedef __u16 __bitwise __be16; -typedef __u32 __bitwise __be32; -typedef __u64 __bitwise __be64; - typedef struct filldir filldir_t; #if defined(__linux__) @@ -130,13 +114,6 @@ typedef unsigned short umode_t; | (minor&IRIX_DEV_MAXMIN))) #define IRIX_DEV_TO_KDEVT(dev) makedev(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev)) -/* ARM old ABI has some weird alignment/padding */ -#if defined(__arm__) && !defined(__ARM_EABI__) -#define __arch_pack __attribute__((packed)) -#else -#define __arch_pack -#endif - #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #define max(a,b) (((a)>(b))?(a):(b)) diff --git a/include/xfs_arch.h b/include/xfs_arch.h index 310a17e..87650f1 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -24,6 +24,22 @@ #undef XFS_NATIVE_HOST #endif +#ifdef __CHECKER__ +#define __bitwise __attribute__((bitwise)) +#define __force __attribute__((force)) +#else +#define __bitwise +#define __force +#endif + +typedef __u16 __bitwise __le16; +typedef __u32 __bitwise __le32; +typedef __u64 __bitwise __le64; + +typedef __u16 __bitwise __be16; +typedef __u32 __bitwise __be32; +typedef __u64 __bitwise __be64; + /* * Casts are necessary for constants, because we never know how for sure * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. @@ -262,4 +278,11 @@ static inline void put_unaligned_be64(__uint64_t val, void *p) put_unaligned_be32(val, p + 4); } +/* ARM old ABI has some weird alignment/padding */ +#if defined(__arm__) && !defined(__ARM_EABI__) +#define __arch_pack __attribute__((packed)) +#else +#define __arch_pack +#endif + #endif /* __XFS_ARCH_H__ */ -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:16:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E78DD7F8D for ; Sun, 26 Jul 2015 11:16:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 82A69AC003 for ; Sun, 26 Jul 2015 09:16:54 -0700 (PDT) X-ASG-Debug-ID: 1437927408-04bdf00230b85f0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id OqxZ8M4qMcpZCsOO (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:16:48 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObO-0000Pc-4y for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:48 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 07/10] xfsprogs: simplify internal includes Date: Sun, 26 Jul 2015 18:13:26 +0200 X-ASG-Orig-Subj: [PATCH 07/10] xfsprogs: simplify internal includes Message-Id: <1437927209-31354-8-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927408 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 We don't need the xfs/ prefix for local includes if we just add the libxfs directory to the include path. Once that is done we only need to link the installed headers into include/xfs. Signed-off-by: Christoph Hellwig --- copy/xfs_copy.c | 2 +- db/addr.c | 2 +- db/agf.c | 2 +- db/agfl.c | 2 +- db/agi.c | 2 +- db/attr.c | 2 +- db/attrset.c | 2 +- db/attrshort.c | 2 +- db/bit.c | 2 +- db/block.c | 2 +- db/bmap.c | 2 +- db/bmroot.c | 2 +- db/btblock.c | 2 +- db/check.c | 2 +- db/command.c | 2 +- db/convert.c | 2 +- db/debug.c | 2 +- db/dir2.c | 2 +- db/dir2sf.c | 2 +- db/dquot.c | 2 +- db/echo.c | 2 +- db/faddr.c | 2 +- db/field.c | 2 +- db/flist.c | 2 +- db/fprint.c | 2 +- db/frag.c | 2 +- db/freesp.c | 2 +- db/hash.c | 2 +- db/help.c | 2 +- db/init.c | 2 +- db/inode.c | 2 +- db/input.c | 2 +- db/io.c | 2 +- db/malloc.c | 2 +- db/metadump.c | 4 +-- db/output.c | 2 +- db/print.c | 2 +- db/quit.c | 2 +- db/sb.c | 4 +-- db/sig.c | 2 +- db/strvec.c | 2 +- db/symlink.c | 2 +- db/text.c | 2 +- db/type.c | 2 +- db/write.c | 2 +- estimate/xfs_estimate.c | 2 +- fsr/xfs_fsr.c | 12 +++---- growfs/xfs_growfs.c | 4 +-- include/Makefile | 2 +- include/builddefs.in | 2 +- include/input.h | 2 +- include/libxfs.h | 86 +++++++++++++++++++++++----------------------- include/libxlog.h | 2 +- include/path.h | 2 +- include/project.h | 2 +- include/xfs_inode.h | 4 +-- io/attr.c | 6 ++-- io/bmap.c | 4 +-- io/fadvise.c | 6 ++-- io/fiemap.c | 4 +-- io/file.c | 6 ++-- io/freeze.c | 6 ++-- io/fsync.c | 4 +-- io/getrusage.c | 6 ++-- io/imap.c | 6 ++-- io/init.c | 6 ++-- io/inject.c | 6 ++-- io/link.c | 6 ++-- io/madvise.c | 6 ++-- io/mincore.c | 6 ++-- io/mmap.c | 6 ++-- io/open.c | 6 ++-- io/parent.c | 14 ++++---- io/pread.c | 6 ++-- io/prealloc.c | 6 ++-- io/pwrite.c | 6 ++-- io/readdir.c | 6 ++-- io/resblks.c | 6 ++-- io/seek.c | 6 ++-- io/sendfile.c | 6 ++-- io/shutdown.c | 6 ++-- io/sync.c | 4 +-- io/sync_file_range.c | 6 ++-- io/truncate.c | 6 ++-- libdisk/drivers.h | 2 +- libhandle/handle.c | 6 ++-- libhandle/jdm.c | 8 ++--- libxcmd/command.c | 6 ++-- libxcmd/help.c | 4 +-- libxcmd/input.c | 4 +-- libxcmd/paths.c | 6 ++-- libxcmd/projects.c | 2 +- libxcmd/quit.c | 4 +-- libxfs/Makefile | 12 +++---- libxfs/crc32.c | 4 +-- libxfs/darwin.c | 2 +- libxfs/freebsd.c | 2 +- libxfs/init.c | 2 +- libxfs/irix.c | 2 +- libxfs/libxfs_priv.h | 24 ++++++------- libxfs/radix-tree.c | 2 +- libxfs/rdwr.c | 2 +- libxlog/util.c | 4 +-- libxlog/xfs_log_recover.c | 4 +-- logprint/log_copy.c | 4 +-- logprint/log_dump.c | 4 +-- logprint/log_misc.c | 4 +-- logprint/log_print_all.c | 4 +-- logprint/log_print_trans.c | 4 +-- logprint/logprint.c | 4 +-- mdrestore/xfs_mdrestore.c | 2 +- mkfs/fstyp.c | 2 +- mkfs/maxtrres.c | 2 +- mkfs/proto.c | 2 +- mkfs/xfs_mkfs.c | 2 +- quota/edit.c | 4 +-- quota/free.c | 2 +- quota/init.c | 6 ++-- quota/path.c | 4 +-- quota/project.c | 4 +-- quota/quot.c | 2 +- quota/quota.c | 2 +- quota/quota.h | 6 ++-- quota/report.c | 2 +- quota/state.c | 2 +- repair/agheader.c | 2 +- repair/attr_repair.c | 2 +- repair/avl.c | 2 +- repair/avl64.c | 2 +- repair/bmap.c | 2 +- repair/btree.c | 2 +- repair/dino_chunks.c | 2 +- repair/dinode.c | 2 +- repair/dir2.c | 2 +- repair/globals.c | 2 +- repair/incore.c | 2 +- repair/incore_bmc.c | 2 +- repair/incore_ext.c | 2 +- repair/incore_ino.c | 2 +- repair/init.c | 2 +- repair/phase1.c | 2 +- repair/phase2.c | 4 +-- repair/phase3.c | 2 +- repair/phase4.c | 2 +- repair/phase5.c | 2 +- repair/phase6.c | 2 +- repair/phase7.c | 2 +- repair/prefetch.c | 2 +- repair/progress.c | 2 +- repair/rt.c | 2 +- repair/sb.c | 4 +-- repair/scan.c | 2 +- repair/threads.c | 2 +- repair/versions.c | 2 +- repair/xfs_repair.c | 4 +-- rtcp/xfs_rtcp.c | 2 +- 156 files changed, 308 insertions(+), 312 deletions(-) diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c index 44a32e8..4a5a8a6 100644 --- a/copy/xfs_copy.c +++ b/copy/xfs_copy.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include diff --git a/db/addr.c b/db/addr.c index a3ac5d6..e835dbb 100644 --- a/db/addr.c +++ b/db/addr.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "addr.h" #include "command.h" #include "type.h" diff --git a/db/agf.c b/db/agf.c index e144bd6..e10526d 100644 --- a/db/agf.c +++ b/db/agf.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/agfl.c b/db/agfl.c index b821b13..472873e 100644 --- a/db/agfl.c +++ b/db/agfl.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/agi.c b/db/agi.c index 634429e..285a3c5 100644 --- a/db/agi.c +++ b/db/agi.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/attr.c b/db/attr.c index e14e32e..897834b 100644 --- a/db/attr.c +++ b/db/attr.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #include "type.h" #include "faddr.h" diff --git a/db/attrset.c b/db/attrset.c index 1afadd2..ec9da5a 100644 --- a/db/attrset.c +++ b/db/attrset.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "attrset.h" #include "io.h" diff --git a/db/attrshort.c b/db/attrshort.c index 7dc5640..d82559c 100644 --- a/db/attrshort.c +++ b/db/attrshort.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/bit.c b/db/bit.c index b85ed6a..24872bf 100644 --- a/db/bit.c +++ b/db/bit.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #undef setbit /* defined in param.h on Linux */ diff --git a/db/block.c b/db/block.c index 9319cce..4a357ce 100644 --- a/db/block.c +++ b/db/block.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "block.h" #include "bmap.h" #include "command.h" diff --git a/db/bmap.c b/db/bmap.c index 60d6a80..92057b4 100644 --- a/db/bmap.c +++ b/db/bmap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "fprint.h" diff --git a/db/bmroot.c b/db/bmroot.c index 95be2dd..0950e19 100644 --- a/db/bmroot.c +++ b/db/bmroot.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/btblock.c b/db/btblock.c index 1953e05..46140fc 100644 --- a/db/btblock.c +++ b/db/btblock.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/check.c b/db/check.c index c109f20..afeea32 100644 --- a/db/check.c +++ b/db/check.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "bmap.h" diff --git a/db/command.c b/db/command.c index eb1efb6..2189e00 100644 --- a/db/command.c +++ b/db/command.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "addr.h" #include "attrset.h" #include "block.h" diff --git a/db/convert.c b/db/convert.c index d2bf1a9..09f9225 100644 --- a/db/convert.c +++ b/db/convert.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "convert.h" #include "output.h" diff --git a/db/debug.c b/db/debug.c index 13a319f..2875858 100644 --- a/db/debug.c +++ b/db/debug.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "debug.h" #include "output.h" diff --git a/db/dir2.c b/db/dir2.c index 75aaed5..7f69e6f 100644 --- a/db/dir2.c +++ b/db/dir2.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #include "type.h" #include "faddr.h" diff --git a/db/dir2sf.c b/db/dir2sf.c index 831d6f2..a56590b 100644 --- a/db/dir2sf.c +++ b/db/dir2sf.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/dquot.c b/db/dquot.c index 6118256..3adde3b 100644 --- a/db/dquot.c +++ b/db/dquot.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "bit.h" #include "bmap.h" #include "command.h" diff --git a/db/echo.c b/db/echo.c index f2b7ab8..9a8ae72 100644 --- a/db/echo.c +++ b/db/echo.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "echo.h" #include "output.h" diff --git a/db/faddr.c b/db/faddr.c index 17451c2..e368d0d 100644 --- a/db/faddr.c +++ b/db/faddr.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "fprint.h" #include "faddr.h" diff --git a/db/field.c b/db/field.c index f68809a..843c385 100644 --- a/db/field.c +++ b/db/field.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/flist.c b/db/flist.c index 848478e..84065a2 100644 --- a/db/flist.c +++ b/db/flist.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/fprint.c b/db/fprint.c index f36cdc8..f2b3794 100644 --- a/db/fprint.c +++ b/db/fprint.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "type.h" diff --git a/db/frag.c b/db/frag.c index 309db7f..1cc922e 100644 --- a/db/frag.c +++ b/db/frag.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "bmap.h" #include "command.h" diff --git a/db/freesp.c b/db/freesp.c index b0fc95e..27e9f5a 100644 --- a/db/freesp.c +++ b/db/freesp.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "freesp.h" #include "io.h" diff --git a/db/hash.c b/db/hash.c index e02857f..c535fc9 100644 --- a/db/hash.c +++ b/db/hash.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "addr.h" #include "command.h" #include "type.h" diff --git a/db/help.c b/db/help.c index d6a56b0..59a7ba6 100644 --- a/db/help.c +++ b/db/help.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "help.h" #include "output.h" diff --git a/db/init.c b/db/init.c index 8efd883..9537a38 100644 --- a/db/init.c +++ b/db/init.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "command.h" #include "init.h" diff --git a/db/inode.c b/db/inode.c index e4d80ae..e86dabd 100644 --- a/db/inode.c +++ b/db/inode.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/input.c b/db/input.c index ec1b986..a90de6c 100644 --- a/db/input.c +++ b/db/input.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "command.h" #include "input.h" diff --git a/db/io.c b/db/io.c index 0f360a8..9fa52b8 100644 --- a/db/io.c +++ b/db/io.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/malloc.c b/db/malloc.c index 00cbfe1..9037bc1 100644 --- a/db/malloc.c +++ b/db/malloc.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "init.h" #include "malloc.h" #include "output.h" diff --git a/db/metadump.c b/db/metadump.c index f606e35..08899da 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "bmap.h" #include "command.h" #include "metadump.h" diff --git a/db/output.c b/db/output.c index 8f6e9cd..14f7c4a 100644 --- a/db/output.c +++ b/db/output.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "command.h" #include "output.h" diff --git a/db/print.c b/db/print.c index 9f08b9f..3ff2548 100644 --- a/db/print.c +++ b/db/print.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/quit.c b/db/quit.c index 7d352a6..1103a7a 100644 --- a/db/quit.c +++ b/db/quit.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "command.h" #include "quit.h" diff --git a/db/sb.c b/db/sb.c index 2b78136..1a28cf2 100644 --- a/db/sb.c +++ b/db/sb.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "command.h" #include "type.h" #include "faddr.h" diff --git a/db/sig.c b/db/sig.c index 025c603..031567e 100644 --- a/db/sig.c +++ b/db/sig.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "sig.h" diff --git a/db/strvec.c b/db/strvec.c index 3fa10be..dd83448 100644 --- a/db/strvec.c +++ b/db/strvec.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "strvec.h" #include "output.h" #include "malloc.h" diff --git a/db/symlink.c b/db/symlink.c index 01719a7..ce96556 100644 --- a/db/symlink.c +++ b/db/symlink.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "type.h" #include "faddr.h" #include "fprint.h" diff --git a/db/text.c b/db/text.c index a0d4c89..f6c623c 100644 --- a/db/text.c +++ b/db/text.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "block.h" #include "bmap.h" diff --git a/db/type.c b/db/type.c index b150b53..37e0882 100644 --- a/db/type.c +++ b/db/type.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "block.h" #include "command.h" #include "type.h" diff --git a/db/write.c b/db/write.c index 6a33dba..9f5b423 100644 --- a/db/write.c +++ b/db/write.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "bit.h" diff --git a/estimate/xfs_estimate.c b/estimate/xfs_estimate.c index 636691b..65b7168 100644 --- a/estimate/xfs_estimate.c +++ b/estimate/xfs_estimate.c @@ -21,7 +21,7 @@ * * XXX: assumes dirv1 format. */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c index efc17a8..7c1d776 100644 --- a/fsr/xfs_fsr.c +++ b/fsr/xfs_fsr.c @@ -16,12 +16,12 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/xfs.h" -#include "xfs/xfs_types.h" -#include "xfs/jdm.h" -#include "xfs/xfs_bmap_btree.h" -#include "xfs/xfs_attr_sf.h" +#include "libxfs.h" +#include "xfs.h" +#include "xfs_types.h" +#include "jdm.h" +#include "xfs_bmap_btree.h" +#include "xfs_attr_sf.h" #include #include diff --git a/growfs/xfs_growfs.c b/growfs/xfs_growfs.c index 309b915..56315f9 100644 --- a/growfs/xfs_growfs.c +++ b/growfs/xfs_growfs.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/path.h" +#include "libxfs.h" +#include "path.h" static void usage(void) diff --git a/include/Makefile b/include/Makefile index bd8b0ca..778317e 100644 --- a/include/Makefile +++ b/include/Makefile @@ -65,7 +65,7 @@ disk: include $(BUILDRULES) # set up include/xfs header directory -install-headers: $(addsuffix -hdrs, $(HFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) +install-headers: $(addsuffix -hdrs, $(PHFILES) $(DKHFILES) $(HFILES)) %-hdrs: xfs $(Q)$(LN_S) -f $(PWD)/include/$* xfs/$* diff --git a/include/builddefs.in b/include/builddefs.in index 7e9f53d..6ee95b7 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -134,7 +134,7 @@ endif GCFLAGS = $(OPTIMIZER) $(DEBUG) \ -DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \ - -DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include + -DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include -I$(TOPDIR)/libxfs ifeq ($(ENABLE_GETTEXT),yes) GCFLAGS += -DENABLE_GETTEXT diff --git a/include/input.h b/include/input.h index ae273ad..d02170f 100644 --- a/include/input.h +++ b/include/input.h @@ -21,7 +21,7 @@ #include #include #include -#include "xfs/project.h" +#include "project.h" #include extern char **breakline(char *input, int *count); diff --git a/include/libxfs.h b/include/libxfs.h index eda664f..1fb2d6d 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -19,26 +19,26 @@ #ifndef __LIBXFS_H__ #define __LIBXFS_H__ -#include "xfs/libxfs_api_defs.h" -#include "xfs/platform_defs.h" +#include "libxfs_api_defs.h" +#include "platform_defs.h" -#include "xfs/list.h" -#include "xfs/hlist.h" -#include "xfs/cache.h" -#include "xfs/bitops.h" -#include "xfs/kmem.h" -#include "xfs/radix-tree.h" -#include "xfs/atomic.h" +#include "list.h" +#include "hlist.h" +#include "cache.h" +#include "bitops.h" +#include "kmem.h" +#include "radix-tree.h" +#include "atomic.h" -#include "xfs/xfs_types.h" -#include "xfs/xfs_fs.h" -#include "xfs/xfs_arch.h" +#include "xfs_types.h" +#include "xfs_fs.h" +#include "xfs_arch.h" -#include "xfs/xfs_shared.h" -#include "xfs/xfs_format.h" -#include "xfs/xfs_log_format.h" -#include "xfs/xfs_quota_defs.h" -#include "xfs/xfs_trans_resv.h" +#include "xfs_shared.h" +#include "xfs_format.h" +#include "xfs_log_format.h" +#include "xfs_quota_defs.h" +#include "xfs_trans_resv.h" /* CRC stuff, buffer API dependent on it */ @@ -48,33 +48,33 @@ extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len); #define crc32(c,p,l) crc32_le((c),(unsigned char const *)(p),(l)) #define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l)) -#include "xfs/xfs_cksum.h" +#include "xfs_cksum.h" /* * This mirrors the kernel include for xfs_buf.h - it's implicitly included in * every files via a similar include in the kernel xfs_linux.h. */ -#include "xfs/libxfs_io.h" - -#include "xfs/xfs_bit.h" -#include "xfs/xfs_sb.h" -#include "xfs/xfs_mount.h" -#include "xfs/xfs_da_format.h" -#include "xfs/xfs_da_btree.h" -#include "xfs/xfs_dir2.h" -#include "xfs/xfs_bmap_btree.h" -#include "xfs/xfs_alloc_btree.h" -#include "xfs/xfs_ialloc_btree.h" -#include "xfs/xfs_attr_sf.h" -#include "xfs/xfs_inode_fork.h" -#include "xfs/xfs_inode_buf.h" -#include "xfs/xfs_inode.h" -#include "xfs/xfs_alloc.h" -#include "xfs/xfs_btree.h" -#include "xfs/xfs_btree_trace.h" -#include "xfs/xfs_bmap.h" -#include "xfs/xfs_trace.h" -#include "xfs/xfs_trans.h" +#include "libxfs_io.h" + +#include "xfs_bit.h" +#include "xfs_sb.h" +#include "xfs_mount.h" +#include "xfs_da_format.h" +#include "xfs_da_btree.h" +#include "xfs_dir2.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_attr_sf.h" +#include "xfs_inode_fork.h" +#include "xfs_inode_buf.h" +#include "xfs_inode.h" +#include "xfs_alloc.h" +#include "xfs_btree.h" +#include "xfs_btree_trace.h" +#include "xfs_bmap.h" +#include "xfs_trace.h" +#include "xfs_trans.h" #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) @@ -173,11 +173,11 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC }; extern int libxfs_nproc(void); extern unsigned long libxfs_physmem(void); /* in kilobytes */ -#include "xfs/xfs_ialloc.h" +#include "xfs_ialloc.h" -#include "xfs/xfs_attr_leaf.h" -#include "xfs/xfs_attr_remote.h" -#include "xfs/xfs_trans_space.h" +#include "xfs_attr_leaf.h" +#include "xfs_attr_remote.h" +#include "xfs_trans_space.h" #define XFS_INOBT_IS_FREE_DISK(rp,i) \ ((be64_to_cpu((rp)->ir_free) & XFS_INOBT_MASK(i)) != 0) diff --git a/include/libxlog.h b/include/libxlog.h index 0c55a86..05b16e8 100644 --- a/include/libxlog.h +++ b/include/libxlog.h @@ -44,7 +44,7 @@ struct xlog { int l_sectBBsize; /* size of log sector in 512 byte chunks */ }; -#include "xfs/xfs_log_recover.h" +#include "xfs_log_recover.h" /* * macros mapping kernel code to user code diff --git a/include/path.h b/include/path.h index c8746cb..58955ef 100644 --- a/include/path.h +++ b/include/path.h @@ -18,7 +18,7 @@ #ifndef __PATH_H__ #define __PATH_H__ -#include "xfs/xfs.h" +#include "xfs.h" /* * XFS Filesystem Paths diff --git a/include/project.h b/include/project.h index a458a61..63bdffd 100644 --- a/include/project.h +++ b/include/project.h @@ -18,7 +18,7 @@ #ifndef __PROJECT_H__ #define __PROJECT_H__ -#include "xfs/xfs.h" +#include "xfs.h" extern int setprojid(const char *__name, int __fd, prid_t __id); extern int getprojid(const char *__name, int __fd, prid_t *__id); diff --git a/include/xfs_inode.h b/include/xfs_inode.h index 303efe0..71c0fb4 100644 --- a/include/xfs_inode.h +++ b/include/xfs_inode.h @@ -20,8 +20,8 @@ #define __XFS_INODE_H__ /* These match kernel side includes */ -#include "xfs/xfs_inode_buf.h" -#include "xfs/xfs_inode_fork.h" +#include "xfs_inode_buf.h" +#include "xfs_inode_fork.h" struct xfs_trans; struct xfs_mount; diff --git a/io/attr.c b/io/attr.c index dfae36e..bc1ab56 100644 --- a/io/attr.c +++ b/io/attr.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/bmap.c b/io/bmap.c index d96f7d4..432ddb7 100644 --- a/io/bmap.c +++ b/io/bmap.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include "init.h" #include "io.h" diff --git a/io/fadvise.c b/io/fadvise.c index 3b76ab9..fa586d3 100644 --- a/io/fadvise.c +++ b/io/fadvise.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/fiemap.c b/io/fiemap.c index 363d1d9..8482c99 100644 --- a/io/fiemap.c +++ b/io/fiemap.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include #include #include "init.h" diff --git a/io/file.c b/io/file.c index 0eadcab..91dd38e 100644 --- a/io/file.c +++ b/io/file.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/freeze.c b/io/freeze.c index a12ed67..90f5b66 100644 --- a/io/freeze.c +++ b/io/freeze.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/fsync.c b/io/fsync.c index d9c45f1..6c93dff 100644 --- a/io/fsync.c +++ b/io/fsync.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include "init.h" #include "io.h" diff --git a/io/getrusage.c b/io/getrusage.c index 35dc4bf..28b8453 100644 --- a/io/getrusage.c +++ b/io/getrusage.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include #include "init.h" diff --git a/io/imap.c b/io/imap.c index a615467..7c24bcd 100644 --- a/io/imap.c +++ b/io/imap.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/init.c b/io/init.c index 78a49b6..70214f9 100644 --- a/io/init.c +++ b/io/init.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/inject.c b/io/inject.c index f0aaf97..23eb4a2 100644 --- a/io/inject.c +++ b/io/inject.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/link.c b/io/link.c index 092e0d4..7fb81e1 100644 --- a/io/link.c +++ b/io/link.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/madvise.c b/io/madvise.c index 4f3f91b..b30d28b 100644 --- a/io/madvise.c +++ b/io/madvise.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/mincore.c b/io/mincore.c index 234e0a1..670d4c8 100644 --- a/io/mincore.c +++ b/io/mincore.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/mmap.c b/io/mmap.c index 06f678f..33747c1 100644 --- a/io/mmap.c +++ b/io/mmap.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include #include "init.h" diff --git a/io/open.c b/io/open.c index 795adeb..33d9f8d 100644 --- a/io/open.c +++ b/io/open.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/parent.c b/io/parent.c index e883f65..a374b3e 100644 --- a/io/parent.c +++ b/io/parent.c @@ -16,13 +16,13 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" -#include "xfs/path.h" -#include "xfs/parent.h" -#include "xfs/handle.h" -#include "xfs/jdm.h" +#include "xfs.h" +#include "command.h" +#include "input.h" +#include "path.h" +#include "parent.h" +#include "handle.h" +#include "jdm.h" #include "init.h" #include "io.h" diff --git a/io/pread.c b/io/pread.c index 280cc9d..9205e34 100644 --- a/io/pread.c +++ b/io/pread.c @@ -17,9 +17,9 @@ */ #include -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/prealloc.c b/io/prealloc.c index e458a92..b60d2dc 100644 --- a/io/prealloc.c +++ b/io/prealloc.c @@ -19,9 +19,9 @@ #if defined(HAVE_FALLOCATE) #include #endif -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/pwrite.c b/io/pwrite.c index 69f67af..c9d2b1a 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -17,9 +17,9 @@ */ #include -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/readdir.c b/io/readdir.c index 20b8898..f8b2755 100644 --- a/io/readdir.c +++ b/io/readdir.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/resblks.c b/io/resblks.c index 197f7e8..df032d5 100644 --- a/io/resblks.c +++ b/io/resblks.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/seek.c b/io/seek.c index 9b281d5..39dab61 100644 --- a/io/seek.c +++ b/io/seek.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include #include "init.h" diff --git a/io/sendfile.c b/io/sendfile.c index 22a5a4f..744b618 100644 --- a/io/sendfile.c +++ b/io/sendfile.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include #include "init.h" #include "io.h" diff --git a/io/shutdown.c b/io/shutdown.c index 2c86cf9..b75278a 100644 --- a/io/shutdown.c +++ b/io/shutdown.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/sync.c b/io/sync.c index c7bbbf1..0e7b82d 100644 --- a/io/sync.c +++ b/io/sync.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" #include "init.h" #include "io.h" diff --git a/io/sync_file_range.c b/io/sync_file_range.c index 6366331..8e66773 100644 --- a/io/sync_file_range.c +++ b/io/sync_file_range.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/io/truncate.c b/io/truncate.c index 401d2a5..5b2ac01 100644 --- a/io/truncate.c +++ b/io/truncate.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" #include "init.h" #include "io.h" diff --git a/libdisk/drivers.h b/libdisk/drivers.h index 22ac1ea..4d10568 100644 --- a/libdisk/drivers.h +++ b/libdisk/drivers.h @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include diff --git a/libhandle/handle.c b/libhandle/handle.c index 54e6f71..7313e3b 100644 --- a/libhandle/handle.c +++ b/libhandle/handle.c @@ -17,9 +17,9 @@ */ #include -#include "xfs/xfs.h" -#include "xfs/handle.h" -#include "xfs/parent.h" +#include "xfs.h" +#include "handle.h" +#include "parent.h" /* just pick a value we know is more than big enough */ #define MAXHANSIZ 64 diff --git a/libhandle/jdm.c b/libhandle/jdm.c index 2f2f3fd..13196d1 100644 --- a/libhandle/jdm.c +++ b/libhandle/jdm.c @@ -16,10 +16,10 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/handle.h" -#include "xfs/jdm.h" -#include "xfs/parent.h" +#include "xfs.h" +#include "handle.h" +#include "jdm.h" +#include "parent.h" /* internal fshandle - typecast to a void for external use */ #define FSHANDLE_SZ 8 diff --git a/libxcmd/command.c b/libxcmd/command.c index 148e58b..5d0649b 100644 --- a/libxcmd/command.c +++ b/libxcmd/command.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "xfs.h" +#include "command.h" +#include "input.h" cmdinfo_t *cmdtab; int ncmds; diff --git a/libxcmd/help.c b/libxcmd/help.c index bcd5641..023b830 100644 --- a/libxcmd/help.c +++ b/libxcmd/help.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" static cmdinfo_t help_cmd; static void help_onecmd(const char *cmd, const cmdinfo_t *ct); diff --git a/libxcmd/input.c b/libxcmd/input.c index 83aeeb5..966a7ff 100644 --- a/libxcmd/input.c +++ b/libxcmd/input.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/input.h" +#include "xfs.h" +#include "input.h" #include #include diff --git a/libxcmd/paths.c b/libxcmd/paths.c index c0b1ddb..c56b06b 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -24,9 +24,9 @@ #include #include #include -#include "xfs/path.h" -#include "xfs/input.h" -#include "xfs/project.h" +#include "path.h" +#include "input.h" +#include "project.h" #include extern char *progname; diff --git a/libxcmd/projects.c b/libxcmd/projects.c index b00e4c8..24ef70a 100644 --- a/libxcmd/projects.c +++ b/libxcmd/projects.c @@ -19,7 +19,7 @@ #include #include #include -#include "xfs/project.h" +#include "project.h" #define PROJID "/etc/projid" #define PROJECT_PATHS "/etc/projects" diff --git a/libxcmd/quit.c b/libxcmd/quit.c index 0921bbb..0a2dd40 100644 --- a/libxcmd/quit.c +++ b/libxcmd/quit.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xfs.h" -#include "xfs/command.h" +#include "xfs.h" +#include "command.h" static cmdinfo_t quit_cmd; diff --git a/libxfs/Makefile b/libxfs/Makefile index ebbe40e..95de27e 100644 --- a/libxfs/Makefile +++ b/libxfs/Makefile @@ -17,7 +17,7 @@ PKGHFILES = xfs_fs.h \ xfs_format.h \ xfs_log_format.h -LIBHFILES = \ +HFILES = \ xfs_alloc.h \ xfs_alloc_btree.h \ xfs_attr_leaf.h \ @@ -40,11 +40,8 @@ LIBHFILES = \ xfs_trans_resv.h \ xfs_trans_space.h \ libxfs_io.h \ - libxfs_api_defs.h - - -# headers with build dependencies -HFILES = init.h \ + libxfs_api_defs.h \ + init.h \ crc32defs.h \ crc32table.h \ libxfs_priv.h \ @@ -90,7 +87,6 @@ CFILES = cache.c \ CFILES += $(PKG_PLATFORM).c PCFILES = darwin.c freebsd.c irix.c linux.c LSRCFILES = $(shell echo $(PCFILES) | sed -e "s/$(PKG_PLATFORM).c//g") -LSRCFILES += $(LIBHFILES) LSRCFILES += gen_crc32table.c # @@ -135,7 +131,7 @@ include $(BUILDRULES) install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) -install-headers: $(addsuffix -hdrs, $(PKGHFILES) $(LIBHFILES)) +install-headers: $(addsuffix -hdrs, $(PKGHFILES)) %-hdrs: $(Q)$(LN_S) -f $(PWD)/libxfs/$* $(TOPDIR)/include/xfs/$* diff --git a/libxfs/crc32.c b/libxfs/crc32.c index 63b1467..b2c7ec0 100644 --- a/libxfs/crc32.c +++ b/libxfs/crc32.c @@ -33,8 +33,8 @@ * match the hardware acceleration available on Intel CPUs. */ -#include "xfs/platform_defs.h" -#include "xfs/xfs_arch.h" +#include "platform_defs.h" +#include "xfs_arch.h" #include "crc32defs.h" /* types specifc to this file */ diff --git a/libxfs/darwin.c b/libxfs/darwin.c index f4a3898..b9c314f 100644 --- a/libxfs/darwin.c +++ b/libxfs/darwin.c @@ -21,7 +21,7 @@ #include #include #include -#include "xfs/libxfs.h" +#include "libxfs.h" int platform_has_uuid = 1; extern char *progname; diff --git a/libxfs/freebsd.c b/libxfs/freebsd.c index ec131db..6c9f089 100644 --- a/libxfs/freebsd.c +++ b/libxfs/freebsd.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include diff --git a/libxfs/init.c b/libxfs/init.c index d287c1d..2859f94 100644 --- a/libxfs/init.c +++ b/libxfs/init.c @@ -31,7 +31,7 @@ #include "xfs_inode.h" #include "xfs_trans.h" -#include "xfs/libxfs.h" /* for now */ +#include "libxfs.h" /* for now */ char *progname = "libxfs"; /* default, changed by each tool */ diff --git a/libxfs/irix.c b/libxfs/irix.c index 69e6d81..65aaa7e 100644 --- a/libxfs/irix.c +++ b/libxfs/irix.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 445a6dc..7a29fd7 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -58,20 +58,20 @@ (ip)->d_ops, hdr, loghead) #include "libxfs_api_defs.h" -#include "xfs/platform_defs.h" +#include "platform_defs.h" -#include "xfs/list.h" -#include "xfs/hlist.h" -#include "xfs/cache.h" -#include "xfs/bitops.h" -#include "xfs/kmem.h" -#include "xfs/radix-tree.h" -#include "xfs/atomic.h" +#include "list.h" +#include "hlist.h" +#include "cache.h" +#include "bitops.h" +#include "kmem.h" +#include "radix-tree.h" +#include "atomic.h" -#include "xfs/xfs_types.h" -#include "xfs/xfs_arch.h" +#include "xfs_types.h" +#include "xfs_arch.h" -#include "xfs/xfs_fs.h" +#include "xfs_fs.h" /* CRC stuff, buffer API dependent on it */ extern uint32_t crc32_le(uint32_t crc, unsigned char const *p, size_t len); @@ -80,7 +80,7 @@ extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len); #define crc32(c,p,l) crc32_le((c),(unsigned char const *)(p),(l)) #define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l)) -#include "xfs/xfs_cksum.h" +#include "xfs_cksum.h" /* * This mirrors the kernel include for xfs_buf.h - it's implicitly included in diff --git a/libxfs/radix-tree.c b/libxfs/radix-tree.c index c859f28..9e395be 100644 --- a/libxfs/radix-tree.c +++ b/libxfs/radix-tree.c @@ -18,7 +18,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "xfs/platform_defs.h" +#include "platform_defs.h" #include "radix-tree.h" #ifndef ARRAY_SIZE diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index 4e0c75b..4f8212f 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -30,7 +30,7 @@ #include "xfs_inode.h" #include "xfs_trans.h" -#include "xfs/libxfs.h" /* for LIBXFS_EXIT_ON_FAILURE */ +#include "libxfs.h" /* for LIBXFS_EXIT_ON_FAILURE */ /* * Important design/architecture note: diff --git a/libxlog/util.c b/libxlog/util.c index a0e35cc..2feae82 100644 --- a/libxlog/util.c +++ b/libxlog/util.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" int print_exit; int print_skip_uuid; diff --git a/libxlog/xfs_log_recover.c b/libxlog/xfs_log_recover.c index a80c431..ef7cf68 100644 --- a/libxlog/xfs_log_recover.c +++ b/libxlog/xfs_log_recover.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #define xfs_readonly_buftarg(buftarg) (0) diff --git a/logprint/log_copy.c b/logprint/log_copy.c index ea55a1f..1cc4c21 100644 --- a/logprint/log_copy.c +++ b/logprint/log_copy.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_dump.c b/logprint/log_dump.c index efcf62e..2bccb50 100644 --- a/logprint/log_dump.c +++ b/logprint/log_dump.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_misc.c b/logprint/log_misc.c index 7ea6edc..fd30679 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c index 6569968..9f1a7ab 100644 --- a/logprint/log_print_all.c +++ b/logprint/log_print_all.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/log_print_trans.c b/logprint/log_print_trans.c index cbd7a9c..9bf2b37 100644 --- a/logprint/log_print_trans.c +++ b/logprint/log_print_trans.c @@ -15,8 +15,8 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/logprint/logprint.c b/logprint/logprint.c index 2ad2ec0..a5c9b32 100644 --- a/logprint/logprint.c +++ b/logprint/logprint.c @@ -18,8 +18,8 @@ #include #include -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "logprint.h" diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c index ea7298d..5764616 100644 --- a/mdrestore/xfs_mdrestore.c +++ b/mdrestore/xfs_mdrestore.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "xfs_metadump.h" char *progname; diff --git a/mkfs/fstyp.c b/mkfs/fstyp.c index 7410516..7f3da06 100644 --- a/mkfs/fstyp.c +++ b/mkfs/fstyp.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include /* diff --git a/mkfs/maxtrres.c b/mkfs/maxtrres.c index f6bcec0..e1d5ee9 100644 --- a/mkfs/maxtrres.c +++ b/mkfs/maxtrres.c @@ -24,7 +24,7 @@ * directory block size. */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "xfs_mkfs.h" int diff --git a/mkfs/proto.c b/mkfs/proto.c index 17308bc..cb34b28 100644 --- a/mkfs/proto.c +++ b/mkfs/proto.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "xfs_mkfs.h" diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 11e9f4b..80cdd10 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #ifdef ENABLE_BLKID #include diff --git a/quota/edit.c b/quota/edit.c index 0170d51..d226e89 100644 --- a/quota/edit.c +++ b/quota/edit.c @@ -19,8 +19,8 @@ #include #include #include -#include "xfs/input.h" -#include "xfs/command.h" +#include "input.h" +#include "command.h" #include "init.h" #include "quota.h" diff --git a/quota/free.c b/quota/free.c index 72ab503..dcbe8ce 100644 --- a/quota/free.c +++ b/quota/free.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include "init.h" #include "quota.h" diff --git a/quota/init.c b/quota/init.c index 019e2c5..52f7941 100644 --- a/quota/init.c +++ b/quota/init.c @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/path.h" -#include "xfs/command.h" -#include "xfs/input.h" +#include "path.h" +#include "command.h" +#include "input.h" #include "init.h" char *progname; diff --git a/quota/path.c b/quota/path.c index 9a35332..bdb8c98 100644 --- a/quota/path.c +++ b/quota/path.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" -#include "xfs/input.h" +#include "command.h" +#include "input.h" #include "init.h" #include "quota.h" diff --git a/quota/project.c b/quota/project.c index f30c6c6..17a83b0 100644 --- a/quota/project.c +++ b/quota/project.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" -#include "xfs/input.h" +#include "command.h" +#include "input.h" #include "init.h" #include "quota.h" diff --git a/quota/quot.c b/quota/quot.c index be41026..9116e48 100644 --- a/quota/quot.c +++ b/quota/quot.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include #include #include diff --git a/quota/quota.c b/quota/quota.c index d249740..f6b24c3 100644 --- a/quota/quota.c +++ b/quota/quota.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include #include #include diff --git a/quota/quota.h b/quota/quota.h index 974747f..a905ce5 100644 --- a/quota/quota.h +++ b/quota/quota.h @@ -16,9 +16,9 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/xqm.h" -#include "xfs/path.h" -#include "xfs/project.h" +#include "xqm.h" +#include "path.h" +#include "project.h" #include /* diff --git a/quota/report.c b/quota/report.c index 7c3cf45..3d84447 100644 --- a/quota/report.c +++ b/quota/report.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include #include #include diff --git a/quota/state.c b/quota/state.c index b1827b6..0173f40 100644 --- a/quota/state.c +++ b/quota/state.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/command.h" +#include "command.h" #include "init.h" #include "quota.h" diff --git a/repair/agheader.c b/repair/agheader.c index a216afa..c79031f 100644 --- a/repair/agheader.c +++ b/repair/agheader.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "agheader.h" #include "protos.h" diff --git a/repair/attr_repair.c b/repair/attr_repair.c index e2bfd44..62f80e7 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "err_protos.h" #include "attr_repair.h" diff --git a/repair/avl.c b/repair/avl.c index 83e3087..e3843ae 100644 --- a/repair/avl.c +++ b/repair/avl.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #define CERT ASSERT diff --git a/repair/avl64.c b/repair/avl64.c index 64f5358..51cd624 100644 --- a/repair/avl64.c +++ b/repair/avl64.c @@ -17,7 +17,7 @@ */ #include -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl64.h" #define CERT ASSERT diff --git a/repair/bmap.c b/repair/bmap.c index c5c50c3..2655632 100644 --- a/repair/bmap.c +++ b/repair/bmap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "err_protos.h" #include "bmap.h" diff --git a/repair/btree.c b/repair/btree.c index bc4ed98..66fb40b 100644 --- a/repair/btree.c +++ b/repair/btree.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "btree.h" /* diff --git a/repair/dino_chunks.c b/repair/dino_chunks.c index d484a1d..7dbaca6 100644 --- a/repair/dino_chunks.c +++ b/repair/dino_chunks.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/dinode.c b/repair/dinode.c index 09db966..c6303fa 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/dir2.c b/repair/dir2.c index c89f478..187e069 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "incore.h" diff --git a/repair/globals.c b/repair/globals.c index d0ca3fb..9619220 100644 --- a/repair/globals.c +++ b/repair/globals.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #define EXTERN #include "globals.h" diff --git a/repair/incore.c b/repair/incore.c index d5ecfd6..cb57316 100644 --- a/repair/incore.c +++ b/repair/incore.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "btree.h" #include "globals.h" diff --git a/repair/incore_bmc.c b/repair/incore_bmc.c index c1e855d..de142ee 100644 --- a/repair/incore_bmc.c +++ b/repair/incore_bmc.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "incore.h" diff --git a/repair/incore_ext.c b/repair/incore_ext.c index c15e57d..cac379c 100644 --- a/repair/incore_ext.c +++ b/repair/incore_ext.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "btree.h" #include "globals.h" diff --git a/repair/incore_ino.c b/repair/incore_ino.c index 7e19657..32d7678 100644 --- a/repair/incore_ino.c +++ b/repair/incore_ino.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "incore.h" diff --git a/repair/init.c b/repair/init.c index a7547cb..609229c 100644 --- a/repair/init.c +++ b/repair/init.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "agheader.h" #include "protos.h" diff --git a/repair/phase1.c b/repair/phase1.c index bd9adcb..126d0b3 100644 --- a/repair/phase1.c +++ b/repair/phase1.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "agheader.h" #include "protos.h" diff --git a/repair/phase2.c b/repair/phase2.c index 04c1295..4c270e5 100644 --- a/repair/phase2.c +++ b/repair/phase2.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/phase3.c b/repair/phase3.c index 4751e56..20786af 100644 --- a/repair/phase3.c +++ b/repair/phase3.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "threads.h" #include "prefetch.h" #include "avl.h" diff --git a/repair/phase4.c b/repair/phase4.c index 8d3525c..e0571e8 100644 --- a/repair/phase4.c +++ b/repair/phase4.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "threads.h" #include "prefetch.h" #include "avl.h" diff --git a/repair/phase5.c b/repair/phase5.c index 9b3d73b..b9a64b9 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/phase6.c b/repair/phase6.c index 9a5cba7..672c6f1 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "threads.h" #include "prefetch.h" #include "avl.h" diff --git a/repair/phase7.c b/repair/phase7.c index 56c0379..b1e3a55 100644 --- a/repair/phase7.c +++ b/repair/phase7.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/prefetch.c b/repair/prefetch.c index 08c0394..8b261ae 100644 --- a/repair/prefetch.c +++ b/repair/prefetch.c @@ -1,4 +1,4 @@ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include "avl.h" #include "btree.h" diff --git a/repair/progress.c b/repair/progress.c index 1b27924..27cbaef 100644 --- a/repair/progress.c +++ b/repair/progress.c @@ -1,5 +1,5 @@ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "globals.h" #include "progress.h" #include "err_protos.h" diff --git a/repair/rt.c b/repair/rt.c index b412a0f..3290d2c 100644 --- a/repair/rt.c +++ b/repair/rt.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/sb.c b/repair/sb.c index f6a1f15..4eef14a 100644 --- a/repair/sb.c +++ b/repair/sb.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include "agheader.h" #include "globals.h" #include "protos.h" diff --git a/repair/scan.c b/repair/scan.c index e9a8ab4..dd61046 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #include "avl.h" #include "globals.h" #include "agheader.h" diff --git a/repair/threads.c b/repair/threads.c index a5fb856..631531f 100644 --- a/repair/threads.c +++ b/repair/threads.c @@ -1,4 +1,4 @@ -#include "xfs/libxfs.h" +#include "libxfs.h" #include #include #include "threads.h" diff --git a/repair/versions.c b/repair/versions.c index 0bf4ab3..fb1b3e4 100644 --- a/repair/versions.c +++ b/repair/versions.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" #define EXTERN #include "versions.h" diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index df1fd78..db703d0 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -16,8 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" -#include "xfs/libxlog.h" +#include "libxfs.h" +#include "libxlog.h" #include #include "avl.h" #include "avl64.h" diff --git a/rtcp/xfs_rtcp.c b/rtcp/xfs_rtcp.c index 7f48060..f604b46 100644 --- a/rtcp/xfs_rtcp.c +++ b/rtcp/xfs_rtcp.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" int rtcp(char *, char *, int); int xfsrtextsize(char *path); -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:17:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CBC6D7FA0 for ; Sun, 26 Jul 2015 11:17:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B19358F8033 for ; Sun, 26 Jul 2015 09:17:02 -0700 (PDT) X-ASG-Debug-ID: 1437927419-04cbb06a74b2b00001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id oVda7RgtOI5xAevD (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:17:00 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObi-0000Rr-D3 for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:16:59 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 09/10] xfsprogs: move __u*/__s* typedefs to per-port headers Date: Sun, 26 Jul 2015 18:13:28 +0200 X-ASG-Orig-Subj: [PATCH 09/10] xfsprogs: move __u*/__s* typedefs to per-port headers Message-Id: <1437927209-31354-10-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927420 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Currently we have to install the autoconf-generated platform_defs.h to get the defintions for these. But they are clearly a feature of Linux vs non-Linux platforms so move them to the per-port headers instead. Note: in the long run it might be a good idea to just the standard uint*_t/int*_t types instead. Signed-off-by: Christoph Hellwig --- configure.ac | 1 - include/darwin.h | 9 +++++++++ include/freebsd.h | 9 +++++++++ include/gnukfreebsd.h | 9 +++++++++ include/irix.h | 9 +++++++++ include/linux.h | 1 + include/platform_defs.h.in | 14 -------------- m4/package_types.m4 | 13 ------------- 8 files changed, 37 insertions(+), 28 deletions(-) diff --git a/configure.ac b/configure.ac index fe991cc..d6d1adc 100644 --- a/configure.ac +++ b/configure.ac @@ -116,7 +116,6 @@ AC_HAVE_READDIR AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([char *]) -AC_TYPE_U32 AC_TYPE_UMODE_T AC_MANUAL_FORMAT diff --git a/include/darwin.h b/include/darwin.h index 30f0052..abdf4e3 100644 --- a/include/darwin.h +++ b/include/darwin.h @@ -109,6 +109,15 @@ static __inline__ void platform_uuid_copy(uuid_t *dst, uuid_t *src) memcpy(dst, src, sizeof(uuid_t)); } +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define __int8_t int8_t #define __int16_t int16_t #define __int32_t int32_t diff --git a/include/freebsd.h b/include/freebsd.h index e59b1e8..902b940 100644 --- a/include/freebsd.h +++ b/include/freebsd.h @@ -53,6 +53,15 @@ typedef __uint64_t xfs_ino_t; typedef __uint32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define O_LARGEFILE 0 #define HAVE_FID 1 diff --git a/include/gnukfreebsd.h b/include/gnukfreebsd.h index b83c144..95c4c13 100644 --- a/include/gnukfreebsd.h +++ b/include/gnukfreebsd.h @@ -42,6 +42,15 @@ typedef __uint64_t xfs_ino_t; typedef __uint32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define HAVE_FID 1 static __inline__ int xfsctl(const char *path, int fd, int cmd, void *p) diff --git a/include/irix.h b/include/irix.h index 31050c4..28564c8 100644 --- a/include/irix.h +++ b/include/irix.h @@ -47,6 +47,15 @@ typedef __int64_t xfs_ino_t; typedef __int32_t xfs_dev_t; typedef __int64_t xfs_daddr_t; +typedef unsigned char __u8; +typedef signed char __s8; +typedef unsigned short __u16; +typedef signed short __s16; +typedef unsigned int __u32; +typedef signed int __s32; +typedef unsigned long long int __u64; +typedef signed long long int __s64; + #define xfs_flock64 flock64 #define xfs_flock64_t struct flock64 diff --git a/include/linux.h b/include/linux.h index 31c077a..cb6298f 100644 --- a/include/linux.h +++ b/include/linux.h @@ -28,6 +28,7 @@ #include #include #include +#include static __inline__ int xfsctl(const char *path, int fd, int cmd, void *p) { diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 81741c4..db6cb2e 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -36,20 +36,6 @@ #include #include -#undef HAVE___U32 -#ifdef HAVE___U32 -#include -#else -typedef unsigned char __u8; -typedef signed char __s8; -typedef unsigned short __u16; -typedef signed short __s16; -typedef unsigned int __u32; -typedef signed int __s32; -typedef unsigned long long int __u64; -typedef signed long long int __s64; -#endif - typedef struct filldir filldir_t; #if defined(__linux__) diff --git a/m4/package_types.m4 b/m4/package_types.m4 index c3645bc..4aa09a5 100644 --- a/m4/package_types.m4 +++ b/m4/package_types.m4 @@ -1,16 +1,3 @@ -# -# Check if we have a type for __u32 -# -AC_DEFUN([AC_TYPE_U32], - [ AC_MSG_CHECKING([for __u32 ]) - AC_TRY_COMPILE([ -#include -#include -#include - ], [ - __u32 u32; - ], AC_DEFINE(HAVE___U32) AC_MSG_RESULT(yes) , AC_MSG_RESULT(no)) - ]) # # Check if we have umode_t # -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:17:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 080D27F73 for ; Sun, 26 Jul 2015 11:17:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id ACB5730404E for ; Sun, 26 Jul 2015 09:17:09 -0700 (PDT) X-ASG-Debug-ID: 1437927427-04bdf00230b8620001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id pLxDtl4nLl7PZEUo (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:17:07 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from p5de57ec4.dip0.t-ipconnect.de ([93.229.126.196] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJObn-0000SG-I5 for xfs@oss.sgi.com; Sun, 26 Jul 2015 16:17:07 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [PATCH 10/10] xfsprogs: don't install platform_defs.h Date: Sun, 26 Jul 2015 18:13:29 +0200 X-ASG-Orig-Subj: [PATCH 10/10] xfsprogs: don't install platform_defs.h Message-Id: <1437927209-31354-11-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437927209-31354-1-git-send-email-hch@lst.de> References: <1437927209-31354-1-git-send-email-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927427 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 platform_defs.h is a generated header file, which causes all kinds of problems when installed on multiarch systems, and requires workarounds in distribution packages. Instead move the small parts of it needed in the installed xfs.h into xfs.h and keep platform_defs.h private to xfsprogs. Signed-off-by: Christoph Hellwig --- include/Makefile | 4 ++-- include/libxfs.h | 1 + include/linux.h | 1 + include/path.h | 2 +- include/platform_defs.h.in | 27 --------------------------- include/project.h | 1 + include/xfs.h | 28 +++++++++++++++++++++++++++- io/attr.c | 1 - io/bmap.c | 2 +- io/fadvise.c | 1 - io/fiemap.c | 2 +- io/file.c | 1 - io/freeze.c | 1 - io/fsync.c | 2 +- io/getrusage.c | 1 - io/imap.c | 1 - io/init.c | 2 +- io/inject.c | 1 - io/io.h | 2 ++ io/link.c | 1 - io/madvise.c | 1 - io/mincore.c | 1 - io/mmap.c | 1 - io/open.c | 1 - io/parent.c | 1 - io/pread.c | 1 - io/prealloc.c | 1 - io/pwrite.c | 1 - io/readdir.c | 1 - io/resblks.c | 1 - io/seek.c | 1 - io/sendfile.c | 1 - io/shutdown.c | 1 - io/sync.c | 2 +- io/sync_file_range.c | 1 - io/truncate.c | 1 - libhandle/handle.c | 1 + libhandle/jdm.c | 1 + libxcmd/command.c | 2 +- libxcmd/help.c | 2 +- libxcmd/input.c | 2 +- libxcmd/quit.c | 2 +- libxfs/crc32.c | 1 + libxfs/libxfs_priv.h | 1 + libxfs/radix-tree.c | 1 + 45 files changed, 49 insertions(+), 63 deletions(-) diff --git a/include/Makefile b/include/Makefile index 778317e..e2a4b09 100644 --- a/include/Makefile +++ b/include/Makefile @@ -38,12 +38,12 @@ LIBHFILES = libxfs.h \ command.h \ input.h \ path.h \ - project.h + project.h \ + platform_defs.h \ HFILES = handle.h \ jdm.h \ $(PKG_PLATFORM).h \ - platform_defs.h \ xfs.h \ xqm.h \ xfs_arch.h diff --git a/include/libxfs.h b/include/libxfs.h index 1fb2d6d..b1604e2 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -21,6 +21,7 @@ #include "libxfs_api_defs.h" #include "platform_defs.h" +#include "xfs.h" #include "list.h" #include "hlist.h" diff --git a/include/linux.h b/include/linux.h index cb6298f..8804c2d 100644 --- a/include/linux.h +++ b/include/linux.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include diff --git a/include/path.h b/include/path.h index 58955ef..46a887e 100644 --- a/include/path.h +++ b/include/path.h @@ -18,7 +18,7 @@ #ifndef __PATH_H__ #define __PATH_H__ -#include "xfs.h" +#include "platform_defs.h" /* * XFS Filesystem Paths diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index db6cb2e..fc7e01a 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -38,20 +38,6 @@ typedef struct filldir filldir_t; -#if defined(__linux__) -#include -#elif defined(__FreeBSD__) -#include -#elif defined(__FreeBSD_kernel__) -#include -#elif defined(__APPLE__) -#include -#elif defined(__sgi__) || defined(__sgi) -#include -#else -# error unknown platform... have fun porting! -#endif - /* long and pointer must be either 32 bit or 64 bit */ #undef SIZEOF_LONG #undef SIZEOF_CHAR_P @@ -76,19 +62,6 @@ typedef unsigned short umode_t; #endif #include -#ifdef DEBUG -# define ASSERT(EX) assert(EX) -#else -# define ASSERT(EX) ((void) 0) -#endif - -/* - * sparse kernel source annotations - */ -#ifndef __user -#define __user -#endif - #define IRIX_DEV_BITSMAJOR 14 #define IRIX_DEV_BITSMINOR 18 #define IRIX_DEV_MAXMAJ 0x1ff diff --git a/include/project.h b/include/project.h index 63bdffd..77ed06b 100644 --- a/include/project.h +++ b/include/project.h @@ -18,6 +18,7 @@ #ifndef __PROJECT_H__ #define __PROJECT_H__ +#include "platform_defs.h" #include "xfs.h" extern int setprojid(const char *__name, int __fd, prid_t __id); diff --git a/include/xfs.h b/include/xfs.h index e32c4a8..bc94068 100644 --- a/include/xfs.h +++ b/include/xfs.h @@ -33,7 +33,33 @@ #ifndef __XFS_H__ #define __XFS_H__ -#include +#if defined(__linux__) +#include +#elif defined(__FreeBSD__) +#include +#elif defined(__FreeBSD_kernel__) +#include +#elif defined(__APPLE__) +#include +#elif defined(__sgi__) || defined(__sgi) +#include +#else +# error unknown platform... have fun porting! +#endif + +#ifdef DEBUG +# define ASSERT(EX) assert(EX) +#else +# define ASSERT(EX) ((void) 0) +#endif + +/* + * sparse kernel source annotations + */ +#ifndef __user +#define __user +#endif + #include #include diff --git a/io/attr.c b/io/attr.c index bc1ab56..7cbcc3c 100644 --- a/io/attr.c +++ b/io/attr.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/bmap.c b/io/bmap.c index 432ddb7..cbeed3b 100644 --- a/io/bmap.c +++ b/io/bmap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "init.h" #include "io.h" diff --git a/io/fadvise.c b/io/fadvise.c index fa586d3..d59d1ff 100644 --- a/io/fadvise.c +++ b/io/fadvise.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/fiemap.c b/io/fiemap.c index 8482c99..17b38a4 100644 --- a/io/fiemap.c +++ b/io/fiemap.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include #include diff --git a/io/file.c b/io/file.c index 91dd38e..d4bc4f8 100644 --- a/io/file.c +++ b/io/file.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/freeze.c b/io/freeze.c index 90f5b66..3d0d2a4 100644 --- a/io/freeze.c +++ b/io/freeze.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/fsync.c b/io/fsync.c index 6c93dff..9fe5e2f 100644 --- a/io/fsync.c +++ b/io/fsync.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "init.h" #include "io.h" diff --git a/io/getrusage.c b/io/getrusage.c index 28b8453..bccf94c 100644 --- a/io/getrusage.c +++ b/io/getrusage.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/imap.c b/io/imap.c index 7c24bcd..34901cb 100644 --- a/io/imap.c +++ b/io/imap.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/init.c b/io/init.c index 70214f9..13f35c4 100644 --- a/io/init.c +++ b/io/init.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/inject.c b/io/inject.c index 23eb4a2..90ccda8 100644 --- a/io/inject.c +++ b/io/inject.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/io.h b/io/io.h index db8b513..b115e4a 100644 --- a/io/io.h +++ b/io/io.h @@ -16,6 +16,8 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "xfs.h" + /* * Read/write patterns (default is always "forward") */ diff --git a/io/link.c b/io/link.c index 7fb81e1..ccf8e69 100644 --- a/io/link.c +++ b/io/link.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/madvise.c b/io/madvise.c index b30d28b..1d8b53c 100644 --- a/io/madvise.c +++ b/io/madvise.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/mincore.c b/io/mincore.c index 670d4c8..9e0d3a6 100644 --- a/io/mincore.c +++ b/io/mincore.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/mmap.c b/io/mmap.c index 33747c1..f26276e 100644 --- a/io/mmap.c +++ b/io/mmap.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/open.c b/io/open.c index 33d9f8d..ac5a5e0 100644 --- a/io/open.c +++ b/io/open.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/parent.c b/io/parent.c index a374b3e..abc3402 100644 --- a/io/parent.c +++ b/io/parent.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "path.h" diff --git a/io/pread.c b/io/pread.c index 9205e34..1c77c41 100644 --- a/io/pread.c +++ b/io/pread.c @@ -17,7 +17,6 @@ */ #include -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/prealloc.c b/io/prealloc.c index b60d2dc..713ea7b 100644 --- a/io/prealloc.c +++ b/io/prealloc.c @@ -19,7 +19,6 @@ #if defined(HAVE_FALLOCATE) #include #endif -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/pwrite.c b/io/pwrite.c index c9d2b1a..10f78e4 100644 --- a/io/pwrite.c +++ b/io/pwrite.c @@ -17,7 +17,6 @@ */ #include -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/readdir.c b/io/readdir.c index f8b2755..7b0edbc 100644 --- a/io/readdir.c +++ b/io/readdir.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/resblks.c b/io/resblks.c index df032d5..73318ae 100644 --- a/io/resblks.c +++ b/io/resblks.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/seek.c b/io/seek.c index 39dab61..35a369e 100644 --- a/io/seek.c +++ b/io/seek.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/sendfile.c b/io/sendfile.c index 744b618..5c1638f 100644 --- a/io/sendfile.c +++ b/io/sendfile.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include diff --git a/io/shutdown.c b/io/shutdown.c index b75278a..d8507cc 100644 --- a/io/shutdown.c +++ b/io/shutdown.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/sync.c b/io/sync.c index 0e7b82d..28e3a15 100644 --- a/io/sync.c +++ b/io/sync.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "init.h" #include "io.h" diff --git a/io/sync_file_range.c b/io/sync_file_range.c index 8e66773..7e4f3e6 100644 --- a/io/sync_file_range.c +++ b/io/sync_file_range.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/io/truncate.c b/io/truncate.c index 5b2ac01..f2df168 100644 --- a/io/truncate.c +++ b/io/truncate.c @@ -16,7 +16,6 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" #include "command.h" #include "input.h" #include "init.h" diff --git a/libhandle/handle.c b/libhandle/handle.c index 7313e3b..b1c0c10 100644 --- a/libhandle/handle.c +++ b/libhandle/handle.c @@ -17,6 +17,7 @@ */ #include +#include "platform_defs.h" #include "xfs.h" #include "handle.h" #include "parent.h" diff --git a/libhandle/jdm.c b/libhandle/jdm.c index 13196d1..d804423 100644 --- a/libhandle/jdm.c +++ b/libhandle/jdm.c @@ -16,6 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "platform_defs.h" #include "xfs.h" #include "handle.h" #include "jdm.h" diff --git a/libxcmd/command.c b/libxcmd/command.c index 5d0649b..42a77e9 100644 --- a/libxcmd/command.c +++ b/libxcmd/command.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" #include "input.h" diff --git a/libxcmd/help.c b/libxcmd/help.c index 023b830..fad0ab9 100644 --- a/libxcmd/help.c +++ b/libxcmd/help.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" static cmdinfo_t help_cmd; diff --git a/libxcmd/input.c b/libxcmd/input.c index 966a7ff..c505ab3 100644 --- a/libxcmd/input.c +++ b/libxcmd/input.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "input.h" #include #include diff --git a/libxcmd/quit.c b/libxcmd/quit.c index 0a2dd40..0183b8f 100644 --- a/libxcmd/quit.c +++ b/libxcmd/quit.c @@ -16,7 +16,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs.h" +#include "platform_defs.h" #include "command.h" static cmdinfo_t quit_cmd; diff --git a/libxfs/crc32.c b/libxfs/crc32.c index b2c7ec0..783d62e 100644 --- a/libxfs/crc32.c +++ b/libxfs/crc32.c @@ -34,6 +34,7 @@ */ #include "platform_defs.h" +#include "xfs.h" #include "xfs_arch.h" #include "crc32defs.h" diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h index 7a29fd7..1b01764 100644 --- a/libxfs/libxfs_priv.h +++ b/libxfs/libxfs_priv.h @@ -59,6 +59,7 @@ #include "libxfs_api_defs.h" #include "platform_defs.h" +#include "xfs.h" #include "list.h" #include "hlist.h" diff --git a/libxfs/radix-tree.c b/libxfs/radix-tree.c index 9e395be..4d44ab4 100644 --- a/libxfs/radix-tree.c +++ b/libxfs/radix-tree.c @@ -19,6 +19,7 @@ */ #include "platform_defs.h" +#include "xfs.h" #include "radix-tree.h" #ifndef ARRAY_SIZE -- 1.9.1 From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:19:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BDE017F69 for ; Sun, 26 Jul 2015 11:19:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9BD5730404E for ; Sun, 26 Jul 2015 09:19:23 -0700 (PDT) X-ASG-Debug-ID: 1437927562-04bdf00231b86b0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id YHFJOAjhN9cSEMmb (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:19:22 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOe0-0000dE-Jz; Sun, 26 Jul 2015 16:19:20 +0000 Date: Sun, 26 Jul 2015 09:19:20 -0700 From: Christoph Hellwig To: Jan Tulak Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... Message-ID: <20150726161920.GB29329@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 1/2] Prefix LIST_... macros to XFS_LIST_... References: <1436964412-12093-1-git-send-email-jtulak@redhat.com> <1436964412-12093-2-git-send-email-jtulak@redhat.com> <20150715235306.GT3902@dastard> <1131231186.27908155.1437030777674.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1131231186.27908155.1437030777674.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927562 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS libxfs comes form the Linux kernel which uses these names, so we shouldn't rename them either. On various BSDS LIST* is used for different list macros, so the real question is how we end up including those. Can you post the compiler warnings you see without this patch? From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:20:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3B6FD7F69 for ; Sun, 26 Jul 2015 11:20:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 28B248F8033 for ; Sun, 26 Jul 2015 09:20:21 -0700 (PDT) X-ASG-Debug-ID: 1437927619-04cbb06a69b2bb0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id TSF0R6NaVftrFn2p (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:20:19 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOex-0001na-Bz; Sun, 26 Jul 2015 16:20:19 +0000 Date: Sun, 26 Jul 2015 09:20:19 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: [PATCH v2] xfsprogs: Search path for utilities unified Message-ID: <20150726162019.GC29329@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2] xfsprogs: Search path for utilities unified References: <1437063218-26143-1-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437063218-26143-1-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927619 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks fine, Reviewed-by: Christoph Hellwig From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:24:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 938017F69 for ; Sun, 26 Jul 2015 11:24:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 07BBFAC003 for ; Sun, 26 Jul 2015 09:24:05 -0700 (PDT) X-ASG-Debug-ID: 1437927843-04cb6c02c5ba250001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id wHaVcFo4P64XMu9V (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:24:04 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOiZ-0001xz-Ml; Sun, 26 Jul 2015 16:24:03 +0000 Date: Sun, 26 Jul 2015 09:24:03 -0700 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] xfs_repair: set args.geo in dir2_kill_block Message-ID: <20150726162403.GD29329@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_repair: set args.geo in dir2_kill_block References: <55B14B40.5030209@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55B14B40.5030209@sandeen.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927844 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks good, Reviewed-by: Christoph Hellwig And I have to say the API where we need to initialize this non-obvious pointer in the da_args structure rally sucks :( From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:25:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AC6F27F88 for ; Sun, 26 Jul 2015 11:25:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 476BFAC003 for ; Sun, 26 Jul 2015 09:25:31 -0700 (PDT) X-ASG-Debug-ID: 1437927930-04bdf00230b87d0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id xJQySlszNqn9hbPa (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:25:30 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOjy-0004K3-6z; Sun, 26 Jul 2015 16:25:30 +0000 Date: Sun, 26 Jul 2015 09:25:30 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com, hch@infradead.org, sandeen@redhat.com Subject: Re: [PATCH v3] xfsprogs: blkid is now mandatory Message-ID: <20150726162530.GE29329@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v3] xfsprogs: blkid is now mandatory References: <1156743222.24471614.1436281858017.JavaMail.zimbra@redhat.com> <1436346893-11831-1-git-send-email-jtulak@redhat.com> <1508777144.956841.1437482376774.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1508777144.956841.1437482376774.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437927930 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Tue, Jul 21, 2015 at 08:39:36AM -0400, Jan Tulak wrote: > I just found that while it is possible to get blkid on OS X, it is > in 1.0.0 version which doesn't have blkid_probe_get function. > I'm examining whether it is possible to get an updated version there, > but right now, this patch breaks OS X support. Unfortunately I didn't > noticed of this before, as the OS X port was terribly out of date. > > So this patch shouldn't be included until I find how to get around. I don't think this is a lbocker given that OSX support doesn't even work. To the contrary I'd really prefer to go in ASAP to avoid anyone relying on it longer than nessecary. From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:28:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 045B87F9D for ; Sun, 26 Jul 2015 11:28:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id CA8FD304048 for ; Sun, 26 Jul 2015 09:28:26 -0700 (PDT) X-ASG-Debug-ID: 1437928105-04cbb06a70b2d70001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 3Cvi5FRYez7UcLFt (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:28:25 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOmm-0004Rp-Sz; Sun, 26 Jul 2015 16:28:24 +0000 Date: Sun, 26 Jul 2015 09:28:24 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com, hch@infradead.org, sandeen@redhat.com Subject: Re: [PATCH v3] xfsprogs: blkid is now mandatory Message-ID: <20150726162824.GA16659@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v3] xfsprogs: blkid is now mandatory References: <1156743222.24471614.1436281858017.JavaMail.zimbra@redhat.com> <1436346893-11831-1-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436346893-11831-1-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437928105 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Wed, Jul 08, 2015 at 11:14:53AM +0200, Jan Tulak wrote: > Because blkid is here for a long time, I hereby propose a patch for > removing support for NOT having blkid. The current support through > set of #ifdef is prone to errors like > making a patch just in one of the branches, and according to a > recent talk between Christoph and Eric, it is not necessary to keep > it supported. > > Remove code for checking ENABLE_BLKID, and the code when > ENABLE_BLKID is not defined. The only use of libdisk was in the > removed code, so remove libdisk too. It makes blkid required for > compilation. > > Signed-off-by: Jan Tulak > --- > Makefile | 6 +- > configure.ac | 6 +- > debian/rules | 2 +- > include/Makefile | 2 +- > include/builddefs.in | 2 - > include/fstyp.h | 43 ----- > libdisk/Makefile | 37 ----- > libdisk/dm.c | 112 ------------- > libdisk/drivers.c | 82 ---------- > libdisk/drivers.h | 45 ------ > libdisk/evms.c | 68 -------- > libdisk/evms.h | 32 ---- > libdisk/fstype.c | 442 --------------------------------------------------- > libdisk/fstype.h | 334 -------------------------------------- > libdisk/lvm.c | 117 -------------- > libdisk/md.c | 119 -------------- > libdisk/md.h | 67 -------- > libdisk/pttype.c | 118 -------------- > libdisk/pttype.h | 50 ------ > libdisk/xvm.c | 93 ----------- > libdisk/xvm.h | 53 ------ > m4/package_blkid.m4 | 20 ++- > mkfs/Makefile | 22 +-- > mkfs/fstyp.c | 59 ------- > mkfs/xfs_mkfs.c | 100 +----------- > po/de.po | 51 ------ > po/pl.po | 49 ------ > 27 files changed, 16 insertions(+), 2115 deletions(-) > delete mode 100644 include/fstyp.h > delete mode 100644 libdisk/Makefile > delete mode 100644 libdisk/dm.c > delete mode 100644 libdisk/drivers.c > delete mode 100644 libdisk/drivers.h > delete mode 100644 libdisk/evms.c > delete mode 100644 libdisk/evms.h > delete mode 100644 libdisk/fstype.c > delete mode 100644 libdisk/fstype.h > delete mode 100644 libdisk/lvm.c > delete mode 100644 libdisk/md.c > delete mode 100644 libdisk/md.h > delete mode 100644 libdisk/pttype.c > delete mode 100644 libdisk/pttype.h > delete mode 100644 libdisk/xvm.c > delete mode 100644 libdisk/xvm.h > delete mode 100644 mkfs/fstyp.c > > diff --git a/Makefile b/Makefile > index 6d6803b..798f02a 100644 > --- a/Makefile > +++ b/Makefile > @@ -43,7 +43,7 @@ endif > # header install rules to populate include/xfs correctly > HDR_SUBDIRS = include libxfs > > -DLIB_SUBDIRS = libxlog libxcmd libhandle libdisk > +DLIB_SUBDIRS = libxlog libxcmd libhandle > LIB_SUBDIRS = libxfs $(DLIB_SUBDIRS) > TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ > mdrestore repair rtcp m4 man doc po debian > @@ -71,10 +71,6 @@ quota: libxcmd > repair: libxlog > > > -ifneq ($(ENABLE_BLKID), yes) > -mkfs: libdisk > -endif > - > ifeq ($(HAVE_BUILDDEFS), yes) > include $(BUILDRULES) > else > diff --git a/configure.ac b/configure.ac > index fe991cc..fac3ea7 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -37,10 +37,6 @@ AC_ARG_ENABLE(termcap, > test $enable_termcap = yes && libtermcap="-ltermcap",) > AC_SUBST(libtermcap) > > -# AC_HAVE_BLKID_TOPO below wil find the library & check for topo support > -AC_ARG_ENABLE(blkid, > -[ --enable-blkid=[yes/no] Enable block device id library [default=yes]],, > - enable_blkid=yes) > > AC_ARG_ENABLE(lib64, > [ --enable-lib64=[yes/no] Enable lib64 support [default=yes]],, > @@ -111,7 +107,7 @@ AC_HAVE_FALLOCATE > AC_HAVE_FIEMAP > AC_HAVE_PREADV > AC_HAVE_SYNC_FILE_RANGE > -AC_HAVE_BLKID_TOPO($enable_blkid) > +AC_HAVE_BLKID_TOPO > AC_HAVE_READDIR > > AC_CHECK_SIZEOF([long]) > diff --git a/debian/rules b/debian/rules > index 27b043f..10d04f8 100755 > --- a/debian/rules > +++ b/debian/rules > @@ -47,7 +47,7 @@ dibuild: > for dir in include libxfs; do \ > $(MAKE) -C $$dir NODEP=1 install-headers; \ > done; \ > - for dir in include libxfs libdisk mkfs; do \ > + for dir in include libxfs mkfs; do \ > $(MAKE) -C $$dir; \ > done; \ > mv mkfs/mkfs.xfs mkfs/mkfs.xfs-$(bootpkg); \ > diff --git a/include/Makefile b/include/Makefile > index 91b33b0..63a7748 100644 > --- a/include/Makefile > +++ b/include/Makefile > @@ -46,7 +46,7 @@ HFILES = handle.h \ > xqm.h > > PHFILES = darwin.h freebsd.h irix.h linux.h gnukfreebsd.h > -DKHFILES = volume.h fstyp.h dvh.h > +DKHFILES = volume.h dvh.h These two aren't useful without libdisk, so they should be removed from the repository an the Makefile as well. Otherwise looks good, Reviewed-by: Christoph Hellwig From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:28:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 034117F9D for ; Sun, 26 Jul 2015 11:28:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id DA263304043 for ; Sun, 26 Jul 2015 09:28:50 -0700 (PDT) X-ASG-Debug-ID: 1437928129-04cbb06a74b2da0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id ckMyzrTUNPSgu9yN (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:28:49 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOnB-0004T7-F2; Sun, 26 Jul 2015 16:28:49 +0000 Date: Sun, 26 Jul 2015 09:28:49 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: [PATCH v2 2/4] xfsprogs: Don't Make .po files with gettext disabled Message-ID: <20150726162849.GB16659@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2 2/4] xfsprogs: Don't Make .po files with gettext disabled References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> <1437397018-12864-3-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437397018-12864-3-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437928129 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Jul 20, 2015 at 02:56:56PM +0200, Jan Tulak wrote: > "po" target is added only if gettext binary is found. > Without this patch, Make tried to build the target even > with --enable-gettext=no configure option, which led > to a failing build. > > Signed-off-by: Jan Tulak Looks good, Reviewed-by: Christoph Hellwig From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:29:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4BE107F9D for ; Sun, 26 Jul 2015 11:29:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 12801304048 for ; Sun, 26 Jul 2015 09:29:09 -0700 (PDT) X-ASG-Debug-ID: 1437928147-04cbb06a70b2db0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id s0kfvKFkxiJQruy0 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:29:08 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOnT-0004UC-Kf; Sun, 26 Jul 2015 16:29:07 +0000 Date: Sun, 26 Jul 2015 09:29:07 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: [PATCH v2 3/4] xfsprogs: Use glibtoolize on osx Message-ID: <20150726162907.GC16659@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2 3/4] xfsprogs: Use glibtoolize on osx References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> <1437397018-12864-4-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437397018-12864-4-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437928148 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Mon, Jul 20, 2015 at 02:56:57PM +0200, Jan Tulak wrote: > OS X doesn't have libtoolize binary by default, and the available$ > ports are named "glibtoolize". Autodetect this issue. > > Signed-off-by: Jan Tulak Looks good, Reviewed-by: Christoph Hellwig From BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 26 11:34:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E5AF87F9D for ; Sun, 26 Jul 2015 11:34:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id CB3B18F8035 for ; Sun, 26 Jul 2015 09:34:39 -0700 (PDT) X-ASG-Debug-ID: 1437928478-04cbb06a69b2ee0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id hJ4y0kGDyUgH3Uv2 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 09:34:38 -0700 (PDT) X-Barracuda-Envelope-From: BATV+3f1a356d423d92464b50+4354+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZJOso-0005wv-7x; Sun, 26 Jul 2015 16:34:38 +0000 Date: Sun, 26 Jul 2015 09:34:38 -0700 From: Christoph Hellwig To: Jan Tulak Cc: xfs@oss.sgi.com Subject: Re: [PATCH v2 4/4] xfsprogs: OS X partial support Message-ID: <20150726163438.GD16659@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2 4/4] xfsprogs: OS X partial support References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> <1437397018-12864-5-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437397018-12864-5-git-send-email-jtulak@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1437928478 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS I think this needs to be split into one patch per issue. A few comments below: > -#include malloc and friends need to be in stdlib.h per Posix, so the right fix is to drop every include of malloc.h and mae sure we include stdlib.h where needed. > -#include > #include > #include > #include > #include > -#include sys/vfs.h is jsut an alias for sys/stafs.h, ut given that this file doesn't even use statfs we can simply drop the include unconditionally. > +#ifndef PLATFORM_HAS_NO_MNTENT_H > +# include > +#endif Why aren't you using the standard autoconf-generate include checks? > +#ifdef _DIRENT_HAVE_D_RECLEN > *total += dirent->d_reclen; > +#endif > count++; > > if (dump) { > dump_dirent(offset, dirent); > +#ifdef _DIRENT_HAVE_D_OFF > offset = dirent->d_off; > +#endif I'm pretty sure autoconf has a standard macro for this, try looking it up in the autoconf manual. > diff --git a/libxcmd/paths.c b/libxcmd/paths.c > index c0b1ddb..b360617 100644 > --- a/libxcmd/paths.c > +++ b/libxcmd/paths.c > @@ -364,7 +364,7 @@ fs_table_initialise_mounts( > continue; > if (!realpath(stats[i].f_mntfromname, rmntfromname)) > continue; > - if (!realpath(stats[i].f_mntonname, rmnttomname))) > + if (!realpath(stats[i].f_mntonname, rmntonname)) I don't understand this change. From jj47ewrwspaqw@btconnect.com Sun Jul 26 19:41:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_OBFU_DOC_ATTACH autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 859E57F84 for ; Sun, 26 Jul 2015 19:41:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 33EC78F8033 for ; Sun, 26 Jul 2015 17:41:44 -0700 (PDT) X-ASG-Debug-ID: 1437957701-04bdf00232bf0e0001-NocioJ Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1hn0249.outbound.protection.outlook.com [157.56.112.249]) by cuda.sgi.com with ESMTP id ztZ6kZV9XqMa25OQ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 26 Jul 2015 17:41:43 -0700 (PDT) X-Barracuda-Envelope-From: jj47ewrwspaqw@btconnect.com X-Barracuda-Apparent-Source-IP: 157.56.112.249 Authentication-Results: oss.sgi.com; dkim=none (message not signed) header.d=none; Received: from 37.234.24.185.rdns.servebyte.com (185.24.234.37) by HE1PR07MB1065.eurprd07.prod.outlook.com (10.163.177.139) with Microsoft SMTP Server (TLS) id 15.1.225.19; Mon, 27 Jul 2015 00:41:41 +0000 From: JOSE MIGUEL Subject: Avis de paiement To: xfs X-ASG-Orig-Subj: Avis de paiement Content-Type: multipart/mixed; boundary="UmyfmGmk6=_wRrDIQa1rrgzmWxKLe0YoT9" MIME-Version: 1.0 Reply-To: JOSE MIGUEL Date: Mon, 27 Jul 2015 00:33:27 +0100 X-Originating-IP: [185.24.234.37] X-ClientProxiedBy: AM3PR03CA036.eurprd03.prod.outlook.com (10.141.191.164) To HE1PR07MB1065.eurprd07.prod.outlook.com (25.163.177.139) Message-ID: X-Microsoft-Exchange-Diagnostics: 1;HE1PR07MB1065;2:bksksDM4eaYCg5mM5hPmE/vfWhN8AFPvyopIGee7U/l6kf0CVplbMmRoPZD44JGXqtrznm+XpPvflllJUtAfvwhZh+QkNfUTqwuAhlLzu+iojK3xNOr/3QCcovhTiAkKYH58Gm1+Pd7DQm0P46NahtTdqOxHaJfGRAk/mOzsIX4=;3:cEC9J5OHQ7bWPl6drEljNvSpERId1m3VF67gUJKh2UpdhR8CXE5mtt9PyTza9XNg13pcpz4GbqkksbiLnEVwUMXCwYQ5UxEhwFbFS6VVUQ/skvzuH5a61uceTyfBRqMyjHl9+jPXltg6iRVuodR84g==;25:dIczfBgXrb7vD2G3Kw1JA4+QiLGiWZQycUk2P9CuUDukIDnIyr+LpQuQ4AxIZKb+4MS3Q6a3GjQkmGyi/p9Mh7JHW9EOxU/bNrp8oVo+Ei9WffnmFejHN8gP6FeuF2y3Zqi8GHQ+IDMHzsDWr2n6eiQVq78tx93+WfDUCarqU+j/aiUzRUea5VDfKCw0WYyawb0D9i2R2AZFuquBnkWQIh+IXGqDFnjmFBmKg3plwBbcfUZgnRaDxO+p0cWZN9Cb50ajoNw3eMRzx+m3Hyf3hw==;4:xXf9Y0IimGt+y6QJHbcbnjKxC89Yw2b1iY05hKHqbW/asZ8Id6hXJU+NGjuBUBxivd7gs7rgLicODQG4N7RaeUCwmne7rnxcXZZGE1tXDiyFDiEoOY6CQRnxEUtIIllmHy87FjrIKlPT5676rDgMdL2CUgbWajFNg4le6P13M2CNg5IZXn1xXyLZn+PzYtaDwLKh8SggtZnxyq/1KpsnnThcGCKIo+kHYxQrIz4c49QuTFzbirZuBgbF9Dp/hdJTQGXmNY0fSwuVVqT3J1JAf2nKoWOeRh88qz/Wt9wOQJs= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR07MB1065; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:HE1PR07MB1065;BCL:0;PCL:0;RULEID:;SRVR:HE1PR07MB1065; X-Forefront-PRVS: 0650714AAA X-Forefront-Antispam-Report: SFV:SPM;SFS:(10019020)(6009001)(6049001)(189998001)(74316001)(229853001)(5004230100001)(84392001)(19580395003)(4610100001)(564344004)(42186005)(512874002)(53806999)(54356999)(77096005)(87976001)(40100003)(43066003)(122386002)(33656002)(5890100001)(568964001)(5001920100001)(5000100001)(77156002)(450100001)(62966003)(575784001)(66066001)(86362001)(110136002)(107886002)(50986999)(19618925002)(5001960100002)(84326002)(46102003)(76576001)(7099028)(30110200001)(28580200001);DIR:OUT;SFP:1501;SCL:5;SRVR:HE1PR07MB1065;H:37.234.24.185.rdns.servebyte.com;FPR:;SPF:None;MLV:spm;PTR:InfoNoRecords;LANG:fr; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR07MB1065;23:4OOX/LH+O206RVxXBND5I/5vkEzKQD9Dm3zoLkOrU?= =?us-ascii?Q?hLKcuAm1XMT9iRsuV5dVzIe0Hbn47VUsmWLCet08A4u1r7Dg5uFbSpQLEq6C?= =?us-ascii?Q?SQwk4eDNEOYXLbJy6iEGljDq6As2sDoRowRlAzrH19uf8hDB2RuIqrlP+0W0?= =?us-ascii?Q?kK5F8ERtIWeDSqwF4LWgMA9vGsZG8Ivqfi33S2vhl0rhrtkrVjs0mG62Munw?= =?us-ascii?Q?SSqr5QWF0gtnKinNt0dGg7IlXMSjzSHtgR/AuTxzqZbyb6w8ZAN1DYzXeRo/?= =?us-ascii?Q?efWUk70uAifiz5k4qN51td00BYMR8Ng4YF+L653nEOOQH4jrgWrWz4Fut4TO?= =?us-ascii?Q?G04mWMwkWJ1DuXHiLe76XBkKvArMMDNZ8g3jhu1BjiSCc2lDny+m6IiHk8v9?= =?us-ascii?Q?eHag3+2y62yqO0kJ1+69HoE00CuEETPbSgULIiMTZjaz2VRIOVACcYTSPKzl?= =?us-ascii?Q?zjoTv08PWMyXeJ5rGW/Vj03UE4jErKStZmOfVTZhc/AYGrXtEaONtwvZTpng?= =?us-ascii?Q?zXqhY43QIm9mv+Y83ztO/orVO2xzhCmg7UjAggF4wLh1vnItfcDwexZ2yYfU?= =?us-ascii?Q?wzTOArCaVW4nIWqotO6Qv5UCrlvVu4GTmPGWYEChCX0460ofQA1FalawKdUa?= =?us-ascii?Q?kq6vZaoPPnXqgdn+3RXFUnVhrmktzDkZYJnSJuB3AZNnvi8OK7PynQ7uU9RR?= =?us-ascii?Q?F+q0gxk9G2tXdaji10VbwATwzK1ycGAlI2iPAtrsnLE3LnyjpVh1JTuITUvr?= =?us-ascii?Q?J6iByJf6spXhbpEh345nEKnTWHt7m96x1ONMrUZVBy8w9LUcpdk7ZwgClKBc?= =?us-ascii?Q?sXPWZMDVmw/2f5WZbonECYgNTvHgG2VgyOx1Iskkz65tfa995NjQ9ET93Gmm?= =?us-ascii?Q?lenZdg2WH84hYRf4PBH55KtC5TQEPvbkGqtAb0pJfC5o3SAppv9La6mofpId?= =?us-ascii?Q?hIjGTrCHOv6Ty0Mf8ZAIZrft3oTodXsIvFLOXk0nf1iwMHKAatE/AhrSDb72?= =?us-ascii?Q?IdaJztHCzShbPIo01ZfwONRTg5BC9SJ7m2oBpc3AWWNsQgpUy9re1dS0zsGP?= =?us-ascii?Q?EExcaWuCY1dAOmK9/hPafPNatsvSpsUslAyThTt3+I3cjGqZC5YsCnxVL5FV?= =?us-ascii?Q?HPrhrTTW0Q=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR07MB1065;5:bnXjE+9SF+7NE47nmuSI8sUTgI9EFQzhCDHPQG49ul+pTanPN7fb5ziFcrm9158uUk9W++DNEwFxHYx9I3UfyHT74lw9Wxz8WkW1h7brq3HzLH1BUXJnTIAem3MpKjo9WOp4uT8Ot5lXt+aRFibF9g==;24:bf15FWKFS7JNI+HDcHqAdGeMSZhhI8176J+LYYwP4KJkqixq89eNbYVYzFyIEYWlSes1NG8BSdvG0ysDoM5ovw==;20:uoH+u2CoSD29Q9zZUQx4z2DQxQCqA/YDupEd7upVwy74Obdr19sni+ho8TM6QpPD8/shBwSjR5NQCFaTRS/cTw== SpamDiagnosticOutput: 1:22 SpamDiagnosticMetadata: 00000000%2D0000%2D0000%2D0000%2D000000000000 X-OriginatorOrg: btconnect.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2015 00:41:41.1343 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR07MB1065 X-Barracuda-Connect: mail-am1hn0249.outbound.protection.outlook.com[157.56.112.249] X-Barracuda-Start-Time: 1437957702 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: 85ca815fd7b523e563a017769cfb8241-16982-unk X-Barracuda-Spam-Score: 1.25 X-Barracuda-Spam-Status: No, SCORE=1.25 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, RCVD_NUMERIC_HELO, RCVD_NUMERIC_HELO_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21109 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO 0.00 HTML_MESSAGE BODY: HTML included in message 1.25 RCVD_NUMERIC_HELO_2 Received: contains an IP address used for HELO --UmyfmGmk6=_wRrDIQa1rrgzmWxKLe0YoT9 Content-Type: multipart/alternative; boundary="RxsUfdyEfxNXjriv3HxyojQ=_YNh9ui0J6" --RxsUfdyEfxNXjriv3HxyojQ=_YNh9ui0J6 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Bonjour, Un avis de paiement attache. Sincerement votre Jose L. Miguel --RxsUfdyEfxNXjriv3HxyojQ=_YNh9ui0J6 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline
Bonjour,
Un avis de paiement attache.
= Sincerement votre
Jose L. Miguel
--RxsUfdyEfxNXjriv3HxyojQ=_YNh9ui0J6-- --UmyfmGmk6=_wRrDIQa1rrgzmWxKLe0YoT9 Content-Type: application/octet-stream; name="Documento.rtf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Documento.rtf" e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMzA4MntcZm9u dHRibHtcZjBcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MCBUaW1lcyBOZXcgUm9tYW47fXtcZjFcZm5p bFxmY2hhcnNldDAgQXJpYWwgQmxhY2s7fXtcZjJcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MCBHZW9y Z2lhO317XGYzXGZzd2lzc1xmcHJxMlxmY2hhcnNldDAgQXJpYWw7fXtcZjRcZnN3aXNzXGZwcnEy XGZjaGFyc2V0MCBBcmlhbCBCbGFjazt9e1xmNVxmbmlsXGZjaGFyc2V0MCBDYWxpYnJpO319DQp7 XGNvbG9ydGJsIDtccmVkMFxncmVlbjBcYmx1ZTI1NTtccmVkMjU1XGdyZWVuMFxibHVlMDtccmVk MFxncmVlbjBcYmx1ZTA7XHJlZDUxXGdyZWVuNTFcYmx1ZTUxO30NCntcKlxnZW5lcmF0b3IgUmlj aGVkMjAgNi4yLjkyMDB9XHZpZXdraW5kNFx1YzEgDQpccGFyZFxub3dpZGN0bHBhclxmMFxmczE4 XGxhbmcxMDMzICAgICAgXGJcZjFcZnMzMiBDT01NSVNTSU9OIElOVEVSTkFUSU9OQUwgREUgTE9U VE9cYjBcZjBcZnMyNFxsYW5nMTAyM1xwYXINClxwYXINClxmczE4XGxhbmcxMDMzICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1bFxmczE2IEF2 ZGEgRGUgQnVyZ29zIDE2LCAgMjg5MDUgTWFkcmlkLCBTcGFpblxmczE4IC4gIFx1bG5vbmVcZnMy NFxsYW5nMTAyM1xwYXINClxwYXINClxpXGZzMThcbGFuZzEwMzYgQlVSRUFVIERVIFZJQ0UtUFJF U0lERU5UXGNmMVxsYW5nMTAzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxjZjBcaTBc ZnMyNFxsYW5nMTAyM1xwYXINClxpXGZzMThcbGFuZzEwMzYgREVQQVJURU1FTlQgR0VTVElPTiBE RVMgUFJJWFxpMFxmczI0XGxhbmcxMDIzXHBhcg0KXGNmMVxpXGYyXGZzMTggUkVGOiBcY2YyIFZF XGNmMSAvMjU1MTI1LzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcY2YyXHVsXGYwXGxhbmcxMDM2ICBEQVRFXH4gOlxpMCAgMTctMDctMjAxNVxpIC5cY2Yw XHVsbm9uZVxpMFxsYW5nMTAyMyAgXGZzMjRccGFyDQpcY2YxXGlcZjJcZnMxOFxsYW5nMTAzMyBC QVRDSDpNLzAwNzUwMS9FU1xmMCAgXGNmMiAgXGNmMCAgICAgICAgICAgICAgICAgICAgICBcaTBc ZnMyNFxsYW5nMTAyM1xwYXINClxpXGZzMThcbGFuZzEwMzYgQVRUTlx+IDogQkVORUZJQ0lBUklP Li4uLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGkwXGZzMjRcbGFu ZzEwMjNccGFyDQpcaVxmczE4XGxhbmcxMDM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1bCBERVJOSUVSIEFWSVMgREUgUkVDT01Q RU5TRVxpMCAhISFcdWxub25lXGZzMjRcbGFuZzEwMjNccGFyDQoNClxwYXJkXG5vd2lkY3RscGFy XHFqXGlcZnMxOFxsYW5nMTAzNiBOb3VzIGF2b25zIGwgaG9ubmV1ciBkZSB2b3VzIGluZm9ybWVy IGRlIGxhIG1pc2UgZW4gb2V1dnJlIGR1IHByb2dyYW1tZS1MT1RFUklBIFBSSU1JVElWQS0gcXVp IGEgZXUgbGlldSBsZSBcY2YyXHVsIDE2LTA2LTIwMTVcY2YwXHVsbm9uZSAuTWFpcyBhIGNhdXNl IGQgdW5lIGNvbmZ1c2lvbiBkZSBjZXJ0YWlucyBub21zIGV0IG51bWVyb3MsIGxlIHJlc3VsdGF0 IGR1IHRpcmFnZSBhdSBzb3J0IG4gYSBldGUgcmVuZHUgcHVibGlxdWUgcXVlIGxlIFxjZjJcdWxc aTAgMTctMDctMjAxNS4gXGkgIFxjZjBcdWxub25lIHZvdHJlIG5vbSwgZmlndXJhbnQgc3VyIGxl IG51bWVybyBkZSBjb3Vwb24gMDMxLTExMjctODQxIGF2ZWMgbnVtZXJvIGRlIHNlcmllIDMyMTQt MDcgY29ycmVzcG9uZCBhdSBudW1lcm8gbGF1cmVlcyAyMS0yMi0zNy0zOS00MS00OSBsZXNxdWVs cyBvbnQgZ2FnbmUgbGUgdGlyYWdlIGF1IHNvcnQgZW4gXGNmMiBkZXV4aWVtZSBcY2YwIGNhdGVn b3JpZSAgdm91cyBldGVzIGxhdXJlYXQgZGUgXHVsXGkwXCc4MDkxNS44MTAgKE5FVUYgQ0VOVFMg UVVJTlpFXGZzMjQgIFxmczE4IE1JTEwsSFVJVCBDRU5UUyBESVhcZnMyNCAgXGZzMTggRVVST1Nc aSAsXHVsbm9uZSApXHVsIClcdWxub25lICBlbiBtb25uYWllIGxpcXVpZGUgYXZlYyBudW1lcm8g ZGUgZG9zc2llciBcY2YzXHVsXGYyIFJFRjpcY2YyICBWRVxjZjBcaTBcZjAgLzI1NTEyNS8xNVxp IC5caTAgZXRcaSAgQkFUQ0g6XGkwIFQvMDA3NTAxL0VTXGkgLCBcdWxub25lIHZvdHJlIHByaXgg ZXN0IHBhcnRpZSBjb21wb3NhbnRlIGRcaTAgZSB1biBtb250YW50IHRvdGFsIGRlLiBkZSBcZnMy NCAoXHVsXGZzMTggRVVST1MgMTYuNjIxLjM0MFxmczI0IChcZnMxOCBTRUlaRSBNSUxMSU9OIFNJ WCBDRU5UUyBWSU5HVCBVTiBNSUxMRSwgVFJPSVMgQ0VOVFMgUVVBUkFOVEVcdWxub25lXGZzMjQg KVxmczE4ICkgcmVwYXJ0aSBlbnRyZSAzNyBsYXVyZWF0cyBpbnRlcm5hdGlvbmF1eCBlbiBjZXR0 ZVxpICBjYXRlZ29yaWUgTm9zIHRyZXMgdml2ZXMgZmVsbGljaXRhdGlvbnNcfiAhISFcaTBcZnMy NFxsYW5nMTAyM1xwYXINClxpXGZzMThcbGFuZzEwMzYgVm90cmUgZm9uZHMgZXN0IHZlcnNlIGRh bnMgdW5lIGNvbXBhZ25pZSBkZSBhc3N1cmFuY2UgZXQgYXNzdXJlIGVuIHZvdHJlIG5vbS5BIGNh dXNlIGRlIGxhIGNvbmZ1c2lvbiBxdWkgZXV0IGxpZXUgYXZlYyBjZXJ0YWlucyBub21zIGV0IG51 bWVybywgbm91cyB2b3VzIHJlY29tbWVuZG9ucyBkZSBtYWludGVuaXQgbGUgbWF4aW11bSBwb3Nz aWJsZSBkZSBjb25maWRlbnRpYWxpdGUgc3VyIGNldHRlIGFmZmFpcmUganVzcXUgYSBjZSBxdWUg bm91cyBheWlvbnMgYWNjb21wbGkgdG91dGVzIGxlIGZvcm1hbGl0ZXMgZXQgbCBhcmdlbnQgdmVy c2UgZGFucyB2b3RyZSBjb21wdGUgYmFuY2FpcmUuIE5vdXMgZXhpZ2VvbnMgY2V0dGUgcHJlY2F1 dGlvbiBwb3VyIGV2aXRlciB0b3V0IHByb2ZpdCBkZSBwZXJzb25uZXMgcXVpIG5lIHNvbnQgcGFz IGNvb3BhcnRpcGFudGVzLlxpMFxmczI0XGxhbmcxMDIzXHBhcg0KXGlcZnMxOFxsYW5nMTAzNiBU b3VzIGxlcyBwYXJ0aWNpcGFudHMgb250IGV0ZSBzZWxlY2Npb25uZXMgcGFyIHN5c3RlbWUgZGUg dGlyYWdlIGF1IHNvcnQgcGFyIG9yZGluYXRldXIgZW50cmUgMjUuMDAwIG5vbXMgZGUgcGVyc29u bmVzIGQgQXNpZSwgQXVzdHJhbGlhLiBOb3V2ZWxsZSBaZWxhbmRlLCBFdXJvcGUgQW1lcmlndWUg bGF0aW5lIGV0IEFtZXJpZ3VlIGR1IE5vcmQsIGNvbW1lIHBlcnRpZSBkIHVuZSBwcm9tb3Rpb24g aW50ZXJuYXRpb25hbGUgcXVlIG5vdXMgcmVhbGlzb25zIHVuZSBmb2lzIGwgYW4gTm91cyBlc3Bl cm9ucyBxdWUgdm91cyBwYXJ0aWNpcGlleiBhdSBwcm9ncm1tZSBkZSBsIGFubmVlIHByb2NoYWlu ZS5caTBcZnMyNFxsYW5nMTAyM1xwYXINCg0KXHBhcmRcbm93aWRjdGxwYXJcaVxmczE4XGxhbmcx MDM2IEVuIHZ1ZSBkZSBzb2xsaWNpdGVyIHZvdHJlIHByaXgsIG5vdXMgdm91cyBwcmlvbnMgZGUg cHJlbmRyZSBjb250YWN0IFxjZjJcaTAgIFxjZjBcaSBhdmVjIHZvdHJlIGFnZW50IGRlIHJcJ2U5 Y2xhbWF0aW9uLCBcY2YxXHVsIERPTiBEQVZJRCBBTFZBUk8gLFxjZjAgIFx1bG5vbmUgRGlyZWN0 b3IgZGVzIE9wZXJhdGlvbnMgRXRyYW5nZXJlcyBkZSBNQVBGUkUgU0VHVVJPUywgIFMuQVx1bCAs XHVsbm9uZSAgYXUgXGNmMVx1bCBURUwgOiAwMDM0IDYzMiA2NDQgMTg3IFxjZjNcdWxub25lIGV0 XHVsICBcY2YxIEZBWDogMDAzNCA5MTEgODIwIDI3NyBFbWFpbFx+IDpcY2YwXHVsbm9uZVxpMFxm czI0XGxhbmczMDgyICBicmljb3JAcGVsYXlzZWcuY29tIE9VICBhbnRvbmlvX3JpY29yMTNAZ214 LmNvbVxsYW5nMTAyM1xwYXINCg0KXHBhcmRcbm93aWRjdGxwYXJccWpcaVxmczE4XGxhbmcxMDM2 IFBvdXIgbGVzIGZvcm1hbGl0XCdlOXMgZGUgdHJhbnNmZXJ0IGRlIHZvdHJlIGZvbmRzIGEgbGEg ZGVzIGxhIFxjZjNcdWxcaTAgZGVzXGNmMFx1bG5vbmVcaSB0aW5hdGlvbiBkZSB2b3RyZSBjaG9p eC5caTBcZnMyNFxsYW5nMTAyM1xwYXINClxpXGZzMThcbGFuZzEwMzYgTm8gb2JzdGFudCwgdG91 cyBsZXMgcHJpeCBkb2l2ZW50IGV0cmUgcmVjbGFtZXMgYXZhbnQgXGNmMlx1bFxpMCAxNy0wOC0y MDE1XHVsbm9uZVxpICBcY2YwIEFwcmVzIGxhIGRhdGUgcHJlY2l0ZWUsIHRvdXMgbGVzIHByaXgg bm9uIHJlY2xhbWVzIHJldG91cm5lcm9udCBhdSBtaW5pc3RlcmUgZGUgbCBFY29ub21pZSBldCBG aW5hbmNlcyBjb21tZSBmb25kcyBub24gcmVjbGFtZXMuIGxsIHZvdXMgZXN0IGluZm9ybWUgYXVz c2kgcXVlIFx1bCAxMCVcdWxub25lICBkZSB2b3RyZSBwcml4IGFwcGFydGllbnQgYSBcdWwgTUFQ RlJFIFNFR1VST1MgUy5BLixcdWxub25lIC4gcGFyY2UgcXUgZWxsZSBlc3QgbGEgQ29tcGFnbmll IHF1aSBhIGluc2NyaXQgdm90cmUgbm9tcyBhdSB0aXJhZ2UgYXUgc29ydCBldCBhdXNzaSwgcGFy ZWMgcXUgZWxsZSBlc3Qgdm90cmUgYWdlbmNlIGRlIHJlY2xhbWF0aW9uLiBDZXMgXHVsIDEwJVx1 bG5vbmUgIHNlcm9udCBwYXllcyBwYXIgdm91cyBtZW1lIGRlcyBxdWUgdm91cyBhdXJpZXogcmVj dSBsZSBmb25kcywgcHVpc3F1ZSBsIGFyZ2VudCBlc3QgYXNzdXJlIGVuIHZvdHJlIG5vbS5caTBc ZnMyNFxsYW5nMTAyM1xwYXINClxpXGZzMThcbGFuZzEwMzYgQXZpcyBpbXBvcnRhbnRcfiA6IHBv dXIgZXZpdGVyIGRlcyByZXRhcmRzIG5vbiBuZWNlc3NhaXJlcywgdmV1aWxsZXogdXNlciBkZSB2 b3RyZSBudW1lcm8gZGUgcmVmZXJlbmNlIGV0IGRlIGJhdGNoIGRhbnMgdG91dGVzIHZvcyBjb3Jy ZXNwb25kYW5jZXMgYXZlYyB2b3RyZSBhZ2VudCB2ZXVpbGxleiBhdXNzaSBpbmZvcm1lciBhIHRl bXBzIHZvdHJlIGRlIHRvdXQgY2hhbmdlbWVudCBkIGFkZHJlc3NlLlxpMFxmczI0XGxhbmcxMDIz XHBhcg0KXGlcZnMxOFxsYW5nMTAzNiBGXCdlOWxpY2l0YXRpb25zIHJlaXRlcmVlcyBkZSB0b3V0 IGxlIHBlcnNvbm5lbCBldCBncmFuZCBtZXJjaSBwb3VyIHZvdHJlIHBhcnRpY2lwYXRpb24gYSBu b3RyZSBwcm9ncmFtbWUgaW50ZXJuYXRpb25hbC4gTWVyY2kuXGkwXGZzMjRcbGFuZzEwMjNccGFy DQoNClxwYXJkXG5vd2lkY3RscGFyXGlcZnMxOFxsYW5nMTAzNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdWwgICBcdWxub25lXGkwXGZzMjRc bGFuZzEwMjNccGFyDQoNClxwYXJkXG5vd2lkY3RscGFyXHFqXHBhcg0KXGNmM1xmczE4XGxhbmcx MDM2ICBKT1NFIExVSVMgTUlHVUVMXGNmMFxmczI0XGxhbmcxMDIzXHBhcg0KDQpccGFyZFxub3dp ZGN0bHBhclxyaTQyM1x0eDExOTA1XGNmM1xmczE4XGxhbmcxMDM2ICBWSUNFIFBSRVNJREVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxjZjBc ZnMyNFxsYW5nMTAyM1xwYXINClxjZjNcZjNcZnMxOCAgICAgIFxjZjBcZjBcZnMyNFxwYXINClxp XGZzMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcdWwgUEFJRU1FTlQgVFJBSVRBTlQgTEEgRk9STUVcdWxub25lXGkwXGZzMjRccGFyDQoNClxw YXJkXG5vd2lkY3RscGFyXHJpMjgxXHR4Mjg0XHR4MTEzNDBcdWxcZnMxOFxsYW5nMTAzMSBGSUxM IENFVFRFIEZPUk1FIEVUIEwnRU5WT0lFTlQgUEFSIEZBWCBERSBOT1VWRUFVIFwnYzAgU1wnYzlD VVJJVFwnYzkgU0EgRVNQQUdORSBERSBNQVBGUkUsIEFJTlNJIFFVRSBWT1RSRSBJREVOVElUXCdj OSBWQUxJREVcdWxub25lXGlcbGFuZzEwMjMgIDpcaTBcZnMyNFxwYXINCg0KXHBhcmRcbm93aWRj dGxwYXJccmk0MjNcdHgxMTkwNVxwYXINCg0KXHBhcmRcbm93aWRjdGxwYXJcZmktMjg0XGxpMjg0 XHJpMjgxXHR4NTY4XHR4MTE2MjRcaVxmczE4IE5PTSA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tUFJF Tk9NLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEQVRFIERFIE5BSVNTQU5D RTotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTElFVSBERSBOQUlTU0FOQ0U6LS0t LS0tLS0tLS0tXGkwXGZzMjRccGFyDQpccGFyDQpcaVxmczE4XGxhbmcxMDMzIFRcJ2M5TFwnYzlQ SE9ORTotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNT0JJTEU6LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZBWDotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gXGNmNFxpMFxmM1xmczE2XGxhbmcxMDM2IFBSSVggVE9UQUxcY2YwXGlcZjBc ZnMxOFxsYW5nMTAzMyBHQUdOXCdjOTotLS0tLS0tLS0tLS0tXGkwXGZzMjRcbGFuZzEwMjNccGFy DQpccGFyDQpcaVxmczE4XGxhbmcxMDMzIEFEUkVTU0U6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENPREUgUE9TVEFMOi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxwYXINCiAgICAgRS1NQUlMOi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXGkwXGZzMjRcbGFuZzEwMjNccGFyDQoN ClxwYXJkXG5vd2lkY3RscGFyXGZpLTI4NFxsaTI4NFxyaTI4MVx0eDU2OFxwYXINCg0KXHBhcmRc bm93aWRjdGxwYXJcZmktMjg0XGxpMjg0XHJpMjgxXHR4NTY4XHR4MTE2MjRcaVxmczE4IFZJTExF Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gXCdjOVRBVDotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIE9DQ1VQQVRJT046LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LVxpMCAgXGkgTkFUSU9OQUxJVFwnYzk6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0t XGkwXGZzMjRccGFyDQpccGFyDQpcaVxmczE4XGxhbmcxMDMzICBcbGFuZzEwMjMgUlwnYzlGXCdj OVJFTkNFIE5cJ2JhOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tIEJBQ1RIIE5cJ2JhOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSBTRVhFOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c aTBcZnMyNFxwYXINCg0KXHBhcmRcbm93aWRjdGxwYXJccmkyODFcdHgyODRcdHgxMTM0MFxwYXIN ClxmczE4XGxhbmczMDgyIE9QVElPTlMgREUgUEFJRU1FTlRcdWxcZjRcbGFuZzEwMjMgOlx1bG5v bmVcZjMgICAgICAgICBhLyBcdWwgVklSRU1FTlQgQkFOQ0FJUkVcdWxub25lICAgICAgICAgICAg ICAgICAgICAgYi8gXHVsIENIXCdjOFFVRSBDRVJUSUZJXCdjOVx1bG5vbmVcZjBcZnMyNFxwYXIN Cg0KXHBhcmRcbm93aWRjdGxwYXJcZmktMjg0XGxpMjg0XHJpMjgxXHR4NTY4XHR4MTE2MjRccGFy DQoNClxwYXJkXG5vd2lkY3RscGFyXGZpLTI4NFxsaTI4NFxyaTI4MVx0eDU2OFx1bFxmM1xmczE4 IEwnaW5mb3JtYXRpb24gZGUgYmFucXVlIFxjZjNcdWxub25lIChcaVxmczE2IFNFVUxFTUVOVCBT SSBWT1VTIFZPVUxFWiBcJ2NhVFJFIFBBWVwnYzkgUEFSIFZJUkVNRU5UIEJBTkNBSVJFXGkwXGZz MTggKVxjZjBcZjBcZnMyNFxwYXINClxwYXINClxjZjNcZjNcZnMxOFxsYW5nMzA4MiBOT00gREUg TEEgQkFOUVVFOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXGNmMFxmMFxmczI0XGxh bmcxMDIzXHBhcg0KDQpccGFyZFxub3dpZGN0bHBhclxyaTI4MVx0eDI4NFx0eDExMzQwXGNhcHNc ZnMxOFxsYW5nMTAzNCBOVU1cJ2M5Uk8gREUgQ09NUFRFIFxjZjNcY2FwczBcZjNcbGFuZzMwODIg LyAgSUJBTiA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFxwYXINCkNPREUgREUgU1dJRlQ6LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBcY2YwXGYwXGZzMjRcbGFuZzEw MjNccGFyDQpcY2YzXGYzXGZzMThcbGFuZzMwODIgQURSRVNTRTotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gXHBh cg0KXGYwIFZJTExFXGYzIDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxmczE2ICBc cGFyDQpDT0RFIFBPU1RBTDotLS0tLS0tLS0tLS0tLS0tXGNmMFxmMCAgXGNmM1xmMyAtLS0tLS0t LS0tLS0tLS0tLVxjZjBcZjBcZnMyNFxsYW5nMTAyM1xwYXINCg0KXHBhcmRcc2EyMDBcc2wyNzZc c2xtdWx0MVxmNVxmczIyXGxhbmcxMFxwYXINCn0NCgA= --UmyfmGmk6=_wRrDIQa1rrgzmWxKLe0YoT9-- From david@fromorbit.com Sun Jul 26 20:13:53 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4AB397F8A for ; Sun, 26 Jul 2015 20:13:53 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 34937304039 for ; Sun, 26 Jul 2015 18:13:52 -0700 (PDT) X-ASG-Debug-ID: 1437959626-04cbb06a74b8ce0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id C5LJAFyQaUJAHWP3 for ; Sun, 26 Jul 2015 18:13:47 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AbDABZhbVVPG0mLHlRCoMVVGmCVaYlDAEBAQEBAQZWAQEtk3GFcwICAQECgTFNAQEBAQEBBwEBAQFBP4QjAQEBAwEnExwjEAgDDgoJJQ8FJQMHGhOIJgcOzywBAQEBAQUBAQEBHhmGBoUvgmyBPl0HgxiBFAWHFIZYhn2EeIdHgUeHL4gViB2BCoMrLDEBgQYlgSABAQE Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail04.adl6.internode.on.net with ESMTP; 27 Jul 2015 10:43:07 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZJWyY-0006TH-At; Mon, 27 Jul 2015 11:13:06 +1000 Date: Mon, 27 Jul 2015 11:13:06 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: validate iclog size and log record length in log recovery Message-ID: <20150727011306.GA24249@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: validate iclog size and log record length in log recovery References: <1437500697-62180-1-git-send-email-bfoster@redhat.com> <20150721175934.GI23013@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150721175934.GI23013@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1437959626 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21110 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 21, 2015 at 01:59:34PM -0400, Brian Foster wrote: > On Tue, Jul 21, 2015 at 01:44:57PM -0400, Brian Foster wrote: > > Each log record header contains an h_size value which represents the > > size of the iclog buffers when the record was logged and an h_len value > > which identifies the length of the particular log record. Log recovery > > uses both fields to determine the size of the log buffers to use for > > recovery and to correctly process each log record. > > > > Neither field is completely validated during recovery, however. While > > on-disk corruptions might be detected by CRC verification, we are still > > susceptible to errors such as excessively sized buffer allocations and > > overruns of the log record header and data buffers. > > > > Update the xlog_valid_rec_header() function to validate the record > > h_size and h_len fields against a new max_size parameter. The maximum > > size value is passed as a parameter because the value differs depending > > on whether we are trying to identify the iclog size or actually > > processing a log record. In the former case, validate that neither field > > exceeds the maximum supported iclog size of XFS. Once the iclog size is > > identified and log record buffers allocated, validate all records to be > > processed against the iclog size to ensure that buffer overrun cannot > > occur. > > > > Signed-off-by: Brian Foster > > --- > > > > Here's a stab at addressing the log record field validation issues Dave > > calls out here: > > > > http://oss.sgi.com/pipermail/xfs/2015-July/042557.html > > > > This is still undergoing some testing, but I've not hit any problems so > > far... > > > > ... aaaaannd sure enough I managed to hit an assert blow up within a > couple minutes of sending this out. ;) > > kernel: XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 2005 > > I'm not yet sure whether it is related. It seems somewhat strange if it > is. I'll see if it's reproducible with and without these patches. > Thoughts appreciated on this change in the meantime... Any update on this assert failure? > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > > index 01dd228..98c420a 100644 > > --- a/fs/xfs/xfs_log_recover.c > > +++ b/fs/xfs/xfs_log_recover.c > > @@ -4078,13 +4078,22 @@ xlog_unpack_data( > > return 0; > > } > > > > +/* > > + * Sanity check a log record header. The caller provides the maximum iclog size > > + * and record length since validity depends on the context. For example, the > > + * first record is used to allocate buffers and thus is validated against the > > + * maximum supported iclog size. Subsequent records must be validated against > > + * the identified iclog size to avoid overflow of the record buffers. > > + */ > > STATIC int > > xlog_valid_rec_header( > > struct xlog *log, > > struct xlog_rec_header *rhead, > > - xfs_daddr_t blkno) > > + xfs_daddr_t blkno, > > + int max_size) > > { > > int hlen; > > + int hsize; > > > > if (unlikely(rhead->h_magicno != cpu_to_be32(XLOG_HEADER_MAGIC_NUM))) { > > XFS_ERROR_REPORT("xlog_valid_rec_header(1)", > > @@ -4099,14 +4108,21 @@ xlog_valid_rec_header( > > return -EIO; > > } > > > > + hsize = be32_to_cpu(rhead->h_size); be32_to_cpu() returns an unsigned value, so the hsize/hlen variables can de declared as u32/uint32_t, and then > > + if (unlikely(hsize <= 0 || hsize > max_size)) { The comparison for < 0 can go away. Also, I don't think that unlikely() provides any value here - it makes the code harder to read, it's not a performance sensitive path, and, IIRC, gcc already weights branches that end in a return statement as "unlikely". > > + xfs_warn(log->l_mp, "%s: invalid iclog size (%d).", __func__, > > + hsize); > > + return -EFSCORRUPTED; > > + } > > + > > /* LR body must have data or it wouldn't have been written */ > > hlen = be32_to_cpu(rhead->h_len); > > - if (unlikely( hlen <= 0 || hlen > INT_MAX )) { > > + if (unlikely(hlen <= 0 || hlen > max_size)) { > > XFS_ERROR_REPORT("xlog_valid_rec_header(2)", > > XFS_ERRLEVEL_LOW, log->l_mp); > > return -EFSCORRUPTED; > > } > > - if (unlikely( blkno > log->l_logBBsize || blkno > INT_MAX )) { > > + if (unlikely(blkno > log->l_logBBsize || blkno > INT_MAX)) { > > XFS_ERROR_REPORT("xlog_valid_rec_header(3)", > > XFS_ERRLEVEL_LOW, log->l_mp); > > return -EFSCORRUPTED; > > @@ -4159,7 +4175,8 @@ xlog_do_recovery_pass( > > goto bread_err1; > > > > rhead = (xlog_rec_header_t *)offset; > > - error = xlog_valid_rec_header(log, rhead, tail_blk); > > + error = xlog_valid_rec_header(log, rhead, tail_blk, > > + XLOG_MAX_RECORD_BSIZE); For v1 logs this is XLOG_BIG_RECORD_BSIZE, not XLOG_MAX_RECORD_BSIZE. Cheers, Dave. -- Dave Chinner david@fromorbit.com From debbugs@buxtehude.debian.org Sun Jul 26 22:27:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3AEF87F8A for ; Sun, 26 Jul 2015 22:27:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 251148F8035 for ; Sun, 26 Jul 2015 20:27:07 -0700 (PDT) X-ASG-Debug-ID: 1437967626-04cb6c02c8c2ed0001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 5d59b8r5BM3DOjpw (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Sun, 26 Jul 2015 20:27:06 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZJZ4B-0002x5-QY; Mon, 27 Jul 2015 03:27:03 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793496: About the security issues affecting xfsprogs in Squeeze Reply-To: Nathan Scott , 793496@bugs.debian.org X-ASG-Orig-Subj: Bug#793496: About the security issues affecting xfsprogs in Squeeze Resent-From: Nathan Scott Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Mon, 27 Jul 2015 03:27:01 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 793496 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: security X-Debian-PR-Source: xfsprogs Received: via spool by 793496-submit@bugs.debian.org id=B793496.143796751810564 (code B ref 793496); Mon, 27 Jul 2015 03:27:01 +0000 Received: (at 793496) by bugs.debian.org; 27 Jul 2015 03:25:18 +0000 Received: from mx3-phx2.redhat.com ([209.132.183.24]) by buxtehude.debian.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1ZJZ2T-0002k4-QJ for 793496@bugs.debian.org; Mon, 27 Jul 2015 03:25:17 +0000 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id t6R3PAK6026085; Sun, 26 Jul 2015 23:25:10 -0400 Date: Sun, 26 Jul 2015 23:25:10 -0400 (EDT) From: Nathan Scott To: Raphael Hertzog , 793496@bugs.debian.org Cc: debian-lts@lists.debian.org Message-ID: <1987140154.340021.1437967510462.JavaMail.zimbra@redhat.com> In-Reply-To: <20150724155744.GA21140@home.ouaza.com> References: <20150724155744.GA21140@home.ouaza.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.64.51.135] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF37 (Linux)/8.0.6_GA_5922) Thread-Topic: Bug#793496: About the security issues affecting xfsprogs in Squeeze Thread-Index: STJs8DIhXxBCCzePlVQVZUod2+uaag== X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1437967626 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21112 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Rapha=C3=ABl, ----- Original Message ----- > [...] > We decided that we would not prepare a squeeze security update (usually > because the security impact is low and that we concentrate our limited > resources on higher severity issues and on the most widely used packages)= . > That said the squeeze users would most certainly benefit from a fixed > package. I tend to agree - seems like a fairly minor issue & I don't have a huge amount of spare time either. I'll concentrate on getting next upstream release with the fix uploaded to unstable as soon as possible though - but I'm not likely to get to backporting this one. Thanks for the heads-up! cheers. -- Nathan From sniffg59@pocztowy.pl Mon Jul 27 06:52:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CD8CD7FA1 for ; Mon, 27 Jul 2015 06:52:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id BD7BB8F8035 for ; Mon, 27 Jul 2015 04:52:48 -0700 (PDT) X-ASG-Debug-ID: 1437997963-04cb6c02c6e43d0001-NocioJ Received: from [123.239.178.155] ([123.239.178.155]) by cuda.sgi.com with ESMTP id 834KWRsa732w82dJ for ; Mon, 27 Jul 2015 04:52:46 -0700 (PDT) X-Barracuda-Envelope-From: sniffg59@pocztowy.pl X-Barracuda-Apparent-Source-IP: 123.239.178.155 Received: from [118.32.145.20] (helo=rfoiptodg.nnaiqopu.ua) by with esmtpa (Exim 4.69) (envelope-from ) id 1MM327-6291xg-PP for xfs@oss.sgi.com; Mon, 27 Jul 2015 17:22:46 +0530 Date: Mon, 27 Jul 2015 17:22:46 +0530 Message-ID: From: safemove@yahoo.pl To: Subject: Re: foto p.2 MIME-Version: 1.0 X-ASG-Orig-Subj: Re: foto p.2 X-Priority: 3 Content-Type: multipart/mixed; boundary="----=a__dcawjtyl_78_25_18" X-Barracuda-Connect: UNKNOWN[123.239.178.155] X-Barracuda-Start-Time: 1437997964 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_TG035a, BSF_SC5_MJ1963, HTML_MESSAGE, NO_REAL_NAME, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21120 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BSF_SC0_TG035a Message contains invalid style definition 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 ------=a__dcawjtyl_78_25_18 Content-Type: multipart/alternative; boundary="----=_dcawjtyl_78_25_18" ------=_dcawjtyl_78_25_18 Content-Type: text/plain; charset="windows-1250" Content-Transfer-Encoding: quoted-printable Sent from my iPad ------=_dcawjtyl_78_25_18 Content-Type: text/html; charset="windows-1250" Content-Transfer-Encoding: quoted-printable Sent from my iPad ------=_dcawjtyl_78_25_18-- ------=a__dcawjtyl_78_25_18-- From bfoster@redhat.com Mon Jul 27 08:40:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A440D7FAA for ; Mon, 27 Jul 2015 08:40:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4C603AC006 for ; Mon, 27 Jul 2015 06:40:04 -0700 (PDT) X-ASG-Debug-ID: 1438004403-04bdf00233cc930001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ASckq5eA5MByjLB8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 27 Jul 2015 06:40:03 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id AEA48B8BC0; Mon, 27 Jul 2015 13:40:02 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6RDe2BR016281; Mon, 27 Jul 2015 09:40:02 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 37D80122E55; Mon, 27 Jul 2015 09:40:01 -0400 (EDT) Date: Mon, 27 Jul 2015 09:40:01 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs: validate iclog size and log record length in log recovery Message-ID: <20150727133959.GA36308@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: validate iclog size and log record length in log recovery References: <1437500697-62180-1-git-send-email-bfoster@redhat.com> <20150721175934.GI23013@bfoster.bfoster> <20150727011306.GA24249@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150727011306.GA24249@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1438004403 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Jul 27, 2015 at 11:13:06AM +1000, Dave Chinner wrote: > On Tue, Jul 21, 2015 at 01:59:34PM -0400, Brian Foster wrote: > > On Tue, Jul 21, 2015 at 01:44:57PM -0400, Brian Foster wrote: > > > Each log record header contains an h_size value which represents the > > > size of the iclog buffers when the record was logged and an h_len value > > > which identifies the length of the particular log record. Log recovery > > > uses both fields to determine the size of the log buffers to use for > > > recovery and to correctly process each log record. > > > > > > Neither field is completely validated during recovery, however. While > > > on-disk corruptions might be detected by CRC verification, we are still > > > susceptible to errors such as excessively sized buffer allocations and > > > overruns of the log record header and data buffers. > > > > > > Update the xlog_valid_rec_header() function to validate the record > > > h_size and h_len fields against a new max_size parameter. The maximum > > > size value is passed as a parameter because the value differs depending > > > on whether we are trying to identify the iclog size or actually > > > processing a log record. In the former case, validate that neither field > > > exceeds the maximum supported iclog size of XFS. Once the iclog size is > > > identified and log record buffers allocated, validate all records to be > > > processed against the iclog size to ensure that buffer overrun cannot > > > occur. > > > > > > Signed-off-by: Brian Foster > > > --- > > > > > > Here's a stab at addressing the log record field validation issues Dave > > > calls out here: > > > > > > http://oss.sgi.com/pipermail/xfs/2015-July/042557.html > > > > > > This is still undergoing some testing, but I've not hit any problems so > > > far... > > > > > > > ... aaaaannd sure enough I managed to hit an assert blow up within a > > couple minutes of sending this out. ;) > > > > kernel: XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 2005 > > > > I'm not yet sure whether it is related. It seems somewhat strange if it > > is. I'll see if it's reproducible with and without these patches. > > Thoughts appreciated on this change in the meantime... > > Any update on this assert failure? > I haven't been able to reproduce so far. That said, my log recovery testing thus far has been limited by the umount hang addressed by the EFI patches I posted towards the end of last week. FWIW, that series alone underwent a decent amount of recovery testing to show that it at least addressed the hang without reproducing any such assert failures. I'll have to put these all together in a series and beat on that for a while. > > > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > > > index 01dd228..98c420a 100644 > > > --- a/fs/xfs/xfs_log_recover.c > > > +++ b/fs/xfs/xfs_log_recover.c > > > @@ -4078,13 +4078,22 @@ xlog_unpack_data( > > > return 0; > > > } > > > > > > +/* > > > + * Sanity check a log record header. The caller provides the maximum iclog size > > > + * and record length since validity depends on the context. For example, the > > > + * first record is used to allocate buffers and thus is validated against the > > > + * maximum supported iclog size. Subsequent records must be validated against > > > + * the identified iclog size to avoid overflow of the record buffers. > > > + */ > > > STATIC int > > > xlog_valid_rec_header( > > > struct xlog *log, > > > struct xlog_rec_header *rhead, > > > - xfs_daddr_t blkno) > > > + xfs_daddr_t blkno, > > > + int max_size) > > > { > > > int hlen; > > > + int hsize; > > > > > > if (unlikely(rhead->h_magicno != cpu_to_be32(XLOG_HEADER_MAGIC_NUM))) { > > > XFS_ERROR_REPORT("xlog_valid_rec_header(1)", > > > @@ -4099,14 +4108,21 @@ xlog_valid_rec_header( > > > return -EIO; > > > } > > > > > > + hsize = be32_to_cpu(rhead->h_size); > > be32_to_cpu() returns an unsigned value, so the hsize/hlen variables > can de declared as u32/uint32_t, and then > > > > + if (unlikely(hsize <= 0 || hsize > max_size)) { > > The comparison for < 0 can go away. > Ok. > Also, I don't think that unlikely() provides any value here - it > makes the code harder to read, it's not a performance sensitive > path, and, IIRC, gcc already weights branches that end in a return > statement as "unlikely". > Alright. I'll fix up the rest of the function as such. > > > + xfs_warn(log->l_mp, "%s: invalid iclog size (%d).", __func__, > > > + hsize); > > > + return -EFSCORRUPTED; > > > + } > > > + > > > /* LR body must have data or it wouldn't have been written */ > > > hlen = be32_to_cpu(rhead->h_len); > > > - if (unlikely( hlen <= 0 || hlen > INT_MAX )) { > > > + if (unlikely(hlen <= 0 || hlen > max_size)) { > > > XFS_ERROR_REPORT("xlog_valid_rec_header(2)", > > > XFS_ERRLEVEL_LOW, log->l_mp); > > > return -EFSCORRUPTED; > > > } > > > - if (unlikely( blkno > log->l_logBBsize || blkno > INT_MAX )) { > > > + if (unlikely(blkno > log->l_logBBsize || blkno > INT_MAX)) { > > > XFS_ERROR_REPORT("xlog_valid_rec_header(3)", > > > XFS_ERRLEVEL_LOW, log->l_mp); > > > return -EFSCORRUPTED; > > > @@ -4159,7 +4175,8 @@ xlog_do_recovery_pass( > > > goto bread_err1; > > > > > > rhead = (xlog_rec_header_t *)offset; > > > - error = xlog_valid_rec_header(log, rhead, tail_blk); > > > + error = xlog_valid_rec_header(log, rhead, tail_blk, > > > + XLOG_MAX_RECORD_BSIZE); > > For v1 logs this is XLOG_BIG_RECORD_BSIZE, not > XLOG_MAX_RECORD_BSIZE. > This is all within an 'if (xfs_sb_version_haslogv2(...))' block. h_size (which the subsequent xlog_valid_rec_header() calls use) is fixed to XLOG_BIG_RECORD_BSIZE in the else block. Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From gary@carrmanor.com Mon Jul 27 11:33:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=HTML_MESSAGE,SUBJ_ALL_CAPS autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 300137FA1 for ; Mon, 27 Jul 2015 11:33:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0BC81AC00A for ; Mon, 27 Jul 2015 09:32:55 -0700 (PDT) X-ASG-Debug-ID: 1438014772-04cb6c02c6ed400001-NocioJ Received: from server6.cipp.com (server6.cipp.com [69.50.217.2]) by cuda.sgi.com with ESMTP id o63qoonWvb4t3hYW (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 27 Jul 2015 09:32:53 -0700 (PDT) X-Barracuda-Envelope-From: gary@carrmanor.com X-Barracuda-Apparent-Source-IP: 69.50.217.2 Received: from [37.9.53.135] (port=4885 helo=knanv) by server6.cipp.com with esmtpa (Exim 4.85) (envelope-from ) id 1ZJlKX-0005WF-UL; Mon, 27 Jul 2015 10:32:47 -0600 Message-ID: From: =?windows-1251?B?zODx8uXwIElU?= To: , , , , , , , , , Subject: =?windows-1251?B?zuHx6/Pm6OLg7ejlIOru7O/8/vLl8O7iIOgg?= =?windows-1251?B?SVQt7+7k5OXw5urgIO7yIO/w7vTl8fHo7u3g?= =?windows-1251?B?6+7iIQ==?= Date: Mon, 27 Jul 2015 19:27:40 +0400 X-ASG-Orig-Subj: =?windows-1251?B?zuHx6/Pm6OLg7ejlIOru7O/8/vLl8O7iIOgg?= =?windows-1251?B?SVQt7+7k5OXw5urgIO7yIO/w7vTl8fHo7u3g?= =?windows-1251?B?6+7iIQ==?= MIME-Version: 1.0 Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_000_18DF_01D0C8A2.4D5A3900" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Live Mail 16.4.3528.331 X-MimeOLE: Produced By Microsoft MimeOLE V16.4.3528.331 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server6.cipp.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - carrmanor.com X-Get-Message-Sender-Via: server6.cipp.com: authenticated_id: gary@carrmanor.com X-Barracuda-Connect: server6.cipp.com[69.50.217.2] X-Barracuda-Start-Time: 1438014773 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.40 X-Barracuda-Spam-Status: No, SCORE=0.40 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA090e, BSF_SC0_TG035a, EXTRA_MPART_TYPE, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21127 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 HTML_MESSAGE BODY: HTML included in message 0.40 BSF_SC0_SA090e Custom Rule SA090e 0.00 BSF_SC0_TG035a Message contains invalid style definition This is a multi-part message in MIME format. ------=_NextPart_000_18DF_01D0C8A2.4D5A3900 Content-Type: multipart/alternative; boundary="----=_NextPart_001_18E0_01D0C8A2.4D5A3900" ------=_NextPart_001_18E0_01D0C8A2.4D5A3900 Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: quoted-printable IT-=EF=EE=E4=E4=E5=F0=E6=EA=E0 =E1=E8=E7=ED=E5=F1=E0=20 =E2 =CC=EE=F1=EA=E2=E5 =E8 =CF=EE=E4=EC=EE=F1=EA=EE=E2=FC=E5. =CA=EE=EC=EF=EB=E5=EA=F1=ED=EE=E5 =EE=E1=F1=EB=F3=E6=E8=E2=E0=ED=E8=E5 =EA= =EE=EC=EF=FC=FE=F2=E5=F0=ED=EE=E3=EE =EE=E1=EE=F0=F3=E4=EE=E2=E0=ED=E8=FF= . =D2=E5=EB=E5=F4=EE=ED =EE=F2=E4=E5=EB=E0 =F2=E5=F5 =EF=EE=E4=E4=E5=F0=E6=EA= =E8 +7(925)369-53-82 =D1=F2=EE=E8=EC=EE=F1=F2=FC =EE=E1=F1=EB=F3=E6=E8=E2=E0=ED=E8=FF =E7=E0 =EE= =E4=E8=ED =EA=EE=EC=EF=FC=FE=F2=E5=F0 =96 =EE=F2 500 =F0=F3=E1=EB=E5=E9. =C0=EA=F6=E8=FF - =CF=E5=F0=E2=FB=E9 =E2=FB=E5=E7=E4 =F1=EF=E5=F6=E8=E0=EB= =E8=F1=F2=E0 + =C0=ED=F2=E8=E2=E8=F0=F3=F1=ED=E0=FF =EF=F0=EE=F4=E8=EB=E0= =EA=F2=E8=EA=E0 =96 =C1=C5=D1=CF=CB=C0=D2=CD=CE! =CC=FB =EE=F1=F3=F9=E5=F1=F2=E2=EB=FF=E5=EC: =CD=E0=F1=F2=F0=EE=E9=EA=F3 =E8 =F0=E5=EC=EE=ED=F2 =EA=EE=EC=EF=FC=FE=F2=E5= =F0=EE=E2, =F1=E5=F0=E2=E5=F0=EE=E2, =EE=F4=E8=F1=ED=EE=E9 =EA=EE=EF=E8=F0= =EE=E2=E0=EB=FC=ED=EE=E9 =F2=E5=F5=ED=E8=EA=E8. =D3=F1=F2=E0=ED=EE=E2=EA=F3 =EB=EE=EA=E0=EB=FC=ED=FB=F5 =EA=EE=EC=EF=FC=FE= =F2=E5=F0=ED=FB=F5 =F1=E5=F2=E5=E9 =E8 Wi-Fi. =C0=ED=F2=E8=E2=E8=F0=F3=F1=ED=F3=FE =EF=F0=EE=F4=E8=EB=E0=EA=F2=E8=EA=F3= . =CD=E0=F1=F2=F0=EE=E9=EA=F3 =E8 =EF=EE=E4=E4=E5=F0=E6=EA=F3 =F1=E8=F1=F2=E5= =EC=ED=EE=E3=EE =E8 =EE=F4=E8=F1=ED=EE=E3=EE =CF=F0=EE=E3=F0=E0=EC=EC=ED=EE= =E3=EE =CE=E1=E5=F1=EF=E5=F7=E5=ED=E8=FF(=CF=CE). =D3=EB=F3=F7=F8=E5=ED=E8=E5 =EA=E0=F7=E5=F1=F2=E2=E0 =EC=EE=E1=E8=EB=FC=ED= =EE=E9 =F1=E2=FF=E7=E8 =E2 =EE=F4=E8=F1=E5. =C2=ED=E5=E4=F0=E5=ED=E8=E5 IP-=D2=E5=EB=E5=F4=EE=ED=E8=E8, =E8=ED=F2=E5=E3= =F0=E0=F6=E8=FF =F1 CRM. =CF=F0=EE=E5=EA=F2=E8=F0=EE=E2=E0=ED=E8=E5, =E2=ED=E5=E4=F0=E5=ED=E8=E5 =E8= =EE=E1=F1=EB=F3=E6=E8=E2=E0=ED=E8=E5 =F1=E8=F1=F2=E5=EC =E2=E8=E4=E5=EE=ED= =E0=E1=EB=FE=E4=E5=ED=E8=FF. =D0=E0=E1=EE=F2=E0 =EF=EE =EE=F4=E8=F6=E8=E0=EB=FC=ED=EE=EC=F3 =E4=EE=E3=EE= =E2=EE=F0=F3. =D1=E2=FF=E6=E8=F2=E5=F1=FC =F1 =ED=E0=EC=E8, =F7=F2=EE=E1=FB =E7=E0=EA=E0= =E7=E0=F2=FC =E1=E5=F1=EF=EB=E0=F2=ED=FB=E9 =E2=FB=E5=E7=E4 =ED=E0=F8=E5=E3= =EE =E8=ED=E6=E5=ED=E5=F0=E0! =D1 =F3=E2=E0=E6=E5=ED=E8=E5=EC, =EE=F2=E4=E5=EB =F2=E5=F5=ED=E8=F7=E5=F1= =EA=EE=E9 =EF=EE=E4=E4=E5=F0=E6=EA=E8. =D2=E5=EB=E5=F4=EE=ED: +7(925)369-53-82 E-mail: itmospro@yahoo.com ------=_NextPart_001_18E0_01D0C8A2.4D5A3900 Content-Type: text/html; charset="windows-1251" Content-Transfer-Encoding: quoted-printable

= 3D""=20IT-<= /SPAN>=EF=EE=E4=E4= =E5=F0=E6=EA=E0 =E1=E8=E7=ED=E5=F1=E0

=E2 =CC=EE=F1=EA=E2=E5 =E8 =CF=EE=E4=EC=EE=F1=EA=EE=E2=FC=E5.

=CA=EE=EC=EF=EB=E5=EA=F1=ED=EE=E5 =EE=E1=F1=EB=F3=E6=E8=E2=E0=ED=E8=E5= =EA=EE=EC=EF=FC=FE=F2=E5=F0=ED=EE=E3=EE=20 =EE=E1=EE=F0=F3=E4=EE=E2=E0=ED=E8=FF.

=D2=E5=EB=E5=F4=EE=ED =EE=F2=E4=E5=EB=E0 =F2=E5=F5 =EF=EE=E4=E4=E5=F0=E6= =EA=E8 +7(925)369-53-82

=D1=F2=EE=E8=EC=EE=F1=F2=FC =EE=E1=F1=EB=F3=E6=E8=E2=E0=ED=E8=FF =E7=E0= =EE=E4=E8=ED =EA=EE=EC=EF=FC=FE=F2=E5=F0 =96 <= /SPAN>=EE=F2 = 500=20 =F0=F3=E1=EB=E5=E9.

=C0=EA=F6=E8=FF - =CF=E5=F0=E2=FB=E9 =E2=FB=E5=E7=E4 =F1=EF=E5=F6=E8=E0= =EB=E8=F1=F2=E0 + =C0=ED=F2=E8=E2=E8=F0=F3=F1=ED=E0=FF =EF=F0=EE=F4=E8=EB= =E0=EA=F2=E8=EA=E0=20 =96 =C1=C5=D1=CF=CB=C0=D2=CD=CE!

=CC=FB =EE=F1=F3=F9=E5=F1=F2=E2=EB=FF=E5=EC:

=CD=E0=F1=F2=F0=EE=E9=EA=F3 =E8 =F0=E5=EC=EE=ED=F2 =EA=EE=EC=EF=FC=FE=F2= =E5=F0=EE=E2, =F1=E5=F0=E2=E5=F0=EE=E2, =EE=F4=E8=F1=ED=EE=E9 =EA=EE=EF=E8= =F0=EE=E2=E0=EB=FC=ED=EE=E9 =F2=E5=F5=ED=E8=EA=E8.

=D3=F1=F2=E0=ED=EE=E2=EA=F3 =EB=EE=EA=E0=EB=FC=ED=FB=F5 =EA=EE=EC=EF=FC= =FE=F2=E5=F0=ED=FB=F5 =F1=E5=F2=E5=E9 =E8 Wi-Fi.

=C0=ED=F2=E8=E2=E8=F0=F3=F1=ED=F3=FE =EF=F0=EE=F4=E8=EB=E0=EA=F2=E8=EA= =F3.

=CD=E0=F1=F2=F0=EE=E9=EA=F3 =E8 =EF=EE=E4=E4=E5=F0=E6=EA=F3 =F1=E8=F1=F2= =E5=EC=ED=EE=E3=EE =E8 =EE=F4=E8=F1=ED=EE=E3=EE =CF=F0=EE=E3=F0=E0=EC=EC=ED= =EE=E3=EE =CE=E1=E5=F1=EF=E5=F7=E5=ED=E8=FF(=CF=CE).

=D3=EB=F3=F7=F8=E5=ED=E8=E5 =EA=E0=F7=E5=F1=F2=E2=E0 =EC=EE=E1=E8=EB=FC= =ED=EE=E9 =F1=E2=FF=E7=E8 =E2 =EE=F4=E8=F1=E5.

=C2=ED=E5=E4=F0=E5=ED=E8=E5 IP-=D2=E5=EB=E5=F4=EE=ED=E8=E8, =E8=ED=F2=E5= =E3=F0=E0=F6=E8=FF =F1 CRM.

=CF=F0=EE=E5=EA=F2=E8=F0=EE=E2=E0=ED=E8=E5, =E2=ED=E5=E4=F0=E5=ED=E8=E5= =E8 =EE=E1=F1=EB=F3=E6=E8=E2=E0=ED=E8=E5 =F1=E8=F1=F2=E5=EC=20 =E2=E8=E4=E5=EE=ED=E0=E1=EB=FE=E4=E5=ED=E8=FF.

=D0=E0=E1=EE=F2=E0 =EF=EE =EE=F4=E8=F6=E8=E0=EB=FC=ED=EE=EC=F3 =E4=EE=E3= =EE=E2=EE=F0=F3.

=D1=E2=FF=E6=E8=F2=E5=F1=FC =F1 =ED=E0=EC=E8, =F7=F2=EE=E1=FB =E7=E0=EA= =E0=E7=E0=F2=FC =E1=E5=F1=EF=EB=E0=F2=ED=FB=E9 =E2=FB=E5=E7=E4 =ED=E0=F8=E5= =E3=EE=20 =E8=ED=E6=E5=ED=E5=F0=E0!

=D1 =F3=E2=E0=E6=E5=ED=E8=E5=EC, =EE=F2=E4=E5=EB =F2=E5=F5=ED=E8=F7=E5= =F1=EA=EE=E9 =EF=EE=E4=E4=E5=F0=E6=EA=E8.

=D2=E5=EB=E5=F4=EE=ED: +7(925)369-53-82

E-mail:=20 itmospro@yahoo.com

------=_NextPart_001_18E0_01D0C8A2.4D5A3900-- ------=_NextPart_000_18DF_01D0C8A2.4D5A3900 Content-Type: image/jpeg; name="mdlke.jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAE8AeMDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9Avjv btf6n4mgX5mkguE4PXMTDtmvzl/ba/YBmuv+CcnjfRfCmkxXWtpbjUIbW3h8tp2jnSaQImPvlEbA AGTxjnFfoh+0L4oi8GDxhrUkTXEWjWl5eyRKdvmLFA7lR9QpHNfOX7Nn7dX/AA1H8EtP8ZaN8NvF sOj6s84tnE1pJzHI0bhv3qlfmRsZHPFfP4O65pLuddZ6pH8y8iNExVgQynBBHSpLSLzp41z95gOa /Uv/AIKa/wDBMzwz8UvGt54y8CWOoeCde1KdptT0y+sHjsLmRslpUZAyxuTy20lWJzgHJPzl+zd/ wSF8ZfFb4taZpesapoOn6S86/apYbsySvHnkIuByfcjFexHFU2rt2MPZS6H0d/wSy/YU8RT/AAe1 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 ------=_NextPart_000_18DF_01D0C8A2.4D5A3900-- From jtulak@redhat.com Mon Jul 27 11:46:38 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C4CAE7FA1 for ; Mon, 27 Jul 2015 11:46:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2A65CAC005 for ; Mon, 27 Jul 2015 09:46:38 -0700 (PDT) X-ASG-Debug-ID: 1438015594-04cb6c02c8edb60001-NocioJ Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id r8Lo0WBmZVyqGECg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 27 Jul 2015 09:46:35 -0700 (PDT) X-Barracuda-Envelope-From: jtulak@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail22.collab.prod.int.phx2.redhat.com (zmail22.collab.prod.int.phx2.redhat.com [10.5.83.26]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6RGjlSN055385; Mon, 27 Jul 2015 12:45:47 -0400 Date: Mon, 27 Jul 2015 12:45:46 -0400 (EDT) From: Jan Tulak To: Christoph Hellwig Cc: xfs@oss.sgi.com Message-ID: <1102937653.582757.1438015546541.JavaMail.zimbra@redhat.com> In-Reply-To: <20150726163438.GD16659@infradead.org> References: <1437397018-12864-1-git-send-email-jtulak@redhat.com> <1437397018-12864-5-git-send-email-jtulak@redhat.com> <20150726163438.GD16659@infradead.org> Subject: Re: [PATCH v2 4/4] xfsprogs: OS X partial support MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH v2 4/4] xfsprogs: OS X partial support Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.36.4.224] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC43 (Mac)/8.0.6_GA_5922) Thread-Topic: xfsprogs: OS X partial support Thread-Index: MN7P2591asoQERs6D/ySGO5maUdJhA== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1438015595 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21127 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > From: "Christoph Hellwig" > To: "Jan Tulak" > Cc: xfs@oss.sgi.com > Sent: Sunday, July 26, 2015 6:34:38 PM > Subject: Re: [PATCH v2 4/4] xfsprogs: OS X partial support > > I think this needs to be split into one patch per issue. A few comments > below: Sure, I guess it is a good idea. > > > -#include > > > malloc and friends need to be in stdlib.h per Posix, so the right > fix is to drop every include of malloc.h and mae sure we include > stdlib.h where needed. > stdlib.h contains posix_memalign(), but the code is using memalign(). So should I prefix the calls? Regarding the autoconf related issues, I'm looking on it, though it can take me some time. I can't say I love the way autoconf is done... :) [ snip autoconf related issues ] > > > diff --git a/libxcmd/paths.c b/libxcmd/paths.c > > index c0b1ddb..b360617 100644 > > --- a/libxcmd/paths.c > > +++ b/libxcmd/paths.c > > @@ -364,7 +364,7 @@ fs_table_initialise_mounts( > > continue; > > if (!realpath(stats[i].f_mntfromname, rmntfromname)) > > continue; > > - if (!realpath(stats[i].f_mntonname, rmnttomname))) > > + if (!realpath(stats[i].f_mntonname, rmntonname)) > > I don't understand this change. Typo fix, which wasn't catched earlier due to #ifdef branching. The 'rmnttomname' does not exists anywhere and looks like a hybrid between rmntfromname and rmntonname. And because the previous if has has 'fromname' on both arguments of realpath, I choose the same approach when fixing it. I'm making it a standalone patch too, though. Cheers, Jan -- Jan Tulak jtulak@redhat.com From h.chandelure@gmail.com Mon Jul 27 15:39:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C0C247FAD for ; Mon, 27 Jul 2015 15:39:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 193A88F8035 for ; Mon, 27 Jul 2015 13:39:21 -0700 (PDT) X-ASG-Debug-ID: 1438029555-04bdf00230d7480001-NocioJ Received: from mail-oi0-f47.google.com (mail-oi0-f47.google.com [209.85.218.47]) by cuda.sgi.com with ESMTP id wFV3XkJswwyIp9hK (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 27 Jul 2015 13:39:16 -0700 (PDT) X-Barracuda-Envelope-From: h.chandelure@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.218.47 X-Barracuda-IPDD: Level1 [gmail.com/209.85.218.47] Received: by oibn4 with SMTP id n4so58103876oib.3 for ; Mon, 27 Jul 2015 13:39:15 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.218.47] X-Barracuda-IPDD: Level1 [gmail.com/209.85.218.47] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=PL9/t6yi3sgYhbD6djcBb2EyjlHRZYXc9kz03g2xmUw=; b=MlHBFlRGujBYhk2CH+VQk9btRibcht+SHMvLNCjSM75GFq/FoTT/sSzN2ui7ltM30w GE+4H80QgciL4X2c3bUdSaoS+rcyAYSnogZqohO/7BkcPs4ooDquZOjHhxd/tM+v57pH G1l0eaFh224WvrCGWcgEbgav4lBzUd+WtAPVmbfraZQX0Nz4+dZV3rdI6cvwVIN0qiIA mGEGlhH93b0z7Qb9gZvlYJXe9JD1l/ubUaqpMH+/1FFzoCLl+rLkV1xik8hXghky0czl lqa9+3+jOwYip5f0IAh4brFtrLgKs6qvDSWu+KHvw4m2R/Ca4AfSHcCo9FCtYKeyNnFg BKtA== MIME-Version: 1.0 X-Received: by 10.202.68.213 with SMTP id r204mr28737636oia.97.1438029555617; Mon, 27 Jul 2015 13:39:15 -0700 (PDT) Received: by 10.202.116.129 with HTTP; Mon, 27 Jul 2015 13:39:15 -0700 (PDT) Date: Mon, 27 Jul 2015 16:39:15 -0400 Message-ID: Subject: Slow find performance From: Hikori Chandelure X-ASG-Orig-Subj: Slow find performance To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a113d74ead6d423051be158dd X-Barracuda-Connect: mail-oi0-f47.google.com[209.85.218.47] X-Barracuda-Start-Time: 1438029556 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21133 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a113d74ead6d423051be158dd Content-Type: text/plain; charset=UTF-8 Hello, I've been experiencing slow find performance on XFS ever since I started specifying su/sw parameters at mkfs.xfs. This happens even on a newly created XFS filesystem, after all of the data has been restored from another backup server via rsync. The files on this server are almost entirely large, 50MB to 20GB, with an average of around 350MB per file. There are about 70,000 files and about 4,600 directories. When running the find command "find /array", it will list files and directories very slowly, all while using very little I/O or CPU. Keep in mind, this particular server is entirely idle, no other activity is going on. Here's some general information about the system. # system info CentOS 6.6 running kernel 3.2.69 from kernel.org / xfsprogs 3.2.3 compiled from source Intel Xeon E3-1220 32GB DDR3 1333MHz ECC 24x 2TB 7.2k HGST Ultrastars Areca 1882ix-24 w/ 1GB cache and BBU # some kernel adjustments - noop scheduler - /sys/block/sda/queue/nr_requests set to 256 from default 128 - /sys/block/sda/device/queue_depth set to 128 from default 256 - /sys/block/sda/queue/read_ahead_kb set to 4096 from default 128 # raid setup 24 drives in RAID 6 with 128KB stripe size # mkfs mkfs.fs applied directly to device, no partitions mkfs.xfs -f -d su=128k,sw=22 /dev/sda # cat /etc/fstab | grep xfs /dev/sda /array xfs defaults,noatime,logbufs=8,logbsize=256k,inode64,nobarrier 0 0 # cat /proc/mounts | grep xfs /dev/sda /array xfs rw,noatime,attr2,delaylog,nobarrier,inode64,logbufs=8,logbsize=256k,sunit=256,swidth=5632,noquota 0 0 # df /dev/sda /dev/sda 42966558720 19670250024 23296308696 46% /array # df -i /dev/sda /dev/sda 8593729088 72520 8593656568 1% /array # xfs_info /dev/sda meta-data=/dev/sda isize=256 agcount=41, agsize=268435424 blks = sectsz=512 attr=2, projid32bit=0 = crc=0 finobt=0 data = bsize=4096 blocks=10742161408, imaxpct=5 = sunit=32 swidth=704 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=521728, version=2 = sectsz=512 sunit=32 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # xfs_db -r -c freesp /dev/sda from to extents blocks pct 1 1 2205 2205 0.00 2 3 4135 10334 0.00 4 7 8049 44059 0.00 8 15 15579 179253 0.00 16 31 31701 744701 0.01 32 63 46 1758 0.00 64 127 104 8548 0.00 128 255 161 29129 0.00 256 511 261 95212 0.00 512 1023 364 273955 0.00 1024 2047 428 658951 0.01 2048 4095 202 599767 0.01 4096 8191 34 201291 0.00 8192 16383 16 191891 0.00 16384 32767 18 399895 0.01 32768 65535 13 602150 0.01 65536 131071 4 357285 0.01 131072 262143 2 457169 0.01 262144 524287 1 264980 0.00 67108864 134217727 5 595446397 10.22 134217728 268435424 34 5223516299 89.69 # freesp AGs 0-40 *** AG 0: from to extents blocks pct 1 1 89 89 0.06 2 3 233 583 0.39 4 7 415 2324 1.55 8 15 807 9272 6.18 16 31 1665 39067 26.02 32 63 6 222 0.15 64 127 10 811 0.54 128 255 12 2160 1.44 256 511 15 5021 3.34 512 1023 24 18514 12.33 1024 2047 19 31711 21.12 2048 4095 11 35712 23.79 4096 8191 1 4640 3.09 total free extents 3307 total free blocks 150126 average free extent size 45.3964 *** AG 1: from to extents blocks pct 1 1 47 47 0.00 2 3 90 233 0.00 4 7 197 1054 0.00 8 15 323 3663 0.00 16 31 764 17909 0.01 32 63 2 104 0.00 64 127 2 201 0.00 256 511 9 3685 0.00 512 1023 6 4512 0.00 1024 2047 11 16341 0.01 2048 4095 5 15483 0.01 4096 8191 7 43259 0.03 8192 16383 1 9120 0.01 134217728 268435424 1 162595251 99.93 total free extents 1465 total free blocks 162710862 average free extent size 111065 *** AG 2: from to extents blocks pct 1 1 74 74 0.00 2 3 149 384 0.00 4 7 262 1463 0.00 8 15 574 6594 0.01 16 31 1085 25121 0.02 32 63 2 97 0.00 64 127 2 134 0.00 128 255 9 1604 0.00 256 511 6 2080 0.00 512 1023 10 7708 0.01 1024 2047 11 18542 0.02 2048 4095 15 41940 0.04 4096 8191 2 12431 0.01 16384 32767 1 17860 0.02 32768 65535 1 63968 0.06 67108864 134217727 1 103878224 99.81 total free extents 2204 total free blocks 104078224 average free extent size 47222.4 *** AG 3: from to extents blocks pct 1 1 49 49 0.00 2 3 97 249 0.00 4 7 175 951 0.00 8 15 326 3717 0.00 16 31 687 16091 0.01 32 63 1 55 0.00 128 255 3 480 0.00 256 511 5 1804 0.00 512 1023 11 8116 0.00 1024 2047 11 18248 0.01 2048 4095 3 10081 0.01 4096 8191 2 10546 0.01 16384 32767 1 20544 0.01 134217728 268435424 1 172993435 99.95 total free extents 1372 total free blocks 173084366 average free extent size 126155 *** AG 4: from to extents blocks pct 1 1 64 64 0.00 2 3 127 313 0.00 4 7 262 1415 0.00 8 15 473 5473 0.00 16 31 1026 24172 0.02 32 63 1 32 0.00 128 255 4 668 0.00 256 511 4 1531 0.00 512 1023 11 8631 0.01 1024 2047 16 22794 0.02 4096 8191 2 11775 0.01 8192 16383 1 12358 0.01 16384 32767 1 18752 0.01 67108864 134217727 1 130594465 99.92 total free extents 1993 total free blocks 130702443 average free extent size 65580.8 *** AG 5: from to extents blocks pct 1 1 41 41 0.00 2 3 74 185 0.00 4 7 176 992 0.00 8 15 318 3628 0.00 16 31 643 15139 0.01 32 63 2 67 0.00 64 127 6 518 0.00 128 255 5 857 0.00 256 511 8 2838 0.00 512 1023 1 544 0.00 1024 2047 6 9046 0.01 2048 4095 1 3744 0.00 4096 8191 1 7520 0.00 134217728 268435424 1 157762178 99.97 total free extents 1283 total free blocks 157807297 average free extent size 122999 *** AG 6: from to extents blocks pct 1 1 43 43 0.00 2 3 88 225 0.00 4 7 162 908 0.00 8 15 309 3632 0.00 16 31 671 15995 0.01 64 127 3 212 0.00 128 255 6 1118 0.00 256 511 3 1036 0.00 512 1023 9 6851 0.00 1024 2047 5 8960 0.01 2048 4095 1 2520 0.00 4096 8191 1 5522 0.00 32768 65535 1 51898 0.03 134217728 268435424 1 168299859 99.94 total free extents 1303 total free blocks 168398779 average free extent size 129239 *** AG 7: from to extents blocks pct 1 1 45 45 0.00 2 3 90 225 0.00 4 7 180 989 0.00 8 15 344 3989 0.00 16 31 668 15329 0.01 32 63 1 32 0.00 64 127 3 246 0.00 256 511 4 1440 0.00 512 1023 9 6993 0.00 1024 2047 4 6400 0.00 2048 4095 6 18632 0.01 8192 16383 1 13440 0.01 16384 32767 1 27633 0.02 134217728 268435424 1 163590098 99.94 total free extents 1357 total free blocks 163685491 average free extent size 120623 *** AG 8: from to extents blocks pct 1 1 52 52 0.00 2 3 117 289 0.00 4 7 177 975 0.00 8 15 397 4534 0.00 16 31 704 16284 0.01 32 63 2 78 0.00 64 127 4 307 0.00 128 255 5 879 0.00 256 511 8 2797 0.00 512 1023 5 4042 0.00 1024 2047 10 14943 0.01 2048 4095 3 7583 0.00 16384 32767 1 26813 0.02 32768 65535 1 52773 0.03 134217728 268435424 1 160150880 99.92 total free extents 1487 total free blocks 160283229 average free extent size 107790 *** AG 9: from to extents blocks pct 1 1 54 54 0.00 2 3 99 241 0.00 4 7 201 1105 0.00 8 15 390 4519 0.00 16 31 815 19146 0.01 64 127 4 303 0.00 128 255 4 709 0.00 256 511 6 2079 0.00 512 1023 6 4921 0.00 1024 2047 12 18752 0.01 2048 4095 4 9184 0.01 8192 16383 2 22752 0.02 16384 32767 2 44257 0.03 131072 262143 1 229833 0.17 134217728 268435424 1 137815474 99.74 total free extents 1601 total free blocks 138173329 average free extent size 86304.4 *** AG 10: from to extents blocks pct 1 1 55 55 0.00 2 3 134 336 0.00 4 7 248 1367 0.00 8 15 434 4955 0.00 16 31 931 21745 0.02 32 63 1 32 0.00 64 127 4 350 0.00 128 255 5 952 0.00 256 511 5 1765 0.00 512 1023 9 6466 0.00 1024 2047 12 17522 0.01 2048 4095 1 3904 0.00 8192 16383 3 32576 0.02 134217728 268435424 1 140590012 99.93 total free extents 1843 total free blocks 140682037 average free extent size 76333.2 *** AG 11: from to extents blocks pct 1 1 57 57 0.00 2 3 112 284 0.00 4 7 235 1267 0.00 8 15 449 5231 0.00 16 31 825 19530 0.01 64 127 2 160 0.00 128 255 1 224 0.00 256 511 8 2937 0.00 512 1023 8 6316 0.00 1024 2047 14 22554 0.01 2048 4095 16 46692 0.03 8192 16383 1 10528 0.01 134217728 268435424 1 150352262 99.92 total free extents 1729 total free blocks 150468042 average free extent size 87026.1 *** AG 12: from to extents blocks pct 1 1 42 42 0.00 2 3 94 220 0.00 4 7 204 1096 0.00 8 15 359 4116 0.00 16 31 726 17311 0.01 32 63 1 47 0.00 64 127 2 181 0.00 128 255 2 320 0.00 256 511 7 2722 0.00 512 1023 7 5142 0.00 1024 2047 13 19845 0.01 2048 4095 2 5312 0.00 134217728 268435424 1 143724542 99.96 total free extents 1460 total free blocks 143780896 average free extent size 98480.1 *** AG 13: from to extents blocks pct 1 1 55 55 0.00 2 3 111 283 0.00 4 7 181 1022 0.00 8 15 317 3655 0.00 16 31 662 15261 0.01 32 63 1 32 0.00 64 127 3 224 0.00 128 255 3 512 0.00 256 511 3 988 0.00 512 1023 6 4726 0.00 1024 2047 10 16342 0.01 2048 4095 9 26915 0.02 16384 32767 1 28180 0.02 134217728 268435424 1 154258160 99.94 total free extents 1363 total free blocks 154356355 average free extent size 113248 *** AG 14: from to extents blocks pct 1 1 65 65 0.00 2 3 99 243 0.00 4 7 242 1320 0.00 8 15 556 6379 0.00 16 31 891 20889 0.01 32 63 1 32 0.00 64 127 6 551 0.00 128 255 1 160 0.00 256 511 4 1440 0.00 512 1023 10 7508 0.01 1024 2047 5 7379 0.01 2048 4095 10 32008 0.02 8192 16383 1 13952 0.01 16384 32767 1 17024 0.01 32768 65535 1 41377 0.03 131072 262143 1 227336 0.16 134217728 268435424 1 142416261 99.74 total free extents 1895 total free blocks 142793924 average free extent size 75353 *** AG 15: from to extents blocks pct 1 1 61 61 0.00 2 3 120 298 0.00 4 7 208 1098 0.00 8 15 389 4477 0.00 16 31 821 19281 0.01 32 63 1 32 0.00 128 255 4 743 0.00 256 511 8 2920 0.00 512 1023 14 10042 0.01 1024 2047 4 6560 0.00 2048 4095 4 10562 0.01 4096 8191 1 5088 0.00 32768 65535 1 33760 0.02 134217728 268435424 1 153882375 99.94 total free extents 1637 total free blocks 153977297 average free extent size 94060.7 *** AG 16: from to extents blocks pct 1 1 48 48 0.00 2 3 76 189 0.00 4 7 150 815 0.00 8 15 361 4059 0.00 16 31 659 15572 0.01 64 127 1 96 0.00 128 255 6 1178 0.00 256 511 3 1140 0.00 512 1023 9 6581 0.00 1024 2047 13 18035 0.01 2048 4095 16 45645 0.03 4096 8191 1 7289 0.00 16384 32767 1 18485 0.01 65536 131071 1 81371 0.05 134217728 268435424 1 156295881 99.87 total free extents 1346 total free blocks 156496384 average free extent size 116268 *** AG 17: from to extents blocks pct 1 1 46 46 0.00 2 3 93 231 0.00 4 7 171 947 0.00 8 15 309 3510 0.00 16 31 667 15685 0.01 32 63 2 64 0.00 64 127 4 320 0.00 128 255 3 544 0.00 256 511 5 1872 0.00 512 1023 4 2818 0.00 1024 2047 8 12856 0.01 2048 4095 3 10336 0.01 8192 16383 1 14312 0.01 65536 131071 1 113692 0.08 134217728 268435424 1 147971290 99.88 total free extents 1318 total free blocks 148148523 average free extent size 112404 *** AG 18: from to extents blocks pct 1 1 56 56 0.00 2 3 125 317 0.00 4 7 207 1151 0.00 8 15 405 4620 0.00 16 31 886 20460 0.02 32 63 4 143 0.00 64 127 2 152 0.00 128 255 6 1120 0.00 256 511 6 2247 0.00 512 1023 4 2925 0.00 1024 2047 13 21151 0.02 2048 4095 11 31045 0.02 65536 131071 1 86926 0.07 67108864 134217727 1 129863139 99.87 total free extents 1727 total free blocks 130035452 average free extent size 75295.6 *** AG 19: from to extents blocks pct 1 1 50 50 0.00 2 3 91 219 0.00 4 7 148 820 0.00 8 15 341 3940 0.00 16 31 677 16133 0.01 32 63 1 60 0.00 128 255 3 618 0.00 256 511 2 756 0.00 512 1023 11 7981 0.00 1024 2047 9 14304 0.01 2048 4095 6 18394 0.01 4096 8191 1 6848 0.00 8192 16383 1 15955 0.01 134217728 268435424 1 162606829 99.95 total free extents 1342 total free blocks 162692907 average free extent size 121232 *** AG 20: from to extents blocks pct 1 1 58 58 0.00 2 3 113 285 0.00 4 7 190 1025 0.00 8 15 393 4550 0.00 16 31 847 19951 0.01 32 63 1 32 0.00 64 127 1 96 0.00 128 255 6 1075 0.00 256 511 10 4121 0.00 512 1023 9 7552 0.00 1024 2047 6 9736 0.01 2048 4095 3 9383 0.01 16384 32767 1 21952 0.01 134217728 268435424 1 159711434 99.95 total free extents 1639 total free blocks 159791250 average free extent size 97493.1 *** AG 21: from to extents blocks pct 1 1 45 45 0.00 2 3 81 202 0.00 4 7 162 891 0.00 8 15 396 4576 0.00 16 31 764 17901 0.01 64 127 3 266 0.00 128 255 5 944 0.00 256 511 11 4017 0.00 512 1023 9 7081 0.00 1024 2047 12 16682 0.01 134217728 268435424 1 143068380 99.96 total free extents 1489 total free blocks 143120985 average free extent size 96118.9 *** AG 22: from to extents blocks pct 1 1 49 49 0.00 2 3 61 151 0.00 4 7 142 782 0.00 8 15 296 3399 0.00 16 31 623 14855 0.01 128 255 2 360 0.00 256 511 2 704 0.00 512 1023 8 5670 0.00 1024 2047 6 9681 0.01 2048 4095 4 11112 0.01 32768 65535 2 66914 0.04 134217728 268435424 1 177118484 99.94 total free extents 1196 total free blocks 177232161 average free extent size 148187 *** AG 23: from to extents blocks pct 1 1 43 43 0.00 2 3 65 166 0.00 4 7 148 802 0.00 8 15 278 3168 0.00 16 31 592 14039 0.01 32 63 2 76 0.00 64 127 2 134 0.00 128 255 1 160 0.00 256 511 5 1968 0.00 512 1023 4 3051 0.00 1024 2047 9 14634 0.01 2048 4095 3 11040 0.01 32768 65535 1 51040 0.03 134217728 268435424 1 177545655 99.94 total free extents 1154 total free blocks 177645976 average free extent size 153939 *** AG 24: from to extents blocks pct 1 1 51 51 0.00 2 3 112 289 0.00 4 7 178 968 0.00 8 15 301 3437 0.00 16 31 691 16122 0.01 64 127 2 160 0.00 128 255 4 672 0.00 256 511 7 2656 0.00 512 1023 12 9389 0.01 1024 2047 8 11627 0.01 2048 4095 6 17537 0.01 4096 8191 1 4143 0.00 262144 524287 1 264980 0.17 134217728 268435424 1 154946400 99.79 total free extents 1375 total free blocks 155278431 average free extent size 112930 *** AG 25: from to extents blocks pct 1 1 58 58 0.00 2 3 94 234 0.00 4 7 197 1061 0.00 8 15 363 4159 0.00 16 31 769 18037 0.01 64 127 1 119 0.00 128 255 1 128 0.00 256 511 11 3520 0.00 512 1023 7 5525 0.00 1024 2047 11 17218 0.01 2048 4095 5 15531 0.01 4096 8191 2 12640 0.01 134217728 268435424 1 146493662 99.95 total free extents 1520 total free blocks 146571892 average free extent size 96428.9 *** AG 26: from to extents blocks pct 1 1 43 43 0.00 2 3 88 218 0.00 4 7 228 1249 0.00 8 15 372 4307 0.00 16 31 797 18950 0.01 64 127 3 208 0.00 128 255 5 925 0.00 256 511 10 3392 0.00 512 1023 8 5381 0.00 1024 2047 15 21530 0.01 2048 4095 1 2548 0.00 8192 16383 1 10601 0.01 16384 32767 1 17472 0.01 134217728 268435424 1 155486599 99.94 total free extents 1573 total free blocks 155573423 average free extent size 98902.4 *** AG 27: from to extents blocks pct 1 1 55 55 0.00 2 3 100 241 0.00 4 7 182 1004 0.00 8 15 378 4303 0.00 16 31 772 18298 0.01 64 127 1 64 0.00 128 255 2 352 0.00 256 511 4 1449 0.00 512 1023 8 6182 0.00 1024 2047 12 16205 0.01 2048 4095 2 4922 0.00 4096 8191 1 6432 0.00 8192 16383 1 15070 0.01 134217728 268435424 1 162288222 99.95 total free extents 1519 total free blocks 162362799 average free extent size 106888 *** AG 28: from to extents blocks pct 1 1 46 46 0.00 2 3 84 207 0.00 4 7 181 991 0.00 8 15 318 3665 0.00 16 31 606 14139 0.01 64 127 2 130 0.00 128 255 4 776 0.00 256 511 5 2202 0.00 512 1023 8 5789 0.00 1024 2047 6 9617 0.01 2048 4095 1 2272 0.00 16384 32767 1 18784 0.01 134217728 268435424 1 162896992 99.96 total free extents 1263 total free blocks 162955610 average free extent size 129023 *** AG 29: from to extents blocks pct 1 1 72 72 0.00 2 3 119 301 0.00 4 7 241 1311 0.00 8 15 434 5016 0.00 16 31 905 21209 0.02 32 63 2 69 0.00 128 255 5 1007 0.00 256 511 9 3529 0.00 512 1023 15 11024 0.01 1024 2047 12 19889 0.01 2048 4095 4 12224 0.01 4096 8191 1 7232 0.01 16384 32767 2 58481 0.04 134217728 268435424 1 137100110 99.90 total free extents 1822 total free blocks 137241474 average free extent size 75324.6 *** AG 30: from to extents blocks pct 1 1 58 58 0.00 2 3 84 215 0.00 4 7 185 1001 0.00 8 15 362 4196 0.00 16 31 778 18463 0.01 32 63 2 64 0.00 64 127 3 288 0.00 128 255 5 864 0.00 256 511 8 2631 0.00 512 1023 8 5894 0.00 1024 2047 8 11072 0.01 2048 4095 4 11360 0.01 4096 8191 2 8480 0.01 32768 65535 1 54033 0.04 134217728 268435424 1 153863595 99.92 total free extents 1509 total free blocks 153982214 average free extent size 102043 *** AG 31: from to extents blocks pct 1 1 65 65 0.00 2 3 108 264 0.00 4 7 223 1213 0.00 8 15 462 5292 0.00 16 31 957 22499 0.02 32 63 1 32 0.00 64 127 4 371 0.00 128 255 6 1160 0.00 256 511 13 4519 0.00 512 1023 16 11617 0.01 1024 2047 12 17483 0.02 2048 4095 4 11835 0.01 8192 16383 2 21227 0.02 67108864 134217727 1 106710640 99.91 total free extents 1874 total free blocks 106808217 average free extent size 56994.8 *** AG 32: from to extents blocks pct 1 1 61 61 0.00 2 3 126 317 0.00 4 7 232 1263 0.00 8 15 406 4691 0.00 16 31 810 19108 0.01 32 63 4 151 0.00 64 127 4 355 0.00 128 255 3 442 0.00 256 511 3 888 0.00 512 1023 6 5152 0.00 1024 2047 10 14902 0.01 2048 4095 4 11502 0.01 4096 8191 2 11863 0.01 134217728 268435424 1 140632527 99.95 total free extents 1672 total free blocks 140703222 average free extent size 84152.6 *** AG 33: from to extents blocks pct 1 1 52 52 0.00 2 3 109 269 0.00 4 7 211 1185 0.00 8 15 413 4804 0.00 16 31 831 19412 0.01 64 127 2 187 0.00 128 255 5 993 0.00 256 511 7 2610 0.00 512 1023 16 12040 0.01 1024 2047 14 22452 0.02 2048 4095 9 27060 0.02 4096 8191 2 9600 0.01 134217728 268435424 1 136993195 99.93 total free extents 1672 total free blocks 137093859 average free extent size 81993.9 *** AG 34: from to extents blocks pct 1 1 42 42 0.00 2 3 78 195 0.00 4 7 175 965 0.00 8 15 393 4603 0.00 16 31 704 16670 0.01 32 63 1 32 0.00 64 127 3 230 0.00 128 255 2 256 0.00 256 511 4 1600 0.00 512 1023 12 8816 0.01 1024 2047 8 12652 0.01 2048 4095 12 33593 0.02 32768 65535 2 83795 0.06 134217728 268435424 1 147896417 99.89 total free extents 1437 total free blocks 148059866 average free extent size 103034 *** AG 35: from to extents blocks pct 1 1 62 62 0.00 2 3 109 271 0.00 4 7 202 1083 0.00 8 15 444 5084 0.00 16 31 830 19390 0.02 32 63 1 40 0.00 64 127 2 160 0.00 128 255 8 1364 0.00 256 511 13 5188 0.00 512 1023 8 5856 0.00 1024 2047 13 18942 0.02 2048 4095 3 11145 0.01 67108864 134217727 1 124399929 99.94 total free extents 1696 total free blocks 124468514 average free extent size 73389.5 *** AG 36: from to extents blocks pct 1 1 59 59 0.00 2 3 97 243 0.00 4 7 188 1016 0.00 8 15 373 4305 0.00 16 31 681 16142 0.01 32 63 1 58 0.00 64 127 4 332 0.00 128 255 1 217 0.00 256 511 4 1664 0.00 512 1023 5 3936 0.00 1024 2047 13 22174 0.01 2048 4095 3 9792 0.01 134217728 268435424 1 148169143 99.96 total free extents 1430 total free blocks 148229081 average free extent size 103657 *** AG 37: from to extents blocks pct 1 1 61 61 0.00 2 3 80 198 0.00 4 7 195 1067 0.00 8 15 346 4014 0.00 16 31 788 18552 0.01 128 255 5 1015 0.00 256 511 3 1088 0.00 512 1023 12 8577 0.01 1024 2047 14 21229 0.02 4096 8191 1 7600 0.01 32768 65535 1 53152 0.04 134217728 268435424 1 139617445 99.92 total free extents 1507 total free blocks 139733998 average free extent size 92723.3 *** AG 38: from to extents blocks pct 1 1 67 67 0.00 2 3 102 254 0.00 4 7 185 998 0.00 8 15 307 3535 0.00 16 31 669 15791 0.01 32 63 1 32 0.00 64 127 3 256 0.00 128 255 1 192 0.00 256 511 3 1024 0.00 512 1023 8 5611 0.00 1024 2047 16 22833 0.01 2048 4095 4 11395 0.01 4096 8191 3 18383 0.01 16384 32767 1 24916 0.02 65536 131071 1 75296 0.05 134217728 268435424 1 155719679 99.88 total free extents 1372 total free blocks 155900262 average free extent size 113630 *** AG 39: from to extents blocks pct 1 1 56 56 0.00 2 3 100 251 0.00 4 7 202 1101 0.00 8 15 363 4186 0.00 16 31 814 19053 0.01 32 63 1 43 0.00 64 127 6 426 0.00 128 255 8 1381 0.00 256 511 10 3344 0.00 512 1023 11 8475 0.01 1024 2047 17 26108 0.02 2048 4095 3 9824 0.01 16384 32767 2 38742 0.03 32768 65535 1 49440 0.03 134217728 268435424 1 148663573 99.89 total free extents 1595 total free blocks 148826003 average free extent size 93307.8 *** AG 40: from to extents blocks pct 1 1 9 9 31.03 2 3 6 16 55.17 4 7 1 4 13.79 total free extents 16 total free blocks 29 average free extent size 1.8125 --001a113d74ead6d423051be158dd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+SGVsbG8sPGRpdj48YnI+PC9kaXY+PGRpdj5JJiMzOTt2ZSBiZWVuIGV4 cGVyaWVuY2luZyBzbG93IGZpbmQgcGVyZm9ybWFuY2Ugb24gWEZTIGV2ZXIgc2luY2UgSSBzdGFy dGVkIHNwZWNpZnlpbmcgc3Uvc3cgcGFyYW1ldGVycyBhdCBta2ZzLnhmcy4gVGhpcyBoYXBwZW5z IGV2ZW4gb24gYSBuZXdseSBjcmVhdGVkIFhGUyBmaWxlc3lzdGVtLCBhZnRlciBhbGwgb2YgdGhl IGRhdGEgaGFzIGJlZW4gcmVzdG9yZWQgZnJvbSBhbm90aGVyIGJhY2t1cCBzZXJ2ZXIgdmlhIHJz eW5jLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIGZpbGVzIG9uIHRoaXMgc2VydmVyIGFy ZSBhbG1vc3QgZW50aXJlbHkgbGFyZ2UsIDUwTUIgdG8gMjBHQiwgd2l0aCBhbiBhdmVyYWdlIG9m IGFyb3VuZCAzNTBNQiBwZXIgZmlsZS4gVGhlcmUgYXJlIGFib3V0IDcwLDAwMCBmaWxlcyBhbmQg YWJvdXQgNCw2MDAgZGlyZWN0b3JpZXMuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5XaGVuIHJ1 bm5pbmcgdGhlIGZpbmQgY29tbWFuZCAmcXVvdDtmaW5kIC9hcnJheSZxdW90OywgaXQgd2lsbCBs aXN0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB2ZXJ5IHNsb3dseSwgYWxsIHdoaWxlIHVzaW5nIHZl cnkgbGl0dGxlIEkvTyBvciBDUFUuIEtlZXAgaW4gbWluZCwgdGhpcyBwYXJ0aWN1bGFyIHNlcnZl ciBpcyBlbnRpcmVseSBpZGxlLCBubyBvdGhlciBhY3Rpdml0eSBpcyBnb2luZyBvbi48L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PkhlcmUmIzM5O3Mgc29tZSBnZW5lcmFsIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBzeXN0ZW0uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48ZGl2PiMgc3lzdGVtIGlu Zm88L2Rpdj48ZGl2PkNlbnRPUyA2LjYgcnVubmluZyBrZXJuZWwgMy4yLjY5IGZyb20gPGEgaHJl Zj0iaHR0cDovL2tlcm5lbC5vcmciPmtlcm5lbC5vcmc8L2E+IC8geGZzcHJvZ3MgMy4yLjMgY29t cGlsZWQgZnJvbSBzb3VyY2U8L2Rpdj48ZGl2PkludGVsIFhlb24gRTMtMTIyMDwvZGl2PjxkaXY+ MzJHQiBERFIzIDEzMzNNSHogRUNDPC9kaXY+PGRpdj4yNHggMlRCIDcuMmsgSEdTVCBVbHRyYXN0 YXJzPC9kaXY+PGRpdj5BcmVjYSAxODgyaXgtMjQgdy8gMUdCIGNhY2hlIGFuZCBCQlU8L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PiMgc29tZSBrZXJuZWwgYWRqdXN0bWVudHM8L2Rpdj48ZGl2Pi0g bm9vcCBzY2hlZHVsZXI8L2Rpdj48ZGl2Pi0gL3N5cy9ibG9jay9zZGEvcXVldWUvbnJfcmVxdWVz dHMgc2V0IHRvIDI1NiBmcm9tIGRlZmF1bHQgMTI4PC9kaXY+PGRpdj4tIC9zeXMvYmxvY2svc2Rh L2RldmljZS9xdWV1ZV9kZXB0aCBzZXQgdG8gMTI4IGZyb20gZGVmYXVsdCAyNTY8L2Rpdj48ZGl2 Pi0gL3N5cy9ibG9jay9zZGEvcXVldWUvcmVhZF9haGVhZF9rYiBzZXQgdG8gNDA5NiBmcm9tIGRl ZmF1bHQgMTI4PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4jIHJhaWQgc2V0dXA8L2Rpdj48ZGl2 PjI0IGRyaXZlcyBpbiBSQUlEIDYgd2l0aCAxMjhLQiBzdHJpcGUgc2l6ZTwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+IyBta2ZzPC9kaXY+PGRpdj5ta2ZzLmZzIGFwcGxpZWQgZGlyZWN0bHkgdG8g ZGV2aWNlLCBubyBwYXJ0aXRpb25zPGJyPjwvZGl2PjxkaXY+bWtmcy54ZnMgLWYgLWQgc3U9MTI4 ayxzdz0yMiAvZGV2L3NkYTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+IyBjYXQgL2V0Yy9mc3Rh YiB8IGdyZXAgeGZzPC9kaXY+PGRpdj4vZGV2L3NkYSAvYXJyYXkgeGZzIGRlZmF1bHRzLG5vYXRp bWUsbG9nYnVmcz04LGxvZ2JzaXplPTI1NmssaW5vZGU2NCxub2JhcnJpZXIgMCAwPC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj4jIGNhdCAvcHJvYy9tb3VudHMgfCBncmVwIHhmczwvZGl2PjxkaXY+ L2Rldi9zZGEgL2FycmF5IHhmcyBydyxub2F0aW1lLGF0dHIyLGRlbGF5bG9nLG5vYmFycmllcixp bm9kZTY0LGxvZ2J1ZnM9OCxsb2dic2l6ZT0yNTZrLHN1bml0PTI1Nixzd2lkdGg9NTYzMixub3F1 b3RhIDAgMDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+IyBkZiAvZGV2L3NkYTwvZGl2PjxkaXY+ L2Rldi9zZGEgwqAgwqAgwqAgNDI5NjY1NTg3MjAgMTk2NzAyNTAwMjQgMjMyOTYzMDg2OTYgwqA0 NiUgL2FycmF5PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4jIGRmIC1pIC9kZXYvc2RhPC9kaXY+ PGRpdj4vZGV2L3NkYSDCoCDCoCDCoCA4NTkzNzI5MDg4IDcyNTIwIDg1OTM2NTY1NjggwqAgwqAx JSAvYXJyYXk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiMgeGZzX2luZm8gL2Rldi9zZGE8L2Rp dj48ZGl2Pm1ldGEtZGF0YT0vZGV2L3NkYSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpc2l6ZT0yNTYg wqAgwqBhZ2NvdW50PTQxLCBhZ3NpemU9MjY4NDM1NDI0IGJsa3M8L2Rpdj48ZGl2PsKgIMKgIMKg IMKgIMKgPSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZWN0c3o9NTEyIMKgIGF0 dHI9MiwgcHJvamlkMzJiaXQ9MDwvZGl2PjxkaXY+wqAgwqAgwqAgwqAgwqA9IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNyYz0wIMKgIMKgIMKgIMKgZmlub2J0PTA8L2Rpdj48ZGl2 PmRhdGEgwqAgwqAgPSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBic2l6ZT00MDk2 IMKgIGJsb2Nrcz0xMDc0MjE2MTQwOCwgaW1heHBjdD01PC9kaXY+PGRpdj7CoCDCoCDCoCDCoCDC oD0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3VuaXQ9MzIgwqAgwqAgc3dpZHRo PTcwNCBibGtzPC9kaXY+PGRpdj5uYW1pbmcgwqAgPXZlcnNpb24gMiDCoCDCoCDCoCDCoCDCoCDC oCDCoGJzaXplPTQwOTYgwqAgYXNjaWktY2k9MCBmdHlwZT0wPC9kaXY+PGRpdj5sb2cgwqAgwqAg wqA9aW50ZXJuYWwgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnNpemU9NDA5NiDCoCBibG9ja3M9NTIx NzI4LCB2ZXJzaW9uPTI8L2Rpdj48ZGl2PsKgIMKgIMKgIMKgIMKgPSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBzZWN0c3o9NTEyIMKgIHN1bml0PTMyIGJsa3MsIGxhenktY291bnQ9 MTwvZGl2PjxkaXY+cmVhbHRpbWUgPW5vbmUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXh0 c3o9NDA5NiDCoCBibG9ja3M9MCwgcnRleHRlbnRzPTA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PiMgeGZzX2RiIC1yIC1jIGZyZWVzcCAvZGV2L3NkYTwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKg IMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDC oCDCoCAxIMKgIMKgMjIwNSDCoCDCoDIyMDUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDC oCDCoCDCoCAzIMKgIMKgNDEzNSDCoCAxMDMzNCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA0 IMKgIMKgIMKgIDcgwqAgwqA4MDQ5IMKgIDQ0MDU5IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKg IDggwqAgwqAgwqAxNSDCoCAxNTU3OSDCoDE3OTI1MyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDC oDE2IMKgIMKgIMKgMzEgwqAgMzE3MDEgwqA3NDQ3MDEgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAg wqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgNDYgwqAgwqAxNzU4IMKgIDAuMDA8L2Rpdj48ZGl2PsKg IMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIDEwNCDCoCDCoDg1NDggwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgMTI4IMKgIMKgIDI1NSDCoCDCoCAxNjEgwqAgMjkxMjkgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCAyNjEgwqAgOTUyMTIgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCAzNjQgwqAyNzM5NTUgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCA0MjggwqA2NTg5NTEgwqAgMC4wMTwvZGl2PjxkaXY+ wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCAyMDIgwqA1OTk3NjcgwqAgMC4wMTwvZGl2PjxkaXY+ wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDCoCDCoDM0IMKgMjAxMjkxIMKgIDAuMDA8L2Rpdj48ZGl2 PsKgIMKgODE5MiDCoCAxNjM4MyDCoCDCoCDCoDE2IMKgMTkxODkxIMKgIDAuMDA8L2Rpdj48ZGl2 PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKgIMKgMTggwqAzOTk4OTUgwqAgMC4wMTwvZGl2PjxkaXY+ wqAgMzI3NjggwqAgNjU1MzUgwqAgwqAgwqAxMyDCoDYwMjE1MCDCoCAwLjAxPC9kaXY+PGRpdj7C oCA2NTUzNiDCoDEzMTA3MSDCoCDCoCDCoCA0IMKgMzU3Mjg1IMKgIDAuMDE8L2Rpdj48ZGl2PsKg MTMxMDcyIMKgMjYyMTQzIMKgIMKgIMKgIDIgwqA0NTcxNjkgwqAgMC4wMTwvZGl2PjxkaXY+wqAy NjIxNDQgwqA1MjQyODcgwqAgwqAgwqAgMSDCoDI2NDk4MCDCoCAwLjAwPC9kaXY+PGRpdj42NzEw ODg2NCAxMzQyMTc3MjcgwqAgwqAgwqAgNSA1OTU0NDYzOTcgwqAxMC4yMjwvZGl2PjxkaXY+MTM0 MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoDM0IDUyMjM1MTYyOTkgwqA4OS42OTwvZGl2PjxkaXY+ PGJyPjwvZGl2PjxkaXY+IyBmcmVlc3AgQUdzIDAtNDA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PioqKiBBRyAwOjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2Nr cyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgODkgwqAg wqAgwqA4OSDCoCAwLjA2PC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgMjMz IMKgIMKgIDU4MyDCoCAwLjM5PC9kaXY+PGRpdj7CoCDCoCDCoCA0IMKgIMKgIMKgIDcgwqAgwqAg NDE1IMKgIMKgMjMyNCDCoCAxLjU1PC9kaXY+PGRpdj7CoCDCoCDCoCA4IMKgIMKgIMKgMTUgwqAg wqAgODA3IMKgIMKgOTI3MiDCoCA2LjE4PC9kaXY+PGRpdj7CoCDCoCDCoDE2IMKgIMKgIMKgMzEg wqAgwqAxNjY1IMKgIDM5MDY3IMKgMjYuMDI8L2Rpdj48ZGl2PsKgIMKgIMKgMzIgwqAgwqAgwqA2 MyDCoCDCoCDCoCA2IMKgIMKgIDIyMiDCoCAwLjE1PC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKg IDEyNyDCoCDCoCDCoDEwIMKgIMKgIDgxMSDCoCAwLjU0PC9kaXY+PGRpdj7CoCDCoCAxMjggwqAg wqAgMjU1IMKgIMKgIMKgMTIgwqAgwqAyMTYwIMKgIDEuNDQ8L2Rpdj48ZGl2PsKgIMKgIDI1NiDC oCDCoCA1MTEgwqAgwqAgwqAxNSDCoCDCoDUwMjEgwqAgMy4zNDwvZGl2PjxkaXY+wqAgwqAgNTEy IMKgIMKgMTAyMyDCoCDCoCDCoDI0IMKgIDE4NTE0IMKgMTIuMzM8L2Rpdj48ZGl2PsKgIMKgMTAy NCDCoCDCoDIwNDcgwqAgwqAgwqAxOSDCoCAzMTcxMSDCoDIxLjEyPC9kaXY+PGRpdj7CoCDCoDIw NDggwqAgwqA0MDk1IMKgIMKgIMKgMTEgwqAgMzU3MTIgwqAyMy43OTwvZGl2PjxkaXY+wqAgwqA0 MDk2IMKgIMKgODE5MSDCoCDCoCDCoCAxIMKgIMKgNDY0MCDCoCAzLjA5PC9kaXY+PGRpdj50b3Rh bCBmcmVlIGV4dGVudHMgMzMwNzwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTUwMTI2PC9k aXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgNDUuMzk2NDwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+KioqIEFHIDE6PC9kaXY+PGRpdj7CoCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRz IMKgYmxvY2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7CoCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAg wqA0NyDCoCDCoCDCoDQ3IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDC oCDCoCDCoDkwIMKgIMKgIDIzMyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA0IMKgIMKgIMKg IDcgwqAgwqAgMTk3IMKgIMKgMTA1NCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA4IMKgIMKg IMKgMTUgwqAgwqAgMzIzIMKgIMKgMzY2MyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDE2IMKg IMKgIMKgMzEgwqAgwqAgNzY0IMKgIDE3OTA5IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgIMKgMzIg wqAgwqAgwqA2MyDCoCDCoCDCoCAyIMKgIMKgIDEwNCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDC oDY0IMKgIMKgIDEyNyDCoCDCoCDCoCAyIMKgIMKgIDIwMSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDC oCAyNTYgwqAgwqAgNTExIMKgIMKgIMKgIDkgwqAgwqAzNjg1IMKgIDAuMDA8L2Rpdj48ZGl2PsKg IMKgIDUxMiDCoCDCoDEwMjMgwqAgwqAgwqAgNiDCoCDCoDQ1MTIgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoDExIMKgIDE2MzQxIMKgIDAuMDE8L2Rpdj48ZGl2 PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgNSDCoCAxNTQ4MyDCoCAwLjAxPC9kaXY+PGRp dj7CoCDCoDQwOTYgwqAgwqA4MTkxIMKgIMKgIMKgIDcgwqAgNDMyNTkgwqAgMC4wMzwvZGl2Pjxk aXY+wqAgwqA4MTkyIMKgIDE2MzgzIMKgIMKgIMKgIDEgwqAgwqA5MTIwIMKgIDAuMDE8L2Rpdj48 ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxNjI1OTUyNTEgwqA5OS45MzwvZGl2 PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE0NjU8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tz IDE2MjcxMDg2MjwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXplIDExMTA2NTwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDI6PC9kaXY+PGRpdj7CoCDCoGZyb20gwqAgwqAg wqB0byBleHRlbnRzIMKgYmxvY2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7CoCDCoCDCoCAxIMKgIMKg IMKgIDEgwqAgwqAgwqA3NCDCoCDCoCDCoDc0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDIg wqAgwqAgwqAgMyDCoCDCoCAxNDkgwqAgwqAgMzg0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKg IDQgwqAgwqAgwqAgNyDCoCDCoCAyNjIgwqAgwqAxNDYzIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKg IMKgIDggwqAgwqAgwqAxNSDCoCDCoCA1NzQgwqAgwqA2NTk0IMKgIDAuMDE8L2Rpdj48ZGl2PsKg IMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoDEwODUgwqAgMjUxMjEgwqAgMC4wMjwvZGl2PjxkaXY+ wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgIDIgwqAgwqAgwqA5NyDCoCAwLjAwPC9kaXY+ PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDCoCDCoCAyIMKgIMKgIDEzNCDCoCAwLjAwPC9k aXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDkgwqAgwqAxNjA0IMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAgNiDCoCDCoDIwODAgwqAgMC4w MDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoDEwIMKgIMKgNzcwOCDCoCAw LjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgMTEgwqAgMTg1NDIgwqAg MC4wMjwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCDCoDE1IMKgIDQxOTQwIMKg IDAuMDQ8L2Rpdj48ZGl2PsKgIMKgNDA5NiDCoCDCoDgxOTEgwqAgwqAgwqAgMiDCoCAxMjQzMSDC oCAwLjAxPC9kaXY+PGRpdj7CoCAxNjM4NCDCoCAzMjc2NyDCoCDCoCDCoCAxIMKgIDE3ODYwIMKg IDAuMDI8L2Rpdj48ZGl2PsKgIDMyNzY4IMKgIDY1NTM1IMKgIMKgIMKgIDEgwqAgNjM5NjggwqAg MC4wNjwvZGl2PjxkaXY+NjcxMDg4NjQgMTM0MjE3NzI3IMKgIMKgIMKgIDEgMTAzODc4MjI0IMKg OTkuODE8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAyMjA0PC9kaXY+PGRpdj50b3RhbCBm cmVlIGJsb2NrcyAxMDQwNzgyMjQ8L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSA0 NzIyMi40PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4qKiogQUcgMzo8L2Rpdj48ZGl2PsKgIMKg ZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKg IMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDQ5IMKgIMKgIMKgNDkgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgOTcgwqAgwqAgMjQ5IMKgIDAuMDA8L2Rpdj48 ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxNzUgwqAgwqAgOTUxIMKgIDAuMDA8L2Rp dj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAzMjYgwqAgwqAzNzE3IMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA2ODcgwqAgMTYwOTEgwqAgMC4w MTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgIDEgwqAgwqAgwqA1NSDC oCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDMgwqAgwqAgNDgw IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAgNSDCoCDCoDE4 MDQgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoDExIMKgIMKg ODExNiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgMTEgwqAg MTgyNDggwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCDCoCAzIMKg IDEwMDgxIMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgNDA5NiDCoCDCoDgxOTEgwqAgwqAgwqAgMiDC oCAxMDU0NiDCoCAwLjAxPC9kaXY+PGRpdj7CoCAxNjM4NCDCoCAzMjc2NyDCoCDCoCDCoCAxIMKg IDIwNTQ0IMKgIDAuMDE8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAx NzI5OTM0MzUgwqA5OS45NTwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDEzNzI8L2Rpdj48 ZGl2PnRvdGFsIGZyZWUgYmxvY2tzIDE3MzA4NDM2NjwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4 dGVudCBzaXplIDEyNjE1NTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDQ6PC9kaXY+ PGRpdj7CoCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRzIMKgYmxvY2tzIMKgIMKgcGN0PC9kaXY+ PGRpdj7CoCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAgwqA2NCDCoCDCoCDCoDY0IMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDCoCDCoCAxMjcgwqAgwqAgMzEzIMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAyNjIgwqAgwqAxNDE1IMKg IDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCA0NzMgwqAgwqA1NDcz IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoDEwMjYgwqAgMjQx NzIgwqAgMC4wMjwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgIDEgwqAg wqAgwqAzMiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDQg wqAgwqAgNjY4IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAg NCDCoCDCoDE1MzEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDC oDExIMKgIMKgODYzMSDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKg IMKgMTYgwqAgMjI3OTQgwqAgMC4wMjwvZGl2PjxkaXY+wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDC oCDCoCAyIMKgIDExNzc1IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgODE5MiDCoCAxNjM4MyDCoCDC oCDCoCAxIMKgIDEyMzU4IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKg IMKgIDEgwqAgMTg3NTIgwqAgMC4wMTwvZGl2PjxkaXY+NjcxMDg4NjQgMTM0MjE3NzI3IMKgIMKg IMKgIDEgMTMwNTk0NDY1IMKgOTkuOTI8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxOTkz PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxMzA3MDI0NDM8L2Rpdj48ZGl2PmF2ZXJhZ2Ug ZnJlZSBleHRlbnQgc2l6ZSA2NTU4MC44PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4qKiogQUcg NTo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBw Y3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDQxIMKgIMKgIMKgNDEg wqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgNzQgwqAgwqAg MTg1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxNzYgwqAg wqAgOTkyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAzMTgg wqAgwqAzNjI4IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA2 NDMgwqAgMTUxMzkgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKg IMKgIDIgwqAgwqAgwqA2NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDC oCDCoCDCoCA2IMKgIMKgIDUxOCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1 IMKgIMKgIMKgIDUgwqAgwqAgODU3IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1 MTEgwqAgwqAgwqAgOCDCoCDCoDI4MzggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKg MTAyMyDCoCDCoCDCoCAxIMKgIMKgIDU0NCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAg wqAyMDQ3IMKgIMKgIMKgIDYgwqAgwqA5MDQ2IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgMjA0OCDC oCDCoDQwOTUgwqAgwqAgwqAgMSDCoCDCoDM3NDQgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqA0MDk2 IMKgIMKgODE5MSDCoCDCoCDCoCAxIMKgIMKgNzUyMCDCoCAwLjAwPC9kaXY+PGRpdj4xMzQyMTc3 MjggMjY4NDM1NDI0IMKgIMKgIMKgIDEgMTU3NzYyMTc4IMKgOTkuOTc8L2Rpdj48ZGl2PnRvdGFs IGZyZWUgZXh0ZW50cyAxMjgzPC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNTc4MDcyOTc8 L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSAxMjI5OTk8L2Rpdj48ZGl2Pjxicj48 L2Rpdj48ZGl2PioqKiBBRyA2OjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50 cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKg IMKgNDMgwqAgwqAgwqA0MyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMg wqAgwqAgwqA4OCDCoCDCoCAyMjUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDC oCA3IMKgIMKgIDE2MiDCoCDCoCA5MDggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDC oCDCoDE1IMKgIMKgIDMwOSDCoCDCoDM2MzIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDC oCDCoCDCoDMxIMKgIMKgIDY3MSDCoCAxNTk5NSDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDCoDY0 IMKgIMKgIDEyNyDCoCDCoCDCoCAzIMKgIMKgIDIxMiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAx MjggwqAgwqAgMjU1IMKgIMKgIMKgIDYgwqAgwqAxMTE4IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKg IDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAgMyDCoCDCoDEwMzYgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoCA5IMKgIMKgNjg1MSDCoCAwLjAwPC9kaXY+PGRpdj7C oCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgIDUgwqAgwqA4OTYwIMKgIDAuMDE8L2Rpdj48ZGl2 PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgMSDCoCDCoDI1MjAgwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDCoCDCoCAxIMKgIMKgNTUyMiDCoCAwLjAwPC9kaXY+ PGRpdj7CoCAzMjc2OCDCoCA2NTUzNSDCoCDCoCDCoCAxIMKgIDUxODk4IMKgIDAuMDM8L2Rpdj48 ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxNjgyOTk4NTkgwqA5OS45NDwvZGl2 PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDEzMDM8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tz IDE2ODM5ODc3OTwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXplIDEyOTIzOTwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDc6PC9kaXY+PGRpdj7CoCDCoGZyb20gwqAgwqAg wqB0byBleHRlbnRzIMKgYmxvY2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7CoCDCoCDCoCAxIMKgIMKg IMKgIDEgwqAgwqAgwqA0NSDCoCDCoCDCoDQ1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDIg wqAgwqAgwqAgMyDCoCDCoCDCoDkwIMKgIMKgIDIyNSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDC oCA0IMKgIMKgIMKgIDcgwqAgwqAgMTgwIMKgIMKgIDk4OSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDC oCDCoCA4IMKgIMKgIMKgMTUgwqAgwqAgMzQ0IMKgIMKgMzk4OSDCoCAwLjAwPC9kaXY+PGRpdj7C oCDCoCDCoDE2IMKgIMKgIMKgMzEgwqAgwqAgNjY4IMKgIDE1MzI5IMKgIDAuMDE8L2Rpdj48ZGl2 PsKgIMKgIMKgMzIgwqAgwqAgwqA2MyDCoCDCoCDCoCAxIMKgIMKgIMKgMzIgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqA2NCDCoCDCoCAxMjcgwqAgwqAgwqAgMyDCoCDCoCAyNDYgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA0IMKgIMKgMTQ0MCDCoCAwLjAw PC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDkgwqAgwqA2OTkzIMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAgNCDCoCDCoDY0MDAgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCDCoCA2IMKgIDE4NjMyIMKg IDAuMDE8L2Rpdj48ZGl2PsKgIMKgODE5MiDCoCAxNjM4MyDCoCDCoCDCoCAxIMKgIDEzNDQwIMKg IDAuMDE8L2Rpdj48ZGl2PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKgIMKgIDEgwqAgMjc2MzMgwqAg MC4wMjwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE2MzU5MDA5OCDC oDk5Ljk0PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVudHMgMTM1NzwvZGl2PjxkaXY+dG90YWwg ZnJlZSBibG9ja3MgMTYzNjg1NDkxPC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUg MTIwNjIzPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4qKiogQUcgODo8L2Rpdj48ZGl2PsKgIMKg ZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKg IMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDUyIMKgIMKgIMKgNTIgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIDExNyDCoCDCoCAyODkgwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE3NyDCoCDCoCA5NzUgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM5NyDCoCDCoDQ1MzQgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDcwNCDCoCAxNjI4NCDCoCAwLjAx PC9kaXY+PGRpdj7CoCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgMiDCoCDCoCDCoDc4IMKg IDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDQgwqAgwqAgMzA3 IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgNSDCoCDCoCA4 NzkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA4IMKgIMKg Mjc5NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDUgwqAg wqA0MDQyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAxMCDC oCAxNDk0MyDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKgIDMg wqAgwqA3NTgzIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKgIMKgIDEg wqAgMjY4MTMgwqAgMC4wMjwvZGl2PjxkaXY+wqAgMzI3NjggwqAgNjU1MzUgwqAgwqAgwqAgMSDC oCA1Mjc3MyDCoCAwLjAzPC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0IMKgIMKgIMKgIDEg MTYwMTUwODgwIMKgOTkuOTI8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxNDg3PC9kaXY+ PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNjAyODMyMjk8L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJlZSBl eHRlbnQgc2l6ZSAxMDc3OTA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyA5OjwvZGl2 PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2 PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgNTQgwqAgwqAgwqA1NCDCoCAwLjAw PC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgwqA5OSDCoCDCoCAyNDEgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDIwMSDCoCDCoDExMDUg wqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM5MCDCoCDCoDQ1 MTkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDgxNSDCoCAx OTE0NiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDCoCDCoCA0IMKg IMKgIDMwMyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDQg wqAgwqAgNzA5IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAg NiDCoCDCoDIwNzkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDC oCA2IMKgIMKgNDkyMSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKg IMKgMTIgwqAgMTg3NTIgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDC oCDCoCA0IMKgIMKgOTE4NCDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDgxOTIgwqAgMTYzODMgwqAg wqAgwqAgMiDCoCAyMjc1MiDCoCAwLjAyPC9kaXY+PGRpdj7CoCAxNjM4NCDCoCAzMjc2NyDCoCDC oCDCoCAyIMKgIDQ0MjU3IMKgIDAuMDM8L2Rpdj48ZGl2PsKgMTMxMDcyIMKgMjYyMTQzIMKgIMKg IMKgIDEgwqAyMjk4MzMgwqAgMC4xNzwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDC oCDCoCAxIDEzNzgxNTQ3NCDCoDk5Ljc0PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVudHMgMTYw MTwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTM4MTczMzI5PC9kaXY+PGRpdj5hdmVyYWdl IGZyZWUgZXh0ZW50IHNpemUgODYzMDQuNDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFH IDEwOjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDC oHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgNTUgwqAgwqAgwqA1 NSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgMTM0IMKgIMKg IDMzNiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA0IMKgIMKgIMKgIDcgwqAgwqAgMjQ4IMKg IMKgMTM2NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA4IMKgIMKgIMKgMTUgwqAgwqAgNDM0 IMKgIMKgNDk1NSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDE2IMKgIMKgIMKgMzEgwqAgwqAg OTMxIMKgIDIxNzQ1IMKgIDAuMDI8L2Rpdj48ZGl2PsKgIMKgIMKgMzIgwqAgwqAgwqA2MyDCoCDC oCDCoCAxIMKgIMKgIMKgMzIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqA2NCDCoCDCoCAxMjcg wqAgwqAgwqAgNCDCoCDCoCAzNTAgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMTI4IMKgIMKgIDI1 NSDCoCDCoCDCoCA1IMKgIMKgIDk1MiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAyNTYgwqAgwqAg NTExIMKgIMKgIMKgIDUgwqAgwqAxNzY1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDUxMiDCoCDC oDEwMjMgwqAgwqAgwqAgOSDCoCDCoDY0NjYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAxMDI0IMKg IMKgMjA0NyDCoCDCoCDCoDEyIMKgIDE3NTIyIMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgMjA0OCDC oCDCoDQwOTUgwqAgwqAgwqAgMSDCoCDCoDM5MDQgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqA4MTky IMKgIDE2MzgzIMKgIMKgIMKgIDMgwqAgMzI1NzYgwqAgMC4wMjwvZGl2PjxkaXY+MTM0MjE3NzI4 IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE0MDU5MDAxMiDCoDk5LjkzPC9kaXY+PGRpdj50b3RhbCBm cmVlIGV4dGVudHMgMTg0MzwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTQwNjgyMDM3PC9k aXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgNzYzMzMuMjwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+KioqIEFHIDExOjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50 cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKg IMKgNTcgwqAgwqAgwqA1NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMg wqAgwqAgMTEyIMKgIMKgIDI4NCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA0IMKgIMKgIMKg IDcgwqAgwqAgMjM1IMKgIMKgMTI2NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA4IMKgIMKg IMKgMTUgwqAgwqAgNDQ5IMKgIMKgNTIzMSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDE2IMKg IMKgIMKgMzEgwqAgwqAgODI1IMKgIDE5NTMwIMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgIMKgNjQg wqAgwqAgMTI3IMKgIMKgIMKgIDIgwqAgwqAgMTYwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEy OCDCoCDCoCAyNTUgwqAgwqAgwqAgMSDCoCDCoCAyMjQgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg MjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA4IMKgIMKgMjkzNyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDC oCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDggwqAgwqA2MzE2IMKgIDAuMDA8L2Rpdj48ZGl2PsKg IMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAxNCDCoCAyMjU1NCDCoCAwLjAxPC9kaXY+PGRpdj7C oCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKgMTYgwqAgNDY2OTIgwqAgMC4wMzwvZGl2PjxkaXY+ wqAgwqA4MTkyIMKgIDE2MzgzIMKgIMKgIMKgIDEgwqAgMTA1MjggwqAgMC4wMTwvZGl2PjxkaXY+ MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE1MDM1MjI2MiDCoDk5LjkyPC9kaXY+PGRp dj50b3RhbCBmcmVlIGV4dGVudHMgMTcyOTwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTUw NDY4MDQyPC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgODcwMjYuMTwvZGl2Pjxk aXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDEyOjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKg dG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDC oCAxIMKgIMKgIMKgNDIgwqAgwqAgwqA0MiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKg IMKgIMKgIDMgwqAgwqAgwqA5NCDCoCDCoCAyMjAgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAg NCDCoCDCoCDCoCA3IMKgIMKgIDIwNCDCoCDCoDEwOTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg wqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM1OSDCoCDCoDQxMTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDcyNiDCoCAxNzMxMSDCoCAwLjAxPC9kaXY+PGRpdj7C oCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgMSDCoCDCoCDCoDQ3IMKgIDAuMDA8L2Rpdj48 ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDIgwqAgwqAgMTgxIMKgIDAuMDA8L2Rp dj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgMiDCoCDCoCAzMjAgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA3IMKgIMKgMjcyMiDCoCAwLjAw PC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDcgwqAgwqA1MTQyIMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAxMyDCoCAxOTg0NSDCoCAw LjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKgIDIgwqAgwqA1MzEyIMKg IDAuMDA8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxNDM3MjQ1NDIg wqA5OS45NjwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE0NjA8L2Rpdj48ZGl2PnRvdGFs IGZyZWUgYmxvY2tzIDE0Mzc4MDg5NjwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXpl IDk4NDgwLjE8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAxMzo8L2Rpdj48ZGl2PsKg IMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKg IMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDU1IMKgIMKgIMKgNTUgwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIDExMSDCoCDCoCAyODMgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE4MSDCoCDCoDEwMjIgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDMxNyDCoCDCoDM2NTUgwqAgMC4w MDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDY2MiDCoCAxNTI2MSDCoCAw LjAxPC9kaXY+PGRpdj7CoCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgMSDCoCDCoCDCoDMy IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDMgwqAgwqAg MjI0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgMyDCoCDC oCA1MTIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCAzIMKg IMKgIDk4OCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDYg wqAgwqA0NzI2IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAx MCDCoCAxNjM0MiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKg IDkgwqAgMjY5MTUgwqAgMC4wMjwvZGl2PjxkaXY+wqAgMTYzODQgwqAgMzI3NjcgwqAgwqAgwqAg MSDCoCAyODE4MCDCoCAwLjAyPC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0IMKgIMKgIMKg IDEgMTU0MjU4MTYwIMKgOTkuOTQ8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxMzYzPC9k aXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNTQzNTYzNTU8L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJl ZSBleHRlbnQgc2l6ZSAxMTMyNDg8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAxNDo8 L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8 L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDY1IMKgIMKgIMKgNjUgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgOTkgwqAgwqAgMjQz IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAyNDIgwqAgwqAx MzIwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCA1NTYgwqAg wqA2Mzc5IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA4OTEg wqAgMjA4ODkgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKg IDEgwqAgwqAgwqAzMiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDC oCDCoCA2IMKgIMKgIDU1MSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKg IMKgIMKgIDEgwqAgwqAgMTYwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEg wqAgwqAgwqAgNCDCoCDCoDE0NDAgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAy MyDCoCDCoCDCoDEwIMKgIMKgNzUwOCDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAy MDQ3IMKgIMKgIMKgIDUgwqAgwqA3Mzc5IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgMjA0OCDCoCDC oDQwOTUgwqAgwqAgwqAxMCDCoCAzMjAwOCDCoCAwLjAyPC9kaXY+PGRpdj7CoCDCoDgxOTIgwqAg MTYzODMgwqAgwqAgwqAgMSDCoCAxMzk1MiDCoCAwLjAxPC9kaXY+PGRpdj7CoCAxNjM4NCDCoCAz Mjc2NyDCoCDCoCDCoCAxIMKgIDE3MDI0IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIDMyNzY4IMKgIDY1 NTM1IMKgIMKgIMKgIDEgwqAgNDEzNzcgwqAgMC4wMzwvZGl2PjxkaXY+wqAxMzEwNzIgwqAyNjIx NDMgwqAgwqAgwqAgMSDCoDIyNzMzNiDCoCAwLjE2PC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1 NDI0IMKgIMKgIMKgIDEgMTQyNDE2MjYxIMKgOTkuNzQ8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0 ZW50cyAxODk1PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNDI3OTM5MjQ8L2Rpdj48ZGl2 PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSA3NTM1MzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+ KioqIEFHIDE1OjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2Nr cyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgNjEgwqAg wqAgwqA2MSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgMTIw IMKgIMKgIDI5OCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA0IMKgIMKgIMKgIDcgwqAgwqAg MjA4IMKgIMKgMTA5OCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCA4IMKgIMKgIMKgMTUgwqAg wqAgMzg5IMKgIMKgNDQ3NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDE2IMKgIMKgIMKgMzEg wqAgwqAgODIxIMKgIDE5MjgxIMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgIMKgMzIgwqAgwqAgwqA2 MyDCoCDCoCDCoCAxIMKgIMKgIMKgMzIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMTI4IMKgIMKg IDI1NSDCoCDCoCDCoCA0IMKgIMKgIDc0MyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAyNTYgwqAg wqAgNTExIMKgIMKgIMKgIDggwqAgwqAyOTIwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDUxMiDC oCDCoDEwMjMgwqAgwqAgwqAxNCDCoCAxMDA0MiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQg wqAgwqAyMDQ3IMKgIMKgIMKgIDQgwqAgwqA2NTYwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgMjA0 OCDCoCDCoDQwOTUgwqAgwqAgwqAgNCDCoCAxMDU2MiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDQw OTYgwqAgwqA4MTkxIMKgIMKgIMKgIDEgwqAgwqA1MDg4IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIDMy NzY4IMKgIDY1NTM1IMKgIMKgIMKgIDEgwqAgMzM3NjAgwqAgMC4wMjwvZGl2PjxkaXY+MTM0MjE3 NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE1Mzg4MjM3NSDCoDk5Ljk0PC9kaXY+PGRpdj50b3Rh bCBmcmVlIGV4dGVudHMgMTYzNzwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTUzOTc3Mjk3 PC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgOTQwNjAuNzwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+KioqIEFHIDE2OjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0 ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKg IMKgIMKgNDggwqAgwqAgwqA0OCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKg IDMgwqAgwqAgwqA3NiDCoCDCoCAxODkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDC oCDCoCA3IMKgIMKgIDE1MCDCoCDCoCA4MTUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDC oCDCoCDCoDE1IMKgIMKgIDM2MSDCoCDCoDQwNTkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAx NiDCoCDCoCDCoDMxIMKgIMKgIDY1OSDCoCAxNTU3MiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDC oDY0IMKgIMKgIDEyNyDCoCDCoCDCoCAxIMKgIMKgIMKgOTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgMTI4IMKgIMKgIDI1NSDCoCDCoCDCoCA2IMKgIMKgMTE3OCDCoCAwLjAwPC9kaXY+PGRpdj7C oCDCoCAyNTYgwqAgwqAgNTExIMKgIMKgIMKgIDMgwqAgwqAxMTQwIMKgIDAuMDA8L2Rpdj48ZGl2 PsKgIMKgIDUxMiDCoCDCoDEwMjMgwqAgwqAgwqAgOSDCoCDCoDY1ODEgwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoDEzIMKgIDE4MDM1IMKgIDAuMDE8L2Rpdj48 ZGl2PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAxNiDCoCA0NTY0NSDCoCAwLjAzPC9kaXY+ PGRpdj7CoCDCoDQwOTYgwqAgwqA4MTkxIMKgIMKgIMKgIDEgwqAgwqA3Mjg5IMKgIDAuMDA8L2Rp dj48ZGl2PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKgIMKgIDEgwqAgMTg0ODUgwqAgMC4wMTwvZGl2 PjxkaXY+wqAgNjU1MzYgwqAxMzEwNzEgwqAgwqAgwqAgMSDCoCA4MTM3MSDCoCAwLjA1PC9kaXY+ PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0IMKgIMKgIMKgIDEgMTU2Mjk1ODgxIMKgOTkuODc8L2Rp dj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxMzQ2PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2Nr cyAxNTY0OTYzODQ8L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSAxMTYyNjg8L2Rp dj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAxNzo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDC oCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAg wqAgwqAgMSDCoCDCoCDCoDQ2IMKgIMKgIMKgNDYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAg MiDCoCDCoCDCoCAzIMKgIMKgIMKgOTMgwqAgwqAgMjMxIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKg IMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxNzEgwqAgwqAgOTQ3IMKgIDAuMDA8L2Rpdj48ZGl2PsKg IMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAzMDkgwqAgwqAzNTEwIMKgIDAuMDA8L2Rpdj48ZGl2 PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA2NjcgwqAgMTU2ODUgwqAgMC4wMTwvZGl2Pjxk aXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgIDIgwqAgwqAgwqA2NCDCoCAwLjAwPC9k aXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDCoCDCoCA0IMKgIMKgIDMyMCDCoCAwLjAw PC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDMgwqAgwqAgNTQ0IMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAgNSDCoCDCoDE4NzIgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoCA0IMKgIMKgMjgxOCDC oCAwLjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgIDggwqAgMTI4NTYg wqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCDCoCAzIMKgIDEwMzM2 IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgODE5MiDCoCAxNjM4MyDCoCDCoCDCoCAxIMKgIDE0MzEy IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIDY1NTM2IMKgMTMxMDcxIMKgIMKgIMKgIDEgwqAxMTM2OTIg wqAgMC4wODwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE0Nzk3MTI5 MCDCoDk5Ljg4PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVudHMgMTMxODwvZGl2PjxkaXY+dG90 YWwgZnJlZSBibG9ja3MgMTQ4MTQ4NTIzPC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNp emUgMTEyNDA0PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4qKiogQUcgMTg6PC9kaXY+PGRpdj7C oCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRzIMKgYmxvY2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7C oCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAgwqA1NiDCoCDCoCDCoDU2IMKgIDAuMDA8L2Rpdj48 ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDCoCDCoCAxMjUgwqAgwqAgMzE3IMKgIDAuMDA8L2Rp dj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAyMDcgwqAgwqAxMTUxIMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCA0MDUgwqAgwqA0NjIwIMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA4ODYgwqAgMjA0NjAgwqAg MC4wMjwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgIDQgwqAgwqAgMTQz IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDIgwqAgwqAg MTUyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgNiDCoCDC oDExMjAgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA2IMKg IMKgMjI0NyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDQg wqAgwqAyOTI1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAx MyDCoCAyMTE1MSDCoCAwLjAyPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKg MTEgwqAgMzEwNDUgwqAgMC4wMjwvZGl2PjxkaXY+wqAgNjU1MzYgwqAxMzEwNzEgwqAgwqAgwqAg MSDCoCA4NjkyNiDCoCAwLjA3PC9kaXY+PGRpdj42NzEwODg2NCAxMzQyMTc3MjcgwqAgwqAgwqAg MSAxMjk4NjMxMzkgwqA5OS44NzwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE3Mjc8L2Rp dj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tzIDEzMDAzNTQ1MjwvZGl2PjxkaXY+YXZlcmFnZSBmcmVl IGV4dGVudCBzaXplIDc1Mjk1LjY8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAxOTo8 L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8 L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDUwIMKgIMKgIMKgNTAgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgOTEgwqAgwqAgMjE5 IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxNDggwqAgwqAg ODIwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAzNDEgwqAg wqAzOTQwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA2Nzcg wqAgMTYxMzMgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKg IDEgwqAgwqAgwqA2MCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKg IMKgIDMgwqAgwqAgNjE4IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAg wqAgwqAgMiDCoCDCoCA3NTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDC oCDCoCDCoDExIMKgIMKgNzk4MSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3 IMKgIMKgIMKgIDkgwqAgMTQzMDQgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5 NSDCoCDCoCDCoCA2IMKgIDE4Mzk0IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgNDA5NiDCoCDCoDgx OTEgwqAgwqAgwqAgMSDCoCDCoDY4NDggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqA4MTkyIMKgIDE2 MzgzIMKgIMKgIMKgIDEgwqAgMTU5NTUgwqAgMC4wMTwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQz NTQyNCDCoCDCoCDCoCAxIDE2MjYwNjgyOSDCoDk5Ljk1PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4 dGVudHMgMTM0MjwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTYyNjkyOTA3PC9kaXY+PGRp dj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgMTIxMjMyPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp dj4qKiogQUcgMjA6PC9kaXY+PGRpdj7CoCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRzIMKgYmxv Y2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7CoCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAgwqA1OCDC oCDCoCDCoDU4IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDCoCDCoCAx MTMgwqAgwqAgMjg1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDC oCAxOTAgwqAgwqAxMDI1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDC oCDCoCAzOTMgwqAgwqA0NTUwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAz MSDCoCDCoCA4NDcgwqAgMTk5NTEgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDC oDYzIMKgIMKgIMKgIDEgwqAgwqAgwqAzMiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKg IMKgIDEyNyDCoCDCoCDCoCAxIMKgIMKgIMKgOTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMTI4 IMKgIMKgIDI1NSDCoCDCoCDCoCA2IMKgIMKgMTA3NSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAy NTYgwqAgwqAgNTExIMKgIMKgIMKgMTAgwqAgwqA0MTIxIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKg IDUxMiDCoCDCoDEwMjMgwqAgwqAgwqAgOSDCoCDCoDc1NTIgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoCA2IMKgIMKgOTczNiDCoCAwLjAxPC9kaXY+PGRpdj7C oCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKgIDMgwqAgwqA5MzgzIMKgIDAuMDE8L2Rpdj48ZGl2 PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKgIMKgIDEgwqAgMjE5NTIgwqAgMC4wMTwvZGl2PjxkaXY+ MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE1OTcxMTQzNCDCoDk5Ljk1PC9kaXY+PGRp dj50b3RhbCBmcmVlIGV4dGVudHMgMTYzOTwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTU5 NzkxMjUwPC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgOTc0OTMuMTwvZGl2Pjxk aXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDIxOjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKg dG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDC oCAxIMKgIMKgIMKgNDUgwqAgwqAgwqA0NSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKg IMKgIMKgIDMgwqAgwqAgwqA4MSDCoCDCoCAyMDIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAg NCDCoCDCoCDCoCA3IMKgIMKgIDE2MiDCoCDCoCA4OTEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg wqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM5NiDCoCDCoDQ1NzYgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDc2NCDCoCAxNzkwMSDCoCAwLjAxPC9kaXY+PGRpdj7C oCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDCoCDCoCAzIMKgIMKgIDI2NiDCoCAwLjAwPC9kaXY+PGRp dj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDUgwqAgwqAgOTQ0IMKgIDAuMDA8L2Rpdj48 ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAxMSDCoCDCoDQwMTcgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoCA5IMKgIMKgNzA4MSDCoCAwLjAwPC9k aXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgMTIgwqAgMTY2ODIgwqAgMC4wMTwv ZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE0MzA2ODM4MCDCoDk5Ljk2 PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVudHMgMTQ4OTwvZGl2PjxkaXY+dG90YWwgZnJlZSBi bG9ja3MgMTQzMTIwOTg1PC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgOTYxMTgu OTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDIyOjwvZGl2PjxkaXY+wqAgwqBmcm9t IMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAg MSDCoCDCoCDCoCAxIMKgIMKgIMKgNDkgwqAgwqAgwqA0OSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDC oCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgwqA2MSDCoCDCoCAxNTEgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE0MiDCoCDCoCA3ODIgwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDI5NiDCoCDCoDMzOTkgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDYyMyDCoCAxNDg1NSDCoCAwLjAxPC9k aXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDIgwqAgwqAgMzYwIMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAgMiDCoCDCoCA3MDQgwqAgMC4w MDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoCA4IMKgIMKgNTY3MCDCoCAw LjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgIDYgwqAgwqA5NjgxIMKg IDAuMDE8L2Rpdj48ZGl2PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgNCDCoCAxMTExMiDC oCAwLjAxPC9kaXY+PGRpdj7CoCAzMjc2OCDCoCA2NTUzNSDCoCDCoCDCoCAyIMKgIDY2OTE0IMKg IDAuMDQ8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxNzcxMTg0ODQg wqA5OS45NDwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDExOTY8L2Rpdj48ZGl2PnRvdGFs IGZyZWUgYmxvY2tzIDE3NzIzMjE2MTwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXpl IDE0ODE4NzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDIzOjwvZGl2PjxkaXY+wqAg wqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAg wqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgNDMgwqAgwqAgwqA0MyDCoCAwLjAwPC9kaXY+PGRp dj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgwqA2NSDCoCDCoCAxNjYgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE0OCDCoCDCoCA4MDIgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDI3OCDCoCDCoDMxNjggwqAgMC4w MDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDU5MiDCoCAxNDAzOSDCoCAw LjAxPC9kaXY+PGRpdj7CoCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgMiDCoCDCoCDCoDc2 IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDIgwqAgwqAg MTM0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgMSDCoCDC oCAxNjAgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA1IMKg IMKgMTk2OCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDQg wqAgwqAzMDUxIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAg OSDCoCAxNDYzNCDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKg IDMgwqAgMTEwNDAgwqAgMC4wMTwvZGl2PjxkaXY+wqAgMzI3NjggwqAgNjU1MzUgwqAgwqAgwqAg MSDCoCA1MTA0MCDCoCAwLjAzPC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0IMKgIMKgIMKg IDEgMTc3NTQ1NjU1IMKgOTkuOTQ8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxMTU0PC9k aXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNzc2NDU5NzY8L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJl ZSBleHRlbnQgc2l6ZSAxNTM5Mzk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAyNDo8 L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8 L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDUxIMKgIMKgIMKgNTEgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIDExMiDCoCDCoCAyODkg wqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE3OCDCoCDCoCA5 NjggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDMwMSDCoCDC oDM0MzcgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDY5MSDC oCAxNjEyMiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDCoCDCoCAy IMKgIMKgIDE2MCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKg IDQgwqAgwqAgNjcyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAg wqAgNyDCoCDCoDI2NTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDC oCDCoDEyIMKgIMKgOTM4OSDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKg IMKgIMKgIDggwqAgMTE2MjcgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKgNDA5NSDC oCDCoCDCoCA2IMKgIDE3NTM3IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgNDA5NiDCoCDCoDgxOTEg wqAgwqAgwqAgMSDCoCDCoDQxNDMgwqAgMC4wMDwvZGl2PjxkaXY+wqAyNjIxNDQgwqA1MjQyODcg wqAgwqAgwqAgMSDCoDI2NDk4MCDCoCAwLjE3PC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0 IMKgIMKgIMKgIDEgMTU0OTQ2NDAwIMKgOTkuNzk8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50 cyAxMzc1PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNTUyNzg0MzE8L2Rpdj48ZGl2PmF2 ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSAxMTI5MzA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pioq KiBBRyAyNTo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3Mg wqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDU4IMKgIMKg IMKgNTggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgOTQg wqAgwqAgMjM0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAx OTcgwqAgwqAxMDYxIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDC oCAzNjMgwqAgwqA0MTU5IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDC oCDCoCA3NjkgwqAgMTgwMzcgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqA2NCDCoCDCoCAxMjcg wqAgwqAgwqAgMSDCoCDCoCAxMTkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMTI4IMKgIMKgIDI1 NSDCoCDCoCDCoCAxIMKgIMKgIDEyOCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAyNTYgwqAgwqAg NTExIMKgIMKgIMKgMTEgwqAgwqAzNTIwIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDUxMiDCoCDC oDEwMjMgwqAgwqAgwqAgNyDCoCDCoDU1MjUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAxMDI0IMKg IMKgMjA0NyDCoCDCoCDCoDExIMKgIDE3MjE4IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgMjA0OCDC oCDCoDQwOTUgwqAgwqAgwqAgNSDCoCAxNTUzMSDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDQwOTYg wqAgwqA4MTkxIMKgIMKgIMKgIDIgwqAgMTI2NDAgwqAgMC4wMTwvZGl2PjxkaXY+MTM0MjE3NzI4 IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE0NjQ5MzY2MiDCoDk5Ljk1PC9kaXY+PGRpdj50b3RhbCBm cmVlIGV4dGVudHMgMTUyMDwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTQ2NTcxODkyPC9k aXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgOTY0MjguOTwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+KioqIEFHIDI2OjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50 cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKg IMKgNDMgwqAgwqAgwqA0MyDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMg wqAgwqAgwqA4OCDCoCDCoCAyMTggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDC oCA3IMKgIMKgIDIyOCDCoCDCoDEyNDkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDC oCDCoDE1IMKgIMKgIDM3MiDCoCDCoDQzMDcgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDC oCDCoCDCoDMxIMKgIMKgIDc5NyDCoCAxODk1MCDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDCoDY0 IMKgIMKgIDEyNyDCoCDCoCDCoCAzIMKgIMKgIDIwOCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAx MjggwqAgwqAgMjU1IMKgIMKgIMKgIDUgwqAgwqAgOTI1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKg IDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAxMCDCoCDCoDMzOTIgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoCA4IMKgIMKgNTM4MSDCoCAwLjAwPC9kaXY+PGRpdj7C oCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgMTUgwqAgMjE1MzAgwqAgMC4wMTwvZGl2PjxkaXY+ wqAgwqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCDCoCAxIMKgIMKgMjU0OCDCoCAwLjAwPC9kaXY+PGRp dj7CoCDCoDgxOTIgwqAgMTYzODMgwqAgwqAgwqAgMSDCoCAxMDYwMSDCoCAwLjAxPC9kaXY+PGRp dj7CoCAxNjM4NCDCoCAzMjc2NyDCoCDCoCDCoCAxIMKgIDE3NDcyIMKgIDAuMDE8L2Rpdj48ZGl2 PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxNTU0ODY1OTkgwqA5OS45NDwvZGl2Pjxk aXY+dG90YWwgZnJlZSBleHRlbnRzIDE1NzM8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tzIDE1 NTU3MzQyMzwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXplIDk4OTAyLjQ8L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAyNzo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDC oHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAg wqAgMSDCoCDCoCDCoDU1IMKgIMKgIMKgNTUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDC oCDCoCDCoCAzIMKgIMKgIDEwMCDCoCDCoCAyNDEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAg NCDCoCDCoCDCoCA3IMKgIMKgIDE4MiDCoCDCoDEwMDQgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg wqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM3OCDCoCDCoDQzMDMgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDc3MiDCoCAxODI5OCDCoCAwLjAxPC9kaXY+PGRpdj7C oCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDCoCDCoCAxIMKgIMKgIMKgNjQgwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqAgMTI4IMKgIMKgIDI1NSDCoCDCoCDCoCAyIMKgIMKgIDM1MiDCoCAwLjAwPC9kaXY+ PGRpdj7CoCDCoCAyNTYgwqAgwqAgNTExIMKgIMKgIMKgIDQgwqAgwqAxNDQ5IMKgIDAuMDA8L2Rp dj48ZGl2PsKgIMKgIDUxMiDCoCDCoDEwMjMgwqAgwqAgwqAgOCDCoCDCoDYxODIgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoDEyIMKgIDE2MjA1IMKgIDAuMDE8 L2Rpdj48ZGl2PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgMiDCoCDCoDQ5MjIgwqAgMC4w MDwvZGl2PjxkaXY+wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDCoCDCoCAxIMKgIMKgNjQzMiDCoCAw LjAwPC9kaXY+PGRpdj7CoCDCoDgxOTIgwqAgMTYzODMgwqAgwqAgwqAgMSDCoCAxNTA3MCDCoCAw LjAxPC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0IMKgIMKgIMKgIDEgMTYyMjg4MjIyIMKg OTkuOTU8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxNTE5PC9kaXY+PGRpdj50b3RhbCBm cmVlIGJsb2NrcyAxNjIzNjI3OTk8L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSAx MDY4ODg8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAyODo8L2Rpdj48ZGl2PsKgIMKg ZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKg IMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDQ2IMKgIMKgIMKgNDYgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgODQgwqAgwqAgMjA3IMKgIDAuMDA8L2Rpdj48 ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxODEgwqAgwqAgOTkxIMKgIDAuMDA8L2Rp dj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAzMTggwqAgwqAzNjY1IMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA2MDYgwqAgMTQxMzkgwqAgMC4w MTwvZGl2PjxkaXY+wqAgwqAgwqA2NCDCoCDCoCAxMjcgwqAgwqAgwqAgMiDCoCDCoCAxMzAgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgMTI4IMKgIMKgIDI1NSDCoCDCoCDCoCA0IMKgIMKgIDc3NiDC oCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAyNTYgwqAgwqAgNTExIMKgIMKgIMKgIDUgwqAgwqAyMjAy IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDUxMiDCoCDCoDEwMjMgwqAgwqAgwqAgOCDCoCDCoDU3 ODkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoCA2IMKgIMKg OTYxNyDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKgIDEgwqAg wqAyMjcyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKgIMKgIDEgwqAg MTg3ODQgwqAgMC4wMTwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE2 Mjg5Njk5MiDCoDk5Ljk2PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVudHMgMTI2MzwvZGl2Pjxk aXY+dG90YWwgZnJlZSBibG9ja3MgMTYyOTU1NjEwPC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0 ZW50IHNpemUgMTI5MDIzPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4qKiogQUcgMjk6PC9kaXY+ PGRpdj7CoCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRzIMKgYmxvY2tzIMKgIMKgcGN0PC9kaXY+ PGRpdj7CoCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAgwqA3MiDCoCDCoCDCoDcyIMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDCoCDCoCAxMTkgwqAgwqAgMzAxIMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAyNDEgwqAgwqAxMzExIMKg IDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCA0MzQgwqAgwqA1MDE2 IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA5MDUgwqAgMjEy MDkgwqAgMC4wMjwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKgIDIgwqAg wqAgwqA2OSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDUg wqAgwqAxMDA3IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAg OSDCoCDCoDM1MjkgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDC oDE1IMKgIDExMDI0IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAg wqAxMiDCoCAxOTg4OSDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKg IMKgIDQgwqAgMTIyMjQgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDC oCDCoCAxIMKgIMKgNzIzMiDCoCAwLjAxPC9kaXY+PGRpdj7CoCAxNjM4NCDCoCAzMjc2NyDCoCDC oCDCoCAyIMKgIDU4NDgxIMKgIDAuMDQ8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAg wqAgwqAgMSAxMzcxMDAxMTAgwqA5OS45MDwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE4 MjI8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tzIDEzNzI0MTQ3NDwvZGl2PjxkaXY+YXZlcmFn ZSBmcmVlIGV4dGVudCBzaXplIDc1MzI0LjY8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBB RyAzMDo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAg wqBwY3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDU4IMKgIMKgIMKg NTggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgODQgwqAg wqAgMjE1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxODUg wqAgwqAxMDAxIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAz NjIgwqAgwqA0MTk2IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDC oCA3NzggwqAgMTg0NjMgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKg IMKgIMKgIDIgwqAgwqAgwqA2NCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEy NyDCoCDCoCDCoCAzIMKgIMKgIDI4OCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAg MjU1IMKgIMKgIMKgIDUgwqAgwqAgODY0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDC oCA1MTEgwqAgwqAgwqAgOCDCoCDCoDI2MzEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKg IMKgMTAyMyDCoCDCoCDCoCA4IMKgIMKgNTg5NCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoDEwMjQg wqAgwqAyMDQ3IMKgIMKgIMKgIDggwqAgMTEwNzIgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4 IMKgIMKgNDA5NSDCoCDCoCDCoCA0IMKgIDExMzYwIMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgNDA5 NiDCoCDCoDgxOTEgwqAgwqAgwqAgMiDCoCDCoDg0ODAgwqAgMC4wMTwvZGl2PjxkaXY+wqAgMzI3 NjggwqAgNjU1MzUgwqAgwqAgwqAgMSDCoCA1NDAzMyDCoCAwLjA0PC9kaXY+PGRpdj4xMzQyMTc3 MjggMjY4NDM1NDI0IMKgIMKgIMKgIDEgMTUzODYzNTk1IMKgOTkuOTI8L2Rpdj48ZGl2PnRvdGFs IGZyZWUgZXh0ZW50cyAxNTA5PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNTM5ODIyMTQ8 L2Rpdj48ZGl2PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSAxMDIwNDM8L2Rpdj48ZGl2Pjxicj48 L2Rpdj48ZGl2PioqKiBBRyAzMTo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVu dHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDC oCDCoDY1IMKgIMKgIMKgNjUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAz IMKgIMKgIDEwOCDCoCDCoCAyNjQgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDC oCA3IMKgIMKgIDIyMyDCoCDCoDEyMTMgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDC oCDCoDE1IMKgIMKgIDQ2MiDCoCDCoDUyOTIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDC oCDCoCDCoDMxIMKgIMKgIDk1NyDCoCAyMjQ5OSDCoCAwLjAyPC9kaXY+PGRpdj7CoCDCoCDCoDMy IMKgIMKgIMKgNjMgwqAgwqAgwqAgMSDCoCDCoCDCoDMyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKg IMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDQgwqAgwqAgMzcxIMKgIDAuMDA8L2Rpdj48ZGl2PsKg IMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgNiDCoCDCoDExNjAgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoDEzIMKgIMKgNDUxOSDCoCAwLjAwPC9kaXY+PGRp dj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgMTYgwqAgMTE2MTcgwqAgMC4wMTwvZGl2Pjxk aXY+wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoDEyIMKgIDE3NDgzIMKgIDAuMDI8L2Rpdj48 ZGl2PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgNCDCoCAxMTgzNSDCoCAwLjAxPC9kaXY+ PGRpdj7CoCDCoDgxOTIgwqAgMTYzODMgwqAgwqAgwqAgMiDCoCAyMTIyNyDCoCAwLjAyPC9kaXY+ PGRpdj42NzEwODg2NCAxMzQyMTc3MjcgwqAgwqAgwqAgMSAxMDY3MTA2NDAgwqA5OS45MTwvZGl2 PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE4NzQ8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tz IDEwNjgwODIxNzwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXplIDU2OTk0Ljg8L2Rp dj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAzMjo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDC oCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAg wqAgwqAgMSDCoCDCoCDCoDYxIMKgIMKgIMKgNjEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAg MiDCoCDCoCDCoCAzIMKgIMKgIDEyNiDCoCDCoCAzMTcgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg wqAgNCDCoCDCoCDCoCA3IMKgIMKgIDIzMiDCoCDCoDEyNjMgwqAgMC4wMDwvZGl2PjxkaXY+wqAg wqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDQwNiDCoCDCoDQ2OTEgwqAgMC4wMDwvZGl2PjxkaXY+ wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDgxMCDCoCAxOTEwOCDCoCAwLjAxPC9kaXY+PGRp dj7CoCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgNCDCoCDCoCAxNTEgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqA2NCDCoCDCoCAxMjcgwqAgwqAgwqAgNCDCoCDCoCAzNTUgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgMTI4IMKgIMKgIDI1NSDCoCDCoCDCoCAzIMKgIMKgIDQ0MiDCoCAwLjAw PC9kaXY+PGRpdj7CoCDCoCAyNTYgwqAgwqAgNTExIMKgIMKgIMKgIDMgwqAgwqAgODg4IMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgIDUxMiDCoCDCoDEwMjMgwqAgwqAgwqAgNiDCoCDCoDUxNTIgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoDEwIMKgIDE0OTAyIMKg IDAuMDE8L2Rpdj48ZGl2PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgNCDCoCAxMTUwMiDC oCAwLjAxPC9kaXY+PGRpdj7CoCDCoDQwOTYgwqAgwqA4MTkxIMKgIMKgIMKgIDIgwqAgMTE4NjMg wqAgMC4wMTwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQzNTQyNCDCoCDCoCDCoCAxIDE0MDYzMjUy NyDCoDk5Ljk1PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVudHMgMTY3MjwvZGl2PjxkaXY+dG90 YWwgZnJlZSBibG9ja3MgMTQwNzAzMjIyPC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNp emUgODQxNTIuNjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDMzOjwvZGl2PjxkaXY+ wqAgwqBmcm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+ wqAgwqAgwqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgNTIgwqAgwqAgwqA1MiDCoCAwLjAwPC9kaXY+ PGRpdj7CoCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgMTA5IMKgIMKgIDI2OSDCoCAwLjAwPC9k aXY+PGRpdj7CoCDCoCDCoCA0IMKgIMKgIMKgIDcgwqAgwqAgMjExIMKgIMKgMTE4NSDCoCAwLjAw PC9kaXY+PGRpdj7CoCDCoCDCoCA4IMKgIMKgIMKgMTUgwqAgwqAgNDEzIMKgIMKgNDgwNCDCoCAw LjAwPC9kaXY+PGRpdj7CoCDCoCDCoDE2IMKgIMKgIMKgMzEgwqAgwqAgODMxIMKgIDE5NDEyIMKg IDAuMDE8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDIgwqAgwqAgMTg3 IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgNSDCoCDCoCA5 OTMgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA3IMKgIMKg MjYxMCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgMTYgwqAg MTIwNDAgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAxMDI0IMKgIMKgMjA0NyDCoCDCoCDCoDE0IMKg IDIyNDUyIMKgIDAuMDI8L2Rpdj48ZGl2PsKgIMKgMjA0OCDCoCDCoDQwOTUgwqAgwqAgwqAgOSDC oCAyNzA2MCDCoCAwLjAyPC9kaXY+PGRpdj7CoCDCoDQwOTYgwqAgwqA4MTkxIMKgIMKgIMKgIDIg wqAgwqA5NjAwIMKgIDAuMDE8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAg MSAxMzY5OTMxOTUgwqA5OS45MzwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE2NzI8L2Rp dj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tzIDEzNzA5Mzg1OTwvZGl2PjxkaXY+YXZlcmFnZSBmcmVl IGV4dGVudCBzaXplIDgxOTkzLjk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAzNDo8 L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8 L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDQyIMKgIMKgIMKgNDIgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIMKgNzggwqAgwqAgMTk1 IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDCoCAxNzUgwqAgwqAg OTY1IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDCoCDCoCAzOTMgwqAg wqA0NjAzIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAzMSDCoCDCoCA3MDQg wqAgMTY2NzAgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDCoDYzIMKgIMKgIMKg IDEgwqAgwqAgwqAzMiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKgIMKgIDEyNyDCoCDC oCDCoCAzIMKgIMKgIDIzMCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKg IMKgIMKgIDIgwqAgwqAgMjU2IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEg wqAgwqAgwqAgNCDCoCDCoDE2MDAgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAy MyDCoCDCoCDCoDEyIMKgIMKgODgxNiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAy MDQ3IMKgIMKgIMKgIDggwqAgMTI2NTIgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqAyMDQ4IMKgIMKg NDA5NSDCoCDCoCDCoDEyIMKgIDMzNTkzIMKgIDAuMDI8L2Rpdj48ZGl2PsKgIDMyNzY4IMKgIDY1 NTM1IMKgIMKgIMKgIDIgwqAgODM3OTUgwqAgMC4wNjwvZGl2PjxkaXY+MTM0MjE3NzI4IDI2ODQz NTQyNCDCoCDCoCDCoCAxIDE0Nzg5NjQxNyDCoDk5Ljg5PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4 dGVudHMgMTQzNzwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTQ4MDU5ODY2PC9kaXY+PGRp dj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgMTAzMDM0PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp dj4qKiogQUcgMzU6PC9kaXY+PGRpdj7CoCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRzIMKgYmxv Y2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7CoCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAgwqA2MiDC oCDCoCDCoDYyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDCoCDCoCAx MDkgwqAgwqAgMjcxIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDQgwqAgwqAgwqAgNyDCoCDC oCAyMDIgwqAgwqAxMDgzIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgIDggwqAgwqAgwqAxNSDC oCDCoCA0NDQgwqAgwqA1MDg0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgMTYgwqAgwqAgwqAz MSDCoCDCoCA4MzAgwqAgMTkzOTAgwqAgMC4wMjwvZGl2PjxkaXY+wqAgwqAgwqAzMiDCoCDCoCDC oDYzIMKgIMKgIMKgIDEgwqAgwqAgwqA0MCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoDY0IMKg IMKgIDEyNyDCoCDCoCDCoCAyIMKgIMKgIDE2MCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCAxMjgg wqAgwqAgMjU1IMKgIMKgIMKgIDggwqAgwqAxMzY0IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDI1 NiDCoCDCoCA1MTEgwqAgwqAgwqAxMyDCoCDCoDUxODggwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg NTEyIMKgIMKgMTAyMyDCoCDCoCDCoCA4IMKgIMKgNTg1NiDCoCAwLjAwPC9kaXY+PGRpdj7CoCDC oDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgMTMgwqAgMTg5NDIgwqAgMC4wMjwvZGl2PjxkaXY+wqAg wqAyMDQ4IMKgIMKgNDA5NSDCoCDCoCDCoCAzIMKgIDExMTQ1IMKgIDAuMDE8L2Rpdj48ZGl2PjY3 MTA4ODY0IDEzNDIxNzcyNyDCoCDCoCDCoCAxIDEyNDM5OTkyOSDCoDk5Ljk0PC9kaXY+PGRpdj50 b3RhbCBmcmVlIGV4dGVudHMgMTY5NjwvZGl2PjxkaXY+dG90YWwgZnJlZSBibG9ja3MgMTI0NDY4 NTE0PC9kaXY+PGRpdj5hdmVyYWdlIGZyZWUgZXh0ZW50IHNpemUgNzMzODkuNTwvZGl2PjxkaXY+ PGJyPjwvZGl2PjxkaXY+KioqIEFHIDM2OjwvZGl2PjxkaXY+wqAgwqBmcm9tIMKgIMKgIMKgdG8g ZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAgwqAgMSDCoCDCoCDCoCAx IMKgIMKgIMKgNTkgwqAgwqAgwqA1OSDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCDCoCAyIMKgIMKg IMKgIDMgwqAgwqAgwqA5NyDCoCDCoCAyNDMgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDC oCDCoCDCoCA3IMKgIMKgIDE4OCDCoCDCoDEwMTYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAg OCDCoCDCoCDCoDE1IMKgIMKgIDM3MyDCoCDCoDQzMDUgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAg wqAxNiDCoCDCoCDCoDMxIMKgIMKgIDY4MSDCoCAxNjE0MiDCoCAwLjAxPC9kaXY+PGRpdj7CoCDC oCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgMSDCoCDCoCDCoDU4IMKgIDAuMDA8L2Rpdj48ZGl2 PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDQgwqAgwqAgMzMyIMKgIDAuMDA8L2Rpdj48 ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgMSDCoCDCoCAyMTcgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCA0IMKgIMKgMTY2NCDCoCAwLjAwPC9k aXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKgIDUgwqAgwqAzOTM2IMKgIDAuMDA8 L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAgwqAxMyDCoCAyMjE3NCDCoCAwLjAx PC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKgIMKgIDMgwqAgwqA5NzkyIMKgIDAu MDE8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxNDgxNjkxNDMgwqA5 OS45NjwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE0MzA8L2Rpdj48ZGl2PnRvdGFsIGZy ZWUgYmxvY2tzIDE0ODIyOTA4MTwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBzaXplIDEw MzY1NzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+KioqIEFHIDM3OjwvZGl2PjxkaXY+wqAgwqBm cm9tIMKgIMKgIMKgdG8gZXh0ZW50cyDCoGJsb2NrcyDCoCDCoHBjdDwvZGl2PjxkaXY+wqAgwqAg wqAgMSDCoCDCoCDCoCAxIMKgIMKgIMKgNjEgwqAgwqAgwqA2MSDCoCAwLjAwPC9kaXY+PGRpdj7C oCDCoCDCoCAyIMKgIMKgIMKgIDMgwqAgwqAgwqA4MCDCoCDCoCAxOTggwqAgMC4wMDwvZGl2Pjxk aXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE5NSDCoCDCoDEwNjcgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM0NiDCoCDCoDQwMTQgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDc4OCDCoCAxODU1MiDCoCAwLjAx PC9kaXY+PGRpdj7CoCDCoCAxMjggwqAgwqAgMjU1IMKgIMKgIMKgIDUgwqAgwqAxMDE1IMKgIDAu MDA8L2Rpdj48ZGl2PsKgIMKgIDI1NiDCoCDCoCA1MTEgwqAgwqAgwqAgMyDCoCDCoDEwODggwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgNTEyIMKgIMKgMTAyMyDCoCDCoCDCoDEyIMKgIMKgODU3NyDC oCAwLjAxPC9kaXY+PGRpdj7CoCDCoDEwMjQgwqAgwqAyMDQ3IMKgIMKgIMKgMTQgwqAgMjEyMjkg wqAgMC4wMjwvZGl2PjxkaXY+wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDCoCDCoCAxIMKgIMKgNzYw MCDCoCAwLjAxPC9kaXY+PGRpdj7CoCAzMjc2OCDCoCA2NTUzNSDCoCDCoCDCoCAxIMKgIDUzMTUy IMKgIDAuMDQ8L2Rpdj48ZGl2PjEzNDIxNzcyOCAyNjg0MzU0MjQgwqAgwqAgwqAgMSAxMzk2MTc0 NDUgwqA5OS45MjwvZGl2PjxkaXY+dG90YWwgZnJlZSBleHRlbnRzIDE1MDc8L2Rpdj48ZGl2PnRv dGFsIGZyZWUgYmxvY2tzIDEzOTczMzk5ODwvZGl2PjxkaXY+YXZlcmFnZSBmcmVlIGV4dGVudCBz aXplIDkyNzIzLjM8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAzODo8L2Rpdj48ZGl2 PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBwY3Q8L2Rpdj48ZGl2 PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDY3IMKgIMKgIMKgNjcgwqAgMC4wMDwvZGl2 PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIDEwMiDCoCDCoCAyNTQgwqAgMC4wMDwv ZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDE4NSDCoCDCoCA5OTggwqAgMC4w MDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDMwNyDCoCDCoDM1MzUgwqAg MC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDY2OSDCoCAxNTc5MSDC oCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAgwqAgMSDCoCDCoCDC oDMyIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKgIMKgIMKgIDMgwqAg wqAgMjU2IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUgwqAgwqAgwqAgMSDC oCDCoCAxOTIgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUxMSDCoCDCoCDCoCAz IMKgIMKgMTAyNCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAxMDIzIMKgIMKgIMKg IDggwqAgwqA1NjExIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDCoDIwNDcgwqAgwqAg wqAxNiDCoCAyMjgzMyDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAgwqA0MDk1IMKgIMKg IMKgIDQgwqAgMTEzOTUgwqAgMC4wMTwvZGl2PjxkaXY+wqAgwqA0MDk2IMKgIMKgODE5MSDCoCDC oCDCoCAzIMKgIDE4MzgzIMKgIDAuMDE8L2Rpdj48ZGl2PsKgIDE2Mzg0IMKgIDMyNzY3IMKgIMKg IMKgIDEgwqAgMjQ5MTYgwqAgMC4wMjwvZGl2PjxkaXY+wqAgNjU1MzYgwqAxMzEwNzEgwqAgwqAg wqAgMSDCoCA3NTI5NiDCoCAwLjA1PC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4NDM1NDI0IMKgIMKg IMKgIDEgMTU1NzE5Njc5IMKgOTkuODg8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgZXh0ZW50cyAxMzcy PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNTU5MDAyNjI8L2Rpdj48ZGl2PmF2ZXJhZ2Ug ZnJlZSBleHRlbnQgc2l6ZSAxMTM2MzA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PioqKiBBRyAz OTo8L2Rpdj48ZGl2PsKgIMKgZnJvbSDCoCDCoCDCoHRvIGV4dGVudHMgwqBibG9ja3MgwqAgwqBw Y3Q8L2Rpdj48ZGl2PsKgIMKgIMKgIDEgwqAgwqAgwqAgMSDCoCDCoCDCoDU2IMKgIMKgIMKgNTYg wqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgMiDCoCDCoCDCoCAzIMKgIMKgIDEwMCDCoCDCoCAy NTEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3IMKgIMKgIDIwMiDCoCDC oDExMDEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAgOCDCoCDCoCDCoDE1IMKgIMKgIDM2MyDC oCDCoDQxODYgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgwqAxNiDCoCDCoCDCoDMxIMKgIMKgIDgx NCDCoCAxOTA1MyDCoCAwLjAxPC9kaXY+PGRpdj7CoCDCoCDCoDMyIMKgIMKgIMKgNjMgwqAgwqAg wqAgMSDCoCDCoCDCoDQzIMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIMKgNjQgwqAgwqAgMTI3IMKg IMKgIMKgIDYgwqAgwqAgNDI2IMKgIDAuMDA8L2Rpdj48ZGl2PsKgIMKgIDEyOCDCoCDCoCAyNTUg wqAgwqAgwqAgOCDCoCDCoDEzODEgwqAgMC4wMDwvZGl2PjxkaXY+wqAgwqAgMjU2IMKgIMKgIDUx MSDCoCDCoCDCoDEwIMKgIMKgMzM0NCDCoCAwLjAwPC9kaXY+PGRpdj7CoCDCoCA1MTIgwqAgwqAx MDIzIMKgIMKgIMKgMTEgwqAgwqA4NDc1IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIMKgMTAyNCDCoCDC oDIwNDcgwqAgwqAgwqAxNyDCoCAyNjEwOCDCoCAwLjAyPC9kaXY+PGRpdj7CoCDCoDIwNDggwqAg wqA0MDk1IMKgIMKgIMKgIDMgwqAgwqA5ODI0IMKgIDAuMDE8L2Rpdj48ZGl2PsKgIDE2Mzg0IMKg IDMyNzY3IMKgIMKgIMKgIDIgwqAgMzg3NDIgwqAgMC4wMzwvZGl2PjxkaXY+wqAgMzI3NjggwqAg NjU1MzUgwqAgwqAgwqAgMSDCoCA0OTQ0MCDCoCAwLjAzPC9kaXY+PGRpdj4xMzQyMTc3MjggMjY4 NDM1NDI0IMKgIMKgIMKgIDEgMTQ4NjYzNTczIMKgOTkuODk8L2Rpdj48ZGl2PnRvdGFsIGZyZWUg ZXh0ZW50cyAxNTk1PC9kaXY+PGRpdj50b3RhbCBmcmVlIGJsb2NrcyAxNDg4MjYwMDM8L2Rpdj48 ZGl2PmF2ZXJhZ2UgZnJlZSBleHRlbnQgc2l6ZSA5MzMwNy44PC9kaXY+PGRpdj48YnI+PC9kaXY+ PGRpdj4qKiogQUcgNDA6PC9kaXY+PGRpdj7CoCDCoGZyb20gwqAgwqAgwqB0byBleHRlbnRzIMKg YmxvY2tzIMKgIMKgcGN0PC9kaXY+PGRpdj7CoCDCoCDCoCAxIMKgIMKgIMKgIDEgwqAgwqAgwqAg OSDCoCDCoCDCoCA5IMKgMzEuMDM8L2Rpdj48ZGl2PsKgIMKgIMKgIDIgwqAgwqAgwqAgMyDCoCDC oCDCoCA2IMKgIMKgIMKgMTYgwqA1NS4xNzwvZGl2PjxkaXY+wqAgwqAgwqAgNCDCoCDCoCDCoCA3 IMKgIMKgIMKgIDEgwqAgwqAgwqAgNCDCoDEzLjc5PC9kaXY+PGRpdj50b3RhbCBmcmVlIGV4dGVu dHMgMTY8L2Rpdj48ZGl2PnRvdGFsIGZyZWUgYmxvY2tzIDI5PC9kaXY+PGRpdj5hdmVyYWdlIGZy ZWUgZXh0ZW50IHNpemUgMS44MTI1PC9kaXY+PC9kaXY+PC9kaXY+DQo= --001a113d74ead6d423051be158dd-- From david@fromorbit.com Mon Jul 27 18:22:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B3E317FC7 for ; Mon, 27 Jul 2015 18:22:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 832188F8035 for ; Mon, 27 Jul 2015 16:22:30 -0700 (PDT) X-ASG-Debug-ID: 1438039346-04bdf00230da7b0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id drkhRAL5VAyTUUiG for ; Mon, 27 Jul 2015 16:22:27 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2ATCgBEvLZVPG0mLHlbgxVUaYZRokoBAQEBAQEGlG6FewQCAoFFTQEBAQEBAQcBAQEBQAE/hCMBAQEDATocIwULCAMOCgklDwUlAwcaE4gmB9A5AQEIAgEfGYYGhC2BAoQbIUsHhCwFlGmEeIdHgUdGg1eDEoxQg2KCNByBZSwxgkwBAQE Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail04.adl6.internode.on.net with ESMTP; 28 Jul 2015 08:52:26 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZJriz-0000lY-Fo; Tue, 28 Jul 2015 09:22:25 +1000 Date: Tue, 28 Jul 2015 09:22:25 +1000 From: Dave Chinner To: Hikori Chandelure Cc: xfs@oss.sgi.com Subject: Re: Slow find performance Message-ID: <20150727232225.GK3902@dastard> X-ASG-Orig-Subj: Re: Slow find performance References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1438039347 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21137 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jul 27, 2015 at 04:39:15PM -0400, Hikori Chandelure wrote: > Hello, > > I've been experiencing slow find performance on XFS ever since I started > specifying su/sw parameters at mkfs.xfs. This happens even on a newly > created XFS filesystem, after all of the data has been restored from > another backup server via rsync. > > The files on this server are almost entirely large, 50MB to 20GB, with an > average of around 350MB per file. There are about 70,000 files and about > 4,600 directories. > > When running the find command "find /array", it will list files and > directories very slowly, all while using very little I/O or CPU. Keep in > mind, this particular server is entirely idle, no other activity is going > on. What does "very slow" mean? In comparison to "fast"? Can you please provide numbers to go along with your observations? FYI. that find has to read about 75000 inodes, and with 20 files to a directory, a single block IO per directory is required, too. If all the inodes are densely packed, then that find requires around (75000/32 + 5000) ~= 7500 IOs to complete. Find is single threaded, and there's no readahead to speak of because the directories are so small, which means find will essentially be synchronous and bound by the average seek time of each IO. > # system info > CentOS 6.6 running kernel 3.2.69 from kernel.org / xfsprogs 3.2.3 compiled > from source > Intel Xeon E3-1220 > 32GB DDR3 1333MHz ECC > 24x 2TB 7.2k HGST Ultrastars I'd assume a 8-10ms average seek time on these drives. Hence if we are taking an average seek per IO, then the find should take somewhere around 7500 * 10ms = 75s. > Areca 1882ix-24 w/ 1GB cache and BBU And it's a hardware raid array, which makes IO performance unpredictable. I'm betting that the different inode/directory block allocation pattern that XFs is using when sunit/swidth is set is affecting the cache hit rate in the controller, and so the difference is the average IO time of the two workloads is very difference. If this is the case, then I'd expect the average IO time is going to be sub-1ms for the unaligned case and so anything up to 10x faster than the aligned case. 'iostat -d -m -x 5' will tell you what the average IO times are. FWIW, this is why actually posting numbers rather than saying "it is slow" is important. Numbers will tell me if I have a viable hypothesis. > # xfs_db -r -c freesp /dev/sda > from to extents blocks pct > 1 1 2205 2205 0.00 > 2 3 4135 10334 0.00 > 4 7 8049 44059 0.00 > 8 15 15579 179253 0.00 > 16 31 31701 744701 0.01 > 32 63 46 1758 0.00 Those numbers are indicative - there lots of small free space chunks between 64k and 128k in size, which confirms my suspicions that this is probably due to the way inode allocation works on sunit/switdh enabled filesystems. XFS lays out inodes like this when sunit/swidth are set: it sunit aligns the clusters if it can't allocation the next inode chunk adjacent to the previous one. Hence with small directories, the on-disk layout is going to look something like: su su su su su su su su +-------+-------+-------+-------+-------+-------+-------+ IDDDFFDIDDFFFFDIDDFFFFDIDDFFFFDIDDFFFFDIDDFFFFDIDDFFFFDI.... Where I = a 64 inode chunk, D is a directory block, F is free space. I'd be expecting a sunit to contain 16k of inodes (1 chunk), 3-4 directory blocks (12-16k), and the rest being free space (roughly 96k). The above numbers show the 16-31 block bucket has an average size of ~24 blocks, which is 92k. i.e. the peak is right where I'd expect it to be. Some of these will be from the tail of data extents, but it's still instructive. This occurs because directory allocations are interleaved with inode allocation, and with an average of 20 files per directory there are going to be ~3 directory blocks per inode chunk (depending on filename length). So we allocate an inode chunk, then as we create more files, a directory block is allocated as close to the parent inode as possible before all the free inodes in the chunk are consumed and hence the next inode chunk allocation gets stripe unit aligned. So you can see that the allocation pattern is less than ideal in this "lots of small directories" case. When sunit is not set, inode allocation just takes the next nearest free space like so: su su su su su su su su +-------+-------+-------+-------+-------+-------+-------+ IDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDDIDDD.... Which means that there are no backwards seeks to read directories, and the stripe cache in the RAID hardware is likely to be hit much more often than the sunit/swidth aligned case. I know, you are now asking "why does XFS do this when sunit/swidth" are set? It's because when you have large directories, the allocation pattern as a result of the sunit/swidth alignment of inodes ends up looking like: su su su su su su su su +-------+-------+-------+-------+-------+-------+-------+ IDDDDDDIIIDDDDDDDDDDDDDIIIIIDDDDDDDDDDDIIIIIDDDDDDDDDDDI... and so we end up with much contiguous runs of blocks alternating between directory data and inode chunks. This means performance of large directories is much better when sunit/swidth is set because readdir will hit sequential blocks on disk (and so the readahead will be very effective) and the followup stat() of each inode will also then hit sequential blocks on disk. If sunit/swidth are not set, then the large directory allocation pattern is unchanged from the above small directory case, and so readdir has to seek regularly, as does the followup stat() calls to read inodes. It requires a lot more IO, readahead is less effective, and so performance is typically a lot worse. i.e. the sunit/swidth inode allocation optimisations are really what makes XFS directories scale effectively to really large sizes. IOWs, if readdir/find performance is really critical to your workload that has small directories, then turn off sunit/swidth. If that traversal behaviour is not a critical part of your production workload (i.e it's just something you observed), then you are probably best to ignore it as sunit/swidth will help optimise the layout and performance of your large file IO. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jul 27 19:42:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.7 required=5.0 tests=FAKE_REPLY_C autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5B26A7FCA for ; Mon, 27 Jul 2015 19:42:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id E74BEAC004 for ; Mon, 27 Jul 2015 17:42:28 -0700 (PDT) X-ASG-Debug-ID: 1438044145-04bdf00231dbcf0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id yqphACUiEB7JKRYJ for ; Mon, 27 Jul 2015 17:42:26 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2B2CgAtz7ZVPG0mLHlbgxWBPYZRoksBAQEBAQEGmmkCAgEBAoFFTQEBAQEBAQcBAQEBQAE/hCMBAQEDAScTHCMFEwMOCgk0BSUDBxoTiCYH0EMBAQEHAgEfGYYGhS+FBweDGIEUBYcUhliDbYMQjD+JZoRTim+BCoEqHIFlLDGBBQSBQwEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail04.adl6.internode.on.net with ESMTP; 28 Jul 2015 10:10:11 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZJswD-0000yp-KL; Tue, 28 Jul 2015 10:40:09 +1000 Date: Tue, 28 Jul 2015 10:40:09 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Message-ID: <20150728004009.GB24249@dastard> X-ASG-Orig-Subj: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437682410-51778-3-git-send-email-bfoster@redhat.com> <1437682410-51778-2-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1438044145 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21140 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [ reply to both patches in one reply, because it's related. ] On Thu, Jul 23, 2015 at 04:13:29PM -0400, Brian Foster wrote: > Some callers need to make error handling decisions based on whether the > current transaction successfully committed or not. Rename > xfs_trans_roll(), add a new parameter and provide a wrapper to preserve > existing callers. > > Signed-off-by: Brian Foster > --- > fs/xfs/xfs_trans.c | 15 +++++++++++++-- > fs/xfs/xfs_trans.h | 1 + > 2 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > index 0582a27..a0ab1da 100644 > --- a/fs/xfs/xfs_trans.c > +++ b/fs/xfs/xfs_trans.c > @@ -1019,9 +1019,10 @@ xfs_trans_cancel( > * chunk we've been working on and get a new transaction to continue. > */ > int > -xfs_trans_roll( > +__xfs_trans_roll( > struct xfs_trans **tpp, > - struct xfs_inode *dp) > + struct xfs_inode *dp, > + int *committed) > { > struct xfs_trans *trans; > struct xfs_trans_res tres; > @@ -1052,6 +1053,7 @@ xfs_trans_roll( > if (error) > return error; So here we return committed = 0, error != 0. > > + *committed = 1; > trans = *tpp; And from here on in we return committed = 1 regardless of the error. So looking at the next patch in xfs_bmap_finish(): > free->xbfi_blockcount); > > - error = xfs_trans_roll(tp, NULL); > - *committed = 1; > + error = __xfs_trans_roll(tp, NULL, committed); > + > /* > - * We have a new transaction, so we should return committed=1, > - * even though we're returning an error. > + * We have a new transaction, so we should return committed=1, even > + * though we're returning an error. If an error was returned after the > + * original transaction was committed, defer the error handling until > + * the EFD is logged. We do this because a committed EFI requires an EFD > + * transaction to be processed to ensure the EFI is released. > */ > - if (error) > + if (error && *committed == 0) { > + *committed = 1; > return error; > + } So if we failed to commit the EFI, we say we did and then return. Why do we need to do that? /me goes an looks at all the callers. Hmm - only xfs_itruncate_extents() relies on that behaviour, but it could just as easily do an inode join on error, because on success the inode has already been joined to the new transaction by xfs_trans_roll(). Looking further, we have quite a bit of inconsistency in the error handling of xfs_bmap_finish() - some callers issue a xfs_bmap_cancel() in the error path, and some don't. failing to cancel the freelist on error looks to me like a memory leak, because we don't free the extents from the free list until the EFD for the extent has been logged. If we error out earlier, we still have items on the free list that haven't been processed. So it looks to me like we need fixes there. Further, it appears to me that there is really one xfs_bmap_finish() caller that requires the committed flag: xfs_qm_dqalloc(). All the others either use it for an assert or joining the inode to the transaction when committed = 1, which xfs_trans_roll() will have already done if we return committed = 1.... So xfs_qm_dqalloc(), on error, simply cancels the freelist and returns the error - it ignores the committed flag. So the committed flag is used to determine how to handle the dquot buffer: xfs_trans_bhold(tp, bp); if ((error = xfs_bmap_finish(tpp, &flist, &committed))) { goto error1; } if (committed) { tp = *tpp; xfs_trans_bjoin(tp, bp); } else { xfs_trans_bhold_release(tp, bp); } Now, xfs_trans_bhold() simply sets the BLI_HOLD flag on the buffer, and transaction commit clears it. That means we could call it unconditionally, and all we have to do is remove an assert(BLI_HOLD) from xfs_trans_bhold_release() to enable that. Given this is the only caller of xfs_trans_bhold_release(), I don't see a problem with doing that. Nor is there a problem with multiple joins of an object to a transaction, so we could simply make this: xfs_trans_bhold(tp, bp); error = xfs_bmap_finish(tpp, &flist, &committed); if (error) goto error1; tp = *tpp; xfs_trans_bjoin(tp, bp); xfs_trans_bhold_release(tp, bp); And the committed flag is not necessary. With this, we can hide everything to do with error on commit vs error after commit inside xfs_bmap_finish()... > efd = xfs_trans_get_efd(*tp, efi, flist->xbf_count); > for (free = flist->xbf_first; free != NULL; free = next) { > next = free->xbfi_next; > - if ((error = xfs_free_extent(*tp, free->xbfi_startblock, > - free->xbfi_blockcount))) { > + > + /* > + * Free the extent if the above trans roll hasn't failed and log > + * the EFD before handling errors from either call to ensure the > + * EFI reference is accounted for in the tp. Otherwise, the EFI > + * is never released on abort and pins the AIL indefinitely. > + */ > + if (!error) > + error = xfs_free_extent(*tp, free->xbfi_startblock, > + free->xbfi_blockcount); > + xfs_trans_log_efd_extent(*tp, efd, free->xbfi_startblock, > + free->xbfi_blockcount); > + if (error) { > /* > * The bmap free list will be cleaned up at a > * higher level. The EFI will be canceled when > @@ -118,11 +134,10 @@ xfs_bmap_finish( > SHUTDOWN_META_IO_ERROR); > return error; > } > - xfs_trans_log_efd_extent(*tp, efd, free->xbfi_startblock, > - free->xbfi_blockcount); > xfs_bmap_del_free(flist, NULL, free); > } > - return 0; > + > + return error; This loop doesn't obviously do the right thing now. It will log the first extent into the EFD and then trigger a shutdown and return. The extent count in the EFD may not match the extent count on the EFI, so releasing the EFD at this point may not release all the extents in the EFI and hence not release the EFI. I think I'd prefer to see a xfs_trans_cancel_efi() call to handle this error path rather than having to go through the efd to release the reference on the EFI. i.e. error = __xfs_trans_roll(tp, NULL, &committed); if (error) { if (committed) { if (!XFS_FORCED_SHUTDOWN(mp)) xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); xfs_efi_cancel(tp, efi); } return error; } /* * Cancel a committed EFI after triggering a shutdown. We need to do * this so that the committed EFI is removed from the AIL and freed, * otherwise unmount will hang due to a non-empty AIL. */ xfs_efi_cancel() { ASSERT(XFS_FORCED_SHUTDOWN(mp)); xfs_efi_release(efi, efi->nextents); } Doing this means there's less complexity on the EFD abort side of things, as we don't have to now handle this failure case via transaction completion callback interface. Hmmm - something I just noticed: if we only have one EFD per EFI, why do we do we have that layer of extent counting before dropping real references? > xfs_efd_item_unlock( > struct xfs_log_item *lip) > { > - if (lip->li_flags & XFS_LI_ABORTED) > - xfs_efd_item_free(EFD_ITEM(lip)); > + struct xfs_efd_log_item *efdp = EFD_ITEM(lip); > + > + if (lip->li_flags & XFS_LI_ABORTED) { > + xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); > + xfs_efd_item_free(efdp); > + } > } i.e. we always call xfs_efi_release() with efi_nextents or efd_nextents, which are always the same, and so we never partially complete an EFI. Should we just kill that layer, as it does tend to complicate the EFI release code? Cheers, Dave. -- Dave Chinner david@fromorbit.com From schmorp@schmorp.de Tue Jul 28 01:33:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D48447F7D for ; Tue, 28 Jul 2015 01:33:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A4F38304043 for ; Mon, 27 Jul 2015 23:33:41 -0700 (PDT) X-ASG-Debug-ID: 1438065214-04cbb06a70139c70001-NocioJ Received: from mail.nethype.de (mail.nethype.de [5.9.56.24]) by cuda.sgi.com with ESMTP id GVHVJo8wUos2hWzh (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 27 Jul 2015 23:33:35 -0700 (PDT) X-Barracuda-Envelope-From: schmorp@schmorp.de X-Barracuda-Apparent-Source-IP: 5.9.56.24 Received: from [10.0.0.5] (helo=doom.schmorp.de) by mail.nethype.de with esmtp (Exim 4.84) (envelope-from ) id 1ZJySD-0001Ul-NB for xfs@oss.sgi.com; Tue, 28 Jul 2015 06:33:33 +0000 Received: from [10.0.0.1] (helo=cerebro.laendle) by doom.schmorp.de with esmtp (Exim 4.84) (envelope-from ) id 1ZJySD-0002Ze-Ib for xfs@oss.sgi.com; Tue, 28 Jul 2015 06:33:33 +0000 Received: from root by cerebro.laendle with local (Exim 4.84) (envelope-from ) id 1ZJySD-0000ez-I9 for xfs@oss.sgi.com; Tue, 28 Jul 2015 08:33:33 +0200 Date: Tue, 28 Jul 2015 08:33:33 +0200 From: Marc Lehmann To: xfs@oss.sgi.com Subject: FYI: questionable xfsdump code Message-ID: <20150728063246.GA2510@schmorp.de> X-ASG-Orig-Subj: FYI: questionable xfsdump code MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline OpenPGP: id=904ad2f81fb16978e7536f726dea2ba30bc39eb6; url=http://pgp.schmorp.de/schmorp-pgpkey.txt; preference=signencrypt X-Barracuda-Connect: mail.nethype.de[5.9.56.24] X-Barracuda-Start-Time: 1438065214 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21146 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi! While causally browsing xfsdump code,I found this, in common/getdents.c:getdents_wrap (in xfsdump off64_t last_offset = -1; ... while ((char *)kdp < kbuf + retval) { ... if ((sizeof(dp->d_ino) != sizeof(kdp->d_ino)) || (sizeof(dp->d_off) != sizeof(kdp->d_off))) { /* Overflow. If there was at least one entry before this one, return them without error, otherwise signal overflow. */ if (last_offset != -1) { lseek64(fd, last_offset, SEEK_SET); return (char *)dp - buf; } errno = EOVERFLOW; return -1; } last_offset = d_off; ... } While not necessarily a bug, this comment is very confused - there is no way to reach the code inside the if with last_offset != -1, as the if condition is a compiletime constant. This might be harmless dead code from some refactorisation gone wrong, or indicative of some bug due to some logic error. In any case, I just wanted to bring it to your attention. And as a side note, memcpy would be more efficient here, especially as it is called very often, (and especially so on irix :-): memmove(dp->d_name, kdp->d_name, old_reclen - offsetof(struct kernel_dirent64, d_name)); -- The choice of a Deliantra, the free code+content MORPG -----==- _GNU_ http://www.deliantra.net ----==-- _ generation ---==---(_)__ __ ____ __ Marc Lehmann --==---/ / _ \/ // /\ \/ / schmorp@schmorp.de -=====/_/_//_/\_,_/ /_/\_\ From returns.14.7003996@smtpgm.com Tue Jul 28 02:29:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 655D57FF1 for ; Tue, 28 Jul 2015 02:29:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id CC604AC005 for ; Tue, 28 Jul 2015 00:29:40 -0700 (PDT) X-ASG-Debug-ID: 1438068575-04cbb06a7413d570001-NocioJ Received: from mailer195.gate82.rs.smtp.com (mailer195.gate82.rs.smtp.com [74.91.82.195]) by cuda.sgi.com with ESMTP id QoORGSF7gMOPTxSq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 28 Jul 2015 00:29:35 -0700 (PDT) X-Barracuda-Envelope-From: returns.14.7003996@smtpgm.com X-Barracuda-Apparent-Source-IP: 74.91.82.195 X-MSFBL: eGZzQG9zcy5zZ2kuY29tQDc0XzkxXzgyXzE5NUBidXNodmVsZHRzYWZhcmlfZGVk aWNhdGVkX3Bvb2xA DKIM-Signature: v=1; a=rsa-sha256; d=smtp.com; s=smtpcomcustomers; c=relaxed/simple; q=dns/txt; i=@smtp.com; t=1438068571; h=From:Subject:To:Date:MIME-Version:Content-Type; bh=WxjBeNpe7pLkHl2ruPquYboOeE3+41tDr93d8nxquX8=; b=k6PCAMjidtaKUYHQoon/H4gbDmNon43ja2NgQFDUj5Qiqe3474mbBF8HWOzNlKAg uclJg0OUkGkM53z3MNaVES0HIc41rMAJUlTDQtRlbB9Jyd4927dGOfTuCCbULwF6 hNyKgXXd/6MhWkDEvWFXnkfzvH6z9mgbAGn7pZuM1pE=; Received: from [23.96.192.49] ([23.96.192.49:58987] helo=RD000D3A60D83A) by rs-ord-gm-mta05-3.smtp.com (envelope-from ) (ecelerity 3.6.7.46655 r(Core:3.6.7.0)) with ESMTPA id 4B/60-04976-B5F27B55; Tue, 28 Jul 2015 07:29:31 +0000 Reply-To: "Busveldt Safaris" Message-ID: <4B.60.04976.B5F27B55@rs-ord-gm-mta05-3.smtp.com> From: "Busveldt Safaris" To: Subject: Re: Winter Bushveld Breaks Date: Tue, 28 Jul 2015 07:29:31 GMT X-ASG-Orig-Subj: Re: Winter Bushveld Breaks X-Mailer: OpenSmtp.net Precedence: bulk List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 X-SMTPCOM-Spam-Policy: SMTP.com is a paid relay service. We do not tolerate UCE of any kind. Please report it ASAP to abuse@smtp.com X-SMTPCOM-Tracking-Number: 83827126-6c14-46af-ba19-ea9eb5bb528d X-SMTPCOM-Sender-ID: 7003996 Feedback-ID: 7003996:SMTPCOM X-Barracuda-Connect: mailer195.gate82.rs.smtp.com[74.91.82.195] X-Barracuda-Start-Time: 1438068575 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21147 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h bC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhl YWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg Y2hhcnNldD11dGYtOCIgLz4NCjx0aXRsZT5ad2FoaWxpIC0gT2N0b2JlciAyMDE0IEhhbGYgUHJp Y2UgU2FsZTwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnJlZHAxIHsJZm9udC1m YW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIiwgIkx1Y2lkYSBHcmFuZGUiLCBzYW5zLXNlcmlm Ow0KCWZvbnQtc2l6ZTogMTRweDsNCglmb250LXdlaWdodDogDQoJY29sb3I6ICNGRkY7CQkJY29s b3I6ICNGMDA7DQp9DQoucmVkcDEgewlmb250LWZhbWlseTogIkx1Y2lkYSBTYW5zIFVuaWNvZGUi LCAiTHVjaWRhIEdyYW5kZSIsIHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOiAxNHB4Ow0KCWZvbnQt d2VpZ2h0OiANCgljb2xvcjogI0ZGRjsJCQljb2xvcjogI0YwMDsNCn0NCi5yZWRwMSB7CWZvbnQt ZmFtaWx5OiAiTHVjaWRhIFNhbnMgVW5pY29kZSIsICJMdWNpZGEgR3JhbmRlIiwgc2Fucy1zZXJp ZjsNCglmb250LXNpemU6IDE0cHg7DQoJZm9udC13ZWlnaHQ6IA0KCWNvbG9yOiAjRkZGOwkJCWNv bG9yOiAjRjAwOw0KfQ0KPC9zdHlsZT4NCjwvaGVhZD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ DQpoMSB7DQoJZm9udC1mYW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIiwgIkx1Y2lkYSBHcmFu ZGUiLCBzYW5zLXNlcmlmOw0KCWZvbnQtc2l6ZTogMzBweDsNCglmb250LXdlaWdodDogYm9sZDsN Cgljb2xvcjogI0ZGRjsNCg0KfQ0KYm9keXsNCgliYWNrZ3JvdW5kLWNvbG9yOiNmZmY7DQoJYmFj a2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXkNCn0NCmgyIHsNCglmb250LWZhbWlseTogIkx1Y2lkYSBT YW5zIFVuaWNvZGUiLCAiTHVjaWRhIEdyYW5kZSIsIHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOiAx OHB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOyANCgljb2xvcjogI0ZGRjsNCn0NCnAgew0KCWZvbnQt ZmFtaWx5OiAiTHVjaWRhIFNhbnMgVW5pY29kZSIsICJMdWNpZGEgR3JhbmRlIiwgc2Fucy1zZXJp ZjsNCglmb250LXNpemU6IDE2cHg7DQoJZm9udC13ZWlnaHQ6IA0KCWNvbG9yOiAjRkZGOw0KfQ0K DQoucmVkcCB7DQoJZm9udC1mYW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIiwgIkx1Y2lkYSBH cmFuZGUiLCBzYW5zLXNlcmlmOw0KCWZvbnQtc2l6ZTogMTRweDsNCglmb250LXdlaWdodDogDQoJ Y29sb3I6ICNGRkY7CQkJY29sb3I6ICNGMDA7DQp9DQphOmxpbmsgew0KCWNvbG9yOiAjRkZGOw0K fQ0KYTp2aXNpdGVkIHsNCgljb2xvcjogI0ZGRjsNCn0NCmE6aG92ZXIgew0KCWNvbG9yOiAjQzYw Ow0KfQ0KPC9zdHlsZT4NCjxib2R5PjxpbWcgYWx0PScnIHNyYz0naHR0cDovL2lzLmRpZXoucGVu YW1haWwuY29tLy9zaXRlL3Mvby5hc3B4P0hpdElEPTE0MzgwNjg0NTI4NDAmRW1JRD0xMzE0OTg2 MiZTdElEPTQ3ODkzJlNJRD0xNCZOSUQ9Njg5NjE1JkVtYWlsPXhmc0Bvc3Muc2dpLmNvbScgYm9y ZGVyPScwJyB3aWR0aD0nMScgaGVpZ2h0PScxJz48aW1nIGFsdD0nJyBzcmM9J2h0dHA6Ly9pcy5k aWV6LnBlbmFtYWlsLmNvbS8vUldDb2RlL2NsaWNrLmFzcD9IaXRJRD0xNDM4MDY4NDUyODQwJkVt SUQ9MTMxNDk4NjImU3RJRD00Nzg5MyZTSUQ9MTQmTklEPTY4OTYxNSZFbWFpbD14ZnNAb3NzLnNn aS5jb20nIGJvcmRlcj0nMCcgd2lkdGg9JzEnIGhlaWdodD0nMSc+PHN0eWxlICB0eXBlPSJ0ZXh0 L2NzcyI+Ym9keSB7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW4tdG9wOiAwcHggIWltcG9y dGFudDsgbWFyZ2luLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7IHBhZGRpbmc6MHB4ICFpbXBvcnRh bnQ7IG1zby1tYXJnaW4tdG9wLWFsdDowcHggIWltcG9ydGFudDsgbXNvLW1hcmdpbi1ib3R0b20t YWx0OjBweCAhaW1wb3J0YW50OyBtc28tcGFkZGluZy1hbHQ6IDBweCAwcHggMHB4IDBweCAhaW1w b3J0YW50O30gQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogNDgwcHgpIHsgLmZ1 bGxfd2lkdGh7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH0gfTwvc3R5bGU+DQoJPHRhYmxlIGFs aWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4N CiAgICANCiAgICAgIDx0Ym9keT48dHI+DQogICAgICAgIAk8dGQgYWxpZ249ImxlZnQiPjxpbWcg YWx0PSIiIHNyYz0iaHR0cDovL3d3dy56d2FoaWxpLmNvLnphL21haWxlcnMvaGFsZi1wcmljZS8x LnBuZyIgLz48YnIgLz48YnIgLz48L3RkPg0KICAgICAgPC90cj4NCiAgICAgIA0KICAgICAgDQog ICAJICA8dHI+DQogICAgICAgIAk8dGQgYWxpZ249ImNlbnRlciI+PGltZyBhbHQ9IiIgc3JjPSJo dHRwOi8vd3d3Lnp3YWhpbGkuY28uemEvbWFpbGVycy9oYWxmLXByaWNlLzIucG5nIiAvPjxiciAv PjxiciAvPjwvdGQ+DQogICAgICA8L3RyPg0KICAgICAgDQogICAgCQ0KICAgICAgPHRyPg0KICAg ICAgICAJPHRkIGFsaWduPSJjZW50ZXIiPjxpbWcgYWx0PSIiIHNyYz0iaHR0cDovL3d3dy56d2Fo aWxpLmNvLnphL21haWxlcnMvaGFsZi1wcmljZS8zLnBuZyIgLz48YnIgLz48YnIgLz48L3RkPg0K ICAgICAgPC90cj4NCiAgICAgIA0KICAgICAgDQogICAJICA8dHI+DQogICAgICAgIAk8dGQgYWxp Z249ImNlbnRlciI+PHA+PGltZyBhbHQ9IiIgc3JjPSJodHRwOi8vd3d3Lnp3YWhpbGkuY28uemEv bWFpbGVycy9oYWxmLXByaWNlLzQucG5nIiAvPjxiciAvPjwvcD48ZGl2PjxzcGFuIHN0eWxlPSJm b250LWZhbWlseTogQXJpYWw7IGZvbnQtc2l6ZTogMTBwdDsiPjxzdHJvbmc+RXh0ZW5kZWQgZHVl IHRvIHBvcHVsYXIgZGVtYW5kOiZuYnNwO1NwZWNpYWwgdmFsaWQgdGlsbCZuYnNwOzMxJm5ic3A7 QXVnIDIwMTUuIChFeGNsOiA3LTEwIEF1ZykmbmJzcDsmbmJzcDs8L3N0cm9uZz48L3NwYW4+PHNw YW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbDsgZm9udC1zaXplOiAxMHB0OyI+PHN0cm9uZz5N aW4gMiBuaWdodHMgc3RheSByZXF1aXJlZC4mbmJzcDs8L3N0cm9uZz48L3NwYW4+PC9kaXY+PGRp dj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsOyBmb250LXNpemU6IDEwcHQ7Ij48c3Bh biBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsOyBmb250LXNpemU6IDEwcHQ7Ij48c3Ryb25nPlRl cm1zIGFuZCBDb25kaXRpb25zIGFwcGx5IDwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kaXY+PGRp dj4mbmJzcDs8L2Rpdj48L3RkPg0KICAgICAgPC90cj4NCiAgICAgIA0KICAgICAgDQogICAgICAN CiAgIAkgIDx0cj4NCiAgICAgICAgCTx0ZCBhbGlnbj0iY2VudGVyIj48aW1nIGFsdD0iIiBzcmM9 Imh0dHA6Ly93d3cuendhaGlsaS5jby56YS9tYWlsZXJzL3dlbGwtZGVzZXJ2ZWQtYnVzaGJyZWFr LzUucG5nIiB1c2VtYXA9IiNNYXBNYXAiIC8+DQogICAgICAgICAgICA8bWFwIG5hbWU9Ik1hcE1h cCIgaWQ9Ik1hcE1hcCI+PGFyZWEgaHJlZj0iaHR0cDovL2lzLmRpZXoucGVuYW1haWwuY29tL3Nl bmRsaW5rLmFzcD9IaXRJRD0xNDM4MDY4NDUyODQwJlN0SUQ9NDc4OTMmU0lEPTE0Jk5JRD02ODk2 MTUmRW1JRD0xMzE0OTg2MiZMaW5rPWFIUjBjRG92TDNkM2R5NTZkMkZvYVd4cExtTnZMbnBoTHc9 PSZ0b2tlbj0yZDI3Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiBzaGFwZT0i cmVjdCIgY29vcmRzPSI0OTUsMzQsNjUzLDQ4IiAvPg0KICAgICAgICAJICAgIDxhcmVhIGhyZWY9 Im1haWx0bzpyZXNlcnZhdGlvbnNAendhaGlsaS5jby56YSIgc2hhcGU9InJlY3QiIGNvb3Jkcz0i MTg5LDMyLDQxNCw0OCIgLz4NCiAgICAgICAgPC9tYXA+PC90ZD4NCiAgICAgIDwvdHI+ICAgICAg ICAgICAgICAgICANCiAgICAgIA0KICAgICAgICAgICAgIA0KPC90Ym9keT48L3RhYmxlPg0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgIGJnY29sb3I9IiNG RkZGRkYiICBzdHlsZT0ibWluLXdpZHRoOiAxMDAlOyB3aWR0aDogMTAwJSIgYm9yZGVyPSIwIiBj ZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiICB3aWR0aD0iMTAwJSI+PHRyPjx0ZD48dGFi bGUgIGJnY29sb3I9IiNGRkZGRkYiIGFsaWduPSJyaWdodCIgc3R5bGU9Im1pbi13aWR0aDogMTAw JTsgd2lkdGg6IDEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIw IiAgd2lkdGg9IjEwMCUiPjx0cj48dGQ+PHRhYmxlIGFsaWduPSJDZW50ZXIiIGJnY29sb3I9IiNG RkZGRkYiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0i MTAwJSIgc3R5bGU9IndpZHRoOjEwMCU7bWluLXdpZHRoOjEwMCU7cGFnZS1icmVhay1iZWZvcmU6 IGFsd2F5cztiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ij48dHIgc3R5bGU9IndpZHRoOjEwMCU7 Ij48dGQgd2lkdGg9IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MjBweDsiPiZu YnNwOzwvdGQ+PHRkIGFsaWduPSJDZW50ZXIiIHZhbGlnbj0idG9wIiAgY2xhc3M9ImZvb3RlckNv bnRlbnQiIHN0eWxlPSJ3aWR0aDo5OSU7Ij4gPGRpdiBpZD0iZm9vdGVyTGlua3MiIHN0eWxlPSJk aXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7IHdpZHRoOjEwMCU7IG1hcmdpbi10b3A6IDEwcHgiPjxh IGhyZWY9Imh0dHA6Ly9pcy5kaWV6LnBlbmFtYWlsLmNvbS9SV0NvZGUvc3Vic2NyaWJlLmFzcD9N b2RlPXVuc3Vic2NyaWJlJlNpdGVJRD00Nzg5MyZTSUQ9MTQmRW1haWw9eGZzQG9zcy5zZ2kuY29t JmhpdGlkPTE0MzgwNjg0NTI4NDAmdG9rZW49MmQyN2NmNmQxMjVjMTAxNDc3ZjU3NTI2ZGVjMDFm MDNlYTZhMmY2ZiIgdGFyZ2V0PSJuZXciIGNsYXNzPSJmb290ZXJDbGljayIgc3R5bGU9ImNvbG9y OiAjMzMzMzMzOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0 YW50O2ZvbnQtZmFtaWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250 LXdlaWdodDpOb3JtYWwiPnVuc3Vic2NyaWJlPC9hPjxmb250IGlkPSJyZW1vdmVNYWluIiBzdHls ZT0iY29sb3I6ICMzMzMzMzM7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZGlzcGxheTogaW5saW5lICFp bXBvcnRhbnQ7Zm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7 IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+IHwgPC9mb250PiA8YSBocmVmPSJodHRwOi8vaXMuZGllei5w ZW5hbWFpbC5jb20vUldDb2RlL3N1YnNjcmliZS5hc3A/TW9kZT11cGRhdGUmU2l0ZUlEPTQ3ODkz JlNJRD0xNCZFbWFpbD14ZnNAb3NzLnNnaS5jb20maGl0aWQ9MTQzODA2ODQ1Mjg0MCZ0b2tlbj0y ZDI3Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiB0YXJnZXQ9Im5ldyIgY2xh c3M9ImZvb3RlckNsaWNrIiBzdHlsZT0iY29sb3I6ICMzMzMzMzM7IHRleHQtZGVjb3JhdGlvbjog bm9uZTsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6VGltZXM7IGZvbnQt c2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+IHVwZGF0ZSBwcm9m aWxlPC9hPiA8Zm9udCBpZD0icmVtb3ZlTWFpbiIgc3R5bGU9ImNvbG9yOiAjMzMzMzMzOyBmb250 LXN0eWxlOiBub3JtYWw7ICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtmb250LWZhbWlseTpU aW1lczsgZm9udC1zaXplOjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj4g fCA8L2ZvbnQ+IDxhIGhyZWY9Imh0dHA6Ly9pcy5kaWV6LnBlbmFtYWlsLmNvbS9zaXRlL2Zvcndh cmRfdG9fZnJpZW5kLmFzcHg/U2l0ZUlEPTQ3ODkzJlNJRD0xNCZTZWN0aW9uPTY4OTYxNSZoaXRp ZD0xNDM4MDY4NDUyODQwJkZyb21FbWFpbD14ZnNAb3NzLnNnaS5jb20mdG9rZW49MmQyN2NmNmQx MjVjMTAxNDc3ZjU3NTI2ZGVjMDFmMDNlYTZhMmY2ZiZFbWFpbElEPTEzMTQ5ODYyIiB0YXJnZXQ9 Im5ldyIgY2xhc3M9ImZvb3RlckNsaWNrIiBzdHlsZT0iY29sb3I6ICMzMzMzMzM7IHRleHQtZGVj b3JhdGlvbjogbm9uZTsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6VGlt ZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+Zm9y d2FyZDwvYT48Zm9udCBpZD0icmVtb3ZlTWFpbiIgc3R5bGU9ImZvbnQtc3R5bGU6IG5vcm1hbDsg ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsgZm9udC1zaXplOjhw eDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj4gfCA8L2ZvbnQ+IDxhIGhyZWY9 Imh0dHA6Ly9pcy5kaWV6LnBlbmFtYWlsLmNvbS9SV0NvZGUvc3Vic2NyaWJlLmFzcD9TaXRlSUQ9 NDc4OTMmU0lEPTE0JkVtYWlsPXhmc0Bvc3Muc2dpLmNvbSZoaXRpZD0xNDM4MDY4NDUyODQwJnRv a2VuPTJkMjdjZjZkMTI1YzEwMTQ3N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYiICB0YXJnZXQ9Im5l dyIgY2xhc3M9ImZvb3RlckNsaWNrIiBzdHlsZT0iY29sb3I6ICMzMzMzMzM7dGV4dC1kZWNvcmF0 aW9uOiBub25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsg Zm9udC1zaXplOjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj5zdWJzY3Jp YmU8L2E+PC9kaXY+PC90ZD48dGQgd2lkdGg9IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0i d2lkdGg6MjBweDsiPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIyMCIgYmdjb2xvcj0i I0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8L3RkPjx0ZCBhdD0iMSIgYWxpZ249 IkNlbnRlciIgdmFsaWduPSJ0b3AiIHN0eWxlPSIiIGNsYXNzPSJmb290ZXJDb250ZW50Ij48dGFi bGUgYWxpZ249IkNlbnRlciI+PHRyPjx0ZCBzdHlsZT0iRGlzcGxheTogaW5saW5lLWJsb2NrO3dp ZHRoOjEwMCUiPjxkaXYgYXQ9IjEiIHN0eWxlPSJEaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6 MTAwJSI+PGRpdiBhdD0iMSIgYWxpZ249J0NlbnRlcic+PGEgc3R5bGU9J2Rpc3BsYXk6aW5saW5l LWJsb2NrOyd0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0cDovL2lzLmRp ZXoucGVuYW1haWwuY29tL3NzcHVibGlzaC5hc3B4P1NJRD0xNCZTZWN0aW9uSUQ9Njg5NjE1JlNp dGVJRD00Nzg5MyZFbWFpbElEPTEzMTQ5ODYyJkhpdElEPTE0MzgwNjg0NTI4NDAmU1NMaW5rSUQ9 MjEmdG9rZW49MmQyN2NmNmQxMjVjMTAxNDc3ZjU3NTI2ZGVjMDFmMDNlYTZhMmY2ZiIgdGl0bGU9 IlB1YmxpY2x5ICsxIj48aW1nIHN0eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50 OyBib3JkZXI6IG5vbmU7JyBib3JkZXI9JzAnIGhzcGFjZT0nNScgdnNwYWNlPSc1JyBzcmM9Imh0 dHA6Ly9pcy5kaWV6LnBlbmFtYWlsLmNvbS9pbWFnZXMvbG9nb19nb29nbGVwbHVzX3MucG5nIiB0 aXRsZT0iUHVibGljbHkgKzEiIGFsdD0iUHVibGljbHkgKzEiIGJvcmRlcj0iMCIvPjwvYT4mbmJz cDsmbmJzcDs8YSBzdHlsZT0nZGlzcGxheTppbmxpbmUtYmxvY2s7J3RhcmdldD0iX2JsYW5rIiBy ZWw9Im5vZm9sbG93IiBocmVmPSJodHRwOi8vaXMuZGllei5wZW5hbWFpbC5jb20vc3NwdWJsaXNo LmFzcHg/U0lEPTE0JlNlY3Rpb25JRD02ODk2MTUmU2l0ZUlEPTQ3ODkzJkVtYWlsSUQ9MTMxNDk4 NjImSGl0SUQ9MTQzODA2ODQ1Mjg0MCZTU0xpbmtJRD0zJnRva2VuPTJkMjdjZjZkMTI1YzEwMTQ3 N2Y1NzUyNmRlYzAxZjAzZWE2YTJmNmYiIHRpdGxlPSJUd2VldCBUaGlzIj48aW1nIHN0eWxlPSdk aXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50OyBib3JkZXI6IG5vbmU7JyBib3JkZXI9JzAn IGhzcGFjZT0nNScgdnNwYWNlPSc1JyBzcmM9Imh0dHA6Ly9pcy5kaWV6LnBlbmFtYWlsLmNvbS9p bWFnZXMvbG9nb190d2l0dGVyX3MucG5nIiB0aXRsZT0iVHdlZXQgVGhpcyIgYWx0PSJUd2VldCBU aGlzIiBib3JkZXI9IjAiLz48L2E+Jm5ic3A7Jm5ic3A7PGEgc3R5bGU9J2Rpc3BsYXk6aW5saW5l LWJsb2NrOyd0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0cDovL2lzLmRp ZXoucGVuYW1haWwuY29tL3NzcHVibGlzaC5hc3B4P1NJRD0xNCZTZWN0aW9uSUQ9Njg5NjE1JlNp dGVJRD00Nzg5MyZFbWFpbElEPTEzMTQ5ODYyJkhpdElEPTE0MzgwNjg0NTI4NDAmU1NMaW5rSUQ9 MSZ0b2tlbj0yZDI3Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiB0aXRsZT0i RmFjZWJvb2siPjxpbWcgc3R5bGU9J2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IGJv cmRlcjogbm9uZTsnIGJvcmRlcj0nMCcgaHNwYWNlPSc1JyB2c3BhY2U9JzUnIHNyYz0iaHR0cDov L2lzLmRpZXoucGVuYW1haWwuY29tL2ltYWdlcy9sb2dvX2ZhY2Vib29rX3MucG5nIiB0aXRsZT0i RmFjZWJvb2siIGFsdD0iRmFjZWJvb2siIGJvcmRlcj0iMCIvPjwvYT4mbmJzcDsmbmJzcDs8YSBz dHlsZT0nZGlzcGxheTppbmxpbmUtYmxvY2s7J3RhcmdldD0iX2JsYW5rIiByZWw9Im5vZm9sbG93 IiBocmVmPSJodHRwOi8vaXMuZGllei5wZW5hbWFpbC5jb20vc3NwdWJsaXNoLmFzcHg/U0lEPTE0 JlNlY3Rpb25JRD02ODk2MTUmU2l0ZUlEPTQ3ODkzJkVtYWlsSUQ9MTMxNDk4NjImSGl0SUQ9MTQz ODA2ODQ1Mjg0MCZTU0xpbmtJRD0yMCZ0b2tlbj0yZDI3Y2Y2ZDEyNWMxMDE0NzdmNTc1MjZkZWMw MWYwM2VhNmEyZjZmIiB0aXRsZT0ibGlua2VkaW4iPjxpbWcgc3R5bGU9J2Rpc3BsYXk6aW5saW5l LWJsb2NrICFpbXBvcnRhbnQ7IGJvcmRlcjogbm9uZTsnIGJvcmRlcj0nMCcgaHNwYWNlPSc1JyB2 c3BhY2U9JzUnIHNyYz0iaHR0cDovL2lzLmRpZXoucGVuYW1haWwuY29tL2ltYWdlcy9sb2dvX2xp bmtlZGluX3MucG5nIiB0aXRsZT0iTGlua2VkSU4iIGFsdD0iTGlua2VkSW4iIGJvcmRlcj0iMCIv PjwvYT4mbmJzcDsmbmJzcDs8YSBzdHlsZT0nZGlzcGxheTppbmxpbmUtYmxvY2s7J3RhcmdldD0i X2JsYW5rIiByZWw9Im5vZm9sbG93IiBocmVmPSJodHRwOi8vaXMuZGllei5wZW5hbWFpbC5jb20v c3NwdWJsaXNoLmFzcHg/U0lEPTE0JlNlY3Rpb25JRD02ODk2MTUmU2l0ZUlEPTQ3ODkzJkVtYWls SUQ9MTMxNDk4NjImSGl0SUQ9MTQzODA2ODQ1Mjg0MCZTU0xpbmtJRD0yMiZ0b2tlbj0yZDI3Y2Y2 ZDEyNWMxMDE0NzdmNTc1MjZkZWMwMWYwM2VhNmEyZjZmIiB0aXRsZT0icGludGVyZXN0Ij48aW1n IHN0eWxlPSdkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50OyBib3JkZXI6IG5vbmU7JyBi b3JkZXI9JzAnIGhzcGFjZT0nNScgdnNwYWNlPSc1JyBzcmM9Imh0dHA6Ly9pcy5kaWV6LnBlbmFt YWlsLmNvbS9pbWFnZXMvbG9nb19waW50ZXJlc3Rfcy5wbmciIHRpdGxlPSJQaW50ZXJlc3QiIGFs dD0iUGludGVyZXN0IiBib3JkZXI9IjAiLz48L2E+Jm5ic3A7Jm5ic3A7PC9kaXY+PC9kaXYgPjwv dGQgPjwvdHI+PC90YWJsZT48L3RkPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYiIHN0 eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjIwIiBiZ2Nv bG9yPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MjBweDsiPiZuYnNwOzwvdGQ+PHRkIGFsaWduPSJD ZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0iYWRkcmVzc0Jvb2tDb3B5IiBzdHlsZT0iZGlzcGxh eTogYmxvY2sgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsgZm9udC1zaXplOjhweDsgY29s b3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsOyI+PGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5 OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwi PlRoaXMgZW1haWwgd2FzIHNlbnQgdG8gIDxhIGhyZWY9IiMiIHN0eWxlPSJ0ZXh0LWRlY29yYXRp b246IG5vbmU7Zm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7 IGZvbnQtd2VpZ2h0Ok5vcm1hbCI+IHhmc0Bvc3Muc2dpLmNvbSA8L2E+IGJ5ICA8YSBocmVmPSIj IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lO2ZvbnQtZmFtaWx5OlRpbWVzOyBmb250LXNp emU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwiPnJlc2VydmF0aW9uc0Bi dXNodmVsZHRzYWZhcmkuY29tPC9hPjwvZm9udD48L3RkPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9 IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgd2lk dGg9IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MjBweDsiPiZuYnNwOzwvdGQ+ PHRkIGFsaWduPSJDZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0iYWRkcmVzc0Jvb2tDb3B5IiBz dHlsZT0iZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsgZm9udC1z aXplOjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsOyI+PGZvbnQgc3R5bGU9 ImZvbnQtZmFtaWx5OlRpbWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdl aWdodDpOb3JtYWwiPjE1NCBFZHdhcmQgQXZlbnVlLCZuYnNwO0NlbnR1cmlvbiwmbmJzcDswMTU3 LCZuYnNwO1NvdXRoIEFmcmljYTwvZm9udD48L3RkPjx0ZCB3aWR0aD0iMjAiIGJnY29sb3I9IiNG RkZGRkYiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9 IjIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MjBweDsiPiZuYnNwOzwvdGQ+PHRk IGFsaWduPSJDZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0iYWRkcmVzc0Jvb2tDb3B5IiBzdHls ZT0iZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtmb250LWZhbWlseTpUaW1lczsgZm9udC1zaXpl OjhweDsgY29sb3I6IzgwODA4MDsgZm9udC13ZWlnaHQ6Tm9ybWFsIj48Zm9udCBzdHlsZT0iZm9u dC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0 Ok5vcm1hbCI+SSBkaWQgbm90IGdpdmUgbXkgcGVybWlzc2lvbiB0byB0aGlzIHNlbmRlcjxhIGhy ZWY9Imh0dHA6Ly9pcy5kaWV6LnBlbmFtYWlsLmNvbS9zaXRlL3JlcG9ydGFidXNlLmFzcHg/c3Rp ZD00Nzg5MyZoaXRpZD0xNDM4MDY4NDUyODQwJnNlYz02ODk2MTUmZW1haWw9eGZzQG9zcy5zZ2ku Y29tJkVtSUQ9MTMxNDk4NjImU0lEPTE0JnRva2VuPTJkMjdjZjZkMTI1YzEwMTQ3N2Y1NzUyNmRl YzAxZjAzZWE2YTJmNmYiICBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOm5vbmUnID48Zm9udCBzdHls ZT0iZm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQt d2VpZ2h0Ok5vcm1hbCI+IGNsaWNrIGhlcmUgdG8gcmVwb3J0LjwvYT48L2ZvbnQ+PC9mb250Pjwv dGQ+PHRkIHdpZHRoPSIyMCIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4m bmJzcDs8L3RkPjwvdHI+PHRyIHdpZHRoPSIxMDAiIGhlaWdodD0iMTVweCI+PHRkIHdpZHRoPSIy MCIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIwcHg7Ij4mbmJzcDs8L3RkPjx0ZCBh bGlnbj0iQ2VudGVyIiB2YWxpZ249InRvcCIgY2xhc3M9ImFkZHJlc3NCb29rQ29weSIgc3R5bGU9 ImRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4 cHg7IGNvbG9yOiM4MDgwODA7IGZvbnQtd2VpZ2h0Ok5vcm1hbCFpbXBvcnRhbnQ7Ij48Zm9udCBz dHlsZT0iZm9udC1mYW1pbHk6VGltZXM7IGZvbnQtc2l6ZTo4cHg7IGNvbG9yOiM4MDgwODA7IGZv bnQtd2VpZ2h0Ok5vcm1hbCI+PGEgaHJlZj0iaHR0cDovL2lzLmRpZXoucGVuYW1haWwuY29tL2hv bWUvci5hc3A/U0lEPTE1NjgmRz0yIiB0YXJnZXQ9Im5ldyIgc3R5bGU9ImZvbnQtZmFtaWx5OlRp bWVzOyBmb250LXNpemU6OHB4OyBjb2xvcjojODA4MDgwOyBmb250LXdlaWdodDpOb3JtYWwiPjxp bWcgIHZzcGFjZT0iNSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcDsgd2lkdGg6IGF1dG8gIWlt cG9ydGFudDsgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IiBzcmM9Imh0dHA6Ly9pcy5kaWV6LnBl bmFtYWlsLmNvbS8vaW1hZ2VzL2dyYXBoaWNtYWlsY296YS96YV8yNF9nbV9wb3dlcmVkYnlfbG9n by5naWY/U0lEPTE1NjgiIGFsdD0iaHR0cDovL2lzLmRpZXoucGVuYW1haWwuY29tL2hvbWUvci5h c3A/U0lEPTE1NjgmRz0yIiBib3JkZXI9IjAiPjwvYT48L3RkPjx0ZCB3aWR0aD0iMjAiIGJnY29s b3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48L3RyPjx0ZCB3aWR0 aD0iMjAiIGJnY29sb3I9IiNGRkZGRkYiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+Jm5ic3A7PC90ZD48 dHIgaGVpZ2h0PScyJyBzdHlsZT0iaGVpZ2h0PTUiPjx0ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8 L3RkPjwvdHI+PHRkIHdpZHRoPSIyMCIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9IndpZHRoOjIw cHg7Ij4mbmJzcDs8L3RkPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFi bGU+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4jb3V0bG9vayBhe3BhZGRpbmc6IDA7fS5SZWFkTXNn Qm9keXt3aWR0aDogMTAwJTt9LkV4dGVybmFsQ2xhc3N7d2lkdGg6IDEwMCU7fWJvZHl7bWFyZ2lu OiAwO3BhZGRpbmc6IDA7fWltZ3tib3JkZXI6IDA7bGluZS1oZWlnaHQ6IDEwMCU7IG91dGxpbmU6 IG5vbmU7dGV4dC1kZWNvcmF0aW9uOiBub25lO310YWJsZSwgdGR7bXNvLXRhYmxlLWxzcGFjZTog MHB0O21zby10YWJsZS1yc3BhY2U6IDBwdDt9IHRhYmxlLCB0ZC5hZGRyZXNzQm9va0NvcHl7cGFk ZGluZzogMDt9ICNib2R5VGFibGUsICNib2R5Q2VsbHtoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtt YXJnaW46IDA7cGFkZGluZzogMDt3aWR0aDogMTAwJSAhaW1wb3J0YW50O30jYm9keUNlbGx7cGFk ZGluZy10b3A6IDA7cGFkZGluZy1yaWdodDogMjBweDtwYWRkaW5nLWJvdHRvbTogMjBweDtwYWRk aW5nLWxlZnQ6IDIwcHg7fSN0ZW1wbGF0ZUNvbnRhaW5lcnt3aWR0aDogMTAwJTt9LypAdGFiIFBh Z2VAc2VjdGlvbiBiYWNrZ3JvdW5kIGNvbG9yQHRpcCBTZXQgdGhlIGJhY2tncm91bmQgY29sb3Ig Zm9yIHlvdXIgZW1haWwuIFlvdSBtYXkgd2FudCB0byBjaG9vc2UgYSBjb2xvciB0aGF0IG1hdGNo ZXMgeW91ciBjb21wYW55J3MgYnJhbmRpbmcuQHRoZW1lIHBhZ2UqL2JvZHksICNib2R5VGFibGV7 LypAZWRpdGFibGUqL2JhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7fXRhYmxlI2Zvb3Rlckxpbmtz e2ZvbnQtc2l6ZTogMTRweDt3aWR0aDogMTAwJTt0ZXh0LWFsaWduOiBjZW50ZXI7fXRhYmxlI2Zv b3RlckxpbmtzIHRkLCBhLmZvb3RlckNsaWNre2NvbG9yOiAjMzMzMzMzO310YWJsZSNmb290ZXJM aW5rcyB0ZHtwYWRkaW5nLXRvcDogMTBweDtjb2xvcjogIzMzMzMzMztwYWRkaW5nLWJvdHRvbTog MTBweDt9ICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXtib2R5LCB0 YWJsZSwgdGQsIHAsIGEsIGxpLCBibG9ja3F1b3Rley13ZWJraXQtdGV4dC1zaXplLWFkanVzdDog bm9uZSAhaW1wb3J0YW50O30gIGJvZHl7d2lkdGg6IGF1dG8gIWltcG9ydGFudDt9IHRkW2lkPWJv ZHlDZWxsXXtwYWRkaW5nOiAxMHB4O30gLypAdGFiIE1vYmlsZSBTdHlsZXNAc2VjdGlvbiB0ZW1w bGF0ZSB3aWR0aEB0aXAgTWFrZSB0aGUgdGVtcGxhdGUgZmx1aWQgZm9yIHBvcnRyYWl0IG9yIGxh bmRzY2FwZSB2aWV3IGFkYXB0YWJpbGl0eS4gSWYgYSBmbHVpZCBsYXlvdXQgZG9lc24ndCB3b3Jr LCBzZXQgd2lkdGggdG8gMzAwcHggaW5zdGVhZC4qLyAgICB0YWJsZVtpZD10ZW1wbGF0ZUNvbnRh aW5lcl17LypAdGFiIE1vYmlsZSBTdHlsZXNAc2VjdGlvbiB0ZW1wbGF0ZSB3aWR0aEB0aXAgTWFr ZSB0aGUgdGVtcGxhdGUgZmx1aWQgZm9yIHBvcnRyYWl0IG9yIGxhbmRzY2FwZSB2aWV3IGFkYXB0 YWJpbGl0eS4gSWYgYSBmbHVpZCBsYXlvdXQgZG9lc24ndCB3b3JrLCBzZXQgd2lkdGggdG8gMzAw cHggaW5zdGVhZC4qL21heC13aWR0aDogNjAwcHggIWltcG9ydGFudDsgLypAZWRpdGFibGUqL3dp ZHRoOiAxMDAlICFpbXBvcnRhbnQ7fSAvKkB0YWIgTW9iaWxlIFN0eWxlc0BzZWN0aW9uIGhlYWRp bmcgMUB0aXAgTWFrZSB0aGUgZmlyc3QtbGV2ZWwgaGVhZGluZ3MgbGFyZ2VyIGluIHNpemUgZm9y IGJldHRlciByZWFkYWJpbGl0eSBvbiBzbWFsbCBzY3JlZW5zLiovICAgIGgxey8qQGVkaXRhYmxl Ki9mb250LXNpemU6IDM2cHggIWltcG9ydGFudDsgLypAZWRpdGFibGUqL2xpbmUtaGVpZ2h0OiAx MDAlICFpbXBvcnRhbnQ7fSAvKkB0YWIgTW9iaWxlIFN0eWxlc0BzZWN0aW9uIGhlYWRpbmcgMkB0 aXAgTWFrZSB0aGUgc2Vjb25kLWxldmVsIGhlYWRpbmdzIGxhcmdlciBpbiBzaXplIGZvciBiZXR0 ZXIgcmVhZGFiaWxpdHkgb24gc21hbGwgc2NyZWVucy4qLyAgICBoMnsvKkBlZGl0YWJsZSovZm9u dC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7IC8qQGVkaXRhYmxlKi9saW5lLWhlaWdodDogMTAwJSAh aW1wb3J0YW50O30gLypAdGFiIE1vYmlsZSBTdHlsZXNAc2VjdGlvbiBoZWFkaW5nIDNAdGlwIE1h a2UgdGhlIHRoaXJkLWxldmVsIGhlYWRpbmdzIGxhcmdlciBpbiBzaXplIGZvciBiZXR0ZXIgcmVh ZGFiaWxpdHkgb24gc21hbGwgc2NyZWVucy4qLyAgICBoM3svKkBlZGl0YWJsZSovZm9udC1zaXpl OiAxOHB4ICFpbXBvcnRhbnQ7IC8qQGVkaXRhYmxlKi9saW5lLWhlaWdodDogMTAwJSAhaW1wb3J0 YW50O30gLypAdGFiIE1vYmlsZSBTdHlsZXNAc2VjdGlvbiBoZWFkaW5nIDRAdGlwIE1ha2UgdGhl IGZvdXJ0aC1sZXZlbCBoZWFkaW5ncyBsYXJnZXIgaW4gc2l6ZSBmb3IgYmV0dGVyIHJlYWRhYmls aXR5IG9uIHNtYWxsIHNjcmVlbnMuKi8gICAgaDR7LypAZWRpdGFibGUqL2ZvbnQtc2l6ZTogMTRw eCAhaW1wb3J0YW50OyAvKkBlZGl0YWJsZSovbGluZS1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDt9 IHRhYmxlW2lkPXRlbXBsYXRlUHJlaGVhZGVyXXtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fSBm b250W2lkPXJlbW92ZU1haW5de2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt0ZXh0LWRlY29yYXRp b246IG5vbmU7fSB0YWJsZVtpZD10ZW1wbGF0ZUhlYWRlcl17d2lkdGg6IDEwMCUgIWltcG9ydGFu dDtwYWRkaW5nOiA1cHg7fSAvKkB0YWIgTW9iaWxlIFN0eWxlc0BzZWN0aW9uIGhlYWRlciB0ZXh0 QHRpcCBNYWtlIHRoZSBoZWFkZXIgY29udGVudCB0ZXh0IGxhcmdlciBpbiBzaXplIGZvciBiZXR0 ZXIgcmVhZGFiaWxpdHkgb24gc21hbGwgc2NyZWVucy4qLyAgICB0ZFtjbGFzcz1oZWFkZXJDb250 ZW50XXsvKkBlZGl0YWJsZSovZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IC8qQGVkaXRhYmxl Ki9saW5lLWhlaWdodDogMTI1JSAhaW1wb3J0YW50O30gLypAdGFiIE1vYmlsZSBTdHlsZXNAc2Vj dGlvbiBib2R5IHRleHRAdGlwIE1ha2UgdGhlIGJvZHkgY29udGVudCB0ZXh0IGxhcmdlciBpbiBz aXplIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkgb24gc21hbGwgc2NyZWVucy4qLyAgICB0ZFtjbGFz cz1ib2R5Q29udGVudF17LypAZWRpdGFibGUqL2ZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50OyAv KkBlZGl0YWJsZSovbGluZS1oZWlnaHQ6IDEyNSUgIWltcG9ydGFudDt9IC8qQHRhYiBNb2JpbGUg U3R5bGVzQHNlY3Rpb24gZm9vdGVyIHRleHRAdGlwIE1ha2UgdGhlIGZvb3RlciBjb250ZW50IHRl eHQgbGFyZ2VyIGluIHNpemUgZm9yIGJldHRlciByZWFkYWJpbGl0eSBvbiBzbWFsbCBzY3JlZW5z LiovICAgIHRkW2NsYXNzPWNdey8qQGVkaXRhYmxlKi9mb250LXNpemU6IDE0cHggIWltcG9ydGFu dDsgLypAZWRpdGFibGUqL2xpbmUtaGVpZ2h0OiAxNTAlICFpbXBvcnRhbnQ7fSB0ZFtjbGFzcz1m b290ZXJDb250ZW50XSBhe2Rpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OyB9fSBzcGFu LnlzaG9ydGN1dHMge2NvbG9yOiMwMDB9IHNwYW4ueXNob3J0Y3V0czpob3ZlciwgIHNwYW4ueXNo b3J0Y3V0czphY3RpdmUsIHNwYW4ueXNob3J0Y3V0czpmb2N1cyB7dGV4dC1kZWNvcmF0aW9uOm5v bmU7IGNvbG9yOiMwMDA7IGJhY2tncm91bmQtY29sb3I6bm9uZTsgYm9yZGVyOm5vbmV9ICAgKlty b2xlfD0ibWFpbiJde3BhZGRpbmc6MHB4ICFpbXBvcnRhbnQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50 O21hcmdpbjowcHggIWltcG9ydGFudDt9Lm1zZy1ib2R5IGlubmVye3dpZHRoOjEwMCUgIWltcG9y dGFudDsgcGFkZGluZzowcHggIWltcG9ydGFudDttYXJnaW46MHB4ICFpbXBvcnRhbnQ7IGxlZnQ6 MHB4ICFpbXBvcnRhbnQ7fS5tc2ctYm9keSB7d2lkdGg6MTAwJSAhaW1wb3J0YW50OyBwYWRkaW5n OjBweCAhaW1wb3J0YW50O21hcmdpbjowcHggIWltcG9ydGFudDsgbGVmdDowcHg7ICFpbXBvcnRh bnR9LmlubmVye3dpZHRoOjEwMCUgIWltcG9ydGFudDsgcGFkZGluZzowcHggIWltcG9ydGFudCA7 bWFyZ2luOjBweCAhaW1wb3J0YW50OyBsZWZ0OjBweCAhaW1wb3J0YW50OyB9IDwvc3R5bGU+PC9i b2R5PjwvaHRtbD4= From lrhorer@mygrande.net Tue Jul 28 02:46:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AB9237FF1 for ; Tue, 28 Jul 2015 02:46:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E2C3A304039 for ; Tue, 28 Jul 2015 00:46:51 -0700 (PDT) X-ASG-Debug-ID: 1438069609-04bdf00232e2fe0001-NocioJ Received: from mail01.lsn.net (mail01.lsn.net [66.90.130.120]) by cuda.sgi.com with ESMTP id 7IbkHnlUThaEF9qo for ; Tue, 28 Jul 2015 00:46:49 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.120 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail01.lsn.net (8.14.4/8.13.6) with ESMTP id t6S7kinh010883 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Tue, 28 Jul 2015 02:46:44 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av01.lsn.net Message-ID: <55B73365.1050908@mygrande.net> Date: Tue, 28 Jul 2015 02:46:45 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Brian Foster CC: Kris Rusocki , "Rhorer, Leslie" , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <20150720111747.GA53450@bfoster.bfoster> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail01.lsn.net[66.90.130.120] X-Barracuda-Start-Time: 1438069609 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21147 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/20/2015 6:17 AM, Brian Foster wrote: > On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >> >> I found the problem with md5sum (and probably nfs, as well). One of the >> memory modules in the server was bad. The problem with XFS persists. Every >> time tar tried to create the directory: >> >> /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 >> >> It would begin spitting out errors, starting with "Cannot mkdir: Structure >> needs cleaning". At that point, XFS had shut down. I went into >> /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket >> 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ >> and created the i386-11.1 directory by hand, and tar no longer starts >> spitting out errors at that point, but it does start up again at >> RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. >> > > So is this untar problem a reliable reproducer? If so, here's what I The processes I was running this weekend ran longer than expected, and in fact were still running just a couple of hours ago. I was doing an rsync with CRC check from the backup system to the one with the problem. There were a few corrupt files, but not a huge number. Although slower than I hoped, everything was running fine until a short time ago, when rsync encountered the very same issue I keep having with tar, which is to say it tried to create a directory and the file system crashed with precisely the same symptoms as when tar was failing. > would try to hopefully isolate a filesystem problem from something > underneath: > > xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump > xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img > mount /.../fileonrootfs.img /mnt/ I tried to do the xfs_mdrestore to the root file system, but it fails: RAID-Server:/TEST# xfs_mdrestore -g md0.metadump RAIDfile.img xfs_mdrestore: cannot set filesystem image size: File too large So then I did the same thing to a directory on an nfs mount from another machine. That worked. I then went to the other machine, mounted the image on /media, copied the tarball to the location on the mount where the tarball resides on the real array, dn ran the tar job. It completed without errors. I then created the image on the array where the tasks are failing and attempted to mount it to /media on the problematic machine. That fails with: RAID-Server:/TEST# mount /RAID/TEST/RAIDfile.img /media/ mount: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so. The problem is this (from syslog): Jul 28 01:53:48 RAID-Server kernel: [431155.847523] loop: module loaded Jul 28 01:53:48 RAID-Server kernel: [431155.927238] XFS (loop0): Filesystem has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount Jul 28 01:55:51 RAID-Server kernel: [431278.916490] XFS (loop0): Filesystem has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount Presumably it has the same UUID as the RAID array because it is expected to do so. I can't mount it unless I umount the RAID array, but if I do that, I can't get to the file to mount the dump image, since it is on the array. I then copied both the tarball and the image over to the root, and while the system would not let me create the image on the root, it did let me copy the image to the root. I then umounted the RAID array, mounted the image, and attempted to cd to the original directory in the image mount where the tarball was saved. That failed with an I/O error: RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/" bash: cd: /media/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/: Input/output error I changed directories to a point two directories above the previous attempt and did a long listing: RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint Adapters" RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint Adapters# ll ls: cannot access RocketRAID 2722: Input/output error total 4 drwxr-xr-x 6 root lrhorer 4096 Jul 18 19:26 Rocket 2722 ?????????? ? ? ? ? ? RocketRAID 2722 As you can see, Rocket 2722 is still there, but RocketRAID 2722 is very sick. Rocket 2722 is the parent of where the tarbal was, however, so I did a cd and an ll again: RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint Adapters# cd "Rocket 2722"/ RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722# ll ls: cannot access BIOS: Input/output error ls: cannot access Driver: Input/output error ls: cannot access HighPoint RAID Management Software: Input/output error ls: cannot access Manual: Input/output error total 248 -rwxr--r-- 1 root lrhorer 245760 Nov 20 2008 autorun.exe -rwxr--r-- 1 root lrhorer 51 Mar 21 2001 autorun.inf ?????????? ? ? ? ? ? BIOS ?????????? ? ? ? ? ? Driver ?????????? ? ? ? ? ? HighPoint RAID Management Software ?????????? ? ? ? ? ? Manual -rwxr--r-- 1 root lrhorer 1134 Feb 5 2012 readme.txt So now, what? From stefanrin@gmail.com Tue Jul 28 03:36:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 6AD6D7F6C for ; Tue, 28 Jul 2015 03:36:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 47E678F8065 for ; Tue, 28 Jul 2015 01:36:06 -0700 (PDT) X-ASG-Debug-ID: 1438072560-04cbb06a69141660001-NocioJ Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by cuda.sgi.com with ESMTP id nrXp2oB7gaqPJKBE (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 28 Jul 2015 01:36:01 -0700 (PDT) X-Barracuda-Envelope-From: stefanrin@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.181 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.181] Received: by wibxm9 with SMTP id xm9so149604447wib.1 for ; Tue, 28 Jul 2015 01:36:00 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.181] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.181] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=717ovvXsN/39K2EBpAuEz/PWqn4wS8gAGwZsizVczZ8=; b=TEGH8AY/FIIjOHrm7qkBeDSQCjFtR6vfOkrG9kqdDsdCqPglAJatd24UFsCc2A47M+ /qYIEQQtmThCHmjtI/L3TWPm+ned2rYT+D5o9R/6V29rsQCFM/kiHqpqQk9VD1e8+ZeO shdH085izACJnyD6Ni6Ut5z2cGVFKl5IJoRXRH4t79ZAU1HT677HuqTVdoMOddxvVmn1 r0WePPhnPStBSgDGL0dBNiLCwywxjGSzW33sJsg9OyaSGvDFfHp97S79z1zHPBPi+TW/ +/rzWiFVSl/H1wtDU7Z6WA4lC+Vkfc20DEdzoig4rAxQwtQ+4+fteZOJxFvSETe/lx3y XCag== MIME-Version: 1.0 X-Received: by 10.194.95.132 with SMTP id dk4mr69930743wjb.88.1438072559876; Tue, 28 Jul 2015 01:35:59 -0700 (PDT) Received: by 10.194.158.73 with HTTP; Tue, 28 Jul 2015 01:35:59 -0700 (PDT) In-Reply-To: <55B73365.1050908@mygrande.net> References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> Date: Tue, 28 Jul 2015 10:35:59 +0200 Message-ID: Subject: Re: XFS File system in trouble From: Stefan Ring X-ASG-Orig-Subj: Re: XFS File system in trouble To: Leslie Rhorer Cc: "xfs@oss.sgi.com" Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-wi0-f181.google.com[209.85.212.181] X-Barracuda-Start-Time: 1438072561 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, Jul 28, 2015 at 9:46 AM, Leslie Rhorer wrote: > The problem is this (from syslog): > Jul 28 01:53:48 RAID-Server kernel: [431155.847523] loop: module loaded > Jul 28 01:53:48 RAID-Server kernel: [431155.927238] XFS (loop0): Filesystem > has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount > Jul 28 01:55:51 RAID-Server kernel: [431278.916490] XFS (loop0): Filesystem > has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount > > Presumably it has the same UUID as the RAID array because it is > expected to do so. I can't mount it unless I umount the RAID array, but if > I do that, I can't get to the file to mount the dump image, since it is on > the array. You can mount with -o nouuid, if are careful not to mount the same physical storage twice. From roger@filmlight.ltd.uk Tue Jul 28 05:48:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D09B27FFE for ; Tue, 28 Jul 2015 05:48:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id BC8CE304043 for ; Tue, 28 Jul 2015 03:48:23 -0700 (PDT) X-ASG-Debug-ID: 1438080502-04cb6c02c510a380001-NocioJ Received: from c.mx.filmlight.ltd.uk (c.mx.filmlight.ltd.uk [54.76.112.217]) by cuda.sgi.com with ESMTP id kic1BoWSx0YU16OK for ; Tue, 28 Jul 2015 03:48:22 -0700 (PDT) X-Barracuda-Envelope-From: roger@filmlight.ltd.uk X-Barracuda-Apparent-Source-IP: 54.76.112.217 Received: from [192.168.0.220] (cpc2-stev6-2-0-cust318.9-2.cable.virginm.net [213.107.89.63]) (Authenticated sender: roger) by omni.filmlight.ltd.uk (Postfix) with ESMTPSA id 3293B811238; Tue, 28 Jul 2015 11:48:20 +0100 (BST) Content-Type: text/plain; charset=windows-1252 Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) Subject: Re: XFS File system in trouble From: Roger Willcocks X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55B73365.1050908@mygrande.net> Date: Tue, 28 Jul 2015 11:48:18 +0100 Cc: Roger Willcocks , Brian Foster , Eric Sandeen , Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Content-Transfer-Encoding: quoted-printable Message-Id: References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> To: Leslie Rhorer X-Mailer: Apple Mail (2.1878.6) X-Barracuda-Connect: c.mx.filmlight.ltd.uk[54.76.112.217] X-Barracuda-Start-Time: 1438080502 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 28 Jul 2015, at 08:46, Leslie Rhorer wrote: >=20 >=20 > So now, what? >=20 Either the filesystem has an error which xfs-repair doesn=92t see (which = would appear unlikely since you say that you could untar into an image = of the filesystem on an nfs mount); or you have a data-dependent = hardware fault. It=92s notable that the directory you=92re unpacking is a driver for a = Highpoint 2722 raid controller =97 is that the controller you=92re = having problems with ? =97 Roger From 3-163VQMMA0o4mx77.rnAu7.o0y9r4044.4su.o0y@photos-server.bounces.google.com Tue Jul 28 05:52:49 2015 Return-Path: <3-163VQMMA0o4mx77.rnAu7.o0y9r4044.4su.o0y@photos-server.bounces.google.com> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.0 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C082F7FFE for ; Tue, 28 Jul 2015 05:52:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9B06A8F8033 for ; Tue, 28 Jul 2015 03:52:46 -0700 (PDT) X-ASG-Debug-ID: 1438080763-04cb6c02c610a550001-NocioJ Received: from mail-ig0-f202.google.com (mail-ig0-f202.google.com [209.85.213.202]) by cuda.sgi.com with ESMTP id Oe0PluuIpFyoJDRi (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 28 Jul 2015 03:52:44 -0700 (PDT) X-Barracuda-Envelope-From: 3-163VQMMA0o4mx77.rnAu7.o0y9r4044.4su.o0y@photos-server.bounces.google.com X-Barracuda-Apparent-Source-IP: 209.85.213.202 X-Barracuda-IPDD: Level1 [photos-server.bounces.google.com/209.85.213.202] Received: by igcqf3 with SMTP id qf3so8377248igc.1 for ; Tue, 28 Jul 2015 03:52:43 -0700 (PDT) X-Barracuda-IPDD: Level1 [photos-server.bounces.google.com/209.85.213.202] X-Barracuda-IPDD: Level1 [photos-server.bounces.google.com/209.85.213.202] X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=mime-version:reply-to:message-id:date:subject:from:to:content-type; bh=YjlIYZM5E3KjlCb4JEDfxK0C/p/JaUvhHk8+UkuMlZ8=; b=WH92dO29sWgebX9aSoTrtcify/sq8Q21KlOH/nLqY17hxnxdxQ+wDDInwYpAYMVflX lnNn+vNpyNWxNNHwEoKnFXFu8cOwYOpCSY8kKAZ7KNR/lAnYen7l+RcU4FsGgm49gcka MLvAre2k935DDSz1zZT7UMBCRfd3/pWPpEGlbzb6OzsPoDk1z/P6rmWpGmsl0Yit6ZlJ 1PkcYtVz7V+ENIOXq/srDtFTt3Zfv3RPU57Toh3ibaK+dJndLDclb1Y0SyJn30tXjvEj aagVFSlPY6K09BakwkHx+L/bLgySNFqqKzE96ATHqFJt4QoUiANOpoMhfHJ4vvef3i1o TaIA== MIME-Version: 1.0 X-Received: by 10.107.14.8 with SMTP id 8mr33013277ioo.33.1438080763614; Tue, 28 Jul 2015 03:52:43 -0700 (PDT) Reply-To: GPS vehicle tracker with 3G compatible Message-ID: <001a113fd99212d7d3051bed4597@google.com> Date: Tue, 28 Jul 2015 10:52:43 +0000 Subject: =?GB2312?B?R1BTIHZlaGljbGUgdHJhY2tlciB3aXRoIDNHIGNvbXBhdGlibGXT68T6ubLP7Q==?= =?GB2312?B?wcvP4LLhoaM=?= From: GPS vehicle tracker with 3G compatible X-ASG-Orig-Subj: =?GB2312?B?R1BTIHZlaGljbGUgdHJhY2tlciB3aXRoIDNHIGNvbXBhdGlibGXT68T6ubLP7Q==?= =?GB2312?B?wcvP4LLhoaM=?= To: xfs@oss.sgi.com Content-Type: multipart/related; boundary=001a113fd99212d7bd051bed4595 X-Barracuda-Connect: mail-ig0-f202.google.com[209.85.213.202] X-Barracuda-Start-Time: 1438080764 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --001a113fd99212d7bd051bed4595 Content-Type: multipart/alternative; boundary=001a113fd99212d7bb051bed4594 --001a113fd99212d7bb051bed4594 Content-Type: text/plain; charset=ISO-8859-1; format=flowed; delsp=yes Realtime Mini Car Vehicle Truck GPS/GSM/GPRS Tracker Dear Sir This is Mr. Zhong,the sales manager of GPS in China. Spy Tracking Device System + Remote Control GSM/GPRS (850, 900, 1800, 1900MHz) Network Latest GPS SiRF III chip-set. This GPS Tracker was specially made for vehicles. It"s a new product based on the GSM/GPRS (850, 900, 1800, 1900MHz) network and satellite positioning system. It sets multiple functions such as real time positioning, security, monitoring surveillance, emergency alarms and tracking in its entirety. I would appreciate if you forward this letter to Technical Manager or to other expert responsible for technical integration of new products in your company, or provide me with his contact for we could discuss all the details of our future cooperation. Mr. Zhong https://picasaweb.google.com/lh/sredir?uname=110946048896726710671&target=ALBUM&id=6164551992175519089&authkey=Gv1sRgCN7Fv-a-xMyoUQ&invite=CLDsiJkC&feat=email --001a113fd99212d7bb051bed4594 Content-Type: text/html; charset=GB2312 Content-Transfer-Encoding: quoted-printable
=D1=FB=C7=EB=C4=FA=B9=DB=BF=B4 GPS vehicle tracker with 3G compa= tible =B5=C4=CF=E0=B2=E1=A3=BA Realtime Mi= ni Car Vehicle Truck GPSGSMGPRS Tracker
Realtime Mini Car Vehicle Truck GPSGSMGPRS Tracker
2015=C4=EA6=D4=C224=C8=D5
=CC=E1=B9=A9=D5=DF=A3=BAGPS vehicle tracker with 3G compatible
=B2=E9=BF=B4=CF=E0=B2=E1
=C0=B4= =D7=D4 GPS vehicle tracker with 3G compatible =B5=C4=CF=FB=CF=A2=A3=BA
Realtime Mini Car Vehicle Truck GPS/GSM/GPRS Tracker

Dear S= ir

This is Mr. Zhong,the sales manager of GPS in China.

Spy = Tracking Device System + Remote Control
GSM/GPRS (850, 900, 1800, 1900MH= z) Network
Latest GPS SiRF III chip-set.

This GPS Tracker was spe= cially made for vehicles. It"s a new product based on the GSM/GPRS (85= 0, 900, 1800, 1900MHz) network and satellite positioning system. It sets mu= ltiple functions such as real time positioning, security, monitoring survei= llance, emergency alarms and tracking in its entirety.

I would appre= ciate if you forward this letter to Technical Manager or to other expert re= sponsible for technical integration of new products in your company, or pro= vide me with his contact for we could discuss all the details of our future= cooperation.

Mr. Zhong
=D2=AA=B7=D6=CF=ED=C4=FA=B5=C4=D5=D5=C6=AC=BB=F2=D4=DA=C5=F3=D3=D1= =D3=EB=C4=FA=B7=D6=CF=ED=D5=D5=C6=AC=CA=B1=CA=D5=B5=BD=CD=A8=D6=AA=A3=AC=C7= =EB=BB=F1=C8=A1=CA=F4=D3=DA=C4=FA= =D7=D4=BC=BA=B5=C4=C3=E2=B7=D1 Picasa =CD=F8=C2=E7=CF=E0=B2=E1=D5=CA=BB=A7<= /a>=A1=A3
--001a113fd99212d7bb051bed4594-- --001a113fd99212d7bd051bed4595 Content-Type: image/gif; name="picasaweblogo-zh_CN.gif" Content-Disposition: attachment; filename="picasaweblogo-zh_CN.gif" Content-Transfer-Encoding: base64 Content-ID: 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 --001a113fd99212d7bd051bed4595 Content-Type: image/jpeg; name="email.jpg" Content-Disposition: attachment; filename="email.jpg" Content-Transfer-Encoding: base64 Content-ID: <6164551992175519089> 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 --001a113fd99212d7bd051bed4595-- From bfoster@redhat.com Tue Jul 28 07:33:16 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8E79C7FFE for ; Tue, 28 Jul 2015 07:33:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0C015AC003 for ; Tue, 28 Jul 2015 05:33:12 -0700 (PDT) X-ASG-Debug-ID: 1438086790-04cbb06a6914d790001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id H4TxyLqO6YpOwtlb (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 28 Jul 2015 05:33:11 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 46C23A3818; Tue, 28 Jul 2015 12:33:09 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6SCX8f2021029; Tue, 28 Jul 2015 08:33:08 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id C6F52122E55; Tue, 28 Jul 2015 08:33:07 -0400 (EDT) Date: Tue, 28 Jul 2015 08:33:07 -0400 From: Brian Foster To: Leslie Rhorer Cc: Eric Sandeen , Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble Message-ID: <20150728123307.GC38784@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55B73365.1050908@mygrande.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1438086791 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 28, 2015 at 02:46:45AM -0500, Leslie Rhorer wrote: > On 7/20/2015 6:17 AM, Brian Foster wrote: > >On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: > >> > >> I found the problem with md5sum (and probably nfs, as well). One of the > >>memory modules in the server was bad. The problem with XFS persists. Every > >>time tar tried to create the directory: > >> > >>/RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 > >> > >> It would begin spitting out errors, starting with "Cannot mkdir: Structure > >>needs cleaning". At that point, XFS had shut down. I went into > >>/RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket > >>2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ > >>and created the i386-11.1 directory by hand, and tar no longer starts > >>spitting out errors at that point, but it does start up again at > >>RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. > >> > > > >So is this untar problem a reliable reproducer? If so, here's what I > > The processes I was running this weekend ran longer than expected, and in > fact were still running just a couple of hours ago. I was doing an rsync > with CRC check from the backup system to the one with the problem. There > were a few corrupt files, but not a huge number. Although slower than I > hoped, everything was running fine until a short time ago, when rsync > encountered the very same issue I keep having with tar, which is to say it > tried to create a directory and the file system crashed with precisely the > same symptoms as when tar was failing. > > >would try to hopefully isolate a filesystem problem from something > >underneath: > > > >xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump > >xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img > >mount /.../fileonrootfs.img /mnt/ > > I tried to do the xfs_mdrestore to the root file system, but it fails: > > RAID-Server:/TEST# xfs_mdrestore -g md0.metadump RAIDfile.img > xfs_mdrestore: cannot set filesystem image size: File too large > Hmm, I guess the file size exceeds the capabilities of the root fs, even if there might ultimately be enough space to restore the metadump. > So then I did the same thing to a directory on an nfs mount from another > machine. That worked. I then went to the other machine, mounted the image > on /media, copied the tarball to the location on the mount where the tarball > resides on the real array, dn ran the tar job. It completed without errors. > That's interesting. It tells us the fs apparently isn't fundamentally broken, but the separate machine potentially introduces a different kernel. Is that the case here? What else is different between these systems? > I then created the image on the array where the tasks are failing and > attempted to mount it to /media on the problematic machine. That fails > with: > > RAID-Server:/TEST# mount /RAID/TEST/RAIDfile.img /media/ > mount: wrong fs type, bad option, bad superblock on /dev/loop0, > missing codepage or helper program, or other error > > In some cases useful info is found in syslog - try > dmesg | tail or so. > > The problem is this (from syslog): > Jul 28 01:53:48 RAID-Server kernel: [431155.847523] loop: module loaded > Jul 28 01:53:48 RAID-Server kernel: [431155.927238] XFS (loop0): Filesystem > has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount > Jul 28 01:55:51 RAID-Server kernel: [431278.916490] XFS (loop0): Filesystem > has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount > > Presumably it has the same UUID as the RAID array because it is expected to > do so. I can't mount it unless I umount the RAID array, but if I do that, I > can't get to the file to mount the dump image, since it is on the array. > Ok, somebody already replied with how to get around this. That said, it sounds like you've restored the metadump to an image file on the problematic fs. I'm not sure how useful a test that is since we're testing on the same hardware. I suppose it could be interesting if the storage hardware is similar with the alternate machine referenced above. For example, if you restore here and the test does not fail, the test on the separate machine is probably less informative. > I then copied both the tarball and the image over to the root, and while > the system would not let me create the image on the root, it did let me copy > the image to the root. I then umounted the RAID array, mounted the image, > and attempted to cd to the original directory in the image mount where the > tarball was saved. That failed with an I/O error: > It sounds a bit strange for the mdrestore to fail on root but a cp of the resulting image to work. Do the resulting images have the same file size or is the rootfs copy truncated? If the latter, you could be missing part of the fs and thus any of the following tests are probably moot. Brian > RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint > Adapters/Rocket 2722/Driver/" > bash: cd: /media/Server-Main/Equipment/Drive Controllers/HighPoint > Adapters/Rocket 2722/Driver/: Input/output error > > I changed directories to a point two directories above the previous attempt > and did a long listing: > > RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint > Adapters" > RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint > Adapters# ll > ls: cannot access RocketRAID 2722: Input/output error > total 4 > drwxr-xr-x 6 root lrhorer 4096 Jul 18 19:26 Rocket 2722 > ?????????? ? ? ? ? ? RocketRAID 2722 > > As you can see, Rocket 2722 is still there, but RocketRAID 2722 is very > sick. Rocket 2722 is the parent of where the tarbal was, however, so I did > a cd and an ll again: > > RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint > Adapters# cd "Rocket 2722"/ > RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint > Adapters/Rocket 2722# ll > ls: cannot access BIOS: Input/output error > ls: cannot access Driver: Input/output error > ls: cannot access HighPoint RAID Management Software: Input/output error > ls: cannot access Manual: Input/output error > total 248 > -rwxr--r-- 1 root lrhorer 245760 Nov 20 2008 autorun.exe > -rwxr--r-- 1 root lrhorer 51 Mar 21 2001 autorun.inf > ?????????? ? ? ? ? ? BIOS > ?????????? ? ? ? ? ? Driver > ?????????? ? ? ? ? ? HighPoint RAID Management > Software > ?????????? ? ? ? ? ? Manual > -rwxr--r-- 1 root lrhorer 1134 Feb 5 2012 readme.txt > > So now, what? > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From dindinwon@yahoo.com Tue Jul 28 07:39:57 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=FORGED_YAHOO_RCVD, FREEMAIL_FROM autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D7E207FFE for ; Tue, 28 Jul 2015 07:39:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C1C478F8033 for ; Tue, 28 Jul 2015 05:39:53 -0700 (PDT) X-ASG-Debug-ID: 1438087191-04cbb06a6714dda0001-NocioJ Received: from lun.bwww.net (lun.bwww.net [208.94.244.17]) by cuda.sgi.com with ESMTP id ovUyt38uZf5GkHwF for ; Tue, 28 Jul 2015 05:39:52 -0700 (PDT) X-Barracuda-Envelope-From: dindinwon@yahoo.com X-Barracuda-Apparent-Source-IP: 208.94.244.17 To: xfs@oss.sgi.com Subject: Cooperation Message-ID: <55c694e9d5b79592a3201295ffd29e68@cigarcitybrewing.com> X-ASG-Orig-Subj: Cooperation Date: Tue, 28 Jul 2015 14:40:05 +0200 From: "Joe" Reply-To: lseinjin@aliyun.com MIME-Version: 1.0 X-Mailer-LID: 3 X-Mailer-RecptId: 4686092 X-Mailer-SID: 702 X-Mailer-Sent-By: 1 Content-Type: text/plain; format=flowed; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Barracuda-Connect: lun.bwww.net[208.94.244.17] X-Barracuda-Start-Time: 1438087191 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.41 X-Barracuda-Spam-Status: No, SCORE=1.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=FORGED_YAHOO_RCVD, FORGED_YAHOO_RCVD_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21152 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 FORGED_YAHOO_RCVD 'From' yahoo.com does not match 'Received' headers 1.41 FORGED_YAHOO_RCVD_2 'From' yahoo.com does not match 'Received' headers Hi, I understand you are no doubt very busy; however, I°Øm just following up on the previous email I sent you. We offer email marketing and we can generate you more business sales and leads. I also want to discuss long-term strategy if you are interested. Please reply today so we can go over options for you. Thanks, Joe Email: quniyyo@sina.com From bfoster@redhat.com Tue Jul 28 08:40:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E33517FF7 for ; Tue, 28 Jul 2015 08:40:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 639EDAC006 for ; Tue, 28 Jul 2015 06:40:10 -0700 (PDT) X-ASG-Debug-ID: 1438090808-04cbb06a69151400001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id wFDuctEFlK2TNH30 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 28 Jul 2015 06:40:09 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 430B38C1CF; Tue, 28 Jul 2015 13:40:08 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6SDe7Ea012437; Tue, 28 Jul 2015 09:40:07 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 8E7A3122E55; Tue, 28 Jul 2015 09:40:06 -0400 (EDT) Date: Tue, 28 Jul 2015 09:40:06 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Message-ID: <20150728134006.GD38784@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() References: <1437682410-51778-3-git-send-email-bfoster@redhat.com> <1437682410-51778-2-git-send-email-bfoster@redhat.com> <20150728004009.GB24249@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150728004009.GB24249@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1438090808 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 28, 2015 at 10:40:09AM +1000, Dave Chinner wrote: > [ reply to both patches in one reply, because it's related. ] > > On Thu, Jul 23, 2015 at 04:13:29PM -0400, Brian Foster wrote: > > Some callers need to make error handling decisions based on whether the > > current transaction successfully committed or not. Rename > > xfs_trans_roll(), add a new parameter and provide a wrapper to preserve > > existing callers. > > > > Signed-off-by: Brian Foster > > --- > > fs/xfs/xfs_trans.c | 15 +++++++++++++-- > > fs/xfs/xfs_trans.h | 1 + > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > > index 0582a27..a0ab1da 100644 > > --- a/fs/xfs/xfs_trans.c > > +++ b/fs/xfs/xfs_trans.c > > @@ -1019,9 +1019,10 @@ xfs_trans_cancel( > > * chunk we've been working on and get a new transaction to continue. > > */ > > int > > -xfs_trans_roll( > > +__xfs_trans_roll( > > struct xfs_trans **tpp, > > - struct xfs_inode *dp) > > + struct xfs_inode *dp, > > + int *committed) > > { > > struct xfs_trans *trans; > > struct xfs_trans_res tres; > > @@ -1052,6 +1053,7 @@ xfs_trans_roll( > > if (error) > > return error; > > So here we return committed = 0, error != 0. > > > > > + *committed = 1; > > trans = *tpp; > > And from here on in we return committed = 1 regardless of the error. > > So looking at the next patch in xfs_bmap_finish(): > > > free->xbfi_blockcount); > > > > - error = xfs_trans_roll(tp, NULL); > > - *committed = 1; > > + error = __xfs_trans_roll(tp, NULL, committed); > > + > > /* > > - * We have a new transaction, so we should return committed=1, > > - * even though we're returning an error. > > + * We have a new transaction, so we should return committed=1, even > > + * though we're returning an error. If an error was returned after the > > + * original transaction was committed, defer the error handling until > > + * the EFD is logged. We do this because a committed EFI requires an EFD > > + * transaction to be processed to ensure the EFI is released. > > */ > > - if (error) > > + if (error && *committed == 0) { > > + *committed = 1; > > return error; > > + } > > So if we failed to commit the EFI, we say we did and then return. > Why do we need to do that? > > /me goes an looks at all the callers. > > Hmm - only xfs_itruncate_extents() relies on that behaviour, but it > could just as easily do an inode join on error, because on success > the inode has already been joined to the new transaction by > xfs_trans_roll(). > Interesting, though I don't follow why this caller even depends on it. It doesn't transfer lock ownership to the transaction. What difference does it make in the error path if the inode is joined? > Looking further, we have quite a bit of inconsistency in the error > handling of xfs_bmap_finish() - some callers issue a > xfs_bmap_cancel() in the error path, and some don't. failing to > cancel the freelist on error looks to me like a memory leak, because > we don't free the extents from the free list until the EFD for the > extent has been logged. If we error out earlier, we still have items > on the free list that haven't been processed. > > So it looks to me like we need fixes there. > Heh, not too surprising. I'll make a note to make a pass through these. > Further, it appears to me that there is really one xfs_bmap_finish() > caller that requires the committed flag: xfs_qm_dqalloc(). All the > others either use it for an assert or joining the inode to the > transaction when committed = 1, which xfs_trans_roll() will have > already done if we return committed = 1.... > Assuming xfs_trans_reserve() hasn't failed, which could cause *committed == 1 without the inode joined. We could probably change this in __xfs_trans_roll() since the inode is presumably already locked. > > So xfs_qm_dqalloc(), on error, simply cancels the freelist and > returns the error - it ignores the committed flag. So the committed > flag is used to determine how to handle the dquot buffer: > > xfs_trans_bhold(tp, bp); > > if ((error = xfs_bmap_finish(tpp, &flist, &committed))) { > goto error1; > } > > if (committed) { > tp = *tpp; > xfs_trans_bjoin(tp, bp); > } else { > xfs_trans_bhold_release(tp, bp); > } > > Now, xfs_trans_bhold() simply sets the BLI_HOLD flag on the buffer, > and transaction commit clears it. That means we could call it > unconditionally, and all we have to do is remove an assert(BLI_HOLD) > from xfs_trans_bhold_release() to enable that. Given this is the > only caller of xfs_trans_bhold_release(), I don't see a problem with > doing that. Nor is there a problem with multiple joins of an object > to a transaction, so we could simply make this: > > xfs_trans_bhold(tp, bp); > error = xfs_bmap_finish(tpp, &flist, &committed); > if (error) > goto error1; > tp = *tpp; > xfs_trans_bjoin(tp, bp); > xfs_trans_bhold_release(tp, bp); > > And the committed flag is not necessary. With this, we can hide > everything to do with error on commit vs error after commit inside > xfs_bmap_finish()... > Seems reasonable at a glance. > > efd = xfs_trans_get_efd(*tp, efi, flist->xbf_count); > > for (free = flist->xbf_first; free != NULL; free = next) { > > next = free->xbfi_next; > > - if ((error = xfs_free_extent(*tp, free->xbfi_startblock, > > - free->xbfi_blockcount))) { > > + > > + /* > > + * Free the extent if the above trans roll hasn't failed and log > > + * the EFD before handling errors from either call to ensure the > > + * EFI reference is accounted for in the tp. Otherwise, the EFI > > + * is never released on abort and pins the AIL indefinitely. > > + */ > > + if (!error) > > + error = xfs_free_extent(*tp, free->xbfi_startblock, > > + free->xbfi_blockcount); > > + xfs_trans_log_efd_extent(*tp, efd, free->xbfi_startblock, > > + free->xbfi_blockcount); > > + if (error) { > > /* > > * The bmap free list will be cleaned up at a > > * higher level. The EFI will be canceled when > > @@ -118,11 +134,10 @@ xfs_bmap_finish( > > SHUTDOWN_META_IO_ERROR); > > return error; > > } > > - xfs_trans_log_efd_extent(*tp, efd, free->xbfi_startblock, > > - free->xbfi_blockcount); > > xfs_bmap_del_free(flist, NULL, free); > > } > > - return 0; > > + > > + return error; > > This loop doesn't obviously do the right thing now. It > will log the first extent into the EFD and then trigger a shutdown > and return. The extent count in the EFD may not match the > extent count on the EFI, so releasing the EFD at this point may not > release all the extents in the EFI and hence not release the EFI. > The EFD unlock handler forcibly releases the EFI on abort. It drops the EFI extent count reference by whatever the extent count on the EFD is, and that is determined on EFD initialization (xfs_trans_get_efd()) regardless of how many extents were logged to the EFD. That said, the error handling here is certainly not obvious because it depends on the lifecycle of the associated log items. The broader goal is to reduce that dependency so the code here is more straightforward... > I think I'd prefer to see a xfs_trans_cancel_efi() call to handle > this error path rather than having to go through the efd to release > the reference on the EFI. i.e. > > error = __xfs_trans_roll(tp, NULL, &committed); > if (error) { > if (committed) { > if (!XFS_FORCED_SHUTDOWN(mp)) > xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); > xfs_efi_cancel(tp, efi); > } > return error; > } > That's a nice idea. It pulls some error handling out of the log item handling code explicitly. An EFD version might be useful for the unlogged EFD error case as well. IMO, the more of these cases that are handled explicitly in xfs_bmap_finish() rather than implicitly via the transaction management code, the more reliable and robust to future change it will be. I'll explore it further... > /* > * Cancel a committed EFI after triggering a shutdown. We need to do > * this so that the committed EFI is removed from the AIL and freed, > * otherwise unmount will hang due to a non-empty AIL. > */ > xfs_efi_cancel() > { > ASSERT(XFS_FORCED_SHUTDOWN(mp)); > xfs_efi_release(efi, efi->nextents); > } > > Doing this means there's less complexity on the EFD abort side of > things, as we don't have to now handle this failure case via > transaction completion callback interface. > Indeed. > Hmmm - something I just noticed: if we only have one EFD per EFI, > why do we do we have that layer of extent counting before dropping > real references? > I wondered this myself, but hadn't made it deep enough to see if we used the reference count elsewhere. > > xfs_efd_item_unlock( > > struct xfs_log_item *lip) > > { > > - if (lip->li_flags & XFS_LI_ABORTED) > > - xfs_efd_item_free(EFD_ITEM(lip)); > > + struct xfs_efd_log_item *efdp = EFD_ITEM(lip); > > + > > + if (lip->li_flags & XFS_LI_ABORTED) { > > + xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); > > + xfs_efd_item_free(efdp); > > + } > > } > > i.e. we always call xfs_efi_release() with efi_nextents or > efd_nextents, which are always the same, and so we never partially > complete an EFI. Should we just kill that layer, as it does tend to > complicate the EFI release code? > Yeah, that might be a good idea if we don't use the reference count elsewhere. I'll look into that as a subsequent cleanup as well. Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Jul 28 09:09:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id ADD027FFA for ; Tue, 28 Jul 2015 09:09:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2DE61AC006 for ; Tue, 28 Jul 2015 07:09:01 -0700 (PDT) X-ASG-Debug-ID: 1438092539-04cbb06a70152ef0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id AqoFaVGWMMXTBqjk (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 28 Jul 2015 07:08:59 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 2E828A4A1D; Tue, 28 Jul 2015 14:08:59 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6SE8wpZ002100; Tue, 28 Jul 2015 10:08:58 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 6A9BE122E55; Tue, 28 Jul 2015 10:08:57 -0400 (EDT) Date: Tue, 28 Jul 2015 10:08:57 -0400 From: Brian Foster To: Marc Lehmann Cc: xfs@oss.sgi.com Subject: Re: FYI: questionable xfsdump code Message-ID: <20150728140857.GE38784@bfoster.bfoster> X-ASG-Orig-Subj: Re: FYI: questionable xfsdump code References: <20150728063246.GA2510@schmorp.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150728063246.GA2510@schmorp.de> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1438092539 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 28, 2015 at 08:33:33AM +0200, Marc Lehmann wrote: > Hi! > > While causally browsing xfsdump code,I found this, in > common/getdents.c:getdents_wrap (in xfsdump > > off64_t last_offset = -1; > > ... > > while ((char *)kdp < kbuf + retval) { > ... > > if ((sizeof(dp->d_ino) != sizeof(kdp->d_ino)) > || (sizeof(dp->d_off) != sizeof(kdp->d_off))) { > /* Overflow. If there was at least one entry > before this one, return them without error, > otherwise signal overflow. */ > if (last_offset != -1) { > lseek64(fd, last_offset, SEEK_SET); > return (char *)dp - buf; > } > errno = EOVERFLOW; > return -1; > } > > last_offset = d_off; > > ... > } > > While not necessarily a bug, this comment is very confused - there is no > way to reach the code inside the if with last_offset != -1, as the if > condition is a compiletime constant. > It looks like this changed in: b1d6979f remove ancient sys_getdents code paths It used to look like this: if ((sizeof (dp->d_ino) != sizeof (kdp->d_ino) && dp->d_ino != d_ino) || (sizeof (dp->d_off) != sizeof (kdp->d_off) && dp->d_off != d_off)) { ... } ... which probably made more sense. Brian > This might be harmless dead code from some refactorisation gone wrong, > or indicative of some bug due to some logic error. In any case, I just > wanted to bring it to your attention. > > And as a side note, memcpy would be more efficient here, especially as it > is called very often, (and especially so on irix :-): > > memmove(dp->d_name, kdp->d_name, > old_reclen - offsetof(struct kernel_dirent64, d_name)); > > -- > The choice of a Deliantra, the free code+content MORPG > -----==- _GNU_ http://www.deliantra.net > ----==-- _ generation > ---==---(_)__ __ ____ __ Marc Lehmann > --==---/ / _ \/ // /\ \/ / schmorp@schmorp.de > -=====/_/_//_/\_,_/ /_/\_\ > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From lrhorer@mygrande.net Tue Jul 28 10:13:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 337697FF3 for ; Tue, 28 Jul 2015 10:13:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id F33D7304066 for ; Tue, 28 Jul 2015 08:13:09 -0700 (PDT) X-ASG-Debug-ID: 1438096387-04bdf00230f2590001-NocioJ Received: from mail02.lsn.net (mail02.lsn.net [66.90.130.128]) by cuda.sgi.com with ESMTP id cdFSWSNUxhbvnysC for ; Tue, 28 Jul 2015 08:13:07 -0700 (PDT) X-Barracuda-Envelope-From: lrhorer@mygrande.net X-Barracuda-Apparent-Source-IP: 66.90.130.128 Received: from [192.168.1.121] (66-90-232-145.dyn.grandenetworks.net [66.90.232.145]) (authenticated bits=0) by mail02.lsn.net (8.14.4/8.13.6) with ESMTP id t6SFD0qk012336 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Tue, 28 Jul 2015 10:13:01 -0500 X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.98.4 at av02.lsn.net Message-ID: <55B79BFD.6020509@mygrande.net> Date: Tue, 28 Jul 2015 10:13:01 -0500 From: Leslie Rhorer User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Brian Foster CC: Eric Sandeen , Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> <20150728123307.GC38784@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <20150728123307.GC38784@bfoster.bfoster> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: mail02.lsn.net[66.90.130.128] X-Barracuda-Start-Time: 1438096387 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21156 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/28/2015 7:33 AM, Brian Foster wrote: > On Tue, Jul 28, 2015 at 02:46:45AM -0500, Leslie Rhorer wrote: >> On 7/20/2015 6:17 AM, Brian Foster wrote: >>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: >>>> >>>> I found the problem with md5sum (and probably nfs, as well). One of the >>>> memory modules in the server was bad. The problem with XFS persists. Every >>>> time tar tried to create the directory: >>>> >>>> /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/i386-11.1 >>>> >>>> It would begin spitting out errors, starting with "Cannot mkdir: Structure >>>> needs cleaning". At that point, XFS had shut down. I went into >>>> /RAID/Server-Main/Equipment/Drive Controllers/HighPoint Adapters/Rocket >>>> 2722/Driver/RR276x/Driver/Linux/openSUSE/rr276x-suse-11.2-i386/linux/suse/ >>>> and created the i386-11.1 directory by hand, and tar no longer starts >>>> spitting out errors at that point, but it does start up again at >>>> RR2782/Windows/Vista-Win2008-Win7-legacy_single/x64. >>>> >>> >>> So is this untar problem a reliable reproducer? If so, here's what I >> >> The processes I was running this weekend ran longer than expected, and in >> fact were still running just a couple of hours ago. I was doing an rsync >> with CRC check from the backup system to the one with the problem. There >> were a few corrupt files, but not a huge number. Although slower than I >> hoped, everything was running fine until a short time ago, when rsync >> encountered the very same issue I keep having with tar, which is to say it >> tried to create a directory and the file system crashed with precisely the >> same symptoms as when tar was failing. >> >>> would try to hopefully isolate a filesystem problem from something >>> underneath: >>> >>> xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump >>> xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img >>> mount /.../fileonrootfs.img /mnt/ >> >> I tried to do the xfs_mdrestore to the root file system, but it fails: >> >> RAID-Server:/TEST# xfs_mdrestore -g md0.metadump RAIDfile.img >> xfs_mdrestore: cannot set filesystem image size: File too large >> > > Hmm, I guess the file size exceeds the capabilities of the root fs, even > if there might ultimately be enough space to restore the metadump. I wouldn't think so, at least not fundamentally. It's ext4. It's certainly not big enough to hold an 18T file system, though, and perhaps that is what xfs_restore is checking. >> So then I did the same thing to a directory on an nfs mount from another >> machine. That worked. I then went to the other machine, mounted the image >> on /media, copied the tarball to the location on the mount where the tarball >> resides on the real array, dn ran the tar job. It completed without errors. >> > > That's interesting. It tells us the fs apparently isn't fundamentally > broken, but the separate machine potentially introduces a different > kernel. Is that the case here? What else is different between these > systems? Not much. Both are running kernel 3.0.16-4. Both have 24T mdadm RAID Arrays with similar properties (there may be some differences in chunk size, etc). Right now both have the same motherboard and the same drive controllers. All 16 drives reside in a single RAID chassis. >> I then created the image on the array where the tasks are failing and >> attempted to mount it to /media on the problematic machine. That fails >> with: >> >> RAID-Server:/TEST# mount /RAID/TEST/RAIDfile.img /media/ >> mount: wrong fs type, bad option, bad superblock on /dev/loop0, >> missing codepage or helper program, or other error >> >> In some cases useful info is found in syslog - try >> dmesg | tail or so. >> >> The problem is this (from syslog): >> Jul 28 01:53:48 RAID-Server kernel: [431155.847523] loop: module loaded >> Jul 28 01:53:48 RAID-Server kernel: [431155.927238] XFS (loop0): Filesystem >> has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount >> Jul 28 01:55:51 RAID-Server kernel: [431278.916490] XFS (loop0): Filesystem >> has duplicate UUID 228cfaa7-ae6b-44fc-b703-1c32385231c0 - can't mount >> >> Presumably it has the same UUID as the RAID array because it is expected to >> do so. I can't mount it unless I umount the RAID array, but if I do that, I >> can't get to the file to mount the dump image, since it is on the array. >> > > Ok, somebody already replied with how to get around this. That said, it > sounds like you've restored the metadump to an image file on the > problematic fs. I had no other option. I suppose I could attach an external drive and restore to it. I'll try that tonight, but if xfs_restore refuses to write to a volume whose raw storage capacity is less than the putative size of the original image, then that is also likely to fail. I don't have a way to create another 24T storage system at hand. > I'm not sure how useful a test that is since we're > testing on the same hardware. I suppose it could be interesting if the > storage hardware is similar with the alternate machine referenced above. Almost identical. The alternate machine serves as a backup system with the data on the arrays synchronized by rsync every morning. The ailing system runs more services than the backup, and the backup runs a couple the primary does not, but otherwise they are nearly mirrors of each other. The hardware is identical. > For example, if you restore here and the test does not fail, the test on > the separate machine is probably less informative. > >> I then copied both the tarball and the image over to the root, and while >> the system would not let me create the image on the root, it did let me copy >> the image to the root. I then umounted the RAID array, mounted the image, >> and attempted to cd to the original directory in the image mount where the >> tarball was saved. That failed with an I/O error: >> > > It sounds a bit strange for the mdrestore to fail on root but a cp of > the resulting image to work. Do the resulting images have the same file > size or is the rootfs copy truncated? If the latter, you could be > missing part of the fs and thus any of the following tests are probably > moot. Well, it can't be as large as it is reported, let's put it that way, although the reported file size is the same. Ls claims it to be 16T in size, which cannot be the case on a 100G partition. I forgot to mention cp does complain: RAID-Server:/# cp /RAID/TEST/RAIDfile.img ./ cp: cannot lseek ‘./RAIDfile.img’: Invalid argument But it does the same thing on the backup server, and it works there. I tried a cmp, and it seems to be hung. It just may be taking a long time, however. > Brian > >> RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint >> Adapters/Rocket 2722/Driver/" >> bash: cd: /media/Server-Main/Equipment/Drive Controllers/HighPoint >> Adapters/Rocket 2722/Driver/: Input/output error >> >> I changed directories to a point two directories above the previous attempt >> and did a long listing: >> >> RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint >> Adapters" >> RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint >> Adapters# ll >> ls: cannot access RocketRAID 2722: Input/output error >> total 4 >> drwxr-xr-x 6 root lrhorer 4096 Jul 18 19:26 Rocket 2722 >> ?????????? ? ? ? ? ? RocketRAID 2722 >> >> As you can see, Rocket 2722 is still there, but RocketRAID 2722 is very >> sick. Rocket 2722 is the parent of where the tarbal was, however, so I did >> a cd and an ll again: >> >> RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint >> Adapters# cd "Rocket 2722"/ >> RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint >> Adapters/Rocket 2722# ll >> ls: cannot access BIOS: Input/output error >> ls: cannot access Driver: Input/output error >> ls: cannot access HighPoint RAID Management Software: Input/output error >> ls: cannot access Manual: Input/output error >> total 248 >> -rwxr--r-- 1 root lrhorer 245760 Nov 20 2008 autorun.exe >> -rwxr--r-- 1 root lrhorer 51 Mar 21 2001 autorun.inf >> ?????????? ? ? ? ? ? BIOS >> ?????????? ? ? ? ? ? Driver >> ?????????? ? ? ? ? ? HighPoint RAID Management >> Software >> ?????????? ? ? ? ? ? Manual >> -rwxr--r-- 1 root lrhorer 1134 Feb 5 2012 readme.txt >> >> So now, what? >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Jul 28 11:53:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id CEABB7F6B for ; Tue, 28 Jul 2015 11:53:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id AC7728F8050 for ; Tue, 28 Jul 2015 09:53:40 -0700 (PDT) X-ASG-Debug-ID: 1438102415-04cb6c02c71150c0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 6AlCJ3e4ZG6DV0vg for ; Tue, 28 Jul 2015 09:53:35 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from Liberator.local (68-116-101-110.static.sltn.or.charter.com [68.116.101.110]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id B422763CBCF9; Tue, 28 Jul 2015 11:53:33 -0500 (CDT) Message-ID: <55B7B390.1050206@sandeen.net> Date: Tue, 28 Jul 2015 09:53:36 -0700 From: Eric Sandeen MIME-Version: 1.0 To: Leslie Rhorer , Brian Foster CC: Kris Rusocki , "Rhorer, Leslie" , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> <20150728123307.GC38784@bfoster.bfoster> <55B79BFD.6020509@mygrande.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55B79BFD.6020509@mygrande.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1438102415 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21158 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 7/28/15 8:13 AM, Leslie Rhorer wrote: > On 7/28/2015 7:33 AM, Brian Foster wrote: >> On Tue, Jul 28, 2015 at 02:46:45AM -0500, Leslie Rhorer wrote: >>> On 7/20/2015 6:17 AM, Brian Foster wrote: >>>> On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: ... >>>> would try to hopefully isolate a filesystem problem from something >>>> underneath: >>>> >>>> xfs_metadump -go /dev/md0 /somewhere/on/rootfs/md0.metadump >>>> xfs_mdrestore -g /somewhere/on/rootfs/md0.metadump /.../fileonrootfs.img >>>> mount /.../fileonrootfs.img /mnt/ >>> >>> I tried to do the xfs_mdrestore to the root file system, but it fails: >>> >>> RAID-Server:/TEST# xfs_mdrestore -g md0.metadump RAIDfile.img >>> xfs_mdrestore: cannot set filesystem image size: File too large >>> >> >> Hmm, I guess the file size exceeds the capabilities of the root fs, even >> if there might ultimately be enough space to restore the metadump. > > I wouldn't think so, at least not fundamentally. It's ext4. It's > certainly not big enough to hold an 18T file system, though, and > perhaps that is what xfs_restore is checking. No, it's just failing to write any data at an 18T offset. The ext4 filesystem (with 4k blocks) is limited to a 16T maximum file offset; you won't be able to restore a (sparse) 18T filesystem image onto an ext4 filesystem. -Eric From mp6058@gmail.com Tue Jul 28 14:12:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E11AD7F9E for ; Tue, 28 Jul 2015 14:12:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 63520AC006 for ; Tue, 28 Jul 2015 12:12:36 -0700 (PDT) X-ASG-Debug-ID: 1438110754-04cbb06a691603c0001-NocioJ Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) by cuda.sgi.com with ESMTP id hZLM4HccARl3J7mB (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 28 Jul 2015 12:12:34 -0700 (PDT) X-Barracuda-Envelope-From: mp6058@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.174 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.174] Received: by wibxm9 with SMTP id xm9so170726250wib.0 for ; Tue, 28 Jul 2015 12:12:33 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.174] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.174] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=Z4MWUBgVcHZbPyF4JWlEO/8bDzUA1HUh77hiUEJ01TU=; b=yaaBMtl7NFvQ0IgjyhWI6JjRgblef4s9/tkqBBI1Sk1r3J3d7i6MbXCU5yq82HLix+ wVjIbzSELyvuU997STkz+kxDPA1DFxtfQN/D60dJDScpXG8sNt2GBahSlUE4FBmh6bny kog72vuTVH+dpZpfbyQ6ZVGGnX7He7encONOl6Vx+UQ3cnshS5h8M96VAHr63i3MvX/d RTCuP0PR6fQPPIvCfP6gEmKzqCc4GrjvhUerOkTHbWOkn9Cd+Db/TJ9CqsKNTIet13/A gu0IFIFBAZWPWYcpjuwQd9/Sdr0T+LOvmjFKIZEoVU9sZfGSxyAEj898DtWb77BOXNoZ OmHg== X-Received: by 10.194.48.108 with SMTP id k12mr73402656wjn.151.1438110753661; Tue, 28 Jul 2015 12:12:33 -0700 (PDT) Received: from [192.168.1.16] ([94.76.9.49]) by smtp.googlemail.com with ESMTPSA id pn6sm34645743wjb.36.2015.07.28.12.12.20 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jul 2015 12:12:32 -0700 (PDT) Message-ID: <55B7D400.50202@gmail.com> Date: Tue, 28 Jul 2015 22:12:00 +0300 From: Martin Papik User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> <20150728123307.GC38784@bfoster.bfoster> <55B79BFD.6020509@mygrande.net> <55B7B390.1050206@sandeen.net> X-ASG-Orig-Subj: Re: XFS File system in trouble In-Reply-To: <55B7B390.1050206@sandeen.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: mail-wi0-f174.google.com[209.85.212.174] X-Barracuda-Start-Time: 1438110754 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21163 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 How about this? qemu-img create -f qcow2 test 32T qemu-nbd -c /dev/nbd0 test xfs_mdrestore -g md0.metadump /dev/nbd0 >>> >>> Hmm, I guess the file size exceeds the capabilities of the root >>> fs, even if there might ultimately be enough space to restore >>> the metadump. >> >> I wouldn't think so, at least not fundamentally. It's ext4. It's >> certainly not big enough to hold an 18T file system, though, and >> perhaps that is what xfs_restore is checking. > > No, it's just failing to write any data at an 18T offset. > > The ext4 filesystem (with 4k blocks) is limited to a 16T maximum > file offset; you won't be able to restore a (sparse) 18T > filesystem image onto an ext4 filesystem. >> >> RAID-Server:/TEST# xfs_mdrestore -g md0.metadump RAIDfile.img >> xfs_mdrestore: cannot set filesystem image size: File too large >> > > Hmm, I guess the file size exceeds the capabilities of the root fs, > even if there might ultimately be enough space to restore the > metadump. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCgAGBQJVt9P3AAoJELsEaSRwbVYryxEP/1WDJUO15CA35VW/JE13gp/U qIXsc8tS3ZKds/at1boPAw2/X4HYclfuhV9heYi+npzF/0pimqTY7MkjxVN3JUHf r2pOZSL0r0YqPw0Wc17sFOY5y1F7AzHS9vIUIMpYTW5A0CasQDUCuetfhlawNWLR ijjmXWnLivPo7tsIOC7WMl9wmf3kO9P/2wN0aR5oUmtcdn4sPiqPHYv1e6UpiYkr Qv1M1NtX9rryLQZyWWtHQQGj+3IFyMIT6NszQ8mOPw8ijJTxMlVb5rxyP4I5uzZw r0KkIWxfU558I/eGHaVHlsWBpaqM5JbiZzQDkh03vCIyZNi5tnwDKl0i2wRsM6m/ N7VvUSwDHOvoxpQtE3KYVcOqlyGXS/S2N6wSBDQ5LqSQDS8JRJYt2wjnaSNG2ib7 ddLlfkGhkM4IDpWjn0HvupDY9jhcKDxEpZ8t73tQLSaq705GYMcYxOmplzM6Iu3E it7oiCM/p76p5NF5BLqoj1zU/XFKgpadcTOkL6vNjVvDzjhVO/RL8lS7yI8dbHuk t44SN5jCX+OmawxveAaXs1BSySCgOEK/kZuYYNvrIZq0W3ZoeLJKNFUtuOr24Kwn HY8/GyRxG9Kg4+KoUvV6skZw+/RjEgDGJ17vVHc23qVfSraJftXjiE42Hp2BI4NK RHVCtUzI+6fK7xL2Ex06 =Oqcp -----END PGP SIGNATURE----- From martin@lichtvoll.de Tue Jul 28 14:52:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8E89E7F9E for ; Tue, 28 Jul 2015 14:52:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 26D77AC008 for ; Tue, 28 Jul 2015 12:52:48 -0700 (PDT) X-ASG-Debug-ID: 1438113166-04bdf00230fbd40001-NocioJ Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id dmVqcCHRsnUaEUkN for ; Tue, 28 Jul 2015 12:52:47 -0700 (PDT) X-Barracuda-Envelope-From: martin@lichtvoll.de X-Barracuda-Apparent-Source-IP: 194.150.191.11 Received: from merkaba.localnet (ppp-212-114-181-12.dynamic.mnet-online.de [212.114.181.12]) by mail.lichtvoll.de (Postfix) with ESMTPSA id 328EF199; Tue, 28 Jul 2015 21:52:46 +0200 (CEST) From: Martin Steigerwald To: xfs@oss.sgi.com Cc: Martin Papik Subject: Re: XFS File system in trouble Date: Tue, 28 Jul 2015 21:52:45 +0200 X-ASG-Orig-Subj: Re: XFS File system in trouble Message-ID: <1632167.gHuGj7l2Oo@merkaba> User-Agent: KMail/4.14.5 (Linux/4.2.0-rc3-tp520-btrfstrim+; KDE/4.14.2; x86_64; ; ) In-Reply-To: <55B7D400.50202@gmail.com> References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55B7B390.1050206@sandeen.net> <55B7D400.50202@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1438113167 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21164 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Am Dienstag, 28. Juli 2015, 22:12:00 schrieb Martin Papik: > >>> Hmm, I guess the file size exceeds the capabilities of the root > >>> fs, even if there might ultimately be enough space to restore > >>> the metadump. > >> > >> I wouldn't think so, at least not fundamentally. It's ext4. It's > >> certainly not big enough to hold an 18T file system, though, and > >> perhaps that is what xfs_restore is checking. > > > > No, it's just failing to write any data at an 18T offset. > > > > The ext4 filesystem (with 4k blocks) is limited to a 16T maximum > > file offset; you won't be able to restore a (sparse) 18T > > filesystem image onto an ext4 filesystem. > How about this? > > qemu-img create -f qcow2 test 32T > qemu-nbd -c /dev/nbd0 test > xfs_mdrestore -g md0.metadump /dev/nbd0 I used an XFS filesystem with truncate command to create an 1 EiB XFS filesystem in a sparse file for testing a year or two ago. It took about 18 GiB for writing metadata and journal at mkfs.xfs time. With df -h you get "1E" and with df without option you get an really large number :) Thanks, -- Martin From unenlightened@list.ru Tue Jul 28 16:20:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.5 required=5.0 tests=PHP_NOVER_MUA autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BB6D87F6A for ; Tue, 28 Jul 2015 16:20:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 48D2BAC005 for ; Tue, 28 Jul 2015 14:20:48 -0700 (PDT) X-ASG-Debug-ID: 1438118445-04cb6c02c511c0b0001-NocioJ Received: from [217.201.52.136] ([217.201.52.136]) by cuda.sgi.com with ESMTP id WcpoM4HPrADpU7tW for ; Tue, 28 Jul 2015 14:20:46 -0700 (PDT) X-Barracuda-Envelope-From: unenlightened@list.ru X-Barracuda-Apparent-Source-IP: 217.201.52.136 Received: from apache by list.ru with local (Exim 4.67) (envelope-from ) id 0TQ8S0-XFRJQH-51 for ; Tue, 28 Jul 2015 22:18:44 +0100 To: Subject: =?koi8-r?B?6d3VINLBws/U1SDXIPfP09TP3s7PzSDPy9LVx8U=?= X-PHP-Script: list.ru/sendmail.php for 217.201.52.136 X-ASG-Orig-Subj: =?koi8-r?B?6d3VINLBws/U1SDXIPfP09TP3s7PzSDPy9LVx8U=?= From: =?koi8-r?B?88XSx8XKIChzZW8gz9DUyc3J2sHUz9Ip?= X-Sender: =?koi8-r?B?88XSx8XKIChzZW8gz9DUyc3J2sHUz9Ip?= X-Mailer: PHP X-Priority: 1 Content-Type: text/plain; charset="koi8-r" Message-Id: Date: Tue, 28 Jul 2015 22:18:44 +0100 X-Barracuda-Connect: UNKNOWN[217.201.52.136] X-Barracuda-Start-Time: 1438118445 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21165 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 ! , seo . . : - ; - ; - ; - ; - ; - -. , : . , . : 8 925 876 56 13 , . From david@fromorbit.com Tue Jul 28 16:52:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 49D4A7F8B for ; Tue, 28 Jul 2015 16:52:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3504B8F8033 for ; Tue, 28 Jul 2015 14:52:12 -0700 (PDT) X-ASG-Debug-ID: 1438120328-04cb6c02c511cd60001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id ey3YQFzTL3HEl7OI for ; Tue, 28 Jul 2015 14:52:09 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DOCgAk+bdVPG0mLHlTCIMVgT2GUaJjAQEBAQEGmnUCAgEBAoFZTQEBAQEBAQcBAQEBQAE/hCMBAQEDAScTHCMQCAMOCgklDwUlAwcaCgmIJgfQAAEBAQEGAQEBAR4ZhgaFL4QwVweDGIEUBYcUhleEAIJ9jECOOopzgQqBKhyBZSwxgkwBAQE Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 29 Jul 2015 07:21:41 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKCmi-0003iv-Ta; Wed, 29 Jul 2015 07:51:40 +1000 Date: Wed, 29 Jul 2015 07:51:40 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Message-ID: <20150728215140.GC24249@dastard> X-ASG-Orig-Subj: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() References: <1437682410-51778-3-git-send-email-bfoster@redhat.com> <1437682410-51778-2-git-send-email-bfoster@redhat.com> <20150728004009.GB24249@dastard> <20150728134006.GD38784@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150728134006.GD38784@bfoster.bfoster> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438120328 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21165 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jul 28, 2015 at 09:40:06AM -0400, Brian Foster wrote: > On Tue, Jul 28, 2015 at 10:40:09AM +1000, Dave Chinner wrote: > > [ reply to both patches in one reply, because it's related. ] > > > > On Thu, Jul 23, 2015 at 04:13:29PM -0400, Brian Foster wrote: > > > Some callers need to make error handling decisions based on whether the > > > current transaction successfully committed or not. Rename > > > xfs_trans_roll(), add a new parameter and provide a wrapper to preserve > > > existing callers. > > > > > > Signed-off-by: Brian Foster > > > --- > > > fs/xfs/xfs_trans.c | 15 +++++++++++++-- > > > fs/xfs/xfs_trans.h | 1 + > > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > > > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > > > index 0582a27..a0ab1da 100644 > > > --- a/fs/xfs/xfs_trans.c > > > +++ b/fs/xfs/xfs_trans.c > > > @@ -1019,9 +1019,10 @@ xfs_trans_cancel( > > > * chunk we've been working on and get a new transaction to continue. > > > */ > > > int > > > -xfs_trans_roll( > > > +__xfs_trans_roll( > > > struct xfs_trans **tpp, > > > - struct xfs_inode *dp) > > > + struct xfs_inode *dp, > > > + int *committed) > > > { > > > struct xfs_trans *trans; > > > struct xfs_trans_res tres; > > > @@ -1052,6 +1053,7 @@ xfs_trans_roll( > > > if (error) > > > return error; > > > > So here we return committed = 0, error != 0. > > > > > > > > + *committed = 1; > > > trans = *tpp; > > > > And from here on in we return committed = 1 regardless of the error. > > > > So looking at the next patch in xfs_bmap_finish(): > > > > > free->xbfi_blockcount); > > > > > > - error = xfs_trans_roll(tp, NULL); > > > - *committed = 1; > > > + error = __xfs_trans_roll(tp, NULL, committed); > > > + > > > /* > > > - * We have a new transaction, so we should return committed=1, > > > - * even though we're returning an error. > > > + * We have a new transaction, so we should return committed=1, even > > > + * though we're returning an error. If an error was returned after the > > > + * original transaction was committed, defer the error handling until > > > + * the EFD is logged. We do this because a committed EFI requires an EFD > > > + * transaction to be processed to ensure the EFI is released. > > > */ > > > - if (error) > > > + if (error && *committed == 0) { > > > + *committed = 1; > > > return error; > > > + } > > > > So if we failed to commit the EFI, we say we did and then return. > > Why do we need to do that? > > > > /me goes an looks at all the callers. > > > > Hmm - only xfs_itruncate_extents() relies on that behaviour, but it > > could just as easily do an inode join on error, because on success > > the inode has already been joined to the new transaction by > > xfs_trans_roll(). > > > > Interesting, though I don't follow why this caller even depends on it. > It doesn't transfer lock ownership to the transaction. What difference > does it make in the error path if the inode is joined? Callers of xfs_itruncate_extents() expect it to be locked and joined on return, even on error. > > Looking further, we have quite a bit of inconsistency in the error > > handling of xfs_bmap_finish() - some callers issue a > > xfs_bmap_cancel() in the error path, and some don't. failing to > > cancel the freelist on error looks to me like a memory leak, because > > we don't free the extents from the free list until the EFD for the > > extent has been logged. If we error out earlier, we still have items > > on the free list that haven't been processed. > > > > So it looks to me like we need fixes there. > > > > Heh, not too surprising. I'll make a note to make a pass through these. > > > Further, it appears to me that there is really one xfs_bmap_finish() > > caller that requires the committed flag: xfs_qm_dqalloc(). All the > > others either use it for an assert or joining the inode to the > > transaction when committed = 1, which xfs_trans_roll() will have > > already done if we return committed = 1.... > > > > Assuming xfs_trans_reserve() hasn't failed, which could cause *committed > == 1 without the inode joined. We could probably change this in > __xfs_trans_roll() since the inode is presumably already locked. I don't think we can join the inode until after the reservation is done. It could still be done in __xfs_trans_roll() regardless. > > > + return error; > > > > This loop doesn't obviously do the right thing now. It > > will log the first extent into the EFD and then trigger a shutdown > > and return. The extent count in the EFD may not match the > > extent count on the EFI, so releasing the EFD at this point may not > > release all the extents in the EFI and hence not release the EFI. > > > > The EFD unlock handler forcibly releases the EFI on abort. It drops the > EFI extent count reference by whatever the extent count on the EFD is, > and that is determined on EFD initialization (xfs_trans_get_efd()) > regardless of how many extents were logged to the EFD. > > That said, the error handling here is certainly not obvious because it > depends on the lifecycle of the associated log items. The broader goal > is to reduce that dependency so the code here is more straightforward... *nod* > > I think I'd prefer to see a xfs_trans_cancel_efi() call to handle > > this error path rather than having to go through the efd to release > > the reference on the EFI. i.e. > > > > error = __xfs_trans_roll(tp, NULL, &committed); > > if (error) { > > if (committed) { > > if (!XFS_FORCED_SHUTDOWN(mp)) > > xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); > > xfs_efi_cancel(tp, efi); > > } > > return error; > > } > > > > That's a nice idea. It pulls some error handling out of the log item > handling code explicitly. An EFD version might be useful for the > unlogged EFD error case as well. IMO, the more of these cases that are > handled explicitly in xfs_bmap_finish() rather than implicitly via the > transaction management code, the more reliable and robust to future > change it will be. I'll explore it further... Yes, that mirrors my thinking exactly - the EFI/EFD error handling has always been problematic with the reliance on reference counting via transaction commit/abort callbacks to handle it. > > Hmmm - something I just noticed: if we only have one EFD per EFI, > > why do we do we have that layer of extent counting before dropping > > real references? > > > > I wondered this myself, but hadn't made it deep enough to see if we used > the reference count elsewhere. > > > > xfs_efd_item_unlock( > > > struct xfs_log_item *lip) > > > { > > > - if (lip->li_flags & XFS_LI_ABORTED) > > > - xfs_efd_item_free(EFD_ITEM(lip)); > > > + struct xfs_efd_log_item *efdp = EFD_ITEM(lip); > > > + > > > + if (lip->li_flags & XFS_LI_ABORTED) { > > > + xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); > > > + xfs_efd_item_free(efdp); > > > + } > > > } > > > > i.e. we always call xfs_efi_release() with efi_nextents or > > efd_nextents, which are always the same, and so we never partially > > complete an EFI. Should we just kill that layer, as it does tend to > > complicate the EFI release code? > > > > Yeah, that might be a good idea if we don't use the reference count > elsewhere. I'll look into that as a subsequent cleanup as well. Excellent! Cheers, Dave. -- Dave Chinner david@fromorbit.com From bfoster@redhat.com Tue Jul 28 17:11:59 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 829607F99 for ; Tue, 28 Jul 2015 17:11:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id F17ECAC002 for ; Tue, 28 Jul 2015 15:11:55 -0700 (PDT) X-ASG-Debug-ID: 1438121514-04cbb06a69166250001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id J75Vo2HigFNPEbeM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 28 Jul 2015 15:11:54 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id A09638E750; Tue, 28 Jul 2015 22:11:53 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6SMBqRn003128; Tue, 28 Jul 2015 18:11:53 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 0C2B0122E55; Tue, 28 Jul 2015 18:11:51 -0400 (EDT) Date: Tue, 28 Jul 2015 18:11:50 -0400 From: Brian Foster To: Leslie Rhorer Cc: "Rhorer, Leslie" , Kris Rusocki , Eric Sandeen , "xfs@oss.sgi.com" Subject: Re: XFS File system in trouble Message-ID: <20150728221150.GA26604@bfoster.bfoster> X-ASG-Orig-Subj: Re: XFS File system in trouble References: <03864DDC681E664EBF5D47682BE7D7CF0D3574DF@USADCWVEMBX07.corp.global.level3.com> <55AA5FCE.4080702@sandeen.net> <03864DDC681E664EBF5D47682BE7D7CF0D358740@USADCWVEMBX07.corp.global.level3.com> <55AAF73A.4040903@mygrande.net> <20150720111747.GA53450@bfoster.bfoster> <55B73365.1050908@mygrande.net> <20150728123307.GC38784@bfoster.bfoster> <55B79BFD.6020509@mygrande.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <55B79BFD.6020509@mygrande.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1438121514 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Jul 28, 2015 at 10:13:01AM -0500, Leslie Rhorer wrote: > On 7/28/2015 7:33 AM, Brian Foster wrote: > >On Tue, Jul 28, 2015 at 02:46:45AM -0500, Leslie Rhorer wrote: > >>On 7/20/2015 6:17 AM, Brian Foster wrote: > >>>On Sat, Jul 18, 2015 at 08:02:50PM -0500, Leslie Rhorer wrote: > >>>> ... > > > >> I then copied both the tarball and the image over to the root, and while > >>the system would not let me create the image on the root, it did let me copy > >>the image to the root. I then umounted the RAID array, mounted the image, > >>and attempted to cd to the original directory in the image mount where the > >>tarball was saved. That failed with an I/O error: > >> > > > >It sounds a bit strange for the mdrestore to fail on root but a cp of > >the resulting image to work. Do the resulting images have the same file > >size or is the rootfs copy truncated? If the latter, you could be > >missing part of the fs and thus any of the following tests are probably > >moot. > > Well, it can't be as large as it is reported, let's put it that way, > although the reported file size is the same. Ls claims it to be 16T in > size, which cannot be the case on a 100G partition. I forgot to mention cp > does complain: > > RAID-Server:/# cp /RAID/TEST/RAIDfile.img ./ > cp: cannot lseek ‘./RAIDfile.img’: Invalid argument > > But it does the same thing on the backup server, and it works there. I > tried a cmp, and it seems to be hung. It just may be taking a long time, > however. > Yeah, you can't really trust the resulting image. It doesn't take much space to create a very large sparse file, but different filesystems have different maximum file size limits. The problem here is that some metadata near the beginning of the file might reference or depend on something near the end, and I/Os beyond the end of the file will probably result in errors. I'd probably try the nouuid approach since the hardware is similar as well as some of the other interesting suggestions that have been made to try and get the image on the rootfs and see what happens there too. Brian > >Brian > > > >>RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint > >>Adapters/Rocket 2722/Driver/" > >>bash: cd: /media/Server-Main/Equipment/Drive Controllers/HighPoint > >>Adapters/Rocket 2722/Driver/: Input/output error > >> > >> I changed directories to a point two directories above the previous attempt > >>and did a long listing: > >> > >>RAID-Server:/# cd "/media/Server-Main/Equipment/Drive Controllers/HighPoint > >>Adapters" > >>RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint > >>Adapters# ll > >>ls: cannot access RocketRAID 2722: Input/output error > >>total 4 > >>drwxr-xr-x 6 root lrhorer 4096 Jul 18 19:26 Rocket 2722 > >>?????????? ? ? ? ? ? RocketRAID 2722 > >> > >> As you can see, Rocket 2722 is still there, but RocketRAID 2722 is very > >>sick. Rocket 2722 is the parent of where the tarbal was, however, so I did > >>a cd and an ll again: > >> > >>RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint > >>Adapters# cd "Rocket 2722"/ > >>RAID-Server:/media/Server-Main/Equipment/Drive Controllers/HighPoint > >>Adapters/Rocket 2722# ll > >>ls: cannot access BIOS: Input/output error > >>ls: cannot access Driver: Input/output error > >>ls: cannot access HighPoint RAID Management Software: Input/output error > >>ls: cannot access Manual: Input/output error > >>total 248 > >>-rwxr--r-- 1 root lrhorer 245760 Nov 20 2008 autorun.exe > >>-rwxr--r-- 1 root lrhorer 51 Mar 21 2001 autorun.inf > >>?????????? ? ? ? ? ? BIOS > >>?????????? ? ? ? ? ? Driver > >>?????????? ? ? ? ? ? HighPoint RAID Management > >>Software > >>?????????? ? ? ? ? ? Manual > >>-rwxr--r-- 1 root lrhorer 1134 Feb 5 2012 readme.txt > >> > >> So now, what? > >> > >>_______________________________________________ > >>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 3U0G4VQkJA2oRZMITkklkOUIQT.KWUfNaWaa.aOQ.KWU@trix.bounces.google.com Tue Jul 28 21:58:33 2015 Return-Path: <3U0G4VQkJA2oRZMITkklkOUIQT.KWUfNaWaa.aOQ.KWU@trix.bounces.google.com> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6A0BD7F95 for ; Tue, 28 Jul 2015 21:58:33 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4673F304053 for ; Tue, 28 Jul 2015 19:58:33 -0700 (PDT) X-ASG-Debug-ID: 1438138708-04cb6c02c51227b0001-NocioJ Received: from mail-vn0-f70.google.com (mail-vn0-f70.google.com [209.85.216.70]) by cuda.sgi.com with ESMTP id ZpDhI2miqDQ8DeyH (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 28 Jul 2015 19:58:29 -0700 (PDT) X-Barracuda-Envelope-From: 3U0G4VQkJA2oRZMITkklkOUIQT.KWUfNaWaa.aOQ.KWU@trix.bounces.google.com Received: by vnav141 with SMTP id v141so200004765vna.1 for ; Tue, 28 Jul 2015 19:58:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:message-id:date:subject:from:to:content-type; bh=Toai5/EAFCao6swWwuGeLJohy3zEugEPr3kn/kEAiSA=; b=KPFzemJ4yO1pJggWMDI9GGI8nvnjqXLK2T95zLaA4H7U5SvZ7GYFK6BWcSGowVIoAc wL05vbXFI5X07mZdngMuXqohT1lTQUdnCqvtfYjyYTwfRb22hFzIB0qGdM6Nz0hulp0p h3hT7G0JnXglLZjwQQWKzqEchCMnzdt7o2HeMFDOa/zEagc8sanUyt+Byz2lFmbhbcbX 3mBb7yDx9l9kH5J6ZdUqWOn+l6kvwPddlmDatOKFCvpoVJPT2nDjrT4pawrAn8Lwe3Bj Pl7oYM8BUs+/EL0fwGvDqs7QPA9E0x8MgLO3v9jq4A/UcjaZfBeTAEgp50aKXERpZOP4 ThYA== MIME-Version: 1.0 X-Received: by 10.129.115.3 with SMTP id o3mt58235335ywc.6.1438138707462; Tue, 28 Jul 2015 19:58:27 -0700 (PDT) Reply-To: jreal2232@gmail.com X-No-Auto-Attachment: 1 Message-ID: <001a11492c78cbdf1e051bfac22f@google.com> Date: Wed, 29 Jul 2015 02:58:27 +0000 Subject: =?GB2312?B?IM3iw7PIy9Dr1qq/zbuny9HL96Giv6q3otDFyLq3or/J0tQ=?= =?GB2312?B?1eLR+Q==?= From: jreal2232@gmail.com X-ASG-Orig-Subj: =?GB2312?B?IM3iw7PIy9Dr1qq/zbuny9HL96Giv6q3otDFyLq3or/J0tQ=?= =?GB2312?B?1eLR+Q==?= To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a11492c78d22ecd051bfac277 X-Barracuda-Connect: mail-vn0-f70.google.com[209.85.216.70] X-Barracuda-Start-Time: 1438138708 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21173 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001a11492c78d22ecd051bfac277 Content-Type: text/plain; charset=GB2312; format=flowed; delsp=yes Content-Transfer-Encoding: base64 MjAxNcTq1/fN4sOzsfDIy7a81NrX37XEwrejrNK7tqjKx8/CxsLCt6OsQjJCtefJzMqxtPrU2rn9 yKW1xDEwvLjE6tTsvs0NCsHL0ru088X6zeLDs8bz0rWhow0KyOe5+8T6tcTG89K11NpCMkLGvcyo yc/S0b6tt6LVubW90a/FzNbKwb/UvcC01L21zaOsyfXWwbrcydmjrLPJvbvWu9W8uasNCsu+tqm1 pbrc0KHSu7K/t9a1xMqxuvKjrM7Sw8fSqtf2tcSyu9TZysfWu86qQjJCxr3MqKGwtPK5pKGxo6y2 +NOmyMPStc7x1LENCtb3tq+12Milv6q3orj8tuChorj808XWyrXEwvK80qGjDQrW0Ln6zeLDs7XE tPO7t76zw+bB2dfFwb28q7fWu6+1xMf3ysajrMnZyv21xMbz0rXXrLW9uPy24LXEx66jrLbgyv21 xNbQ0KENCs6ixvPStc/dyOu827jx1b3J9dbBz/vKp6GjDQrI57n7xPrUuNLiu6i8uLfW1tO1xMqx vOTBy73izeLDs8bz0rXW97avs/a797e9yr2jrL/J0tS8087SUVHL5sqx18nRrw0K0d3KvsjtvP4r IFGjujEzNzg5NTg1NjEge7/Jw+K30cD708O588u+s6PTw7XEsvrGt7nYvPy0yqOs1NrP39Hdyr7I 7bz+uaYNCsTcus3Qp7n7fQ0KyPSyu9Do0qq0y8Dg08q8/sfryejWw77cytWjrLGnx7i08sjFDQoN Cg0KDQoNCg0KztLS0dH7x+vE+szu0LSx7bWlIM3iw7PIy9Dr1qq/zbuny9HL96Giv6q3otDFyLq3 or/J0tTV4tH5oaMg0qrM7tC0tMux7Q0KtaWjrMfrt8POyqO6DQpodHRwczovL2RvY3MuZ29vZ2xl LmNvbS9mb3Jtcy9kLzFYc0tiaWl6ZDY3NGszRGFNb1ZnaUtKbDF0TlowMzB3bWhvYXFERVpvamk4 L3ZpZXdmb3JtP2M9MCZ3PTEmdXNwPW1haWxfZm9ybV9saW5rDQo= --001a11492c78d22ecd051bfac277 Content-Type: text/html; charset=GB2312 Content-Transfer-Encoding: base64 PGh0bWw+PGJvZHkgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9FbWFpbE1l c3NhZ2UiIHN0eWxlPSIiPjxkaXYgY2xhc3M9InNzLWVtYWlsLWJvZHkiIHN0eWxlPSJkaXNwbGF5 OmlubGluZTt3aWR0aDo1NzZweDsiPjxkaXYgaXRlbXByb3A9ImFjdGlvbiIgaXRlbXNjb3BlIGl0 ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9WaWV3QWN0aW9uIiBzdHlsZT0iIj48bWV0YSBpdGVt cHJvcD0ibmFtZSIgY29udGVudD0izO7QtLHttaUiIHN0eWxlPSIiPgo8bWV0YSBpdGVtcHJvcD0i dXJsIiBjb250ZW50PSJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kLzFYc0tiaWl6ZDY3 NGszRGFNb1ZnaUtKbDF0TlowMzB3bWhvYXFERVpvamk4L3ZpZXdmb3JtP2M9MCZhbXA7dz0xJmFt cDt1c3A9bWFpbF9nb3RvX2Zvcm0iIHN0eWxlPSIiPjwvZGl2Pgo8cCBpdGVtcHJvcD0iZGVzY3Jp cHRpb24iIHN0eWxlPSIiPjxicj4yMDE1xOrX983iw7Ox8MjLtrzU2tfftcTCt6Os0ru2qMrHz8LG wsK3o6xCMkK158nMyrG0+tTauf3IpbXEMTC8uMTq1Oy+zcHL0ru088X6zeLDs8bz0rWhozxwPsjn ufvE+rXExvPStdTaQjJCxr3MqMnP0tG+rbei1bm1vdGvxczWysG/1L3AtNS9tc2jrMn11sG63MnZ o6yzyb271rvVvLmry762qbWlutzQodK7sr+31rXEyrG68qOsztLDx9Kq1/a1xLK71NnKx9a7zqpC MkLGvcyoobC08rmkobGjrLb406bIw9K1zvHUsdb3tq+12Milv6q3orj8tuChorj808XWyrXEwvK8 0qGjIDxwPtbQufrN4sOztcS087u3vrPD5sHZ18XBvbyrt9a7r7XEx/fKxqOsydnK/bXExvPStdes tb24/LbgtcTHrqOstuDK/bXE1tDQoc6ixvPStc/dyOu827jx1b3J9dbBz/vKp6GjPHA+yOe5+8T6 1LjS4ruovLi31tbTtcTKsbzkwcu94s3iw7PG89K11ve2r7P2u/e3vcq9o6y/ydLUvNPO0lFRy+bK sdfJ0a88cD7R3cq+yO28/isgUaO6MTM3ODk1ODU2MSAge7/Jw+K30cD708O588u+s6PTw7XEsvrG t7nYvPy0yqOs1NrP39Hdyr7I7bz+uabE3LrN0Ke5+308cD7I9LK70OjSqrTLwODTyrz+x+vJ6NbD vtzK1aOssafHuLTyyMU8L3A+PC9wPjwvcD48L3A+PC9wPjwvcD4KCs7S0tHR+8frxPrM7tC0se21 pSA8Yj48c3BhbiBkaXI9Imx0ciIgc3R5bGU9IiI+IM3iw7PIy9Dr1qq/zbuny9HL96Giv6q3otDF yLq3or/J0tTV4tH5PC9zcGFuPjwvYj6hoyDSqszu0LS0y7HttaWjrMfrt8POyqO6Cjxicj4KPGEg aHJlZj0iaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC8xWHNLYmlpemQ2NzRrM0RhTW9W Z2lLSmwxdE5aMDMwd21ob2FxREVab2ppOC92aWV3Zm9ybT9jPTAmYW1wO3c9MSZhbXA7dXNwPW1h aWxfZm9ybV9saW5rIiBzdHlsZT0iIj5odHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kLzFY c0tiaWl6ZDY3NGszRGFNb1ZnaUtKbDF0TlowMzB3bWhvYXFERVpvamk4L3ZpZXdmb3JtP2M9MCZh bXA7dz0xJmFtcDt1c3A9bWFpbF9mb3JtX2xpbms8L2E+CjxwPjwvcD4KPHN0eWxlIHR5cGU9InRl eHQvY3NzIiBtZWRpYT0ic2NyZWVuIiBzdHlsZT0iIj48L3N0eWxlPjwvZGl2PjwvYm9keT48L2h0 bWw+ --001a11492c78d22ecd051bfac277-- From david@fromorbit.com Wed Jul 29 00:02:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F2FA07FA8 for ; Wed, 29 Jul 2015 00:02:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D1BFA8F8033 for ; Tue, 28 Jul 2015 22:02:36 -0700 (PDT) X-ASG-Debug-ID: 1438146150-04cb6c02c6124dc0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id nzRkdIc66P8W8x8Z for ; Tue, 28 Jul 2015 22:02:31 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DiCABgXbhVPG0mLHlbgxUjMWmGUaJmAQEBAQEBBpR6AoV7BIFXTQEBAQEBAQcBAQEBQAE/hQA7JDQFJQMHLYgtqTOmDhmGBopUghcMQR2BFAWHF4pYgn2EeYdIgUeHMoUFizOBCnI4HIFlLDGBByWBIAEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 29 Jul 2015 14:32:30 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKJVd-0004PL-BW for xfs@oss.sgi.com; Wed, 29 Jul 2015 15:02:29 +1000 Date: Wed, 29 Jul 2015 15:02:29 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [ANNOUNCE] xfs: for-next branch updated to 5461ad9 Message-ID: <20150729050229.GA16638@dastard> X-ASG-Orig-Subj: [ANNOUNCE] xfs: for-next branch updated to 5461ad9 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="0F1p//8PRICkK4MW" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438146150 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21175 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --0F1p//8PRICkK4MW Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi folks, The for-next branch of the xfs kernel repository at git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git has just been updated. The new head of the for-next branch is commit: 5461ad9 Merge branch 'xfs-meta-uuid' into for-next New Commits: Brian Foster (2): [4703da7] xfs: close xc_cil list_empty() races with cil commit sequen= ce [89cebc84] xfs: validate transaction header length on log recovery Dave Chinner (7): [b2442c5] xfs: call dax_fault on read page faults for DAX [e3c32ee] xfs: remote attribute headers contain an invalid LSN [df150ed1] xfs: remote attributes need to be considered data [ab7bb61] xfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag [1cfc4a9] libxfs: add xfs_bit.c [20b8394] Merge branch 'xfs-misc-fixes-for-4.3' into for-next [5461ad9] Merge branch 'xfs-meta-uuid' into for-next Eric Sandeen (1): [ce748ea] xfs: create new metadata UUID field and incompat flag Jan Kara (1): [d6077aa] xfs: Remove duplicate jumps to the same label Joe Perches (1): [f41febd] xfs: Use consistent logging message prefixes Code Diffstat: fs/dax.c | 14 ++++++++-- fs/xfs/Makefile | 2 +- fs/xfs/libxfs/xfs_alloc.c | 4 +-- fs/xfs/libxfs/xfs_alloc_btree.c | 4 +-- fs/xfs/libxfs/xfs_attr_leaf.c | 4 +-- fs/xfs/libxfs/xfs_attr_remote.c | 53 +++++++++++++++++++++++++++-------= ---- fs/xfs/{ =3D> libxfs}/xfs_bit.c | 0 fs/xfs/libxfs/xfs_bmap_btree.c | 5 ++-- fs/xfs/libxfs/xfs_btree.c | 10 ++++--- fs/xfs/libxfs/xfs_da_btree.c | 8 +++--- fs/xfs/libxfs/xfs_dir2.c | 33 +++++++++++------------- fs/xfs/libxfs/xfs_dir2_block.c | 4 +-- fs/xfs/libxfs/xfs_dir2_data.c | 4 +-- fs/xfs/libxfs/xfs_dir2_leaf.c | 4 +-- fs/xfs/libxfs/xfs_dir2_node.c | 7 +++-- fs/xfs/libxfs/xfs_dquot_buf.c | 4 +-- fs/xfs/libxfs/xfs_format.h | 22 +++++++++++++--- fs/xfs/libxfs/xfs_ialloc.c | 5 ++-- fs/xfs/libxfs/xfs_ialloc_btree.c | 2 +- fs/xfs/libxfs/xfs_inode_buf.c | 4 +-- fs/xfs/libxfs/xfs_sb.c | 24 +++++++++++++---- fs/xfs/libxfs/xfs_symlink_remote.c | 4 +-- fs/xfs/xfs_buf.c | 5 ++-- fs/xfs/xfs_file.c | 21 ++++++++++----- fs/xfs/xfs_inode.c | 10 ++----- fs/xfs/xfs_log.c | 50 +++++++++++++++++------------------ fs/xfs/xfs_log_cil.c | 8 +++++- fs/xfs/xfs_log_recover.c | 47 ++++++++++++++++++++++++++------- fs/xfs/xfs_symlink.c | 2 +- 29 files changed, 233 insertions(+), 131 deletions(-) rename fs/xfs/{ =3D> libxfs}/xfs_bit.c (100%) --=20 Dave Chinner david@fromorbit.com --0F1p//8PRICkK4MW Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBAgAGBQJVuF5kAAoJEK3oKUf0dfodYswP/jJEBhKUfUEAhH3Y/vmfxK9d 5u7zywJ/hgpkUHSqIEhfpTSJB45pDYJrPYOCXMtwW4hvP7rE0lzl7k0NGwzu6yDY 3xjuvjXW6Uq7eEfVWZ4ThLcRRZTAhw/YT26KWaZfKaDG/o3B/e56niErhO8DUxMc 64bXHmIhKYVkfezKsn2+TPfqIji+OYSnukugEr0rTwSuJTu9ppVliqieQ8+Qc5Lj NR9a56LtO8pNNmvp/rgdOigZP+0VLJtpFWy3f1fQ1T/z/P1URcejK35EgmzFzrxB TX1KydcJGQ0cXeu/9+Kab0WLULJZ99oXFIS4/LMmx6sMWQvWCYV6fyV3cOlZQxke UysQBbGjFRybzritY708yiRyztMByl+NTnbH4WFKyOq7YfTZw96GMsi8LhnogQA5 8KXipmGoHgkuylMTaHgumy3dOsTOvstqoVonSzH7P3FoGZhKkILkMzfnHAwM/mBY gALUiDRY01czznfdj4dXXPEqL86HINq7gwo+chqd+H2qN+e+uFaxM0z6I3KVuyIq v/8Dyyx+QIIG96kg3pOrMNTLpnQ6gj+DsL0r9gmAxluI6dn8GVkVkECgAhp9NFg+ rffFamMow3RFZYj5AJFtv7gSN2AFiANl0BACGrx89WDyDOUSaEuxOvdW1sF3f+17 jISJU/+jdH70wi4SnlXr =bpBC -----END PGP SIGNATURE----- --0F1p//8PRICkK4MW-- From bfoster@redhat.com Wed Jul 29 06:47:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 43BF77FA8 for ; Wed, 29 Jul 2015 06:47:55 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B983BAC008 for ; Wed, 29 Jul 2015 04:47:54 -0700 (PDT) X-ASG-Debug-ID: 1438170473-04bdf002321104c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ku4IBKEOKrm2oSbB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 04:47:53 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 76693A2036; Wed, 29 Jul 2015 11:47:53 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-76.bos.redhat.com [10.18.41.76]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6TBlrj3017609; Wed, 29 Jul 2015 07:47:53 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 24F1C122E55; Wed, 29 Jul 2015 07:47:52 -0400 (EDT) Date: Wed, 29 Jul 2015 07:47:52 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Message-ID: <20150729114751.GB61108@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() References: <1437682410-51778-3-git-send-email-bfoster@redhat.com> <1437682410-51778-2-git-send-email-bfoster@redhat.com> <20150728004009.GB24249@dastard> <20150728134006.GD38784@bfoster.bfoster> <20150728215140.GC24249@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150728215140.GC24249@dastard> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1438170473 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 29, 2015 at 07:51:40AM +1000, Dave Chinner wrote: > On Tue, Jul 28, 2015 at 09:40:06AM -0400, Brian Foster wrote: > > On Tue, Jul 28, 2015 at 10:40:09AM +1000, Dave Chinner wrote: > > > [ reply to both patches in one reply, because it's related. ] > > > > > > On Thu, Jul 23, 2015 at 04:13:29PM -0400, Brian Foster wrote: ... > > > > free->xbfi_blockcount); > > > > > > > > - error = xfs_trans_roll(tp, NULL); > > > > - *committed = 1; > > > > + error = __xfs_trans_roll(tp, NULL, committed); > > > > + > > > > /* > > > > - * We have a new transaction, so we should return committed=1, > > > > - * even though we're returning an error. > > > > + * We have a new transaction, so we should return committed=1, even > > > > + * though we're returning an error. If an error was returned after the > > > > + * original transaction was committed, defer the error handling until > > > > + * the EFD is logged. We do this because a committed EFI requires an EFD > > > > + * transaction to be processed to ensure the EFI is released. > > > > */ > > > > - if (error) > > > > + if (error && *committed == 0) { > > > > + *committed = 1; > > > > return error; > > > > + } > > > > > > So if we failed to commit the EFI, we say we did and then return. > > > Why do we need to do that? > > > > > > /me goes an looks at all the callers. > > > > > > Hmm - only xfs_itruncate_extents() relies on that behaviour, but it > > > could just as easily do an inode join on error, because on success > > > the inode has already been joined to the new transaction by > > > xfs_trans_roll(). > > > > > > > Interesting, though I don't follow why this caller even depends on it. > > It doesn't transfer lock ownership to the transaction. What difference > > does it make in the error path if the inode is joined? > > Callers of xfs_itruncate_extents() expect it to be locked and joined > on return, even on error. > All of the callers I see cancel the transaction and unlock the inode separately on error. I could be glossing over some obvious point here, but so far I'm not seeing it... > > > Looking further, we have quite a bit of inconsistency in the error > > > handling of xfs_bmap_finish() - some callers issue a > > > xfs_bmap_cancel() in the error path, and some don't. failing to > > > cancel the freelist on error looks to me like a memory leak, because > > > we don't free the extents from the free list until the EFD for the > > > extent has been logged. If we error out earlier, we still have items > > > on the free list that haven't been processed. > > > > > > So it looks to me like we need fixes there. > > > > > > > Heh, not too surprising. I'll make a note to make a pass through these. > > > > > Further, it appears to me that there is really one xfs_bmap_finish() > > > caller that requires the committed flag: xfs_qm_dqalloc(). All the > > > others either use it for an assert or joining the inode to the > > > transaction when committed = 1, which xfs_trans_roll() will have > > > already done if we return committed = 1.... > > > > > > > Assuming xfs_trans_reserve() hasn't failed, which could cause *committed > > == 1 without the inode joined. We could probably change this in > > __xfs_trans_roll() since the inode is presumably already locked. > > I don't think we can join the inode until after the reservation is > done. It could still be done in __xfs_trans_roll() regardless. > Hmm, I don't see anything obvious that prevents it. It probably defies convention though. Anyways, we're probably a few levels of indirection away from the bug fixes and work that we know needs to happen at this point. I'll try to get the EFI/EFD stuff worked out, along with some of the other issues I'm reproducing, then we can go from there... Brian > > > > + return error; > > > > > > This loop doesn't obviously do the right thing now. It > > > will log the first extent into the EFD and then trigger a shutdown > > > and return. The extent count in the EFD may not match the > > > extent count on the EFI, so releasing the EFD at this point may not > > > release all the extents in the EFI and hence not release the EFI. > > > > > > > The EFD unlock handler forcibly releases the EFI on abort. It drops the > > EFI extent count reference by whatever the extent count on the EFD is, > > and that is determined on EFD initialization (xfs_trans_get_efd()) > > regardless of how many extents were logged to the EFD. > > > > That said, the error handling here is certainly not obvious because it > > depends on the lifecycle of the associated log items. The broader goal > > is to reduce that dependency so the code here is more straightforward... > > *nod* > > > > I think I'd prefer to see a xfs_trans_cancel_efi() call to handle > > > this error path rather than having to go through the efd to release > > > the reference on the EFI. i.e. > > > > > > error = __xfs_trans_roll(tp, NULL, &committed); > > > if (error) { > > > if (committed) { > > > if (!XFS_FORCED_SHUTDOWN(mp)) > > > xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); > > > xfs_efi_cancel(tp, efi); > > > } > > > return error; > > > } > > > > > > > That's a nice idea. It pulls some error handling out of the log item > > handling code explicitly. An EFD version might be useful for the > > unlogged EFD error case as well. IMO, the more of these cases that are > > handled explicitly in xfs_bmap_finish() rather than implicitly via the > > transaction management code, the more reliable and robust to future > > change it will be. I'll explore it further... > > Yes, that mirrors my thinking exactly - the EFI/EFD error handling > has always been problematic with the reliance on reference counting > via transaction commit/abort callbacks to handle it. > > > > Hmmm - something I just noticed: if we only have one EFD per EFI, > > > why do we do we have that layer of extent counting before dropping > > > real references? > > > > > > > I wondered this myself, but hadn't made it deep enough to see if we used > > the reference count elsewhere. > > > > > > xfs_efd_item_unlock( > > > > struct xfs_log_item *lip) > > > > { > > > > - if (lip->li_flags & XFS_LI_ABORTED) > > > > - xfs_efd_item_free(EFD_ITEM(lip)); > > > > + struct xfs_efd_log_item *efdp = EFD_ITEM(lip); > > > > + > > > > + if (lip->li_flags & XFS_LI_ABORTED) { > > > > + xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); > > > > + xfs_efd_item_free(efdp); > > > > + } > > > > } > > > > > > i.e. we always call xfs_efi_release() with efi_nextents or > > > efd_nextents, which are always the same, and so we never partially > > > complete an EFI. Should we just kill that layer, as it does tend to > > > complicate the EFI release code? > > > > > > > Yeah, that might be a good idea if we don't use the reference count > > elsewhere. I'll look into that as a subsequent cleanup as well. > > Excellent! > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com From mstsxfx@gmail.com Wed Jul 29 06:54:18 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4BCD27FA8 for ; Wed, 29 Jul 2015 06:54:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C59DDAC005 for ; Wed, 29 Jul 2015 04:54:17 -0700 (PDT) X-ASG-Debug-ID: 1438170855-04cbb06a742193d0001-NocioJ Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) by cuda.sgi.com with ESMTP id KtLHxQkpSpbtuUAN (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 29 Jul 2015 04:54:16 -0700 (PDT) X-Barracuda-Envelope-From: mstsxfx@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.174 X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.174] Received: by wibxm9 with SMTP id xm9so197575966wib.0 for ; Wed, 29 Jul 2015 04:54:14 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.174] X-Barracuda-IPDD: Level1 [gmail.com/209.85.212.174] X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=o40eUrvY+D++KuT2sog7jIR/E+3KtAcZmJsmGyHKWLM=; b=b/oh1gPZDtIKxjFg4UsFrECEg9gCx/ZSZOth8HaTEdNyYq2d6nbs4j0C1T1vok+kyz JM21lamI3RdPb0QZLnKkrJ1QXDsuHczjFU01EkivB8D9NxnKphLC0YlBykz2ucgjAmXd OwVgimU5v6DOfzlGEMVP7AYisMWIyV1TJ5JIdrq/o7Ydtt0G6M0M+zTzSCxvYXuyp9ci nKsXnq6SU0B32Wn/C6WLxUoR4J+lmTzRATfF4fDcGuL+Db9wcLsiVOxN5VPBhT8CiXIe MGeYsEOKjC1wQfI6MfXMATCwkI4Q5zuUpDnI80jO/8JjiE7U4HoyyOz4+ZuXJmToH5Bo APwQ== X-Received: by 10.194.119.161 with SMTP id kv1mr73709950wjb.157.1438170854845; Wed, 29 Jul 2015 04:54:14 -0700 (PDT) Received: from localhost (bband-dyn181.95-103-48.t-com.sk. [95.103.48.181]) by smtp.gmail.com with ESMTPSA id u7sm24017091wif.3.2015.07.29.04.54.13 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Jul 2015 04:54:13 -0700 (PDT) Date: Wed, 29 Jul 2015 13:54:12 +0200 From: Michal Hocko To: Dave Chinner Cc: Ming Lei , Andrew Morton , Theodore Ts'o , Andreas Dilger , Oleg Drokin , Alexander Viro , Christoph Hellwig , linux-kernel@vger.kernel.org, linux-mm@kvack.org, xfs@oss.sgi.com, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org Subject: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions Message-ID: <20150729115411.GF15801@dhcp22.suse.cz> X-ASG-Orig-Subj: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions References: <20150721015934.GY7943@dastard> <20150721085859.GG11967@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150721085859.GG11967@dhcp22.suse.cz> User-Agent: Mutt/1.5.23 (2014-03-12) X-Barracuda-Connect: mail-wi0-f174.google.com[209.85.212.174] X-Barracuda-Start-Time: 1438170856 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue 21-07-15 10:58:59, Michal Hocko wrote: > [CCing more people from a potentially affected fs - the reference to the > email thread is: http://marc.info/?l=linux-mm&m=143744398020147&w=2] > > On Tue 21-07-15 11:59:34, Dave Chinner wrote: > > Hi Ming, > > > > With the recent merge of the loop device changes, I'm now seeing > > XFS deadlock on my single CPU, 1GB RAM VM running xfs/073. > > > > The deadlocked is as follows: > > > > kloopd1: loop_queue_read_work > > xfs_file_iter_read > > lock XFS inode XFS_IOLOCK_SHARED (on image file) > > page cache read (GFP_KERNEL) > > radix tree alloc > > memory reclaim > > reclaim XFS inodes > > log force to unpin inodes > > > > > > xfs-cil/loop1: > > xlog_cil_push > > xlog_write > > > > xlog_state_get_iclog_space() > > > > > > > > kloopd1: loop_queue_write_work > > xfs_file_write_iter > > lock XFS inode XFS_IOLOCK_EXCL (on image file) > > > > > > [The full stack traces are below]. > > > > i.e. the kloopd, with it's split read and write work queues, has > > introduced a dependency through memory reclaim. i.e. that writes > > need to be able to progress for reads make progress. > > > > The problem, fundamentally, is that mpage_readpages() does a > > GFP_KERNEL allocation, rather than paying attention to the inode's > > mapping gfp mask, which is set to GFP_NOFS. > > > > The didn't used to happen, because the loop device used to issue > > reads through the splice path and that does: > > > > error = add_to_page_cache_lru(page, mapping, index, > > GFP_KERNEL & mapping_gfp_mask(mapping)); > > > > i.e. it pays attention to the allocation context placed on the > > inode and so is doing GFP_NOFS allocations here and avoiding the > > recursion problem. > > > > [ CC'd Michal Hocko and the mm list because it's a clear exaple of > > why ignoring the mapping gfp mask on any page cache allocation is > > a landmine waiting to be tripped over. ] > > Thank you for CCing me. I haven't noticed this one when checking for > other similar hardcoded GFP_KERNEL users (6afdb859b710 ("mm: do not > ignore mapping_gfp_mask in page cache allocation paths")). And there > seem to be more of them now that I am looking closer. > > I am not sure what to do about fs/nfs/dir.c:nfs_symlink which doesn't > require GFP_NOFS or mapping gfp mask for other allocations in the same > context. > > What do you think about this preliminary (and untested) patch? Dave, did you have chance to test the patch in your environment? Is the patch good to go or we want a larger refactoring? -- Michal Hocko SUSE Labs From gygy@iu.org Wed Jul 29 11:34:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.0 required=5.0 tests=HTML_MESSAGE,TRACKER_ID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E1A147F9C for ; Wed, 29 Jul 2015 11:34:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B320A8F8050 for ; Wed, 29 Jul 2015 09:34:55 -0700 (PDT) X-ASG-Debug-ID: 1438187689-04bdf06bcf02ee0001-NocioJ Received: from iu.org ([121.228.124.251]) by cuda.sgi.com with ESMTP id JPM20VGcg0cC8xa4 for ; Wed, 29 Jul 2015 09:34:52 -0700 (PDT) X-Barracuda-Envelope-From: gygy@iu.org X-Barracuda-Apparent-Source-IP: 121.228.124.251 Date: Thu, 30 Jul 2015 00:33:23 +0800 From: =?utf-8?B?6LC354S25p2D?= To: Subject: =?utf-8?B?54S25p2D6LC3?= Message-ID: <20150730003334126433@iu.org> X-ASG-Orig-Subj: =?utf-8?B?54S25p2D6LC3?= X-mailer: Foxmail 5.0 [cn] Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="=====003_Dragon662732162222_=====" X-Barracuda-Connect: UNKNOWN[121.228.124.251] X-Barracuda-Start-Time: 1438187691 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0113c, BSF_SC5_MJ1963, HTML_MESSAGE, RDNS_NONE, TRACKER_ID X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c 0.00 TRACKER_ID BODY: Incorporates a tracking ID number 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a multi-part message in MIME format. --=====003_Dragon662732162222_===== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 eGZzDQoNCuOAiuWuouaIt+WFs+ezu+euoeeQhuS4juWFs+mUruWuouaIt+WIhuaekC0t5aSn5a6i 5oi35oiQ5Lqk5pa55rOV5ZKM562W55Wl44CLDQoNCiLjgJDln7norq3ml7bpl7TjgJEyMDE15bm0 IDjmnIgxLTLmt7HlnLMgOOaciDIyLTIz5YyX5LqsIDjmnIgyOS0zMOS4iua1tyANCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgDQrjgJDln7norq3lr7nosaHjgJHplIDllK7nu4/nkIblkozm gLvnm5HjgIHluILlnLrokKXplIDnu4/nkIbjgIHlhajlm73ojIPlm7TlkozljLrln5/plIDllK7n u4/nkIbjgIHkuJrliqHlj5HlsZXnu4/nkIbjgIHkuqflk4Hnu4/nkIbku6Xlj4oNCiAgICAgICAg ICAgICAgICAgICAg5YW25LuW6aKG5Z+f55qE566h55CG5Lq65ZGY44CCDQrjgJDmjojor77mlrnl vI/jgJHorrLluIjorrLmjoggKyDop4bpopHmvJTnu44gKyDmoYjkvovnoJTorqggK+inkuiJsuaJ rua8lCArIOiusuW4iOeCueivhA0K44CQ5Z+56K6t6LS555So44CRMzgwMOWFgy8y5aSpLzHkurrv vIzvvIjlkKvotYTmlpnotLnjgIHljYjppJDjgIHojLbngrnvvIkNCuOAkOWAvOePreaJi+acuuOA kSAwNTEyLTY4NzAwNjUxICAg77yIMO+8iTE4OS0xMjU1LTQxNzcNCg0K44CQ6K++56iL6IOM5pmv 44CRDQrluILlnLrnq57kuonpq5jluqbmv4Dng4jvvIzmiJDlip/nmoTlhbPplK7mmK/kuI7lhbPp lK7lrqLmiLflu7rnq4vlubbkv53mjIHlr4bliIfjgIHniaLlm7rnmoTlhbPns7vjgIINCiDlhazl j7jmiJjnlaXnm67moIfmuIXmpZrvvIzlpKflpJrmlbDnrqHnkIbkurrlkZjljbTkuI3mh4Llvpfl poLkvZXpgJrov4fotaLlvpflhbPplK7lrqLmiLfmnaXlrp7njrDjgIINCuWQjOi0qOWMluaXtuS7 o++8jOWuouaIt+abtOWKoOaMkeWJlOOAgeeQhuaAp++8jOi1ouW+l+WFs+mUruWuouaIt+W/hemh u+aJk+mAoOezu+e7n+eahOernuS6ieS8mOWKv+OAgg0K6KaB5YGa5Yiw5Y+v5oyB57ut5oCn5Zyw 6LWi5b6X5YWz6ZSu5a6i5oi377yM6ZSA5ZSu5Lq65ZGY5b+F6aG75a6e546w5LuO5Liq5Lq65Yiw 5Zui6Zif77yM5LuO6YeO5oiY5Yiw5q2j6KeE55qE6L2s5Y+Y44CCIg0K44CQ6K++56iL55uu5qCH 44CRDQror4TkvLDvvJrns7vnu5/nmoToh6rmiJHor4TkvLDlhbPplK7lrqLmiLfnmoTpqb7pqa3o g73lipvvvIzlubbkuJTnu5nkuojnp5HlrablhbPplK7lrqLmiLfor4TkvLDlt6XlhbcNCuaJp+ih jO+8muiuree7g+mUgOWUruS6uuWRmOaOjOaPoeS4gOWll+WFs+mUruWuouaIt+mUgOWUrueahOi3 r+W+hOWbvuS4juWunueOsOi3r+W+hOWbvueahOWFs+mUrueCuQ0K5a6a5LmJ77ya6K6p6ZSA5ZSu 5Lq65ZGY5b+r6YCf6K+75Y+W5a6i5oi35a+55YWs5Y+45Lu35YC855qE5pyf5pybDQrmjqLntKLv vJrorq3nu4PplIDllK7kurrlkZjmjqLntKLlrqLmiLflpJbpg6jljovlipvjgIHkuJrliqHnm67m oIflkozlhoXpg6jmjJHmiJjvvIzlrp7njrDmr5TlrqLmiLfov5jmh4LlrqLmiLcNCuiBlOebn++8 muWGhemDqOiBlOebn++8muaVtOWQiOWFrOWPuOi1hOa6kO+8jOe7hOaIkOmhueebrumUgOWUruWb oumYn+WIhumFjeinkuiJsuS4gOiHtOWvueWklu+8mw0K6IGU55uf77ya5aSW6YOo6IGU55uf77ya 5YyW6Kej5a6i5oi355qE5aSW6YOo6amx5Yqo77yM5a6e546w5Lia5Yqh55uu5qCH5ZKM6Kej5Yaz 5YaF6YOo5oyR5oiY77yM5a6e546w5LiO5a6i5oi35YaF6YOo6IGU55ufDQrlrprkvY3vvJrlvbHl k43lubbojrflvpflrqLmiLflr7nmiJHku6znp6/mnoHnmoTor4Tku7fvvIzku47ogIzljaDpoobl rqLmiLfnmoTlv4PmmboNCuS7t+WAvOWRiOeOsO+8muiuree7g+mUgOWUruS6uuWRmOi/kOeUqOin o+WGs+aWueahiOW8j+eahOa8lOiusuaooeW8j+adpeiOt+W+l+WFs+mUruWGs+etluS6uueahOaU r+aMgeWSjOaJv+ivuiANCuW3ruW8guWMlu+8mueLrOeJueeahOWuouaIt+S4muWKoeS7t+WAvOe7 k+WQiOWuouaIt+eahOWklumDqOmpseWKqOOAgeS4muWKoeebruagh+WSjOWGhemDqOaMkeaImO+8 jOWunueOsOe7neWvueernuS6ieS8mOWKvw0K44CQ6K++56iL5pS255uK44CRDQoi6YCa6L+H5pys 6K++56iL5L2g5bCG6IO95aSf77yaDQrku47lhajlsYDnmoTop5Lluqbns7vnu5/lnLDmtJ7lr5/l hbPplK7lrqLmiLfnrqHnkIYNCiDkuLrlhazlj7jliLblrprkuIDkuKrmiJDlip/nmoTlhbPplK7l rqLmiLfnrqHnkIbmlrnmoYgNCiDlhajpnaLlnLDmt7HluqbliZbmnpDlhbPplK7lrqLmiLfnmoTl pJbpg6jlkozlhoXpg6jopoHntKANCiDmm7TliqDlh4bnoa7lnLDlnKjlrqLmiLfnmoTlhoXpg6jl u7rnq4vlhbPplK7kurrlkZjogZTnm58NCiDlnKjlhazlj7jlhoXpg6jlu7rnq4votaLlvpflhbPp lK7lrqLmiLfnmoTogZTnm58NCiDljLrliKvnq57kuonlr7nmiYvlubbojrflvpfmnInliKnnmoTn q57kuonkvJjlir8NCiDlvbHlk43ph4fotK3lhrPnrZblm6LpmJ/nmoTlgY/lpb3mnaXlrp7njrDp lIDllK4NCiDov5vooYzlhbPplK7lhrPnrZbkurrku7flgLzmvJTorrLmnaXojrflvpflhbPplK7n moTmlK/mjIHlkozmib/or7oiDQoNCm04cWtybGpnNnR2a3hrdjR4c25xdWQ5dWxqcHlvZQ== --=====003_Dragon662732162222_===== Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MIHhtbG5zOm8gPSAidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6 b2ZmaWNlIj48SEVBRD4NCjxNRVRBIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIg aHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBuYW1lPUdFTkVSQVRPUiBjb250ZW50PSJN U0hUTUwgOC4wMC43NjAxLjE4MjY5Ij48L0hFQUQ+DQo8Qk9EWT4NCjxQPjxGT05UIGNvbG9yPXdo aXRlPnhmczwvRk9OVD48L1A+DQo8UD4mbmJzcDs8L1A+DQo8UD7jgIrlrqLmiLflhbPns7vnrqHn kIbkuI7lhbPplK7lrqLmiLfliIbmnpAtLeWkp+WuouaIt+aIkOS6pOaWueazleWSjOetlueVpeOA izwvUD4NCjxQPjxCUj4i44CQ5Z+56K6t5pe26Ze044CRMjAxNeW5tCA45pyIMS0y5rex5ZyzIDjm nIgyMi0yM+WMl+S6rCA45pyIMjktMzDkuIrmtbcgDQo8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KPEJSPuOAkOWfueiureWvueixoeOA kemUgOWUrue7j+eQhuWSjOaAu+ebkeOAgeW4guWcuuiQpemUgOe7j+eQhuOAgeWFqOWbveiMg+Wb tOWSjOWMuuWfn+mUgOWUrue7j+eQhuOAgeS4muWKoeWPkeWxlee7j+eQhuOAgeS6p+WTgee7j+eQ huS7peWPijxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgDQrlhbbku5bpoobln5/nmoTnrqHnkIbkurrlkZjjgII8QlI+44CQ5o6I6K++ 5pa55byP44CR6K6y5biI6K6y5o6IICsg6KeG6aKR5ryU57uOICsg5qGI5L6L56CU6K6oICvop5Lo ibLmia7mvJQgKyANCuiusuW4iOeCueivhDxCUj7jgJDln7norq3otLnnlKjjgJEzODAw5YWDLzLl pKkvMeS6uu+8jO+8iOWQq+i1hOaWmei0ueOAgeWNiOmkkOOAgeiMtueCue+8iTxCUj7jgJDlgLzn j63miYvmnLrjgJEgMDUxMi02ODcwMDY1MSZuYnNwOyZuYnNwOyANCu+8iDDvvIkxODktMTI1NS00 MTc3PC9QPg0KPFA+PEJSPuOAkOivvueoi+iDjOaZr+OAkTxCUj7luILlnLrnq57kuonpq5jluqbm v4Dng4jvvIzmiJDlip/nmoTlhbPplK7mmK/kuI7lhbPplK7lrqLmiLflu7rnq4vlubbkv53mjIHl r4bliIfjgIHniaLlm7rnmoTlhbPns7vjgII8QlI+Jm5ic3A75YWs5Y+45oiY55Wl55uu5qCH5riF 5qWa77yM5aSn5aSa5pWw566h55CG5Lq65ZGY5Y205LiN5oeC5b6X5aaC5L2V6YCa6L+H6LWi5b6X 5YWz6ZSu5a6i5oi35p2l5a6e546w44CCPEJSPuWQjOi0qOWMluaXtuS7o++8jOWuouaIt+abtOWK oOaMkeWJlOOAgeeQhuaAp++8jOi1ouW+l+WFs+mUruWuouaIt+W/hemhu+aJk+mAoOezu+e7n+ea hOernuS6ieS8mOWKv+OAgjxCUj7opoHlgZrliLDlj6/mjIHnu63mgKflnLDotaLlvpflhbPplK7l rqLmiLfvvIzplIDllK7kurrlkZjlv4Xpobvlrp7njrDku47kuKrkurrliLDlm6LpmJ/vvIzku47p h47miJjliLDmraPop4TnmoTovazlj5jjgIIiPEJSPuOAkOivvueoi+ebruagh+OAkTxCUj7or4Tk vLDvvJrns7vnu5/nmoToh6rmiJHor4TkvLDlhbPplK7lrqLmiLfnmoTpqb7pqa3og73lipvvvIzl ubbkuJTnu5nkuojnp5HlrablhbPplK7lrqLmiLfor4TkvLDlt6Xlhbc8QlI+5omn6KGM77ya6K6t 57uD6ZSA5ZSu5Lq65ZGY5o6M5o+h5LiA5aWX5YWz6ZSu5a6i5oi36ZSA5ZSu55qE6Lev5b6E5Zu+ 5LiO5a6e546w6Lev5b6E5Zu+55qE5YWz6ZSu54K5PEJSPuWumuS5ie+8muiuqemUgOWUruS6uuWR mOW/q+mAn+ivu+WPluWuouaIt+WvueWFrOWPuOS7t+WAvOeahOacn+acmzxCUj7mjqLntKLvvJro rq3nu4PplIDllK7kurrlkZjmjqLntKLlrqLmiLflpJbpg6jljovlipvjgIHkuJrliqHnm67moIfl kozlhoXpg6jmjJHmiJjvvIzlrp7njrDmr5TlrqLmiLfov5jmh4LlrqLmiLc8QlI+6IGU55uf77ya 5YaF6YOo6IGU55uf77ya5pW05ZCI5YWs5Y+46LWE5rqQ77yM57uE5oiQ6aG555uu6ZSA5ZSu5Zui 6Zif5YiG6YWN6KeS6Imy5LiA6Ie05a+55aSW77ybPEJSPuiBlOebn++8muWklumDqOiBlOebn++8 muWMluino+WuouaIt+eahOWklumDqOmpseWKqO+8jOWunueOsOS4muWKoeebruagh+WSjOino+WG s+WGhemDqOaMkeaImO+8jOWunueOsOS4juWuouaIt+WGhemDqOiBlOebnzxCUj7lrprkvY3vvJrl vbHlk43lubbojrflvpflrqLmiLflr7nmiJHku6znp6/mnoHnmoTor4Tku7fvvIzku47ogIzljaDp ooblrqLmiLfnmoTlv4Pmmbo8QlI+5Lu35YC85ZGI546w77ya6K6t57uD6ZSA5ZSu5Lq65ZGY6L+Q 55So6Kej5Yaz5pa55qGI5byP55qE5ryU6K6y5qih5byP5p2l6I635b6X5YWz6ZSu5Yaz562W5Lq6 55qE5pSv5oyB5ZKM5om/6K+6IA0KPEJSPuW3ruW8guWMlu+8mueLrOeJueeahOWuouaIt+S4muWK oeS7t+WAvOe7k+WQiOWuouaIt+eahOWklumDqOmpseWKqOOAgeS4muWKoeebruagh+WSjOWGhemD qOaMkeaImO+8jOWunueOsOe7neWvueernuS6ieS8mOWKvzxCUj7jgJDor77nqIvmlLbnm4rjgJE8 QlI+IumAmui/h+acrOivvueoi+S9oOWwhuiDveWkn++8mjxCUj7ku47lhajlsYDnmoTop5Lluqbn s7vnu5/lnLDmtJ7lr5/lhbPplK7lrqLmiLfnrqHnkIY8L1A+DQo8UD4mbmJzcDvkuLrlhazlj7jl iLblrprkuIDkuKrmiJDlip/nmoTlhbPplK7lrqLmiLfnrqHnkIbmlrnmoYg8QlI+Jm5ic3A75YWo 6Z2i5Zyw5rex5bqm5YmW5p6Q5YWz6ZSu5a6i5oi355qE5aSW6YOo5ZKM5YaF6YOo6KaB57SgPEJS PiZuYnNwO+abtOWKoOWHhuehruWcsOWcqOWuouaIt+eahOWGhemDqOW7uueri+WFs+mUruS6uuWR mOiBlOebnzwvUD4NCjxQPiZuYnNwO+WcqOWFrOWPuOWGhemDqOW7uueri+i1ouW+l+WFs+mUruWu ouaIt+eahOiBlOebnzwvUD4NCjxQPiZuYnNwO+WMuuWIq+ernuS6ieWvueaJi+W5tuiOt+W+l+ac ieWIqeeahOernuS6ieS8mOWKvzwvUD4NCjxQPiZuYnNwO+W9seWTjemHh+i0reWGs+etluWboumY n+eahOWBj+WlveadpeWunueOsOmUgOWUrjwvUD4NCjxQPiZuYnNwO+i/m+ihjOWFs+mUruWGs+et luS6uuS7t+WAvOa8lOiusuadpeiOt+W+l+WFs+mUrueahOaUr+aMgeWSjOaJv+ivuiI8QlI+PC9Q Pg0KPFA+PEZPTlQgY29sb3I9d2hpdGU+ZXU5MXo4amN1ajZsbjhtOHZreW1teGNobnFrcXF0PC9G T05UPjwvUD48L0JPRFk+PC9IVE1MPg0K --=====003_Dragon662732162222_=====-- From david@fromorbit.com Wed Jul 29 17:14:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 515427F89 for ; Wed, 29 Jul 2015 17:14:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3FC4B304048 for ; Wed, 29 Jul 2015 15:14:36 -0700 (PDT) X-ASG-Debug-ID: 1438208070-04cbb0416f88900001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id yxtqtlRngdonScu6 for ; Wed, 29 Jul 2015 15:14:31 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BuCwDtT7lVPG0mLHlbgxpUaYJVpiwBAQEBAQeVCYVzBAICgVdNAQEBAQEBBwEBAQFAAT+EJAEBBDocIxAIAw4KCSUPBSUDBxoTiC0Oz1MBAQEBAQEEAQEBAQEdGYYGhS+BPQGCZhEBUQeDGIEUBYUmj0qEeoUdgiuBR0aTQoNjgjQNDxWBUCwxgQ6BPgEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 07:43:57 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKZbo-0006Qt-MW; Thu, 30 Jul 2015 08:13:56 +1000 Date: Thu, 30 Jul 2015 08:13:56 +1000 From: Dave Chinner To: Michal Hocko Cc: Ming Lei , Andrew Morton , Theodore Ts'o , Andreas Dilger , Oleg Drokin , Alexander Viro , Christoph Hellwig , linux-kernel@vger.kernel.org, linux-mm@kvack.org, xfs@oss.sgi.com, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org Subject: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions Message-ID: <20150729221356.GC16638@dastard> X-ASG-Orig-Subj: Re: [regression 4.2-rc3] loop: xfstests xfs/073 deadlocked in low memory conditions References: <20150721015934.GY7943@dastard> <20150721085859.GG11967@dhcp22.suse.cz> <20150729115411.GF15801@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150729115411.GF15801@dhcp22.suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438208070 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Jul 29, 2015 at 01:54:12PM +0200, Michal Hocko wrote: > On Tue 21-07-15 10:58:59, Michal Hocko wrote: > > [CCing more people from a potentially affected fs - the reference to the > > email thread is: http://marc.info/?l=linux-mm&m=143744398020147&w=2] ... > > > The didn't used to happen, because the loop device used to issue > > > reads through the splice path and that does: > > > > > > error = add_to_page_cache_lru(page, mapping, index, > > > GFP_KERNEL & mapping_gfp_mask(mapping)); > > > > > > i.e. it pays attention to the allocation context placed on the > > > inode and so is doing GFP_NOFS allocations here and avoiding the > > > recursion problem. > > > > > > [ CC'd Michal Hocko and the mm list because it's a clear exaple of > > > why ignoring the mapping gfp mask on any page cache allocation is > > > a landmine waiting to be tripped over. ] > > > > Thank you for CCing me. I haven't noticed this one when checking for > > other similar hardcoded GFP_KERNEL users (6afdb859b710 ("mm: do not > > ignore mapping_gfp_mask in page cache allocation paths")). And there > > seem to be more of them now that I am looking closer. > > > > I am not sure what to do about fs/nfs/dir.c:nfs_symlink which doesn't > > require GFP_NOFS or mapping gfp mask for other allocations in the same > > context. > > > > What do you think about this preliminary (and untested) patch? > > Dave, did you have chance to test the patch in your environment? Is the > patch good to go or we want a larger refactoring? No, I haven't had a chance to test it yet. I'll try to get somethign done by the end of the week, but I'm not able to reliably reproduce the hang I saw (i.e. the analysis I did was from the first deadlock and I've only seen it once since) so testing is likely to be inconclusive, anyway.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 29 17:19:16 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 850017F91 for ; Wed, 29 Jul 2015 17:19:16 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 658268F8035 for ; Wed, 29 Jul 2015 15:19:13 -0700 (PDT) X-ASG-Debug-ID: 1438208350-04cb6c673e29e80001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id NL0J1hHHOoP7EVyZ for ; Wed, 29 Jul 2015 15:19:10 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D3CwDyULlVPG0mLHlbgxqBATyCVYN8ojABAQEBAQeafAICAQECgVdNAQEBAQEBBwEBAQFAAT+EJAEBBDocIxAIAw4KCSUPBSUDBxoTiC3PaAEBAQEGAgEfGYYGhS+BPQGDSQeDGIEUBYcNAYZhg22DFIxCgUeII4coiCCBCoE3gXQsMYEFBIFDAQEB Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 07:48:36 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKZgK-0006RZ-2C; Thu, 30 Jul 2015 08:18:36 +1000 Date: Thu, 30 Jul 2015 08:18:36 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH RFC 2/2] xfs: fix efi/efd error handling to avoid fs shutdown hangs Message-ID: <20150729221835.GD16638@dastard> X-ASG-Orig-Subj: Re: [PATCH RFC 2/2] xfs: fix efi/efd error handling to avoid fs shutdown hangs References: <1437682410-51778-1-git-send-email-bfoster@redhat.com> <1437682410-51778-3-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437682410-51778-3-git-send-email-bfoster@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438208350 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Jul 23, 2015 at 04:13:30PM -0400, Brian Foster wrote: > Freeing an extent in XFS involves logging an EFI (extent free > intention), freeing the actual extent, and logging an EFD (extent free > done). The EFI object is created with a reference count of 2: one for > the current transaction and one for the subsequently created EFD. Under > normal circumstances, the first reference is dropped when the EFI is > unpinned and the second reference is dropped when the EFD is committed > to the on-disk log. > > In event of errors or filesystem shutdown, there are various potential > cleanup scenarios depending on the state of the EFI/EFD. The cleanup > scenarios are confusing and racy, as demonstrated by the following test > sequence: > > # mount $dev $mnt > # fsstress -d $mnt -n 99999 -p 16 -z -f fallocate=1 \ > -f punch=1 -f creat=1 -f unlink=1 & > # sleep 5 > # killall -9 fsstress; wait > # godown -f $mnt > # umount > > ... in which the final umount can hang due to the AIL being pinned > indefinitely by one or more EFI items. This can occur due to several > conditions. For example, if the shutdown occurs after the EFI is > committed to the on-disk log and the EFD committed to the CIL, but > before the EFD committed to the log, the EFD iop_committed() abort > handler does not drop its reference to the EFI. Alternatively, manual > error injection in the xfs_bmap_finish() codepath shows that if an error > occurs after the EFI transaction is committed but before the EFD is > constructed and logged, the EFI is never released from the AIL. > > Update the EFI/EFD item handling code to use a more straightforward and > reliable approach to error handling. If the EFI transaction is > cancelled, the EFI is freed when the log item is unlocked. If the EFI > transaction is committed successfully, from that point forward it is the > responsibility of the EFD to drop its EFI reference. This means that the > EFI unpin callback only ever drops the log reference to the EFI. It does > not free the EFI in the event of log I/O error. This also means that the > EFD item must drop its EFI reference either if the EFD transaction is > cancelled, committed or itself aborted due to log I/O error. Finally, > update xfs_bmap_finish() to ensure that once an EFI transaction is > committed, we are guaranteed to construct and log the associated EFD. > This ensures that the EFD is aborted and drops the reference to the EFI. > > Signed-off-by: Brian Foster FWIW, we have the same hang problems in log recovery when xfs_free_extent fails - the efd is not logged and the filesystem is not shut down, so the EFI being processed is not released or removed from the AIL. We also abort the processing of EFIs on the first error, leaving the AIL full of EFIs that will never be removed and so the unmount will hang trying to empty the AIL... Cheers, Dave. -- Dave Chinner david@fromorbit.com From darrick.wong@oracle.com Wed Jul 29 17:33:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5CCB87F94 for ; Wed, 29 Jul 2015 17:33:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id DB2A98F8033 for ; Wed, 29 Jul 2015 15:33:07 -0700 (PDT) X-ASG-Debug-ID: 1438209186-04cb6c673d2e840001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id HjZIZDfHf4beVBqK (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:06 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMX05d005972 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:01 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMX0Kj014738 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:00 GMT Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMWxoj027676; Wed, 29 Jul 2015 22:33:00 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:32:59 -0700 Subject: [RFC v2 00/24] xfs: add reflink and dedupe support From: "Darrick J. Wong" X-ASG-Orig-Subj: [RFC v2 00/24] xfs: add reflink and dedupe support To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:32:59 -0700 Message-ID: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209186 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Hi all, This is the second revision of an RFC for adding to XFS kernel support for mapping multiple file logical blocks to the same physical block, more commonly known as reflinking. The implementation a single [block range, refcount] tree to track the reference counts of extents of physical blocks. There's also support code to provide the desired copy-on-write behavior and the userland interfaces to reflink, query the status of, and un-reflink files. The patch set is based on the current (4.2-rc4) upstream kernel plus Dave's reverse-map RFC patches. There are plenty of bugs in this code; in particular the copy-on-write code is still terrible and prone to all sorts of amusing crashes. To expand on that, the copy on write code is horribly broken, but I'm posting this patchset in the hopes of getting some review of the other pieces while I try to solve CoW. Since "RFC(RAP)" post last month I broke up the patches into smaller pieces, added tracepoints, and provided longer descriptions + ASCII art of what the big algorithms are trying to do. What I'd like to do for CoW is to (ab|re)use the delayed allocation code to implement copy on write. In xfs_get_blocks we'd reserve whatever blocks we need (or return ENOSPC to users) as in regular delalloc; and in xfs_vm_writepage we'd use xfs_map_blocks to allocate the forked blocks, remove the old mapping, and add in the new mapping, which is almost what delalloc does now. One problem I've not yet worked around is that __block_write_begin won't call get_blocks if the bh is already mapped, which means that we fail to make the necessary reservations in certain cases (write file, reflink, rewrite original file). The current CoW patch sort of forces this to work by doing its own reservation outside of get_blocks and delalloc, but doesn't necessarily get it right. At the moment, the reverse-map and reflink features are /not/ compatible. This will be resolved soon. The ioctl interface to XFS reflink looks surprisingly like the btrfs ioctl interface -- you can reflink a file, reflink subranges of a file, or dedupe subranges of files. (Dedupe also checks file blocks, though I have a feeling it's racy.) To un-reflink a file, simply chattr +C it to mark it no-cow. xfs_fsr is a better candidate for de-reflinking a file since it also defragments the file. If you're going to start using this mess, you're going to want to pull my xfsprogs dev tree[1], which itself is also based on xfsprogs for-next and the userland rmap support bits. I've not had time to get reflink and rmap to work together. I've also prepared a bunch of xfstests[2] to exercise the userland interfaces; btrfs' reflink implementation more or less passes. This is an extraordinary way to eat your data. Enjoy! Comments and questions are, as always, welcome. --D [1] https://github.com/djwong/xfsprogs/commits/for-next [2] https://github.com/djwong/xfstests/commits/master From darrick.wong@oracle.com Wed Jul 29 17:33:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3EE4C7F94 for ; Wed, 29 Jul 2015 17:33:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2BFFC8F8033 for ; Wed, 29 Jul 2015 15:33:09 -0700 (PDT) X-ASG-Debug-ID: 1438209188-04cb6c67402e850001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id r1AbJr8qCgLqIYbG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:08 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMX6ou020067 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:07 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMX6Wd005824 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:06 GMT Received: from abhmp0006.oracle.com (abhmp0006.oracle.com [141.146.116.12]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMX6Rt009238; Wed, 29 Jul 2015 22:33:06 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:05 -0700 Subject: [PATCH 01/24] xfs: introduce refcount btree definitions From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 01/24] xfs: introduce refcount btree definitions To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:05 -0700 Message-ID: <20150729223305.17414.84520.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209188 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Add new per-AG refcount btree definitions to the per-AG structures. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_alloc.c | 5 +++++ fs/xfs/libxfs/xfs_btree.c | 5 +++-- fs/xfs/libxfs/xfs_btree.h | 4 ++++ fs/xfs/libxfs/xfs_format.h | 31 ++++++++++++++++++++++++++++++- fs/xfs/libxfs/xfs_types.h | 2 +- fs/xfs/xfs_inode.h | 5 +++++ fs/xfs/xfs_mount.h | 3 +++ 7 files changed, 51 insertions(+), 4 deletions(-) diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index a95f4a4..40e8129 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -2386,6 +2386,10 @@ xfs_agf_verify( be32_to_cpu(agf->agf_btreeblks) > be32_to_cpu(agf->agf_length)) return false; + if (xfs_sb_version_hasreflink(&mp->m_sb) && + be32_to_cpu(agf->agf_refcount_level) > XFS_BTREE_MAXLEVELS) + return false; + return true;; } @@ -2505,6 +2509,7 @@ xfs_alloc_read_agf( be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNTi]); pag->pagf_levels[XFS_BTNUM_RMAPi] = be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAPi]); + pag->pagf_refcount_level = be32_to_cpu(agf->agf_refcount_level); spin_lock_init(&pag->pagb_lock); pag->pagb_count = 0; pag->pagb_tree = RB_ROOT; diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index 4c9b9b3..51b56c5 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -43,9 +43,10 @@ kmem_zone_t *xfs_btree_cur_zone; */ static const __uint32_t xfs_magics[2][XFS_BTNUM_MAX] = { { XFS_ABTB_MAGIC, XFS_ABTC_MAGIC, 0, XFS_BMAP_MAGIC, XFS_IBT_MAGIC, - XFS_FIBT_MAGIC }, + XFS_FIBT_MAGIC, 0 }, { XFS_ABTB_CRC_MAGIC, XFS_ABTC_CRC_MAGIC, XFS_RMAP_CRC_MAGIC, - XFS_BMAP_CRC_MAGIC, XFS_IBT_CRC_MAGIC, XFS_FIBT_CRC_MAGIC } + XFS_BMAP_CRC_MAGIC, XFS_IBT_CRC_MAGIC, XFS_FIBT_CRC_MAGIC, + XFS_REFC_CRC_MAGIC } }; #define xfs_btree_magic(cur) \ xfs_magics[!!((cur)->bc_flags & XFS_BTREE_CRC_BLOCKS)][cur->bc_btnum] diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index 48ab2b1..8d9fffe 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -66,6 +66,7 @@ union xfs_btree_rec { #define XFS_BTNUM_INO ((xfs_btnum_t)XFS_BTNUM_INOi) #define XFS_BTNUM_FINO ((xfs_btnum_t)XFS_BTNUM_FINOi) #define XFS_BTNUM_RMAP ((xfs_btnum_t)XFS_BTNUM_RMAPi) +#define XFS_BTNUM_REFC ((xfs_btnum_t)XFS_BTNUM_REFCi) /* * For logging record fields. @@ -98,6 +99,7 @@ do { \ case XFS_BTNUM_INO: __XFS_BTREE_STATS_INC(ibt, stat); break; \ case XFS_BTNUM_FINO: __XFS_BTREE_STATS_INC(fibt, stat); break; \ case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_INC(rmap, stat); break; \ + case XFS_BTNUM_REFC: break; \ case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \ } \ } while (0) @@ -113,6 +115,7 @@ do { \ case XFS_BTNUM_INO: __XFS_BTREE_STATS_ADD(ibt, stat, val); break; \ case XFS_BTNUM_FINO: __XFS_BTREE_STATS_ADD(fibt, stat, val); break; \ case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_ADD(rmap, stat, val); break; \ + case XFS_BTNUM_REFC: break; \ case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \ } \ } while (0) @@ -217,6 +220,7 @@ typedef struct xfs_btree_cur union { struct { /* needed for BNO, CNT, INO */ struct xfs_buf *agbp; /* agf/agi buffer pointer */ + struct xfs_bmap_free *flist; /* list to free after */ xfs_agnumber_t agno; /* ag number */ } a; struct { /* needed for BMAP */ diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index 9cff517..c0dd355 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -446,6 +446,7 @@ xfs_sb_has_compat_feature( #define XFS_SB_FEAT_RO_COMPAT_FINOBT (1 << 0) /* free inode btree */ #define XFS_SB_FEAT_RO_COMPAT_RMAPBT (1 << 1) /* reverse map btree */ +#define XFS_SB_FEAT_RO_COMPAT_REFLINK (1 << 2) /* reflinked files */ #define XFS_SB_FEAT_RO_COMPAT_ALL \ (XFS_SB_FEAT_RO_COMPAT_FINOBT | \ XFS_SB_FEAT_RO_COMPAT_RMAPBT) @@ -522,6 +523,12 @@ static inline bool xfs_sb_version_hasrmapbt(struct xfs_sb *sbp) (sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_RMAPBT); } +static inline bool xfs_sb_version_hasreflink(struct xfs_sb *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) && + (sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_REFLINK); +} + /* * end of superblock version macros */ @@ -616,12 +623,15 @@ typedef struct xfs_agf { __be32 agf_btreeblks; /* # of blocks held in AGF btrees */ uuid_t agf_uuid; /* uuid of filesystem */ + __be32 agf_refcount_root; /* refcount tree root block */ + __be32 agf_refcount_level; /* refcount btree levels */ + /* * reserve some contiguous space for future logged fields before we add * the unlogged fields. This makes the range logging via flags and * structure offsets much simpler. */ - __be64 agf_spare64[16]; + __be64 agf_spare64[15]; /* unlogged fields, written during buffer writeback. */ __be64 agf_lsn; /* last write sequence */ @@ -1008,6 +1018,18 @@ static inline void xfs_dinode_put_rdev(struct xfs_dinode *dip, xfs_dev_t rdev) XFS_DIFLAG_EXTSZINHERIT | XFS_DIFLAG_NODEFRAG | XFS_DIFLAG_FILESTREAM) /* + * Values for di_flags2 + * There should be a one-to-one correspondence between these flags and the + * XFS_XFLAG_s. + */ +#define XFS_DIFLAG2_REFLINK_BIT 0 /* file's blocks may be reflinked */ +#define XFS_DIFLAG2_REFLINK (1 << XFS_DIFLAG2_REFLINK_BIT) + +#define XFS_DIFLAG2_ANY \ + (XFS_DIFLAG2_REFLINK) + + +/* * Inode number format: * low inopblog bits - offset in block * next agblklog bits - block number in ag @@ -1338,6 +1360,13 @@ typedef __be32 xfs_rmap_ptr_t; XFS_IBT_BLOCK(mp) + 1) /* + * Reference Count Btree format definitions + * + */ +#define XFS_REFC_CRC_MAGIC 0x52334643 /* 'R3FC' */ + + +/* * BMAP Btree format definitions * * This includes both the root block definition that sits inside an inode fork diff --git a/fs/xfs/libxfs/xfs_types.h b/fs/xfs/libxfs/xfs_types.h index 3d50364..be7b6de 100644 --- a/fs/xfs/libxfs/xfs_types.h +++ b/fs/xfs/libxfs/xfs_types.h @@ -109,7 +109,7 @@ typedef enum { typedef enum { XFS_BTNUM_BNOi, XFS_BTNUM_CNTi, XFS_BTNUM_RMAPi, XFS_BTNUM_BMAPi, - XFS_BTNUM_INOi, XFS_BTNUM_FINOi, XFS_BTNUM_MAX + XFS_BTNUM_INOi, XFS_BTNUM_FINOi, XFS_BTNUM_REFCi, XFS_BTNUM_MAX } xfs_btnum_t; struct xfs_name { diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 8f22d20..6153cf2 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -202,6 +202,11 @@ xfs_get_initial_prid(struct xfs_inode *dp) return XFS_PROJID_DEFAULT; } +static inline bool xfs_is_reflink_inode(struct xfs_inode *ip) +{ + return ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK; +} + /* * In-core inode flags. */ diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index cdced0b..4b286cc 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -315,6 +315,9 @@ typedef struct xfs_perag { /* for rcu-safe freeing */ struct rcu_head rcu_head; int pagb_count; /* pagb slots in use */ + + /* reference count */ + __uint8_t pagf_refcount_level; } xfs_perag_t; extern int xfs_log_sbcount(xfs_mount_t *); From darrick.wong@oracle.com Wed Jul 29 17:33:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6839A7F9B for ; Wed, 29 Jul 2015 17:33:26 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id D7D70AC002 for ; Wed, 29 Jul 2015 15:33:25 -0700 (PDT) X-ASG-Debug-ID: 1438209204-04cbb0416f88f90001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id HHYoCzhhT2oyyYVl (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:24 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXJ2q006434 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:19 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXJih006461 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:19 GMT Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXIQu009347; Wed, 29 Jul 2015 22:33:19 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:18 -0700 Subject: [PATCH 03/24] xfs: add refcount btree stats infrastructure From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 03/24] xfs: add refcount btree stats infrastructure To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:18 -0700 Message-ID: <20150729223318.17414.21535.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209204 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines The refcount btree presents the same stats as the other btrees, so add all the code for that now. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_btree.h | 4 ++-- fs/xfs/xfs_stats.c | 1 + fs/xfs/xfs_stats.h | 18 +++++++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index 8d9fffe..b747c86 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -99,7 +99,7 @@ do { \ case XFS_BTNUM_INO: __XFS_BTREE_STATS_INC(ibt, stat); break; \ case XFS_BTNUM_FINO: __XFS_BTREE_STATS_INC(fibt, stat); break; \ case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_INC(rmap, stat); break; \ - case XFS_BTNUM_REFC: break; \ + case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(refcbt, stat); break; \ case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \ } \ } while (0) @@ -115,7 +115,7 @@ do { \ case XFS_BTNUM_INO: __XFS_BTREE_STATS_ADD(ibt, stat, val); break; \ case XFS_BTNUM_FINO: __XFS_BTREE_STATS_ADD(fibt, stat, val); break; \ case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_ADD(rmap, stat, val); break; \ - case XFS_BTNUM_REFC: break; \ + case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(refcbt, stat); break; \ case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \ } \ } while (0) diff --git a/fs/xfs/xfs_stats.c b/fs/xfs/xfs_stats.c index 67bbfa2..64a60ef 100644 --- a/fs/xfs/xfs_stats.c +++ b/fs/xfs/xfs_stats.c @@ -61,6 +61,7 @@ static int xfs_stat_proc_show(struct seq_file *m, void *v) { "ibt2", XFSSTAT_END_IBT_V2 }, { "fibt2", XFSSTAT_END_FIBT_V2 }, { "rmapbt", XFSSTAT_END_RMAP_V2 }, + { "refcntbt", XFSSTAT_END_REFCOUNT }, /* we print both series of quota information together */ { "qm", XFSSTAT_END_QM }, }; diff --git a/fs/xfs/xfs_stats.h b/fs/xfs/xfs_stats.h index 8414db2..f6e4de6 100644 --- a/fs/xfs/xfs_stats.h +++ b/fs/xfs/xfs_stats.h @@ -215,7 +215,23 @@ struct xfsstats { __uint32_t xs_rmap_2_alloc; __uint32_t xs_rmap_2_free; __uint32_t xs_rmap_2_moves; -#define XFSSTAT_END_XQMSTAT (XFSSTAT_END_RMAP_V2+6) +#define XFSSTAT_END_REFCOUNT (XFSSTAT_END_RMAP_V2 + 15) + __uint32_t xs_refcbt_2_lookup; + __uint32_t xs_refcbt_2_compare; + __uint32_t xs_refcbt_2_insrec; + __uint32_t xs_refcbt_2_delrec; + __uint32_t xs_refcbt_2_newroot; + __uint32_t xs_refcbt_2_killroot; + __uint32_t xs_refcbt_2_increment; + __uint32_t xs_refcbt_2_decrement; + __uint32_t xs_refcbt_2_lshift; + __uint32_t xs_refcbt_2_rshift; + __uint32_t xs_refcbt_2_split; + __uint32_t xs_refcbt_2_join; + __uint32_t xs_refcbt_2_alloc; + __uint32_t xs_refcbt_2_free; + __uint32_t xs_refcbt_2_moves; +#define XFSSTAT_END_XQMSTAT (XFSSTAT_END_REFCOUNT + 6) __uint32_t xs_qm_dqreclaims; __uint32_t xs_qm_dqreclaim_misses; __uint32_t xs_qm_dquot_dups; From darrick.wong@oracle.com Wed Jul 29 17:33:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 780D77FA9 for ; Wed, 29 Jul 2015 17:33:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 11B55AC006 for ; Wed, 29 Jul 2015 15:33:32 -0700 (PDT) X-ASG-Debug-ID: 1438209210-04bdf06bd10b350001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id cOq4BqGwMfx2X8Qk (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:31 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXPvZ006520 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:26 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXP77021327 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:25 GMT Received: from abhmp0016.oracle.com (abhmp0016.oracle.com [141.146.116.22]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXPG3027895; Wed, 29 Jul 2015 22:33:25 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:24 -0700 Subject: [PATCH 04/24] xfs: refcount btree add more reserved blocks From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 04/24] xfs: refcount btree add more reserved blocks To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:24 -0700 Message-ID: <20150729223324.17414.85659.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209211 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Since XFS reserves a small amount of space in each AG as the minimum free space needed for an operation, save some more space in case we touch the refcount btree. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_alloc.c | 13 +++++++++++++ fs/xfs/libxfs/xfs_format.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 40e8129..cb6b3d9 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -50,10 +50,23 @@ STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *); STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *, xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *); +unsigned int +XFS_REFC_BLOCK( + struct xfs_mount *mp) +{ + if (xfs_sb_version_hasrmapbt(&mp->m_sb)) + return XFS_RMAP_BLOCK(mp) + 1; + if (xfs_sb_version_hasfinobt(&mp->m_sb)) + return XFS_FIBT_BLOCK(mp) + 1; + return XFS_IBT_BLOCK(mp) + 1; +} + xfs_extlen_t xfs_prealloc_blocks( struct xfs_mount *mp) { + if (xfs_sb_version_hasreflink(&mp->m_sb)) + return XFS_REFC_BLOCK(mp) + 1; if (xfs_sb_version_hasrmapbt(&mp->m_sb)) return XFS_RMAP_BLOCK(mp) + 1; if (xfs_sb_version_hasfinobt(&mp->m_sb)) diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index c0dd355..b1ad07d 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -1365,6 +1365,8 @@ typedef __be32 xfs_rmap_ptr_t; */ #define XFS_REFC_CRC_MAGIC 0x52334643 /* 'R3FC' */ +unsigned int XFS_REFC_BLOCK(struct xfs_mount *mp); + /* * BMAP Btree format definitions From darrick.wong@oracle.com Wed Jul 29 17:33:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 93A077FAE for ; Wed, 29 Jul 2015 17:33:45 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 80060304043 for ; Wed, 29 Jul 2015 15:33:45 -0700 (PDT) X-ASG-Debug-ID: 1438209223-04cbb0416f88fb0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id JKlVjNdGjB18TZs5 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:43 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXcUZ006721 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:38 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXbP2021929 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:37 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXVa2032278; Wed, 29 Jul 2015 22:33:36 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:31 -0700 Subject: [PATCH 05/24] xfs: define the on-disk refcount btree format From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 05/24] xfs: define the on-disk refcount btree format To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:30 -0700 Message-ID: <20150729223330.17414.82692.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209223 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Start constructing the refcount btree implementation by establishing the on-disk format and everything needed to read, write, and manipulate the refcount btree blocks. Signed-off-by: Darrick J. Wong --- fs/xfs/Makefile | 1 fs/xfs/libxfs/xfs_btree.c | 3 + fs/xfs/libxfs/xfs_btree.h | 3 + fs/xfs/libxfs/xfs_format.h | 32 ++++++ fs/xfs/libxfs/xfs_refcount_btree.c | 192 ++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_refcount_btree.h | 65 ++++++++++++ fs/xfs/libxfs/xfs_sb.c | 9 ++ fs/xfs/libxfs/xfs_shared.h | 2 fs/xfs/xfs_mount.h | 2 9 files changed, 309 insertions(+) create mode 100644 fs/xfs/libxfs/xfs_refcount_btree.c create mode 100644 fs/xfs/libxfs/xfs_refcount_btree.h diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile index e338595..f3f7098 100644 --- a/fs/xfs/Makefile +++ b/fs/xfs/Makefile @@ -52,6 +52,7 @@ xfs-y += $(addprefix libxfs/, \ xfs_log_rlimit.o \ xfs_rmap.o \ xfs_rmap_btree.o \ + xfs_refcount_btree.o \ xfs_sb.o \ xfs_symlink_remote.o \ xfs_trans_resv.o \ diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index 51b56c5..708f938 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -1118,6 +1118,9 @@ xfs_btree_set_refs( case XFS_BTNUM_RMAP: xfs_buf_set_ref(bp, XFS_RMAP_BTREE_REF); break; + case XFS_BTNUM_REFC: + xfs_buf_set_ref(bp, XFS_REFC_BTREE_REF); + break; default: ASSERT(0); } diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index b747c86..7a71292 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -43,6 +43,7 @@ union xfs_btree_key { xfs_alloc_key_t alloc; struct xfs_inobt_key inobt; struct xfs_rmap_key rmap; + struct xfs_refcount_key refc; }; union xfs_btree_rec { @@ -51,6 +52,7 @@ union xfs_btree_rec { struct xfs_alloc_rec alloc; struct xfs_inobt_rec inobt; struct xfs_rmap_rec rmap; + struct xfs_refcount_rec refc; }; /* @@ -208,6 +210,7 @@ typedef struct xfs_btree_cur xfs_bmbt_irec_t b; xfs_inobt_rec_incore_t i; struct xfs_rmap_irec r; + struct xfs_refcount_irec rc; } bc_rec; /* current insert/search record value */ struct xfs_buf *bc_bufs[XFS_BTREE_MAXLEVELS]; /* buf ptr per level */ int bc_ptrs[XFS_BTREE_MAXLEVELS]; /* key/record # */ diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index b1ad07d..71efa26 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -1367,6 +1367,38 @@ typedef __be32 xfs_rmap_ptr_t; unsigned int XFS_REFC_BLOCK(struct xfs_mount *mp); +/* + * Data record/key structure + * + * Each record associates a range of physical blocks (starting at + * rc_startblock and ending rc_blockcount blocks later) with a + * reference count (rc_refcount). A record is only stored in the + * btree if the refcount is > 2. An entry in the free block btree + * means that the refcount is 0, and no entries anywhere means that + * the refcount is 1, as was true in XFS before reflinking. + */ +struct xfs_refcount_rec { + __be32 rc_startblock; /* starting block number */ + __be32 rc_blockcount; /* count of blocks */ + __be32 rc_refcount; /* number of inodes linked here */ +}; + +struct xfs_refcount_key { + __be32 rc_startblock; /* starting block number */ +}; + +struct xfs_refcount_irec { + xfs_agblock_t rc_startblock; /* starting block number */ + xfs_extlen_t rc_blockcount; /* count of free blocks */ + xfs_nlink_t rc_refcount; /* number of inodes linked here */ +}; + +#define MAXREFCOUNT ((xfs_nlink_t)~0U) +#define MAXREFCEXTLEN ((xfs_extlen_t)~0U) + +/* btree pointer type */ +typedef __be32 xfs_refcount_ptr_t; + /* * BMAP Btree format definitions diff --git a/fs/xfs/libxfs/xfs_refcount_btree.c b/fs/xfs/libxfs/xfs_refcount_btree.c new file mode 100644 index 0000000..cebafb0 --- /dev/null +++ b/fs/xfs/libxfs/xfs_refcount_btree.c @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. + * Copyright (c) 2015 Oracle. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_shared.h" +#include "xfs_format.h" +#include "xfs_log_format.h" +#include "xfs_trans_resv.h" +#include "xfs_sb.h" +#include "xfs_mount.h" +#include "xfs_btree.h" +#include "xfs_bmap.h" +#include "xfs_refcount_btree.h" +#include "xfs_alloc.h" +#include "xfs_error.h" +#include "xfs_trace.h" +#include "xfs_cksum.h" +#include "xfs_trans.h" +#include "xfs_bit.h" + +static struct xfs_btree_cur * +xfs_refcountbt_dup_cursor( + struct xfs_btree_cur *cur) +{ + return xfs_refcountbt_init_cursor(cur->bc_mp, cur->bc_tp, + cur->bc_private.a.agbp, cur->bc_private.a.agno, + cur->bc_private.a.flist); +} + +STATIC bool +xfs_refcountbt_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); + struct xfs_perag *pag = bp->b_pag; + unsigned int level; + + if (block->bb_magic != cpu_to_be32(XFS_REFC_CRC_MAGIC)) + return false; + + if (!xfs_sb_version_hasreflink(&mp->m_sb)) + return false; + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + return false; + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) + return false; + if (pag && + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + return false; + + level = be16_to_cpu(block->bb_level); + if (pag && pag->pagf_init) { + if (level >= pag->pagf_refcount_level) + return false; + } else if (level >= mp->m_ag_maxlevels) + return false; + + /* numrecs verification */ + if (be16_to_cpu(block->bb_numrecs) > mp->m_refc_mxr[level != 0]) + return false; + + /* sibling pointer verification */ + if (!block->bb_u.s.bb_leftsib || + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) + return false; + if (!block->bb_u.s.bb_rightsib || + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) + return false; + + return true; +} + +STATIC void +xfs_refcountbt_read_verify( + struct xfs_buf *bp) +{ + if (!xfs_btree_sblock_verify_crc(bp)) + xfs_buf_ioerror(bp, -EFSBADCRC); + else if (!xfs_refcountbt_verify(bp)) + xfs_buf_ioerror(bp, -EFSCORRUPTED); + + if (bp->b_error) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + xfs_verifier_error(bp); + } +} + +STATIC void +xfs_refcountbt_write_verify( + struct xfs_buf *bp) +{ + if (!xfs_refcountbt_verify(bp)) { + trace_xfs_btree_corrupt(bp, _RET_IP_); + xfs_buf_ioerror(bp, -EFSCORRUPTED); + xfs_verifier_error(bp); + return; + } + xfs_btree_sblock_calc_crc(bp); + +} + +const struct xfs_buf_ops xfs_refcountbt_buf_ops = { + .verify_read = xfs_refcountbt_read_verify, + .verify_write = xfs_refcountbt_write_verify, +}; + +static const struct xfs_btree_ops xfs_refcountbt_ops = { + .rec_len = sizeof(struct xfs_refcount_rec), + .key_len = sizeof(struct xfs_refcount_key), + + .dup_cursor = xfs_refcountbt_dup_cursor, + .buf_ops = &xfs_refcountbt_buf_ops, +}; + +/** + * xfs_refcountbt_init_cursor() -- Allocate a new refcount btree cursor. + * + * @mp: XFS mount object + * @tp: XFS transaction + * @agbp: Buffer containing the AGF + * @agno: AG number + */ +struct xfs_btree_cur * +xfs_refcountbt_init_cursor( + struct xfs_mount *mp, + struct xfs_trans *tp, + struct xfs_buf *agbp, + xfs_agnumber_t agno, + struct xfs_bmap_free *flist) +{ + struct xfs_agf *agf = XFS_BUF_TO_AGF(agbp); + struct xfs_btree_cur *cur; + + ASSERT(agno != NULLAGNUMBER); + ASSERT(agno < mp->m_sb.sb_agcount); + cur = kmem_zone_zalloc(xfs_btree_cur_zone, KM_SLEEP); + + cur->bc_tp = tp; + cur->bc_mp = mp; + cur->bc_btnum = XFS_BTNUM_REFC; + cur->bc_blocklog = mp->m_sb.sb_blocklog; + cur->bc_ops = &xfs_refcountbt_ops; + + cur->bc_nlevels = be32_to_cpu(agf->agf_refcount_level); + + cur->bc_private.a.agbp = agbp; + cur->bc_private.a.agno = agno; + cur->bc_private.a.flist = flist; + cur->bc_flags |= XFS_BTREE_CRC_BLOCKS; + + return cur; +} + +/** + * xfs_refcountbt_maxrecs() -- Calculate number of records in a refcount + * btree block. + * @mp: XFS mount object + * @blocklen: Length of block, in bytes. + * @leaf: true if this is a leaf btree block, false otherwise + */ +int +xfs_refcountbt_maxrecs( + struct xfs_mount *mp, + int blocklen, + bool leaf) +{ + blocklen -= XFS_REFCOUNT_BLOCK_LEN; + + if (leaf) + return blocklen / sizeof(struct xfs_refcount_rec); + return blocklen / (sizeof(struct xfs_refcount_key) + + sizeof(xfs_refcount_ptr_t)); +} diff --git a/fs/xfs/libxfs/xfs_refcount_btree.h b/fs/xfs/libxfs/xfs_refcount_btree.h new file mode 100644 index 0000000..aadb279 --- /dev/null +++ b/fs/xfs/libxfs/xfs_refcount_btree.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2000,2005 Silicon Graphics, Inc. + * Copyright (c) 2015 Oracle. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_REFCOUNT_BTREE_H__ +#define __XFS_REFCOUNT_BTREE_H__ + +/* + * Freespace on-disk structures + */ + +struct xfs_buf; +struct xfs_btree_cur; +struct xfs_mount; + +/* + * Btree block header size depends on a superblock flag. + */ +#define XFS_REFCOUNT_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN + +/* + * Record, key, and pointer address macros for btree blocks. + * + * (note that some of these may appear unused, but they are used in userspace) + */ +#define XFS_REFCOUNT_REC_ADDR(block, index) \ + ((struct xfs_refcount_rec *) \ + ((char *)(block) + \ + XFS_REFCOUNT_BLOCK_LEN + \ + (((index) - 1) * sizeof(struct xfs_refcount_rec)))) + +#define XFS_REFCOUNT_KEY_ADDR(block, index) \ + ((struct xfs_refcount_key *) \ + ((char *)(block) + \ + XFS_REFCOUNT_BLOCK_LEN + \ + ((index) - 1) * sizeof(struct xfs_refcount_key))) + +#define XFS_REFCOUNT_PTR_ADDR(block, index, maxrecs) \ + ((xfs_refcount_ptr_t *) \ + ((char *)(block) + \ + XFS_REFCOUNT_BLOCK_LEN + \ + (maxrecs) * sizeof(struct xfs_refcount_key) + \ + ((index) - 1) * sizeof(xfs_refcount_ptr_t))) + +extern struct xfs_btree_cur *xfs_refcountbt_init_cursor(struct xfs_mount *mp, + struct xfs_trans *tp, struct xfs_buf *agbp, xfs_agnumber_t agno, + struct xfs_bmap_free *flist); +extern int xfs_refcountbt_maxrecs(struct xfs_mount *mp, int blocklen, + bool leaf); + +#endif /* __XFS_REFCOUNT_BTREE_H__ */ diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index db5a19d3..a7dcbe0 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -36,6 +36,8 @@ #include "xfs_alloc_btree.h" #include "xfs_ialloc_btree.h" #include "xfs_rmap_btree.h" +#include "xfs_bmap.h" +#include "xfs_refcount_btree.h" /* * Physical superblock buffer manipulations. Shared with libxfs in userspace. @@ -717,6 +719,13 @@ xfs_sb_mount_common( mp->m_rmap_mnr[0] = mp->m_rmap_mxr[0] / 2; mp->m_rmap_mnr[1] = mp->m_rmap_mxr[1] / 2; + mp->m_refc_mxr[0] = xfs_refcountbt_maxrecs(mp, sbp->sb_blocksize, + true); + mp->m_refc_mxr[1] = xfs_refcountbt_maxrecs(mp, sbp->sb_blocksize, + false); + mp->m_refc_mnr[0] = mp->m_refc_mxr[0] / 2; + mp->m_refc_mnr[1] = mp->m_refc_mxr[1] / 2; + mp->m_bsize = XFS_FSB_TO_BB(mp, 1); mp->m_ialloc_inos = (int)MAX((__uint16_t)XFS_INODES_PER_CHUNK, sbp->sb_inopblock); diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h index 88efbb4..77d1220 100644 --- a/fs/xfs/libxfs/xfs_shared.h +++ b/fs/xfs/libxfs/xfs_shared.h @@ -39,6 +39,7 @@ extern const struct xfs_buf_ops xfs_agf_buf_ops; extern const struct xfs_buf_ops xfs_agfl_buf_ops; extern const struct xfs_buf_ops xfs_allocbt_buf_ops; extern const struct xfs_buf_ops xfs_rmapbt_buf_ops; +extern const struct xfs_buf_ops xfs_refcountbt_buf_ops; extern const struct xfs_buf_ops xfs_attr3_leaf_buf_ops; extern const struct xfs_buf_ops xfs_attr3_rmt_buf_ops; extern const struct xfs_buf_ops xfs_bmbt_buf_ops; @@ -216,6 +217,7 @@ int xfs_log_calc_minimum_size(struct xfs_mount *); #define XFS_INO_REF 2 #define XFS_ATTR_BTREE_REF 1 #define XFS_DQUOT_REF 1 +#define XFS_REFC_BTREE_REF 1 /* * Flags for xfs_trans_ichgtime(). diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 4b286cc..aba42d7 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -92,6 +92,8 @@ typedef struct xfs_mount { uint m_inobt_mnr[2]; /* min inobt btree records */ uint m_rmap_mxr[2]; /* max rmap btree records */ uint m_rmap_mnr[2]; /* min rmap btree records */ + uint m_refc_mxr[2]; /* max refc btree records */ + uint m_refc_mnr[2]; /* min refc btree records */ uint m_ag_maxlevels; /* XFS_AG_MAXLEVELS */ uint m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */ uint m_in_maxlevels; /* max inobt btree levels. */ From darrick.wong@oracle.com Wed Jul 29 17:33:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 4D7B67FB3 for ; Wed, 29 Jul 2015 17:33:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 000B0304043 for ; Wed, 29 Jul 2015 15:33:45 -0700 (PDT) X-ASG-Debug-ID: 1438209223-04bdf06bcf0b350001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id D3B5gRFKUTWnBznk (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:43 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXbdn006709 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:38 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXbHG021902 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:37 GMT Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXCM1032141; Wed, 29 Jul 2015 22:33:28 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:12 -0700 Subject: [PATCH 02/24] xfs: define tracepoints for refcount/reflink activities From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 02/24] xfs: define tracepoints for refcount/reflink activities To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:11 -0700 Message-ID: <20150729223311.17414.63147.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209223 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Define all the tracepoints we need to inspect the refcount and reflink runtime operation. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_trace.h | 673 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 673 insertions(+) diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index 25bd4f5..a7f5f46 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -2159,6 +2159,679 @@ DEFINE_DISCARD_EVENT(xfs_discard_toosmall); DEFINE_DISCARD_EVENT(xfs_discard_exclude); DEFINE_DISCARD_EVENT(xfs_discard_busy); +/* reflink/refcount tracepoint classes */ + +/* reuse the discard trace class for agbno/aglen-based traces */ +#define DEFINE_AG_EXTENT_EVENT(name) DEFINE_DISCARD_EVENT(name) + +/* ag btree lookup tracepoint class */ +#define XFS_AG_BTREE_CMP_FORMAT_STR \ + { XFS_LOOKUP_EQ, "eq" }, \ + { XFS_LOOKUP_LE, "le" }, \ + { XFS_LOOKUP_GE, "ge" } +DECLARE_EVENT_CLASS(xfs_ag_btree_lookup_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, + xfs_agblock_t agbno, xfs_lookup_t dir), + TP_ARGS(mp, agno, agbno, dir), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_lookup_t, dir) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->agbno = agbno; + __entry->dir = dir; + ), + TP_printk("dev %d:%d agno %u agbno %u cmp %s(%d)\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->agbno, + __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR), + __entry->dir) +) + +#define DEFINE_AG_BTREE_LOOKUP_EVENT(name) \ +DEFINE_EVENT(xfs_ag_btree_lookup_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ + xfs_agblock_t agbno, xfs_lookup_t dir), \ + TP_ARGS(mp, agno, agbno, dir)) + +/* two-file io tracepoint class */ +DECLARE_EVENT_CLASS(xfs_double_io_class, + TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, + struct xfs_inode *dest, xfs_off_t doffset), + TP_ARGS(src, soffset, len, dest, doffset), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, src_ino) + __field(loff_t, src_isize) + __field(loff_t, src_disize) + __field(loff_t, src_offset) + __field(size_t, len) + __field(xfs_ino_t, dest_ino) + __field(loff_t, dest_isize) + __field(loff_t, dest_disize) + __field(loff_t, dest_offset) + ), + TP_fast_assign( + __entry->dev = VFS_I(src)->i_sb->s_dev; + __entry->src_ino = src->i_ino; + __entry->src_isize = VFS_I(src)->i_size; + __entry->src_disize = src->i_d.di_size; + __entry->src_offset = soffset; + __entry->len = len; + __entry->dest_ino = dest->i_ino; + __entry->dest_isize = VFS_I(dest)->i_size; + __entry->dest_disize = dest->i_d.di_size; + __entry->dest_offset = doffset; + ), + TP_printk("dev %d:%d count %zd " + "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx -> " + "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->len, + __entry->src_ino, + __entry->src_isize, + __entry->src_disize, + __entry->src_offset, + __entry->dest_ino, + __entry->dest_isize, + __entry->dest_disize, + __entry->dest_offset) +) + +#define DEFINE_DOUBLE_IO_EVENT(name) \ +DEFINE_EVENT(xfs_double_io_class, name, \ + TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \ + struct xfs_inode *dest, xfs_off_t doffset), \ + TP_ARGS(src, soffset, len, dest, doffset)) + +/* two-file vfs io tracepoint class */ +DECLARE_EVENT_CLASS(xfs_double_vfs_io_class, + TP_PROTO(struct inode *src, u64 soffset, u64 len, + struct inode *dest, u64 doffset), + TP_ARGS(src, soffset, len, dest, doffset), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(unsigned long, src_ino) + __field(loff_t, src_isize) + __field(loff_t, src_offset) + __field(size_t, len) + __field(unsigned long, dest_ino) + __field(loff_t, dest_isize) + __field(loff_t, dest_offset) + ), + TP_fast_assign( + __entry->dev = src->i_sb->s_dev; + __entry->src_ino = src->i_ino; + __entry->src_isize = i_size_read(src); + __entry->src_offset = soffset; + __entry->len = len; + __entry->dest_ino = dest->i_ino; + __entry->dest_isize = i_size_read(dest); + __entry->dest_offset = doffset; + ), + TP_printk("dev %d:%d count %zd " + "ino 0x%lx isize 0x%llx offset 0x%llx -> " + "ino 0x%lx isize 0x%llx offset 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->len, + __entry->src_ino, + __entry->src_isize, + __entry->src_offset, + __entry->dest_ino, + __entry->dest_isize, + __entry->dest_offset) +) + +#define DEFINE_DOUBLE_VFS_IO_EVENT(name) \ +DEFINE_EVENT(xfs_double_vfs_io_class, name, \ + TP_PROTO(struct inode *src, u64 soffset, u64 len, \ + struct inode *dest, u64 doffset), \ + TP_ARGS(src, soffset, len, dest, doffset)) + +/* CoW write tracepoint */ +DECLARE_EVENT_CLASS(xfs_copy_on_write_class, + TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t lblk, xfs_fsblock_t pblk, + xfs_extlen_t len, xfs_fsblock_t new_pblk), + TP_ARGS(ip, lblk, pblk, len, new_pblk), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fileoff_t, lblk) + __field(xfs_fsblock_t, pblk) + __field(xfs_extlen_t, len) + __field(xfs_fsblock_t, new_pblk) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->lblk = lblk; + __entry->pblk = pblk; + __entry->len = len; + __entry->new_pblk = new_pblk; + ), + TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx pblk 0x%llx " + "len 0x%x new_pblk %llu", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->lblk, + __entry->pblk, + __entry->len, + __entry->new_pblk) +) + +#define DEFINE_COW_EVENT(name) \ +DEFINE_EVENT(xfs_copy_on_write_class, name, \ + TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t lblk, xfs_fsblock_t pblk, \ + xfs_extlen_t len, xfs_fsblock_t new_pblk), \ + TP_ARGS(ip, lblk, pblk, len, new_pblk)) + +/* single-rlext tracepoint class */ +DECLARE_EVENT_CLASS(xfs_refcount_extent_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, + struct xfs_refcount_irec *irec), + TP_ARGS(mp, agno, irec), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, startblock) + __field(xfs_extlen_t, blockcount) + __field(xfs_nlink_t, refcount) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->startblock = irec->rc_startblock; + __entry->blockcount = irec->rc_blockcount; + __entry->refcount = irec->rc_refcount; + ), + TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->startblock, + __entry->blockcount, + __entry->refcount) +) + +#define DEFINE_REFCOUNT_EXTENT_EVENT(name) \ +DEFINE_EVENT(xfs_refcount_extent_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ + struct xfs_refcount_irec *irec), \ + TP_ARGS(mp, agno, irec)) + +/* single-rlext and an agbno tracepoint class */ +DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, + struct xfs_refcount_irec *irec, xfs_agblock_t agbno), + TP_ARGS(mp, agno, irec, agbno), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, startblock) + __field(xfs_extlen_t, blockcount) + __field(xfs_nlink_t, refcount) + __field(xfs_agblock_t, agbno) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->startblock = irec->rc_startblock; + __entry->blockcount = irec->rc_blockcount; + __entry->refcount = irec->rc_refcount; + __entry->agbno = agbno; + ), + TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u @ agbno %u\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->startblock, + __entry->blockcount, + __entry->refcount, + __entry->agbno) +) + +#define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \ +DEFINE_EVENT(xfs_refcount_extent_at_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ + struct xfs_refcount_irec *irec, xfs_agblock_t agbno), \ + TP_ARGS(mp, agno, irec, agbno)) + +/* double-rlext tracepoint class */ +DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, + struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), + TP_ARGS(mp, agno, i1, i2), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, i1_startblock) + __field(xfs_extlen_t, i1_blockcount) + __field(xfs_nlink_t, i1_refcount) + __field(xfs_agblock_t, i2_startblock) + __field(xfs_extlen_t, i2_blockcount) + __field(xfs_nlink_t, i2_refcount) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->i1_startblock = i1->rc_startblock; + __entry->i1_blockcount = i1->rc_blockcount; + __entry->i1_refcount = i1->rc_refcount; + __entry->i2_startblock = i2->rc_startblock; + __entry->i2_blockcount = i2->rc_blockcount; + __entry->i2_refcount = i2->rc_refcount; + ), + TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " + "agbno %u len %u refcount %u\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->i1_startblock, + __entry->i1_blockcount, + __entry->i1_refcount, + __entry->i2_startblock, + __entry->i2_blockcount, + __entry->i2_refcount) +) + +#define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \ +DEFINE_EVENT(xfs_refcount_double_extent_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ + struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), \ + TP_ARGS(mp, agno, i1, i2)) + +/* double-rlext and an agbno tracepoint class */ +DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, + struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, + xfs_agblock_t agbno), + TP_ARGS(mp, agno, i1, i2, agbno), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, i1_startblock) + __field(xfs_extlen_t, i1_blockcount) + __field(xfs_nlink_t, i1_refcount) + __field(xfs_agblock_t, i2_startblock) + __field(xfs_extlen_t, i2_blockcount) + __field(xfs_nlink_t, i2_refcount) + __field(xfs_agblock_t, agbno) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->i1_startblock = i1->rc_startblock; + __entry->i1_blockcount = i1->rc_blockcount; + __entry->i1_refcount = i1->rc_refcount; + __entry->i2_startblock = i2->rc_startblock; + __entry->i2_blockcount = i2->rc_blockcount; + __entry->i2_refcount = i2->rc_refcount; + __entry->agbno = agbno; + ), + TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " + "agbno %u len %u refcount %u @ agbno %u\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->i1_startblock, + __entry->i1_blockcount, + __entry->i1_refcount, + __entry->i2_startblock, + __entry->i2_blockcount, + __entry->i2_refcount, + __entry->agbno) +) + +#define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \ +DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ + struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \ + xfs_agblock_t agbno), \ + TP_ARGS(mp, agno, i1, i2, agbno)) + +/* triple-rlext tracepoint class */ +DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, + struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, + struct xfs_refcount_irec *i3), + TP_ARGS(mp, agno, i1, i2, i3), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, i1_startblock) + __field(xfs_extlen_t, i1_blockcount) + __field(xfs_nlink_t, i1_refcount) + __field(xfs_agblock_t, i2_startblock) + __field(xfs_extlen_t, i2_blockcount) + __field(xfs_nlink_t, i2_refcount) + __field(xfs_agblock_t, i3_startblock) + __field(xfs_extlen_t, i3_blockcount) + __field(xfs_nlink_t, i3_refcount) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->i1_startblock = i1->rc_startblock; + __entry->i1_blockcount = i1->rc_blockcount; + __entry->i1_refcount = i1->rc_refcount; + __entry->i2_startblock = i2->rc_startblock; + __entry->i2_blockcount = i2->rc_blockcount; + __entry->i2_refcount = i2->rc_refcount; + __entry->i3_startblock = i3->rc_startblock; + __entry->i3_blockcount = i3->rc_blockcount; + __entry->i3_refcount = i3->rc_refcount; + ), + TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " + "agbno %u len %u refcount %u -- " + "agbno %u len %u refcount %u\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->i1_startblock, + __entry->i1_blockcount, + __entry->i1_refcount, + __entry->i2_startblock, + __entry->i2_blockcount, + __entry->i2_refcount, + __entry->i3_startblock, + __entry->i3_blockcount, + __entry->i3_refcount) +); + +#define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \ +DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ + struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \ + struct xfs_refcount_irec *i3), \ + TP_ARGS(mp, agno, i1, i2, i3)) + +/* simple AG-based error/%ip tracepoint class */ +DECLARE_EVENT_CLASS(xfs_ag_error_class, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, + unsigned long caller_ip), + TP_ARGS(mp, agno, error, caller_ip), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(int, error) + __field(unsigned long, caller_ip) + ), + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->error = error; + __entry->caller_ip = caller_ip; + ), + TP_printk("dev %d:%d agno %u error %d caller %ps", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->error, + (char *)__entry->caller_ip) +); + +#define DEFINE_AG_ERROR_EVENT(name) \ +DEFINE_EVENT(xfs_ag_error_class, name, \ + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \ + unsigned long caller_ip), \ + TP_ARGS(mp, agno, error, caller_ip)) + +/* simple inode-based error/%ip tracepoint class */ +DECLARE_EVENT_CLASS(xfs_inode_error_class, + TP_PROTO(struct xfs_inode *ip, int error, unsigned long caller_ip), + TP_ARGS(ip, error, caller_ip), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(int, error) + __field(unsigned long, caller_ip) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->error = error; + __entry->caller_ip = caller_ip; + ), + TP_printk("dev %d:%d ino %llx error %d caller %ps", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->error, + (char *)__entry->caller_ip) +); + +#define DEFINE_INODE_ERROR_EVENT(name) \ +DEFINE_EVENT(xfs_inode_error_class, name, \ + TP_PROTO(struct xfs_inode *ip, int error, \ + unsigned long caller_ip), \ + TP_ARGS(ip, error, caller_ip)) + +/* refcount/reflink tracepoint definitions */ + +/* reflink allocator */ +TRACE_EVENT(xfs_reflink_relink_blocks, + TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t fsbno, + xfs_extlen_t len), + TP_ARGS(ip, fsbno, len), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsblock_t, fsbno) + __field(xfs_extlen_t, len) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->fsbno = fsbno; + __entry->len = len; + ), + TP_printk("dev %d:%d ino 0x%llx fsbno 0x%llx len %x", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->fsbno, + __entry->len) +); + +/* refcount btree tracepoints */ +DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcountbt_lookup); +DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcountbt_get); +DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcountbt_update); +DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcountbt_insert); +DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcountbt_delete); + +/* refcount adjustment tracepoints */ +DEFINE_AG_EXTENT_EVENT(xfs_refcount_increase); +DEFINE_AG_EXTENT_EVENT(xfs_refcount_decrease); +DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents); +DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent); +DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_left_extent); +DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_right_extent); +DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent); +DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent); +DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent); +DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent); +DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_center_extents_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_modify_extent_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_split_left_extent_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_split_right_extent_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_left_extent_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_right_extent_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_find_left_extent_error); +DEFINE_AG_ERROR_EVENT(xfs_refcount_find_right_extent_error); +DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_rec_order_error); + +/* reflink tracepoints */ +DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag); +DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size); +DEFINE_IOMAP_EVENT(xfs_reflink_read_iomap); +TRACE_EVENT(xfs_reflink_main_loop, + TP_PROTO(struct xfs_inode *src, xfs_fileoff_t soffset, + xfs_filblks_t len, struct xfs_inode *dest, + xfs_fileoff_t doffset), + TP_ARGS(src, soffset, len, dest, doffset), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, src_ino) + __field(xfs_fileoff_t, src_lblk) + __field(xfs_filblks_t, len) + __field(xfs_ino_t, dest_ino) + __field(xfs_fileoff_t, dest_lblk) + ), + TP_fast_assign( + __entry->dev = VFS_I(src)->i_sb->s_dev; + __entry->src_ino = src->i_ino; + __entry->src_lblk = soffset; + __entry->len = len; + __entry->dest_ino = dest->i_ino; + __entry->dest_lblk = doffset; + ), + TP_printk("dev %d:%d len 0x%llx " + "ino 0x%llx offset 0x%llx blocks -> " + "ino 0x%llx offset 0x%llx blocks", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->len, + __entry->src_ino, + __entry->src_lblk, + __entry->dest_ino, + __entry->dest_lblk) +); +TRACE_EVENT(xfs_reflink_punch_range, + TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t lblk, + xfs_extlen_t len), + TP_ARGS(ip, lblk, len), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fileoff_t, lblk) + __field(xfs_extlen_t, len) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->lblk = lblk; + __entry->len = len; + ), + TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->lblk, + __entry->len) +); +TRACE_EVENT(xfs_reflink_remap_range, + TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t lblk, + xfs_extlen_t len, xfs_fsblock_t new_pblk), + TP_ARGS(ip, lblk, len, new_pblk), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fileoff_t, lblk) + __field(xfs_extlen_t, len) + __field(xfs_fsblock_t, new_pblk) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->lblk = lblk; + __entry->len = len; + __entry->new_pblk = new_pblk; + ), + TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x new_pblk %llu", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->lblk, + __entry->len, + __entry->new_pblk) +); +DEFINE_DOUBLE_IO_EVENT(xfs_reflink_range); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_range_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_reflink_main_loop_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_read_iomap_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_punch_range_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error); + +/* dedupe tracepoints */ +DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error); + +/* ioctl tracepoints */ +DEFINE_DOUBLE_VFS_IO_EVENT(xfs_ioctl_reflink); +DEFINE_DOUBLE_VFS_IO_EVENT(xfs_ioctl_clone_range); +DEFINE_DOUBLE_VFS_IO_EVENT(xfs_ioctl_file_extent_same); +TRACE_EVENT(xfs_ioctl_clone, + TP_PROTO(struct inode *src, struct inode *dest), + TP_ARGS(src, dest), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(unsigned long, src_ino) + __field(loff_t, src_isize) + __field(unsigned long, dest_ino) + __field(loff_t, dest_isize) + ), + TP_fast_assign( + __entry->dev = src->i_sb->s_dev; + __entry->src_ino = src->i_ino; + __entry->src_isize = i_size_read(src); + __entry->dest_ino = dest->i_ino; + __entry->dest_isize = i_size_read(dest); + ), + TP_printk("dev %d:%d " + "ino 0x%lx isize 0x%llx -> " + "ino 0x%lx isize 0x%llx\n", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->src_ino, + __entry->src_isize, + __entry->dest_ino, + __entry->dest_isize) +); + +/* unshare tracepoints */ +DEFINE_INODE_EVENT(xfs_reflink_start_unshare); +DEFINE_INODE_EVENT(xfs_reflink_end_unshare); +DEFINE_PAGE_EVENT(xfs_reflink_unshare_page); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_start_unshare_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_unshare_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_dirty_page_error); + +/* copy on write events */ +TRACE_EVENT(xfs_reflink_bounce_direct_write, + TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), + TP_ARGS(ip, irec), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fileoff_t, lblk) + __field(xfs_extlen_t, len) + __field(xfs_fsblock_t, pblk) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->lblk = irec->br_startoff; + __entry->len = irec->br_blockcount; + __entry->pblk = irec->br_startblock; + ), + TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x pblk %llu", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->lblk, + __entry->len, + __entry->pblk) +); +DEFINE_COW_EVENT(xfs_reflink_reserve_fork_block); +DEFINE_COW_EVENT(xfs_reflink_write_fork_block); +DEFINE_COW_EVENT(xfs_reflink_remap_after_io); +DEFINE_COW_EVENT(xfs_reflink_free_forked); +DEFINE_COW_EVENT(xfs_reflink_fork_buf); +DEFINE_COW_EVENT(xfs_reflink_finish_fork_buf); +DEFINE_RW_EVENT(xfs_reflink_force_getblocks); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_reserve_fork_block_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_after_io_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_free_forked_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_fork_buf_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_finish_fork_buf_error); +DEFINE_INODE_ERROR_EVENT(xfs_reflink_write_fork_block_error); + #endif /* _TRACE_XFS_H */ #undef TRACE_INCLUDE_PATH From darrick.wong@oracle.com Wed Jul 29 17:33:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3FAE47FD1 for ; Wed, 29 Jul 2015 17:33:49 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D69B5AC002 for ; Wed, 29 Jul 2015 15:33:48 -0700 (PDT) X-ASG-Debug-ID: 1438209226-04bdf06bd10b360001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id UNCSJEAfFlpwon18 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:47 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXkCe020599 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:46 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXkDh022309 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:46 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXbOg032335; Wed, 29 Jul 2015 22:33:37 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:37 -0700 Subject: [PATCH 06/24] xfs: add refcount btree support to growfs From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 06/24] xfs: add refcount btree support to growfs To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:37 -0700 Message-ID: <20150729223337.17414.92008.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209227 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Modify the growfs code to initialize new refcount btree blocks. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_fsops.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 9aabefb..4d39a30 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -260,6 +260,10 @@ xfs_growfs_data_private( agf->agf_longest = cpu_to_be32(tmpsize); if (xfs_sb_version_hascrc(&mp->m_sb)) uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_uuid); + if (xfs_sb_version_hasreflink(&mp->m_sb)) { + agf->agf_refcount_root = cpu_to_be32(XFS_REFC_BLOCK(mp)); + agf->agf_refcount_level = cpu_to_be32(1); + } error = xfs_bwrite(bp); xfs_buf_relse(bp); @@ -503,6 +507,28 @@ xfs_growfs_data_private( goto error0; } + /* + * refcount btree root block + */ + if (xfs_sb_version_hasreflink(&mp->m_sb)) { + bp = xfs_growfs_get_hdr_buf(mp, + XFS_AGB_TO_DADDR(mp, agno, XFS_REFC_BLOCK(mp)), + BTOBB(mp->m_sb.sb_blocksize), 0, + &xfs_refcountbt_buf_ops); + if (!bp) { + error = -ENOMEM; + goto error0; + } + + xfs_btree_init_block(mp, bp, XFS_REFC_CRC_MAGIC, + 0, 0, agno, + XFS_BTREE_CRC_BLOCKS); + + error = xfs_bwrite(bp); + xfs_buf_relse(bp); + if (error) + goto error0; + } } xfs_trans_agblocks_delta(tp, nfree); /* From darrick.wong@oracle.com Wed Jul 29 17:33:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6B5AA7FD4 for ; Wed, 29 Jul 2015 17:33:49 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5238C304043 for ; Wed, 29 Jul 2015 15:33:49 -0700 (PDT) X-ASG-Debug-ID: 1438209226-04cbb0416e88fb0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id DH44inMaupKCXgsu (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:46 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXi6d020593 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:45 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXig6007639 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:44 GMT Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXiNZ009516; Wed, 29 Jul 2015 22:33:44 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:43 -0700 Subject: [PATCH 07/24] xfs: add refcount btree operations From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 07/24] xfs: add refcount btree operations To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:43 -0700 Message-ID: <20150729223343.17414.27263.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209226 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Implement the generic btree operations required to manipulate refcount btree blocks. The implementation is similar to the bmapbt, though it will only allocate and free blocks from the AG. Signed-off-by: Darrick J. Wong --- fs/xfs/Makefile | 1 fs/xfs/libxfs/xfs_format.h | 3 - fs/xfs/libxfs/xfs_refcount.c | 168 ++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_refcount.h | 29 +++++ fs/xfs/libxfs/xfs_refcount_btree.c | 201 ++++++++++++++++++++++++++++++++++++ 5 files changed, 401 insertions(+), 1 deletion(-) create mode 100644 fs/xfs/libxfs/xfs_refcount.c create mode 100644 fs/xfs/libxfs/xfs_refcount.h diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile index f3f7098..90309ec 100644 --- a/fs/xfs/Makefile +++ b/fs/xfs/Makefile @@ -52,6 +52,7 @@ xfs-y += $(addprefix libxfs/, \ xfs_log_rlimit.o \ xfs_rmap.o \ xfs_rmap_btree.o \ + xfs_refcount.o \ xfs_refcount_btree.o \ xfs_sb.o \ xfs_symlink_remote.o \ diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index 71efa26..ec14477 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -1325,7 +1325,8 @@ typedef __be32 xfs_inobt_ptr_t; #define XFS_RMAP_OWN_AG (-5ULL) /* AG freespace btree blocks */ #define XFS_RMAP_OWN_INOBT (-6ULL) /* Inode btree blocks */ #define XFS_RMAP_OWN_INODES (-7ULL) /* Inode chunk */ -#define XFS_RMAP_OWN_MIN (-8ULL) /* guard */ +#define XFS_RMAP_OWN_REFC (-8ULL) /* refcount tree */ +#define XFS_RMAP_OWN_MIN (-9ULL) /* guard */ /* * Data record structure diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c new file mode 100644 index 0000000..750e825 --- /dev/null +++ b/fs/xfs/libxfs/xfs_refcount.c @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. + * Copyright (c) 2015 Oracle. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_shared.h" +#include "xfs_format.h" +#include "xfs_log_format.h" +#include "xfs_trans_resv.h" +#include "xfs_sb.h" +#include "xfs_mount.h" +#include "xfs_btree.h" +#include "xfs_bmap.h" +#include "xfs_refcount_btree.h" +#include "xfs_alloc.h" +#include "xfs_error.h" +#include "xfs_trace.h" +#include "xfs_cksum.h" +#include "xfs_trans.h" +#include "xfs_bit.h" +#include "xfs_refcount.h" + +/** + * xfs_refcountbt_lookup_le() -- Look up the first record less than or equal to + * [bno, len] in the btree given by cur. + * @cur: refcount btree cursor + * @bno: AG block number to look up + * @stat: set to 1 if successful, 0 otherwise + */ +int +xfs_refcountbt_lookup_le( + struct xfs_btree_cur *cur, + xfs_agblock_t bno, + int *stat) +{ + trace_xfs_refcountbt_lookup(cur->bc_mp, cur->bc_private.a.agno, bno, + XFS_LOOKUP_LE); + cur->bc_rec.rc.rc_startblock = bno; + cur->bc_rec.rc.rc_blockcount = 0; + return xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat); +} + +/** + * xfs_refcountbt_lookup_ge() -- Look up the first record greater than or equal + * to [bno, len] in the btree given by cur. + * @cur: refcount btree cursor + * @bno: AG block number to look up + * @stat: set to 1 if successful, 0 otherwise + */ +int /* error */ +xfs_refcountbt_lookup_ge( + struct xfs_btree_cur *cur, /* btree cursor */ + xfs_agblock_t bno, /* starting block of extent */ + int *stat) /* success/failure */ +{ + trace_xfs_refcountbt_lookup(cur->bc_mp, cur->bc_private.a.agno, bno, + XFS_LOOKUP_GE); + cur->bc_rec.rc.rc_startblock = bno; + cur->bc_rec.rc.rc_blockcount = 0; + return xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat); +} + +/** + * xfs_refcountbt_get_rec() -- Get the data from the pointed-to record. + * + * @cur: refcount btree cursor + * @irec: set to the record currently pointed to by the btree cursor + * @stat: set to 1 if successful, 0 otherwise + */ +int +xfs_refcountbt_get_rec( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *irec, + int *stat) +{ + union xfs_btree_rec *rec; + int error; + + error = xfs_btree_get_rec(cur, &rec, stat); + if (!error && *stat == 1) { + irec->rc_startblock = be32_to_cpu(rec->refc.rc_startblock); + irec->rc_blockcount = be32_to_cpu(rec->refc.rc_blockcount); + irec->rc_refcount = be32_to_cpu(rec->refc.rc_refcount); + trace_xfs_refcountbt_get(cur->bc_mp, cur->bc_private.a.agno, + irec); + } + return error; +} + +/* + * Update the record referred to by cur to the value given + * by [bno, len, refcount]. + * This either works (return 0) or gets an EFSCORRUPTED error. + */ +STATIC int +xfs_refcountbt_update( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *irec) +{ + union xfs_btree_rec rec; + + trace_xfs_refcountbt_update(cur->bc_mp, cur->bc_private.a.agno, irec); + rec.refc.rc_startblock = cpu_to_be32(irec->rc_startblock); + rec.refc.rc_blockcount = cpu_to_be32(irec->rc_blockcount); + rec.refc.rc_refcount = cpu_to_be32(irec->rc_refcount); + return xfs_btree_update(cur, &rec); +} + +/* + * Insert the record referred to by cur to the value given + * by [bno, len, refcount]. + * This either works (return 0) or gets an EFSCORRUPTED error. + */ +STATIC int +xfs_refcountbt_insert( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *irec, + int *i) +{ + trace_xfs_refcountbt_update(cur->bc_mp, cur->bc_private.a.agno, irec); + cur->bc_rec.rc.rc_startblock = irec->rc_startblock; + cur->bc_rec.rc.rc_blockcount = irec->rc_blockcount; + cur->bc_rec.rc.rc_refcount = irec->rc_refcount; + return xfs_btree_insert(cur, i); +} + +/* + * Remove the record referred to by cur, then set the pointer to the spot + * where the record could be re-inserted, in case we want to increment or + * decrement the cursor. + * This either works (return 0) or gets an EFSCORRUPTED error. + */ +STATIC int +xfs_refcountbt_delete( + struct xfs_btree_cur *cur, + int *i) +{ + struct xfs_refcount_irec irec; + int found_rec; + int error; + + error = xfs_refcountbt_get_rec(cur, &irec, &found_rec); + if (error) + return error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + trace_xfs_refcountbt_delete(cur->bc_mp, cur->bc_private.a.agno, &irec); + error = xfs_btree_delete(cur, i); + if (error) + return error; + error = xfs_refcountbt_lookup_ge(cur, irec.rc_startblock, &found_rec); +out_error: + return error; +} diff --git a/fs/xfs/libxfs/xfs_refcount.h b/fs/xfs/libxfs/xfs_refcount.h new file mode 100644 index 0000000..fd7c337e --- /dev/null +++ b/fs/xfs/libxfs/xfs_refcount.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2000,2005 Silicon Graphics, Inc. + * Copyright (c) 2015 Oracle. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_REFCOUNT_H__ +#define __XFS_REFCOUNT_H__ + +extern int xfs_refcountbt_lookup_le(struct xfs_btree_cur *cur, + xfs_agblock_t bno, int *stat); +extern int xfs_refcountbt_lookup_ge(struct xfs_btree_cur *cur, + xfs_agblock_t bno, int *stat); +extern int xfs_refcountbt_get_rec(struct xfs_btree_cur *cur, + struct xfs_refcount_irec *irec, int *stat); + +#endif /* __XFS_REFCOUNT_H__ */ diff --git a/fs/xfs/libxfs/xfs_refcount_btree.c b/fs/xfs/libxfs/xfs_refcount_btree.c index cebafb0..70f8a97 100644 --- a/fs/xfs/libxfs/xfs_refcount_btree.c +++ b/fs/xfs/libxfs/xfs_refcount_btree.c @@ -43,6 +43,156 @@ xfs_refcountbt_dup_cursor( cur->bc_private.a.flist); } +STATIC void +xfs_refcountbt_set_root( + struct xfs_btree_cur *cur, + union xfs_btree_ptr *ptr, + int inc) +{ + struct xfs_buf *agbp = cur->bc_private.a.agbp; + struct xfs_agf *agf = XFS_BUF_TO_AGF(agbp); + xfs_agnumber_t seqno = be32_to_cpu(agf->agf_seqno); + struct xfs_perag *pag = xfs_perag_get(cur->bc_mp, seqno); + + ASSERT(ptr->s != 0); + + agf->agf_refcount_root = ptr->s; + be32_add_cpu(&agf->agf_refcount_level, inc); + pag->pagf_refcount_level += inc; + xfs_perag_put(pag); + + xfs_alloc_log_agf(cur->bc_tp, agbp, XFS_AGF_ROOTS | XFS_AGF_LEVELS); +} + +STATIC int +xfs_refcountbt_alloc_block( + struct xfs_btree_cur *cur, + union xfs_btree_ptr *start, + union xfs_btree_ptr *new, + int *stat) +{ + struct xfs_alloc_arg args; /* block allocation args */ + int error; /* error return value */ + + memset(&args, 0, sizeof(args)); + args.tp = cur->bc_tp; + args.mp = cur->bc_mp; + args.type = XFS_ALLOCTYPE_NEAR_BNO; + args.fsbno = XFS_AGB_TO_FSB(cur->bc_mp, cur->bc_private.a.agno, + XFS_REFC_BLOCK(args.mp)); + args.firstblock = args.fsbno; + args.owner = XFS_RMAP_OWN_REFC; + args.minlen = args.maxlen = args.prod = 1; + + error = xfs_alloc_vextent(&args); + if (error) + goto out_error; + if (args.fsbno == NULLFSBLOCK) { + XFS_BTREE_TRACE_CURSOR(cur, XBT_EXIT); + *stat = 0; + return 0; + } + ASSERT(args.agno == cur->bc_private.a.agno); + ASSERT(args.len == 1); + + new->s = cpu_to_be32(args.agbno); + + XFS_BTREE_TRACE_CURSOR(cur, XBT_EXIT); + *stat = 1; + return 0; + +out_error: + XFS_BTREE_TRACE_CURSOR(cur, XBT_ERROR); + return error; +} + +STATIC int +xfs_refcountbt_free_block( + struct xfs_btree_cur *cur, + struct xfs_buf *bp) +{ + struct xfs_mount *mp = cur->bc_mp; + struct xfs_trans *tp = cur->bc_tp; + xfs_fsblock_t fsbno = XFS_DADDR_TO_FSB(mp, XFS_BUF_ADDR(bp)); + + xfs_bmap_add_free(mp, cur->bc_private.a.flist, fsbno, 1, + XFS_RMAP_OWN_REFC); + xfs_trans_binval(tp, bp); + return 0; +} + +STATIC int +xfs_refcountbt_get_minrecs( + struct xfs_btree_cur *cur, + int level) +{ + return cur->bc_mp->m_refc_mnr[level != 0]; +} + +STATIC int +xfs_refcountbt_get_maxrecs( + struct xfs_btree_cur *cur, + int level) +{ + return cur->bc_mp->m_refc_mxr[level != 0]; +} + +STATIC void +xfs_refcountbt_init_key_from_rec( + union xfs_btree_key *key, + union xfs_btree_rec *rec) +{ + ASSERT(rec->refc.rc_startblock != 0); + + key->refc.rc_startblock = rec->refc.rc_startblock; +} + +STATIC void +xfs_refcountbt_init_rec_from_key( + union xfs_btree_key *key, + union xfs_btree_rec *rec) +{ + ASSERT(key->refc.rc_startblock != 0); + + rec->refc.rc_startblock = key->refc.rc_startblock; +} + +STATIC void +xfs_refcountbt_init_rec_from_cur( + struct xfs_btree_cur *cur, + union xfs_btree_rec *rec) +{ + ASSERT(cur->bc_rec.rc.rc_startblock != 0); + + rec->refc.rc_startblock = cpu_to_be32(cur->bc_rec.rc.rc_startblock); + rec->refc.rc_blockcount = cpu_to_be32(cur->bc_rec.rc.rc_blockcount); + rec->refc.rc_refcount = cpu_to_be32(cur->bc_rec.rc.rc_refcount); +} + +STATIC void +xfs_refcountbt_init_ptr_from_cur( + struct xfs_btree_cur *cur, + union xfs_btree_ptr *ptr) +{ + struct xfs_agf *agf = XFS_BUF_TO_AGF(cur->bc_private.a.agbp); + + ASSERT(cur->bc_private.a.agno == be32_to_cpu(agf->agf_seqno)); + ASSERT(agf->agf_refcount_root != 0); + + ptr->s = agf->agf_refcount_root; +} + +STATIC __int64_t +xfs_refcountbt_key_diff( + struct xfs_btree_cur *cur, + union xfs_btree_key *key) +{ + struct xfs_refcount_irec *rec = &cur->bc_rec.rc; + struct xfs_refcount_key *kp = &key->refc; + + return (__int64_t)be32_to_cpu(kp->rc_startblock) - rec->rc_startblock; +} + STATIC bool xfs_refcountbt_verify( struct xfs_buf *bp) @@ -123,12 +273,63 @@ const struct xfs_buf_ops xfs_refcountbt_buf_ops = { .verify_write = xfs_refcountbt_write_verify, }; +#if defined(DEBUG) || defined(XFS_WARN) +STATIC int +xfs_refcountbt_keys_inorder( + struct xfs_btree_cur *cur, + union xfs_btree_key *k1, + union xfs_btree_key *k2) +{ + return be32_to_cpu(k1->refc.rc_startblock) < + be32_to_cpu(k2->refc.rc_startblock); +} + +STATIC int +xfs_refcountbt_recs_inorder( + struct xfs_btree_cur *cur, + union xfs_btree_rec *r1, + union xfs_btree_rec *r2) +{ + struct xfs_refcount_irec a, b; + + int ret = be32_to_cpu(r1->refc.rc_startblock) + + be32_to_cpu(r1->refc.rc_blockcount) <= + be32_to_cpu(r2->refc.rc_startblock); + if (!ret) { + a.rc_startblock = be32_to_cpu(r1->refc.rc_startblock); + a.rc_blockcount = be32_to_cpu(r1->refc.rc_blockcount); + a.rc_refcount = be32_to_cpu(r1->refc.rc_refcount); + b.rc_startblock = be32_to_cpu(r2->refc.rc_startblock); + b.rc_blockcount = be32_to_cpu(r2->refc.rc_blockcount); + b.rc_refcount = be32_to_cpu(r2->refc.rc_refcount); + trace_xfs_refcount_rec_order_error(cur->bc_mp, + cur->bc_private.a.agno, &a, &b); + } + + return ret; +} +#endif /* DEBUG */ + static const struct xfs_btree_ops xfs_refcountbt_ops = { .rec_len = sizeof(struct xfs_refcount_rec), .key_len = sizeof(struct xfs_refcount_key), .dup_cursor = xfs_refcountbt_dup_cursor, + .set_root = xfs_refcountbt_set_root, + .alloc_block = xfs_refcountbt_alloc_block, + .free_block = xfs_refcountbt_free_block, + .get_minrecs = xfs_refcountbt_get_minrecs, + .get_maxrecs = xfs_refcountbt_get_maxrecs, + .init_key_from_rec = xfs_refcountbt_init_key_from_rec, + .init_rec_from_key = xfs_refcountbt_init_rec_from_key, + .init_rec_from_cur = xfs_refcountbt_init_rec_from_cur, + .init_ptr_from_cur = xfs_refcountbt_init_ptr_from_cur, + .key_diff = xfs_refcountbt_key_diff, .buf_ops = &xfs_refcountbt_buf_ops, +#if defined(DEBUG) || defined(XFS_WARN) + .keys_inorder = xfs_refcountbt_keys_inorder, + .recs_inorder = xfs_refcountbt_recs_inorder, +#endif }; /** From darrick.wong@oracle.com Wed Jul 29 17:33:55 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0D3C27FE9 for ; Wed, 29 Jul 2015 17:33:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id EEB9F304048 for ; Wed, 29 Jul 2015 15:33:54 -0700 (PDT) X-ASG-Debug-ID: 1438209232-04cb6c673d2ec70001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id ENXop50r36mzc4wD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:33:52 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMXpxn020665 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:33:51 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXpkE016985 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:33:51 GMT Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXoLD028140; Wed, 29 Jul 2015 22:33:50 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:50 -0700 Subject: [PATCH 08/24] libxfs: adjust refcount of an extent of blocks in refcount btree From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 08/24] libxfs: adjust refcount of an extent of blocks in refcount btree To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:49 -0700 Message-ID: <20150729223349.17414.15568.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209232 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Provide functions to adjust the reference counts for an extent of physical blocks stored in the refcount btree. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_refcount.c | 773 ++++++++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_refcount.h | 8 2 files changed, 781 insertions(+) diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c index 750e825..83d5677 100644 --- a/fs/xfs/libxfs/xfs_refcount.c +++ b/fs/xfs/libxfs/xfs_refcount.c @@ -166,3 +166,776 @@ xfs_refcountbt_delete( out_error: return error; } + +/* + * Adjusting the Reference Count + * + * As stated elsewhere, the reference count btree (refcbt) stores + * >1 reference counts for extents of physical blocks. In this + * operation, we're either raising or lowering the reference count of + * some subrange stored in the tree: + * + * <------ adjustment range ------> + * ----+ +---+-----+ +--+--------+--------- + * 2 | | 3 | 4 | |17| 55 | 10 + * ----+ +---+-----+ +--+--------+--------- + * X axis is physical blocks number; + * reference counts are the numbers inside the rectangles + * + * The first thing we need to do is to ensure that there are no + * refcount extents crossing either boundary of the range to be + * adjusted. For any extent that does cross a boundary, split it into + * two extents so that we can increment the refcount of one of the + * pieces later: + * + * <------ adjustment range ------> + * ----+ +---+-----+ +--+--------+----+---- + * 2 | | 3 | 2 | |17| 55 | 10 | 10 + * ----+ +---+-----+ +--+--------+----+---- + * + * For this next step, let's assume that all the physical blocks in + * the adjustment range are mapped to a file and are therefore in use + * at least once. Therefore, we can infer that any gap in the + * refcount tree within the adjustment range represents a physical + * extent with refcount == 1: + * + * <------ adjustment range ------> + * ----+---+---+-----+-+--+--------+----+---- + * 2 |"1"| 3 | 2 |1|17| 55 | 10 | 10 + * ----+---+---+-----+-+--+--------+----+---- + * ^ + * + * For each extent that falls within the interval range, figure out + * which extent is to the left or the right of that extent. Now we + * have a left, current, and right extent. If the new reference count + * of the center extent enables us to merge left, center, and right + * into one record covering all three, do so. If the center extent is + * at the left end of the range, abuts the left extent, and its new + * reference count matches the left extent's record, then merge them. + * If the center extent is at the right end of the range, abuts the + * right extent, and the reference counts match, merge those. In the + * example, we can left merge (assuming an increment operation): + * + * <------ adjustment range ------> + * --------+---+-----+-+--+--------+----+---- + * 2 | 3 | 2 |1|17| 55 | 10 | 10 + * --------+---+-----+-+--+--------+----+---- + * ^ + * + * For all other extents within the range, adjust the reference count + * or delete it if the refcount falls below 2. If we were + * incrementing, the end result looks like this: + * + * <------ adjustment range ------> + * --------+---+-----+-+--+--------+----+---- + * 2 | 4 | 3 |2|18| 56 | 11 | 10 + * --------+---+-----+-+--+--------+----+---- + * + * The result of a decrement operation looks as such: + * + * <------ adjustment range ------> + * ----+ +---+ +--+--------+----+---- + * 2 | | 2 | |16| 54 | 9 | 10 + * ----+ +---+ +--+--------+----+---- + * DDDD 111111DD + * + * The blocks marked "D" are freed; the blocks marked "1" are only + * referenced once and therefore the record is removed from the + * refcount btree. + */ + +#define RLNEXT(rl) ((rl).rc_startblock + (rl).rc_blockcount) +/* + * Split a left rlextent that crosses agbno. + */ +STATIC int +try_split_left_rlextent( + struct xfs_btree_cur *cur, + xfs_agblock_t agbno) +{ + struct xfs_refcount_irec left, tmp; + int found_rec; + int error; + + error = xfs_refcountbt_lookup_le(cur, agbno, &found_rec); + if (error) + goto out_error; + if (!found_rec) + return 0; + + error = xfs_refcountbt_get_rec(cur, &left, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + if (left.rc_startblock >= agbno || RLNEXT(left) <= agbno) + return 0; + + trace_xfs_refcount_split_left_extent(cur->bc_mp, cur->bc_private.a.agno, + &left, agbno); + tmp = left; + tmp.rc_blockcount = agbno - left.rc_startblock; + error = xfs_refcountbt_update(cur, &tmp); + if (error) + goto out_error; + + error = xfs_btree_increment(cur, 0, &found_rec); + if (error) + goto out_error; + + tmp = left; + tmp.rc_startblock = agbno; + tmp.rc_blockcount -= (agbno - left.rc_startblock); + error = xfs_refcountbt_insert(cur, &tmp, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + return error; + +out_error: + trace_xfs_refcount_split_left_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Split a right rlextent that crosses agbno. + */ +STATIC int +try_split_right_rlextent( + struct xfs_btree_cur *cur, + xfs_agblock_t agbnext) +{ + struct xfs_refcount_irec right, tmp; + int found_rec; + int error; + + error = xfs_refcountbt_lookup_le(cur, agbnext - 1, &found_rec); + if (error) + goto out_error; + if (!found_rec) + return 0; + + error = xfs_refcountbt_get_rec(cur, &right, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + if (RLNEXT(right) <= agbnext) + return 0; + + trace_xfs_refcount_split_right_extent(cur->bc_mp, + cur->bc_private.a.agno, &right, agbnext); + tmp = right; + tmp.rc_startblock = agbnext; + tmp.rc_blockcount -= (agbnext - right.rc_startblock); + error = xfs_refcountbt_update(cur, &tmp); + if (error) + goto out_error; + + tmp = right; + tmp.rc_blockcount = agbnext - right.rc_startblock; + error = xfs_refcountbt_insert(cur, &tmp, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + return error; + +out_error: + trace_xfs_refcount_split_right_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Merge the left, center, and right extents. + */ +STATIC int +merge_center( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *left, + struct xfs_refcount_irec *center, + unsigned long long extlen, + xfs_agblock_t *agbno, + xfs_extlen_t *aglen) +{ + int error; + int found_rec; + + error = xfs_refcountbt_lookup_ge(cur, center->rc_startblock, + &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + error = xfs_refcountbt_delete(cur, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + if (center->rc_refcount > 1) { + error = xfs_refcountbt_delete(cur, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + } + + error = xfs_refcountbt_lookup_le(cur, left->rc_startblock, + &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + left->rc_blockcount = extlen; + error = xfs_refcountbt_update(cur, left); + if (error) + goto out_error; + + *aglen = 0; + return error; + +out_error: + trace_xfs_refcount_merge_center_extents_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Merge with the left extent. + */ +STATIC int +merge_left( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *left, + struct xfs_refcount_irec *cleft, + xfs_agblock_t *agbno, + xfs_extlen_t *aglen) +{ + int error; + int found_rec; + + if (cleft->rc_refcount > 1) { + error = xfs_refcountbt_lookup_le(cur, cleft->rc_startblock, + &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + + error = xfs_refcountbt_delete(cur, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + } + + error = xfs_refcountbt_lookup_le(cur, left->rc_startblock, + &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + left->rc_blockcount += cleft->rc_blockcount; + error = xfs_refcountbt_update(cur, left); + if (error) + goto out_error; + + *agbno += cleft->rc_blockcount; + *aglen -= cleft->rc_blockcount; + return error; + +out_error: + trace_xfs_refcount_merge_left_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Merge with the right extent. + */ +STATIC int +merge_right( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *right, + struct xfs_refcount_irec *cright, + xfs_agblock_t *agbno, + xfs_extlen_t *aglen) +{ + int error; + int found_rec; + + if (cright->rc_refcount > 1) { + error = xfs_refcountbt_lookup_le(cur, cright->rc_startblock, + &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + + error = xfs_refcountbt_delete(cur, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + } + + error = xfs_refcountbt_lookup_le(cur, right->rc_startblock, + &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + right->rc_startblock -= cright->rc_blockcount; + right->rc_blockcount += cright->rc_blockcount; + error = xfs_refcountbt_update(cur, right); + if (error) + goto out_error; + + *aglen -= cright->rc_blockcount; + return error; + +out_error: + trace_xfs_refcount_merge_right_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Find the left extent and the one after it (cleft). This function assumes + * that we've already split any extent crossing agbno. + */ +STATIC int +find_left_extent( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *left, + struct xfs_refcount_irec *cleft, + xfs_agblock_t agbno, + xfs_extlen_t aglen) +{ + struct xfs_refcount_irec tmp; + int error; + int found_rec; + + left->rc_blockcount = cleft->rc_blockcount = 0; + error = xfs_refcountbt_lookup_le(cur, agbno - 1, &found_rec); + if (error) + goto out_error; + if (!found_rec) + return 0; + + error = xfs_refcountbt_get_rec(cur, &tmp, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + if (RLNEXT(tmp) != agbno) + return 0; + /* We have a left extent; retrieve (or invent) the next right one */ + *left = tmp; + + error = xfs_btree_increment(cur, 0, &found_rec); + if (error) + goto out_error; + if (found_rec) { + error = xfs_refcountbt_get_rec(cur, &tmp, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + + if (tmp.rc_startblock == agbno) + *cleft = tmp; + else { + cleft->rc_startblock = agbno; + cleft->rc_blockcount = min(aglen, + tmp.rc_startblock - agbno); + cleft->rc_refcount = 1; + } + } else { + cleft->rc_startblock = agbno; + cleft->rc_blockcount = aglen; + cleft->rc_refcount = 1; + } + trace_xfs_refcount_find_left_extent(cur->bc_mp, cur->bc_private.a.agno, + left, cleft, agbno); + return error; + +out_error: + trace_xfs_refcount_find_left_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Find the right extent and the one before it (cright). This function + * assumes that we've already split any extents crossing agbno + aglen. + */ +STATIC int +find_right_extent( + struct xfs_btree_cur *cur, + struct xfs_refcount_irec *right, + struct xfs_refcount_irec *cright, + xfs_agblock_t agbno, + xfs_extlen_t aglen) +{ + struct xfs_refcount_irec tmp; + int error; + int found_rec; + + right->rc_blockcount = cright->rc_blockcount = 0; + error = xfs_refcountbt_lookup_ge(cur, agbno + aglen, &found_rec); + if (error) + goto out_error; + if (!found_rec) + return 0; + + error = xfs_refcountbt_get_rec(cur, &tmp, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); + + if (tmp.rc_startblock != agbno + aglen) + return 0; + /* We have a right extent; retrieve (or invent) the next left one */ + *right = tmp; + + error = xfs_btree_decrement(cur, 0, &found_rec); + if (error) + goto out_error; + if (found_rec) { + error = xfs_refcountbt_get_rec(cur, &tmp, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, + out_error); + + if (tmp.rc_startblock == agbno) + *cright = tmp; + else { + cright->rc_startblock = max(agbno, + RLNEXT(tmp)); + cright->rc_blockcount = right->rc_startblock - + cright->rc_startblock; + cright->rc_refcount = 1; + } + } else { + cright->rc_startblock = agbno; + cright->rc_blockcount = aglen; + cright->rc_refcount = 1; + } + trace_xfs_refcount_find_right_extent(cur->bc_mp, cur->bc_private.a.agno, + cright, right, agbno + aglen); + return error; + +out_error: + trace_xfs_refcount_find_right_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} +#undef RLNEXT + +/* + * Try to merge with any extents on the boundaries of the adjustment range. + */ +STATIC int +try_merge_rlextents( + struct xfs_btree_cur *cur, + xfs_agblock_t *agbno, + xfs_extlen_t *aglen, + int adjust) +{ + struct xfs_refcount_irec left, cleft, cright, right; + int error; + unsigned long long ulen; + + left.rc_blockcount = cleft.rc_blockcount = 0; + cright.rc_blockcount = right.rc_blockcount = 0; + + /* + * Find extents abutting the start and end of the range, and + * the adjacent extents inside the range. + */ + error = find_left_extent(cur, &left, &cleft, *agbno, *aglen); + if (error) + return error; + error = find_right_extent(cur, &right, &cright, *agbno, *aglen); + if (error) + return error; + + /* No left or right extent to merge; exit. */ + if (left.rc_blockcount == 0 && right.rc_blockcount == 0) + return 0; + + /* Try a center merge */ + ulen = (unsigned long long)left.rc_blockcount + cleft.rc_blockcount + + right.rc_blockcount; + if (left.rc_blockcount != 0 && right.rc_blockcount != 0 && + memcmp(&cleft, &cright, sizeof(cleft)) == 0 && + left.rc_refcount == cleft.rc_refcount + adjust && + right.rc_refcount == cleft.rc_refcount + adjust && + ulen < MAXREFCEXTLEN) { + trace_xfs_refcount_merge_center_extents(cur->bc_mp, + cur->bc_private.a.agno, &left, &cleft, &right); + return merge_center(cur, &left, &cleft, ulen, agbno, aglen); + } + + /* Try a left merge */ + ulen = (unsigned long long)left.rc_blockcount + cleft.rc_blockcount; + if (left.rc_blockcount != 0 && + left.rc_refcount == cleft.rc_refcount + adjust && + ulen < MAXREFCEXTLEN) { + trace_xfs_refcount_merge_left_extent(cur->bc_mp, + cur->bc_private.a.agno, &left, &cleft); + return merge_left(cur, &left, &cleft, agbno, aglen); + } + + /* Try a right merge */ + ulen = (unsigned long long)right.rc_blockcount + cright.rc_blockcount; + if (right.rc_blockcount != 0 && + right.rc_refcount == cright.rc_refcount + adjust && + ulen < MAXREFCEXTLEN) { + trace_xfs_refcount_merge_right_extent(cur->bc_mp, + cur->bc_private.a.agno, &cright, &right); + return merge_right(cur, &right, &cright, agbno, aglen); + } + + return error; +} + +/* + * Adjust the refcounts of middle extents. At this point we should have + * split extents that crossed the adjustment range; merged with adjacent + * extents; and updated agbno/aglen to reflect the merges. Therefore, + * all we have to do is update the extents inside [agbno, agbno + aglen]. + */ +STATIC int +adjust_rlextents( + struct xfs_btree_cur *cur, + xfs_agblock_t agbno, + xfs_extlen_t aglen, + int adj, + struct xfs_bmap_free *flist, + uint64_t owner) +{ + struct xfs_refcount_irec ext, tmp; + int error; + int found_rec, found_tmp; + xfs_fsblock_t fsbno; + + error = xfs_refcountbt_lookup_ge(cur, agbno, &found_rec); + if (error) + goto out_error; + + while (aglen > 0) { + error = xfs_refcountbt_get_rec(cur, &ext, &found_rec); + if (error) + goto out_error; + if (!found_rec) { + ext.rc_startblock = cur->bc_mp->m_sb.sb_agblocks; + ext.rc_blockcount = 0; + ext.rc_refcount = 0; + } + + /* + * Deal with a hole in the refcount tree; if a file maps to + * these blocks and there's no refcountbt recourd, pretend that + * there is one with refcount == 1. + */ + if (ext.rc_startblock != agbno) { + tmp.rc_startblock = agbno; + tmp.rc_blockcount = min(aglen, + ext.rc_startblock - agbno); + tmp.rc_refcount = 1 + adj; + trace_xfs_refcount_modify_extent(cur->bc_mp, + cur->bc_private.a.agno, &tmp); + + /* + * Either cover the hole (increment) or + * delete the range (decrement). + */ + if (tmp.rc_refcount) { + error = xfs_refcountbt_insert(cur, &tmp, + &found_tmp); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, + found_tmp == 1, out_error); + + error = xfs_btree_increment(cur, 0, &found_tmp); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, + !found_rec || found_tmp == 1, + out_error); + } else { + fsbno = XFS_AGB_TO_FSB(cur->bc_mp, + cur->bc_private.a.agno, + tmp.rc_startblock); + xfs_bmap_add_free(cur->bc_mp, flist, fsbno, + tmp.rc_blockcount, owner); + } + + agbno += tmp.rc_blockcount; + aglen -= tmp.rc_blockcount; + } + + /* Stop if there's nothing left to modify */ + if (aglen == 0) + break; + + /* + * Adjust the reference count and either update the tree + * (incr) or free the blocks (decr). + */ + ext.rc_refcount += adj; + trace_xfs_refcount_modify_extent(cur->bc_mp, + cur->bc_private.a.agno, &ext); + if (ext.rc_refcount > 1) { + error = xfs_refcountbt_update(cur, &ext); + if (error) + goto out_error; + } else if (ext.rc_refcount == 1) { + error = xfs_refcountbt_delete(cur, &found_rec); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, + found_rec == 1, out_error); + goto advloop; + } else { + fsbno = XFS_AGB_TO_FSB(cur->bc_mp, + cur->bc_private.a.agno, + ext.rc_startblock); + xfs_bmap_add_free(cur->bc_mp, flist, fsbno, + ext.rc_blockcount, owner); + } + + error = xfs_btree_increment(cur, 0, &found_rec); + if (error) + goto out_error; + +advloop: + agbno += ext.rc_blockcount; + aglen -= ext.rc_blockcount; + } + + return error; +out_error: + trace_xfs_refcount_modify_extent_error(cur->bc_mp, + cur->bc_private.a.agno, error, _RET_IP_); + return error; +} + +/* + * Adjust the reference count of a range of AG blocks. + * + * @mp: XFS mount object + * @tp: XFS transaction object + * @agbp: Buffer containing the AGF + * @agno: AG number + * @agbno: Start of range to adjust + * @aglen: Length of range to adjust + * @adj: +1 to increment, -1 to decrement reference count + * @flist: freelist (only required if adj == -1) + * @owner: owner of the blocks (only required if adj == -1) + */ +STATIC int +xfs_refcountbt_adjust_refcount( + struct xfs_mount *mp, + struct xfs_trans *tp, + struct xfs_buf *agbp, + xfs_agnumber_t agno, + xfs_agblock_t agbno, + xfs_extlen_t aglen, + int adj, + struct xfs_bmap_free *flist, + uint64_t owner) +{ + struct xfs_btree_cur *cur; + int error; + + cur = xfs_refcountbt_init_cursor(mp, tp, agbp, agno, flist); + + /* + * Ensure that no rlextents cross the boundary of the adjustment range. + */ + error = try_split_left_rlextent(cur, agbno); + if (error) + goto out_error; + + error = try_split_right_rlextent(cur, agbno + aglen); + if (error) + goto out_error; + + /* + * Try to merge with the left or right extents of the range. + */ + error = try_merge_rlextents(cur, &agbno, &aglen, adj); + if (error) + goto out_error; + + /* Now that we've taken care of the ends, adjust the middle extents */ + error = adjust_rlextents(cur, agbno, aglen, adj, flist, owner); + if (error) + goto out_error; + + xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR); + return 0; + +out_error: + trace_xfs_refcount_adjust_error(mp, agno, error, _RET_IP_); + xfs_btree_del_cursor(cur, XFS_BTREE_ERROR); + return error; +} + +/** + * Increase the reference count of a range of AG blocks. + * + * @mp: XFS mount object + * @tp: XFS transaction object + * @agbp: Buffer containing the AGF + * @agno: AG number + * @agbno: Start of range to adjust + * @aglen: Length of range to adjust + * @flist: List of blocks to free + */ +int +xfs_refcount_increase( + struct xfs_mount *mp, + struct xfs_trans *tp, + struct xfs_buf *agbp, + xfs_agnumber_t agno, + xfs_agblock_t agbno, + xfs_extlen_t aglen, + struct xfs_bmap_free *flist) +{ + trace_xfs_refcount_increase(mp, agno, agbno, aglen); + return xfs_refcountbt_adjust_refcount(mp, tp, agbp, agno, agbno, + aglen, 1, flist, 0); +} + +/** + * Decrease the reference count of a range of AG blocks. + * + * @mp: XFS mount object + * @tp: XFS transaction object + * @agbp: Buffer containing the AGF + * @agno: AG number + * @agbno: Start of range to adjust + * @aglen: Length of range to adjust + * @flist: List of blocks to free + * @owner: Extent owner + */ +int +xfs_refcount_decrease( + struct xfs_mount *mp, + struct xfs_trans *tp, + struct xfs_buf *agbp, + xfs_agnumber_t agno, + xfs_agblock_t agbno, + xfs_extlen_t aglen, + struct xfs_bmap_free *flist, + uint64_t owner) +{ + trace_xfs_refcount_decrease(mp, agno, agbno, aglen); + return xfs_refcountbt_adjust_refcount(mp, tp, agbp, agno, agbno, + aglen, -1, flist, owner); +} diff --git a/fs/xfs/libxfs/xfs_refcount.h b/fs/xfs/libxfs/xfs_refcount.h index fd7c337e..11d773bb 100644 --- a/fs/xfs/libxfs/xfs_refcount.h +++ b/fs/xfs/libxfs/xfs_refcount.h @@ -26,4 +26,12 @@ extern int xfs_refcountbt_lookup_ge(struct xfs_btree_cur *cur, extern int xfs_refcountbt_get_rec(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec, int *stat); +extern int xfs_refcount_increase(struct xfs_mount *mp, struct xfs_trans *tp, + struct xfs_buf *agbp, xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_extlen_t aglen, struct xfs_bmap_free *flist); +extern int xfs_refcount_decrease(struct xfs_mount *mp, struct xfs_trans *tp, + struct xfs_buf *agbp, xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_extlen_t aglen, struct xfs_bmap_free *flist, + uint64_t owner); + #endif /* __XFS_REFCOUNT_H__ */ From darrick.wong@oracle.com Wed Jul 29 17:34:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 01B957FCB for ; Wed, 29 Jul 2015 17:34:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C0FC0304043 for ; Wed, 29 Jul 2015 15:34:11 -0700 (PDT) X-ASG-Debug-ID: 1438209249-04bdf06bcf0b380001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id Qr4ih0QpXDbT7by9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:09 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMY4bF007304 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:05 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMY4T3017646 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:04 GMT Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMXvih004814; Wed, 29 Jul 2015 22:34:00 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:33:56 -0700 Subject: [PATCH 09/24] libxfs: adjust refcount when unmapping file blocks From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 09/24] libxfs: adjust refcount when unmapping file blocks To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:33:56 -0700 Message-ID: <20150729223356.17414.64261.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209249 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines When we're unmapping blocks from a reflinked file, decrease the refcount of the affected blocks and free the extents that are no longer in use. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_bmap.c | 16 +++++++++++++--- fs/xfs/libxfs/xfs_refcount.c | 42 ++++++++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_refcount.h | 4 ++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 057fa9a..dfdd9e6 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -45,6 +45,7 @@ #include "xfs_symlink.h" #include "xfs_attr_leaf.h" #include "xfs_filestream.h" +#include "xfs_refcount.h" kmem_zone_t *xfs_bmap_free_item_zone; @@ -4983,9 +4984,18 @@ xfs_bmap_del_extent( /* * If we need to, add to list of extents to delete. */ - if (do_fx) - xfs_bmap_add_free(mp, flist, del->br_startblock, - del->br_blockcount, ip->i_ino); + if (do_fx) { + if (xfs_is_reflink_inode(ip)) { + error = xfs_refcount_put_extent(mp, tp, flist, + del->br_startblock, + del->br_blockcount, ip->i_ino); + if (error) + goto done; + } else + xfs_bmap_add_free(mp, flist, del->br_startblock, + del->br_blockcount, ip->i_ino); + } + /* * Adjust inode # blocks in the file. */ diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c index 83d5677..ef69375 100644 --- a/fs/xfs/libxfs/xfs_refcount.c +++ b/fs/xfs/libxfs/xfs_refcount.c @@ -939,3 +939,45 @@ xfs_refcount_decrease( return xfs_refcountbt_adjust_refcount(mp, tp, agbp, agno, agbno, aglen, -1, flist, owner); } + +/** + * xfs_refcount_put_extent() - release a range of blocks + * + * @mp: XFS mount object + * @tp: transaction that goes with the free operation + * @flist: List of blocks to be freed at the end of the transaction + * @fsbno: First fs block of the range to release + * @len: Length of range + * @owner: owner of the extent + */ +int +xfs_refcount_put_extent( + struct xfs_mount *mp, + struct xfs_trans *tp, + struct xfs_bmap_free *flist, + xfs_fsblock_t fsbno, + xfs_filblks_t fslen, + uint64_t owner) +{ + int error; + struct xfs_buf *agbp; + xfs_agnumber_t agno; /* allocation group number */ + xfs_agblock_t agbno; /* ag start of range to free */ + xfs_extlen_t aglen; /* ag length of range to free */ + + agno = XFS_FSB_TO_AGNO(mp, fsbno); + agbno = XFS_FSB_TO_AGBNO(mp, fsbno); + aglen = fslen; + + /* + * Drop reference counts in the refcount tree. + */ + error = xfs_alloc_read_agf(mp, tp, agno, 0, &agbp); + if (error) + return error; + + error = xfs_refcount_decrease(mp, tp, agbp, agno, agbno, aglen, flist, + owner); + xfs_trans_brelse(tp, agbp); + return error; +} diff --git a/fs/xfs/libxfs/xfs_refcount.h b/fs/xfs/libxfs/xfs_refcount.h index 11d773bb..649d679 100644 --- a/fs/xfs/libxfs/xfs_refcount.h +++ b/fs/xfs/libxfs/xfs_refcount.h @@ -34,4 +34,8 @@ extern int xfs_refcount_decrease(struct xfs_mount *mp, struct xfs_trans *tp, xfs_extlen_t aglen, struct xfs_bmap_free *flist, uint64_t owner); +extern int xfs_refcount_put_extent(struct xfs_mount *mp, struct xfs_trans *tp, + struct xfs_bmap_free *flist, xfs_fsblock_t fsbno, + xfs_filblks_t len, uint64_t owner); + #endif /* __XFS_REFCOUNT_H__ */ From darrick.wong@oracle.com Wed Jul 29 17:34:14 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 854877FF9 for ; Wed, 29 Jul 2015 17:34:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6F938304048 for ; Wed, 29 Jul 2015 15:34:14 -0700 (PDT) X-ASG-Debug-ID: 1438209252-04cbb0416d88ff0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id zQAqWmhkWFcRAXHm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:12 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYBTK021207 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:12 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYAOE023461 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:11 GMT Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYAuG009779; Wed, 29 Jul 2015 22:34:10 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:09 -0700 Subject: [PATCH 11/24] xfs: map an inode's offset to an exact physical block From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 11/24] xfs: map an inode's offset to an exact physical block To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:09 -0700 Message-ID: <20150729223409.17414.33569.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209252 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Teach the bmap routine to know how to map a range of file blocks to a specific range of physical blocks, instead of simply allocating fresh blocks. This enables reflink to map a file to blocks that are already in use. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_bmap.c | 21 +++++++++++++++++++++ fs/xfs/libxfs/xfs_bmap.h | 3 +++ 2 files changed, 24 insertions(+) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index dfdd9e6..1297b94 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -3897,6 +3897,15 @@ STATIC int xfs_bmap_alloc( struct xfs_bmalloca *ap) /* bmap alloc argument struct */ { + if (ap->flags & XFS_BMAPI_EXACT) { + trace_xfs_reflink_relink_blocks(ap->ip, *ap->firstblock, + ap->length); + ap->blkno = *ap->firstblock; + ap->ip->i_d.di_nblocks += ap->length; + xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); + return 0; + } + if (XFS_IS_REALTIME_INODE(ap->ip) && ap->userdata) return xfs_bmap_rtalloc(ap); return xfs_bmap_btalloc(ap); @@ -4519,6 +4528,12 @@ xfs_bmapi_write( ASSERT(len > 0); ASSERT(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL); ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + if (whichfork == XFS_ATTR_FORK) + ASSERT(!(flags & XFS_BMAPI_EXACT)); + if (flags & XFS_BMAPI_EXACT) { + ASSERT(!(flags & XFS_BMAPI_PREALLOC)); + ASSERT(!(flags & XFS_BMAPI_CONVERT)); + } if (unlikely(XFS_TEST_ERROR( (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && @@ -4568,6 +4583,12 @@ xfs_bmapi_write( wasdelay = !inhole && isnullstartblock(bma.got.br_startblock); /* + * Make sure we only reflink into a hole. + */ + if (flags & XFS_BMAPI_EXACT) + ASSERT(inhole); + + /* * First, deal with the hole before the allocated space * that we found, if any. */ diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h index 674819f..34db107 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -110,6 +110,9 @@ typedef struct xfs_bmap_free */ #define XFS_BMAPI_CONVERT 0x040 +#define XFS_BMAPI_EXACT 0x080 /* Map the inode offset to the block */ + /* ap->firstblock. Used for reflink. */ + #define XFS_BMAPI_FLAGS \ { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ { XFS_BMAPI_METADATA, "METADATA" }, \ From darrick.wong@oracle.com Wed Jul 29 17:34:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id F0DA27F9B for ; Wed, 29 Jul 2015 17:34:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7E948AC005 for ; Wed, 29 Jul 2015 15:34:26 -0700 (PDT) X-ASG-Debug-ID: 1438209265-04cb6c673e2ef60001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id hpvd2VoTnhq7FXhh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:25 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYJRW007535 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:20 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYJI2023852 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:19 GMT Received: from abhmp0001.oracle.com (abhmp0001.oracle.com [141.146.116.7]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMY3Nw032541; Wed, 29 Jul 2015 22:34:14 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:03 -0700 Subject: [PATCH 10/24] xfs: add refcount btree block detection to log recovery From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 10/24] xfs: add refcount btree block detection to log recovery To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:02 -0700 Message-ID: <20150729223402.17414.12820.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209265 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Teach log recovery how to deal with refcount btree blocks. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_log_recover.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 7c2f1ca..54e6c89 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1848,6 +1848,7 @@ xlog_recover_get_buf_lsn( case XFS_ABTB_MAGIC: case XFS_ABTC_MAGIC: case XFS_RMAP_CRC_MAGIC: + case XFS_REFC_CRC_MAGIC: case XFS_IBT_CRC_MAGIC: case XFS_IBT_MAGIC: { struct xfs_btree_block *btb = blk; @@ -2004,6 +2005,9 @@ xlog_recover_validate_buf_type( case XFS_RMAP_CRC_MAGIC: bp->b_ops = &xfs_rmapbt_buf_ops; break; + case XFS_REFC_CRC_MAGIC: + bp->b_ops = &xfs_refcountbt_buf_ops; + break; default: xfs_warn(mp, "Bad btree block magic!"); ASSERT(0); From darrick.wong@oracle.com Wed Jul 29 17:34:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2A4DB7F9B for ; Wed, 29 Jul 2015 17:34:27 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9C5CCAC009 for ; Wed, 29 Jul 2015 15:34:26 -0700 (PDT) X-ASG-Debug-ID: 1438209264-04cbb0416e89010001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id 4XQW8a6rb56kMauM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:25 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYKQ5007538 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:20 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYJLH009280 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:20 GMT Received: from abhmp0010.oracle.com (abhmp0010.oracle.com [141.146.116.16]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYGgi004932; Wed, 29 Jul 2015 22:34:18 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:16 -0700 Subject: [PATCH 12/24] xfs: add reflink feature flag to geometry From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 12/24] xfs: add reflink feature flag to geometry To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:15 -0700 Message-ID: <20150729223415.17414.58782.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209265 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Report the reflink feature in the XFS geometry so that xfs_info and friends know the filesystem has this feature. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_fs.h | 1 + fs/xfs/xfs_fsops.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h index 9fbdb86..1d1d93d 100644 --- a/fs/xfs/libxfs/xfs_fs.h +++ b/fs/xfs/libxfs/xfs_fs.h @@ -241,6 +241,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_FINOBT 0x20000 /* free inode btree */ #define XFS_FSOP_GEOM_FLAGS_SPINODES 0x40000 /* sparse inode chunks */ #define XFS_FSOP_GEOM_FLAGS_RMAPBT 0x80000 /* Reverse mapping btree */ +#define XFS_FSOP_GEOM_FLAGS_REFLINK 0x100000 /* reflink */ /* * Minimum and maximum sizes need for growth checks. diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 4d39a30..23a8851 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -106,7 +106,9 @@ xfs_fs_geometry( (xfs_sb_version_hassparseinodes(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_SPINODES : 0) | (xfs_sb_version_hasrmapbt(&mp->m_sb) ? - XFS_FSOP_GEOM_FLAGS_RMAPBT : 0); + XFS_FSOP_GEOM_FLAGS_RMAPBT : 0) | + (xfs_sb_version_hasreflink(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_REFLINK : 0); geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? mp->m_sb.sb_logsectsize : BBSIZE; geo->rtsectsize = mp->m_sb.sb_blocksize; From darrick.wong@oracle.com Wed Jul 29 17:34:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C6BCD29E01 for ; Wed, 29 Jul 2015 17:34:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6FEC2AC006 for ; Wed, 29 Jul 2015 15:34:29 -0700 (PDT) X-ASG-Debug-ID: 1438209267-04bdf06bd00b3a0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id qaVlI4RwkFcarVfL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:27 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYNR4007562 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:23 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYM4S009393 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:22 GMT Received: from abhmp0010.oracle.com (abhmp0010.oracle.com [141.146.116.16]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYMQf009812; Wed, 29 Jul 2015 22:34:22 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:22 -0700 Subject: [PATCH 13/24] xfs: create a separate workqueue for copy-on-write activities From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 13/24] xfs: create a separate workqueue for copy-on-write activities To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:22 -0700 Message-ID: <20150729223421.17414.67745.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209267 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Create a separate workqueue to handle copy on write blocks so that we don't explode the number of kworkers if a flood of writes comes through. We could possibly use m_buf_wq for this too... Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_mount.h | 1 + fs/xfs/xfs_super.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index aba42d7..6f4c335 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -142,6 +142,7 @@ typedef struct xfs_mount { struct workqueue_struct *m_reclaim_workqueue; struct workqueue_struct *m_log_workqueue; struct workqueue_struct *m_eofblocks_workqueue; + struct workqueue_struct *m_cow_workqueue; /* * Generation of the filesysyem layout. This is incremented by each diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 796ccb5..01109db 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -891,6 +891,30 @@ xfs_destroy_mount_workqueues( destroy_workqueue(mp->m_buf_workqueue); } +STATIC int +xfs_init_feature_workqueues( + struct xfs_mount *mp) +{ + if (xfs_sb_version_hasreflink(&mp->m_sb)) { + mp->m_cow_workqueue = alloc_workqueue("xfs-cow/%s", + WQ_MEM_RECLAIM|WQ_FREEZABLE, 1, mp->m_fsname); + if (!mp->m_cow_workqueue) + goto out; + } + + return 0; +out: + return -ENOMEM; +} + +STATIC void +xfs_destroy_feature_workqueues( + struct xfs_mount *mp) +{ + if (mp->m_cow_workqueue) + destroy_workqueue(mp->m_cow_workqueue); +} + /* * Flush all dirty data to disk. Must not be called while holding an XFS_ILOCK * or a page lock. We use sync_inodes_sb() here to ensure we block while waiting @@ -1498,6 +1522,10 @@ xfs_fs_fill_super( if (error) goto out_free_sb; + error = xfs_init_feature_workqueues(mp); + if (error) + goto out_filestream_unmount; + /* * we must configure the block size in the superblock before we run the * full mount process as the mount process can lookup and cache inodes. @@ -1530,7 +1558,7 @@ xfs_fs_fill_super( error = xfs_mountfs(mp); if (error) - goto out_filestream_unmount; + goto out_destroy_feature_workqueues; root = igrab(VFS_I(mp->m_rootip)); if (!root) { @@ -1545,6 +1573,8 @@ xfs_fs_fill_super( return 0; +out_destroy_feature_workqueues: + xfs_destroy_feature_workqueues(mp); out_filestream_unmount: xfs_filestream_unmount(mp); out_free_sb: @@ -1574,6 +1604,7 @@ xfs_fs_put_super( struct xfs_mount *mp = XFS_M(sb); xfs_notice(mp, "Unmounting Filesystem"); + xfs_destroy_feature_workqueues(mp); xfs_filestream_unmount(mp); xfs_unmountfs(mp); From darrick.wong@oracle.com Wed Jul 29 17:34:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2D17D29E06 for ; Wed, 29 Jul 2015 17:34:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B9A15AC002 for ; Wed, 29 Jul 2015 15:34:38 -0700 (PDT) X-ASG-Debug-ID: 1438209277-04bdf06bd10b3b0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id CWshTHwprsNuAgvG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:37 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYaLC021498 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:36 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYZL7006102 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:35 GMT Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYZpX009863; Wed, 29 Jul 2015 22:34:35 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:35 -0700 Subject: [PATCH 15/24] xfs: handle directio copy-on-write for reflinked blocks From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 15/24] xfs: handle directio copy-on-write for reflinked blocks To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:35 -0700 Message-ID: <20150729223435.17414.67288.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209277 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines We hope that CoW writes will be rare and that directio CoW writes will be even more rare. Therefore, fall-back any such write to the buffered path. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_aops.c | 6 ++++++ fs/xfs/xfs_file.c | 12 ++++++++++-- fs/xfs/xfs_reflink.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 7332d72..bf4b408 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -1494,6 +1494,12 @@ __xfs_get_blocks( if (imap.br_startblock != HOLESTARTBLOCK && imap.br_startblock != DELAYSTARTBLOCK && (create || !ISUNWRITTEN(&imap))) { + if (create && direct) { + error = xfs_reflink_redirect_directio_write(ip, &imap, + offset); + if (error) + return error; + } xfs_map_buffer(inode, bh_result, &imap, offset); if (ISUNWRITTEN(&imap)) set_buffer_unwritten(bh_result); diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 981b028..211052a 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -869,10 +869,18 @@ xfs_file_write_iter( if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return -EIO; - if ((iocb->ki_flags & IOCB_DIRECT) || IS_DAX(inode)) + /* + * Allow DIO to fall back to buffered *only* in the case that we're + * doing a reflink CoW. + */ + if ((iocb->ki_flags & IOCB_DIRECT) || IS_DAX(inode)) { ret = xfs_file_dio_aio_write(iocb, from); - else + if (ret == -EREMCHG) + goto buffered; + } else { +buffered: ret = xfs_file_buffered_aio_write(iocb, from); + } if (ret > 0) { ssize_t err; diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 263f30b..f841a1a 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -406,6 +406,40 @@ advloop: } /** + * xfs_reflink_redirect_directio_write() - bounce a directio write to a + * reflinked region down to buffered + * write mode. + * + * @ip: XFS inode object + * @imap: the fileoff:fsblock mapping that we might fork + * @offset: the file byte offset of the block we're examining + */ +int +xfs_reflink_redirect_directio_write( + struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, + xfs_off_t offset) +{ + bool type = false; + int error; + + error = xfs_reflink_should_fork_block(ip, imap, offset, &type); + if (error) + return error; + if (!type) + return 0; + + /* + * Are we doing a DIO write to a reflinked block? In the ideal world + * we at least would fork full blocks, but for now just fall back to + * buffered mode. Yuck. Use -EREMCHG ("remote address changed") to + * signal this, since in general XFS doesn't do this sort of fallback. + */ + trace_xfs_reflink_bounce_direct_write(ip, imap); + return -EREMCHG; +} + +/** * xfs_reflink_write_fork_block() -- find a remapping object and redirect the * write. * From darrick.wong@oracle.com Wed Jul 29 17:34:38 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 99C7E29E01 for ; Wed, 29 Jul 2015 17:34:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8744F8F8033 for ; Wed, 29 Jul 2015 15:34:38 -0700 (PDT) X-ASG-Debug-ID: 1438209275-04cb6c673d2f0c0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id lmxC9IUObsHepyho (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:35 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYTcJ007623 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:30 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYTfN018554 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:29 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYTHR032704; Wed, 29 Jul 2015 22:34:29 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:28 -0700 Subject: [PATCH 14/24] xfs: implement copy-on-write for reflinked blocks From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 14/24] xfs: implement copy-on-write for reflinked blocks To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:28 -0700 Message-ID: <20150729223428.17414.64576.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209275 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Implement a copy-on-write handler for the buffered write path. When writepages is called, allocate a new block (which we then tell the log that we intend to delete so that it's freed if we crash), and then write the buffer to the new block. Upon completion, remove the freed block intent from the log and remap the file so that the changes appear. Signed-off-by: Darrick J. Wong --- fs/xfs/Makefile | 1 fs/xfs/xfs_aops.c | 52 +++ fs/xfs/xfs_aops.h | 5 fs/xfs/xfs_file.c | 11 + fs/xfs/xfs_icache.c | 3 fs/xfs/xfs_inode.h | 2 fs/xfs/xfs_reflink.c | 752 ++++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 41 +++ 8 files changed, 860 insertions(+), 7 deletions(-) create mode 100644 fs/xfs/xfs_reflink.c create mode 100644 fs/xfs/xfs_reflink.h diff --git a/fs/xfs/Makefile b/fs/xfs/Makefile index 90309ec..91992a9 100644 --- a/fs/xfs/Makefile +++ b/fs/xfs/Makefile @@ -88,6 +88,7 @@ xfs-y += xfs_aops.o \ xfs_message.o \ xfs_mount.o \ xfs_mru_cache.o \ + xfs_reflink.o \ xfs_super.o \ xfs_symlink.o \ xfs_sysfs.o \ diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3859f5e..7332d72 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -31,6 +31,8 @@ #include "xfs_bmap.h" #include "xfs_bmap_util.h" #include "xfs_bmap_btree.h" +#include "xfs_reflink.h" +#include #include #include #include @@ -192,6 +194,8 @@ xfs_finish_ioend( if (ioend->io_type == XFS_IO_UNWRITTEN) queue_work(mp->m_unwritten_workqueue, &ioend->io_work); + else if (ioend->io_type == XFS_IO_FORKED) + queue_work(mp->m_cow_workqueue, &ioend->io_work); else if (ioend->io_append_trans) queue_work(mp->m_data_workqueue, &ioend->io_work); else @@ -214,6 +218,25 @@ xfs_end_io( ioend->io_error = -EIO; goto done; } + + /* + * If we forked the block, we need to remap the bmbt and possibly + * finish up the i_size transaction too... or clean up after a + * failed write. + */ + if (ioend->io_type == XFS_IO_FORKED) { + if (ioend->io_error) { + error = xfs_reflink_cancel_fork_ioend(ioend); + goto done; + } + error = xfs_reflink_fork_ioend(ioend); + if (error) + goto done; + if (ioend->io_append_trans) + error = xfs_setfilesize_ioend(ioend); + goto done; + } + if (ioend->io_error) goto done; @@ -268,6 +291,7 @@ xfs_alloc_ioend( ioend->io_append_trans = NULL; INIT_WORK(&ioend->io_work, xfs_end_io); + INIT_LIST_HEAD(&ioend->io_reflink_endio_list); return ioend; } @@ -550,6 +574,7 @@ xfs_cancel_ioend( } while ((bh = next_bh) != NULL); mempool_free(ioend, xfs_ioend_pool); + xfs_reflink_cancel_fork_ioend(ioend); } while ((ioend = next) != NULL); } @@ -566,7 +591,8 @@ xfs_add_to_ioend( xfs_off_t offset, unsigned int type, xfs_ioend_t **result, - int need_ioend) + int need_ioend, + struct xfs_reflink_ioend *eio) { xfs_ioend_t *ioend = *result; @@ -587,6 +613,8 @@ xfs_add_to_ioend( bh->b_private = NULL; ioend->io_size += bh->b_size; + if (eio) + xfs_reflink_add_ioend(ioend, eio); } STATIC void @@ -787,7 +815,7 @@ xfs_convert_page( if (type != XFS_IO_OVERWRITE) xfs_map_at_offset(inode, bh, imap, offset); xfs_add_to_ioend(inode, bh, offset, type, - ioendp, done); + ioendp, done, NULL); page_dirty--; count++; @@ -950,6 +978,8 @@ xfs_vm_writepage( int err, imap_valid = 0, uptodate = 1; int count = 0; int nonblocking = 0; + struct xfs_inode *ip = XFS_I(inode); + int err2 = 0; trace_xfs_writepage(inode, page, 0, 0); @@ -1118,11 +1148,15 @@ xfs_vm_writepage( imap_valid = xfs_imap_valid(inode, &imap, offset); } if (imap_valid) { + struct xfs_reflink_ioend *eio = NULL; + + err2 = xfs_reflink_write_fork_block(ip, &imap, offset, + &type, &eio); lock_buffer(bh); if (type != XFS_IO_OVERWRITE) xfs_map_at_offset(inode, bh, &imap, offset); xfs_add_to_ioend(inode, bh, offset, type, &ioend, - new_ioend); + new_ioend, eio); count++; } @@ -1136,6 +1170,9 @@ xfs_vm_writepage( xfs_start_page_writeback(page, 1, count); + if (err) + goto error; + /* if there is no IO to be submitted for this page, we are done */ if (!ioend) return 0; @@ -1170,8 +1207,9 @@ xfs_vm_writepage( /* * Reserve log space if we might write beyond the on-disk inode size. */ - err = 0; - if (ioend->io_type != XFS_IO_UNWRITTEN && xfs_ioend_is_append(ioend)) + err = err2; + if (!err && ioend->io_type != XFS_IO_UNWRITTEN && + xfs_ioend_is_append(ioend)) err = xfs_setfilesize_trans_alloc(ioend); xfs_submit_ioend(wbc, iohead, err); @@ -1821,6 +1859,10 @@ xfs_vm_write_begin( if (!page) return -ENOMEM; + status = xfs_reflink_reserve_fork_block(XFS_I(mapping->host), pos, len); + if (status) + return status; + status = __block_write_begin(page, pos, len, xfs_get_blocks); if (unlikely(status)) { struct inode *inode = mapping->host; diff --git a/fs/xfs/xfs_aops.h b/fs/xfs/xfs_aops.h index 86afd1a..9cf206a 100644 --- a/fs/xfs/xfs_aops.h +++ b/fs/xfs/xfs_aops.h @@ -27,12 +27,14 @@ enum { XFS_IO_DELALLOC, /* covers delalloc region */ XFS_IO_UNWRITTEN, /* covers allocated but uninitialized data */ XFS_IO_OVERWRITE, /* covers already allocated extent */ + XFS_IO_FORKED, /* covers copy-on-write region */ }; #define XFS_IO_TYPES \ { XFS_IO_DELALLOC, "delalloc" }, \ { XFS_IO_UNWRITTEN, "unwritten" }, \ - { XFS_IO_OVERWRITE, "overwrite" } + { XFS_IO_OVERWRITE, "overwrite" }, \ + { XFS_IO_FORKED, "forked" } /* * xfs_ioend struct manages large extent writes for XFS. @@ -50,6 +52,7 @@ typedef struct xfs_ioend { xfs_off_t io_offset; /* offset in the file */ struct work_struct io_work; /* xfsdatad work queue */ struct xfs_trans *io_append_trans;/* xact. for size update */ + struct list_head io_reflink_endio_list;/* remappings for CoW */ } xfs_ioend_t; extern const struct address_space_operations xfs_address_space_operations; diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index f0e8249..981b028 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -37,6 +37,7 @@ #include "xfs_log.h" #include "xfs_icache.h" #include "xfs_pnfs.h" +#include "xfs_reflink.h" #include #include @@ -1495,6 +1496,14 @@ xfs_filemap_page_mkwrite( file_update_time(vma->vm_file); xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); + /* Set up the remapping for a CoW mmap'd page */ + ret = xfs_reflink_reserve_fork_block(XFS_I(inode), + vmf->page->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE); + if (ret) { + ret = block_page_mkwrite_return(ret); + goto out; + } + if (IS_DAX(inode)) { ret = __dax_mkwrite(vma, vmf, xfs_get_blocks_direct, xfs_end_io_dax_write); @@ -1502,7 +1511,7 @@ xfs_filemap_page_mkwrite( ret = __block_page_mkwrite(vma, vmf, xfs_get_blocks); ret = block_page_mkwrite_return(ret); } - +out: xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); sb_end_pagefault(inode->i_sb); diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c index 76a9f27..fec0647 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c @@ -33,6 +33,7 @@ #include "xfs_bmap_util.h" #include "xfs_dquot_item.h" #include "xfs_dquot.h" +#include "xfs_reflink.h" #include #include @@ -80,6 +81,7 @@ xfs_inode_alloc( ip->i_flags = 0; ip->i_delayed_blks = 0; memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); + ip->i_remaps = RB_ROOT; return ip; } @@ -115,6 +117,7 @@ xfs_inode_free( ip->i_itemp = NULL; } + xfs_reflink_cancel_fork_blocks(ip); /* * Because we use RCU freeing we need to ensure the inode always * appears to be reclaimed with an invalid inode number when in the diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 6153cf2..f405634 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -65,6 +65,8 @@ typedef struct xfs_inode { xfs_icdinode_t i_d; /* most of ondisk inode */ + struct rb_root i_remaps; /* CoW remappings in progress */ + /* VFS inode */ struct inode i_vnode; /* embedded VFS inode */ } xfs_inode_t; diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c new file mode 100644 index 0000000..263f30b --- /dev/null +++ b/fs/xfs/xfs_reflink.c @@ -0,0 +1,752 @@ +/* + * Copyright (c) 2015 Oracle. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_shared.h" +#include "xfs_format.h" +#include "xfs_log_format.h" +#include "xfs_trans_resv.h" +#include "xfs_mount.h" +#include "xfs_da_format.h" +#include "xfs_da_btree.h" +#include "xfs_inode.h" +#include "xfs_trans.h" +#include "xfs_inode_item.h" +#include "xfs_bmap.h" +#include "xfs_bmap_util.h" +#include "xfs_error.h" +#include "xfs_dir2.h" +#include "xfs_dir2_priv.h" +#include "xfs_ioctl.h" +#include "xfs_trace.h" +#include "xfs_log.h" +#include "xfs_icache.h" +#include "xfs_pnfs.h" +#include "xfs_refcount_btree.h" +#include "xfs_refcount.h" +#include "xfs_bmap_btree.h" +#include "xfs_trans_space.h" +#include "xfs_bit.h" +#include "xfs_alloc.h" +#include "xfs_quota_defs.h" +#include "xfs_quota.h" +#include "xfs_btree.h" +#include "xfs_bmap_btree.h" +#include "xfs_reflink.h" + +#define CHECK_AG_NUMBER(mp, agno) \ + do { \ + ASSERT((agno) != NULLAGNUMBER); \ + ASSERT((agno) < (mp)->m_sb.sb_agcount); \ + } while(0); + +#define CHECK_AG_EXTENT(mp, agbno, len) \ + do { \ + ASSERT((agbno) != NULLAGBLOCK); \ + ASSERT((len) > 0); \ + ASSERT((unsigned long long)(agbno) + (len) <= \ + (mp)->m_sb.sb_agblocks); \ + } while(0); + +struct xfs_reflink_ioend { + struct rb_node rlei_node; /* tree of pending remappings */ + struct list_head rlei_list; /* list of reflink ioends */ + struct xfs_bmbt_irec rlei_mapping; /* new bmbt mapping to put in */ + struct xfs_efi_log_item *rlei_efi; /* efi log item to cancel */ + xfs_fsblock_t rlei_oldfsbno; /* old fsbno */ +}; + +/** + * xfs_reflink_get_refcount() - get refcount and extent length for a given pblk + * + * @mp: XFS mount object + * @agno: AG number + * @agbno: AG block number + * @len: length of extent + * @nr: refcount + */ +int +xfs_reflink_get_refcount( + struct xfs_mount *mp, + xfs_agnumber_t agno, + xfs_agblock_t agbno, + xfs_extlen_t *len, + xfs_nlink_t *nr) +{ + struct xfs_btree_cur *cur; + struct xfs_buf *agbp; + struct xfs_refcount_irec tmp; + xfs_extlen_t aglen; + int error; + int i, have; + int bt_error; + + if (!xfs_sb_version_hasreflink(&mp->m_sb)) { + *len = 0; + *nr = 1; + return 0; + } + + error = xfs_alloc_read_agf(mp, NULL, agno, 0, &agbp); + if (error) + return error; + aglen = be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_length); + ASSERT(agbno < aglen); + + /* + * See if there's an extent covering the block we want. + */ + bt_error = XFS_BTREE_ERROR; + cur = xfs_refcountbt_init_cursor(mp, NULL, agbp, agno, NULL); + error = xfs_refcountbt_lookup_le(cur, agbno, &have); + if (error) + goto out_error; + if (!have) + goto hole; + error = xfs_refcountbt_get_rec(cur, &tmp, &i); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error); + if (tmp.rc_startblock + tmp.rc_blockcount <= agbno) + goto hole; + + *len = tmp.rc_blockcount - (agbno - tmp.rc_startblock); + *nr = tmp.rc_refcount; + goto out; + +hole: + /* + * We're in a hole, so pretend that this we have a refcount=1 extent + * going to the next rlextent or the end of the AG. + */ + error = xfs_btree_increment(cur, 0, &have); + if (error) + goto out_error; + if (!have) + *len = aglen - agbno; + else { + error = xfs_refcountbt_get_rec(cur, &tmp, &i); + if (error) + goto out_error; + XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error); + *len = tmp.rc_startblock - agbno; + } + *nr = 1; + +out: + bt_error = XFS_BTREE_NOERROR; +out_error: + xfs_btree_del_cursor(cur, bt_error); + xfs_buf_relse(agbp); + return error; +} + +/* + * Allocate a replacement block for a copy-on-write operation. + * + * XXX: Ideally we'd scan up and down the incore extent list + * looking for a block, but do this stupid thing for now. + */ +STATIC int +fork_one_block( + struct xfs_mount *mp, + struct xfs_trans *tp, + struct xfs_inode *ip, + xfs_fsblock_t old, + xfs_fsblock_t *new) +{ + int error; + struct xfs_alloc_arg args; /* allocation arguments */ + + memset(&args, 0, sizeof(args)); + args.tp = tp; + args.mp = mp; + args.type = XFS_ALLOCTYPE_NEAR_BNO; + args.firstblock = args.fsbno = old; + args.minlen = args.maxlen = args.prod = 1; + args.userdata = XFS_ALLOC_USERDATA; + args.owner = ip->i_ino; + error = xfs_alloc_vextent(&args); + if (error) + goto out_error; + ASSERT(args.len == 1); + ASSERT(args.fsbno != old); + *new = args.fsbno; + +out_error: + return error; +} + +/* Compare two reflink ioend structures */ +STATIC int +ioend_compare( + struct xfs_reflink_ioend *i1, + struct xfs_reflink_ioend *i2) +{ + if (i1->rlei_mapping.br_startoff > i2->rlei_mapping.br_startoff) + return 1; + if (i1->rlei_mapping.br_startoff < i2->rlei_mapping.br_startoff) + return -1; + return 0; +} + +/* Attach a remapping object to an inode. */ +STATIC int +remap_insert( + struct xfs_inode *ip, + struct xfs_reflink_ioend *eio) +{ + struct rb_node **new = &(ip->i_remaps.rb_node); + struct rb_node *parent = NULL; + struct xfs_reflink_ioend *this; + int result; + + /* Figure out where to put new node */ + while (*new) { + this = rb_entry(*new, struct xfs_reflink_ioend, rlei_node); + result = ioend_compare(eio, this); + + parent = *new; + if (result < 0) + new = &((*new)->rb_left); + else if (result > 0) + new = &((*new)->rb_right); + else + return -EEXIST; + } + + /* Add new node and rebalance tree. */ + rb_link_node(&eio->rlei_node, parent, new); + rb_insert_color(&eio->rlei_node, &ip->i_remaps); + + return 0; +} + +/* Find a remapping object for a block in an inode */ +STATIC int +remap_search( + struct xfs_inode *ip, + xfs_fileoff_t fsbno, + struct xfs_reflink_ioend **peio) +{ + struct rb_node *node = ip->i_remaps.rb_node; + struct xfs_reflink_ioend *data; + int result; + struct xfs_reflink_ioend f; + + f.rlei_mapping.br_startoff = fsbno; + while (node) { + data = rb_entry(node, struct xfs_reflink_ioend, rlei_node); + result = ioend_compare(&f, data); + + if (result < 0) + node = node->rb_left; + else if (result > 0) + node = node->rb_right; + else { + *peio = data; + return 0; + } + } + + return -ENOENT; +} + +/* Allocate a block to handle a copy on write later. */ +STATIC int +__reserve_fork_block( + struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, + xfs_off_t offset) +{ + xfs_fsblock_t fsbno; + xfs_fsblock_t new_fsbno; + xfs_off_t iomap_offset; + xfs_agnumber_t agno; /* allocation group number */ + xfs_agblock_t agbno; /* ag start of range to free */ + struct xfs_trans *tp = NULL; + int error; + struct xfs_reflink_ioend *eio; + struct xfs_mount *mp = ip->i_mount; + + ASSERT(xfs_is_reflink_inode(ip)); + iomap_offset = XFS_FSB_TO_B(mp, imap->br_startoff); + fsbno = imap->br_startblock + XFS_B_TO_FSB(mp, offset - iomap_offset); + agno = XFS_FSB_TO_AGNO(mp, fsbno); + agbno = XFS_FSB_TO_AGBNO(mp, fsbno); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agbno, 1); + ASSERT(imap->br_state == XFS_EXT_NORM); + + /* If we've already got a remapping, we're done. */ + error = remap_search(ip, XFS_B_TO_FSB(mp, offset), &eio); + if (!error) + return 0; + + /* + * Ok, we have to fork this block. Allocate a replacement block, + * stash the new mapping, and add an EFI entry for recovery. When + * the (redirected) IO completes, we'll deal with remapping. + */ + tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, + XFS_DIOSTRAT_SPACE_RES(mp, 2), 0); + if (error) + goto out_cancel; + + error = fork_one_block(mp, tp, ip, fsbno, &new_fsbno); + if (error) + goto out_cancel; + + trace_xfs_reflink_reserve_fork_block(ip, XFS_B_TO_FSB(mp, offset), + fsbno, 1, new_fsbno); + + eio = kmem_zalloc(sizeof(*eio), KM_SLEEP | KM_NOFS); + eio->rlei_mapping.br_startblock = new_fsbno; + eio->rlei_mapping.br_startoff = XFS_B_TO_FSB(mp, offset); + eio->rlei_mapping.br_blockcount = 1; + eio->rlei_mapping.br_state = XFS_EXT_NORM; + eio->rlei_oldfsbno = fsbno; + eio->rlei_efi = xfs_trans_get_efi(tp, 1); + xfs_trans_log_efi_extent(tp, eio->rlei_efi, new_fsbno, 1); + + error = remap_insert(ip, eio); + if (error) + goto out_cancel; + + /* + * ...and we're done. + */ + error = xfs_trans_commit(tp); + if (error) + goto out_error; + + return error; + +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_reserve_fork_block_error(ip, error, _RET_IP_); + return error; +} + +/** + * xfs_reflink_reserve_fork_block() -- Allocate blocks to satisfy a copy on + * write operation. + * @ip: XFS inode + * @pos: file offset to start forking + * @len: number of bytes to fork + */ +int +xfs_reflink_reserve_fork_block( + struct xfs_inode *ip, + xfs_off_t pos, + xfs_off_t len) +{ + struct xfs_bmbt_irec imap; + int nimaps; + int error; + xfs_fileoff_t lblk; + xfs_fileoff_t next_lblk; + xfs_off_t offset; + bool type; + + if (!xfs_is_reflink_inode(ip)) + return 0; + + trace_xfs_reflink_force_getblocks(ip, len, pos, 0); + + error = 0; + lblk = XFS_B_TO_FSBT(ip->i_mount, pos); + next_lblk = 1 + XFS_B_TO_FSBT(ip->i_mount, pos + len - 1); + while (lblk < next_lblk) { + offset = XFS_FSB_TO_B(ip->i_mount, lblk); + /* Read extent from the source file */ + nimaps = 1; + xfs_ilock(ip, XFS_ILOCK_EXCL); + error = xfs_bmapi_read(ip, lblk, next_lblk - lblk, &imap, + &nimaps, 0); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + if (error) + break; + + if (nimaps == 0) + break; + + error = xfs_reflink_should_fork_block(ip, &imap, offset, &type); + if (error) + break; + if (!type) + goto advloop; + + error = __reserve_fork_block(ip, &imap, offset); + if (error) + break; + +advloop: + lblk += imap.br_blockcount; + } + + return error; +} + +/** + * xfs_reflink_write_fork_block() -- find a remapping object and redirect the + * write. + * + * @ip: XFS inode + * @offset: file offset we're trying to write + * @imap: the mapping for this block (I/O) + * @type: the io type (I/O) + * @peio: pointer to a reflink ioend; caller must attach to an ioend (O) + */ +int +xfs_reflink_write_fork_block( + struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, + xfs_off_t offset, + unsigned int *type, + struct xfs_reflink_ioend **peio) +{ + int error; + struct xfs_reflink_ioend *eio = NULL; + + if (!xfs_is_reflink_inode(ip)) + return 0; + if (*type == XFS_IO_DELALLOC || *type == XFS_IO_UNWRITTEN) + return 0; + + error = remap_search(ip, XFS_B_TO_FSB(ip->i_mount, offset), &eio); + if (error == -ENOENT) + return 0; + else if (error) { + trace_xfs_reflink_write_fork_block_error(ip, error, _RET_IP_); + return error; + } + + trace_xfs_reflink_write_fork_block(ip, eio->rlei_mapping.br_startoff, + eio->rlei_oldfsbno, 1, eio->rlei_mapping.br_startblock); + + *imap = eio->rlei_mapping; + *type = XFS_IO_FORKED; + *peio = eio; + return 0; +} + +/* Remap a range of file blocks after forking. */ +STATIC int +xfs_reflink_remap_after_io( + struct xfs_mount *mp, + struct xfs_inode *ip, + struct xfs_reflink_ioend *eio) +{ + struct xfs_trans *tp = NULL; + int error; + xfs_agnumber_t agno; /* allocation group number */ + xfs_agblock_t agbno; /* ag start of range to free */ + xfs_fsblock_t firstfsb; + int committed; + struct xfs_bmbt_irec imaps[1]; + int nimaps = 1; + int done; + struct xfs_bmap_free free_list; + struct xfs_bmbt_irec *imap = &eio->rlei_mapping; + struct xfs_efd_log_item *efd; + unsigned int resblks; + + ASSERT(xfs_is_reflink_inode(ip)); + agno = XFS_FSB_TO_AGNO(mp, imap->br_startblock); + agbno = XFS_FSB_TO_AGBNO(mp, imap->br_startblock); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agbno, 1); + ASSERT(imap->br_state == XFS_EXT_NORM); + + trace_xfs_reflink_remap_after_io(ip, imap->br_startoff, + eio->rlei_oldfsbno, imap->br_blockcount, + imap->br_startblock); + + + /* Delete temporary mapping */ + error = remap_search(ip, imap->br_startoff, &eio); + if (error) + return error; + rb_erase(&eio->rlei_node, &ip->i_remaps); + + /* Unmap the old blocks */ + resblks = XFS_DIOSTRAT_SPACE_RES(mp, imap->br_blockcount * 3); + tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, resblks, 0); + if (error) + goto out_cancel; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); + + xfs_bmap_init(&free_list, &firstfsb); + error = xfs_bunmapi(tp, ip, imap->br_startoff, imap->br_blockcount, 0, + imap->br_blockcount, &firstfsb, &free_list, &done); + if (error) + goto out_freelist; + + error = xfs_bmap_finish(&tp, &free_list, &committed); + if (error) + goto out_cancel; + + error = xfs_trans_commit(tp); + if (error) + goto out_error; + + /* Remove the EFD and map the new block into the file. */ + resblks = XFS_DIOSTRAT_SPACE_RES(mp, imap->br_blockcount * 3); + tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, resblks, 0); + if (error) + goto out_cancel; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); + + efd = xfs_trans_get_efd(tp, eio->rlei_efi, 1); + xfs_trans_log_efd_extent(tp, efd, imap->br_startblock, + imap->br_blockcount); + + error = xfs_bmapi_write(tp, ip, imap->br_startoff, imap->br_blockcount, + XFS_BMAPI_EXACT, &imap->br_startblock, + 0, &imaps[0], &nimaps, &free_list); + if (error) + goto out_freelist; + + error = xfs_bmap_finish(&tp, &free_list, &committed); + if (error) + goto out_cancel; + + error = xfs_trans_commit(tp); + if (error) + goto out_error; + return error; + +out_freelist: + xfs_bmap_cancel(&free_list); +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_remap_after_io_error(ip, error, _RET_IP_); + return error; +} + +/** + * xfs_reflink_fork_ioend() - remap all blocks after forking + * + * @ioend: the io completion object + */ +int +xfs_reflink_fork_ioend( + struct xfs_ioend *ioend) +{ + int error, err2; + struct list_head *pos, *n; + struct xfs_reflink_ioend *eio; + struct xfs_inode *ip = XFS_I(ioend->io_inode); + struct xfs_mount *mp = ip->i_mount; + + error = 0; + list_for_each_safe(pos, n, &ioend->io_reflink_endio_list) { + eio = list_entry(pos, struct xfs_reflink_ioend, rlei_list); + err2 = xfs_reflink_remap_after_io(mp, ip, eio); + if (error == 0) + error = err2; + kfree(eio); + } + return error; +} + +/** + * xfs_reflink_should_fork_block() - determine if a block should be forked + * + * @ip: XFS inode object + * @imap: the fileoff:fsblock mapping that we might fork + * @offset: the file offset of the block we're examining + * @type: set to true if reflinked, false otherwise. + */ +int +xfs_reflink_should_fork_block( + struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, + xfs_off_t offset, + bool *type) +{ + xfs_fsblock_t fsbno; + xfs_off_t iomap_offset; + xfs_agnumber_t agno; /* allocation group number */ + xfs_agblock_t agbno; /* ag start of range to free */ + xfs_extlen_t len; + xfs_nlink_t nr; + int error; + struct xfs_mount *mp = ip->i_mount; + + if (!xfs_is_reflink_inode(ip) || + ISUNWRITTEN(imap) || + imap->br_startblock == HOLESTARTBLOCK || + imap->br_startblock == DELAYSTARTBLOCK) { + *type = false; + return 0; + } + + iomap_offset = XFS_FSB_TO_B(mp, imap->br_startoff); + fsbno = imap->br_startblock + XFS_B_TO_FSB(mp, offset - iomap_offset); + agno = XFS_FSB_TO_AGNO(mp, fsbno); + agbno = XFS_FSB_TO_AGBNO(mp, fsbno); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agbno, 1); + ASSERT(imap->br_state == XFS_EXT_NORM); + + error = xfs_reflink_get_refcount(mp, agno, agbno, &len, &nr); + if (error) + return error; + ASSERT(len != 0); + *type = (nr > 1); + return error; +} + +/* Cancel a forked block being held for a CoW operation */ +STATIC int +xfs_reflink_free_forked( + struct xfs_mount *mp, + struct xfs_inode *ip, + struct xfs_reflink_ioend *eio) +{ + struct xfs_trans *tp = NULL; + int error; + xfs_agnumber_t agno; /* allocation group number */ + xfs_agblock_t agbno; /* ag start of range to free */ + xfs_fsblock_t firstfsb; + int committed; + struct xfs_bmap_free free_list; + struct xfs_bmbt_irec *imap = &eio->rlei_mapping; + struct xfs_efd_log_item *efd; + unsigned int resblks; + + ASSERT(xfs_is_reflink_inode(ip)); + agno = XFS_FSB_TO_AGNO(mp, imap->br_startblock); + agbno = XFS_FSB_TO_AGBNO(mp, imap->br_startblock); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agbno, 1); + ASSERT(imap->br_state == XFS_EXT_NORM); + + trace_xfs_reflink_free_forked(ip, imap->br_startoff, + eio->rlei_oldfsbno, imap->br_blockcount, + imap->br_startblock); + + /* Remove the EFD and map the new block into the file. */ + resblks = XFS_DIOSTRAT_SPACE_RES(mp, imap->br_blockcount * 3); + tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, resblks, 0); + if (error) + goto out_cancel; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); + efd = xfs_trans_get_efd(tp, eio->rlei_efi, 1); + xfs_trans_log_efd_extent(tp, efd, imap->br_startblock, + imap->br_blockcount); + + xfs_bmap_init(&free_list, &firstfsb); + xfs_bmap_add_free(mp, &free_list, imap->br_startblock, 1, ip->i_ino); + + error = xfs_bmap_finish(&tp, &free_list, &committed); + if (error) + goto out_cancel; + + error = xfs_trans_commit(tp); + if (error) + goto out_error; + return error; + +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_free_forked_error(ip, error, _RET_IP_); + return error; +} + +/** + * xfs_reflink_cancel_fork_ioend() - free all forked blocks attached to an ioend + * + * @ioend: the io completion object + */ +int +xfs_reflink_cancel_fork_ioend( + struct xfs_ioend *ioend) +{ + int error, err2; + struct list_head *pos, *n; + struct xfs_reflink_ioend *eio; + struct xfs_inode *ip = XFS_I(ioend->io_inode); + struct xfs_mount *mp = ip->i_mount; + + error = 0; + list_for_each_safe(pos, n, &ioend->io_reflink_endio_list) { + eio = list_entry(pos, struct xfs_reflink_ioend, rlei_list); + err2 = xfs_reflink_free_forked(mp, ip, eio); + if (error == 0) + error = err2; + kfree(eio); + } + return error; +} + +/** + * xfs_reflink_cancel_fork_blocks() -- Free all forked blocks attached to an inode. + * + */ +int +xfs_reflink_cancel_fork_blocks( + struct xfs_inode *ip) +{ + struct rb_node *node; + struct xfs_reflink_ioend *eio; + int error = 0; + int err2; + + while ((node = rb_first(&ip->i_remaps))) { + eio = rb_entry(node, struct xfs_reflink_ioend, rlei_node); + err2 = xfs_reflink_free_forked(ip->i_mount, ip, eio); + if (error == 0) + error = err2; + rb_erase(node, &ip->i_remaps); + kfree(eio); + } + + return error; +} + +/** + * xfs_reflink_add_ioend() -- Hook ourselves up to the ioend processing + * so that we can finish forking a block after + * the write completes. + * + * @ioend: The regular ioend structure. + * @eio: The reflink ioend context. + */ +void +xfs_reflink_add_ioend( + struct xfs_ioend *ioend, + struct xfs_reflink_ioend *eio) +{ + list_add_tail(&eio->rlei_list, &ioend->io_reflink_endio_list); +} diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h new file mode 100644 index 0000000..b3e12d2 --- /dev/null +++ b/fs/xfs/xfs_reflink.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015 Oracle. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_REFLINK_H +#define __XFS_REFLINK_H 1 + +struct xfs_reflink_ioend; + +extern int xfs_reflink_get_refcount(struct xfs_mount *mp, xfs_agnumber_t agno, + xfs_agblock_t agbno, xfs_extlen_t *len, xfs_nlink_t *nr); +extern int xfs_reflink_write_fork_block(struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, xfs_off_t offset, + unsigned int *type, struct xfs_reflink_ioend **peio); +extern int xfs_reflink_reserve_fork_block(struct xfs_inode *ip, + xfs_off_t pos, xfs_off_t len); +extern int xfs_reflink_redirect_directio_write(struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, xfs_off_t offset); +extern int xfs_reflink_cancel_fork_ioend(struct xfs_ioend *ioend); +extern int xfs_reflink_cancel_fork_blocks(struct xfs_inode *ip); +extern int xfs_reflink_fork_ioend(struct xfs_ioend *ioend); +extern void xfs_reflink_add_ioend(struct xfs_ioend *ioend, + struct xfs_reflink_ioend *eio); + +extern int xfs_reflink_should_fork_block(struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, xfs_off_t offset, bool *type); + +#endif /* __XFS_REFLINK_H */ From darrick.wong@oracle.com Wed Jul 29 17:34:48 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DE4B229E01 for ; Wed, 29 Jul 2015 17:34:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id CB91D304051 for ; Wed, 29 Jul 2015 15:34:48 -0700 (PDT) X-ASG-Debug-ID: 1438209287-04cbb0416f89040001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id AUEsDW0TTjRyctHQ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:47 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYgjp007890 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:42 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYgZM006409 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:42 GMT Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYgPh028596; Wed, 29 Jul 2015 22:34:42 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:41 -0700 Subject: [PATCH 16/24] xfs: copy-on-write reflinked blocks when zeroing ranges of blocks From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 16/24] xfs: copy-on-write reflinked blocks when zeroing ranges of blocks To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:41 -0700 Message-ID: <20150729223441.17414.70951.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209287 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines When we're writing zeroes to a reflinked block (such as when we're punching a reflinked range), we need to fork the the block and write to that, otherwise we can corrupt the other reflinks. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_bmap_util.c | 25 +++++++- fs/xfs/xfs_reflink.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 6 ++ 3 files changed, 185 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 17975fe..345ea79 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -40,6 +40,7 @@ #include "xfs_trace.h" #include "xfs_icache.h" #include "xfs_log.h" +#include "xfs_reflink.h" /* Kernel only BMAP related definitions and functions */ @@ -1087,7 +1088,9 @@ xfs_zero_remaining_bytes( xfs_buf_t *bp; xfs_mount_t *mp = ip->i_mount; int nimap; - int error = 0; + int error = 0, err2; + bool should_fork; + struct xfs_trans *tp; /* * Avoid doing I/O beyond eof - it's not necessary @@ -1128,8 +1131,14 @@ xfs_zero_remaining_bytes( if (lastoffset > endoff) lastoffset = endoff; + /* Do we need to CoW this block? */ + error = xfs_reflink_should_fork_block(ip, &imap, offset, + &should_fork); + if (error) + return error; + /* DAX can just zero the backing device directly */ - if (IS_DAX(VFS_I(ip))) { + if (IS_DAX(VFS_I(ip)) && !should_fork) { error = dax_zero_page_range(VFS_I(ip), offset, lastoffset - offset + 1, xfs_get_blocks_direct); @@ -1150,10 +1159,22 @@ xfs_zero_remaining_bytes( (offset - XFS_FSB_TO_B(mp, imap.br_startoff)), 0, lastoffset - offset + 1); + tp = NULL; + if (should_fork) { + error = xfs_reflink_fork_buf(ip, bp, offset_fsb, &tp); + if (error) + return error; + } + error = xfs_bwrite(bp); + + err2 = xfs_reflink_finish_fork_buf(ip, bp, offset_fsb, tp, + error, imap.br_startblock); xfs_buf_relse(bp); if (error) return error; + if (err2) + return err2; } return error; } diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 29e7da8..04eeb30 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -772,3 +772,159 @@ xfs_reflink_add_ioend( { list_add_tail(&eio->rlei_list, &ioend->io_reflink_endio_list); } + +/** + * xfs_reflink_fork_buf() - start a transaction to fork a buffer (if needed) + * + * @mp: XFS mount point + * @ip: XFS inode + * @bp: the buffer that we might need to fork + * @fileoff: file offset of the buffer + * @ptp: pointer to an XFS transaction + */ +int +xfs_reflink_fork_buf( + struct xfs_inode *ip, + struct xfs_buf *bp, + xfs_fileoff_t fileoff, + struct xfs_trans **ptp) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + xfs_fsblock_t fsbno; + xfs_fsblock_t new_fsbno; + xfs_agnumber_t agno; + xfs_agblock_t agbno; + uint resblks; + int error; + + fsbno = XFS_DADDR_TO_FSB(mp, XFS_BUF_ADDR(bp)); + agno = XFS_FSB_TO_AGNO(mp, fsbno); + agbno = XFS_FSB_TO_AGBNO(mp, fsbno); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agno, 1); + + /* + * Get ready to remap the thing... + */ + resblks = XFS_DIOSTRAT_SPACE_RES(mp, 3); + tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, resblks, 0); + + /* + * check for running out of space + */ + if (error) { + /* + * Free the transaction structure. + */ + ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp)); + goto out_cancel; + } + error = xfs_trans_reserve_quota(tp, mp, + ip->i_udquot, ip->i_gdquot, ip->i_pdquot, + resblks, 0, XFS_QMOPT_RES_REGBLKS); + if (error) + goto out_cancel; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); + + /* fork block, remap buffer */ + error = fork_one_block(mp, tp, ip, fsbno, &new_fsbno); + if (error) + goto out_cancel; + + trace_xfs_reflink_fork_buf(ip, fileoff, fsbno, 1, new_fsbno); + + XFS_BUF_SET_ADDR(bp, XFS_FSB_TO_DADDR(mp, new_fsbno)); + *ptp = tp; + return error; + +out_cancel: + xfs_trans_cancel(tp); + trace_xfs_reflink_fork_buf_error(ip, error, _RET_IP_); + return error; +} + +/** + * xfs_reflink_finish_fork_buf() - finish forking a file buffer + * + * @ip: XFS inode + * @bp: the buffer that was forked + * @fileoff: file offset of the buffer + * @tp: transaction that was returned from xfs_reflink_fork_buf() + * @write_error: status code from writing the block + */ +int +xfs_reflink_finish_fork_buf( + struct xfs_inode *ip, + struct xfs_buf *bp, + xfs_fileoff_t fileoff, + struct xfs_trans *tp, + int write_error, + xfs_fsblock_t old_fsbno) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_bmap_free free_list; + xfs_fsblock_t firstfsb; + xfs_fsblock_t fsbno; + struct xfs_bmbt_irec imaps[1]; + xfs_agnumber_t agno; + int nimaps = 1; + int done; + int error; + int committed; + + if (tp == NULL) + return 0; + + fsbno = XFS_DADDR_TO_FSB(mp, XFS_BUF_ADDR(bp)); + agno = XFS_FSB_TO_AGNO(mp, fsbno); + if (write_error != 0) { + error = xfs_free_extent(tp, fsbno, 1, ip->i_ino); + if (error) + goto out_cancel; + xfs_trans_cancel(tp); + return error; + } + + trace_xfs_reflink_fork_buf(ip, fileoff, old_fsbno, 1, fsbno); + /* + * Remap the old blocks. + */ + xfs_bmap_init(&free_list, &firstfsb); + error = xfs_bunmapi(tp, ip, fileoff, 1, 0, 1, &firstfsb, &free_list, + &done); + if (error) + goto out_free; + ASSERT(done == 1); + + error = xfs_bmapi_write(tp, ip, fileoff, 1, XFS_BMAPI_EXACT, &fsbno, + 0, &imaps[0], &nimaps, &free_list); + if (error) + goto out_free; + + /* + * complete the transaction + */ + error = xfs_bmap_finish(&tp, &free_list, &committed); + if (error) + goto out_cancel; + + error = xfs_trans_commit(tp); + if (error) + goto out_error; + + return error; +out_free: + xfs_bmap_finish(&tp, &free_list, &committed); + done = xfs_free_extent(tp, fsbno, 1, ip->i_ino); + if (error == 0) + error = done; +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_finish_fork_buf_error(ip, error, _RET_IP_); + return error; +} diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index b3e12d2..ce00cf6 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -38,4 +38,10 @@ extern void xfs_reflink_add_ioend(struct xfs_ioend *ioend, extern int xfs_reflink_should_fork_block(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, xfs_off_t offset, bool *type); +extern int xfs_reflink_fork_buf(struct xfs_inode *ip, struct xfs_buf *bp, + xfs_fileoff_t fileoff, struct xfs_trans **ptp); +extern int xfs_reflink_finish_fork_buf(struct xfs_inode *ip, struct xfs_buf *bp, + xfs_fileoff_t fileoff, struct xfs_trans *tp, int write_error, + xfs_fsblock_t old_fsbno); + #endif /* __XFS_REFLINK_H */ From darrick.wong@oracle.com Wed Jul 29 17:34:52 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0413329E0E for ; Wed, 29 Jul 2015 17:34:52 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7C5CFAC002 for ; Wed, 29 Jul 2015 15:34:51 -0700 (PDT) X-ASG-Debug-ID: 1438209289-04cb6c673f2f230001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id mwMOvjYTimhvewtD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:50 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYmoZ021694 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:49 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYmtX010443 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:48 GMT Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYmun028644; Wed, 29 Jul 2015 22:34:48 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:47 -0700 Subject: [PATCH 17/24] xfs: clear inode reflink flag when freeing blocks From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 17/24] xfs: clear inode reflink flag when freeing blocks To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:47 -0700 Message-ID: <20150729223447.17414.7298.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209289 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Clear the inode reflink flag when freeing or truncating all blocks in a file. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_bmap_util.c | 8 ++++++++ fs/xfs/xfs_inode.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 345ea79..0091186 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1330,6 +1330,14 @@ xfs_free_file_space( } /* + * Clear the reflink flag if we freed everything. + */ + if (ip->i_d.di_nblocks == 0 && xfs_is_reflink_inode(ip)) { + ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); + } + + /* * complete the transaction */ error = xfs_bmap_finish(&tp, &free_list, &committed); diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 3da9f4d..1d97238 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1566,6 +1566,12 @@ xfs_itruncate_extents( } /* + * Clear the reflink flag if we truncated everything. + */ + if (ip->i_d.di_nblocks == 0 && xfs_is_reflink_inode(ip)) + ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; + + /* * Always re-log the inode so that our permanent transaction can keep * on rolling it forward in the log. */ From darrick.wong@oracle.com Wed Jul 29 17:34:59 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E8B4D29E01 for ; Wed, 29 Jul 2015 17:34:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 549A2AC005 for ; Wed, 29 Jul 2015 15:34:58 -0700 (PDT) X-ASG-Debug-ID: 1438209295-04cbb0416c89050001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id xkKwrk9bjOO8kCbw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:34:55 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMYsQa021778 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:34:55 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYsxo019731 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:34:54 GMT Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMYsoc005141; Wed, 29 Jul 2015 22:34:54 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:34:54 -0700 Subject: [PATCH 18/24] xfs: reflink extents from one file to another From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 18/24] xfs: reflink extents from one file to another To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:34:53 -0700 Message-ID: <20150729223453.17414.53321.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209295 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Reflink extents from one file to another; that is to say, iteratively remove the mappings from the destination file, copy the mappings from the source file to the destination file, and increment the reference count of all the blocks that got remapped. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_reflink.c | 509 ++++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 3 2 files changed, 512 insertions(+) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 04eeb30..7605519 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -928,3 +928,512 @@ out_error: trace_xfs_reflink_finish_fork_buf_error(ip, error, _RET_IP_); return error; } + +/* + * Reflinking (Block) Ranges of Two Files Together + * + * First, ensure that the reflink flag is set on both inodes. The flag is an + * optimization to avoid unnecessary refcount btree lookups in the write path. + * + * Now we can iteratively remap the range of extents (and holes) in src to the + * corresponding ranges in dest. Let drange and srange denote the ranges of + * logical blocks in dest and src touched by the reflink operation. + * + * While the length of drange is greater than zero, + * - Read src's bmbt at the start of srange ("imap") + * - If imap doesn't exist, make imap appear to start at the end of srange + * with zero length. + * - If imap starts before srange, advance imap to start at srange. + * - If imap goes beyond srange, truncate imap to end at the end of srange. + * - Punch (imap start - srange start + imap len) blocks from dest at + * offset (drange start). + * - If imap points to a real range of pblks, + * > Increase the refcount of the imap's pblks + * > Map imap's pblks into dest at the offset + * (drange start + imap start - srange start) + * - Advance drange and srange by (imap start - srange start + imap len) + * + * Finally, if the reflink made dest longer, update both the in-core and + * on-disk file sizes. + * + * ASCII Art Demonstration: + * + * Let's say we want to reflink this source file: + * + * ----SSSSSSS-SSSSS----SSSSSS (src file) + * <--------------------> + * + * into this destination file: + * + * --DDDDDDDDDDDDDDDDDDD--DDD (dest file) + * <--------------------> + * '-' means a hole, and 'S' and 'D' are written blocks in the src and dest. + * Observe that the range has different logical offsets in either file. + * + * Consider that the first extent in the source file doesn't line up with our + * reflink range. Unmapping and remapping are separate operations, so we can + * unmap more blocks from the destination file than we remap. + * + * ----SSSSSSS-SSSSS----SSSSSS + * <-------> + * --DDDDD---------DDDDD--DDD + * <-------> + * + * Now remap the source extent into the destination file: + * + * ----SSSSSSS-SSSSS----SSSSSS + * <-------> + * --DDDDD--SSSSSSSDDDDD--DDD + * <-------> + * + * Do likewise with the second hole and extent in our range. Holes in the + * unmap range don't affect our operation. + * + * ----SSSSSSS-SSSSS----SSSSSS + * <----> + * --DDDDD--SSSSSSS-SSSSS-DDD + * <----> + * + * Finally, unmap and remap part of the third extent. This will increase the + * size of the destination file. + * + * ----SSSSSSS-SSSSS----SSSSSS + * <-----> + * --DDDDD--SSSSSSS-SSSSS----SSS + * <-----> + * + * Once we update the destination file's i_size, we're done. + */ + +/* + * Ensure the reflink bit is set in both inodes. + */ +STATIC int +set_inode_reflink_flag( + struct xfs_inode *src, + struct xfs_inode *dest) +{ + struct xfs_mount *mp = src->i_mount; + int error; + struct xfs_trans *tp; + + if (xfs_is_reflink_inode(src) && xfs_is_reflink_inode(dest)) + return 0; + + tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_ichange, 0, 0); + + /* + * check for running out of space + */ + if (error) { + /* + * Free the transaction structure. + */ + ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp)); + goto out_cancel; + } + + /* Lock both files against IO */ + if (src->i_ino == dest->i_ino) + xfs_ilock(src, XFS_ILOCK_EXCL); + else + xfs_lock_two_inodes(src, dest, XFS_ILOCK_EXCL); + + if (!xfs_is_reflink_inode(src)) { + trace_xfs_reflink_set_inode_flag(src); + xfs_trans_ijoin(tp, src, XFS_ILOCK_EXCL); + src->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK; + xfs_trans_log_inode(tp, src, XFS_ILOG_CORE); + } else + xfs_iunlock(src, XFS_ILOCK_EXCL); + + if (src->i_ino == dest->i_ino) + goto commit_flags; + + if (!xfs_is_reflink_inode(dest)) { + trace_xfs_reflink_set_inode_flag(dest); + xfs_trans_ijoin(tp, dest, XFS_ILOCK_EXCL); + dest->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK; + xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE); + } else + xfs_iunlock(dest, XFS_ILOCK_EXCL); + +commit_flags: + error = xfs_trans_commit(tp); + if (error) + goto out_error; + return error; + +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_set_inode_flag_error(dest, error, _RET_IP_); + return error; +} + +/* + * Update destination inode size, if necessary. + */ +STATIC int +update_dest_isize( + struct xfs_inode *dest, + xfs_off_t newlen) +{ + struct xfs_mount *mp = dest->i_mount; + struct xfs_trans *tp; + int error; + + if (newlen <= i_size_read(VFS_I(dest))) + return 0; + + tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_SIZE); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_itruncate, 0, 0); + + /* + * check for running out of space + */ + if (error) { + /* + * Free the transaction structure. + */ + ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp)); + goto out_cancel; + } + + xfs_ilock(dest, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, dest, XFS_ILOCK_EXCL); + + trace_xfs_reflink_update_inode_size(dest, newlen); + i_size_write(VFS_I(dest), newlen); + dest->i_d.di_size = newlen; + xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE); + + error = xfs_trans_commit(tp); + if (error) + goto out_error; + return error; + +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_update_inode_size_error(dest, error, _RET_IP_); + return error; +} + +/* + * Punch a range of file blocks, assuming that there's no remapping in + * progress and that the file is eligible for reflink. + * + * XXX: Could we just use xfs_free_file_space? + */ +STATIC int +punch_range( + struct xfs_inode *dest, + xfs_fileoff_t off, + xfs_filblks_t len) +{ + struct xfs_mount *mp = dest->i_mount; + int error, done; + uint resblks; + struct xfs_trans *tp; + xfs_fsblock_t firstfsb; + struct xfs_bmap_free free_list; + int committed; + + /* + * free file space until done or until there is an error + */ + trace_xfs_reflink_punch_range(dest, off, len); + resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0); + error = done = 0; + while (!error && !done) { + /* + * allocate and setup the transaction. Allow this + * transaction to dip into the reserve blocks to ensure + * the freeing of the space succeeds at ENOSPC. + */ + tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, resblks, 0); + + /* + * check for running out of space + */ + if (error) { + /* + * Free the transaction structure. + */ + ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp)); + goto out_cancel; + } + xfs_ilock(dest, XFS_ILOCK_EXCL); + error = xfs_trans_reserve_quota(tp, mp, + dest->i_udquot, dest->i_gdquot, dest->i_pdquot, + resblks, 0, XFS_QMOPT_RES_REGBLKS); + if (error) + goto out_cancel; + + xfs_trans_ijoin(tp, dest, XFS_ILOCK_EXCL); + + /* + * issue the bunmapi() call to free the blocks + */ + xfs_bmap_init(&free_list, &firstfsb); + error = xfs_bunmapi(tp, dest, off, len, + 0, 2, &firstfsb, &free_list, &done); + if (error) + goto out_freelist; + + /* + * complete the transaction + */ + error = xfs_bmap_finish(&tp, &free_list, &committed); + if (error) + goto out_freelist; + + error = xfs_trans_commit(tp); + } + if (error) + goto out_error; + + return error; +out_freelist: + xfs_bmap_cancel(&free_list); +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_punch_range_error(dest, error, _RET_IP_); + return error; +} + +/* + * Reflink a continuous range of blocks. + */ +STATIC int +remap_one_range( + struct xfs_inode *dest, + struct xfs_bmbt_irec *imap, + xfs_fileoff_t destoff) +{ + struct xfs_mount *mp = dest->i_mount; + int error; + xfs_agnumber_t agno; + xfs_agblock_t agbno; + struct xfs_trans *tp; + uint resblks; + struct xfs_buf *agbp; + xfs_fsblock_t firstfsb; + struct xfs_bmap_free free_list; + struct xfs_bmbt_irec imap_tmp; + int nimaps; + int committed; + + resblks = XFS_DIOSTRAT_SPACE_RES(mp, 1); + tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); + error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write, resblks, 0); + /* + * Check for running out of space + */ + if (error) { + /* + * Free the transaction structure. + */ + ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp)); + goto out_cancel; + } + + xfs_ilock(dest, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, dest, XFS_ILOCK_EXCL); + + /* Update the refcount tree */ + agno = XFS_FSB_TO_AGNO(mp, imap->br_startblock); + agbno = XFS_FSB_TO_AGBNO(mp, imap->br_startblock); + error = xfs_alloc_read_agf(mp, tp, agno, 0, &agbp); + if (error) + goto out_cancel; + xfs_bmap_init(&free_list, &firstfsb); + error = xfs_refcount_increase(mp, tp, agbp, agno, agbno, + imap->br_blockcount, &free_list); + xfs_trans_brelse(tp, agbp); + if (error) + goto out_freelist; + + /* Add this extent to the destination file */ + trace_xfs_reflink_remap_range(dest, destoff, imap->br_blockcount, + imap->br_startblock); + nimaps = 1; + error = xfs_bmapi_write(tp, dest, destoff, imap->br_blockcount, + XFS_BMAPI_EXACT, &imap->br_startblock, + 0, &imap_tmp, &nimaps, &free_list); + if (error) + goto out_freelist; + + /* + * Complete the transaction + */ + error = xfs_bmap_finish(&tp, &free_list, &committed); + if (error) + goto out_freelist; + + error = xfs_trans_commit(tp); + if (error) + goto out_error; + return error; + +out_freelist: + xfs_bmap_cancel(&free_list); +out_cancel: + xfs_trans_cancel(tp); +out_error: + trace_xfs_reflink_remap_range_error(dest, error, _RET_IP_); + return error; +} + +/** + * Iteratively remap one file's extents (and holes) to another's. + */ +#define IMAPNEXT(i) ((i).br_startoff + (i).br_blockcount) +STATIC int +remap_blocks( + struct xfs_inode *src, + xfs_fileoff_t srcoff, + struct xfs_inode *dest, + xfs_fileoff_t destoff, + xfs_filblks_t len) +{ + struct xfs_bmbt_irec imap; + int nimaps; + int error; + xfs_fileoff_t srcioff; + + /* drange = (destoff, destoff + len); srange = (srcoff, srcoff + len) */ + while (len) { + trace_xfs_reflink_main_loop(src, srcoff, len, dest, destoff); + /* Read extent from the source file */ + nimaps = 1; + xfs_ilock(src, XFS_ILOCK_EXCL); + error = xfs_bmapi_read(src, srcoff, len, &imap, &nimaps, 0); + xfs_iunlock(src, XFS_ILOCK_EXCL); + if (error) + break; + + /* + * If imap doesn't exist, pretend that it does just past + * srange. + */ + if (nimaps == 0) { + imap.br_startoff = srcoff + len; + imap.br_startblock = HOLESTARTBLOCK; + imap.br_blockcount = 0; + imap.br_state = XFS_EXT_INVALID; + } + trace_xfs_reflink_read_iomap(src, srcoff, len, XFS_IO_FORKED, + &imap); + + /* If imap starts before srange, advance it to start there */ + if (imap.br_startoff < srcoff) { + imap.br_blockcount -= srcoff - imap.br_startoff; + imap.br_startoff = srcoff; + } + + /* If imap ends after srange, truncate it to match srange */ + if (IMAPNEXT(imap) > srcoff + len) + imap.br_blockcount -= IMAPNEXT(imap) - (srcoff + len); + + srcioff = imap.br_startoff - srcoff; + + /* Punch logical blocks from drange */ + error = punch_range(dest, destoff, srcioff + imap.br_blockcount); + if (error) + break; + + /* + * If imap points to real blocks, increase refcount and map; + * otherwise, skip it. + */ + if (imap.br_startblock == HOLESTARTBLOCK || + imap.br_startblock == DELAYSTARTBLOCK || + ISUNWRITTEN(&imap)) + goto advloop; + + error = remap_one_range(dest, &imap, destoff + srcioff); + if (error) + break; +advloop: + /* Advance drange/srange */ + srcoff += srcioff + imap.br_blockcount; + destoff += srcioff + imap.br_blockcount; + len -= srcioff + imap.br_blockcount; + } + + return error; +} +#undef IMAPNEXT + +/** + * xfs_reflink() - link a range of blocks from one inode to another + * + * @src: Inode to clone from + * @srcoff: Offset within source to start clone from + * @dest: Inode to clone to + * @destoff: Offset within @inode to start clone + * @len: Original length, passed by user, of range to clone + */ +int +xfs_reflink( + struct xfs_inode *src, + xfs_off_t srcoff, + struct xfs_inode *dest, + xfs_off_t destoff, + xfs_off_t len) +{ + struct xfs_mount *mp = src->i_mount; + xfs_fileoff_t sfsbno, dfsbno; + xfs_filblks_t fsblen; + int error; + + if (!xfs_sb_version_hasreflink(&mp->m_sb)) + return -EOPNOTSUPP; + + if (XFS_FORCED_SHUTDOWN(mp)) + return -EIO; + + /* Don't reflink realtime inodes */ + if (XFS_IS_REALTIME_INODE(src) || XFS_IS_REALTIME_INODE(dest)) + return -EINVAL; + + trace_xfs_reflink_range(src, srcoff, len, dest, destoff); + + /* Lock both files against IO */ + if (src->i_ino == dest->i_ino) { + xfs_ilock(src, XFS_IOLOCK_EXCL); + xfs_ilock(src, XFS_MMAPLOCK_EXCL); + } else { + xfs_lock_two_inodes(src, dest, XFS_IOLOCK_EXCL); + xfs_lock_two_inodes(src, dest, XFS_MMAPLOCK_EXCL); + } + + error = set_inode_reflink_flag(src, dest); + if (error) + goto out_error; + + dfsbno = XFS_B_TO_FSBT(mp, destoff); + sfsbno = XFS_B_TO_FSBT(mp, srcoff); + fsblen = XFS_B_TO_FSB(mp, len); + error = remap_blocks(src, sfsbno, dest, dfsbno, fsblen); + if (error) + goto out_error; + + error = update_dest_isize(dest, destoff + len); + +out_error: + xfs_iunlock(src, XFS_MMAPLOCK_EXCL); + xfs_iunlock(src, XFS_IOLOCK_EXCL); + if (src->i_ino != dest->i_ino) { + xfs_iunlock(dest, XFS_MMAPLOCK_EXCL); + xfs_iunlock(dest, XFS_IOLOCK_EXCL); + } + if (error) + trace_xfs_reflink_range_error(dest, error, _RET_IP_); + return error; +} diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index ce00cf6..b633824 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -44,4 +44,7 @@ extern int xfs_reflink_finish_fork_buf(struct xfs_inode *ip, struct xfs_buf *bp, xfs_fileoff_t fileoff, struct xfs_trans *tp, int write_error, xfs_fsblock_t old_fsbno); +extern int xfs_reflink(struct xfs_inode *src, xfs_off_t srcoff, + struct xfs_inode *dest, xfs_off_t destoff, xfs_off_t len); + #endif /* __XFS_REFLINK_H */ From darrick.wong@oracle.com Wed Jul 29 17:35:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0F92629E01 for ; Wed, 29 Jul 2015 17:35:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D1932304059 for ; Wed, 29 Jul 2015 15:35:11 -0700 (PDT) X-ASG-Debug-ID: 1438209309-04bdf06bcf0b3e0001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id A4jUaUsuC07AU9jZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:35:09 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMZ8uN022169 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:35:09 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZ8q5007707 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:35:08 GMT Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZ0j3005189; Wed, 29 Jul 2015 22:35:04 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:35:00 -0700 Subject: [PATCH 19/24] xfs: add clone file and clone range ioctls From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 19/24] xfs: add clone file and clone range ioctls To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:35:00 -0700 Message-ID: <20150729223500.17414.94620.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209309 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Define two ioctls which allow userspace to reflink a range of blocks between two files or to reflink one file's contents to another. These ioctls must have the same ABI as the btrfs ioctls with similar names. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_fs.h | 10 +++ fs/xfs/xfs_ioctl.c | 192 ++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_ioctl32.c | 2 + 3 files changed, 204 insertions(+) diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h index 1d1d93d..22a0451 100644 --- a/fs/xfs/libxfs/xfs_fs.h +++ b/fs/xfs/libxfs/xfs_fs.h @@ -561,6 +561,16 @@ typedef struct xfs_swapext #define XFS_IOC_GOINGDOWN _IOR ('X', 125, __uint32_t) /* XFS_IOC_GETFSUUID ---------- deprecated 140 */ +/* reflink ioctls; these MUST match the btrfs ioctl definitions */ +struct xfs_ioctl_clone_range_args { + __s64 src_fd; + __u64 src_offset; + __u64 src_length; + __u64 dest_offset; +}; + +#define XFS_IOC_CLONE _IOW (0x94, 9, int) +#define XFS_IOC_CLONE_RANGE _IOW (0x94, 13, struct xfs_ioctl_clone_range_args) #ifndef HAVE_BBMACROS /* diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index ea7d85a..d93adfa 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -40,6 +40,7 @@ #include "xfs_symlink.h" #include "xfs_trans.h" #include "xfs_pnfs.h" +#include "xfs_reflink.h" #include #include @@ -48,6 +49,8 @@ #include #include #include +#include +#include /* * xfs_find_handle maps from userspace xfs_fsop_handlereq structure to @@ -1503,6 +1506,153 @@ xfs_ioc_swapext( } /* + * Flush all file writes out to disk. + */ +static int +wait_for_io( + struct inode *inode, + loff_t offset, + size_t len) +{ + loff_t rounding; + loff_t ioffset; + loff_t iendoffset; + loff_t bs; + int ret; + + bs = inode->i_sb->s_blocksize; + inode_dio_wait(inode); + + rounding = max_t(xfs_off_t, bs, PAGE_CACHE_SIZE); + ioffset = round_down(offset, rounding); + iendoffset = round_up(offset + len, rounding) - 1; + ret = filemap_write_and_wait_range(inode->i_mapping, ioffset, + iendoffset); + return ret; +} + +/* + * For reflink, validate the VFS parameters, convert them into the XFS + * equivalents, and then call the internal reflink function. + */ +STATIC int +xfs_ioctl_reflink( + struct file *file_in, + loff_t pos_in, + struct file *file_out, + loff_t pos_out, + size_t len) +{ + struct inode *inode_in; + struct inode *inode_out; + ssize_t ret; + loff_t bs; + loff_t isize; + int same_inode; + loff_t blen; + + if (len == 0) + return 0; + else if (len != ~0ULL && (ssize_t)len < 0) + return -EINVAL; + + /* Do we have the correct permissions? */ + if (!(file_in->f_mode & FMODE_READ) || + !(file_out->f_mode & FMODE_WRITE) || + (file_out->f_flags & O_APPEND)) + return -EPERM; + ret = security_file_permission(file_out, MAY_WRITE); + if (ret) + return ret; + + inode_in = file_inode(file_in); + inode_out = file_inode(file_out); + bs = inode_out->i_sb->s_blocksize; + + /* Don't touch certain kinds of inodes */ + if (IS_IMMUTABLE(inode_out)) + return -EPERM; + if (IS_SWAPFILE(inode_in) || + IS_SWAPFILE(inode_out)) + return -ETXTBSY; + + /* Reflink only works within this filesystem. */ + if (inode_in->i_sb != inode_out->i_sb || + file_in->f_path.mnt != file_out->f_path.mnt) + return -EXDEV; + same_inode = (inode_in->i_ino == inode_out->i_ino); + + /* Don't reflink dirs, pipes, sockets... */ + if (S_ISDIR(inode_in->i_mode) || S_ISDIR(inode_out->i_mode)) + return -EISDIR; + if (S_ISFIFO(inode_in->i_mode) || S_ISFIFO(inode_out->i_mode)) + return -ESPIPE; + if (!S_ISREG(inode_in->i_mode) || !S_ISREG(inode_out->i_mode)) + return -EINVAL; + + /* Are we going all the way to the end? */ + isize = i_size_read(inode_in); + if (isize == 0) + return 0; + if (len == ~0ULL) + len = isize - pos_in; + + /* Ensure offsets don't wrap and the input is inside i_size */ + if (pos_in + len < pos_in || pos_out + len < pos_out || + pos_in + len > isize) + return -EINVAL; + + /* If we're linking to EOF, continue to the block boundary. */ + if (pos_in + len == isize) + blen = ALIGN(isize, bs) - pos_in; + else + blen = len; + + /* Only reflink if we're aligned to block boundaries */ + if (!IS_ALIGNED(pos_in, bs) || !IS_ALIGNED(pos_in + blen, bs) || + !IS_ALIGNED(pos_out, bs) || !IS_ALIGNED(pos_out + blen, bs)) + return -EINVAL; + + /* Don't allow overlapped reflink within the same file */ + if (same_inode && pos_out + blen > pos_in && pos_out < pos_in + blen) + return -EINVAL; + + ret = mnt_want_write_file(file_out); + if (ret) + return ret; + + /* Wait for the completion of any pending IOs on srcfile */ + ret = wait_for_io(inode_in, pos_in, len); + if (ret) + goto out_unlock; + ret = wait_for_io(inode_out, pos_out, len); + if (ret) + goto out_unlock; + + ret = xfs_reflink(XFS_I(inode_in), pos_in, XFS_I(inode_out), + pos_out, len); + if (ret < 0) + goto out_unlock; + + /* Truncate the page cache so we don't see stale data */ + truncate_inode_pages_range(&inode_out->i_data, pos_out, + PAGE_CACHE_ALIGN(pos_out + len) - 1); + +out_unlock: + if (ret == 0) { + fsnotify_access(file_in); + add_rchar(current, len); + fsnotify_modify(file_out); + add_wchar(current, len); + } + inc_syscr(current); + inc_syscw(current); + + mnt_drop_write_file(file_out); + return ret; +} + +/* * Note: some of the ioctl's return positive numbers as a * byte count indicating success, such as readlink_by_handle. * So we don't "sign flip" like most other routines. This means @@ -1800,6 +1950,48 @@ xfs_file_ioctl( return xfs_icache_free_eofblocks(mp, &keofb); } + case XFS_IOC_CLONE: { + struct fd src; + + src = fdget(p); + if (!src.file) + return -EBADF; + + trace_xfs_ioctl_clone(file_inode(src.file), file_inode(filp)); + + error = xfs_ioctl_reflink(src.file, 0, filp, 0, ~0ULL); + fdput(src); + if (error > 0) + error = 0; + + return error; + } + + case XFS_IOC_CLONE_RANGE: { + struct fd src; + struct xfs_ioctl_clone_range_args args; + + if (copy_from_user(&args, arg, sizeof(args))) + return -EFAULT; + src = fdget(args.src_fd); + if (!src.file) + return -EBADF; + if (args.src_length == 0) + args.src_length = ~0ULL; + + trace_xfs_ioctl_clone_range(file_inode(src.file), + args.src_offset, args.src_length, + file_inode(filp), args.dest_offset); + + error = xfs_ioctl_reflink(src.file, args.src_offset, filp, + args.dest_offset, args.src_length); + fdput(src); + if (error > 0) + error = 0; + + return error; + } + default: return -ENOTTY; } diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c index b88bdc8..76d8729 100644 --- a/fs/xfs/xfs_ioctl32.c +++ b/fs/xfs/xfs_ioctl32.c @@ -558,6 +558,8 @@ xfs_file_compat_ioctl( case XFS_IOC_GOINGDOWN: case XFS_IOC_ERROR_INJECTION: case XFS_IOC_ERROR_CLEARALL: + case XFS_IOC_CLONE: + case XFS_IOC_CLONE_RANGE: return xfs_file_ioctl(filp, cmd, p); #ifndef BROKEN_X86_ALIGNMENT /* These are handled fine if no alignment issues */ From darrick.wong@oracle.com Wed Jul 29 17:35:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 239CD29E1A for ; Wed, 29 Jul 2015 17:35:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 115F7304043 for ; Wed, 29 Jul 2015 15:35:23 -0700 (PDT) X-ASG-Debug-ID: 1438209321-04cb6c673e2f530001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id hfvCe7gRP4qknFfG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:35:21 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMZKBn022354 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:35:20 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZKYm021045 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:35:20 GMT Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZJAu028891; Wed, 29 Jul 2015 22:35:20 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:35:19 -0700 Subject: [PATCH 22/24] xfs: swap inode reflink flags when swapping inode extents From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 22/24] xfs: swap inode reflink flags when swapping inode extents To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:35:19 -0700 Message-ID: <20150729223519.17414.25444.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209321 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines When we're swapping the extents of two inodes, be sure to swap the reflink inode flag too. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_bmap_util.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 349a5a6..7bdec90 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1929,6 +1929,11 @@ xfs_swap_extents( break; } + if (xfs_is_reflink_inode(ip)) { + tip->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK; + ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; + } + xfs_trans_log_inode(tp, ip, src_log_flags); xfs_trans_log_inode(tp, tip, target_log_flags); From darrick.wong@oracle.com Wed Jul 29 17:35:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0736D29E01 for ; Wed, 29 Jul 2015 17:35:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6BB89AC005 for ; Wed, 29 Jul 2015 15:35:23 -0700 (PDT) X-ASG-Debug-ID: 1438209321-04cbb0416f89080001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id Z3rr8OsmYQFSaALi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:35:21 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMZGrx008507 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:35:16 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZGbt011723 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:35:16 GMT Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZD7M005264; Wed, 29 Jul 2015 22:35:14 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:35:13 -0700 Subject: [PATCH 21/24] xfs: teach fiemap about reflink'd extents From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 21/24] xfs: teach fiemap about reflink'd extents To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:35:12 -0700 Message-ID: <20150729223512.17414.61830.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209321 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Teach FIEMAP to report shared (i.e. reflinked) extents. Signed-off-by: Darrick J. Wong --- fs/xfs/xfs_bmap_util.c | 2 +- fs/xfs/xfs_bmap_util.h | 3 ++ fs/xfs/xfs_ioctl.c | 12 ++++++++- fs/xfs/xfs_iops.c | 62 +++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 63 insertions(+), 16 deletions(-) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 0091186..349a5a6 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -690,7 +690,7 @@ xfs_getbmap( int full = 0; /* user array is full */ /* format results & advance arg */ - error = formatter(&arg, &out[i], &full); + error = formatter(ip, &arg, &out[i], &full); if (error || full) break; } diff --git a/fs/xfs/xfs_bmap_util.h b/fs/xfs/xfs_bmap_util.h index af97d9a..d0dc504 100644 --- a/fs/xfs/xfs_bmap_util.h +++ b/fs/xfs/xfs_bmap_util.h @@ -37,7 +37,8 @@ int xfs_bmap_punch_delalloc_range(struct xfs_inode *ip, xfs_fileoff_t start_fsb, xfs_fileoff_t length); /* bmap to userspace formatter - copy to user & advance pointer */ -typedef int (*xfs_bmap_format_t)(void **, struct getbmapx *, int *); +typedef int (*xfs_bmap_format_t)(struct xfs_inode *, void **, struct getbmapx *, + int *); int xfs_getbmap(struct xfs_inode *ip, struct getbmapx *bmv, xfs_bmap_format_t formatter, void *arg); diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index ce882aa..f3efe9a 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -1352,7 +1352,11 @@ out_drop_write: } STATIC int -xfs_getbmap_format(void **ap, struct getbmapx *bmv, int *full) +xfs_getbmap_format( + struct xfs_inode *ip, + void **ap, + struct getbmapx *bmv, + int *full) { struct getbmap __user *base = (struct getbmap __user *)*ap; @@ -1396,7 +1400,11 @@ xfs_ioc_getbmap( } STATIC int -xfs_getbmapx_format(void **ap, struct getbmapx *bmv, int *full) +xfs_getbmapx_format( + struct xfs_inode *ip, + void **ap, + struct getbmapx *bmv, + int *full) { struct getbmapx __user *base = (struct getbmapx __user *)*ap; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 766b23f..530359f 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -38,6 +38,8 @@ #include "xfs_dir2.h" #include "xfs_trans_space.h" #include "xfs_pnfs.h" +#include "xfs_bit.h" +#include "xfs_reflink.h" #include #include @@ -1014,14 +1016,21 @@ xfs_vn_update_time( */ STATIC int xfs_fiemap_format( + struct xfs_inode *ip, void **arg, struct getbmapx *bmv, int *full) { - int error; + int error = 0; struct fiemap_extent_info *fieinfo = *arg; u32 fiemap_flags = 0; - u64 logical, physical, length; + u64 logical, physical, length, loop_len, len; + xfs_extlen_t elen; + xfs_nlink_t nr; + xfs_fsblock_t fsbno; + xfs_agnumber_t agno; + xfs_agblock_t agbno; + struct xfs_mount *mp = ip->i_mount; /* Do nothing for a hole */ if (bmv->bmv_block == -1LL) @@ -1029,7 +1038,7 @@ xfs_fiemap_format( logical = BBTOB(bmv->bmv_offset); physical = BBTOB(bmv->bmv_block); - length = BBTOB(bmv->bmv_length); + length = loop_len = BBTOB(bmv->bmv_length); if (bmv->bmv_oflags & BMV_OF_PREALLOC) fiemap_flags |= FIEMAP_EXTENT_UNWRITTEN; @@ -1038,16 +1047,45 @@ xfs_fiemap_format( FIEMAP_EXTENT_UNKNOWN); physical = 0; /* no block yet */ } - if (bmv->bmv_oflags & BMV_OF_LAST) - fiemap_flags |= FIEMAP_EXTENT_LAST; - - error = fiemap_fill_next_extent(fieinfo, logical, physical, - length, fiemap_flags); - if (error > 0) { - error = 0; - *full = 1; /* user array now full */ - } + while (loop_len > 0) { + u32 ext_flags = 0; + + if (bmv->bmv_oflags & BMV_OF_DELALLOC) { + physical = 0; + len = loop_len; + nr = 1; + } else if (xfs_is_reflink_inode(ip)) { + fsbno = XFS_DADDR_TO_FSB(mp, BTOBB(physical)); + agno = XFS_FSB_TO_AGNO(mp, fsbno); + agbno = XFS_FSB_TO_AGBNO(mp, fsbno); + error = xfs_reflink_get_refcount(mp, agno, agbno, + &elen, &nr); + if (error) + goto out; + len = XFS_FSB_TO_B(mp, elen); + if (len == 0 || len > loop_len) + len = loop_len; + if (nr >= 2) + ext_flags |= FIEMAP_EXTENT_SHARED; + } else + len = loop_len; + if ((bmv->bmv_oflags & BMV_OF_LAST) && + len == loop_len) + ext_flags |= FIEMAP_EXTENT_LAST; + + error = fiemap_fill_next_extent(fieinfo, logical, physical, + len, fiemap_flags | ext_flags); + if (error > 0) { + error = 0; + *full = 1; /* user array now full */ + goto out; + } + logical += len; + physical += len; + loop_len -= len; + } +out: return error; } From darrick.wong@oracle.com Wed Jul 29 17:35:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D688A29E22 for ; Wed, 29 Jul 2015 17:35:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C3E50304048 for ; Wed, 29 Jul 2015 15:35:25 -0700 (PDT) X-ASG-Debug-ID: 1438209323-04cb6c673e2f540001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id Mv6oeR6J8LizlLdf (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:35:23 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMZIRZ008519 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:35:18 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZIdY008113 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:35:18 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZ7QW005224; Wed, 29 Jul 2015 22:35:12 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:35:06 -0700 Subject: [PATCH 20/24] xfs: emulate the btrfs dedupe extent same ioctl From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 20/24] xfs: emulate the btrfs dedupe extent same ioctl To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:35:06 -0700 Message-ID: <20150729223506.17414.42551.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438209323 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Emulate the BTRFS_IOC_EXTENT_SAME ioctl. This operation is similar to clone_range, but the kernel must confirm that the contents of the two extents are identical before performing the reflink. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_fs.h | 26 ++++++++++ fs/xfs/xfs_ioctl.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++-- fs/xfs/xfs_ioctl32.c | 1 fs/xfs/xfs_reflink.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_reflink.h | 6 ++ 5 files changed, 270 insertions(+), 6 deletions(-) diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h index 22a0451..2951abb 100644 --- a/fs/xfs/libxfs/xfs_fs.h +++ b/fs/xfs/libxfs/xfs_fs.h @@ -569,8 +569,34 @@ struct xfs_ioctl_clone_range_args { __u64 dest_offset; }; +#define XFS_SAME_DATA_DIFFERS 1 +/* For extent-same ioctl */ +struct xfs_ioctl_file_extent_same_info { + __s64 fd; /* in - destination file */ + __u64 logical_offset; /* in - start of extent in destination */ + __u64 bytes_deduped; /* out - total # of bytes we were able + * to dedupe from this file */ + /* status of this dedupe operation: + * 0 if dedup succeeds + * < 0 for error + * == XFS_SAME_DATA_DIFFERS if data differs + */ + __s32 status; /* out - see above description */ + __u32 reserved; +}; + +struct xfs_ioctl_file_extent_same_args { + __u64 logical_offset; /* in - start of extent in source */ + __u64 length; /* in - length of extent */ + __u16 dest_count; /* in - total elements in info array */ + __u16 reserved1; + __u32 reserved2; + struct xfs_ioctl_file_extent_same_info info[0]; +}; + #define XFS_IOC_CLONE _IOW (0x94, 9, int) #define XFS_IOC_CLONE_RANGE _IOW (0x94, 13, struct xfs_ioctl_clone_range_args) +#define XFS_IOC_FILE_EXTENT_SAME _IOWR(0x94, 54, struct xfs_ioctl_file_extent_same_args) #ifndef HAVE_BBMACROS /* diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index d93adfa..ce882aa 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -1541,7 +1541,8 @@ xfs_ioctl_reflink( loff_t pos_in, struct file *file_out, loff_t pos_out, - size_t len) + size_t len, + bool is_dedupe) { struct inode *inode_in; struct inode *inode_out; @@ -1550,6 +1551,7 @@ xfs_ioctl_reflink( loff_t isize; int same_inode; loff_t blen; + unsigned int flags; if (len == 0) return 0; @@ -1629,8 +1631,12 @@ xfs_ioctl_reflink( if (ret) goto out_unlock; + flags = 0; + if (is_dedupe) + flags |= XFS_REFLINK_DEDUPE; + ret = xfs_reflink(XFS_I(inode_in), pos_in, XFS_I(inode_out), - pos_out, len); + pos_out, len, flags); if (ret < 0) goto out_unlock; @@ -1652,6 +1658,111 @@ out_unlock: return ret; } +#define XFS_MAX_DEDUPE_LEN (16 * 1024 * 1024) + +static long +xfs_ioctl_file_extent_same( + struct file *file, + struct xfs_ioctl_file_extent_same_args __user *argp) +{ + struct xfs_ioctl_file_extent_same_args *same; + struct xfs_ioctl_file_extent_same_info *info; + struct inode *src; + u64 off; + u64 len; + int i; + int ret; + unsigned long size; + bool is_admin; + u16 count; + + is_admin = capable(CAP_SYS_ADMIN); + src = file_inode(file); + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; + + if (get_user(count, &argp->dest_count)) { + ret = -EFAULT; + goto out; + } + + size = offsetof(struct xfs_ioctl_file_extent_same_args __user, + info[count]); + + same = memdup_user(argp, size); + + if (IS_ERR(same)) { + ret = PTR_ERR(same); + goto out; + } + + off = same->logical_offset; + len = same->length; + + /* + * Limit the total length we will dedupe for each operation. + * This is intended to bound the total time spent in this + * ioctl to something sane. + */ + if (len > XFS_MAX_DEDUPE_LEN) + len = XFS_MAX_DEDUPE_LEN; + + ret = -EISDIR; + if (S_ISDIR(src->i_mode)) + goto out; + + ret = -EACCES; + if (!S_ISREG(src->i_mode)) + goto out; + + /* pre-format output fields to sane values */ + for (i = 0; i < count; i++) { + same->info[i].bytes_deduped = 0ULL; + same->info[i].status = 0; + } + + for (i = 0, info = same->info; i < count; i++, info++) { + struct inode *dst; + struct fd dst_file = fdget(info->fd); + if (!dst_file.file) { + info->status = -EBADF; + continue; + } + dst = file_inode(dst_file.file); + + trace_xfs_ioctl_file_extent_same(file_inode(file), off, len, + dst, info->logical_offset); + + info->bytes_deduped = 0; + if (!(is_admin || (dst_file.file->f_mode & FMODE_WRITE))) { + info->status = -EINVAL; + } else if (file->f_path.mnt != dst_file.file->f_path.mnt) { + info->status = -EXDEV; + } else if (S_ISDIR(dst->i_mode)) { + info->status = -EISDIR; + } else if (!S_ISREG(dst->i_mode)) { + info->status = -EACCES; + } else { + info->status = xfs_ioctl_reflink(file, off, + dst_file.file, + info->logical_offset, + len, true); + if (info->status == -EBADE) + info->status = XFS_SAME_DATA_DIFFERS; + else if (info->status == 0) + info->bytes_deduped = len; + } + fdput(dst_file); + } + + ret = copy_to_user(argp, same, size); + if (ret) + ret = -EFAULT; + +out: + return ret; +} + /* * Note: some of the ioctl's return positive numbers as a * byte count indicating success, such as readlink_by_handle. @@ -1959,7 +2070,7 @@ xfs_file_ioctl( trace_xfs_ioctl_clone(file_inode(src.file), file_inode(filp)); - error = xfs_ioctl_reflink(src.file, 0, filp, 0, ~0ULL); + error = xfs_ioctl_reflink(src.file, 0, filp, 0, ~0ULL, false); fdput(src); if (error > 0) error = 0; @@ -1984,7 +2095,8 @@ xfs_file_ioctl( file_inode(filp), args.dest_offset); error = xfs_ioctl_reflink(src.file, args.src_offset, filp, - args.dest_offset, args.src_length); + args.dest_offset, args.src_length, + false); fdput(src); if (error > 0) error = 0; @@ -1992,6 +2104,9 @@ xfs_file_ioctl( return error; } + case XFS_IOC_FILE_EXTENT_SAME: + return xfs_ioctl_file_extent_same(filp, arg); + default: return -ENOTTY; } diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c index 76d8729..575c292 100644 --- a/fs/xfs/xfs_ioctl32.c +++ b/fs/xfs/xfs_ioctl32.c @@ -560,6 +560,7 @@ xfs_file_compat_ioctl( case XFS_IOC_ERROR_CLEARALL: case XFS_IOC_CLONE: case XFS_IOC_CLONE_RANGE: + case XFS_IOC_FILE_EXTENT_SAME: return xfs_file_ioctl(filp, cmd, p); #ifndef BROKEN_X86_ALIGNMENT /* These are handled fine if no alignment issues */ diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 7605519..f2086f6b 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -1370,6 +1370,103 @@ advloop: } #undef IMAPNEXT +/* + * Read a page's worth of file data into the page cache. + */ +STATIC struct page * +xfs_get_page( + struct inode *inode, /* inode */ + xfs_off_t offset) /* where in the inode to read */ +{ + struct address_space *mapping; + struct page *page; + pgoff_t n; + + n = offset >> PAGE_CACHE_SHIFT; + mapping = inode->i_mapping; + page = read_mapping_page(mapping, n, NULL); + if (IS_ERR(page)) + return page; + if (!PageUptodate(page)) { + page_cache_release(page); + return NULL; + } + return page; +} + +/* + * Compare extents of two files to see if they are the same. + */ +STATIC int +xfs_compare_extents( + struct inode *src, /* first inode */ + xfs_off_t srcoff, /* offset of first inode */ + struct inode *dest, /* second inode */ + xfs_off_t destoff, /* offset of second inode */ + xfs_off_t len, /* length of data to compare */ + bool *is_same) /* out: true if the contents match */ +{ + xfs_off_t src_poff; + xfs_off_t dest_poff; + void *src_addr; + void *dest_addr; + struct page *src_page; + struct page *dest_page; + xfs_off_t cmp_len; + bool same; + int error; + + error = -EINVAL; + same = true; + while (len) { + src_poff = srcoff & (PAGE_CACHE_SIZE - 1); + dest_poff = destoff & (PAGE_CACHE_SIZE - 1); + cmp_len = min(PAGE_CACHE_SIZE - src_poff, + PAGE_CACHE_SIZE - dest_poff); + cmp_len = min(cmp_len, len); + ASSERT(cmp_len > 0); + + trace_xfs_reflink_compare_extents(XFS_I(src), srcoff, cmp_len, + XFS_I(dest), destoff); + + src_page = xfs_get_page(src, srcoff); + if (!src_page) + goto out_error; + dest_page = xfs_get_page(dest, destoff); + if (!dest_page) { + page_cache_release(src_page); + goto out_error; + } + src_addr = kmap_atomic(src_page); + dest_addr = kmap_atomic(dest_page); + + flush_dcache_page(src_page); + flush_dcache_page(dest_page); + + if (memcmp(src_addr + src_poff, dest_addr + dest_poff, cmp_len)) + same = false; + + kunmap_atomic(src_addr); + kunmap_atomic(dest_addr); + page_cache_release(src_page); + page_cache_release(dest_page); + + if (!same) + break; + + srcoff += cmp_len; + destoff += cmp_len; + len -= cmp_len; + } + + *is_same = same; + return 0; + +out_error: + trace_xfs_reflink_compare_extents_error(XFS_I(dest), error, _RET_IP_); + return error; +} + /** * xfs_reflink() - link a range of blocks from one inode to another * @@ -1378,6 +1475,7 @@ advloop: * @dest: Inode to clone to * @destoff: Offset within @inode to start clone * @len: Original length, passed by user, of range to clone + * @flags: Flags to modify reflink's behavior */ int xfs_reflink( @@ -1385,12 +1483,14 @@ xfs_reflink( xfs_off_t srcoff, struct xfs_inode *dest, xfs_off_t destoff, - xfs_off_t len) + xfs_off_t len, + unsigned int flags) { struct xfs_mount *mp = src->i_mount; xfs_fileoff_t sfsbno, dfsbno; xfs_filblks_t fsblen; int error; + bool is_same; if (!xfs_sb_version_hasreflink(&mp->m_sb)) return -EOPNOTSUPP; @@ -1402,6 +1502,9 @@ xfs_reflink( if (XFS_IS_REALTIME_INODE(src) || XFS_IS_REALTIME_INODE(dest)) return -EINVAL; + if (flags & ~XFS_REFLINK_ALL) + return -EINVAL; + trace_xfs_reflink_range(src, srcoff, len, dest, destoff); /* Lock both files against IO */ @@ -1413,6 +1516,21 @@ xfs_reflink( xfs_lock_two_inodes(src, dest, XFS_MMAPLOCK_EXCL); } + /* + * Check that the extents are the same. + */ + if (flags & XFS_REFLINK_DEDUPE) { + is_same = false; + error = xfs_compare_extents(VFS_I(src), srcoff, VFS_I(dest), + destoff, len, &is_same); + if (error) + goto out_error; + if (!is_same) { + error = -EBADE; + goto out_error; + } + } + error = set_inode_reflink_flag(src, dest); if (error) goto out_error; diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index b633824..c60a9bd 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -44,7 +44,11 @@ extern int xfs_reflink_finish_fork_buf(struct xfs_inode *ip, struct xfs_buf *bp, xfs_fileoff_t fileoff, struct xfs_trans *tp, int write_error, xfs_fsblock_t old_fsbno); +#define XFS_REFLINK_DEDUPE 1 /* only reflink if contents match */ +#define XFS_REFLINK_ALL (XFS_REFLINK_DEDUPE) + extern int xfs_reflink(struct xfs_inode *src, xfs_off_t srcoff, - struct xfs_inode *dest, xfs_off_t destoff, xfs_off_t len); + struct xfs_inode *dest, xfs_off_t destoff, xfs_off_t len, + unsigned int flags); #endif /* __XFS_REFLINK_H */ From darrick.wong@oracle.com Wed Jul 29 17:35:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1967629E29 for ; Wed, 29 Jul 2015 17:35:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 05EF0304043 for ; Wed, 29 Jul 2015 15:35:29 -0700 (PDT) X-ASG-Debug-ID: 1438209327-04cbb0416c89080001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id tUBuBqtO5WeODl5Q (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:35:28 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMZQjf022421 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:35:27 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZQSC012216 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:35:26 GMT Received: from abhmp0016.oracle.com (abhmp0016.oracle.com [141.146.116.22]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZQmt010276; Wed, 29 Jul 2015 22:35:26 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:35:25 -0700 Subject: [PATCH 23/24] xfs: support XFS_XFLAG_REFLINK (and FS_NOCOW_FL) on reflink filesystems From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 23/24] xfs: support XFS_XFLAG_REFLINK (and FS_NOCOW_FL) on reflink filesystems To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:35:25 -0700 Message-ID: <20150729223525.17414.55808.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209328 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Report the reflink/nocow flags as appropriate in the XFS-specific and "standard" getattr ioctls. Allow the user to clear the reflink flag (or set the nocow flag), which will try to remap all shared blocks to private blocks on disk. If this succeeds, the file will become a non-reflinked file. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_fs.h | 1 fs/xfs/xfs_inode.c | 10 + fs/xfs/xfs_ioctl.c | 39 +++++- fs/xfs/xfs_reflink.c | 334 ++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 7 + 5 files changed, 382 insertions(+), 9 deletions(-) diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h index 2951abb..d7541f7 100644 --- a/fs/xfs/libxfs/xfs_fs.h +++ b/fs/xfs/libxfs/xfs_fs.h @@ -67,6 +67,7 @@ struct fsxattr { #define XFS_XFLAG_EXTSZINHERIT 0x00001000 /* inherit inode extent size */ #define XFS_XFLAG_NODEFRAG 0x00002000 /* do not defragment */ #define XFS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */ +#define XFS_XFLAG_REFLINK 0x00008000 /* file is reflinked */ #define XFS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */ /* diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 1d97238..1d2d364 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -558,7 +558,8 @@ __xfs_iflock( STATIC uint _xfs_dic2xflags( - __uint16_t di_flags) + __uint16_t di_flags, + __uint64_t di_flags2) { uint flags = 0; @@ -591,6 +592,8 @@ _xfs_dic2xflags( flags |= XFS_XFLAG_NODEFRAG; if (di_flags & XFS_DIFLAG_FILESTREAM) flags |= XFS_XFLAG_FILESTREAM; + if (di_flags2 & XFS_DIFLAG2_REFLINK) + flags |= XFS_XFLAG_REFLINK; } return flags; @@ -602,7 +605,7 @@ xfs_ip2xflags( { xfs_icdinode_t *dic = &ip->i_d; - return _xfs_dic2xflags(dic->di_flags) | + return _xfs_dic2xflags(dic->di_flags, dic->di_flags2) | (XFS_IFORK_Q(ip) ? XFS_XFLAG_HASATTR : 0); } @@ -610,7 +613,8 @@ uint xfs_dic2xflags( xfs_dinode_t *dip) { - return _xfs_dic2xflags(be16_to_cpu(dip->di_flags)) | + return _xfs_dic2xflags(be16_to_cpu(dip->di_flags), + be64_to_cpu(dip->di_flags2)) | (XFS_DFORK_Q(dip) ? XFS_XFLAG_HASATTR : 0); } diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index f3efe9a..454d7a8 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -870,6 +870,10 @@ xfs_merge_ioc_xflags( xflags |= XFS_XFLAG_NODUMP; else xflags &= ~XFS_XFLAG_NODUMP; + if (flags & FS_NOCOW_FL) + xflags &= ~XFS_XFLAG_REFLINK; + else + xflags |= XFS_XFLAG_REFLINK; return xflags; } @@ -1002,9 +1006,11 @@ static int xfs_ioctl_setattr_xflags( struct xfs_trans *tp, struct xfs_inode *ip, - struct fsxattr *fa) + struct fsxattr *fa, + struct file *filp) { struct xfs_mount *mp = ip->i_mount; + int error; /* Can't change realtime flag if any extents are allocated. */ if ((ip->i_d.di_nextents || ip->i_delayed_blks) && @@ -1028,6 +1034,9 @@ xfs_ioctl_setattr_xflags( return -EPERM; xfs_set_diflags(ip, fa->fsx_xflags); + error = xfs_reflink_end_unshare(ip, fa->fsx_xflags); + if (error) + return error; xfs_diflags_to_linux(ip); xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); @@ -1170,7 +1179,8 @@ xfs_ioctl_setattr_check_projid( STATIC int xfs_ioctl_setattr( xfs_inode_t *ip, - struct fsxattr *fa) + struct fsxattr *fa, + struct file *filp) { struct xfs_mount *mp = ip->i_mount; struct xfs_trans *tp; @@ -1181,6 +1191,10 @@ xfs_ioctl_setattr( trace_xfs_ioctl_setattr(ip); + code = xfs_reflink_check_flag_adjust(ip, &fa->fsx_xflags); + if (code) + return code; + code = xfs_ioctl_setattr_check_projid(ip, fa); if (code) return code; @@ -1201,6 +1215,10 @@ xfs_ioctl_setattr( return code; } + code = xfs_reflink_start_unshare(ip, fa->fsx_xflags, filp); + if (code) + return code; + tp = xfs_ioctl_setattr_get_trans(ip); if (IS_ERR(tp)) { code = PTR_ERR(tp); @@ -1220,7 +1238,7 @@ xfs_ioctl_setattr( if (code) goto error_trans_cancel; - code = xfs_ioctl_setattr_xflags(tp, ip, fa); + code = xfs_ioctl_setattr_xflags(tp, ip, fa, filp); if (code) goto error_trans_cancel; @@ -1290,7 +1308,7 @@ xfs_ioc_fssetxattr( error = mnt_want_write_file(filp); if (error) return error; - error = xfs_ioctl_setattr(ip, &fa); + error = xfs_ioctl_setattr(ip, &fa, filp); mnt_drop_write_file(filp); return error; } @@ -1303,6 +1321,7 @@ xfs_ioc_getxflags( unsigned int flags; flags = xfs_di2lxflags(ip->i_d.di_flags); + xfs_reflink_get_lxflags(ip, &flags); if (copy_to_user(arg, &flags, sizeof(flags))) return -EFAULT; return 0; @@ -1324,22 +1343,30 @@ xfs_ioc_setxflags( if (flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | \ FS_NOATIME_FL | FS_NODUMP_FL | \ - FS_SYNC_FL)) + FS_SYNC_FL | FS_NOCOW_FL)) return -EOPNOTSUPP; fa.fsx_xflags = xfs_merge_ioc_xflags(flags, xfs_ip2xflags(ip)); + error = xfs_reflink_check_flag_adjust(ip, &fa.fsx_xflags); + if (error) + return error; + error = mnt_want_write_file(filp); if (error) return error; + error = xfs_reflink_start_unshare(ip, fa.fsx_xflags, filp); + if (error) + return error; + tp = xfs_ioctl_setattr_get_trans(ip); if (IS_ERR(tp)) { error = PTR_ERR(tp); goto out_drop_write; } - error = xfs_ioctl_setattr_xflags(tp, ip, &fa); + error = xfs_ioctl_setattr_xflags(tp, ip, &fa, filp); if (error) { xfs_trans_cancel(tp); goto out_drop_write; diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index f2086f6b..af6ec92 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -1555,3 +1555,337 @@ out_error: trace_xfs_reflink_range_error(dest, error, _RET_IP_); return error; } + +/** + * xfs_reflink_get_lxflags() - set reflink-related linux inode flags + * + * @ip: XFS inode + * @flags: Pointer to the user-visible inode flags + */ +void +xfs_reflink_get_lxflags( + struct xfs_inode *ip, /* XFS inode */ + unsigned int *flags) /* user flags */ +{ + /* + * If this is a reflink-capable filesystem and there are no shared + * blocks, then this is a "nocow" file. + */ + if (!xfs_sb_version_hasreflink(&ip->i_mount->m_sb) || + xfs_is_reflink_inode(ip)) + return; + *flags |= FS_NOCOW_FL; +} + + +/** + * xfs_reflink_dirty_range() -- Dirty all the shared blocks in the file so that + * they're rewritten elsewhere. Similar to generic_perform_write(). + * + * @filp: VFS file pointer + * @pos: offset to start dirtying + * @len: number of bytes to dirty + */ +STATIC int +xfs_reflink_dirty_range( + struct file *filp, + xfs_off_t pos, + xfs_off_t len) +{ + struct address_space *mapping; + const struct address_space_operations *a_ops; + int error; + unsigned int flags; + struct page *page; + struct page *rpage; + unsigned long offset; /* Offset into pagecache page */ + unsigned long bytes; /* Bytes to write to page */ + void *fsdata; + + mapping = filp->f_mapping; + a_ops = mapping->a_ops; + flags = AOP_FLAG_UNINTERRUPTIBLE; + do { + + offset = (pos & (PAGE_CACHE_SIZE - 1)); + bytes = min_t(unsigned long, len, PAGE_CACHE_SIZE) - offset; + rpage = xfs_get_page(file_inode(filp), pos); + if (IS_ERR(rpage)) { + error = PTR_ERR(rpage); + break; + } else if (!rpage) { + error = -ENOMEM; + break; + } + + error = a_ops->write_begin(filp, mapping, pos, bytes, flags, + &page, &fsdata); + page_cache_release(rpage); + if (error < 0) + break; + + trace_xfs_reflink_unshare_page(file_inode(filp), page, + pos, bytes); + + if (!PageUptodate(page)) { + printk(KERN_ERR "%s: STALE? ino=%lu pos=%llu\n", + __func__, filp->f_inode->i_ino, pos); + WARN_ON(1); + } + if (mapping_writably_mapped(mapping)) + flush_dcache_page(page); + + error = a_ops->write_end(filp, mapping, pos, bytes, bytes, + page, fsdata); + if (error < 0) + break; + else if (error == 0) { + error = -EIO; + break; + } else { + bytes = error; + error = 0; + } + + cond_resched(); + + pos += bytes; + len -= bytes; + + balance_dirty_pages_ratelimited(mapping); + if (fatal_signal_pending(current)) { + error = -EINTR; + break; + } + } while (len > 0); + + return error; +} + +/** + * xfs_reflink_check_flag_adjust() - the only change we allow to the inode + * reflink flag is to clear it when the fs supports reflink. + * + * @ip: XFS inode + * @xflags: XFS in-core inode flags + */ +int +xfs_reflink_check_flag_adjust( + struct xfs_inode *ip, + unsigned int *xflags) +{ + unsigned int chg; + + chg = !!(*xflags & XFS_XFLAG_REFLINK) ^ !!xfs_is_reflink_inode(ip); + + if (!chg) + return 0; + if (!xfs_sb_version_hasreflink(&ip->i_mount->m_sb)) + return -EOPNOTSUPP; + if (*xflags & XFS_XFLAG_REFLINK) { + *xflags &= ~XFS_XFLAG_REFLINK; + return 0; + } + return 0; +} + +/** + * xfs_reflink_start_unshare() - dirty all the shared blocks so that they + * can be reallocated elsewhere, in preparation for clearing the reflink + * hint. + * + * @ip: XFS inode + * @xflags: XFS in-core inode flags + * @filp: VFS file structure + */ +int +xfs_reflink_start_unshare( + struct xfs_inode *ip, + unsigned int xflags, + struct file *filp) +{ + struct xfs_mount *mp = ip->i_mount; + int error = 0; + xfs_fileoff_t fbno; + xfs_filblks_t end; + xfs_agnumber_t agno; + xfs_agblock_t agbno; + xfs_extlen_t len; + xfs_nlink_t nr; + xfs_off_t isize; + xfs_off_t fpos; + xfs_off_t flen; + struct xfs_bmbt_irec map[2]; + int nmaps; + + if (!xfs_sb_version_hasreflink(&ip->i_mount->m_sb) || + (xflags & XFS_XFLAG_REFLINK) || + !xfs_is_reflink_inode(ip)) + return 0; + + inode_dio_wait(VFS_I(ip)); + + /* + * The user wants to preemptively CoW all shared blocks in this file, + * which enables us to turn off the reflink flag. Iterate all + * extents which are not prealloc/delalloc to see which ranges are + * mentioned in the refcount tree, then read those blocks into the + * pagecache, dirty them, fsync them back out, and then we can update + * the inode flag. What happens if we run out of memory? :) + */ + xfs_ilock(ip, XFS_ILOCK_EXCL); + fbno = 0; + isize = i_size_read(VFS_I(ip)); + if (isize == 0) { + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return 0; + } + + trace_xfs_reflink_start_unshare(ip); + + end = XFS_B_TO_FSB(mp, isize); + while (end - fbno > 0) { + nmaps = 1; + /* + * Look for extents in the file. Skip holes, delalloc, or + * unwritten extents; they can't be reflinked. + */ + error = xfs_bmapi_read(ip, fbno, end - fbno, map, &nmaps, 0); + if (error) + goto out_unlock; + if (nmaps == 0) + break; + if (map[0].br_startblock == HOLESTARTBLOCK || + map[0].br_startblock == DELAYSTARTBLOCK || + ISUNWRITTEN(&map[0])) + goto next; + + map[1] = map[0]; + while (map[1].br_blockcount) { + agno = XFS_FSB_TO_AGNO(mp, map[1].br_startblock); + agbno = XFS_FSB_TO_AGBNO(mp, map[1].br_startblock); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agbno, 1); + + error = xfs_reflink_get_refcount(mp, agno, agbno, + &len, &nr); + if (error) + goto out_unlock; + XFS_WANT_CORRUPTED_GOTO(mp, len != 0, out_unlock); + if (len > map[1].br_blockcount) + len = map[1].br_blockcount; + if (nr < 2) + goto skip_copy; + xfs_iunlock(ip, XFS_ILOCK_EXCL); + fpos = XFS_FSB_TO_B(mp, map[1].br_startoff); + flen = XFS_FSB_TO_B(mp, len); + if (fpos + flen > isize) + flen = isize - fpos; + error = xfs_reflink_dirty_range(filp, fpos, flen); + xfs_ilock(ip, XFS_ILOCK_EXCL); + if (error) + goto out_unlock; +skip_copy: + map[1].br_blockcount -= len; + map[1].br_startoff += len; + map[1].br_startblock += len; + } + +next: + fbno = map[0].br_startoff + map[0].br_blockcount; + } + +out_unlock: + xfs_iunlock(ip, XFS_ILOCK_EXCL); + if (error == 0) + error = filemap_write_and_wait(filp->f_mapping); + else + trace_xfs_reflink_start_unshare_error(ip, error, _RET_IP_); + return error; +} + +/** + * xfs_reflink_end_unshare() - finish removing reflink flag from inode + * + * @ip: XFS inode + * @xflags: XFS in-core inode flags + */ +int /* error */ +xfs_reflink_end_unshare( + struct xfs_inode *ip, /* XFS inode */ + unsigned int xflags) /* VFS file structure */ +{ + struct xfs_mount *mp = ip->i_mount; + int error; + xfs_fileoff_t fbno; + xfs_filblks_t end; + xfs_agnumber_t agno; + xfs_agblock_t agbno; + xfs_extlen_t len; + xfs_nlink_t nr; + struct xfs_bmbt_irec map[2]; + int nmaps; + + if (!xfs_sb_version_hasreflink(&ip->i_mount->m_sb) || + (xflags & XFS_XFLAG_REFLINK) || + !xfs_is_reflink_inode(ip)) + return 0; + + trace_xfs_reflink_end_unshare(ip); + + /* + * Earlier we copied all the shared blocks in this file to new blocks. + * However, we dropped the ilock before getting the transaction, so + * check that nobody wandered in and added more reflinks. + */ + fbno = 0; + end = XFS_B_TO_FSB(mp, i_size_read(VFS_I(ip))); + while (end - fbno > 0) { + nmaps = 1; + /* + * Look for extents in the file. We can skip the refcount + * check on holes, delalloc, and unwritten extents; they can't + * be reflinked. + */ + error = xfs_bmapi_read(ip, fbno, end - fbno, map, &nmaps, 0); + if (error) + goto out_unlock; + if (nmaps == 0) + break; + if (map[0].br_startblock == HOLESTARTBLOCK || + map[0].br_startblock == DELAYSTARTBLOCK || + ISUNWRITTEN(&map[0])) + goto next; + + map[1] = map[0]; + while (map[1].br_blockcount) { + agno = XFS_FSB_TO_AGNO(mp, map[1].br_startblock); + agbno = XFS_FSB_TO_AGBNO(mp, map[1].br_startblock); + CHECK_AG_NUMBER(mp, agno); + CHECK_AG_EXTENT(mp, agbno, 1); + + error = xfs_reflink_get_refcount(mp, agno, agbno, + &len, &nr); + if (error) + goto out_unlock; + XFS_WANT_CORRUPTED_GOTO(mp, len != 0, out_unlock); + if (len > map[1].br_blockcount) + len = map[1].br_blockcount; + if (nr > 1) { + error = -EINTR; + goto out_unlock; + } + map[1].br_blockcount -= len; + map[1].br_startblock += len; + } + +next: + fbno = map[0].br_startoff + map[0].br_blockcount; + } + + ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; +out_unlock: + if (error) + trace_xfs_reflink_end_unshare_error(ip, error, _RET_IP_); + return error; +} diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index c60a9bd..aaa26ed 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -51,4 +51,11 @@ extern int xfs_reflink(struct xfs_inode *src, xfs_off_t srcoff, struct xfs_inode *dest, xfs_off_t destoff, xfs_off_t len, unsigned int flags); +extern void xfs_reflink_get_lxflags(struct xfs_inode *ip, unsigned int *flags); +extern int xfs_reflink_check_flag_adjust(struct xfs_inode *ip, + unsigned int *xflags); +extern int xfs_reflink_start_unshare(struct xfs_inode *ip, unsigned int xflags, + struct file *filp); +extern int xfs_reflink_end_unshare(struct xfs_inode *ip, unsigned int xflags); + #endif /* __XFS_REFLINK_H */ From darrick.wong@oracle.com Wed Jul 29 17:35:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1886C29E01 for ; Wed, 29 Jul 2015 17:35:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CC6AA8F8033 for ; Wed, 29 Jul 2015 15:35:35 -0700 (PDT) X-ASG-Debug-ID: 1438209333-04bdf06bd00b420001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id A8o4G8KQ8F0ulSCH (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 29 Jul 2015 15:35:34 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6TMZWj8022486 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 29 Jul 2015 22:35:33 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZWmd012433 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2015 22:35:32 GMT Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6TMZWOU029005; Wed, 29 Jul 2015 22:35:32 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jul 2015 15:35:32 -0700 Subject: [PATCH 24/24] xfs: recognize the reflink feature bit From: "Darrick J. Wong" X-ASG-Orig-Subj: [PATCH 24/24] xfs: recognize the reflink feature bit To: david@fromorbit.com, darrick.wong@oracle.com Cc: xfs@oss.sgi.com Date: Wed, 29 Jul 2015 15:35:31 -0700 Message-ID: <20150729223531.17414.5151.stgit@birch.djwong.org> In-Reply-To: <20150729223258.17414.91354.stgit@birch.djwong.org> References: <20150729223258.17414.91354.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Source-IP: userv0021.oracle.com [156.151.31.71] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438209334 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21200 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Add the reflink feature flag to the set of recognized feature flags. This enables users to write to reflink filesystems. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_format.h | 3 ++- fs/xfs/libxfs/xfs_sb.c | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index ec14477..c289c2e 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -449,7 +449,8 @@ xfs_sb_has_compat_feature( #define XFS_SB_FEAT_RO_COMPAT_REFLINK (1 << 2) /* reflinked files */ #define XFS_SB_FEAT_RO_COMPAT_ALL \ (XFS_SB_FEAT_RO_COMPAT_FINOBT | \ - XFS_SB_FEAT_RO_COMPAT_RMAPBT) + XFS_SB_FEAT_RO_COMPAT_RMAPBT | \ + XFS_SB_FEAT_RO_COMPAT_REFLINK) #define XFS_SB_FEAT_RO_COMPAT_UNKNOWN ~XFS_SB_FEAT_RO_COMPAT_ALL static inline bool xfs_sb_has_ro_compat_feature( diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index a7dcbe0..f74287e 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -219,6 +219,16 @@ xfs_mount_validate_sb( "EXPERIMENTAL reverse mapping btree feature enabled. Use at your own risk!"); } + if (xfs_sb_version_hasreflink(sbp)) { + xfs_alert(mp, +"EXPERIMENTAL reflink feature enabled. Use at your own risk!"); + if (xfs_sb_version_hasrmapbt(sbp)) { + printk(KERN_ERR +"EXPERIMENTAL reverse mapping btree conflicts with reflink! Mount fails."); + return -EINVAL; + } + } + /* * More sanity checking. Most of these were stolen directly from * xfs_repair. From david@fromorbit.com Wed Jul 29 19:35:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 974807F66 for ; Wed, 29 Jul 2015 19:35:24 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 84E0F304043 for ; Wed, 29 Jul 2015 17:35:21 -0700 (PDT) X-ASG-Debug-ID: 1438216515-04cb6c673e53760001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id jNVEwHQXJhVQvr62 for ; Wed, 29 Jul 2015 17:35:16 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CSCgC9cLlVPG0mLHlbgxqBPYJVg3yiKQEBAQEBAQaafgICAQECgVdNAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDGAklDwUlAwcaE4gtzywBAQgCAR8ZhgaFL4UHB4QsBZRyjEKZMoEKgyssMYJMAQEB Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 10:04:27 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKbnn-0006lT-4f; Thu, 30 Jul 2015 10:34:27 +1000 Date: Thu, 30 Jul 2015 10:34:27 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 03/24] xfs: add refcount btree stats infrastructure Message-ID: <20150730003427.GG16638@dastard> X-ASG-Orig-Subj: Re: [PATCH 03/24] xfs: add refcount btree stats infrastructure References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223318.17414.21535.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150729223318.17414.21535.stgit@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438216515 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21203 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 29, 2015 at 03:33:18PM -0700, Darrick J. Wong wrote: > The refcount btree presents the same stats as the other btrees, so > add all the code for that now. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_btree.h | 4 ++-- > fs/xfs/xfs_stats.c | 1 + > fs/xfs/xfs_stats.h | 18 +++++++++++++++++- > 3 files changed, 20 insertions(+), 3 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > index 8d9fffe..b747c86 100644 > --- a/fs/xfs/libxfs/xfs_btree.h > +++ b/fs/xfs/libxfs/xfs_btree.h > @@ -99,7 +99,7 @@ do { \ > case XFS_BTNUM_INO: __XFS_BTREE_STATS_INC(ibt, stat); break; \ > case XFS_BTNUM_FINO: __XFS_BTREE_STATS_INC(fibt, stat); break; \ > case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_INC(rmap, stat); break; \ > - case XFS_BTNUM_REFC: break; \ > + case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(refcbt, stat); break; \ > case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \ > } \ > } while (0) > @@ -115,7 +115,7 @@ do { \ > case XFS_BTNUM_INO: __XFS_BTREE_STATS_ADD(ibt, stat, val); break; \ > case XFS_BTNUM_FINO: __XFS_BTREE_STATS_ADD(fibt, stat, val); break; \ > case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_ADD(rmap, stat, val); break; \ > - case XFS_BTNUM_REFC: break; \ > + case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(refcbt, stat); break; \ __XFS_BTREE_STATS_ADD() Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 29 19:35:42 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 133E57F7B for ; Wed, 29 Jul 2015 19:35:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E75118F804C for ; Wed, 29 Jul 2015 17:35:41 -0700 (PDT) X-ASG-Debug-ID: 1438216539-04cbb0416e8b080001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id kQE7cRPOKRoDSxy0 for ; Wed, 29 Jul 2015 17:35:40 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CSCgC9cLlVPG0mLHlbgxqBPYJVg3yiKQEBAQEBAQaafgICAQECgVdNAQEBAQEBBwEBAQFBP4QkAQEEOhwjEAgDGAklDwUlAwcaE4gtzywBAQgCIBmGBoUvhQcHhCwFkXGDAYxCmTKBCoMrLDGCTAEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 10:05:18 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKbob-0006lf-Vr; Thu, 30 Jul 2015 10:35:18 +1000 Date: Thu, 30 Jul 2015 10:35:17 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/24] xfs: refcount btree add more reserved blocks Message-ID: <20150730003517.GH16638@dastard> X-ASG-Orig-Subj: Re: [PATCH 04/24] xfs: refcount btree add more reserved blocks References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223324.17414.85659.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150729223324.17414.85659.stgit@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438216539 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21203 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 29, 2015 at 03:33:24PM -0700, Darrick J. Wong wrote: > Since XFS reserves a small amount of space in each AG as the minimum > free space needed for an operation, save some more space in case we > touch the refcount btree. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_alloc.c | 13 +++++++++++++ > fs/xfs/libxfs/xfs_format.h | 2 ++ > 2 files changed, 15 insertions(+) > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index 40e8129..cb6b3d9 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -50,10 +50,23 @@ STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *); > STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *, > xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *); > > +unsigned int > +XFS_REFC_BLOCK( No need to shout for functions. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 29 19:42:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9E6317F83 for ; Wed, 29 Jul 2015 19:42:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7B763304032 for ; Wed, 29 Jul 2015 17:42:19 -0700 (PDT) X-ASG-Debug-ID: 1438216936-04cbb0416c8b1e0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 3DHzDfnEN75lRRXE for ; Wed, 29 Jul 2015 17:42:17 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CSCgDIcblVPG0mLHlbgxqBPYJVg3yiKwEBAQEBAQaafgICAQECgVdNAQEBAQEBBwEBAQFBP4QkAQEEJxMcIxAIAxgJJQ8FJQMHGhOILc8sAQEIAgEfGYYGhS+FBweELAWRcYMBjEKBR4czkDiBCoMrLDGCTAEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 10:12:16 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKbvL-0006nt-Cw; Thu, 30 Jul 2015 10:42:15 +1000 Date: Thu, 30 Jul 2015 10:42:15 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 05/24] xfs: define the on-disk refcount btree format Message-ID: <20150730004215.GI16638@dastard> X-ASG-Orig-Subj: Re: [PATCH 05/24] xfs: define the on-disk refcount btree format References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223330.17414.82692.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150729223330.17414.82692.stgit@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438216936 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21203 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 29, 2015 at 03:33:30PM -0700, Darrick J. Wong wrote: > Start constructing the refcount btree implementation by establishing > the on-disk format and everything needed to read, write, and > manipulate the refcount btree blocks. > > Signed-off-by: Darrick J. Wong .... > +STATIC bool > +xfs_refcountbt_verify( > + struct xfs_buf *bp) feel free to shorten that prefix to xfs_refcbt_..... > +{ > + struct xfs_mount *mp = bp->b_target->bt_mount; > + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); > + struct xfs_perag *pag = bp->b_pag; > + unsigned int level; > + > + if (block->bb_magic != cpu_to_be32(XFS_REFC_CRC_MAGIC)) > + return false; > + > + if (!xfs_sb_version_hasreflink(&mp->m_sb)) > + return false; > + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) > + return false; > + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) > + return false; > + if (pag && > + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) > + return false; > + > + level = be16_to_cpu(block->bb_level); > + if (pag && pag->pagf_init) { > + if (level >= pag->pagf_refcount_level) > + return false; > + } else if (level >= mp->m_ag_maxlevels) > + return false; > + > + /* numrecs verification */ > + if (be16_to_cpu(block->bb_numrecs) > mp->m_refc_mxr[level != 0]) > + return false; > + > + /* sibling pointer verification */ > + if (!block->bb_u.s.bb_leftsib || > + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && > + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) > + return false; > + if (!block->bb_u.s.bb_rightsib || > + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && > + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) > + return false; I'm starting to think there's a xfs_btree_sblock_verify() function we need to factor out of all these btree verification functions... > +#ifndef __XFS_REFCOUNT_BTREE_H__ > +#define __XFS_REFCOUNT_BTREE_H__ > + > +/* > + * Freespace on-disk structures > + */ > + > +struct xfs_buf; > +struct xfs_btree_cur; > +struct xfs_mount; > + > +/* > + * Btree block header size depends on a superblock flag. > + */ > +#define XFS_REFCOUNT_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN Comment is stale. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 29 19:52:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 099E67F8C for ; Wed, 29 Jul 2015 19:52:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A2901AC005 for ; Wed, 29 Jul 2015 17:51:57 -0700 (PDT) X-ASG-Debug-ID: 1438217515-04bdf06bcf0d870001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Jf1bRfW5vynYPFnN for ; Wed, 29 Jul 2015 17:51:55 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2ArCgBYdLlVPG0mLHlbgxqBPYJVg3yiKwEBAQEBAQaafgQCAoFXTQEBAQEBAQcBAQEBQT+EJAEBBCcTHCMQCAMYCSUPBSUDBxoTiC3PLgEBCAIgGYYGhS+FBweELAWRcYMBjEKZMoEKgyssMYJMAQEB Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 10:21:54 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKc4g-0006ok-3f; Thu, 30 Jul 2015 10:51:54 +1000 Date: Thu, 30 Jul 2015 10:51:54 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 07/24] xfs: add refcount btree operations Message-ID: <20150730005154.GJ16638@dastard> X-ASG-Orig-Subj: Re: [PATCH 07/24] xfs: add refcount btree operations References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223343.17414.27263.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150729223343.17414.27263.stgit@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438217515 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21204 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 29, 2015 at 03:33:43PM -0700, Darrick J. Wong wrote: > Implement the generic btree operations required to manipulate refcount > btree blocks. The implementation is similar to the bmapbt, though it > will only allocate and free blocks from the AG. .... > + > +/* > + * Remove the record referred to by cur, then set the pointer to the spot > + * where the record could be re-inserted, in case we want to increment or > + * decrement the cursor. > + * This either works (return 0) or gets an EFSCORRUPTED error. > + */ > +STATIC int > +xfs_refcountbt_delete( > + struct xfs_btree_cur *cur, > + int *i) > +{ > + struct xfs_refcount_irec irec; > + int found_rec; > + int error; > + > + error = xfs_refcountbt_get_rec(cur, &irec, &found_rec); > + if (error) > + return error; > + XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error); > + trace_xfs_refcountbt_delete(cur->bc_mp, cur->bc_private.a.agno, &irec); > + error = xfs_btree_delete(cur, i); > + if (error) > + return error; Need another XFS_WANT_CORRUPTED_GOTO() here, too. > + */ > +#ifndef __XFS_REFCOUNT_H__ > +#define __XFS_REFCOUNT_H__ whitespace. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 29 20:05:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D951A7F90 for ; Wed, 29 Jul 2015 20:05:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id A8D14304032 for ; Wed, 29 Jul 2015 18:05:40 -0700 (PDT) X-ASG-Debug-ID: 1438218338-04bdf06bd20dc40001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 4qyxpqfrVGNqOGws for ; Wed, 29 Jul 2015 18:05:38 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CSCgDhd7lVPG0mLHlbgxqBPYJVg3yiKwEBAQEBAQaafgICAQECgVhNAQEBAQEBBwEBAQFBP4QkAQEEJxMcIxAIAxgJJQ8FJQMHGhOILc8rAQEBBwIBHxmGBoUvhQcHhCwBBJRyjEKZMoEKgyssMYJMAQEB Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 10:34:43 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKcGf-0006qV-5n; Thu, 30 Jul 2015 11:04:17 +1000 Date: Thu, 30 Jul 2015 11:04:17 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [PATCH 11/24] xfs: map an inode's offset to an exact physical block Message-ID: <20150730010417.GK16638@dastard> X-ASG-Orig-Subj: Re: [PATCH 11/24] xfs: map an inode's offset to an exact physical block References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223409.17414.33569.stgit@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150729223409.17414.33569.stgit@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438218338 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21204 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Jul 29, 2015 at 03:34:09PM -0700, Darrick J. Wong wrote: > Teach the bmap routine to know how to map a range of file blocks to a > specific range of physical blocks, instead of simply allocating fresh > blocks. This enables reflink to map a file to blocks that are already > in use. > > Signed-off-by: Darrick J. Wong > --- > fs/xfs/libxfs/xfs_bmap.c | 21 +++++++++++++++++++++ > fs/xfs/libxfs/xfs_bmap.h | 3 +++ > 2 files changed, 24 insertions(+) > > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index dfdd9e6..1297b94 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -3897,6 +3897,15 @@ STATIC int > xfs_bmap_alloc( > struct xfs_bmalloca *ap) /* bmap alloc argument struct */ > { > + if (ap->flags & XFS_BMAPI_EXACT) { > + trace_xfs_reflink_relink_blocks(ap->ip, *ap->firstblock, > + ap->length); > + ap->blkno = *ap->firstblock; > + ap->ip->i_d.di_nblocks += ap->length; > + xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); > + return 0; > + } XFS_BMAPI_EXACT is confusing to me - "exact" already means something in the xfs_bmapi API w.r.t. the XFS_BMAPI_ENTIRE flag. That is, if XFS_BMAPI_ENTIRE is not set, we want the map returned to span only the /exact range requested/. If XFS_BMAPI_ENTIRE is set, we want the entire extent that overlaps the range requested... So I think this might be better named to match it's intended function. e.g. remap, reuse, ref_only, etc. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jul 29 20:36:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C7BC47F91 for ; Wed, 29 Jul 2015 20:36:35 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 97FE58F804C for ; Wed, 29 Jul 2015 18:36:32 -0700 (PDT) X-ASG-Debug-ID: 1438220188-04bdf06bd10e380001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id EGLVcjvoEXxmUw7r for ; Wed, 29 Jul 2015 18:36:28 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DRCgAFf7lVPG0mLHlbgxojMWmCVaYbDAEBAQEBAQaVAQqFcwSBXE0BAQEBAQEHAQEBAUE/hQAYIyQ0BSUDBy2ILQ6pPaYKGYYGiBuCOYIXDEGBMQWRcYMBhHqHSI1/izOBCnKCOSwxAQEBAYJIAQEB Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 30 Jul 2015 11:06:27 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKclm-0006tg-Up for xfs@oss.sgi.com; Thu, 30 Jul 2015 11:36:27 +1000 Date: Thu, 30 Jul 2015 11:36:26 +1000 From: Dave Chinner To: xfs@oss.sgi.com Subject: [ANNOUNCE] xfsprogs: v3.2.4 released Message-ID: <20150730013626.GL16638@dastard> X-ASG-Orig-Subj: [ANNOUNCE] xfsprogs: v3.2.4 released MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="qlTNgmc+xy1dBmNv" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438220188 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=INFO_TLD X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21204 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain --qlTNgmc+xy1dBmNv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi All. xfsprogs v3.2.4 has just been released. This release contains only changes to xfs_metadump to address the information leaks disclosed in CVE-2012-2150 here: https://marc.info/?l=3Doss-security&m=3D143766249112576&w=3D2 Many thanks go to Eric Sandeen for doing all the work to address these issues, and to Brian Foster, Christoph Hellwig and Darrick Wong for reviewing the changes. The source code can be accessed via git using either of these URLs: git://oss.sgi.com/xfs/cmds/xfsprogs.git git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git and the release is tagged with the "v3.2.4" tag to make it easy to check out the exact source used for the release. A signed gzipped-tar archive of the source code is available here: ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-3.2.4.tar.gz ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-3.2.4.tar.gz.sign The archive is signed with my gpg key (the same one that this release announcement is signed with). Problems, issues, questions and general discussion about the release should be directed to the XFS mailing list (xfs@oss.sgi.com). -Dave. The new head of the master branch is commit: 4a2f31a xfsprogs: Release v3.2.4 New Commits: Dave Chinner (1): [4a2f31a] xfsprogs: Release v3.2.4 Eric Sandeen (19): [7ac353a] libxlog: add xlog_is_empty() helper [ffc56f1] metadump: rename dont_obfuscate variable [190df61] metadump: zero out clean log [37a7818] xfs_metadump: don't zero log if not obfuscating [80917c1] xfs_metadump: obfuscate remote symlinks on CRC filesystems [8085336] metadump: obfuscate attrs on CRC fs [1941482] metadump: Fill attribute values with 'v' rather than NUL [8927d44] metadump: Obfuscate the filesystem label [aad766a] metadump: handle multi-block directories [b09e839] metadump: Add option to copy metadata blocks intact [75333d2] metadump: Copy the log if not obfuscating or zeroing [18cdb61] metadump: Zero out unused portion of the AGFL [27499a0] metadump: Zero literal area of unused inodes [87c955c] metadump: Zero unused portions of inode literal area [6d34e8b] metadump: Zero sparse/unused regions of dir2 [23b2ae2] metadump: Zero unused tail of symlink blocks [70099c8] metadump: Zero unused portions of attribute blocks [c83c169] metadump: Zero unused portions of DA_NODE blocks [20f35ef] metadump: Zero unused portions of inode, BMAP, and allocati= on btree blocks Code Diffstat: VERSION | 2 +- db/metadump.c | 475 +++++++++++++++++++++++++++++++++++++++++---= ---- db/sb.c | 25 +-- db/type.c | 3 + db/type.h | 2 +- db/xfs_metadump.sh | 5 +- debian/changelog | 7 + doc/CHANGES | 3 + include/libxlog.h | 2 + libxlog/util.c | 56 ++++++ man/man8/xfs_metadump.8 | 10 +- 11 files changed, 499 insertions(+), 91 deletions(-) --=20 Dave Chinner david@fromorbit.com --qlTNgmc+xy1dBmNv Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBAgAGBQJVuX+aAAoJEK3oKUf0dfodnNMQAJQ1dLZI8YXokvbNH892dCbA zmELTKlpwN/FBjeX1o8NOmptef/ErN+7IbumB2xW8WalLdtTTy2+wLkz1iU9d/lJ O2rgC9juzEOGVM3Z1fhVk4pWK47x9VGvkuHOXeR2z3kVn1fdVwsT++6xn3qmC9UC b/FYcax4eoRZZ+Dk6N37DxMozlIQ9rGe2KpbI07TVwte04w5P00Ugc4J4Xch0xQg l9gIUwDhZZNjWflmrzx9RpeZ1pKVh3my2zkpU6boIqt5ZFOHNQa14+Jn2JmpeGxQ S1wNROf4lDyN05eVE85lb2Fq0iIzjhhVyLIr5Q7o12ugYW+Q9r7tg4QH80YPQE6s gtydzsNQg9e1XYVCMmfivCkqzCe6kNeXjC4TCo+zrNcUfBosZ65J9HxHSQyOuYIS TCj1A0ovrlnpAeT/q6dj0dhWXAW8a+ng1jOkj6tbIJVCBTa1yxZXK/4IKPhh8+pE FZwu3+tz8pX9x0bzBU0ErvWyF6nKeoaMPT9Q5klpPhaiyyXPbp8OFEeiA9ZPD0ir RtHNuYRL1V9Suhk6IsPZhaIYd49PXQg5Q4RbCfx4BD9H2Es/T1xaczz5wE03okA3 NQFd1sT7iR6/F6sT1CPhfar3Tv1M72ten1TzKbHApCnMfpyeg3b4q5D7FPsOueX2 CES1I5mM5jF47wUNMM6S =e5Ja -----END PGP SIGNATURE----- --qlTNgmc+xy1dBmNv-- From admin@luckyscent.com Wed Jul 29 22:25:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 4E4697F85 for ; Wed, 29 Jul 2015 22:25:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1B0038F8033 for ; Wed, 29 Jul 2015 20:25:48 -0700 (PDT) X-ASG-Debug-ID: 1438226744-04bdf06bcf1c5d0001-NocioJ Received: from s18455056.onlinehome-server.info ([217.160.166.78]) by cuda.sgi.com with ESMTP id cDkWbdmb04egT2PY for ; Wed, 29 Jul 2015 20:25:45 -0700 (PDT) X-Barracuda-Envelope-From: admin@luckyscent.com X-Barracuda-Apparent-Source-IP: 217.160.166.78 Received: from computer1 ([192.168.73.84]) by s18455056.onlinehome-server.info (Merak 8.0.3) with SMTP id UNXFCPUJ From: "luckyscent.com" To: "xfs" Subject:=?utf-8?B?IENvbmZpcm1hdGlvbiBkZSB2b3RyZSBjb21tYW5kZSBudW3DqXJvIDQ1NzgyMjQ=?= Message-ID: <7271103a61271c47a14c38a90e94fda2@s18455056> X-ASG-Orig-Subj: =?utf-8?B?IENvbmZpcm1hdGlvbiBkZSB2b3RyZSBjb21tYW5kZSBudW3DqXJvIDQ1NzgyMjQ=?= Date: Thu, 30 Jul 2015 05:25:44 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0001_8E9E539D.8927724C" X-Priority: 3 X-Mailer: Microsoft Office Outlook 12.0 X-Barracuda-Connect: UNKNOWN[217.160.166.78] X-Barracuda-Start-Time: 1438226744 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21206 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS This is a multi-part message in MIME format. ------=_NextPart_000_0001_8E9E539D.8927724C Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable ************************************************************=0A* = Votre commande est accept=C3=A9e=0A***********************************= *************************=0A=0AVeuillez conserver ce re=C3=A7u = pour votre r=C3=A9f=C3=A9rence=0A=0ACe courriel confirme la = commande que vous avez pass=C3=A9e aupr=C3=A8s de Prepaid Company.=0A=0A= Veuillez trouver en pi=C3=A8ce jointe votre facture de r=C3=A9f=C3=A9r= ence: F408185 au format ZIP=0A-------------------=0ADonn=C3=A9es = du paiement=0A-------------------=0A=0AM=C3=A9thode de paiement = : VISA XXXXXXXXXXXX5885=0AMarque secondaire : e-Carte Bleue=0A=0ABenef= iciary : Prepaid Company=0ABE-1180 Bruxelles=0A=0A ------=_NextPart_000_0001_8E9E539D.8927724C Content-Type: WinRAR.ZIP; name="258741369.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="258741369.zip" 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 EW7K0AFQSwUGAAAAAAEAAQBfAAAAxwgAAAAA ------=_NextPart_000_0001_8E9E539D.8927724C-- From debbugs@buxtehude.debian.org Thu Jul 30 00:03:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5F39D7F8C for ; Thu, 30 Jul 2015 00:03:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id CE249AC00B for ; Wed, 29 Jul 2015 22:03:25 -0700 (PDT) X-ASG-Debug-ID: 1438232592-04cb6c673f76800001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 5xLX5DSlfYT9Ov9d (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Wed, 29 Jul 2015 22:03:15 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZKfzq-0007dZ-9x; Thu, 30 Jul 2015 05:03:10 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793495: CVE-2012-2150 xfsprogs: xfs_metadump information disclosure Reply-To: Salvatore Bonaccorso , 793495@bugs.debian.org X-ASG-Orig-Subj: Bug#793495: CVE-2012-2150 xfsprogs: xfs_metadump information disclosure Resent-From: Salvatore Bonaccorso Original-Sender: Salvatore Bonaccorso Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Thu, 30 Jul 2015 05:03:08 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 793495 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: security X-Debian-PR-Source: xfsprogs Received: via spool by 793495-submit@bugs.debian.org id=B793495.143823235927834 (code B ref 793495); Thu, 30 Jul 2015 05:03:08 +0000 Received: (at 793495) by bugs.debian.org; 30 Jul 2015 04:59:19 +0000 Received: from mail-wi0-f180.google.com ([209.85.212.180]) by buxtehude.debian.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84) (envelope-from ) id 1ZKfw6-0007EW-B7 for 793495@bugs.debian.org; Thu, 30 Jul 2015 04:59:19 +0000 Received: by wicmv11 with SMTP id mv11so5816606wic.0 for <793495@bugs.debian.org>; Wed, 29 Jul 2015 21:59:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=+nxSe4slEmmKRvsHEBCLEEZ5tD2RBfQGmpoi0Toi/5I=; b=zUMAn+v+i8ySNcp21J8IXXaaCUAi9ZFSfIEqQrMEdyN5bjI6FHlfftQtskQcnoEVm8 fajP0bOrLIeAlKkKD2ktKTMcNEFb/uMCYeusZvLUKUFkR/GhBvj+zwFjSQTGjakoaWZ1 JzX6hoFHftMe9rlfb9Kj97OVYbmtoTgreqBRDJQPyczpR9QUA0hrc/A4r5QPgdpjad6J XMiJlCwATCu8Z8Zutb1Y+dxtBYtM9L0YpQxKp0bpnS41QtSV+C3F142RQ2I23MBgAAgx gwUHQqBo62DzGurI//YnoGQeIApz+1a2CSqwQKTcasMhL40INT/VpQ13yzswrcrwnEYd Azaw== X-Received: by 10.180.103.69 with SMTP id fu5mr2132034wib.95.1438232351703; Wed, 29 Jul 2015 21:59:11 -0700 (PDT) Received: from lorien (lorien.valinor.li. [2a01:4f8:192:61d5::2]) by smtp.gmail.com with ESMTPSA id bg6sm41913084wjc.13.2015.07.29.21.59.10 for <793495@bugs.debian.org> (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 29 Jul 2015 21:59:10 -0700 (PDT) Sender: Salvatore Bonaccorso Date: Thu, 30 Jul 2015 06:59:10 +0200 From: Salvatore Bonaccorso To: 793495@bugs.debian.org Message-ID: <20150730045910.GA16401@elende.valinor.li> References: <20150724154157.15119.52609.reportbug@pisco.westfalen.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150724154157.15119.52609.reportbug@pisco.westfalen.local> User-Agent: Mutt/1.5.23 (2014-03-12) X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1438232595 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21207 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Control: tags -1 + upstream fixed-upstream Hi, On Fri, Jul 24, 2015 at 05:41:57PM +0200, Moritz Muehlenhoff wrote: > Package: xfsprogs > Version: 3.2.3 > Severity: important > Tags: security > > Please see http://seclists.org/oss-sec/2015/q3/181 > for details. A new upstream version addressing CVE-2012-2150 has been released: http://oss.sgi.com/pipermail/xfs/2015-July/042726.html Regards, Salvatore From debbugs@buxtehude.debian.org Thu Jul 30 00:03:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1201B29DF5 for ; Thu, 30 Jul 2015 00:03:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E1C8F8F8033 for ; Wed, 29 Jul 2015 22:03:25 -0700 (PDT) X-ASG-Debug-ID: 1438232594-04bdf06bcf30210001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id R9oiHvpTpK1Xa9Wj (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Wed, 29 Jul 2015 22:03:15 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZKfzs-0007do-9k; Thu, 30 Jul 2015 05:03:12 +0000 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 From: owner@bugs.debian.org (Debian Bug Tracking System) To: Salvatore Bonaccorso CC: xfs@oss.sgi.com Subject: Processed: Re: Bug#793495: CVE-2012-2150 xfsprogs: xfs_metadump information disclosure Message-ID: X-ASG-Orig-Subj: Processed: Re: Bug#793495: CVE-2012-2150 xfsprogs: xfs_metadump information disclosure References: <20150730045910.GA16401@elende.valinor.li> <20150724154157.15119.52609.reportbug@pisco.westfalen.local> X-Debian-PR-Package: xfsprogs X-Debian-PR-Source: xfsprogs X-Debian-PR-Message: transcript X-Loop: owner@bugs.debian.org Date: Thu, 30 Jul 2015 05:03:12 +0000 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1438232595 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21208 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Processing control commands: > tags -1 + upstream fixed-upstream Bug #793495 [xfsprogs] CVE-2012-2150 xfsprogs: xfs_metadump information dis= closure Bug #793496 [xfsprogs] xfsprogs: CVE-2012-2150: xfs_metadump information di= sclosure flaw Added tag(s) fixed-upstream and upstream. Added tag(s) fixed-upstream and upstream. --=20 793495: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793495 793496: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793496 Debian Bug Tracking System Contact owner@bugs.debian.org with problems From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:07:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6593D7F7C for ; Thu, 30 Jul 2015 12:07:39 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0C12DAC002 for ; Thu, 30 Jul 2015 10:07:35 -0700 (PDT) X-ASG-Debug-ID: 1438276054-04bdf06bcf74250001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 9yH2B8JGEE3EePGx (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:07:34 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrIs-00085l-JQ; Thu, 30 Jul 2015 17:07:34 +0000 Date: Thu, 30 Jul 2015 10:07:34 -0700 From: Christoph Hellwig To: Theodore Ts'o Cc: xfs@oss.sgi.com, fstests@vger.kernel.org Subject: Re: [PATCH 1/6] xfsprogs: define NBBY if not defined by the system header files Message-ID: <20150730170734.GA25395@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 1/6] xfsprogs: define NBBY if not defined by the system header files References: <1437913255-7524-1-git-send-email-tytso@mit.edu> <1437913255-7524-2-git-send-email-tytso@mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437913255-7524-2-git-send-email-tytso@mit.edu> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276054 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Sun, Jul 26, 2015 at 08:20:50AM -0400, Theodore Ts'o wrote: > Android's bionic libc doesn't define NBBY; this isn't a standard > define, and since all modern/sane platforms have 8 bits per byte, use > this as a default. > > Signed-off-by: Theodore Ts'o This looks fine, but it'll clash with my patch that changes platform_defs.h so that it's not run through autoconfs m4 anymore. Otherwise: Reviewed-by: Christoph Hellwig From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:10:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8B6B17F7C for ; Thu, 30 Jul 2015 12:10:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 69A278F8033 for ; Thu, 30 Jul 2015 10:10:01 -0700 (PDT) X-ASG-Debug-ID: 1438276198-04bdf06bcf74360001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 0aPWiklUUZCNZt8H (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:09:59 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrLC-0001vr-VL; Thu, 30 Jul 2015 17:09:58 +0000 Date: Thu, 30 Jul 2015 10:09:58 -0700 From: Christoph Hellwig To: Theodore Ts'o Cc: xfs@oss.sgi.com, fstests@vger.kernel.org Subject: Re: [PATCH 5/6] xfsprogs: use "unsigned short" instead of ushort Message-ID: <20150730170958.GB25395@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 5/6] xfsprogs: use "unsigned short" instead of ushort References: <1437913255-7524-1-git-send-email-tytso@mit.edu> <1437913255-7524-6-git-send-email-tytso@mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437913255-7524-6-git-send-email-tytso@mit.edu> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276199 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Sun, Jul 26, 2015 at 08:20:54AM -0400, Theodore Ts'o wrote: > Android's bionic libc doesn't define ushort. There isn't a real > benefit (other than perhaps conciseness) to use ushort over "unsigned > short", and it's only used in a handful of files in xfsprogs. So > change over to using unsigned short everywhere. For the files shared with the kernel this should go into the kernel first or at least at the same time. Can you also send a kernel patch to remove all uses of ushort under fs/xfs? Otherwise looks fine: Reviewed-by: Christoph Hellwig From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:10:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 98A3F7F7C for ; Thu, 30 Jul 2015 12:10:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 77BE5304043 for ; Thu, 30 Jul 2015 10:10:22 -0700 (PDT) X-ASG-Debug-ID: 1438276220-04bdf06bd274390001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id TTACpYYhCLkasMQp (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:10:21 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrLY-0003Bk-TW; Thu, 30 Jul 2015 17:10:20 +0000 Date: Thu, 30 Jul 2015 10:10:20 -0700 From: Christoph Hellwig To: Theodore Ts'o Cc: xfs@oss.sgi.com, fstests@vger.kernel.org Subject: Re: [PATCH 6/6] xfsprogs: add missing include of Message-ID: <20150730171020.GC25395@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 6/6] xfsprogs: add missing include of References: <1437913255-7524-1-git-send-email-tytso@mit.edu> <1437913255-7524-7-git-send-email-tytso@mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437913255-7524-7-git-send-email-tytso@mit.edu> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276221 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS This looks fine, but hopefull this file will be gone for the next major release anyway. From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:10:46 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2EFE27F7C for ; Thu, 30 Jul 2015 12:10:46 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1D1D7304039 for ; Thu, 30 Jul 2015 10:10:46 -0700 (PDT) X-ASG-Debug-ID: 1438276243-04cbb0416da1fd0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id HsIgfpKCWiDLlVyy (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:10:43 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrLv-0003ml-EY; Thu, 30 Jul 2015 17:10:43 +0000 Date: Thu, 30 Jul 2015 10:10:43 -0700 From: Christoph Hellwig To: Theodore Ts'o Cc: xfs@oss.sgi.com, fstests@vger.kernel.org Subject: Re: [PATCH 3/6] xfsprogs: define and use BUILD_CC in configure.ac for cross compilation Message-ID: <20150730171043.GD25395@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 3/6] xfsprogs: define and use BUILD_CC in configure.ac for cross compilation References: <1437913255-7524-1-git-send-email-tytso@mit.edu> <1437913255-7524-4-git-send-email-tytso@mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437913255-7524-4-git-send-email-tytso@mit.edu> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276243 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks fine, Reviewed-by: Christoph Hellwig From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:11:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1A07B7F7C for ; Thu, 30 Jul 2015 12:11:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id ED04A304039 for ; Thu, 30 Jul 2015 10:11:03 -0700 (PDT) X-ASG-Debug-ID: 1438276262-04bdf06bcf743d0001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id pMikOPULVwqWJNs1 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:11:02 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrME-00045D-E6; Thu, 30 Jul 2015 17:11:02 +0000 Date: Thu, 30 Jul 2015 10:11:02 -0700 From: Christoph Hellwig To: Theodore Ts'o Cc: xfs@oss.sgi.com, fstests@vger.kernel.org Subject: Re: [PATCH 2/6] xfsprogs: pull in libgen.h to get prototype for basename() Message-ID: <20150730171102.GE25395@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 2/6] xfsprogs: pull in libgen.h to get prototype for basename() References: <1437913255-7524-1-git-send-email-tytso@mit.edu> <1437913255-7524-3-git-send-email-tytso@mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437913255-7524-3-git-send-email-tytso@mit.edu> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276262 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Looks fine, with the same caveat as the previous patch: Reviewed-by: Christoph Hellwig From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:11:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 899EE7F7C for ; Thu, 30 Jul 2015 12:11:29 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 32CA0AC003 for ; Thu, 30 Jul 2015 10:11:29 -0700 (PDT) X-ASG-Debug-ID: 1438276288-04bdf06bd274450001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id v2F9A8FHkV4mIz2X (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:11:28 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrMe-0004VE-6U; Thu, 30 Jul 2015 17:11:28 +0000 Date: Thu, 30 Jul 2015 10:11:28 -0700 From: Christoph Hellwig To: Theodore Ts'o Cc: xfs@oss.sgi.com, fstests@vger.kernel.org Subject: Re: [PATCH 4/6] xfsprogs: avoid use of si_tid in struct xlog_split_item Message-ID: <20150730171128.GF25395@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 4/6] xfsprogs: avoid use of si_tid in struct xlog_split_item References: <1437913255-7524-1-git-send-email-tytso@mit.edu> <1437913255-7524-5-git-send-email-tytso@mit.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1437913255-7524-5-git-send-email-tytso@mit.edu> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276288 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Sun, Jul 26, 2015 at 08:20:53AM -0400, Theodore Ts'o wrote: > In Android's bionic libc (as well as the Linux kernel's > include/uapi/asm-generic/siginfo.h), si_tid is a #define to provide > backwards compatibility for the timerid in the siginfo structure. > This breaks the compile of logprint/log_misc.c. Change this to be > si_xtid in order to avoid a namespace collision Looks fine, Reviewed-by: Christoph Hellwig From BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 12:21:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 5F4187F6D for ; Thu, 30 Jul 2015 12:21:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3B73C304032 for ; Thu, 30 Jul 2015 10:21:04 -0700 (PDT) X-ASG-Debug-ID: 1438276862-04bdf06bcf74800001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id 8kmTTa4fFJVfMA9y (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 10:21:02 -0700 (PDT) X-Barracuda-Envelope-From: BATV+9385ff0ff74c969cd8fb+4358+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from hch by bombadil.infradead.org with local (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZKrVt-0006ld-64; Thu, 30 Jul 2015 17:21:01 +0000 Date: Thu, 30 Jul 2015 10:21:01 -0700 From: Christoph Hellwig To: Brian Foster Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() Message-ID: <20150730172101.GA31255@infradead.org> X-ASG-Orig-Subj: Re: [PATCH RFC 1/2] xfs: return committed status from xfs_trans_roll() References: <1437682410-51778-3-git-send-email-bfoster@redhat.com> <1437682410-51778-2-git-send-email-bfoster@redhat.com> <20150728004009.GB24249@dastard> <20150728134006.GD38784@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150728134006.GD38784@bfoster.bfoster> User-Agent: Mutt/1.5.23 (2014-03-12) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1438276862 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS On Tue, Jul 28, 2015 at 09:40:06AM -0400, Brian Foster wrote: > > Hmmm - something I just noticed: if we only have one EFD per EFI, > > why do we do we have that layer of extent counting before dropping > > real references? > > > > I wondered this myself, but hadn't made it deep enough to see if we used > the reference count elsewhere. Because the elders (no pun on Alex, sorry :)) didn't realize we a) don't even ever look at at the logged extents in EFD b) have a 1:1 relationship between EFIs and EFDs I tried to sort some of that out about a year ago, but I didn't manage to get far. have just one. Note that not having to log these From darrick.wong@oracle.com Thu Jul 30 14:04:12 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 97CFC7F7C for ; Thu, 30 Jul 2015 14:04:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 819EE8F8033 for ; Thu, 30 Jul 2015 12:04:12 -0700 (PDT) X-ASG-Debug-ID: 1438283050-04cbb0416da49c0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id sNVu7C7BPowK7gjD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 30 Jul 2015 12:04:10 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6UJ44xS013039 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 Jul 2015 19:04:04 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6UJ44ip022454 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 30 Jul 2015 19:04:04 GMT Received: from abhmp0017.oracle.com (abhmp0017.oracle.com [141.146.116.23]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6UJ44pU025881; Thu, 30 Jul 2015 19:04:04 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 30 Jul 2015 12:04:03 -0700 Date: Thu, 30 Jul 2015 12:04:03 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 03/24] xfs: add refcount btree stats infrastructure Message-ID: <20150730190403.GG10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 03/24] xfs: add refcount btree stats infrastructure References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223318.17414.21535.stgit@birch.djwong.org> <20150730003427.GG16638@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150730003427.GG16638@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438283050 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA081, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21222 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines 1.10 BSF_SC0_SA081 Custom Rule SA081 On Thu, Jul 30, 2015 at 10:34:27AM +1000, Dave Chinner wrote: > On Wed, Jul 29, 2015 at 03:33:18PM -0700, Darrick J. Wong wrote: > > The refcount btree presents the same stats as the other btrees, so > > add all the code for that now. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_btree.h | 4 ++-- > > fs/xfs/xfs_stats.c | 1 + > > fs/xfs/xfs_stats.h | 18 +++++++++++++++++- > > 3 files changed, 20 insertions(+), 3 deletions(-) > > > > > > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > > index 8d9fffe..b747c86 100644 > > --- a/fs/xfs/libxfs/xfs_btree.h > > +++ b/fs/xfs/libxfs/xfs_btree.h > > @@ -99,7 +99,7 @@ do { \ > > case XFS_BTNUM_INO: __XFS_BTREE_STATS_INC(ibt, stat); break; \ > > case XFS_BTNUM_FINO: __XFS_BTREE_STATS_INC(fibt, stat); break; \ > > case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_INC(rmap, stat); break; \ > > - case XFS_BTNUM_REFC: break; \ > > + case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(refcbt, stat); break; \ > > case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break; \ > > } \ > > } while (0) > > @@ -115,7 +115,7 @@ do { \ > > case XFS_BTNUM_INO: __XFS_BTREE_STATS_ADD(ibt, stat, val); break; \ > > case XFS_BTNUM_FINO: __XFS_BTREE_STATS_ADD(fibt, stat, val); break; \ > > case XFS_BTNUM_RMAP: __XFS_BTREE_STATS_ADD(rmap, stat, val); break; \ > > - case XFS_BTNUM_REFC: break; \ > > + case XFS_BTNUM_REFC: __XFS_BTREE_STATS_INC(refcbt, stat); break; \ > > __XFS_BTREE_STATS_ADD() Good catch; fixed. --D > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Thu Jul 30 14:09:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 609807F7C for ; Thu, 30 Jul 2015 14:09:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id EABCFAC001 for ; Thu, 30 Jul 2015 12:09:24 -0700 (PDT) X-ASG-Debug-ID: 1438283354-04bdf06bd277160001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id OtThKQDuFGj6DkSz (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 30 Jul 2015 12:09:14 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6UJ99P7019354 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 Jul 2015 19:09:09 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6UJ98Ak022083 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 30 Jul 2015 19:09:09 GMT Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6UJ985i028191; Thu, 30 Jul 2015 19:09:08 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 30 Jul 2015 12:09:08 -0700 Date: Thu, 30 Jul 2015 12:09:07 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/24] xfs: refcount btree add more reserved blocks Message-ID: <20150730190907.GH10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 04/24] xfs: refcount btree add more reserved blocks References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223324.17414.85659.stgit@birch.djwong.org> <20150730003517.GH16638@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150730003517.GH16638@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: aserv0022.oracle.com [141.146.126.234] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438283354 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21222 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Thu, Jul 30, 2015 at 10:35:17AM +1000, Dave Chinner wrote: > On Wed, Jul 29, 2015 at 03:33:24PM -0700, Darrick J. Wong wrote: > > Since XFS reserves a small amount of space in each AG as the minimum > > free space needed for an operation, save some more space in case we > > touch the refcount btree. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_alloc.c | 13 +++++++++++++ > > fs/xfs/libxfs/xfs_format.h | 2 ++ > > 2 files changed, 15 insertions(+) > > > > > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > > index 40e8129..cb6b3d9 100644 > > --- a/fs/xfs/libxfs/xfs_alloc.c > > +++ b/fs/xfs/libxfs/xfs_alloc.c > > @@ -50,10 +50,23 @@ STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *); > > STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *, > > xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *); > > > > +unsigned int > > +XFS_REFC_BLOCK( > > No need to shout for functions. OK, er, ok. :) --D > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From darrick.wong@oracle.com Thu Jul 30 16:10:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C1DEB7F6C for ; Thu, 30 Jul 2015 16:10:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id AE874304032 for ; Thu, 30 Jul 2015 14:10:34 -0700 (PDT) X-ASG-Debug-ID: 1438290630-04cbb0416cb4450001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id imsgNRqspzITer83 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 30 Jul 2015 14:10:30 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6ULAPae005919 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 Jul 2015 21:10:25 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6ULAOhj027188 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 30 Jul 2015 21:10:24 GMT Received: from abhmp0008.oracle.com (abhmp0008.oracle.com [141.146.116.14]) by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t6UL9whD012632; Thu, 30 Jul 2015 21:10:24 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 30 Jul 2015 14:09:58 -0700 Date: Thu, 30 Jul 2015 14:09:57 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 11/24] xfs: map an inode's offset to an exact physical block Message-ID: <20150730210957.GI10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 11/24] xfs: map an inode's offset to an exact physical block References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223409.17414.33569.stgit@birch.djwong.org> <20150730010417.GK16638@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150730010417.GK16638@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1438290630 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21224 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Thu, Jul 30, 2015 at 11:04:17AM +1000, Dave Chinner wrote: > On Wed, Jul 29, 2015 at 03:34:09PM -0700, Darrick J. Wong wrote: > > Teach the bmap routine to know how to map a range of file blocks to a > > specific range of physical blocks, instead of simply allocating fresh > > blocks. This enables reflink to map a file to blocks that are already > > in use. > > > > Signed-off-by: Darrick J. Wong > > --- > > fs/xfs/libxfs/xfs_bmap.c | 21 +++++++++++++++++++++ > > fs/xfs/libxfs/xfs_bmap.h | 3 +++ > > 2 files changed, 24 insertions(+) > > > > > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > > index dfdd9e6..1297b94 100644 > > --- a/fs/xfs/libxfs/xfs_bmap.c > > +++ b/fs/xfs/libxfs/xfs_bmap.c > > @@ -3897,6 +3897,15 @@ STATIC int > > xfs_bmap_alloc( > > struct xfs_bmalloca *ap) /* bmap alloc argument struct */ > > { > > + if (ap->flags & XFS_BMAPI_EXACT) { > > + trace_xfs_reflink_relink_blocks(ap->ip, *ap->firstblock, > > + ap->length); > > + ap->blkno = *ap->firstblock; > > + ap->ip->i_d.di_nblocks += ap->length; > > + xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); > > + return 0; > > + } > > XFS_BMAPI_EXACT is confusing to me - "exact" already means something > in the xfs_bmapi API w.r.t. the XFS_BMAPI_ENTIRE flag. That is, if > XFS_BMAPI_ENTIRE is not set, we want the map returned to span only > the /exact range requested/. If XFS_BMAPI_ENTIRE is set, we want the > entire extent that overlaps the range requested... > > So I think this might be better named to match it's intended > function. e.g. remap, reuse, ref_only, etc. How about XFS_BMAPI_REFLINK? --D > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From debbugs@buxtehude.debian.org Thu Jul 30 16:51:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0A3D97F78 for ; Thu, 30 Jul 2015 16:51:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8F44E304043 for ; Thu, 30 Jul 2015 14:51:26 -0700 (PDT) X-ASG-Debug-ID: 1438293079-04bdf06bd07aa00001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id GYYhIGEuAHiGyaIM (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 14:51:19 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZKvjQ-0006vR-RT; Thu, 30 Jul 2015 21:51:16 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#794158: xfsprogs FTCBFS: fails to pass --host to configure Reply-To: Helmut Grohne , 794158@bugs.debian.org X-ASG-Orig-Subj: Bug#794158: xfsprogs FTCBFS: fails to pass --host to configure Resent-From: Helmut Grohne Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Thu, 30 Jul 2015 21:51:12 +0000 Resent-Message-ID: X-Debian-PR-Message: report 794158 X-Debian-PR-Package: src:xfsprogs X-Debian-PR-Keywords: patch X-Debian-PR-Source: xfsprogs Received: via spool by submit@bugs.debian.org id=B.143829304126532 (code B); Thu, 30 Jul 2015 21:51:12 +0000 Received: (at submit) by bugs.debian.org; 30 Jul 2015 21:50:41 +0000 Received: from isilmar-3.linta.de ([188.40.101.200] helo=linta.de) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1ZKviq-0006ti-8s for submit@bugs.debian.org; Thu, 30 Jul 2015 21:50:41 +0000 Received: (qmail 31121 invoked from network); 30 Jul 2015 21:50:37 -0000 Received: from localhost (HELO isilmar-3.linta.de) (127.0.0.1) by localhost with SMTP; 30 Jul 2015 21:50:37 -0000 Date: Thu, 30 Jul 2015 23:50:22 +0200 From: Helmut Grohne To: Debian Bug Tracking System Message-ID: <20150730215021.GA32262@alf.mars> Mail-Followup-To: Helmut Grohne , Debian Bug Tracking System MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="pWyiEgJYm5f9v55/" Content-Disposition: inline X-Reportbug-Version: 6.6.3 User-Agent: Mutt/1.5.23 (2014-03-12) Delivered-To: submit@bugs.debian.org X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1438293079 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --pWyiEgJYm5f9v55/ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Source: xfsprogs Version: 3.2.3 Tags: patch User: helmutg@debian.org Usertags: rebootstrap xfsprogs FTCBFS, because it fails to pass --host to configure. Thus it selects the build architecture as host architecture and fails configure, because the requested libraries are only installed for the host architecture. Once adding the switch it fails, because it runs host architecture executables, which is not possible during cross compilation. Some programs are only used during build and need to be compiled with the build architecture compiler. I am attaching a failing build log and a patch that makes the cross build succeed Helmut --pWyiEgJYm5f9v55/ Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="xfsprogs_3.2.3_arm64.build" Content-Transfer-Encoding: quoted-printable sbuild (Debian sbuild) 0.65.2 (24 Mar 2015) on misc-debomatic3 =E2=95=94=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=97 =E2=95=91 xfsprogs 3.2.3 (CROSS host=3Darm64/build=3Damd64) 28= Jul 2015 03:07 =E2=95=91 =E2=95=9A=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=9D Package: xfsprogs Version: 3.2.3 Source Version: 3.2.3 Distribution: unstable Machine Architecture: amd64 Host Architecture: arm64 Build Architecture: amd64 I: NOTICE: Log filtering will replace 'build/xfsprogs-uNA7Yd/xfsprogs-3.2.3= ' with '=C2=ABPKGBUILDDIR=C2=BB' I: NOTICE: Log filtering will replace 'build/xfsprogs-uNA7Yd' with '=C2=ABB= UILDDIR=C2=BB' I: NOTICE: Log filtering will replace 'var/lib/schroot/mount/unstable-amd64= -debomatic-9f549ba3-d88d-4c5c-9d7d-2aea2718618b' with '=C2=ABCHROOT=C2=BB' =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Chroot Setup Commands = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 /home/debomatic/debomatic/sbuildcommands/chroot-setup-commands/dpkg-speedup =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 I: Finished running '/home/debomatic/debomatic/sbuildcommands/chroot-setup-= commands/dpkg-speedup'. Finished processing commands. =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Update chroot = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Get:1 http://httpredir.debian.org unstable InRelease [200 kB] Get:2 http://httpredir.debian.org unstable/main Sources/DiffIndex [7876 B] Get:3 http://httpredir.debian.org unstable/contrib Sources/DiffIndex [7819 = B] Get:4 http://httpredir.debian.org unstable/non-free Sources/DiffIndex [7819= B] Get:5 http://httpredir.debian.org unstable/main amd64 Packages/DiffIndex [7= 876 B] Get:6 http://httpredir.debian.org unstable/contrib amd64 Packages/DiffIndex= [7819 B] Get:7 http://httpredir.debian.org unstable/non-free amd64 Packages/DiffInde= x [7819 B] Get:8 http://httpredir.debian.org unstable/main arm64 Packages/DiffIndex [7= 876 B] Get:9 http://httpredir.debian.org unstable/contrib arm64 Packages/DiffIndex= [7819 B] Get:10 http://httpredir.debian.org unstable/non-free arm64 Packages/DiffInd= ex [7819 B] Get:11 http://httpredir.debian.org unstable/contrib Translation-en/DiffInde= x [7819 B] Get:12 http://httpredir.debian.org unstable/main Translation-en/DiffIndex [= 7876 B] Get:13 http://httpredir.debian.org unstable/non-free Translation-en/DiffInd= ex [7819 B] Get:14 http://httpredir.debian.org unstable/main 2015-07-20-2047.52.pdiff [= 12.4 kB] Get:15 http://httpredir.debian.org unstable/main 2015-07-21-0250.43.pdiff [= 8812 B] Get:16 http://httpredir.debian.org unstable/main 2015-07-21-0850.03.pdiff [= 3397 B] Get:17 http://httpredir.debian.org unstable/main 2015-07-21-1449.47.pdiff [= 18.8 kB] Get:18 http://httpredir.debian.org unstable/main 2015-07-21-2049.10.pdiff [= 8292 B] Get:19 http://httpredir.debian.org unstable/main 2015-07-22-0250.18.pdiff [= 12.2 kB] Get:20 http://httpredir.debian.org unstable/main 2015-07-22-0848.26.pdiff [= 5555 B] Get:21 http://httpredir.debian.org unstable/main 2015-07-22-1449.38.pdiff [= 13.7 kB] Get:22 http://httpredir.debian.org unstable/main 2015-07-22-2049.44.pdiff [= 19.5 kB] Get:23 http://httpredir.debian.org unstable/main 2015-07-23-0247.58.pdiff [= 19.4 kB] Get:24 http://httpredir.debian.org unstable/main 2015-07-23-0910.58.pdiff [= 13.2 kB] Get:25 http://httpredir.debian.org unstable/main 2015-07-23-1448.36.pdiff [= 16.0 kB] Get:26 http://httpredir.debian.org unstable/main 2015-07-23-2049.31.pdiff [= 17.1 kB] Get:27 http://httpredir.debian.org unstable/main 2015-07-24-0250.04.pdiff [= 12.6 kB] Get:28 http://httpredir.debian.org unstable/main 2015-07-24-0851.36.pdiff [= 2008 B] Get:29 http://httpredir.debian.org unstable/main 2015-07-24-1452.49.pdiff [= 21.2 kB] Get:30 http://httpredir.debian.org unstable/main 2015-07-24-2051.02.pdiff [= 23.9 kB] Get:31 http://httpredir.debian.org unstable/main 2015-07-25-0251.08.pdiff [= 4449 B] Get:32 http://httpredir.debian.org unstable/main 2015-07-25-0850.02.pdiff [= 2819 B] Get:33 http://httpredir.debian.org unstable/main 2015-07-25-2052.33.pdiff [= 30.1 kB] Get:34 http://httpredir.debian.org unstable/main 2015-07-26-0254.09.pdiff [= 10.2 kB] Get:35 http://httpredir.debian.org unstable/main 2015-07-26-0850.47.pdiff [= 4581 B] Get:36 http://httpredir.debian.org unstable/main 2015-07-26-1450.39.pdiff [= 7768 B] Get:37 http://httpredir.debian.org unstable/main 2015-07-26-2049.45.pdiff [= 19.0 kB] Get:38 http://httpredir.debian.org unstable/main 2015-07-27-0250.55.pdiff [= 17.0 kB] Get:39 http://httpredir.debian.org unstable/main 2015-07-27-0850.30.pdiff [= 5362 B] Get:40 http://httpredir.debian.org unstable/main 2015-07-27-1452.54.pdiff [= 4593 B] Get:41 http://httpredir.debian.org unstable/main 2015-07-27-2050.33.pdiff [= 25.0 kB] Get:42 http://httpredir.debian.org unstable/main 2015-07-27-2050.33.pdiff [= 25.0 kB] Get:43 http://httpredir.debian.org unstable/contrib 2015-07-27-1452.54.pdif= f [26 B] Get:44 http://httpredir.debian.org unstable/contrib 2015-07-27-2050.33.pdif= f [707 B] Get:45 http://httpredir.debian.org unstable/non-free 2015-07-23-0247.58.pdi= ff [277 B] Get:46 http://httpredir.debian.org unstable/non-free 2015-07-23-1448.36.pdi= ff [653 B] Get:47 http://httpredir.debian.org unstable/non-free 2015-07-24-0250.04.pdi= ff [393 B] Get:48 http://httpredir.debian.org unstable/main amd64 2015-07-20-2047.52.p= diff [29.9 kB] Get:49 http://httpredir.debian.org unstable/main amd64 2015-07-21-0250.43.p= diff [48.0 kB] Get:50 http://httpredir.debian.org unstable/main amd64 2015-07-21-0850.03.p= diff [2644 B] Get:51 http://httpredir.debian.org unstable/main amd64 2015-07-21-1449.47.p= diff [28.8 kB] Get:52 http://httpredir.debian.org unstable/main amd64 2015-07-21-2049.10.p= diff [13.7 kB] Get:53 http://httpredir.debian.org unstable/main amd64 2015-07-22-0250.18.p= diff [20.9 kB] Get:54 http://httpredir.debian.org unstable/contrib 2015-07-27-2050.33.pdif= f [707 B] Get:55 http://httpredir.debian.org unstable/non-free 2015-07-24-0250.04.pdi= ff [393 B] Get:56 http://httpredir.debian.org unstable/main amd64 2015-07-22-0848.26.p= diff [6177 B] Get:57 http://httpredir.debian.org unstable/main amd64 2015-07-22-1449.38.p= diff [20.5 kB] Get:58 http://httpredir.debian.org unstable/main amd64 2015-07-22-2049.44.p= diff [21.7 kB] Get:59 http://httpredir.debian.org unstable/main amd64 2015-07-23-0247.58.p= diff [5830 B] Get:60 http://httpredir.debian.org unstable/main amd64 2015-07-23-0910.58.p= diff [27.3 kB] Get:61 http://httpredir.debian.org unstable/main amd64 2015-07-23-1448.36.p= diff [29.5 kB] Get:62 http://httpredir.debian.org unstable/main amd64 2015-07-23-2049.31.p= diff [17.6 kB] Get:63 http://httpredir.debian.org unstable/main amd64 2015-07-24-0250.04.p= diff [10.0 kB] Get:64 http://httpredir.debian.org unstable/main amd64 2015-07-24-0851.36.p= diff [9233 B] Get:65 http://httpredir.debian.org unstable/main amd64 2015-07-24-1452.49.p= diff [21.3 kB] Get:66 http://httpredir.debian.org unstable/main amd64 2015-07-24-2051.02.p= diff [28.6 kB] Get:67 http://httpredir.debian.org unstable/main amd64 2015-07-25-0251.08.p= diff [7310 B] Get:68 http://httpredir.debian.org unstable/main amd64 2015-07-25-0850.02.p= diff [2412 B] Get:69 http://httpredir.debian.org unstable/main amd64 2015-07-25-2052.33.p= diff [30.4 kB] Get:70 http://httpredir.debian.org unstable/main amd64 2015-07-26-0254.09.p= diff [7277 B] Get:71 http://httpredir.debian.org unstable/main amd64 2015-07-26-0850.47.p= diff [3111 B] Get:72 http://httpredir.debian.org unstable/main amd64 2015-07-26-1450.39.p= diff [6377 B] Get:73 http://httpredir.debian.org unstable/main amd64 2015-07-26-2049.45.p= diff [24.2 kB] Get:74 http://httpredir.debian.org unstable/main amd64 2015-07-27-0250.55.p= diff [8822 B] Get:75 http://httpredir.debian.org unstable/main amd64 2015-07-27-0850.30.p= diff [3433 B] Get:76 http://httpredir.debian.org unstable/main amd64 2015-07-27-1452.54.p= diff [2794 B] Get:77 http://httpredir.debian.org unstable/main amd64 2015-07-27-2050.33.p= diff [29.1 kB] Get:78 http://httpredir.debian.org unstable/main amd64 2015-07-27-2050.33.p= diff [29.1 kB] Get:79 http://httpredir.debian.org unstable/contrib amd64 2015-07-20-2047.5= 2.pdiff [870 B] Get:80 http://httpredir.debian.org unstable/contrib amd64 2015-07-21-0250.4= 3.pdiff [1237 B] Get:81 http://httpredir.debian.org unstable/contrib amd64 2015-07-21-0850.0= 3.pdiff [38 B] Get:82 http://httpredir.debian.org unstable/contrib amd64 2015-07-21-1449.4= 7.pdiff [518 B] Get:83 http://httpredir.debian.org unstable/contrib amd64 2015-07-21-2049.1= 0.pdiff [29 B] Get:84 http://httpredir.debian.org unstable/contrib amd64 2015-07-22-1449.3= 8.pdiff [388 B] Get:85 http://httpredir.debian.org unstable/contrib amd64 2015-07-22-2049.4= 4.pdiff [29 B] Get:86 http://httpredir.debian.org unstable/contrib amd64 2015-07-26-0850.4= 7.pdiff [423 B] Get:87 http://httpredir.debian.org unstable/contrib amd64 2015-07-27-0250.5= 5.pdiff [42 B] Get:88 http://httpredir.debian.org unstable/contrib amd64 2015-07-27-2050.3= 3.pdiff [811 B] Get:89 http://httpredir.debian.org unstable/non-free amd64 2015-07-23-0247.= 58.pdiff [970 B] Get:90 http://httpredir.debian.org unstable/non-free amd64 2015-07-23-1448.= 36.pdiff [427 B] Get:91 http://httpredir.debian.org unstable/contrib amd64 2015-07-27-2050.3= 3.pdiff [811 B] Get:92 http://httpredir.debian.org unstable/non-free amd64 2015-07-24-0250.= 04.pdiff [319 B] Get:93 http://httpredir.debian.org unstable/non-free amd64 2015-07-24-0250.= 04.pdiff [319 B] Get:94 http://httpredir.debian.org unstable/main arm64 2015-07-20-2047.52.p= diff [21.7 kB] Get:95 http://httpredir.debian.org unstable/main arm64 2015-07-21-0250.43.p= diff [54.3 kB] Get:96 http://httpredir.debian.org unstable/main arm64 2015-07-21-0850.03.p= diff [2647 B] Get:97 http://httpredir.debian.org unstable/main arm64 2015-07-21-1449.47.p= diff [27.6 kB] Get:98 http://httpredir.debian.org unstable/main arm64 2015-07-21-2049.10.p= diff [13.7 kB] Get:99 http://httpredir.debian.org unstable/main arm64 2015-07-22-0250.18.p= diff [15.8 kB] Get:100 http://httpredir.debian.org unstable/main arm64 2015-07-22-0848.26.= pdiff [3902 B] Get:101 http://httpredir.debian.org unstable/main arm64 2015-07-22-1449.38.= pdiff [8493 B] Get:102 http://httpredir.debian.org unstable/main arm64 2015-07-22-2049.44.= pdiff [19.2 kB] Get:103 http://httpredir.debian.org unstable/main arm64 2015-07-23-0247.58.= pdiff [9265 B] Get:104 http://httpredir.debian.org unstable/main arm64 2015-07-23-0910.58.= pdiff [18.6 kB] Get:105 http://httpredir.debian.org unstable/main arm64 2015-07-23-1448.36.= pdiff [27.4 kB] Get:106 http://httpredir.debian.org unstable/main arm64 2015-07-23-2049.31.= pdiff [21.0 kB] Get:107 http://httpredir.debian.org unstable/main arm64 2015-07-24-0250.04.= pdiff [11.3 kB] Get:108 http://httpredir.debian.org unstable/main arm64 2015-07-24-0851.36.= pdiff [322 B] Get:109 http://httpredir.debian.org unstable/main arm64 2015-07-24-1452.49.= pdiff [22.9 kB] Get:110 http://httpredir.debian.org unstable/main arm64 2015-07-24-2051.02.= pdiff [25.2 kB] Get:111 http://httpredir.debian.org unstable/main arm64 2015-07-25-0251.08.= pdiff [6527 B] Get:112 http://httpredir.debian.org unstable/main arm64 2015-07-25-0850.02.= pdiff [2765 B] Get:113 http://httpredir.debian.org unstable/main arm64 2015-07-25-2052.33.= pdiff [23.1 kB] Get:114 http://httpredir.debian.org unstable/main arm64 2015-07-26-0254.09.= pdiff [3931 B] Get:115 http://httpredir.debian.org unstable/main arm64 2015-07-26-0850.47.= pdiff [3061 B] Get:116 http://httpredir.debian.org unstable/main arm64 2015-07-26-1450.39.= pdiff [4947 B] Get:117 http://httpredir.debian.org unstable/main arm64 2015-07-26-2049.45.= pdiff [20.7 kB] Get:118 http://httpredir.debian.org unstable/main arm64 2015-07-27-0250.55.= pdiff [11.2 kB] Get:119 http://httpredir.debian.org unstable/main arm64 2015-07-27-0850.30.= pdiff [3425 B] Get:120 http://httpredir.debian.org unstable/main arm64 2015-07-27-1452.54.= pdiff [3681 B] Get:121 http://httpredir.debian.org unstable/main arm64 2015-07-27-2050.33.= pdiff [25.8 kB] Get:122 http://httpredir.debian.org unstable/main arm64 2015-07-27-2050.33.= pdiff [25.8 kB] Get:123 http://httpredir.debian.org unstable/contrib arm64 2015-07-20-2047.= 52.pdiff [870 B] Get:124 http://httpredir.debian.org unstable/contrib arm64 2015-07-21-0250.= 43.pdiff [852 B] Get:125 http://httpredir.debian.org unstable/contrib arm64 2015-07-21-0850.= 03.pdiff [637 B] Get:126 http://httpredir.debian.org unstable/contrib arm64 2015-07-21-1449.= 47.pdiff [517 B] Get:127 http://httpredir.debian.org unstable/contrib arm64 2015-07-21-2049.= 10.pdiff [29 B] Get:128 http://httpredir.debian.org unstable/contrib arm64 2015-07-22-1449.= 38.pdiff [247 B] Get:129 http://httpredir.debian.org unstable/contrib arm64 2015-07-22-2049.= 44.pdiff [252 B] Get:130 http://httpredir.debian.org unstable/contrib arm64 2015-07-27-0250.= 55.pdiff [40 B] Get:131 http://httpredir.debian.org unstable/contrib arm64 2015-07-27-2050.= 33.pdiff [811 B] Get:132 http://httpredir.debian.org unstable/non-free arm64 2015-07-23-0247= =2E58.pdiff [454 B] Get:133 http://httpredir.debian.org unstable/contrib arm64 2015-07-27-2050.= 33.pdiff [811 B] Get:134 http://httpredir.debian.org unstable/contrib 2015-07-27-0250.55.pdi= ff [26 B] Get:135 http://httpredir.debian.org unstable/non-free arm64 2015-07-23-1448= =2E36.pdiff [427 B] Get:136 http://httpredir.debian.org unstable/non-free arm64 2015-07-23-1448= =2E36.pdiff [427 B] Get:137 http://httpredir.debian.org unstable/contrib 2015-07-27-2050.33.pdi= ff [574 B] Get:138 http://httpredir.debian.org unstable/contrib 2015-07-27-2050.33.pdi= ff [574 B] Get:139 http://httpredir.debian.org unstable/main 2015-07-20-2047.52.pdiff = [854 B] Get:140 http://httpredir.debian.org unstable/main 2015-07-21-0250.43.pdiff = [879 B] Get:141 http://httpredir.debian.org unstable/main 2015-07-21-0850.03.pdiff = [281 B] Get:142 http://httpredir.debian.org unstable/main 2015-07-21-1449.47.pdiff = [4183 B] Get:143 http://httpredir.debian.org unstable/main 2015-07-21-2049.10.pdiff = [1232 B] Get:144 http://httpredir.debian.org unstable/main 2015-07-22-0250.18.pdiff = [685 B] Get:145 http://httpredir.debian.org unstable/main 2015-07-22-0848.26.pdiff = [1080 B] Get:146 http://httpredir.debian.org unstable/main 2015-07-22-1449.38.pdiff = [1158 B] Get:147 http://httpredir.debian.org unstable/main 2015-07-22-2049.44.pdiff = [1204 B] Get:148 http://httpredir.debian.org unstable/main 2015-07-23-0247.58.pdiff = [613 B] Get:149 http://httpredir.debian.org unstable/main 2015-07-23-0910.58.pdiff = [2559 B] Get:150 http://httpredir.debian.org unstable/main 2015-07-23-1448.36.pdiff = [2957 B] Get:151 http://httpredir.debian.org unstable/main 2015-07-23-2049.31.pdiff = [1938 B] Get:152 http://httpredir.debian.org unstable/main 2015-07-24-0250.04.pdiff = [283 B] Get:153 http://httpredir.debian.org unstable/main 2015-07-24-1452.49.pdiff = [3527 B] Get:154 http://httpredir.debian.org unstable/main 2015-07-24-2051.02.pdiff = [8563 B] Get:155 http://httpredir.debian.org unstable/main 2015-07-25-0850.02.pdiff = [128 B] Get:156 http://httpredir.debian.org unstable/main 2015-07-25-2052.33.pdiff = [4674 B] Get:157 http://httpredir.debian.org unstable/main 2015-07-26-0254.09.pdiff = [966 B] Get:158 http://httpredir.debian.org unstable/main 2015-07-26-0850.47.pdiff = [55 B] Get:159 http://httpredir.debian.org unstable/main 2015-07-26-1450.39.pdiff = [845 B] Get:160 http://httpredir.debian.org unstable/main 2015-07-26-2049.45.pdiff = [662 B] Get:161 http://httpredir.debian.org unstable/main 2015-07-27-0250.55.pdiff = [2929 B] Get:162 http://httpredir.debian.org unstable/main 2015-07-27-0850.30.pdiff = [832 B] Get:163 http://httpredir.debian.org unstable/main 2015-07-27-1452.54.pdiff = [581 B] Get:164 http://httpredir.debian.org unstable/main 2015-07-27-2050.33.pdiff = [6126 B] Get:165 http://httpredir.debian.org unstable/main 2015-07-27-2050.33.pdiff = [6126 B] Get:166 http://httpredir.debian.org unstable/non-free 2015-07-23-1448.36.pd= iff [493 B] Get:167 http://httpredir.debian.org unstable/non-free 2015-07-23-1448.36.pd= iff [493 B] Fetched 1596 kB in 20s (77.9 kB/s) Reading package lists... Reading package lists... Building dependency tree... Reading state information... The following packages will be upgraded: bash cpp-4.9 cpp-4.9-aarch64-linux-gnu g++-4.9 g++-4.9-aarch64-linux-gnu gcc-4.9 gcc-4.9-aarch64-linux-gnu gcc-4.9-base gcc-4.9-base:arm64 libasan1 libdebconfclient0 libexpat1 libgcc-4.9-dev:arm64 libgcc-4.9-dev libstdc++-4.9-dev libstdc++-4.9-dev:arm64 16 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 48.7 MB of archives. After this operation, 241 kB disk space will be freed. Get:1 http://httpredir.debian.org/debian/ unstable/main bash amd64 4.3-13 [= 1173 kB] Get:2 http://httpredir.debian.org/debian/ unstable/main gcc-4.9-aarch64-lin= ux-gnu amd64 4.9.3-3 [4743 kB] Get:3 http://httpredir.debian.org/debian/ unstable/main g++-4.9 amd64 4.9.3= -3 [17.8 MB] Get:4 http://httpredir.debian.org/debian/ unstable/main g++-4.9-aarch64-lin= ux-gnu amd64 4.9.3-3 [4956 kB] Get:5 http://httpredir.debian.org/debian/ unstable/main cpp-4.9-aarch64-lin= ux-gnu amd64 4.9.3-3 [4683 kB] Get:6 http://httpredir.debian.org/debian/ unstable/main libstdc++-4.9-dev a= rm64 4.9.3-3 [1086 kB] Get:7 http://httpredir.debian.org/debian/ unstable/main libgcc-4.9-dev arm6= 4 4.9.3-3 [181 kB] Get:8 http://httpredir.debian.org/debian/ unstable/main libgcc-4.9-dev amd6= 4 4.9.3-3 [2062 kB] Get:9 http://httpredir.debian.org/debian/ unstable/main gcc-4.9-base arm64 = 4.9.3-3 [162 kB] Get:10 http://httpredir.debian.org/debian/ unstable/main gcc-4.9 amd64 4.9.= 3-3 [5343 kB] Get:11 http://httpredir.debian.org/debian/ unstable/main cpp-4.9 amd64 4.9.= 3-3 [5005 kB] Get:12 http://httpredir.debian.org/debian/ unstable/main libstdc++-4.9-dev = amd64 4.9.3-3 [1114 kB] Get:13 http://httpredir.debian.org/debian/ unstable/main libasan1 amd64 4.9= =2E3-3 [194 kB] Get:14 http://httpredir.debian.org/debian/ unstable/main gcc-4.9-base amd64= 4.9.3-3 [162 kB] Get:15 http://httpredir.debian.org/debian/ unstable/main libdebconfclient0 = amd64 0.195 [46.3 kB] Get:16 http://httpredir.debian.org/debian/ unstable/main libexpat1 amd64 2.= 1.0-7 [80.0 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 48.7 MB in 2s (16.6 MB/s) (Reading database ... =0D(Reading database ... 5%=0D(Reading database ... 1= 0%=0D(Reading database ... 15%=0D(Reading database ... 20%=0D(Reading datab= ase ... 25%=0D(Reading database ... 30%=0D(Reading database ... 35%=0D(Read= ing database ... 40%=0D(Reading database ... 45%=0D(Reading database ... 50= %=0D(Reading database ... 55%=0D(Reading database ... 60%=0D(Reading databa= se ... 65%=0D(Reading database ... 70%=0D(Reading database ... 75%=0D(Readi= ng database ... 80%=0D(Reading database ... 85%=0D(Reading database ... 90%= =0D(Reading database ... 95%=0D(Reading database ... 100%=0D(Reading databa= se ... 14308 files and directories currently installed.)=0D Preparing to unpack .../archives/bash_4.3-13_amd64.deb ...=0D Unpacking bash (4.3-13) over (4.3-12) ...=0D Setting up bash (4.3-13) ...=0D update-alternatives: using /usr/share/man/man7/bash-builtins.7.gz to provid= e /usr/share/man/man7/builtins.7.gz (builtins.7.gz) in auto mode=0D (Reading database ... =0D(Reading database ... 5%=0D(Reading database ... 1= 0%=0D(Reading database ... 15%=0D(Reading database ... 20%=0D(Reading datab= ase ... 25%=0D(Reading database ... 30%=0D(Reading database ... 35%=0D(Read= ing database ... 40%=0D(Reading database ... 45%=0D(Reading database ... 50= %=0D(Reading database ... 55%=0D(Reading database ... 60%=0D(Reading databa= se ... 65%=0D(Reading database ... 70%=0D(Reading database ... 75%=0D(Readi= ng database ... 80%=0D(Reading database ... 85%=0D(Reading database ... 90%= =0D(Reading database ... 95%=0D(Reading database ... 100%=0D(Reading databa= se ... 14308 files and directories currently installed.)=0D Preparing to unpack .../g++-4.9_4.9.3-3_amd64.deb ...=0D Unpacking g++-4.9 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../gcc-4.9_4.9.3-3_amd64.deb ...=0D Unpacking gcc-4.9 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../cpp-4.9_4.9.3-3_amd64.deb ...=0D Unpacking cpp-4.9 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../g++-4.9-aarch64-linux-gnu_4.9.3-3_amd64.deb ...=0D Unpacking g++-4.9-aarch64-linux-gnu (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../gcc-4.9-aarch64-linux-gnu_4.9.3-3_amd64.deb ...=0D Unpacking gcc-4.9-aarch64-linux-gnu (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../cpp-4.9-aarch64-linux-gnu_4.9.3-3_amd64.deb ...=0D Unpacking cpp-4.9-aarch64-linux-gnu (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../libstdc++-4.9-dev_4.9.3-3_arm64.deb ...=0D De-configuring libstdc++-4.9-dev:amd64 (4.9.3-2) ...=0D Unpacking libstdc++-4.9-dev:arm64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../libstdc++-4.9-dev_4.9.3-3_amd64.deb ...=0D Unpacking libstdc++-4.9-dev:amd64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../libgcc-4.9-dev_4.9.3-3_amd64.deb ...=0D De-configuring libgcc-4.9-dev:arm64 (4.9.3-2) ...=0D Unpacking libgcc-4.9-dev:amd64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../libgcc-4.9-dev_4.9.3-3_arm64.deb ...=0D Unpacking libgcc-4.9-dev:arm64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../libasan1_4.9.3-3_amd64.deb ...=0D Unpacking libasan1:amd64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../gcc-4.9-base_4.9.3-3_amd64.deb ...=0D De-configuring gcc-4.9-base:arm64 (4.9.3-2) ...=0D Unpacking gcc-4.9-base:amd64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../gcc-4.9-base_4.9.3-3_arm64.deb ...=0D Unpacking gcc-4.9-base:arm64 (4.9.3-3) over (4.9.3-2) ...=0D Preparing to unpack .../libdebconfclient0_0.195_amd64.deb ...=0D Unpacking libdebconfclient0:amd64 (0.195) over (0.194) ...=0D Setting up libdebconfclient0:amd64 (0.195) ...=0D Processing triggers for libc-bin (2.21-0experimental0) ...=0D (Reading database ... =0D(Reading database ... 5%=0D(Reading database ... 1= 0%=0D(Reading database ... 15%=0D(Reading database ... 20%=0D(Reading datab= ase ... 25%=0D(Reading database ... 30%=0D(Reading database ... 35%=0D(Read= ing database ... 40%=0D(Reading database ... 45%=0D(Reading database ... 50= %=0D(Reading database ... 55%=0D(Reading database ... 60%=0D(Reading databa= se ... 65%=0D(Reading database ... 70%=0D(Reading database ... 75%=0D(Readi= ng database ... 80%=0D(Reading database ... 85%=0D(Reading database ... 90%= =0D(Reading database ... 95%=0D(Reading database ... 100%=0D(Reading databa= se ... 14308 files and directories currently installed.)=0D Preparing to unpack .../libexpat1_2.1.0-7_amd64.deb ...=0D Unpacking libexpat1:amd64 (2.1.0-7) over (2.1.0-6+b3) ...=0D Setting up gcc-4.9-base:amd64 (4.9.3-3) ...=0D Setting up gcc-4.9-base:arm64 (4.9.3-3) ...=0D Setting up cpp-4.9 (4.9.3-3) ...=0D Setting up libasan1:amd64 (4.9.3-3) ...=0D Setting up libgcc-4.9-dev:amd64 (4.9.3-3) ...=0D Setting up libgcc-4.9-dev:arm64 (4.9.3-3) ...=0D Setting up gcc-4.9 (4.9.3-3) ...=0D Setting up libstdc++-4.9-dev:amd64 (4.9.3-3) ...=0D Setting up libstdc++-4.9-dev:arm64 (4.9.3-3) ...=0D Setting up g++-4.9 (4.9.3-3) ...=0D Setting up cpp-4.9-aarch64-linux-gnu (4.9.3-3) ...=0D Setting up gcc-4.9-aarch64-linux-gnu (4.9.3-3) ...=0D Setting up g++-4.9-aarch64-linux-gnu (4.9.3-3) ...=0D Setting up libexpat1:amd64 (2.1.0-7) ...=0D Processing triggers for libc-bin (2.21-0experimental0) ...=0D =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Fetch source files = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Local sources =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 /srv/debomatic-staging/xfsprogs_3.2.3.dsc exists in /srv/debomatic-staging;= copying to chroot Check architectures =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80 Initial Foreign Architectures: arm64=20 Check dependencies =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80 Merged Build-Depends: build-essential:amd64, fakeroot:amd64, crossbuild-ess= ential-arm64:amd64 Filtered Build-Depends: build-essential:amd64, fakeroot:amd64, crossbuild-e= ssential-arm64:amd64 dpkg-deb: building package 'sbuild-build-depends-core-dummy' in '/=C2=ABBUI= LDDIR=C2=BB/resolver-bgAMr6/apt_archive/sbuild-build-depends-core-dummy.deb= '. OK Ign file: ./ InRelease Get:1 file: ./ Release.gpg [299 B] Get:2 file: ./ Release [2119 B] Ign file: ./ Translation-en Reading package lists... Reading package lists... =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Install core build dependencies (apt-based resolver) = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Installing build dependencies Reading package lists... Building dependency tree... Reading state information... The following NEW packages will be installed: sbuild-build-depends-core-dummy:arm64 debconf: delaying package configuration, since apt-utils is not installed 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/774 B of archives. After this operation, 0 B of additional disk space will be used. Selecting previously unselected package sbuild-build-depends-core-dummy:arm= 64.=0D (Reading database ... =0D(Reading database ... 5%=0D(Reading database ... 1= 0%=0D(Reading database ... 15%=0D(Reading database ... 20%=0D(Reading datab= ase ... 25%=0D(Reading database ... 30%=0D(Reading database ... 35%=0D(Read= ing database ... 40%=0D(Reading database ... 45%=0D(Reading database ... 50= %=0D(Reading database ... 55%=0D(Reading database ... 60%=0D(Reading databa= se ... 65%=0D(Reading database ... 70%=0D(Reading database ... 75%=0D(Readi= ng database ... 80%=0D(Reading database ... 85%=0D(Reading database ... 90%= =0D(Reading database ... 95%=0D(Reading database ... 100%=0D(Reading databa= se ... 14307 files and directories currently installed.)=0D Preparing to unpack .../sbuild-build-depends-core-dummy.deb ...=0D Unpacking sbuild-build-depends-core-dummy:arm64 (0.invalid.0) ...=0D Setting up sbuild-build-depends-core-dummy:arm64 (0.invalid.0) ...=0D dpkg-deb: building package 'sbuild-build-depends-essential-dummy' in '/=C2= =ABBUILDDIR=C2=BB/resolver-kN7jvz/apt_archive/sbuild-build-depends-essentia= l-dummy.deb'. OK Ign file: ./ InRelease Get:1 file: ./ Release.gpg [299 B] Get:2 file: ./ Release [2119 B] Ign file: ./ Translation-en Reading package lists... Reading package lists... =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Install essential build dependencies (apt-based resolver) = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Installing build dependencies Reading package lists... Building dependency tree... Reading state information... The following NEW packages will be installed: sbuild-build-depends-essential-dummy:arm64 debconf: delaying package configuration, since apt-utils is not installed 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/742 B of archives. After this operation, 0 B of additional disk space will be used. Selecting previously unselected package sbuild-build-depends-essential-dumm= y:arm64.=0D (Reading database ... =0D(Reading database ... 5%=0D(Reading database ... 1= 0%=0D(Reading database ... 15%=0D(Reading database ... 20%=0D(Reading datab= ase ... 25%=0D(Reading database ... 30%=0D(Reading database ... 35%=0D(Read= ing database ... 40%=0D(Reading database ... 45%=0D(Reading database ... 50= %=0D(Reading database ... 55%=0D(Reading database ... 60%=0D(Reading databa= se ... 65%=0D(Reading database ... 70%=0D(Reading database ... 75%=0D(Readi= ng database ... 80%=0D(Reading database ... 85%=0D(Reading database ... 90%= =0D(Reading database ... 95%=0D(Reading database ... 100%=0D(Reading databa= se ... 14307 files and directories currently installed.)=0D Preparing to unpack .../sbuild-build-depends-essential-dummy.deb ...=0D Unpacking sbuild-build-depends-essential-dummy:arm64 (0.invalid.0) ...=0D Setting up sbuild-build-depends-essential-dummy:arm64 (0.invalid.0) ...=0D Merged Build-Depends: uuid-dev, dh-autoreconf, debhelper (>=3D 5), gettext,= libtool, libreadline-gplv2-dev | libreadline5-dev, libblkid-dev (>=3D 2.17= ), linux-libc-dev Filtered Build-Depends: uuid-dev, dh-autoreconf, debhelper (>=3D 5), gettex= t, libtool, libreadline-gplv2-dev, libblkid-dev (>=3D 2.17), linux-libc-dev dpkg-deb: building package 'sbuild-build-depends-xfsprogs-dummy' in '/=C2= =ABBUILDDIR=C2=BB/resolver-fUkMcS/apt_archive/sbuild-build-depends-xfsprogs= -dummy.deb'. OK Ign file: ./ InRelease Get:1 file: ./ Release.gpg [299 B] Get:2 file: ./ Release [2119 B] Ign file: ./ Translation-en Reading package lists... Reading package lists... =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Install xfsprogs build dependencies (apt-based resolver) = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Installing build dependencies Reading package lists... Building dependency tree... Reading state information... The following NEW packages will be installed: autoconf automake autopoint autotools-dev bsdmainutils debhelper dh-autoreconf gettext gettext-base groff-base intltool-debian libasprintf= 0c2 libblkid-dev:arm64 libblkid1:arm64 libcroco3 libffi6 libglib2.0-0 libicu52 libpipeline1 libreadline-gplv2-dev:arm64 libreadline5:arm64 libsigsegv2 libtinfo-dev:arm64 libtinfo5:arm64 libtool libunistring0 libuuid1:arm64 libxml2 m4 man-db po-debconf uuid-dev:arm64 0 upgraded, 32 newly installed, 0 to remove and 0 not upgraded. Need to get 18.6 MB of archives. After this operation, 61.4 MB of additional disk space will be used. Get:1 http://httpredir.debian.org/debian/ unstable/main libpipeline1 amd64 = 1.4.0-1 [27.9 kB] Get:2 http://httpredir.debian.org/debian/ unstable/main groff-base amd64 1.= 22.3-1 [1205 kB] Get:3 http://httpredir.debian.org/debian/ unstable/main bsdmainutils amd64 = 9.0.6 [183 kB] Get:4 http://httpredir.debian.org/debian/ unstable/main man-db amd64 2.7.0.= 2-5 [1000 kB] Get:5 http://httpredir.debian.org/debian/ unstable/main libasprintf0c2 amd6= 4 0.19.4-1 [31.6 kB] Get:6 http://httpredir.debian.org/debian/ unstable/main libicu52 amd64 52.1= -10 [6786 kB] Get:7 http://httpredir.debian.org/debian/ unstable/main libuuid1 arm64 2.26= =2E2-6 [65.4 kB] Get:8 http://httpredir.debian.org/debian/ unstable/main libxml2 amd64 2.9.2= +dfsg1-3 [934 kB] Get:9 http://httpredir.debian.org/debian/ unstable/main libffi6 amd64 3.2.1= -3 [20.1 kB] Get:10 http://httpredir.debian.org/debian/ unstable/main libglib2.0-0 amd64= 2.44.1-1.1 [2461 kB] Get:11 http://httpredir.debian.org/debian/ unstable/main libblkid1 arm64 2.= 26.2-6 [142 kB] Get:12 http://httpredir.debian.org/debian/ unstable/main libcroco3 amd64 0.= 6.8-3+b1 [135 kB] Get:13 http://httpredir.debian.org/debian/ unstable/main libsigsegv2 amd64 = 2.10-4+b1 [29.2 kB] Get:14 http://httpredir.debian.org/debian/ unstable/main libunistring0 amd6= 4 0.9.3-5.2+b1 [288 kB] Get:15 http://httpredir.debian.org/debian/ unstable/main uuid-dev arm64 2.2= 6.2-6 [79.7 kB] Get:16 http://httpredir.debian.org/debian/ unstable/main libblkid-dev arm64= 2.26.2-6 [178 kB] Get:17 http://httpredir.debian.org/debian/ unstable/main libtinfo5 arm64 5.= 9+20150516-2 [275 kB] Get:18 http://httpredir.debian.org/debian/ unstable/main gettext-base amd64= 0.19.4-1 [121 kB] Get:19 http://httpredir.debian.org/debian/ unstable/main m4 amd64 1.4.17-4 = [254 kB] Get:20 http://httpredir.debian.org/debian/ unstable/main autoconf all 2.69-= 8 [340 kB] Get:21 http://httpredir.debian.org/debian/ unstable/main autotools-dev all = 20140911.1 [70.5 kB] Get:22 http://httpredir.debian.org/debian/ unstable/main automake all 1:1.1= 5-2 [735 kB] Get:23 http://httpredir.debian.org/debian/ unstable/main autopoint all 0.19= =2E4-1 [415 kB] Get:24 http://httpredir.debian.org/debian/ unstable/main gettext amd64 0.19= =2E4-1 [1241 kB] Get:25 http://httpredir.debian.org/debian/ unstable/main intltool-debian al= l 0.35.0+20060710.2 [25.9 kB] Get:26 http://httpredir.debian.org/debian/ unstable/main po-debconf all 1.0= =2E18 [248 kB] Get:27 http://httpredir.debian.org/debian/ unstable/main debhelper all 9.20= 150628 [817 kB] Get:28 http://httpredir.debian.org/debian/ unstable/main libtool all 2.4.2-= 1.11 [190 kB] Get:29 http://httpredir.debian.org/debian/ unstable/main dh-autoreconf all = 10 [15.2 kB] Get:30 http://httpredir.debian.org/debian/ unstable/main libreadline5 arm64= 5.2+dfsg-3 [100 kB] Get:31 http://httpredir.debian.org/debian/ unstable/main libtinfo-dev arm64= 5.9+20150516-2 [71.9 kB] Get:32 http://httpredir.debian.org/debian/ unstable/main libreadline-gplv2-= dev arm64 5.2+dfsg-3 [116 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 18.6 MB in 3s (4733 kB/s) Selecting previously unselected package libpipeline1:amd64.=0D (Reading database ... =0D(Reading database ... 5%=0D(Reading database ... 1= 0%=0D(Reading database ... 15%=0D(Reading database ... 20%=0D(Reading datab= ase ... 25%=0D(Reading database ... 30%=0D(Reading database ... 35%=0D(Read= ing database ... 40%=0D(Reading database ... 45%=0D(Reading database ... 50= %=0D(Reading database ... 55%=0D(Reading database ... 60%=0D(Reading databa= se ... 65%=0D(Reading database ... 70%=0D(Reading database ... 75%=0D(Readi= ng database ... 80%=0D(Reading database ... 85%=0D(Reading database ... 90%= =0D(Reading database ... 95%=0D(Reading database ... 100%=0D(Reading databa= se ... 14307 files and directories currently installed.)=0D Preparing to unpack .../libpipeline1_1.4.0-1_amd64.deb ...=0D Unpacking libpipeline1:amd64 (1.4.0-1) ...=0D Selecting previously unselected package groff-base.=0D Preparing to unpack .../groff-base_1.22.3-1_amd64.deb ...=0D Unpacking groff-base (1.22.3-1) ...=0D Selecting previously unselected package bsdmainutils.=0D Preparing to unpack .../bsdmainutils_9.0.6_amd64.deb ...=0D Unpacking bsdmainutils (9.0.6) ...=0D Selecting previously unselected package man-db.=0D Preparing to unpack .../man-db_2.7.0.2-5_amd64.deb ...=0D Unpacking man-db (2.7.0.2-5) ...=0D Selecting previously unselected package libasprintf0c2:amd64.=0D Preparing to unpack .../libasprintf0c2_0.19.4-1_amd64.deb ...=0D Unpacking libasprintf0c2:amd64 (0.19.4-1) ...=0D Selecting previously unselected package libicu52:amd64.=0D Preparing to unpack .../libicu52_52.1-10_amd64.deb ...=0D Unpacking libicu52:amd64 (52.1-10) ...=0D Selecting previously unselected package libxml2:amd64.=0D Preparing to unpack .../libxml2_2.9.2+dfsg1-3_amd64.deb ...=0D Unpacking libxml2:amd64 (2.9.2+dfsg1-3) ...=0D Selecting previously unselected package libffi6:amd64.=0D Preparing to unpack .../libffi6_3.2.1-3_amd64.deb ...=0D Unpacking libffi6:amd64 (3.2.1-3) ...=0D Selecting previously unselected package libglib2.0-0:amd64.=0D Preparing to unpack .../libglib2.0-0_2.44.1-1.1_amd64.deb ...=0D Unpacking libglib2.0-0:amd64 (2.44.1-1.1) ...=0D Selecting previously unselected package libcroco3:amd64.=0D Preparing to unpack .../libcroco3_0.6.8-3+b1_amd64.deb ...=0D Unpacking libcroco3:amd64 (0.6.8-3+b1) ...=0D Selecting previously unselected package libsigsegv2:amd64.=0D Preparing to unpack .../libsigsegv2_2.10-4+b1_amd64.deb ...=0D Unpacking libsigsegv2:amd64 (2.10-4+b1) ...=0D Selecting previously unselected package libunistring0:amd64.=0D Preparing to unpack .../libunistring0_0.9.3-5.2+b1_amd64.deb ...=0D Unpacking libunistring0:amd64 (0.9.3-5.2+b1) ...=0D Selecting previously unselected package libuuid1:arm64.=0D Preparing to unpack .../libuuid1_2.26.2-6_arm64.deb ...=0D Unpacking libuuid1:arm64 (2.26.2-6) ...=0D Selecting previously unselected package libblkid1:arm64.=0D Preparing to unpack .../libblkid1_2.26.2-6_arm64.deb ...=0D Unpacking libblkid1:arm64 (2.26.2-6) ...=0D Selecting previously unselected package uuid-dev:arm64.=0D Preparing to unpack .../uuid-dev_2.26.2-6_arm64.deb ...=0D Unpacking uuid-dev:arm64 (2.26.2-6) ...=0D Selecting previously unselected package libblkid-dev:arm64.=0D Preparing to unpack .../libblkid-dev_2.26.2-6_arm64.deb ...=0D Unpacking libblkid-dev:arm64 (2.26.2-6) ...=0D Selecting previously unselected package libtinfo5:arm64.=0D Preparing to unpack .../libtinfo5_5.9+20150516-2_arm64.deb ...=0D Unpacking libtinfo5:arm64 (5.9+20150516-2) ...=0D Selecting previously unselected package gettext-base.=0D Preparing to unpack .../gettext-base_0.19.4-1_amd64.deb ...=0D Unpacking gettext-base (0.19.4-1) ...=0D Selecting previously unselected package m4.=0D Preparing to unpack .../archives/m4_1.4.17-4_amd64.deb ...=0D Unpacking m4 (1.4.17-4) ...=0D Selecting previously unselected package autoconf.=0D Preparing to unpack .../autoconf_2.69-8_all.deb ...=0D Unpacking autoconf (2.69-8) ...=0D Selecting previously unselected package autotools-dev.=0D Preparing to unpack .../autotools-dev_20140911.1_all.deb ...=0D Unpacking autotools-dev (20140911.1) ...=0D Selecting previously unselected package automake.=0D Preparing to unpack .../automake_1%3a1.15-2_all.deb ...=0D Unpacking automake (1:1.15-2) ...=0D Selecting previously unselected package autopoint.=0D Preparing to unpack .../autopoint_0.19.4-1_all.deb ...=0D Unpacking autopoint (0.19.4-1) ...=0D Selecting previously unselected package gettext.=0D Preparing to unpack .../gettext_0.19.4-1_amd64.deb ...=0D Unpacking gettext (0.19.4-1) ...=0D Selecting previously unselected package intltool-debian.=0D Preparing to unpack .../intltool-debian_0.35.0+20060710.2_all.deb ...=0D Unpacking intltool-debian (0.35.0+20060710.2) ...=0D Selecting previously unselected package po-debconf.=0D Preparing to unpack .../po-debconf_1.0.18_all.deb ...=0D Unpacking po-debconf (1.0.18) ...=0D Selecting previously unselected package debhelper.=0D Preparing to unpack .../debhelper_9.20150628_all.deb ...=0D Unpacking debhelper (9.20150628) ...=0D Selecting previously unselected package libtool.=0D Preparing to unpack .../libtool_2.4.2-1.11_all.deb ...=0D Unpacking libtool (2.4.2-1.11) ...=0D Selecting previously unselected package dh-autoreconf.=0D Preparing to unpack .../dh-autoreconf_10_all.deb ...=0D Unpacking dh-autoreconf (10) ...=0D Selecting previously unselected package libreadline5:arm64.=0D Preparing to unpack .../libreadline5_5.2+dfsg-3_arm64.deb ...=0D Unpacking libreadline5:arm64 (5.2+dfsg-3) ...=0D Selecting previously unselected package libtinfo-dev:arm64.=0D Preparing to unpack .../libtinfo-dev_5.9+20150516-2_arm64.deb ...=0D Unpacking libtinfo-dev:arm64 (5.9+20150516-2) ...=0D Selecting previously unselected package libreadline-gplv2-dev:arm64.=0D Preparing to unpack .../libreadline-gplv2-dev_5.2+dfsg-3_arm64.deb ...=0D Unpacking libreadline-gplv2-dev:arm64 (5.2+dfsg-3) ...=0D Setting up libpipeline1:amd64 (1.4.0-1) ...=0D Setting up groff-base (1.22.3-1) ...=0D Setting up bsdmainutils (9.0.6) ...=0D update-alternatives: using /usr/bin/bsd-write to provide /usr/bin/write (wr= ite) in auto mode=0D update-alternatives: using /usr/bin/bsd-from to provide /usr/bin/from (from= ) in auto mode=0D Setting up man-db (2.7.0.2-5) ...=0D Not building database; man-db/auto-update is not 'true'.=0D Setting up libasprintf0c2:amd64 (0.19.4-1) ...=0D Setting up libicu52:amd64 (52.1-10) ...=0D Setting up libxml2:amd64 (2.9.2+dfsg1-3) ...=0D Setting up libffi6:amd64 (3.2.1-3) ...=0D Setting up libglib2.0-0:amd64 (2.44.1-1.1) ...=0D No schema files found: doing nothing.=0D Setting up libcroco3:amd64 (0.6.8-3+b1) ...=0D Setting up libsigsegv2:amd64 (2.10-4+b1) ...=0D Setting up libunistring0:amd64 (0.9.3-5.2+b1) ...=0D Setting up libuuid1:arm64 (2.26.2-6) ...=0D Setting up libblkid1:arm64 (2.26.2-6) ...=0D Setting up uuid-dev:arm64 (2.26.2-6) ...=0D Setting up libblkid-dev:arm64 (2.26.2-6) ...=0D Setting up libtinfo5:arm64 (5.9+20150516-2) ...=0D Setting up gettext-base (0.19.4-1) ...=0D Setting up m4 (1.4.17-4) ...=0D Setting up autoconf (2.69-8) ...=0D Setting up autotools-dev (20140911.1) ...=0D Setting up automake (1:1.15-2) ...=0D update-alternatives: using /usr/bin/automake-1.15 to provide /usr/bin/autom= ake (automake) in auto mode=0D Setting up autopoint (0.19.4-1) ...=0D Setting up gettext (0.19.4-1) ...=0D Setting up intltool-debian (0.35.0+20060710.2) ...=0D Setting up po-debconf (1.0.18) ...=0D Setting up debhelper (9.20150628) ...=0D Setting up libtool (2.4.2-1.11) ...=0D Setting up dh-autoreconf (10) ...=0D Setting up libreadline5:arm64 (5.2+dfsg-3) ...=0D Setting up libtinfo-dev:arm64 (5.9+20150516-2) ...=0D Setting up libreadline-gplv2-dev:arm64 (5.2+dfsg-3) ...=0D Processing triggers for libc-bin (2.21-0experimental0) ...=0D =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Build environment = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Kernel: Linux 3.16.0-4-amd64 amd64 (x86_64) Toolchain package versions: binutils_2.25-10 dpkg-dev_1.18.1 g++-4.9_4.9.3-= 3 gcc-4.9_4.9.3-3 libc6-dev_2.21-0experimental0 libstdc++-4.9-dev_4.9.3-3 l= ibstdc++6_5.2.1-11 linux-libc-dev_4.1.2-1~exp1 Package versions: adduser_3.113+nmu3 apt_1.0.9.10 autoconf_2.69-8 automake_= 1:1.15-2 autopoint_0.19.4-1 autotools-dev_20140911.1 base-files_9.2 base-pa= sswd_3.5.38 bash_4.3-13 binutils_2.25-10 binutils-aarch64-linux-gnu_2.25-8 = bsdmainutils_9.0.6 bsdutils_1:2.26.2-6 build-essential_11.7 bzip2_1.0.6-8 c= a-certificates_20150426 coreutils_8.23-4 cpp_4:4.9.2-4 cpp-4.9_4.9.3-3 cpp-= 4.9-aarch64-linux-gnu_4.9.3-3 crossbuild-essential-arm64_12 dash_0.5.7-4+b1= debconf_1.5.57 debconf-i18n_1.5.57 debfoster_2.7-2 debhelper_9.20150628 de= bian-archive-keyring_2014.3 debianutils_4.5.1 dh-autoreconf_10 diffutils_1:= 3.3-1+b1 dmsetup_2:1.02.99-2 dpkg_1.18.1 dpkg-cross_2.6.13 dpkg-dev_1.18.1 = e2fslibs_1.42.13-1 e2fsprogs_1.42.13-1 fakeroot_1.20.2-1 file_1:5.22+15-2 f= indutils_4.4.2-9+b1 g++_4:4.9.2-4 g++-4.9_4.9.3-3 g++-4.9-aarch64-linux-gnu= _4.9.3-3 g++-aarch64-linux-gnu_4.9.2-10.1 gcc_4:4.9.2-4 gcc-4.8-base_4.8.5-= 1 gcc-4.9_4.9.3-3 gcc-4.9-aarch64-linux-gnu_4.9.3-3 gcc-4.9-base_4.9.3-3 gc= c-5-base_5.2.1-11 gcc-aarch64-linux-gnu_4.9.2-10.1 gettext_0.19.4-1 gettext= -base_0.19.4-1 gnupg_1.4.19-3 gpgv_1.4.19-3 grep_2.21-2 groff-base_1.22.3-1= gzip_1.6-4 hostname_3.15 ifupdown_0.7.54 init_1.23 initscripts_2.88dsf-59.= 2 insserv_1.14.0-5 intltool-debian_0.35.0+20060710.2 iproute2_4.0.0-1 isc-d= hcp-client_4.3.2-1 isc-dhcp-common_4.3.2-1 libacl1_2.2.52-2 libapparmor1_2.= 9.2-3 libapt-pkg4.12_1.0.9.10 libasan1_4.9.3-3 libasprintf0c2_0.19.4-1 liba= tm1_1:2.5.1-1.5 libatomic1_5.2.1-11 libattr1_1:2.4.47-2 libaudit-common_1:2= =2E4.2-1 libaudit1_1:2.4.2-1 libauthen-sasl-perl_2.1600-1 libblkid-dev_2.26= =2E2-6 libblkid1_2.26.2-6 libbz2-1.0_1.0.6-8 libc-bin_2.21-0experimental0 l= ibc-dev-bin_2.21-0experimental0 libc6_2.21-0experimental0 libc6-dev_2.21-0e= xperimental0 libcap2_1:2.24-9 libcap2-bin_1:2.24-9 libcilkrts5_5.2.1-11 lib= cloog-isl4_0.18.3-1 libcomerr2_1.42.13-1 libconfig-auto-perl_0.44-1 libconf= ig-inifiles-perl_2.83-3 libcroco3_0.6.8-3+b1 libcryptsetup4_2:1.6.6-5 libdb= 5.3_5.3.28-9 libdebconfclient0_0.195 libdebian-dpkgcross-perl_2.6.13 libdev= mapper1.02.1_2:1.02.99-2 libdns-export100_1:9.9.5.dfsg-10 libdpkg-perl_1.18= =2E1 libencode-locale-perl_1.03-1 libexpat1_2.1.0-7 libexporter-tiny-perl_0= =2E042-1 libfakeroot_1.20.2-1 libfdisk1_2.26.2-6 libffi6_3.2.1-3 libfile-ho= medir-perl_1.00-1 libfile-listing-perl_6.04-1 libfile-which-perl_1.18-1 lib= font-afm-perl_1.20-1 libgc1c2_1:7.2d-6.4 libgcc-4.9-dev_4.9.3-3 libgcc1_1:5= =2E2.1-11 libgcrypt20_1.6.3-2 libgdbm3_1.8.3-13.1 libglib2.0-0_2.44.1-1.1 l= ibgmp10_2:6.0.0+dfsg-7 libgomp1_5.2.1-11 libgpg-error0_1.19-2 libhtml-form-= perl_6.03-1 libhtml-format-perl_2.11-2 libhtml-parser-perl_3.71-2 libhtml-t= agset-perl_3.20-2 libhtml-tree-perl_5.03-2 libhttp-cookies-perl_6.01-1 libh= ttp-daemon-perl_6.01-1 libhttp-date-perl_6.02-1 libhttp-message-perl_6.06-1= libhttp-negotiate-perl_6.00-2 libicu52_52.1-10 libio-html-perl_1.001-1 lib= io-socket-ssl-perl_2.016-1 libio-string-perl_1.08-3 libirs-export91_1:9.9.5= =2Edfsg-10 libisc-export95_1:9.9.5.dfsg-10 libisccfg-export90_1:9.9.5.dfsg-= 10 libisl13_0.14-2 libitm1_5.2.1-11 libkmod2_21-1 liblist-moreutils-perl_0.= 413-1 liblocale-gettext-perl_1.05-9 liblsan0_5.2.1-11 liblwp-mediatypes-per= l_6.02-1 liblwp-protocol-https-perl_6.06-2 liblzma5_5.1.1alpha+20120614-2.1= libmagic1_1:5.22+15-2 libmailtools-perl_2.13-1 libmount1_2.26.2-6 libmpc3_= 1.0.3-1 libmpfr4_3.1.3-1 libncurses5_5.9+20150516-2 libncursesw5_5.9+201505= 16-2 libnet-http-perl_6.07-1 libnet-smtp-ssl-perl_1.01-3 libnet-ssleay-perl= _1.70-1 libpam-modules_1.1.8-3.1 libpam-modules-bin_1.1.8-3.1 libpam-runtim= e_1.1.8-3.1 libpam0g_1.1.8-3.1 libpcre3_2:8.35-7 libpipeline1_1.4.0-1 libpr= ocps4_2:3.3.10-2 libquadmath0_5.2.1-11 libreadline-gplv2-dev_5.2+dfsg-3 lib= readline5_5.2+dfsg-3 libreadline6_6.3-8+b3 libseccomp2_2.2.1-2 libselinux1_= 2.3-2+b1 libsemanage-common_2.3-1 libsemanage1_2.3-1+b2 libsepol1_2.3-2 lib= sigsegv2_2.10-4+b1 libslang2_2.3.0-2+b1 libsmartcols1_2.26.2-6 libss2_1.42.= 13-1 libssl1.0.0_1.0.2d-1 libstdc++-4.9-dev_4.9.3-3 libstdc++6_5.2.1-11 lib= systemd0_222-2 libtext-charwidth-perl_0.04-7+b3 libtext-iconv-perl_1.7-5+b2= libtext-wrapi18n-perl_0.06-7 libtimedate-perl_2.3000-2 libtinfo-dev_5.9+20= 150516-2 libtinfo5_5.9+20150516-2 libtool_2.4.2-1.11 libtsan0_5.2.1-11 libu= bsan0_5.2.1-11 libudev1_222-2 libunistring0_0.9.3-5.2+b1 liburi-perl_1.64-1= libusb-0.1-4_2:0.1.12-25 libustr-1.0-1_1.0.4-5 libuuid1_2.26.2-6 libwww-pe= rl_6.13-1 libwww-robotrules-perl_6.01-1 libxml-namespacesupport-perl_1.11-1= libxml-parser-perl_2.41-3 libxml-sax-base-perl_1.07-1 libxml-sax-expat-per= l_0.40-2 libxml-sax-perl_0.99+dfsg-2 libxml-simple-perl_2.20-1 libxml2_2.9.= 2+dfsg1-3 libxtables10_1.4.21-2+b1 libyaml-libyaml-perl_0.41-6 libyaml-perl= _1.13-1 linux-libc-dev_4.1.2-1~exp1 login_1:4.2-3 lsb-base_4.1+Debian13+nmu= 1 m4_1.4.17-4 make_4.0-8.1 man-db_2.7.0.2-5 mawk_1.3.3-17 mount_2.26.2-6 mu= ltiarch-support_2.19-19 nano_2.4.2-1 ncurses-base_5.9+20150516-2 ncurses-bi= n_5.9+20150516-2 netbase_5.3 openssl_1.0.2d-1 passwd_1:4.2-3 patch_2.7.5-1 = perl_5.20.2-6 perl-base_5.20.2-6 perl-modules_5.20.2-6 po-debconf_1.0.18 pr= ocps_2:3.3.10-2 readline-common_6.3-8 sbuild-build-depends-core-dummy_0.inv= alid.0 sbuild-build-depends-essential-dummy_0.invalid.0 sed_4.2.2-6.1 sensi= ble-utils_0.0.9 startpar_0.59-3 systemd_222-2 systemd-sysv_222-2 sysv-rc_2.= 88dsf-59.2 sysvinit-utils_2.88dsf-59.2 tar_1.27.1-2+b1 tzdata_2015e-1 ucf_3= =2E0030 udev_222-2 util-linux_2.26.2-6 uuid-dev_2.26.2-6 xz-utils_5.1.1alph= a+20120614-2.1 zlib1g_1:1.2.8.dfsg-2+b1 =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Build = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Unpack source =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 gpgv: keyblock resource `/sbuild-nonexistent/.gnupg/trustedkeys.gpg': file = open error gpgv: Signature made Mon Jun 15 01:01:58 2015 UTC using RSA key ID 36DD8C0C gpgv: Can't check signature: public key not found dpkg-source: warning: failed to verify signature on ./xfsprogs_3.2.3.dsc dpkg-source: info: extracting xfsprogs in xfsprogs-3.2.3 dpkg-source: info: unpacking xfsprogs_3.2.3.tar.gz Check disc space =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Sufficient free space for build =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Starting Timed Build Commands = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 /home/debomatic/debomatic/sbuildcommands/starting-build-commands/no-network =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Reading package lists... Building dependency tree... Reading state information... util-linux is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Finished running '/home/debomatic/debomatic/sbuildcommands/starting-buil= d-commands/no-network'. Finished processing commands. =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 User Environment =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 CONFIG_SITE=3D/etc/dpkg-cross/cross-config.arm64 DEB_BUILD_OPTIONS=3Dnocheck HOME=3D/sbuild-nonexistent LOGNAME=3Droot PATH=3D/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SCHROOT_ALIAS_NAME=3Dunstable-amd64-debomatic SCHROOT_CHROOT_NAME=3Dunstable-amd64-debomatic SCHROOT_COMMAND=3Denv SCHROOT_GID=3D0 SCHROOT_GROUP=3Droot SCHROOT_SESSION_ID=3Dunstable-amd64-debomatic-9f549ba3-d88d-4c5c-9d7d-2aea2= 718618b SCHROOT_UID=3D0 SCHROOT_USER=3Droot SHELL=3D/bin/sh TERM=3Dscreen USER=3Droot USERNAME=3Droot dpkg-buildpackage =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 dpkg-buildpackage: warning: using a gain-root-command while being root dpkg-buildpackage: source package xfsprogs dpkg-buildpackage: source version 3.2.3 dpkg-buildpackage: source distribution unstable dpkg-architecture: warning: specified GNU system type aarch64-linux-gnu doe= s not match gcc system type x86_64-linux-gnu, try setting a correct CC envi= ronment variable dpkg-source --before-build xfsprogs-3.2.3 dpkg-buildpackage: host architecture arm64 fakeroot debian/rules clean =3D=3D dpkg-buildpackage: clean test -f debian/rules rm -f built .census mkfs/mkfs.xfs-xfsprogs-udeb /usr/bin/make distclean make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB' make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB' rm -rf debian/xfsprogs debian/xfslibs-dev debian/xfsprogs-udeb rm -f debian/*substvars debian/files* debian/*.debhelper dh_autoreconf_clean dh_clean rm -f debian/xfsprogs.substvars rm -f debian/xfsprogs.*.debhelper rm -rf debian/xfsprogs/ rm -f debian/xfslibs-dev.substvars rm -f debian/xfslibs-dev.*.debhelper rm -rf debian/xfslibs-dev/ rm -f debian/xfsprogs-udeb.substvars rm -f debian/xfsprogs-udeb.*.debhelper rm -rf debian/xfsprogs-udeb/ rm -rf debian/.debhelper/ rm -f debian/*.debhelper.log rm -f debian/files find . \( \( \ \( -path .\*/.git -o -path .\*/.svn -o -path .\*/.bzr -o -path .\*/.hg -o= -path .\*/CVS \) -prune -o -type f -a \ \( -name '#*#' -o -name '.*~' -o -name '*~' -o -name DEADJOE \ -o -name '*.orig' -o -name '*.rej' -o -name '*.bak' \ -o -name '.*.orig' -o -name .*.rej -o -name '.SUMS' \ -o -name TAGS -o \( -path '*/.deps/*' -a -name '*.P' \) \ \) -exec rm -f {} + \) -o \ \( -type d -a -name autom4te.cache -prune -exec rm -rf {} + \) \) dpkg-buildpackage: warning: debian/rules must be updated to support the 'bu= ild-arch' and 'build-indep' targets (at least 'build-arch' seems to be miss= ing) debian/rules build test -f debian/rules =3D=3D dpkg-buildpackage: installer if [ ! -f mkfs/mkfs.xfs-xfsprogs-udeb ]; then \ export DEBUG=3D-DNDEBUG DISTRIBUTION=3Ddebian INSTALL_USER=3Droot INSTALL_= GROUP=3Droot LOCAL_CONFIGURE_OPTIONS=3D"--enable-readline=3Dyes --enable-bl= kid=3Dyes" ; export OPTIMIZER=3D-Os LOCAL_CONFIGURE_OPTIONS=3D"--enable-get= text=3Dno" ; /usr/bin/make include/platform_defs.h; \ for dir in include libxfs libdisk mkfs; do \ /usr/bin/make -C $dir; \ done; \ mv mkfs/mkfs.xfs mkfs/mkfs.xfs-xfsprogs-udeb; \ /usr/bin/make distclean; \ fi make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB' =2E/configure $LOCAL_CONFIGURE_OPTIONS configure: loading site script /etc/dpkg-cross/cross-config.arm64 Reading Cross Config Cache (/etc/dpkg-cross/cross-config.arm64) Reading /etc/dpkg-cross/cross-config.cache checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking how to print strings... printf checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables...=20 checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a sed that does not truncate output... /bin/sed checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for fgrep... /bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+=3D"... yes checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unkno= wn-linux-gnu format... func_convert_file_noop checking how to convert x86_64-unknown-linux-gnu file names to toolchain fo= rmat... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking for gawk... no checking for mawk... mawk checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for mt... no checking if : is a manifest tool... no checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared= libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking for gmake... no checking for make... /usr/bin/make checking for tar... /bin/tar checking for gzip... /bin/gzip checking whether gcc -MM is supported... yes checking for sort... /usr/bin/sort checking whether ln -s works... yes checking for rpm... no checking aio.h usability... yes checking aio.h presence... yes checking for aio.h... yes checking for lio_listio... no checking for lio_listio in -lrt... yes checking uuid.h usability... no checking uuid.h presence... no checking for uuid.h... no checking sys/uuid.h usability... no checking sys/uuid.h presence... no checking for sys/uuid.h... no checking uuid/uuid.h usability... yes checking uuid/uuid.h presence... yes checking for uuid/uuid.h... yes checking for uuid_compare... no checking for uuid_compare in -luuid... no FATAL ERROR: could not find a valid UUID library. Install the Universally Unique Identifiers library package. Makefile:89: recipe for target 'include/builddefs' failed make[1]: *** [include/builddefs] Error 1 make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB' make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB/include' Makefile:19: ../include/builddefs: No such file or directory make[1]: *** No rule to make target '../include/builddefs'. Stop. make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB/include' make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB/libxfs' Makefile:6: ../include/builddefs: No such file or directory make[1]: *** No rule to make target '../include/builddefs'. Stop. make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB/libxfs' make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB/libdisk' Makefile:6: ../include/builddefs: No such file or directory make[1]: *** No rule to make target '../include/builddefs'. Stop. make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB/libdisk' make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB/mkfs' Makefile:6: ../include/builddefs: No such file or directory make[1]: *** No rule to make target '../include/builddefs'. Stop. make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB/mkfs' mv: cannot stat 'mkfs/mkfs.xfs': No such file or directory make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB' make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB' =3D=3D dpkg-buildpackage: configure test -f debian/rules AUTOHEADER=3D/bin/true dh_autoreconf find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o = -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a -type f -exe= c md5sum {} \; > debian/autoreconf.before autoreconf -f -i libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'. libtoolize: copying file `./ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'. libtoolize: copying file `m4/libtool.m4' libtoolize: copying file `m4/ltoptions.m4' libtoolize: copying file `m4/ltsugar.m4' libtoolize: copying file `m4/ltversion.m4' libtoolize: copying file `m4/lt~obsolete.m4' libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o = -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a -type f -exe= c md5sum {} \; > debian/autoreconf.after export DEBUG=3D-DNDEBUG DISTRIBUTION=3Ddebian INSTALL_USER=3Droot INSTALL_G= ROUP=3Droot LOCAL_CONFIGURE_OPTIONS=3D"--enable-readline=3Dyes --enable-blk= id=3Dyes" ; /usr/bin/make include/platform_defs.h make[1]: Entering directory '/=C2=ABPKGBUILDDIR=C2=BB' =2E/configure $LOCAL_CONFIGURE_OPTIONS configure: loading site script /etc/dpkg-cross/cross-config.arm64 Reading Cross Config Cache (/etc/dpkg-cross/cross-config.arm64) Reading /etc/dpkg-cross/cross-config.cache checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking how to print strings... printf checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables...=20 checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a sed that does not truncate output... /bin/sed checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for fgrep... /bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+=3D"... yes checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unkno= wn-linux-gnu format... func_convert_file_noop checking how to convert x86_64-unknown-linux-gnu file names to toolchain fo= rmat... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking for gawk... no checking for mawk... mawk checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for mt... no checking if : is a manifest tool... no checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared= libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking for gmake... no checking for make... /usr/bin/make checking for tar... /bin/tar checking for gzip... /bin/gzip checking whether gcc -MM is supported... yes checking for sort... /usr/bin/sort checking whether ln -s works... yes checking for msgfmt... /usr/bin/msgfmt checking for msgmerge... /usr/bin/msgmerge checking for xgettext... /usr/bin/xgettext checking for rpm... no checking aio.h usability... yes checking aio.h presence... yes checking for aio.h... yes checking for lio_listio... no checking for lio_listio in -lrt... yes checking uuid.h usability... no checking uuid.h presence... no checking for uuid.h... no checking sys/uuid.h usability... no checking sys/uuid.h presence... no checking for sys/uuid.h... no checking uuid/uuid.h usability... yes checking uuid/uuid.h presence... yes checking for uuid/uuid.h... yes checking for uuid_compare... no checking for uuid_compare in -luuid... no FATAL ERROR: could not find a valid UUID library. Install the Universally Unique Identifiers library package. Makefile:89: recipe for target 'include/builddefs' failed make[1]: *** [include/builddefs] Error 1 make[1]: Leaving directory '/=C2=ABPKGBUILDDIR=C2=BB' debian/rules:36: recipe for target '.census' failed make: *** [.census] Error 2 dpkg-buildpackage: error: debian/rules build gave error exit status 2 =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Build finished at 20150728-0308 Finished =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 E: Build failure (dpkg-buildpackage died) =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Cleanup = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Purging /=C2=ABBUILDDIR=C2=BB Not cleaning session: cloned chroot in use =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 =E2=94=82 Summary = =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Build Architecture: amd64 Build-Space: 8980 Build-Time: 21 Distribution: unstable Fail-Stage: build Foreign Architectures: arm64 Host Architecture: arm64 Install-Time: 28 Job: /srv/debomatic-staging/xfsprogs_3.2.3.dsc Machine Architecture: amd64 Package: xfsprogs Package-Time: 89 Source-Version: 3.2.3 Space: 8980 Status: attempted Version: 3.2.3 =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Finished at 20150728-0308 Build needed 00:01:29, 8980k disc space --pWyiEgJYm5f9v55/ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="xfsprogs_3.2.3+nmu1.debdiff" Binary files /tmp/xr3U_4h9in/xfsprogs-3.2.3/.configure.ac.swp and /tmp/NqIHa9bVs5/xfsprogs-3.2.3+nmu1/.configure.ac.swp differ diff -Nru xfsprogs-3.2.3/debian/changelog xfsprogs-3.2.3+nmu1/debian/changelog --- xfsprogs-3.2.3/debian/changelog 2015-06-01 03:35:09.000000000 +0200 +++ xfsprogs-3.2.3+nmu1/debian/changelog 2015-07-30 23:32:50.000000000 +0200 @@ -1,3 +1,12 @@ +xfsprogs (3.2.3+nmu1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Fix FTCBFS. (Closes: #-1) + + Pass --build and --host to configure. + + Compile gen_crc32table and crc32selftest using CC_FOR_BUILD. + + -- Helmut Grohne Thu, 30 Jul 2015 23:00:34 +0200 + xfsprogs (3.2.3) unstable; urgency=low * New upstream release diff -Nru xfsprogs-3.2.3/debian/rules xfsprogs-3.2.3+nmu1/debian/rules --- xfsprogs-3.2.3/debian/rules 2014-11-10 01:51:18.000000000 +0100 +++ xfsprogs-3.2.3+nmu1/debian/rules 2015-07-30 23:23:08.000000000 +0200 @@ -6,6 +6,10 @@ develop = xfslibs-dev bootpkg = xfsprogs-udeb +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +export CC_FOR_BUILD ?= cc + version = $(shell dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2) target ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) udebpkg = $(bootpkg)_$(version)_$(target).udeb @@ -18,11 +22,13 @@ pkgdi = DIST_ROOT=`pwd`/$(dirdi); export DIST_ROOT; stdenv = @GZIP=-q; export GZIP; +configure_options = --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) + options = export DEBUG=-DNDEBUG DISTRIBUTION=debian \ INSTALL_USER=root INSTALL_GROUP=root \ - LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes" ; + LOCAL_CONFIGURE_OPTIONS="$(configure_options) --enable-readline=yes --enable-blkid=yes" ; diopts = $(options) \ - export OPTIMIZER=-Os LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no" ; + export OPTIMIZER=-Os LOCAL_CONFIGURE_OPTIONS="$(configure_options) --enable-gettext=no" ; checkdir = test -f debian/rules build: built diff -Nru xfsprogs-3.2.3/libxfs/Makefile xfsprogs-3.2.3+nmu1/libxfs/Makefile --- xfsprogs-3.2.3/libxfs/Makefile 2014-05-02 02:09:15.000000000 +0200 +++ xfsprogs-3.2.3+nmu1/libxfs/Makefile 2015-07-30 23:32:23.000000000 +0200 @@ -67,7 +67,7 @@ crc32table.h: gen_crc32table.c @echo " [CC] gen_crc32table" - $(Q) $(CC) $(CFLAGS) -o gen_crc32table $< + $(Q) $(CC_FOR_BUILD) $(CFLAGS) -o gen_crc32table $< @echo " [GENERATE] $@" $(Q) ./gen_crc32table > crc32table.h @@ -78,7 +78,7 @@ # disk. crc32selftest: gen_crc32table.c crc32table.h crc32.c @echo " [TEST] CRC32" - $(Q) $(CC) $(CFLAGS) -D CRC32_SELFTEST=1 crc32.c -o $@ + $(Q) $(CC_FOR_BUILD) $(CFLAGS) -D CRC32_SELFTEST=1 crc32.c -o $@ $(Q) ./$@ include $(BUILDRULES) --pWyiEgJYm5f9v55/-- From darrick.wong@oracle.com Thu Jul 30 17:14:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 166C37F69 for ; Thu, 30 Jul 2015 17:14:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E759A304039 for ; Thu, 30 Jul 2015 15:14:17 -0700 (PDT) X-ASG-Debug-ID: 1438294455-04cb6c674011d730001-NocioJ Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) by cuda.sgi.com with ESMTP id 6ENAy7kCLH0metxV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 30 Jul 2015 15:14:15 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.69 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t6UMED9O025334 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 30 Jul 2015 22:14:14 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t6UMEDU6011889 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Thu, 30 Jul 2015 22:14:13 GMT Received: from abhmp0008.oracle.com (abhmp0008.oracle.com [141.146.116.14]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t6UMEDjD026961; Thu, 30 Jul 2015 22:14:13 GMT Received: from localhost (/10.145.179.157) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 30 Jul 2015 15:14:12 -0700 Date: Thu, 30 Jul 2015 15:14:11 -0700 From: "Darrick J. Wong" To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH 05/24] xfs: define the on-disk refcount btree format Message-ID: <20150730221411.GJ10043@birch.djwong.org> X-ASG-Orig-Subj: Re: [PATCH 05/24] xfs: define the on-disk refcount btree format References: <20150729223258.17414.91354.stgit@birch.djwong.org> <20150729223330.17414.82692.stgit@birch.djwong.org> <20150730004215.GI16638@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150730004215.GI16638@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-Barracuda-Connect: aserp1040.oracle.com[141.146.126.69] X-Barracuda-Start-Time: 1438294455 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21225 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines On Thu, Jul 30, 2015 at 10:42:15AM +1000, Dave Chinner wrote: > On Wed, Jul 29, 2015 at 03:33:30PM -0700, Darrick J. Wong wrote: > > Start constructing the refcount btree implementation by establishing > > the on-disk format and everything needed to read, write, and > > manipulate the refcount btree blocks. > > > > Signed-off-by: Darrick J. Wong > .... > > +STATIC bool > > +xfs_refcountbt_verify( > > + struct xfs_buf *bp) > > feel free to shorten that prefix to xfs_refcbt_..... Ok, will do for next release. > > > +{ > > + struct xfs_mount *mp = bp->b_target->bt_mount; > > + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); > > + struct xfs_perag *pag = bp->b_pag; > > + unsigned int level; > > + > > + if (block->bb_magic != cpu_to_be32(XFS_REFC_CRC_MAGIC)) > > + return false; > > + > > + if (!xfs_sb_version_hasreflink(&mp->m_sb)) > > + return false; > > + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) > > + return false; > > + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) > > + return false; > > + if (pag && > > + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) > > + return false; > > + > > + level = be16_to_cpu(block->bb_level); > > + if (pag && pag->pagf_init) { > > + if (level >= pag->pagf_refcount_level) > > + return false; > > + } else if (level >= mp->m_ag_maxlevels) > > + return false; > > + > > + /* numrecs verification */ > > + if (be16_to_cpu(block->bb_numrecs) > mp->m_refc_mxr[level != 0]) > > + return false; > > + > > + /* sibling pointer verification */ > > + if (!block->bb_u.s.bb_leftsib || > > + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && > > + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) > > + return false; > > + if (!block->bb_u.s.bb_rightsib || > > + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && > > + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) > > + return false; > > I'm starting to think there's a xfs_btree_sblock_verify() function > we need to factor out of all these btree verification functions... Something like this? --D From: Darrick J. Wong Subject: [PATCH] libxfs: refactor short btree block verification Create xfs_btree_sblock_verify() to verify short-format btree blocks (i.e. the per-AG btrees with 32-bit block pointers) instead of open-coding them. Signed-off-by: Darrick J. Wong --- fs/xfs/libxfs/xfs_alloc_btree.c | 34 ++-------------------- fs/xfs/libxfs/xfs_btree.c | 58 ++++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_btree.h | 3 ++ fs/xfs/libxfs/xfs_ialloc_btree.c | 30 +++----------------- fs/xfs/libxfs/xfs_rmap_btree.c | 25 +++------------- 5 files changed, 73 insertions(+), 77 deletions(-) diff --git a/fs/xfs/libxfs/xfs_alloc_btree.c b/fs/xfs/libxfs/xfs_alloc_btree.c index 59d521c..1352322 100644 --- a/fs/xfs/libxfs/xfs_alloc_btree.c +++ b/fs/xfs/libxfs/xfs_alloc_btree.c @@ -293,14 +293,7 @@ xfs_allocbt_verify( level = be16_to_cpu(block->bb_level); switch (block->bb_magic) { case cpu_to_be32(XFS_ABTB_CRC_MAGIC): - if (!xfs_sb_version_hascrc(&mp->m_sb)) - return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) - return false; - if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) - return false; - if (pag && - be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + if (!xfs_btree_sblock_v5hdr_verify(bp)) return false; /* fall through */ case cpu_to_be32(XFS_ABTB_MAGIC): @@ -311,14 +304,7 @@ xfs_allocbt_verify( return false; break; case cpu_to_be32(XFS_ABTC_CRC_MAGIC): - if (!xfs_sb_version_hascrc(&mp->m_sb)) - return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) - return false; - if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) - return false; - if (pag && - be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + if (!xfs_btree_sblock_v5hdr_verify(bp)) return false; /* fall through */ case cpu_to_be32(XFS_ABTC_MAGIC): @@ -332,21 +318,7 @@ xfs_allocbt_verify( return false; } - /* numrecs verification */ - if (be16_to_cpu(block->bb_numrecs) > mp->m_alloc_mxr[level != 0]) - return false; - - /* sibling pointer verification */ - if (!block->bb_u.s.bb_leftsib || - (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && - block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) - return false; - if (!block->bb_u.s.bb_rightsib || - (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && - block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) - return false; - - return true; + return xfs_btree_sblock_verify(bp, mp->m_alloc_mxr[level != 0]); } static void diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index 4c9b9b3..d0ca2ca 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -4068,3 +4068,61 @@ xfs_btree_change_owner( return 0; } + +/** + * xfs_btree_sblock_v5hdr_verify() -- verify the v5 fields of a short-format + * btree block + * + * @bp: buffer containing the btree block + * @max_recs: pointer to the m_*_mxr max records field in the xfs mount + * @pag_max_level: pointer to the per-ag max level field + */ +bool +xfs_btree_sblock_v5hdr_verify( + struct xfs_buf *bp) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); + struct xfs_perag *pag = bp->b_pag; + + if (!xfs_sb_version_hascrc(&mp->m_sb)) + return false; + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) + return false; + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) + return false; + if (pag && be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + return false; + return true; +} + +/** + * xfs_btree_sblock_verify() -- verify a short-format btree block + * + * @bp: buffer containing the btree block + * @max_recs: maximum records allowed in this btree node + */ +bool +xfs_btree_sblock_verify( + struct xfs_buf *bp, + unsigned int max_recs) +{ + struct xfs_mount *mp = bp->b_target->bt_mount; + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); + + /* numrecs verification */ + if (be16_to_cpu(block->bb_numrecs) > max_recs) + return false; + + /* sibling pointer verification */ + if (!block->bb_u.s.bb_leftsib || + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) + return false; + if (!block->bb_u.s.bb_rightsib || + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) + return false; + + return true; +} diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h index 48ab2b1..dd29d15 100644 --- a/fs/xfs/libxfs/xfs_btree.h +++ b/fs/xfs/libxfs/xfs_btree.h @@ -471,4 +471,7 @@ static inline int xfs_btree_get_level(struct xfs_btree_block *block) #define XFS_BTREE_TRACE_ARGR(c, r) #define XFS_BTREE_TRACE_CURSOR(c, t) +bool xfs_btree_sblock_v5hdr_verify(struct xfs_buf *bp); +bool xfs_btree_sblock_verify(struct xfs_buf *bp, unsigned int max_recs); + #endif /* __XFS_BTREE_H__ */ diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c index b96db1c..2d692fb 100644 --- a/fs/xfs/libxfs/xfs_ialloc_btree.c +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c @@ -222,7 +222,6 @@ xfs_inobt_verify( { struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); - struct xfs_perag *pag = bp->b_pag; unsigned int level; /* @@ -238,14 +237,7 @@ xfs_inobt_verify( switch (block->bb_magic) { case cpu_to_be32(XFS_IBT_CRC_MAGIC): case cpu_to_be32(XFS_FIBT_CRC_MAGIC): - if (!xfs_sb_version_hascrc(&mp->m_sb)) - return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) - return false; - if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) - return false; - if (pag && - be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + if (!xfs_btree_sblock_v5hdr_verify(bp)) return false; /* fall through */ case cpu_to_be32(XFS_IBT_MAGIC): @@ -255,24 +247,12 @@ xfs_inobt_verify( return 0; } - /* numrecs and level verification */ + /* level verification */ level = be16_to_cpu(block->bb_level); if (level >= mp->m_in_maxlevels) - return false; - if (be16_to_cpu(block->bb_numrecs) > mp->m_inobt_mxr[level != 0]) - return false; - - /* sibling pointer verification */ - if (!block->bb_u.s.bb_leftsib || - (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && - block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) - return false; - if (!block->bb_u.s.bb_rightsib || - (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && - block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) - return false; - - return true; + return false; + + return xfs_btree_sblock_verify(bp, mp->m_inobt_mxr[level != 0]); } static void diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c index 0b396e6..208435e 100644 --- a/fs/xfs/libxfs/xfs_rmap_btree.c +++ b/fs/xfs/libxfs/xfs_rmap_btree.c @@ -235,35 +235,18 @@ xfs_rmapbt_verify( if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) return false; - if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) - return false; - if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) - return false; - if (pag && be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) + if (!xfs_btree_sblock_v5hdr_verify(bp)) return false; + /* level verification */ level = be16_to_cpu(block->bb_level); if (pag && pag->pagf_init) { if (level >= pag->pagf_levels[XFS_BTNUM_RMAPi]) return false; } else if (level >= mp->m_ag_maxlevels) - return false; - - /* numrecs verification */ - if (be16_to_cpu(block->bb_numrecs) > mp->m_rmap_mxr[level != 0]) - return false; - - /* sibling pointer verification */ - if (!block->bb_u.s.bb_leftsib || - (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && - block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) - return false; - if (!block->bb_u.s.bb_rightsib || - (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && - block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) - return false; + return false; - return true; + return xfs_btree_sblock_verify(bp, mp->m_rmap_mxr[level != 0]); } static void From david@fromorbit.com Thu Jul 30 21:08:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A22147F6C for ; Thu, 30 Jul 2015 21:08:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3D8D4AC004 for ; Thu, 30 Jul 2015 19:08:03 -0700 (PDT) X-ASG-Debug-ID: 1438308476-04cbb0416c136680001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id VAVfGUHWJQjitE6c for ; Thu, 30 Jul 2015 19:07:57 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CfCACo17pVPG0mLHlbgxpUaYJVg3yiNgwBAQEBAQEGlQ6FewQCgTtNAQEBAQEBBwEBAQFBP4RkHCMYJDQFJQMHLYgtxkYZhgaKNh6EFQWHGIpegwKEe4dMgUmEIIMThQWLPYQ1LDGCTAEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 31 Jul 2015 11:33:30 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZKzfV-0001Dt-Od; Fri, 31 Jul 2015 12:03:29 +1000 Date: Fri, 31 Jul 2015 12:03:29 +1000 From: Dave Chinner To: torvalds@linux-foundation.org Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: [GIT PULL] xfs: updates for 4.2-rc4 Message-ID: <20150731020329.GO16638@dastard> X-ASG-Orig-Subj: [GIT PULL] xfs: updates for 4.2-rc4 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438308477 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21232 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hi Linus, Can you please pull the XFS fixes from the tag below? There are a couple of recently found, long standing remote attribute corruption fixes caused by log recovery getting confused after a crash, and the new DAX code in XFS (merged in 4.2-rc1) needs to actually use the DAX fault path on read faults. Thanks! -Dave. The following changes since commit bc0195aad0daa2ad5b0d76cce22b167bc3435590: Linux 4.2-rc2 (2015-07-12 15:10:30 -0700) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git tags/xfs-for-linus-4.2-rc4 for you to fetch changes up to df150ed102baa0e78c06e08e975dfb47147dd677: xfs: remote attributes need to be considered data (2015-07-29 11:48:02 +1000) ---------------------------------------------------------------- xfs: updates for 4.2-rc4 - remote attribute log recovery corruption fixes - DAX page faults need to use direct mappings, not a page cache mapping. ---------------------------------------------------------------- Dave Chinner (3): xfs: call dax_fault on read page faults for DAX xfs: remote attribute headers contain an invalid LSN xfs: remote attributes need to be considered data fs/dax.c | 14 +++++++++++-- fs/xfs/libxfs/xfs_attr_remote.c | 44 ++++++++++++++++++++++++++++++--------- fs/xfs/xfs_file.c | 21 +++++++++++++------ fs/xfs/xfs_log_recover.c | 11 +++++++--- 4 files changed, 69 insertions(+), 21 deletions(-) -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jul 30 21:55:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 78F307F6C for ; Thu, 30 Jul 2015 21:55:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1EEC4304032 for ; Thu, 30 Jul 2015 19:55:10 -0700 (PDT) X-ASG-Debug-ID: 1438311307-04bdf06bcf7ef80001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 9yJHEwrgDmjN2HtK for ; Thu, 30 Jul 2015 19:55:08 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DYCABm4rpVPG0mLHlbgxqBPYJVg3yiQgEBAQEBAQabCQICAQECgTtNAQEBAQEBBwEBAQFBP4QkAQEEMgEjIxAIAw4KCSUPBSUDBxoTiC3GIAEBCAIBHxmGBoUvhQcHhCwFhxaGYIcCjEeZPoQ1LDGCTAEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 31 Jul 2015 12:25:07 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZL0TS-0001I7-Or; Fri, 31 Jul 2015 12:55:06 +1000 Date: Fri, 31 Jul 2015 12:55:06 +1000 From: Dave Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers Message-ID: <20150731025506.GP16638@dastard> X-ASG-Orig-Subj: Re: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers References: <1437927209-31354-1-git-send-email-hch@lst.de> <1437927209-31354-7-git-send-email-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1437927209-31354-7-git-send-email-hch@lst.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438311307 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21233 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Jul 26, 2015 at 06:13:25PM +0200, Christoph Hellwig wrote: > Once installed these are system headers, so we need to use <>-style include > statements between them. > > Signed-off-by: Christoph Hellwig This causes a build failure on my system when doing a parallel build. For some reason, make is trying to install libxfs headers before the include headers, and fails because include/xfs doesn't yet exist. ..... config.status: executing libtool commands [HEADERS] libxfs [HEADERS] include ln: failed to create symbolic link ../include/xfs/xfs_fs.h: No such file or directory Makefile:141: recipe for target 'xfs_fs.h-hdrs' failed .... I made a small change to pull the creation of include/xfs out of include/Makefile and up into include/buildrules where it is done before running the install-headers rule on each header subdir, and that fixes it. i.e: diff --git a/include/Makefile b/include/Makefile index bd8b0ca..705090a 100644 --- a/include/Makefile +++ b/include/Makefile @@ -67,12 +67,9 @@ include $(BUILDRULES) # set up include/xfs header directory install-headers: $(addsuffix -hdrs, $(HFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) -%-hdrs: xfs +%-hdrs: $(Q)$(LN_S) -f $(PWD)/include/$* xfs/$* -xfs: - @mkdir -p xfs - install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) diff --git a/include/buildrules b/include/buildrules index 72491db..1ece843 100644 --- a/include/buildrules +++ b/include/buildrules @@ -14,10 +14,16 @@ clean clobber : $(addsuffix -clean,$(SUBDIRS)) $(Q)$(MAKE) $(MAKEOPTS) -C $* clean ifdef HDR_SUBDIRS -headers: $(addsuffix -headers, $(HDR_SUBDIRS)) +.PHONY: .xfs + +headers: .xfs $(addsuffix -headers, $(HDR_SUBDIRS)) + %-headers: @echo " [HEADERS] $*" $(Q)$(MAKE) $(MAKEOPTS) -C $* NODEP=1 install-headers + +.xfs: + @mkdir -p include/xfs endif # Never blow away subdirs Now I've just got to work out which patch is breaking 'make deb'.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From ftpmaster@ftp-master.debian.org Thu Jul 30 23:46:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EB29C7F62 for ; Thu, 30 Jul 2015 23:46:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 73459AC001 for ; Thu, 30 Jul 2015 21:46:27 -0700 (PDT) X-ASG-Debug-ID: 1438317985-04cb6c673d13d950001-NocioJ Received: from muffat.debian.org (muffat.debian.org [206.12.19.146]) by cuda.sgi.com with ESMTP id 9ojCmJ3Cj8veTY3L (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 21:46:25 -0700 (PDT) X-Barracuda-Envelope-From: ftpmaster@ftp-master.debian.org X-Barracuda-Apparent-Source-IP: 206.12.19.146 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by muffat.debian.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84) (envelope-from ) id 1ZL2DA-0003sy-Rk for xfs@oss.sgi.com; Fri, 31 Jul 2015 04:46:24 +0000 Received: from dak-unpriv by franck.debian.org with local (Exim 4.84) (envelope-from ) id 1ZL2D9-0006IL-Uy for xfs@oss.sgi.com; Fri, 31 Jul 2015 04:46:23 +0000 To: xfs@oss.sgi.com From: Debian FTP Masters Subject: Processing of xfsprogs_3.2.4_i386.changes Date: Fri, 31 Jul 2015 04:46:23 +0000 X-ASG-Orig-Subj: Processing of xfsprogs_3.2.4_i386.changes X-Debian: DAK X-DAK: DAK Precedence: bulk Auto-Submitted: auto-generated X-Debian-Package: xfsprogs Message-Id: X-Barracuda-Connect: muffat.debian.org[206.12.19.146] X-Barracuda-Start-Time: 1438317985 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21234 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- xfsprogs_3.2.4_i386.changes uploaded successfully to localhost along with the files: xfsprogs_3.2.4.dsc xfsprogs_3.2.4.tar.gz xfsprogs_3.2.4_i386.deb xfslibs-dev_3.2.4_i386.deb xfsprogs-udeb_3.2.4_i386.udeb Greetings, Your Debian queue daemon (running on host franck.debian.org) From envelope@ftp-master.debian.org Thu Jul 30 23:49:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 837097F62 for ; Thu, 30 Jul 2015 23:49:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5AFD9304032 for ; Thu, 30 Jul 2015 21:49:14 -0700 (PDT) X-ASG-Debug-ID: 1438318152-04cb6c673e13f1a0001-NocioJ Received: from muffat.debian.org (muffat.debian.org [206.12.19.146]) by cuda.sgi.com with ESMTP id 94nvubYZP6j6wNOs (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 21:49:12 -0700 (PDT) X-Barracuda-Envelope-From: envelope@ftp-master.debian.org X-Barracuda-Apparent-Source-IP: 206.12.19.146 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by muffat.debian.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84) (envelope-from ) id 1ZL2Fr-00045f-Tj; Fri, 31 Jul 2015 04:49:11 +0000 Received: from dak by franck.debian.org with local (Exim 4.84) (envelope-from ) id 1ZL2Fq-0006xS-T2; Fri, 31 Jul 2015 04:49:10 +0000 From: Debian FTP Masters To: XFS Development Team , Nathan Scott X-DAK: dak process-upload X-Debian: DAK X-Debian-Package: xfsprogs Precedence: bulk Auto-Submitted: auto-generated MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: xfsprogs_3.2.4_i386.changes ACCEPTED into unstable Message-Id: X-ASG-Orig-Subj: xfsprogs_3.2.4_i386.changes ACCEPTED into unstable Date: Fri, 31 Jul 2015 04:49:10 +0000 X-Barracuda-Connect: muffat.debian.org[206.12.19.146] X-Barracuda-Start-Time: 1438318152 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21234 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Accepted: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Format: 1.8 Date: Wed, 29 Jul 2015 15:31:27 +1000 Source: xfsprogs Binary: xfsprogs xfslibs-dev xfsprogs-udeb Architecture: source i386 Version: 3.2.4 Distribution: unstable Urgency: low Maintainer: XFS Development Team Changed-By: Nathan Scott Description: xfslibs-dev - XFS filesystem-specific static libraries and headers xfsprogs - Utilities for managing the XFS filesystem xfsprogs-udeb - A stripped-down version of xfsprogs, for debian-installer (udeb) Changes: xfsprogs (3.2.4) unstable; urgency=low . * New upstream release * Fix xfs_metadump information leak (CVE-2012-2150) Checksums-Sha1: dfad01179b3c16313265194bf563ff1f041770a2 1780 xfsprogs_3.2.4.dsc 459f0194b08b579cf13592952b9e4ae650e86918 1494705 xfsprogs_3.2.4.tar.gz 58a22015fa94c121c0b16d80a9df2d7401ea58c3 726844 xfsprogs_3.2.4_i386.deb 20ebe019f1268203394e81c7079dabb3b5d459de 31874 xfslibs-dev_3.2.4_i386.deb 01e166e75ef74920ade099a7b88505ccf5bfd327 146036 xfsprogs-udeb_3.2.4_i386.udeb Checksums-Sha256: 8fc122a88c6995aca119bf1e904b856cd07b1bce9a9c61589e013884e84c36cc 1780 xfsprogs_3.2.4.dsc 3017ef58193b064e1e6042ff4648387259bb3e5d9d0f2a941c00bc62ab2a7634 1494705 xfsprogs_3.2.4.tar.gz 5a771107dd1fafb9b8238bca81d194083089bd6edeed9ebeb4ec1ee957d75749 726844 xfsprogs_3.2.4_i386.deb 02ea6f248747b19f03f1efff80539027eeb1e61c67c2b91d89ad47c1c86fb3b0 31874 xfslibs-dev_3.2.4_i386.deb 0ea81572f79d62707f4ced6a7a05b24f103f85a6a6e85130e9e0f084c194e7c1 146036 xfsprogs-udeb_3.2.4_i386.udeb Files: 6100348b033b11e34e58907551f7db13 1780 admin optional xfsprogs_3.2.4.dsc f78e169728f4156645fc37e95da5f020 1494705 admin optional xfsprogs_3.2.4.tar.gz 71968e8300fe186539fbda44bfab49e3 726844 admin optional xfsprogs_3.2.4_i386.deb 998f5a0b8fb21eee5ce6ef4e03cea1f9 31874 libdevel extra xfslibs-dev_3.2.4_i386.deb 3a46ad4f9afd807a3b5019ee7c4929a4 146036 debian-installer optional xfsprogs-udeb_3.2.4_i386.udeb Package-Type: udeb -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAEBCAAGBQJVudoFAAoJEP4IQu423YwM02UP/jpgT3u60xnf7UxeJXazoDFV JWRKie39YyXL0IOWqa/+mbBTFr7w6AXIHx7bVvec6uqYf/jhOjzfbqf7mMt99/4C WaDz7mb/ty44ZFpWJiC00QH6xJfhNe328KPgL1+7rLKi0+3ABmiIX+SL2uzaftWK HlJLw53jm6yCrACbbZD5Sz9hkVm8IGz+RT5F4yLUhmR54q13Pu7WDdQoUy5FmbE6 WfWRtwOPAuGusejkkHByqhm+En1O9ewLqGu1AbQW1DnpfI8jklRXRA9XS7rxO4ee H5VYK/CodKjxR2v21Ycv/Dc8Jl5esfSrZ2xEorG0wI7oPdaKgxi8tg8ZpnOC1MiE Acii0q14S2dDDYPjpmlcbxrHa42rShjwMduiKk57E912Cq2PtSiJbf3+OkxK1wKi MJzqKGQMgMD5K9me4fThH4n7cJMaAq/05+ceNTOQ67JV6mofwdNHZboOi2NHiCy6 KJISdHcBnFp+ZvKanQ3BHQaXHR1rJahyyKcFamYg7t1Aiezk8WOCBoz++s+JWkuE FP/pbUDcO7BE/C3xB+lui8Los9DjbFNrwuWEaqvB1Tjj79ZaauVhNIu7Od7VngqP aPgoUFp4YAj+gPMjuTRffnkIv0xMn0CdtKr782BvReFGojvke3uBu+0UDcVEl5Ol 6uM99/vp887ySlSB0X1z =k75m -----END PGP SIGNATURE----- Thank you for your contribution to Debian. From debbugs@buxtehude.debian.org Thu Jul 30 23:57:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DAC007F66 for ; Thu, 30 Jul 2015 23:57:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id BB998304032 for ; Thu, 30 Jul 2015 21:57:10 -0700 (PDT) X-ASG-Debug-ID: 1438318628-04cbb0416d15e6d0001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 8B7hPVLDt86cISWB (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 21:57:09 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZL2NW-0004kP-6d; Fri, 31 Jul 2015 04:57:06 +0000 X-Loop: owner@bugs.debian.org Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 From: owner@bugs.debian.org (Debian Bug Tracking System) To: Salvatore Bonaccorso CC: xfs@oss.sgi.com Subject: Processed: fixed 793495 in 3.2.4 Message-ID: X-ASG-Orig-Subj: Processed: fixed 793495 in 3.2.4 References: <1438318427-808-bts-carnil@debian.org> X-Debian-PR-Package: xfsprogs X-Debian-PR-Source: xfsprogs X-Debian-PR-Message: transcript X-Loop: owner@bugs.debian.org Date: Fri, 31 Jul 2015 04:57:06 +0000 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1438318628 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21235 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Processing commands for control@bugs.debian.org: > fixed 793495 3.2.4 Bug #793495 [xfsprogs] CVE-2012-2150 xfsprogs: xfs_metadump information dis= closure Bug #793496 [xfsprogs] xfsprogs: CVE-2012-2150: xfs_metadump information di= sclosure flaw Marked as fixed in versions xfsprogs/3.2.4. Marked as fixed in versions xfsprogs/3.2.4. > thanks Stopping processing here. Please contact me if you need assistance. --=20 793495: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793495 793496: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D793496 Debian Bug Tracking System Contact owner@bugs.debian.org with problems From 3fhi7VQ0JA08PLJPMQLJQDwErx3rz2.t53Ew9599.9xz.t53@trix.bounces.google.com Fri Jul 31 01:41:10 2015 Return-Path: <3fhi7VQ0JA08PLJPMQLJQDwErx3rz2.t53Ew9599.9xz.t53@trix.bounces.google.com> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=FREEMAIL_FROM, FROM_STARTS_WITH_NUMS,HTML_MESSAGE,T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 25FA47F62 for ; Fri, 31 Jul 2015 01:41:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E404C304039 for ; Thu, 30 Jul 2015 23:41:06 -0700 (PDT) X-ASG-Debug-ID: 1438324863-04bdf06bcf85760001-NocioJ Received: from mail-qk0-f197.google.com (mail-qk0-f197.google.com [209.85.220.197]) by cuda.sgi.com with ESMTP id IPkW6NH8Gsl2KRXB (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 30 Jul 2015 23:41:04 -0700 (PDT) X-Barracuda-Envelope-From: 3fhi7VQ0JA08PLJPMQLJQDwErx3rz2.t53Ew9599.9xz.t53@trix.bounces.google.com X-Barracuda-Apparent-Source-IP: 209.85.220.197 X-Barracuda-IPDD: Level1 [trix.bounces.google.com/209.85.220.197] Received: by qkdv3 with SMTP id v3so75214037qkd.1 for ; Thu, 30 Jul 2015 23:41:03 -0700 (PDT) X-Barracuda-IPDD: Level1 [trix.bounces.google.com/209.85.220.197] X-Barracuda-IPDD: Level1 [trix.bounces.google.com/209.85.220.197] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:message-id:date:subject:from:to:content-type; bh=obS4g2QQxE94DJU3MCWHDcYgO1D0LQL6DSvIeYf/atk=; b=O0uru1gtgmM6u686o75yjWnVN2twbydcCT8ztF7rXybJXesAv+83LdSG4Zwu0N56W0 7BGqhiBhvjkBHKealCE53M/WPiP7vWhxAMnu7TEB+ZSl7d0v0vFcD5oz5fDsZNNrikO2 jZUzJ17T36udSc29hBfTWIahGWidJphMK5SDFU3xdLlRof8pkF/Qr780FdOSEWDNOcpy ztIkmphECWnXYlgLpIogCvDRfe3uszWH9K+v1nYERykz7plOsbJYcR6NvIG5rGxBAQtC tGb/h3T7anuq90GzYIvFDVOTWIiGZ3ZlOAtoC9PLN0jld8GmS30ErknlluA/sLrPxU4I Y9VA== MIME-Version: 1.0 X-Received: by 10.140.217.202 with SMTP id n193mt1801711qhb.8.1438324862850; Thu, 30 Jul 2015 23:41:02 -0700 (PDT) Reply-To: 842859429wfxa@gmail.com X-No-Auto-Attachment: 1 Message-ID: <001a1137350285ae9d051c261a2b@google.com> Date: Fri, 31 Jul 2015 06:41:03 +0000 Subject: =?GB2312?B?u7nU2tPDtKvNs7XEt73Kvb+qt6K/zbunwvCjvw==?= From: 842859429wfxa@gmail.com X-ASG-Orig-Subj: =?GB2312?B?u7nU2tPDtKvNs7XEt73Kvb+qt6K/zbunwvCjvw==?= To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001a113735028fedc2051c261a45 X-Barracuda-Connect: mail-qk0-f197.google.com[209.85.220.197] X-Barracuda-Start-Time: 1438324864 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.73 X-Barracuda-Spam-Status: No, SCORE=0.73 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, FROM_STARTS_WITH_NUMS, FROM_STARTS_WITH_NUMS_2, HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21236 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.01 FROM_STARTS_WITH_NUMS From: starts with many numbers -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.72 FROM_STARTS_WITH_NUMS_2 From: starts with many numbers --001a113735028fedc2051c261a45 Content-Type: text/plain; charset=GB2312; format=flowed; delsp=yes Content-Transfer-Encoding: base64 xPq6w6OszfjC59fK1LTV4sO0t+G4u6OsxPrU9cO0xNy8zND4tci0/aOs1ve2r7P2u/ejrNGw1dK2 qbWloaMNCs7Sw8fKx9K7v+7N4sOzv827p8Gqz7W3vcq9y9HL98jtvP6jrM2ouf3J6NbDxOPDx7L6 xre1xLnYvPy0yrvy1d/E48PHtcTEvw0Kseq/zbuntcS52Lz8tMqjrNTayKvH8rulwarN+MnPy9HL 98T6tcTEv7Hqv827p9DFz6K1xA0Ky9HL97W9v827p9DFz6LWrrrzyO28/tfUtq+3osvNv6q3otDF warPtb/Nu6csv827p9PQ0uLP8rLJubrE+rXEsvrGt77Nu+ENCrvYuLTRr8XMuPjE+g0K0ruhosjt vP7Kx7rNzfjC56Giy9HL99L9x+bNrLK9uPzQwqOssaPWpMS/seq/zbun18rUtMq1yrG4/NDCoaMN Crb+oaLSu8zsv8nS1MGqz7XJz9bBydkzLTTN8rj2v827p6Gj0KfCyrjfo6zEv7HqvqvXvKGjDQrI /aGisrvP3tbGudi8/LTKo6zE+r/J0tTL0cv3yM66zrL6xrejrMjOus7Q0NK108XWysS/serHsdTa v827p9DFz6Khow0Ky8Shor/J0tTWuLaoxL+x6rn6vNK78sf40/K1pbbAvqvIt7aozrvEv7Hqx7HU 2r/Nu6ehow0KzuWhotbHxNzIureiyseyydPDtuDEo7/poaK24Nb3zOKhorbg1cq6xcSjxOLK1rmk 0ru21NK7t7TGwbHOvOTQqtDUwta7u9fUDQq2r7eiy82jrNXi0fmx3MPi08rP5LG7xsGxzqGjDQq4 /Lbgz+rH6SDXydGvIDI4OTkyODYxMTUgo6hRUSkgw+K30dTaz9+4+b7duMO5q8u+svrGt7nYvPy0 ytHdyr4syOe6zsvRy/cNCsirx/K1xL/Nu6cNCsrWu/qhqqGqMTM1MzM1NjM0MDIgxbfPyMn6DQoN Cg0KDQoNCg0KDQoNCg0KztLS0dH7x+vE+szu0LSx7bWlILu51NrTw7SrzbO1xLe9yr2/qreiv827 p8Lwo7+hoyDSqszu0LS0y7HttaWjrMfrt8POyqO6DQpodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9m b3Jtcy9kLzFYLVN4N18tZUpXQ1VIWjhnRHlLQVhrV0EyV2FVQlJ0ZU1RUFpxcF9venJRL3ZpZXdm b3JtP2M9MCZ3PTEmdXNwPW1haWxfZm9ybV9saW5rDQo= --001a113735028fedc2051c261a45 Content-Type: text/html; charset=GB2312 Content-Transfer-Encoding: base64 PGh0bWw+PGJvZHkgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9FbWFpbE1l c3NhZ2UiIHN0eWxlPSIiPjxkaXYgY2xhc3M9InNzLWVtYWlsLWJvZHkiIHN0eWxlPSJkaXNwbGF5 OmlubGluZTt3aWR0aDo1NzZweDsiPjxkaXYgaXRlbXByb3A9ImFjdGlvbiIgaXRlbXNjb3BlIGl0 ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9WaWV3QWN0aW9uIiBzdHlsZT0iIj48bWV0YSBpdGVt cHJvcD0ibmFtZSIgY29udGVudD0izO7QtLHttaUiIHN0eWxlPSIiPgo8bWV0YSBpdGVtcHJvcD0i dXJsIiBjb250ZW50PSJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kLzFYLVN4N18tZUpX Q1VIWjhnRHlLQVhrV0EyV2FVQlJ0ZU1RUFpxcF9venJRL3ZpZXdmb3JtP2M9MCZhbXA7dz0xJmFt cDt1c3A9bWFpbF9nb3RvX2Zvcm0iIHN0eWxlPSIiPjwvZGl2Pgo8cCBpdGVtcHJvcD0iZGVzY3Jp cHRpb24iIHN0eWxlPSIiPjxicj7E+rrDo6zN+MLn18rUtNXiw7S34bi7o6zE+tT1w7TE3LzM0Pi1 yLT9o6zW97avs/a796Os0bDV0raptaWhozxwPs7Sw8fKx9K7v+7N4sOzv827p8Gqz7W3vcq9y9HL 98jtvP6jrM2ouf3J6NbDxOPDx7L6xre1xLnYvPy0yrvy1d/E48PHtcTEv7Hqv827p7XEudi8/LTK o6zU2sirx/K7pcGqzfjJz8vRy/fE+rXExL+x6r/Nu6fQxc+itcQ8YnI+y9HL97W9v827p9DFz6LW rrrzyO28/tfUtq+3osvNv6q3otDFwarPtb/Nu6csv827p9PQ0uLP8rLJubrE+rXEsvrGt77Nu+G7 2Li00a/FzLj4xPogPHA+ICAgINK7oaLI7bz+yse6zc34wuehosvRy/fS/cfmzayyvbj80MKjrLGj 1qTEv7Hqv827p9fK1LTKtcqxuPzQwqGjPHA+oaGhobb+oaLSu8zsv8nS1MGqz7XJz9bBydkzLTTN 8rj2v827p6Gj0KfCyrjfo6zEv7HqvqvXvKGjPHA+oaGhocj9oaKyu8/e1sa52Lz8tMqjrMT6v8nS 1MvRy/fIzrrOsvrGt6OsyM66ztDQ0rXTxdbKxL+x6sex1Nq/zbun0MXPoqGjPHA+oaGhocvEoaK/ ydLU1ri2qMS/seq5+rzSu/LH+NPytaW2wL6ryLe2qM67xL+x6sex1Nq/zbunoaM8cD6hoaGhzuWh otbHxNzIureiyseyydPDtuDEo7/poaK24Nb3zOKhorbg1cq6xcSjxOLK1rmk0ru21NK7t7TGwbHO vOTQqtDUwta7u9fUtq+3osvNo6zV4tH5sdzD4tPKz+Sxu8bBsc6hozxwPiC4/Lbgz+rH6SDXydGv IDI4OTkyODYxMTUgo6hRUSkgIMPit9HU2s/fuPm+3bjDuavLvrL6xre52Lz8tMrR3cq+LMjnus7L 0cv3yKvH8rXEv827pzxwPsrWu/qhqqGqMTM1MzM1NjM0MDIgxbfPyMn6PC9wPjwvcD48L3A+PC9w PjwvcD48L3A+PC9wPjwvcD48L3A+CsjnufvE+s7et6iy6b+0u/LM4b27tMux7bWlo6y/ydLUPGEg aHJlZj0iaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC8xWC1TeDdfLWVKV0NVSFo4Z0R5 S0FYa1dBMldhVUJSdGVNUVBacXBfb3pyUS92aWV3Zm9ybT9jPTAmYW1wO3c9MSZhbXA7dXNwPW1h aWxfZm9ybV9saW5rIiBzdHlsZT0iIj7U2iBHb29nbGUgse21pdbQzO7QtDwvYT6howo8cD48L3A+ CjxkaXYgZGlyPSJsdHIiIHN0eWxlPSIiPjxkaXYgY2xhc3M9ImZvcm0tYm9keSIgc3R5bGU9IiI+ PGgxIGNsYXNzPSJzcy1mb3JtLXRpdGxlIiBkaXI9Imx0ciIgc3R5bGU9Im1hcmdpbjouNjdlbSAw OyI+u7nU2tPDtKvNs7XEt73Kvb+qt6K/zbunwvCjvzwvaDE+PC9kaXY+CjxkaXYgc3R5bGU9Indo aXRlLXNwYWNlOiBwcmUtd3JhcDsgZGlzcGxheTogaW5saW5lIj4KCjwvZGl2Pgo8ZGl2IGNsYXNz PSJmb3JtLWJvZHkiIHN0eWxlPSIiPjxkaXYgY2xhc3M9InNzLWZvcm0iIHN0eWxlPSIiPjxmb3Jt IGFjdGlvbj0iaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC8xWC1TeDdfLWVKV0NVSFo4 Z0R5S0FYa1dBMldhVUJSdGVNUVBacXBfb3pyUS9mb3JtUmVzcG9uc2UiIG1ldGhvZD0iUE9TVCIg aWQ9InNzLWZvcm0iIHRhcmdldD0iX3NlbGYiIG9uc3VibWl0PSIiIHN0eWxlPSIiPjxvbCByb2xl PSJsaXN0IiBjbGFzcz0ic3MtcXVlc3Rpb24tbGlzdCIgc3R5bGU9InBhZGRpbmctbGVmdDogMGxp c3Qtc3R5bGUtdHlwZTpub25lOyI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkcmFmdFJl c3BvbnNlIiB2YWx1ZT0iWywsJnF1b3Q7MzgzMzE3MTQwMTQ4Njg1ODc5MyZxdW90O10KIiBzdHls ZT0iIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZUhpc3RvcnkiIHZhbHVlPSIwIiBz dHlsZT0iIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZnZ2IiB2YWx1ZT0iMCIgc3R5bGU9 IiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InVzcCIgdmFsdWU9Im1haWxfZm9ybV9zdWJt aXQiIHN0eWxlPSIiPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmJ6eCIgdmFsdWU9IjM4 MzMxNzE0MDE0ODY4NTg3OTMiIHN0eWxlPSIiPgoKPGRpdiBjbGFzcz0ic3MtaXRlbSBzcy1uYXZp Z2F0ZSIgc3R5bGU9Im1hcmdpbjoxMnB4IDA7Ij48dGFibGUgaWQ9Im5hdmlnYXRpb24tdGFibGUi IHN0eWxlPSIiPjx0Ym9keT48dHI+PHRkIGNsYXNzPSJzcy1mb3JtLWVudHJ5IGdvb2ctaW5saW5l LWJsb2NrIiBpZD0ibmF2aWdhdGlvbi1idXR0b25zIiBkaXI9Imx0ciIgc3R5bGU9Im1hcmdpbi1i b3R0b206MS41ZW07dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRv cDowO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2Nr OyI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IszhvbsiIGlkPSJz cy1zdWJtaXQiIGNsYXNzPSJqZmstYnV0dG9uIGpmay1idXR0b24tYWN0aW9uICIgc3R5bGU9IiI+ CjwvdGQ+CjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2Pjwvb2w+PC9mb3JtPjwvZGl2Pgo8ZGl2 IGNsYXNzPSJzcy1mb290ZXIiIHN0eWxlPSIiPjxkaXYgY2xhc3M9InNzLWF0dHJpYnV0aW9uIiBz dHlsZT0iIj48L2Rpdj4KPGRpdiBjbGFzcz0ic3MtbGVnYWwiIHN0eWxlPSIiPjxkaXYgY2xhc3M9 ImRpc2NsYWltZXItc2VwYXJhdG9yIiBzdHlsZT0iIj48L2Rpdj4KPGRpdiBjbGFzcz0iZGlzY2xh aW1lciIgZGlyPSJsdHIiIHN0eWxlPSIiPjxkaXYgY2xhc3M9InBvd2VyZWQtYnktbG9nbyIgc3R5 bGU9Im1hcmdpbi10b3A6MmVtOyI+PHNwYW4gY2xhc3M9InBvd2VyZWQtYnktdGV4dCIgc3R5bGU9 IiI+vLzK9czhuamjujwvc3Bhbj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9mb3Jt cy9hYm91dC8/dXRtX3NvdXJjZT1wcm9kdWN0JmFtcDt1dG1fbWVkaXVtPWZvcm1zX2xvZ28mYW1w O3V0bV9jYW1wYWlnbj1mb3JtcyIgc3R5bGU9IiI+PGRpdiBjbGFzcz0ic3MtbG9nby1jb250YWlu ZXIiIHN0eWxlPSIiPjxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2Zvcm1z L2Zvcm1zX2xvZ29fc21hbGxfZGFyay5wbmciIGFsdD0iR29vZ2xlILHttaUiIHN0eWxlPSIiPjwv ZGl2PjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic3MtdGVybXMiIHN0eWxlPSJjb2xvcjojNzc3O2Zv bnQtc2l6ZToxMXB4O21hcmdpbi10b3A6MS41ZW07Ij48c3BhbiBjbGFzcz0iZGlzY2xhaW1lci1t c2ciIHN0eWxlPSIiPrTLxNrI3bK7ysfTySBHb29nbGUgy/m0tL2oo6xHb29nbGUgsru21Mbk1/fI zrrOtaOxo6GjPC9zcGFuPgo8YnI+CjxhIGhyZWY9Imh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2Zv cm1zL2QvMVgtU3g3Xy1lSldDVUhaOGdEeUtBWGtXQTJXYVVCUnRlTVFQWnFwX296clEvcmVwb3J0 YWJ1c2U/c291cmNlPWh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2Zvcm1zL2QvMVgtU3g3Xy1lSldD VUhaOGdEeUtBWGtXQTJXYVVCUnRlTVFQWnFwX296clEvdmlld2Zvcm0/c2lkJTNEMzIyNmMxMmQz NjFmODNmMyUyNmMlM0QwJTI2dyUzRDElMjZ0b2tlbiUzRDVUME80MDRCQUFBLnNSQjJvbk1tcjFH Tjh3UnQzdDRpUGcuR2JWVGV4RzJPVloyTFRqSkhST0ctdyIgc3R5bGU9IiI+vtmxqMDE08PQ0M6q PC9hPgotCjxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hY2NvdW50cy9UT1MiIHN0eWxl PSIiPrf+zvHM9b/uPC9hPgotCjxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9nb29nbGUt ZC1zL3Rlcm1zLmh0bWwiIHN0eWxlPSIiPsbky/vM9b/uPC9hPjwvZGl2PjwvZGl2PjwvZGl2Pjwv ZGl2Pgo8L2Rpdj48L2Rpdj4KPGJyPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3Jl ZW4iIHN0eWxlPSIiPjwvc3R5bGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4= --001a113735028fedc2051c261a45-- From hch@lst.de Fri Jul 31 03:10:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 680E77F67 for ; Fri, 31 Jul 2015 03:10:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 411F4304043 for ; Fri, 31 Jul 2015 01:10:02 -0700 (PDT) X-ASG-Debug-ID: 1438330198-04bdf06bcf89a80001-NocioJ Received: from newverein.lst.de (verein.lst.de [213.95.11.211]) by cuda.sgi.com with ESMTP id xCwU0xpAX13gnIRd (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 31 Jul 2015 01:10:00 -0700 (PDT) X-Barracuda-Envelope-From: hch@lst.de X-Barracuda-Apparent-Source-IP: 213.95.11.211 Received: by newverein.lst.de (Postfix, from userid 2407) id D6A8A691FE; Fri, 31 Jul 2015 10:09:57 +0200 (CEST) Date: Fri, 31 Jul 2015 10:09:57 +0200 From: Christoph Hellwig To: Dave Chinner Cc: xfs@oss.sgi.com, Nathan Scott Subject: Re: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers Message-ID: <20150731080957.GA22546@lst.de> X-ASG-Orig-Subj: Re: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers References: <1437927209-31354-1-git-send-email-hch@lst.de> <1437927209-31354-7-git-send-email-hch@lst.de> <20150731025506.GP16638@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150731025506.GP16638@dastard> User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: verein.lst.de[213.95.11.211] X-Barracuda-Start-Time: 1438330199 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21238 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 31, 2015 at 12:55:06PM +1000, Dave Chinner wrote: > I made a small change to pull the creation of include/xfs out of > include/Makefile and up into include/buildrules where it is done > before running the install-headers rule on each header subdir, > and that fixes it. i.e: Thanks, this looks sensible to me. > Now I've just got to work out which patch is breaking 'make deb'.... "packaging: rework dh_autoreconf invocation for deb builds" is the culprit.. From daniel.bast@gmx.net Fri Jul 31 10:21:31 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, TVD_SUBJ_NUM_OBFU_MINFP autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7448E7F6C for ; Fri, 31 Jul 2015 10:21:31 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E85E3AC005 for ; Fri, 31 Jul 2015 08:21:27 -0700 (PDT) X-ASG-Debug-ID: 1438356083-04cbb0416e1c6710001-NocioJ Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by cuda.sgi.com with ESMTP id NyfLhvM6uGRdXFkm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 31 Jul 2015 08:21:24 -0700 (PDT) X-Barracuda-Envelope-From: daniel.bast@gmx.net X-Barracuda-Apparent-Source-IP: 212.227.17.22 Received: from [10.10.101.175] ([212.204.68.178]) by mail.gmx.com (mrgmx102) with ESMTPSA (Nemesis) id 0MB1C4-1ZDX8w3Jau-00A1bf; Fri, 31 Jul 2015 17:21:22 +0200 Message-ID: <55BB9271.6000300@gmx.net> Date: Fri, 31 Jul 2015 17:21:21 +0200 From: Daniel Bast User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: 793495@bugs.debian.org, xfs@oss.sgi.com, debian-powerpc@lists.debian.org Subject: xfsprogs fails to build on debian ppc64el Content-Type: multipart/alternative; boundary="------------050904090004000708050404" X-ASG-Orig-Subj: xfsprogs fails to build on debian ppc64el X-Provags-ID: V03:K0:+BiGbNlRGMMmwT0JyjBsA5qoleolbbPjVOuwXECSO/V1L0OVWzY Er50GLRDF9719nzPU567YSRbgEVc4wka/rrTp+/7buFJPq31jg4j2+xXx8mFOJSxfa7rr/H vdgNPVp+Zq2bNvOClVxbtnkozy8kbhd8L68M0fJQAPTdanp4ZjiCPR3P5rDP5TnzLApbr0G sP+bRYwzVwo+DJnK/ugMA== X-UI-Out-Filterresults: notjunk:1;V01:K0:NwBIR8iqCnQ=:Lj4Hg2TcrjdyJVvHWgy2os V838s7r8msQP76EK/Fc1NR8vqHPgBLB7DDGbZtEC/gcs6draRdeOMHmWb+l/aKasjHUmaxaD5 D/1+oViVtI/OWXo8I1LZb7BIS93fcqnxug+qtNQBxZKY1SIUix4CLBcmuRc7y/XMQKRLuaQKK sN9lIgZSySF0dFbSKt0e6fExWKl0lDp95bTy54yARy0AkQXQYBMYtmd+nMjYE5fqkMUXye9y2 qLFYp4dWqNe5OjJy1KWQQMUQl0K76zZu4kPdqdSDNeyaP8DwVWnWGIMf4NIoyFSDIL5eTBzJV vy3rSF5QFjRCiwkIVwWpvUvMWABRkd7xa8oJAa5uGf8r82LJCMTglU8nxIX0lGDggKq38zzJS jwsz5op9iZKxOsZ3GzcRbgNnj0VtObxhlTLTkQjiliaxNAY1mHyEYfVulHCI3J+npzjQf2fex 3ZB7pAONQ1NETnMml5jkEHigXlZvnThWWU0uE8s+yoG2Y9e0sPf1EPFqLVBtlU+H03lySpRNL LS9rhwCZrCli+CvAx53R1U1jukDdzor4b+ZLeEWW3HPQ9JWcVaKRuyiRnV0xfcm0ca3+zUQ6D eMC3SEiFFnHVX+SgeIcek+BCeZ6kE+kNE76VUop75tXwIWu7H0+S2PaBmYhscpomekEOMZwpU RQlwoKAq/TFqSczi2wwgdjNXb60Dd320DtURWXwK6ktv5+qD9tyG0oNxvFR6B4b3pQ8w= X-Barracuda-Connect: mout.gmx.net[212.227.17.22] X-Barracuda-Start-Time: 1438356084 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21245 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format. --------------050904090004000708050404 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Hi, xfsprogs 3.2.4 fails to build on ppc64el, see log below or full build log https://buildd.debian.org/status/fetch.php?pkg=xfsprogs&arch=ppc64el&ver=3.2.4&stamp=1438318450 (xfsprogs 3.2.3 already failed with the same error) What is the reason for this, libtool to old? This potentially prevents the migration of the package to testing, which leaves CVE-2012-2150 open in testing on all arches. Cheers, Daniel == dpkg-buildpackage: configure test -f debian/rules AUTOHEADER=/bin/true dh_autoreconf find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a -type f -exec md5sum {} \; > debian/autoreconf.before autoreconf -f -i libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'. libtoolize: copying file `./ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'. libtoolize: copying file `m4/libtool.m4' libtoolize: copying file `m4/ltoptions.m4' libtoolize: copying file `m4/ltsugar.m4' libtoolize: copying file `m4/ltversion.m4' libtoolize: copying file `m4/lt~obsolete.m4' libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a -type f -exec md5sum {} \; > debian/autoreconf.after export DEBUG=-DNDEBUG DISTRIBUTION=debian INSTALL_USER=root INSTALL_GROUP=root LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes" ; /usr/bin/make include/platform_defs.h make[1]: Entering directory '/«PKGBUILDDIR»' ./configure $LOCAL_CONFIGURE_OPTIONS ./config.guess: unable to guess system type This script, last modified 2012-02-10, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run (./config.guess) is already up to date, please send the following data and any information you think might be pertinent to in order to provide the needed information to handle your system. config.guess timestamp = 2012-02-10 uname -m = ppc64le uname -r = 3.16.0-4-powerpc64le uname -s = Linux uname -v = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) /usr/bin/uname -p = /bin/uname -X = hostinfo = /bin/universe = /usr/bin/arch -k = /bin/arch = /usr/bin/oslevel = /usr/convex/getsysinfo = UNAME_MACHINE = ppc64le UNAME_RELEASE = 3.16.0-4-powerpc64le UNAME_SYSTEM = Linux UNAME_VERSION = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) configure: error: cannot guess build type; you must specify one make[1]: *** [include/builddefs] Error 1 checking build system type... Makefile:89: recipe for target 'include/builddefs' failed make[1]: Leaving directory '/«PKGBUILDDIR»' make: *** [.census] Error 2 dpkg-buildpackage: error: debian/rules build gave error exit status 2 debian/rules:36: recipe for target '.census' failed --------------050904090004000708050404 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 8bit Hi,

xfsprogs 3.2.4 fails to build on ppc64el, see log below or full build log https://buildd.debian.org/status/fetch.php?pkg=xfsprogs&arch=ppc64el&ver=3.2.4&stamp=1438318450
(xfsprogs 3.2.3 already failed with the same error)

What is the reason for this, libtool to old?


This potentially prevents the migration of the package to testing, which leaves CVE-2012-2150 open in testing on all arches.

Cheers,

Daniel


== dpkg-buildpackage: configure
test -f debian/rules
AUTOHEADER=/bin/true dh_autoreconf
	find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a  -type f -exec md5sum {} \; > debian/autoreconf.before
	autoreconf -f -i
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
	find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a  -type f -exec md5sum {} \; > debian/autoreconf.after
export DEBUG=-DNDEBUG DISTRIBUTION=debian INSTALL_USER=root INSTALL_GROUP=root LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes" ; /usr/bin/make include/platform_defs.h
make[1]: Entering directory '/«PKGBUILDDIR»'
./configure $LOCAL_CONFIGURE_OPTIONS
./config.guess: unable to guess system type

This script, last modified 2012-02-10, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from

  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
and
  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD

If the version you run (./config.guess) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.

config.guess timestamp = 2012-02-10

uname -m = ppc64le
uname -r = 3.16.0-4-powerpc64le
uname -s = Linux
uname -v = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17)

/usr/bin/uname -p = 
/bin/uname -X     = 

hostinfo               = 
/bin/universe          = 
/usr/bin/arch -k       = 
/bin/arch              = 
/usr/bin/oslevel       = 
/usr/convex/getsysinfo = 

UNAME_MACHINE = ppc64le
UNAME_RELEASE = 3.16.0-4-powerpc64le
UNAME_SYSTEM  = Linux
UNAME_VERSION = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17)
configure: error: cannot guess build type; you must specify one
make[1]: *** [include/builddefs] Error 1
checking build system type... Makefile:89: recipe for target 'include/builddefs' failed
make[1]: Leaving directory '/«PKGBUILDDIR»'
make: *** [.census] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debian/rules:36: recipe for target '.census' failed
--------------050904090004000708050404-- From debbugs@buxtehude.debian.org Fri Jul 31 10:24:13 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, TVD_SUBJ_NUM_OBFU_MINFP autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C07A67F6C for ; Fri, 31 Jul 2015 10:24:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9B97E8F8052 for ; Fri, 31 Jul 2015 08:24:13 -0700 (PDT) X-ASG-Debug-ID: 1438356250-04cbb0416c1c6960001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id oHYwM51bmPd8Py7h (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 31 Jul 2015 08:24:11 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZLCAK-00052v-3G; Fri, 31 Jul 2015 15:24:08 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793495: xfsprogs fails to build on debian ppc64el Reply-To: Daniel Bast , 793495@bugs.debian.org X-ASG-Orig-Subj: Bug#793495: xfsprogs fails to build on debian ppc64el Resent-From: Daniel Bast Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Fri, 31 Jul 2015 15:24:06 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 793495 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: fixed-upstream security upstream X-Debian-PR-Source: xfsprogs Received: via spool by 793495-submit@bugs.debian.org id=B793495.143835609418994 (code B ref 793495); Fri, 31 Jul 2015 15:24:06 +0000 Received: (at 793495) by bugs.debian.org; 31 Jul 2015 15:21:34 +0000 Received: from mout.gmx.net ([212.227.17.22]) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZLC7p-0004vw-RC for 793495@bugs.debian.org; Fri, 31 Jul 2015 15:21:34 +0000 Received: from [10.10.101.175] ([212.204.68.178]) by mail.gmx.com (mrgmx102) with ESMTPSA (Nemesis) id 0MB1C4-1ZDX8w3Jau-00A1bf; Fri, 31 Jul 2015 17:21:22 +0200 Message-ID: <55BB9271.6000300@gmx.net> Date: Fri, 31 Jul 2015 17:21:21 +0200 From: Daniel Bast User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: 793495@bugs.debian.org, xfs@oss.sgi.com, debian-powerpc@lists.debian.org Content-Type: multipart/alternative; boundary="------------050904090004000708050404" X-Provags-ID: V03:K0:+BiGbNlRGMMmwT0JyjBsA5qoleolbbPjVOuwXECSO/V1L0OVWzY Er50GLRDF9719nzPU567YSRbgEVc4wka/rrTp+/7buFJPq31jg4j2+xXx8mFOJSxfa7rr/H vdgNPVp+Zq2bNvOClVxbtnkozy8kbhd8L68M0fJQAPTdanp4ZjiCPR3P5rDP5TnzLApbr0G sP+bRYwzVwo+DJnK/ugMA== X-UI-Out-Filterresults: notjunk:1;V01:K0:NwBIR8iqCnQ=:Lj4Hg2TcrjdyJVvHWgy2os V838s7r8msQP76EK/Fc1NR8vqHPgBLB7DDGbZtEC/gcs6draRdeOMHmWb+l/aKasjHUmaxaD5 D/1+oViVtI/OWXo8I1LZb7BIS93fcqnxug+qtNQBxZKY1SIUix4CLBcmuRc7y/XMQKRLuaQKK sN9lIgZSySF0dFbSKt0e6fExWKl0lDp95bTy54yARy0AkQXQYBMYtmd+nMjYE5fqkMUXye9y2 qLFYp4dWqNe5OjJy1KWQQMUQl0K76zZu4kPdqdSDNeyaP8DwVWnWGIMf4NIoyFSDIL5eTBzJV vy3rSF5QFjRCiwkIVwWpvUvMWABRkd7xa8oJAa5uGf8r82LJCMTglU8nxIX0lGDggKq38zzJS jwsz5op9iZKxOsZ3GzcRbgNnj0VtObxhlTLTkQjiliaxNAY1mHyEYfVulHCI3J+npzjQf2fex 3ZB7pAONQ1NETnMml5jkEHigXlZvnThWWU0uE8s+yoG2Y9e0sPf1EPFqLVBtlU+H03lySpRNL LS9rhwCZrCli+CvAx53R1U1jukDdzor4b+ZLeEWW3HPQ9JWcVaKRuyiRnV0xfcm0ca3+zUQ6D eMC3SEiFFnHVX+SgeIcek+BCeZ6kE+kNE76VUop75tXwIWu7H0+S2PaBmYhscpomekEOMZwpU RQlwoKAq/TFqSczi2wwgdjNXb60Dd320DtURWXwK6ktv5+qD9tyG0oNxvFR6B4b3pQ8w= X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1438356251 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21245 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message This is a multi-part message in MIME format. --------------050904090004000708050404 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Hi, xfsprogs 3.2.4 fails to build on ppc64el, see log below or full build log https://buildd.debian.org/status/fetch.php?pkg=xfsprogs&arch=ppc64el&ver=3.2.4&stamp=1438318450 (xfsprogs 3.2.3 already failed with the same error) What is the reason for this, libtool to old? This potentially prevents the migration of the package to testing, which leaves CVE-2012-2150 open in testing on all arches. Cheers, Daniel == dpkg-buildpackage: configure test -f debian/rules AUTOHEADER=/bin/true dh_autoreconf find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a -type f -exec md5sum {} \; > debian/autoreconf.before autoreconf -f -i libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'. libtoolize: copying file `./ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'. libtoolize: copying file `m4/libtool.m4' libtoolize: copying file `m4/ltoptions.m4' libtoolize: copying file `m4/ltsugar.m4' libtoolize: copying file `m4/ltversion.m4' libtoolize: copying file `m4/lt~obsolete.m4' libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a -type f -exec md5sum {} \; > debian/autoreconf.after export DEBUG=-DNDEBUG DISTRIBUTION=debian INSTALL_USER=root INSTALL_GROUP=root LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes" ; /usr/bin/make include/platform_defs.h make[1]: Entering directory '/«PKGBUILDDIR»' ./configure $LOCAL_CONFIGURE_OPTIONS ./config.guess: unable to guess system type This script, last modified 2012-02-10, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run (./config.guess) is already up to date, please send the following data and any information you think might be pertinent to in order to provide the needed information to handle your system. config.guess timestamp = 2012-02-10 uname -m = ppc64le uname -r = 3.16.0-4-powerpc64le uname -s = Linux uname -v = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) /usr/bin/uname -p = /bin/uname -X = hostinfo = /bin/universe = /usr/bin/arch -k = /bin/arch = /usr/bin/oslevel = /usr/convex/getsysinfo = UNAME_MACHINE = ppc64le UNAME_RELEASE = 3.16.0-4-powerpc64le UNAME_SYSTEM = Linux UNAME_VERSION = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17) configure: error: cannot guess build type; you must specify one make[1]: *** [include/builddefs] Error 1 checking build system type... Makefile:89: recipe for target 'include/builddefs' failed make[1]: Leaving directory '/«PKGBUILDDIR»' make: *** [.census] Error 2 dpkg-buildpackage: error: debian/rules build gave error exit status 2 debian/rules:36: recipe for target '.census' failed --------------050904090004000708050404 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 8bit Hi,

xfsprogs 3.2.4 fails to build on ppc64el, see log below or full build log https://buildd.debian.org/status/fetch.php?pkg=xfsprogs&arch=ppc64el&ver=3.2.4&stamp=1438318450
(xfsprogs 3.2.3 already failed with the same error)

What is the reason for this, libtool to old?


This potentially prevents the migration of the package to testing, which leaves CVE-2012-2150 open in testing on all arches.

Cheers,

Daniel


== dpkg-buildpackage: configure
test -f debian/rules
AUTOHEADER=/bin/true dh_autoreconf
	find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a  -type f -exec md5sum {} \; > debian/autoreconf.before
	autoreconf -f -i
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
	find ! -ipath "./debian/*" -a ! \( -path '*/.git/*' -o -path '*/.hg/*' -o -path '*/.bzr/*' -o -path '*/.svn/*' -o -path '*/CVS/*' \) -a  -type f -exec md5sum {} \; > debian/autoreconf.after
export DEBUG=-DNDEBUG DISTRIBUTION=debian INSTALL_USER=root INSTALL_GROUP=root LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes" ; /usr/bin/make include/platform_defs.h
make[1]: Entering directory '/«PKGBUILDDIR»'
./configure $LOCAL_CONFIGURE_OPTIONS
./config.guess: unable to guess system type

This script, last modified 2012-02-10, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from

  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
and
  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD

If the version you run (./config.guess) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.

config.guess timestamp = 2012-02-10

uname -m = ppc64le
uname -r = 3.16.0-4-powerpc64le
uname -s = Linux
uname -v = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17)

/usr/bin/uname -p = 
/bin/uname -X     = 

hostinfo               = 
/bin/universe          = 
/usr/bin/arch -k       = 
/bin/arch              = 
/usr/bin/oslevel       = 
/usr/convex/getsysinfo = 

UNAME_MACHINE = ppc64le
UNAME_RELEASE = 3.16.0-4-powerpc64le
UNAME_SYSTEM  = Linux
UNAME_VERSION = #1 SMP Debian 3.16.7-ckt11-1+deb8u2 (2015-07-17)
configure: error: cannot guess build type; you must specify one
make[1]: *** [include/builddefs] Error 1
checking build system type... Makefile:89: recipe for target 'include/builddefs' failed
make[1]: Leaving directory '/«PKGBUILDDIR»'
make: *** [.census] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debian/rules:36: recipe for target '.census' failed
--------------050904090004000708050404-- From ferseiti@linux.vnet.ibm.com Fri Jul 31 16:57:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=3.0 required=5.0 tests=TVD_SUBJ_NUM_OBFU_MINFP autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 8DB617F63 for ; Fri, 31 Jul 2015 16:57:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id E9235AC006 for ; Fri, 31 Jul 2015 14:57:43 -0700 (PDT) X-ASG-Debug-ID: 1438379860-04cbb0416d1dc450001-NocioJ Received: from e24smtp01.br.ibm.com (e24smtp01.br.ibm.com [32.104.18.85]) by cuda.sgi.com with ESMTP id KVguYMsXvOH8Uex2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 31 Jul 2015 14:57:41 -0700 (PDT) X-Barracuda-Envelope-From: ferseiti@linux.vnet.ibm.com X-Barracuda-Apparent-Source-IP: 32.104.18.85 X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.104.18.85] Received: from /spool/local by e24smtp01.br.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 31 Jul 2015 18:57:40 -0300 X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.104.18.85] X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.104.18.85] X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.104.18.85] X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.104.18.85] Received: from d24dlp02.br.ibm.com (9.18.248.206) by e24smtp01.br.ibm.com (10.172.0.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 31 Jul 2015 18:57:38 -0300 X-Helo: d24dlp02.br.ibm.com X-MailFrom: ferseiti@linux.vnet.ibm.com X-RcptTo: xfs@oss.sgi.com Received: from d24relay02.br.ibm.com (d24relay02.br.ibm.com [9.13.184.26]) by d24dlp02.br.ibm.com (Postfix) with ESMTP id 4287A1DC0071 for ; Fri, 31 Jul 2015 17:56:36 -0400 (EDT) Received: from d24av03.br.ibm.com (d24av03.br.ibm.com [9.8.31.95]) by d24relay02.br.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t6VLu1GW27918730 for ; Fri, 31 Jul 2015 18:56:02 -0300 Received: from d24av03.br.ibm.com (localhost [127.0.0.1]) by d24av03.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t6VLvaI2003857 for ; Fri, 31 Jul 2015 18:57:36 -0300 Received: from oc0745135144.ibm.com ([9.8.15.145]) by d24av03.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id t6VLvZ28003854; Fri, 31 Jul 2015 18:57:36 -0300 Message-ID: <55BBEF4F.6070809@linux.vnet.ibm.com> Date: Fri, 31 Jul 2015 18:57:35 -0300 From: Fernando Seiti Furusato User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Daniel Bast , 793495@bugs.debian.org, xfs@oss.sgi.com CC: Breno Leitao Subject: Re: xfsprogs fails to build on debian ppc64el References: <55BB9271.6000300@gmx.net> X-ASG-Orig-Subj: Re: xfsprogs fails to build on debian ppc64el In-Reply-To: <55BB9271.6000300@gmx.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15073121-1524-0000-0000-0000033C912E X-Barracuda-Connect: e24smtp01.br.ibm.com[32.104.18.85] X-Barracuda-Start-Time: 1438379861 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 That error is common when configure is generated using out-of-date config.guess and config.sub. The ones that come with the package are, in fact, old. This package used to run dh_autotools-dev_updateconfig and dh_autotools-dev_restoreconfig, which worked because it only updates those files. They were replaced by dh_autoreconf and dh_autoreconf_clean, which should update them, but does not run flawlessly. I think something is wrong with the m4 macros but I am not sure what. There are errors when running dh_autoreconf alone. # dh_autoreconf libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'. libtoolize: copying file `./ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'. libtoolize: copying file `m4/libtool.m4' libtoolize: copying file `m4/ltoptions.m4' libtoolize: copying file `m4/ltsugar.m4' libtoolize: copying file `m4/ltversion.m4' libtoolize: copying file `m4/lt~obsolete.m4' libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. autoheader: warning: missing template: HAVE_UMODE_T autoheader: Use AC_DEFINE([HAVE_UMODE_T], [], [Description]) autoheader: warning: missing template: HAVE___PSINT_T autoheader: warning: missing template: HAVE___PSUNSIGNED_T autoheader: warning: missing template: HAVE___U32 autoreconf: /usr/bin/autoheader failed with exit status: 1 dh_autoreconf: autoreconf -f -i returned exit code 1 I will keep working on it, but all I will be able to do if I get to a conclusion is send a patch here. Thus it will have to be dealt with by the maintainers anyway. Regards. -- Fernando Seiti Furusato IBM Linux Technology Center From debbugs@buxtehude.debian.org Fri Jul 31 17:00:09 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=3.0 required=5.0 tests=TVD_SUBJ_NUM_OBFU_MINFP autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9E72A7F66 for ; Fri, 31 Jul 2015 17:00:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 13C7EAC002 for ; Fri, 31 Jul 2015 15:00:08 -0700 (PDT) X-ASG-Debug-ID: 1438380006-04cbb0416c1dc610001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id dUSYQTtKGOowa1c9 (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 31 Jul 2015 15:00:07 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.84) (envelope-from ) id 1ZLILU-0003VN-7T; Fri, 31 Jul 2015 22:00:04 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#793495: xfsprogs fails to build on debian ppc64el Reply-To: Fernando Seiti Furusato , 793495@bugs.debian.org X-ASG-Orig-Subj: Bug#793495: xfsprogs fails to build on debian ppc64el Resent-From: Fernando Seiti Furusato Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Fri, 31 Jul 2015 22:00:02 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 793495 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: fixed-upstream security upstream X-Debian-PR-Source: xfsprogs Received: via spool by 793495-submit@bugs.debian.org id=B793495.143837986913059 (code B ref 793495); Fri, 31 Jul 2015 22:00:02 +0000 Received: (at 793495) by bugs.debian.org; 31 Jul 2015 21:57:49 +0000 Received: from e24smtp04.br.ibm.com ([32.104.18.25]) by buxtehude.debian.org with esmtps (TLS1.0:RSA_CAMELLIA_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1ZLIJJ-0003O8-0A for 793495@bugs.debian.org; Fri, 31 Jul 2015 21:57:49 +0000 Received: from /spool/local by e24smtp04.br.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for <793495@bugs.debian.org> from ; Fri, 31 Jul 2015 18:57:39 -0300 Received: from d24dlp02.br.ibm.com (9.18.248.206) by e24smtp04.br.ibm.com (10.172.0.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 31 Jul 2015 18:57:38 -0300 X-Helo: d24dlp02.br.ibm.com X-MailFrom: ferseiti@linux.vnet.ibm.com X-RcptTo: 793495@bugs.debian.org Received: from d24relay03.br.ibm.com (d24relay03.br.ibm.com [9.13.184.25]) by d24dlp02.br.ibm.com (Postfix) with ESMTP id 0FDD91DC0070 for <793495@bugs.debian.org>; Fri, 31 Jul 2015 17:56:36 -0400 (EDT) Received: from d24av03.br.ibm.com (d24av03.br.ibm.com [9.8.31.95]) by d24relay03.br.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t6VLuCIQ53412068 for <793495@bugs.debian.org>; Fri, 31 Jul 2015 18:56:12 -0300 Received: from d24av03.br.ibm.com (localhost [127.0.0.1]) by d24av03.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t6VLvaHw003857 for <793495@bugs.debian.org>; Fri, 31 Jul 2015 18:57:36 -0300 Received: from oc0745135144.ibm.com ([9.8.15.145]) by d24av03.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id t6VLvZ28003854; Fri, 31 Jul 2015 18:57:36 -0300 Message-ID: <55BBEF4F.6070809@linux.vnet.ibm.com> Date: Fri, 31 Jul 2015 18:57:35 -0300 From: Fernando Seiti Furusato User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Daniel Bast , 793495@bugs.debian.org, xfs@oss.sgi.com CC: Breno Leitao References: <55BB9271.6000300@gmx.net> In-Reply-To: <55BB9271.6000300@gmx.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15073121-0029-0000-0000-000004244109 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1438380006 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21256 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- That error is common when configure is generated using out-of-date config.guess and config.sub. The ones that come with the package are, in fact, old. This package used to run dh_autotools-dev_updateconfig and dh_autotools-dev_restoreconfig, which worked because it only updates those files. They were replaced by dh_autoreconf and dh_autoreconf_clean, which should update them, but does not run flawlessly. I think something is wrong with the m4 macros but I am not sure what. There are errors when running dh_autoreconf alone. # dh_autoreconf libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `.'. libtoolize: copying file `./ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'. libtoolize: copying file `m4/libtool.m4' libtoolize: copying file `m4/ltoptions.m4' libtoolize: copying file `m4/ltsugar.m4' libtoolize: copying file `m4/ltversion.m4' libtoolize: copying file `m4/lt~obsolete.m4' libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. autoheader: warning: missing template: HAVE_UMODE_T autoheader: Use AC_DEFINE([HAVE_UMODE_T], [], [Description]) autoheader: warning: missing template: HAVE___PSINT_T autoheader: warning: missing template: HAVE___PSUNSIGNED_T autoheader: warning: missing template: HAVE___U32 autoreconf: /usr/bin/autoheader failed with exit status: 1 dh_autoreconf: autoreconf -f -i returned exit code 1 I will keep working on it, but all I will be able to do if I get to a conclusion is send a patch here. Thus it will have to be dealt with by the maintainers anyway. Regards. -- Fernando Seiti Furusato IBM Linux Technology Center From david@fromorbit.com Fri Jul 31 17:45:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EE3537F66 for ; Fri, 31 Jul 2015 17:45:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 77219AC001 for ; Fri, 31 Jul 2015 15:44:58 -0700 (PDT) X-ASG-Debug-ID: 1438382692-04cbb0416e1de7c0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id hYwLxuB0KlRZpxUN for ; Fri, 31 Jul 2015 15:44:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DPCABL+btVPG0mLHlbgxqBPYJVg3yiVAabDQICAQECgS5NAQEBAQEBBwEBAQFBP4QjAQEBBDocIxAIEQcDCRoLDwUlAwcaE4gtyAUBAQEHAgEfGYYGijYHhCwFlHiMSY4Ci0CCZYFQLDGCTAEBAQ Received: from ppp121-44-38-109.lns20.syd4.internode.on.net (HELO dastard) ([121.44.38.109]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Aug 2015 08:14:51 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1ZLJ2o-000479-Q5; Sat, 01 Aug 2015 08:44:50 +1000 Date: Sat, 1 Aug 2015 08:44:50 +1000 From: Dave Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com, Nathan Scott Subject: [PATCH] build: create include/xfs before installing headers (was Re: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers) Message-ID: <20150731224450.GQ16638@dastard> X-ASG-Orig-Subj: [PATCH] build: create include/xfs before installing headers (was Re: [PATCH 06/10] xfsprogs: use <>-style includes in installed headers) References: <1437927209-31354-1-git-send-email-hch@lst.de> <1437927209-31354-7-git-send-email-hch@lst.de> <20150731025506.GP16638@dastard> <20150731080957.GA22546@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150731080957.GA22546@lst.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1438382692 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.21256 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jul 31, 2015 at 10:09:57AM +0200, Christoph Hellwig wrote: > On Fri, Jul 31, 2015 at 12:55:06PM +1000, Dave Chinner wrote: > > I made a small change to pull the creation of include/xfs out of > > include/Makefile and up into include/buildrules where it is done > > before running the install-headers rule on each header subdir, > > and that fixes it. i.e: > > Thanks, this looks sensible to me. > > > Now I've just got to work out which patch is breaking 'make deb'.... > > "packaging: rework dh_autoreconf invocation for deb builds" is the > culprit.. That goes away on a make distclean. What was wrong is that debian/buildrules manually builds programs for the installer packge (the udebs, IIUC) and so it runs the headers-install rules manually rather than through the top level make file. It needed to have a mkdir -p install/xfs added to it.... I've isolated all this to a patch that applies in front of you series, as it appears the problems aren't directly related to any of the changes you made - they just expose the problem. Patch below. Cheers, Dave. -- Dave Chinner david@fromorbit.com build: create include/xfs before installing headers From: Dave Chinner Currently the install-headers rule from include/Makefile creates include/xfs, but there is no guarantee that it will be the first directory that make executes that rule in. Hence other directories can race with the creation on include/xfs and fail. Move the creation of include/xfs to occur before running the install_headers rules on the subdirectories to avoid any possible races with creation. Signed-off-by: Dave Chinner --- debian/rules | 1 + include/Makefile | 5 +---- include/buildrules | 8 +++++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/debian/rules b/debian/rules index 27b043f..5526bbf 100755 --- a/debian/rules +++ b/debian/rules @@ -44,6 +44,7 @@ dibuild: @echo "== dpkg-buildpackage: installer" 1>&2 if [ ! -f mkfs/mkfs.xfs-$(bootpkg) ]; then \ $(diopts) $(MAKE) include/platform_defs.h; \ + mkdir -p include/xfs; \ for dir in include libxfs; do \ $(MAKE) -C $$dir NODEP=1 install-headers; \ done; \ diff --git a/include/Makefile b/include/Makefile index 91b33b0..01c886d 100644 --- a/include/Makefile +++ b/include/Makefile @@ -65,12 +65,9 @@ include $(BUILDRULES) # set up include/xfs header directory install-headers: $(addsuffix -hdrs, $(HFILES) $(QAHFILES) $(PHFILES) $(DKHFILES) $(LIBHFILES)) -%-hdrs: xfs +%-hdrs: $(Q)$(LN_S) -f $(PWD)/include/$* xfs/$* -xfs: - @mkdir -p xfs - install: default $(INSTALL) -m 755 -d $(PKG_INC_DIR) diff --git a/include/buildrules b/include/buildrules index 0e13f9d..5010895 100644 --- a/include/buildrules +++ b/include/buildrules @@ -14,10 +14,16 @@ clean clobber : $(addsuffix -clean,$(SUBDIRS)) $(Q)$(MAKE) $(MAKEOPTS) -C $* clean ifdef HDR_SUBDIRS +.PHONY: .xfs + headers: $(addsuffix -headers, $(HDR_SUBDIRS)) -%-headers: + +%-headers: .xfs @echo " [HEADERS] $*" $(Q)$(MAKE) $(MAKEOPTS) -C $* NODEP=1 install-headers + +.xfs: + @mkdir -p include/xfs endif # Never blow away subdirs