From wmiles@ft.newyorklife.com Mon Sep 1 02:04:16 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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_FRT_CONTACT 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 197F27F57 for ; Mon, 1 Sep 2014 02:04:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8B718AC005 for ; Mon, 1 Sep 2014 00:04:12 -0700 (PDT) X-ASG-Debug-ID: 1409555050-04cbb05485982120001-NocioJ Received: from mgwadcp05.newyorklife.com (obmail.newyorklife.com [206.210.16.25]) by cuda.sgi.com with ESMTP id NSurkdCoBkJvuEZ4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 01 Sep 2014 00:04:11 -0700 (PDT) X-Barracuda-Envelope-From: wmiles@ft.newyorklife.com X-Barracuda-Apparent-Source-IP: 206.210.16.25 X-Barracuda-IPDD: Level2 [ft.newyorklife.com/206.210.16.25] X-IronPort-AV: E=Sophos;i="5.04,440,1406606400"; d="scan'208,217";a="187295079" X-Barracuda-IPDD: Level2 [ft.newyorklife.com/206.210.16.25] X-Barracuda-IPDD: Level2 [ft.newyorklife.com/206.210.16.25] X-IronPort-AV: E=Sophos;i="5.04,440,1406606400"; d="scan'208,217";a="187295063" Received: from nyp-cashbmb3-cj.ftmail.dist.us.newyorklife.com ([172.31.85.106]) by mgwadcp05.newyorklife.com with ESMTP/TLS/AES128-SHA; 01 Sep 2014 03:04:01 -0400 Received: from NYP-CASHBMB2-CJ.FTMAIL.DIST.US.NEWYORKLIFE.COM ([fe80::dc8c:759d:654:7346]) by NYP-CASHBMB3-CJ.ftmail.dist.us.newyorklife.com ([fe80::7c12:abb3:38c0:db41%22]) with mapi id 14.03.0158.001; Mon, 1 Sep 2014 03:04:00 -0400 From: Willie J Miles Subject: Thread-Index: Ac/FsufiidfYTyWtTY2y0KlELlflAA== X-ASG-Orig-Subj: Date: Mon, 1 Sep 2014 07:04:00 +0000 Message-ID: <11C6440AA2FB6E409B6505395B20654D3CEDF114@NYP-CASHBMB2-CJ.ftmail.dist.us.newyorklife.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.106.46] Content-Type: multipart/alternative; boundary="_000_11C6440AA2FB6E409B6505395B20654D3CEDF114NYPCASHBMB2CJft_" MIME-Version: 1.0 X-CFilter-Loop: Reflected X-Barracuda-Connect: obmail.newyorklife.com[206.210.16.25] X-Barracuda-Start-Time: 1409555050 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 To: undisclosed-recipients:; --_000_11C6440AA2FB6E409B6505395B20654D3CEDF114NYPCASHBMB2CJft_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Haben Sie finanzielle Unterst=FCtzung jeder Art m=FCssen? Pers=F6nliche Darlehen? Business-Darlehen? Hypothekendarlehen? Agrar-und Projektfinanzierung? Wir geben Kredite bei 3% A.P.I. Rate! Kontakt; creditspa@admin.in.th =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D Do you need Financial assistance of any kind? Personal Loans? Business Loans? Mortgage loans? Agricultural and project funding? We give out loans at 3% A.P.I. rate! Contact ;creditspa@admin.in.th --_000_11C6440AA2FB6E409B6505395B20654D3CEDF114NYPCASHBMB2CJft_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Haben Sie finanzielle Unterst=FCtzung jeder Art m=FCssen? 
Pers=F6nliche Darlehen? 
Business-Darlehen? 
Hypothekendarlehen? 
Agrar-und Projektfinanzierung? 

Wir geben Kredite bei 3% A.P.I. Rate! Kontakt; creditspa@admin.in.th
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
Do you need Financial assistance of any kind?
Personal Loans?
Business Loans?
Mortgage loans?
Agricultural and project funding?

We give out loans at 3% A.P.I. rate! Contact ;creditspa@admin.in.th
--_000_11C6440AA2FB6E409B6505395B20654D3CEDF114NYPCASHBMB2CJft_-- From squatral@bidmc.harvard.edu Mon Sep 1 02:33:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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=unavailable 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 0EC8F7F57 for ; Mon, 1 Sep 2014 02:33:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D3CA3304048 for ; Mon, 1 Sep 2014 00:33:22 -0700 (PDT) X-ASG-Debug-ID: 1409556800-04bdf010a068c340001-NocioJ Received: from SR48Maunakea.caregroup.org (securemail.bidmc.harvard.edu [134.174.104.36]) by cuda.sgi.com with ESMTP id 4f3pIu3gbFYICOQL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Mon, 01 Sep 2014 00:33:21 -0700 (PDT) X-Barracuda-Envelope-From: squatral@bidmc.harvard.edu X-Barracuda-Apparent-Source-IP: 134.174.104.36 Received: from pps.filterd (SR48Maunakea.caregroup.org [127.0.0.1]) by SR48Maunakea.caregroup.org (8.14.7/8.14.7) with SMTP id s817DR8p012998; Mon, 1 Sep 2014 00:16:27 -0700 Received: from sr61rouse.its.caregroup.org (sr61rouse.bidmc.harvard.edu [10.25.51.77]) by SR48Maunakea.caregroup.org with ESMTP id 1nwpaeq72m-1 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Mon, 01 Sep 2014 00:16:26 -0700 Received: from EVS4CCR.its.caregroup.org ([fe80::5509:c421:f730:1ef4]) by SR61ROUSE.its.caregroup.org ([::1]) with mapi; Mon, 1 Sep 2014 03:23:03 -0400 From: Date: Mon, 1 Sep 2014 03:23:02 -0400 Subject: Financiering Thread-Topic: Financiering X-ASG-Orig-Subj: Financiering Thread-Index: AQHPxbWQbXtQX3Jr5Uu+q1ec3biZ0w== Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/alternative; boundary="_000_ED1FA742B8C9BC4F8A9ED7C111530AC94CE90A5A79EVS4CCRitscar_" MIME-Version: 1.0 x-recipient-trigger: true X-Barracuda-Connect: securemail.bidmc.harvard.edu[134.174.104.36] X-Barracuda-Start-Time: 1409556800 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: 11fb7d69a730025d4aaf1d7f5a17460e-2338-htm X-Barracuda-Spam-Score: 1.23 X-Barracuda-Spam-Status: No, SCORE=1.23 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MISSING_HEADERS, NO_REAL_NAME, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9053 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 NO_REAL_NAME From: does not include a real name 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 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:; --_000_ED1FA742B8C9BC4F8A9ED7C111530AC94CE90A5A79EVS4CCRitscar_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable We zijn momenteel aanbieden van zakelijke en persoonlijke leningen. Dit is om uw kennis die wij bieden lening / krediet bij 3% rente per jaa= r aan de individuele en bedrijf aan te brengen. Onze investeerders financie= ren ook projecten. Voor meer informatie, naar voren uw reactie alleen op de= ze E-mail: f-spa@webadicta.org Als u behoefte heeft aan een snelle lening of financiering van grote noodza= ak, vooruit uw antwoord alleen op deze e-mail: f-spa@webadicta.org Dank u voor uw tijd. Copyright 2014. SPA =AE =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Nous offrons actuellement des entreprises et des pr=EAts personnels. C'est =E0 porter =E0 votre connaissance que nous offrons pr=EAt / cr=E9= dit =E0 taux d'int=E9r=EAt de 3% par an =E0 l'individu et de la soci=E9t=E9= . Nos investisseurs financent aussi des projets. Pour plus d'informations, = faites parvenir votre r=E9ponse uniquement =E0 ce courriel: f-spa@webadicta= .org Si vous avez besoin d'un pr=EAt rapide ou le besoin de financement importan= t, faire parvenir votre r=E9ponse uniquement =E0 cet email : f-spa@webadict= a.org Je vous remercie pour votre temps. Copyright 2014. SPA =AE ________________________________ This message is intended for the use of the person(s) to whom it may be add= ressed. It may contain information that is privileged, confidential, or oth= erwise protected from disclosure under applicable law. If you are not the i= ntended recipient, any dissemination, distribution, copying, or use of this= information is prohibited. If you have received this message in error, ple= ase permanently delete it and immediately notify the sender. Thank you. --_000_ED1FA742B8C9BC4F8A9ED7C111530AC94CE90A5A79EVS4CCRitscar_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
=  


We zijn momenteel aanbieden van zakelijke en persoonlijke leningen.
   Dit is om uw kennis die wij bieden lening / krediet bij 3% ren= te per jaar aan de individuele en bedrijf aan te brengen. Onze investeerder= s financieren ook projecten. Voor meer informatie, naar voren uw reactie al= leen op deze E-mail: f-spa@webadicta.org
 
Als u behoefte heeft aan een snelle lening of financiering van grote noodza= ak, vooruit uw antwoord alleen op deze e-mail: f-spa@webadicta.org

Dank u voor uw tijd.
Copyright 2014. SPA =AE
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Nous offrons actuellement des entreprises et des pr=EAts personnels.
    C'est =E0 porter =E0 votre connaissance que nous offrons= pr=EAt / cr=E9dit =E0 taux d'int=E9r=EAt de 3% par an =E0 l'individu et de= la soci=E9t=E9. Nos investisseurs financent aussi des projets. Pour plus d= 'informations, faites parvenir votre r=E9ponse uniquement =E0 ce courriel: f-spa@webadicta.org
 
Si vous avez besoin d'un pr=EAt rapide ou le besoin de financement importan= t, faire parvenir votre r=E9ponse uniquement =E0 cet email : f-spa@webadicta.org
Je vous remercie pour votre temps.
Copyright 2014. SPA =AE



This message is intended for= the use of the person(s) to whom it may be addressed. It may contain infor= mation that is privileged, confidential, or otherwise protected from disclo= sure under applicable law. If you are not the intended recipient, any dissemination, distribution, copying, or u= se of this information is prohibited. If you have received this message in = error, please permanently delete it and immediately notify the sender. Than= k you.
--_000_ED1FA742B8C9BC4F8A9ED7C111530AC94CE90A5A79EVS4CCRitscar_-- From eflorac@intellique.com Mon Sep 1 14:18:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 B13347F66 for ; Mon, 1 Sep 2014 14:18:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9136A304032 for ; Mon, 1 Sep 2014 12:18:53 -0700 (PDT) X-ASG-Debug-ID: 1409599130-04bdf010a06aa8b0001-NocioJ Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by cuda.sgi.com with ESMTP id yABqNnfq7FnLQPdN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 01 Sep 2014 12:18:51 -0700 (PDT) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.3 Received: from galadriel.home (unknown [82.235.234.79]) by smtp3-g21.free.fr (Postfix) with ESMTP id DEAC0A6263; Mon, 1 Sep 2014 21:18:49 +0200 (CEST) Date: Mon, 1 Sep 2014 21:19:32 +0200 From: Emmanuel Florac To: Samuel GRANJEAUD IR/INSERM Cc: xfs@oss.sgi.com Subject: Re: Run out of inodes? Message-ID: <20140901211932.342b4bb3@galadriel.home> X-ASG-Orig-Subj: Re: Run out of inodes? In-Reply-To: <8d5fff2548d35737c6cebcb1f6382e80@inserm.fr> References: <54005108.1020203@inserm.fr> <20140829114806.GA17610@bfoster.bfoster> <5400802C.5050005@inserm.fr> <54009603.9050404@sandeen.net> <8d5fff2548d35737c6cebcb1f6382e80@inserm.fr> Organization: Intellique X-Mailer: Claws Mail 3.10.0 (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: smtp3-g21.free.fr[212.27.42.3] X-Barracuda-Start-Time: 1409599131 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.9069 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Sat, 30 Aug 2014 21:33:46 +0200 vous =C3=A9criviez: > Final question: could some issues appear with SAMBA? >=20 > # smbstatus -V > Version 3.4.5 Is your whole distribution 64 bits, or only the kernel? However, I've never had any problem with samba, but some with NFS. --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From odon@prover.com.br Mon Sep 1 17:34:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 809937F66 for ; Mon, 1 Sep 2014 17:34:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1B6F3AC003 for ; Mon, 1 Sep 2014 15:34:43 -0700 (PDT) X-ASG-Debug-ID: 1409610881-04cbb054859a2bd0001-NocioJ Received: from hcsaturno.pib.com.br (hcsaturno.pib.com.br [200.194.176.52]) by cuda.sgi.com with ESMTP id ndudKin3efBLiV4I for ; Mon, 01 Sep 2014 15:34:41 -0700 (PDT) X-Barracuda-Envelope-From: odon@prover.com.br X-Barracuda-Apparent-Source-IP: 200.194.176.52 Received: from localhost (localhost [127.0.0.1]) by hcsaturno.pib.com.br (Postfix) with ESMTP id D93533A48BF5; Mon, 1 Sep 2014 19:20:41 -0300 (BRT) Received: from hcsaturno.pib.com.br ([127.0.0.1]) by localhost (hcsaturno.pib.com.br [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id t4ICIV8m4z7k; Mon, 1 Sep 2014 19:20:37 -0300 (BRT) Received: from localhost (localhost [127.0.0.1]) by hcsaturno.pib.com.br (Postfix) with ESMTP id 96A1E3F620D5; Mon, 1 Sep 2014 19:13:16 -0300 (BRT) X-Virus-Scanned: amavisd-new at skysat.com.br Received: from hcsaturno.pib.com.br ([127.0.0.1]) by localhost (hcsaturno.pib.com.br [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id dzRFZXG0_nFh; Mon, 1 Sep 2014 19:13:16 -0300 (BRT) Received: from hcsaturno.pib.com.br (hcsaturno.pib.com.br [200.194.176.52]) by hcsaturno.pib.com.br (Postfix) with ESMTP id D71913F67FCE; Mon, 1 Sep 2014 19:06:51 -0300 (BRT) Date: Mon, 1 Sep 2014 19:06:49 -0300 (BRT) From: Support! Reply-To: Support! Message-ID: <765495068.3746496.1409609209207.JavaMail.root@prover.com.br> Subject: Caro Membro (R) MIME-Version: 1.0 X-ASG-Orig-Subj: Caro Membro (R) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [103.253.181.24] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - GC36 (Win)/8.0.3_GA_5664) Thread-Topic: Caro Membro (R) Thread-Index: p5yR7rNxi7ixi/ZIRQbS6jSDNBK8fA== X-Barracuda-Connect: hcsaturno.pib.com.br[200.194.176.52] X-Barracuda-Start-Time: 1409610881 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.23 X-Barracuda-Spam-Status: No, SCORE=1.23 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MISSING_HEADERS, THREAD_INDEX, THREAD_TOPIC, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9075 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; Caro Membro (R).=20 Esta mensagem =C3=A9 do centro de mensagens do Webmail.Team a todos os noss= os novos propriet=C3=A1rios de conta de e-mail antigas /. Momento, estamos = atualizando nossa base de dados e um centro de conta de e-mail como n=C3=B3= s entramos em um novo m=C3=AAs de setembro. Estamos a excluir todas as cont= as de e-mail n=C3=A3o utilizados criar mais espa=C3=A7o para novas contas.= =20 Para evitar que sua conta seja fechada, voc=C3=AA ter=C3=A1 que atualiz=C3= =A1-lo abaixo para que possamos saber que =C3=A9 um presente usado account.= fill abaixo=20 =C2=A0=C2=A0 * Nome de usu=C3=A1rio:=20 * Senha:=20 * Data de nascimento:=20 * Pa=C3=ADs ou territ=C3=B3rio=20 Aviso !!! O n=C3=A3o cumprimento das directivas acima dentro de 24 horas=20 receber este aviso implicar=C3=A1 a exclus=C3=A3o de tal conta de e-mail.= =20 Obrigado.=20 Aviso C=C3=B3digo: KMM88117359V17087L0KM=20 Atenciosamente,=20 Webmail.Team Atendimento ao Cliente. From david@fromorbit.com Mon Sep 1 18:45:40 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9236C7F66 for ; Mon, 1 Sep 2014 18:45:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 12E52AC001 for ; Mon, 1 Sep 2014 16:45:36 -0700 (PDT) X-ASG-Debug-ID: 1409615133-04cbb054869a4ef0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id Cx1sDyWPS7jgwOvG for ; Mon, 01 Sep 2014 16:45:34 -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: AisSAKgDBVR5LDJ8PGdsb2JhbABZgw2BKoIshQenYwEBBAaaQIVyAYETFwUBAQEBODaEAwEBBAE6HCMQCAMYCSUPBSUDBxoTiDoHuiMBFxiFZIhvEQEHSQeETAWcW5cOFoFuKy+BBwgXgSkBAQE Received: from ppp121-44-50-124.lns20.syd6.internode.on.net (HELO dastard) ([121.44.50.124]) by ipmail06.adl2.internode.on.net with ESMTP; 02 Sep 2014 09:15:33 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XObHt-0005IT-W6; Tue, 02 Sep 2014 09:45:30 +1000 Date: Tue, 2 Sep 2014 09:45:29 +1000 From: Dave Chinner To: stan hoeppner Cc: xfs@oss.sgi.com Subject: Re: storage, libaio, or XFS problem? 3.4.26 Message-ID: <20140901234529.GI20518@dastard> X-ASG-Orig-Subj: Re: storage, libaio, or XFS problem? 3.4.26 References: <20140826075345.GJ20518@dastard> <8c29baf987467a84f0b7c1d09c863662@localhost> <20140828003226.GO20518@dastard> <7f9e5aef187b44e899077467aeb0809d@localhost> <20140828230817.GU20518@dastard> <2d2ce7bb38c00a7d35f4a324f6a36cbb@localhost> <20140829235538.GF20518@dastard> <20140831235749.GH20518@dastard> <5403E9B9.7040608@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5403E9B9.7040608@hardwarefreak.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: 1409615134 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.9076 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Aug 31, 2014 at 10:36:25PM -0500, stan hoeppner wrote: > On 08/31/2014 06:57 PM, Dave Chinner wrote: > > On Fri, Aug 29, 2014 at 09:55:53PM -0500, Stan Hoeppner wrote: > >> Have you played with bcache yet? > > > > Enough to scare me. So many ways for things to go wrong, no easy way > > to recover when things go wrong. And that's before I even get to > > performance warts, like having systems stall completely because > > there's tens or hundreds of GB of 4k random writes that have to be > > flushed to slow SATA RAID6 in the cache.... > > Yikes. I hadn't yet heard such opinions expressed. By go wrong I > assume you mean the btrees or cached sector data getting broken, corrupted? bcache is a complex filesystem hidden inside a block device. If bcache goes AWOL, so does the all the data on your block device. Need I say more? > > PS: can you wrap your text at 68 or 72 columns so quoted text > > doesn't overflow 80 columns and get randomly wrapped and messed up? > > This email should be. Lemme see what I can do with the others. The > lovely Cisco VPN client I must use kills routing to my local subnet, so > Icedovce can't connect to my IMAP server when the VPN is active. The > test hardness app requires a shell unfortunately so I have to keep the > tunnel open all the time, as the test runs are 40+ hours each. My last > test just crashed a bit ago so I can use Icedove for this reply. screen is your friend when it comes to keeping remote shells active as the network comes and goes. VPN drops out, just bring it back up when you need it and reconnect to the remote screen instance and it's like you never left.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From dgc@oss.sgi.com Mon Sep 1 21:19:16 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 10266) id 42C417F6C; Mon, 1 Sep 2014 21:19:16 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. xfs-for-linus-3.17-rc1-13183-g41b9d72 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 52addcf9d6669fa439387610bc65c92fa0980cef X-Git-Newrev: 41b9d7263ea1e270019c5d04fa0ab15db50b9725 Message-Id: <20140902021916.42C417F6C@oss.sgi.com> Date: Mon, 1 Sep 2014 21:19:14 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 41b9d72 xfs: trim eofblocks before collapse range 1669a8c xfs: xfs_file_collapse_range is delalloc challenged ca446d8 xfs: don't log inode unless extent shift makes extent modifications 7d4ea3c xfs: use ranged writeback and invalidation for direct IO 834ffca xfs: don't zero partial page cache pages during O_DIRECT writes 85e584d xfs: don't zero partial page cache pages during O_DIRECT writes 22e757a xfs: don't dirty buffers beyond EOF from 52addcf9d6669fa439387610bc65c92fa0980cef (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 41b9d7263ea1e270019c5d04fa0ab15db50b9725 Author: Brian Foster Date: Tue Sep 2 12:12:53 2014 +1000 xfs: trim eofblocks before collapse range xfs_collapse_file_space() currently writes back the entire file undergoing collapse range to settle things down for the extent shift algorithm. While this prevents changes to the extent list during the collapse operation, the writeback itself is not enough to prevent unnecessary collapse failures. The current shift algorithm uses the extent index to iterate the in-core extent list. If a post-eof delalloc extent persists after the writeback (e.g., a prior zero range op where the end of the range aligns with eof can separate the post-eof blocks such that they are not written back and converted), xfs_bmap_shift_extents() becomes confused over the encoded br_startblock value and fails the collapse. As with the full writeback, this is a temporary fix until the algorithm is improved to cope with a volatile extent list and avoid attempts to shift post-eof extents. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 1669a8ca2105968f660cf7d84ba38fd18075cd99 Author: Dave Chinner Date: Tue Sep 2 12:12:53 2014 +1000 xfs: xfs_file_collapse_range is delalloc challenged If we have delalloc extents on a file before we run a collapse range opertaion, we sync the range that we are going to collapse to convert delalloc extents in that region to real extents to simplify the shift operation. However, the shift operation then assumes that the extent list is not going to change as it iterates over the extent list moving things about. Unfortunately, this isn't true because we can't hold the ILOCK over all the operations. We can prevent new IO from modifying the extent list by holding the IOLOCK, but that doesn't prevent writeback from running.... And when writeback runs, it can convert delalloc extents is the range of the file prior to the region being collapsed, and this changes the indexes of all the extents in the file. That causes the collapse range operation to Go Bad. The right fix is to rewrite the extent shift operation not to be dependent on the extent list not changing across the entire operation, but this is a fairly significant piece of work to do. Hence, as a short-term workaround for the problem, sync the entire file before starting a collapse operation to remove all delalloc ranges from the file and so avoid the problem of concurrent writeback changing the extent list. Diagnosed-and-Reported-by: Brian Foster Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit ca446d880c399bb31301e7d8eefbd7fe3c504c4e Author: Brian Foster Date: Tue Sep 2 12:12:53 2014 +1000 xfs: don't log inode unless extent shift makes extent modifications The file collapse mechanism uses xfs_bmap_shift_extents() to collapse all subsequent extents down into the specified, previously punched out, region. This function performs some validation, such as whether a sufficient hole exists in the target region of the collapse, then shifts the remaining exents downward. The exit path of the function currently logs the inode unconditionally. While we must log the inode (and abort) if an error occurs and the transaction is dirty, the initial validation paths can generate errors before the transaction has been dirtied. This creates an unnecessary filesystem shutdown scenario, as the caller will cancel a transaction that has been marked dirty. Modify xfs_bmap_shift_extents() to OR the logflags bits as modifications are made to the inode bmap. Only log the inode in the exit path if logflags has been set. This ensures we only have to cancel a dirty transaction if modifications have been made and prevents an unnecessary filesystem shutdown otherwise. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 7d4ea3ce63a6bc532abb334c469c18481798af8c Author: Dave Chinner Date: Tue Sep 2 12:12:53 2014 +1000 xfs: use ranged writeback and invalidation for direct IO Now we are not doing silly things with dirtying buffers beyond EOF and using invalidation correctly, we can finally reduce the ranges of writeback and invalidation used by direct IO to match that of the IO being issued. Bring the writeback and invalidation ranges back to match the generic direct IO code - this will greatly reduce the perturbation of cached data when direct IO and buffered IO are mixed, but still provide the same buffered vs direct IO coherency behaviour we currently have. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 834ffca6f7e345a79f6f2e2d131b0dfba8a4b67a Author: Dave Chinner Date: Tue Sep 2 12:12:52 2014 +1000 xfs: don't zero partial page cache pages during O_DIRECT writes Similar to direct IO reads, direct IO writes are using truncate_pagecache_range to invalidate the page cache. This is incorrect due to the sub-block zeroing in the page cache that truncate_pagecache_range() triggers. This patch fixes things by using invalidate_inode_pages2_range instead. It preserves the page cache invalidation, but won't zero any pages. cc: stable@vger.kernel.org Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 85e584da3212140ee80fd047f9058bbee0bc00d5 Author: Chris Mason Date: Tue Sep 2 12:12:52 2014 +1000 xfs: don't zero partial page cache pages during O_DIRECT writes xfs is using truncate_pagecache_range to invalidate the page cache during DIO reads. This is different from the other filesystems who only invalidate pages during DIO writes. truncate_pagecache_range is meant to be used when we are freeing the underlying data structs from disk, so it will zero any partial ranges in the page. This means a DIO read can zero out part of the page cache page, and it is possible the page will stay in cache. buffered reads will find an up to date page with zeros instead of the data actually on disk. This patch fixes things by using invalidate_inode_pages2_range instead. It preserves the page cache invalidation, but won't zero any pages. [dchinner: catch error and warn if it fails. Comment.] cc: stable@vger.kernel.org Signed-off-by: Chris Mason Reviewed-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 22e757a49cf010703fcb9c9b4ef793248c39b0c2 Author: Dave Chinner Date: Tue Sep 2 12:12:51 2014 +1000 xfs: don't dirty buffers beyond EOF generic/263 is failing fsx at this point with a page spanning EOF that cannot be invalidated. The operations are: 1190 mapwrite 0x52c00 thru 0x5e569 (0xb96a bytes) 1191 mapread 0x5c000 thru 0x5d636 (0x1637 bytes) 1192 write 0x5b600 thru 0x771ff (0x1bc00 bytes) where 1190 extents EOF from 0x54000 to 0x5e569. When the direct IO write attempts to invalidate the cached page over this range, it fails with -EBUSY and so any attempt to do page invalidation fails. The real question is this: Why can't that page be invalidated after it has been written to disk and cleaned? Well, there's data on the first two buffers in the page (1k block size, 4k page), but the third buffer on the page (i.e. beyond EOF) is failing drop_buffers because it's bh->b_state == 0x3, which is BH_Uptodate | BH_Dirty. IOWs, there's dirty buffers beyond EOF. Say what? OK, set_buffer_dirty() is called on all buffers from __set_page_buffers_dirty(), regardless of whether the buffer is beyond EOF or not, which means that when we get to ->writepage, we have buffers marked dirty beyond EOF that we need to clean. So, we need to implement our own .set_page_dirty method that doesn't dirty buffers beyond EOF. This is messy because the buffer code is not meant to be shared and it has interesting locking issues on the buffer dirty bits. So just copy and paste it and then modify it to suit what we need. Note: the solutions the other filesystems and generic block code use of marking the buffers clean in ->writepage does not work for XFS. It still leaves dirty buffers beyond EOF and invalidations still fail. Hence rather than play whack-a-mole, this patch simply prevents those buffers from being dirtied in the first place. cc: Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Dave Chinner ----------------------------------------------------------------------- Summary of changes: fs/xfs/libxfs/xfs_bmap.c | 18 +++++++------- fs/xfs/xfs_aops.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_bmap_util.c | 20 ++++++++++++++++ fs/xfs/xfs_file.c | 27 +++++++++++++++++---- 4 files changed, 114 insertions(+), 12 deletions(-) hooks/post-receive -- XFS development tree From dgc@oss.sgi.com Mon Sep 1 21:19:33 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 10266) id 51E217F74; Mon, 1 Sep 2014 21:19:33 -0500 (CDT) From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, xfs-for-3.17-rc3, created. xfs-for-linus-3.17-rc1-13183-g41b9d72 X-Git-Refname: refs/heads/xfs-for-3.17-rc3 X-Git-Reftype: branch X-Git-Oldrev: 0000000000000000000000000000000000000000 X-Git-Newrev: 41b9d7263ea1e270019c5d04fa0ab15db50b9725 Message-Id: <20140902021933.51E217F74@oss.sgi.com> Date: Mon, 1 Sep 2014 21:19:32 -0500 (CDT) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, xfs-for-3.17-rc3 has been created at 41b9d7263ea1e270019c5d04fa0ab15db50b9725 (commit) - Log ----------------------------------------------------------------- commit 41b9d7263ea1e270019c5d04fa0ab15db50b9725 Author: Brian Foster Date: Tue Sep 2 12:12:53 2014 +1000 xfs: trim eofblocks before collapse range xfs_collapse_file_space() currently writes back the entire file undergoing collapse range to settle things down for the extent shift algorithm. While this prevents changes to the extent list during the collapse operation, the writeback itself is not enough to prevent unnecessary collapse failures. The current shift algorithm uses the extent index to iterate the in-core extent list. If a post-eof delalloc extent persists after the writeback (e.g., a prior zero range op where the end of the range aligns with eof can separate the post-eof blocks such that they are not written back and converted), xfs_bmap_shift_extents() becomes confused over the encoded br_startblock value and fails the collapse. As with the full writeback, this is a temporary fix until the algorithm is improved to cope with a volatile extent list and avoid attempts to shift post-eof extents. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 1669a8ca2105968f660cf7d84ba38fd18075cd99 Author: Dave Chinner Date: Tue Sep 2 12:12:53 2014 +1000 xfs: xfs_file_collapse_range is delalloc challenged If we have delalloc extents on a file before we run a collapse range opertaion, we sync the range that we are going to collapse to convert delalloc extents in that region to real extents to simplify the shift operation. However, the shift operation then assumes that the extent list is not going to change as it iterates over the extent list moving things about. Unfortunately, this isn't true because we can't hold the ILOCK over all the operations. We can prevent new IO from modifying the extent list by holding the IOLOCK, but that doesn't prevent writeback from running.... And when writeback runs, it can convert delalloc extents is the range of the file prior to the region being collapsed, and this changes the indexes of all the extents in the file. That causes the collapse range operation to Go Bad. The right fix is to rewrite the extent shift operation not to be dependent on the extent list not changing across the entire operation, but this is a fairly significant piece of work to do. Hence, as a short-term workaround for the problem, sync the entire file before starting a collapse operation to remove all delalloc ranges from the file and so avoid the problem of concurrent writeback changing the extent list. Diagnosed-and-Reported-by: Brian Foster Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit ca446d880c399bb31301e7d8eefbd7fe3c504c4e Author: Brian Foster Date: Tue Sep 2 12:12:53 2014 +1000 xfs: don't log inode unless extent shift makes extent modifications The file collapse mechanism uses xfs_bmap_shift_extents() to collapse all subsequent extents down into the specified, previously punched out, region. This function performs some validation, such as whether a sufficient hole exists in the target region of the collapse, then shifts the remaining exents downward. The exit path of the function currently logs the inode unconditionally. While we must log the inode (and abort) if an error occurs and the transaction is dirty, the initial validation paths can generate errors before the transaction has been dirtied. This creates an unnecessary filesystem shutdown scenario, as the caller will cancel a transaction that has been marked dirty. Modify xfs_bmap_shift_extents() to OR the logflags bits as modifications are made to the inode bmap. Only log the inode in the exit path if logflags has been set. This ensures we only have to cancel a dirty transaction if modifications have been made and prevents an unnecessary filesystem shutdown otherwise. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 7d4ea3ce63a6bc532abb334c469c18481798af8c Author: Dave Chinner Date: Tue Sep 2 12:12:53 2014 +1000 xfs: use ranged writeback and invalidation for direct IO Now we are not doing silly things with dirtying buffers beyond EOF and using invalidation correctly, we can finally reduce the ranges of writeback and invalidation used by direct IO to match that of the IO being issued. Bring the writeback and invalidation ranges back to match the generic direct IO code - this will greatly reduce the perturbation of cached data when direct IO and buffered IO are mixed, but still provide the same buffered vs direct IO coherency behaviour we currently have. Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 834ffca6f7e345a79f6f2e2d131b0dfba8a4b67a Author: Dave Chinner Date: Tue Sep 2 12:12:52 2014 +1000 xfs: don't zero partial page cache pages during O_DIRECT writes Similar to direct IO reads, direct IO writes are using truncate_pagecache_range to invalidate the page cache. This is incorrect due to the sub-block zeroing in the page cache that truncate_pagecache_range() triggers. This patch fixes things by using invalidate_inode_pages2_range instead. It preserves the page cache invalidation, but won't zero any pages. cc: stable@vger.kernel.org Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 85e584da3212140ee80fd047f9058bbee0bc00d5 Author: Chris Mason Date: Tue Sep 2 12:12:52 2014 +1000 xfs: don't zero partial page cache pages during O_DIRECT writes xfs is using truncate_pagecache_range to invalidate the page cache during DIO reads. This is different from the other filesystems who only invalidate pages during DIO writes. truncate_pagecache_range is meant to be used when we are freeing the underlying data structs from disk, so it will zero any partial ranges in the page. This means a DIO read can zero out part of the page cache page, and it is possible the page will stay in cache. buffered reads will find an up to date page with zeros instead of the data actually on disk. This patch fixes things by using invalidate_inode_pages2_range instead. It preserves the page cache invalidation, but won't zero any pages. [dchinner: catch error and warn if it fails. Comment.] cc: stable@vger.kernel.org Signed-off-by: Chris Mason Reviewed-by: Dave Chinner Reviewed-by: Brian Foster Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner commit 22e757a49cf010703fcb9c9b4ef793248c39b0c2 Author: Dave Chinner Date: Tue Sep 2 12:12:51 2014 +1000 xfs: don't dirty buffers beyond EOF generic/263 is failing fsx at this point with a page spanning EOF that cannot be invalidated. The operations are: 1190 mapwrite 0x52c00 thru 0x5e569 (0xb96a bytes) 1191 mapread 0x5c000 thru 0x5d636 (0x1637 bytes) 1192 write 0x5b600 thru 0x771ff (0x1bc00 bytes) where 1190 extents EOF from 0x54000 to 0x5e569. When the direct IO write attempts to invalidate the cached page over this range, it fails with -EBUSY and so any attempt to do page invalidation fails. The real question is this: Why can't that page be invalidated after it has been written to disk and cleaned? Well, there's data on the first two buffers in the page (1k block size, 4k page), but the third buffer on the page (i.e. beyond EOF) is failing drop_buffers because it's bh->b_state == 0x3, which is BH_Uptodate | BH_Dirty. IOWs, there's dirty buffers beyond EOF. Say what? OK, set_buffer_dirty() is called on all buffers from __set_page_buffers_dirty(), regardless of whether the buffer is beyond EOF or not, which means that when we get to ->writepage, we have buffers marked dirty beyond EOF that we need to clean. So, we need to implement our own .set_page_dirty method that doesn't dirty buffers beyond EOF. This is messy because the buffer code is not meant to be shared and it has interesting locking issues on the buffer dirty bits. So just copy and paste it and then modify it to suit what we need. Note: the solutions the other filesystems and generic block code use of marking the buffers clean in ->writepage does not work for XFS. It still leaves dirty buffers beyond EOF and invalidations still fail. Hence rather than play whack-a-mole, this patch simply prevents those buffers from being dirtied in the first place. cc: Signed-off-by: Dave Chinner Reviewed-by: Brian Foster Signed-off-by: Dave Chinner ----------------------------------------------------------------------- hooks/post-receive -- XFS development tree From samuel.granjeaud@inserm.fr Tue Sep 2 02:22:25 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 54C1B7F6A for ; Tue, 2 Sep 2014 02:22:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id F3D17AC001 for ; Tue, 2 Sep 2014 00:22:21 -0700 (PDT) X-ASG-Debug-ID: 1409642536-04bdf010976c6890001-NocioJ Received: from smtp.inserm.fr (smtp.inserm.fr [195.98.252.37]) by cuda.sgi.com with ESMTP id XUCvCIanFQfwldoe (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 00:22:17 -0700 (PDT) X-Barracuda-Envelope-From: samuel.granjeaud@inserm.fr X-Barracuda-Apparent-Source-IP: 195.98.252.37 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.inserm.fr (SrvInserm) with ESMTP id 3F0B9168437 for ; Tue, 2 Sep 2014 09:22:15 +0200 (CEST) X-Virus-Scanned: amavisd-new at inserm.fr Received: from smtp.inserm.fr ([195.98.252.37]) by localhost (potentille.inserm.fr [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id T6RzsbPBXV4t for ; Tue, 2 Sep 2014 09:22:15 +0200 (CEST) Received: from cognac-lmde.crcm.mrs (236-ne1068.marseille.inserm.fr [195.220.68.236]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by smtp.inserm.fr (SrvInserm) with ESMTP id 0FDF1168481 for ; Tue, 2 Sep 2014 09:22:14 +0200 (CEST) Message-ID: <54057025.5090807@inserm.fr> Date: Tue, 02 Sep 2014 09:22:13 +0200 From: Samuel Granjeaud User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: Run out of inodes? References: <54005108.1020203@inserm.fr> <20140829114806.GA17610@bfoster.bfoster> <5400802C.5050005@inserm.fr> <54009603.9050404@sandeen.net> <8d5fff2548d35737c6cebcb1f6382e80@inserm.fr> <20140901211932.342b4bb3@galadriel.home> X-ASG-Orig-Subj: Re: Run out of inodes? In-Reply-To: <20140901211932.342b4bb3@galadriel.home> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp.inserm.fr[195.98.252.37] X-Barracuda-Start-Time: 1409642537 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.9087 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Thanks Eric and Emmanuel. Here are the diagnosis of the installed samba distrib with openfiler 64 b= its # smb (auto-completion key) smbcontrol smbd smbpasswd smbprint smbstatus smbtar # which smbcontrol smbd smbpasswd smbprint smbstatus smbtar /usr/bin/smbcontrol /usr/sbin/smbd /usr/bin/smbpasswd /usr/bin/smbprint /usr/bin/smbstatus /usr/bin/smbtar # file /usr/sbin/smbd /usr/bin/smb* /usr/sbin/smbd: ELF 64-bit LSB shared object, x86-64, version 1=20 (SYSV), for GNU/Linux 2.4.0, stripped /usr/bin/smbcontrol: ELF 64-bit LSB shared object, x86-64, version 1=20 (SYSV), for GNU/Linux 2.4.0, stripped /usr/bin/smbpasswd: ELF 64-bit LSB shared object, x86-64, version 1=20 (SYSV), for GNU/Linux 2.4.0, stripped /usr/bin/smbprint: Bourne shell script text executable /usr/bin/smbstatus: ELF 64-bit LSB shared object, x86-64, version 1=20 (SYSV), for GNU/Linux 2.4.0, stripped /usr/bin/smbtar: Bourne shell script text executable [root@proteo-replica ~]# ldd /usr/sbin/smbd /usr/bin/smb* /usr/sbin/smbd: libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007fe4c97ff00= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007fe4c96f000= 0) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007fe4c95d8000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007fe4c945e0= 00) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007fe4c933a000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007fe4c9237000) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007fe4c9133000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007fe4c9020000) libcrypt.so.1 =3D> /lib64/libcrypt.so.1 (0x00007fe4c8eed000) libpam.so.0 =3D> /lib64/libpam.so.0 (0x00007fe4c8de5000) libacl.so.1 =3D> /lib64/libacl.so.1 (0x00007fe4c8cdd000) libattr.so.1 =3D> /lib64/libattr.so.1 (0x00007fe4c8bd9000) libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007fe4c8ad5000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007fe4c89bf000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007fe4c88bc000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007fe4c87a2000) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007fe4c869a000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007fe4c8592000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007fe4c8485000) libwbclient.so.0 =3D> /usr/lib64/libwbclient.so.0 (0x00007fe4c837900= 0) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007fe4c8264000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007fe4c803e000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007fe4c7f27000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007fe4c7dde000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007fe4c7b6e000) /lib64/ld-linux-x86-64.so.2 (0x00007fe4c9935000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007fe4c7a5a000) /usr/bin/smbcontrol: libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007f6133e37000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007f6133d24000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007f6133c0e000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007f6133b0b000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007f61339f1000) libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007f61338bb00= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007f61337ac00= 0) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007f61336a4000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007f613359c000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007f613348f000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007f6133269000) /lib64/ld-linux-x86-64.so.2 (0x00007f6133f3b000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007f6133155000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007f613303e000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007f6132ef5000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007f6132c85000) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007f6132b6d000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007f61329f30= 00) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007f61328ef000) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007f61327cb000) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007f61326b6000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007f61325b3000) /usr/bin/smbpasswd: libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007f9eaea1f00= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007f9eae91000= 0) libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007f9eae80c000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007f9eae6f9000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007f9eae5e3000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007f9eae4e0000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007f9eae3c6000) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007f9eae2be000) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007f9eae1a6000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007f9eae02c0= 00) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007f9eadf08000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007f9eade05000) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007f9eadd01000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007f9eadbf9000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007f9eadaec000) libwbclient.so.0 =3D> /usr/lib64/libwbclient.so.0 (0x00007f9ead9e000= 0) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007f9ead8cb000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007f9ead6a5000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007f9ead58e000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007f9ead445000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007f9ead1d5000) /lib64/ld-linux-x86-64.so.2 (0x00007f9eaeb55000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007f9ead0c1000) /usr/bin/smbprint: not a dynamic executable /usr/bin/smbstatus: libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007ffc9b5d5000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007ffc9b4c2000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007ffc9b3ac000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007ffc9b2a9000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007ffc9b18f000) libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007ffc9b05900= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007ffc9af4a00= 0) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007ffc9ae42000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007ffc9ad3a000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007ffc9ac2d000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007ffc9aa07000) /lib64/ld-linux-x86-64.so.2 (0x00007ffc9b6d9000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007ffc9a8f3000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007ffc9a7dc000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007ffc9a693000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007ffc9a423000) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007ffc9a30b000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007ffc9a1910= 00) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007ffc9a08d000) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007ffc99f69000) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007ffc99e54000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007ffc99d51000) /usr/bin/smbtar: not a dynamic executable [root@proteo-replica ~]# ldd /usr/sbin/smbd /usr/bin/smb* | grep -r "lib6= 4" libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007fe32220500= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007fe3220f600= 0) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007fe321fde000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007fe321e640= 00) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007fe321d40000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007fe321c3d000) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007fe321b39000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007fe321a26000) libcrypt.so.1 =3D> /lib64/libcrypt.so.1 (0x00007fe3218f3000) libpam.so.0 =3D> /lib64/libpam.so.0 (0x00007fe3217eb000) libacl.so.1 =3D> /lib64/libacl.so.1 (0x00007fe3216e3000) libattr.so.1 =3D> /lib64/libattr.so.1 (0x00007fe3215df000) libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007fe3214db000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007fe3213c5000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007fe3212c2000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007fe3211a8000) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007fe3210a0000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007fe320f98000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007fe320e8b000) libwbclient.so.0 =3D> /usr/lib64/libwbclient.so.0 (0x00007fe320d7f00= 0) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007fe320c6a000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007fe320a44000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007fe32092d000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007fe3207e4000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007fe320574000) /lib64/ld-linux-x86-64.so.2 (0x00007fe32233b000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007fe320460000) libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007fad1f282000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007fad1f16f000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007fad1f059000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007fad1ef56000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007fad1ee3c000) libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007fad1ed0600= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007fad1ebf700= 0) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007fad1eaef000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007fad1e9e7000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007fad1e8da000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007fad1e6b4000) /lib64/ld-linux-x86-64.so.2 (0x00007fad1f386000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007fad1e5a0000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007fad1e489000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007fad1e340000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007fad1e0d0000) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007fad1dfb8000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007fad1de3e0= 00) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007fad1dd3a000) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007fad1dc16000) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007fad1db01000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007fad1d9fe000) libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007f4551e9200= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007f4551d8300= 0) libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007f4551c7f000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007f4551b6c000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007f4551a56000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007f4551953000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007f4551839000) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007f4551731000) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007f4551619000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007f455149f0= 00) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007f455137b000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007f4551278000) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007f4551174000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007f455106c000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007f4550f5f000) libwbclient.so.0 =3D> /usr/lib64/libwbclient.so.0 (0x00007f4550e5300= 0) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007f4550d3e000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007f4550b18000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007f4550a01000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007f45508b8000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007f4550648000) /lib64/ld-linux-x86-64.so.2 (0x00007f4551fc8000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007f4550534000) libcap.so.1 =3D> /lib64/libcap.so.1 (0x00007f03c54c6000) libresolv.so.2 =3D> /lib64/libresolv.so.2 (0x00007f03c53b3000) libnsl.so.1 =3D> /lib64/libnsl.so.1 (0x00007f03c529d000) libdl.so.2 =3D> /lib64/libdl.so.2 (0x00007f03c519a000) librt.so.1 =3D> /lib64/tls/librt.so.1 (0x00007f03c5080000) libldap-2.2.so.7 =3D> /usr/lib64/libldap-2.2.so.7 (0x00007f03c4f4a00= 0) liblber-2.2.so.7 =3D> /usr/lib64/liblber-2.2.so.7 (0x00007f03c4e3b00= 0) libpopt.so.0 =3D> /usr/lib64/libpopt.so.0 (0x00007f03c4d33000) libtalloc.so.1 =3D> /usr/lib64/libtalloc.so.1 (0x00007f03c4c2b000) libtdb.so.1 =3D> /usr/lib64/libtdb.so.1 (0x00007f03c4b1e000) libc.so.6 =3D> /lib64/tls/libc.so.6 (0x00007f03c48f8000) /lib64/ld-linux-x86-64.so.2 (0x00007f03c55ca000) libpthread.so.0 =3D> /lib64/tls/libpthread.so.0 (0x00007f03c47e4000) libsasl2.so.2 =3D> /usr/lib64/libsasl2.so.2 (0x00007f03c46cd000) libssl.so.5 =3D> /lib64/libssl.so.5 (0x00007f03c4584000) libcrypto.so.5 =3D> /lib64/libcrypto.so.5 (0x00007f03c4314000) libgssapi_krb5.so.2 =3D> /usr/kerberos/lib64/libgssapi_krb5.so.2=20 (0x00007f03c41fc000) libkrb5.so.3 =3D> /usr/kerberos/lib64/libkrb5.so.3 (0x00007f03c40820= 00) libcom_err.so.3 =3D> /usr/kerberos/lib64/libcom_err.so.3=20 (0x00007f03c3f7e000) libk5crypto.so.3 =3D> /usr/kerberos/lib64/libk5crypto.so.3=20 (0x00007f03c3e5a000) libz.so.1 =3D> /usr/lib64/libz.so.1 (0x00007f03c3d45000) libkrb5support.so.0 =3D> /usr/kerberos/lib64/libkrb5support.so.0=20 (0x00007f03c3c42000) # ldd /usr/sbin/smbd /usr/bin/smb* | grep -v "lib64" /usr/sbin/smbd: /usr/bin/smbcontrol: /usr/bin/smbpasswd: /usr/bin/smbprint: not a dynamic executable /usr/bin/smbstatus: /usr/bin/smbtar: not a dynamic executable If there is no other binary in relation to Samba I didn't think about, I=20 guess the Samba package is 64 bits. This should prevent me from any=20 surprise. Best. Eric Sandeen wrote, On 31/08/14 04:46: > On 8/30/14, 2:33 PM, Samuel GRANJEAUD IR/INSERM wrote: >> Enabling the inode64 option has solved the problem. >> >> Final question: could some issues appear with SAMBA? > > ah, what sort of issues? > > Any application which uses i.e. a 32-bit stat() interface will return=20 > -EOVERFLOW on a 64-bit inode. > > http://sandeen.net/wordpress/computers/the-world-wants-32-bit-inodes/ > http://blog.fmeh.org/2013/05/11/does-the-world-need-32-bit-inodes/ > > -Eric > Emmanuel Florac wrote, On 01/09/14 21:19: > Le Sat, 30 Aug 2014 21:33:46 +0200 vous =C3=A9criviez: > >> Final question: could some issues appear with SAMBA? >> >> # smbstatus -V >> Version 3.4.5 > Is your whole distribution 64 bits, or only the kernel? However, I've > never had any problem with samba, but some with NFS. > From alex@zadarastorage.com Tue Sep 2 04:51:45 2014 Return-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 (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3F5F57F51 for ; Tue, 2 Sep 2014 04:51:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1F4AB8F8050 for ; Tue, 2 Sep 2014 02:51:42 -0700 (PDT) X-ASG-Debug-ID: 1409651495-04cb6c54fe72e260001-NocioJ Received: from mail-wi0-f172.google.com (mail-wi0-f172.google.com [209.85.212.172]) by cuda.sgi.com with ESMTP id ySVJtjXfH6zaM0GT (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 02 Sep 2014 02:51:35 -0700 (PDT) X-Barracuda-Envelope-From: alex@zadarastorage.com X-Barracuda-Apparent-Source-IP: 209.85.212.172 Received: by mail-wi0-f172.google.com with SMTP id n3so13952010wiv.17 for ; Tue, 02 Sep 2014 02:51:34 -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=C1w74Ahke2H7oGiiLlR30fMF9vExd0zun7s3UMnavKg=; b=d0lsmjouSAa2KkZh7Iw/dIAsiNjz8PLRUqCMtk5DUwGJ7hE1NQpuRiGXP3K6cfOzp6 wpk3J7gsS2YmMnflJV1iwEDgBfPBA501bD168TYOrZx8/VAjEjHTYv8lJIxHursbIBAx bgjhPOlC1IU/oLBpJjBM5NMvwJUXl6aoaDOi4pkXgy0iQcy9V9YZJsVkV3Lz1eme3IRx eoE7SdLOsnBSvbb1aThrF6+rEwvMm+NjigS14rjTpxLhV2XRqbRVsvOsB52c7/i7PpyA /iYTzSixw5Dz2PHHFj731BN4jngUAfDyH2pzOl999uOl+xYTQa5Mi/MIl2I5bt8M2e2i ni2Q== X-Gm-Message-State: ALoCoQmthf+ygSd1YyXyhsKZBkZBkMq16PufKRfPrxi/DiZL+opsNiZl8Mhpp1wWmBM8mMMfZOSf X-Received: by 10.194.185.230 with SMTP id ff6mr1564230wjc.120.1409651494506; Tue, 02 Sep 2014 02:51:34 -0700 (PDT) Received: from alyakaslap (bzq-169-168-31-234.red.bezeqint.net. [31.168.169.234]) by mx.google.com with ESMTPSA id lh11sm32626225wic.17.2014.09.02.02.51.33 for (version=TLSv1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 02 Sep 2014 02:51:33 -0700 (PDT) Message-ID: <3476A2CBDE694DC6BD06DBDD15165151@alyakaslap> From: "Alex Lyakas" To: "Brian Foster" , "Dave Chinner" Cc: References: <1408648692-15957-1-git-send-email-bfoster@redhat.com> <20140825142025.GA10135@bfoster.bfoster> <20140831210507.GA11913@bfoster.bfoster> In-Reply-To: <20140831210507.GA11913@bfoster.bfoster> Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error Date: Tue, 2 Sep 2014 12:51:35 +0300 X-ASG-Orig-Subj: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error 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-f172.google.com[209.85.212.172] X-Barracuda-Start-Time: 1409651495 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.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_MISMATCH_TO, MARKETING_SUBJECT, STOX_REPLY_TYPE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9090 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 STOX_REPLY_TYPE STOX_REPLY_TYPE 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hi Brian, Dave, I tested this patch on 3.8.13 kernel with the scenario I described in http://oss.sgi.com/pipermail/xfs/2014-August/037637.html, but I still see the issue. I placed the metadump at https://drive.google.com/file/d/0ByBy89zr3kJNV2UxMERNTkE4aHM/edit?usp=sharing During log recovery, 3 IO errors are encountered: [ 340.381199] XFS (dm-0): Mounting Filesystem [ 340.439897] XFS (dm-0): Sleep 10s before xlog_do_recover [ 350.440143] XFS (dm-0): Starting recovery (logdev: internal) [ 351.584647] XFS (dm-0): metadata I/O error: block 0x1 ("xlog_recover_iodone") error 28 numblks 1 [ 351.584660] XFS (dm-0): metadata I/O error: block 0x40 ("xlog_recover_iodone") error 28 numblks 16 [ 351.584665] XFS (dm-0): xfs_do_force_shutdown(0x1) called from line 377 of file /mnt/work/alex/zadara-btrfs/fs/xfs/xfs_log_recover.c. Return address = 0xffffffffa0372728 [ 351.584969] XFS (dm-0): I/O Error Detected. Shutting down filesystem [ 351.584970] XFS (dm-0): Please umount the filesystem and rectify the problem(s) [ 351.585047] XFS (dm-0): metadata I/O error: block 0x1e00040 ("xlog_recover_iodone") error 28 numblks 16 [ 351.585050] XFS (dm-0): xfs_do_force_shutdown(0x1) called from line 377 of file /mnt/work/alex/zadara-btrfs/fs/xfs/xfs_log_recover.c. Return address = 0xffffffffa0372728 [ 351.585068] XFS (dm-0): log mount/recovery failed: error 28 [ 351.585332] XFS (dm-0): log mount failed Two IO error callbacks are handled before XFS is unmounted, but the last one crashes with stack[1]. Do I need some or all of the 9 patches that Dave posted? (They do not apply to my kernel, so I need to apply them by hand). Thanks, Alex. [1] [ 351.592349] general protection fault: 0000 [#1] SMP [ 351.593440] Modules linked in: xfs(O) libcrc32c dm_linear_custom(O) nfsv3 deflate zlib_deflate ctr twofish_generic twofish_x86_64_3way glue_helper lrw xts gf128mul twofish_x86_64 twofish_common camellia_generic serpent_generic blowfish_generic blowfish_x86_64 blowfish_common cast5_generic cast_common des_generic xcbc rmd160 sha512_generic crypto_null af_key xfrm_algo kvm ppdev vfat fat dm_round_robin microcode nfsd nfs_acl parport_pc dm_iostat(O) dm_multipath(O) psmouse serio_raw mac_hid i2c_piix4 lp parport nfsv4 auth_rpcgss nfs fscache lockd sunrpc floppy [ 351.596118] CPU 3 [ 351.596118] Pid: 133, comm: kworker/3:1H Tainted: G W O 3.8.13-557-generic #1382000791 Bochs Bochs [ 351.596118] RIP: 0010:[] [] strnlen+0xb/0x30 [ 351.596118] RSP: 0018:ffff880035405b08 EFLAGS: 00010086 [ 351.596118] RAX: 0000000000000000 RBX: ffffffff81e6a4e7 RCX: 0000000000000000 [ 351.596118] RDX: e4e8390a265c0000 RSI: ffffffffffffffff RDI: e4e8390a265c0000 [ 351.596118] RBP: ffff880035405b08 R08: 000000000000ffff R09: 000000000000ffff [ 351.596118] R10: 0000000000000000 R11: 0000000000000331 R12: e4e8390a265c0000 [ 351.596118] R13: ffffffff81e6a8c0 R14: 0000000000000000 R15: 000000000000ffff [ 351.596118] FS: 0000000000000000(0000) GS:ffff88007fd80000(0000) knlGS:0000000000000000 [ 351.596118] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 351.596118] CR2: 00007fff7bfe1c38 CR3: 0000000035a59000 CR4: 00000000000006e0 [ 351.596118] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 351.596118] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 351.596118] Process kworker/3:1H (pid: 133, threadinfo ffff880035404000, task ffff880035ae5c00) [ 351.596118] Stack: [ 351.596118] ffff880035405b48 ffffffff8133dd5e ffff880035405b28 ffffffff81e6a4e7 [ 351.596118] ffffffffa03b2bc4 ffff880035405c80 ffffffffa03b2bc4 ffffffff81e6a8c0 [ 351.596118] ffff880035405bc8 ffffffff8133ef59 ffff880035405bc8 ffffffff81059aa7 [ 351.596118] Call Trace: [ 351.596118] [] string.isra.4+0x3e/0xd0 [ 351.596118] [] vsnprintf+0x219/0x640 [ 351.596118] [] ? msg_print_text+0xb7/0x1b0 [ 351.596118] [] vscnprintf+0x11/0x30 [ 351.596118] [] vprintk_emit+0xc1/0x490 [ 351.596118] [] ? vprintk_emit+0x170/0x490 [ 351.596118] [] printk+0x61/0x63 [ 351.596118] [] __xfs_printk+0x31/0x50 [xfs] [ 351.596118] [] xfs_notice+0x53/0x60 [xfs] [ 351.596118] [] xfs_do_force_shutdown+0xf5/0x180 [xfs] [ 351.596118] [] ? xlog_recover_iodone+0x48/0x70 [xfs] [ 351.596118] [] xlog_recover_iodone+0x48/0x70 [xfs] [ 351.596118] [] xfs_buf_iodone_work+0x4d/0xb0 [xfs] [ 351.596118] [] process_one_work+0x141/0x4a0 [ 351.596118] [] worker_thread+0x168/0x410 [ 351.596118] [] ? manage_workers+0x120/0x120 [ 351.596118] [] kthread+0xc0/0xd0 [ 351.596118] [] ? flush_kthread_worker+0xb0/0xb0 [ 351.596118] [] ret_from_fork+0x7c/0xb0 [ 351.596118] [] ? flush_kthread_worker+0xb0/0xb0 [ 351.596118] Code: 31 c0 80 3f 00 55 48 89 e5 74 11 48 89 f8 66 90 48 83 c0 01 80 38 00 75 f7 48 29 f8 5d c3 66 90 55 31 c0 48 85 f6 48 89 e5 74 23 <80> 3f 00 74 1e 48 89 f8 eb 0c 0f 1f 00 48 83 ee 01 80 38 00 74 [ 351.596118] RIP [] strnlen+0xb/0x30 [ 351.596118] RSP [ 351.596118] ---[ end trace cb6b9820566f6848 ]--- -----Original Message----- From: Brian Foster Sent: 01 September, 2014 12:05 AM To: Alex Lyakas Cc: xfs@oss.sgi.com ; Dave Chinner Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error On Sun, Aug 31, 2014 at 11:50:52AM +0300, Alex Lyakas wrote: > Hi Brian, Dave, > I tested this patch on kernel 3.16, top commit: > > commit 19583ca584d6f574384e17fe7613dfaeadcdc4a6 > Author: Linus Torvalds > Date: Sun Aug 3 15:25:02 2014 -0700 > > Linux 3.16 > > and, yes, it appears to fix the issue. > Thanks. That settles that then, I think. We're reproducing different problems on the 3.8 stable kernel vs. a recent kernel using the same test case. > Trouble is that our production kernel is 3.8.13, and we cannot upgrade to > mainline kernel easily. Question is whether we can expect some patch > suitable for our kernel, or, since our kernel is EOL and not a long-term > one, we cannot? > Dave wrote a patch specifically to resolve this problem on older kernels: http://oss.sgi.com/archives/xfs/2014-08/msg00204.html Brian > Thanks for your help, > Alex. > > > -----Original Message----- From: Brian Foster > Sent: 25 August, 2014 5:20 PM > To: Alex Lyakas > Cc: xfs@oss.sgi.com ; Dave Chinner > Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O > error > > On Sun, Aug 24, 2014 at 12:20:20PM +0300, Alex Lyakas wrote: > >Hi Brian, > > > >On Thu, Aug 21, 2014 at 10:18 PM, Brian Foster > >wrote: > >> XFS log recovery builds up an xlog_recover object as it passes through > >> the log operations on the physical log. These structures are managed > >> via > >> a hash table and are allocated when a new transaction is encountered > >> and > >> freed once a commit operation for the transaction is encountered. > >> > >> This state machine for active transactions is implemented by a > >> combination of xlog_do_recovery_pass(), which walks through the log > >> buffers and xlog_recover_process_data() which processes log operations > >> within each buffer. The latter function decides whether to allocate a > >> new xlog_recover, add to it or commit and ultimately free it. If an > >> error occurs at any point during the lifecycle of a particular > >> xlog_recover, xlog_recover_process_data() frees the object and returns > >> an error. > >> > >> xlog_recover_commit_trans() handles the final processing of the > >> transaction. It submits whatever I/O is required for the transaction > >> and > >> frees xlog_recover object along with the transaction items it tracks. > >> If > >> an error occurs at the final stages of the commit operation, such as > >> I/O > >> failure, both xlog_recover_commit_trans() and > >> xlog_recover_process_data() attempt to free the trans object. > >> > >> Modify xlog_recover_commit_trans() to only free the trans object on > >> successful completion of the trans, including any I/O errors that might > >> occur when recovering the log. > >> > >> Signed-off-by: Brian Foster > >> --- > >> > >> Hi all, > >> > >> I found that the recent buffer I/O rework fixes didn't address the > >> crash > >> reproduced by the dm-flakey/log recovery test case I posted recently. I > >> tracked the crash down to this, which allows the test to pass. This > >> addresses the crash I saw when running the reproducer manually with the > >> metadump that Alex posted as well. > >> > >> FWIW, I also went back and tested the xfs_buf_iowait() experiment in > >> both scenarios (Alex's metadump and xfstests test) and they all > >> reproduce the same crash for me. I think that either I'm still not > >> reproducing the original problem, something else might have > >> contaminated > >> the original xfs_buf_iowait() test to give a false positive, or > >> something else entirely is going on. > >> > >> Alex, > >> > >> If you have a chance, I think it might be interesting to see whether > >> you > >> reproduce any problems with this patch. It looks like this is a > >> regression introduced by: > >> > >> 2a84108f xfs: free the list of recovery items on error > >> > >> ... but I have no idea if that's in whatever kernel you're running. > >I am running kernel 3.8.13 with some changes (published at > >https://github.com/zadarastorage/zadara-xfs-pushback), but this > >problem also happens on pristine 3.8.13 from > >git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git, > >branch linux-stable-3.8.y. > > > >I do not have commit 2a84108f in this kernel. It was introduced in 3.14. > >I applied your patch to 3.8.13, but it doesn't fix the issue. Same > >problem happens when testing scenario that I described in > >http://oss.sgi.com/pipermail/xfs/2014-August/037637.html. > > > > Ok, thanks. Yeah, I don't see the double free regression in the 3.8.13 > stable branch. I went back to that kernel to try and confirm some > things. I do reproduce the problem with your metadump as well as the > test case I put together. I tested Dave's buf hold across sync I/O patch > and that does indeed prevent the problem. > > For whatever reason, neither the test case nor your metadump reproduce > the same problem on latest kernels. Instead, they reproduce this double > free regression. I suspect this is what you ran into when you reproduced > on a more recent kernel. If you'd like, feel free to try and verify that > by running your reproducer again on a recent kernel with this patch and > see if you can still reproduce a crash as with the 3.8.13 kernel. > > Brian > > >Thanks, > >Alex. > > > >> > >> Brian > >> > >> fs/xfs/xfs_log_recover.c | 11 ++++++++--- > >> 1 file changed, 8 insertions(+), 3 deletions(-) > >> > >> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > >> index 176c4b3..daca9a6 100644 > >> --- a/fs/xfs/xfs_log_recover.c > >> +++ b/fs/xfs/xfs_log_recover.c > >> @@ -3528,10 +3528,15 @@ out: > >> if (!list_empty(&done_list)) > >> list_splice_init(&done_list, &trans->r_itemq); > >> > >> - xlog_recover_free_trans(trans); > >> - > >> error2 = xfs_buf_delwri_submit(&buffer_list); > >> - return error ? error : error2; > >> + > >> + if (!error) > >> + error = error2; > >> + /* caller frees trans on error */ > >> + if (!error) > >> + xlog_recover_free_trans(trans); > >> + > >> + return error; > >> } > >> > >> STATIC int > >> -- > >> 1.8.3.1 > >> > From bfoster@redhat.com Tue Sep 2 07:36:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 696D57F6F for ; Tue, 2 Sep 2014 07:36:47 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 44A1B8F8050 for ; Tue, 2 Sep 2014 05:36:47 -0700 (PDT) X-ASG-Debug-ID: 1409661405-04cbb054859c15c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id fi9qAcBfjARZCd3m (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 05:36: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-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s82Cah5K023873 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 2 Sep 2014 08:36:44 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82CahfC003564; Tue, 2 Sep 2014 08:36:43 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 2B4FB12577F; Tue, 2 Sep 2014 08:36:42 -0400 (EDT) Date: Tue, 2 Sep 2014 08:36:42 -0400 From: Brian Foster To: Alex Lyakas Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error Message-ID: <20140902123641.GA24452@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error References: <1408648692-15957-1-git-send-email-bfoster@redhat.com> <20140825142025.GA10135@bfoster.bfoster> <20140831210507.GA11913@bfoster.bfoster> <3476A2CBDE694DC6BD06DBDD15165151@alyakaslap> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3476A2CBDE694DC6BD06DBDD15165151@alyakaslap> 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: 1409661406 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, Sep 02, 2014 at 12:51:35PM +0300, Alex Lyakas wrote: > Hi Brian, Dave, > I tested this patch on 3.8.13 kernel with the scenario I described in > http://oss.sgi.com/pipermail/xfs/2014-August/037637.html, but I still see > the issue. > I placed the metadump at > https://drive.google.com/file/d/0ByBy89zr3kJNV2UxMERNTkE4aHM/edit?usp=sharing > > During log recovery, 3 IO errors are encountered: > [ 340.381199] XFS (dm-0): Mounting Filesystem > [ 340.439897] XFS (dm-0): Sleep 10s before xlog_do_recover > [ 350.440143] XFS (dm-0): Starting recovery (logdev: internal) > [ 351.584647] XFS (dm-0): metadata I/O error: block 0x1 > ("xlog_recover_iodone") error 28 numblks 1 > [ 351.584660] XFS (dm-0): metadata I/O error: block 0x40 > ("xlog_recover_iodone") error 28 numblks 16 > [ 351.584665] XFS (dm-0): xfs_do_force_shutdown(0x1) called from line 377 > of file /mnt/work/alex/zadara-btrfs/fs/xfs/xfs_log_recover.c. Return > address = 0xffffffffa0372728 > [ 351.584969] XFS (dm-0): I/O Error Detected. Shutting down filesystem > [ 351.584970] XFS (dm-0): Please umount the filesystem and rectify the > problem(s) > [ 351.585047] XFS (dm-0): metadata I/O error: block 0x1e00040 > ("xlog_recover_iodone") error 28 numblks 16 > [ 351.585050] XFS (dm-0): xfs_do_force_shutdown(0x1) called from line 377 > of file /mnt/work/alex/zadara-btrfs/fs/xfs/xfs_log_recover.c. Return > address = 0xffffffffa0372728 > [ 351.585068] XFS (dm-0): log mount/recovery failed: error 28 > [ 351.585332] XFS (dm-0): log mount failed > > Two IO error callbacks are handled before XFS is unmounted, but the last one > crashes with stack[1]. > I don't reproduce this with the metadump posted above. I suppose hardware/timing could make a difference, however. > Do I need some or all of the 9 patches that Dave posted? (They do not apply > to my kernel, so I need to apply them by hand). > Only the first patch is required for the stable tree. Did you have to manually apply that one? I had to, so it might be a good idea to post it as applied to your tree just to verify. That aside, I suppose the problem could be that we still don't wait for the I/O completion mechanism fully on the mount/log recovery side. E.g., we have a buffer reference, but the caller can still proceed to free the mp from which the error message derives the fs name. Brian > Thanks, > Alex. > > > [1] > [ 351.592349] general protection fault: 0000 [#1] SMP > [ 351.593440] Modules linked in: xfs(O) libcrc32c dm_linear_custom(O) nfsv3 > deflate zlib_deflate ctr twofish_generic twofish_x86_64_3way glue_helper lrw > xts gf128mul twofish_x86_64 twofish_common camellia_generic serpent_generic > blowfish_generic blowfish_x86_64 blowfish_common cast5_generic cast_common > des_generic xcbc rmd160 sha512_generic crypto_null af_key xfrm_algo kvm > ppdev vfat fat dm_round_robin microcode nfsd nfs_acl parport_pc dm_iostat(O) > dm_multipath(O) psmouse serio_raw mac_hid i2c_piix4 lp parport nfsv4 > auth_rpcgss nfs fscache lockd sunrpc floppy > [ 351.596118] CPU 3 > [ 351.596118] Pid: 133, comm: kworker/3:1H Tainted: G W O > 3.8.13-557-generic #1382000791 Bochs Bochs > [ 351.596118] RIP: 0010:[] [] > strnlen+0xb/0x30 > [ 351.596118] RSP: 0018:ffff880035405b08 EFLAGS: 00010086 > [ 351.596118] RAX: 0000000000000000 RBX: ffffffff81e6a4e7 RCX: > 0000000000000000 > [ 351.596118] RDX: e4e8390a265c0000 RSI: ffffffffffffffff RDI: > e4e8390a265c0000 > [ 351.596118] RBP: ffff880035405b08 R08: 000000000000ffff R09: > 000000000000ffff > [ 351.596118] R10: 0000000000000000 R11: 0000000000000331 R12: > e4e8390a265c0000 > [ 351.596118] R13: ffffffff81e6a8c0 R14: 0000000000000000 R15: > 000000000000ffff > [ 351.596118] FS: 0000000000000000(0000) GS:ffff88007fd80000(0000) > knlGS:0000000000000000 > [ 351.596118] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b > [ 351.596118] CR2: 00007fff7bfe1c38 CR3: 0000000035a59000 CR4: > 00000000000006e0 > [ 351.596118] DR0: 0000000000000000 DR1: 0000000000000000 DR2: > 0000000000000000 > [ 351.596118] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > 0000000000000400 > [ 351.596118] Process kworker/3:1H (pid: 133, threadinfo ffff880035404000, > task ffff880035ae5c00) > [ 351.596118] Stack: > [ 351.596118] ffff880035405b48 ffffffff8133dd5e ffff880035405b28 > ffffffff81e6a4e7 > [ 351.596118] ffffffffa03b2bc4 ffff880035405c80 ffffffffa03b2bc4 > ffffffff81e6a8c0 > [ 351.596118] ffff880035405bc8 ffffffff8133ef59 ffff880035405bc8 > ffffffff81059aa7 > [ 351.596118] Call Trace: > [ 351.596118] [] string.isra.4+0x3e/0xd0 > [ 351.596118] [] vsnprintf+0x219/0x640 > [ 351.596118] [] ? msg_print_text+0xb7/0x1b0 > [ 351.596118] [] vscnprintf+0x11/0x30 > [ 351.596118] [] vprintk_emit+0xc1/0x490 > [ 351.596118] [] ? vprintk_emit+0x170/0x490 > [ 351.596118] [] printk+0x61/0x63 > [ 351.596118] [] __xfs_printk+0x31/0x50 [xfs] > [ 351.596118] [] xfs_notice+0x53/0x60 [xfs] > [ 351.596118] [] xfs_do_force_shutdown+0xf5/0x180 [xfs] > [ 351.596118] [] ? xlog_recover_iodone+0x48/0x70 [xfs] > [ 351.596118] [] xlog_recover_iodone+0x48/0x70 [xfs] > [ 351.596118] [] xfs_buf_iodone_work+0x4d/0xb0 [xfs] > [ 351.596118] [] process_one_work+0x141/0x4a0 > [ 351.596118] [] worker_thread+0x168/0x410 > [ 351.596118] [] ? manage_workers+0x120/0x120 > [ 351.596118] [] kthread+0xc0/0xd0 > [ 351.596118] [] ? flush_kthread_worker+0xb0/0xb0 > [ 351.596118] [] ret_from_fork+0x7c/0xb0 > [ 351.596118] [] ? flush_kthread_worker+0xb0/0xb0 > [ 351.596118] Code: 31 c0 80 3f 00 55 48 89 e5 74 11 48 89 f8 66 90 48 83 > c0 01 80 38 00 75 f7 48 29 f8 5d c3 66 90 55 31 c0 48 85 f6 48 89 e5 74 23 > <80> 3f 00 74 1e 48 89 f8 eb 0c 0f 1f 00 48 83 ee 01 80 38 00 74 > [ 351.596118] RIP [] strnlen+0xb/0x30 > [ 351.596118] RSP > [ 351.596118] ---[ end trace cb6b9820566f6848 ]--- > > > > -----Original Message----- From: Brian Foster > Sent: 01 September, 2014 12:05 AM > To: Alex Lyakas > Cc: xfs@oss.sgi.com ; Dave Chinner > Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O > error > > On Sun, Aug 31, 2014 at 11:50:52AM +0300, Alex Lyakas wrote: > >Hi Brian, Dave, > >I tested this patch on kernel 3.16, top commit: > > > >commit 19583ca584d6f574384e17fe7613dfaeadcdc4a6 > >Author: Linus Torvalds > >Date: Sun Aug 3 15:25:02 2014 -0700 > > > > Linux 3.16 > > > >and, yes, it appears to fix the issue. > > > > Thanks. That settles that then, I think. We're reproducing different > problems on the 3.8 stable kernel vs. a recent kernel using the same > test case. > > >Trouble is that our production kernel is 3.8.13, and we cannot upgrade to > >mainline kernel easily. Question is whether we can expect some patch > >suitable for our kernel, or, since our kernel is EOL and not a long-term > >one, we cannot? > > > > Dave wrote a patch specifically to resolve this problem on older > kernels: > > http://oss.sgi.com/archives/xfs/2014-08/msg00204.html > > Brian > > >Thanks for your help, > >Alex. > > > > > >-----Original Message----- From: Brian Foster > >Sent: 25 August, 2014 5:20 PM > >To: Alex Lyakas > >Cc: xfs@oss.sgi.com ; Dave Chinner > >Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O > >error > > > >On Sun, Aug 24, 2014 at 12:20:20PM +0300, Alex Lyakas wrote: > >>Hi Brian, > >> > >>On Thu, Aug 21, 2014 at 10:18 PM, Brian Foster > >>wrote: > >>> XFS log recovery builds up an xlog_recover object as it passes through > >>> the log operations on the physical log. These structures are managed >> > >via > >>> a hash table and are allocated when a new transaction is encountered >> > >and > >>> freed once a commit operation for the transaction is encountered. > >>> > >>> This state machine for active transactions is implemented by a > >>> combination of xlog_do_recovery_pass(), which walks through the log > >>> buffers and xlog_recover_process_data() which processes log operations > >>> within each buffer. The latter function decides whether to allocate a > >>> new xlog_recover, add to it or commit and ultimately free it. If an > >>> error occurs at any point during the lifecycle of a particular > >>> xlog_recover, xlog_recover_process_data() frees the object and returns > >>> an error. > >>> > >>> xlog_recover_commit_trans() handles the final processing of the > >>> transaction. It submits whatever I/O is required for the transaction >> > >and > >>> frees xlog_recover object along with the transaction items it tracks. > >>> If > >>> an error occurs at the final stages of the commit operation, such as >> > >I/O > >>> failure, both xlog_recover_commit_trans() and > >>> xlog_recover_process_data() attempt to free the trans object. > >>> > >>> Modify xlog_recover_commit_trans() to only free the trans object on > >>> successful completion of the trans, including any I/O errors that might > >>> occur when recovering the log. > >>> > >>> Signed-off-by: Brian Foster > >>> --- > >>> > >>> Hi all, > >>> > >>> I found that the recent buffer I/O rework fixes didn't address the >> > >crash > >>> reproduced by the dm-flakey/log recovery test case I posted recently. I > >>> tracked the crash down to this, which allows the test to pass. This > >>> addresses the crash I saw when running the reproducer manually with the > >>> metadump that Alex posted as well. > >>> > >>> FWIW, I also went back and tested the xfs_buf_iowait() experiment in > >>> both scenarios (Alex's metadump and xfstests test) and they all > >>> reproduce the same crash for me. I think that either I'm still not > >>> reproducing the original problem, something else might have >> > >contaminated > >>> the original xfs_buf_iowait() test to give a false positive, or > >>> something else entirely is going on. > >>> > >>> Alex, > >>> > >>> If you have a chance, I think it might be interesting to see whether >> > >you > >>> reproduce any problems with this patch. It looks like this is a > >>> regression introduced by: > >>> > >>> 2a84108f xfs: free the list of recovery items on error > >>> > >>> ... but I have no idea if that's in whatever kernel you're running. > >>I am running kernel 3.8.13 with some changes (published at > >>https://github.com/zadarastorage/zadara-xfs-pushback), but this > >>problem also happens on pristine 3.8.13 from > >>git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git, > >>branch linux-stable-3.8.y. > >> > >>I do not have commit 2a84108f in this kernel. It was introduced in 3.14. > >>I applied your patch to 3.8.13, but it doesn't fix the issue. Same > >>problem happens when testing scenario that I described in > >>http://oss.sgi.com/pipermail/xfs/2014-August/037637.html. > >> > > > >Ok, thanks. Yeah, I don't see the double free regression in the 3.8.13 > >stable branch. I went back to that kernel to try and confirm some > >things. I do reproduce the problem with your metadump as well as the > >test case I put together. I tested Dave's buf hold across sync I/O patch > >and that does indeed prevent the problem. > > > >For whatever reason, neither the test case nor your metadump reproduce > >the same problem on latest kernels. Instead, they reproduce this double > >free regression. I suspect this is what you ran into when you reproduced > >on a more recent kernel. If you'd like, feel free to try and verify that > >by running your reproducer again on a recent kernel with this patch and > >see if you can still reproduce a crash as with the 3.8.13 kernel. > > > >Brian > > > >>Thanks, > >>Alex. > >> > >>> > >>> Brian > >>> > >>> fs/xfs/xfs_log_recover.c | 11 ++++++++--- > >>> 1 file changed, 8 insertions(+), 3 deletions(-) > >>> > >>> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > >>> index 176c4b3..daca9a6 100644 > >>> --- a/fs/xfs/xfs_log_recover.c > >>> +++ b/fs/xfs/xfs_log_recover.c > >>> @@ -3528,10 +3528,15 @@ out: > >>> if (!list_empty(&done_list)) > >>> list_splice_init(&done_list, &trans->r_itemq); > >>> > >>> - xlog_recover_free_trans(trans); > >>> - > >>> error2 = xfs_buf_delwri_submit(&buffer_list); > >>> - return error ? error : error2; > >>> + > >>> + if (!error) > >>> + error = error2; > >>> + /* caller frees trans on error */ > >>> + if (!error) > >>> + xlog_recover_free_trans(trans); > >>> + > >>> + return error; > >>> } > >>> > >>> STATIC int > >>> -- > >>> 1.8.3.1 > >>> > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Sep 2 09:08:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9B40D7F55 for ; Tue, 2 Sep 2014 09:08:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7C1A38F8059 for ; Tue, 2 Sep 2014 07:08:19 -0700 (PDT) X-ASG-Debug-ID: 1409666897-04cbb054889c4770001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id pJtnD8iqYoMoqIko (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 07:08: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-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s82E8HCg000354 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 2 Sep 2014 10:08:17 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82E8GsA008525 for ; Tue, 2 Sep 2014 10:08:16 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id AFCEF12577D; Tue, 2 Sep 2014 10:08:15 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH v2 1/2] xfs: add debug sysfs attribute set Date: Tue, 2 Sep 2014 10:08:14 -0400 X-ASG-Orig-Subj: [PATCH v2 1/2] xfs: add debug sysfs attribute set Message-Id: <1409666895-49799-2-git-send-email-bfoster@redhat.com> In-Reply-To: <1409666895-49799-1-git-send-email-bfoster@redhat.com> References: <1409666895-49799-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: 1409666897 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 Create a top-level debug directory for global debug sysfs attributes. This directory is added and removed on XFS module initialization and removal respectively for DEBUG mode kernels only. It typically resides at /sys/fs/xfs/debug. It is located at the top level of the xfs sysfs hierarchy as attributes might define global behavior or behavior that must be configured before an xfs mount is available (e.g., log recovery behavior). Define the global debug kobject that represents the debug sysfs directory and add generic attribute show/store helpers to support future attributes. No debug attributes are exported as of yet. Signed-off-by: Brian Foster --- fs/xfs/xfs_super.c | 23 +++++++++++++++++++++-- fs/xfs/xfs_sysfs.c | 43 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_sysfs.h | 1 + 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index b194652..919a64c 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -47,6 +47,7 @@ #include "xfs_dinode.h" #include "xfs_filestream.h" #include "xfs_quota.h" +#include "xfs_sysfs.h" #include #include @@ -61,7 +62,11 @@ static const struct super_operations xfs_super_operations; static kmem_zone_t *xfs_ioend_zone; mempool_t *xfs_ioend_pool; -struct kset *xfs_kset; + +struct kset *xfs_kset; /* top-level xfs sysfs dir */ +#ifdef DEBUG +static struct xfs_kobj xfs_dbg_kobj; /* global debug sysfs attrs */ +#endif #define MNTOPT_LOGBUFS "logbufs" /* number of XFS log buffers */ #define MNTOPT_LOGBSIZE "logbsize" /* size of XFS log buffers */ @@ -1768,9 +1773,16 @@ init_xfs_fs(void) goto out_sysctl_unregister;; } - error = xfs_qm_init(); +#ifdef DEBUG + xfs_dbg_kobj.kobject.kset = xfs_kset; + error = xfs_sysfs_init(&xfs_dbg_kobj, &xfs_dbg_ktype, NULL, "debug"); if (error) goto out_kset_unregister; +#endif + + error = xfs_qm_init(); + if (error) + goto out_remove_kobj; error = register_filesystem(&xfs_fs_type); if (error) @@ -1779,7 +1791,11 @@ init_xfs_fs(void) out_qm_exit: xfs_qm_exit(); + out_remove_kobj: +#ifdef DEBUG + xfs_sysfs_del(&xfs_dbg_kobj); out_kset_unregister: +#endif kset_unregister(xfs_kset); out_sysctl_unregister: xfs_sysctl_unregister(); @@ -1802,6 +1818,9 @@ exit_xfs_fs(void) { xfs_qm_exit(); unregister_filesystem(&xfs_fs_type); +#ifdef DEBUG + xfs_sysfs_del(&xfs_dbg_kobj); +#endif kset_unregister(xfs_kset); xfs_sysctl_unregister(); xfs_cleanup_procfs(); diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c index 9835139..32ddf0c 100644 --- a/fs/xfs/xfs_sysfs.c +++ b/fs/xfs/xfs_sysfs.c @@ -51,6 +51,49 @@ struct kobj_type xfs_mp_ktype = { .release = xfs_sysfs_release, }; +#ifdef DEBUG +/* debug */ + +static struct attribute *xfs_dbg_attrs[] = { + NULL, +}; + +STATIC ssize_t +xfs_dbg_show( + struct kobject *kobject, + struct attribute *attr, + char *buf) +{ + struct xfs_sysfs_attr *xfs_attr = to_attr(attr); + + return xfs_attr->show ? xfs_attr->show(buf, NULL) : 0; +} + +STATIC ssize_t +xfs_dbg_store( + struct kobject *kobject, + struct attribute *attr, + const char *buf, + size_t count) +{ + struct xfs_sysfs_attr *xfs_attr = to_attr(attr); + + return xfs_attr->store ? xfs_attr->store(buf, count, NULL) : 0; +} + +static struct sysfs_ops xfs_dbg_ops = { + .show = xfs_dbg_show, + .store = xfs_dbg_store, +}; + +struct kobj_type xfs_dbg_ktype = { + .release = xfs_sysfs_release, + .sysfs_ops = &xfs_dbg_ops, + .default_attrs = xfs_dbg_attrs, +}; + +#endif /* DEBUG */ + /* xlog */ STATIC ssize_t diff --git a/fs/xfs/xfs_sysfs.h b/fs/xfs/xfs_sysfs.h index 54a2091..240eee3 100644 --- a/fs/xfs/xfs_sysfs.h +++ b/fs/xfs/xfs_sysfs.h @@ -20,6 +20,7 @@ #define __XFS_SYSFS_H__ extern struct kobj_type xfs_mp_ktype; /* xfs_mount */ +extern struct kobj_type xfs_dbg_ktype; /* debug */ extern struct kobj_type xfs_log_ktype; /* xlog */ static inline struct xfs_kobj * -- 1.8.3.1 From bfoster@redhat.com Tue Sep 2 09:08:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 55BAD7F5A for ; Tue, 2 Sep 2014 09:08:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 28EBD8F804C for ; Tue, 2 Sep 2014 07:08:18 -0700 (PDT) X-ASG-Debug-ID: 1409666897-04bdf010a16d7ce0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 4b3Vflei9BiN6Rsa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 07:08:17 -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 (8.14.4/8.14.4) with ESMTP id s82E8Hw5024860 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 2 Sep 2014 10:08:17 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82E8GQS024865 for ; Tue, 2 Sep 2014 10:08:16 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id BE4F0125780; Tue, 2 Sep 2014 10:08:15 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH v2 2/2] xfs: export log_recovery_delay to delay mount time log recovery Date: Tue, 2 Sep 2014 10:08:15 -0400 X-ASG-Orig-Subj: [PATCH v2 2/2] xfs: export log_recovery_delay to delay mount time log recovery Message-Id: <1409666895-49799-3-git-send-email-bfoster@redhat.com> In-Reply-To: <1409666895-49799-1-git-send-email-bfoster@redhat.com> References: <1409666895-49799-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: 1409666897 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 XFS log recovery has been discovered to have race conditions with buffers when I/O errors occur. External tools are available to simulate I/O errors to XFS, but this alone is not sufficient for testing log recovery. XFS unconditionally resets the inactive region of the log prior to log recovery to avoid confusion over processing any partially written log records that might have been written before an unclean shutdown. Therefore, unconditional write I/O failures at mount time are caught by the reset sequence rather than log recovery and hinder the ability to test the latter. The device-mapper dm-flakey module uses an up/down timer to define a cycle for when to fail I/Os. Create a pre log recovery delay tunable that can be used to coordinate XFS log recovery with I/O errors simulated by dm-flakey. This facilitates coordination in userspace that allows the reset of stale log blocks to succeed and writes due to log recovery to fail. For example, define a dm-flakey instance with an uptime long enough to allow log reset to succeed and a log recovery delay long enough to allow the dm-flakey uptime to expire. The 'log_recovery_delay' sysfs tunable is exported under /sys/fs/xfs/debug and is only enabled for kernels compiled in XFS debug mode. The value is exported in units of seconds and allows for a delay of up to 60 seconds. Note that this is for XFS debug and test instrumentation purposes only and should not be used by applications. No delay is enabled by default. Signed-off-by: Brian Foster --- fs/xfs/xfs_globals.c | 4 ++++ fs/xfs/xfs_log_recover.c | 12 ++++++++++++ fs/xfs/xfs_sysctl.h | 5 +++++ fs/xfs/xfs_sysfs.c | 31 +++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/fs/xfs/xfs_globals.c b/fs/xfs/xfs_globals.c index 5399ef2..4d41b24 100644 --- a/fs/xfs/xfs_globals.c +++ b/fs/xfs/xfs_globals.c @@ -43,3 +43,7 @@ xfs_param_t xfs_params = { .fstrm_timer = { 1, 30*100, 3600*100}, .eofb_timer = { 1, 300, 3600*24}, }; + +struct xfs_globals xfs_globals = { + .log_recovery_delay = 0, /* no delay by default */ +}; diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 1fd5787..176c4b3 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -4509,6 +4509,18 @@ xlog_recover( return -EINVAL; } + /* + * Delay log recovery if the debug hook is set. This is debug + * instrumention to coordinate simulation of I/O failures with + * log recovery. + */ + if (xfs_globals.log_recovery_delay) { + xfs_notice(log->l_mp, + "Delaying log recovery for %d seconds.", + xfs_globals.log_recovery_delay); + msleep(xfs_globals.log_recovery_delay * 1000); + } + xfs_notice(log->l_mp, "Starting recovery (logdev: %s)", log->l_mp->m_logname ? log->l_mp->m_logname : "internal"); diff --git a/fs/xfs/xfs_sysctl.h b/fs/xfs/xfs_sysctl.h index bd8e157..ffef453 100644 --- a/fs/xfs/xfs_sysctl.h +++ b/fs/xfs/xfs_sysctl.h @@ -92,6 +92,11 @@ enum { extern xfs_param_t xfs_params; +struct xfs_globals { + int log_recovery_delay; /* log recovery delay (secs) */ +}; +extern struct xfs_globals xfs_globals; + #ifdef CONFIG_SYSCTL extern int xfs_sysctl_register(void); extern void xfs_sysctl_unregister(void); diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c index 32ddf0c..aa03670 100644 --- a/fs/xfs/xfs_sysfs.c +++ b/fs/xfs/xfs_sysfs.c @@ -54,7 +54,38 @@ struct kobj_type xfs_mp_ktype = { #ifdef DEBUG /* debug */ +STATIC ssize_t +log_recovery_delay_store( + const char *buf, + size_t count, + void *data) +{ + int ret; + int val; + + ret = kstrtoint(buf, 0, &val); + if (ret) + return ret; + + if (val < 0 || val > 60) + return -EINVAL; + + xfs_globals.log_recovery_delay = val; + + return count; +} + +STATIC ssize_t +log_recovery_delay_show( + char *buf, + void *data) +{ + return snprintf(buf, PAGE_SIZE, "%d\n", xfs_globals.log_recovery_delay); +} +XFS_SYSFS_ATTR_RW(log_recovery_delay); + static struct attribute *xfs_dbg_attrs[] = { + ATTR_LIST(log_recovery_delay), NULL, }; -- 1.8.3.1 From bfoster@redhat.com Tue Sep 2 09:08:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 BDCD47F5A for ; Tue, 2 Sep 2014 09:08:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5D426AC004 for ; Tue, 2 Sep 2014 07:08:19 -0700 (PDT) X-ASG-Debug-ID: 1409666897-04cb6c54fe7386b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 3GprteEyIBxb6u9z (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 07:08: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-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s82E8GCj027856 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 2 Sep 2014 10:08:17 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82E8GRX001634 for ; Tue, 2 Sep 2014 10:08:16 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id A52A612577F; Tue, 2 Sep 2014 10:08:15 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH v2 0/2] xfs log recovery delay instrumentation Date: Tue, 2 Sep 2014 10:08:13 -0400 X-ASG-Orig-Subj: [PATCH v2 0/2] xfs log recovery delay instrumentation Message-Id: <1409666895-49799-1-git-send-email-bfoster@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: 1409666897 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 Here's v2 of the log recovery delay instrumentation set. v1 is available here: http://oss.sgi.com/archives/xfs/2014-08/msg00276.html After a brief conversation with Dave, we thought it best to tie in this functionality with DEBUG mode to express/ensure that these attributes are for debugging/hacking purposes only. Everything else should be equivalent to v1. Brian v2: - Enable /sys/fs/xfs/debug for DEBUG mode kernels only. v1: http://oss.sgi.com/archives/xfs/2014-08/msg00276.html Brian Foster (2): xfs: add debug sysfs attribute set xfs: export log_recovery_delay to delay mount time log recovery fs/xfs/xfs_globals.c | 4 +++ fs/xfs/xfs_log_recover.c | 12 ++++++++ fs/xfs/xfs_super.c | 23 +++++++++++++-- fs/xfs/xfs_sysctl.h | 5 ++++ fs/xfs/xfs_sysfs.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_sysfs.h | 1 + 6 files changed, 117 insertions(+), 2 deletions(-) -- 1.8.3.1 From bfoster@redhat.com Tue Sep 2 09:22:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 494377F59 for ; Tue, 2 Sep 2014 09:22:45 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 355C28F8040 for ; Tue, 2 Sep 2014 07:22:44 -0700 (PDT) X-ASG-Debug-ID: 1409667763-04cbb054859c5020001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jMYotLnvPnUkBdUM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 07:22:44 -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 (8.14.4/8.14.4) with ESMTP id s82EMhol029010 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 2 Sep 2014 10:22:43 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82EMgj7010153; Tue, 2 Sep 2014 10:22:43 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id F350212577D; Tue, 2 Sep 2014 10:22:41 -0400 (EDT) From: Brian Foster To: fstests@vger.kernel.org Cc: xfs@oss.sgi.com Subject: [PATCH 1/2] xfstests/common: don't assume sysfs attrs all reside under test dev Date: Tue, 2 Sep 2014 10:22:40 -0400 X-ASG-Orig-Subj: [PATCH 1/2] xfstests/common: don't assume sysfs attrs all reside under test dev Message-Id: <1409667761-50248-2-git-send-email-bfoster@redhat.com> In-Reply-To: <1409667761-50248-1-git-send-email-bfoster@redhat.com> References: <1409667761-50248-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: 1409667764 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 _require_xfs_sysfs() currently assumes that all sysfs attributes reside under a device-specific subdirectory in the XFS sysfs hierarchy. It is hardcoded to use the TEST_DEV mount and expect the relative attribute path as a parameter. Not all sysfs attributes are associated with specific devices or mount points, however. Remove the hardcoded device name part of the attribute path from _require_xfs_sysfs() and let the caller construct the relative path based on the sysfs XFS root directory. Signed-off-by: Brian Foster --- common/rc | 3 +-- tests/xfs/011 | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/common/rc b/common/rc index 16da898..01f573e 100644 --- a/common/rc +++ b/common/rc @@ -1224,13 +1224,12 @@ _require_xfs_sysfs() { attr=$1 sysfsdir=/sys/fs/xfs - testdev=`_short_dev $TEST_DEV` if [ ! -e $sysfsdir ]; then _notrun "no kernel support for XFS sysfs attributes" fi - if [ ! -z $1 ] && [ ! -e $sysfsdir/$testdev/$attr ]; then + if [ ! -z $1 ] && [ ! -e $sysfsdir/$attr ]; then _notrun "sysfs attribute '$attr' is not supported" fi } diff --git a/tests/xfs/011 b/tests/xfs/011 index 658a822..197752c 100755 --- a/tests/xfs/011 +++ b/tests/xfs/011 @@ -85,7 +85,7 @@ _supported_os Linux _require_scratch _require_freeze -_require_xfs_sysfs log +_require_xfs_sysfs $(_short_dev $TEST_DEV)/log rm -f $seqres.full -- 1.8.3.1 From bfoster@redhat.com Tue Sep 2 09:22:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9BF1A7F62 for ; Tue, 2 Sep 2014 09:22:47 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 15C24AC003 for ; Tue, 2 Sep 2014 07:22:47 -0700 (PDT) X-ASG-Debug-ID: 1409667765-04cb6c54fe738eb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id D5eZzs7IAQDU43JH (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 07:22: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-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s82EMhN7030989 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 2 Sep 2014 10:22:44 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82EMhik017624; Tue, 2 Sep 2014 10:22:43 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 0E165125780; Tue, 2 Sep 2014 10:22:41 -0400 (EDT) From: Brian Foster To: fstests@vger.kernel.org Cc: xfs@oss.sgi.com Subject: [PATCH 2/2] xfs/051: test buffer use after free race on I/O failure in XFS log recovery Date: Tue, 2 Sep 2014 10:22:41 -0400 X-ASG-Orig-Subj: [PATCH 2/2] xfs/051: test buffer use after free race on I/O failure in XFS log recovery Message-Id: <1409667761-50248-3-git-send-email-bfoster@redhat.com> In-Reply-To: <1409667761-50248-1-git-send-email-bfoster@redhat.com> References: <1409667761-50248-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: 1409667765 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 A buffer use after free race was discovered in the XFS log recovery codepath if I/O failures occur during recovery. The I/O submission path can abort the mount and release the only reference held on some buffers before I/O completion processing (e.g., async workqueue processing) might have completed. Badness ensues if the I/O completion path subsequently attempts to access said buffers. The test manufactures the race by forcing all writes to fail (via dm-flakey) after a fixed period of time. A delay is inserted into the mount codepath to synchronize write failures with log recovery. Credit for discovery of the race and definition of the reproducible test case goes to Alex Lyakas. Signed-off-by: Brian Foster Reported-by: Alex Lyakas --- tests/xfs/051 | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/051.out | 2 ++ tests/xfs/group | 1 + 3 files changed, 98 insertions(+) create mode 100755 tests/xfs/051 create mode 100644 tests/xfs/051.out diff --git a/tests/xfs/051 b/tests/xfs/051 new file mode 100755 index 0000000..a84746b --- /dev/null +++ b/tests/xfs/051 @@ -0,0 +1,95 @@ +#! /bin/bash +# FS QA Test No. 051 +# +# Simulate a buffer use after free race in XFS log recovery. The race triggers +# on I/O failures during log recovery. Note that this test is dangerous as it +# causes BUG() errors or a panic. +# +#----------------------------------------------------------------------- +# Copyright (c) 2013 Oracle, 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.* + killall -9 $FSSTRESS_PROG > /dev/null 2>&1 + _scratch_unmount > /dev/null 2>&1 +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/dmflakey + +# Modify as appropriate. +_supported_fs xfs +_supported_os Linux + +_require_scratch +_require_dm_flakey +_require_xfs_sysfs debug/log_recovery_delay + +echo "Silence is golden." + +_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mount + +# Start a workload and shutdown the fs. The subsequent mount will require log +# recovery. +$FSSTRESS_PROG -n 9999 -p 2 -w -d $SCRATCH_MNT > /dev/null 2>&1 & +sleep 5 +src/godown -f $SCRATCH_MNT +killall -q $FSSTRESS_PROG +wait +_scratch_unmount + +# Initialize a dm-flakey device that will pass I/Os for 5s and fail thereafter. +_init_flakey +BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` +FLAKEY_TABLE="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 5 180" +_load_flakey_table $FLAKEY_ALLOW_WRITES + +# Set a 10s log recovery delay and mount the flakey device. This should allow +# initial writes to proceed (e.g., stale log block reset) and then let the +# flakey uptime timer expire such that I/Os will fail by the time log recovery +# starts. +echo 10 > /sys/fs/xfs/debug/log_recovery_delay + +# The mount should fail due to dm-flakey. Note that this is dangerous on kernels +# without the xfs_buf log recovery race fixes. +_mount_flakey > /dev/null 2>&1 + +echo 0 > /sys/fs/xfs/debug/log_recovery_delay + +_cleanup_flakey + +# replay the log +_scratch_mount +_scratch_unmount + +# success, all done +status=0 +exit diff --git a/tests/xfs/051.out b/tests/xfs/051.out new file mode 100644 index 0000000..5180bc4 --- /dev/null +++ b/tests/xfs/051.out @@ -0,0 +1,2 @@ +QA output created by 051 +Silence is golden. diff --git a/tests/xfs/group b/tests/xfs/group index 4d35df5..9784dea 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -47,6 +47,7 @@ 048 other auto quick 049 rw auto quick 050 quota auto quick +051 dangerous 052 quota db auto quick 054 quota auto quick 055 dump ioctl remote tape -- 1.8.3.1 From bfoster@redhat.com Tue Sep 2 09:22:48 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 F17CA7F62 for ; Tue, 2 Sep 2014 09:22:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id D2987304039 for ; Tue, 2 Sep 2014 07:22:45 -0700 (PDT) X-ASG-Debug-ID: 1409667764-04cbb054879c5030001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id bTAHBgOq5Qi9QJcB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 07:22:44 -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 (8.14.4/8.14.4) with ESMTP id s82EMhdL002270 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 2 Sep 2014 10:22:43 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82EMgIi006107; Tue, 2 Sep 2014 10:22:43 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id E296312577F; Tue, 2 Sep 2014 10:22:41 -0400 (EDT) From: Brian Foster To: fstests@vger.kernel.org Cc: xfs@oss.sgi.com Subject: [PATCH 0/2] xfs buf I/O error race test Date: Tue, 2 Sep 2014 10:22:39 -0400 X-ASG-Orig-Subj: [PATCH 0/2] xfs buf I/O error race test Message-Id: <1409667761-50248-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: 1409667764 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 Hi all, Here's a complete test for the XFS buf I/O error race problem reported by Alex. An incomplete rfc of this test was previously posted here: http://oss.sgi.com/archives/xfs/2014-08/msg00261.html This version utilizes the recently posted log recovery delay mechanism. As such, this test only runs on kernels compiled with XFS debug support. The first patch updates the generic require sysfs helper to support global (i.e., non-device specific) sysfs attributes. Brian v1: - Use the log recovery delay mechanism to coordinate I/O failures with log recovery. rfc: http://oss.sgi.com/archives/xfs/2014-08/msg00261.html Brian Foster (2): xfstests/common: don't assume sysfs attrs all reside under test dev xfs/051: test buffer use after free race on I/O failure in XFS log recovery common/rc | 3 +- tests/xfs/011 | 2 +- tests/xfs/051 | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/051.out | 2 ++ tests/xfs/group | 1 + 5 files changed, 100 insertions(+), 3 deletions(-) create mode 100755 tests/xfs/051 create mode 100644 tests/xfs/051.out -- 1.8.3.1 From stan@hardwarefreak.com Tue Sep 2 12:15:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 951A17F53 for ; Tue, 2 Sep 2014 12:15:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 32B14AC003 for ; Tue, 2 Sep 2014 10:15:07 -0700 (PDT) X-ASG-Debug-ID: 1409678106-04cb6c54fd741290001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id fV9YsJOgMCmCGKtG for ; Tue, 02 Sep 2014 10:15:06 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [134.64.128.151] (unknown [192.65.45.20]) by greer.hardwarefreak.com (Postfix) with ESMTPA id CDE116C149; Tue, 2 Sep 2014 12:15:05 -0500 (CDT) Message-ID: <5405FB19.2020208@hardwarefreak.com> Date: Tue, 02 Sep 2014 12:15:05 -0500 From: stan hoeppner User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.7.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: storage, libaio, or XFS problem? 3.4.26 References: <20140826075345.GJ20518@dastard> <8c29baf987467a84f0b7c1d09c863662@localhost> <20140828003226.GO20518@dastard> <7f9e5aef187b44e899077467aeb0809d@localhost> <20140828230817.GU20518@dastard> <2d2ce7bb38c00a7d35f4a324f6a36cbb@localhost> <20140829235538.GF20518@dastard> <20140831235749.GH20518@dastard> <5403E9B9.7040608@hardwarefreak.com> <20140901234529.GI20518@dastard> X-ASG-Orig-Subj: Re: storage, libaio, or XFS problem? 3.4.26 In-Reply-To: <20140901234529.GI20518@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1409678106 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 09/01/2014 06:45 PM, Dave Chinner wrote: > On Sun, Aug 31, 2014 at 10:36:25PM -0500, stan hoeppner wrote: >> On 08/31/2014 06:57 PM, Dave Chinner wrote: >>> On Fri, Aug 29, 2014 at 09:55:53PM -0500, Stan Hoeppner wrote: >>>> Have you played with bcache yet? >>> >>> Enough to scare me. So many ways for things to go wrong, no easy way >>> to recover when things go wrong. And that's before I even get to >>> performance warts, like having systems stall completely because >>> there's tens or hundreds of GB of 4k random writes that have to be >>> flushed to slow SATA RAID6 in the cache.... >> >> Yikes. I hadn't yet heard such opinions expressed. By go wrong I >> assume you mean the btrees or cached sector data getting broken, corrupted? > > bcache is a complex filesystem hidden inside a block device. If > bcache goes AWOL, so does the all the data on your block device. > Need I say more? So it's no different in that regard than the black box implementations such as LSI's CacheCade and various SAN vendor SSD caching implementations. Or are you saying the bcache code complexity is so much greater that failure is more likely that the vendor implementations? >>> PS: can you wrap your text at 68 or 72 columns so quoted text >>> doesn't overflow 80 columns and get randomly wrapped and messed up? >> >> This email should be. Lemme see what I can do with the others. The >> lovely Cisco VPN client I must use kills routing to my local subnet, so >> Icedovce can't connect to my IMAP server when the VPN is active. The >> test hardness app requires a shell unfortunately so I have to keep the >> tunnel open all the time, as the test runs are 40+ hours each. My last >> test just crashed a bit ago so I can use Icedove for this reply. > > screen is your friend when it comes to keeping remote shells > active as the network comes and goes. VPN drops out, just bring it > back up when you need it and reconnect to the remote screen instance > and it's like you never left.... Thanks for this tip. I'd heard of screen before but never used it. I will say the man page is a bit intimidating for such an apparently simple tool... Stan From bfoster@redhat.com Tue Sep 2 14:16:30 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 AA72D7F4E for ; Tue, 2 Sep 2014 14:16:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 56B72AC004 for ; Tue, 2 Sep 2014 12:16:27 -0700 (PDT) X-ASG-Debug-ID: 1409685383-04bdf010a16e5780001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 7rbufw64z0TzcAYm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 12:16: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-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s82JGM6b018512 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 2 Sep 2014 15:16:22 -0400 Received: from laptop.bfoster (vpn-51-136.rdu2.redhat.com [10.10.51.136]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s82JGKZF013899 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 2 Sep 2014 15:16:22 -0400 Date: Tue, 2 Sep 2014 15:16:20 -0400 From: Brian Foster To: xfs@oss.sgi.com Subject: Re: [RFC PATCH 0/4] clean up collapse range and handle post-eof delalloc Message-ID: <20140902191620.GA5304@laptop.bfoster> X-ASG-Orig-Subj: Re: [RFC PATCH 0/4] clean up collapse range and handle post-eof delalloc References: <1409344178-44817-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1409344178-44817-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.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1409685383 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, Aug 29, 2014 at 04:29:34PM -0400, Brian Foster wrote: > Here's a drop of what I'm testing over the weekend. It passes some quick > tests, but only lightly tested so far. > fsx has been running for over 3 days without a failure and I've kicked off a parallel fsstress today that so far hasn't caused any problems. Given that, I think the patches here help reduce the likelihood of errors from collapse. > My biggest question at this point is whether there is any risk to the > shift of the post-eof extent if the subsequent truncate happens to fail. > If it's not worth dealing with that, we could just drop patch 3 and > leave the eofblocks trim permanently. > That said, a test to skip the post-collapse truncate confirms that the behavior of patch 3 is potentially problematic in the event of failure. E.g., there is no behavior analogous to the zeroing of prealloc space for extending truncates. I think the right thing to do here might be for the collapse to writeback and invalidate the range following the space that was freed to EOF and to retain the eofblocks trim. Brian > In fact, it might even be a good idea to go back to the original > [start,-1] writeback in collapse range given that the free file space > helper could change at some point to only write and punch out the range > being freed... and then we're left shifting a bunch of extents after the > freed range that could have dirty data in pagecache, which sounds bad. > Thoughts? > > Brian > > Brian Foster (4): > xfs: track collapse via file offset rather than extent index > xfs: refactor xfs_bmap_shift_extents() into multiple functions > xfs: allow collapse to handle delalloc extents > xfs: remove file writeback and eofblocks trim from collapse range > > fs/xfs/libxfs/xfs_bmap.c | 302 ++++++++++++++++++++++++++++++++--------------- > fs/xfs/libxfs/xfs_bmap.h | 7 +- > fs/xfs/xfs_bmap_util.c | 32 +---- > 3 files changed, 214 insertions(+), 127 deletions(-) > > -- > 1.8.3.1 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Tue Sep 2 17:02:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 66EC67F52 for ; Tue, 2 Sep 2014 17:02:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 13512AC006 for ; Tue, 2 Sep 2014 15:02:32 -0700 (PDT) X-ASG-Debug-ID: 1409695350-04bdf010a06ea920001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id mcVlGR21r4ER0eRN for ; Tue, 02 Sep 2014 15:02:31 -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: AowgAHA9BlR5LDJ8/2dsb2JhbABagw1TV4IsrQ8BAQEBBphlgVuFaQEDAQEBgRIXd4QEAQU6HCMQCAMYCSUPBSUDIROIQQ69CQEXGIVkh0GCEAeETAWFBQKQWIZ8lR+DcysvAYJOAQEB Received: from ppp121-44-50-124.lns20.syd6.internode.on.net (HELO dastard) ([121.44.50.124]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Sep 2014 07:32:29 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XOw9Y-0008Tk-9W; Wed, 03 Sep 2014 08:02:16 +1000 Date: Wed, 3 Sep 2014 08:02:16 +1000 From: Dave Chinner To: Alex Lyakas Cc: Brian Foster , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error Message-ID: <20140902220216.GJ20518@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: fix double free of trans in log recovery on I/O error References: <1408648692-15957-1-git-send-email-bfoster@redhat.com> <20140825142025.GA10135@bfoster.bfoster> <20140831210507.GA11913@bfoster.bfoster> <3476A2CBDE694DC6BD06DBDD15165151@alyakaslap> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3476A2CBDE694DC6BD06DBDD15165151@alyakaslap> 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: 1409695350 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9109 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words On Tue, Sep 02, 2014 at 12:51:35PM +0300, Alex Lyakas wrote: > Hi Brian, Dave, > I tested this patch on 3.8.13 kernel with the scenario I described > in http://oss.sgi.com/pipermail/xfs/2014-August/037637.html, but I > still see the issue. > I placed the metadump at https://drive.google.com/file/d/0ByBy89zr3kJNV2UxMERNTkE4aHM/edit?usp=sharing > > During log recovery, 3 IO errors are encountered: > [ 340.381199] XFS (dm-0): Mounting Filesystem > [ 340.439897] XFS (dm-0): Sleep 10s before xlog_do_recover > [ 350.440143] XFS (dm-0): Starting recovery (logdev: internal) > [ 351.584647] XFS (dm-0): metadata I/O error: block 0x1 > ("xlog_recover_iodone") error 28 numblks 1 > [ 351.584660] XFS (dm-0): metadata I/O error: block 0x40 > ("xlog_recover_iodone") error 28 numblks 16 > [ 351.584665] XFS (dm-0): xfs_do_force_shutdown(0x1) called from > line 377 of file > /mnt/work/alex/zadara-btrfs/fs/xfs/xfs_log_recover.c. Return > address = 0xffffffffa0372728 > [ 351.584969] XFS (dm-0): I/O Error Detected. Shutting down filesystem > [ 351.584970] XFS (dm-0): Please umount the filesystem and rectify > the problem(s) > [ 351.585047] XFS (dm-0): metadata I/O error: block 0x1e00040 > ("xlog_recover_iodone") error 28 numblks 16 > [ 351.585050] XFS (dm-0): xfs_do_force_shutdown(0x1) called from > line 377 of file > /mnt/work/alex/zadara-btrfs/fs/xfs/xfs_log_recover.c. Return > address = 0xffffffffa0372728 > [ 351.585068] XFS (dm-0): log mount/recovery failed: error 28 > [ 351.585332] XFS (dm-0): log mount failed > > Two IO error callbacks are handled before XFS is unmounted, but the > last one crashes with stack[1]. > > Do I need some or all of the 9 patches that Dave posted? (They do > not apply to my kernel, so I need to apply them by hand). No, I suspect that there are other problems that have been fixed since 3.8 that you are missing. e.g. 9c23ecc xfs: unmount does not wait for shutdown during unmount THere's bound to be others, so you're really going to need to look at the differences between 3.8 and a current mainline to determine what other patches you are going to need... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Sep 2 17:20:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 890A37F55 for ; Tue, 2 Sep 2014 17:20:00 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7660A304066 for ; Tue, 2 Sep 2014 15:19:57 -0700 (PDT) X-ASG-Debug-ID: 1409696392-04cb6c54ff74d560001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id igUdXgNIV7wivOyJ for ; Tue, 02 Sep 2014 15:19:52 -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: AoEgACNCBlR5LDJ8/2dsb2JhbABagw2BKoIsrQ8BAQEBBppAhWkBAwEBAYESF3eEAwEBBAE6HCMQCAMYCSUPBSUDIROIOge9HwEXGIVkiQhJB4RMBZoLglCBNpNpgW8WgW4rL4EHAR4GgSMBAQE Received: from ppp121-44-50-124.lns20.syd6.internode.on.net (HELO dastard) ([121.44.50.124]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Sep 2014 07:49:29 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XOwPz-00005R-8o; Wed, 03 Sep 2014 08:19:15 +1000 Date: Wed, 3 Sep 2014 08:19:15 +1000 From: Dave Chinner To: stan hoeppner Cc: xfs@oss.sgi.com Subject: Re: storage, libaio, or XFS problem? 3.4.26 Message-ID: <20140902221915.GK20518@dastard> X-ASG-Orig-Subj: Re: storage, libaio, or XFS problem? 3.4.26 References: <20140828003226.GO20518@dastard> <7f9e5aef187b44e899077467aeb0809d@localhost> <20140828230817.GU20518@dastard> <2d2ce7bb38c00a7d35f4a324f6a36cbb@localhost> <20140829235538.GF20518@dastard> <20140831235749.GH20518@dastard> <5403E9B9.7040608@hardwarefreak.com> <20140901234529.GI20518@dastard> <5405FB19.2020208@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5405FB19.2020208@hardwarefreak.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: 1409696392 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.9109 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Sep 02, 2014 at 12:15:05PM -0500, stan hoeppner wrote: > On 09/01/2014 06:45 PM, Dave Chinner wrote: > > On Sun, Aug 31, 2014 at 10:36:25PM -0500, stan hoeppner wrote: > >> On 08/31/2014 06:57 PM, Dave Chinner wrote: > >>> On Fri, Aug 29, 2014 at 09:55:53PM -0500, Stan Hoeppner wrote: > >>>> Have you played with bcache yet? > >>> > >>> Enough to scare me. So many ways for things to go wrong, no easy way > >>> to recover when things go wrong. And that's before I even get to > >>> performance warts, like having systems stall completely because > >>> there's tens or hundreds of GB of 4k random writes that have to be > >>> flushed to slow SATA RAID6 in the cache.... > >> > >> Yikes. I hadn't yet heard such opinions expressed. By go wrong I > >> assume you mean the btrees or cached sector data getting broken, corrupted? > > > > bcache is a complex filesystem hidden inside a block device. If > > bcache goes AWOL, so does the all the data on your block device. > > Need I say more? > > So it's no different in that regard than the black box implementations > such as LSI's CacheCade and various SAN vendor SSD caching > implementations. Or are you saying the bcache code complexity is so > much greater that failure is more likely that the vendor implementations? No, not the code complexity in particular. It's more that compared to vendor SSD caching implementations there's an awful lot less testing and validation, and people tend to use random, unreliable hardware for cache devices. It's great when it works, but the configuration and validation of correct behaviour in error conditions falls to the user... > > screen is your friend when it comes to keeping remote shells > > active as the network comes and goes. VPN drops out, just bring it > > back up when you need it and reconnect to the remote screen instance > > and it's like you never left.... > > Thanks for this tip. I'd heard of screen before but never used it. I > will say the man page is a bit intimidating for such an apparently > simple tool... Yeah, I use about 0.0001% of what screen can do. It could lose most of it's functionality and I wouldn't notice or care. tmux is another option for this functionality, but I've never used it because I found out about screen first... Cheers, Dave. -- Dave Chinner david@fromorbit.com From clarifylzx@gmail.com Tue Sep 2 20:49:37 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0E5107F57 for ; Tue, 2 Sep 2014 20:49:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9FC2AAC002 for ; Tue, 2 Sep 2014 18:49:33 -0700 (PDT) X-ASG-Debug-ID: 1409708969-04bdf010976f5980001-NocioJ Received: from mail-lb0-f194.google.com (mail-lb0-f194.google.com [209.85.217.194]) by cuda.sgi.com with ESMTP id LnvkchBPVjdK2FuI (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 02 Sep 2014 18:49:30 -0700 (PDT) X-Barracuda-Envelope-From: clarifylzx@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.217.194 X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.194] Received: by mail-lb0-f194.google.com with SMTP id p9so3205944lbv.9 for ; Tue, 02 Sep 2014 18:49:28 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.194] X-Barracuda-IPDD: Level1 [gmail.com/209.85.217.194] 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=AKuQ7wU5hphnuVFMMYcT5ag/a0zFkSxyqjq/ZOf5Wt4=; b=pDurJ5MhZ2eKqG1X/8+DCwWr2LrGVNNxvJDrmCc4IR75SE61BqC1cSSJeDZcOPXBgf 7LyKzpoKPrfbUY2l/yuDYp6JpnpbKCsUkhjvCg49UDxuFAY3D/KU9dkUU+h5CSorJgLD kmRP9iiUQ+3O44yldwkBDHKy0btiN7ErTunqNONEJB6CWltvoip53z55An8vdZ7N2kdn KTh15hBMRFKvZULNwbd7lpfSnrukmQd7saW3XSk597Shd/VfRYAMZDepalolJWB7KuY9 FWB3hXjXmgahYqrPHJLTd/pYZfz/fFctI0sSLeA/5EsaftkSGCKE6o7JtE7tJbzT6PEX DJJw== MIME-Version: 1.0 X-Received: by 10.152.170.228 with SMTP id ap4mr3315442lac.66.1409708968630; Tue, 02 Sep 2014 18:49:28 -0700 (PDT) Received: by 10.114.229.164 with HTTP; Tue, 2 Sep 2014 18:49:26 -0700 (PDT) Date: Wed, 3 Sep 2014 09:49:26 +0800 Message-ID: Subject: color box, display box, corrugated box, color card, blister card, color sleeve, hang tag, label From: Jinghao Printing - CHINA X-ASG-Orig-Subj: color box, display box, corrugated box, color card, blister card, color sleeve, hang tag, label To: undisclosed-recipients:; Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-lb0-f194.google.com[209.85.217.194] X-Barracuda-Start-Time: 1409708970 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 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9116 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, this is David Wu from Shanghai, China. We are a printing company, we can print color box, corrugated box, label, hang tag etc. Please let me know if you need these. I will send you the website then. Best regards, David Wu From bo.li.liu@oracle.com Tue Sep 2 22:26:33 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 1DFCC7F57 for ; Tue, 2 Sep 2014 22:26:33 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id E377D8F8054 for ; Tue, 2 Sep 2014 20:26:32 -0700 (PDT) X-ASG-Debug-ID: 1409714787-04bdf0109a6fa8d0001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id 0EdKRISESCHcPIH8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 02 Sep 2014 20:26:28 -0700 (PDT) X-Barracuda-Envelope-From: bo.li.liu@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id s833QQIj009281 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 3 Sep 2014 03:26:27 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id s833QPUN026906 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 3 Sep 2014 03:26:26 GMT Received: from abhmp0016.oracle.com (abhmp0016.oracle.com [141.146.116.22]) by userz7022.oracle.com (8.14.5+Sun/8.14.4) with ESMTP id s833QOg4014937; Wed, 3 Sep 2014 03:26:25 GMT Received: from localhost.jp.oracle.com (/10.191.5.50) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 02 Sep 2014 20:26:24 -0700 From: Liu Bo To: xfs@oss.sgi.com Cc: linux-btrfs Subject: [PATCH] xfstests: remove check_scratch_fs in btrfs/012 Date: Wed, 3 Sep 2014 11:25:59 +0800 X-ASG-Orig-Subj: [PATCH] xfstests: remove check_scratch_fs in btrfs/012 Message-Id: <1409714759-9805-1-git-send-email-bo.li.liu@oracle.com> X-Mailer: git-send-email 1.8.1.4 X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1409714788 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.9119 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines From: Liu Bo btrfs/012 is a case to verify btrfs-convert feature, it converts an ext4 to btrfs firstly and do something, then rolls back to ext4. So at last we have a ext4 on the scratch device, but setting _require_scratch will force a btrfsck on a ext4 fs because $FSTYP here is btrfs, and it ends up with a failure report of _check_btrfs_filesystem. Now that we have deliberately check the final ext4 fs in btrfs/012, just do not set _require_scratch in this case. Signed-off-by: Liu Bo --- tests/btrfs/012 | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/btrfs/012 b/tests/btrfs/012 index f7e5da5..12f6462 100755 --- a/tests/btrfs/012 +++ b/tests/btrfs/012 @@ -52,7 +52,6 @@ _cleanup() # Modify as appropriate. _supported_fs btrfs _supported_os Linux -_require_scratch BTRFS_CONVERT_PROG="`set_prog_path btrfs-convert`" MKFS_EXT4_PROG="`set_prog_path mkfs.ext4`" -- 1.8.1.4 From shudesmond2@outlook.com Wed Sep 3 11:23:48 2014 Return-Path: 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_FREEMAIL_DOC_PDF 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 175407F37 for ; Wed, 3 Sep 2014 11:23:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 89023AC002 for ; Wed, 3 Sep 2014 09:23:47 -0700 (PDT) X-ASG-Debug-ID: 1409761421-04cb6c550077f540001-NocioJ Received: from COL004-OMC3S9.hotmail.com (col004-omc3s9.hotmail.com [65.55.34.147]) by cuda.sgi.com with ESMTP id dVoFrd5ZcX8Sz2Vr (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Wed, 03 Sep 2014 09:23:42 -0700 (PDT) X-Barracuda-Envelope-From: shudesmond2@outlook.com X-Barracuda-Apparent-Source-IP: 65.55.34.147 Received: from COL125-W35 ([65.55.34.136]) by COL004-OMC3S9.hotmail.com with Microsoft SMTPSVC(7.5.7601.22701); Wed, 3 Sep 2014 09:23:41 -0700 X-TMN: [0e1L4Zto/5SZFsTzgTBWFR2VVTwkjkC1] X-Originating-Email: [shudesmond2@outlook.com] Message-ID: Content-Type: multipart/mixed; boundary="_253d505f-363b-4857-9c14-3a09b91662dd_" From: Desmond Shu Subject: Proposal Date: Wed, 3 Sep 2014 18:23:40 +0200 X-ASG-Orig-Subj: Proposal Importance: Normal MIME-Version: 1.0 X-OriginalArrivalTime: 03 Sep 2014 16:23:41.0079 (UTC) FILETIME=[6C757270:01CFC793] X-Barracuda-Connect: col004-omc3s9.hotmail.com[65.55.34.147] X-Barracuda-Start-Time: 1409761421 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: 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.9135 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:; --_253d505f-363b-4857-9c14-3a09b91662dd_ Content-Type: multipart/alternative; boundary="_a929280e-9726-40d2-b330-12199cee62f8_" --_a929280e-9726-40d2-b330-12199cee62f8_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Please go through the content of the attachment and get back to me for mor= e information.Thanks for your understanding=2CDesmond Shu = --_a929280e-9726-40d2-b330-12199cee62f8_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
 =3BPlease go through t= he content of the attachment and get back to me for more information.
=
Thanks for your understanding=2C
Desmond Shu

<= /div>
= --_a929280e-9726-40d2-b330-12199cee62f8_-- --_253d505f-363b-4857-9c14-3a09b91662dd_ Content-Type: application/pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Energy & Min.Resources Dept..pdf" JVBERi0xLjUKJeLjz9MKNiAwIG9iago8PCAKICAgL1R5cGUgL1hPYmplY3QKICAgL1N1YnR5cGUg L0ltYWdlCiAgIC9CaXRzUGVyQ29tcG9uZW50IDgKICAgL1dpZHRoIDE2NQogICAvSGVpZ2h0IDIx NgogICAvQ29sb3JTcGFjZSBbL0luZGV4ZWQgL0RldmljZVJHQiAyNTUgNyAwIFIgXQogICAvRmls dGVyIC9GbGF0ZURlY29kZQogICAvTGVuZ3RoIDk0NjQKPj4Kc3RyZWFtCnhe5Vxpe9pItn7E5ogl OIAC6aZjQkKC2GIwq5FtBKhnbvAyTtL//6/cs1SVSkICnJ6Z++GeZ6aDpFLVq7O851SpZMP4fymJ Yw2iJJk61iJG0pmzY02i5NWxBlFiZtPHmkRKLpcvHGsTJa+PNYiSfL54fqxNhJjFfD5/rFGEvHn9 K6qEwXIv0WWilMT/5gBj/hc8pfz6V1SJo5HdkidBPS8W8Z8KYswnj7U2DCt0XC6/DZ054UlTNFoV fxaPazRRzOUz+OOcbqsdaw+g3gUO35TLr38LnPntd+OoWDRaGX+CTktHWqPa6/JHPl850txA8/4R OCyH7P2ufAJIthuZsChVGisMDX8V6NcJ4f2m/FZHiSDfJvTjsPWjhMct4H008CHuS/nICv6zHZZU ufy7Zl/S5B/64SkgCyGQuQNtS9Q2b/q3neD0iMryD/DwlXZ4SrCzcgikpqcYSRQUSDbA8UgTQCz/ AI4krvd4dAJtmnkFrXQUpIjpC/h1wfftRU5j7x6G9Yc68I/eh2wvZe9MmgcrgibPWDlGNHOVkHlM 9RwCZHmv3btXoTE+MK7f5G88+F07CDV/8+HdXglSFiAN6WZIQrmLcDPIgrmmbJNLSFKIiJyP5ddB TkkxLjpbFiDR3hJwoPGbD+XXphEW9i1kHnY41FKqUAjnCaQnzPCkylxFuUlxX+lA129facpISWCW BvIPbLYHEiCGHxElKUCaSjdwMlPmaNekJC4ZGfyBNCVu3Nc5quj127MAzRCw178rYK9ff9CVyvKG wigi2AWpoP4yeXRKBJcFXwuFbV5iS8sn+ZRX58LCoysO95GVQz/xx6tAq1fBlMmSP1MgAVk+/8kQ wEODMyJMRzmhPxlxEZ1KNhQjKqWVNZB08Pa1jJt34koksxd5qJQYFMEmsgKGLqZCxL8MlXOiCqE3 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 RH3s1hOFbDIec+ryIaKEvxSLlLGWXIDEKQrHMoqO3XyyCKrY4XdgQic7mdkfjoXmnSKaZ3zC7xQ0 Y2P089+LUaIcG3cKGwz+L/ETiCTuvvHqSS9TkL3J3qBQsvbfSDQRQmM8qs8OaTYCjKwBCE/98DOT sJAfjrTyKnqwXxYK6R/S239QxvxrHFW7xsuOHvbZ+CFPHBv0xUL1lfzocGyMn9G9ogrDsDys/hK/ dqTEnbzr73P4vox9K/00ODbVmf2phi8//PJ5Rdxwx19Un85fLxI57I6+GfIFY+E5UMPSZYh7yno+ Jf7Q5jancNcvyZ0cKzCRAiv+BCXtqJS/Qw3fkaKFvuG8VOVOTZx+Hhvqb4goMJ9Iq4opUVNPTKE7 CjGs5eCc8Z18BOoJiW0l9H2MW/+m+Cq8Ft8Yc8J8EE7LtjXu8cigp6IZVsBpH/5jppYykuONxMiP lEIAyg86IKMb+KU3kek95QB96vnw9yrcE0Xajsd94FmlmKlB+Y54DLL6yKDSCdx15KvyP2xpX661 2L4jJWF+Y5ckpRlUKt4Zz1TzjH2C/U9wY5xon7zLPzHxA01LufiOUwnR9liz8wu+Uv53ySoQC6MV 1WBPxiPRDP5pIDi70hcQ/zu+GJbxStcS6fRfYFksLJ6eQknoP5VfTpHRYxBntOwi/kbCf1fww98D +HbXJxXv/wUZX39/2O2CWOH4r8f/QyNHyhhmBLLQfRzh33b492nwfwHHoopyCmVuZHN0cmVhbQpl bmRvYmoKMSAwIG9iago8PCAKICAgL1R5cGUgL0NhdGFsb2cKICAgL1BhZ2VzIDIgMCBSCiAgIC9Q YWdlTGF5b3V0IC9PbmVDb2x1bW4KICAgL1BhZ2VNb2RlIC9Vc2VOb25lCiAgIC9PQ1Byb3BlcnRp ZXMgPDwgCiAgIC9EIDw8IAogICAvT3JkZXIgW10KICAgL0FTIFs8PCAKICAgL0V2ZW50IC9WaWV3 CiAgIC9DYXRlZ29yeSBbL1ZpZXcgXQo+PiA8PCAKICAgL0V2ZW50IC9QcmludAogICAvQ2F0ZWdv cnkgWy9QcmludCBdCj4+IDw8IAogICAvRXZlbnQgL0V4cG9ydAogICAvQ2F0ZWdvcnkgWy9FeHBv cnQgXQo+PiBdCj4+Cj4+Cj4+CmVuZG9iagoyIDAgb2JqCjw8IAogICAvVHlwZSAvUGFnZXMKICAg L0tpZHMgWzMgMCBSIF0KICAgL0NvdW50IDEKPj4KZW5kb2JqCjMgMCBvYmoKPDwgCiAgIC9UeXBl IC9QYWdlCiAgIC9QYXJlbnQgMiAwIFIKICAgL1Jlc291cmNlcyA8PCAKICAgL1Byb2NTZXQgWy9Q REYgL1RleHQgXQogICAvWE9iamVjdCA8PCAKICAgL0ltZzEgNiAwIFIKPj4KICAgL0ZvbnQgPDwg CiAgIC9GMSA4IDAgUgogICAvRjIgMTEgMCBSCiAgIC9GMyAxNCAwIFIKICAgL0Y0IDE3IDAgUgo+ Pgo+PgogICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQogICAvQ29udGVudHMgNCAwIFIKPj4KZW5k b2JqCjQgMCBvYmoKPDwgCiAgIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCiAgIC9MZW5ndGggNTc5MQo+ PgpzdHJlYW0KeF61XVuz5ERyfj+/Qg820YqlG1WV1FLvk8GAgdj1Xjx+2PD6YbgcGDO9HIYZ2vx7 V96zSjqnZ6rHQXBo3bKysvLyZVZK/Hz3c/4ndEP+J3RhHLsY0iEdu2/Od2mcD8OIl9JpPoz0M1/4 6Mvz96H79Ke7v+R/fr775NndR5+H7nQY5yl0z+7vBrzx1fd3w+F0WoT4cTmEYzdnoiF2z853/7X7 rA/D7t/7QD/+Cn/+rY/D7m/9Pu26fh+n3Qd9iLvuj/28+7IPY3Xzx/mWZfeHDg/w9H/0+/z3T/n2 /+z3I931r/0oF/+7e/bV3WfP3oXrmJbDVLLdtdDh2ad0OC5E5qs+HZHVLz6G+cLUaHoN1EM4HaZY kG+abYhTTeeTLORTFmf0K/RhE/FpOSxLQfwWUcZBJpoVQ5f8WdaA3RcdivTz/JuVALUHNOHjPsbd oWXYMJ7AHHTcDd5jXohDXK6yPhwPi5jAcXcGlp5nhuPuxcvfr6mma1TDMGR6juoGayWRQ8z/HjcI JTBzR+lbZOu7Psy7X/ops5pl+VMWa9j9oz/B1fwLLvyQj97g0b/kv8fdQz7+CZ/9pY/H3eusREMW +37afQO0iMT5Gpsbc435esni1ck+ug7HU3JGnXnr+jCh45n159ucfPfxwxAPcSwY+LSFTBgOJRW3 UvtqqRrIj1NWFE9+30QF7caTqTVm3L18gRrya59CnkO2XdaV/OsWXRkPw1Itc6vRHueTuq0/gzf5 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 aaDzU0iWDLPAU67uZ4VwhWqzts4Ro+16Mc/Qm8/+K3A9s4pgGx/bvU4fPkJbDaCQiwBFXXyNG5/x I0UygKIwm31BFofzG0Rk5d5JkTRw2GW8UL9q7MLOo6+kwX2qrq5oaUizRszgobbfgnOKb2bilt/q YVUaIfu+fNLqd0XdVYriocgy3o9TOeK23bt5FYOAg3sXegjSYbrXuj4ScpFfCjMF6uSHH9mL9nhc DykcJ9+DF3lHWHUEReNB18UkVgnQA+dH2HBfF/Z4ql533X1i5ZvkQlFq43nosEPYVYmq5xvbcWiG YmoFHGIEawkCkuMQ+9oBf+QCPu30IN1AZAoE7Np1aDpqMaQKBeganQ6X6n/2ZuaSDafk6rMNaFqr WJGc0CmcImmgmvl2A1316pT19RBrpaFJj4FIs7LBVFS6rS9XvM3TqYvzIG3fsFnwRSi/DE2rmZYJ Pq7h6ZhP3YRcVS2541r9RtmmduhiYGP0Mt1Y41e6LiBITKmbK8WsruOk1TJkW/zR1id2WAnRsqr6 i1nwejONdI9UMfFLj6SGT3wTzNxVw9xiwDf0/OTc53Iv+m1MW4fyO87b8+gEMYcoH7qo+hDZ2XHI eig1Wzp/mkqtaR7r5WqSDK96mrSUVe7o2nei6cOPVppx1m8w31B00ychw5itq+Cm7UPyI3ZHezq3 CCeOWpaD/zPPK9PXFqI5URmWgqh9tQwEfbYgTl/fpW1MdAzNnysGabgRmxhnaYSkX2L/rPq62T7w N7XRQ32ANrL9KbO94KiXZobyLbNUpKSsglJZoNjVwH0csJfEs98khTjQ+jk6n/bRf10CDYNRIHXJ rb8wLt+WLL4wnqSVxlB24zc7B/xA9dW5XvnfbKRhBufyGJm/3P0fuIKTlgplbmRzdHJlYW0KZW5k b2JqCjUgMCBvYmoKPDwgCiAgIC9Qcm9kdWNlciA8RkVGRjAwNjQwMDZGMDA1MDAwNDQwMDQ2MDAy MDAwNTYwMDY1MDA3MjAwMjAwMDM3MDAyRTAwMzIwMDIwMDA0MjAwNzUwMDY5MDA2QzAwNjQwMDIw MDAzMzAwMzcwMDMwMDAyMDAwMjgwMDU3MDA2OTAwNkUwMDY0MDA2RjAwNzcwMDczMDAyMDAwNTYw MDY5MDA3MzAwNzQwMDYxMDAyMDAwNDIwMDc1MDA3MzAwNjkwMDZFMDA2NTAwNzMwMDczMDAyMDAw NDUwMDY0MDA2OTAwNzQwMDY5MDA2RjAwNkUwMDIwMDAyODAwNTMwMDUwMDAyMDAwMzIwMDI5MDAy MDAwMkQwMDIwMDA1NjAwNjUwMDcyMDA3MzAwNjkwMDZGMDA2RTAwM0EwMDIwMDAzNjAwMkUwMDMw MDAyRTAwMzYwMDMwMDAzMDAwMzIwMDIwMDAyODAwNzgwMDM4MDAzNjAwMjkwMDI5PgogICAvQ3Jl YXRpb25EYXRlIChEOjIwMTQwNzExMTQwODIxKzAyJzAwJykKPj4KZW5kb2JqCjcgMCBvYmoKPDwg CiAgIC9MZW5ndGggNzY4Cj4+CnN0cmVhbQoAAAD///////j///H//+H//7z/9KD//6H//6z//8n/ 457/95j/+pT/+Jj/+Zj/7pj//6P//9X/+6///5j//6///8j/8Jj//77//93//6L//7f//8L/1pn/ /97//6T//6n//7v//7b//8r//73/96H/76//+pj//6j//7//5Lf/wpr/8sj/x6b/yJrKwqLB4qva 57T/7tfe/+H//+36//3//8fxs53nr6//79D/3sGs/63/x5TfqaH/0Ziy1pq4/7vI/8r/2K3/1KL/ v5j/yJj/3qr/n6f/5tz/vbL/yOi895mY8JiU+pSY+Jiq/qug/6CY/5ig+6ig/6ig96CY96CY/6AA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZW5k c3RyZWFtCmVuZG9iago4IDAgb2JqCjw8IAogICAvVHlwZSAvRm9udAogICAvU3VidHlwZSAvVHJ1 ZVR5cGUKICAgL0ZvbnREZXNjcmlwdG9yIDkgMCBSCiAgIC9CYXNlRm9udCAvR2VvcmdpYS1Cb2xk CiAgIC9GaXJzdENoYXIgMAogICAvTGFzdENoYXIgMjU1CiAgIC9XaWR0aHMgMTAgMCBSCiAgIC9F bmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IAogICAvVHlwZSAv Rm9udERlc2NyaXB0b3IKICAgL0ZvbnROYW1lIC9HZW9yZ2lhLUJvbGQKICAgL0FzY2VudCA3NTYK ICAgL0NhcEhlaWdodCA3NTYKICAgL0Rlc2NlbnQgLTIxNwogICAvRmxhZ3MgMjYyMTc2CiAgIC9G b250QkJveCBbLTE5MCAtMzAzIDEyOTUgOTg5XQogICAvSXRhbGljQW5nbGUgMAogICAvU3RlbVYg MTY1CiAgIC9YSGVpZ2h0IDQ5OAo+PgplbmRvYmoKMTAgMCBvYmoKWzEwMDAgMTAwMCAxMDAwIDEw MDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAxMDAw IDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAx MDAwIDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAyNTQgMzc2IDUxMCA3MDMgNjQxIDg3OSA3OTkg MjY5IDQ0NyA0NDcgNDgyIDcwMyAzMjggMzc5IDMyOCA0NzIgNzAxIDQ5MCA2MjYgNjI1IDY0OSA1 OTkgNjQ4IDU1NCA2NzYgNjQ4IDM2NyAzNjcgNzAzIDcwMyA3MDMgNTQ4IDk2NyA3NTggNzU3IDcx NSA4MzQgNzIxIDY3MSA4MDcgOTEzIDQ0NiA1OTUgODE3IDY4NiAxMDIzIDgzOSA4MjAgNzAxIDgy MCA3OTcgNjQ5IDY4NCA4MzMgNzYyIDExMjYgODA5IDczMiA2ODkgNDQ3IDQ3MiA0NDcgNzAzIDcw MyA1MDAgNTk2IDY0NiA1MzEgNjYzIDU3MiAzOTMgNTc3IDY4MCAzNTQgMzQ2IDYzMiAzNDQgMTAx NiA2OTAgNjM2IDY1OCA2NDggNTIwIDUxMyAzOTcgNjc3IDU2NyA4NjMgNTg4IDU2MiA1MjUgNTAw IDM4OCA1MDAgNzAzIDQzOCA3MTUgNDM4IDI2OSA1NzkgNTE5IDk0MiA0ODIgNDgyIDUwMCAxMzA5 IDY0OSAzOTYgMTEwMSA0MzggNjg5IDQzOCA0MzggMjY5IDI2OSA1MTkgNTE5IDQzOCA3MDMgOTI4 IDUwMCA5NDcgNTEzIDM5NiA5MzggNDM4IDUyNSA3MzIgMjU0IDM3NiA2MDUgNjkwIDcwMyA3MzIg Mzg4IDU2MyA1MDAgOTQyIDU1MiA2MTAgNzAzIDM3OSA5NDIgNzAzIDQyMCA3MDMgNTUyIDU1MiA1 MDAgNjY4IDU0OSAzMzggNTAwIDU1MiA1NTIgNjEwIDEwNzEgMTA3MSAxMDcxIDU0OCA3NTggNzU4 IDc1OCA3NTggNzU4IDc1OCAxMDcwIDcxNSA3MjEgNzIxIDcyMSA3MjEgNDQ2IDQ0NiA0NDYgNDQ2 IDgzNCA4MzkgODIwIDgyMCA4MjAgODIwIDgyMCA3MDMgODIwIDgzMyA4MzMgODMzIDgzMyA3MzIg NzA4IDY1OCA1OTYgNTk2IDU5NiA1OTYgNTk2IDU5NiA4NTcgNTMxIDU3MiA1NzIgNTcyIDU3MiAz NTQgMzU0IDM1NCAzNTQgNjM4IDY5MCA2MzYgNjM2IDYzNiA2MzYgNjM2IDcwMyA2MzYgNjc3IDY3 NyA2NzcgNjc3IDU2MiA2NDUgNTYyIF0KZW5kb2JqCjExIDAgb2JqCjw8IAogICAvVHlwZSAvRm9u dAogICAvU3VidHlwZSAvVHJ1ZVR5cGUKICAgL0ZvbnREZXNjcmlwdG9yIDEyIDAgUgogICAvQmFz ZUZvbnQgL1RpbWVzTmV3Um9tYW5QUy1Cb2xkTVQKICAgL0ZpcnN0Q2hhciAwCiAgIC9MYXN0Q2hh ciAyNTUKICAgL1dpZHRocyAxMyAwIFIKICAgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4K ZW5kb2JqCjEyIDAgb2JqCjw8IAogICAvVHlwZSAvRm9udERlc2NyaXB0b3IKICAgL0ZvbnROYW1l IC9UaW1lc05ld1JvbWFuUFMtQm9sZE1UCiAgIC9Bc2NlbnQgNjc3CiAgIC9DYXBIZWlnaHQgNjYy CiAgIC9EZXNjZW50IC0yMTYKICAgL0ZsYWdzIDI2MjE3NgogICAvRm9udEJCb3ggWy01NTggLTMw NyAyMDAwIDEwMjZdCiAgIC9JdGFsaWNBbmdsZSAwCiAgIC9TdGVtViAxNjUKICAgL1hIZWlnaHQg NDU3Cj4+CmVuZG9iagoxMyAwIG9iagpbNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3 NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3 OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCAyNTAgMzMzIDU1NSA1MDAgNTAw IDEwMDAgODMzIDI3OCAzMzMgMzMzIDUwMCA1NzAgMjUwIDMzMyAyNTAgMjc4IDUwMCA1MDAgNTAw IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCAzMzMgMzMzIDU3MCA1NzAgNTcwIDUwMCA5MzAg NzIyIDY2NyA3MjIgNzIyIDY2NyA2MTEgNzc4IDc3OCAzODkgNTAwIDc3OCA2NjcgOTQ0IDcyMiA3 NzggNjExIDc3OCA3MjIgNTU2IDY2NyA3MjIgNzIyIDEwMDAgNzIyIDcyMiA2NjcgMzMzIDI3OCAz MzMgNTgxIDUwMCAzMzMgNTAwIDU1NiA0NDQgNTU2IDQ0NCAzMzMgNTAwIDU1NiAyNzggMzMzIDU1 NiAyNzggODMzIDU1NiA1MDAgNTU2IDU1NiA0NDQgMzg5IDMzMyA1NTYgNTAwIDcyMiA1MDAgNTAw IDQ0NCAzOTQgMjIwIDM5NCA1MjAgMzUwIDUwMCAzNTAgMzMzIDUwMCA1MDAgMTAwMCA1MDAgNTAw IDMzMyAxMDAwIDU1NiAzMzMgMTAwMCAzNTAgNjY3IDM1MCAzNTAgMzMzIDMzMyA1MDAgNTAwIDM1 MCA1MDAgMTAwMCAzMzMgMTAwMCAzODkgMzMzIDcyMiAzNTAgNDQ0IDcyMiAyNTAgMzMzIDUwMCA1 MDAgNTAwIDUwMCAyMjAgNTAwIDMzMyA3NDcgMzAwIDUwMCA1NzAgMzMzIDc0NyA1MDAgNDAwIDU0 OSAzMDAgMzAwIDMzMyA1NzYgNTQwIDMzMyAzMzMgMzAwIDMzMCA1MDAgNzUwIDc1MCA3NTAgNTAw IDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDEwMDAgNzIyIDY2NyA2NjcgNjY3IDY2NyAzODkgMzg5 IDM4OSAzODkgNzIyIDcyMiA3NzggNzc4IDc3OCA3NzggNzc4IDU3MCA3NzggNzIyIDcyMiA3MjIg NzIyIDcyMiA2MTEgNTU2IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDcyMiA0NDQgNDQ0IDQ0NCA0 NDQgNDQ0IDI3OCAyNzggMjc4IDI3OCA1MDAgNTU2IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTQ5IDUw MCA1NTYgNTU2IDU1NiA1NTYgNTAwIDU1NiA1MDAgXQplbmRvYmoKMTQgMCBvYmoKPDwgCiAgIC9U eXBlIC9Gb250CiAgIC9TdWJ0eXBlIC9UcnVlVHlwZQogICAvRm9udERlc2NyaXB0b3IgMTUgMCBS CiAgIC9CYXNlRm9udCAvVGltZXNOZXdSb21hblBTTVQKICAgL0ZpcnN0Q2hhciAwCiAgIC9MYXN0 Q2hhciAyNTUKICAgL1dpZHRocyAxNiAwIFIKICAgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcK Pj4KZW5kb2JqCjE1IDAgb2JqCjw8IAogICAvVHlwZSAvRm9udERlc2NyaXB0b3IKICAgL0ZvbnRO YW1lIC9UaW1lc05ld1JvbWFuUFNNVAogICAvQXNjZW50IDY5MwogICAvQ2FwSGVpZ2h0IDY2Mgog ICAvRGVzY2VudCAtMjE2CiAgIC9GbGFncyAzMgogICAvRm9udEJCb3ggWy01NjggLTMwNyAyMDAw IDEwMDddCiAgIC9JdGFsaWNBbmdsZSAwCiAgIC9TdGVtViA4NwogICAvWEhlaWdodCA0NDcKPj4K ZW5kb2JqCjE2IDAgb2JqCls3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3Nzgg Nzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3 NzggNzc4IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDI1MCAzMzMgNDA4IDUwMCA1MDAgODMzIDc3 OCAxODAgMzMzIDMzMyA1MDAgNTY0IDI1MCAzMzMgMjUwIDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAw IDUwMCA1MDAgNTAwIDUwMCA1MDAgMjc4IDI3OCA1NjQgNTY0IDU2NCA0NDQgOTIxIDcyMiA2Njcg NjY3IDcyMiA2MTEgNTU2IDcyMiA3MjIgMzMzIDM4OSA3MjIgNjExIDg4OSA3MjIgNzIyIDU1NiA3 MjIgNjY3IDU1NiA2MTEgNzIyIDcyMiA5NDQgNzIyIDcyMiA2MTEgMzMzIDI3OCAzMzMgNDY5IDUw MCAzMzMgNDQ0IDUwMCA0NDQgNTAwIDQ0NCAzMzMgNTAwIDUwMCAyNzggMjc4IDUwMCAyNzggNzc4 IDUwMCA1MDAgNTAwIDUwMCAzMzMgMzg5IDI3OCA1MDAgNTAwIDcyMiA1MDAgNTAwIDQ0NCA0ODAg MjAwIDQ4MCA1NDEgMzUwIDUwMCAzNTAgMzMzIDUwMCA0NDQgMTAwMCA1MDAgNTAwIDMzMyAxMDAw IDU1NiAzMzMgODg5IDM1MCA2MTEgMzUwIDM1MCAzMzMgMzMzIDQ0NCA0NDQgMzUwIDUwMCAxMDAw IDMzMyA5ODAgMzg5IDMzMyA3MjIgMzUwIDQ0NCA3MjIgMjUwIDMzMyA1MDAgNTAwIDUwMCA1MDAg MjAwIDUwMCAzMzMgNzYwIDI3NiA1MDAgNTY0IDMzMyA3NjAgNTAwIDQwMCA1NDkgMzAwIDMwMCAz MzMgNTc2IDQ1MyAzMzMgMzMzIDMwMCAzMTAgNTAwIDc1MCA3NTAgNzUwIDQ0NCA3MjIgNzIyIDcy MiA3MjIgNzIyIDcyMiA4ODkgNjY3IDYxMSA2MTEgNjExIDYxMSAzMzMgMzMzIDMzMyAzMzMgNzIy IDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDU2NCA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA1NTYg NTAwIDQ0NCA0NDQgNDQ0IDQ0NCA0NDQgNDQ0IDY2NyA0NDQgNDQ0IDQ0NCA0NDQgNDQ0IDI3OCAy NzggMjc4IDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTQ5IDUwMCA1MDAgNTAwIDUw MCA1MDAgNTAwIDUwMCA1MDAgXQplbmRvYmoKMTcgMCBvYmoKPDwgCiAgIC9UeXBlIC9Gb250CiAg IC9TdWJ0eXBlIC9UcnVlVHlwZQogICAvRm9udERlc2NyaXB0b3IgMTggMCBSCiAgIC9CYXNlRm9u dCAvQXJpYWwtQm9sZE1UCiAgIC9GaXJzdENoYXIgMAogICAvTGFzdENoYXIgMjU1CiAgIC9XaWR0 aHMgMTkgMCBSCiAgIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iagoxOCAwIG9i ago8PCAKICAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yCiAgIC9Gb250TmFtZSAvQXJpYWwtQm9sZE1U CiAgIC9Bc2NlbnQgNzI4CiAgIC9DYXBIZWlnaHQgNzE2CiAgIC9EZXNjZW50IC0yMTAKICAgL0Zs YWdzIDI2MjE3NgogICAvRm9udEJCb3ggWy02MjggLTM3NiAyMDAwIDEwMThdCiAgIC9JdGFsaWNB bmdsZSAwCiAgIC9TdGVtViAxNjUKICAgL1hIZWlnaHQgNTE5Cj4+CmVuZG9iagoxOSAwIG9iagpb NzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3 NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1 MCA3NTAgNzUwIDc1MCAyNzggMzMzIDQ3NCA1NTYgNTU2IDg4OSA3MjIgMjM4IDMzMyAzMzMgMzg5 IDU4NCAyNzggMzMzIDI3OCAyNzggNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYg NTU2IDMzMyAzMzMgNTg0IDU4NCA1ODQgNjExIDk3NSA3MjIgNzIyIDcyMiA3MjIgNjY3IDYxMSA3 NzggNzIyIDI3OCA1NTYgNzIyIDYxMSA4MzMgNzIyIDc3OCA2NjcgNzc4IDcyMiA2NjcgNjExIDcy MiA2NjcgOTQ0IDY2NyA2NjcgNjExIDMzMyAyNzggMzMzIDU4NCA1NTYgMzMzIDU1NiA2MTEgNTU2 IDYxMSA1NTYgMzMzIDYxMSA2MTEgMjc4IDI3OCA1NTYgMjc4IDg4OSA2MTEgNjExIDYxMSA2MTEg Mzg5IDU1NiAzMzMgNjExIDU1NiA3NzggNTU2IDU1NiA1MDAgMzg5IDI4MCAzODkgNTg0IDM1MCA1 NTYgMzUwIDI3OCA1NTYgNTAwIDEwMDAgNTU2IDU1NiAzMzMgMTAwMCA2NjcgMzMzIDEwMDAgMzUw IDYxMSAzNTAgMzUwIDI3OCAyNzggNTAwIDUwMCAzNTAgNTU2IDEwMDAgMzMzIDEwMDAgNTU2IDMz MyA5NDQgMzUwIDUwMCA2NjcgMjc4IDMzMyA1NTYgNTU2IDU1NiA1NTYgMjgwIDU1NiAzMzMgNzM3 IDM3MCA1NTYgNTg0IDMzMyA3MzcgNTUyIDQwMCA1NDkgMzMzIDMzMyAzMzMgNTc2IDU1NiAzMzMg MzMzIDMzMyAzNjUgNTU2IDgzNCA4MzQgODM0IDYxMSA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiAx MDAwIDcyMiA2NjcgNjY3IDY2NyA2NjcgMjc4IDI3OCAyNzggMjc4IDcyMiA3MjIgNzc4IDc3OCA3 NzggNzc4IDc3OCA1ODQgNzc4IDcyMiA3MjIgNzIyIDcyMiA2NjcgNjY3IDYxMSA1NTYgNTU2IDU1 NiA1NTYgNTU2IDU1NiA4ODkgNTU2IDU1NiA1NTYgNTU2IDU1NiAyNzggMjc4IDI3OCAyNzggNjEx IDYxMSA2MTEgNjExIDYxMSA2MTEgNjExIDU0OSA2MTEgNjExIDYxMSA2MTEgNjExIDU1NiA2MTEg NTU2IF0KZW5kb2JqCnhyZWYKMCAyMCAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDA5Njk2IDAw MDAwIG4gCjAwMDAwMTAwMDEgMDAwMDAgbiAKMDAwMDAxMDA2OSAwMDAwMCBuIAowMDAwMDEwMzIx IDAwMDAwIG4gCjAwMDAwMTYxOTIgMDAwMDAgbiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDE2 NjMzIDAwMDAwIG4gCjAwMDAwMTc0NTYgMDAwMDAgbiAKMDAwMDAxNzY0OCAwMDAwMCBuIAowMDAw MDE3ODcxIDAwMDAwIG4gCjAwMDAwMTg5NTUgMDAwMDAgbiAKMDAwMDAxOTE1OSAwMDAwMCBuIAow MDAwMDE5Mzk0IDAwMDAwIG4gCjAwMDAwMjA0NDUgMDAwMDAgbiAKMDAwMDAyMDY0NCAwMDAwMCBu IAowMDAwMDIwODY5IDAwMDAwIG4gCjAwMDAwMjE5MTUgMDAwMDAgbiAKMDAwMDAyMjEwOSAwMDAw MCBuIAowMDAwMDIyMzM0IDAwMDAwIG4gCnRyYWlsZXIKPDwgCiAgIC9Sb290IDEgMCBSCiAgIC9J bmZvIDUgMCBSCiAgIC9TaXplIDIwCj4+CnN0YXJ0eHJlZgoyMzM4MwolJUVPRgo= --_253d505f-363b-4857-9c14-3a09b91662dd_-- From mertas@vluchtelingenwerk.nl Thu Sep 4 01:45:04 2014 Return-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.0 required=5.0 tests=ADVANCE_FEE_3_NEW,HTML_MESSAGE, SUBJ_ALL_CAPS,T_HK_SPAMMY_FILENAME 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 B8BD97F6A for ; Thu, 4 Sep 2014 01:45:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9567E8F8035 for ; Wed, 3 Sep 2014 23:45:01 -0700 (PDT) X-ASG-Debug-ID: 1409813098-04cbb05486a2d440001-NocioJ Received: from mailproxy1.vluchtelingenwerk.nl (mailproxy1.vluchtelingenwerk.nl [188.201.255.76]) by cuda.sgi.com with ESMTP id 88wDNzPDvpMUQjm1 for ; Wed, 03 Sep 2014 23:44:58 -0700 (PDT) X-Barracuda-Envelope-From: mertas@vluchtelingenwerk.nl X-Barracuda-Apparent-Source-IP: 188.201.255.76 Received: from mailstore1.vluchtelingenwerk.nl (mailstore1.vluchtelingenwerk.nl [172.16.0.16]) by mailstore1.vluchtelingenwerk.nl (Postfix) with ESMTP id ECF02EAC1B1; Thu, 4 Sep 2014 08:31:55 +0200 (CEST) Date: Thu, 4 Sep 2014 08:31:55 +0200 (CEST) From: "iPhone Company inc 2014 Award " Reply-To: "iphone2014win@qdwxs.com" Message-ID: <1507608386.1957781.1409812315471.JavaMail.root@vluchtelingenwerk.nl> Subject: FINAL NOTIFICATION OF YOUR WINNING PRIZE! MIME-Version: 1.0 X-ASG-Orig-Subj: FINAL NOTIFICATION OF YOUR WINNING PRIZE! Content-Type: multipart/mixed; boundary="----=_Part_1957777_1336190691.1409812315449" X-Mailer: Zimbra 7.2.3_GA_2872 (zclient/7.2.3_GA_2872) To: undisclosed-recipients:; X-Barracuda-Connect: mailproxy1.vluchtelingenwerk.nl[188.201.255.76] X-Barracuda-Start-Time: 1409813098 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 2.14 X-Barracuda-Spam-Status: No, SCORE=2.14 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0224, HTML_MESSAGE, SUBJ_ALL_CAPS, SUBJ_ALL_CAPS_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9159 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC0_MV0224 FULL: Custom rule MV0224 0.01 SUBJ_ALL_CAPS Subject is all capitals 1.62 SUBJ_ALL_CAPS_2 SUBJ_ALL_CAPS_2 ------=_Part_1957777_1336190691.1409812315449 Content-Type: multipart/alternative; boundary="----=_Part_1957778_1120446958.1409812315449" ------=_Part_1957778_1120446958.1409812315449 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Greetings from iPhone company. Congratulations for been part of our 2014 lucky winner.Kindly open the attached form and follow the instruction immediately . Regards iPhone Admin. Director. Rai Walle ------=_Part_1957778_1120446958.1409812315449 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit
Greetings from iPhone company. Congratulations for been part of our 2014 lucky winner.Kindly open the attached form and follow the instruction immediately .


        Regards


iPhone Admin. Director.


        Rai Walle














------=_Part_1957778_1120446958.1409812315449-- ------=_Part_1957777_1336190691.1409812315449 Content-Type: application/pdf; name="iPHONE WINNING FORM.pdf" Content-Disposition: attachment; filename="iPHONE WINNING FORM.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu Zyhlbi1VUykgL1N0cnVjdFRyZWVSb290IDIxIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ Pg0KZW5kb2JqDQoyIDAgb2JqDQo8PC9UeXBlL1BhZ2VzL0NvdW50IDIvS2lkc1sgMyAwIFIgMTQg MCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9UeXBlL1BhZ2UvUGFyZW50IDIgMCBSL1Jlc291 cmNlczw8L0ZvbnQ8PC9GMSA1IDAgUi9GMiA3IDAgUj4+L1hPYmplY3Q8PC9JbWFnZTkgOSAwIFIv SW1hZ2UxMCAxMCAwIFIvSW1hZ2UxMSAxMSAwIFIvSW1hZ2UxMiAxMiAwIFIvSW1hZ2UxMyAxMyAw IFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUIvSW1hZ2VDL0ltYWdlSV0gPj4vTWVkaWFCb3hb IDAgMCA2MTIgNzkyXSAvQ29udGVudHMgNCAwIFIvR3JvdXA8PC9UeXBlL0dyb3VwL1MvVHJhbnNw YXJlbmN5L0NTL0RldmljZVJHQj4+L1RhYnMvUy9TdHJ1Y3RQYXJlbnRzIDA+Pg0KZW5kb2JqDQo0 IDAgb2JqDQo8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEzNjY+Pg0Kc3RyZWFtDQp4nI1Y bW/bNhD+bsD/gR/2wRpimqQoSiqKAk3SFemWNOtSFMOwD47faiC2MltpkD/V37i744sox1KSIqoo 3d1z99zxeAqbXLO3byeXZxfnTLx7x07Pz9jpzXAw+U0yKbnQ7GY5HEgm4J9kWSa5KlgqU24ku9kM B4Kt8PJxOPhnxJJ/2c2n4eAD6LMPl2eMRcZly7hiUrUs54oLpZkqBRelsyy4KeGSSs12q4MHX15G VBHiIUyecZ0RzAtG0h4jRvBCOiPvk3E6qutknI22ST56g0uWmNE3vFnjBR9vk7EaLZJ0tEvGenQS I8cAUiteHgD0eql7vNSGi1eFmvUYSSXX3pMb9P07RkJx7ZMS7Poow6quksze3aLoDlaOBlitEu2k gJSKIWtP8Kh6ACmiBqlDwqoaV6Q4WzB4UH9H4SkI16BmGjUyR17hyx8LMNCgI+X4S+D0GIXucXXv vatAR4/mQYIUn8jR41lKC81l2eaGPL3+XqGuS/ZxZS1LYLat/BPiw8AvMabbEPgdXtB7cut6h7Rs kBhHeZUUUWCO0eOoPp3S8Dx3qMQ3mp8t1j8CjOU5LO89sY5vUKnJW0z5A143iS34aomK9OIXkJAc lxncCYF3JwKotrck8/Uv0DlHxSXFsosccPHvGcIhMLqDTrgSgXdKwFLqYA4lNk7KkefqoNr2ZCJr UzLuElUpl23RO5sGW62BLnpqa7de7Kz7UkdUUsGtdp5VdJnbFPYnTiguUwf9t81D2C+PtmKMLYao 1ThuvrhNsLS9CS5XVKdvPEWnp5NEKpuSSZEhqeJ3vE4imnmHhyoXWMktD3vbjeluN7LIuS5fYyTv MQL/F+pZz7I5Oh5DmXJlDjTdjoa2BhVEO6WjZ6sce3ZL92eXbKq5MG3ZzrMgNSjUkp3Bjq8299Pt E5vuoC1CWA942a+T7LDBxtsoO1YjYRV0fEXa+qJ3YbPD9nZSJLH1zeMpAFa+HmeVF7t3e4NM7adw Vy8C0l3YMMx3swe7RcbdvdfnOCu4LDwr5O6eGmO1Wfg+0cSNpukRoc3BqUDHvCmNsdshQdo3ORMd GOFlvd4G3uLjCw8sn6W1J8l2skfc+9jnnBtg7tGfjsEPmA20a8Lo36t7oIn6y6Zi4RAJ5/LWu1+/ xK1OeaYdtzbR5HDI9BK7/Q4PYYS1vlZ7G4CMzw10uboHj9onGQZNW9IOACGoIPAAGdqvQw1ans3I t73ssJ/O8TkqzWpYnjBLnjsTHSRIIJDlc+X4bI9ltihdT9wv7haz2vvtpgN3WJF0tWGeUTKDms2g E2I5cjDZPdmfA1Vw3wfn/rCop4R429UwRMrzliYFvOhq3BIONaNaCr0tt+hpuVJDA32NkbLbSFmC O77uLjDS5sBqT3vPK6bpR/EoYo5OM1SkUJa+rr3WYzgqKhYD+PGomRCxrKI5mFlJeSzRTVuxO9PW zEG/iPqlS/W2mUGdYyEGaqNPHuR5A29mWBJY9QyyjngYZ8vCE3/2GdGuPvrBgb5v6BT9+gf48h5+ aUUJ+gyrK+aHQj/PSz8pBp/Iy7nfjM0oGfbyMj5+GvZQsnPuKOD7Rrad7/8Q9Z+5/w0HY/japB+p YJ4XkmeGGfgy1bLgGr46F8PBt1/ZdjhQKewOQ5Amh4PYsBy6IzMZTDs5mwHq5GIzXS1Kdl6xP4+h ygbVgUqhi35QmfEyt6CaG/jsVjgWIagqI1ApOlHVM1Sh4WuwD1XnMJxYVCkxSIo0S0v8MI9AZSdo eoTgDDD6UWl88qjCEaxVxrM0hlWdsPoYrMpfgC0wLAsLudQWFv/AAXIRbBrD/g/Fd5j0DQplbmRz dHJlYW0NCmVuZG9iag0KNSAwIG9iag0KPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvTmFt ZS9GMS9CYXNlRm9udC9BQkNERUUrQ2FsaWJyaS9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvRm9u dERlc2NyaXB0b3IgNiAwIFIvRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDExNy9XaWR0aHMgNTcgMCBS Pj4NCmVuZG9iag0KNiAwIG9iag0KPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9BQkNE RUUrQ2FsaWJyaS9GbGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2VudCA3NTAvRGVzY2VudCAtMjUw L0NhcEhlaWdodCA3NTAvQXZnV2lkdGggNTIxL01heFdpZHRoIDE3NDMvRm9udFdlaWdodCA0MDAv WEhlaWdodCAyNTAvU3RlbVYgNTIvRm9udEJCb3hbIC01MDMgLTI1MCAxMjQwIDc1MF0gL0ZvbnRG aWxlMiA1OCAwIFI+Pg0KZW5kb2JqDQo3IDAgb2JqDQo8PC9UeXBlL0ZvbnQvU3VidHlwZS9UcnVl VHlwZS9OYW1lL0YyL0Jhc2VGb250L0FCQ0RFRStDYWxpYnJpLEJvbGQvRW5jb2RpbmcvV2luQW5z aUVuY29kaW5nL0ZvbnREZXNjcmlwdG9yIDggMCBSL0ZpcnN0Q2hhciAzMi9MYXN0Q2hhciAxNzQv V2lkdGhzIDU5IDAgUj4+DQplbmRvYmoNCjggMCBvYmoNCjw8L1R5cGUvRm9udERlc2NyaXB0b3Iv Rm9udE5hbWUvQUJDREVFK0NhbGlicmksQm9sZC9GbGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2Vu dCA3NTAvRGVzY2VudCAtMjUwL0NhcEhlaWdodCA3NTAvQXZnV2lkdGggNTM2L01heFdpZHRoIDE3 NTkvRm9udFdlaWdodCA3MDAvWEhlaWdodCAyNTAvU3RlbVYgNTMvRm9udEJCb3hbIC01MTkgLTI1 MCAxMjQwIDc1MF0gL0ZvbnRGaWxlMiA2MCAwIFI+Pg0KZW5kb2JqDQo5IDAgb2JqDQo8PC9UeXBl L1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA2NjMvSGVpZ2h0IDE4OC9Db2xvclNwYWNlL0Rl dmljZUdyYXkvQml0c1BlckNvbXBvbmVudCA4L0ZpbHRlci9EQ1REZWNvZGUvSW50ZXJwb2xhdGUg dHJ1ZS9MZW5ndGggMTA0OTI+Pg0Kc3RyZWFtDQr/2P/gABBKRklGAAEBAQB4AHgAAP/bAEMACAYG BwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8 LjM0Mv/AAAsIALwClwEBEQD/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAAC AQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZ GiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOU lZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T1 9vf4+fr/2gAIAQEAAD8A9/oprukUbSSOqIoyzMcAD3NcVrHxa8H6OzIdS+2yr1SyTzP/AB7hf1rj 7v8AaDs0ciz8PXEq9jNcrGfyCtVQ/tCTZ48NR/8Agaf/AIik/wCGhJv+hbj/APAw/wDxFH/DQk3/ AELcf/gYf/iKP+GhJv8AoW4//Aw//EUf8NCTf9C3H/4GH/4ij/hoSb/oW4//AAMP/wARR/w0JN/0 Lcf/AIGH/wCIo/4aEm/6FuP/AMDD/wDEUf8ADQk3/Qtx/wDgYf8A4ij/AIaEm/6FuP8A8DD/APEU f8NCTf8AQtx/+Bh/+Io/4aEm/wChbj/8DD/8RR/w0JN/0Lcf/gYf/iKP+GhJv+hbj/8AAw//ABFH /DQk3/Qtx/8AgYf/AIij/hoSb/oW4/8AwMP/AMRR/wANCTf9C3H/AOBh/wDiKP8AhoSb/oW4/wDw MP8A8RR/w0JN/wBC3H/4GH/4ij/hoSb/AKFuP/wMP/xFH/DQk3/Qtx/+Bh/+Io/4aEm/6FuP/wAD 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 jjoO3Xr09kooIyMGvOPFvwb0LxA73Wnn+yr1jkmJMxOfdOMH3BH0NeSaz8IfF+kMxSwW/hH/AC0s 335/4CcN+lchdaRqVixW80+7t2HUTQsh/UVTIwcGiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilAJOAMmr9loWr6iQLLS725J6eTAz/AMhXZaL8GfFu qsrXNtFpsB533Tjdj/cXJz9cV6/4P+FGg+FXju5AdQ1FORcTqNqH1ROg+pyfeu8ooooooppRCclF /Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn 9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VH lp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/ lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+ 4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy 0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfy o8tP7i/lR5af3F/Kjy0/uL+VHlp/cX8qPLT+4v5UeWn9xfyo8tP7i/lR5af3F/Kjy0/uL+VHlp/c X8qPLT+4v5UeWn9xfyo8tP7i/lQEUHIUA/SnUUUUV//ZDQplbmRzdHJlYW0NCmVuZG9iag0KMTAg MCBvYmoNCjw8L1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDY2MC9IZWlnaHQgMTk3 L0NvbG9yU3BhY2UvRGV2aWNlUkdCL0JpdHNQZXJDb21wb25lbnQgOC9GaWx0ZXIvRENURGVjb2Rl L0ludGVycG9sYXRlIHRydWUvTGVuZ3RoIDk2OTY+Pg0Kc3RyZWFtDQr/2P/gABBKRklGAAEBAQDc ANwAAP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyks 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 Kwv7Vb1o/tVvWn7NiuV72xntXzJ8wJ+9nOap1oy6iZY2RuQazq2je2pIUUUUwCiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACnLI69GIptFADmdm6kn602iigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9kNCmVuZHN0cmVh bQ0KZW5kb2JqDQoxMSAwIG9iag0KPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGgg MTQ0OS9IZWlnaHQgMzQ3L0NvbG9yU3BhY2UvRGV2aWNlUkdCL0JpdHNQZXJDb21wb25lbnQgOC9G aWx0ZXIvRENURGVjb2RlL0ludGVycG9sYXRlIHRydWUvTGVuZ3RoIDc2ODE1Pj4NCnN0cmVhbQ0K /9j/4AAQSkZJRgABAQEA3ADcAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAFbBakDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA 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 MTIgMCBvYmoNCjw8L1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgwMC9IZWlnaHQg NDI3L0NvbG9yU3BhY2UvRGV2aWNlUkdCL0JpdHNQZXJDb21wb25lbnQgOC9GaWx0ZXIvRENURGVj b2RlL0ludGVycG9sYXRlIHRydWUvTGVuZ3RoIDM3MjE4Pj4NCnN0cmVhbQ0K/9j/4AAQSkZJRgAB AQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwc KDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGrAyADASIAAhEBAxEB/8QAHwAA AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpT VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAA AAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEI FEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm Z2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK 0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aebUJdVmgt7iCGOGKNvn gMhJYtnncuB8o/On7NU/6CNv/wCAZ/8Ai6F/5Dt9z0hg/nLVqgCts1T/AKCNv/4Bn/4ujZqn/QRt /wDwDP8A8XVmigCts1T/AKCNv/4Bn/4ujZqn/QRt/wDwDP8A8XVmigCts1T/AKCNv/4Bn/4ujZqn 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 UAFFFFABRRRQAUUUUAFFFFADk++v1qto3+rvP+v2b/0KrKffX61W0b/V3n/X7N/6FQAwf8h29/64 wfzlq1VUf8h29/64wfzlq1QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA5Pvr9araN/q7z/r9m/8AQqsp 99frVbRv9Xef9fs3/oVADB/yHb3/AK4wfzlq1VUf8h29/wCuMH85atUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRS49KCrAZIOKAEopSrBckHFJQA UUUUAFFFLtY4+U80AJRTHljjcI8iK56KzAE/hUm1sZwcUAJRSgE9ATRtOCcHjrQAlFBBABIwD0pQ CemD+NACUU7y3/umkIx1oASiigYyMnAoAKK5a9+Jvg3TbyeyvNagiuYWMcilWJUjqOlT6R8QfCmv 6hHpumavFcXUgYqiqwJwMnqPSgDoqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKAHJ99frVbRv9Xef9fs3/AKFVlPvr9araN/q7z/r9m/8AQqAGD/kO3v8A1xg/nLVqqo/5 Dt7/ANcYP5y1aoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKWgCnq2q2GgaVNqmpXAgtYF3OzfoAO5J6CvnLxh8ddf1m4kg0NzpViGwrJzMw9S3b6D86tf H7xXLf8AiGDw7BL/AKLYIrzKOjTMM8/RSPzNefeDfCd/4y8QwaZZo21mBnmA+WKPPLH+g7mgD6Z+ EdzqF38OLG61S4muLi4eVxJM5ZiN5xye2K7aorDT7bStLttPtAFhto1jRf8AZUY/pUtABRRRQAVy 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 mp6NZ3ErDmRowG/76GDXLS/BHwLKxf8As+ZDn7qXDgfzr0KigDhbT4OeBbVgf7GEp/6bSsw/LNdV pnh3QtEXGlaVaWhxjdDCqk/j1rQooADz1OaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAcn31+tVtG/1d5/1+zf+hVZT76/Wq2jf6u8/wCv2b/0KgBg/wCQ7e/9 cYP5y1aqqP8AkO3v/XGD+ctWqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHJ99frVbRv9Xef9fs3/oVW U++v1qto3+rvP+v2b/0KgBg/5Dt7/wBcYP5y1aqqP+Q7e/8AXGD+ctWqACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAoorgf+Ev1yf4m3nhCCPT0WGA3CXDqxJXaCFK5689R2oA76iuQ8F+MpvEmo61o9/ZR22p6 PMIZvIYtFICWAKkgEcqeD7V1EV7bT3EltDcwyTx/fiWRWZfqAcigCeiqh1bTlleI6hZrJH99TOoK /UZ4q3nIyDkeooAKK4f4g+MNZ8HtbXljpkN/p+0yXa/MJIUVlDEHoQdwHt34rWTxKNW0vRdU0Oe2 ls9QuFjcyqSyqc5AAPDKQQQaAOioqvJfWsdylvJdQJcPgrE0ihmz0wM5Pt61YxzigAoqjqv9qm12 6QtoLhs5luyTHGB0yo5bP4fWsPwD4j1XxLotxdarYw28sFy8CzW7Ew3AU4LpnnbkEeh60AdVRXHe Kdd8X2Wrx2fhrw7FqMKwh555X2KrEnCg8ZOMH8ateCvEOoa34auNW1y3trEx3EsaiJiy7YztZs9/ mDDj096AOnorjvCHjlfENp4k1G8jSysNLu2iQyKVZYlUMzPyeepx26Vf8M67qPiiBdYjtYrLRZSR bLJlp7hQSN55ARSeg+Ykc8ZFAHRUVyvxC8Xt4K8NDUo7dZZJZ1t4/MzsQtk7mxzgBTwOTTtC8SXN 74q1HQp2trsW1tDdRXtopVGWT+Fl3MA3cYJyOeKAOoorj7fxob34nHwvaxK1rFYPPLcMDl3DKAFO cYGSCccn6Vl/8LHnOjy+J1htzoceq/YPKw3mtHkL5obOM7jnbj7o65oA9EooBDDIIKnkEdCKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKAHJ99frVbRv9Xef9fs3/oVWU++v1qto3+rvP+v2b/0KgBg/5Dt7/wBcYP5y 1aqqP+Q7e/8AXGD+ctWqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArxO+t5NT+Put2mn6qbG9fTSsE8UgB WUKpAI7+4645r2yoVs7VZRKLaASBt28IN2fXPWgDxzwBqk1h4W8WeGUtPsvjW2inkZs5lvH2thwx 5ZgT9OQR1NR/Dqy03V9N8N38XiWK01PT4p7d7SGFRMxcsWMmSSV6NuIwPY17UYYTcC4MMfngYEm0 bumOtV/7NtI2uZba3gtrm4Qq88UKh2JHUnHzYPODmgDxDw/4di1q08LWAv8ARnSw1WW5kvXuI2e9 RnyFER+YlsYIYDt1r2TRPEuk6/d6pa6bcNJLpk/2e4QxsoVskYGRyMqw49K4dfg9pb2QtJrPTQ+M NqEQlW4Y5zvC7tqsfxA9McV6TBa29rv8iFIzI252VQGdum5j3OO55oAyrs2kviyysrloWM1hcqYX Iy6logRtPUEZrzix8M6l4C+JVhpNk7SeF9Uu/PgV8nyJVViVB7HGf95cdxmvXjDC06zmCIzKMCQo Cw/HrT2w2Mqpw24ZGcH1oA8G1j7R/wAI18RzqQX+3f7Utxb5/wBcBvXyvL74xnbj3xXq+l+KLT+0 rLwzf3P/ABUI0+O4uIthxu2gt82MZzk49K3JbK0nu47uS1t3uY8bJmiUuv0YjI7/AJ0428JuzdGG L7QV8szbBuK5zt3Yzj2oAwPE/iPw7pk1ro3iKQRwaqjxhpVKxYGMqz5G3OeP6cVwHgO6t/AWieKN YnubuTwkl6q6acFzIu4ruQHGQSVXdwGxntXr8sUc6BJ4o5UByFdQwz9DUWoWv2/T57MyNEs0bRll UEqpGDjPGceucUAY3iHxAlv4Im1jS5BLJcwKLEjgvLKQsYAP+0ynHsaoahoeuaX4e0LSfDVvp1xF YBVmjvZGjV2UDax2jJ+bLEdzXUWdlbWFhbWVvCot7VVSJCMhQoG38eOvrVgHnOTnrQB87+HbHxDr Hw9+Idnb28LM940jrAxMjSq6s6KO67QcdyeK6PQpYovFXgy58MyEWbaPu1eKNyyIiKBmRckKwbcB 3yMV7JGkcG/yY0TccttUDcfU470RLFCXMcMaeYxLFVA3N6nHWgDzPxD4v03xl4SsPsCh9Fv9SWy1 G4uYRm1Qn72DkIScBWP3cg8Gsbwlper6Jr/jLw94Suo73S0hR7WaZ8pHM2392ZF7hSw46bR0Nera Vo9tpcF1HGPMa7ne4uHcAeY7deBwBgAAelXokjt4lihjWONeiqoVR9AKAPEtEXxEnx2S3vLLTIJh pQimit5mKR23HKluSw44PHWqMWkTRfCK58Ht/wAhgeIBbi16SN86ncF6ldvzbumOc172UQzmby18 0rtL7Rux6ZpDFEbgXHlJ523b5mwbsemeuPagBLeL7PbRQ7twjRU3eu0AZ/SpKDyTRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQA5Pvr9araN/q7z/r9m/wDQqsp99frVbRv9Xef9fs3/AKFQAwf8h29/64wfzlq1VUf8 h29/64wfzlqHWn/4lN3bx6hFYXM8EkdvPI4XY5UhWGTztJB4oAvhgxIBBKnBweh9KWvO9ItwdbZL S2tdPL6otzHKl1E37nyoleIBWJYu0Zzxjox5xXog6Ckr9QCiiimAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAOT76/Wq 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 M2RuJI+UcAKoB9ADQ13XG0K0N1/Zl1eQRKZbh4CP3US/ebBI3EDJwOcA+2STxBZpcyqFcwQzRQSX HRUeQKVHPXhlye24de0HiZNXnWG1sNKjvbOUFrlWuliZgCMR8g/Kf4vbjuap3Xh29ulvbdxEtvqF 7BezlWJMTIsYdB658pdpxjk5xgZANOTxFaW8msLcxSxJpQQytwfMDLuG0A9T0we9W7O+S7nubZo2 hurYI0kTEH5WBKkEdQcMPqprDv8Aw3d6nceJkfZHHqCwG2k3ZG6NRjcByBuA/DNathYTprGo6pdB I5LuOGJIkbdtWMNyT0yWdvwA70AaVFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA5Pvr9araN/q7z/r9m /wDQqsp99frVbRv9Xef9fs3/AKFQAxf+Q7e/9cYP5y0zVzcLol+1pcR21yttIYp5SAkT7TtYk8AA 4JJ7Cnr/AMh29/64wfzlqh4p0+11Hw5fpc6WmplLeVorVgd0j7GwqkcqzdARyM0WvoC8zmdOgvbb VnWGzvrANqqyRzXkmIzbtFCskWSx3Mzq20DPPORnnvx0FeY6dHHZeI7Fo4tFnhM8PkvZ6RsZ1kLL lGMrYKMh3Hb8qkHqcV6cOgptJbMNL6BRRRSAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEZVddrKrDIOGUHn 15pSSxyetFFABRRRQAUUUUAFFFFABRkgcE0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFADk++v1qto3+rvP+v2b/0KrKffX61W0b/V3n/X7N/6FQBGP+Q7ff8AXGD+ctYviLUIoNd0mxu9 V/s2yuI7iSSYTiJmaPygq7m7HexI74HpW2P+Q7e/9cYP5y1YdEcYdFbHQMoOKFbqBzXhfxJp1/p8 UM2sWVxeLdXFvGDcIZZFSZ0Q4BySUVSSBznPeunpghiVgwijDDoQoBFSYPoabt0G7dBKKXB9DRg+ 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 ZG9iag0KMTMgMCBvYmoNCjw8L1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDQzMy9I ZWlnaHQgMzAzL0NvbG9yU3BhY2UvRGV2aWNlUkdCL0JpdHNQZXJDb21wb25lbnQgOC9GaWx0ZXIv RENURGVjb2RlL0ludGVycG9sYXRlIHRydWUvTGVuZ3RoIDE5MDcxPj4NCnN0cmVhbQ0K/9j/4AAQ SkZJRgABAQEAeAB4AAD/4QBwRXhpZgAASUkqAAgAAAABAGmHBAABAAAAGgAAAAAAAAABAIaSAgA7 AAAALAAAAAAAAABDUkVBVE9SOiBnZC1qcGVnIHYxLjAgKHVzaW5nIElKRyBKUEVHIHY2MiksIHF1 YWxpdHkgPSA4MAoAAMH/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4n ICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEvAbEDASIAAhEBAxEB /8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQID AAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RF RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEB AQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdh cRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldY WVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDys8Gm05utNrvM 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 xRigBtLS4oxQAlFKBRigBKWjFGKAAUtAFOAPPFADacKAKUCgBBXbfCX/AJKbpH/bb/0S9cWBXbfC Yf8AFzNI/wC23/ol6U/hY1ufTtFFFchqf//ZDQplbmRzdHJlYW0NCmVuZG9iag0KMTQgMCBvYmoN Cjw8L1R5cGUvUGFnZS9QYXJlbnQgMiAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YyIDcgMCBSL0Yx IDUgMCBSL0YzIDE2IDAgUj4+L1hPYmplY3Q8PC9NZXRhMTggMTggMCBSPj4vUHJvY1NldFsvUERG L1RleHQvSW1hZ2VCL0ltYWdlQy9JbWFnZUldID4+L01lZGlhQm94WyAwIDAgNjEyIDc5Ml0gL0Nv bnRlbnRzIDE1IDAgUi9Hcm91cDw8L1R5cGUvR3JvdXAvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNl UkdCPj4vVGFicy9TL1N0cnVjdFBhcmVudHMgMT4+DQplbmRvYmoNCjE1IDAgb2JqDQo8PC9GaWx0 ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEyOTA+Pg0Kc3RyZWFtDQp4nJVXbW/bNhD+bsD/gfs0a1ho USRFaSiKLW9FunrzkhT70A6DoygvaGIllrKmf2q/cXdHkRFtS/EShBHJ473fcySbztmbN9PZwckh i9++ZfuHB2z/fDyaHidMJOz8ajwSLIZfwUzC40QxE2c8Zef34xEs8zSHQQrFVtdrC6fvxqNPk1+j vWRyG+3JyRK/LiMzucPZt0hNGH5c4VBF2WQV7anJVxwWsLeKNBDDCeaoqydYIiIWpZbwFj6WwHEZ Crl2vE8jOTk6ZjD+9jvSc6Cljc8Ttr8//QgbZ1MYMljXcbSnrbrTBOaxwLnyJyLWIAvUlBaaG9wv IyHtvLjDOapOitxHkvQkG0qYPOCHtQzYNPe4Rto2cDwlvktvbwNib7xRdZTD8l/s/P14dASxwfis BSXNJc8VReUTiUP5XhnyeGt4Dx8Rp1yEbOgoqU2qeA2RfULeEqCmKtAektAxHrzy9yVu0PnmZwjd o40/DF9h9lxz3C4qS79dqSRLeJKHWvU5Isk0j3VI+zmKROvRRd+x3EC2hseWXlOMoAt0J2d98t1Z 76Z2GfMO6WxEL1zAiy8MOWBMK/ry2Rwys4JCkcwnNc6eGyeqbnC0eWUgr7cbp6WAUu11HzuaHTDW AQDRAYD1BDM5l7vwSAZ4pIqn6StxNIqbbI12flcuwF11ySrvjxBF6nJ56Xzji8c7kHAA0hegAHxt sYD8XPkv8jhGoSaa7SXEkSsnh8PHRi1Nj8U6Zia54lp3rYkZAeW7bT7YArouP7sMXkddNKStXEi6 pbOorVqFSbkJV1Cw2tcrnHiEs4jXlKA71asykststzgrA4CzFudOvc4/gDJHv6CSZ0evgZ+O4X/L w0b3HAcM+U8e+k7AlCs/C2vw0gHcS73hzBbyyrmvALQX1l//lC7brlwh4t9LxwqqX7ki34D2pesv KgEqjBZJs0n44Jpl2WYiFMB1CTr3AEzlzHnCnboPFZRU6K7Aa4MlLQdKWmqM+A5M1ACTJObGAdTM tUjufTlfYIXCorFOK764SB3fIizcOB+t+pqbznmWhnIGldUDylKjbHFpRZnyhOpu3mzqB3e1oYSq Kxx9Ml26yFMY7aEe7TNJna0jmNwwvyGObXfoaW/C8Cw8+y8lz6zvgDRcmOBAdRHpDghaVH0d+bCw Q8m9rTs1XImA9OMZQ7NOyLgCJPK+wzKWXMleORuhTftDq3PBpcuPAwub16tFA7GhEN/BJ3aJyl45 1eT7+nUAFzqBxhmw7g20hitMGtL69ClK5uod7xkeuWnzu97wJ1zpfukb3jED3gHANrs17y7paQuN TumVLRYsiB/7/ABJa/oFbiidBe8WuZGJQnCVM60E1zs5Id/pHaRljA1sDbWwTbYtZtZa/K39T6j8 TMj+IWpBuujPhRyBNRAyfHeLB0IHNZLIELTuK7pC3gYYRXofYH5XK0QJBKmXLEMjqMm0r7AezfOY 5yaUOaz5wLUTbwnK/F/Uw8dMloSHHezZJ9yF7cBpF9Jc3LyD4NnVOAdYNKD9swUs+o36yj1Zi8bh pCNOWxKK+bVLAV8Fi0io9g1Y+ttD2/Z6wE6lPM9Dw4Z9mwS5jLXFY7UtnRVcB+CmOnRF3eQ+cDNQ ieZiJ0QW7mrwOB7twZ2EfjKIH1UstG2oP3jI5AlblePRnz+wJQjjuZA5SYy5UtJoBndPbY8YVoDU 6axsFiJjhxX7o5X6H+csdmcNCmVuZHN0cmVhbQ0KZW5kb2JqDQoxNiAwIG9iag0KPDwvVHlwZS9G b250L1N1YnR5cGUvVHJ1ZVR5cGUvTmFtZS9GMy9CYXNlRm9udC9UaW1lcyMyME5ldyMyMFJvbWFu LEJvbGQvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL0ZvbnREZXNjcmlwdG9yIDE3IDAgUi9GaXJz dENoYXIgMzIvTGFzdENoYXIgMzIvV2lkdGhzIDYxIDAgUj4+DQplbmRvYmoNCjE3IDAgb2JqDQo8 PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL1RpbWVzIzIwTmV3IzIwUm9tYW4sQm9sZC9G bGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2VudCA4OTEvRGVzY2VudCAtMjE2L0NhcEhlaWdodCA2 NzcvQXZnV2lkdGggNDI3L01heFdpZHRoIDI1NTgvRm9udFdlaWdodCA3MDAvWEhlaWdodCAyNTAv TGVhZGluZyA0Mi9TdGVtViA0Mi9Gb250QkJveFsgLTU1OCAtMjE2IDIwMDAgNjc3XSA+Pg0KZW5k b2JqDQoxOCAwIG9iag0KPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvRm9ybS9SZXNvdXJjZXM8PC9Y T2JqZWN0PDwvSW1hZ2UxOSAxOSAwIFI+Pj4+L0JCb3hbIDAgMCAzMzQuNzcgMTM1LjU4XSAvTWF0 cml4WyAwLjIxNTA4IDAgMCAwLjUzMTA3IDAgMF0gL0xlbmd0aCA1Nz4+DQpzdHJlYW0NCnENCjMz NC4yIDAgMCAxMzUgLTAuMDAwMDAwMDAyIDAuNTc1OTkgY20NCi9JbWFnZTE5IERvIFENCg0KZW5k c3RyZWFtDQplbmRvYmoNCjE5IDAgb2JqDQo8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9X aWR0aCAzODIvSGVpZ2h0IDg4L0NvbG9yU3BhY2UvRGV2aWNlUkdCL0JpdHNQZXJDb21wb25lbnQg OC9GaWx0ZXIvRENURGVjb2RlL0ludGVycG9sYXRlIHRydWUvTGVuZ3RoIDYwMTY+Pg0Kc3RyZWFt DQr/2P/gABBKRklGAAEBAQB4AHgAAP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8e HRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAFgBfgMB IgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUE BAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1 Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOk paanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAf AQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQF ITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdI SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APf6 KKKACiiigAooooAKKKKACiiigAo6Vl634h0zw9Z/adSuViVjtjQfM8jdlVRyT9Kw4R4l8UfPM0nh /Sm5WNMG8lHueRF9Bk+4oA377XNO06ZYJ7lTcPylvGDJK30RcsfriiK9v7kbotO8lOxupQrH32ru /Ug0aVoenaLEyWNqkZfmSQ5aSQ+rOeWP1NaB4GaAMu6XxAIy1pNppfsksUgH/fQb+lcrYfEa4g8X xeF/EWjmxv5iBDLBL5sUmeh6AgHH+OK2dQ8Xxm4ew0G1fV9RU7WSA4hhP/TST7q/Tk+1VNA8FNBr r+JNfuEv9dkGFZFxFbL02xg89O59/U5AOxFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRQSAMk4AoAKKiiuYJyRFNHIV6hGBxUtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFch4p8ajSruLRdHt/wC0dfuP9VbKfliH9+Q9h3qv8R/GkvhbTIbbT083WL9vKtI8 ZweAWx36jHuat+B/Bsfhiwae6c3Ws3fz3l253MzHnaCew/WgBPDng02d3/bWu3H9p69IOZ3HyQD+ 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 wfE/i7T/AAxbx+fvnvZzttrKAbpZm7ADsPetIz6kfuWMH/A7kj+SGudsvC0ljr9xrn9nQXWpTDHn 3WoMxRf7qDysKPpQBVsfC2peJJ49U8ZurKDvg0eNv3EPp5n/AD0b68Cu4RFRQqKFUDAAGABWS17r sfXRbeT/AK5X2f8A0JBVeTxHfWwJuvDGrKo/ig8qYfkr7v0oA6CisLTPFulard/Y4WuYrsDJgubW SJx/30ordoAKKKKACiiigAooooArwWFnbSyS29rBFJIcu8cYUsfcjrViiigBrIrfeUH6ilAAGAKW igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArI1HwvoerX0d7faZbT3UeNkzJ 84x05HNFFAF6106ysd5tbSCAucuY4wpY+pI61ZoooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//ZDQplbmRzdHJlYW0NCmVuZG9iag0KMjAg MCBvYmoNCjw8L0F1dGhvcihBRE1JTikvQ3JlYXRvcij+/wBNAGkAYwByAG8AcwBvAGYAdACuACAA TwBmAGYAaQBjAGUAIABXAG8AcgBkACAAMgAwADAANykvQ3JlYXRpb25EYXRlKEQ6MjAxNDA4MDEy MjEzMzEpIC9Nb2REYXRlKEQ6MjAxNDA4MDEyMjEzMzEpIC9Qcm9kdWNlcij+/wBNAGkAYwByAG8A cwBvAGYAdACuACAATwBmAGYAaQBjAGUAIABXAG8AcgBkACAAMgAwADAANyk+Pg0KZW5kb2JqDQoy NiAwIG9iag0KPDwvVHlwZS9PYmpTdG0vTiAzNS9GaXJzdCAyNTcvRmlsdGVyL0ZsYXRlRGVjb2Rl L0xlbmd0aCA2Njc+Pg0Kc3RyZWFtDQp4nLVVTY/TMBS8I/Ef3hEOjb9jG61W4oKEVlpVu3tDqyqk Jg1N6yhJCeXX8xxX7MJC4gunybPnzTyPq5pLoMA1CAXcgMZvC4wqEBSYpCAY8ByBg9C4KEBRBkJC zmloycNiDpphpUFLrCxoowFbDecgGRiFFQdjsRJg0UpKsLkAJFtrQeboh1JSI2oG0gDDD5A4B5PB EFFbUAwYZwoUR8RCCUR0UhKY4BKUQsxxHfWENcBxX4ZTYV+uOeA0TKM4R542OC/6GEvh6oqsA5nC Hbkna3LzCegjkHUF09r19etXf6GwZQpfpohZyoe6OnWOvG+GN7thaN8RMrhyd/RN/cNtsy914/ps 9N227VzfZ6U/EE4ZJ9SSxld+hVv7fjXWw25Vtzt/dNnXtno7DT9/wD98ezQexzGrfLOt3LF2k9Wx IvWhqFxPovimH4vOf+v39Sa4bwJ7w54s5wN7edRT2/him431vj64bV1kvqtIqNpQERzh4I89kUQq 8nE9TaA2e3c++sFtys63yHtyn7+Ll+7hvG0xuOPQnIu2beKZs4LkBUZMC6UMNTy3mpY0/Aq15dtS fQ71ylA61tE2+X6buimeppXLv5wEikoxf2bH5IxYvuynlylmmWKXKTRhXpbA4QkckcBJyU+lZzzL 0Qkck8CxKRkmBZ2SNEuJmv0ja3Yh3btymK5t2g9v1gQmgp0AX60JWAQeQUSIffgkTJBHiCoitsvY LmO7jO0ytsvYLmO7jO0ytss4hIwqKqqoqKKiiooqKqqoqKImlUe4HPbh3DpyP3SncnjonLvzfiDr osN/oVCGFywkESIQse/Z7q37Pty4M/CL1u3p0H8KT3t0YuG9++W1EOLvCc1Esxz3IwS3/x7h5R6D 20+CnAcDDQplbmRzdHJlYW0NCmVuZG9iag0KNTcgMCBvYmoNClsgMjI2IDAgMCAwIDAgMCAwIDIy MSAwIDAgMCAwIDAgMCAyNTIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDUzMyAwIDAgMCAwIDAgMjUyIDAgMCAwIDAgMCAwIDAgMCAwIDQ1OSAwIDY0MiAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgNDc5IDAgNDIzIDAgMCAwIDQ3MSAwIDIzMCAwIDAgMjMwIDAgNTI1IDUyNyAw IDAgMzQ5IDM5MSAzMzUgNTI1XSANCmVuZG9iag0KNTggMCBvYmoNCjw8L0ZpbHRlci9GbGF0ZURl Y29kZS9MZW5ndGggODAyMjkvTGVuZ3RoMSAxNzQ1NDA+Pg0Kc3RyZWFtDQp4nOx7B1yUV/ruOd/M MMMUZgYYigPM4FBEQBBQscHQRURAGAUVBcHesGBvMYlJSEzv1WTTNppkGE1E00xisultUzZ1zW42 nfRksybKfc73zrFtkvvf3L27N/fHgWee57ynfKe+30ucMM4Yc+BDy2pL6ysrflj9TRJTzi9lzHl2 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 nCfFuVJ0SXGOFGdLcZYU26Q4UwoZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ9nAZ 9nAZ9nAZ9nAZ9nAZ9nAZ9vDlUsj4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4 h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4h8v4 h8uwh8uwh8uwh8toh8toh8toh8toh8toh8toh8toh8toh8toh5fsFgJRcyChwIWYOZDgAG2l3GmB hFGgLZTbTLQpkGAGbaTcBqL1ROuI1gbii0BrAvEloNVEq4g6qWwl5VYQLSfjskB8MaiDaCnREqqy mGgR0cJAXBloAdF8onlEc4nmBOJKQbMp107URjSLqJWohWgm0Qxq10y56UTTiKYSNRE1Ek0hmkzk I2ogqieaRFRHVEtUQzSRqJpoAlEV0fiAsxJUSTQu4BwPqiAqDzirQGUB5wRQKVEJUTGVFVE7L1Eh tSsgGks0hmqOJhpFzUcS5RONIBpONIw6yyPKpV5yiIYSZVNnWURDqF0mUQZROtFgojSiQUSp1HUK UTL1mUTkIRpIXScSuamdiyiBKJ4ojshJNCAwYCIoligmMKAGFE0URUYHUSQZI4jCiexUZiOykjGM yEJkpjITkZEolMoMRHqikEBsLUgXiK0DaYk0ZFQox4mYSryP6KhahR+h3I9EPxAdprJ/UO57or8T fUf0bSCmAfRNIKYe9DXlviL6kugLKvuccp8R9RJ9SmWfEH1Mxo+IPiT6gOh9qvI3yr1Hub9S7i9E 7xIdorI/E71DxreJ3iJ6k+gNqvI65f5E9Fogegro1UD0ZNArRC+T8Y9ELxG9SPQCVXme6DkyPkv0 DNHTRE9RlSeJniDjH4geJ3qM6CDRo1TzEco9THSA6CEqe5DoATLeT3Qf0X6ifUQ9VHMv5e4luodo D9HuQFQhKBCImgbqJvIT3U10F9GdRLuIdhLdEYiCv+a/p15uJ7qNym4luoXoZqLfEd1EdCPRDqIb qLPrqZfriK6lsmuIria6iuhKanAF5S4nuozoUiq7hHq5mOgiKruQ6AKi84m2E51HNc+lXBfROURn E51FtC3gaAWdGXDMAp1BdHrAMQe0lei0gMMH2hJwwBnzzQHHcNAmoo3UfAO1W0+0LuBoB62l5muI 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 XPpw6fbS6qVdl/5w6ctLq5d+s8y7rP2y4cvGL8tZtnVZ9fK+yycsv2n5puXPLD+8vGHF2BXLVry2 0r5y7MrwyhdW7lx5elXHVQtWbV1Vv3rE6tLV26NZ3zFXvXz2fNR8tokuPiNyHok+dkaMGeQ7xt6U s0dc83Fi9PTzzjqNM0+cNJ87ojvPiJwdopVnxJgX5Bya/Ezqzg73Mw8fGn2cWVPNweqb+bZ1FvPr pqQtyRsT9zfNmdRt3dAtR7ZNfDlp05m504gSs/MENf8atbombWmMnrwq52JV95C8r+qbEUTvy4mf MJNvocUhpW0/1m3k+5CSM6vDsbNWhQlx68CZlWCLtPuc2f+Zc2Z/tznn36XmezXLKz20TppAeVPj TEg+tpn5Ym4y5h9jfjPzyJzIDCizltM0OzZmlDkudUq0VrY4k+NuM6O10Vq0yVonuJeVVttt5rl9 gnmwMm5GPc88Gz+vnjunmjP3TtWbjFl0WuP8Ked1rvDUaH3aNq7MTM0aOiRzX3ubsY6pb9asDt+0 O0KvSmlcfRpXlZTO7W1nViCjV8q1TdW2yRq0fbN9irwjr8ha8npK58T9jT01tWNKZ1bAFNlelo2r Z9bR+JVU2qJWTXPdjFs5U9Bw9jp5f7PVcb+5MrZttJ773xhPl8+fmtXuSOoE7GkWfRk1GWMyFTdi G2NsjEQZTaOndMsh3lNkNmUkUrPablb53iZzEzeqR6Rtx9fGFbbS0BqtT41G6w2RT5Df3WbKrMiS 0dPkd7S+R0b3wQbGCtd9sFqV4kSucMbqptbH/1LUmhon59ZQK22cmCtuk5zbQq6030/UWnzB0rRi f4ecHSkpTev4d4ha2S9Y1G7jAuXs6Kg9SpycGz+1d4kT2e+NTH8/OVfzf7buwsSIs9y7JG25wj6l 6xWnEw/JXY+SDeqKXe501NmGKV3lHsi8h7CDGi53TcZVOffLkhS1O5qjdlZyD3V89HG1P2J3ROnN Kzao3Um0aRcjZeuMaObhGVG5g1FnW819jlHeyi6oVl6ROxrZLtMUteOJqL0RddXdrfKYtp3aW+Vu itmiZ+Zhte8qNSVLXekpd13qLCvzsJyXzHsIO7dB7NXkDk22W6tKiNqnhdR+jrpqp9a0X5uaNcai InJaxuKaiBGJK+zKHyw2LJ36ttItn7RW6VJ6m4/EczMa3w96VRlnwq5V6Ies0/XXrLNEK+sc4bWG 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 sKsCuyrEODIQJANBbPuYDASx7yQ96AQ96AR2foQl1VhSbZ317QnrnG9jrC6JZGYgq0si2RlovuPv oHedoHedwLpqrKvGumqsq8a6aqyrJjNBMhMkM0EyEyQzQTITJDNBMhMkM0EyEyQzQTITJDNBMhMk M0EyEyQzQTITJDNBMhMkM0EyEyQzQTITJDNBMhMkM0EyEyQzQTITJALVRKCaCFQTgWoiUE0EqolA NRGoJjNBcSVR8BMFP7nYTRT85GO3ZZK4CO8z8T7T/Hnr3eb7dF+i0J4oXEoU2hOFS82fEl9PrnaT q93kaje52k00MolGJtHIJBqZRCOTaGQSDT/R8BMNP9HwEw0/0fATDT/R8BMNP9HwEw0/0fATDT/R 8BMNP9HwEw0/0fATDT/R8BMNP9HwEw0/0fATDT/R8BMNP9HwEw0/0fATjUyikUk0MolGJtHIJBqZ RCOTaGQSDb9w0BdO4LEXj3+Cx4vxOAUPV+HhEpFGjHYQnx3EporYVBGHFGKQwt378H8H/u/A/x34 vwP/q/C/Cv+r8L8K/6vwvwo7qrCjCjuqsKMKO6qwowo7qrCjirES1J86a747IQZYrmGOmwNB5rlb mOMWQj6gG4uPNM11K5kzVut7PMv1Y54VsBJWwWqIwq2wBsrgNrgd1gJzo4e50cPc6GFu9DA3epgb PcyNHuZGD3Ojh7nRw7zoYV70MC96mBc9zIse5kUP86KHeTHJBW7wMOfJmf2Ysj3GGK9jjNcxxuuI m3xP78ndA4zdOsZuHWO3jrFbx9itw/YYtsewPYbtMWyPYXsM22PYHsP2GLbHsD2G7TFsj2F7DNtj 2B7D9hi2x7A9hu0xbI9hewzbY9gew/YYtsewPYbtMWyPYXsM22PYHsN2OWfN0f9EtN8hwm80zVnS o4/EYDwq534t90+SjdNk4zTZOE3dj6jrpK6HkeLG0wxGihtvM8yfAe0kQ6fJ0Gm8LMfLcrwsx8ty vCzHy3K8LMfLcrwsx8tyvCzHy3K8LMfLcrwsx8tyvCzHy3K8LMfLcrwsx8tyvCzHy3K8LMfLcrws x8tyvCzHy3K8LMfLcrwsF5fhSRm52UVudlmCojP52YUH2YyAfzACGvDkNjzpYP5kpoP8yQye/FT+ NIvc7SJ3u8jdLnK3i9ztwqsyvCrDqzK8KsOrMrwqw6syvCrDqzK8KsOrMrwqw6syvCrDqzK8KsOr Mrwqw6syvCrDqzK8KsOrMrwqw6syvCrDqzK8KsOrMrwqw6syvCrDqzLG8Rw1jofjxbvmvzldhdX3 YfWLwoO/e/F3L77uxa92+NSOOw/gz1782Ys/e/FnL/7sFXZLCXldrP/DskT/1HIb/eJH+peWB/4P cfceH3dd53v8l5kmaScTyqUUEBC5iKKriAquICpaWVxXdr3hbcXdFaytFFqgQFsLrSKoXMqdglRg qbWAUCUWLbRRoNgSTEnaSTOdhCY0DUmmv0yTNJlMU+B7npOtHvSc8zjnn3POHy8nM5n5/b7f9/tz +8aQln/S7tWxxLWhGFX4373RSd5RTFwlIubh2tCSuC6amLjep28MvYm7yn9DJexL3BP21Zhva8y3 NUfjrTgGb8OxOA4XeM+F+Dam4zuYgZn4Li7CLFyMSzAbc3ApLsPlmIsrcCWuwjzMD/vG9zNmpV2J haHHXnYm7gi7E0560dcSl4r2yzDXq1fZ5TxcE5oSi7AY38e10aGJ68KqxBLvuyV0Jm7FbbgdS8Ma +1tTkwh/qkliAipRhWpMxCSkUIM0anEAJuNAHISDcQim4FBMxWE4HEfgLTgyFGhYoGGBhgUaFmhY oGGBhoWa00NTzRn4CM7ER/ExfBxn4RP4JKbhUzgb/4Bz8GlcYB8X4tuYju9gBmbiu7gIs3AxLsFs zMGluAyXYy6uwJW4CvMwP6yJJoic7VTcQsVXEneFQbF0bRgSJ6PRv3ChxIUSB8Y4UI6wV3Scoo5T 9I4ilUtULukwRR2mqMMUdZiiDlPUYYrUL1G/RP0S9UvUL1G/RP0S9UvUL1G/RP0S9UvUL1G/RP0S 9UvUL1G/RP0S9UvUL1G/RP0S9UvUL1F/jPpj1B+j/hj1x6g/Rv0x6o/pckVdrqjLFXW5oi5X1OWK ulxRlytSt0TdEnVL1C1Rt0TdEnVL1C1Rt0TdEnVL1C1Rt0TdEnVL1C1Rt0TdEnVL1C1Rt0TdEnVL cu4K0V3OxYU0vVp0XxsdQO0uau+g9u5oNo3raVwv0nu9cyOtu2jdlZjv+cLQ51NDIj8W+bHIj0V+ zIfX+VDPh3o+DCZuDhtkQKsMaJUBrTKgVS79SW34I49aeNTCo3oe1fOonkf1PKrnUT2P6nlUz6N6 HtXzqJ5H9Tyq51E9j+p5VM+jeh7V86ieR/U8qudRPY/qeVTPo3oe1fOonkf1PKrnUT2P6nnUxaMu HnXxqItHXTzq4lEXj7pkSCxDYhkSy5BYhsQyJJYhsQyJZUgsQ2IZEsuQWIbEMiSWIbEMiXlcz+N6 HtfzuJ7H9Tyu53E9j+t53MLjFh638LiFxy08buFxC49beNzC4xYet/C4hcctPG7hcQuPW3jcwuMW HrfwuIXHLTxu4XFLNIOD3Rzs5uAefj/Lxd2cy3FuF+cKnCtwrsC5Av/T/H+CezH34sQNXruJ00vC Yxzs5WAvB3s52MvBfg4OipN1XOzgYgcXYy7GXIy5GHMx5mLMxW4udnOxm4vdXOzmYjcXu7nYzcVu LnZzsZuL3Vzs5mI3F7u52M3Fbi52c7Gbi91c7OZiNxe7udjNxW4uFbhU4FKBSwUuFbhU4FKBSwUu FbhU4FKBSwUuFbhU4FKBSwUuxVyKuRRzKeZSzKWYSzGXYi51cKmDSx1c6uBSB5c6uNTBpQ4udXCp g0sdXOrgUgeXOrjUwaUOLnVwqYNLHVzq4FIHlzq41BG9j0tFLhXHs/G/XBjmwiAXBjlQ5ED53DRI 3UHqDlJ3kLqD1B2kbpG6ReoWqVukbpG6ReoWqVukbpG6ReoWqVukbpG6ReoWqVukbpG6ReoWqVuk bpG6ReoWqVukbpE6g9QZpM4gdQapM0idQeoMUmcwepfK8JrK8Jrsj/XzVOIGu7jRLsZX7+u7sFS/ v0ffPtJUdxSOxltxDN6GY3EcLvCeC/FtTMd3YIKk9SitR2k9SutRWo/SepTWo7QepfUorUdpPUrr UVqP0nqU1qO0HqX1aPQdWvfSuteKYyuOZUFeFuRlQV4W5Mf1/3MG0P1/iHwTfKL8k43/dbT38qOX H7386OVHLz96+dHLj15+9PKjlx+9/OjlRy8/evnRy49efvTyo5cfvfzo5UcvP3r50cuPXn70UjCm YEzBmIIxBWMKxhSMKRjLhrxsyMuGvGzIy4a8bMjLhrxsyMuGvGzIy4a8bMjLhrxsyMuGvGzI/x9k Q55DeQ7lOZTnUJ5DeQ7lOZTnUJ5DeQ7lOZTnUJ5DeQ7lOZTnUJ5DeQ7lOZTnUJ5DeQ7lx3v8wPj/ C3kar2JexapNrNp00z6mfVnjmMYxjWMaxzSOaRzTOKZxTOOYxjGNYxrHNI5pHNM4pnFM45jGMY1j Gsc0jmkc0zimcUzj8h5je4ztMbbH2B5je4ztMbbH2B5je4ztMbbH2B5je4ztMbbHuKYcC3NxBa6E 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 gm1TrbapVjnVKac65VSnnOrUqDo1qk6NqtM2VSmnKuX2V6VG1SinGmVVoy3c2aiytKss7VzayKGN qst21WW7CrJdtWhXLdpVhnaVoV1laOdUE6eaONWkKmxXAdo51cSpJpnfzqmNMr9ZxjfL+GYZ3yzj m2V8s4xvlO2Nsj0n23OyPSfbG2V7Tra3c7FJlrfL8nZZ3i7L252Je03H5bn6g+G16FRZVj5nfVdG LZVRS2XUs3xeJGv28nUFX+v4Widb8nzt4uvjPH2cp4/LiJIsKPFiES8WyYASPxaJ+JIoXyrKl4ry pbxYJMpLorwkypeK8qWieS+9HqfT46J5L60ep1UXrbpE9V56dYnkvfSpo08dfero0yWa94rmvTSq o1EdfR4XvSXRu1Tk7rXnOnt8LtwkYkftYJ1ne6x9JDwiNrdHb7GzPZ5121mfnfXZ2YBdNaoDeTtr tLNGq9tjdY1W12h1e6yu0ar2WNEeK+qzoj4r6rOaPVazx2r6rKbPahqtonyW7YuOcacRd9rmTt3u 1O1OvTQsn1Gb3G3Y3ZrcrcndRtytyd2a3G3E3ZpoMUSLIXcdocWQO4+4c7c7d7tzNy2G3H3E3Ufc vdvdu929yd3L58NuZ4Tt6uWe8JJdv+TOw+7YrpatUXFbVdzy+eC34xW3yruG95+h8vv/G6aTk1+J 3j+uXKfvtPtO5/iz8tlu37iOlfs/NeRZ7PpbXX/QNJw108YUHrPPFCUiVJpJq1CNYz0/EcvCgGts H3em2bvbdJHyGoejE13jed/5Hf2GXOsp73j1z+f78X4TqS/VmIhUeMquPmc336LjEB2303E7Hcvn 6+30G7KGp6zheWt43hqep+Vfn7uPxFFvOn8f6/0nyMUTPS7z/vu9Vj5zV9hzITrM+gatadCadlnT rv0/wdlt9X3Wtdu6dlvHbuvYbQ273XvQvQfde9B9d7nvLvfd5X673G+Xe+12n0H32BWd4OpP2/0f 7Xzjm6pshs6PuVNxvKqmxn9T5If7vdxm9zPKv9Hz5+pjxxvd9Wl3fdpdn/6fVp5ypTnW+8pV5kSP 5YqxzHv/tmJMGu+ie8wBe52tq/j6pTB7/293vOTOXx3/jdH3W/d27/wt1xqdC7Za/++ptOpNFaTc GbKUWsbrct99lVrLqLXMfn7vqje42uNcbDS7baXgMgou42QjFZfJiKyMyHK00f5+Lyuy9rjdHrfb 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 V+BKXIV5mI8F+B4W4mpcg/vDLPVilnoxa8LmaPKELcigBVvRiiy2IYc2tONl0FO0LxTtC9WaBZUH hRZRP1+NmVW5K0qpLwvUlwXqy6zKfdFBVUmIraqDcQiOx0lhVtW7PJ6CD0RT1ZRZVR/y9UVhgfqx QP1YoH4sUD/mqh9z1Y+Z6sfMKrFUNR9iqeqe0FJ17/h/Qd9SfTTeimPwNpyCc8NKmTZfps2XaQur 50STqy/FIizGrbjb6/d7fDB6q2xaWP2orzu9/xXsgJiTOXfInDtkzkqZs7K6P5pUXcBu7x/2ffEn gxZWj0aTJ04JLRMPxVQchsNxBN6CI3EUrHWitU601onWOvFYHIfjcQLejm+51gW4EAs9vxrXhJZJ FaEl9ZVwWeprWBguSl0DeZOSNyl5k5I3KXmTkjepm3AzluAW2G/qNtyOO3An7sLdWIp7cC9+ivuw DD8DfVIP4EH8Jx7C8mhyzQJ8DwtxNa4BbWtoW/N9yO8a+V0jv2vkd4111lhnjXXWWGeNddZYZ411 1lhnjXXWWGeNNdZYY4011lhjjTXWWGONNdZYY/rd0eQDJiGFmvK/9JR8SaZ0qUblr8p/e+SwxJWq WXr8XxeoQjUmovwvy6ZQg/T4X7BPq2bp8r9EbALImQByJoCcCSBnAsiZAHImgJwJIGcCyJkAcirf ISrfISaBvEkgbxLImwTyJoG8SSBvEsibBPImgbxJIG8SyKuS01XJ6ark9PK/dxzNwEx8FxdhFi7G JZiNObgUl4UZKupsFXW2ijpbRZ2tos5WTaepptNU02mq6TTVdJpqmlJNU6ppSjVNqaYp1TSlmqZU 05RqmlJNU/puu77bru+267vt+m67vtuu77ZH5Z93rMTDeARroiNU3iP034L+W9B/C/pvQf8t6L8F /beg/xb034L+W9B/C/pvQf8tqNZzVOs5qvWcqMdZthd9yGMXYvSjgN0YwCCGwt0q+wqVfYXKvkJl X6Gyr1DV56nq81T1ear6PFV9npk+a6bPmumzZvqsmT5rps+a6bNm+qyZPmumz5rps2b6rJk+a6bP mumzZvqsmT5rps+a6bNm+qyZPmumz5rps2b6rJk+a6bPmumzZvqsmT5rps+a6bNm+qyZPmumz5rp s2b6rJk+a6bPmumzZvps+V+1rvgcPo8v4Iu4N2R0ooxOlNGJMjpRRifK6EQZnSijE2V0ooxOlNGJ MjpRRifK6EQZnSijE2V0ooxOlNGJMjpRRifK6EQZnSijE2V0ooyzRJ2zxFpnibXOEmudJdY6S6x1 lqhzlqhzlqhzlqhzlqir+FOUqmjEJrwUpXSxtC6W1sXSidPL/42qx096PCdco5udq5udO97Nvh7i xAWYobu9qaslZoVYZztTZ5ups52ps810Fl+SvCw8lnw6PJusjw5IPqP7veQ83+ycviU6TJfL63LJ ZKvz/X91ukqd7oTxvzGZ9/ounefyKK3LpXW5tC6X1uXSulxal0vrcmldLq3LpXW5tC6XNknnTdJ5 k3TeJJ03SedN0nmTdN4knTdJ503SeZN03iSdN0nnJ9wdChOW4h7ci5/iPizDz3B/mKZzTtM5pzl3 1Tl31Tl31emiKV00pYumdNGULprSRVO6aEoXTemiKV00pYumdNGUObNgziyYMwvmzII5s2DOLJgz C+bMgjmzYM4smDML5syCObMwYSTEE4oYRQl7MYZ9eA1yQmeepzPP05mn68wZnXmO81/W+S/r/Jd1 /ss6/2Wd/7JOCTmnhJxTQt4pIaeDT6vcGQpOCjknhZxOPl0nn15pTZXWpKNP09HTTg25yjc8D6FQ FaECCSSjtE6fdqLIOVHknChyThQ5nT+t86edLHJOFrmqo7z3aBzvtbd7fiLUWqeMnMlgmskgXfU+ 3xeDpoNDnDpyJoRpJoS0k0fOySPn5JFz8sg5eeScPHImh+kmh+kmh+kmh+lV6miVOlqljlZdhssx N8wwTcwwTcw2Tcw2RUxzns2aJDImiUzVz8b/ItPUql/hN+N/lWlq1fMem0KdKSNTxUvn3mzVaDTV xJExcWRMHBkTR8ZZuM5ZuM5ZeK2z8FoTSMZ5eK3zcF31GVHKmbjOuaDgXFBwLig4FxScC9pNKSuc CwrOBQXTyhzTypzqfw1x9TdwfpjnfFCovsjXcqr6YlyC2ZjjmpfCvpwd2p0dCs4OBWeHggknZcJJ OUMUnCEK1T/x/hvG/6pgwdSTcp4oOE8UnCcKzhMFU9A8U1DKFHSEc0XBJDTPJJRytig4WxScLQrO FgVni4KzRcGENMeENMeENMeENKd6p2t341Wo9dVqvanpblPT3aamFaamFaaleaalOaalFaaleaal lLN+1lk/66yfddbPOutnnfWzzvpZZ/2ss37WWT/rrJ911s8662ed9bPO+lln/ayzftZZP2vqypi6 MqaujKkrY+rKmLoypq6MqStj6sqYujKmroypK2Pqypi6MqaujKkrY+rKmLoyE99vTR/Ah0PdxNPx Tdf+lucX4EJ822vTPX4HMzATl4S8CS1jQsuY0DITF/nMEq//wntXhrUTH/b1IxgJ2UlRNNUEl5lk b5MOCXWTDo1SqS+ErtQXcR6+Es412Z2b+ldfXxXi1DwswJ8nvcW+/iGuj9ImvrSJL23iS5v40ia+ tIkvbeJLm/jSJr60iS9t4kub+NImvrSJL23iS5v40ia+tIkvbeJLm/jSJr60iS9t4kub+NImvrSJ L23iS5v40ia+9P/HiS/9VxPfodHN4SMV50efrfi36AsV/x5dVfEf0acqvhV9pOKC6MuJc6KvJGZE 5yW/FD6R/Eo4K/lUWJGsD59N7ggvmA2nJFW45Kvh1mRv2JDsi45M5p23doVidEx08xvPRY+GzdH6 sNnVP7r/r8Ge5urvdvV3u/rHK2aEot7a7S5Oc05lXwqnu8uZ7jI3uTY8nVyH+jfi5B/Caj2uNfls eD75XLjZ3a9151KyO/S4++nuvsTdk+7+M3d/LpqY3BSWJ5usyUk+uTl8K7klrElmfGpraNMVXzan Phr+aG1/9M6v6p2bvPtu716Q3PzGG979oHd/Wh9d7RNX+sS943/b8WSrXaibH617fzrxWZ18RpiR uDhKJh4xJz8X/iOxISxNbI9OTYzoyFOiycmTw8+Ta6O0Ln2yHfzanTY4jyaTm501W8JvdOlKV3/D jjI69YL9nTq5/0yatLOeZJ9d5b2+K/RXfDmaENZElahCNSZiElKoQRq1OACTw9PRgTg9tEVn4Afh V9G1+CGuw/X4EX6Mn+AG3IibabgmNEdPheaKRGirSGICKlGFakzEJKRQg1ociINwMA7BFByKqTgM h+MIvBXH4G04FsfheJyAt+NEvAP/El6u+Bw+jy/gi1iIq3ENFmExvo8f4Fr8ENfhevwIt4RtFbfi NtyOO3An7sLdYVvifeFXiQ/iY/hc+F3ixyGX+EnIifIvcSUWZ6+JsV9xIhZj/426K4GPosjer6p6 ujozPSGEEEK4b9RVwWVR8YjreqwCoqt4cKsoq4IHAiKnx6qICAgKKMghqKu4iBfIIXiAigfIDcFw JEAChAlHSICEqf9XNZ2YkEAOWN1/z+/rqa6u43X1q6/eq+6p6QAdyxc54QyRix5xVElxLJwrjoe3 iDxli/xwujihkkQY8UrVtHzhDMtWV1tSScsJ51pR4S2WX9lWIJxuuSrJCiI+Gun6qQVWf2AA8AQw EHgSGAQMBoYAQ4FhwHDgLbXFmgnMAt4G3gHeBf4NvAe8D8wGPgD+A8wBPgTmAh8BHwOfAJ8CnwGf qxRrAbAQWAQsBr4AlgBLgS+Br4CvgW+AZcAaNddaC6wD1gMbgI3AJmAzkAxsAX4FUtRcX55aYAsA +mv71CI7Ft/VgEbAuUBL4M9qi30xvkepFHsCMAnHuE77bYRxPTaux8b12Lge+0PEzQU+Bj4B5gML EL8QWAQsBiC7DdntHxD+EfgJ4Z+BlcAqYAOwUW22k3EuHdgHHAQOAYeBbOAIkKtSZDRQBYgBqgIJ arOsCSQCtYDaQCu1RV4MPKbmyr7AU8DTwCvANGCGWi1n4ztXzXWaqRTnPLXFuQDfLfB9E9AB4bvU ZudenO8J3Ae8iPhJiH8deAOYDMwG8tTmKFIpUVXxjf4VhX4VlQjUVlv896pk/4NAb+Bh4FGgH4D+ 7kd/96O/+9Hf/ejvfvR3/8vAaGAMMBaAvP5xwHjgVeA1YAIwEZgEvA68AUwGpgBvAlMBXKN/OjAD eAuYCcxScwM3quRAW6Ad0B64CegA3AzcAgxWnweGAEOBYcBw4CngaeAZ4FngX8BzwPPAC8AI4EVg JPASMAp4GRgNjAHGAuOA8cCrwGvABGAiMAl4XX3unqfmRkepz6P9QEB9ThbGirlg/r1iPV0AXs6n 12iQmkyDgSHAUGAYcEwlw39Ohv+cDP85Gf5zMvznEPznEPznEPznEPznEPznEPznEPznEPznEPzn EPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPzn EPznEPznEPznEPznEPznEPznEPznEPznEPznEPznEPznkF6Fi30LOb9TmfBZM+GzZsJnzYTPmgk/ dBL80EnwO9fC71wLv3Mtn6UyzPuRkbeOdvBctQOj2SaMYpPFKqqH8XI7RrBR8OEmw4ebDB9uMny4 TPhwmfDhtP+UDP8pGf5TMnymEHymEHymEHymEHymEHymEHykyfCDJsNPmQyfZDJ8iMnwIULwETLh G4TgB2TCD8iU56pkeZ5ZjzMTtr+25ZNhZyfDtk6GLZwMGzgZ9m8I9m8I9m8I9m8I9m8I9m8I9m8I 9m8I9m8I9m8I9m8I9m8I9m8I9m8I9m8I9m8I9m8I9m8I9mom7NVM2Ksh2KiZTn+U/RTC7+pV01QI 9mYI9mZmVBz6051qEmzMSbAp18KmXOsOVRnuMGC4ygjGqR3B6kA8UA+oDzyN+JlqB3GMKh9gXIcd JxbSpWIRdRVLqZX4khLQvvPF17CkvqFmYiXdhLa+CX69DxbDlfDtY8U6ugjtvg2WQ13YOamITaNz YS/cBHuhqcig61Du195c9nmo6Ss1G+nHmzrn4tyDsCoWUTTiVuBolV6XsuRauuwBSip9PV3I0xK9 43LU2g7j4Q2QIRLTEqNlLmKvxmi5CKPlXrNG8T79b5SIrY2jK82cYg2kbQIZ9H8R7KbzkeICHK2i JFxhHM7VxbXqVd/uVD+LftQG8n9tXQF7jSPmexz9iNQYm2ATZuEoBUe9KYij4zj6npqRRUnkA2xA Ag4QBfiBAOACQSAaNXak6qITbLxuQG9c0yLYgV/CzvxKrbb6UZLVHxgAPAEMBJ4EBgGDgSHAUGAY MJyS4MsnwWdPgs+eBB89CT56EnzyJPjfSfC9k+BvJ5n/vwjCus1GTSm4it1iKe6k/jeTr9Q8WLf7 cO390CYLIdcXSIWrxbUHKZb9Qo3YamqBlumGdvib6IRUnamz6GbWmOssequv9KpEYoBKFROotZhI F6OeEO50E1gyc6xL6SKrDbVAa3WmushRF/W0wt3sR/VR035dv6kp6P2vyXeiC3J3Rfoe+L4b3/2g Yb+ozbCRM2EfHzP6s4Ec5BJk639CQep4pIxHyiikDCFFFsVTGlgUNhTtgt3UFzXpezpArYXdnYm7 XgWMu9qUtw53cD1yoUxtEftiVT58+Hz48PnwkfPhI+fDR86Hj5wP3zcfdXZUGfoXTyjxXPQUaUpb r7KpRrE6u4CzegB9cG39YImvUgchXRauIwSNq466jyDXctQbQL1Hy6w3gHpT9X+zoLRY1OtDiUdQ YiZKzEaJUSjtoHcV+ehnHRGr1wvsAku+B9AXZ/pRTeSMgsQ2cuYgZz5yBiFLWLcacuahV6TR9bQT 2AUcg2YfB/KAfOAE2KEjPJc7VQvRBWzRlbqLHvi+G9994Pv0hTwD1EwxBHoxgS6BPlyOFv8FNbYx 92aNetPUtk5tQJ+Lg5dz3NORiyyUbYUBRc18sXS97AR0BrpRMzkRmAVsx/EOIBWAnDILcdn4zoFs ev3HLEh2DNd8DJKdi+s+BsnOxXUn4ro1Yzi4Xj+uNV1spBijdYuR42vk2IkcicixEzkSkeMSpI6B zLuN5q1ReZD7KHLuNLnWmf8l6IT6OkOTu+G7O777gxVTqSEYLwsc4wcz1gQzVgXfLTb/qKPvXzJS CcRk4T50ROhO0zf0anjx4nFo1RMY73ZD7gzUuEeFjL5tR76dyOdH6Q5K5jiTTDWppzpI9wH3A4/j 7nfE/ewEuboB/aGZOnUatGQ3WjodMu2Bf7kXpezDOHkF1fDFqIO+TGC/Omj3BvoADwOPAP2BASg3 2vtPoE0oORklJ4vHcVX9wfmpuI9p0KKd6EHmasHDGWijPeon44vXgHx5kC8P8uV5V6/nlLeilK0o haOUcyFjDErJRSlhlKJXmndQwg79f0SQLw/y5UG+PMiXB/nyIF8e5Muj86kntaP7gPuBQXQNDQaG AEOBYXQNaqyCGv8EzvKhhW8BZ/nQyreAs95FS3+Mlv4Cevod9PQG6Gk78b56Bdf0I0aIphFpMG5p aTJgTVxKbaCjbawr1CZrGl1jTQdm0DW+GGrn247vTHzvBw7QNfY5QGugN7Wz+wAPA48AWj4HUuV4 esM9veHmXukW3KPSzWzEHMj9jpcq3ksVD7lDSHmRmYHYo9ZCM3qHv4EvuB++33b4evvh2223mod3 Qdd6h0OIzUJMltVcXYlSe4e3ihy0cx5y54MbTqiVlk/lwi88agVUNlKuRMrrTN6vcHY1YlYjxm/y hsRx1JeHVjmh1sPHDFtRZCNvGKnWw5cMI2USeKl3eDdqCcNLzYZkmeIYvvNQaz40M5IzH7WG4Z1m Q+JMy8G3H1IEEB8pKR9XcARa1xt+bS4xlJKFUsIoRaGEDFO3TQy5s5A7jNwKOTM8Gc7R7RQeCxlS kbsRcm9B7hxxHD1WS58PPT4BjQvDTlDqBGRJRWmNUNoWlJZjRal15qoCuM8uxcBT3ouST0Cm/+hR VHGUeBRypIgwceQ6irpTrCDCzVUDnSK8CinSUZ9uqWSkSEeZupWSUcYBtO5J9wt337tPyF3G/TFp zX1B2jLuB67xDO8D+LSC7Q+WOcvtjms8RXubM6W2M0VbcRRlVYd8CeS3ElFaLeSpDZuhDsJ1ca4e zjXEucY4boJzTXGuGcYDy4pHDbVwtj6+m+CeuFYcjuBDWDVQfyJqqIWadFl1EV8P8Q0Q3xjxTRCP cnAXdGpdcy0vha5JlxULuTjO7rLiEVMDSKC6kC8WKXehzLqQj0M+jly7rPo43wBoiPjGSNMEcU0R bqb/lRylpEBWfYXcqglZE8nnlaJzp0B+fYXcaoRzjXEukpvjeuOA6tC9eMicgHITcS21cPdro646 +rpwvh7O18f5hjjfGHFNcL4pzjfD9eEqcG+qo9x4xNYAEtQGyBBG66RatXEv6+Ca6yJNPaSpj/MN gIZI0whpGiNNU6RphpFN3yfXtGsCxUEO3WJHIUcc5AhADte0bUMcNzYteBQyxEGGgL4rJMy1J3rt HJFet54w1x3JkeVJzalKZXUCvTaE9jtJL9DbL6RgRXUDuVqQPJV+4GwTqna2dASl/QlXXUk9Qe7m VPVMdQWlXKqv6OzoC+7ED+Y+VkpnzNgQrKjeGFZvLnLCe8CkPcA4tcFq7cXxcBZY7VqRH94L9ukJ VqsPVmtj+cJ7wKg9wEa1wWrtrahwFljtWisQ3gtm6glWqw9Wa2PFhXPQIuejRc5Bi5xjJeC4pvoT WiQaUrVEqzRFqzSx6iK+HtLVR5oGQEMcN0K6xkjXBOmaIl0zaE0UPDcXPleS0P/r8w1Vg7UbB0u3 MayKS2ArLIe1V8X8t9BC1o0uYz3oOnY3vcTuwfe98Nw7qinidvgid6iFsDymmH+qO+c0qZabVPo/ kDaa2IKjuYVHHJ78EvalmmtC+t/tUhGqAi/5fCJqA5/0XPorPi2oLd1KLel2ugOxd8GWu5z+SaPo RhpN79MjtJCW4OhLfF6hH2gDjaNN+EyjFHgn0ykdJb7HarFatIbVZefTWtaOtac01oHdRrtYJ9aF 9rHurDuF2N2sJ2Wx3uxhOsz6s0mUw97AJ5FNwacWm4pPbfYee5/VYV+yVaweb8EvYhfyVvxidhFv w9uw1vxKnsQu5n/j17BL+XX8OnYZ/ztvyy7n7Xl7dhW/hd/K/spv53eya3hn3pldz7vz7uzvvCe/ j93Ae/FerC1/gD/M2vG+fAD7Bx/IX2B38Bf5y6wXH8MnsN58En+d9eOz+EdsAP+EL2f/4t/xDWwi 38TT2Lt8D9/HPuFZ/ACbxw/xXPY5P8bz2BKuBLGvBBeCfSOkCLLlooqIZT+JOBHHfhHxIpGtFg1E Q7ZBNBZN2CbRTJzDksWfxPksRVwoLmTbREtxEdsuWonWLFW0EZexXeIKcSVLF1eJq9gecbW4mu0V 14hr2D7RXnRgmeI2cSfLEp3EvSxb9BZ9WFj0FU9wEkPEEG6LYWIYl2KCmMgdMUfM4X7xqfiUB8R8 MZ+7YoH4hgfFSrGRJ4hUsY83FDlC8T9ZPiuat7birOb8KusK6wre0epnvcBvt0Zan/EHrc+tJXyC 9bO1ir9prbF28elWhqX4pz6/z89/8rk+l//si/HF8pW+tb7NfLXvV992vsmX5kvjKb7dvt18qy/D t4dv8+3zHeA7fId8h3i674gvl2f4jvmO8X2+PF8ez/SdsH18vy3taJ5jx9gxPGzH2tW5shPsukLY Dew/C7/9F/svoo59sX29qGt3sDuKC+2u9jOitf0v+3nRxX7Rfkl0t8fYY8Q99iv2OHGv/Zr9mrjP nmhPEffb0+3porc9054p+thv22+Lh+3Z9ifiEXuevVgMtJfaX4vh9rf2d+JZe4W9Xjxnb7Q3iXF2 sp0sXrW32tvEa3a6vVdMtA/a+WKyJMnFu1LK+uJ92VS2EsvkpfIKsVZeJa8Sm+Tf5PVis7xR3iS2 ylvkLSJN3iZvEzvl7fJ2sUt2kt3Fbnmv7Cky5QPyARGSD8mBIksOksPECfmUfNri8nn5gmXJkfIl y5Zj5CTLkW/IN6xYOUVOsarJqXKaFSdnyVlWvJwtF1k15DdyhdVcrpYbrAvlFnnI+ovMlset9jJf Kus2p6nT1LrTae6ca93lXOBcaHVxWjmtrG7OpU4bq7tzuXOFdbdzlXOVda/zd+dGq6fTzmln9XJu cjpY/3RudTpaDzp3OXdZfZx7nV7Ww84jzmPW484gZ5A1wBnqDLWecJ5ynrEGOi84L1qDnZecUdYw Z4wzxnrKGeeMs552JjiTrWecd51/WyOc2c5sa6Qzx5ljveQccg5bo5wjzhFrtHPUOWqNiQLxWWOj rCjLGhclo/zW+Cg3qoY1MapmVE1rZlStqLrWrKj6UfWtf/tv9Xey3vP38PewPvL39Pe0Pvb/0/+A 9Yn/If9D1mf+Pv6HrXn+R/2PWp/7B/gHWAv8g/yDrIX+If7h1iL/C/4PrKX+L/3fW7v86/2/WiH/ Vv8uK8d/LJBohQONAmN99QPjAjN8owPzAkt8UwOrAod877rSTfD96J7nXutLce90/+k76j7kPmpH uX3dfnYVd4A70I51B7mD7OruEPc5O94d4Y6267tj3bF2M3ec+6rd3J3gTrfPc99y37Jbu7PcD+yL 3Q/dT+2r3PnuIvs69wv3C7utu9Rdardzv3K/t9u7P7lr7I7uOned3cXd4G6yu7rJ7ja7h7vDPWDf 7x52j9oD3ONuvj3EDQfJHh7kQW4/E7SCtv1s0AkG7eeDMcF4e1QwIZhgjw8mBmvbrwbrBhvbE4NN g03tqcHhweH2tODTwefs6cERwZftt4OvBMfbs4OvBSfYc4KvB1+35wYnByfbHwXfDM6wPw7ODL5r z4/m0dH24ujY6Br2iuha0XXsVdG50cftNcT9sN+J3Kur3kzNqT6dpU0tVGlqN7VQGQhvKTVFWE1W H+KTpUbi6GbVGXmWI5Thnc9Qe7Hf4R3llMivz+5V2fj8dk6WUs9h4NUy5R0MfFEsZitqiNe1nHKD 54V0m1Uewi5G8i4UxHFacRkLrqaUOn9S21VI/YwSUnG16WXJWI7NQakTvNJ3qky1XO3yjg6VqH0f kKK2qbXqqLqRotB251KDIufDZVWmjuDeZaOE3yRH+8NiiZx9W71NLlB4D0/KvR/YpZJRxlYc+mBn NaUrEapnzi5TK9UG6A90B3576fW/r95SU/E9AkhSF6j+qh9CRdqx4OoRyiyRO6y+VenQoG/Vj5AD 90G3XvFchWl/KqMpCH4qUbQJjfZiQij75wLdLKoVXkw2rvwQ2n6LOgx7vwqiWuEuFNau9pk7tK8g dYn8mWoP+liooMX1zKj5/rVomrLk9tIlFzt6rNjR9+UrA1tLk97TNLUR989RG8uoObdI325Jl5SR +gP1b92j1bfllql4/t1aO7TOljizvhy5cWXqeROad3J/VveUIz90RH1qeGurvm8V3dR7hk3fQ7uW 3JxylZClFhrWLKdelFLCofJrVSm5PYZVayqVe67Zb9TMcda3P5ej/t2RsUzlQY8OV7gG97RnmwH/ MLUUjHg7Ih/vfL1S8pyDTz18zikm5Tve96rI5zT5W5aa32tdaMkRsNORUwkM/tyvDoLBtps+pbX6 qIkfb07XVV+qJWqdHtFPkT+/SPglqgn+v4M66B7ixaVgbFhUkosL8+QVCY/FyFOFbqAeCM/x4tLQ eqtPPaoW1G80+nXkjwL79PWYXMd/rD4koeafMv/JWuiD9dQL8S97579X36H9f/COSvL38SLhkchd k9qTtoSSvLgv1AKU8J9T1r+z9Pgw7pjmR3WLukn1VB281NNK5H8GLPa2+o/6Ra0rEs2pKz1LoxAa TWP0b2boA2juHJoP63ARLaGLzKxCa/qGNtDFtJl2UVtKZ4zuZD1YD3ocHv0/qJ/25WmA9uLpCf4g 70NPwh/fREP5Fp5Gw3gGz6AX+F6+j0Zo35xG8hyeS6N4Hs+j0do3pzHaN6dX4JsHaLyoJ+rRJNFF dKXXRQ9xN0225lnzSHu1iqb6Yn2x9JP9mf0Z/Wx/YS+hlfYW+1f6xVa2ojXap6O12qejTfJmeQul aJ+OtsGnu4O2a5+OUrVPRxnap6O92qejfdqno2Pap6MwfLqXGMGbe4XZcrycxKK0T8eqaJ+OxWif jlWVM+UsVk37dKy69ulYU/h0h9j58OYU6+AIx8c6O47jZ90c14lmdztVnWqsp1PdqcF6OYlObfag U9epz/o4jZwm7FHnSieJPQ6v7T7WH97ZCDYQ3tlLbJD2v9hg7ROxIdonYkMDgwNj2dPa02ET3Rg3 gS1yP3A/YMvcNPcAW659DbZW+xpss/Y12K/a12DbtK/Btmtfg6VpX4Pt0b4GO6B9DXZQ+xosW/sa LE/7ESxf+xHshPYjOI+Oig5wGV09ugb3Rx+NPs71M4WNRmOY0RgOjZkAj2IivQGdnkyzEPM2PpLe ofcxSs2GPtlGn2zo02L0ui+gVX6jVX5o1QrE/0DrKEDr8eHQsg2wqjfTr7CuUigVfSwNOteA0ukg evwhfBrSYcqlRnQUn8Z0jE5QEwpDI6sajaxjNFIYjXSNRrrQyN4Uw/tAL12jl7HQyxSK51v5VqrG t/EdVIOn8lRK4GnQ19pGX2sZfU0w+lrd6Gui0ddqXHFF1QTMf4qD1nLssVF16K5EGDefaooo6HGc 0eNa0OMu1FR0hTY3gzb3QPhu6HQzo9N1oNMpxKyt1i7i1m4rnWwrwwpRwMqysqmudcTKoSpWrpVP 9awT0P4mRvsbGO2vY7S/jtH+Okb760D7/0Zx8hp5DQXktfJasuR16A8+9IcbEdNWtkVMO9mOpGwv 25Mjb0I/aYR+cjPy3oLeEmV6S0DPgFBQ3oE+E40+05kayC6yK1WR3WQ3aiK7oxdVNb2oqulFDL3o IeTqLR9FmsdkX8Q8Lh8nLvvJ/qhlgByAkp9ATwugpw1GriFyCOKHyqFIPwx9L2j6HtPzKUgzQr6I ekfKl3B2jByDmLFyLHK9Il9BmvFyAmImyomQZJKchBj0T/Lr/olypsqpyDVNTkP8TDkT5cySs5By tpyNmA/kHOT9UH6IdpgrP0XLfCYXQM6FciHaZJFcBKm+kcsh7bdyBcpcLaGZcr2ETsqNMhmlbZHb qL7cLtPQJjtlBuraI/dSQ7lPZqIl98sQNZZZMgs1HpCHIHO2zEbKI/IIzubIHMTnylxIclQeQ/nH 5XGUnCfzUHK+zKdq8oQ8gdrDMoy8Sir9/6qOj+poNsEebII92AR7sAn2YBPswSbYg02wB5tgDzYh BjZ5AfsRzgjimlPI0pxCTHMKueCUIdgP9Q+nGM0sJMAsG8gNbAxsomBgc+AQxWiWIaFZhmqCZdKo mrvT3Ulx7i53FwXd3e5uinfT3XSczXAzKMHd4+6h2u5edz/CITeE9FluFtIccA8gzWH3MMLZ7hFK dHPcHKTJdY8izXH3OM7mufkUcMOuooSgdq2raf7C3gpa2PuCNsWCxRyqEYwK+ql6MBAMIKUbDFJt 8Fo1xMQF4ylRsxvFg90Ssa8VrI00dYP1KC5YP1gf5TQINkS4UbAR0jcONkYY3Id4cB9i3gxORS3T gtORa0ZwBkqeGZyFMt8OvkvVNRuS0GxIMZoNKQaM9ZHHhmPxEYYNfWDDSQhPBg8Kw4M2WPADhOfQ 59gvIGgb2PBLhL8GBwpaDh4U4MH1YMwN4Fdh5u8dw4PC8GB1w4Pxhgf9hgdrGB5MMDxY0/BgouFB l1VhVSjIOrFO2PdmfbB/hPXFvh/rh/1INpKCYMlbiBuWjAJL9sRes2TAsGSUYclow4lxPJNnUlXD g7GGB6vxE/wEVTEMGCMsYVEsuM9B2C/8VFV0Ep2otuhs3mTT3FfHcF890U10Q3x383ab5sE6hgfr iXvEvVSrkAfTSYABs8kB9+WT37BeomG9eD1ri/75V/lX9N6r5dUkDMc58npwnAWOa4uwZjdh2M02 7JYgO8gOiNHsJuSt8lbsb5MdkVJznGXYLd6wm9+wWyLYrQe58h55D/b3ynuR/j55H/a9ZC/sNdM5 hun8HtP1k/0Q0x9MZxuOc+ST8knkHSQHIX0B0w1HOMJxz8hnEdZM5ximE4bp/HKUHIVcL8vRiNGs 5xjWcz3WGyfHIV5zn2O4L9GwnjCsZ8k3wXrCY73pcjrCM+QMMNpb8i2k1zwoDA8mFuFBYXjQAQ8u RDjCfYvlVwh/I3/BXnOfA+5LRlizXnXDevGG9fyG9WoY1kswrFfTsF6iYT1XHpaHkUtzX7zhvgTD fYke9+WD44ThONdhDiMRYSv/QP+TFOUf7B+M/VD/UAr4h4ObAv6n/U8j5jn/cxRleIoHxgVeJ24Y J87dD66JcQ+6hyjW8EuMYZY4MEsuwkfdY1QFnBJGP9ecUjUogoKqgE0kRRseiTU8EgcGiUVYM0i1 YI1gDaTR3BEXrBOsg/h6Hnc0QAmaO2INd8QY7qhquCMW3PEmypwWnIZcM4MzkX4WWCPWsAYnftEB PfN68e6/taYb6c5T2fn/PzaVofZoeEfbS/O79DyPmeuraNk79QyX8by/NMdbCuo0+1887zNT+5/G F01WqSq9+IxO2fUWzNCpRysu4dndVFt4nvr7lL53iRwZ8LS/q/y8TGE5mScfqYNm78XDV8xGy6aq EFA4s1fEE40rkjsZqTaRnveogZA3w1jgXf9Om79QmqL1unSXidtX2uyC2ltybk4dUjvUZpwp8RSi slvBLHnxI91/PK0uMl8A2UVhOPNUd1ltKzmreba20p/glJlrlpphvvPNbPj3Gnp+SL2H0AovTYFm 6R58RK0qiK9QPTuNjqb+dqxnwVRKkRQvm/kgPVe+zYR2QpqiDOW1b3nvr5m1Ti07XcU3aFqRclWO ygeO67kudaJYutM9l/of237nPl+OTU05g8w3l1JeKjWHDtY9g1JPvzUnw62aTw2nlrqBG8r9DPHM x4qTyismVdG+V878H6slaq73fCBOTVNLTGyaHt2Ljt6Vsh82gRu3G/sh3dgmhs30mKS243u2lypk nrf9ACzHJ734zLVhsppUMDe7DGPBCrUamILYG9Va9aOJXxexIswT7bsqLmkJyfcUOzJjqPqoSMyD aqbqo17Us/yqb2HsZYj7XPe7kk8dST9zLfksdK/6EteSfPZ6aoE+6HEMDFZgF64g7/lsURnAy4XP RvQzljJK/vlsyVjZDa0UNN+v6OfNJc72U8uKpY18p2B0S9MaUon61mutN/aWaScdwvi23Ws17NUD aqW537kkShnDgtSiRJkh9IP93tMlAeYoeOqUGzl75uPbb8+hiz+vLLBStO1lxu2d+IRK2J7bjO1Z Sm9Hbz7L3FXadhKfrS1xPv/kGC/+sdLjqSLP0Su8qfsrmCHyjsUI9Zz5zjIM8IkGQv9W8yIhc67A PjPPO3GnFlRCuo/V52DMz7yjZep90u8HzddhAMwJFlsGliiwgrPAvj96PBF5fhZdoszv1GdqqVdm nD7y4ouxg1IVl9bkQy9VmwuPCnyXHTpU4FdGLHHDaCu0fkTeEfH6zyHDyF3VzeZoKemneY8CTyA0 Vk3CWPeEV0qRd1vQAovUoEpIe7caqt5SfRD6Gr36LdXL8MPLGI3eQjsvVVPUPzG2ZulngObKFqo5 anqkZm/USFRfn1RmutoArzLSc/9SGPLsTnUsgvJbzMXKzjb9vfCtoOKjlBmnCz1fY/luN+89FH3j 4oLib6z8Xlvxp7jmDab9ZUtirqjE+1e/x1bck9WtCh0+XBZ/mrtz1jzdimxF7Q/0Bu1lbcT3KZ50 F6bce+byqjfVEPUvNdGEV0HfZ+g3ZbxxKGIvHlGfAkvOrB5TUovImyxnVEaa2o2R0IyPuKe7oYeF NnfkrqsDsDkOlGYBVriuStjcRXL/GLmrkEXz4M/e0Tav/3hS/zH9ubRN3a/uU4vVPOLmaKgaALbu EbEI1Hx1FEej1GPqUtUIPNpKPaEeOIO6IvZj/TOS1+OkiE9b+L7hjOJnz+amZp2FMrT2boiwOuzb EnffnE9Va34bhf/YDdJsQZ8zc57QYe0pFnoqEUsXZ78DTvGu6u+9Qd7RRXsu7KuFf6Q8p97Q2/pp 2ynypqt6HNbROvS+yLmlZr9FLVCd1YsIjVG/RuIqWdd3Zy5vBWvMLvqe1//uVmjjHjrztytLe9f9 bG4R6xD29y6MemdhxqKsd5RPm7ecGqU+NHP7+ypfU5Gt5lkppVwbbKEztlzVK2dDkjLq8JgO1u0Z z8ufpbtUVi1psGz/yz3l7G2werLPWsvEnoEcZ6O//47PIyqjjbB7UiM5vV92FMyLrDTPGVaeNvPD Xtq5Fa/3994q8xuIEmWc8mnIafKY2Xo9UxTxhCMzOoXPgv2n84/N3G5N6kN2xes1+SvxKy+VbsaO 335LVjAnV17fLkDXV7zWP3SLr2zGij95Iv1Wg34uXejZq0Vmvx/8XObTiP+1DXb/kVP/ZqJIuqP/ fVnKt5WPISs7qpf6W6ky6zJvEPz220HzxKJQs/ylZipIq+eqalNn9Lk/YCtuu0dYA95TGTxrnsT8 AfN96uBZLGsHeTPKpf7i6BzzKyf9BH1VKWfLKlv/jmpHQc6CkJnh3+HFFNR5manrJLmKHL3wW5kF sujfa5WQSv8qq6V+SlMZr11NUe+ohYW/A/NC2iLw5jRXFcrRsoS871S8vmL5K/GmkFpjnkr8UHhs 3gGCvWmX+0lfOX69d4q6S/1tchl5dptZKz2SGy4wR8vQ9yLM4D+dfWlGlCp0Zfl+r1lK/sq8/7BW /97SICdybPberPnp2cG7ltrF3zeCfh1Uqw2mUA3YpHu8p0nbI33a6NqDFZe0jOuIPGEr4q2rHuoJ 9a6aatYNKHynR7VVH1ew5GW/j8WsZTx1PSpc2lPlyBPFk+IOlv0Up7KbeUfGY2Z1CPbEIdhHm1Ty b0ykMhGnnxlfom43x59AAzaormq5PlZL1avqWz1jbs6NL1Z2SkF8hSTqoPqop9WN3pEJQQN7mfA7 aqbqCz2YAmttIUZenWKe+kx96o3aenY+nlqYZ84DVW8TF3kfcSrs6jf1/dCrJBS+BVRsLkgdK/g1 f4XkfV29B1/tDe9opal7iuH5laYN9NPXuSpbfWUSRH61771h4GnxXype6x+1/Vd+jV2ylh0FjBV5 7vxHbZV5ToU7vZ+KzDoUrpBQnrGnGun3d2414drUCr5nfZN3F6yOXWY0qUV/VuvRQ/UnRW1Vl6K/ 9CJXRcZ1z09F74z4VDW844+9JxWcCn8xbeI/OM11mHcr1CCMc94MpPqr6g60VfdTNRUZgwvW0BgK XKsuUx2V98sG9b361bwtoXvsXoxJOzz/9TxqbkbO80yq089ulC7XDDUT+/cKjxdqX67YmxW3eYHO 9A+6hC4y68Q0MWeKXrs/vEYFwrlmpFysHlKf6DFMDVPP6hBKHVms2sg7YA9VQt7e6hFc/yPmwEGo t+HNZ81IvRr3Mj0c+SX9fLMqSMFmWlY97pVRDh+v1Lr3lJ2mRJ5M80aAthOMNhltXoZjy5x2T2vv 6FxV6HJIz2ltGevYdfLWsXuGbmCcVaeeZnW6gWZ1uhFmdbqRrBPrSmPZA+wBetWsS/ca689G0iQ2 ik2kOXp1OlqoV6ejRXp1OlqsV6ejL9hXbBUt5S14S1rJW/HW9ItenY7W8iSeROv06nS0nt/A29JG 3pc/Tsl8IH+SfuVj+XjaymfxWZTK3+VzKI3P4/NpH1/AF9B+vpgvoRBfxpfTQb6Cr6DD/Ge+krL5 L3w15fC1fC0d5Rv4BjomXBGk4yJGxFK+XmGOlFlhjswKcz7RWDRm0qww55hV5QKitWjNgmZVuWiz qlyMWVUu1qwnV010Ep1ZnOgmurN4/Vs5lqBXfWOJetU3doE131rCOulV39g9eqU3dp9e6Y3d74vx VWW9fHG+muwBvd4be8T3q28HG6DXe2ND9HpvbKhe740N0+u9saf0em/sed8RXx57Qa/xxkbrNd7Y RL3GG5um13hj0/Uab2yWXuONzdZrvLEleo03tlSv8cZ+sbvaz7P/o+z8w6K67nW/Zs/Mnj2w+SES A4hECUFEQhAJEgSDhBBjLKHEGI81zADDDIFhGOYXMDPs+QWjsdZYaw211lhjPYZYY4211no9Hmut x3g9HGONtcZQj8dY6/Fa6zHWWnve9R1CPX2e+zz3xme9rOe71157ZoDv+rx/8OYTnu4mqHi6m6Dh 6W6Clqe7CTqe7iZI4hbxXSGR57oJKTzXTZjIc92ETJ7rJjzOc92E6eK/iOeEGTzRTXiGJ7oJ5eLn 4u+FCp7oJszniW7CV3iim1DPE92Edp7oJvTxv48TFEmQBCEgiZJOCErxUrwQlpKkZCEipUqpwqCU JqULUWmKNEVYKU2TsoU3eeKa8HWeuCas5olrwlvSLGmW8E2euyas47lrwrd47prwbalKmi+8zXPX hO/w3DVhE89dE77Hc9eEd3jumrBVMksW4V2euyb8QHJJLmEHT18T3uPpa8IwT18T3pfelN4Udkmr pdXCB9Jb0lphN09fE/bw9DXhQ56+JvyUp68JP5M+lA4JB6XD0sfCcems9IlwQfq19BvhovSp9Lnw W+l30h+F6zyVTfiCp7IJd6W/6lXCn3gqm3Cfp7IJf+GpbGqVPl2fpU7geWzqifpsfZ46VT9TX6ie rC/WF6sf0z+tf1o9VT9HP1c9TV+pr1bn6mv0NeoCfa1+gfpJ/UL9S+oi/Vf0L6uL9a/pl6qf1tv0 DvWcuKlxOeoKnu6mns/T3dQv8rQ29UKe1qa287Q2dR9Pa1OHeFqb+s34xfEt6vf5X+2pf8bT2tQ/ l3Vykvokz2lT/0r+mtymvslz2tQPeE6bRsNz2jQ6ntOmieM5bZp4ntOmeYTntGkyeU6bZgrPadNM 5TltmpnyNvl9TQHPadOU8Jw2TTnPadM8y3PaNFU8p00zn+e0aV7kOW2aep7Tpvkqz2nTLJZ/K1/S LOMpa5rlPGVN8zpPWdM085Q1TRtPWdN08JQ1TWeikChpbIlyYqLGnZiSmKrp5clqGl/iF4lfaJQk lqTSBJiguoSulwjHl8SSmYpNwD81S8E5rGFpOLu1ONWfQD0X/3RsOk5BiRWgS+rRD+cyGf2Q/38e 5tH/AYN3zETqmEnomEtw12v4NwF983Xs2MhaWBUzoYfORw91gByc+FfNXKyXPcL68G8S8zIFTw6g w6ahw8osXZWgSmQZ9BfCk1XJ6LlPoudORyVPlceKVDNU+ajPVM3EvAC9OJ168Sz04peh9ejIz1Ne aLrqdfTlYurLxdSXZ6Mv+1HvV61gJaqVqpXY80106sno1G+xUtVa1bfZHNUGdO1Z1LVnUdeeRV27 CF37PcyH0buL0Lt/gfPgmOoYm6v6peojVqE6iW5eSd1cQDcvgT6Nni5ST0+mni5QT0+mnp5KPf05 6ulPUU8vo56eiZ7+HntMGBaG2RThfeGHbJqwC10+m7p8NnX5qejyB6H/C70+i3p9DvX6Kej1/xt6 Ch1/Kjr+CPTf0PezqO9nUd9/HH1fZk+oE9D9c6n751H3n47un8by1enqdDZTnaHOYDX8JMAcJwGb gZNgOjRPPQN34TxgBfw8wF3l6nLoXPVcXK1UV0LnqedhDc4GKM4GVPjfWr9Af2u9gP6++gX6++oF 9DfVtTgnAmyeJqhZwVQ4LdayJM03NRvYM5q3NUNsouY7ms2sXPOO5vvsUc1WzQ9ZumaX5scsAyfK T1gxTxNlJfxcYRX8XGEyP1egydpkNl87QTuBzeKnCyvG6XKGqbW/0v6KTdWe1Z5lSdpPtJ8wjfac 9tdMi1PnAiqfaj9F5aL2ItNpP9N+xiTtqHaUPaL9rfa3LJ6fSSyBn0lYeVV7lU3Q/k77O5aCk+n3 TKW9rv1PPPGG9v+widqb2pvsUX5W4Yn/pf0vlqa9o73DKrVfaL/Aa7urvYvX8yftnzC/p72H+Z+1 f2bztH/R/gU7PxAFNlFUixo2T9SKWqbCCadjOCxEiSWIejGOJYnxYjxTi7IoszQxQUxglWKimIg1 OAX5/9VdnIh7U8VHcG+amI71GeJkliJmilOwc5aYxXgC6jRotpiNHR4XH8f6HDEH658Q87B+hjiD PSrmi/mozxRnMo1YIBawRPFJsRD7PyU+hXuLxCLsNkuchTXFYjHunS3OZjI/cfGsOeIc1MvEcqyc K87FDhViFdOK88XnsbJWrGU68QXxBbzml8Wv4n01iK9i/9dFI57eJDbjKS2iGftYxA5WJVrFLjZf tIsuPNEteli12COie4h9opdNEn2iD6/WLyp4LwExiH1CYgg7hMUwdoiIERYvDogDeMqgOIg1UTGK p4AA2GROAKwIBPBNViKuE9ex2ZwDWDo44G1cHRKHWIb4HRF9QPyu+F1WIW4SN+HT3iJugX5f3MqK eQYs1oMVsMP74vvQnSJ+SsVd4i7c+4G4mz0v/kj8EXbeI36Iq/vEfbj3J+JPUN8vHsDKn4kHsfKf xMO4+s/iEVYKwjiG+i/FX7JCcMa/YP0J8QQqH4kfYeVJ8V+xckQcwev5N/E01nwsfoxXeEb8FV7z WfEse1L8RPyEzRHPiedwLxgFd10UL2Lnz8TPcNfn4ufY7ap4Det/L/4e6/8g/hfW3BHv4NP4QvwC r+2ueJ+lc45hs8ExCZgn6iawEl2KbiKbrEvVPcpKdWm6TDZHN0U3lc0C5UxnFbo83Qz2oi5fN5PN 1RXoClB5UvcUq9QV6YqwwyzdLKws1hVjzWzdbFwt0cE7go2eYU/rynXleNZc3Vysr9BV4GqlrhLP 4pkCKs5MrJgzExTMBAUzQcFMUDATFMwEBTNBwUwsgzMTm8yZCQpmYk9yZsIczMQqODOxdJ5Vywql +dJ83AVyQgXkhDUgJyjIiZVycmJzQE5wApJFsrBK8FMXS5LsUjfWgKJwLygKdVAUVgalIPYJSSHM w1IYdRAVXg+ICuvfkt5iJdJaaS3uAlex2eCqDai8LeGnThqSvov5P0r/iGftkHawFzlpoQLSYnGc tKAgLShICwrSgv5O+gN7Vrol3cJT/ij9EfuAulgRpy7M/yr9lf+/t/SMPa9X6VUsnRMYmwwC00El vcSe1uM/VqSP08dhLusToUl6nL/6ZH0yK9VP0KegMlE/kVXoU/WpbLb+Ef0jrFI/Sf8o6un6dFai z9BnsCf1k/WTMc/UZ+IpU/RTcDVLn4UK2A5zsB1eCdgOCraDgu2gYDso2A4KtoOC7aBgOyjYDgq2 g4LtWBxnO/Ys2O4Vlhy3OG4xE+NejXsV8yVxSzB/Le41zJfGLWOpnPxQWRG3jQlxP4jbiTn4D3Pw H9aA/7DmT/EqJsQL8RnsOU6BrCyW3cApkAmcAqGgQOjX5K+xKfJyeTmbKr8uv84myI1yI3tMNsgG 9rhslI0sW26Sm5habpZbMTfLZqy3yBasaZPbsKZD7sDcKneyHNkm27CmS7ZjjUN24KpTdrEskGUP 6r1yL+rgS6hf9kP7ZYVlygE5yKbJITmMlRE5gpUD8iCeuFL+Oiqr5TXYGQyKp6yT10G/Ja/Hmg3y 23jNQ/IQ9vmOvBHz78rfxfpN8ibMvyd/D3tuljfj6jvyO2y6vEXewmZwcmV5INdtbKb8A/kHrEbe Lr+H+bA8jDXvy+/j6gfyB9Dd8o9YgbxH3oOrH8p7cfUn8n6WL/9UPoDKz+SfoQLehYJ3of8sH2FP yD+Xj2LNL+RjLFf+pfxLrDwuH8dTTsr/isqIfBp7goax/1n5LPQT+RzWnJd/g6sX5AvY51P5Iuaf yZ+xElDyb7HbJfkSm85ZmWWBlcMsMyGSMMCyEwYT8CmBm1eygoQ3E/BZJaxOWM0eS/hGwjdQ+WbC OjYz4VsJ32I1nKdRAU+zAs7TLJXzNBM4T0PB01DwNEvlPM2KQXZVxNO1xNMCkXSMm78kZs7HicTH iewf8C+RyHgBkfFCIuMUIuNFRMaTiIwfJTJOIzJOfyi/R0v5PRLl92gpv0dL+T1xlN+jpfweLeX3 JFB+j5bye7SU36Ol/J4kyu/RUn5PEuX3aCm/50XK73mJ8nsmUn7PVyi/p47ye16m/J56yu/JAKnH g5sTVAnE6OnsaVWGKgMMzUm9DKT+MisnFn9F9arqH1DnLD5XZVaZQdhulRvqUXnBzX4Q+RwQ+UpW CRZ/E/Ovq76O9ZzI54DI32ZVYPFNbD4ofC/0x6ofs2rVPtU/4Sqn8NeIwp8jCq8hCn8eFF7E1ETh 6of4Ww3+fo74+0Xw90tE4TxhSEMJQxMoYWgCJQw9QglDE4jRv0qM/ozwprCKzePJ/mzxGKlzLp8p fCB8wGYI+8HljxORP0FEPl34SPgI/M1ZfJpwWjiN+q/A39MotWiK8GvhUxD5Z8JnUJ5gVECpbvnC ZeE/UPlc+BzKs92yKNkoR/hP4QbmPN8oV/iDcAtznnKUJ/xZuI85zzp6THgg/JVlUeJRtlqlFjDn uUe5aq1aizlPP8qm9KMcdbw6HpUk0H8hcX8xcX8JcX+DerI6E3VO/4Xqx0H/T6lzQf+FRP9F6nx1 PuYF6gLoLPVsNhtOYA7mZeoy9qT6GfiBQvIDs9QV8AOF6mfVz2J/7gcKyQm8Sk5gCTmBV8kJLCEP UAv638ASwf2bWQoRfxoR/2Qi/jLNPhD/XBD/UVap+YXmJKsm7q95KJNJS5lMSZTJNJEymerJCSwk JzCf8pleIj9QDj/wMRPJA+i0v4YHEMkD6MgDJBL964j+07SXtZdB+Ve0n6PCuV8k4n+UiH8hEX8K EX8aEX+69rb2NpQzfS0xvY6YPoWYvpaYXhBFML2OaF5HNJ9O1F5LvK4jUk8hUk8nOq8lLtcRl6cR l9eCxeF7xUIQuUgsnkIsXjtG4SViCdaXiqVYz1m8lig8xtw64mwdsfUCYuuFxNYpxNaLiK0nEVs/ SmydRmydTvScLq4WV4MpvyF+AzTJ6bmciLlC3CBuQJ0T89NEzPPFzeJmcCRn5VJxK1i5glh5MrFy pbhdHAbHvw9KnkyU/ArxcaW4V9yLuzgllxIlvwJK3o97fwpWnkysXEasXCn+XDyKHX4h/gLrOSuX EiVPJkouI0quJEquEU+DkiuIkucTJZcSJVcSJVcRJT9PlPy0+Kn4Ka5yPo6R8dPidfEmKpyPy4iP y4mPXxEfiA9AqJyMK4iMK0HGj2LOmbiKmHi+bpruCVZNZFxDZPwakfFzxMHziYNfIw6uIQ6erJuj mwPlBPw8EXCN7lnds9iTJ4olUZaYlrLEkihFLIlSxLSUIhZHKWJ1lCKmpRQxra5B14Cn8ywxLWWJ JVGK2EuUIjaRUsTqKUUsg1LEMihFTEspYlpKEdNSilgSpYhNfChFLIlSxOIoRSyJUsQyKEVMSyli SZQipn0oRUxLKWJJlCKmpRSxiZQilkEpYlpKEUuiFLGMh1LEtJQilkQpYvWUIqal/DDtQ/lhWsoP S6D8sCTKD9NSflj9Q/lhWsoPS6L8MC3lhyVRfpiW8sO0lB+WRPlhWsoPe5Hyw16i/LCJlB/2FcoP q6P8sJcpP6ye8sMyKD9MS/lhL1F+WB3lh9U/lB+mpfywDMoP08LDTGTlcCxPsPnkT6ql6dJ0eIM8 KQ+sP1OaycqkAulJ+I1CqRD1IqlozLeUSsXSbPY8uZdSqVQqg3IPUyPNleZiH+5hqqVa6QXoAukl 7LZI+grW1El17GnpZTiZSqleaoBDeE16DVe5n6mSDJIBr6dZasZdsSRG7nBq4HDa8SzucBKlbsmB fZySE3e5JTd7TuqRelDplwJ4F9znlJO3mUzJjaXkcCqkNdIaKPc5z5PPqZC+LaFLkM8pJYdTKb0j vYPKu9K7eDp3OzXkdl6T3pOGcRf3PJXSD6UfYs0H0m7oh3A+8dJF6d+h/wHPE0+e5wXyPNXSbek2 duaep1z6s/RnvDvueeLJ87xCnmc+eZ4Kcjul5HbKye2U6hPgcCrgcCawKnI4NeRwniOH8zwcziS4 oEf1aViZDodTRt5mMvmZaviZ6XhKPvxMPPxMCbRUXw6thIeJJw8TDw/zMpS7l3hyL/HkXl6Ae1k8 5li4V1kKH7KMHMvyuOWotMS1sHlx7XHtUGucFWqLs0HtcXaoK84F5Vl0EyiLbgJl0T1CWXSPUBbd BMqim0DOR03e5qvxk+Oz2TPxC+O/yubFm+K9bDEl1WnI7WjgcGbCRXAPM5M8zAy5FR5mmvyG3A5S 575lGjmWmXAsXZjb5W44B4/sQYV7lcdln+xDpV8OwKVwf/IE+ZOZ5E9mwJ+sQuXrcCkzyKVMl9+S 38J67k9myt+WN+Dq2/An0+FPvoPduD95gvxJzJk8Ts6kUP6+/H3ou/K7UO5MSsiZNMjvwZnMgjPZ ifoP5V2siJzJLHIms8mZlMCZfIjKXvnH7El5n7wPK38q/xR17k+ekg/CnxTKh+RDuHoUzqSIPEkJ eZIG+YT8Ea6elE+hzp3JbPlj+WOs5J6kRP61fB7138CTzIYn+RS7XYQzySJnUiSPyqN4LvcnxeRP npL/XQbjUTpgAeWR5svX5Ouo8KTAbPmGfBNznheYS3mB2ZQXWEB5gdmUF/gY5ZFmyX+R/wLl2YEF 8l9lECAlCOYAzEGAlCP4GGWTZlGa4BTKJs2iTMFcyhQsoGzS/ITEhCTUeb5gbsLEhImo8JTBPEoZ fCwhLSEDV3nWYAFlDeZS1mAeZQ3mJGQnZOMqTxzMpcTBbEoczEloT2hn08iJPQEnFiInhp+HhBUJ K+DQVsJ9PUHuazb5rgb4rm9jviFhiBWR+5qdsDFhI+Y8uTCXkgunUHJhASUX5lFyYS4lF2qYavKt zCDgV1avYp8xZlyGYcQwY1gxHBi9419V9mF8VTAGMFZhrMXYgLEJYyvGDoxdGHsxDmAcxjiGcRLj NMY5jItMCJ6gwYyXaQjBEYyzmF/DuIlxB+M+Y00ChoSRiJGKkYExNfYamnL/L18LYns1FY8Nfk8Z xjy6xppqMBbGXi/dszX2HpvqMZZgLI/Vx74KwQs0VPbdGPswvzRei42rGDfG5mcxbo/N78VGiI0N EUPGSMFIw8iKrQ3l0HrW1IzRFvucmmzjn3lsbT6tY00uDC9GECM69h5Wx54XKhp7r+swhjA2j13f Nna9dGxUoIbvYxN/Pwcxjoy/l9h73odxEOMIxnGMUxhnMM5jjGJcGft6/aGvX66/hXF37Ov5sfvu PnT9AWPNGow4jGSMSRiZf/vKv3/N2Rh5/89fhVD1375X/L01F459r/9/R8b/HPTzvSr2HPq5yoit o+c+PEowyv/2dXyP2L5CaAHqVRi1Yz9/uNa86G9fmxswlmomNI52LuwfMQ50MVKRVIau6kqBru1K g27oyoJu6sqBbu3K7x/hdwWWG3d0FQWaG6901vefbbzeuaT/gnFXVylpxfh8b1d1/wV+NdDWeKtz ef8l44GuBf2XYvMxvdvZ3H/VeLirjnQx9BjNj9H8ZNcy6OkuI/Rclxl6scvaf5XfFbBB2zB/0Gnr v2G83OWAXuvqhd7sUvpv8HrAZdB0uvpvG+90DUDvd60KeA1xnd7+e01C11rSDaSboFJTDTSxays0 tWsHNKNrF3Rq197+e/yuQLApt+uAssmQ3BlU8Ml2HVaYYVJnVBG5BqKGzM7VitxU3HUMWtZ1UpF5 JbA6Vh/T7M51Soohr3NISWua13V6XGu6zilpvB5YN6aFnZuVrKaFXRdJL0Prab6k6xp0eddNaHPX HWhb1/1xtdmFwFCTyy4FNhtKOrcpOU1ee6KSQ7vlj1WC9tQvlVcC2wzlncNKUVPUnkE69cs5rweG DVWdu5XSptX2XKWUzwO7DVX2AsxrO/cpFU3r7MWkZePzIfs86GZ7DXSbfSF02F4P3W1fQvPlSgW/ N7DPsKjzoFJtaOg8oixo2mdvHteD9ubAwaYj9jZlgWFp53GlztDYeYpeg43UNT4/bvfilZg6zyiL m07Zg+N6xh5VFhvaO88ry9443BckjZKuhh7rWwc92TcEPd23GXqubxv0Yt+wsozfNeh943Lf7sGg wd45qhgNns4rivmNa337oDf7DpLy+Z2+I4qZXx2MGvyd1xXxjft9xxWxXei8Prg6poZw5y3F2i71 nSI9A02keSLNU/vOQzP6RqFT+65Ac/uuK1Z+1+A66F3MV3Y+UBztBX23oMV9d6Flfajw+uCQYY1N o/S2z/NyrfHGDW42rLfFKUr7Qm8y1/YozSdB672Z0CXebOhybx602VsIbfOWKAq/a3Bbu81bPjhs 2Gi4pAy0u7xVyoBhiy1ZWcU1lGPYbpukrG33emuhQe8iZS2vDO6O1cd0py1T2WDYY8tWNrVHvQ3j utq7FL87qA/uG9P9tjxla/s6byOpaXw+5G2Hbvbaodu8Huiw1w/d7Q1D93lXDh5sP+hdE2g2HLIV Kjvaj3jXDx6h3XaNVY57N0JPceWVweOGo7YSZW/7Ge8W0u1fznl98JThhK1cOdB+3rtTOcDng2fa R717Bs8bRmxVyuH2K/jkod794/Pr3kPQW96j0LveE9AH3hHlcIfGexYa572gHOb3Do4aztpqlWOG C7ZFysmOZO+lv9NJ3qvKScMlW4Ny2nDVtlQ515HpvUF6e3ye7b2nnDPcsDUqFzvyfGxcC32ictFw 22ZSLjedt68mXQcdpfkV+xD0un0z9JZ9G/SufRj6wL5buczvChxp1tj3BY4b7tnalWtGZrMrN5vj 7AehyaSTSDPtR5Sb/GrglFG0eZQ7RtF+nCufN2fbTwUSjbLNr9xvzrOfIT3/d/NC+yi0xH4FWm6/ Dq2y31Lu87sCZ4wptnBAMKbZVgak5lr7Xegi+wNoQ7cGurQ7LiAZs2xrAonNjaSm7uTAeWOObX0g tbm9exJpJml2INWY052Hub27EOrpLoH6u8t5HetHm8PdVais7K4NXDHm2zYGMprXdC+Cru9uCGQY i2xblNNcA9ebN3YvDdwyltq2Y/2W7kbsUNpt4orKaKw+phW2nYGpxmrbHry27d3t0J2ke7rt+GR4 /W7z/m4PTk+aGxfY9gdymw91+0nD43q0eyX0RPca6Ej3eujZ7o3QC91boJe6twceNF/t3hnUYJ9D gQJjVvceaLXtKLTOdgKv80b3fuhtrlQZNS62jQSKm+91H/qfyutB2Nbuo4HcFrH7RDDZuMx2NlDW InePBMr4PDjJuKwbFaPRdoHeV0wvfTlvSem+Ck3rvgHN6r4Nzem+B813MGiRQ8R75/feNZptlwLz jFbb1UBNS6lD/jutcKQEaowO243AQmOv7XagvqXavo6rI21cFziyAvVGxXYvsKSlzpEDXUy6zJEP NTqKgpmcSYLZLWZHKfgEbBDMa7E6Kvqvtjgc1dBex4LYCR4s5OdgsKRFcdQpWS0DjsVKFj+JguUt qxzL+KnkMEJx1gSrWtY6zEppywaHFecLfl+CtS2bHA7lMv+5DS5q2eroVe637HAo0F2OgdjPWLCB f3+DS1v2OlYFco0LHGuh+ByCjS0HHBv4Z+LYBI2908OOrdBjjh2BejpxrnSU+GScPrzzX+8o96Uo 1o4qXxq01pc11p9v8S43eLdjkS9H2WrY78uH8j7zoKPBV8R7jq8Uik4S1XQs9VWgezT6qpVz9JM/ 2nLSsStoajnt2BtsbznnOBC0t1x0HA56Wi47jvVfaLnmONl/qeWm43TQjzXnsOaO42Iw3HLfcTm4 0iQ4rgXXmCTHzeB6U6LjTv8NwyLHfaXalOoUghtNGU4puMWw1Jmo1JmmOlOD2w15zozgTkOhc6qS Zcp15gaOmwqcBcE9pmJncXB/jDdMZc6y4CHTPOe8/hFOFMGjphpnTfCEaaFzIf8uOOu/PNlN9c4l pMuhS/DaRkzLnc3Bs6ZmZ1vwgqnNaQteMtmcruBVk8vpDd4weZ3B4O0Y0zYJzigoLsZRRCmmoHM1 2JW40RR1roOudg6B4vjPxr2mZifUtM65LcRMQ87hkGja7Nwdkk3b+EqDxrmv/7Zp2HkwlBIjN+Mm 55H+EdNu53H8jhOjmvY5T/Vfbcpwnum/ZzroPI+ntzlH8TkccV6BHndeV3JMp5y3wGDDzrt4PWec D6DnXZrgGuMdVxz2H3Ulh9JMV1yTgiP8Ewhlma67MmM/26Ec0y1XNva568pTSk0PXIWh/FaNqyRU FCPM1jhXeai0NdlVFargvxeh6tZJrlpQOlg9tCCmrZmuRTECD9U9pItJl9FTjKTm1mxXQ//V1jzX 0v4brYWuxv7bnKhD1tYSl2ls7iDt5b9fIWXskwQPhwZIV/FXFVrbWu5qD62NzUk3tFa57EpKa63L Ax4GFYc2tS5y+WMMHNr6kO4AqbqUnNYGVxi6lCun1tCumLY2ulbGSDW0t9XkWqMUtba71kNRR8Xu 2hij1mDV3zR0gP/Whw6THotpq8e1BSwKIg2dbPW7toM8waWh061h106lrnWlaw/U7toP5jzlOgS2 5N+XczFtXeM6GrrYnO06gd9u3pkTW9e7RnB6ZrvOYr7RdSF02ZjlusRPBNfV0LXWLa4bgVut2123 Qzdbd7ruhe607nGz0P3W/W4xLIz1durexmVuOSy1HnKnoBv3utPCibFO2HrUnRVObT3hzglntI50 14antp5154dzYwzQ3O4uwllAp0zrBd63Y2d06yV3abig9aq7IlzceoOftq233dU49dC1wmXNI+4F 4bLWe/Yz4XnN6911gQwzcy8OZ4ydy9vdywKJZtFt5CzhNiuXzbLbys90t0O5b05x9wZSzWluBc+9 4B7g55cbPdCc5V6Leo57QyC1pci96cuTwpzv3hquMRe5d+C1gSVCKeZS967gCH934YXmCvfeWKcN nDFXuw9gnwXuwzgFcOaG6811tj3hJfycCi83L3YfCzebl7lPhtvMRvfpsI1/bmEX7eM1m93nwkGz 1X0RHgc9PByN0Q7XYGNMv6Qamye8mmusEl5HOsRfQ3gz6Tazw305IJh73dcCklnhNMLJJNhoHnDf jM1x3kFxF86C8DDvuuFh8yr3nRhXhHePKd5FsMG81n0f5wXN6X0Nmzd4hMBU8yaPBKIAV4T3mbd6 EmMUgVc1ruGh5u2e1ECBeYcnA7rLMzV24mMfaPigea8nN3bKh4+YD3gKAsXmw55iKOqoHPOUxU75 8PGH9BQ/p8JnSIdIz5tPeubh7MYJHh41n/bU4KTGOR6+Yj7nWRhYaL7oqYde9izBKVbnWR5YQp/5 ddJbY5/MNU9zoMx809MWqDHf8dgC9eb7Hpdy2SJ4vOG7HSbfgmhcR7uvbqCuw+5bDPX4lilrO/w+ o2LuCPvMitix0meNJmONA1fX+HqjkzrW+xRc3egbiGZ2bPGtimZ3bPethRva4tugrOrY6dsUzTOs 921VlI49vh3Rwo79vl3Rko5Dvr3RcpyYB5StHUd9hyMrO074jkWrOkZ8J6O1MXdgOOE7rRzoOOs7 F13UccG7J9rQccl3Mbq046rvMnzcVd+1cQ6/4bsZbey47buD+T3f/cgeK/MLUZNV9EvRdqvsT4za rSn+1KjHmubPiPqtWf6p0XDMgbYv9OfCc8WcDnkKa46/ILoy5vKs+ag4rEX+YngunPXRNe3b/GXR NR15/nnR9dZSf010o7XCvzDa3l7AVxrW+OuVXmu1f0l0S8xnvXHYv/xLPxvzmNYF5CsXtl/hjs/f PP70YX8blLyStc5vg2OKeZwH8JiHrYt9N0MV7fP8Luy/zO+Nbrca/UH4LHwC0Z1Wsz86xirrrFb/ amWr1eFfp5yz9vqHonusin9zdH/MD1oH/Nuih6yr/MPRo5xzoiesa/274anhrKMjpGetG/z7cGrA QeO8gEYvcA2Qp45e4k+JXo2pdZP/IN7RVnguh3WH/4jSy/1v9IZ1l//42Pw26T3OSyvY2CcJ97pC HFO8qhWyda//1Ao5NidNsR7wn1E2WA/7z8O9wsOuSLMe84/GHOuKrIc0p/24/wo+sZP+69DTXLnH DC6NqfWc/1bMV67It17031X2Wi/7H0BRR+VavybmMVcUPaSlnOJWVJBWx9R6sz8OzhH+ccUC653+ ZPhEuMgVddb7/ZOU051CfyZU6s9WznUm9udFG/n3ZcVi0mWGNf2F0Rudqf0lyoHOjP5y5WTn1P4q rMztr1WWWSRPMPyAvAOdR9S74FksiZ5oRGNJ9ayOxBlFz7pQiiXDM8TPDs/mSLJlKlfMt0UmWXI9 w5FM6O5xLfDsi2Rbij0HI3mWMtwlxTydZZ7nSKTQUuM5HimxLPScipRb6j1nIlWWDN4/Se9alnjO h27ybhmpJV3UHPaMBlItyz1XIg2WZs/1yFJjqedWYNTS5rkbabTYPA8iJtJ23icj9jFvBY14LK4e TcQf81kWb09cJGwJ9iRHVlqiPZMiayyrezIj6y3rerKhQz15kY28Z0a2kG63bO4pjOyElgQEy7ae 8sgey3BPVWRP7Eyx7O6pjey37OtZFDlkOdjTEDlqOdKzNHLCcrynMVRBXVSynOoxKWbLmZ72yIjl fI89ctYy2uOJXDBae/yBGsuVnnBgnuV6z0plb+yE4hq5ZFRwGmLesybsjZFba3LP+shVy62ejZEb RtazJXLbcrdne+Se5UHPzvADS0HPnkh2m6Znf6SwLa7n0ABrS+45OiC2Teo5MSC3ZfaMKGvbsj1D AykP79aW13N2IK2tsOfCQFZbSc+lgZy28p6rA/ltVT03BoraantuD5S2Leq5N1DR1tDLBqrblvaK AwvaGnvlgbo2U28KtL03bSBlTO29WcrlNk9vzsDiNn9vfiTcFu4tGljWtrK3dMDYtqa3YsDctr63 esDatrF3wYCjbUtv3UAv//4OKG3bjb0DA207excPrGrL7EXP/2/2vgeqqvPK9zvnnnu5GrxBQpQS QgkxhBBiDbGUoZRYiwbvP4kl1jHU3HLP/XfuuZf7X3AsUQsuShmKjrHWGuNzfA6PWMa6HGupMdYx 1jI8Sqi1jMvHUOtYS3iUZyxxrCVv733OxSuSxq6Zt9Zbq117/fb5+M539vn+7H/n85yr+0idrbFd WTv38Tpn4073yTp5U5v7TF2ocY+7p64OeH9dQ+N+9wW4tMN9qa5lS5qtog6esNyX63YCv1a3p7HL PVa3v/Go+0ZdB/Bb60sauz2srmvzkEdXd7RB50mu62485UmtO9V41pNed7ZB9mTV9Tb2ehbUDTQO ePLrBhsHPYv8/ZtLPUV1Q18r8ZTWXWkcgpYj0HJp3XjjFeUunoq6icYRj7Xu9qZ+T1U93zhu07nz GiY8a+v1jRO20nrDq9keW31a422Psz6jiffI9dlNek/IvbFJb6uqh+jsqasvaIJcrr7w1dWehvri pjRPY31ZU4anpb68KdvTXm9synUV1lduHkfeVKA89Xt21q9uKvTsqa9uKsbspakMs5SmctxFaTIq Fkc7GK3qTsXd1nFS3SugnYGmSs/++pqv5WF8b1qNz+BN1aiNTTXK7hD5h5uejtgukE+ZmKer3v3q eVduvf/V8+ruDe2reI76A01u1/X6SJNfeer3dNdvaIrgWm9axXg2nxvn/g9j3O+4CcZzt7jfM4H7 kOeYjtfyOjaLf4BPZg/wKfxcNod/mJ/HHuQz+EfYXD6Hf5w9xOfxT7GH+df519l8TYVmBUvXLte+ wDK0IW2YZWp/pP0RyzIAsU8asg0Wlm2oNFQzq+EVQxN72bDN8DbbYjhnGGXfM4wZJtgF6M2LTKD/ /cDAHmSz2FxWxR5gq1kNW8lE9g1Wzf6WtbFG1s5+xrayn7Nfsh72K242+wWXzM1hH3IPcg9zHIff OOnxvUluPreWc3GZnIfbyuVzzdwOroLbxb3OvcT9E/dT7mXNdzXf5WJCRIhy64VNwhauXmgWvsFt FLYJ27hNwreEb3ObhTeEv+cahS7hMPd14ZjwA65VeFt4m2sX3hF+zG2j7zF3CAPCz7hvCUPCMPdt 4arwG26P8Fvht9w+4XfCB9x/w7fouAPah7QPcf+g/Zl2kuvQaXULuPO6J3VPcjd0T+kWcr/TfUZX wv0ev/DgPtR9QVfOC7rlOguv063UVfMG3Vd0Ip+pc+pCfLYuqmvgn9F9XdfGf0bXrtvDf073hu4g b8QvJ/hVui7dv/Bf1PXp+vigrl83yId0l3SX+L/RDeuG+Y26X+tG+K/i+1j8Zt37uhv8Vt2EbpJv TmJJc/htSalJD/NvJM1Pepz/+6TcpE/zh5M+nyTzp5LCSdv50aTXkl7TJCd9K2mPZk7Sm0ldmofw /1XVzE/6ftJxTWZSd9KPNFn4PpAmN+nnSYOaxUkXk65qipN+k/SBZpk+V39EU6V/f9Zjml8afm/4 vYDfy8msGXgyy8KvjZceVqEHFLBcuabipuwur1hxoXyR7Jcj8oaKYXmTvLVcrmyXj8kn5NPl3fI5 uU8+L1+Uh+Wr5tnmHLnVHJO3LzMuc8u75L3yAblTPmzOWVYOWiWAjo+Tjv+OcdyH3IeMB41OYRo4 9yi9icr4N/k3Gcd/l/8unDvMf49p+Lf4t5iW3kTV8T/lf8r09CXYLP5n/Hk2m95BTaa3T+fwv+R/ yQz03umD/G/534J14JulqRpOw039r8FajY7Noy/H0jXzNPPYJzTpmnSWQW+KPqLJ0+SxR+mrsCxN qaaUZdM3YI9plmg+z3Loq5gF9M7GE9D/ZC6VZg45855hG71nvD3efu8F7yXvZe8175j3hveWzLw3 ZJ2cLKfK6YQseYGc7x2TF8lFcqm8VK6QrXKVvFa2yU5ZlkNyndwgN8otcru8U94j7yd0yF3yUblb PiWflXvlAXkwkXyr5SH5ijwij0/RhHzbx/v0CWTwpfkyfNlQm3sXVftyoW2Br9BXLN+Ok6/MV+4z Akeq9NXI4z43tPX7anwR3wbfJt9WXyvIzPVt9+3y7fUdgPFzs2TVa+A363NpTtKBNCwTSGC57Emm ZQVASexTQHpWAjSLlQLNZmVAD7BytozeLjeB18HvLh9kf83WshS2DigV/I7IHmJuoDQWZhH64nID fWv5Kr1R/jWWAf5oG3uEfQvoUfYdoCz239lB9kn2JtBjrAsoh/0A6HH2Q6AF7C2gJ9g/szPQvx6g PPrfsJ9ig+xfWT77X0AF7FdAz7BfAy1k19n70Peb7D/Ys2wS6DmO55LYYm42+L4Sen/8s+D7Ulgp vT9exmVxj7Hnuce5x9kX6HvPcvCGlfRF51q2nPsyZ2MvcDVcDTPRu+Rm+rrTwsmczKxcLVfLVnJR LsYqua9yW9gq8J1b2Rrwnl9nf819g2tlL3PtXDv7Mn3duQ486XH2CtfNdTM7d4r7ERO5s9yPmZP7 CfcT5ub+hetlHtJfL3iBPCbr8/X5rJbezgvon9UXsiC9kRfWl+hLWERfpi9jUfqSKEbv363X2/Rf YfV6u97O/gbW9iqbIN0vwl+WkI4CugGnAGcBvSoGVAwChtiXpG7plHRW6pUGpEFpSLoijUjj0gTw 217eqwcyeNO8Gd5sb663wFvoLfaWecu9Rm+ld7W32lvjdXv93oh3g3eTd6u31bvdu8u713sAqNN7 2HvMe8J72nvO2+c9773oHfZe9Y56r3tveiflZlmQZ8sp8jw5U86R8+SF8mK5RF4CtFw2y6vkNUDr ZFGW5IAckzfKW4Da5B3ybvwfRLU1Wg8EwS8b1tHvKyz7L9NvC9CDpOUppOVzScsfIi1PIy1/mLR8 Hml5Oml5Bmn5I6TlmaTlWaTlnyQtzyYtzyEtf5y0fAFp+ROk5bmk5U+Slj/FeoHySdefJl0vIF1f SLr+KdL1RaTrz5KuP0e6/mnQdZ4VkX5/hvT7r7hHuSzQe9TsUtLsz5Fml9H3Ec+TNi8hbf48afNS 0uYvgDZ/FWzgVe5VsAH8SuIF0uYK0mYj93fc34E9oE6b6fsIC2mzlbS5kusFPV7F9XF97Iv6l/Qv sSr9Wv1a9pLeo/fg99opm1JaYJ2SYe4fYFxwHehdIaAYUAYoV+uMgErAakA11glzpcXBIu/AHwe1 GQydl0qCpdKS4FLv0N3AOml5sMJ7BTASuoiQzEGrd/yPA9tIq4JV0prgWu/EHeDf0rqgzXs7aJP5 0LAkBp2y/o+D2hhCVyUpKMtpQVkKBEOEWLBOzgBkh/xUzg2NygWh69LGYIO0JdgoF94B/V0cuik1 B1vkso9BeWhSNoYFqS3YTtgR3CntDu6RKxVgGccmr74DGuu+4H65Orgfj4SDwQ655uOB7aRDwS7p SPCo7L4b0vFgd1xuIqSTwVOy/w6kM8Gz94PAuthuqSfYK/UHB2bEheAgIiDG9iGkS8Gh+8Ll4BXp WnDkHowFxxEBKdwm3QhO3A8CgdhB6VbwNsLLQjxBF9IjArHYITzW+qOdXluoxpscMnhTQ2nTEdgY O+JND2V8HAJbYsdJRlYom7AglOvNDxXchUWhwntQFCq+C6WhsvvG0lC5tyJkvAfWUKW3KrT6HqwN Vd8FHPd9QI6EZ3udIbdXDvlnBJyTN4RT5E3hedQuFIrcF+pCG7wNoU33AOVtBbSGM72Noa33A3l7 OMfbEmqdQnto+xTw/C7A3nAelQ+EF8qd4cXenaFd1N9pkA+HS6i8J7T34yAfCy+RT4SX3yVjf+jA XegIdd4DvPZ02OztCh2Wz4VX0bEvvGam/nwkjoaOebtDJ+7BqdBp79nQuXvQG+pLhHw+vC7u2xN9 cdxXTvm4i2FxygcNh6VEPzKlJ4nrGl+X+BxdDQem5nY0HEvsE/mSZvApYPuBNsUHBHYo9kt2tTuU QXED9D2wD3AwdjKuz4FDcIT74Hn5enijfDO8RZ4MN/uEcBvGF9/s8A6sx7H5UsK7ffPC+9C/+jLD B9FP+nLCh3x54SMYA3wLw8fRt9OYQd99i8Mn4/7ZVxI+41sS7sFx+5aH+3EufObwBfSdKJOwKnzJ tyZ82bcufM0nhsd8UviGLxC+5YtFGM4vxSCcS5hD30aIk2o8822B+KPOs68Z5LRFdCiDzu2IJPt2 R1Ix7kzF2oQ1mpKJUGNKPBZgnzA2+vZF0qlvByNZ8XWm9uj7Ye0pLkPMo7EdiizAOt8RiOElCjBe 4/zeBbMSlzFeUTyG+8RjMR4JoD80tmkxlu4F8B0PNiAwxsbjahy+k8F2xFSMxJipxsbEWHlXjFTj ZBy+MxAHYY0p9kE89PUEuxGktxjnTiqY8lkAX38kn44XIot8lyJFVA/+w3c5Uuq7FlnqG4tU+G5E rFSPNoyxBO0W7AjtyXcrUuVnkbXoi/y6iI3sIm4Hql8k3QI56Of8yeCbVBuh9QK/hdfHfeA9tjXN rqb8S7z/IAP9pj814sQ196dH5KnrsT3Ymz8rEvIviNRhv/35kQb/okgj+XAcD4zBXxRp8ZdG2um6 j/M/ar/8S1U/HrfxrQlt1D7TWKf546nxoB+O46Pu9RH+1F+hHq2hwzimKUz3k4m+Ev1j3Ecm+kRo S3KwDZ6DOfBXhc2BI7EzgeOxHgTmNrjelNecjPVTHfgs/0DUEDgTuxDPXwI9sUv+xsgp8mOQdwT6 Y5cppwCf5u+KjPgbIt3xnCBwIXaNfBrGf8wb0Nddio1hjA5cjt0IXIvd8p+K3A6MrWeBG+t1gVvr k4NsfWpQtz49mLw+i3Iy1V/StZibqXkT5TzxHAVlqTLwXDB1/QL0l9ivqdwunofduOODCfEcRs09 UBbmY8H09fmY7wSz1i+KX0/tYTz0N8wX2QmMLbhgfRHVYd4Yh5on3oXpuaCa+90FdV6n53VTwFws jul5XTxHmyE3C+Yr+NjcDHOvxPwLc6543pWQY2Ff6Vpso87JPbYF9udfG9l5j13ZInviOZbfGdnv lyMd6Ivi7fyhSBfqtb8ucpT0Ke4HsA3aHOgfHVsiZ/3tkV4q74wM+PdEBhGJ9ubfHxlCH+HviFwh /TwaGb8njwH4uyMTBNBHBNkh+q2zUZ6OvVF93AbRJvyD0TT/UDRjyv7QB12JZpOvGYnm+sejBf6J aCHGnjhwvPiMRfYHY/bfjhbX8tEykg3+o1YfLadxqu1rDVFjbVq0sjYjuro2O1qNvqg2N1pTWxB1 1xZG/bXF0QjGP4qB6J8gJ6gti26oLY9uQn9ca4xupWcWiIW1ldHW2tXR7bXV0V04X7U10b217ugB fE6ojUQP4zzVbogew/a1m6InardGT9e2Rs9hDoj+P+6ba7dH+2p3Rc8TQB7GGdTt2r3RizjvtQei w7Wd0auoZ7WHo6Pkw2Ada49Fr9O5E9GbJON0dBJ9ee25mFDbF5tdez6WUnsxNq92OJZZezWWUzsa y6u9HluI81t7M7aY/BiOfzJWgseAEFuC+hCYHVseSImZA/NiqwKZsTVT+gM5OOYfgZzYukBeTAws jElUr/rcwOJYIFASi9H6gZ0ElsQ2BpbHtgTMseYpXY0/B8RjFJQDq2Jt2CawJrYD6xjPOMNWQztj f/kXlD+jf0EZZdfv/DuAOMFkR4Yj25HrKHAUOoodZVWCo9xhdFQCX+2oFicUcmQjHDUOt3hbIYff EXFscGxybHW0OrY7djn2Og44Oh2Hq9ocxxwnqk46TjvOOfocBpW2E847LjrSVBp2XHWMOq47bjom nYJztjPFOc+Z6cxx5jkXOhc7S5xLnMsdfJyghdm5yrnGuc6hV8gpOiVnANrFqIfYI2yJ5/B+cAfc 55/TCbq94r9kH9QCtrESaC7tg6bSPuhDtA/6MO2DzmNuJrH5TAbKoN3QR2g39FHaDf0k7YZm027o Y7Qb+jjthi6g3dAnaDf0SdoNzaPd0KdoNzSfdkOfpt3QArC5XraQ9QE9S7uhhbQb+hzthn6adkOL 2K/Zb9hn2HtAJbQn+lnaE/0c7Yk+T3uiS2hP9PO0J/oFLovLYuW0J7qM9kSX057oC7QnWkF7oito T9RIe6Im2hM1c1/lXmVWbjO3mb1Ie6KraE/0i7Qn+hLthq4GS/8++xL3A+4HbC3tib5Me6Jfpj3R V4QW4RvMRr80WCMcF37ARLDrs8wpXBN+w9xgvxMwlxyrYw13dNUOI7ZfsF+yX7Zfs48B3bDfgonX icliqpguZhE5RVkMiXViA1Cj2CK2izvFPeJ+sUPsIlog5ouLxCKxlGgp8QrRCrxKXCvakFBv+KdB b55R9SaV7o8aw8MaPQnag7oiwPwXgvagruhIV5JAU5aBDuGe+SzQjrWgQ6gfD5B+JNM++RwYlxc0 CbUhBXRhG+gT6kEqaMFB0CfUgDT2PaCHSQPmkQbMh/U/A3qL++GfgDX/V9AwXPVHaNUzaQ/8UVj5 EZZFa5zNpcAaP0arm0Pr+jit6ALuFc7GnqAVfRJWNMDyuBisaD7tcj/NtcIqFtAqPkOruJD2tD/F fZ87zhYxTl+kL01Yj3xhrj1/OokbxE32RfaiOIm59lKVlk4ncau9wm5VSGy1V9mrxO1QM43EXeJe +1ogG5ATSTxAR9keipPYaa+7l8TDJKHO3qBSo0LiMXuLvUU8Abz9XhJP23fa90zRfmyrUodKXdPJ 0+U5aj9q746Tc9x+SqWz08nTbe+N38tzyj4AtB9qppFjsX3CPgiE9xtCcueJBjheoSuIHGP3Sref dS8nCWfjM2sfUchz1j5uH/d0AJ+4lzy9ML7bU2QV+SnSKzTDTJ0T+0SDmDZF58UMoot3ZiJO4rCY LebGiVb8qlgwjUYB18VComKgm2r9pEMAXjY1Iqu9wTFbLL+XHCmi0TFPrBRXIzkyxWqFHDmiH2pq xBpHnliTIGeKHAvtI6J7ivxiJE7K7NuHYEVAvx0lpLsVjiWO5ahjDjPOhGMV6odjDZTW0WgLHKJD oh5JNFZFEmrKAK1Sr2fQM0TacIVmf4RmetQRANtZBPNXZC91xOwdjo0wywbHFuhfs6MNdNnm2AH6 XufYLfKOfaDL7TXNjoNiMdy3DfSkEdoechxxHLffdpx0nHH0QI9R/9sd/TRKG6zYOXuj4wK0sDou OS6DLLRaGhG1VGwFV7fRXuW4Bv0fgzHfgPoWaFcEVtfiuAWlRY51TmYvdeqcyc5UZ7ozy7mAbLlK IWe+cxHaq7PIWQq01FkB1iorFuu0OqvobnAn51p7o9OGNukEydBSdoacdc4GZ6N9p7NFtT+0wA5n u1MGXTOQvmXA2Z2iUSx27hEznPudHc4usdp5FNYXVsvR5ux2nnKehZkrEMuhTzvFPmevcwBaDwIN iYXObtJAHCWtFbYDAo3BWXJeAYyI5WDD7c4JqI84b7t455BL74J7u9JcGa5sV66rAOZachWivruK XWWucpfRVYk6DjNLa+5a7cgDbSt2VTtlVw2Q2+UXy5DgXMRV6NoAIzCKq+HMJrHatRX1FHiNq9W1 3bXLtde5wHXAPuLqFN2uw6CPfhyb65jrBNyzBjQ0guPzjNuPeibcIniGU57bsD5DMJ5y0Jd2iZf0 4AU6JAN4irPOna5RKc2ebu+u6XFVShlSNto16AzMlpQrFUiFzg6pWCoDDUXPMQHeDGenw9Pt6VZa 2Nvd/VI5yEJ/RxpMLRUvAxoMsgYko32nVGnvklbbz4o8tOuG/oxL1VA66qqWauynHCWuQneJ5Jb8 UoS8oOrJpA0e8qyuYs+AZ0DaJG0FP3dF8XVSq7Sd7gZ3knbZR6S96M2Aj0t7pQNSp3TYPU8Cj+6q VjwX+S69Z0Q6IbWK1dJp7InrNKwT6k6165yrD/VHIUcb9Pus6zz6JNdFWONhsRJW5yroVQH4gwLX KMz1Add1scx10zVpt7oFN/gd+xV3inteTU9NjzsTVvAA6M24vc6d485zL3Qvdpe4l4g1ziGcd/tR sdi93G22j7tXudc4r7jXgfW0gIORRD/cfwji41X3ErBgA/isGjgTcMfcG8UM9xZ3s7vNvcPeIOrd u9373AftA+5D7iPu46LBfRKkGtxn3D32QZA85O6HPhmgLxfcl9yX3dfcY+4b0MdekK23j0PLWx7m 0dlbPMngbVLBlqygN+lwTQHoSrEnC/R31LPA3uXOc426Rh1trmH7kHPAk+9Z5FkA88B7ijylnqXO Xk+Fx+qp8qz12DxOT4VohKPsnPCEPHXQusHd5urzNHpaxIin3bPTs8ez393m6XCIlE0985cnzD+j J0w3C9BbDfPwf5OxdTDuKzxLsx0A6gQ6DHQM6ITtxFog22nb6VcGXxm0nQPqs/VR3Xmgi0BYNwx0 FQiuWzO2Zsw2CnTdhs+wvMFqWAn3SKEnGkZPNDw9y2go5xXoWUZLTzE6ynmT6ClGT08xs+jJ5QF6 ckmmnNdAOe+DlPOm0DPLXHpaeYhxKWKKn8ZE7x3aFjPOZoZjCRxXCXMrDtqW3w+MRjgeAhz5CBxX YKxWUHHyPnEG0DMD+hUYI3C8cH8wboLjJRWXVVxTsGJIORp3AfZCeQxw414YO+F46+NhPAY4AXKZ Ch0g+W7Q2KZhReo0pP8JyAIsmAH5M8hFLJqGovuDFeZ9RSlg6UegQoH1goIV1vtEFWDtDLApsMK6 rXDeH6ywtitkFSEVdQqs15SjZRiOA4AGQOO9sIIOrGj5eFhvqDLaVewE7JmG/TOgYxq6/gQcBXTP gFOAszOgdxoG7g/Gq3ActJF9zAg4ZxwFXFfbXblPjADGZ8CgKnMSjhP3B5MAx9t3YOTvYKpNinqc B8iEc/o790qEKUe9v+HjYcoDLLz7emPaNGTMALx2MRyz4ViiHpfM3J+PgjEXUDADCgHFM6DsbpiW J/jvRH8b95eqHzOZbVP+xbTKdrf/iOtJ4rqq8z01R2sS5nbd3X2a8imJPiBuw6ptYcyI6/zK9Gk6 PaGcN4kACRBQfATGF9NGpR7HZNoCaFb8qw3XC/ykaQdgtxIDTPtU/35L0XcTzEncP5sgppmOKOM1 HVfnAWSiv0SZBJQL62kCv2iCuTNBH0wo95o6v+p84rUUJ+Mx7HLCPIMcM1Nk4DkzxAtzstqv6es0 bY2mYkp8nZqV2GhOVfpmTk+4/pYyFvr7iBr74G9zllp3KAHHZ8D0uNw/Ay4kxNeEGDuFsQRMi69T 8fI/EyezbHfHwnzbnRiYEO+mfBbAvFQ9QtwyW1UbA/9hhphkhhhkhvhjdqr1YMMYP8hulyv2ZIY4 Yw4pvshcp9qFagdxv4i6hXLQz5F/ittIs+K38PopHzjdtqbZVdy/TNlWs9r/RnXNW+5cT+3B3swQ m8w7lX6bISaZMQYNqT4JxwAxyNylXvdxPmi6H5+pTbzPM/jjqXP6O/hIX/dx/jT7btzjJxN9ZWGC j0zwh9Q2W21TrMwB+uiVoD8r8xVgboPrjTnNykVqHeiKpRzK6MfU/GUl5EbmCdWPwZquRN1qVPyZ Bece50vNCVZWqL4M4/9O1c+h/kGMXgnyVoI8C/R3JejNSpC3EvRsJcoEHVvZoPrPuL/sUnOzeN4U uuNHSZYqg/rYqPhL6td0PzzNB0/lMHE/jONEWXgOdGple8L1Lep4ipT5opwLxrZyp1pXmoCKGTA9 F7TNAHVep+d1U2hIwPS8Lp6j/Wdys6O2u/OvU7Y7eVdijmVTr+1OmJPptgX2Z+613WNX5gHbVI5l RrseUnzRlL+6oui1eUTVp3g9tplQ9Q+P4Fcsqt1ZwMYsBgWJ9mZJU3yEJUPRT0vuDHkMwFKgolAB +UGUX6wey+7YINqEBWKdpTLB/qCdZbVibxaI0ZYagFuJPXGQP+pU5gnHbPEDIqpsGIdlgzpOtb0F nuksWwGtgO028kWWXQB4hrMcAHQq8Q9BfhJyAsthwDHFH1tOKHqKsdByGnAO0KfO13nAReU5wXJV mSfLqNLeArHDchMwqeSA6P/jvtkKMcA6WwHKozgDum1NUebdCjmoNVPRM2uOMo+4jtY89dxCVcZi xZdbIUe0Qn5oRd8D+ZgV8jAr5FVWyKesojK/Vkn1YzB+a0A9xhR9sEIuZIUcyAoxwtp2R3/Qd2M+ YIVcyAq5kHWfWq/6XCvkA9ZDiny0EyvMkRVyAOvJBF2NPwfEYxSUrWeUNtYepQ7fxphzes47f3kb 489pr0zIF87gv6jyPewfGUvKBuQCCgCFgGJAWcKxHGAEVAJWA6oBNQA3wA+IADYANgG2AloB2wG7 AHsBBwCdKg4DjgFOAE4DzgH6AOcBFwHDgKvqPUc/4ngdcFMFtp9kTC8o9frZgBS1b6PqEcagnwfI BOQo9VPHPMBCpa/6xXfGrC8BLAEsB5gVOfpVyv30awDrAKJaLwECgJgiV78RsAXQDGgD7ADsBuwD HAQcUo9HEo7x9scBJ9XjPvW6kwnnzwB6AP2AC4BLgMt3jjg/+muAsT/hGJ+LG8o8/qmgNUhEpQKU T+s1rLa9Ng23lP92Pn6MXx+XO0sHSFbXG+pnpd45zkoHZLF/NFWYrKYq01qTzeQkyKaQqc7UYGo0 tZjaTTtNe0z7TR2mLtNRU7fplOmsqdc0ADRoGjJdMY2Yxk0Tpttm3qw3G8xp5gxCtjmX/i4AKjQX A8rM5WajudK82tRurjZ1mGvMbrOfEDFvMG8ybzW3mrebd5n3mg+YO82H4e9j5hPm0+Zz5j7zefNF 87D5qnnUfN180zxpESyzLSmWeZZMS44lz7LQsthSYlliWW4x43moX2VZY1lnES2SJWCJWTZathCa LW2WHTNit2Wf5aBJthxS6QjQTOXjQCctZyw9UO5X6YLlEuEy0DWgMcsNyy0rs+oIydZUiAmfmPEX F5j6iwt6+sWF2fSLC8n0iwsG+sWFFPrFhVT6xYU0+sWFefSLC/PptxY+Ycg2PMseMTxnKGfPGOwG N3veIBuCbJkhYqhnJkOD4VX2oqHR0MS+aNhm+CF7yfCW4STbZDhneI9toV9fOPj/cc84LpUL0Psq 3fi/yecUqgDPklOmolyFMaGMAKvJWa2WsV21Wq5R4VYBXjcHvG4OeN0c8Lo5W9W2rWp7rNue8Pcu 9bhXxYGEe3aqfx9mTxt7gPqNF4yXjJeBrhG/bBwDumG8ZWImnSlZIWOPKdWUbsoyLYDafKjPMi0y FRkvm0pNS8EmySqNN8AurSYbrNWD9EsbjH5jg6ff2NAYCg2FTDAsMyxnWsMKg4Ul0e9tJBteMdTA OngMXvaoIWQIs2zDBsNXWY5hi+FrLNdwwnCC5RneNrzNnjKMGkZZ/v9j6dzky8IXgK8F7eAmH6Dy bCo/S+VnqfycUAF8sTZC9TVU/y0qtwIv1H6PyhVUVq59lsqVdO2ngC+k+sWCn+TgtYUkv1p4Drn2 ZXz3SbsBymnCUuTaKPAj1OYNvO8fqPyHt6gPW6jeS+XnqPwclRcrvVX5BuJBagMy//BL4Wngw+qI nqazL1OvaKTCX9G4PNRzN5Y1g1TW01lGV/0PqvHRtSaqeZDKz9O160nag9ST54lrqU0RtXECX0Tl RVQuFEqoXqJyEUmgeuLP0dlCOvsZ4bPItV7qSQm1xPJzmuvURpmHVpJ2gqThWnxK6KB6hRcTX0Vt RJJ5jGTCbPAv4h35Z7Q24E1asG4+RuXniQ9qQ8AbsA3HE3+N2lM/eYZc46SWr2ntwA+SzLlYw/0C y9z7dHYbtV9G7b9J5TSS9j7xYWp/S/gXqOeFd4CvEs7jXbDM/ZZqnMIvgJdiGzaBnDMS/w/ibyHX aKjlCpLzErbnfkUSOqj8XTr7ArX/kNrnU/kq8dPE/4navyfUQkuz9p+hfBP1ltdp34byJNZzNdoe 4JcF0AQ+A9uw97Sbgf8OOXdVrQGuKSQ5GcQz6VoH8W3E5wsf0tmvQPmnyPlLVD5BvJ/4a0I1rpHu PeLHiHcSbyY+hjwpHe61WFlBatmkw99QqaHy88TnqLyTeDNxvHY+tTxDZw9TzSDVNFDNPmXdsQz8 GPFO4s3Ex4hj+xXUciNdxRSu/TZqBZVfo54fpHI38YNqTSfxZuJjxMthLKe0zaRFbuR0918Qf5+u 3abyY8Q7iTcTRwnbaDa+iW00u4h/k/r8PvFhkjOMfebe0/YCv0H8Pe3rxAPEXyFOmqAdBQnzab1u Usth4iMq30w6cBp1g2omScIkSZgkCZOkFZfp7GWquazWdAPX0Fge054hneklHiD+CvF3kZMmDCs6 hmXQNJT2LpXfg5we+wA1fInKYSz8j1FL+UyqyaSaTLLuTJQM/B3i3aSZh2CMGxT9JMntxLep16Jd hEnn5+P/xA33ep14gPgrxN8hPkocZV6iay/RbPSTtH4qv0blN1SOs9dD/XwxCaXNUbiiaVQ+qHDt D2llA7SOePZ9Kr+n+xzOsMKxV4xq4JkWeQbV99PK9lPNEbKRXOLZ5IWeJf/WpMsD/irV/5p80Q0q b8cIwv07+bQ5ij/EltxsrQv4Q+TNGonPp9noojYFZAs/p/KLxDtUHwjxhSP5fBJy3bu4+rpv4Gxo yZcKNpwT3XEs6wqwrLlGut1BelJI2ttLVx3XHsFrhS7qFZ6VFH+uQ8/5NHKwzfNkU+fJjtA6nqDy Njr77+oYw9QfJ137JrV/k+aZPIz2Gs4PcvDVyJX1ekYH8ZGPUfs5VD5D7RtU79FJfqAZowPZoJPq XyM+l/gTdJdfEP8wqQJXM+kQ3RfPLsNVBsvFcprKUeanVZ+8F8rppJPvUk028Yu6R3B9yd++Qfr8 JfLbR9GLagdIJ/uxpTaPdE+PNbB2qMNp6M+5XsWK4VkZIgKtywDOMPiBbtKxbrJKhb9D9tJN/B2K IOirM/BamM+36arNZEGbSQ/xLlHslWYFntWsULyKALkK9yjZ+FK66rjuA/IP2L4YewuajDVX0dJB w3+OkYV6Xqj6n83UEu9ygPg24qd1T2JZ97dkuSsxypDlXqKzJ1SuWCiWq3RP09lRqhml/uMMF+ne RV9HvX0doyH3PykmZlBv/0D136M5f5TK2TSWy5gp8ZUCyu8TDMCvYfbIfwI5rNdm8iq4artpjHvR 1jTPUhx8CrkmW4Aa/ick+TvU8n2S/G9U/jcqv0Dye3HmgaNkI/XZj5wdpvII8S9pZzPMK1D+Z2ml 8klCnxJ/MY+CPOEr5P1Qw1soexkRJBoF6tvjdHY39fxdutdbJC0DRyr8DGdDS3MifEDrG8P4rpmH 0jQ/x7LwWSovp/GO0Sg+IF/xAVliBvWTvD1/AnuoWUxjn6X2FnuSQ+UCAXJX7sc06u8LkA1yS6hv 5+ha0na+RJDRxumqKsyB+SrN/wa+Q1gGkstoHY8KIuon/x0onydpv1Y5SnuD5HyaZBYKAvBfIQet e5RhVgYzoEmiefgHuipEvJ104JqAs9f1f9k79zgdq/Xhr3ut+75nYizSEOPQmJyP45CQiIYZh4Qo CeWYhCbn5IekwpYolYQklYROyDmJIQlJTpVtl622CjHJlnnmXdf3fvbnzfx+n3e333f/9+6Pz+f7 XM+1rnXda13rWute636eeeChKnwePx2QR9L3+cS5JX0cRK3v4FfwPomY22VJLybJrtXJV0hWcA8a grc+tLMLfsLgOVkB4tkovVtPey6GFYXBOfgF3Ig+DbaVNSHac4qlTodNgoPcR0RuHe1C8fMZ3I6f 7fjZjp8vsR+A/QDR6Gw0TdF0iHatIqvz0hLHL+BG9GnIYl8k2tlylY0R2Ue1wU8bqau7IneNZPHj uBF9GiyHpiz5w34Dn9/iLRcugcvhMl/ugJn4zMRnJj4z8ZmJz0yilCmeTXWxNNWJwBY8bEFehbxK euGiuoD2C9+L+iuya9sC/Cyg1jk8iKYR7fw1zp3MLGlD56AOs1VG5xFfdpub46cDuco2/wBzltOB WKpoJ3+cvX1pTgFZ8GO8lcb/eXgALqNuN9iaumvQfwd3+S5LwzTpV7hU6A8SG393sNbNdK4VDgvk PtWDWGUTgb9jbyWq4VLmdV1a+xl58i2cGT+nHGR0csjJg4zaQSJDfsoscxGoLCMVXO04jzORxrI8 lp8hT+bqTaN8YyzeEI0xjJRB3wb7b+GvcAnMYSe/JDzBVUSTL+PixlfkE3Ey1shroswRjcuEtoxg W0bcnaPVZPO5O1d2CAoLQ3duzdsjMzFvT+BG2bzITmmnxMRvLPcdv7/I5h34DPolsh/zX2JVxN7t jWVfdA1127Evuh/LD+W86W+XVdpwfjRd5bzsF6P0PWq9Kkwog74kHi7BZdjfQ56Ml7EwqyS25ihy Jqwv9FNljPw0cmMK9h+QUYeFwWJs6pMVKWJppjKyPyEPorQapaXIlgw8RGfVZTCLazVnV/ASd8DW EjHzLXeQKayNW7lr5Mj+xCxkRzqDe9Ai9ofj0DzGruYUfjbB/fALeBg/x+FuOJp702Hus2uEwYfI 4+FaVtfz3IOekP2bX4Nd3OG4vBouhVPgKSmVk1dwkvi3wTIJNg7vdIxOZJwQzdo4l8IpUDy8g+UY aq0SjaNoOoom6EVW9GCvOxq2g9nsDIex/2zNmZQdrF+Z/FnPtbA0U2Qt9dE4Si++x3OlOFfDpXAK dN6CanImDT8gZ7YHJV2twnhbCPtCzqd+Mn1/CHl1nKvhUjiFUunXQxIrf6PICeXCF2A38U8tP06J D2cEs0ziYJqz6xsX53yYDe+G5JLs3MJCjHtPLFvL2hhUCrY7+XTwoeML6A/EmQ3vhttgHck3SnPQ 5KCZKntd85bMUO+/2EuXhzfC0ewtUzkHNWbvWpNd8QwyajQZO0P2gbo1nt9DfojT60ra9jX6r8WP 3472HxWNXybO+TAb3g1lflWRVvnXyBk2fD3KeZkR+jjeCsOF7BAmMo+S2T88SP7Po/RwnPNhNrwb bsPGxdOvIFcJPpTnio5is5Zaa5GTicB5onQkWMpcKC+lETmxnpATq/+9aIKN0hJ/NfJpZJ888bEf F/zAKESU0+seOb26aEhW7PYn0jbJWIW8lpavpTRaRZvBwkGyo5LxCkqHnZy8SPRBBTL5a/hQfC2V lWcDa+ksbKZh/wYz7ifmUWFW1EaswHOR18sK7PLK1Qo2My45+OT0ap7G8xC81UBeLedfd8KV0mws NwgTN0qGJypOW8/jmWcmCdFq/wmnmynM0JPMoFXMjusgp2OzHA+v4035j7laG/DzvrTN5zmVz4nY jYXcQ/tzFh4usvNwCu5nXp+C+5mtp+B+Wvuek5/kimuI0iXZA5gXWZ22Q5+2rZczsv8KHCE0PDkx O8PH5X7HLJ6FvAr7l6j7JDN9imjCgbIahPej/xD7Y7ArXBieFyZ0lzsdNq9K5iSUQS4J6+PtEvaz aXMhuTv4xeU5lV8nSCF/RNbStuBHGX2/OHNnXHTeJB+WBTskT0Tvfxs/U8sTy6WccRozrzPlHpGQ xdh9wUjdIHJYKCjiSi9wz1orJ2KXvbImZEhpQhZ3loUym9x6tQ5uY11aB+Ue2pbnSDXQH0V/FP1p 9MfRH0bfA29fc5Xo5DWOO+N+uFauGxyTHoU8jzXvcuJexD1ujtjrj+R87Va5u4nwr7RZ1qXGctYO izDrTzG7NwldJHexztShJcLdlBZmX1RYdj5uPcxjLsxnxZDS8XBKfPWQWgdZNz6Qc7ezmYt+Lu1n vQonOHk1bW7ll3F8WeinEv+36emXjM4obO6IW4qmPOegj6WP/pVyRjY8VTbRqe0Qp7YdrMkPE4ey jHstzmUvkC2lArcWhYnU+pUdwltyHg8G+e5k4c9gjR1K3aHUnY68RK6lr+eKfRiXlzj196NHT3DC 3c+M8NE8KadyvwbtvAv7M1yRVgWTkcfJ2dw8gBzZDMFDQ9hT9ktu3yizcq1/tdwXaOF35Hl0mm5B JmTS9zpmg+tXd/ETjoBjhf5Cfzkrp8yIm0UOxgRjaJXEsws20ecdG1nNAik1w+UuFnj4KUb819LC V+XcbY4gn5bTuqmLnCmndfMmfSkqLQmYQf4dfmmnWUD7J5rTjhOMywT/pHzKE77CnrC3nNZd76Q9 ZeTMbqbhc3icEsMi8A45pwdr4Z1yjjC/Sd/DkkSgLWfwb6h1j5zTTQnkTZTm0p6/0cJ30f/MZxmp EpmwKldvBu+mv4Nhw/jeUu6qpam1S07u+nM5uZsniE9pnh8eo4W9YVtGZyrj2E5GzWWvo16Opizt nMspZhZsHsmcUGYx12Zx0pklpypX6k4iQRV21JuxfBSuCh5jPRTZwnYR8dAOD+3wkInlKc56NUTj 10BzEM1c3424R11dET7Oefk2zsu3cQprzPnuBTkruUxw9nogloe5Ykn2n7XwVkvq+hnIj0RE84h4 c9yIPg2W487uIhN8Ru8G+e5UaObhszH+o941gw/L2dO1n17gswY+a9DTU/T0lMTKv0M8hxnBPvio ZBEe3o5IfPogZxGH5mF7YiW8lfP7ETm/u160l2df/mdctz0z6Es8nMNbe7lbSavcyiN80a/k2Muf 5PRjWFE5L7vztZROhWXRNPMnOznbl7bVQsN665djLH6CPwvNTmGwW+jXgo9I3aA2VymBzzawCVyM tylRrPBwGlYlwg/BIbLiJWyXCCR2IJ4XOPfdz1P6ISInhNz1ektpUIUI78QyA7m/yAnbxVtiB9mZ BDHOg43pV5QbjRjlDMZlHnIyHppi86Y8HzD3SPz9FEbhbXKjgtzFzAnpnVmOXAx5PDZHYS1qpcFk RrOk1A0WyYgHi9HXx/J1RnmqyPonNI3DhnC25BuWpWU0XZ48xhoo3IvPZciVaHMyMXxY9M7yAq29 wAzlk/r8N5SnTP7HyMvls2xYL/915GpwinxKHi99Ay7CfixyxFJwFvqo7grkFXhbBr9G8zXyIWyc XnfKlyeiteBjcBRsDg/B8UJPC1UumnpQCc0A5Gfha/DKuCyfGhyk7jk0s2Araj2FnEzpMXgRDVfR ndGcRo78N+Xq5+FhSv8ON+LNYNMGdkX/bVyWNixBsxxNJnI+taojn4Bb4Cr4A5btkS8gh8gxWAp+ E6suO0Pag736RTQmikxZmCIaj157d8A96L9C3gD3YhNFr1OshfPQIBoLkXVzuAAujEYBuR5U8Fn4 Wkx2p5uj+IvGewueo/RTPM+Jeod8dRR5bGLYVIj6guYYrTqB/Fm8Ly3oV6KrO5a640SjiI83Act6 sQ70Yi4tn0tr59I24Sw05+APaCoIVSSXhSnwOFesDFNhXfgd14oy8Gnkv8KUWEvHLshXMbKTo5wU vV6BXDMmp+8vkJugJyt0gjAk08LRQn8tHvIkAuEQkYOdjPVrUWTyX5RPG7H/U5QbeHuaNvyKzd+J VSeZlW5OlSL/hTOjUc47KzOOno6KU8NUx6thczie0vF4Gy8aF0/Rt0ZfD6o4U+W+gPxsnGLZgWgf jEc+lVFYAEVuJXrzFKW51LqOFkYZnkuPiL93JBoRevpSlM/I/bBZSZT2RauHxMrfT8Si+ZuMXJbI bMF+S+wmeSqFPAo/I5HnCw2z2LQhAy8Qt1mUMppeOfQ/SAy9S7Q5JHop9CiRKMWELq8iWfpIrLw/ wSgPe8eZSt0F+BH7PfjcR+kbkHiqM/T6JJwPP82/yjGPPhZC8w5yOeRURq0j8m5a/j2lpUV2K8YS p7mJ0uFwLqULiADZbuoiRzM9RSKmq6GPZsTH8EU898dDfzwfiEdJ5Ghl28W83sps/Y5RYFXxfCJ/ A36ilXA3/Ft+fYkk8s5oDcRyGpbXRmsgV/kMPbPPn8jc2Y78a36ma2d0H1nEavOFxMq/Abk1+lP4 +RWZlVBfAWvAtGjOYrMdvh9fna5z5E7h7cBmZTSjISuAnk2UmmGzH0brBnmruS+4qLozhWHue6/D YTBaK6rC5+FI9COQW8JBZOBD6N+I3wsknyfFZYlAdO/ogT1riO4T3VMYzZD4l4Kz4B64AbKee+8w XvnI6+FF6u6NxguZSHqnkQfADkTpPHIRSjcit4FdY+elhei/xedMuBwui8/f6FqS+dvJ/PPMiK4w E/0W5EbYP4I37jveNq4eIze4M3qs5KY0lhvJFmTvPKvxAeRl6LshR+sqox8uJaOKwUdZYdifhOXx Fq1IXWntqvx58hkTHvJjf6K/jl4OvMg63JmVZDnsheVF1uEk+hLdp5Lj62oquS0rQ1M0TYleU1aV 8+iLEIeNccraa7BsE6d4WELp8jhTue8MJoaptFPWpVRKd8FV1O3IM8ZcnuGX5Ulj2fA9Z5kU/3aN fDulEd/JyePZcjX5lqO3R6iX8vnvNs6ePKHy/urLN3M2cyLj0xadERaWmc4nOLtF1h8in/UPcVbl My/Zn6vuurKMizyRMNX9++Tq/iuyxxBZn/J/lmwUmrP+a0qeLzlL9ZXQG0itLGGwlGcaIaztj5O5 iYclvtv3mh54uCSlYRdqdYYN+H7CBZjop8iIm4clYmar2IisJ8pfuOjBQpNtjuLNWaodQi8tqoVm n9D/Ueh6IVxknpRe4CdDnironMgPpd2EwSQ8XIBH4TT4rpHnOdWFeoOR032qnOv1BTTFg+60U75F liQatU9k9ZXQ2Yu8Q+yDpvhJpVa6ke/vVTZzZPTNItq2TJ5pU+td2ARNVbEPNlHreLwlUtoNzQIz VlYb9M3ilO8R+XFviyRKtG21yN4x2mO0Jwxy5VdvkLXWovE2USrfQK7vfcM3ZuVbbR31NMda8tRF b9BPyaqrn5CW61dlXousH9ePO47X8um2FntvFuwsNPdj86zmu456pmMdM9XxHeSa5nX8ONk7hyV1 dSvqPoV8Fd7OSZZ6f+bqF/VVMpe1ZEU3XYp2FpP813zKr0OnaaGLylzWVWQui73XAXYSql+ExuAh C29ddWlZM/UefIp8Xn8rdw3kZVi2x0OMutcgn4AfehLhlbThpHets6ztyRNOty46zSVPPmXO83Ll XqDTZV3VE/nUXn5Z9gfvmLRH6LXQJUWj18idy/ur3HNhWVhb6Lw5qm+RZ8Li3lEsj8pMR/7KGyt3 E3zu8RY7zva+lPuRtER9h4dfpCX6klLyLXT/jDBMRv4LchG+nV4Y+Xr0b6FxfvyXQ+fT7w4z4I9C 8z1cLgyS0F8Sah8+iaYqNj2F4UEsq8P2lKYh90HuhuUJNOj9acKE8shVKP0A5qLhKuYT5P7IE2FH NJPgGKFHa3UzSj9GPkZ7QmxmwaWUbkN+B/kneCu8Ez09MnnUjbztgo/C++AXWDZApl/mN674IPJW 2nMAnkTzCt76UasRljvRV0BegTyfmKxBHg1fgtWo9XKCu/uEZaLREdn/EeZHYyRykITmEvJN0Rih eToaKZFNT9gHZuOtVzRe1EqIRg2ZmISno1HDfjk8QWmaMKE8mg9oWx0sp8NBUXy4+s20cHMUE9G4 e6LIUcSIs78INuWKRNv7mVIiqTfggawLZsMc7BfCffAWSK/9KNPm087x2FfCAzEPLG0gf3Rlcu8K 7I9j8yZycyyjHGsJrTDxTambWIJ2Gmwy8fA+TEZfhl5XJTI7sX+WUuaIv59aFbkWsTWzo3lHDA9S l9j602AV/LyHTTr+iaduQd2V6JllQZSrA7lWNBPLR7mHn0+RsdRTqfUDNs/AKEOInhkWZTLXrUCs Vgi9n9G8yLWiPLwO3gA7UXcvcn081IPfwb+jf5xr9UW+DT/0K+DqQUMsZ+BnDjKR16wP/mI4CnbF Jrri5zDKkPWU3g8ZF1OaKz4AiXwCGv8cVxyLPlrTmIN+NLuZuUFRNMUhK4MhKwzedLRSsaroM9hT 1x8B34BL0EdrI7LZg2Y78lGuTl4Z5o4+Sy2yLohmU9SjjdgUwn4emmjcN6HvDFMgbTasmeEUfEat Iiv8LyFzyic3PFoeTqDWw9hfRGYm+uPgIfSMqSH+QQ/0rFE+q5ZPPmhWdX8AXId9LjkzkfyJ1qul kLUoYB6ZR9FEK+cp6kZjyrgbRiokl8xdkLlmZkKyN2G3MJGsCLh/BWR7SLQT6HtIqY+9YY0yjeGt cnWl5AzivxyTT4u6wwz4o9B8D5cLgyT0l4Tah0+iqYpNT2F4EMvqsD2lach9kLtheQINen+aMKE8 chVKP4C5aLiK+QS5P/JE2BHNJDhG6NFa3YzSj5GP0Z4Qm1lwKaXbkN9B/gneCu9ET49MHnUjb7vg o/A++AWWDZDpl/mNKz6IvJX2HIAn0byCt37UaoTlTvQVkFcgzycma5BHw5dgNeqWoW4+NjchP01p NnIv9AmQvoSnYR1Kp8NB8GZqbea6ZWlh1HL66y+CTalLr72fKaVHegN1Gf1gNszBfiHcB2+BUQuj EY/6NR5WwgN9Dyw+GUddmRy4Avvj2LyJ3BzLaKxbQmolUppYgnYabDLx8D5MpvRZZDLT349NRTwT GUP7zXuUpuOHyOgW6FeiJ3uDKAcG4i3K8ChXP0WPjZ6K5gdKn4GMjiYOZhh8EW/ROF4Hb4CdKN2L XJ9a9eB38O/oH8dnX+Tb8EPLA64SNMRyBn7mIBMrzczyF8NRsCs20RU/h9GYrqf0fkgkTWmu+AAk eglo/HNccSz6aDUge/1oXpDzQVE0xSFzyjCOBm86muPMR30Ge+r6I+AbcAn6aFVBNnvQbEc+ytXJ BEOG67PUIk+CKOejHm3EphD289BEI7sJfWeYAmmzYbUJp+AzahXj7n8JmQU+o+/R8nACtR7G/iIy c8cfBw+hZ0wN8Q96oGd2+2SCZiX0B8B12JDVfrSSnEKORorRNMQ/JEPMXZCcNzMhuZewm/xnrAPW 84BcDYlhAj0KKfWxN6wPprFQfakPK3kqstuVVoyeY5gZTpPFuXuAPG0wi3iS0IbSBfK3sSZVvp9m 5vAsRYtG/w39DNHLFyyU/LWFaHoIg31Cvzb6XOpmU/q9MByGPABm4e1UZMl1u8WfZlRU8oxCzoYL 0DwWf+JRm7+tk6cobXl+cpHnIck8G1mGfrHU1XvRDKD0OWSNh1NwFFxC35OEeiIR6CJPSHQOTy0a IDcw70tdsVH5PK+4Kv78xFH9RWyCevjpTK0MnpA0EY13lT/P6UvGn40s4xnIMp6HOMaezpfnVB3z d8vai9xNzrZ6r8heK+TulGYgb0Q+hOU45ETkJpR+RK2TaIpH3tB8E5OTfk1silMrHfah9EBESlOQ L1L6Ah4qon8VfUPk6pSGyPciPxG1QWTvcNQGSseIHOucf95lQmU076rSjkeQF4hsinKWzxeaZvAs movIc7D8szDYJ/Q99BouozRR6OUin4Lp2CtsZsDqcDKlo2jDbOQ+yEu44g/YjEXeQelg/BTC/xa4 ON5yackgNGvQbIDTID01WZRaNBNj6/lf2MXzppg8CUzF89B4G0T/lYyRaSZUX1F3BZyJN5546ONo uoiNXzkm31VrTmmL2OuOMdXe6YthU1c0+kzUZjwvkjaE5dBsFNmbib5z7B3JT7H3t1J6QEpd32V0 kvDcGX0pfD5F+8vkX3TtnERrf6FtR6RWkE1fTqBfSNaNl1peQ641FjkNP+mxS3yCcEniCacJ3W5K eAxNWWxOIBcXmptpVQNGLYdrjcHzAFp4TBj6xLZqlCH5XSXrxEYXF438/o5bIZllfjHpS1gK+xMi B62xSULTPcpDol2WqyQRmeISMe9xet0tJs9mB9PCJciFYndIjsXkaedVsANXzyEarZD7iKWXS610 5PNY5uBhJvJ09AeIxi70ldGco3QWmiN4m4WmOZanhW7FYbyiPKT97enLX2jDMTIhyuTZ0mt3CjhK lBh3OJGRysU+hofaXKsJpenkzzH0jYRufZdxaRO3ER4nB/bheW8U/3g0pOUZ9OUYsSqJvgjshuXg +HUvMS8ukXtnyYTIUuJWXmSX22fJZLHpBWeiuQPLFK6VguVuauVgMxeuobRDfP7Wc30JafNK+vgp +rLwA9ozMLKkv0OjXoulyyKeWpNRYTyqi8hqoiGR8Qbi+TnWgU1Eb0v8WuKnHiNVMlqpqHWKWluw jJHt6ViuJDOTRQ7TVFEybT0jLu2fF83o+BwRbz0Yo4rwHlr4Y3zFK829Rq6yKz5n57jSt6O5LN7c avkcrapHrWhdFc+TeUp8SvUjr/rJPT2/k5NvJ+tOYsM6YKJ5NJ26HfQnZP56RlP6uDlaG7GcgL4L kZ8tdOvSetYKWVWiEVkCEylNpdct6e9ROANewnMG43UTTINt4zayyo2Pj6OsbM/ImunyYT2z6XWy 4hKf5F4iVy+Rz5cYC5EvELeJ8btYaTTS67n0tGl0F2PNOcXobBAmkEUJ3GXM91j2g9zj1BnJQ7cH /po18CxroKwwXWhnE7I0nRzeS1azFjnLRViK/VvoB2OZhdwO/WJafgB5GfrWsf0wm9l3VvbkcpXY nPxvGK/OMlsZ01voV1p0X4t9xOf1JaS1tHwSfUnFsnOMPQ91y6ryzmdKfGSdnLdcPCvF77wpX/5O J/6kUagKoS8keqVEE7tLvmUd6y7fhI/x9yCxQsh1kesi15fvaccayHfpnT4b/VLku+X7Y/LNfCdv Qz6F/KPI8lc8ru46+ZUb9A3k24DOz5v8Nssv/L7NBqH8HYFS8nfusWT5a45Ysvw9SOzdcLD8yk3C I/IrNyLnbRQ5Nil8Sn7lJuGM+A+PCxNOI38p/hO+R/4NObLpBOtj2Rv2k9+9kbblHYvaHD6P/SLk qNZJ2pyLviL6YsKEm+hdbXia/k6mdCVMQH89li251o/od+KzHpomRCbSXKT0LuynccWdROkinMDV W2BZg7pimY6cjlwv3IH+AnIN/ET6yrTkduRqyHfi56AwMQGZX/JJTKT0LjRT8bZWfgMHD9fjoS5y XeT68vfyzv4z5JKwBLVa0eZ6tLkPozyfnv5CKW0LX0NzN9wGcym92rFOwlvIb+NzE/J0bN6Dz6Bf ibwP+Zy0UH6Fw7VW8rA+n8ubvHxk4iafpMfq5v1N2pPHWMgn705zVkrzNkokI01sAkyF1MJD3byt WFI3j17nzUc+js+PkA8gn6KUjMo7jOY7/Mg3cJQq5E1JPKlM34eGDVbJ9w7rf78aP7j3iKHqXeVO frd1bpmq3MkiP1+VUEkqVGXVtaq4qq2uU43VTaqtukP1dD46qYfVI6qvuk89oEaqJ+L2RVSCKqcq qqtUHdXQeWmh2qluqpe7amc1Tk1yK8cgla1GqSn8H4NRHasS3ZpRSSWrdHW9ukG1dKvznepupdVt 6r/Uo6q/ul89qEarqaqkMm06dsxSbTvfekuq6tOlc7tUNQcvV/Obode4tbmy81hXNVU3q0x1i+qu 7lFGVVdd1Hg1WQ1Qg9UwNUZNo84VKlVVUXKnu1FlqA6qhvoT+lKqmItDBZWiqjq/9VUj1Uy1Ulnq VnWX6u3aXVN1VRPUY+peNUQNVw+p6fEWXKkKqzRVRlVzHhqo5qq1aqM6qh6qjwpULXW7mqgeVwPV UDVCjZXfMu1bb3hfczvsBQfAoXAUHN+39+AR5nE4E86Fi+EKuKZv7+H9zRa4A+6G++EReKxv3yHZ 5gTMFfoaFoPlYU3YpN/g++71W8P2sHO/oQ8M8bvBXrAfHASz4Sg4bsCw3n39SXA6fA4uhEvhSrjJ Oe7t74C74X54ZPDQkUP8Y/AE/BGehRdgTBj4gx/oOzgoBIvBUrC8KxwWVITVYTpsCJvCljDrAfHT AXaB3eE9cAAcDIc9MKzf0GAMHA8nZ4t+GpwJn4Pz4CK4BK4Y7sYoWAnXwS1wB9wNDwy/b+iA4Cv4 DfwenoK58OLwIX2zQwULwWRYHlaF9YYPT68bNoUZsD3sAnvAfo71wsFwBBwHJ8PpcLZj/XAeXAyX wZVwA9zq2CDcBffBQ/AoPA5PDh/ZZ3h4Bp6Hl4QJGiZCO3xk9vCEZJgCU2FlWBPWG+EimdAINoMZ sC3sCG+HshvXbu1J/hdejZvnZVTZ/yvJ44dD/88M3IoRuFU0QSX+2975vItkz616BVnkD9K4da4w v7n8/yJ5bvX+n1n8D1MzItp5lXc87ZH7g+wS/zCv/MMs999Y7A8zlZYaXr3fUXrwe539pzTuTlVS lfoXpauRtLs/pf1Lr9eqiv/SayVV+V949dyd9J/zn8fEc3fwf86if4h13W5jhLvrz1aL1Uq1Ve1X x1Wu53vJXkWvgZfhdfH6eSO8yd5sb7G30tvq7feOe7na1+V1ez1WT9Nz9VK9Tu/UR/RJfdEUMimm umli2pruZpAZa6aZuWapm4NyrcQoZ02HAu/7FHg/vcD7Gb977xcoD900P6QSvN+9L9Tg8vdJiy6v b89f7j+5++XvS6jL/ZdILvC+cgH7rALvexR4X6A/JY5c/r5k1QLvOxZ4P+by9pddeHl5uQ2Xv69U s8D72r977+ZfpfQC5ZN4r936UDzqYZWO0WvVqOe+y7mSbq2qHNfujb8eib8ej7+e+Z+sq78bf90Q f82Jv+67vBU17OW9rLHu8vd1Jl1uX+ery9/X3XX5+3qrC7xfc/n7+l0KvL+9wPvsAu+HFXj/3O+y zAkN5xR4v+5y+4YFRum/le8u8H5vgff7Lh/FxrsdrYtMX+9ZNcCbx2rbx/1TbqbOVl5QLLiSe0Vx FSa1sTlJWXar3Wy3OE3o/eT95OzOeGeU5531zirt/eL9ooxtYVso395sb3b3TckHbVqZLLmeLq5L OI38BZGV9pgirmZt976kO40MU/NUjjqmLnrJrg2JrlXJSZ2UTspK6uzYJuk2x7au9cXcmpzqTgvp 7szT1H6vjC7m2vQ3XnOsO2npEu79D7zm2ANKu3eHHHPsEccdrq+SoSkqzR5zbd3sSv/Ca479xr1u ce+/5TXnd5bH45Z/jVueiFt+F7f8R3vb0d72tPcW2vuPkg6U3EpJx9+X2J20cBct3E0L/1Gyl5J9 lOynRKsE7f65aVZYyze3i+liLqolXFRNUuukTBf1zXazCl2btrhIGWchn0ZGd303tVz93oyXYqQ8 76J30Y1avpfvohVot+/Bb4DfEL8JOkWnqESdptPUFbqqrqoKmSw3moWDPkEflRT0C/qpIsGAYICy wcBgoCoaDAuGqWLBiGCEujIYFYxSxW2qTVVX2TSb5vpU0VZUJWxlW1mVtFWtO/PZ6ra6KmVr2pqq tK1ta6sUm27T+V3u+qqsvc5ep8rZ6+31qrxtbBura+wN9gaVam+0N6oKtrlt7kZH8u1a8q2izbSZ qpLtaXuqyrav7auq2P62v6pq77X3qmp2sB2sqtuhdqhbKLJttqppR9gRqpYdZUep2naMHaPq2PF2 vEq3E+1EVddOtpNVPfuEfULVt1PtVNXATrfT1XV2hp2hGtpZdpa63j5jn1GN7LP2WdXYPm+fV03s C/YFdYN90b7o8nO+na9utC/Zl1Qz+7J9WTW3r9hX1E32VfuqamFft6+rlvYN+4a62b5p31QZdrld rlrZt+3bqrV9176rMu1Ku1Jl2dV2tWpj19g1qq1dZ9epdnaj3ajaM963MN4dXK5sVbe6XMlRHe0O ly2d7E6XXZ3tLpddt9ndLru62L0uq7rafS6rbrf7XVbdYQ+4OdLNHnJz5E57xM2R7vaoParu4jex e9jT9rTqaX+2P6te9pw9p+62v9hflPzO9yQ3Pya5TCrqFVUTvBSvnJrI/4w62evu9VCPeYO9IWoK /xvqNO9Bb4T6kzfNm6ae8uZ4L6iZ3s/ez+pp77x3Xj3j/eb9pmbLIqOe1aEO1XM6SSep5/WV+ko1 R5fUJdULuowuo+bqa/W16kVdTVdT83S67qjm6xF6pNqkR+vRarPbR4xVH+r/0uPVFj1ZT1Zb9RP6 CbVNz9azVY5+Xj+vtuvF+qDaYYq49eeSaWAaqJhpaTJUvmlj2njazDfzPeOP8F/2/KBv0NerF/QP +nv1g3uDe70GwX3Bfd51wfBguNcwGBmM9K4PRgejvUbB5+EUr3Gh2wr19k4XeqKw58WSiiW10g8l 3ZW0QL9VpF+RQfpckQlFpuuLVttEk2gr2AqmqL3WXmuK2Uq2krnSVrFVTHFbzVYzV9katoZJtrVs LVPC1rF1TElb19Y1V9sGtoEpZRvahqa0bWQbmRTbxDYxZWxT29SUtc1sM1PO3mRvMuVtS9vSXGMz bIZJtVk2y1SwvWwvkyb/ObW51g6wA0xFO9AONJXsEDvEVLYP2AdMFfugfdBUtSPtSFPNjrajTXX7 kH3I1LAT7ART0z5iHzG17GP2MVPbTrFTTB07zU4z6fZJ+6Spa5+yT5l69mn7tKlvZ9vZpoF9zj5n rrNz7BzT0M61c831dp6dZxrZBXaBaWwX2oWmiV1kF5kb7GK72DS1r9nXzI12iV1imtmldqlpbpfZ ZeYmu8KuMC3sO/Yd09K+Z98zN9tVdpXJsO/b900ru9auNa3terveZNpNdpPJsh/aD00b+5H9yLS1 2+w2085ut9tNe/ux/djcYj+xn5gO9lP7qbnV7rF7TEf7mf3MdLKf289NZ/uF/cLcZg/ag6aLPWwP m672S/ulud3+2f7Z3GF/sj+ZbvaMPWPutGftWdPd5tpcc5c9b381PeJnKdn5NGCtrebSOfB6ej2d ur/XX3n++/77Sod5YZ4yic0Sm7nZ8+9ZjV3m/mc1/v98Nf7f2ZdC9lWX3ZZ3X/jlf3LsPzn2b8ox Lxjk9vPFvDTdwLT2u6myqolqqdqqzqq7Oy8Mcvv3sW4/MO1/sfcdcFUc7btTds+csw0EBEQlqNjb ARtYY+9dY4kaRVGxoiLYFexRo7FFsYDYexdj773Hhr333iv8331dDSbmJjffzffde38f82Pe2XL2 7PvMzPM+M7tnl4wlsSSBLCAryDqyjewjx8gZcoXcIU9A2RNqo5qjB+GObo4IR0+03R290EY6eqON cvQFGwGlfmgjHP3RdncMQBvpiEYb5RgItjvsNwhthGMw2u6OIWgjHUPRRjmGg42E/b5HG+EYgba7 YyTaSMcotFGO0WCjYL8xaCMcP6Lt7hiLNtIxDm2Uow9hsDUG8u6OYZBHOn6APOpfQGQCet7NMdFC 5icLmUkWMpMtZGItZKZYiEy1EJlmIRJnIRJvITLDQiTBQmSmhchsC5E5FiJzLUTmWYjMtxBZaCGy yEJksYXIEguRpRYi48H/bo7piMgsRGTBv4jIcguRFRYiKy1EVlmIrLYQSbQQWWu1lZ8tZNZZyKy3 kNlgIbPRQmaThchmC5GtFiLbLES2W4jssBDZaSGy20Jkj4XIXguRfRYi+y1EliEia7ClbEFEdv2L iBy0EDlkIXLYQuSIhchRC5FfLESOW4icsBA5aSFyykIkyULkjIXIWautnLOQOW8hc8FC5qKFzCUL mcsWIlctRK5ZiFy3ELlhIXLTQuQAInIMETmNLeXKv4jIbQuROxYidy1E7lmI3LcQeWgh8shC5LGF yBMLkacWIs8tRF5YiLy0EHllIfLaQuSthcg7C5H3FiLJVltJ+YCMQj4go9APyCjsAzIKt5C5hYg8 QESeISJvzJZivqfRPG+cTWtIctJjLI5X4zV5a96Gt+PteTfenUfxnrwvH8aH8+/5CD6Sj4KxyxV+ lV/j1/kNfpPf4rf5HX6X3+P3+QP+kD/ij/kT/pQ/48/1wuZ7lOgRegS+YLr561xelVcljNfgNQjn rXgokXhbHkZsvCvvSuw8gkcQB4/kkaAEevAeROV9eB+i8X58INH5FD6FuPN1/CDx0AvphXCWwYco kq/0leQnZZIyS1kkfymrlE3KbnoGZ/QcZ9cp8U41N5Eb54M6mHvAJ7Nbe2RItUeeVNsASd4B9iaS h2Q+CyyHlIOo1vd6SGklT8lL8pbSST7ms+9gj1+/lxF/4iK5Se6SLNkkIdklh6RIqqRJumRILpKr ZM53SeBbfzgF8zNMKiGVJJpUWipNDNhWmHjzOXweX8SX8h18J9/Fd/M9fC/fx/fzA/zglxA3Z8v4 bD4bjjjX/F0zX8gXAt5LOPAoILcdvu8Kv/vp6LNhr4WwdR1fzzfwjXwT38y38K18G9/+pTrGo8/h c+Do8/g8845MvgiOvpQDO8MZHoSjm36YR89HPL541C/4gZhdsTAzP/cXWxd+zmwN8Dm5E1tFBpJB ZDAZQoaSYWQ49OsRZCS+XXQ0GUN+hF4+jownE8hE8hOZRCZDn59CppJpZDqJI/FkBjDATDKLzCZz yFwyj8wHPlhIFpHFZAlZSpaR5cAOK8kqspqsIYlkLfkZuGI92UA2kk1kM9lCtgJzbCc7yE6yi+wm e8he4JH95AA5SA6Rw+QIOQqs8gs5Tk6Qk+QUOU2SgGPOknPkPLlALpJL5DIwzlVyjVwnN8hNcovc Bv65S+6R++QBeUgekcfARk/JM/KcvCAvySvymrwhb8k78p4kkxRo0JTVZnVYXVaP1WffsAasIWvE GrNvWRPWlDVj37HmrAULYS1ZKxbKWrM2rC0LY+1Ye9aBdWSdWGcWzrqweHaaJbEz7Cw7x86zC+wi u8QusyvsKrvGrrMb7Ca7xW6zO+wuu8cVdp894Cp7yB6xx+wJe8qesefsBXvJXrHX7A17y96x9yyZ pQAFmXfbcy5xmdu44Hbu4LV5HV6X1+NNeFPenLfgHXkXPogP5kP4UD6OT+ZT+TK+nK/kq/ha/jM/ xA/zI/woP8Z/4cf5CX6Sn+KneRI/w8/yc/w8v8Av8kv8slRMKm6+t1U6Lp2QTkqnpNNSknRGOiud k85LF6SL0iXpsnRFuipdk65LN6Sb0i3ptnRHuivdk+5LD6SH0iPpsfREeio9k55LL6SX0ivptfRG eiu9k95LyVKKrMtuorQoI8qKcqK8qCAqikqisqgiqopqorqoIWqKWqK2qCPqinqivvhGNBANRSPR WHwrmoimopn4TjQXLUSIaAkpFFIbSGGinWgvOoiOopPoLMJFF9FVdBMRoruIFFGih+gpekHqI/qK fqK/GCCiRYwYKAaJwWKIGCqGieHiezFCjBSjxA9itBgjfhRjxTgxXkwQE8VPYpKYLGLFFDFVTBPT RZyIFzNEgpgpZomFYpFYLJaIpWKZWC5WiJVilVgt1pjvfhU/i3VivdggNopNYrPYIraKbWK72CF2 il1it9gj9op9Yr84IA6KQ+KwOCKOimPiF3FcnBAnxSlxWiSJM+KsOCfOiwviorgkLosr4qq4Jq6L G+KmuCVuizvirrgn7osH4qF4JB6LJ+KVeC3eiLfinXgvkkWKndipmC3miLlinpgvFoin4pl4Ll6I l0oPpafSS+mt9FH6Kv2U/soAJVqJUQYqg5TByhC1t9pH7av2U/urA9RoNUYdqA5Sh6hD1WHqcPV7 dYQ6Uh2l/qCOVseoseoUdao6TZ2uxqnx6gw1QZ2pzlJnq3PUueo8db66QF2oLlaXqEvVZepydYW6 Ul2lrlY3q1vUreo2dbu6Q92p7lL3qfvVg+oh9bB6RD2qHlN/UY+rJ9ST6mn1snpVva7eVG+rd9WH 6mP1qfpMfa6+UF+qr9TX6hv1rfpOTVZTNKJRjWlckzRZs2lXtWvade2GdlO7pd3W7mh3tXvafe2B 9lB7pD3WnmhPtWfac+2F9lJ7pb3W3mhvtXfaey1ZS9GJTnWmc13SZd2mC92uO3RFV3VN13VDd9Fd 9TS6m+6ue+hpdU/dS/fW0+k+eno9g55R99W/0v30THpmPYvur2fVs+lT9Kn6NH26HqfH6zP0BH2m Pkufrc/R5+rz8OozzsjizGh/FseAQXG+cwavAvH9BK8O8f0Ub8y/JUm8Gf+OnMUYep6H83ByASJe NLnIx/Kx5CqfxCeRaxjZr2PcuoFx6ybGrVsYt27zNTyR3MEIcU8KlopSgvOmTFZkhTplV9mVBuDM aKDtsu0GvSWcoiB9gLOkT5WhyhTGlNnKZual7FVesUCcKw3BWdI5EO2fEAeog8wQ82uAAoqFCLAJ 2Bm+Qh1MmLEXS4uwZF6jcSWeJIO6G5ZPqXsgT1L3Qn5WPfBp31NQ2krsoCW8iS8ogFwfrh6pSeZ6 9Szk+9XzkB9UL0J+WL1vftJIax7R8DSPaHiZR8RjvcejfrxG44ClnYYC+W5D/WyLC25xxS1pPtvi jVvS4RYf3MKIA2rNCXUXxMy3JRVjxQhjFVgFwlllVplIrCarSWRlnDKO2JREJZEI5ZHyCI7H5Hns 6D8UYz+PsP9/x9d/T4Q1Y+hfjZv/ZMx0E61Ea9FW9IYIZEbO8hAzq2E0qw2R6QeMkw0hRprR8UNs DP2LUbHPn8TD30fDyRAHf42AqaPL/23R8FO0g7g4CeJ36qhYGtSHqT0+KA9Td9QC5fHa0h1vQXU0 AsUxHTVHHCiON9Bqv4GW+p3ZLj/GTtbx87ipuWppNDfNXfPQ0mqempfmraXTfLT0WgYto+arfaX5 aZm0zFoWzV/LqmXTsms5tJxari9G28FfjreGw1AM9S9F3UW/j7uGi+FqpPld9N2t7lH3Ygw+8MUo fAricJJ6Vj2vXvwYjw1Pwwtj8v0/jMrvfx+XDW8jneHzt6LzZ7FZe/9viM41KKNpYSjrQ3MQD1qL 1iNZ8EppDtqMhpLctA1tQwrQMBpGCtL2tCMpRDvTXiSI9qETSDkaS6eRZnQ1PUxCWFcWQfqySNaX DGD9WTQZxgayoWQEG85GkTFsNBtLJuA1z8lsIgO2xzH+dK5xNxLHPbgHmcM9eS4yl+fh+ckGHsDL kS0Y8Y9jxD+Bo7eTUoJ0mNyR08hpqLf8Qn5B08mv5FfUR34jv6HpbQAXzWAbbhtFM9pG28bRzLYJ tkk0uy3WNo3mtsXZFtD8tkW2VbSYbY1tFy1n22M7QuvbTtpO0ma2JNtZ+p3tvO0iDQFt8J6G2lJA G8SIwqIYXStKiFJ0kz2nPRfdas9jz0+32wPsAXS3vbC9MN1jD7YH073m9TO6z/61/Wu6317GXoYe sFewV6AH7ZXtlekhezV7NXrYXs9ejx6xN7A3oEftje2N6TH7d/aW9Bd7mD2MnnbAsJ8mKSFKS3pG CVXa0nNKOyWCXlIilUh6F+LsFHoP4uxm+hzi7CuarDL1WybUpmov1kKL066w/vooPZZt/3B/C4xG l+AVl6a0tbVmTao1lBQlNkt7ZANNUxC2z4Zk5ktAFcxGay5ttJY2wtJ5SOZdNrlpbmg1+Wg+CHdB NAiOWZFWhOBSlVYlEp1EJ+FdNntIC9lHTi9nkDPKvvJXsp+cSc4sZ5H95axyNjm7nEPOKeeSc8t5 5LxyPjm/7JQD5EC5AP2FHqcn6El6ip6mSfQMPUvP0fP0Ar1IL9HL9Aq9Sq/R6/QGvUlv0dv0Dr1L 70lckvgL/pK/4q/5G/6Wv+PveTJP+VfWSeCKxHCmQcJfK6TBq1nekDjJAEkC5LKDp3mIeV9afkh2 QLUo6MTikBRSEpJKypHyRCNVIRmkASQX0og0Bn3YDJIbaQXJnbSF5EG6kQiSlvQkvYgX6Q8pHfRO RnyoC3Ul6aGP+pCM1Jf6El+8p+Er6K+1iB/018YkE17VzYw9NQvtQDsQf7zLISvtTiNJNtqX9oU+ PZwOJznpCDqS5KJj6BiSB3pwLMkLPXg1yUe30K0kP91Fd5MAeoAeIAVwvqkg9rzCqKmr4KxTM5x1 ao5zYT6p5sLy4t1UxVgTQCwjC2ABoBwLs8Lmb8RYOdhShVUB5ViH1QHl2IA1IDLon1BiA+XTHpTj MOV7YldGKmOIqsxR5hJXZb6yiLgpJ5VTxFNJUs4Rb+WichU0dR+1H8kEUWQQ8TcjBMkJEWIGyW3y OckPfH6SBACLnyeFgMkvksLA5VdJEeDz6yQIxlg3STBw+m1SFHj9LikG3H4f6uq3vuRDXyqzduCL 72e+BLNg2GJ6xFktGNNI6JGMHtlA5zUmAv2yg4rrQhzol4J+6eiXG/rloSxRloFHK5Q1JD366Ic+ ZlZuKrdJNuWu8hD8Mj3Nh54GoKeF0dMgiIOzYZwwF0YbpdDr8uh1RYhPL0hViE7vYYTy4eqr+SvH VuhRftNH80l7pKjlY35rnxzQe8fQiZ/WMbqALoMlj0/7QQ/4AgbFGeCGSEhYtzLiYUM8BOJhRzwc oHubEgVRUbG2NcRGVxopjYgBI/N+xAVGX2OhzscrU0gGGIOtIf7KWmUzKQwjsYekpPJYeUVCQUMM JR1BLYwhvUAdLCIxEPtXkwkQ65PINKzztVjnP0MEv0zWYc2vx5rfgDW/EWt+E9b8Zqz5LRDZH5Kt EN0fk20Q4d+T7RDPbeQQaBxvchJ0TSZyAbRMLnIDVIlKHoC6SEMeQ4z3gREAMCGMkLoQYo4gSRlz loHUNu+2IXXV3lp5cgg+k5FO/sv74dMu/6G9P7UHEoK16sQ2XytVe3D+2h5IPVLy0zpGKuC1e49P +zHClanKLPjOLcoeaOOvVbPnwFoc5X84k0x4Dk7rLD+ea1Fgs7/B7vDJtMiFBLmQIhdy5EIJuVBG LrQhFwrkQjtyoQO5UEEuVJELNeRCA7nQBbnQFbnQDbnQHbnQA7kwLXKhF3Kh+dvmbeCBxirxdeTr P70WxKhC3eAsM9NcNJAWpWVoFVoHzi6EtqPhNBL0UwwdRn+g4+Fb4+kcuoiuoGvpJrqD7qNHAJtz gMMt+oA+o28gANmYxtyYN/Nl/iwXYFyY5gLvcwAWedE2hghs2qY0GG0zWhTtd7QY2ua0ONoWtATa EFoSbUtaCm0r+jXaUFoabWtaDm0YrYC2A0R103amNdHGyl6mldbI3mgT5XSmNd7aVdPK7nbNtLZZ dh3tRruBdpPdBe17uyvaZHsatCl2N9OCgnJHW8qF4ve0ozmBjVxAazBYygN5Y1Acpn4BTgIvoSWC jwGQN6eBkLegBSAPoaBlwLdCkLeihSEPpUUgb03LmPef0LKQt6flIe8AmoWBV5UgD6eVIe9Cq0De lVaDPJZWh3wqrQH5FNmDMPA3LeSJsjn78tYOFQOeQqsGPyXIN9pB84CPNvOOKruAPNluhzzF7iAM fAMFZi9FckLfagIxvwPE+j5kEBlJxpOpZBZZRFaRDWQHOUCOk3PkGrkH/GJdU4SW5A1t3R/akpMW psWhNVWiNWg9QKM5eNWBLgC0YgGhhWib0kVom9HFaL+jS9A2p0vRhgC7m7YlXY62BV2BthVdiTaU rkLb2p7RtOCjr2nBy6/QbrT7od1kz4T2vT0z2mR7FrQpdn/TgsdZ0Zai07H+4rDm4rHmZmDNJWDN zcQ6m4V1NhtrcQ7W3FysuXlYc/PN+rB7IOJpEXFPRNwLEfdGxNMh4j6IeHpEPAMiTonkQvDOco5c QbCnUxfzZyLm04Rr4H39OUgg6gCcDaOe2Na8sI14m99tHoWm+1Rqa7Ykk3uBTyZiW8HcvEpHXYGh CE0L4yqKTMSQX8y46k2G0/q0AW1EG9JvaFulIUTAxh/mpll31o8NYxN4LJ/PVxjvjPdGspECLDtN ma7EKfHKDCVBmanMAsbdqmxTtis7lJ3KLmW3ssd4aTCDG5IhGzZDGHbltfJGeau8U94ryUqKCrSn /qiOVcep49UJ6kT1J3WSOlldoyaqa9Wf1XXqenWDulHdpJ5Rz6kX1EvqFfWaekO9pd5R76kP1Efq E01ods2hKZqqaZquGZqLllvLo+XV8mn5NacWoAVqBbSCWiGtsFZEC9KCtaJaMa24VkIrqZXSvtZK a2W0slo5rbyhGbphGG6Gu+FhvDJeG2+M9EYGw7wOmg1HngRHmzKorqoQ09qxDqAcImBUqbG+MKrU 8b5ZA8eQLjgydMX53zR8OV9O3GxLbcuIuy3RlkjS2l7aXoJmhPES8TLHS6CtLijXSU5z1ARKahjo h6LqYlAOZWHEn0Sqwaj/LKmO+qEG6oeaqB9qoX6ojfqhDuqHuqgf6qF+qI/64RvUDw1QPzRUk0E5 NNJcQS2EoFroi2phgJEW1MJA8HMdafxXavTv1eA/Uk8fa0hBNAmi6UAc3RDH9IijP3qeFz0vjJ7X Rs/roU5q8GH0KePbBqFchZhzy2WIb+r2/9tW/Mft8UPbgSOkwZZCsKVwrGEb1qeB9emC9emK9ZkG 69MN69Md69MD6zMt1qcn1qcX1qc31mc6rE8fqDcvkt46e1U2Up29AZrX6rFmn8d2SrCdUmynDNsp tz6ryS6pPusNquQTC3zs6cgc2AuwJcvYkgW2ZPuHkTR9TF/Qt5YaSMM8WXqWheXkleWWcqjcRg6T u8nd5Sgjk5HFyGpkN3IauY28Rn4jwChoFDaCjKJGcaOk8bVRxihnVDKaGa2M1kZbo6PR2ehidDei jJ5GfyPaGGwMM743RhmjjbHGeGOiMcmINaYa0414I8GYZcwx5hkLjEXGEmO5sdJYbSQaPxvrjU3G VmO7sdPYbew19hsHjcPGUeMX44RxykgyzhoXjfvGI+OJ8cx48d9fevz3vs//Y7/0cAXN31p2N95C zC/1l+5rh55I29nOpboL2W7epfPpHp//xX06n+7wgWOwEqxZqpkOc01VYKBP8wX0GXkJGr0QC4I9 ysK6mqw2+4Y1Yk1YK+CqcGC9vuZ1tS8l81pa6gRH+TwF/T6ZV95SJ/M63RdT2d+kCuZVvM9Szd8n 84pe6gS+/EGCePBZAp8/T42+lCB+fJYApc9TM0y/Lrf6TWoDqd0fpPAvJTX58wRR6/OU7jcp8+fJ 8u/D+eIR/js/8gfzI5RcgPhZHGJ9JVDZ9fBZLB+fwGI+jeV7MoZMhNFPAplHlsD4Zx3ZQnbBCOgY OQ34OfF68/9uHvS38pp/J//iLMiHORINzERz3ENKm2MBiHWeOHowr7NQmhPG0Qyi/QQoT6Q/QXkS Nd8gPh1GXoyupg/Np9DSxzBeeYLv4XhOX0D5JX2NMfMtlN/RZCinMPMtKIxJ0OZkZoOyYOaTW1UG 42+m4ztFXBmMsZkb84ByWuYJZS/zHSEQV9NDOQPLBOXMDEZuzN98+wjE2JxQzsVyQTk3yw3lPCwP Md+qkhfK+Zj5NqApbAqUp7KpUJ7GpkF5Oq+IT5KtTDivIrubz6qTwV/ZRy5vPl1Rrki4XEluYT4r XA6DcjvzzcQQq6Og3MN8apU8WB4M5SHyFmK+ZXkrlLfZgZntDEaRzJ7N0Z5QRwcHKD1HR30+ofoC HUa9+kJ9K5S36TuhvAuUKjV8QWdwUJMpOMIDVnZhLpk+/M4aa4aREOvXwb9qEIoahKIGoal+xUpR g1DUIBQ1CEUNQvG3JxQ1CEUNQlGDUNQgFDUIRQ1CUYN8OEOGSoSiEqGoRCgqEYpKhKISoahEKCoR ikqEohKhqEQoKhGKSoSiEqGoRCgqEYpKhKISoahEKCoRikqEohKhqEQoKhGKSoSiEqGoRCgqEYpK hKISoahEKCoRikqEohKhqEQoKhGKSoSiEqGoRCgqEYpKhKISoahEKCoRikqEohKhqEQoKhGKSoSi EqGoRCgqEYpKhKISoahEKCoRikqEohKhqEQoKhGKSoSiEqGoRCgqEYpKhKISoahEKCoRikqEohKh qEQoKhGKSoSiEqGoRCgqEYpKhKIS+fiMkk9PLEnfDawHriXp2ztj0rexOXINqTTkpU4Fi49J3xBW 1WOUBqhOh03ObXDmIxNnC5uS20YlGlOEUSm+rrO2M0+qNRkSfAdkwEtKxUlNEkK6kc5AoqEkAv7N S0wlnZlSHUzyyC5m1gx6mnf47TLUu8vd78/cLrv+SHyMZy5njOTmjGFv4jmjDMhhKxlRvPiwNEdL vmh57+LXTv3TmVIJzik8ILczp43Xl1T3zGU7h/fsGtambYRfjpY5/QKCg4v4VQ9r2bVzt86tI/zK du4ani/A15nhw85pP9/SuWuLiLDOnQIyOb8yt3N371+31+ncOcKvdPeItp27hkX0dPp66cFFnAEB TmcRJ/w19tIDnQGBBQKsxf/AGcXQzKlhMd9UFQO0AusVFkMpmc82bg2/UexJjfQ54n7q0cx5J2H+ qKzfvUqeUG1mYvK0BL+SfWonTEkY3Tyw/dEyrXo+WBS5t96ZJ3enDskwOm5Q65U72/cKyXIyY/EL LnTsrYk7NudtHRvbNtvkI0XzbNZWN8y2tcJNpWTQxDzzcwTPu1d5YJmrg1zWx3ao32JRTJ8ZzfNG Vbs9eVWrYrG1MgTY/T3i5t/8Mbf3jRKTWno0byiHxmUsUmfoy7kPx7Nd6X/ZXL/8yuEDNhe9V298 jSXv5/bqGFFjqfeBiY4cmUiDMc3Diqyv6iaKf5Py7dtZrRX7nGPR3zR4uKZYM8/oKOnMi01LBkxI Xnaw/8m5Pl2bFN+34ZF9ZmbnStvgvSv9otwHX2QcGv7M6HnO6NnO6ARAMyOVomOd0T8NcP32SPjD sK7Ts9Tu57Gi+g8p+2d0/ffXX8yftHFu1uGEW+qWUU9/8i50fy31Px2V5mmT5oFx09X9JeUfh43e W/RGpiePGozLszq+4p6Qh+9OHShWrPH8wvXCkv07ltp7YMEFuc/5gFEl4lzD261PdqvpHbbl3ZGy V9M09qt5J6T30gXp9uQukjXvptAZbt9ndWk582W9DK8z7T2Z9mmdRZ3KBor3MV6vrrfpoNd+sfFx nd0bb+5wvvMLcAzLOCGnT/UTGdnsxwMu8VXfPlt+fk+DB6GVd9ept2YVz+GWMubkI/vofmt/2rmw SJ5rva7Ni7oaGU+OtCu19Vjh7y+VdptXqF36dmcLXT6eQbo2r7y0p3GBoE7VM+ghiUrCyF9O1CtV 4WCG+nPCz7oVHTque9zcY/HACs2dMbzaB1ZQ8i1Mc65WSpNp+7d85JSM/ykygH4fFAh/wACBQAYB gbBY6CMZ9EQGhYPY3Fn9ugHuzjTmgt1dadCiW9uwTm0i4GtcnYa5UriLOqGtOnbu1OrjiSl/dGJZ nJk+nJhP6u2tQv3qhrXpBEf1q1W29J+yQmLPviebriwfPK/gooAzr7MWqhy15e1X03eX7/LwaIVb x0dub1+tTsizyWx79dOVO+T3Lxm6+VCWRLVSYv/u58tvXDDaqLUza+4n8Tf1LF8dLe3/JmTy4XTl Z4+r8tXkgyvzZ95eJW+fzklpfYuNDHYNPr8x57PWxfLSwJTk7JXmrO5Ah059u25Fy/4xr5vERw8a /MOyJ2vHzzwcNKfWYK/sQ2ucd74gJZ7tel0ietOQ+x2C5+Yr+GJVvqVK35Afe7SeOqmbPmTpkx1P /X6u6Taq5f48SYHl0z1YX2VisVp1vQ+1rt1zweKhe74pGRdTa1gneXmhrb39N9ZpXWJyjQO5+xXo NKii7ej0I1WGsE5DyKwtQy/WtVjhjTP6pdPdJIWskuZUbHYIaLIsOP9/gypczHN0N187KTs5GGdG c4UheUoeBzIeiiTh3y59fGZHjdja5fLNLNfykVM1N7tIEnSjIam6DnJM74VL+lXJ9uTQhhoRCQ2z R+TqvnLI+4XVxvcg1W/vu+t9LmynkdDnKSu7a9/QA6/qHtgWt/Gbzo9alptfjjyYuCf2RIa1alw6 ffypM76Lc/Z9eH9Ot0WjLwT/UGJSuw1BHY8NW5rl/cXbJ8McPw7bmHyZrC/49GWf165u+eS7OSeO K9M+R5fEoNGXhL63aduDGweUbt963vrE9T8U3PeEu/bp9fzYpTIXeydfvrwo+cXFE/rK8JNjr9Zc E5TQJ+/xEmcLqiFFWFx0uyzDXzRpOXpZ4/XBp5qPrD/Ip8DzYpPiY7SE70aszJM4Y/b+hWf81mx2 phvs56Hn2lDnWelLzZxXx+YIG7o1/MrTuQsPDSjTNdIAjmkHHFPH4pgWLj2qo0LiqfuRDDzzH+zV HwmngNMJjFMACMcZ7Aw0FwuYi86If+TUrO38D7b/KdcknFVGHd62tfKUgwuKFlycpVH7sx02Zcqc OH7PnSWbd53Iti0wzYgNZ5rmeVv4G9+0uZeM1s97zOyUo1p/z1KlF436enmFYXpS9PjFP9mONCgX 2eTO43fGlf4RMwvsj7j+8GqLGf14YvmUEyXdTizb10w/0vtJorv+rnm7HIO7j0xcvGHwLa9VYzY9 91wT0vR+motFH2T6dsTSAd22l786YXhU8yk3F0dtLTKqgEd+97Mhe5f4zK85qc3i437Bzi6XRrWp cGVXhmd6rYjS+W/J/u0yta+8bOyOFcG7y8zu2MS7ysLRp34YWLKHUvH0rBWDsmy/8qR36+VVIjZm K111aguP5jWce2KeHlHD+zyoXz3qmL1+ZLTFNa+c0c8R+4wuZo+FTmjbkqrDPs309Q99ar+qV3XS da9T7QYWlPNlu/VlajJ5ImMWydvpOeDL3bycucNXUglnMWdwfJH4QkMKtI2ICC+aP3/Lrh3ydfxY h/ladu6YP7x9mLk2f3jXzq26t4zolr9sXWho+WCVs9LHrwQdUtxZ1Bn0cdnJhuSxDhgVFfWlA4Z2 TXWkiN90IGSbrxt0rttmut/AgtS44VW1+OK7p6P7P9B7RkTV/Kmi91OSNqzf2ZAxCe/bzJh6LUfO N/VPTU6utbmZY+XPc+7HPJ3k27nRm+ePL2u/jLCX9PTyO7pldfmK9mzNGziqjn9kP7CueqdHVyq5 5Sg0IlPXi9+tWRrm5j/+we2CjrP9OnUeq9TZl6ta5QWBeYbcmnGgabYNG4pf+nbFQHVdoQw1B5Wv mLJ+/IxGYv7E8z02Nug/e26NA08WT40tfWV/E/+S5/oXrFjjxeE9vafdXbN3akuPuksXxz48tflw /IyFE/b1yj00z5bdSe868DObgxY/PtoknZfLlpf7BsxxtfucH5Pl5rIZ1UreWZYmWw9ja56fZ7Xf Pbo4sM00YJvBH9mmcp/7yDbyf45t6oV1DO0W0aJjeGq2KewMDijsDChUKBDlTQAuBjrNRWf0nH/k 3LI7s34IlL6dyoaFtw3t6leubnm/8nVrFA1wlgvKWyioYJG8ZctUCPq4I3f3/QMn6oZ2jQxrGfqn BHVnndxyT1LPJYPKlZy9csf9atP9LwZH+jpOBlZp2ONY7qTZYszDmyXebszWZ+bb6337BR5OKjEi uMiTV6eLFfQ8PjbmbcF7bQd39Rl9aW21S2sHPy2gsK0Jkd0KVWv6OPFylb4Z147vcTbFd3DaMhW6 HOqfvYHb0YE1ix1+c+HFiPulyNUTF1q89hpVdVZ08edhX9+5PHyzqLkuovdt7XrFOws7PD7RJtr+ ynNfX/f13a44qr0JeXs/Pji2aPLdNHta+IY0/J/d4Appvmrt7f0odK9+glTfJFbnW7Gvm7iUp3Mu YDVM7Z7sJ+eouGjShL+uLq75phtdzddmrkz9aeK8UfyQteVDgZ5PUu2PQwLkrecarkUuoBAFUl3R Bz37MM0Hqt8zdjD+8X5Yd/6xHUrZk//Cz376TpPV3m39e+a8WmPt6HzsAkVlT0lxQXIiVcoemEkl 2EpQDoxSGEsBlVnVxMkjdvHeebdOvf0XTaoa69U1HLU+X1acxDd9bXxwnObPtwdDvFbUfhe+wC3y 0/dTmyhD3uNmWQ3X5TqWRnfzZ5lHvVMO6g9h7rVfPifF4pvZCRHnbVZ2M07yHi5s1PicttzwUUxs /8+goIcxrydPmJvJ6dN58WKZjwlv1sMal+Xa0c0h9a4qkqpHutyOqj6WbMjUFPkmfuyDkk6jW5z2 l5/LjpXbKef/XJbS2rcoiXelrtyKpxPs6v9v6Psz/c3Hvyzrz3qeiypZ8+uzsLy05bnFW67t+bLl 3Ym1n8Lkftt8PHFNy2XP/jn2tWkSZzcpJHOdcrBNNZKs2bTD9qCah5+S5My8HoODHyeiFlACWdwz /Q8wqK4WvO0qH1GVvgi9mBqYzhe0dDIwMTEHlU6WQO4AdL4wCk5C5c0d87zf6084eRVKnDjnYRd8 4NdqkV06RruF/INONL+1M77paThJY9vElAfyAS27DnlfrGf98b50X/fxFVfXZRakVainvdi2/X3r zrPvVv0VWsIdqaSpf97hZhiLdNnW3JRcr5Dbdz/e2z+/+XjD/XofJvMpXw/M4wiTy3A/e/NAWYx+ 7TZVli1h0Vkyyf8bamzeXWVR9bUsL2GPPRRzo81cp/Qk3ys5S86asn9zc/KqHryx658+r5AvXstf IinBaN6lZj9tpZgM1+57+i0CAZt+bpXqzXmnOlv4x2mB6618X5rKis2OTa1adCaB7Q3rhjbj7T+m RLc4tkS0TsnbIK/jcSZ/jvODrBf1an3ZkPKmiVEDGCIq2HPokOh+CbBxQgdARRlBfSoGpNITa+Eo CdcgwsTCI8fFEMxQypDE4MzgiNo1w+jXYSmgpvgKGh6qCdgt2LcwkZ2Rr6fAtfd9cchee05W3f87 AoNbZd5aTty+OIz7Xs82a+mLv9csP7l9Y6CidD5HZl028yIlt7c5W3JrlHa4XW753Mu/j73L7ODr upcFsa7zJ106c+5u34GH+7XO1rw5uc7oavvO08lHzC5KKO4vu2c9a7N08TzFjhtbtgiF9HyZcyjV a5aG2pyELn7r48KpFR67z69ttvLfkBRxz+DlS0vZx52fblk2/hRW7ElpSGZjmfZpFpOzfrVbx67/ TDdTf3rdu8VcMnkzax7Pmbl3NBJrPD6KzxFUtGCSaV/DdnSa0Y6nDseCbfeu7Lz3Is2894vStDln NpSHBFpdK3LZpPzNsIllPbCQWs3EyGjQ2D6AvTKUviJijHtB4y0DEXh8azAasjOzglcvg1IBNDI5 mQ15kIfVga5B8LgN+QyQZUUNlBEaWQyBaex7vxd7o/fEe1s5ZgVs6Nz/V8N/4laDFCQtPIZhBiEL tBo0GHwZMhmSGYoY8sEj82kMJQwKDCEMlQwFQF46UDwRyMpgqFyo1qCCs3otqSzITy9KLMioVEAr 3liaGBkU9j/bESnJYCUyS6rD99znqRvmTHZY9IrPOJzlnUWx258/G9fNfP/A4HFd19fXX5irv16N +fm1ZG4Dd97mW+v0mfNYCl4xX/sm3ql7oGWq+dLzdi2x4XyVJ29I3tj/17h73p3NCou2u73eWTf/ 7foDdsde7Xe5f9Fxz4+XIpJd3h8nM7qejzfm6a5f17PYuffEH7//yWsnHT5rqB5avCVh+0SW7yd5 y9Z5VKxjmtVwat1EEzO1Y89SeBb0MZ3Mla9dVxdmeuSycM0mJ6WpM89X+RWULV6nfVTpeVXx9dgF /Qvfh/sbMmkLlLn8muImkzRFuLq/5kmL8oPFs/3MWY75pK16sfTW0gjl2k6Di/IiC5uY5A2amKQR ccRm2MTEAxTioHsSRa+RUDoY7NAkuiDWQAI5JXIjZoEYgXbCZVgN+YFVrYWhgRGwojWyNDaNwkiI TP9V+O5vS+yN1Ys36HCV+rr+wZsfaGUWKIncn37Yi0P3/o6T0stuKrIe53mT1qby34npvPOHvScW KpRNe7Tn4eQ+IYdHalqLlk3sTuyR+HlGa2OAVPuP6omvgo86vNitG9t/zmVSSl5YgqoT9/E2pgbH d0ozq48aVQW8y+l48stM/Oux7klJsiGzrjwVFlp4be667//DrZjdX159F/E5zc4x3Ttu+769N1t1 n4TvODFxdVJhlv1yYY5D57XPlN6b2VVZUdC81m3Woc3NnX7uVtrNwYpGK/69Om5fUsZ0YN2qouDY HRnH614b2mbMUm/4vIVtw/PLOwR1mi7l7F9/v3DTi+akFdsYywxu8TkEb4pm/fx9i1kKa7CiaHe6 W55AVm6kcFDeFl4GANkzFYENCmVuZHN0cmVhbQ0KZW5kb2JqDQo1OSAwIG9iag0KWyAyMjYgMzI2 IDAgMCA1MDcgMCAwIDAgMzEyIDMxMiAwIDAgMjU4IDMwNiAyNjcgNDMwIDUwNyA1MDcgNTA3IDAg NTA3IDUwNyAwIDAgNTA3IDAgMjc2IDAgMCAwIDAgMCA4OTggNjA2IDU2MSA1MjkgNjMwIDQ4OCA0 NTkgNjM3IDAgMjY3IDAgNTQ3IDQyMyA4NzQgNjU5IDY3NiA1MzIgMCA1NjMgNDczIDQ5NSA2NTMg MCA5MDYgMCA1MjAgMCAwIDAgMCAwIDQ5OCAwIDQ5NCA1MzcgNDE4IDUzNyA1MDMgMzE2IDQ3NCA1 MzcgMjQ2IDAgNDgwIDI0NiA4MTMgNTM3IDUzOCA1MzcgNTM3IDM1NSAzOTkgMzQ3IDUzNyA0NzMg NzQ1IDQ1OSA0NzQgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCA1MDddIA0KZW5kb2JqDQo2MCAwIG9iag0KPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5 MTUyMC9MZW5ndGgxIDE5MTg4MD4+DQpzdHJlYW0NCnic7JwJfFPF9vjP3Jul2ZqkS5o2bZo2bbqk TbpRKFtDaUtLqXQLtKwtm6AgFagIguCCC4L4RHEH9+WhkgbQIjxFRfQ9RX0+3DdUnitVfG5PoMn/ zD1JaRH9qT9/v/f5ff4deu535syZuTNnljs3iQIDgFi8yKCuvLF6TFPRIi0Ir6DSckVFWXmTxuoY BvDqCgBTfUXZuNEvxc+wARz4FkB5xZjyispPnv7mBAgvGgDEL8fUjW883MI2AXzxMrCb3xvT6C17 5tBhBsJlPoAx08Y3ugtORL2dBsDewBu0zlzQ1v7S1ue0AJlzsQFTZp63xOauHlQNULMEQBExp/3M BXd8XvYgQM4+AFX0mW2L28EMdrz/YSxvOHP+sjl3Xf/OpQD12L6Kurmz22Z9rAhUYv1TML94Lip0 65VJmL4O02lzFyw5X/5g7NcAwhAAR97Zsxedo3hBMQ9gZwyAevn8hTPbvE9VLQXY9AKAtXJB2/nt lqBpO5bvwvK2c9oWzN6wb90tAE9cAxBZ1L5w8ZJgHTyG7dnH89sXzW5/9ugSF8Ag7F/srcB9K9/c Nf2DrfdN1w//DuIjgIfdX6x4gfOZ1BsXHX+rZ73qiPIZtFWBABSwnAICwPapbz/+1rHLVEekmvoE 8Xuu0afCGpBDK4hY0gBujIF2pnRfBqJsrLAHcyPkN8kLsUorUXwZHhMgAgS9UhBlMlGQfQBC0AMP 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 lypcqnCpwqUKlypcqnCpwqUKlypcqnCpwqUKlypcqnCpwqUKl4pcKnKpyKUil4pcKnKpyKUilwpc KnCpwKUClwpcKnCpwKUClwpcKnCpwKUClwpcKnCpwKUClwpcKnCpwKUClwpcKnCpEL2XSxNcmqhV 4+KomQsVLoxzYZwDExyo3jeNU3ecuuPUHafuOHXHqTtB3QnqTlB3groT1J2g7gR1J6g7Qd0J6k5Q d4K6E9SdoO4EdSeoO0HdCepOUHeCuhPUnaDuBHUnqDtBnXHqjFNnnDrj1Bmnzjh1xqkzHr1LZ5jU GSZ14T3meSpxiyhureWP1Xu+HPf6+X1hUsVNqrhJFTep4iZV3KSKm1RxkypuktaTtJ6k9SStJ2k9 SetJWk/SepLWk7SepPUkrSdpPUnrSVpP0nqS1pO0nqT1JK0naT1J60laT0ZfpfUQrYesuGjF1f6V VwV5VZBXBfma/r+rgKWy/Hbd8A7cibtgB5+ofrPx72f7ED+G+DHEjyF+DPFjiB9D/BjixxA/hvgx xI8hfgzxY4gfQ/wY4scQP4b4McSPIX4M8WOIH0P8GOLHEAWLFCxSsEjBIgWLFCxSsEjBajXkVUNe NeRVQ1415FVDXjXkVUNeNeRVQ1415FVDXjXkVUNeNeRVQ/7/oRpyHMpxKMehHIdyHMpxKMehHIdy HMpxKMehHIdyHMpxKMehHIdyHMpxKMehHIdyHMpxKFeb8WW70l3RB17vXnfrOPaStC/S/r+mo5yP C3AhvoKvYh54LsaiGItiLIqxKMaiGItiLIqxKMZiQzUXFqAVV0K+ibEoxqI9bquI/k/NFFV8rN9W K31CT534j2rE3r3VHnuxPP6OfL3F81vtlZa6+14eHRZ9lnIlypVqu/KFuNZRiz3epO/fDPd9arM6 nSs+dWptd7vM83vDGIXHZHdZdpdld1l2l2V3WXaXKV+ifInyJcqXKF+ifInyJcqXKF+ifInyJcqX KF+ifInyJcqXKF+ifInyJcqXKF+ifInyJcqXKF+SfWXZV5Z9ZdlXln1l2VeWfWXZV+bMGGfGODPG mTHOjHFmjDNjnBnjzBhnxjgzxpkxzoxxZowzY5wZ48wYZ8Y4M8aZMc6McWaMM2O1u5UDlNr8+n1L JUrW7mvcSXPp1eiLtO2nbT//yvwrm6X7/XQHJxroW6Bvodb/lnLpbh1lmZ3SvXaw94URuhboWqBr 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 WlL9O13/335H/41/6+sNv2tf/T361JywPCWu1MJwQ+o6qJuUukmpm5S6SamblLpJ3YYlWIrbId7U nbgLd2MZluMe3Iv78D2swP14AA+CPqmVeBjfxyNoj45uuCY6quGbWIhrcR2+hetxAxZhMb6N7+BG fBc34WbcgltxG5ZgKW7HnbgLd2MZluMe3Iv7oqMa3x0dfegh0VGHptAQHWW3uFUV7K79FZOttb98 clziSt2sWTdr1s2adbPm2n8x4RCk0IBGNOFQHGZ3+xbMwuE4AkfinbCDtgPI2gFk7QCyOt+JOt+J dgJ5O4G8nUDeTiBvJ5C3E8jbCeTtBPJ2Ank7gbydQF6XnK9Lztcl50dfdac1DxfhYlyCr+FSXFb9 t+r4Bi7HFaHt3+yoV4fZuuls3XS2bjpbN52tm6Z005RumtJNU7ppSjdN6aYp3TSlm6Z005S5mzN3 c+ZuztzNmbs5czdn7ubM3Zy5mzN3c+ZuTuc9Uec90fytmL8V87di/lbM34r5WzF/K+ZvxfytmL8V 87di/lbM34pufYdufYdufUeUD8WogBG8glEUsRcllLEPFYyFH+nsz+rsz+rsz+rsz+rsz+rqi3T1 Rbr6Il19ka6+yJ4+Y0+fsafP2NNn7Okz9vQZe/qMPX3Gnj5jT5+xp8/Y02fs6TP29Bl7+ow9fcae PmNPn7Gnz9jTZ+zpM/b0GXv6jD19xp4+Y0+fsafP2NNn7Okz9vQZe/qMPX3Gnj5jT5+xp8/Y02fs 6TP29Bl7+ow9fWba56Ojp30Bf4m/wl/jeyFtEqVNorRJlDaJ0iZR2iRKm0RpkyhtEqVNorRJlDaJ 0iZR2iRKm0RpkyhtEqVNorRJlDaJ0iZR2iRKm0RpkyhtEqXdS3S4l9jgXmKDe4kN7iU2uJfY4F6i w71Eh3uJDvcSHe4lOqb9LEpN24I0tkYpU6zZFDvUFGtOuN8xyZoT7mlMs2dNs/NNs/Nr0+xLoZg4 H/PCPW+caomv1f66y2yT7SKTbbbJVv0rST9MXhEeTXaaYuujpmRXuDG5NTxpyjWbcilTLm/KpZLb w7BJt2bqbxcdV/s7l694fzSaYco1m3LNplyzKddsyjWbcs2mXLMp12zKNZtyzaZcsynXbCedt5PO 20nn7aTzdtJ5O+m8nXTeTjpvJ523k87bSeftpPN20vnp94TK9HtxH76HFbgfD+BBPBRmm5yzTc7Z 7rs63Hd1uO/qMEVTpmjKFE2ZoilTNGWKpkzRlCmaMkVTpmjKFE2Zoin7zIp9ZsU+s2KfWbHPrNhn VuwzK/aZFfvMin1mxT6zYp9Zsc+sTN8fitMncAC/wkFM4lX8GmrCZF5kMi8ymeebzGmT+Q73fxn3 fxn3fxn3fxn3fxn3fxl3CVl3CVl3CXl3CVkTfPaMPaHiTiHrTiFrks83yefPsKYZ1mSizzbRm901 ZGe85nUIlboI05BAMmo26ZvdUWTdUWTdUWTdUWRN/maTv9mdRdadRbbuGMceixO99w6vT4Ze6y4j a2cw286gue69fv4+j2dGJ7rryNohzLZDaHbnkXXnkXXnkXXnkXXnkXXnkbVzmG/nMN/OYb6dw/w6 fbROH63TR+uuwHwsCG12E22v7yb0UPezGTuJtJ1Euu7BKFX3w+jouifxtOf/6PEFjz2hwy4jXcdL 972Zuupf5Dw2pO040nYcaTuOtHvhDvfCHe6F/zd1ZwJfRXX2/zNz5s65dzI3N0BYAsgiiEtf2kp9 Xz/V2qqv2v5Fq9SlFBSxYK2KSxVQEVBcCrggoAIqKgjSt8aqb+tGEEFRK2ovSwQiGpcECGBYhiUs gZz3e869hLAEJKDv+5/7+c1y5izPnHnO7zy/mZubWWjhWUQgafTwLPRwkTpVBGjiInRBhC6I0AUR uiBCF6wgSpmOLojQBRHRyhiilTHqMl2pLge99D3og0j1Y58xpW4AN4KbwJ+o82bAdaEdVqAdIrRD hHaIiHACIpwADRGhISJ1P/kfsL9sGBH1BOiJCD0RoSci9EREFHQPUVBAFNQBXRERCd1DJBSgLSK0 RYS2iNAWEdoiQltEREhjiJDGECGNIUIao5ZR93KwAsD1Cq4navo7UdPfiZqmEzVNJ1q6h2hpDNHS dKKle4iWArR+CVq/BK1fgtYvQeuXoPVL0PolaP0StH4JWr8ErV+C1i9B65eg9UvQ+iVo/RK0fgla v4SoK03UlSbqShN1pYm60kRdaaKuNFFXmqgrTdSVJupKE3WlibrSRF1poq40UVeaqCtN1JWOd8Gm n4Cf6qL4KeAK6u7DcV9wFfgDaVez/SO4BlwLbtQVRGhpIrQ0EVo6fhdlHib9L+T9Lz0r/lf2nweb dUlCiAIiuHSCa0s00UWJpiIILtLFAbowuBR0132J7PoGl7F/m64Mbgd3gF2R3jD27wPDRYqIL0XE lyLiSxHxpYj4UkR8KSK+FBFfiogvRcSXIuJLEfGliPhSRHwpIr4UEV+KiC9FxJci4ksR8aWI+FJE fCkivhQRX4qIL0XElyLiSxHxpYj4Uv+LEV9qj4ivqRilz3F6iR5Ob3CluM35vbjS6SMudPqKvu6v xJnuNeJn8hJ9qeyuu8kiXSTf0n1lmS4mNsyXy+xvvE6WK3VarkJLrUZvfaOrRFsxqmalKNTLxLt6 GbWflv1F2gup/QxqPyP7S7JV5reiaaWAVgJaOY1Wfkkro+Wb+kM5E7ylAzmb7du6XL5D7XP0M7Q+ mZar5XLb+gW0PpHWA1p/ldaLRVymyTEfm1DyciG2F+u58hPSFjMjLiFHiG0fYdtH5OzN3Jkm92Ry jyB3U3IXkvtS5tFZlBhKiXtEe/P7klg7idn835i9r3HPZya/Rj/o3mC+2ynau3P0APeferL7hTjV 3YwezSd+/pF+Tb7J7PuW+DFX8AEtFaFHA7nQatE0s3SK2qu5oq+YqUdkZ+ogq0kDriySq7gq+0uD ep3zW+HpaSIGfKBAHCRAYP46G4QgCXJBCmWfB07RaXEquEePFPeC+8CfwXAwAowE94MHwINglJ4t putXRJF+xXGJfyTwQAz4QIE4SIAA5IAkyAPMk05j0ATAJQ5c4sAlDlziwCUOXOLAHQ7c4cAdDtzh wB0O3OHAHQ7c4XQCx4ILdbHTDfwGMLYdxrYzBAwFd4K7wDBwN7gH3AvuA38Gw8EIMFrPdcaAseAR 8Ch4DIwD4/Vc98d6pHsS+AXoxt0bqdPu/dyZt/RvuCuV+FkVPvYyd6Iy85uPHFfVvCO36Hy5taZU bqsplttrnpfVNSVyR810uVPnyBrSdU2lF6t5x/N1vqdqSr14TbGXqHneC2pKvJya6V6oc7wk6bnk 66+neQPAQHAruA3cDgaBO8BgMAQMBXcCYluP2NYjtvWIbT1iW4/Y1iO29YhtPWJbj9jWI7b1iG09 YluP2NYjtvWIbT1iW4/Y1iO29V4Fb+hibzooAjPAm2AmeAvMArPB2+AdMAe8CxbqkV4x+AQsAovB ElACPgVLwWfgc1CqR8aq9TRfAvzXj+lCvzHbJqADOAGcCH5CXHAy2wd1sT8OTOCY6/SfY5/r8bke n+vxuR7/JdJeBn8H/wCvg+mkF4EZ4E2A7T62+x+y/xH4mP1/gTSYBxaDJXquv5RzFeAbEIENYCPY BDaDLbpY5YIUyAONQAs9VxWAlqAVaA1OIk45GfxJj1Q3g7vAMDAGPAMm61dUIdstemT8WF0c/wFz 3A/Z/pjtr8EF7P9Oz4334XxfcBXAH+MTSH8cPAGeBIWgWs9NCF2caMSW8ZVgXCWYoxPMz0EfcC3o B24AN4H+gPEeMN4DxnvAeA8Y7wHjPXgIjAIPg9EAe4Ox4BHwKHgMjAPjwQTwOHgCPAkmgqfA04Br DCaByeBZMAVM1SNzztXpnK7gPHA+4FpzLgAXgm7gDj05ZzAYAoaCO8FdYBi4G9wD7gX3gT+D4WAE GAnuBw+AB8FDYBR4GIwGY8Ej4FHwGBgHxoMJ4HE9OfyBHpmb0JNzA5CjJwsP9n8Z5q+Qi5jLljCP PSYGwZ93gMFgCBgKtsGl20E12AF2wlXH6Qj9HKGfI/RzhH6O0M8R+jlCP0fo5wj9HKGfI/RzhH6O 0M8R+jlCP0fo5wj9HKGfI/RzhH6O0M8R+jlCP0fo5wj9HKGfI/RzhH6O0M8R+jlCP0fo5wj9HKGf I/RzhH6O0M8R+jlCP0fm98Cc93UpmrUSzVqJZq1Es1aiWSvRoc+hQ59Dd5aiO0vRnaXuVF3GjDaN mWylW6XXuFv0GvuXTW+jO+cxG83Xpcxg09BwhWi4QjRcIRquEg1XiYYz+imNfkqjn9JopgjNFKGZ IjRThGaK0EwRGqkQHVSITilEkxSiIQrREBEawfyCaIQOqEQHVKoTdKn6gf01UPNLoCaWTxNnp4mt 08TCaWLgNPFvRPwbEf9GxL8R8W9E/BsR/0bEvxHxb0T8GxH/RsS/EfFvRPwbEf9GxL8R8W9E/BsR r1YSr1YSr0bEqOYXOkuJQyNi0Erizoh4MyLerEzk61JizOeIMZ8jpiwlpiwNh+iycCi4U5cl8/Wa ZFPQDLQF7cAw0qfYbzct09OY14kxZZH4iZwh+shZoqOcLVrSvx/Ld0RTOUccK9OiK33d1er6heIM tH1KfiK60O+V5ik2cU4ZqeWiM/FCV/sM2/w9wyqilsyz7C609LaeTv7pts2XOTdUSNo7jrRik1Pk OBeKwOkGfgMuAheDa0QX1FuAejPKLUClBQnzX1c97GnD6PiZ/U1k5kNsyKS0YbasIPU4ZstCZsti Gw+ixmm5nEholTjDPlM0ebtgg/l/CCuwOPP7yfZXpU1MZN6b2N+f664XyP70zdv40GkiRdnueiFH n5N7JrHgbL2ZozKO+lFutt7G0UJxrPCoPQZ8oEAcJEAAckAIkiCXFi8RjWQP/U/ZC/SjF2foxdT0 JTXN9/qLLt4AMBDcCm4Dt4NB4A4wGAwBQ8GdogtavguavQuavQsavQsavQuavAv6uwvauwt6G1us rUXEdDPoq5n6azmLUTRbf0qLM4hu13Lt/cUP8IlGnI2ML3Dt+aKxM18c5SwQx2S/l3aV7EGuzC81 /8D8UrPsZ/+m6yM5kPh2nDhejgdFehV3+mgimb97PxUneKeIY+itniKXErm08yPuZn/uwEy9lpY+ si0laeEbWkjLy2j/ciLQ3myvZNufVubrz4mRK4mPd1j/WSxilAqEb/4bC7kLyFlAzgJyRuTYLJqJ cliUGEosz/x6n21xIFt4grseg3FLqG8TrLuZEpGp00TEsca6Cg1fhYavQiNXoZGr0MhVaOQqtG8V bV7CtXanlv7cuTSlTG3miWnzPdq8jPp7g+uFY9ueR8/PJ30B7S2kn4vxnEVE5otFzrdqNyfbbhm1 pbiKamoso8ZKaoyo0c8+fYvZ+SOX3JHsbu0oxY5SebO9xx2wWEnzy80ZW6oomYMt1ZQ2CiUSPxTl 4mSxDCwH20QnsR1Ugx1gp+hEzb2tWrqMcXa5uET2Znsl2+tRMjdT80A9Rw7mTo7D08czYol66KOO 9t4s1H+3rX2ilzDm8lE5O/CRLvhIF4+6vRqgRadYY3Gy6gF6gl6ikxoPpoKvOP4alAHsVOtI28S2 CtsSWFaFRZ2xpjPXmp+9O8yujABzj5fgM8bTZmH/LHqmgtz59E4FJfIp0YXcCexcQ89sxNYIW7ea frWl0tY/uUf4cgfGbhX+3EEOgAnLRPNMvI6/VnB3zN9prdJz7H/yMfeslFwBKZuxY9cvxGW/HSNv wUduZfyvxB9W0f9+9jftKygDt3EFK8AqXSoKRF8suQr8Adxi/4NBFfaksSVN7nybu5wWrYrj3CoY 0T53ZV48TbSJ5emKWCVYoyv8fuB6cAO4EQwAA6k3N/t/EcwvcZZSc6m8hSsawJWWcd/K9WqudFvm SvUWrK6mlblWezfHvgj7IuyLakdJD2rqBW7BtgHclzJKlmO70dEZtWmu7ivzP5CwL8K+CPsi7Iuw L8K+yDfvVDoLlLu4CvwBDOL4DjAYDAFDqTnzX5OOh6Nys79DbxjnDDhqPL38Kr38Ln5ZhF/+DL88 Rz6Pv5ZhWTnXZq1hnqrgnq3Upfjkyfjkyd5pusR7RnT2JoHJonMsT5wT+4ptJds1YL3o7B9v3n2C fuIc/3pwA7gRGPvi2XtkfCaW9ZmYvVcrrEdE9ulDIXZPy+YqyOYqwO6InF2sbeb++7JfzV/kVr0O rVfqKb0OLVfqHVfzATb3q/mK1CpSqrzj9L9Ra7+aJbKKO1VN6R3UtFOXeTG9zQt0tUc8Qs4ycp5o y77I2RJSSqhtsy2bltvhCVN2J96gKZMQypYN0WC5bI/TbURjcn5AK9Wo0gjLKqX5Vng1re7Q2ym5 gJJVtFqNGo2wuNIjKqKWbViwnZoWUBP21nzNneqHjs3Usplaqqmlxths286U3kzpakrXWNszNsRE M0r2w4YyuYU+28p2G/1HlJy98hK5kzFdo5dT0zZsKfN8UUBtZdRW5SWY5TM9wvWLhJfUy6l5GzY9 ZGbNmjJqNH1QIWuYc5S9/govyf5xWtgcL9k7st3mytyVhM1l7sxCenev+0U8kb1PlD7I/bF57X0h 70Huh8g73PsgwkPtf7z4CPc7Pl5Pf9sz++1nkevli7jXlFpbiMBrCVpRpjXlj2KfaNVry7mj2e8I juFcJ84da6JKrxl1tOJsO7bHmD7w8jlCM3jNydPSno1sXW1Ib8t+e/Y72tyRqUf4NncL2+pmm+No 28pm0Ri7Ypyt9JqR0hy0EG2wL0XOSupsg33UC9py3I7z7cHRpHckzzGkdWL/WNrIpZYKbDVXGPMK aL2lkNlaTOkK7DdXGPM6cK4j5zKlYyIPGwJKr7FX2oJ6W5KrFb3XmvRM+wE1rLE9cDTnO5J2DOc7 kW7a5iqovylnm+n1XnNzrXictYF72Zp2jyKtDXnaktaOPO1NH5DH2kKeTuQ5FqYz9yll+7WFyM/e p2rsyMeOXOxI2b49muPMfarGhnxsyDV3xfZeLFtq0x7Wm+vOlNhUa3WqoT7BqP2Evb38gtHeViQP 1Tco1YFRWo9/cNYVTY6Uj1BbU1Ia6CeUDkWjw/UVamlmrujI+At3Yqq9jw3yGXtFyUP1G9rcSjRb VbMALuwM43iw2olye81bsForuaNmDuzzU1lTUw2r5XmxmgVwY2fYyIPVTvQSNW/Baq28nJo5MNNP vWRNNazGGKz5lB5pSY8k6ZGk16LmA3qkqdeyZgVWdaRXPHrF9dqQry352pGnPTiafB3I15F8x5Cv E/mOxWsSKLUUGuscaf6L0Bwb1ecT5bYhquhintsT7RXY/2RU5PQSpzq9xTnOleIB5/ds+1DK/N+h S/V78rdEQ931RPvf8Y4/QK73bK5d/3FpYu3Ry7VHrpNEAXcWQpwifiFOQHOfIX4suoqLxIniUvFb Un9H3PYz8UfxoDhXjBLPixtFkXiLo9l8xogPxWIxVpSgOZ4RFU5K/M1p5bQSi502TmexxDnPOZ/U C5yLxSqnh3OZWOdc4VwhNjhXOn3FRqefc4PY4gxwJojtzhN82jgT+bR1nubTzvmr87zT3pntzHM6 uD92uzg/cU9yT3b+wz3FPcU5xf25+wvnVPc/3bOc09xz3HOcX7i/crs6p7vnu+c7Z7nd3Iucs91L 3e7Or9yebk+nq3uFe4VzntvXvco5373avdq5wL3GvcG50L3ZHehc6t7mDnd6uiPdh5zr3Ifdcc5N 7gT3cec2d6r7384g9x/ue84I95/uYudJt8Qtdwrdle43zuvuOne9M8Pd4G5xZrrb3GpnjqulcN6X rpTOB1LJpPOhTMnGzgKZL/OdRbKZbOkslu3l0c5nsqM8ximVx8rjnS/lv8nOTpn8kfyRs0yeKLs4 y+VJ8j+cCnmKPNVZLU+TP3cq5enydGetPFOe6ayTZ8mznPXyfHmBE8mLZXdnk+wh+zjbZD95PU3f LG91Y3KwHOzmyKFyqBvKcXK8m5QvyhfdlHxFvuLmydfl624jOV3OcRvLtFziHiXL5DfusbJKavdE L+bluqd6+d5x7tnead5pbg+vvzfc7end773q3ui94b3lPun9y5vnPust9Ja7z3krPe1OjwWxwF0Q C2OhuzCWF2vsFseKY5+6i2Ofx75yS2PlsXK3LLYitsItj62MrXKXxb6JrXdXxDbENriVsc2xLe6a 2LbYNnd9rDpW7UaxnX7M3eArP9et9vP8PCn9xn5T6fkt/DYy7rf3fyJT/r/7/y6P9k/2fyk7+Bf4 l8iT/Mv9u+Wp/r3+n+WV/kj/AdnXf9h/WF7tj/HHyj/6j/mPyWv98f5EeZ0/yZ8k/+RP8afIm/3n /OfkLX6h/w/Z33/Nf1MO8Wf578h7/ff99+UIf64/X470i/1Fcoy/xC+Rj/pL/aVynP+F/6Uc71f4 q+XjfuTvkE8poVz5V6VUO/mC6qROku+rU9RpcpE6XZ0uP1X/qX4pl6pz1a/ll6qb6iaXqYvVxXK5 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 vFIIpVdLfS6/fW7yd6UZlZZ/UNq+rthxrxbKWq+WZH9X0rxaPP2eXy+f4a/5kT+YHxFwivJnYcr1 ZYllV+dnsfz6BBb3aSwDYSiMotHPNJgDC2n8swY2wBYaAe2DI4RfFK83/9/W+f+puvI/U792FuT5 HIlDYpQ77oHi7liAcl0SHj246yxCZKZxtKRs7z4jcZQYTe0xwn3G5iQaeUmxQtyg9k1xi8Yrtyma CMqW96n9QDzinPmE2k9FHLXjpfsOJCkN95mN0kdtzW8RsiWNv2VQhvCvMWmMLcOk+4S6xDIJtZNK 97lnETI5tSNlamqnkTRyk+lkRmpnkpmpnYXfWJRVZqV2NpmN2tlldmrnkO7zysbL8dSeICdQe6Kc SO1J6m1+nnA5UKq8mdB9aqtJ+poR7ju8zDLm26DMsmZDajcyW1C7pfmx+yx3sxO1PzH7ULuv2Zfa n5kb3Odvmxup/Z2fIrNf0ihS+jMEPgQRaBUgphdoHZwLIjgvSKPe4PzgRmp/F9xM7S3EVAWmJJ6h iE3G8wiPonKIDEn9/HfWbBkJjbxfB//GQQRzEMEcRLz0K1bBHEQwBxHMQQRzEMEcRDAHEcxBBHMQ wRxEMAcRzEEEc5DnVyiZiQhmIoKZiGAmIpiJCGYigpmIYCYimIkIZiKCmYhgJiKYiQhmIoKZiGAm IpiJCGYigpmIYCYimIkIZiKCmYhgJiKYiQhmIoKZiGAmIpiJCGYigpmIYCYimIkIZiKCmYhgJiKY iQhmIoKZiGAmIpiJCGYigpmIYCYimIkIZiKCmYhgJiKYiQhmIoKZiGAmIpiJCGYigpmIYCYimIkI ZiKCmYhgJiKYiQhmIoKZiGAmIpiJCGYigpmIYCYimIkIZiKCmYhgJiKYiQhmIoKZiGAmIpiJCGYi vz6j5MUTS5K3J5mIt0LyD6N6J2/mC2T5rOxnD4JCyym9k9eiTdWlENF2VMBnZkUlI0yIauizsvqE IXrnk8KY8m5U1ahsL22JnJayZyQvKRWGytAI2kMbCqIxEEv/3SWmolGpXzqZkahBn6JLKxfr/yTP R2/X9z38olz9yetrTemdJEtUbyMsqrd8PEVJISk4bITPCxfun2Bv0fuNr55+Kyr44kqFQdfUNjpr VGafqmHYCdOUbNO2c7sWzZrHpsrUOHOq6AIF8qV6p0Xjdm3at2kam6pkm3Ztc0SnjIp8fnDiV/e0 adcwtkWbj6JTR73h7lcJw3/bX61Nm9hUxTvENm/TrkVs56iUSYMF8kVFR0dF5Yuif3WSBnNFRed6 M9r7+L9wRb1FmpdhESao3hRWaLslewsBc+XajW3PF7pdKXmmyaM/qR91edrcwek/eBg3suL0VXET p6Uq2rXqtPHThjTI9eHeEk06X1/QcXv1Y7evTPgscsjkPk2Xbf6wS6O0h1IUPhUihl0c9f367E3H jWueYeyegtnWOytqZdhY5oJVNP+obHMzFZhztdynJc70CflmXKsaDRf07jq1QfZOFS+NXd6k0Lgq kdH+dIkmz73wZdbw80XGNE7UoJYZMzlFvmr9Hsy+MUJuSb5/fY3Sywb0XF/wavURlRY+m92ldWyl ReE7RwUypYaaQxu0yPdNhTBd+L3495/MaGr5Z+3r9V7NGysL1U/Sq5Nx7P66hT1Hxi3e1ePQ7Ih2 dQv/8O1N//Q0Uct8fbcvS9UpYd/TUpHjT+81J6rXzKhe0wjNFMLoNS6q1+ieoe/vaXujRbtJaat2 T7T0nS/id0xt99+3X+9/4OPKteHIi/aGwXdGh+e5tlqkO9IpwZ26DXJNnmTvKGp+2X/I9oLnU9++ WXN4thVT3t7W6MbTwzsLFaozN2/1FnHpWhfbvnPeKbPryejBRSaHtm35TVxY5fAWG57uKXkmQZ1U lS83+tuiecm2Zc2XPvu6mKlhA9OHNJ7+oHrko9TbDyW+U23BRyVz6We9kz4816xVsOr9tbeqbV17 4fuop6miA/1TjMwc8c7BFHLmrZ4/qeXv311yclvN6zHltlarvnK5yhQWP/TQTf+Q7qtHb56fL9vZ LmfndDrTcQrsaVls4768A38qHjYnT8vkLY/n+flApHF2TmljW50383/0TmSw0Spr2qD9B6sXK7Mr ssastsfDCvYb3mHy7H1TKCo0iOqtKj6PClaO+QlOVImvO3HHhl9jSor/rWBA/T5/LvpHESAXBYPo XPQxz6/BoDNHUDqJL6Gs8W50wqgE7gd/Qqtmw/bNW3zULJb+TGgUuht1Ql0tpknrNh81+fXCrD+6 sLRRqZ9fWMTL+5vEpHq3RbOP6KypqpQs/g+jwqrO3Q7VW1a6wJzcC6KPPUqfp1ynDU/emLS19Mc3 9pa5eGDQpg8rVmt0d6zc9M6Rcq1ypisas/7HtKvssqt6dDhZeu28IVhlc/qst6dcCKZ9Y2/xdI8b jd2drPTM4eXfGLtrWc40m8pn79rmaOKUhQYVCC1wcm3mu00LZRe54uMylp21opXoN+HJmqWNe/R+ VHdKrz59v1h8e/WI6bvzz6rSN2nGfpVORt2HIne3PCrSa91n11oVmJ0j9/3lORZZ3Rp9+UnTCWPa B/+nWvOOayrZ4niAhA7SpGpogoAINyGU0DsaShAiNlAg9JYIkRo6CSpVRFGWjoiICAJLkCJFFhEi RRdpSn28pQhKEQQLL7C4out+9o9X/Ly/kjPnztzJnfP7njlzQy5dbFkSu4/mScB2yA/AjYTma1FX NSytBTtdjgTdLolts9HOjrI87wO5p9wUsq/eykXrugX1QJiST4wJY09WN4pM70MG3WiMHbHepsI6 ELkK8G5CQQrMDrAyMtMSGgTCxMDw/4GKXZtz5KVtDcEQgIH2AezdbOAE84P5qHs7/UH4U6ULgy0W 6UcMFfINsW8Atk33LjCYJiPyDulsMSak+G4YSnqxs86CkHd8P0HuXAX5Y7FZaiDIfLp9VvCF+y+c ecQleoPW9ljqO2tqc3a9De4N1rDIEDR/tS29d081W7YQR2rfILRENvT13E2/O0nDyEStax51at5P z5dKfhyZfu7Ocul8/acxUC1iaZW4xsWjAJmVvXpZ31PmLEUtaZSJ47Gd25P6CD1Pl1u1lNpERPsi Axcx+O3TUf2RkE9jY3c+rYz0clTgn6dMoKvU8ogHf9UaQrA5qtJnR3pIXlixxSaVnaxF9tnHH40R VnqrcS0nij3vTFyFPCW3oKN4UKyqARAiifFxyNVZLeuNngYmUmTcY5vw40uFxZ0R+r7+nDTGeNAY Y7XNGIddgeZbOySGnTqC0DjzA1X9GThKAEAjjhINOAASgG+aSpsmQPivTG3bz/AX/r9lTd4Qa0JX c9Phn57cVkeUSJ7wHPJ6IC5BSW2budvQ2ivdDOeOqxu0k3+vYgPdfeBuEsdLvnwfGbNwfh29Owm6 94zPcwxEppakMXYfM/S3nVn4wDkeTshX6iBMvp5wyA1joBht9Grz9Ja1n+boDlmk8HJ8sPeQIZ2L p5TUkaYEKpMfvOWvcrSb4x5Rnxc/FVca4ffQaOLKhQD7n34rCWhSTVDiU+Qdcnx8V7gIfc215Fcx JHB2NMHVeLx1zzKHJUFPcQqyz0Pc83BZSks58pF+gbetIKo4qS8xWjuQ1aT/RnmM5MPxxRCXeyhC vbSeaYYDn70F0Ba11M2GJ84fNQ94ynzUP3KbNe+AyLdbz37vrk3F0kTI2LhDsEviuonEI+8wptcm Bfo8ohEQBemp76NpkxN7JcGCAH/E92VuuHmBKFgL0ACQOao5ymQlNwIBr66oiPX1UvD+vIYKWJy3 It7TfbNVEe+LczqHJfgpGljTAk2B1gQc+nxL2j5EE1AH1D7bAD1ZfnvAgICA7w3o7LtjJMI3Atqi je4xnLVrllg0go7znwKmmiWz/ZHh8xxBhAB0mongEmi3e9iQY3LeR9fcjH/IyK4f7bv+ybLhNEvF /ZtzUUvXoLgT628XxtifxTFr8wuI9TT+bGTCLG1/jMU09Q0ztcbc5834IR4Z5Thx35EzVaXuPPtS 56cRLENhPrgUVqt2ObPDt+Hy5Klcqp10XZ3m6KnyaLYa5T3oGCOTjdrU3BNMRVdfBtYfCy8otKAu lmSk64132O7TfhGOMLFY6WoLyZytepyB5bMuLUl/3dfQlZNbfKU9+ECsfOOjgQ9eDIMNaiULPbZC ArsaV9sjbnIxC79MlvytLNdMe6aMWzqQs0n+/g3PR0maNNpk0mhD+kybw8S5LdpAfhxtMO7ezn4E B2/8TtqoAEiYCgBTVoZvbW9gWyYc2DSByJv/lbntB6R+T5RQHwN3vJuzr5ihtZGYkbWFOgwwVDuo rIZQPWigb6z2+UIGXuhf/AhrZ19/d6zz3wJqpgaCbRsIuhtjqF1Q0TJnlrVvBOkPZXkORx0PfHpg oIAp+fVvWu/rpYn57ydDw+BdA1pxSNXFd/0aCP5fU6LeI165kXyFk0arzUarSUtKrPRNef5+ymZ2 C5QxVOje6tTAoQ0oabe+8dnO8P3HeHqi0Rpd68MrcXM6oIneYYc1gQTTG5Gab911Z8YuNDChawgh 0+yTJjPFXgu9rpHM7/jbQ3lr/cZZzNYd38/lINPVP81ytzlAHY/3s2KiezVMTceP1ivaCyemQAwG 7WajWCXTWHIgMOe4yxZQPfG8lOSPRoZGOOV7Rqol7kXOawiDewLNGsgxrvhF4dgJjKWoRiasZCeg vgApzPeNgo6N7KjUqls13QfTsbCuCe2v2IObstBJu48oNiUn1WXM3NHQM2jt/rfYQ/DDYx3+I+z5 PBLhewRl/hOFvwMo9+AoFnb+nuEu4wsKDT2I4Mjw/TJ6ckvPxFM400rOWJ+WXZtrwqBuha7ydrPx rZkvkneDfCai98oYFcoj4S9x6aon5yWtkjAMCTqFGU5qKyptfAZV6trXHnM8PBsps+RSCBu3tUta s7Ias529nJzpzmJ2oafH3wzB4TFGNCw8cCoaE260T0iq5aLxL1ITQhHusnwrAq1vJOQjjU8fWF67 2RqgLYlbu+lESsxz5Cg6CL01mawdvlGW+CHt1cJHcOmTw50nCXfWl3hFRZCd+ZXP65Yr59tKFm2g 7zUX2p7LGdY1ZOiEugg+KRfDsrbrajnDhYjl1VpN0ocsJISu+8QDTQuXvgYUlwfbdXQjSKqYe8hI 9Hiwa963mPoxxdc2nQAEQnWTTkia+QOKrz+B8+9480LV531pmz7qrGBb5yFt68b1Yr4aeXgtD9qq LXpOW2ngMCxFpuqS06ioZUxNs2lPOOTd63MP4h7d6r3rjncJ3O8yVUV5Tbr/ZP72R54bbCckZBW7 dAdswCL+P3s7eaMwQy8Xhhuyox9FjISb0aumvm3MYraBupk8GWj0t1UMrZICV9qc8tiD3Yggas73 gqXMkQEEJrtm236yqvy5x5wzUCQL0f9TppdP8Ogr7aS0rLOcZ+TQgo728Kyn0RYHJGzdjOKGFWO4 LMvXfhZO8JqX+on3XQdXH4lzOcrfT6X1SnAe1Z7xFaSMrER5l3oqRi/mOCnVp0xU/hAVl2Ew6jEV Lp3o+TtvouhkaE9k3/cV+n9RfnExsmwfgO6m26ypQDvo+V04Cv3RgY8ezA5lBVmDzoEcQQYgva9L sz/Vdd8BVKo5N6yZaFnLnZjrwETHGY83Snjth6nXYYEc3Kg+Yk3aM4e8RMm3YRuOr9IQ6Xl/p/Ax 5d4RcREcs3uYJ0OehPGcV6U3UaLa+FnMUsKuB0wXVZpmw6bxdkbZKU+pnS8TG8ca5J4QXz2+C++N vd+BbVHpERRv8B/WSK8Q8csSP99fWcmDiV/OaHZGpctIZ9hf3KXxiNc58FBtV0m0OrrM8fgwMD2N 3DtxYXEQGbnGKx7vFIFlBF9dTKc3UAwxPl+zQT/gvIYaHmQgXK6A+LBTM1/IOBAPLQhkcIur0e+J vcP4y1V49aRuq7VWfdGF4SkX1YRliasZ1LIAzBH1576G5ZIrsChwKQ1SxfR0dEBk7A+syr6qFb+c cedEDgJ8f6y3DB2MiQGy9e/lzSjYXkwWBhj7zmN12my+WGwwTmCndzcg+aUjGEaLsTkvX/SJOFcf T35NRtaP2XxO7VFFgNOOLuwwGwCTIxchAzIHuYOwIF8Qbutk3gVEAImBMKAgEJ5mudLaHWjf3EBB udIR+/4yvRKC8DhXXwe8W5DYN3gDR9GB2BynIgMTnmUkCq+gUBkzfZm91CwTR1n9lkHdWTBmxeLx lablDxvY3NlRUNBDyfz9aS4tF/VIUNvrsyGDUgyzXfjf6ptPohqNj4/bLyqnGq/PhCmrFLY7NxYH C59s9FDPYr3O5yBoN7n8Vre1U6xD16D70+KeB26nw/Q4b5ug6bCTKvsn+3BkdANJO40+FGma+FLm dL1AvanZ5TYx0czFiYbK29Q5TGpBcotAeOycSMTZ1W7Oxiq9KTX0BLXa8adhfX9iuijTwyJK9W1F b+P+YSaO+KqgiZOnvDtmF6Y7VWZrDrm8Dmz7oJld1corf4dbbezi+i1BFyaHsbgYujMnDtda5EbR iwJR9CJf1ogRFkXPTmti/p+H6LcZ6asCg2k7RHPsAMGdkcj25S0QHe2ef3ggsF20VKsGA+C0RAtH Kqmc/FMgVqinp1mQpo/wMsehlvPUE6UdRXDfMGszRPT0n3FebQkdOljgQKcpxOnbpRCIOYWTJJvN sV6yOigcbui8ljmW35kmYlz7xgYhKXIvtMwjGXzJmrRq5tECbzdn84uf0wgDk8sChYT/yaijnz0S XR/Tv7dADiJ4TNqrWfVy8HBdzW3hCd8H7VfIaN/08ZwVbtnl57CmsLQ0+umscwEpIAqxwlinfbWg vJ9R2pT60NPM8nLdaq5UQa/PYbxhQlF438wkFxUqmHfy13NO7H4BfgZSsvcFR0bPr1GkUDCWjW6J wqGfoVll6/JqdWxCpFtZ5ZUn0BgLUurSi46xZbWParYddWbNQ3YOJLdict20az6lKLgZUoTcvUY5 SHQE/QufTQcsDQplbmRzdHJlYW0NCmVuZG9iag0KNjEgMCBvYmoNClsgMjUwXSANCmVuZG9iag0K NjIgMCBvYmoNCjw8L1R5cGUvWFJlZi9TaXplIDYyL1dbIDEgNCAyXSAvUm9vdCAxIDAgUi9JbmZv IDIwIDAgUi9JRFs8NDkzOEQ2MTJBMkU3RDc0NTg1MkQ2NUIyMzRDQ0Q1MDU+PDQ5MzhENjEyQTJF N0Q3NDU4NTJENjVCMjM0Q0NENTA1Pl0gL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTk1Pj4N CnN0cmVhbQ0KeJw10LlqAnEQx/H/7sZjjWfUeMS7UywtAoKFFpJnSFrTeDyAYKtEW2sh72EpeQc7 m1T2trr7++oU82GYgWHGGC+uV8vLKWN8FrAXthGhXxH+EO47/IvIUXR+xGfJx1qdfOzCRYya4rsn xlsxGYppV8xaYvnFzqKpQg0qcO/VvclV/1FZYIMDTxCAIIQgDC5E4BkaEIUYxCEBSUjBC6QhA1l4 hRzkoQBFeIMSlL3D1gN9YqOHOIez+Nv5BNpzY277ohttDQplbmRzdHJlYW0NCmVuZG9iag0KeHJl Zg0KMCA2Mw0KMDAwMDAwMDAyMSA2NTUzNSBmDQowMDAwMDAwMDE3IDAwMDAwIG4NCjAwMDAwMDAx MjUgMDAwMDAgbg0KMDAwMDAwMDE4OCAwMDAwMCBuDQowMDAwMDAwNTEyIDAwMDAwIG4NCjAwMDAw MDE5NTMgMDAwMDAgbg0KMDAwMDAwMjEyMSAwMDAwMCBuDQowMDAwMDAyMzYwIDAwMDAwIG4NCjAw MDAwMDI1MzMgMDAwMDAgbg0KMDAwMDAwMjc3NyAwMDAwMCBuDQowMDAwMDEzNDQ5IDAwMDAwIG4N CjAwMDAwMjMzMjQgMDAwMDAgbg0KMDAwMDEwMDMyMCAwMDAwMCBuDQowMDAwMTM3NzE4IDAwMDAw IG4NCjAwMDAxNTY5NjkgMDAwMDAgbg0KMDAwMDE1NzI0NiAwMDAwMCBuDQowMDAwMTU4NjEyIDAw MDAwIG4NCjAwMDAxNTg3OTEgMDAwMDAgbg0KMDAwMDE1OTAzNSAwMDAwMCBuDQowMDAwMTU5Mjc0 IDAwMDAwIG4NCjAwMDAxNjU0NjggMDAwMDAgbg0KMDAwMDAwMDAyMiA2NTUzNSBmDQowMDAwMDAw MDIzIDY1NTM1IGYNCjAwMDAwMDAwMjQgNjU1MzUgZg0KMDAwMDAwMDAyNSA2NTUzNSBmDQowMDAw MDAwMDI2IDY1NTM1IGYNCjAwMDAwMDAwMjcgNjU1MzUgZg0KMDAwMDAwMDAyOCA2NTUzNSBmDQow MDAwMDAwMDI5IDY1NTM1IGYNCjAwMDAwMDAwMzAgNjU1MzUgZg0KMDAwMDAwMDAzMSA2NTUzNSBm DQowMDAwMDAwMDMyIDY1NTM1IGYNCjAwMDAwMDAwMzMgNjU1MzUgZg0KMDAwMDAwMDAzNCA2NTUz NSBmDQowMDAwMDAwMDM1IDY1NTM1IGYNCjAwMDAwMDAwMzYgNjU1MzUgZg0KMDAwMDAwMDAzNyA2 NTUzNSBmDQowMDAwMDAwMDM4IDY1NTM1IGYNCjAwMDAwMDAwMzkgNjU1MzUgZg0KMDAwMDAwMDA0 MCA2NTUzNSBmDQowMDAwMDAwMDQxIDY1NTM1IGYNCjAwMDAwMDAwNDIgNjU1MzUgZg0KMDAwMDAw MDA0MyA2NTUzNSBmDQowMDAwMDAwMDQ0IDY1NTM1IGYNCjAwMDAwMDAwNDUgNjU1MzUgZg0KMDAw MDAwMDA0NiA2NTUzNSBmDQowMDAwMDAwMDQ3IDY1NTM1IGYNCjAwMDAwMDAwNDggNjU1MzUgZg0K MDAwMDAwMDA0OSA2NTUzNSBmDQowMDAwMDAwMDUwIDY1NTM1IGYNCjAwMDAwMDAwNTEgNjU1MzUg Zg0KMDAwMDAwMDA1MiA2NTUzNSBmDQowMDAwMDAwMDUzIDY1NTM1IGYNCjAwMDAwMDAwNTQgNjU1 MzUgZg0KMDAwMDAwMDA1NSA2NTUzNSBmDQowMDAwMDAwMDU2IDY1NTM1IGYNCjAwMDAwMDAwMDAg NjU1MzUgZg0KMDAwMDE2NjQ2NyAwMDAwMCBuDQowMDAwMTY2Njk4IDAwMDAwIG4NCjAwMDAyNDcw MTkgMDAwMDAgbg0KMDAwMDI0NzQ1NCAwMDAwMCBuDQowMDAwMzM5MDY2IDAwMDAwIG4NCjAwMDAz MzkwOTMgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSA2My9Sb290IDEgMCBSL0luZm8gMjAgMCBS L0lEWzw0OTM4RDYxMkEyRTdENzQ1ODUyRDY1QjIzNENDRDUwNT48NDkzOEQ2MTJBMkU3RDc0NTg1 MkQ2NUIyMzRDQ0Q1MDU+XSA+Pg0Kc3RhcnR4cmVmDQozMzk0ODkNCiUlRU9GDQp4cmVmDQowIDAN CnRyYWlsZXINCjw8L1NpemUgNjMvUm9vdCAxIDAgUi9JbmZvIDIwIDAgUi9JRFs8NDkzOEQ2MTJB MkU3RDc0NTg1MkQ2NUIyMzRDQ0Q1MDU+PDQ5MzhENjEyQTJFN0Q3NDU4NTJENjVCMjM0Q0NENTA1 Pl0gL1ByZXYgMzM5NDg5L1hSZWZTdG0gMzM5MDkzPj4NCnN0YXJ0eHJlZg0KMzQwOTA3DQolJUVP Rg== ------=_Part_1957777_1336190691.1409812315449-- From felipemonteiro.carvalho@gmail.com Thu Sep 4 05:14:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 8702D7F54 for ; Thu, 4 Sep 2014 05:14:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 589B48F8040 for ; Thu, 4 Sep 2014 03:14:50 -0700 (PDT) X-ASG-Debug-ID: 1409825688-04bdf010a1743b40001-NocioJ Received: from mail-pd0-f169.google.com (mail-pd0-f169.google.com [209.85.192.169]) by cuda.sgi.com with ESMTP id sJGd8rQm1PKHWE5u (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 04 Sep 2014 03:14:49 -0700 (PDT) X-Barracuda-Envelope-From: felipemonteiro.carvalho@gmail.com X-Barracuda-RBL-Trusted-Forwarder: 209.85.192.169 Received: by mail-pd0-f169.google.com with SMTP id y10so3879071pdj.28 for ; Thu, 04 Sep 2014 03:14:42 -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 :content-type; bh=YOF/0RDY68DMPG1mNbIDgRDfaZOXNCvwUI26sLbUuCg=; b=iCaqoD2dX/6z8ffvKBqQRaJJS4QOVP92kc/toxYXH3dMWbX7i1+WJY8Py8V2lWoLjA W1Uj9MPXrLOy4ufiWXb5yOqhaV8v1D0lEgttLeR7cTTVKVMb01rB7buBWIaZxL+30atX iLNlvCSmm2VFMGTb/ad/+2YxJqk6jGV/fcbEuGFgGyAQBPT8N7V8mBMHXpmmFJf0fShV elLeyBjTsHpIqL1M5VqG6EZv/uZiV/iORB7XZzMyaHlsEE+SDyYC2JKpaY95Q2cQOtzc BEQdYyOAJJsMDt+RPWYku/X2hGU313+Mllyclhk8v5/XUN8rop/EDi5OAjtAj+BdeFfK 8Y6A== X-Barracuda-BBL-IP: nil MIME-Version: 1.0 X-Received: by 10.66.197.132 with SMTP id iu4mr6926541pac.132.1409825679561; Thu, 04 Sep 2014 03:14:39 -0700 (PDT) Received: by 10.66.154.162 with HTTP; Thu, 4 Sep 2014 03:14:39 -0700 (PDT) In-Reply-To: References: Date: Thu, 4 Sep 2014 12:14:39 +0200 Message-ID: Subject: Re: Ghost items in the end of a dir listing From: Felipe Monteiro de Carvalho X-ASG-Orig-Subj: Re: Ghost items in the end of a dir listing To: xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-pd0-f169.google.com[209.85.192.169] X-Barracuda-Start-Time: 1409825689 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 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9163 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 Hello, No ideas about this? =( Any kind of tip would be really appreciated =) thanks, Felipe Monteiro de Carvalho On Wed, Aug 27, 2014 at 12:20 PM, Felipe Monteiro de Carvalho wrote: > Hello, > > I am writing a program that reads XFS partitions and I am having > trouble with some dir listings. In some directories in the block that > starts with XD2B there is first the list of all directory items, which > I read without problems, and then there is a free item, for example: > > xfs_dir2_data_unused > freetag -> XFS_DIR2_DATA_FREE_TAG */ > length -> 9A0 > tag -> zero > > But after this free item there is still room in the block, so my > program will try to read the next item. I cannot stop the reading > because it is possible to have valid items, then a free item and then > more valid items. > > The next item start might be something like: > > 00 00 00 2E 00 00 00 02 16 > > So it is not a free item, as it doesn't start with FF = XFS_DIR2_DATA_FREE_TAG > But it isn't valid either, as its name is a bunch of trash =( > > So my questions are: > 1> What are those ghost items in the end of the block? > 2> Which criteria should be utilized to differentiate them from valid > items? I tried some guesses but nothing really works so far... > > Here are screenshots of the actual data involved, here showing the > item with XFS_DIR2_DATA_FREE_TAG: > > http://magnifier.sourceforge.net/temp/xfs/xfs_dir_listing_XD2B_FREE_item.png > > And here showing the area in the end of the block with wierd items: > > http://magnifier.sourceforge.net/temp/xfs/xfs_dir_listing_XD2B_after_FREE.png > > thanks for any tips =) > -- > Felipe Monteiro de Carvalho -- Felipe Monteiro de Carvalho From bfoster@redhat.com Thu Sep 4 11:38:35 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 304B67F37 for ; Thu, 4 Sep 2014 11:38:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1090B304059 for ; Thu, 4 Sep 2014 09:38:31 -0700 (PDT) X-ASG-Debug-ID: 1409848710-04cbb05488a41f90001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 0xlNVTymWtqfDNyW (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 04 Sep 2014 09:38:30 -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 (8.14.4/8.14.4) with ESMTP id s84GcUS5018753 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Thu, 4 Sep 2014 12:38:30 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s84GcTFO032524 for ; Thu, 4 Sep 2014 12:38:29 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 705491256F8; Thu, 4 Sep 2014 12:38:28 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Date: Thu, 4 Sep 2014 12:38:28 -0400 X-ASG-Orig-Subj: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Message-Id: <1409848708-42666-1-git-send-email-bfoster@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: 1409848710 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 xfsdump encodes and stores the full atime and mtime for each file with nanosecond resolution. xfsrestore uses utime() to set the times of each file that is restored. The latter supports resolution of 1 second, thus sub-second timestamp data is lost on restore. Add the associated configure checks for and use utimensat() when available to restore timestamps with nanosecond resolution. Create a new helper to facilitate conditional support for utimensat(). Signed-off-by: Brian Foster --- I'm not totally sure on the configure bits here... it's mostly copied from xfsprogs and tweaked appropriately. It seems to work, at least. ;) Brian configure.ac | 2 ++ include/builddefs.in | 1 + m4/Makefile | 1 + m4/package_libcdev.m4 | 16 ++++++++++++++++ restore/Makefile | 4 ++++ restore/content.c | 38 ++++++++++++++++++++++++++++++-------- 6 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 m4/package_libcdev.m4 diff --git a/configure.ac b/configure.ac index 59f9564..28e604e 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,8 @@ AC_PACKAGE_NEED_ATTRIBUTES_H AC_PACKAGE_NEED_ATTRIBUTES_MACROS AC_PACKAGE_NEED_ATTRGET_LIBATTR +AC_HAVE_UTIMENSAT + AC_MANUAL_FORMAT AC_CONFIG_FILES([include/builddefs]) diff --git a/include/builddefs.in b/include/builddefs.in index 269c928..bdf0ede 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -69,6 +69,7 @@ ENABLE_SHARED = @enable_shared@ ENABLE_GETTEXT = @enable_gettext@ HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ +HAVE_UTIMENSAT = @have_utimensat@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl diff --git a/m4/Makefile b/m4/Makefile index 9a35056..ae452f7 100644 --- a/m4/Makefile +++ b/m4/Makefile @@ -16,6 +16,7 @@ LSRCFILES = \ manual_format.m4 \ package_attrdev.m4 \ package_globals.m4 \ + package_libcdev.m4 \ package_ncurses.m4 \ package_pthread.m4 \ package_utilies.m4 \ diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 new file mode 100644 index 0000000..6fcbdba --- /dev/null +++ b/m4/package_libcdev.m4 @@ -0,0 +1,16 @@ +# +# Check if we have a utimensat libc call +# +AC_DEFUN([AC_HAVE_UTIMENSAT], + [ AC_MSG_CHECKING([for utimensat]) + AC_TRY_COMPILE([ +#define _ATFILE_SOURCE +#include +#include + ], [ + utimensat(AT_FDCWD, 0, 0, AT_SYMLINK_NOFOLLOW); + ], have_utimensat=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_utimensat) + ]) diff --git a/restore/Makefile b/restore/Makefile index c6f3f25..c5cf925 100644 --- a/restore/Makefile +++ b/restore/Makefile @@ -102,6 +102,10 @@ LTDEPENDENCIES = $(LIBRMT) LCFLAGS = -DRESTORE +ifeq ($(HAVE_UTIMENSAT),yes) +LCFLAGS += -DHAVE_UTIMENSAT +endif + default: depend $(LTCOMMAND) include $(BUILDRULES) diff --git a/restore/content.c b/restore/content.c index cfcf94d..65dc2f5 100644 --- a/restore/content.c +++ b/restore/content.c @@ -7418,6 +7418,34 @@ done: return 0; } +/* + * Set the access and modification times for a file. + */ +static int +restore_file_amtime( + const char *path, + struct bstat *bstatp) +{ + int rval; + +#ifdef HAVE_UTIMENSAT + struct timespec times[2]; + + times[0].tv_sec = bstatp->bs_atime.tv_sec; + times[0].tv_nsec = bstatp->bs_atime.tv_nsec; + times[1].tv_sec = bstatp->bs_mtime.tv_sec; + times[1].tv_nsec = bstatp->bs_mtime.tv_nsec; + rval = utimensat(AT_FDCWD, path, times, 0); +#else + struct utimbuf utimbuf; + + utimbuf.actime = ( time32_t )bstatp->bs_atime.tv_sec; + utimbuf.modtime = ( time32_t )bstatp->bs_mtime.tv_sec; + rval = utime(path, &utimbuf); +#endif + return rval; +} + /* called to begin a regular file. if no path given, or if just toc, * don't actually write, just read. also get into that situation if * cannot prepare destination. fd == -1 signifies no write. *statp @@ -7671,7 +7699,6 @@ restore_complete_reg(stream_context_t *strcxtp) bstat_t *bstatp = &strcxtp->sc_bstat; char *path = strcxtp->sc_path; intgen_t fd = strcxtp->sc_fd; - struct utimbuf utimbuf; intgen_t rval; // only applies to regular files @@ -7688,9 +7715,7 @@ restore_complete_reg(stream_context_t *strcxtp) /* set the access and modification times */ - utimbuf.actime = ( time32_t )bstatp->bs_atime.tv_sec; - utimbuf.modtime = ( time32_t )bstatp->bs_mtime.tv_sec; - rval = utime( path, &utimbuf ); + rval = restore_file_amtime(path, bstatp); if ( rval ) { mlog( MLOG_VERBOSE | MLOG_WARNING, _( "unable to set access and modification " @@ -7770,7 +7795,6 @@ static bool_t restore_spec( filehdr_t *fhdrp, rv_t *rvp, char *path ) { bstat_t *bstatp = &fhdrp->fh_stat; - struct utimbuf utimbuf; char *printstr; intgen_t rval; @@ -7913,9 +7937,7 @@ restore_spec( filehdr_t *fhdrp, rv_t *rvp, char *path ) /* set the access and modification times */ - utimbuf.actime = ( time32_t )bstatp->bs_atime.tv_sec; - utimbuf.modtime = ( time32_t )bstatp->bs_mtime.tv_sec; - rval = utime( path, &utimbuf ); + rval = restore_file_amtime(path, bstatp); if ( rval ) { mlog( MLOG_VERBOSE | MLOG_WARNING, _( "unable to set access and modification " -- 1.8.3.1 From rh2@mexicocalendario2014.info Thu Sep 4 12:35:28 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 074047F37 for ; Thu, 4 Sep 2014 12:35:28 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id EA101304062 for ; Thu, 4 Sep 2014 10:35:24 -0700 (PDT) X-ASG-Debug-ID: 1409852119-04cb6c54fe7bdb10001-NocioJ Received: from mail2.mexicocalendario2014.info (mail2.mexicocalendario2014.info [81.7.3.198]) by cuda.sgi.com with ESMTP id hxQEjKaTuIGWy2rG for ; Thu, 04 Sep 2014 10:35:19 -0700 (PDT) X-Barracuda-Envelope-From: rh2@mexicocalendario2014.info X-Barracuda-Apparent-Source-IP: 81.7.3.198 Received: from 81-7-3-140 (81.7.3.140) by mail2.mexicocalendario2014.info id h12hde0our0t for ; Thu, 4 Sep 2014 12:35:14 -0500 (envelope-from ) mod: fd25f39a-7480-48bc-843f-89413644a548 Message-ID: From: "Recursos Humanos" To: Subject: Integracion Equipos de Trabajo Date: Thu, 4 Sep 2014 12:35:14 -0500 X-ASG-Orig-Subj: Integracion Equipos de Trabajo MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=SPLITOR00A_001_266525305D" X-Barracuda-Connect: mail2.mexicocalendario2014.info[81.7.3.198] X-Barracuda-Start-Time: 1409852119 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.9173 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_266525305D Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable =20 Liderazgo e Integraci=C3=B3n de Equipos de Trabajo M=C3=A9xico, D.F. 26 de septiembre 2014 Para obtener el contenido completo de este programa responda este correo = con la palabra ET + Nombre + Tel=C3=A9fono y se lo enviaremos a la = brevedad=2E TEMARIO: 1.- Las claves para crear un excelente equipo de trabajo=2E 2.- C=C3=B3mo definir los roles de un equipo efectivo (HOT GROUPS) 3.-C=C3=B3mo crear y desarrollar un plan efectivo de trabajo=2E 4.- Habilidades para lograr la comunicaci=C3=B3n eficaz entre los = l=C3=ADderes y miembros del equipo=2E 5.- Herramientas para manejar exitosamente la soluci=C3=B3n de=20 problemas=2E 6.- Evaluaci=C3=B3n del desempe=C3=B1o y el progreso del equipo=2E Mayores informes e inscripci=C3=B3n, - Solic=C3=ADtala ya L=C3=ADnea directa D.F.: 01 800 212 0660 Para YA no recibir estos boletines a: xfs@oss.sgi.com simplemente = env=C3=ADe un correo con asunto (CMF3) ------=SPLITOR00A_001_266525305D Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable

 

Liderazgo e = Integraci=C3=B3n=20 de Equipos de Trabajo
M=C3=A9xico, D.F. 26 = de septiembre=20 2014

Para obtener el contenido completo de = este=20 programa responda este correo con la palabra=20 ET + Nombre +=20 Tel=C3=A9fono y se lo enviaremos a la=20 = brevedad.

TEMARIO:
1.- Las claves para crear un = excelente=20 equipo de trabajo.
2.- C=C3=B3mo definir los roles de = un equipo=20 efectivo (HOT GROUPS)
3.-C=C3=B3mo crear y = desarrollar un plan=20 efectivo de trabajo.
4.- Habilidades para lograr la=20 comunicaci=C3=B3n eficaz entre los l=C3=ADderes y = miembros del=20 equipo.
5.- Herramientas para manejar exitosamente = la=20 soluci=C3=B3n de
problemas.
6.- Evaluaci=C3=B3n = del desempe=C3=B1o y=20 el progreso del equipo.

Mayores informes e = inscripci=C3=B3n,=20 - Solic=C3=ADtala ya
L=C3=ADnea directa D.F.: = 01 800 212=20 0660

Para YA no recibir estos boletines = a: xfs@oss.sgi.com=20  simplemente env=C3=ADe un correo con asunto=20 = (CMF3)

 

------=SPLITOR00A_001_266525305D-- From sandeen@sandeen.net Thu Sep 4 14:47:03 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 4AFC87F37 for ; Thu, 4 Sep 2014 14:47:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 33D1F304070 for ; Thu, 4 Sep 2014 12:47:02 -0700 (PDT) X-ASG-Debug-ID: 1409860020-04cbb05485a51810001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id AS83GgTBHfO7MCNE for ; Thu, 04 Sep 2014 12:47:00 -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 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 69B46653AF00; Thu, 4 Sep 2014 14:47:00 -0500 (CDT) Message-ID: <5408C1B4.1010001@sandeen.net> Date: Thu, 04 Sep 2014 14:47:00 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Brian Foster , xfs@oss.sgi.com Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution In-Reply-To: <1409848708-42666-1-git-send-email-bfoster@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1409860020 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.9178 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 9/4/14, 11:38 AM, Brian Foster wrote: > xfsdump encodes and stores the full atime and mtime for each file with > nanosecond resolution. xfsrestore uses utime() to set the times of each > file that is restored. The latter supports resolution of 1 second, thus > sub-second timestamp data is lost on restore. > > Add the associated configure checks for and use utimensat() when > available to restore timestamps with nanosecond resolution. Create a new > helper to facilitate conditional support for utimensat(). > > Signed-off-by: Brian Foster > --- > > I'm not totally sure on the configure bits here... it's mostly copied > from xfsprogs and tweaked appropriately. It seems to work, at least. ;) > > Brian > > configure.ac | 2 ++ > include/builddefs.in | 1 + > m4/Makefile | 1 + > m4/package_libcdev.m4 | 16 ++++++++++++++++ > restore/Makefile | 4 ++++ > restore/content.c | 38 ++++++++++++++++++++++++++++++-------- > 6 files changed, 54 insertions(+), 8 deletions(-) > create mode 100644 m4/package_libcdev.m4 > > diff --git a/configure.ac b/configure.ac > index 59f9564..28e604e 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -82,6 +82,8 @@ AC_PACKAGE_NEED_ATTRIBUTES_H > AC_PACKAGE_NEED_ATTRIBUTES_MACROS > AC_PACKAGE_NEED_ATTRGET_LIBATTR > > +AC_HAVE_UTIMENSAT > + > AC_MANUAL_FORMAT > > AC_CONFIG_FILES([include/builddefs]) > diff --git a/include/builddefs.in b/include/builddefs.in > index 269c928..bdf0ede 100644 > --- a/include/builddefs.in > +++ b/include/builddefs.in > @@ -69,6 +69,7 @@ ENABLE_SHARED = @enable_shared@ > ENABLE_GETTEXT = @enable_gettext@ > > HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ > +HAVE_UTIMENSAT = @have_utimensat@ > > GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall > # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl > diff --git a/m4/Makefile b/m4/Makefile > index 9a35056..ae452f7 100644 > --- a/m4/Makefile > +++ b/m4/Makefile > @@ -16,6 +16,7 @@ LSRCFILES = \ > manual_format.m4 \ > package_attrdev.m4 \ > package_globals.m4 \ > + package_libcdev.m4 \ > package_ncurses.m4 \ > package_pthread.m4 \ > package_utilies.m4 \ > diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 > new file mode 100644 > index 0000000..6fcbdba > --- /dev/null > +++ b/m4/package_libcdev.m4 > @@ -0,0 +1,16 @@ > +# > +# Check if we have a utimensat libc call > +# > +AC_DEFUN([AC_HAVE_UTIMENSAT], > + [ AC_MSG_CHECKING([for utimensat]) > + AC_TRY_COMPILE([ (as discussed on IRC...) I think you need AC_TRY_LINK here; changing utimensat() to utimensatFOO() still passes. ;) -Eric From bfoster@redhat.com Thu Sep 4 16:35:23 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 E62877F37 for ; Thu, 4 Sep 2014 16:35:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 835F5AC003 for ; Thu, 4 Sep 2014 14:35:19 -0700 (PDT) X-ASG-Debug-ID: 1409866515-04bdf0109a766a40001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 9Aqr9nZo3erhH2eJ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 04 Sep 2014 14:35: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-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s84LZEP2008001 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 4 Sep 2014 17:35:14 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s84LZD7h011318; Thu, 4 Sep 2014 17:35:13 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 2BC191256F8; Thu, 4 Sep 2014 17:35:12 -0400 (EDT) Date: Thu, 4 Sep 2014 17:35:12 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Message-ID: <20140904213511.GA902@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> <5408C1B4.1010001@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5408C1B4.1010001@sandeen.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: 1409866515 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, Sep 04, 2014 at 02:47:00PM -0500, Eric Sandeen wrote: > On 9/4/14, 11:38 AM, Brian Foster wrote: > >xfsdump encodes and stores the full atime and mtime for each file with > >nanosecond resolution. xfsrestore uses utime() to set the times of each > >file that is restored. The latter supports resolution of 1 second, thus > >sub-second timestamp data is lost on restore. > > > >Add the associated configure checks for and use utimensat() when > >available to restore timestamps with nanosecond resolution. Create a new > >helper to facilitate conditional support for utimensat(). > > > >Signed-off-by: Brian Foster > >--- > > > >I'm not totally sure on the configure bits here... it's mostly copied > >from xfsprogs and tweaked appropriately. It seems to work, at least. ;) > > > >Brian > > > > configure.ac | 2 ++ > > include/builddefs.in | 1 + > > m4/Makefile | 1 + > > m4/package_libcdev.m4 | 16 ++++++++++++++++ > > restore/Makefile | 4 ++++ > > restore/content.c | 38 ++++++++++++++++++++++++++++++-------- > > 6 files changed, 54 insertions(+), 8 deletions(-) > > create mode 100644 m4/package_libcdev.m4 > > > >diff --git a/configure.ac b/configure.ac > >index 59f9564..28e604e 100644 > >--- a/configure.ac > >+++ b/configure.ac > >@@ -82,6 +82,8 @@ AC_PACKAGE_NEED_ATTRIBUTES_H > > AC_PACKAGE_NEED_ATTRIBUTES_MACROS > > AC_PACKAGE_NEED_ATTRGET_LIBATTR > > > >+AC_HAVE_UTIMENSAT > >+ > > AC_MANUAL_FORMAT > > > > AC_CONFIG_FILES([include/builddefs]) > >diff --git a/include/builddefs.in b/include/builddefs.in > >index 269c928..bdf0ede 100644 > >--- a/include/builddefs.in > >+++ b/include/builddefs.in > >@@ -69,6 +69,7 @@ ENABLE_SHARED = @enable_shared@ > > ENABLE_GETTEXT = @enable_gettext@ > > > > HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ > >+HAVE_UTIMENSAT = @have_utimensat@ > > > > GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall > > # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl > >diff --git a/m4/Makefile b/m4/Makefile > >index 9a35056..ae452f7 100644 > >--- a/m4/Makefile > >+++ b/m4/Makefile > >@@ -16,6 +16,7 @@ LSRCFILES = \ > > manual_format.m4 \ > > package_attrdev.m4 \ > > package_globals.m4 \ > >+ package_libcdev.m4 \ > > package_ncurses.m4 \ > > package_pthread.m4 \ > > package_utilies.m4 \ > >diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 > >new file mode 100644 > >index 0000000..6fcbdba > >--- /dev/null > >+++ b/m4/package_libcdev.m4 > >@@ -0,0 +1,16 @@ > >+# > >+# Check if we have a utimensat libc call > >+# > >+AC_DEFUN([AC_HAVE_UTIMENSAT], > >+ [ AC_MSG_CHECKING([for utimensat]) > >+ AC_TRY_COMPILE([ > > (as discussed on IRC...) > > I think you need AC_TRY_LINK here; changing utimensat() to utimensatFOO() still > passes. ;) > Yeah... I tested that by breaking the function signature. I'm guessing this does a 'gcc -c,' which lets me compile pretty much any kind of call if no function declaration is found in a header. AC_TRY_LINK() does what we want. Thanks for catching that. Brian > -Eric From bfoster@redhat.com Thu Sep 4 16:42:23 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 2B5157F37 for ; Thu, 4 Sep 2014 16:42:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E0E43304059 for ; Thu, 4 Sep 2014 14:42:22 -0700 (PDT) X-ASG-Debug-ID: 1409866941-04bdf010a1766ec0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id rq5gKN3Nl0utAWH7 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 04 Sep 2014 14:42: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-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s84LgLXD009509 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Thu, 4 Sep 2014 17:42:21 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s84LgL8J013261 for ; Thu, 4 Sep 2014 17:42:21 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 98E0F1256F8; Thu, 4 Sep 2014 17:42:19 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH v2] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Date: Thu, 4 Sep 2014 17:42:19 -0400 X-ASG-Orig-Subj: [PATCH v2] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Message-Id: <1409866939-1480-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: 1409866941 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 xfsdump encodes and stores the full atime and mtime for each file with nanosecond resolution. xfsrestore uses utime() to set the times of each file that is restored. The latter supports resolution of 1 second, thus sub-second timestamp data is lost on restore. Add the associated configure checks for and use utimensat() when available to restore timestamps with nanosecond resolution. Create a new helper to facilitate conditional support for utimensat(). Signed-off-by: Brian Foster --- v2: - Use AC_TRY_LINK() instead of AC_TRY_COMPILE() to ensure utimensat() exists. v1: http://oss.sgi.com/archives/xfs/2014-09/msg00025.html configure.ac | 2 ++ include/builddefs.in | 1 + m4/Makefile | 1 + m4/package_libcdev.m4 | 16 ++++++++++++++++ restore/Makefile | 4 ++++ restore/content.c | 38 ++++++++++++++++++++++++++++++-------- 6 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 m4/package_libcdev.m4 diff --git a/configure.ac b/configure.ac index 59f9564..28e604e 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,8 @@ AC_PACKAGE_NEED_ATTRIBUTES_H AC_PACKAGE_NEED_ATTRIBUTES_MACROS AC_PACKAGE_NEED_ATTRGET_LIBATTR +AC_HAVE_UTIMENSAT + AC_MANUAL_FORMAT AC_CONFIG_FILES([include/builddefs]) diff --git a/include/builddefs.in b/include/builddefs.in index 269c928..bdf0ede 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -69,6 +69,7 @@ ENABLE_SHARED = @enable_shared@ ENABLE_GETTEXT = @enable_gettext@ HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ +HAVE_UTIMENSAT = @have_utimensat@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl diff --git a/m4/Makefile b/m4/Makefile index 9a35056..ae452f7 100644 --- a/m4/Makefile +++ b/m4/Makefile @@ -16,6 +16,7 @@ LSRCFILES = \ manual_format.m4 \ package_attrdev.m4 \ package_globals.m4 \ + package_libcdev.m4 \ package_ncurses.m4 \ package_pthread.m4 \ package_utilies.m4 \ diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 new file mode 100644 index 0000000..8301ca6 --- /dev/null +++ b/m4/package_libcdev.m4 @@ -0,0 +1,16 @@ +# +# Check if we have a utimensat libc call +# +AC_DEFUN([AC_HAVE_UTIMENSAT], + [ AC_MSG_CHECKING([for utimensat]) + AC_TRY_LINK([ +#define _ATFILE_SOURCE +#include +#include + ], [ + utimensat(AT_FDCWD, 0, 0, AT_SYMLINK_NOFOLLOW); + ], have_utimensat=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_utimensat) + ]) diff --git a/restore/Makefile b/restore/Makefile index c6f3f25..c5cf925 100644 --- a/restore/Makefile +++ b/restore/Makefile @@ -102,6 +102,10 @@ LTDEPENDENCIES = $(LIBRMT) LCFLAGS = -DRESTORE +ifeq ($(HAVE_UTIMENSAT),yes) +LCFLAGS += -DHAVE_UTIMENSAT +endif + default: depend $(LTCOMMAND) include $(BUILDRULES) diff --git a/restore/content.c b/restore/content.c index cfcf94d..65dc2f5 100644 --- a/restore/content.c +++ b/restore/content.c @@ -7418,6 +7418,34 @@ done: return 0; } +/* + * Set the access and modification times for a file. + */ +static int +restore_file_amtime( + const char *path, + struct bstat *bstatp) +{ + int rval; + +#ifdef HAVE_UTIMENSAT + struct timespec times[2]; + + times[0].tv_sec = bstatp->bs_atime.tv_sec; + times[0].tv_nsec = bstatp->bs_atime.tv_nsec; + times[1].tv_sec = bstatp->bs_mtime.tv_sec; + times[1].tv_nsec = bstatp->bs_mtime.tv_nsec; + rval = utimensat(AT_FDCWD, path, times, 0); +#else + struct utimbuf utimbuf; + + utimbuf.actime = ( time32_t )bstatp->bs_atime.tv_sec; + utimbuf.modtime = ( time32_t )bstatp->bs_mtime.tv_sec; + rval = utime(path, &utimbuf); +#endif + return rval; +} + /* called to begin a regular file. if no path given, or if just toc, * don't actually write, just read. also get into that situation if * cannot prepare destination. fd == -1 signifies no write. *statp @@ -7671,7 +7699,6 @@ restore_complete_reg(stream_context_t *strcxtp) bstat_t *bstatp = &strcxtp->sc_bstat; char *path = strcxtp->sc_path; intgen_t fd = strcxtp->sc_fd; - struct utimbuf utimbuf; intgen_t rval; // only applies to regular files @@ -7688,9 +7715,7 @@ restore_complete_reg(stream_context_t *strcxtp) /* set the access and modification times */ - utimbuf.actime = ( time32_t )bstatp->bs_atime.tv_sec; - utimbuf.modtime = ( time32_t )bstatp->bs_mtime.tv_sec; - rval = utime( path, &utimbuf ); + rval = restore_file_amtime(path, bstatp); if ( rval ) { mlog( MLOG_VERBOSE | MLOG_WARNING, _( "unable to set access and modification " @@ -7770,7 +7795,6 @@ static bool_t restore_spec( filehdr_t *fhdrp, rv_t *rvp, char *path ) { bstat_t *bstatp = &fhdrp->fh_stat; - struct utimbuf utimbuf; char *printstr; intgen_t rval; @@ -7913,9 +7937,7 @@ restore_spec( filehdr_t *fhdrp, rv_t *rvp, char *path ) /* set the access and modification times */ - utimbuf.actime = ( time32_t )bstatp->bs_atime.tv_sec; - utimbuf.modtime = ( time32_t )bstatp->bs_mtime.tv_sec; - rval = utime( path, &utimbuf ); + rval = restore_file_amtime(path, bstatp); if ( rval ) { mlog( MLOG_VERBOSE | MLOG_WARNING, _( "unable to set access and modification " -- 1.8.3.1 From david@fromorbit.com Thu Sep 4 19:39:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9F0967F37 for ; Thu, 4 Sep 2014 19:39:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6AC818F8049 for ; Thu, 4 Sep 2014 17:39:26 -0700 (PDT) X-ASG-Debug-ID: 1409877560-04bdf0109776e7f0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id o5qq1Y2gP3PMqeGc for ; Thu, 04 Sep 2014 17:39:20 -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: AiV/AN0ECVR5LKYhPGdsb2JhbABZgw2BKoIshQeGFaIBBppBhWkBAwEBAYEIFwUBAQEBODaEAwEBBAE6HCMFCwgDGAklDwUlAwcaExSIJge9WAEXGIVkiVEHhEwBBI8pjUKZFisvgk8BAQE Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail06.adl6.internode.on.net with ESMTP; 05 Sep 2014 10:09:20 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XPhYc-0007hT-Mv; Fri, 05 Sep 2014 10:39:18 +1000 Date: Fri, 5 Sep 2014 10:39:18 +1000 From: Dave Chinner To: Felipe Monteiro de Carvalho Cc: xfs@oss.sgi.com Subject: Re: Ghost items in the end of a dir listing Message-ID: <20140905003918.GT20518@dastard> X-ASG-Orig-Subj: Re: Ghost items in the end of a dir listing 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: 1409877560 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.9186 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Sep 04, 2014 at 12:14:39PM +0200, Felipe Monteiro de Carvalho wrote: > Hello, > > No ideas about this? =( I know *exactly* what is going on. > Any kind of tip would be really appreciated =) TANSTAAFL. You are asking an open source community for help developing your closed source project. If you want our help, then it should be pretty obvious what you need to do.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Sep 4 19:45:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 BA0327F37 for ; Thu, 4 Sep 2014 19:45:15 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 617FFAC003 for ; Thu, 4 Sep 2014 17:45:12 -0700 (PDT) X-ASG-Debug-ID: 1409877910-04bdf010a176eb20001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id VDGRG3O3zj19nlhw for ; Thu, 04 Sep 2014 17:45: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: AuIuAFoHCVR5LKYhPGdsb2JhbABZgw2BKoIshQeoFgaaQYVpAQMBAQGBCBcFAQEBATg2hAQBBTocIxAIAw4KCSUPBSUDBxoTiEG9WgEXGIVkiVEHhEwFnGuXPoFYKy+CTwEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail06.adl6.internode.on.net with ESMTP; 05 Sep 2014 10:15:03 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XPhe9-0007iN-HC; Fri, 05 Sep 2014 10:45:01 +1000 Date: Fri, 5 Sep 2014 10:45:01 +1000 From: Dave Chinner To: Brian Foster Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Message-ID: <20140905004501.GU20518@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1409848708-42666-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: 1409877910 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.9186 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Sep 04, 2014 at 12:38:28PM -0400, Brian Foster wrote: > xfsdump encodes and stores the full atime and mtime for each file with > nanosecond resolution. xfsrestore uses utime() to set the times of each > file that is restored. The latter supports resolution of 1 second, thus > sub-second timestamp data is lost on restore. That doesn't seem like a big deal. What sort of problems does this actually cause? FYI, many linux filesystems only have second resolution timestamps and hence applications can't rely on sub-second timestamp resolution to actually mean anything useful.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Thu Sep 4 20:04:55 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 A41717F37 for ; Thu, 4 Sep 2014 20:04:55 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7F4B38F8040 for ; Thu, 4 Sep 2014 18:04:52 -0700 (PDT) X-ASG-Debug-ID: 1409879091-04cb6c54ff7d2990001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id fJwsNMReQI2QNni7 for ; Thu, 04 Sep 2014 18:04:51 -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 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 371AE653AF00; Thu, 4 Sep 2014 20:04:51 -0500 (CDT) Message-ID: <54090C33.2060102@sandeen.net> Date: Thu, 04 Sep 2014 20:04:51 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Dave Chinner , Brian Foster CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> <20140905004501.GU20518@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution In-Reply-To: <20140905004501.GU20518@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1409879091 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.9186 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 9/4/14, 7:45 PM, Dave Chinner wrote: > On Thu, Sep 04, 2014 at 12:38:28PM -0400, Brian Foster wrote: >> xfsdump encodes and stores the full atime and mtime for each file with >> nanosecond resolution. xfsrestore uses utime() to set the times of each >> file that is restored. The latter supports resolution of 1 second, thus >> sub-second timestamp data is lost on restore. > > That doesn't seem like a big deal. What sort of problems does this > actually cause? > > FYI, many linux filesystems only have second resolution timestamps > and hence applications can't rely on sub-second timestamp resolution > to actually mean anything useful.... But why not restore the same resolution as is actually stored in the dump? Throwing it away seems odd, and restoring it looks easy enough. In any case, there was a user who noticed & complained. Seems like a very reasonable thing to fix, to me. -Eric From david@fromorbit.com Thu Sep 4 20:24:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 30C907F37 for ; Thu, 4 Sep 2014 20:24:15 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AFDC2AC001 for ; Thu, 4 Sep 2014 18:24:11 -0700 (PDT) X-ASG-Debug-ID: 1409880248-04cb6c54fe7d31c0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id htIZOf7L21BC1k27 for ; Thu, 04 Sep 2014 18:24:09 -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: AuQuAI0PCVR5LKYhPGdsb2JhbABZgw2BKoIshQeoFwaaQYVpAQMBAQGBCBcFAQEBATg2hAMBAQQBOhwjBQsIAxgJJQ8FJQMHGhOIOge9YAEXGIVkiVEHhEwFnGuXPoFYKy+CTwEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail06.adl6.internode.on.net with ESMTP; 05 Sep 2014 10:54:07 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XPiFw-0007nZ-V6; Fri, 05 Sep 2014 11:24:04 +1000 Date: Fri, 5 Sep 2014 11:24:04 +1000 From: Dave Chinner To: Eric Sandeen Cc: Brian Foster , xfs@oss.sgi.com Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Message-ID: <20140905012404.GV20518@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> <20140905004501.GU20518@dastard> <54090C33.2060102@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <54090C33.2060102@sandeen.net> 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: 1409880248 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.9187 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Sep 04, 2014 at 08:04:51PM -0500, Eric Sandeen wrote: > On 9/4/14, 7:45 PM, Dave Chinner wrote: > >On Thu, Sep 04, 2014 at 12:38:28PM -0400, Brian Foster wrote: > >>xfsdump encodes and stores the full atime and mtime for each file with > >>nanosecond resolution. xfsrestore uses utime() to set the times of each > >>file that is restored. The latter supports resolution of 1 second, thus > >>sub-second timestamp data is lost on restore. > > > >That doesn't seem like a big deal. What sort of problems does this > >actually cause? > > > >FYI, many linux filesystems only have second resolution timestamps > >and hence applications can't rely on sub-second timestamp resolution > >to actually mean anything useful.... > > But why not restore the same resolution as is actually stored in the dump? > Throwing it away seems odd, and restoring it looks easy enough. Comes from a time when we couldn't restore what was in the dump. :/ > In any case, there was a user who noticed & complained. Seems like a > very reasonable thing to fix, to me. Sure, but we don't make changes with the justification "just because". xfsrestore has had this behaviour since dump/restore was first introduced, so first we need to understand what the actual problem is. Was the user complaining because they noticed they were "different" in passing, or was it noticed because the difference is the root cause of some other problem? Cheers, Dave. -- Dave Chinner david@fromorbit.com From s.priebe@profihost.ag Fri Sep 5 04:47:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 1E1AB7F3F for ; Fri, 5 Sep 2014 04:47:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0B44F30404E for ; Fri, 5 Sep 2014 02:47:32 -0700 (PDT) X-ASG-Debug-ID: 1409910450-04cbb05486a6b8d0001-NocioJ Received: from mail-ph.de-nserver.de (mail-ph.de-nserver.de [85.158.179.214]) by cuda.sgi.com with ESMTP id dbMlkDQsBWLZKJDR (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 02:47:31 -0700 (PDT) X-Barracuda-Envelope-From: s.priebe@profihost.ag X-Barracuda-Apparent-Source-IP: 85.158.179.214 Received: (qmail 8072 invoked from network); 5 Sep 2014 11:47:29 +0200 X-Fcrdns: No Received: from phoffice.de-nserver.de (HELO [10.11.11.93]) (185.39.223.5) (smtp-auth username hostmaster@profihost.com, mechanism plain) by mail-ph.de-nserver.de (qpsmtpd/0.92) with (ECDHE-RSA-AES256-SHA encrypted) ESMTPSA; Fri, 05 Sep 2014 11:47:29 +0200 Message-ID: <540986B1.4080306@profihost.ag> Date: Fri, 05 Sep 2014 11:47:29 +0200 From: Stefan Priebe - Profihost AG User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: "xfs@oss.sgi.com" Subject: Is XFS suitable for 350 million files on 20TB storage? Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: Is XFS suitable for 350 million files on 20TB storage? Content-Transfer-Encoding: 7bit X-User-Auth: Auth by hostmaster@profihost.com through 185.39.223.5 X-Barracuda-Connect: mail-ph.de-nserver.de[85.158.179.214] X-Barracuda-Start-Time: 1409910450 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.9198 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, i have a backup system running 20TB of storage having 350 million files. This was working fine for month. But now the free space is so heavily fragmented that i only see the kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the 20TB are in use. Overall files are 350 Million - all in different directories. Max 5000 per dir. Kernel is 3.10.53 and mount options are: noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota # xfs_db -r -c freesp /dev/sda1 from to extents blocks pct 1 1 29484138 29484138 2,16 2 3 16930134 39834672 2,92 4 7 16169985 87877159 6,45 8 15 78202543 999838327 73,41 16 31 3562456 83746085 6,15 32 63 2370812 102124143 7,50 64 127 280885 18929867 1,39 256 511 2 827 0,00 512 1023 65 35092 0,00 2048 4095 2 6561 0,00 16384 32767 1 23951 0,00 Is there anything i can optimize? Or is it just a bad idea to do this with XFS? Any other options? Maybe rsync options like --inplace / --no-whole-file? Greets, Stefan From bfoster@redhat.com Fri Sep 5 06:07:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 A9BD97F3F for ; Fri, 5 Sep 2014 06:07:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 536B7AC003 for ; Fri, 5 Sep 2014 04:07:54 -0700 (PDT) X-ASG-Debug-ID: 1409915270-04bdf010a0781990001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id uisHmQYtTYkEN9xE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 04:07: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-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s85B7ghk031989 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 5 Sep 2014 07:07:42 -0400 Received: from laptop.bfoster (vpn-61-160.rdu2.redhat.com [10.10.61.160]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s85B7eB1014567 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO); Fri, 5 Sep 2014 07:07:41 -0400 Date: Fri, 5 Sep 2014 07:02:12 -0400 From: Brian Foster To: Dave Chinner Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Message-ID: <20140905110211.GA3208@laptop.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> <20140905004501.GU20518@dastard> <54090C33.2060102@sandeen.net> <20140905012404.GV20518@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140905012404.GV20518@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: 1409915270 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, Sep 05, 2014 at 11:24:04AM +1000, Dave Chinner wrote: > On Thu, Sep 04, 2014 at 08:04:51PM -0500, Eric Sandeen wrote: > > On 9/4/14, 7:45 PM, Dave Chinner wrote: > > >On Thu, Sep 04, 2014 at 12:38:28PM -0400, Brian Foster wrote: > > >>xfsdump encodes and stores the full atime and mtime for each file with > > >>nanosecond resolution. xfsrestore uses utime() to set the times of each > > >>file that is restored. The latter supports resolution of 1 second, thus > > >>sub-second timestamp data is lost on restore. > > > > > >That doesn't seem like a big deal. What sort of problems does this > > >actually cause? > > > > > >FYI, many linux filesystems only have second resolution timestamps > > >and hence applications can't rely on sub-second timestamp resolution > > >to actually mean anything useful.... > > > > But why not restore the same resolution as is actually stored in the dump? > > Throwing it away seems odd, and restoring it looks easy enough. > > Comes from a time when we couldn't restore what was in the dump. :/ > > > In any case, there was a user who noticed & complained. Seems like a > > very reasonable thing to fix, to me. > > Sure, but we don't make changes with the justification "just > because". xfsrestore has had this behaviour since dump/restore was > first introduced, so first we need to understand what the actual > problem is. Was the user complaining because they noticed they were > "different" in passing, or was it noticed because the difference is > the root cause of some other problem? > No problems that I'm aware of. As Eric mentioned, it was noticed during an evaluation of possible data transfer mechanisms for a glusterfs setup. The user had to evaluate whether it would lead to any issues (a geo-replication tracking thing I suspect) for a customer, but I hadn't heard anything that suggested it was. The utime() call appears to be obsolete as well, for whatever that's worth. Brian > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com From greg.freemyer@gmail.com Fri Sep 5 06:19:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E206C7F3F for ; Fri, 5 Sep 2014 06:19:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id CF409304070 for ; Fri, 5 Sep 2014 04:19:40 -0700 (PDT) X-ASG-Debug-ID: 1409915975-04cb6c54fd7e46f0001-NocioJ Received: from mail-qg0-f42.google.com (mail-qg0-f42.google.com [209.85.192.42]) by cuda.sgi.com with ESMTP id HQ45p3JsZoJxDKjt (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 05 Sep 2014 04:19:36 -0700 (PDT) X-Barracuda-Envelope-From: greg.freemyer@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.192.42 X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.42] Received: by mail-qg0-f42.google.com with SMTP id q107so2274894qgd.15 for ; Fri, 05 Sep 2014 04:19:35 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.42] X-Barracuda-IPDD: Level1 [gmail.com/209.85.192.42] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=user-agent:in-reply-to:references:mime-version :content-transfer-encoding:content-type:subject:from:date:to:cc :message-id; bh=Nq5x1wX3+z4pJTTiM4O/97qq8Sf+wcjFUAFSO0Gsa1o=; b=X3T/bP67ljXIxMZINYG3oJp38f1HTCnF7MDRGtST9q4UTky/LGjH3EOszRA9WTXsc7 /xEjXGSqBs9S5pyHNGoD0q8Jx0imX0+3V2xfKiNuOKv7lHCkSSU1juYWMv1khUaiqedw U5j0m+q8uLvzstP83ISegu/qZr4RiOdccOL0JpchOSeLfO3QSXA1Y5CgijH/c/oktgvQ RxqKatKPUoeqqruLhISZPaGFjnyveGGKZYPjbUs2Bp3P/w7Tz8rFKxjvI/MGlW8EuFg6 EGDMFVgjkbcc+qIStkCLYvyg5azg9/FRISmNSbwyao/tdrUWTRQbCZh6/wzBZLKl0Onj gsug== X-Received: by 10.224.11.212 with SMTP id u20mr7940769qau.82.1409915975741; Fri, 05 Sep 2014 04:19:35 -0700 (PDT) Received: from [192.168.3.73] (c-98-251-114-210.hsd1.ga.comcast.net. [98.251.114.210]) by mx.google.com with ESMTPSA id 95sm567484qgm.18.2014.09.05.04.19.33 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 05 Sep 2014 04:19:34 -0700 (PDT) User-Agent: K-9 Mail for Android In-Reply-To: <20140905110211.GA3208@laptop.bfoster> References: <1409848708-42666-1-git-send-email-bfoster@redhat.com> <20140905004501.GU20518@dastard> <54090C33.2060102@sandeen.net> <20140905012404.GV20518@dastard> <20140905110211.GA3208@laptop.bfoster> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Subject: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution From: Greg Freemyer X-ASG-Orig-Subj: Re: [PATCH] xfsrestore: use utimensat() to provide atime/mtime with ns resolution Date: Fri, 05 Sep 2014 07:19:29 -0400 To: Brian Foster ,Dave Chinner CC: Eric Sandeen ,xfs@oss.sgi.com Message-ID: <21bfe93e-aadc-47d9-a49d-ec5207a72d99@email.android.com> X-Barracuda-Connect: mail-qg0-f42.google.com[209.85.192.42] X-Barracuda-Start-Time: 1409915976 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.9200 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 September 5, 2014 7:02:12 AM EDT, Brian Foster wrote: >On Fri, Sep 05, 2014 at 11:24:04AM +1000, Dave Chinner wrote: >> On Thu, Sep 04, 2014 at 08:04:51PM -0500, Eric Sandeen wrote: >> > On 9/4/14, 7:45 PM, Dave Chinner wrote: >> > >On Thu, Sep 04, 2014 at 12:38:28PM -0400, Brian Foster wrote: >> > >>xfsdump encodes and stores the full atime and mtime for each file >with >> > >>nanosecond resolution. xfsrestore uses utime() to set the times >of each >> > >>file that is restored. The latter supports resolution of 1 >second, thus >> > >>sub-second timestamp data is lost on restore. >> > > >> > >That doesn't seem like a big deal. What sort of problems does this >> > >actually cause? >> > > >> > >FYI, many linux filesystems only have second resolution timestamps >> > >and hence applications can't rely on sub-second timestamp >resolution >> > >to actually mean anything useful.... >> > >> > But why not restore the same resolution as is actually stored in >the dump? >> > Throwing it away seems odd, and restoring it looks easy enough. >> >> Comes from a time when we couldn't restore what was in the dump. :/ >> >> > In any case, there was a user who noticed & complained. Seems like >a >> > very reasonable thing to fix, to me. >> >> Sure, but we don't make changes with the justification "just >> because". xfsrestore has had this behaviour since dump/restore was >> first introduced, so first we need to understand what the actual >> problem is. Was the user complaining because they noticed they were >> "different" in passing, or was it noticed because the difference is >> the root cause of some other problem? >> > >No problems that I'm aware of. As Eric mentioned, it was noticed during >an evaluation of possible data transfer mechanisms for a glusterfs >setup. The user had to evaluate whether it would lead to any issues (a >geo-replication tracking thing I suspect) for a customer, but I hadn't >heard anything that suggested it was. The utime() call appears to be >obsolete as well, for whatever that's worth. > >Brian During forensic exams, detailed examination of timestamps can be useful. For instance I saw a report recently that timestamps with only milliseconds precision (xxx.yyy00000) are an indication that malware has overridden the timestamp. It seems that the Windows api in particular has a time set mechanism that supports millisecond precision only. Thus xfs backing a samba share would I assume share that same forensic detail. The average breach is not detected until months after the initial penetration, so a xfsrestore between the activity of interest and the time of the investigation is very much a possibility. I don't know if you care about that use case. Greg -- Sent from my Android phone with K-9 Mail. Please excuse my brevity. From stefanrin@gmail.com Fri Sep 5 07:15:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 CB8DC7F3F for ; Fri, 5 Sep 2014 07:15:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id B9BE58F8035 for ; Fri, 5 Sep 2014 05:15:10 -0700 (PDT) X-ASG-Debug-ID: 1409919308-04cb6c54ff7e6340001-NocioJ Received: from mail-we0-f171.google.com (mail-we0-f171.google.com [74.125.82.171]) by cuda.sgi.com with ESMTP id zphGMoXNNHppcrVq (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 05 Sep 2014 05:15:09 -0700 (PDT) X-Barracuda-Envelope-From: stefanrin@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.171 Received: by mail-we0-f171.google.com with SMTP id u56so11804940wes.2 for ; Fri, 05 Sep 2014 05:15:03 -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 :content-type; bh=6JCnedpCbsKucT31UmMHXCBUP9ZpxDVL9C2lLdYL1Jw=; b=HCp9D5vUtLOkdRs/eerHQfVkPbszgvPegJ5wzoBIKUT4ANqjd1jWXIRYaKDeRogqHr pSIo3M6sMyRZBXmzgEiptqgfH0oja4GR2UXcOEcFV1vOmrdwtWasSYLSvUNR3RQBPNFN 3kW5+czNyM95FhbahxgI9/I4KxbJE3RX+lBt9xjmoUxBAUUoCjqVZnL1NM07GKPdD/O2 ieX+s6Yh8D3QuB6fRix6paNt/AWz/OojgS3sK0i1sglkkBGvUXrPGusBQaBTc6WkPOuk qzePnFMCHVkTSU0ztcf9uGFVV+fESV86l6KRzqzIPekkOu/TMm35bdv+qT5Ny2fFVx0H VULQ== MIME-Version: 1.0 X-Received: by 10.194.176.68 with SMTP id cg4mr2855218wjc.132.1409919303488; Fri, 05 Sep 2014 05:15:03 -0700 (PDT) Received: by 10.194.80.161 with HTTP; Fri, 5 Sep 2014 05:15:03 -0700 (PDT) In-Reply-To: <20140829083738.GD20518@dastard> References: <3dc9caf6f9b415f6e4c0ebac1f1626d3@zbfmail.de> <20140827230732.GN20518@dastard> <20140829083738.GD20518@dastard> Date: Fri, 5 Sep 2014 14:15:03 +0200 Message-ID: Subject: Re: mount options question From: Stefan Ring X-ASG-Orig-Subj: Re: mount options question To: Xfs Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-we0-f171.google.com[74.125.82.171] X-Barracuda-Start-Time: 1409919309 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.9201 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 >> Mostly agreed, but using "discard" would be a no-brainer for me. I >> suppose XFS does not automatically switch it on for non-rotational >> storage. > > Yup, you're not using your brain. :P > > mount -o discard *sucks* on so many levels it is not funny. I don't > recommend that anybody *ever* use it, on XFS, ext4 or btrfs. Just > use fstrim if you ever need to clean up a SSD. Good to know, thanks! From bfoster@redhat.com Fri Sep 5 07:31:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9EEB17F3F for ; Fri, 5 Sep 2014 07:31:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2A366AC007 for ; Fri, 5 Sep 2014 05:31:03 -0700 (PDT) X-ASG-Debug-ID: 1409920262-04cbb05485a70990001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id SSw1fr7Xjcowx0ZP (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 05:31: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-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s85CV16b010407 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 5 Sep 2014 08:31:01 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s85CV0RU029584; Fri, 5 Sep 2014 08:31:00 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 3F3F41256F8; Fri, 5 Sep 2014 08:30:59 -0400 (EDT) Date: Fri, 5 Sep 2014 08:30:59 -0400 From: Brian Foster To: Stefan Priebe - Profihost AG Cc: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140905123058.GA29710@bfoster.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540986B1.4080306@profihost.ag> 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: 1409920262 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, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > Hi, > > i have a backup system running 20TB of storage having 350 million files. > This was working fine for month. > > But now the free space is so heavily fragmented that i only see the > kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > 20TB are in use. > > Overall files are 350 Million - all in different directories. Max 5000 > per dir. > > Kernel is 3.10.53 and mount options are: > noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > > # xfs_db -r -c freesp /dev/sda1 > from to extents blocks pct > 1 1 29484138 29484138 2,16 > 2 3 16930134 39834672 2,92 > 4 7 16169985 87877159 6,45 > 8 15 78202543 999838327 73,41 > 16 31 3562456 83746085 6,15 > 32 63 2370812 102124143 7,50 > 64 127 280885 18929867 1,39 > 256 511 2 827 0,00 > 512 1023 65 35092 0,00 > 2048 4095 2 6561 0,00 > 16384 32767 1 23951 0,00 > > Is there anything i can optimize? Or is it just a bad idea to do this > with XFS? Any other options? Maybe rsync options like --inplace / > --no-whole-file? > It's probably a good idea to include more information about your fs: http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F ... as well as what your typical workflow/dataset is for this fs. It seems like you have relatively small files (15TB used across 350m files is around 46k per file), yes? If so, I wonder if something like the following commit introduced in 3.12 would help: 133eeb17 xfs: don't use speculative prealloc for small files Brian > Greets, > Stefan > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From s.priebe@profihost.ag Fri Sep 5 07:40:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 7EA827F3F for ; Fri, 5 Sep 2014 07:40:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id ED874AC001 for ; Fri, 5 Sep 2014 05:40:35 -0700 (PDT) X-ASG-Debug-ID: 1409920833-04cbb05487a70e00001-NocioJ Received: from mail-ph.de-nserver.de (mail-ph.de-nserver.de [85.158.179.214]) by cuda.sgi.com with ESMTP id 2YhsP0qR1jKU4a6O (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 05:40:33 -0700 (PDT) X-Barracuda-Envelope-From: s.priebe@profihost.ag X-Barracuda-Apparent-Source-IP: 85.158.179.214 Received: (qmail 28501 invoked from network); 5 Sep 2014 14:40:32 +0200 X-Fcrdns: No Received: from phoffice.de-nserver.de (HELO [10.11.11.93]) (185.39.223.5) (smtp-auth username hostmaster@profihost.com, mechanism plain) by mail-ph.de-nserver.de (qpsmtpd/0.92) with (ECDHE-RSA-AES256-SHA encrypted) ESMTPSA; Fri, 05 Sep 2014 14:40:32 +0200 Message-ID: <5409AF40.10801@profihost.ag> Date: Fri, 05 Sep 2014 14:40:32 +0200 From: Stefan Priebe - Profihost AG User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: Brian Foster CC: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? In-Reply-To: <20140905123058.GA29710@bfoster.bfoster> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-User-Auth: Auth by hostmaster@profihost.com through 185.39.223.5 X-Barracuda-Connect: mail-ph.de-nserver.de[85.158.179.214] X-Barracuda-Start-Time: 1409920833 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.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.9202 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 Am 05.09.2014 um 14:30 schrieb Brian Foster: > On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: >> Hi, >> >> i have a backup system running 20TB of storage having 350 million files. >> This was working fine for month. >> >> But now the free space is so heavily fragmented that i only see the >> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the >> 20TB are in use. >> >> Overall files are 350 Million - all in different directories. Max 5000 >> per dir. >> >> Kernel is 3.10.53 and mount options are: >> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota >> >> # xfs_db -r -c freesp /dev/sda1 >> from to extents blocks pct >> 1 1 29484138 29484138 2,16 >> 2 3 16930134 39834672 2,92 >> 4 7 16169985 87877159 6,45 >> 8 15 78202543 999838327 73,41 >> 16 31 3562456 83746085 6,15 >> 32 63 2370812 102124143 7,50 >> 64 127 280885 18929867 1,39 >> 256 511 2 827 0,00 >> 512 1023 65 35092 0,00 >> 2048 4095 2 6561 0,00 >> 16384 32767 1 23951 0,00 >> >> Is there anything i can optimize? Or is it just a bad idea to do this >> with XFS? Any other options? Maybe rsync options like --inplace / >> --no-whole-file? >> > > It's probably a good idea to include more information about your fs: > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F Generally sure but the problem itself is clear. If you look at the free space allocation you see that free space is heavily fragmented. But here you go: - 3.10.53 vanilla - xfs_repair version 3.1.11 - 16 cores - /dev/sda1 /backup xfs rw,noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota 0 0 - Raid 10 with 1GB controller cache running in write back mode using 24 spinners - no lvm - no io waits - xfs_info /serverbackup/ meta-data=/dev/sda1 isize=256 agcount=21, agsize=268435455 blks = sectsz=512 attr=2 data = bsize=4096 blocks=5369232896, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=521728, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 anything missing? > ... as well as what your typical workflow/dataset is for this fs. It > seems like you have relatively small files (15TB used across 350m files > is around 46k per file), yes? Yes - most fo them are even smaller. And some files are > 5GB. > If so, I wonder if something like the > following commit introduced in 3.12 would help: > > 133eeb17 xfs: don't use speculative prealloc for small files Looks interesting. Stefan From bfoster@redhat.com Fri Sep 5 08:48:18 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 23CFA7F3F for ; Fri, 5 Sep 2014 08:48:18 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D996A304062 for ; Fri, 5 Sep 2014 06:48:14 -0700 (PDT) X-ASG-Debug-ID: 1409924893-04bdf01097787980001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id vmDv4oCnhJfZFSb8 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 06:48:13 -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 (8.14.4/8.14.4) with ESMTP id s85DmDt7002023 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 5 Sep 2014 09:48:13 -0400 Received: from laptop.bfoster (vpn-61-160.rdu2.redhat.com [10.10.61.160]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s85DmAvd025385 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO); Fri, 5 Sep 2014 09:48:12 -0400 Date: Fri, 5 Sep 2014 09:48:10 -0400 From: Brian Foster To: Stefan Priebe - Profihost AG Cc: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140905134810.GA3965@laptop.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5409AF40.10801@profihost.ag> 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: 1409924893 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, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > > Am 05.09.2014 um 14:30 schrieb Brian Foster: > > On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > >> Hi, > >> > >> i have a backup system running 20TB of storage having 350 million files. > >> This was working fine for month. > >> > >> But now the free space is so heavily fragmented that i only see the > >> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > >> 20TB are in use. > >> > >> Overall files are 350 Million - all in different directories. Max 5000 > >> per dir. > >> > >> Kernel is 3.10.53 and mount options are: > >> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > >> > >> # xfs_db -r -c freesp /dev/sda1 > >> from to extents blocks pct > >> 1 1 29484138 29484138 2,16 > >> 2 3 16930134 39834672 2,92 > >> 4 7 16169985 87877159 6,45 > >> 8 15 78202543 999838327 73,41 > >> 16 31 3562456 83746085 6,15 > >> 32 63 2370812 102124143 7,50 > >> 64 127 280885 18929867 1,39 > >> 256 511 2 827 0,00 > >> 512 1023 65 35092 0,00 > >> 2048 4095 2 6561 0,00 > >> 16384 32767 1 23951 0,00 > >> > >> Is there anything i can optimize? Or is it just a bad idea to do this > >> with XFS? Any other options? Maybe rsync options like --inplace / > >> --no-whole-file? > >> > > > > It's probably a good idea to include more information about your fs: > > > > http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > > Generally sure but the problem itself is clear. If you look at the free > space allocation you see that free space is heavily fragmented. > > But here you go: > - 3.10.53 vanilla > - xfs_repair version 3.1.11 > - 16 cores > - /dev/sda1 /backup xfs > rw,noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota 0 0 > - Raid 10 with 1GB controller cache running in write back mode using 24 > spinners > - no lvm > - no io waits > - xfs_info /serverbackup/ > meta-data=/dev/sda1 isize=256 agcount=21, > agsize=268435455 blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=5369232896, imaxpct=5 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 ascii-ci=0 > log =internal bsize=4096 blocks=521728, version=2 > = sectsz=512 sunit=0 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 > > anything missing? > What's the workload to the fs? Is it repeated rsync's from a constantly changing dataset? Do the files change frequently or are they only ever added/removed? Also, what is the characterization of writes being "slow?" An rsync is slower than normal? Sustained writes to a single file? How significant a degradation? Something like the following might be interesting as well: for i in $(seq 0 20); do xfs_db -c "agi $i" -c "p freecount" ; done Brian > > ... as well as what your typical workflow/dataset is for this fs. It > > seems like you have relatively small files (15TB used across 350m files > > is around 46k per file), yes? > > Yes - most fo them are even smaller. And some files are > 5GB. > > > If so, I wonder if something like the > > following commit introduced in 3.12 would help: > > > > 133eeb17 xfs: don't use speculative prealloc for small files > > Looks interesting. > > Stefan From s.priebe@profihost.ag Fri Sep 5 13:07:40 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 82E5D7F3F for ; Fri, 5 Sep 2014 13:07:40 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1FB65AC001 for ; Fri, 5 Sep 2014 11:07:36 -0700 (PDT) X-ASG-Debug-ID: 1409940453-04bdf0109a793490001-NocioJ Received: from mail-ph.de-nserver.de (mail-ph.de-nserver.de [85.158.179.214]) by cuda.sgi.com with ESMTP id cxSA6aUlbHVtD5fC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 11:07:34 -0700 (PDT) X-Barracuda-Envelope-From: s.priebe@profihost.ag X-Barracuda-Apparent-Source-IP: 85.158.179.214 Received: (qmail 25751 invoked from network); 5 Sep 2014 20:07:32 +0200 X-Fcrdns: No Received: from phoffice.de-nserver.de (HELO [10.242.2.6]) (185.39.223.5) (smtp-auth username s.priebe@profihost.ag, mechanism plain) by mail-ph.de-nserver.de (qpsmtpd/0.92) with (ECDHE-RSA-AES256-SHA encrypted) ESMTPSA; Fri, 05 Sep 2014 20:07:32 +0200 Message-ID: <5409FBEA.9050708@profihost.ag> Date: Fri, 05 Sep 2014 20:07:38 +0200 From: Stefan Priebe User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Brian Foster CC: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905134810.GA3965@laptop.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? In-Reply-To: <20140905134810.GA3965@laptop.bfoster> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-User-Auth: Auth by s.priebe@profihost.ag through 185.39.223.5 X-Barracuda-Connect: mail-ph.de-nserver.de[85.158.179.214] X-Barracuda-Start-Time: 1409940454 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.9209 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 Hi, Am 05.09.2014 15:48, schrieb Brian Foster: > On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: >> >> Am 05.09.2014 um 14:30 schrieb Brian Foster: >>> On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: >>>> Hi, >>>> >>>> i have a backup system running 20TB of storage having 350 million files. >>>> This was working fine for month. >>>> >>>> But now the free space is so heavily fragmented that i only see the >>>> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the >>>> 20TB are in use. >>>> >>>> Overall files are 350 Million - all in different directories. Max 5000 >>>> per dir. >>>> >>>> Kernel is 3.10.53 and mount options are: >>>> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota >>>> >>>> # xfs_db -r -c freesp /dev/sda1 >>>> from to extents blocks pct >>>> 1 1 29484138 29484138 2,16 >>>> 2 3 16930134 39834672 2,92 >>>> 4 7 16169985 87877159 6,45 >>>> 8 15 78202543 999838327 73,41 >>>> 16 31 3562456 83746085 6,15 >>>> 32 63 2370812 102124143 7,50 >>>> 64 127 280885 18929867 1,39 >>>> 256 511 2 827 0,00 >>>> 512 1023 65 35092 0,00 >>>> 2048 4095 2 6561 0,00 >>>> 16384 32767 1 23951 0,00 >>>> >>>> Is there anything i can optimize? Or is it just a bad idea to do this >>>> with XFS? Any other options? Maybe rsync options like --inplace / >>>> --no-whole-file? >>>> >>> >>> It's probably a good idea to include more information about your fs: >>> >>> http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F >> >> Generally sure but the problem itself is clear. If you look at the free >> space allocation you see that free space is heavily fragmented. >> >> But here you go: >> - 3.10.53 vanilla >> - xfs_repair version 3.1.11 >> - 16 cores >> - /dev/sda1 /backup xfs >> rw,noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota 0 0 >> - Raid 10 with 1GB controller cache running in write back mode using 24 >> spinners >> - no lvm >> - no io waits >> - xfs_info /serverbackup/ >> meta-data=/dev/sda1 isize=256 agcount=21, >> agsize=268435455 blks >> = sectsz=512 attr=2 >> data = bsize=4096 blocks=5369232896, imaxpct=5 >> = sunit=0 swidth=0 blks >> naming =version 2 bsize=4096 ascii-ci=0 >> log =internal bsize=4096 blocks=521728, version=2 >> = sectsz=512 sunit=0 blks, lazy-count=1 >> realtime =none extsz=4096 blocks=0, rtextents=0 >> >> anything missing? >> > > What's the workload to the fs? Is it repeated rsync's from a constantly > changing dataset? Do the files change frequently or are they only ever > added/removed? Yes it repeated rsync with constant changing files. About 10-20% of all files every week. A mixture of changing, removing / adding. > Also, what is the characterization of writes being "slow?" An rsync is > slower than normal? Sustained writes to a single file? How significant a > degradation? kworker is using all cpu while writing data to this xfs partition. rsync can just write at a rate of 32-128kb/s. > Something like the following might be interesting as well: > for i in $(seq 0 20); do xfs_db -c "agi $i" -c "p freecount" ; done freecount = 3189417 freecount = 1975726 freecount = 1309903 freecount = 1726846 freecount = 1271047 freecount = 1281956 freecount = 1571285 freecount = 1365473 freecount = 1238118 freecount = 1697011 freecount = 1000832 freecount = 1369791 freecount = 1706360 freecount = 1439165 freecount = 1656404 freecount = 1881762 freecount = 1593432 freecount = 1555909 freecount = 1197091 freecount = 1667467 freecount = 63 Thanks! Stefan > Brian > >>> ... as well as what your typical workflow/dataset is for this fs. It >>> seems like you have relatively small files (15TB used across 350m files >>> is around 46k per file), yes? >> >> Yes - most fo them are even smaller. And some files are > 5GB. >> >>> If so, I wonder if something like the >>> following commit introduced in 3.12 would help: >>> >>> 133eeb17 xfs: don't use speculative prealloc for small files >> >> Looks interesting. >> >> Stefan From bfoster@redhat.com Fri Sep 5 14:18:25 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 47BAA7F3F for ; Fri, 5 Sep 2014 14:18:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0AF09304053 for ; Fri, 5 Sep 2014 12:18:21 -0700 (PDT) X-ASG-Debug-ID: 1409944700-04bdf01097795d80001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id WzXPihWq4e090QW7 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 12:18:20 -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 (8.14.4/8.14.4) with ESMTP id s85JIJal017100 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 5 Sep 2014 15:18:19 -0400 Received: from laptop.bfoster (vpn-61-160.rdu2.redhat.com [10.10.61.160]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s85JIGeA014257 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO); Fri, 5 Sep 2014 15:18:18 -0400 Date: Fri, 5 Sep 2014 15:18:16 -0400 From: Brian Foster To: Stefan Priebe Cc: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140905191815.GB8400@laptop.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905134810.GA3965@laptop.bfoster> <5409FBEA.9050708@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5409FBEA.9050708@profihost.ag> 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: 1409944700 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, Sep 05, 2014 at 08:07:38PM +0200, Stefan Priebe wrote: > Hi, > > Am 05.09.2014 15:48, schrieb Brian Foster: > >On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > >> > >>Am 05.09.2014 um 14:30 schrieb Brian Foster: > >>>On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > >>>>Hi, > >>>> > >>>>i have a backup system running 20TB of storage having 350 million files. > >>>>This was working fine for month. > >>>> > >>>>But now the free space is so heavily fragmented that i only see the > >>>>kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > >>>>20TB are in use. > >>>> > >>>>Overall files are 350 Million - all in different directories. Max 5000 > >>>>per dir. > >>>> > >>>>Kernel is 3.10.53 and mount options are: > >>>>noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > >>>> > >>>># xfs_db -r -c freesp /dev/sda1 > >>>> from to extents blocks pct > >>>> 1 1 29484138 29484138 2,16 > >>>> 2 3 16930134 39834672 2,92 > >>>> 4 7 16169985 87877159 6,45 > >>>> 8 15 78202543 999838327 73,41 > >>>> 16 31 3562456 83746085 6,15 > >>>> 32 63 2370812 102124143 7,50 > >>>> 64 127 280885 18929867 1,39 > >>>> 256 511 2 827 0,00 > >>>> 512 1023 65 35092 0,00 > >>>> 2048 4095 2 6561 0,00 > >>>> 16384 32767 1 23951 0,00 > >>>> > >>>>Is there anything i can optimize? Or is it just a bad idea to do this > >>>>with XFS? Any other options? Maybe rsync options like --inplace / > >>>>--no-whole-file? > >>>> > >>> > >>>It's probably a good idea to include more information about your fs: > >>> > >>>http://xfs.org/index.php/XFS_FAQ#Q:_What_information_should_I_include_when_reporting_a_problem.3F > >> > >>Generally sure but the problem itself is clear. If you look at the free > >>space allocation you see that free space is heavily fragmented. > >> > >>But here you go: > >>- 3.10.53 vanilla > >>- xfs_repair version 3.1.11 > >>- 16 cores > >>- /dev/sda1 /backup xfs > >>rw,noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota 0 0 > >>- Raid 10 with 1GB controller cache running in write back mode using 24 > >>spinners > >>- no lvm > >>- no io waits > >>- xfs_info /serverbackup/ > >>meta-data=/dev/sda1 isize=256 agcount=21, > >>agsize=268435455 blks > >> = sectsz=512 attr=2 > >>data = bsize=4096 blocks=5369232896, imaxpct=5 > >> = sunit=0 swidth=0 blks > >>naming =version 2 bsize=4096 ascii-ci=0 > >>log =internal bsize=4096 blocks=521728, version=2 > >> = sectsz=512 sunit=0 blks, lazy-count=1 > >>realtime =none extsz=4096 blocks=0, rtextents=0 > >> > >>anything missing? > >> > > > >What's the workload to the fs? Is it repeated rsync's from a constantly > >changing dataset? Do the files change frequently or are they only ever > >added/removed? > > Yes it repeated rsync with constant changing files. About 10-20% of all > files every week. A mixture of changing, removing / adding. > Ok. > >Also, what is the characterization of writes being "slow?" An rsync is > >slower than normal? Sustained writes to a single file? How significant a > >degradation? > > kworker is using all cpu while writing data to this xfs partition. rsync can > just write at a rate of 32-128kb/s. > Do you have a baseline? This seems highly subjective. By that I mean this could be slower for copying a lot of little files, faster if you happen to copy a single large file, etc. > >Something like the following might be interesting as well: > >for i in $(seq 0 20); do xfs_db -c "agi $i" -c "p freecount" ; done > freecount = 3189417 > freecount = 1975726 > freecount = 1309903 > freecount = 1726846 > freecount = 1271047 > freecount = 1281956 > freecount = 1571285 > freecount = 1365473 > freecount = 1238118 > freecount = 1697011 > freecount = 1000832 > freecount = 1369791 > freecount = 1706360 > freecount = 1439165 > freecount = 1656404 > freecount = 1881762 > freecount = 1593432 > freecount = 1555909 > freecount = 1197091 > freecount = 1667467 > freecount = 63 > Interesting, that seems like a lot of free inodes. That's 1-2 million in each AG that we have to look around for each time we want to allocate an inode. I can't say for sure that's the source of the slowdown, but this certainly looks like the kind of workload that inspired the addition of the free inode btree (finobt) to more recent kernels. It appears that you still have quite a bit of space available in general. Could you run some local tests on this filesystem to try and quantify how much of this degradation manifests on sustained writes vs. file creation? For example, how is throughput when writing a few GB to a local test file? How about with that same amount of data broken up across a few thousand files? Brian P.S., Alternatively if you wanted to grab a metadump of this filesystem and compress/upload it somewhere, I'd be interested to take a look at it. > Thanks! > > Stefan > > > > >Brian > > > >>>... as well as what your typical workflow/dataset is for this fs. It > >>>seems like you have relatively small files (15TB used across 350m files > >>>is around 46k per file), yes? > >> > >>Yes - most fo them are even smaller. And some files are > 5GB. > >> > >>>If so, I wonder if something like the > >>>following commit introduced in 3.12 would help: > >>> > >>>133eeb17 xfs: don't use speculative prealloc for small files > >> > >>Looks interesting. > >> > >>Stefan From s.priebe@profihost.ag Fri Sep 5 15:14:52 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 DD5A57F3F for ; Fri, 5 Sep 2014 15:14:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id A13FF8F804C for ; Fri, 5 Sep 2014 13:14:52 -0700 (PDT) X-ASG-Debug-ID: 1409948086-04bdf01097798550001-NocioJ Received: from mail-ph.de-nserver.de (mail-ph.de-nserver.de [85.158.179.214]) by cuda.sgi.com with ESMTP id J1F1oyQZ28pPO99X (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 13:14:47 -0700 (PDT) X-Barracuda-Envelope-From: s.priebe@profihost.ag X-Barracuda-Apparent-Source-IP: 85.158.179.214 Received: (qmail 9276 invoked from network); 5 Sep 2014 22:14:45 +0200 X-Fcrdns: No Received: from phoffice.de-nserver.de (HELO [10.242.2.10]) (185.39.223.5) (smtp-auth username s.priebe@profihost.ag, mechanism plain) by mail-ph.de-nserver.de (qpsmtpd/0.92) with (ECDHE-RSA-AES256-SHA encrypted) ESMTPSA; Fri, 05 Sep 2014 22:14:45 +0200 Message-ID: <540A19BB.8040404@profihost.ag> Date: Fri, 05 Sep 2014 22:14:51 +0200 From: Stefan Priebe User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Brian Foster CC: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905134810.GA3965@laptop.bfoster> <5409FBEA.9050708@profihost.ag> <20140905191815.GB8400@laptop.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? In-Reply-To: <20140905191815.GB8400@laptop.bfoster> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-User-Auth: Auth by s.priebe@profihost.ag through 185.39.223.5 X-Barracuda-Connect: mail-ph.de-nserver.de[85.158.179.214] X-Barracuda-Start-Time: 1409948087 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.9212 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Am 05.09.2014 21:18, schrieb Brian Foster: ... > On Fri, Sep 05, 2014 at 08:07:38PM +0200, Stefan Priebe wrote: > Interesting, that seems like a lot of free inodes. That's 1-2 million in > each AG that we have to look around for each time we want to allocate an > inode. I can't say for sure that's the source of the slowdown, but this > certainly looks like the kind of workload that inspired the addition of > the free inode btree (finobt) to more recent kernels. > > It appears that you still have quite a bit of space available in > general. Could you run some local tests on this filesystem to try and > quantify how much of this degradation manifests on sustained writes vs. > file creation? For example, how is throughput when writing a few GB to a > local test file? Not sure if this is what you expect: # dd if=/dev/zero of=bigfile oflag=direct,sync bs=4M count=1000 1000+0 records in 1000+0 records out 4194304000 bytes (4,2 GB) copied, 125,809 s, 33,3 MB/s or without sync # dd if=/dev/zero of=bigfile oflag=direct bs=4M count=1000 1000+0 records in 1000+0 records out 4194304000 bytes (4,2 GB) copied, 32,5474 s, 129 MB/s > How about with that same amount of data broken up > across a few thousand files? This results in heavy kworker usage. 4GB in 32kb files # time (mkdir test; for i in $(seq 1 1 131072); do dd if=/dev/zero of=test/$i bs=32k count=1 oflag=direct,sync 2>/dev/null; done) ... 55 min > Brian > > P.S., Alternatively if you wanted to grab a metadump of this filesystem > and compress/upload it somewhere, I'd be interested to take a look at > it. I think there might be file and directory names in it. If this is the case i can't do it. Stefan > >> Thanks! >> >> Stefan >> >> >> >>> Brian >>> >>>>> ... as well as what your typical workflow/dataset is for this fs. It >>>>> seems like you have relatively small files (15TB used across 350m files >>>>> is around 46k per file), yes? >>>> >>>> Yes - most fo them are even smaller. And some files are > 5GB. >>>> >>>>> If so, I wonder if something like the >>>>> following commit introduced in 3.12 would help: >>>>> >>>>> 133eeb17 xfs: don't use speculative prealloc for small files >>>> >>>> Looks interesting. >>>> >>>> Stefan From bfoster@redhat.com Fri Sep 5 16:24:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 6CC777F3F for ; Fri, 5 Sep 2014 16:24:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5C0B08F8049 for ; Fri, 5 Sep 2014 14:24:10 -0700 (PDT) X-ASG-Debug-ID: 1409952245-04cb6c55007fac90001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id rPvCvGQrKUvnlDCB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 05 Sep 2014 14:24: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-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s85LO38f028319 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 5 Sep 2014 17:24:04 -0400 Received: from laptop.bfoster (vpn-61-160.rdu2.redhat.com [10.10.61.160]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s85LO1JI012511 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO); Fri, 5 Sep 2014 17:24:03 -0400 Date: Fri, 5 Sep 2014 17:24:01 -0400 From: Brian Foster To: Stefan Priebe Cc: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140905212400.GA8904@laptop.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905134810.GA3965@laptop.bfoster> <5409FBEA.9050708@profihost.ag> <20140905191815.GB8400@laptop.bfoster> <540A19BB.8040404@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540A19BB.8040404@profihost.ag> 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: 1409952246 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, Sep 05, 2014 at 10:14:51PM +0200, Stefan Priebe wrote: > > Am 05.09.2014 21:18, schrieb Brian Foster: > ... > > >On Fri, Sep 05, 2014 at 08:07:38PM +0200, Stefan Priebe wrote: > >Interesting, that seems like a lot of free inodes. That's 1-2 million in > >each AG that we have to look around for each time we want to allocate an > >inode. I can't say for sure that's the source of the slowdown, but this > >certainly looks like the kind of workload that inspired the addition of > >the free inode btree (finobt) to more recent kernels. > > > >It appears that you still have quite a bit of space available in > >general. Could you run some local tests on this filesystem to try and > >quantify how much of this degradation manifests on sustained writes vs. > >file creation? For example, how is throughput when writing a few GB to a > >local test file? > > Not sure if this is what you expect: > > # dd if=/dev/zero of=bigfile oflag=direct,sync bs=4M count=1000 > 1000+0 records in > 1000+0 records out > 4194304000 bytes (4,2 GB) copied, 125,809 s, 33,3 MB/s > > or without sync > # dd if=/dev/zero of=bigfile oflag=direct bs=4M count=1000 > 1000+0 records in > 1000+0 records out > 4194304000 bytes (4,2 GB) copied, 32,5474 s, 129 MB/s > > > How about with that same amount of data broken up > >across a few thousand files? > > This results in heavy kworker usage. > > 4GB in 32kb files > # time (mkdir test; for i in $(seq 1 1 131072); do dd if=/dev/zero > of=test/$i bs=32k count=1 oflag=direct,sync 2>/dev/null; done) > > ... > > 55 min > Both seem pretty slow in general. Any way you can establish a baseline for these tests on this storage? If not, the only other suggestion I could make is to allocate inodes until all of those freecount numbers are accounted for and see if anything changes. That could certainly take some time and it's not clear it will actually help. > >Brian > > > >P.S., Alternatively if you wanted to grab a metadump of this filesystem > >and compress/upload it somewhere, I'd be interested to take a look at > >it. > > I think there might be file and directory names in it. If this is the case i > can't do it. > It should enable obfuscation by default, but I would suggest to restore it yourself and verify it meets your expectations. Brian > Stefan > > > > > >>Thanks! > >> > >>Stefan > >> > >> > >> > >>>Brian > >>> > >>>>>... as well as what your typical workflow/dataset is for this fs. It > >>>>>seems like you have relatively small files (15TB used across 350m files > >>>>>is around 46k per file), yes? > >>>> > >>>>Yes - most fo them are even smaller. And some files are > 5GB. > >>>> > >>>>>If so, I wonder if something like the > >>>>>following commit introduced in 3.12 would help: > >>>>> > >>>>>133eeb17 xfs: don't use speculative prealloc for small files > >>>> > >>>>Looks interesting. > >>>> > >>>>Stefan > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From scaron@umich.edu Fri Sep 5 17:39:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 EEC9A7F3F for ; Fri, 5 Sep 2014 17:39:45 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B05DA30406A for ; Fri, 5 Sep 2014 15:39:45 -0700 (PDT) X-ASG-Debug-ID: 1409956782-04bdf010a179d6d0001-NocioJ Received: from mail-qc0-f175.google.com (mail-qc0-f175.google.com [209.85.216.175]) by cuda.sgi.com with ESMTP id B5tQk8OUzx1NzM6y (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 05 Sep 2014 15:39:43 -0700 (PDT) X-Barracuda-Envelope-From: scaron@umich.edu X-Barracuda-Apparent-Source-IP: 209.85.216.175 Received: by mail-qc0-f175.google.com with SMTP id c9so13004326qcz.20 for ; Fri, 05 Sep 2014 15:39:42 -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=CNlyq4CAgIxpermYifourtgtMIjk1FgmHrZy1YJRLQw=; b=m+SqFVMfCTDo3c18FnzClL7RxBK+RQy55+kMG7QHjg78+ZfQqJd9h15fSSh0MNxj/2 2YhrkTIjIFROqL/DobiVlFh7fgweGAVTiiK7PR9xMmlurotY0d1R4nI2ZTPq0TwGogLO +PLGKOmAz9D/wZdAQAiqJTR1qVitj8Zb0q96J5d9Jx1WwI9fmHOBAuzactWv1Q5/Vo4G IHWxgJAaQ2YTVqENII6pTT6u8BaFxlvzP6zfl8H94B1aGDXRu6L7dytJWVuPMJmc4W7t 7zXH7eRK0UL01vjyW4UxhShULr0gFj8BQ2zIObPfrs334QUDmJlg0RJ9BMnNMy8PsNeW DFOQ== X-Gm-Message-State: ALoCoQkPKGckVUd6lR7/Z4Wcqz54fhy0Cwk09lbNGiesWi/MMX9r5MoOmN8OO8l5iAECImcrm0g2 MIME-Version: 1.0 X-Received: by 10.224.46.138 with SMTP id j10mr22738202qaf.85.1409956782408; Fri, 05 Sep 2014 15:39:42 -0700 (PDT) Received: by 10.224.8.132 with HTTP; Fri, 5 Sep 2014 15:39:42 -0700 (PDT) In-Reply-To: <20140905212400.GA8904@laptop.bfoster> References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905134810.GA3965@laptop.bfoster> <5409FBEA.9050708@profihost.ag> <20140905191815.GB8400@laptop.bfoster> <540A19BB.8040404@profihost.ag> <20140905212400.GA8904@laptop.bfoster> Date: Fri, 5 Sep 2014 18:39:42 -0400 Message-ID: Subject: Re: Is XFS suitable for 350 million files on 20TB storage? From: Sean Caron X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? To: Brian Foster , Sean Caron Cc: Stefan Priebe , "xfs@oss.sgi.com" Content-Type: multipart/alternative; boundary=001a11c1f0da2a1c3e05025925d2 X-Barracuda-Connect: mail-qc0-f175.google.com[209.85.216.175] X-Barracuda-Start-Time: 1409956782 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9215 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --001a11c1f0da2a1c3e05025925d2 Content-Type: text/plain; charset=UTF-8 Hi Stefan, Generally speaking, this is a situation that you want to avoid. At 350 million files and 20 TB, you're looking at around 17-18 MB per file at minimum? That's pretty small. And with 350M files, a fair number of those 350M must be on the smaller side of things. Memory is cheap these days... people can make 50 GB, 100 GB, ... files, go ahead and read those things directly into memory, 100%. And CPU cycles are pretty cheap, too. Certainly you get more bang per buck there, than in IOPS on your storage system!! Empirically, I have found from experience (currently running Linux 3.4.61; many historical revs previous) in a reasonably large-scale (up to ~0.5 PB in single file system, up to 270 JBOD spindles on one machine) high-I/O (jobs running on a few-hundred-node compute cluster, or a few hundred threads running locally on the server) environment, that XFS (and things running on top of it, ESPECIALLY rsync) will perform MUCH better on smaller numbers of very large files, then they will on very large numbers of small files (I'm always trying to reinforce this to our end users). I'm not really even saying XFS is to really blame here... in fact in 3.4.61 it has been very well-behaved; but Linux has many warts: poor implementation of I/O and CPU scheduling algorithms; kernel does not degrade gracefully in resource-constrained settings; if you are ultimately using this data store as a file share, the protocol implementations have their own issues... NFS, CIFS, etc... Not trying to dog all the hardworking free software devs out there but clearly much work remains to be done in many areas, to make Linux really ready to play in the "big big leagues" of computing (unless you have a local staff of good systems programmers with some free time on their hands...). XFS is just one piece of the puzzle we have to work with in trying to integrate a Linux system as a good high-throughput storage machine. If there is any way that you can use simple catenation or some kind of archiver... even things as simple as shar, tar, zip... to get the file sizes up and the absolute number of files down, you should notice some big performance gains when trying to process your 20 TB worth of stuff. If you can't dramatically increase individual file size while dramatically reducing the absolute number of files for whatever reason in your environment, I think you can still win by trying to reduce the number of files in any one directory. You want to look out for directories that have five or six figures worth of files in them, those can be real performance killers. If your claim of no more than 5,000 files per any directory is accurate, that shouldn't be a big deal for XFS at all, I don't think you're in bad shape there. Rsync can be just the worst in this kind of scenario. It runs so slow, you feel sometimes like you might as well be on 10 Meg Ethernet (or worse). I'm not sure exactly what your application is here... It sounds backup related. If you're doing rsync, you can win a little bit by dropping down a level or two in your directory hierarchy from the top of the tree where XFS is mounted, and running a number of rsync threads in parallel, per-directory, instead of just one top-level rsync thread for an entire filesystem. Experiment to find the best number of threads; run too many and they can deadlock, or just step all over one another. Also, I have a suspicion (sorry can't back this up quantitatively) that if you are just trying to a straight copy from here to there, a 'cp -Rp' will be faster than an rsync. You might be better off doing an initial copy with 'cp -Rp' and then just synchronizing diffs at the end with an rsync pass, rather than trying to do the whole thing with rsync. Hope some of this might help... just casual thoughts from a daily XFS-wrangler ;) Best, Sean On Fri, Sep 5, 2014 at 5:24 PM, Brian Foster wrote: > On Fri, Sep 05, 2014 at 10:14:51PM +0200, Stefan Priebe wrote: > > > > Am 05.09.2014 21:18, schrieb Brian Foster: > > ... > > > > >On Fri, Sep 05, 2014 at 08:07:38PM +0200, Stefan Priebe wrote: > > >Interesting, that seems like a lot of free inodes. That's 1-2 million in > > >each AG that we have to look around for each time we want to allocate an > > >inode. I can't say for sure that's the source of the slowdown, but this > > >certainly looks like the kind of workload that inspired the addition of > > >the free inode btree (finobt) to more recent kernels. > > > > > >It appears that you still have quite a bit of space available in > > >general. Could you run some local tests on this filesystem to try and > > >quantify how much of this degradation manifests on sustained writes vs. > > >file creation? For example, how is throughput when writing a few GB to a > > >local test file? > > > > Not sure if this is what you expect: > > > > # dd if=/dev/zero of=bigfile oflag=direct,sync bs=4M count=1000 > > 1000+0 records in > > 1000+0 records out > > 4194304000 bytes (4,2 GB) copied, 125,809 s, 33,3 MB/s > > > > or without sync > > # dd if=/dev/zero of=bigfile oflag=direct bs=4M count=1000 > > 1000+0 records in > > 1000+0 records out > > 4194304000 bytes (4,2 GB) copied, 32,5474 s, 129 MB/s > > > > > How about with that same amount of data broken up > > >across a few thousand files? > > > > This results in heavy kworker usage. > > > > 4GB in 32kb files > > # time (mkdir test; for i in $(seq 1 1 131072); do dd if=/dev/zero > > of=test/$i bs=32k count=1 oflag=direct,sync 2>/dev/null; done) > > > > ... > > > > 55 min > > > > Both seem pretty slow in general. Any way you can establish a baseline > for these tests on this storage? If not, the only other suggestion I > could make is to allocate inodes until all of those freecount numbers > are accounted for and see if anything changes. That could certainly take > some time and it's not clear it will actually help. > > > >Brian > > > > > >P.S., Alternatively if you wanted to grab a metadump of this filesystem > > >and compress/upload it somewhere, I'd be interested to take a look at > > >it. > > > > I think there might be file and directory names in it. If this is the > case i > > can't do it. > > > > It should enable obfuscation by default, but I would suggest to restore > it yourself and verify it meets your expectations. > > Brian > > > Stefan > > > > > > > > > >>Thanks! > > >> > > >>Stefan > > >> > > >> > > >> > > >>>Brian > > >>> > > >>>>>... as well as what your typical workflow/dataset is for this fs. It > > >>>>>seems like you have relatively small files (15TB used across 350m > files > > >>>>>is around 46k per file), yes? > > >>>> > > >>>>Yes - most fo them are even smaller. And some files are > 5GB. > > >>>> > > >>>>>If so, I wonder if something like the > > >>>>>following commit introduced in 3.12 would help: > > >>>>> > > >>>>>133eeb17 xfs: don't use speculative prealloc for small files > > >>>> > > >>>>Looks interesting. > > >>>> > > >>>>Stefan > > > > _______________________________________________ > > 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 > --001a11c1f0da2a1c3e05025925d2 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Stefan,

Generally speaking, th= is is a situation that you want to avoid. At 350 million files and 20 TB, y= ou're looking at around 17-18 MB per file at minimum? That's pretty= small. And with 350M files, a fair number of those 350M must be on the sma= ller side of things.

Memory is cheap these days... peopl= e can make 50 GB, 100 GB, ... files, go ahead and read those things directl= y into memory, 100%. And CPU cycles are pretty cheap, too. Certainly you ge= t more bang per buck there, than in IOPS on your storage system!!

Empirically, I have found from experience (currently runnin= g Linux 3.4.61; many historical revs previous) in a reasonably large-scale = (up to ~0.5 PB in single file system, up to 270 JBOD spindles on one machin= e) high-I/O (jobs running on a few-hundred-node compute cluster, or a few h= undred threads running locally on the server) environment, that XFS (and th= ings running on top of it, ESPECIALLY rsync) will perform MUCH better on sm= aller numbers of very large files, then they will on very large numbers of = small files (I'm always trying to reinforce this to our end users).

I'm not really even saying XFS is to really blame= here... in fact in 3.4.61 it has been very well-behaved; but Linux has man= y warts: poor implementation of I/O and CPU scheduling algorithms; kernel d= oes not degrade gracefully in resource-constrained settings; if you are ult= imately using this data store as a file share, the protocol implementations= have their own issues... NFS, CIFS, etc... Not trying to dog all the hardw= orking free software devs out there but clearly much work remains to be don= e in many areas, to make Linux really ready to play in the "big big le= agues" of computing (unless you have a local staff of good systems pro= grammers with some free time on their hands...). XFS is just one piece of t= he puzzle we have to work with in trying to integrate a Linux system as a g= ood high-throughput storage machine.

If there is a= ny way that you can use simple catenation or some kind of archiver... even = things as simple as shar, tar, zip... to get the file sizes up and the abso= lute number of files down, you should notice some big performance gains whe= n trying to process your 20 TB worth of stuff.

If = you can't dramatically increase individual file size while dramatically= reducing the absolute number of files for whatever reason in your environm= ent, I think you can still win by trying to reduce the number of files in a= ny one directory. You want to look out for directories that have five or si= x figures worth of files in them, those can be real performance killers. If= your claim of no more than 5,000 files per any directory is accurate, that= shouldn't be a big deal for XFS at all, I don't think you're i= n bad shape there.

Rsync can be just the worst in = this kind of scenario. It runs so slow, you feel sometimes like you might a= s well be on 10 Meg Ethernet (or worse).

I'm n= ot sure exactly what your application is here... It sounds backup related. = If you're doing rsync, you can win a little bit by dropping down a leve= l or two in your directory hierarchy from the top of the tree where XFS is = mounted, and running a number of rsync threads in parallel, per-directory, = instead of just one top-level rsync thread for an entire filesystem. Experi= ment to find the best number of threads; run too many and they can deadlock= , or just step all over one another.

Also, I have = a suspicion (sorry can't back this up quantitatively) that if you are j= ust trying to a straight copy from here to there, a 'cp -Rp' will b= e faster than an rsync. You might be better off doing an initial copy with = 'cp -Rp' and then just synchronizing diffs at the end with an rsync= pass, rather than trying to do the whole thing with rsync.

<= /div>
Hope some of this might help... just casual thoughts from a daily= XFS-wrangler ;)

Best,

Se= an



=
On Fri, Sep 5, 2014 at 5:24 PM, Brian Foster= <bfoster@redhat.com> wrote:
On Fri, Sep 05, 2014 at 10:14:5= 1PM +0200, Stefan Priebe wrote:
>
> Am 05.09.2014 21:18, schrieb Brian Foster:
> ...
>
> >On Fri, Sep 05, 2014 at 08:07:38PM +0200, Stefan Priebe wrote:
> >Interesting, that seems like a lot of free inodes. That's 1-2 = million in
> >each AG that we have to look around for each time we want to alloc= ate an
> >inode. I can't say for sure that's the source of the slowd= own, but this
> >certainly looks like the kind of workload that inspired the additi= on of
> >the free inode btree (finobt) to more recent kernels.
> >
> >It appears that you still have quite a bit of space available in > >general. Could you run some local tests on this filesystem to try = and
> >quantify how much of this degradation manifests on sustained write= s vs.
> >file creation? For example, how is throughput when writing a few G= B to a
> >local test file?
>
> Not sure if this is what you expect:
>
> # dd if=3D/dev/zero of=3Dbigfile oflag=3Ddirect,sync bs=3D4M count=3D1= 000
> 1000+0 records in
> 1000+0 records out
> 4194304000 bytes (4,2 GB) copied, 125,809 s, 33,3 MB/s
>
> or without sync
> # dd if=3D/dev/zero of=3Dbigfile oflag=3Ddirect bs=3D4M count=3D1000 > 1000+0 records in
> 1000+0 records out
> 4194304000 bytes (4,2 GB) copied, 32,5474 s, 129 MB/s
>
> > How about with that same amount of data broken up
> >across a few thousand files?
>
> This results in heavy kworker usage.
>
> 4GB in 32kb files
> # time (mkdir test; for i in $(seq 1 1 131072); do dd if=3D/dev/zero > of=3Dtest/$i bs=3D32k count=3D1 oflag=3Ddirect,sync 2>/dev/null; do= ne)
>
> ...
>
> 55 min
>

Both seem pretty slow in general. Any way you can establish a b= aseline
for these tests on this storage? If not, the only other suggestion I
could make is to allocate inodes until all of those freecount numbers
are accounted for and see if anything changes. That could certainly take some time and it's not clear it will actually help.

> >Brian
> >
> >P.S., Alternatively if you wanted to grab a metadump of this files= ystem
> >and compress/upload it somewhere, I'd be interested to take a = look at
> >it.
>
> I think there might be file and directory names in it. If this is the = case i
> can't do it.
>

It should enable obfuscation by default, but I would suggest to rest= ore
it yourself and verify it meets your expectations.

Brian

> Stefan
>
>
> >
> >>Thanks!
> >>
> >>Stefan
> >>
> >>
> >>
> >>>Brian
> >>>
> >>>>>... as well as what your typical workflow/dataset = is for this fs. It
> >>>>>seems like you have relatively small files (15TB u= sed across 350m files
> >>>>>is around 46k per file), yes?
> >>>>
> >>>>Yes - most fo them are even smaller. And some files ar= e > 5GB.
> >>>>
> >>>>>If so, I wonder if something like the
> >>>>>following commit introduced in 3.12 would help: > >>>>>
> >>>>>133eeb17 xfs: don't use speculative prealloc f= or small files
> >>>>
> >>>>Looks interesting.
> >>>>
> >>>>Stefan
>
> _______________________________________________
> 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

--001a11c1f0da2a1c3e05025925d2-- From david@fromorbit.com Fri Sep 5 18:05:37 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 0EE2D7F3F for ; Fri, 5 Sep 2014 18:05:37 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D52CD30406A for ; Fri, 5 Sep 2014 16:05:33 -0700 (PDT) X-ASG-Debug-ID: 1409958330-04bdf0109a79e120001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 4hMWMkGbO6q7jBJJ for ; Fri, 05 Sep 2014 16:05:31 -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: AixAANZAClR5LKYhPGdsb2JhbABagw2BKoIsrVcBAQEBAQEGmm+FaQEDAQEBgQMXBQEBAQE4NoQDAQEEATocIxAIAxgJJQ8FJQMHGhMbiB8Hvz8BFxiFZIhmIkkHhEwFnGuXDh6BbisvgQeBSAEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 06 Sep 2014 08:35:29 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQ2ZM-0002aT-8B; Sat, 06 Sep 2014 09:05:28 +1000 Date: Sat, 6 Sep 2014 09:05:28 +1000 From: Dave Chinner To: Stefan Priebe - Profihost AG Cc: Brian Foster , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140905230528.GO20473@dastard> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5409AF40.10801@profihost.ag> 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: 1409958331 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.9216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > > Am 05.09.2014 um 14:30 schrieb Brian Foster: > > On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > >> Hi, > >> > >> i have a backup system running 20TB of storage having 350 million files. > >> This was working fine for month. > >> > >> But now the free space is so heavily fragmented that i only see the > >> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > >> 20TB are in use. What does perf tell you about the CPU being burnt? (i.e run perf top for 10-20s while that CPU burn is happening and paste the top 10 CPU consuming functions). > >> > >> Overall files are 350 Million - all in different directories. Max 5000 > >> per dir. > >> > >> Kernel is 3.10.53 and mount options are: > >> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > >> > >> # xfs_db -r -c freesp /dev/sda1 > >> from to extents blocks pct > >> 1 1 29484138 29484138 2,16 > >> 2 3 16930134 39834672 2,92 > >> 4 7 16169985 87877159 6,45 > >> 8 15 78202543 999838327 73,41 With an inode size of 256 bytes, this is going to be your real problem soon - most of the free space is smaller than an inode chunk so soon you won't be able to allocate new inodes, even though there is free space on disk. Unfortunately, there's not much we can do about this right now - we need development in both user and kernel space to mitigate this issue: spare inode chunk allocation in kernel space, and free space defragmentation in userspace. Both are on the near term development list.... Also, the fact that there are almost 80 million 8-15 block extents indicates that the CPU burn is likely coming from the by-size free space search. We look up the first extent of the correct size, and then do a linear search for a nearest extent of that size to the target. Hence we could be searching millions of extents to find the "nearest".... > >> 16 31 3562456 83746085 6,15 > >> 32 63 2370812 102124143 7,50 > >> 64 127 280885 18929867 1,39 > >> 256 511 2 827 0,00 > >> 512 1023 65 35092 0,00 > >> 2048 4095 2 6561 0,00 > >> 16384 32767 1 23951 0,00 > >> > >> Is there anything i can optimize? Or is it just a bad idea to do this > >> with XFS? No, it's not a bad idea. In fact, if you have this sort of use case, XFS is really your only choice. In terms of optimisation, the only thing that will really help performance is the new finobt structure. That's a mkfs option andnot an in-place change, though, so it's unlikely to help. FWIW, it may also help aging characteristics of this sort of workload by improving inode allocation layout. That would be a side effect of being able to search the entire free inode tree extremely quickly rather than allocating new chunks to keep CPU time searching the allocate inode tree for free inodes down. Hence it would tend to more tightly pack inode chunks when they are allocated on disk as it will fill full chunks before allocating new ones elsewhere. > >> Any other options? Maybe rsync options like --inplace / > >> --no-whole-file? For 350M files? I doubt there's much you can really do. Any sort of large scale re-organisation is going to take a long, long time and require lots of IO. If you are goign to take that route, you'd do better to upgrade kernel and xfsprogs, then dump/mkfs.xfs -m crc=1,finobt=1/restore. And you'd probably want to use a multi-stream dump/restore so it can run operations concurrently and hence at storage speed rather than being CPU bound.... Also, if the problem really is the number of indentically sized free space fragments in the freespace btrees, then the initial solution is, again, a mkfs one. i.e. remake the filesystem with more, smaller AGs to keep the number of extents the btrees need to index down to a reasonable level. Say a couple of hundred AGs rather than 21? > > If so, I wonder if something like the > > following commit introduced in 3.12 would help: > > > > 133eeb17 xfs: don't use speculative prealloc for small files > > Looks interesting. Probably won't make any difference because backups via rsync do open/write/close and don't touch the file data again, so the close will be removing speculative preallocation before the data is written and extents are allocated by background writeback.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Fri Sep 5 19:07:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 B5E5C7F3F for ; Fri, 5 Sep 2014 19:07:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 94F168F8049 for ; Fri, 5 Sep 2014 17:07:17 -0700 (PDT) X-ASG-Debug-ID: 1409962034-04cb6c55007ff490001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id QtFNWSZtAdCndWir for ; Fri, 05 Sep 2014 17:07:15 -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: AmZAAAlPClR5LKYhPGdsb2JhbABagw0gM1eCLK1XAQEBAQEBBgWZAwKBZYVpAQMBAYEEFwUBAQEBODaERBwjGCQ0BSUDBy2IQb9bGIVkiVEdgiIPRIFBBYUKgRCOd12GfZkaKy+CTwEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 06 Sep 2014 09:37:14 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQ3X5-0002oD-JK; Sat, 06 Sep 2014 10:07:11 +1000 Date: Sat, 6 Sep 2014 10:07:11 +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: fixes for 3.17-rc3 Message-ID: <20140906000711.GX20518@dastard> X-ASG-Orig-Subj: [GIT PULL] xfs: fixes for 3.17-rc3 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: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1409962034 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.9217 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 following XFS fixes? The fixes all address recently discovered data corruption issues. The original Direct IO issue was discovered by Chris Mason @ Facebook on a production workload which mixed buffered reads with direct reads and writes IO to the same file. The fix for that exposed other issues with page invalidation (exposed by millions of fsx operations) failing due to dirty buffers beyond EOF. Finally, the collapse_range code could also cause problems due to racing writeback changing the extent map while it was being shifted around. The commits for that problem are simple mitigation fixes that prevent the problem from occuring. A more robust fix for 3.18 that addresses the underlying problem is currently being worked on by Brian. -Dave. The following changes since commit 52addcf9d6669fa439387610bc65c92fa0980cef: Linux 3.17-rc2 (2014-08-25 15:36:20 -0700) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs tags/xfs-for-linus-3.17-rc3 for you to fetch changes up to 41b9d7263ea1e270019c5d04fa0ab15db50b9725: xfs: trim eofblocks before collapse range (2014-09-02 12:12:53 +1000) ---------------------------------------------------------------- xfs: fixes for v3.17-rc3 Fix: - a direct IO read/buffered read data corruption - the associated fallout from the DIO data corruption fix - collapse range bugs that are potential data corruption issues. ---------------------------------------------------------------- Brian Foster (2): xfs: don't log inode unless extent shift makes extent modifications xfs: trim eofblocks before collapse range Chris Mason (1): xfs: don't zero partial page cache pages during O_DIRECT writes Dave Chinner (4): xfs: don't dirty buffers beyond EOF xfs: don't zero partial page cache pages during O_DIRECT writes xfs: use ranged writeback and invalidation for direct IO xfs: xfs_file_collapse_range is delalloc challenged fs/xfs/libxfs/xfs_bmap.c | 18 ++++++++------ fs/xfs/xfs_aops.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_bmap_util.c | 20 +++++++++++++++ fs/xfs/xfs_file.c | 27 +++++++++++++++++--- 4 files changed, 114 insertions(+), 12 deletions(-) -- Dave Chinner david@fromorbit.com From s.priebe@profihost.ag Sat Sep 6 02:35:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 03F4F7F3F for ; Sat, 6 Sep 2014 02:35:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A2564AC002 for ; Sat, 6 Sep 2014 00:35:13 -0700 (PDT) X-ASG-Debug-ID: 1409988910-04bdf010a17ab910001-NocioJ Received: from mail-ph.de-nserver.de (mail-ph.de-nserver.de [85.158.179.214]) by cuda.sgi.com with ESMTP id 2jqSs9RxSdVN8xfq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 06 Sep 2014 00:35:11 -0700 (PDT) X-Barracuda-Envelope-From: s.priebe@profihost.ag X-Barracuda-Apparent-Source-IP: 85.158.179.214 Received: (qmail 29820 invoked from network); 6 Sep 2014 09:35:09 +0200 X-Fcrdns: No Received: from phoffice.de-nserver.de (HELO [10.242.2.6]) (185.39.223.5) (smtp-auth username s.priebe@profihost.ag, mechanism plain) by mail-ph.de-nserver.de (qpsmtpd/0.92) with (ECDHE-RSA-AES256-SHA encrypted) ESMTPSA; Sat, 06 Sep 2014 09:35:09 +0200 Message-ID: <540AB933.4030707@profihost.ag> Date: Sat, 06 Sep 2014 09:35:15 +0200 From: Stefan Priebe User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Dave Chinner CC: Brian Foster , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? In-Reply-To: <20140905230528.GO20473@dastard> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-User-Auth: Auth by s.priebe@profihost.ag through 185.39.223.5 X-Barracuda-Connect: mail-ph.de-nserver.de[85.158.179.214] X-Barracuda-Start-Time: 1409988910 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.9225 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Dave, Am 06.09.2014 01:05, schrieb Dave Chinner: > On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: >> >> Am 05.09.2014 um 14:30 schrieb Brian Foster: >>> On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: >>>> Hi, >>>> >>>> i have a backup system running 20TB of storage having 350 million files. >>>> This was working fine for month. >>>> >>>> But now the free space is so heavily fragmented that i only see the >>>> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the >>>> 20TB are in use. > > What does perf tell you about the CPU being burnt? (i.e run perf top > for 10-20s while that CPU burn is happening and paste the top 10 CPU > consuming functions). here we go: 15,79% [kernel] [k] xfs_inobt_get_rec 14,57% [kernel] [k] xfs_btree_get_rec 10,37% [kernel] [k] xfs_btree_increment 7,20% [kernel] [k] xfs_btree_get_block 6,13% [kernel] [k] xfs_btree_rec_offset 4,90% [kernel] [k] xfs_dialloc_ag 3,53% [kernel] [k] xfs_btree_readahead 2,87% [kernel] [k] xfs_btree_rec_addr 2,80% [kernel] [k] _xfs_buf_find 1,94% [kernel] [k] intel_idle 1,49% [kernel] [k] _raw_spin_lock 1,13% [kernel] [k] copy_pte_range 1,10% [kernel] [k] unmap_single_vma >>>> >>>> Overall files are 350 Million - all in different directories. Max 5000 >>>> per dir. >>>> >>>> Kernel is 3.10.53 and mount options are: >>>> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota >>>> >>>> # xfs_db -r -c freesp /dev/sda1 >>>> from to extents blocks pct >>>> 1 1 29484138 29484138 2,16 >>>> 2 3 16930134 39834672 2,92 >>>> 4 7 16169985 87877159 6,45 >>>> 8 15 78202543 999838327 73,41 > > With an inode size of 256 bytes, this is going to be your real > problem soon - most of the free space is smaller than an inode > chunk so soon you won't be able to allocate new inodes, even though > there is free space on disk. > > Unfortunately, there's not much we can do about this right now - we > need development in both user and kernel space to mitigate this > issue: spare inode chunk allocation in kernel space, and free space > defragmentation in userspace. Both are on the near term development > list.... > > Also, the fact that there are almost 80 million 8-15 block extents > indicates that the CPU burn is likely coming from the by-size free > space search. We look up the first extent of the correct size, and > then do a linear search for a nearest extent of that size to the > target. Hence we could be searching millions of extents to find the > "nearest".... > >>>> 16 31 3562456 83746085 6,15 >>>> 32 63 2370812 102124143 7,50 >>>> 64 127 280885 18929867 1,39 >>>> 256 511 2 827 0,00 >>>> 512 1023 65 35092 0,00 >>>> 2048 4095 2 6561 0,00 >>>> 16384 32767 1 23951 0,00 >>>> >>>> Is there anything i can optimize? Or is it just a bad idea to do this >>>> with XFS? > > No, it's not a bad idea. In fact, if you have this sort of use case, > XFS is really your only choice. In terms of optimisation, the only > thing that will really help performance is the new finobt structure. > That's a mkfs option andnot an in-place change, though, so it's > unlikely to help. I've no problem with reformatting the array. I've more backups. > FWIW, it may also help aging characteristics of this sort of > workload by improving inode allocation layout. That would be > a side effect of being able to search the entire free inode tree > extremely quickly rather than allocating new chunks to keep CPU time > searching the allocate inode tree for free inodes down. Hence it > would tend to more tightly pack inode chunks when they are allocated > on disk as it will fill full chunks before allocating new ones > elsewhere. > >>>> Any other options? Maybe rsync options like --inplace / >>>> --no-whole-file? > > For 350M files? I doubt there's much you can really do. Any sort of > large scale re-organisation is going to take a long, long time and > require lots of IO. If you are goign to take that route, you'd do > better to upgrade kernel and xfsprogs, then dump/mkfs.xfs -m > crc=1,finobt=1/restore. And you'd probably want to use a > multi-stream dump/restore so it can run operations concurrently and > hence at storage speed rather than being CPU bound.... I don't need a backup reformatting is possible but i really would like to stay at 3.10. Is there anything i can backport or do i really need to upgrade? Which version at least? > Also, if the problem really is the number of indentically sized free > space fragments in the freespace btrees, then the initial solution > is, again, a mkfs one. i.e. remake the filesystem with more, smaller > AGs to keep the number of extents the btrees need to index down to a > reasonable level. Say a couple of hundred AGs rather than 21? mkfs has chosen 21 automagically - it's nothing i've set. Is this a bug or do i just need it cause of my special use case. Thanks! Stefan >>> If so, I wonder if something like the >>> following commit introduced in 3.12 would help: >>> >>> 133eeb17 xfs: don't use speculative prealloc for small files >> >> Looks interesting. > > Probably won't make any difference because backups via rsync do > open/write/close and don't touch the file data again, so the close > will be removing speculative preallocation before the data is > written and extents are allocated by background writeback.... > > Cheers, > > Dave. > From shenjqb@online.sh.cn Sat Sep 6 09:01:25 2014 Return-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, HTML_MESSAGE,MIME_QP_LONG_LINE,TVD_SPACE_RATIO,T_TVD_MIME_EPI 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 1CD0C7F3F for ; Sat, 6 Sep 2014 09:01:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id F0BC38F8049 for ; Sat, 6 Sep 2014 07:01:21 -0700 (PDT) X-ASG-Debug-ID: 1410012077-04cb6c54fd8103b0001-NocioJ Received: from mail.online.sh.cn (wg1.online.sh.cn [61.152.74.17]) by cuda.sgi.com with SMTP id 5g0eCEkxGCNo1Idl for ; Sat, 06 Sep 2014 07:01:17 -0700 (PDT) X-Barracuda-Envelope-From: shenjqb@online.sh.cn X-Barracuda-Apparent-Source-IP: 61.152.74.17 Received: from [95.180.42.194] by mail.online.sh.cn with messagesec esmtp id 6112319180464484; Sat, 6 Sep 2014 22:01:13 +0800 (CST) Message-ID: From: info To: "weblog" , "webshep2" , "welchm" , "WENDY" , "WENDY GONZALEZ" , "wendy" , "wgarrow" , "whanright" , "Whittier School" , "wigt" , "william" , "winona autry" , "wmillimen" , "wmson" , "wppresby church" , "wrwest" , "wsa24" , "wunbusymom" , "xfs" , "yangsha460" Subject: from info@recycleforschools.com Date: Fri, 6 Sep 2014 03:01:08 +0000 X-ASG-Orig-Subj: from info@recycleforschools.com MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_13AF_AF5BAACD.72CA8743" X-Mailer: iPhone Mail (11D201) X-Barracuda-Connect: wg1.online.sh.cn[61.152.74.17] X-Barracuda-Start-Time: 1410012077 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.13 X-Barracuda-Spam-Status: No, SCORE=2.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DATE_IN_PAST_06_12, DATE_IN_PAST_06_12_2, HTML_MESSAGE, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9231 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 DATE_IN_PAST_06_12 Date: is 6 to 12 hours before Received: date 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 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) 1.10 DATE_IN_PAST_06_12_2 DATE_IN_PAST_06_12_2 This is a multi-part message in MIME format. ------=_NextPart_000_13AF_AF5BAACD.72CA8743 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi! News: http://latintour.pl/x/would.php?gls info@recycleforschools.com ------=_NextPart_000_13AF_AF5BAACD.72CA8743 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi!

News: http://latintour.pl/x/would.php?gls

info@recycleforschools.com
------=_NextPart_000_13AF_AF5BAACD.72CA8743-- Thread-Index: AUhyRRAY7WJ0aGo1c3BkaHk2OXBtMg== From bfoster@redhat.com Sat Sep 6 09:51:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 2ED9C7F3F for ; Sat, 6 Sep 2014 09:51:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id A2C59AC004 for ; Sat, 6 Sep 2014 07:51:17 -0700 (PDT) X-ASG-Debug-ID: 1410015075-04cb6c54fd8114e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ZyBtBGZbXqtNNTwJ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 06 Sep 2014 07:51:16 -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 (8.14.4/8.14.4) with ESMTP id s86Ep79N027962 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 6 Sep 2014 10:51:07 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s86Ep6Yv007460; Sat, 6 Sep 2014 10:51:07 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id B21951256F8; Sat, 6 Sep 2014 10:51:05 -0400 (EDT) Date: Sat, 6 Sep 2014 10:51:05 -0400 From: Brian Foster To: Dave Chinner Cc: Stefan Priebe - Profihost AG , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140906145105.GA23506@bfoster.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140905230528.GO20473@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: 1410015075 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 Sat, Sep 06, 2014 at 09:05:28AM +1000, Dave Chinner wrote: > On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > > > > Am 05.09.2014 um 14:30 schrieb Brian Foster: > > > On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > > >> Hi, > > >> > > >> i have a backup system running 20TB of storage having 350 million files. > > >> This was working fine for month. > > >> > > >> But now the free space is so heavily fragmented that i only see the > > >> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > > >> 20TB are in use. > > What does perf tell you about the CPU being burnt? (i.e run perf top > for 10-20s while that CPU burn is happening and paste the top 10 CPU > consuming functions). > > > >> > > >> Overall files are 350 Million - all in different directories. Max 5000 > > >> per dir. > > >> > > >> Kernel is 3.10.53 and mount options are: > > >> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > > >> > > >> # xfs_db -r -c freesp /dev/sda1 > > >> from to extents blocks pct > > >> 1 1 29484138 29484138 2,16 > > >> 2 3 16930134 39834672 2,92 > > >> 4 7 16169985 87877159 6,45 > > >> 8 15 78202543 999838327 73,41 > > With an inode size of 256 bytes, this is going to be your real > problem soon - most of the free space is smaller than an inode > chunk so soon you won't be able to allocate new inodes, even though > there is free space on disk. > The extent list here is in fsb units, right? 256b inodes means 16k inode chunks, in which case it seems like there's still plenty of room for inode chunks (e.g., 8-15 blocks -> 32k-64k). If you're at 350m inodes for 15T with 5T to go, that's 23.3m inodes per TB and extrapolates to ~117m more to enospc. That's 1.8m inode chunks out of the ~80m 8-15 block records currently free, and doesn't count the 20+ million inodes that seem to be scattered about the existing records as well. I certainly could be missing something here, but it seems like premature enospc due to inode chunk allocation failure might not be an impending problem here (likely due to using the smallest inode size, the risk seems to increase much more using the larger inode sizes)... > Unfortunately, there's not much we can do about this right now - we > need development in both user and kernel space to mitigate this > issue: spare inode chunk allocation in kernel space, and free space > defragmentation in userspace. Both are on the near term development > list.... > > Also, the fact that there are almost 80 million 8-15 block extents > indicates that the CPU burn is likely coming from the by-size free > space search. We look up the first extent of the correct size, and > then do a linear search for a nearest extent of that size to the > target. Hence we could be searching millions of extents to find the > "nearest".... > > > >> 16 31 3562456 83746085 6,15 > > >> 32 63 2370812 102124143 7,50 > > >> 64 127 280885 18929867 1,39 > > >> 256 511 2 827 0,00 > > >> 512 1023 65 35092 0,00 > > >> 2048 4095 2 6561 0,00 > > >> 16384 32767 1 23951 0,00 > > >> > > >> Is there anything i can optimize? Or is it just a bad idea to do this > > >> with XFS? > > No, it's not a bad idea. In fact, if you have this sort of use case, > XFS is really your only choice. In terms of optimisation, the only > thing that will really help performance is the new finobt structure. > That's a mkfs option andnot an in-place change, though, so it's > unlikely to help. > > FWIW, it may also help aging characteristics of this sort of > workload by improving inode allocation layout. That would be > a side effect of being able to search the entire free inode tree > extremely quickly rather than allocating new chunks to keep CPU time > searching the allocate inode tree for free inodes down. Hence it > would tend to more tightly pack inode chunks when they are allocated > on disk as it will fill full chunks before allocating new ones > elsewhere. > > > >> Any other options? Maybe rsync options like --inplace / > > >> --no-whole-file? > > For 350M files? I doubt there's much you can really do. Any sort of > large scale re-organisation is going to take a long, long time and > require lots of IO. If you are goign to take that route, you'd do > better to upgrade kernel and xfsprogs, then dump/mkfs.xfs -m > crc=1,finobt=1/restore. And you'd probably want to use a > multi-stream dump/restore so it can run operations concurrently and > hence at storage speed rather than being CPU bound.... > > Also, if the problem really is the number of indentically sized free > space fragments in the freespace btrees, then the initial solution > is, again, a mkfs one. i.e. remake the filesystem with more, smaller > AGs to keep the number of extents the btrees need to index down to a > reasonable level. Say a couple of hundred AGs rather than 21? > > > > If so, I wonder if something like the > > > following commit introduced in 3.12 would help: > > > > > > 133eeb17 xfs: don't use speculative prealloc for small files > > > > Looks interesting. > > Probably won't make any difference because backups via rsync do > open/write/close and don't touch the file data again, so the close > will be removing speculative preallocation before the data is > written and extents are allocated by background writeback.... > Yeah, good point. I was curious if there was an fsync involved somewhere in the sequence here, but I didn't see rsync doing that anywhere. I think we've seen that contribute to the aforementioned inode chunk allocation problem when mixed with aggressive prealloc, but that was a different application (openstack related, iirc). That said, Stefan did mention that rsync can do file updates here. So perhaps there exists the possibility to see multiple file extensions and writeback causing a similar kind of prealloc->convert->trim eofblocks pattern across multiple backups..? Either way I agree that seems much less likely to be a prominent contributer to the problem here. 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 Sat Sep 6 10:04:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 6310F7F3F for ; Sat, 6 Sep 2014 10:04:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 261A9304043 for ; Sat, 6 Sep 2014 08:04:17 -0700 (PDT) X-ASG-Debug-ID: 1410015856-04bdf010977b4fb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id yNJraELWVh2nXu45 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 06 Sep 2014 08:04:16 -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 (8.14.4/8.14.4) with ESMTP id s86F4Ej9016132 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 6 Sep 2014 11:04:14 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s86F4Eip010115; Sat, 6 Sep 2014 11:04:14 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 3E59C1256F8; Sat, 6 Sep 2014 11:04:13 -0400 (EDT) Date: Sat, 6 Sep 2014 11:04:13 -0400 From: Brian Foster To: Stefan Priebe Cc: Dave Chinner , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140906150412.GB23506@bfoster.bfoster> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> <540AB933.4030707@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540AB933.4030707@profihost.ag> 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: 1410015856 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, Sep 06, 2014 at 09:35:15AM +0200, Stefan Priebe wrote: > Hi Dave, > > Am 06.09.2014 01:05, schrieb Dave Chinner: > >On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > >> > >>Am 05.09.2014 um 14:30 schrieb Brian Foster: > >>>On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > >>>>Hi, > >>>> > >>>>i have a backup system running 20TB of storage having 350 million files. > >>>>This was working fine for month. > >>>> > >>>>But now the free space is so heavily fragmented that i only see the > >>>>kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > >>>>20TB are in use. > > > >What does perf tell you about the CPU being burnt? (i.e run perf top > >for 10-20s while that CPU burn is happening and paste the top 10 CPU > >consuming functions). > > here we go: > 15,79% [kernel] [k] xfs_inobt_get_rec > 14,57% [kernel] [k] xfs_btree_get_rec > 10,37% [kernel] [k] xfs_btree_increment > 7,20% [kernel] [k] xfs_btree_get_block > 6,13% [kernel] [k] xfs_btree_rec_offset > 4,90% [kernel] [k] xfs_dialloc_ag > 3,53% [kernel] [k] xfs_btree_readahead > 2,87% [kernel] [k] xfs_btree_rec_addr > 2,80% [kernel] [k] _xfs_buf_find > 1,94% [kernel] [k] intel_idle > 1,49% [kernel] [k] _raw_spin_lock > 1,13% [kernel] [k] copy_pte_range > 1,10% [kernel] [k] unmap_single_vma > The top 6 or so items look related to inode allocation, so that probably confirms the primary bottleneck as searching around for free inodes out of the existing inode chunks, precisely what the finobt is intended to resolve. That was introduced in 3.16 kernels, so unfortunately it is not available in 3.10. Brian > >>>> > >>>>Overall files are 350 Million - all in different directories. Max 5000 > >>>>per dir. > >>>> > >>>>Kernel is 3.10.53 and mount options are: > >>>>noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > >>>> > >>>># xfs_db -r -c freesp /dev/sda1 > >>>> from to extents blocks pct > >>>> 1 1 29484138 29484138 2,16 > >>>> 2 3 16930134 39834672 2,92 > >>>> 4 7 16169985 87877159 6,45 > >>>> 8 15 78202543 999838327 73,41 > > > >With an inode size of 256 bytes, this is going to be your real > >problem soon - most of the free space is smaller than an inode > >chunk so soon you won't be able to allocate new inodes, even though > >there is free space on disk. > > > >Unfortunately, there's not much we can do about this right now - we > >need development in both user and kernel space to mitigate this > >issue: spare inode chunk allocation in kernel space, and free space > >defragmentation in userspace. Both are on the near term development > >list.... > > > >Also, the fact that there are almost 80 million 8-15 block extents > >indicates that the CPU burn is likely coming from the by-size free > >space search. We look up the first extent of the correct size, and > >then do a linear search for a nearest extent of that size to the > >target. Hence we could be searching millions of extents to find the > >"nearest".... > > > >>>> 16 31 3562456 83746085 6,15 > >>>> 32 63 2370812 102124143 7,50 > >>>> 64 127 280885 18929867 1,39 > >>>> 256 511 2 827 0,00 > >>>> 512 1023 65 35092 0,00 > >>>> 2048 4095 2 6561 0,00 > >>>> 16384 32767 1 23951 0,00 > >>>> > >>>>Is there anything i can optimize? Or is it just a bad idea to do this > >>>>with XFS? > > > >No, it's not a bad idea. In fact, if you have this sort of use case, > >XFS is really your only choice. In terms of optimisation, the only > >thing that will really help performance is the new finobt structure. > >That's a mkfs option andnot an in-place change, though, so it's > >unlikely to help. > > I've no problem with reformatting the array. I've more backups. > > >FWIW, it may also help aging characteristics of this sort of > >workload by improving inode allocation layout. That would be > >a side effect of being able to search the entire free inode tree > >extremely quickly rather than allocating new chunks to keep CPU time > >searching the allocate inode tree for free inodes down. Hence it > >would tend to more tightly pack inode chunks when they are allocated > >on disk as it will fill full chunks before allocating new ones > >elsewhere. > > > >>>>Any other options? Maybe rsync options like --inplace / > >>>>--no-whole-file? > > > >For 350M files? I doubt there's much you can really do. Any sort of > >large scale re-organisation is going to take a long, long time and > >require lots of IO. If you are goign to take that route, you'd do > >better to upgrade kernel and xfsprogs, then dump/mkfs.xfs -m > >crc=1,finobt=1/restore. And you'd probably want to use a > >multi-stream dump/restore so it can run operations concurrently and > >hence at storage speed rather than being CPU bound.... > > I don't need a backup reformatting is possible but i really would like to > stay at 3.10. Is there anything i can backport or do i really need to > upgrade? Which version at least? > > >Also, if the problem really is the number of indentically sized free > >space fragments in the freespace btrees, then the initial solution > >is, again, a mkfs one. i.e. remake the filesystem with more, smaller > >AGs to keep the number of extents the btrees need to index down to a > >reasonable level. Say a couple of hundred AGs rather than 21? > > mkfs has chosen 21 automagically - it's nothing i've set. Is this a bug or > do i just need it cause of my special use case. > > Thanks! > > Stefan > > >>>If so, I wonder if something like the > >>>following commit introduced in 3.12 would help: > >>> > >>>133eeb17 xfs: don't use speculative prealloc for small files > >> > >>Looks interesting. > > > >Probably won't make any difference because backups via rsync do > >open/write/close and don't touch the file data again, so the close > >will be removing speculative preallocation before the data is > >written and extents are allocated by background writeback.... > > > >Cheers, > > > >Dave. > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Sat Sep 6 12:25:48 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 E78717F3F for ; Sat, 6 Sep 2014 12:25:48 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id C70DE8F8035 for ; Sat, 6 Sep 2014 10:25:45 -0700 (PDT) X-ASG-Debug-ID: 1410024343-04bdf010a07b7fa0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id oxJxtMyqqhALA54o for ; Sat, 06 Sep 2014 10:25:43 -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 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 39C8760FCA5C for ; Sat, 6 Sep 2014 12:25:43 -0500 (CDT) Message-ID: <540B4399.4020804@sandeen.net> Date: Sat, 06 Sep 2014 12:25:45 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 0/2] xfsprogs: xfs_db crc fixes/changes Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: [PATCH 0/2] xfsprogs: xfs_db crc fixes/changes Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410024343 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.9235 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 2 patches related to crcs in xfs_db, 1) display inode CRC status when read, and revalidate it when written 2) add a new "crc" command to validate, invalidate, or revalidate the CRC on a disk structure thanks, -Eric From sandeen@sandeen.net Sat Sep 6 12:46:10 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 7FFF77F3F for ; Sat, 6 Sep 2014 12:46:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6EDF28F8039 for ; Sat, 6 Sep 2014 10:46:10 -0700 (PDT) X-ASG-Debug-ID: 1410025565-04cbb05486a9fbb0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id kypjftlLYLYIsGx3 for ; Sat, 06 Sep 2014 10:46: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 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 3974A60FCA5B for ; Sat, 6 Sep 2014 12:46:05 -0500 (CDT) Message-ID: <540B485F.8070502@sandeen.net> Date: Sat, 06 Sep 2014 12:46:07 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 1/2] xfs_db: fix inode CRC validity state, and warn on read if invalid References: <540B4399.4020804@sandeen.net> X-ASG-Orig-Subj: [PATCH 1/2] xfs_db: fix inode CRC validity state, and warn on read if invalid In-Reply-To: <540B4399.4020804@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410025565 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.9235 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Currently, the "ino_crc_ok" field on the io cursor reflects overall inode validity, not CRC correctness. Because it is only used when printing CRC validity, change it to reflect only that. In addition, when reading an inode, print the current CRC state. Note, if specifying an inode which doesn't actually exist, this will claim corruption; I'm not sure if that's good or bad. Today, it already issues corruption errors on the way; this adds a new message as well ;) xfs_db> inode 129 Metadata corruption detected at block 0x80/0x2000 Metadata corruption detected at block 0x80/0x2000 ... Metadata CRC error detected for ino 129 Signed-off-by: Eric Sandeen --- diff --git a/db/inode.c b/db/inode.c index 24170ba..244d03b 100644 --- a/db/inode.c +++ b/db/inode.c @@ -684,13 +684,18 @@ set_cur_inode( numblks, DB_RING_IGN, NULL); off_cur(offset << mp->m_sb.sb_inodelog, mp->m_sb.sb_inodesize); dip = iocur_top->data; - iocur_top->ino_crc_ok = libxfs_dinode_verify(mp, ino, dip); + iocur_top->ino_crc_ok = xfs_verify_cksum((char *)dip, + mp->m_sb.sb_inodesize, + XFS_DINODE_CRC_OFF); iocur_top->ino_buf = 1; iocur_top->ino = ino; iocur_top->mode = be16_to_cpu(dip->di_mode); if ((iocur_top->mode & S_IFMT) == S_IFDIR) iocur_top->dirino = ino; + if (xfs_sb_version_hascrc(&mp->m_sb) && !iocur_top->ino_crc_ok) + dbprintf(_("Metadata CRC error detected for ino %lld\n"), ino); + /* track updated info in ring */ ring_add(); } diff --git a/db/io.c b/db/io.c index 7f1b76a..93ebf5c 100644 --- a/db/io.c +++ b/db/io.c @@ -473,6 +473,17 @@ write_cur(void) write_cur_bbs(); else write_cur_buf(); + + if (iocur_top->ino_buf) { + xfs_dinode_t *dip; + xfs_ino_t ino; + + dip = iocur_top->data; + ino = iocur_top->ino; + iocur_top->ino_crc_ok = xfs_verify_cksum((char *)dip, + mp->m_sb.sb_inodesize, + XFS_DINODE_CRC_OFF); + } } void From sandeen@sandeen.net Sat Sep 6 12:52:35 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 32ACC7F3F for ; Sat, 6 Sep 2014 12:52:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id A1032AC001 for ; Sat, 6 Sep 2014 10:52:31 -0700 (PDT) X-ASG-Debug-ID: 1410025949-04cb6c54fd8154b0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 6D0aGRqNlwKuLoUt for ; Sat, 06 Sep 2014 10:52:29 -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 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 0772D60FCA5C for ; Sat, 6 Sep 2014 12:52:28 -0500 (CDT) Message-ID: <540B49DF.8000404@sandeen.net> Date: Sat, 06 Sep 2014 12:52:31 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH 2/2] xfsprogs: xfs_db: add crc manipulation commands References: <540B4399.4020804@sandeen.net> X-ASG-Orig-Subj: [PATCH 2/2] xfsprogs: xfs_db: add crc manipulation commands In-Reply-To: <540B4399.4020804@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410025949 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.9235 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This adds a new "crc" command to xfs_db for CRC-enabled filesystems. If a structure has a CRC field, we can validate it, invalidate/corrupt it, or revalidate/rewrite it: xfs_db> sb 0 xfs_db> crc -v crc = 0x796c814f (correct) xfs_db> crc -i Metadata CRC error detected at block 0x0/0x200 crc = 0x796c8150 (bad) xfs_db> crc -r crc = 0x796c814f (correct) This requires temporarily replacing the write verifier with a dummy which won't recalculate the CRC on the way to disk. It also required me to write a new flist function, which is totally foreign to me, so hopefully done right - but it seems to work here. Signed-off-by: Eric Sandeen --- diff --git a/db/Makefile b/db/Makefile index bae6154..f0175cc 100644 --- a/db/Makefile +++ b/db/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs LTCOMMAND = xfs_db HFILES = addr.h agf.h agfl.h agi.h attr.h attrshort.h bit.h block.h bmap.h \ - btblock.h bmroot.h check.h command.h convert.h debug.h \ + btblock.h bmroot.h check.h command.h convert.h crc.h debug.h \ dir2.h dir2sf.h dquot.h echo.h faddr.h field.h \ flist.h fprint.h frag.h freesp.h hash.h help.h init.h inode.h input.h \ io.h malloc.h metadump.h output.h print.h quit.h sb.h sig.h strvec.h \ diff --git a/db/command.c b/db/command.c index b7e3165..d44e0a5 100644 --- a/db/command.c +++ b/db/command.c @@ -48,6 +48,7 @@ #include "write.h" #include "malloc.h" #include "dquot.h" +#include "crc.h" cmdinfo_t *cmdtab; int ncmds; @@ -123,6 +124,7 @@ init_commands(void) bmap_init(); check_init(); convert_init(); + crc_init(); debug_init(); echo_init(); frag_init(); diff --git a/db/crc.c b/db/crc.c new file mode 100644 index 0000000..73dffcc --- /dev/null +++ b/db/crc.c @@ -0,0 +1,189 @@ +/* + * 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 + */ + +#include +#include "addr.h" +#include "command.h" +#include "type.h" +#include "faddr.h" +#include "fprint.h" +#include "field.h" +#include "flist.h" +#include "io.h" +#include "init.h" +#include "output.h" +#include "bit.h" +#include "print.h" + +static int crc_f(int argc, char **argv); +static void crc_help(void); + +static const cmdinfo_t crc_cmd = + { "crc", NULL, crc_f, 0, 1, 0, "[-i|-r|-v]", + N_("manipulate crc values for V5 filesystem structures"), crc_help }; + +void +crc_init(void) +{ + if (xfs_sb_version_hascrc(&mp->m_sb)) + add_command(&crc_cmd); +} + +static void +crc_help(void) +{ + dbprintf(_( +"\n" +" 'crc' validates, invalidates, or recalculates the crc value for\n" +" the current on-disk metadata structures in Version 5 filesystems.\n" +"\n" +" Usage: \"crc [-i|-r|-v]\"\n" +"\n" +)); + +} + +void +xfs_dummy_write_verify( + struct xfs_buf *bp) +{ + return; +} + +static int +crc_f( + int argc, + char **argv) +{ + const struct xfs_buf_ops *stashed_ops = NULL; + extern char *progname; + const field_t *fields; + const ftattr_t *fa; + flist_t *fl; + int invalidate = 0; + int recalculate = 0; + int validate = 0; + int c; + + if (cur_typ == NULL) { + dbprintf(_("no current type\n")); + return 0; + } + + if (cur_typ->fields == NULL) { + dbprintf(_("current type (%s) is not a structure\n"), + cur_typ->name); + return 0; + } + + if (argc) while ((c = getopt(argc, argv, "irv")) != EOF) { + switch (c) { + case 'i': + invalidate = 1; + break; + case 'r': + recalculate = 1; + break; + case 'v': + validate = 1; + break; + default: + dbprintf(_("bad option for crc command\n")); + return 0; + } + } else + validate = 1; + + if (invalidate + recalculate + validate > 1) { + dbprintf(_("crc command accepts only one option\n")); + return 0; + } + + if ((invalidate || recalculate) && + (x.isreadonly & LIBXFS_ISREADONLY || !expert_mode)) { + dbprintf(_("%s not in expert mode, writing disabled\n"), + progname); + return 0; + } + + fields = cur_typ->fields; + + /* if we're a root field type, go down 1 layer to get field list */ + if (fields->name[0] == '\0') { + fa = &ftattrtab[fields->ftyp]; + ASSERT(fa->ftyp == fields->ftyp); + fields = fa->subfld; + } + + /* Search for a CRC field */ + fl = flist_find_ftyp(fields, FLDT_CRC); + if (!fl) { + dbprintf(_("No CRC field found for type %s\n"), cur_typ->name); + return 0; + } + + /* run down the field list and set offsets into the data */ + if (!flist_parse(fields, fl, iocur_top->data, 0)) { + flist_free(fl); + dbprintf(_("parsing error\n")); + return 0; + } + + if (invalidate) { + struct xfs_buf_ops nowrite_ops; + flist_t *sfl; + int bit_length; + int parentoffset; + int crc; + + sfl = fl; + parentoffset = 0; + while (sfl->child) { + parentoffset = sfl->offset; + sfl = sfl->child; + } + ASSERT(sfl->fld->ftyp == FLDT_CRC); + + bit_length = fsize(sfl->fld, iocur_top->data, parentoffset, 0); + bit_length *= fcount(sfl->fld, iocur_top->data, parentoffset); + crc = getbitval(iocur_top->data, sfl->offset, bit_length, BVUNSIGNED); + /* Off by one.. */ + crc = cpu_to_be32(crc + 1); + setbitval(iocur_top->data, sfl->offset, bit_length, &crc); + + /* Temporarily remove write verifier so we can write a bad CRC */ + stashed_ops = iocur_top->bp->b_ops; + nowrite_ops.verify_read = stashed_ops->verify_read; + nowrite_ops.verify_write = xfs_dummy_write_verify; + iocur_top->bp->b_ops = &nowrite_ops; + } + + if (invalidate || recalculate) { + write_cur(); + if (stashed_ops) + iocur_top->bp->b_ops = stashed_ops; + /* re-verify to get proper b_error state */ + iocur_top->bp->b_ops->verify_read(iocur_top->bp); + } + + /* And show us what we've got! */ + flist_print(fl); + print_flist(fl); + flist_free(fl); + return 0; +} diff --git a/db/crc.h b/db/crc.h new file mode 100644 index 0000000..ec1ab8c --- /dev/null +++ b/db/crc.h @@ -0,0 +1,23 @@ +/* + * 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 + */ + +struct field; + +extern void crc_init(void); +extern void crc_struct(const field_t *fields, int argc, char **argv); +extern void xfs_dummy_write_verify(struct xfs_buf *bp); diff --git a/db/flist.c b/db/flist.c index 33f7da7..fa19f70 100644 --- a/db/flist.c +++ b/db/flist.c @@ -411,6 +411,40 @@ flist_split( return v; } +/* + * Given a set of fields, scan for a field of the given type. + * Return an flist leading to the first found field + * of that type. + * Return NULL if no field of the given type is found. + */ +flist_t * +flist_find_ftyp( + const field_t *fields, + fldt_t type) +{ + flist_t *fl; + const field_t *f; + const ftattr_t *fa; + + for (f = fields; f->name; f++) { + fl = flist_make(f->name); + fl->fld = f; + if (f->ftyp == type) + return fl; + fa = &ftattrtab[f->ftyp]; + if (fa->subfld) { + flist_t *nfl; + nfl = flist_find_ftyp(fa->subfld, type); + if (nfl) { + fl->child = nfl; + return fl; + } + } + flist_free(fl); + } + return NULL; +} + static void ftok_free( ftok_t *ft) diff --git a/db/flist.h b/db/flist.h index 5c9fba0..3f4b312 100644 --- a/db/flist.h +++ b/db/flist.h @@ -37,3 +37,4 @@ extern int flist_parse(const struct field *fields, flist_t *fl, void *obj, int startoff); extern void flist_print(flist_t *fl); extern flist_t *flist_scan(char *name); +extern flist_t *flist_find_ftyp(const field_t *fields, fldt_t type); diff --git a/db/io.c b/db/io.c index 5bf40aa..1ba1f90 100644 --- a/db/io.c +++ b/db/io.c @@ -27,6 +27,7 @@ #include "output.h" #include "init.h" #include "malloc.h" +#include "crc.h" static int pop_f(int argc, char **argv); static void pop_help(void); @@ -464,9 +465,11 @@ write_cur(void) return; } - if (iocur_top->ino_buf) + if (iocur_top->ino_buf && + iocur_top->bp->b_ops->verify_write != xfs_dummy_write_verify) libxfs_dinode_calc_crc(mp, iocur_top->data); - if (iocur_top->dquot_buf) + if (iocur_top->dquot_buf && + iocur_top->bp->b_ops->verify_write != xfs_dummy_write_verify) xfs_update_cksum(iocur_top->data, sizeof(struct xfs_dqblk), XFS_DQUOT_CRC_OFF); if (iocur_top->bbmap) diff --git a/db/write.h b/db/write.h index 31e2665..664ddcc 100644 --- a/db/write.h +++ b/db/write.h @@ -20,5 +20,5 @@ struct field; extern void write_init(void); extern void write_block(const field_t *fields, int argc, char **argv); -extern void write_string(const field_t *fields, int argc, char **argv); extern void write_struct(const field_t *fields, int argc, char **argv); +extern void write_string(const field_t *fields, int argc, char **argv); diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8 index 4d8d4ff..0764832 100644 --- a/man/man8/xfs_db.8 +++ b/man/man8/xfs_db.8 @@ -87,16 +87,14 @@ or .I filename read-only. This option is required if the filesystem is mounted. It is only necessary to omit this flag if a command that changes data -.RB ( write ", " blocktrash ) +.RB ( write ", " blocktrash ", " crc ) is to be used. .TP .B \-x Specifies expert mode. This enables the -.B write -and -.B blocktrash -commands. +.RB ( write ", " blocktrash ", " crc +invalidate/revalidate) commands. .TP .B \-V Prints the version number and exits. @@ -409,6 +407,25 @@ conversions such as .I agb .BR fsblock . .TP +.B crc [\-i|\-r|\-v] +Invalidates, revalidates, or validates the CRC (checksum) +field of the current structure, if it has one. +This command is available only on CRC-enabled filesystems. +With no argument, validation is performed. +Each command will display the resulting CRC value and state. +.RS 1.0i +.TP 0.4i +.B \-i +Invalidate the structure's CRC value (incrementing it by one), +and write it to disk. +.TP +.B \-r +Recalculate the current structure's correct CRC value, and write it to disk. +.TP +.B \-v +Validate and display the current value and state of the structure's CRC. +.RE +.TP .BI "daddr [" d ] Set current address to the daddr (512 byte block) given by .IR d . From david@fromorbit.com Sat Sep 6 17:54:37 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 9BDED7F3F for ; Sat, 6 Sep 2014 17:54:37 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1B4C7AC001 for ; Sat, 6 Sep 2014 15:54:33 -0700 (PDT) X-ASG-Debug-ID: 1410044068-04cb6c54fd81eb30001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id b6JycGB2LCecyDBh for ; Sat, 06 Sep 2014 15:54:28 -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: At1AAGSPC1R5LKYhPGdsb2JhbABYgw2BKoczqREBAQEGmnCFaQEDAQEBfxcFAQEBATg2hAQBBScTHCMQCAMOCgklDwUlAwcaE4hBvGoBFxiFZIhmIkkHgy+BHQEEnHGXFB6BbisvgQeBSAEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 07 Sep 2014 08:24:26 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQOsD-0005Eh-0v; Sun, 07 Sep 2014 08:54:25 +1000 Date: Sun, 7 Sep 2014 08:54:24 +1000 From: Dave Chinner To: Brian Foster Cc: Stefan Priebe - Profihost AG , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140906225424.GA9955@dastard> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> <20140906145105.GA23506@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140906145105.GA23506@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: 1410044068 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.9240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Sep 06, 2014 at 10:51:05AM -0400, Brian Foster wrote: > On Sat, Sep 06, 2014 at 09:05:28AM +1000, Dave Chinner wrote: > > On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > > > > > > Am 05.09.2014 um 14:30 schrieb Brian Foster: > > > > On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > > > >> Hi, > > > >> > > > >> i have a backup system running 20TB of storage having 350 million files. > > > >> This was working fine for month. > > > >> > > > >> But now the free space is so heavily fragmented that i only see the > > > >> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > > > >> 20TB are in use. > > > > What does perf tell you about the CPU being burnt? (i.e run perf top > > for 10-20s while that CPU burn is happening and paste the top 10 CPU > > consuming functions). > > > > > >> > > > >> Overall files are 350 Million - all in different directories. Max 5000 > > > >> per dir. > > > >> > > > >> Kernel is 3.10.53 and mount options are: > > > >> noatime,nodiratime,attr2,inode64,logbufs=8,logbsize=256k,noquota > > > >> > > > >> # xfs_db -r -c freesp /dev/sda1 > > > >> from to extents blocks pct > > > >> 1 1 29484138 29484138 2,16 > > > >> 2 3 16930134 39834672 2,92 > > > >> 4 7 16169985 87877159 6,45 > > > >> 8 15 78202543 999838327 73,41 > > > > With an inode size of 256 bytes, this is going to be your real > > problem soon - most of the free space is smaller than an inode > > chunk so soon you won't be able to allocate new inodes, even though > > there is free space on disk. > > > > The extent list here is in fsb units, right? 256b inodes means 16k inode > chunks, in which case it seems like there's still plenty of room for > inode chunks (e.g., 8-15 blocks -> 32k-64k). PEBKAC. My bad. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sat Sep 6 17:56:58 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 789997F3F for ; Sat, 6 Sep 2014 17:56:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 22F42AC001 for ; Sat, 6 Sep 2014 15:56:57 -0700 (PDT) X-ASG-Debug-ID: 1410044215-04bdf010977c26f0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id oF8uTHVhCTUst5A9 for ; Sat, 06 Sep 2014 15:56: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: AtxAAJmQC1R5LKYhPGdsb2JhbABYgw2BKoczqRIBAQEGmnCFaQEDAQEBfxcFAQEBATg2hAQBBTocIxAIAw4KCSUPBSUDBxoTiEG8agEXGIVkiGYiSQeDL4EdBZxxmSArL4EHgUgBAQE Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 07 Sep 2014 08:26:55 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQOuc-0005FH-QS; Sun, 07 Sep 2014 08:56:54 +1000 Date: Sun, 7 Sep 2014 08:56:54 +1000 From: Dave Chinner To: Brian Foster Cc: Stefan Priebe , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140906225654.GB9955@dastard> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> <540AB933.4030707@profihost.ag> <20140906150412.GB23506@bfoster.bfoster> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140906150412.GB23506@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: 1410044215 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.9240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Sep 06, 2014 at 11:04:13AM -0400, Brian Foster wrote: > On Sat, Sep 06, 2014 at 09:35:15AM +0200, Stefan Priebe wrote: > > Hi Dave, > > > > Am 06.09.2014 01:05, schrieb Dave Chinner: > > >On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: > > >> > > >>Am 05.09.2014 um 14:30 schrieb Brian Foster: > > >>>On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: > > >>>>Hi, > > >>>> > > >>>>i have a backup system running 20TB of storage having 350 million files. > > >>>>This was working fine for month. > > >>>> > > >>>>But now the free space is so heavily fragmented that i only see the > > >>>>kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the > > >>>>20TB are in use. > > > > > >What does perf tell you about the CPU being burnt? (i.e run perf top > > >for 10-20s while that CPU burn is happening and paste the top 10 CPU > > >consuming functions). > > > > here we go: > > 15,79% [kernel] [k] xfs_inobt_get_rec > > 14,57% [kernel] [k] xfs_btree_get_rec > > 10,37% [kernel] [k] xfs_btree_increment > > 7,20% [kernel] [k] xfs_btree_get_block > > 6,13% [kernel] [k] xfs_btree_rec_offset > > 4,90% [kernel] [k] xfs_dialloc_ag > > 3,53% [kernel] [k] xfs_btree_readahead > > 2,87% [kernel] [k] xfs_btree_rec_addr > > 2,80% [kernel] [k] _xfs_buf_find > > 1,94% [kernel] [k] intel_idle > > 1,49% [kernel] [k] _raw_spin_lock > > 1,13% [kernel] [k] copy_pte_range > > 1,10% [kernel] [k] unmap_single_vma > > > > The top 6 or so items look related to inode allocation, so that probably > confirms the primary bottleneck as searching around for free inodes out > of the existing inode chunks, precisely what the finobt is intended to > resolve. That was introduced in 3.16 kernels, so unfortunately it is not > available in 3.10. *nod* Again, the only workaround for this on a non-finobt fs is to greatly increase the number of AGs so there's less records in each btree to search. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sat Sep 6 18:00:30 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 B69767F3F for ; Sat, 6 Sep 2014 18:00:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 96F5D304048 for ; Sat, 6 Sep 2014 16:00:27 -0700 (PDT) X-ASG-Debug-ID: 1410044424-04cbb05486aaa170001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id 6cB7j09490RZCntr for ; Sat, 06 Sep 2014 16:00:25 -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: At9AAL2RC1R5LKYhPGdsb2JhbABYgw2BKoczqRIBAQEGmnCFaQEDAQEBfxcFAQEBATg2hAMBAQQBJxMcIwULCAMYCSUPBSUDBxoTiDoHvGoBFxiFZIlRB4MvgR0FnHGMKIsggVgrL4JPAQEB Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 07 Sep 2014 08:30:08 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQOxk-0005Fr-F7; Sun, 07 Sep 2014 09:00:08 +1000 Date: Sun, 7 Sep 2014 09:00:08 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH 1/2] xfs_db: fix inode CRC validity state, and warn on read if invalid Message-ID: <20140906230008.GC9955@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs_db: fix inode CRC validity state, and warn on read if invalid References: <540B4399.4020804@sandeen.net> <540B485F.8070502@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540B485F.8070502@sandeen.net> 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: 1410044424 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.9240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Sep 06, 2014 at 12:46:07PM -0500, Eric Sandeen wrote: > Currently, the "ino_crc_ok" field on the io cursor > reflects overall inode validity, not CRC correctness. > Because it is only used when printing CRC validity, > change it to reflect only that. > > In addition, when reading an inode, print the current > CRC state. > > Note, if specifying an inode which doesn't actually > exist, this will claim corruption; I'm not sure if > that's good or bad. Today, it already issues corruption > errors on the way; this adds a new message as well ;) > > xfs_db> inode 129 > Metadata corruption detected at block 0x80/0x2000 > Metadata corruption detected at block 0x80/0x2000 > ... > Metadata CRC error detected for ino 129 > > Signed-off-by: Eric Sandeen > --- > > diff --git a/db/inode.c b/db/inode.c > index 24170ba..244d03b 100644 > --- a/db/inode.c > +++ b/db/inode.c > @@ -684,13 +684,18 @@ set_cur_inode( > numblks, DB_RING_IGN, NULL); > off_cur(offset << mp->m_sb.sb_inodelog, mp->m_sb.sb_inodesize); > dip = iocur_top->data; > - iocur_top->ino_crc_ok = libxfs_dinode_verify(mp, ino, dip); > + iocur_top->ino_crc_ok = xfs_verify_cksum((char *)dip, > + mp->m_sb.sb_inodesize, > + XFS_DINODE_CRC_OFF); that needs to be "libxfs_verify_cksum". > iocur_top->ino_buf = 1; > iocur_top->ino = ino; > iocur_top->mode = be16_to_cpu(dip->di_mode); > if ((iocur_top->mode & S_IFMT) == S_IFDIR) > iocur_top->dirino = ino; > + if (xfs_sb_version_hascrc(&mp->m_sb) && !iocur_top->ino_crc_ok) > + dbprintf(_("Metadata CRC error detected for ino %lld\n"), ino); > + and we probably shoul dbe looking at making all those sb version checks "libxfs_sb_version_has...." as well. > /* track updated info in ring */ > ring_add(); > } > diff --git a/db/io.c b/db/io.c > index 7f1b76a..93ebf5c 100644 > --- a/db/io.c > +++ b/db/io.c > @@ -473,6 +473,17 @@ write_cur(void) > write_cur_bbs(); > else > write_cur_buf(); > + > + if (iocur_top->ino_buf) { > + xfs_dinode_t *dip; > + xfs_ino_t ino; > + > + dip = iocur_top->data; > + ino = iocur_top->ino; > + iocur_top->ino_crc_ok = xfs_verify_cksum((char *)dip, > + mp->m_sb.sb_inodesize, > + XFS_DINODE_CRC_OFF); > + } Needs a comment explaining why we are reverifying the inode crc. Cheers, Dave. -- Dave Chinner david@fromorbit.com From root@krios.tbi.univie.ac.at Sat Sep 6 23:25:10 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 BEFB67F47 for ; Sat, 6 Sep 2014 23:25:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4B294AC001 for ; Sat, 6 Sep 2014 21:25:06 -0700 (PDT) X-ASG-Debug-ID: 1410063904-04cbb05487ab5d70001-NocioJ Received: from krios.tbi.univie.ac.at (krios.tbi.univie.ac.at [131.130.44.60]) by cuda.sgi.com with ESMTP id jCi9iiGzLAvSHRAs for ; Sat, 06 Sep 2014 21:25:05 -0700 (PDT) X-Barracuda-Envelope-From: root@krios.tbi.univie.ac.at X-Barracuda-Apparent-Source-IP: 131.130.44.60 Received: by krios.tbi.univie.ac.at (Postfix) id 76DAE5F39C; Sun, 7 Sep 2014 06:25:02 +0200 (CEST) Delivered-To: root@krios.tbi.univie.ac.at Received: by krios.tbi.univie.ac.at (Postfix, from userid 0) id 6730F5F455; Sun, 7 Sep 2014 06:25:02 +0200 (CEST) From: root@krios.tbi.univie.ac.at (Cron Daemon) To: root@krios.tbi.univie.ac.at Subject: Cron test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) Content-Type: text/plain; charset=UTF-8 X-ASG-Orig-Subj: Cron test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: Message-Id: <20140907042502.6730F5F455@krios.tbi.univie.ac.at> Date: Sun, 7 Sep 2014 06:25:02 +0200 (CEST) X-Barracuda-Connect: krios.tbi.univie.ac.at[131.130.44.60] X-Barracuda-Start-Time: 1410063904 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_MISMATCH_TO, BSF_SC0_SA_TO_FROM_ADDR_MATCH, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9246 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address /etc/cron.daily/logrotate: error: error opening /home/git/gitlab/log/application.log: Permission denied error: error opening /home/git/gitlab/log/githost.log: Permission denied error: error opening /home/git/gitlab/log/production.log: Permission denied error: error opening /home/git/gitlab/log/satellites.log: Permission denied error: error opening /home/git/gitlab/log/sidekiq.log: Permission denied error: error opening /home/git/gitlab/log/unicorn.stderr.log: Permission denied error: error opening /home/git/gitlab/log/unicorn.stdout.log: Permission denied error: error opening /home/git/gitlab-shell/gitlab-shell.log: Permission denied run-parts: /etc/cron.daily/logrotate exited with return code 1 From stan@hardwarefreak.com Sun Sep 7 00:23:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 ECF687F4E for ; Sun, 7 Sep 2014 00:23:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4E662AC004 for ; Sat, 6 Sep 2014 22:23:04 -0700 (PDT) X-ASG-Debug-ID: 1410067382-04cb6c550082aa40001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id WA88BTSwLx471NBT for ; Sat, 06 Sep 2014 22:23:02 -0700 (PDT) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 X-Barracuda-User-Whitelist: xfs@oss.sgi.com Received: from [134.64.128.162] (unknown [192.65.45.20]) by greer.hardwarefreak.com (Postfix) with ESMTPA id 3BD1F6C0B7; Sun, 7 Sep 2014 00:23:01 -0500 (CDT) Message-ID: <540BEBB7.7020306@hardwarefreak.com> Date: Sun, 07 Sep 2014 00:23:03 -0500 From: stan hoeppner User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.7.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: storage, libaio, or XFS problem? 3.4.26 References: <20140828003226.GO20518@dastard> <7f9e5aef187b44e899077467aeb0809d@localhost> <20140828230817.GU20518@dastard> <2d2ce7bb38c00a7d35f4a324f6a36cbb@localhost> <20140829235538.GF20518@dastard> <20140831235749.GH20518@dastard> <5403E9B9.7040608@hardwarefreak.com> <20140901234529.GI20518@dastard> <5405FB19.2020208@hardwarefreak.com> <20140902221915.GK20518@dastard> X-ASG-Orig-Subj: Re: storage, libaio, or XFS problem? 3.4.26 In-Reply-To: <20140902221915.GK20518@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1410067382 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 09/02/2014 05:19 PM, Dave Chinner wrote: > On Tue, Sep 02, 2014 at 12:15:05PM -0500, stan hoeppner wrote: >> On 09/01/2014 06:45 PM, Dave Chinner wrote: >>> On Sun, Aug 31, 2014 at 10:36:25PM -0500, stan hoeppner wrote: >>>> On 08/31/2014 06:57 PM, Dave Chinner wrote: >>>>> On Fri, Aug 29, 2014 at 09:55:53PM -0500, Stan Hoeppner wrote: >>>>>> Have you played with bcache yet? >>>>> >>>>> Enough to scare me. So many ways for things to go wrong, no easy way >>>>> to recover when things go wrong. And that's before I even get to >>>>> performance warts, like having systems stall completely because >>>>> there's tens or hundreds of GB of 4k random writes that have to be >>>>> flushed to slow SATA RAID6 in the cache.... >>>> >>>> Yikes. I hadn't yet heard such opinions expressed. By go wrong I >>>> assume you mean the btrees or cached sector data getting broken, corrupted? >>> >>> bcache is a complex filesystem hidden inside a block device. If >>> bcache goes AWOL, so does the all the data on your block device. >>> Need I say more? >> >> So it's no different in that regard than the black box implementations >> such as LSI's CacheCade and various SAN vendor SSD caching >> implementations. Or are you saying the bcache code complexity is so >> much greater that failure is more likely that the vendor implementations? > > No, not the code complexity in particular. It's more that compared > to vendor SSD caching implementations there's an awful lot less > testing and validation, and people tend to use random, unreliable > hardware for cache devices. It's great when it works, but the > configuration and validation of correct behaviour in error > conditions falls to the user... Understood. I'm seeing the potential need for a future contract with Kent if we decide to go forward with bcache. He could advise on a testing and validation regimen, optimizing for the workload, and providing code fixes or features to overcome problems. Attempting to use something so new as bcache in a 24x7 commercial workload likely needs author support. >>> screen is your friend when it comes to keeping remote shells >>> active as the network comes and goes. VPN drops out, just bring it >>> back up when you need it and reconnect to the remote screen instance >>> and it's like you never left.... >> >> Thanks for this tip. I'd heard of screen before but never used it. I >> will say the man page is a bit intimidating for such an apparently >> simple tool... > > Yeah, I use about 0.0001% of what screen can do. It could lose most > of it's functionality and I wouldn't notice or care. tmux is another > option for this functionality, but I've never used it because I > found out about screen first... I'd guess there are many utils out there used in the same way. I have some more information regarding the AIO issue. I fired up the test harness and it ran for 30 hours at 706 MB/s avg write rate, 303 MB/s per LUN, nearly flawlessly, less than 0.01% buffer loss, and avg IO times were less than 0.5 seconds. Then the app crashed and I found the following in dmesg. I had to "hard reset" the box due to the shrapnel. There are no IO errors of any kind leading up to the forced shutdown. I assume the inode update and streamRT-sa hung task traces are a result of the forced shutdown, not a cause of it. In lieu of an xfs_repair with a version newer than I'm able to install, any ideas what caused the forced shutdown after 30 hours, given there are no errors preceding it? Sep 6 06:33:33 Anguish-ssu-1 kernel: [288087.334863] XFS (dm-5): xfs_do_force_shutdown(0x8) called from line 3732 of file fs/xfs/xfs_bmap.c. Return address = 0xffffffffa02009a6 Sep 6 06:33:42 Anguish-ssu-1 kernel: [288096.220920] XFS (dm-5): failed to update timestamps for inode 0x2ffc9caae Sep 6 06:33:48 Anguish-ssu-1 kernel: [288102.492641] XFS (dm-5): failed to update timestamps for inode 0x97b7566dd Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599412] INFO: task streamRT-sa:14706 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599414] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599416] streamRT-sa D ffff883f3c018408 0 14706 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599420] ffff883e6fc09b28 0000000000000086 0000000000000000 ffff8840666f5180 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599425] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599428] ffff883e6fc09fd8 ffff883e6fc08000 00000000000122c0 ffff883e6fc08000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599432] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599441] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599443] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599446] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599451] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599454] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599466] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599472] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599476] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599481] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599487] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599493] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599499] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599503] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599505] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599508] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599510] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599513] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599516] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599519] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599521] INFO: task streamRT-sa:14713 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599523] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599524] streamRT-sa D ffff883b4f52ea48 0 14713 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599527] ffff883e74af9b28 0000000000000086 0000000000000000 ffff884066622140 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599530] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599534] ffff883e74af9fd8 ffff883e74af8000 00000000000122c0 ffff883e74af8000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599537] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599540] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599542] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599544] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599547] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599549] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599555] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599561] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599563] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599569] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599575] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599580] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599586] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599589] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599591] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599593] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599596] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599598] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599601] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599603] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599605] INFO: task streamRT-sa:14723 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599607] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599608] streamRT-sa D ffff883e754b2b88 0 14723 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599610] ffff883e6fca3b28 0000000000000086 0000000000000000 ffff8840662521c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599614] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599617] ffff883e6fca3fd8 ffff883e6fca2000 00000000000122c0 ffff883e6fca2000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599620] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599623] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599625] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599628] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599630] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599632] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599638] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599644] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599646] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599652] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599657] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599663] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599669] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599671] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599674] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599676] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599678] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599681] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599684] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599686] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599688] INFO: task streamRT-sa:14730 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599689] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599691] streamRT-sa D ffff883dc2360388 0 14730 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599693] ffff883e6fde1b28 0000000000000086 0000000000000000 ffff884066043080 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599696] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599700] ffff883e6fde1fd8 ffff883e6fde0000 00000000000122c0 ffff883e6fde0000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599703] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599705] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599708] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599710] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599712] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599715] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599720] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599726] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599728] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599734] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599740] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599745] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599751] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599754] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599756] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599758] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599761] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599763] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599766] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599768] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599770] INFO: task streamRT-sa:14733 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599771] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599773] streamRT-sa D ffff883e7555cb08 0 14733 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599775] ffff883e7389db28 0000000000000086 0000000000000000 ffff88406663a040 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599778] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599782] ffff883e7389dfd8 ffff883e7389c000 00000000000122c0 ffff883e7389c000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599785] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599787] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599790] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599792] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599794] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599797] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599802] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599808] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599811] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599816] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599822] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599827] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599833] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599836] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599838] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599840] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599843] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599845] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599848] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599850] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599852] INFO: task streamRT-sa:14736 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599853] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599855] streamRT-sa D ffff883e73915448 0 14736 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599857] ffff883e73bb5b28 0000000000000086 0000000000000000 ffff884066709080 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599860] 000000025600a331 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599864] ffff883e73bb5fd8 ffff883e73bb4000 00000000000122c0 ffff883e73bb4000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599867] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599870] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599872] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599874] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599877] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599879] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599885] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599890] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599892] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599898] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599904] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599909] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599915] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599918] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599920] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599922] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599925] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599927] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599930] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599932] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599934] INFO: task streamRT-sa:14738 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599936] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599937] streamRT-sa D ffff883f7c605488 0 14738 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599939] ffff883c4cda7b28 0000000000000086 0000000000000000 ffff8840667bd1c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599943] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599946] ffff883c4cda7fd8 ffff883c4cda6000 00000000000122c0 ffff883c4cda6000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599949] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599952] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599954] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599956] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599959] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599961] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599967] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599972] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599975] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599980] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599986] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599991] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.599997] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600000] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600002] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600004] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600007] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600009] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600012] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600014] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600016] INFO: task streamRT-sa:14739 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600018] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600019] streamRT-sa D ffff883e75536a08 0 14739 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600021] ffff883b4f411b28 0000000000000086 0000000000000000 ffff884066739140 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600025] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600028] ffff883b4f411fd8 ffff883b4f410000 00000000000122c0 ffff883b4f410000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600031] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600034] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600036] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600038] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600041] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600043] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600048] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600054] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600056] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600062] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600068] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600073] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600079] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600082] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600084] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600086] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600089] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600091] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600094] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600096] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600099] INFO: task streamRT-sa:14768 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600100] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600101] streamRT-sa D ffff883b5f120308 0 14768 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600104] ffff883cca73bb28 0000000000000086 0000000000000000 ffffffff81813020 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600107] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600110] ffff883cca73bfd8 ffff883cca73a000 00000000000122c0 ffff883cca73a000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600113] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600116] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600118] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600120] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600123] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600125] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600131] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600136] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600139] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600144] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600150] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600156] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600161] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600164] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600166] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600168] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600171] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600173] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600176] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600178] [] system_call_fastpath+0x16/0x1b Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600180] INFO: task streamRT-sa:14789 blocked for more than 120 seconds. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600181] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600183] streamRT-sa D ffff883cca430b08 0 14789 14051 0x00000004 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600185] ffff883f3d9c3b28 0000000000000086 0000000000000000 ffff884066739140 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600188] 0000000000000000 0000000000000000 00000000000122c0 00000000000122c0 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600192] ffff883f3d9c3fd8 ffff883f3d9c2000 00000000000122c0 ffff883f3d9c2000 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600195] Call Trace: Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600197] [] schedule+0x64/0x66 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600200] [] rwsem_down_failed_common+0xdb/0x10d Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600202] [] rwsem_down_write_failed+0x13/0x15 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600204] [] call_rwsem_down_write_failed+0x13/0x20 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600207] [] ? down_write+0x25/0x27 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600212] [] xfs_ilock+0x4f/0xb4 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600218] [] xfs_rw_ilock+0x2c/0x33 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600220] [] ? _raw_spin_unlock_irq+0x27/0x32 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600226] [] xfs_file_aio_write_checks+0x41/0xfe [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600231] [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600237] [] xfs_file_aio_write+0x152/0x1b5 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600243] [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600245] [] aio_rw_vect_retry+0x85/0x18a Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600248] [] ? aio_fsync+0x29/0x29 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600250] [] aio_run_iocb+0x7b/0x149 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600252] [] io_submit_one+0x199/0x1f3 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600255] [] do_io_submit+0xfa/0x271 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600258] [] sys_io_submit+0x10/0x12 Sep 6 06:35:41 Anguish-ssu-1 kernel: [288215.600260] [] system_call_fastpath+0x16/0x1b Sep 6 15:42:02 Anguish-ssu-1 kernel: [320925.045195] SysRq : Resetting Thanks, Stan From admin@vista1.magizz.com Sun Sep 7 02:24:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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_IMAGE_RATIO_08, HTML_MESSAGE,RCVD_NUMERIC_HELO,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 0B5797F51 for ; Sun, 7 Sep 2014 02:24:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id ED622304043 for ; Sun, 7 Sep 2014 00:24:41 -0700 (PDT) X-ASG-Debug-ID: 1410074678-04cb6c54ff82d320001-NocioJ Received: from vps.magizz.com (vps.magizz.com [162.251.83.157]) by cuda.sgi.com with ESMTP id aE69B4oMKyvpLnLO (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 00:24:39 -0700 (PDT) X-Barracuda-Envelope-From: admin@vista1.magizz.com X-Barracuda-Apparent-Source-IP: 162.251.83.157 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=vista1.magizz.com; s=default; h=Content-Type:MIME-Version:List-Owner:List-Subscribe:List-Unsubscribe:List-Help:Message-ID:Reply-To:From:Date:Subject:To; bh=7R53dxrsq1VmxwPbo7FM2weOJVHisEECnbMX7YEfhNM=; b=Jh2VK8nlpOstQznWiLKyIGmqfEt3obV/I9gYGsrtzrpRUJ97paV/Q0RW2Bqp9jQMvFyyvNz9n1tjEPjs15bU3faZ7SQjHeLdF5jKAXsib9Kv8XDoZwf3coiZsYhW9XTwZILGb++mQCByjmWADc47pO/z10VfsaviYeJpff5weyY=; Received: from magivis by vps.magizz.com with local (Exim 4.82) (envelope-from ) id 1XQWpy-0000ar-0P for xfs@oss.sgi.com; Sun, 07 Sep 2014 11:24:38 +0400 To: xfs@oss.sgi.com Subject: Insure your bike in 3 easy steps X-PHP-Script: vista1.magizz.com/mailz/admin/index.php for 116.203.126.88 X-ASG-Orig-Subj: Insure your bike in 3 easy steps Received: from 116.203.126.88 [116.203.126.88] by vista1.magizz.com with HTTP; Sun, 07 Sep 2014 05:42:00 +0000 Date: Sun, 7 Sep 2014 07:24:37 +0000 From: ICICI Lombard Reply-To: ICICI Lombard Message-ID: <7b5d98db7db9176126fa1ab7b964fa99@vista1.magizz.com> X-Priority: 3 X-Mailer: PHPMailer 5.2.5 (https://github.com/Synchro/PHPMailer/) X-phpList-version: 3.0.7 X-MessageID: 7 X-ListMember: xfs@oss.sgi.com Precedence: bulk Bounces-To: admin@vista1.magizz.com List-Help: List-Unsubscribe: List-Subscribe: List-Owner: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_7b5d98db7db9176126fa1ab7b964fa99" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - vps.magizz.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [524 534] / [47 12] X-AntiAbuse: Sender Address Domain - vista1.magizz.com X-Get-Message-Sender-Via: vps.magizz.com: authenticated_id: magivis/from_h X-Barracuda-Connect: vps.magizz.com[162.251.83.157] X-Barracuda-Start-Time: 1410074679 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.26 X-Barracuda-Spam-Status: No, SCORE=1.26 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_IMAGE_RATIO_08, HTML_MESSAGE, RCVD_NUMERIC_HELO, RCVD_NUMERIC_HELO_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9249 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 RCVD_NUMERIC_HELO Received: contains an IP address used for HELO -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_IMAGE_RATIO_08 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 1.25 RCVD_NUMERIC_HELO_2 Received: contains an IP address used for HELO --b1_7b5d98db7db9176126fa1ab7b964fa99 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable =20 A Two Wheeler insurance quote is just 30 seconds away also on your mobile & tablet Dear Customer, A comprehensive Two Wheeler Insurance Policy provides the assurance of security against damage caused by natural and man-made calamities, including acts of terrorism. Click here to get a quick quote and secure your two wheeler instantly. Policy copy issued immediately online =20 Avail no claim bonus on renewals* =20 Cashless claim servicing at 1330+ garages# Warm Regards, Team ICICI Lombard Disclaimer EC014ML1635II #1330+ garages as on 1st September 2014 *NCB (No Claims Bonus) will only be allowed provided the policy is renewed within 90 days of the expiry date of the previous policy. The NCB will be available; provided you show evidence that you are entitled to NCB from your previous motor insurance company. Evidence can be in form of a written declaration or renewal notice or a letter confirming the NCB entitlement from the previous insurer.=20 Insurance is the subject matter of solicitation. The advertisement contains only an indication of cover offered. For more details on risk factors, terms, conditions and exclusions, please read the sales brochure carefully before concluding a sale. ICICI Lombard General Insurance Company Limited, ICICI Lombard House, 414, Veer Savarkar Marg, Prabhadevi, Mumbai - 400025. IRDA Reg. No. 115. Toll Free 1800 2666. Motor 05. Fax no - 022 61961323. Corporate Identity Number (U67200MH2000PLC129408). Your privacy is important to us. If you do not wish to receive emails, please unsubscribe . For any queries or assistance you can Email us at customersupport@icicilombard.com -- This message was sent to xfs@oss.sgi.com by swati@vista1.magizz.com To forward this message, please do not use the forward button of your email application, because this message was made specifically for you only. Instead use the forward page=0A in our newsletter system. To change your details and to choose which lists to be subscribed to, visit your personal preferences page=0A Or you can UNSUBSCRIBE for this panel.=0A from all future mailings. =20 amj --b1_7b5d98db7db9176126fa1ab7b964fa99 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable =0A =0A

 

3D"ICICI 3D"Facebook"&= nbsp;  3D"Twitt=   3D"LinkedIn"   3D"Google+"  3D"You=  3D"Android
A Two Wheeler insurance quote is&nb= sp;just 30 seconds&n= bsp;away
3D"A
3D"Getalso on your mobile & tablet

Dear Customer,

A comprehensive Two Wheeler Insurance Policy provides th= e assurance of security against damage caused by natural and man-made calam= ities, including acts of terrorism. Click hereto get a quick quote and secure your two whee= ler instantly.

3D"Key
  = Policy copy issued immediately online   Avail no claim bonus on renewals*   Cashless claim servicing at 1330+ garages#=  
3D""

Warm Regards,
Team ICICI Lombard<= /strong>

Disclaimer EC014ML1635II
#1330+ garages as on 1st September 2014
*NCB (No Claims Bonus) will only be allowed provided the policy= is renewed within 90 days of the expiry date of the previous policy. The N= CB will be available; provided you show evidence that you are entitled to N= CB from your previous motor insurance company. Evidence can be in form of a= written declaration or renewal notice or a letter confirming the NCB entit= lement from the previous insurer. 
Insurance is the subject matter of solicitation. The advertisem= ent contains only an indication of cover offered. For more details on risk = factors, terms, conditions and exclusions, please read the sales brochure c= arefully before concluding a sale. ICICI Lombard General Insurance Company = Limited, ICICI Lombard House, 414, Veer Savarkar Marg, Prabhadevi= , Mumbai - 400025. IRDA Reg. No. 115. Toll Free 1800 2666. Motor 05. Fax no= - 022 61961323. Corporate Identity Number (U67200MH2000PLC129408).

Your privacy is important to us. If you do not wish to receive = emails, please unsubscribe.
For any queries or assistance you can Email us at customersupport@icicilombard.c= om
&nbs= p;
 

-- =20

This message was sent to xfs@oss.sgi.com by swati@vista1.magizz.co= m

To forward this message, please do not use the forward button of y= our email application, because this message was made specifically for you o= nly. Instead use the forward page in our newsletter system.
To change your details and to choose which lists to be subscribed to,= visit your personal preferences page
Or you can UNSUBSCRIBE for this panel. from all future mailings.

=0Aamj --b1_7b5d98db7db9176126fa1ab7b964fa99-- From bfoster@redhat.com Sun Sep 7 07:26:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 76D497F50 for ; Sun, 7 Sep 2014 07:26:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 63A128F8059 for ; Sun, 7 Sep 2014 05:26:06 -0700 (PDT) X-ASG-Debug-ID: 1410092761-04cbb05487abe480001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ZUGku0XNVBL4UNvt (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 05:26: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-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ1Jh013228 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ1vk029364 for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 586261256F8; Sun, 7 Sep 2014 08:26:00 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH 0/4] clean up collapse range and handle post-eof delalloc Date: Sun, 7 Sep 2014 08:25:56 -0400 X-ASG-Orig-Subj: [PATCH 0/4] clean up collapse range and handle post-eof delalloc Message-Id: <1410092760-3451-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: 1410092762 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 Hi all, Here's a new drop of the patches that tweak collapse to be fsb based and organize the code a bit. This has seen ~1.5b fsx ops without a failure and some light xfstests testing so far. The primary difference from this version and the rfc is the retention of the eofblocks trim prior to collapse. Patch 4 is also new. It isolates the pagecache writeback/truncate in xfs_free_file_space() to the range affected by the free. Thoughts, reviews, flames appreciated. Brian v1: - Retain the eofblocks trim and writeback/inval. the range of shifted data only. - Added the xfs_free_file_space() patch to no longer writeback the entire file. rfc: http://oss.sgi.com/archives/xfs/2014-08/msg00462.html Brian Foster (4): xfs: track collapse via file offset rather than extent index xfs: refactor xfs_bmap_shift_extents() into multiple functions xfs: writeback and inval. file range to be shifted by collapse xfs: only writeback and truncate pages for the freed range fs/xfs/libxfs/xfs_bmap.c | 294 +++++++++++++++++++++++++++++++---------------- fs/xfs/libxfs/xfs_bmap.h | 7 +- fs/xfs/xfs_bmap_util.c | 54 +++++---- 3 files changed, 230 insertions(+), 125 deletions(-) -- 1.8.3.1 From bfoster@redhat.com Sun Sep 7 07:26:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 54FCB7F50 for ; Sun, 7 Sep 2014 07:26:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D87E0AC002 for ; Sun, 7 Sep 2014 05:26:06 -0700 (PDT) X-ASG-Debug-ID: 1410092762-04cb6c55008333c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id IlIcUZlPg69ey4QZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 05:26: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-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ11G009156 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ1m2030638 for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 6EC601256FA; Sun, 7 Sep 2014 08:26:00 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH 2/4] xfs: refactor xfs_bmap_shift_extents() into multiple functions Date: Sun, 7 Sep 2014 08:25:58 -0400 X-ASG-Orig-Subj: [PATCH 2/4] xfs: refactor xfs_bmap_shift_extents() into multiple functions Message-Id: <1410092760-3451-3-git-send-email-bfoster@redhat.com> In-Reply-To: <1410092760-3451-1-git-send-email-bfoster@redhat.com> References: <1410092760-3451-1-git-send-email-bfoster@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: 1410092762 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 extent shift mechanism in xfs_bmap_shift_extents() is complicated and handles several different, non-deterministic scenarios. These include extent shifts, extent merges and potential btree updates in either of the former scenarios. Refactor the code to be more linear and readable. The loop logic in xfs_bmap_shift_extents() and some initial error checking is adjusted slightly. The associated btree lookup and update/delete operations are condensed into single blocks of code. This reduces the number of btree-specific blocks and facilitates the separation of the merge operation into a new xfs_bmap_shift_extents_merge() helper. The merge check is also separated into an inline. This is a code refactor only. The behavior of extent shift and collapse range is not modified. Signed-off-by: Brian Foster --- fs/xfs/libxfs/xfs_bmap.c | 243 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 168 insertions(+), 75 deletions(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 4b3f1b9..449a016 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -5404,6 +5404,120 @@ error0: } /* + * Determine whether an extent shift can be accomplished by a merge with the + * extent that precedes the target hole of the shift. + */ +static inline bool +xfs_bmap_shift_extents_can_merge( + struct xfs_bmbt_irec *left, /* preceding extent */ + struct xfs_bmbt_irec *got, /* current extent to shift */ + xfs_fileoff_t shift) /* shift fsb */ +{ + xfs_fileoff_t startoff; + + startoff = got->br_startoff - shift; + + /* + * The extent, once shifted, must be adjacent in-file and on-disk with + * the preceding extent. + */ + if ((left->br_startoff + left->br_blockcount != startoff) || + (left->br_startblock + left->br_blockcount != got->br_startblock) || + (left->br_state != got->br_state) || + (left->br_blockcount + got->br_blockcount > MAXEXTLEN)) + return false; + + return true; +} + +/* + * An extent shift adjusts the file offset of an extent to fill a preceding hole + * in the file. If an extent shift would result in the extent being fully + * adjacent to the extent that currently precedes the hole, we can merge with + * the preceding extent rather than do the shift. + * + * This function assumes the caller has verified a shift-by-merge is possible + * with the provided extents via xfs_bmap_shift_extents_can_merge(). + */ +static int +xfs_bmap_shift_extents_merge( + struct xfs_inode *ip, + int whichfork, + xfs_fileoff_t shift, /* shift fsb */ + int current_ext, /* idx of gotp */ + struct xfs_bmbt_rec_host *gotp, /* extent to shift */ + struct xfs_bmbt_rec_host *leftp, /* preceding extent */ + struct xfs_btree_cur *cur, + int *logflags) /* output */ +{ + struct xfs_ifork *ifp; + struct xfs_bmbt_irec got; + struct xfs_bmbt_irec left; + xfs_filblks_t blockcount; + int error, i; + + ifp = XFS_IFORK_PTR(ip, whichfork); + xfs_bmbt_get_all(gotp, &got); + xfs_bmbt_get_all(leftp, &left); + blockcount = left.br_blockcount + got.br_blockcount; + + ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + ASSERT(xfs_bmap_shift_extents_can_merge(&left, &got, shift)); + + /* + * Merge the in-core extents. Note that the host record pointers and + * current_ext index are invalid once the extent has been removed via + * xfs_iext_remove(). + */ + xfs_bmbt_set_blockcount(leftp, blockcount); + xfs_iext_remove(ip, current_ext, 1, 0); + + /* + * Update the on-disk extent count, the btree if necessary and log the + * inode. + */ + XFS_IFORK_NEXT_SET(ip, whichfork, + XFS_IFORK_NEXTENTS(ip, whichfork) - 1); + *logflags |= XFS_ILOG_CORE; + if (cur) { + /* lookup and remove the extent to merge */ + error = xfs_bmbt_lookup_eq(cur, got.br_startoff, + got.br_startblock, got.br_blockcount, &i); + if (error) + goto error; + XFS_WANT_CORRUPTED_GOTO(i == 1, error); + + error = xfs_btree_delete(cur, &i); + if (error) + goto error; + XFS_WANT_CORRUPTED_GOTO(i == 1, error); + + /* lookup and update size of the previous extent */ + error = xfs_bmbt_lookup_eq(cur, left.br_startoff, + left.br_startblock, left.br_blockcount, &i); + if (error) + goto error; + XFS_WANT_CORRUPTED_GOTO(i == 1, error); + + left.br_blockcount = blockcount; + + error = xfs_bmbt_update(cur, left.br_startoff, + left.br_startblock, left.br_blockcount, + left.br_state); + if (error) + goto error; + } else { + *logflags |= XFS_ILOG_DEXT; + } + + return 0; + +error: + return error; +} + +/* * Shift extent records to the left to cover a hole. * * The maximum number of extents to be shifted in a single operation is @@ -5427,6 +5541,7 @@ xfs_bmap_shift_extents( { struct xfs_btree_cur *cur = NULL; struct xfs_bmbt_rec_host *gotp; + struct xfs_bmbt_rec_host *leftp; struct xfs_bmbt_irec got; struct xfs_bmbt_irec left; struct xfs_mount *mp = ip->i_mount; @@ -5438,7 +5553,6 @@ xfs_bmap_shift_extents( int i; int whichfork = XFS_DATA_FORK; int logflags = 0; - xfs_filblks_t blockcount = 0; int total_extents; if (unlikely(XFS_TEST_ERROR( @@ -5464,6 +5578,13 @@ xfs_bmap_shift_extents( return error; } + if (ifp->if_flags & XFS_IFBROOT) { + cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); + cur->bc_private.b.firstblock = *firstblock; + cur->bc_private.b.flist = flist; + cur->bc_private.b.flags = 0; + } + /* * Look up the extent index for the fsb where we start shifting. We can * henceforth iterate with current_ext as extent list changes are locked @@ -5476,14 +5597,17 @@ xfs_bmap_shift_extents( gotp = xfs_iext_bno_to_ext(ifp, start_fsb, ¤t_ext); if (!gotp) { *done = 1; - return 0; + goto del_cursor; } + xfs_bmbt_get_all(gotp, &got); - if (ifp->if_flags & XFS_IFBROOT) { - cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); - cur->bc_private.b.firstblock = *firstblock; - cur->bc_private.b.flist = flist; - cur->bc_private.b.flags = 0; + /* + * If the first extent is shifted, offset_shift_fsb cannot be larger + * than the starting offset of the first extent. + */ + if (current_ext == 0 && got.br_startoff < offset_shift_fsb) { + error = -EINVAL; + goto del_cursor; } /* @@ -5493,30 +5617,42 @@ xfs_bmap_shift_extents( */ total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t); while (nexts++ < num_exts && current_ext < total_extents) { - - gotp = xfs_iext_get_ext(ifp, current_ext); - xfs_bmbt_get_all(gotp, &got); startoff = got.br_startoff - offset_shift_fsb; - /* - * Before shifting extent into hole, make sure that the hole is - * large enough to accommodate the shift. - */ + /* grab the left extent and check for a potential merge */ if (current_ext > 0) { - xfs_bmbt_get_all(xfs_iext_get_ext(ifp, current_ext - 1), - &left); - if (startoff < left.br_startoff + left.br_blockcount) + leftp = xfs_iext_get_ext(ifp, current_ext - 1); + xfs_bmbt_get_all(leftp, &left); + + /* make sure hole is large enough for shift */ + if (startoff < left.br_startoff + left.br_blockcount) { error = -EINVAL; - } else if (offset_shift_fsb > got.br_startoff) { - /* - * When first extent is shifted, offset_shift_fsb should - * be less than the stating offset of the first extent. - */ - error = -EINVAL; + goto del_cursor; + } + + if (xfs_bmap_shift_extents_can_merge(&left, &got, + offset_shift_fsb)) { + error = xfs_bmap_shift_extents_merge(ip, whichfork, + offset_shift_fsb, current_ext, gotp, + leftp, cur, &logflags); + if (error) + goto del_cursor; + + /* + * The extent was merged so adjust the extent + * index and move onto the next. + */ + current_ext--; + goto next; + } } - if (error) - goto del_cursor; + /* + * We didn't merge the extent so do the shift. Update the start + * offset in the in-core extent and btree, if necessary. + */ + xfs_bmbt_set_startoff(gotp, startoff); + logflags |= XFS_ILOG_CORE; if (cur) { error = xfs_bmbt_lookup_eq(cur, got.br_startoff, got.br_startblock, @@ -5525,53 +5661,8 @@ xfs_bmap_shift_extents( if (error) goto del_cursor; XFS_WANT_CORRUPTED_GOTO(i == 1, del_cursor); - } - - /* Check if we can merge 2 adjacent extents */ - if (current_ext && - left.br_startoff + left.br_blockcount == startoff && - left.br_startblock + left.br_blockcount == - got.br_startblock && - left.br_state == got.br_state && - left.br_blockcount + got.br_blockcount <= MAXEXTLEN) { - blockcount = left.br_blockcount + - got.br_blockcount; - xfs_iext_remove(ip, current_ext, 1, 0); - logflags |= XFS_ILOG_CORE; - if (cur) { - error = xfs_btree_delete(cur, &i); - if (error) - goto del_cursor; - XFS_WANT_CORRUPTED_GOTO(i == 1, del_cursor); - } else { - logflags |= XFS_ILOG_DEXT; - } - XFS_IFORK_NEXT_SET(ip, whichfork, - XFS_IFORK_NEXTENTS(ip, whichfork) - 1); - gotp = xfs_iext_get_ext(ifp, --current_ext); - xfs_bmbt_get_all(gotp, &got); - - /* Make cursor point to the extent we will update */ - if (cur) { - error = xfs_bmbt_lookup_eq(cur, got.br_startoff, - got.br_startblock, - got.br_blockcount, - &i); - if (error) - goto del_cursor; - XFS_WANT_CORRUPTED_GOTO(i == 1, del_cursor); - } - xfs_bmbt_set_blockcount(gotp, blockcount); - got.br_blockcount = blockcount; - } else { - /* We have to update the startoff */ - xfs_bmbt_set_startoff(gotp, startoff); got.br_startoff = startoff; - } - - logflags |= XFS_ILOG_CORE; - if (cur) { error = xfs_bmbt_update(cur, got.br_startoff, got.br_startblock, got.br_blockcount, @@ -5582,18 +5673,20 @@ xfs_bmap_shift_extents( logflags |= XFS_ILOG_DEXT; } - current_ext++; +next: + /* update total extent count and grab the next record */ total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t); + if (++current_ext >= total_extents) + break; + gotp = xfs_iext_get_ext(ifp, current_ext); + xfs_bmbt_get_all(gotp, &got); } /* Check if we are done */ if (current_ext == total_extents) *done = 1; - else if (next_fsb) { - gotp = xfs_iext_get_ext(ifp, current_ext); - xfs_bmbt_get_all(gotp, &got); + else if (next_fsb) *next_fsb = got.br_startoff; - } del_cursor: if (cur) -- 1.8.3.1 From bfoster@redhat.com Sun Sep 7 07:26:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 52A037F53 for ; Sun, 7 Sep 2014 07:26:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C09B7AC001 for ; Sun, 7 Sep 2014 05:26:04 -0700 (PDT) X-ASG-Debug-ID: 1410092762-04cbb05485abe480001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cNSbk0P9a55Zoah4 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 05:26: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 (8.14.4/8.14.4) with ESMTP id s87CQ1kl013562 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 7 Sep 2014 08:26:02 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ1mE030640 for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 7F1501256FB; Sun, 7 Sep 2014 08:26:00 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH 3/4] xfs: writeback and inval. file range to be shifted by collapse Date: Sun, 7 Sep 2014 08:25:59 -0400 X-ASG-Orig-Subj: [PATCH 3/4] xfs: writeback and inval. file range to be shifted by collapse Message-Id: <1410092760-3451-4-git-send-email-bfoster@redhat.com> In-Reply-To: <1410092760-3451-1-git-send-email-bfoster@redhat.com> References: <1410092760-3451-1-git-send-email-bfoster@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: 1410092763 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 The collapse range operation currently writes the entire file before starting the collapse to avoid changes in the in-core extent list due to writeback causing the extent count to change. Now that collapse range is fsb based rather than extent index based it can sustain changes in the extent list during the shift sequence without disruption. Modify xfs_collapse_file_space() to writeback and invalidate pages associated with the range of the file to be shifted. xfs_free_file_space() currently has similar behavior, but the space free need only affect the region of the file that is freed and this could change in the future. Also update the comments to reflect the current implementation. We retain the eofblocks trim permanently as a best option for dealing with delalloc extents. We don't shift delalloc extents because this scenario only occurs with post-eof preallocation (since data must be flushed such that the cache can be invalidated and data can be shifted). That means said space must also be initialized before being shifted into the accessible region of the file only to be immediately truncated off as the last part of the collapse. In other words, the eofblocks trim will happen anyways, we just run it first to ensure the file remains in a consistent state throughout the collapse. Finally, BUG() in the event of a delalloc extent during the extent shift such that a failure is obvious. The implementation explicitly does not support delalloc extents and the caller is expected to prevent this scenario in advance as is done by collapse. Signed-off-by: Brian Foster --- fs/xfs/libxfs/xfs_bmap.c | 2 ++ fs/xfs/xfs_bmap_util.c | 32 +++++++++++++++++++------------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 449a016..1dd04c2 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -5617,6 +5617,8 @@ xfs_bmap_shift_extents( */ total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t); while (nexts++ < num_exts && current_ext < total_extents) { + /* can't handle delalloc extents */ + BUG_ON(isnullstartblock(got.br_startblock)); startoff = got.br_startoff - offset_shift_fsb; /* grab the left extent and check for a potential merge */ diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 1e96d77..eae763f 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1470,27 +1470,33 @@ xfs_collapse_file_space( next_fsb = XFS_B_TO_FSB(mp, offset + len); shift_fsb = XFS_B_TO_FSB(mp, len); - /* - * Writeback the entire file and force remove any post-eof blocks. The - * writeback prevents changes to the extent list via concurrent - * writeback and the eofblocks trim prevents the extent shift algorithm - * from running into a post-eof delalloc extent. - * - * XXX: This is a temporary fix until the extent shift loop below is - * converted to use offsets and lookups within the ILOCK rather than - * carrying around the index into the extent list for the next - * iteration. - */ - error = filemap_write_and_wait(VFS_I(ip)->i_mapping); + error = xfs_free_file_space(ip, offset, len); if (error) return error; + + /* + * Trim eofblocks to avoid shifting uninitialized post-eof preallocation + * into the accessible region of the file. + */ if (xfs_can_free_eofblocks(ip, true)) { error = xfs_free_eofblocks(mp, ip, false); if (error) return error; } - error = xfs_free_file_space(ip, offset, len); + /* + * Writeback and invalidate cache for the remainder of the file as we're + * about to shift down every extent from the collapse range to EOF. The + * free of the collapse range above might have already done some of + * this, but we shouldn't rely on it to do anything outside of the range + * that was freed. + */ + error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, + offset + len, -1); + if (error) + return error; + error = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping, + (offset + len) >> PAGE_CACHE_SHIFT, -1); if (error) return error; -- 1.8.3.1 From bfoster@redhat.com Sun Sep 7 07:26:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 7491B7F4E for ; Sun, 7 Sep 2014 07:26:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6282F8F8054 for ; Sun, 7 Sep 2014 05:26:06 -0700 (PDT) X-ASG-Debug-ID: 1410092761-04cbb05486abe480001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id AD9bRXLCsSXVKGZH (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 05:26: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-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ1a3009154 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ11i030642 for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 8901E125701; Sun, 7 Sep 2014 08:26:00 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH 4/4] xfs: only writeback and truncate pages for the freed range Date: Sun, 7 Sep 2014 08:26:00 -0400 X-ASG-Orig-Subj: [PATCH 4/4] xfs: only writeback and truncate pages for the freed range Message-Id: <1410092760-3451-5-git-send-email-bfoster@redhat.com> In-Reply-To: <1410092760-3451-1-git-send-email-bfoster@redhat.com> References: <1410092760-3451-1-git-send-email-bfoster@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: 1410092762 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 xfs_free_file_space() only affects the range of the file for which space is being freed. It currently writes and truncates the page cache from the start offset of the free to EOF. Modify xfs_free_file_space() to write back and truncate page cache of just the range being freed. Signed-off-by: Brian Foster --- fs/xfs/xfs_bmap_util.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index eae763f..809ae7d 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1205,6 +1205,7 @@ xfs_free_file_space( xfs_bmap_free_t free_list; xfs_bmbt_irec_t imap; xfs_off_t ioffset; + xfs_off_t iendoffset; xfs_extlen_t mod=0; xfs_mount_t *mp; int nimap; @@ -1233,12 +1234,13 @@ xfs_free_file_space( inode_dio_wait(VFS_I(ip)); rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); - ioffset = offset & ~(rounding - 1); - error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, - ioffset, -1); + ioffset = round_down(offset, rounding); + iendoffset = round_up(offset + len, rounding) - 1; + error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, + iendoffset); if (error) goto out; - truncate_pagecache_range(VFS_I(ip), ioffset, -1); + truncate_pagecache_range(VFS_I(ip), ioffset, iendoffset); /* * Need to zero the stuff we're not freeing, on disk. -- 1.8.3.1 From bfoster@redhat.com Sun Sep 7 07:26:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 5A24A7F54 for ; Sun, 7 Sep 2014 07:26:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id CE984AC002 for ; Sun, 7 Sep 2014 05:26:04 -0700 (PDT) X-ASG-Debug-ID: 1410092762-04cbb05488abe490001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id V4dd3YU5l2MN5YFl (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 05:26: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-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ1WR013563 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 7 Sep 2014 08:26:02 -0400 Received: from bfoster.bfoster ([10.18.41.237]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s87CQ13W020833 for ; Sun, 7 Sep 2014 08:26:01 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 63468123B5C; Sun, 7 Sep 2014 08:26:00 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH 1/4] xfs: track collapse via file offset rather than extent index Date: Sun, 7 Sep 2014 08:25:57 -0400 X-ASG-Orig-Subj: [PATCH 1/4] xfs: track collapse via file offset rather than extent index Message-Id: <1410092760-3451-2-git-send-email-bfoster@redhat.com> In-Reply-To: <1410092760-3451-1-git-send-email-bfoster@redhat.com> References: <1410092760-3451-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: 1410092763 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 The collapse range implementation uses a transaction per extent shift. The progress of the overall operation is tracked via the current extent index of the in-core extent list. This is racy because the ilock must be dropped and reacquired for each transaction according to locking and log reservation rules. Therefore, writeback to prior regions of the file is possible and can change the extent count. This changes the extent to which the current index refers and causes the collapse to fail mid operation. To avoid this problem, the entire file is currently written back before the collapse operation starts. To eliminate the need to flush the entire file, use the file offset (fsb) to track the progress of the overall extent shift operation rather than the extent index. Modify xfs_bmap_shift_extents() to unconditionally convert the start_fsb parameter to an extent index and return the file offset of the extent where the shift left off, if further extents exist. The bulk of ths function can remain based on extent index as ilock is held by the caller. xfs_collapse_file_space() now uses the fsb output as the starting point for the subsequent shift. Signed-off-by: Brian Foster --- fs/xfs/libxfs/xfs_bmap.c | 85 +++++++++++++++++++++++++----------------------- fs/xfs/libxfs/xfs_bmap.h | 7 ++-- fs/xfs/xfs_bmap_util.c | 12 +++---- 3 files changed, 53 insertions(+), 51 deletions(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 86df952..4b3f1b9 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -5406,20 +5406,21 @@ error0: /* * Shift extent records to the left to cover a hole. * - * The maximum number of extents to be shifted in a single operation - * is @num_exts, and @current_ext keeps track of the current extent - * index we have shifted. @offset_shift_fsb is the length by which each - * extent is shifted. If there is no hole to shift the extents - * into, this will be considered invalid operation and we abort immediately. + * The maximum number of extents to be shifted in a single operation is + * @num_exts. @start_fsb specifies the file offset to start the shift and the + * file offset where we've left off is returned in @next_fsb. @offset_shift_fsb + * is the length by which each extent is shifted. If there is no hole to shift + * the extents into, this will be considered invalid operation and we abort + * immediately. */ int xfs_bmap_shift_extents( struct xfs_trans *tp, struct xfs_inode *ip, - int *done, xfs_fileoff_t start_fsb, xfs_fileoff_t offset_shift_fsb, - xfs_extnum_t *current_ext, + int *done, + xfs_fileoff_t *next_fsb, xfs_fsblock_t *firstblock, struct xfs_bmap_free *flist, int num_exts) @@ -5431,6 +5432,7 @@ xfs_bmap_shift_extents( struct xfs_mount *mp = ip->i_mount; struct xfs_ifork *ifp; xfs_extnum_t nexts = 0; + xfs_extnum_t current_ext; xfs_fileoff_t startoff; int error = 0; int i; @@ -5451,7 +5453,8 @@ xfs_bmap_shift_extents( if (XFS_FORCED_SHUTDOWN(mp)) return -EIO; - ASSERT(current_ext != NULL); + ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ifp = XFS_IFORK_PTR(ip, whichfork); if (!(ifp->if_flags & XFS_IFEXTENTS)) { @@ -5462,20 +5465,18 @@ xfs_bmap_shift_extents( } /* - * If *current_ext is 0, we would need to lookup the extent - * from where we would start shifting and store it in gotp. + * Look up the extent index for the fsb where we start shifting. We can + * henceforth iterate with current_ext as extent list changes are locked + * out via ilock. + * + * gotp can be null in 2 cases: 1) if there are no extents or 2) + * start_fsb lies in a hole beyond which there are no extents. Either + * way, we are done. */ - if (!*current_ext) { - gotp = xfs_iext_bno_to_ext(ifp, start_fsb, current_ext); - /* - * gotp can be null in 2 cases: 1) if there are no extents - * or 2) start_fsb lies in a hole beyond which there are - * no extents. Either way, we are done. - */ - if (!gotp) { - *done = 1; - return 0; - } + gotp = xfs_iext_bno_to_ext(ifp, start_fsb, ¤t_ext); + if (!gotp) { + *done = 1; + return 0; } if (ifp->if_flags & XFS_IFBROOT) { @@ -5487,36 +5488,32 @@ xfs_bmap_shift_extents( /* * There may be delalloc extents in the data fork before the range we - * are collapsing out, so we cannot - * use the count of real extents here. Instead we have to calculate it - * from the incore fork. + * are collapsing out, so we cannot use the count of real extents here. + * Instead we have to calculate it from the incore fork. */ total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t); - while (nexts++ < num_exts && *current_ext < total_extents) { + while (nexts++ < num_exts && current_ext < total_extents) { - gotp = xfs_iext_get_ext(ifp, *current_ext); + gotp = xfs_iext_get_ext(ifp, current_ext); xfs_bmbt_get_all(gotp, &got); startoff = got.br_startoff - offset_shift_fsb; /* - * Before shifting extent into hole, make sure that the hole - * is large enough to accomodate the shift. + * Before shifting extent into hole, make sure that the hole is + * large enough to accommodate the shift. */ - if (*current_ext) { - xfs_bmbt_get_all(xfs_iext_get_ext(ifp, - *current_ext - 1), &left); - + if (current_ext > 0) { + xfs_bmbt_get_all(xfs_iext_get_ext(ifp, current_ext - 1), + &left); if (startoff < left.br_startoff + left.br_blockcount) error = -EINVAL; } else if (offset_shift_fsb > got.br_startoff) { /* - * When first extent is shifted, offset_shift_fsb - * should be less than the stating offset of - * the first extent. + * When first extent is shifted, offset_shift_fsb should + * be less than the stating offset of the first extent. */ error = -EINVAL; } - if (error) goto del_cursor; @@ -5531,7 +5528,7 @@ xfs_bmap_shift_extents( } /* Check if we can merge 2 adjacent extents */ - if (*current_ext && + if (current_ext && left.br_startoff + left.br_blockcount == startoff && left.br_startblock + left.br_blockcount == got.br_startblock && @@ -5539,7 +5536,7 @@ xfs_bmap_shift_extents( left.br_blockcount + got.br_blockcount <= MAXEXTLEN) { blockcount = left.br_blockcount + got.br_blockcount; - xfs_iext_remove(ip, *current_ext, 1, 0); + xfs_iext_remove(ip, current_ext, 1, 0); logflags |= XFS_ILOG_CORE; if (cur) { error = xfs_btree_delete(cur, &i); @@ -5551,7 +5548,7 @@ xfs_bmap_shift_extents( } XFS_IFORK_NEXT_SET(ip, whichfork, XFS_IFORK_NEXTENTS(ip, whichfork) - 1); - gotp = xfs_iext_get_ext(ifp, --*current_ext); + gotp = xfs_iext_get_ext(ifp, --current_ext); xfs_bmbt_get_all(gotp, &got); /* Make cursor point to the extent we will update */ @@ -5585,13 +5582,18 @@ xfs_bmap_shift_extents( logflags |= XFS_ILOG_DEXT; } - (*current_ext)++; + current_ext++; total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t); } /* Check if we are done */ - if (*current_ext == total_extents) + if (current_ext == total_extents) *done = 1; + else if (next_fsb) { + gotp = xfs_iext_get_ext(ifp, current_ext); + xfs_bmbt_get_all(gotp, &got); + *next_fsb = got.br_startoff; + } del_cursor: if (cur) @@ -5600,5 +5602,6 @@ del_cursor: if (logflags) xfs_trans_log_inode(tp, ip, logflags); + return error; } diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h index b879ca5..44db6db 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -178,9 +178,8 @@ int xfs_check_nostate_extents(struct xfs_ifork *ifp, xfs_extnum_t idx, xfs_extnum_t num); uint xfs_default_attroffset(struct xfs_inode *ip); int xfs_bmap_shift_extents(struct xfs_trans *tp, struct xfs_inode *ip, - int *done, xfs_fileoff_t start_fsb, - xfs_fileoff_t offset_shift_fsb, xfs_extnum_t *current_ext, - xfs_fsblock_t *firstblock, struct xfs_bmap_free *flist, - int num_exts); + xfs_fileoff_t start_fsb, xfs_fileoff_t offset_shift_fsb, + int *done, xfs_fileoff_t *next_fsb, xfs_fsblock_t *firstblock, + struct xfs_bmap_free *flist, int num_exts); #endif /* __XFS_BMAP_H__ */ diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 1707980..1e96d77 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -1456,18 +1456,18 @@ xfs_collapse_file_space( struct xfs_mount *mp = ip->i_mount; struct xfs_trans *tp; int error; - xfs_extnum_t current_ext = 0; struct xfs_bmap_free free_list; xfs_fsblock_t first_block; int committed; xfs_fileoff_t start_fsb; + xfs_fileoff_t next_fsb; xfs_fileoff_t shift_fsb; ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); trace_xfs_collapse_file_space(ip); - start_fsb = XFS_B_TO_FSB(mp, offset + len); + next_fsb = XFS_B_TO_FSB(mp, offset + len); shift_fsb = XFS_B_TO_FSB(mp, len); /* @@ -1525,10 +1525,10 @@ xfs_collapse_file_space( * We are using the write transaction in which max 2 bmbt * updates are allowed */ - error = xfs_bmap_shift_extents(tp, ip, &done, start_fsb, - shift_fsb, ¤t_ext, - &first_block, &free_list, - XFS_BMAP_MAX_SHIFT_EXTENTS); + start_fsb = next_fsb; + error = xfs_bmap_shift_extents(tp, ip, start_fsb, shift_fsb, + &done, &next_fsb, &first_block, &free_list, + XFS_BMAP_MAX_SHIFT_EXTENTS); if (error) goto out; -- 1.8.3.1 From admin@vista1.magizz.com Sun Sep 7 08:31:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 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 C21AD7F4E for ; Sun, 7 Sep 2014 08:31:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 62A64AC001 for ; Sun, 7 Sep 2014 06:31:16 -0700 (PDT) X-ASG-Debug-ID: 1410096673-04cb6c54ff835270001-NocioJ Received: from vps.magizz.com (vps.magizz.com [162.251.83.157]) by cuda.sgi.com with ESMTP id jsK2FREm0olEzzKZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 06:31:13 -0700 (PDT) X-Barracuda-Envelope-From: admin@vista1.magizz.com X-Barracuda-Apparent-Source-IP: 162.251.83.157 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=vista1.magizz.com; s=default; h=Content-Type:Content-Transfer-Encoding:MIME-Version:List-Unsubscribe:Message-ID:Reply-To:From:Date:Subject:To; bh=IeQs2k9fFo/qz33WbH3w6bMRPtkJvDOGa2uL5Aw1S/Y=; b=fwhE/ShIaqhs/FjdJgkmCHv5nCE0W6ZfqIV1xxPXyBmCN6NQDupTyFRO9aW5E5y7KNQVmtoOmIqHBWtl7+938TjRE7cXHAo7PBeEV0Sm/FtcAdp8SSIzllaz8O19gMyYw0QAXYsJkJjv/+vv9Z2QvOKnrdBGPPHfrI+IqSLGLEU=; Received: from magivis by vps.magizz.com with local (Exim 4.82) (envelope-from ) id 1XQcYj-0003uX-0w for xfs@oss.sgi.com; Sun, 07 Sep 2014 17:31:13 +0400 To: xfs@oss.sgi.com Subject: Goodbye from our newsletter X-PHP-Script: vista1.magizz.com/mailz/index.php for 66.249.65.38 X-ASG-Orig-Subj: Goodbye from our newsletter Received: from crawl-66-249-65-38.googlebot.com [66.249.65.38] by vista1.magizz.com with HTTP; Sun, 07 Sep 2014 13:31:12 +0000 Date: Sun, 7 Sep 2014 13:31:12 +0000 From: Administrator Reply-To: Administrator Message-ID: <59d56c4701e843312d21ad1fc6325e6e@vista1.magizz.com> X-Priority: 3 X-Mailer: PHPMailer 5.2.5 (https://github.com/Synchro/PHPMailer/) X-phpList-version: 3.0.7 X-MessageID: systemmessage X-ListMember: xfs@oss.sgi.com Precedence: bulk Bounces-To: admin@vista1.magizz.com List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - vps.magizz.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [524 534] / [47 12] X-AntiAbuse: Sender Address Domain - vista1.magizz.com X-Get-Message-Sender-Via: vps.magizz.com: authenticated_id: magivis/from_h X-Barracuda-Connect: vps.magizz.com[162.251.83.157] X-Barracuda-Start-Time: 1410096673 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 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.9255 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 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://vista1.magizz.com/mailz/?p=subscribe and follow the steps. Thank you From sandeen@sandeen.net Sun Sep 7 11:41:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 7AF217F4E for ; Sun, 7 Sep 2014 11:41:08 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 659FB8F8039 for ; Sun, 7 Sep 2014 09:41:08 -0700 (PDT) X-ASG-Debug-ID: 1410108066-04cbb05487ac4430001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id YXKVqTLhRtBD6TFy for ; Sun, 07 Sep 2014 09:41:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: by sandeen.net (Postfix, from userid 500) id 8303061A5851; Sun, 7 Sep 2014 11:41:06 -0500 (CDT) From: Eric Sandeen To: xfs@oss.sgi.com Subject: [PATCH 0/5] xfs_repair fixes, part 1 Date: Sun, 7 Sep 2014 11:41:00 -0500 X-ASG-Orig-Subj: [PATCH 0/5] xfs_repair fixes, part 1 Message-Id: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-Mailer: git-send-email 1.7.1 X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410108066 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.9258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- I've been running a modified fsfuzzer and looking at the results of xfs_repair of the corrupt images; plenty of things pop out. I'm calling this "part one" because I expect that I'll find more, but will send things out in digestable chunks as I accumulate them... Most of these are obviously correct and trivial; a coupl require more thought & review. Thanks, -Eric From sandeen@sandeen.net Sun Sep 7 11:41:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 8D9897F50 for ; Sun, 7 Sep 2014 11:41:08 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 64B5B8F8035 for ; Sun, 7 Sep 2014 09:41:08 -0700 (PDT) X-ASG-Debug-ID: 1410108066-04bdf010977dcc60001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id kAlWteQoyUxGTkl9 for ; Sun, 07 Sep 2014 09:41:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: by sandeen.net (Postfix, from userid 500) id 9E0F461A5853; Sun, 7 Sep 2014 11:41:06 -0500 (CDT) From: Eric Sandeen To: xfs@oss.sgi.com Subject: [PATCH 2/5] xfs_repair: preserve error state in process_shortform_attr Date: Sun, 7 Sep 2014 11:41:02 -0500 X-ASG-Orig-Subj: [PATCH 2/5] xfs_repair: preserve error state in process_shortform_attr Message-Id: <1410108065-18156-3-git-send-email-sandeen@redhat.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1410108065-18156-1-git-send-email-sandeen@redhat.com> References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410108067 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.9258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- process_shortform_attr uses the "junkit" error to track whether an error was found, but by assigning it directly to the result of valuecheck, previous errors are ignored, leading to unrepairable errors of the form i.e. "entry has INCOMPLETE flag on in shortform attribute" or "entry contains illegal character in shortform attribute name" Signed-off-by: Eric Sandeen --- repair/attr_repair.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/repair/attr_repair.c b/repair/attr_repair.c index a27a3ec..d60b664 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -914,7 +914,8 @@ process_shortform_attr( /* Only check values for root security attributes */ if (currententry->flags & XFS_ATTR_ROOT) - junkit = valuecheck(mp, (char *)¤tentry->nameval[0], + junkit |= valuecheck(mp, + (char *)¤tentry->nameval[0], NULL, currententry->namelen, currententry->valuelen); -- 1.7.1 From sandeen@sandeen.net Sun Sep 7 11:41:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 417447F4E for ; Sun, 7 Sep 2014 11:41:09 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B5766AC004 for ; Sun, 7 Sep 2014 09:41:08 -0700 (PDT) X-ASG-Debug-ID: 1410108066-04cbb05485ac4430001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 8iIw0F9BC2bkM27M for ; Sun, 07 Sep 2014 09:41:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: by sandeen.net (Postfix, from userid 500) id BE27061A5855; Sun, 7 Sep 2014 11:41:06 -0500 (CDT) From: Eric Sandeen To: xfs@oss.sgi.com Subject: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype Date: Sun, 7 Sep 2014 11:41:04 -0500 X-ASG-Orig-Subj: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype Message-Id: <1410108065-18156-5-git-send-email-sandeen@redhat.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1410108065-18156-1-git-send-email-sandeen@redhat.com> References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410108066 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.9258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- xfs_dir3_dirent_get_ftype() gets the file type off disk, but ASSERTs if it's invalid: ASSERT(type < XFS_DIR3_FT_MAX); This might be cut & paste from xfs_dir3_dirent_put_ftype which should be checking that it's not been passed bad values, but we shouldn't ASSERT on bad values read from disk. Signed-off-by: Eric Sandeen --- include/xfs_da_format.h | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/include/xfs_da_format.h b/include/xfs_da_format.h index 89a1a21..11f1420 100644 --- a/include/xfs_da_format.h +++ b/include/xfs_da_format.h @@ -561,7 +561,6 @@ xfs_dir3_dirent_get_ftype( if (xfs_sb_version_hasftype(&mp->m_sb)) { __uint8_t type = dep->name[dep->namelen]; - ASSERT(type < XFS_DIR3_FT_MAX); if (type < XFS_DIR3_FT_MAX) return type; -- 1.7.1 From sandeen@sandeen.net Sun Sep 7 11:41:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 697BF7F50 for ; Sun, 7 Sep 2014 11:41:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2D2208F8033 for ; Sun, 7 Sep 2014 09:41:09 -0700 (PDT) X-ASG-Debug-ID: 1410108067-04bdf010a17dcc70001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id zavfwSWDH7LbFfdS for ; Sun, 07 Sep 2014 09:41:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: by sandeen.net (Postfix, from userid 500) id CC5F661A5856; Sun, 7 Sep 2014 11:41:06 -0500 (CDT) From: Eric Sandeen To: xfs@oss.sgi.com Subject: [PATCH 5/5] xfs_repair: set proper ftype when moving to lost+found Date: Sun, 7 Sep 2014 11:41:05 -0500 X-ASG-Orig-Subj: [PATCH 5/5] xfs_repair: set proper ftype when moving to lost+found Message-Id: <1410108065-18156-6-git-send-email-sandeen@redhat.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1410108065-18156-1-git-send-email-sandeen@redhat.com> References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410108067 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.9258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- When we move files to lost+found, we're setting the filetype to UNKNOWN. This leaves an inconsistency which is discovered on a subsequent repair: would fix ftype mismatch (0/1) in directory/child inode 5838/5839 Setting the proper ftype at the time of the move resolves this: Signed-off-by: Eric Sandeen --- repair/phase6.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/repair/phase6.c b/repair/phase6.c index cc36a9c..02714c2 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -1091,14 +1091,13 @@ mv_orphanage( ino_tree_node_t *irec; int ino_offset = 0; struct xfs_name xname; + __uint16_t di_mode; ASSERT(xfs_sb_version_hasdirv2(&mp->m_sb)); xname.name = fname; xname.len = snprintf((char *)fname, sizeof(fname), "%llu", (unsigned long long)ino); - /* XXX use xfs_mode_to_ftype[] when userspace gains it */ - xname.type = XFS_DIR3_FT_UNKNOWN; err = libxfs_iget(mp, NULL, orphanage_ino, 0, &orphanage_ip, 0); if (err) @@ -1117,6 +1116,10 @@ mv_orphanage( if ((err = libxfs_iget(mp, NULL, ino, 0, &ino_p, 0))) do_error(_("%d - couldn't iget disconnected inode\n"), err); + di_mode = ino_p->i_d.di_mode; + di_mode = (di_mode & S_IFMT) >> S_SHIFT; + xname.type = xfs_mode_to_ftype[di_mode]; + if (isa_dir) { irec = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, orphanage_ino), XFS_INO_TO_AGINO(mp, orphanage_ino)); -- 1.7.1 From sandeen@sandeen.net Sun Sep 7 11:41:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 3D1F07F57 for ; Sun, 7 Sep 2014 11:41:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 279028F8033 for ; Sun, 7 Sep 2014 09:41:11 -0700 (PDT) X-ASG-Debug-ID: 1410108066-04cb6c5500839f70001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id KMGNXqrm9647AgSR for ; Sun, 07 Sep 2014 09:41:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: by sandeen.net (Postfix, from userid 500) id AF80361A5854; Sun, 7 Sep 2014 11:41:06 -0500 (CDT) From: Eric Sandeen To: xfs@oss.sgi.com Subject: [PATCH 3/5] xfs_repair: fix dir refcount when '.' missing and dir is rebuilt Date: Sun, 7 Sep 2014 11:41:03 -0500 X-ASG-Orig-Subj: [PATCH 3/5] xfs_repair: fix dir refcount when '.' missing and dir is rebuilt Message-Id: <1410108065-18156-4-git-send-email-sandeen@redhat.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1410108065-18156-1-git-send-email-sandeen@redhat.com> References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410108066 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.9258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In phase 6's longform_dir2_entry_check, if we never find a '.' entry we never add a reference to that entry; if we subsequently rebuild it, '.' gets added, but no ref to it is ever made. This leads to Phase 7 doing i.e.: Phase 7 - verify and correct link counts... resetting inode 5184 nlinks from 2 to 1 and the next run will do: Phase 7 - verify and correct link counts... resetting inode 5184 nlinks from 1 to 2 So if '.' was never found, but the directory got rebuilt, manually add the ref for it. Signed-off-by: Eric Sandeen --- repair/phase6.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/repair/phase6.c b/repair/phase6.c index f13069f..cc36a9c 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -2288,6 +2288,12 @@ out_fix: if (bplist[i]) libxfs_putbuf(bplist[i]); longform_dir2_rebuild(mp, ino, ip, irec, ino_offset, hashtab); + /* + * If we didn't find a dot, we never added a ref for it; + * it's there now after the rebuild, so mark it as reached. + */ + if (*need_dot) + add_inode_ref(irec, ino_offset); *num_illegal = 0; *need_dot = 0; } else { -- 1.7.1 From sandeen@sandeen.net Sun Sep 7 11:41:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 902B77F67 for ; Sun, 7 Sep 2014 11:41:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6545A304032 for ; Sun, 7 Sep 2014 09:41:08 -0700 (PDT) X-ASG-Debug-ID: 1410108066-04cbb05486ac4430001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id BL0XxqGmH1vDU7PL for ; Sun, 07 Sep 2014 09:41:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: by sandeen.net (Postfix, from userid 500) id 9016F61A5852; Sun, 7 Sep 2014 11:41:06 -0500 (CDT) From: Eric Sandeen To: xfs@oss.sgi.com Subject: [PATCH 1/5] xfs_repair: clear bad flgs in process_dinode_int Date: Sun, 7 Sep 2014 11:41:01 -0500 X-ASG-Orig-Subj: [PATCH 1/5] xfs_repair: clear bad flgs in process_dinode_int Message-Id: <1410108065-18156-2-git-send-email-sandeen@redhat.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1410108065-18156-1-git-send-email-sandeen@redhat.com> References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410108066 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.9258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- process_dinode_int() reports bad flags if dino->di_flags & ~XFS_DIFLAG_ANY - i.e. if any flags are set outside the known set. But then instead of clearing them, it does flags &= ~XFS_DIFLAG_ANY which keeps *only* the bad flags. This leads to persistent, unrepairable errors of the form: "Bad flags set in inode XXX" Fix this. While we are at it, fix a couple lines which look like they used to be continuation lines, but are no longer. Signed-off-by: Eric Sandeen --- repair/dinode.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/repair/dinode.c b/repair/dinode.c index 8891e84..38a6562 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -2456,7 +2456,7 @@ _("bad (negative) size %" PRId64 " on inode %" PRIu64 "\n"), _("Bad flags set in inode %" PRIu64 "\n"), lino); } - flags &= ~XFS_DIFLAG_ANY; + flags &= XFS_DIFLAG_ANY; } if (flags & (XFS_DIFLAG_REALTIME | XFS_DIFLAG_RTINHERIT)) { @@ -2513,11 +2513,11 @@ _("bad (negative) size %" PRId64 " on inode %" PRIu64 "\n"), } if (!verify_mode && flags != be16_to_cpu(dino->di_flags)) { if (!no_modify) { - do_warn(_(", fixing bad flags.\n")); + do_warn(_("fixing bad flags.\n")); dino->di_flags = cpu_to_be16(flags); *dirty = 1; } else - do_warn(_(", would fix bad flags.\n")); + do_warn(_("would fix bad flags.\n")); } } -- 1.7.1 From sandeen@sandeen.net Sun Sep 7 12:02:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 4AA457F4E for ; Sun, 7 Sep 2014 12:02:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 34A338F8033 for ; Sun, 7 Sep 2014 10:02:12 -0700 (PDT) X-ASG-Debug-ID: 1410109330-04cbb05486ac5110001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id Yk7xD3g7AnUpTVCd for ; Sun, 07 Sep 2014 10:02: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 D379761A5851 for ; Sun, 7 Sep 2014 12:02:10 -0500 (CDT) Message-ID: <540C8F92.5050704@sandeen.net> Date: Sun, 07 Sep 2014 12:02:10 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: [PATCH 6/5] xfs_repair: don't re-add root dotdot if root dir was rebuilt References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> X-ASG-Orig-Subj: [PATCH 6/5] xfs_repair: don't re-add root dotdot if root dir was rebuilt In-Reply-To: <1410108065-18156-1-git-send-email-sandeen@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410109330 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.9259 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- If we've rebuilt the root directory, ".." was taken care of, so clear need_root_dotdot. Otherwise it will be added twice, and a subsequent repair will say: entry ".." (ino 5824) in dir 5824 is a duplicate name, would junk entry Signed-off-by: Eric Sandeen --- (sorry for 6/5, this just popped out and is similar to the patch 3/5 I just sent, so probably worth doing at the same time. diff --git a/repair/phase6.c b/repair/phase6.c index cc36a9c..2e67c60 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -2294,6 +2297,9 @@ out_fix: */ if (*need_dot) add_inode_ref(irec, ino_offset); + /* If we rebuilt the root dir, dot dot is in good shape */ + if (ino == mp->m_sb.sb_rootino) + need_root_dotdot = 0; *num_illegal = 0; *need_dot = 0; } else { From sandeen@sandeen.net Sun Sep 7 16:26:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D34EE7F4E for ; Sun, 7 Sep 2014 16:26:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B30D58F8033 for ; Sun, 7 Sep 2014 14:26:20 -0700 (PDT) X-ASG-Debug-ID: 1410125170-04bdf0109a7e6000001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 7H0tln9dnRv5QS78 for ; Sun, 07 Sep 2014 14:26:10 -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 D598B610C889; Sun, 7 Sep 2014 16:26:09 -0500 (CDT) Message-ID: <540CCD71.4020507@sandeen.net> Date: Sun, 07 Sep 2014 16:26:09 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH 5/5] xfs_repair: set proper ftype when moving to lost+found References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> <1410108065-18156-6-git-send-email-sandeen@redhat.com> X-ASG-Orig-Subj: Re: [PATCH 5/5] xfs_repair: set proper ftype when moving to lost+found In-Reply-To: <1410108065-18156-6-git-send-email-sandeen@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410125170 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.9266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 9/7/14 11:41 AM, Eric Sandeen wrote: > When we move files to lost+found, we're setting the > filetype to UNKNOWN. This leaves an inconsistency which > is discovered on a subsequent repair: > > would fix ftype mismatch (0/1) in directory/child inode 5838/5839 > > Setting the proper ftype at the time of the move > resolves this: Ah, arekm points out that Jan already sent a patch to do this: [PATCH] repair: Set ftype for entries in lost+found http://oss.sgi.com/archives/xfs/2014-07/msg00314.html Sorry, missed that. -Eric From david@fromorbit.com Sun Sep 7 18:39:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 A30067F4E for ; Sun, 7 Sep 2014 18:39:17 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7C1C2304032 for ; Sun, 7 Sep 2014 16:39:17 -0700 (PDT) X-ASG-Debug-ID: 1410133153-04cbb05488acff20001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id qLJfDbKInF0S9oIa for ; Sun, 07 Sep 2014 16:39:14 -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: AvcvAPTrDFR5LKYhPGdsb2JhbABZgw2BKoczqR8BAQEBAQEGmnCFaQEDAQEBgQoXBQEBAQE4N4QEAQU6HCMQCAMYCSUPBSUDBxoTiEG7NQEXGIVkiQhJB4MvgR0FnHGZICsvgQeBSAEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 08 Sep 2014 09:09:13 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQm34-0007qr-QS; Mon, 08 Sep 2014 09:39:10 +1000 Date: Mon, 8 Sep 2014 09:39:10 +1000 From: Dave Chinner To: stan hoeppner Cc: xfs@oss.sgi.com Subject: Re: storage, libaio, or XFS problem? 3.4.26 Message-ID: <20140907233910.GA30012@dastard> X-ASG-Orig-Subj: Re: storage, libaio, or XFS problem? 3.4.26 References: <20140828230817.GU20518@dastard> <2d2ce7bb38c00a7d35f4a324f6a36cbb@localhost> <20140829235538.GF20518@dastard> <20140831235749.GH20518@dastard> <5403E9B9.7040608@hardwarefreak.com> <20140901234529.GI20518@dastard> <5405FB19.2020208@hardwarefreak.com> <20140902221915.GK20518@dastard> <540BEBB7.7020306@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540BEBB7.7020306@hardwarefreak.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: 1410133153 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.9268 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Sep 07, 2014 at 12:23:03AM -0500, stan hoeppner wrote: > I have some more information regarding the AIO issue. I fired up the > test harness and it ran for 30 hours at 706 MB/s avg write rate, 303 > MB/s per LUN, nearly flawlessly, less than 0.01% buffer loss, and avg IO > times were less than 0.5 seconds. Then the app crashed and I found the > following in dmesg. I had to "hard reset" the box due to the shrapnel. > There are no IO errors of any kind leading up to the forced shutdown. > I assume the inode update and streamRT-sa hung task traces are a result > of the forced shutdown, not a cause of it. In lieu of an xfs_repair > with a version newer than I'm able to install, any ideas what caused the > forced shutdown after 30 hours, given there are no errors preceding it? > > > Sep 6 06:33:33 Anguish-ssu-1 kernel: [288087.334863] XFS (dm-5): > xfs_do_force_shutdown(0x8) called from line 3732 of file > fs/xfs/xfs_bmap.c. Return address = 0xffffffffa02009a6 > Sep 6 06:33:42 Anguish-ssu-1 kernel: [288096.220920] XFS (dm-5): failed > to update timestamps for inode 0x2ffc9caae Hi Stan, can you need to turn off line wrapping for stuff you paste in? It's all but unreadable when it line wraps like this? Next, you need to turn /proc/sys/fs/xfs/error_level up to 11 so that it dumps a stack trace on corruption events. I don't have a (I can't remember what kernel version you are running) tree in front of me to convert that line number to something meaningful, so it's not a great help... Was there anything in the logs before the shutdown? i.e. can you paste the dmesg output from the start of the test (i.e. the mount of the fs) to the end? As it is, all the traces looke like this: > [] schedule+0x64/0x66 > [] rwsem_down_failed_common+0xdb/0x10d > [] rwsem_down_write_failed+0x13/0x15 > [] call_rwsem_down_write_failed+0x13/0x20 > [] ? down_write+0x25/0x27 > [] xfs_ilock+0x4f/0xb4 [xfs] > [] xfs_rw_ilock+0x2c/0x33 [xfs] > [] ? _raw_spin_unlock_irq+0x27/0x32 > [] xfs_file_aio_write_checks+0x41/0xfe [xfs] > [] xfs_file_dio_aio_write+0x103/0x1fc [xfs] > [] xfs_file_aio_write+0x152/0x1b5 [xfs] > [] ? xfs_file_buffered_aio_write+0x179/0x179 [xfs] > [] aio_rw_vect_retry+0x85/0x18a > [] ? aio_fsync+0x29/0x29 > [] aio_run_iocb+0x7b/0x149 > [] io_submit_one+0x199/0x1f3 > [] do_io_submit+0xfa/0x271 > [] sys_io_submit+0x10/0x12 > [] system_call_fastpath+0x16/0x1b Which implies that the shutdown didn't unlock the inode correctly. But without knowing what the call stack at the time of the shutdown was, I can't really tell... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun Sep 7 19:10:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 D78C27F4E for ; Sun, 7 Sep 2014 19:10:53 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 751FBAC004 for ; Sun, 7 Sep 2014 17:10:50 -0700 (PDT) X-ASG-Debug-ID: 1410135047-04cb6c54fe845500001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id yfR4Qt1SZigC7M0n for ; Sun, 07 Sep 2014 17: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: AvcvAPHyDFR5LKYhPGdsb2JhbABZgw2BKoczqR8BAQEBAQEGmnCFaQEDAQEBgQoXBQEBAQE4N4QEAQUnExwjEAgDGAklDwUlAwcaE4hBuyUBFxiFZIlRB4MvgR0FnHGMKIx4Ky+CTwEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail04.adl6.internode.on.net with ESMTP; 08 Sep 2014 09:40:46 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQmXc-0007uk-FQ; Mon, 08 Sep 2014 10:10:44 +1000 Date: Mon, 8 Sep 2014 10:10:44 +1000 From: Dave Chinner To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype Message-ID: <20140908001044.GB30012@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> <1410108065-18156-5-git-send-email-sandeen@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1410108065-18156-5-git-send-email-sandeen@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: 1410135047 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.9268 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Sep 07, 2014 at 11:41:04AM -0500, Eric Sandeen wrote: > xfs_dir3_dirent_get_ftype() gets the file type > off disk, but ASSERTs if it's invalid: > > ASSERT(type < XFS_DIR3_FT_MAX); > > This might be cut & paste from > xfs_dir3_dirent_put_ftype which should be checking > that it's not been passed bad values, but we > shouldn't ASSERT on bad values read from disk. > > Signed-off-by: Eric Sandeen > --- > include/xfs_da_format.h | 1 - > 1 files changed, 0 insertions(+), 1 deletions(-) > > diff --git a/include/xfs_da_format.h b/include/xfs_da_format.h > index 89a1a21..11f1420 100644 > --- a/include/xfs_da_format.h > +++ b/include/xfs_da_format.h > @@ -561,7 +561,6 @@ xfs_dir3_dirent_get_ftype( > if (xfs_sb_version_hasftype(&mp->m_sb)) { > __uint8_t type = dep->name[dep->namelen]; > > - ASSERT(type < XFS_DIR3_FT_MAX); > if (type < XFS_DIR3_FT_MAX) > return type; Needs to be fixed kernel-side first. Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Sun Sep 7 20:02:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 92C9A7F4E for ; Sun, 7 Sep 2014 20:02:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 72EAC8F8033 for ; Sun, 7 Sep 2014 18:02:23 -0700 (PDT) X-ASG-Debug-ID: 1410138141-04bdf0109a7ea080001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 9DkY5ZU4V97taWjI for ; Sun, 07 Sep 2014 18:02: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 43CBB610C889; Sun, 7 Sep 2014 20:02:21 -0500 (CDT) Message-ID: <540D001C.6020607@sandeen.net> Date: Sun, 07 Sep 2014 20:02:20 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Dave Chinner , Eric Sandeen CC: xfs@oss.sgi.com Subject: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> <1410108065-18156-5-git-send-email-sandeen@redhat.com> <20140908001044.GB30012@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype In-Reply-To: <20140908001044.GB30012@dastard> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410138141 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.9269 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 9/7/14 7:10 PM, Dave Chinner wrote: > On Sun, Sep 07, 2014 at 11:41:04AM -0500, Eric Sandeen wrote: ... >> diff --git a/include/xfs_da_format.h b/include/xfs_da_format.h >> index 89a1a21..11f1420 100644 >> --- a/include/xfs_da_format.h >> +++ b/include/xfs_da_format.h >> @@ -561,7 +561,6 @@ xfs_dir3_dirent_get_ftype( >> if (xfs_sb_version_hasftype(&mp->m_sb)) { >> __uint8_t type = dep->name[dep->namelen]; >> >> - ASSERT(type < XFS_DIR3_FT_MAX); >> if (type < XFS_DIR3_FT_MAX) >> return type; > > Needs to be fixed kernel-side first. xfs_dir3_dirent_get_ftype doesn't exist in kernelspace :) bleah, why do they have different names... Ok, will send. -Eric > Cheers, > > Dave. > From sandeen@redhat.com Sun Sep 7 20:06:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 087277F4E for ; Sun, 7 Sep 2014 20:06:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8C051AC005 for ; Sun, 7 Sep 2014 18:06:39 -0700 (PDT) X-ASG-Debug-ID: 1410138397-04cbb05485ad13f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id f7ta5HIZ1mzQg91A (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 07 Sep 2014 18:06:38 -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-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8816aPM004074 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Sun, 7 Sep 2014 21:06:36 -0400 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s8816ZeT015328 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO) for ; Sun, 7 Sep 2014 21:06:36 -0400 Message-ID: <540D011B.2000807@redhat.com> Date: Sun, 07 Sep 2014 20:06:35 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfs: don't ASSERT on corrupt ftype Content-Type: text/plain; charset=utf-8; format=flowed X-ASG-Orig-Subj: [PATCH] xfs: don't ASSERT on corrupt ftype Content-Transfer-Encoding: 7bit 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: 1410138397 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 xfs_dir3_data_get_ftype() and xfs_dir2_sf_check() get the file type off disk, but ASSERT if it's invalid: ASSERT(type < XFS_DIR3_FT_MAX); This might be cut & paste from the "put" functions, which should be checking that they've not been passed bad values, but we shouldn't ASSERT on bad values read from disk. Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/libxfs/xfs_da_format.c b/fs/xfs/libxfs/xfs_da_format.c index c9aee52..7e42fdf 100644 --- a/fs/xfs/libxfs/xfs_da_format.c +++ b/fs/xfs/libxfs/xfs_da_format.c @@ -270,7 +270,6 @@ xfs_dir3_data_get_ftype( { __uint8_t ftype = dep->name[dep->namelen]; - ASSERT(ftype < XFS_DIR3_FT_MAX); if (ftype >= XFS_DIR3_FT_MAX) return XFS_DIR3_FT_UNKNOWN; return ftype; diff --git a/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c index 5079e05..ea89250 100644 --- a/fs/xfs/libxfs/xfs_dir2_sf.c +++ b/fs/xfs/libxfs/xfs_dir2_sf.c @@ -635,7 +635,6 @@ xfs_dir2_sf_check( offset = xfs_dir2_sf_get_offset(sfep) + dp->d_ops->data_entsize(sfep->namelen); - ASSERT(dp->d_ops->sf_get_ftype(sfep) < XFS_DIR3_FT_MAX); } ASSERT(i8count == sfp->i8count); ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size); From david@fromorbit.com Sun Sep 7 22:16:52 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 4E9AD7F4E for ; Sun, 7 Sep 2014 22:16:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2DB938F8039 for ; Sun, 7 Sep 2014 20:16:49 -0700 (PDT) X-ASG-Debug-ID: 1410146206-04bdf0109a7eca50001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id CC3kgWbifR2mP6JX for ; Sun, 07 Sep 2014 20:16:47 -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: ArY4AAMfDVR5LKYhPGdsb2JhbABZgw2BKoczqSEBAgEBAQaacIVpAQMBAQGBDhcFAQEBATg3hAQBBScTHCMQCAMYCSUPBSUDBxoTiEG6dAEXGIVkiVEHhEwFnHGMKIx4Ky+CTwEBAQ Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail06.adl6.internode.on.net with ESMTP; 08 Sep 2014 12:46:46 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQpRc-0008Et-3h; Mon, 08 Sep 2014 13:16:44 +1000 Date: Mon, 8 Sep 2014 13:16:44 +1000 From: Dave Chinner To: Eric Sandeen Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype Message-ID: <20140908031644.GZ20518@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> <1410108065-18156-5-git-send-email-sandeen@redhat.com> <20140908001044.GB30012@dastard> <540D001C.6020607@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540D001C.6020607@sandeen.net> 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: 1410146206 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.9271 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Sep 07, 2014 at 08:02:20PM -0500, Eric Sandeen wrote: > On 9/7/14 7:10 PM, Dave Chinner wrote: > >On Sun, Sep 07, 2014 at 11:41:04AM -0500, Eric Sandeen wrote: > > ... > > >>diff --git a/include/xfs_da_format.h b/include/xfs_da_format.h > >>index 89a1a21..11f1420 100644 > >>--- a/include/xfs_da_format.h > >>+++ b/include/xfs_da_format.h > >>@@ -561,7 +561,6 @@ xfs_dir3_dirent_get_ftype( > >> if (xfs_sb_version_hasftype(&mp->m_sb)) { > >> __uint8_t type = dep->name[dep->namelen]; > >> > >>- ASSERT(type < XFS_DIR3_FT_MAX); > >> if (type < XFS_DIR3_FT_MAX) > >> return type; > > > >Needs to be fixed kernel-side first. > > xfs_dir3_dirent_get_ftype doesn't exist in kernelspace :) > > bleah, why do they have different names... Ok, will send. Because kernel has changed, and we need to do yet another large kernel/user libxfs sync. I haven't found time to do that yet. Unless you want to volunteer for it.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Sun Sep 7 22:18:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 DC5F77F4E for ; Sun, 7 Sep 2014 22:18:14 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7A64AAC004 for ; Sun, 7 Sep 2014 20:18:11 -0700 (PDT) X-ASG-Debug-ID: 1410146289-04cbb05487ad39d0001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id Mh3XGqy4WvM6hBgz for ; Sun, 07 Sep 2014 20:18:09 -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 3716563D57C0; Sun, 7 Sep 2014 22:18:09 -0500 (CDT) Message-ID: <540D1FF1.4030601@sandeen.net> Date: Sun, 07 Sep 2014 22:18:09 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Dave Chinner CC: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> <1410108065-18156-5-git-send-email-sandeen@redhat.com> <20140908001044.GB30012@dastard> <540D001C.6020607@sandeen.net> <20140908031644.GZ20518@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype In-Reply-To: <20140908031644.GZ20518@dastard> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1410146289 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.9271 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 9/7/14 10:16 PM, Dave Chinner wrote: > On Sun, Sep 07, 2014 at 08:02:20PM -0500, Eric Sandeen wrote: >> On 9/7/14 7:10 PM, Dave Chinner wrote: ... >>> Needs to be fixed kernel-side first. >> >> xfs_dir3_dirent_get_ftype doesn't exist in kernelspace :) >> >> bleah, why do they have different names... Ok, will send. > > Because kernel has changed, and we need to do yet another large > kernel/user libxfs sync. > > I haven't found time to do that yet. Unless you want to volunteer > for it.... I could give it a shot. Do you usually do it commit-by-commit, diff-and-edit, or a big copy? -Eric From david@fromorbit.com Mon Sep 8 01:23:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 252037F4E for ; Mon, 8 Sep 2014 01:23:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B784AAC001 for ; Sun, 7 Sep 2014 23:23:27 -0700 (PDT) X-ASG-Debug-ID: 1410157404-04bdf010977f09e0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id bVgIa2gdF8MBdoZe for ; Sun, 07 Sep 2014 23:23:25 -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: ArU4ALlKDVR5LKYhPGdsb2JhbABXgw2BKoczqSQBAgEBAQaacIVpAQMBAQGBDhcFAQEBATg3hAQBBTocIxAIAxgJJQ8FJQMHGhOIQbp7ARcYhWSJUQeDL4EdBZxxjCiMeCsvgk8BAQE Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail06.adl6.internode.on.net with ESMTP; 08 Sep 2014 15:53:24 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQsME-00007K-19; Mon, 08 Sep 2014 16:23:22 +1000 Date: Mon, 8 Sep 2014 16:23:22 +1000 From: Dave Chinner To: Eric Sandeen Cc: Eric Sandeen , xfs@oss.sgi.com Subject: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype Message-ID: <20140908062321.GA20518@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/5] xfs_repair: don't ASSERT on corrupt ftype References: <1410108065-18156-1-git-send-email-sandeen@redhat.com> <1410108065-18156-5-git-send-email-sandeen@redhat.com> <20140908001044.GB30012@dastard> <540D001C.6020607@sandeen.net> <20140908031644.GZ20518@dastard> <540D1FF1.4030601@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540D1FF1.4030601@sandeen.net> 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: 1410157405 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.9275 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Sep 07, 2014 at 10:18:09PM -0500, Eric Sandeen wrote: > On 9/7/14 10:16 PM, Dave Chinner wrote: > >On Sun, Sep 07, 2014 at 08:02:20PM -0500, Eric Sandeen wrote: > >>On 9/7/14 7:10 PM, Dave Chinner wrote: > > ... > > >>>Needs to be fixed kernel-side first. > >> > >>xfs_dir3_dirent_get_ftype doesn't exist in kernelspace :) > >> > >>bleah, why do they have different names... Ok, will send. > > > >Because kernel has changed, and we need to do yet another large > >kernel/user libxfs sync. > > > >I haven't found time to do that yet. Unless you want to volunteer > >for it.... > > I could give it a shot. Do you usually do it commit-by-commit, > diff-and-edit, or a big copy? This one is going to need multiple phases, and in a moment you're going to understand what all functions called into libxfs should have a "libxfs define wrapper": 1. sync up to kernel commit before error negation 2. make sure all external function calls have libxfs define wrappers 3. commit error negation patch and change sign of all libxfs define wrappers 4. apply kernel libxfs rename patch and restructure libxfs userspace and xfsprogs build to match 5. continue syncing kernel changes commit by commit. Given the scope of changes, and the fact that some of the changes have already been applied (i.e. bug fixes, finobt changes, etc) step #1 is not going to be a straight forward commit-by-commit. So I'm happy to do that as a bulk commit. Steps #2 and #3 are relatively straight forward, too, just a bit painful as we need to be sure we don't leak negative errors. Step #4 is the big one; we want to end up with the kernel fs/xfs/libxfs to be identical to the xfsprogs:/libxfs/ code and so in userspace we've got to move headers around and rejig includes and things like that. That's one I should probably do. And from there, step 5 should be a simple extract/sed/commit process of pulling patch by patch from the kernel changes that touch fs/xfs/libxfs.... So, really, the big step right now is #1... Cheers, Dave. -- Dave Chinner david@fromorbit.com From s.priebe@profihost.ag Mon Sep 8 03:36:01 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 1D5667F4E for ; Mon, 8 Sep 2014 03:36:01 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 84E0BAC006 for ; Mon, 8 Sep 2014 01:36:00 -0700 (PDT) X-ASG-Debug-ID: 1410165357-04cb6c54ff84f9c0001-NocioJ Received: from mail-ph.de-nserver.de (mail-ph.de-nserver.de [85.158.179.214]) by cuda.sgi.com with ESMTP id 8nsJXNHI6YEaFaRR (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 08 Sep 2014 01:35:58 -0700 (PDT) X-Barracuda-Envelope-From: s.priebe@profihost.ag X-Barracuda-Apparent-Source-IP: 85.158.179.214 Received: (qmail 12091 invoked from network); 8 Sep 2014 10:35:57 +0200 X-Fcrdns: No Received: from phoffice.de-nserver.de (HELO [10.11.11.93]) (185.39.223.5) (smtp-auth username hostmaster@profihost.com, mechanism plain) by mail-ph.de-nserver.de (qpsmtpd/0.92) with (ECDHE-RSA-AES256-SHA encrypted) ESMTPSA; Mon, 08 Sep 2014 10:35:57 +0200 Message-ID: <540D6A6C.9090801@profihost.ag> Date: Mon, 08 Sep 2014 10:35:56 +0200 From: Stefan Priebe - Profihost AG User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: Dave Chinner , Brian Foster CC: "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> <540AB933.4030707@profihost.ag> <20140906150412.GB23506@bfoster.bfoster> <20140906225654.GB9955@dastard> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? In-Reply-To: <20140906225654.GB9955@dastard> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-User-Auth: Auth by hostmaster@profihost.com through 185.39.223.5 X-Barracuda-Connect: mail-ph.de-nserver.de[85.158.179.214] X-Barracuda-Start-Time: 1410165358 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.9277 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Thanks, upgraded to 3.16.2 and xfsprogs 3.2.1. Let's see how it behaves with finobt. Greets, Stefan Am 07.09.2014 um 00:56 schrieb Dave Chinner: > On Sat, Sep 06, 2014 at 11:04:13AM -0400, Brian Foster wrote: >> On Sat, Sep 06, 2014 at 09:35:15AM +0200, Stefan Priebe wrote: >>> Hi Dave, >>> >>> Am 06.09.2014 01:05, schrieb Dave Chinner: >>>> On Fri, Sep 05, 2014 at 02:40:32PM +0200, Stefan Priebe - Profihost AG wrote: >>>>> >>>>> Am 05.09.2014 um 14:30 schrieb Brian Foster: >>>>>> On Fri, Sep 05, 2014 at 11:47:29AM +0200, Stefan Priebe - Profihost AG wrote: >>>>>>> Hi, >>>>>>> >>>>>>> i have a backup system running 20TB of storage having 350 million files. >>>>>>> This was working fine for month. >>>>>>> >>>>>>> But now the free space is so heavily fragmented that i only see the >>>>>>> kworker with 4x 100% CPU and write speed beeing very slow. 15TB of the >>>>>>> 20TB are in use. >>>> >>>> What does perf tell you about the CPU being burnt? (i.e run perf top >>>> for 10-20s while that CPU burn is happening and paste the top 10 CPU >>>> consuming functions). >>> >>> here we go: >>> 15,79% [kernel] [k] xfs_inobt_get_rec >>> 14,57% [kernel] [k] xfs_btree_get_rec >>> 10,37% [kernel] [k] xfs_btree_increment >>> 7,20% [kernel] [k] xfs_btree_get_block >>> 6,13% [kernel] [k] xfs_btree_rec_offset >>> 4,90% [kernel] [k] xfs_dialloc_ag >>> 3,53% [kernel] [k] xfs_btree_readahead >>> 2,87% [kernel] [k] xfs_btree_rec_addr >>> 2,80% [kernel] [k] _xfs_buf_find >>> 1,94% [kernel] [k] intel_idle >>> 1,49% [kernel] [k] _raw_spin_lock >>> 1,13% [kernel] [k] copy_pte_range >>> 1,10% [kernel] [k] unmap_single_vma >>> >> >> The top 6 or so items look related to inode allocation, so that probably >> confirms the primary bottleneck as searching around for free inodes out >> of the existing inode chunks, precisely what the finobt is intended to >> resolve. That was introduced in 3.16 kernels, so unfortunately it is not >> available in 3.10. > > *nod* > > Again, the only workaround for this on a non-finobt fs is to greatly > increase the number of AGs so there's less records in each btree to > search. > > Cheers, > > Dave. > From david@fromorbit.com Mon Sep 8 04:47:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none 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 564B67F4E for ; Mon, 8 Sep 2014 04:47:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 366668F8040 for ; Mon, 8 Sep 2014 02:47:16 -0700 (PDT) X-ASG-Debug-ID: 1410169633-04cb6c54fe851ba0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id epdsR31eE5pxGU4g for ; Mon, 08 Sep 2014 02:47:14 -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: AkkqAKZ6DVR5LKYh/2dsb2JhbABZgw2BKrBWAQIBAQEGmnCFaQEDAQEBgRQXeIQEAQU6HCMQCAMYCSUPBSUDIROIQbtTARcYhWSJCAdCB4MvgR0BBJxxlS2DcysvgQcBHoEpAQEB Received: from ppp121-44-166-33.lns20.syd7.internode.on.net (HELO dastard) ([121.44.166.33]) by ipmail07.adl2.internode.on.net with ESMTP; 08 Sep 2014 19:17:12 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1XQvXH-0000aH-9T; Mon, 08 Sep 2014 19:46:59 +1000 Date: Mon, 8 Sep 2014 19:46:59 +1000 From: Dave Chinner To: Stefan Priebe - Profihost AG Cc: Brian Foster , "xfs@oss.sgi.com" Subject: Re: Is XFS suitable for 350 million files on 20TB storage? Message-ID: <20140908094659.GC30012@dastard> X-ASG-Orig-Subj: Re: Is XFS suitable for 350 million files on 20TB storage? References: <540986B1.4080306@profihost.ag> <20140905123058.GA29710@bfoster.bfoster> <5409AF40.10801@profihost.ag> <20140905230528.GO20473@dastard> <540AB933.4030707@profihost.ag> <20140906150412.GB23506@bfoster.bfoster> <20140906225654.GB9955@dastard> <540D6A6C.9090801@profihost.ag> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <540D6A6C.9090801@profihost.ag> 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: 1410169633 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.9278 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Sep 08, 2014 at 10:35:56AM +0200, Stefan Priebe - Profihost AG wrote: > Thanks, > > upgraded to 3.16.2 and xfsprogs 3.2.1.