From Yann.Dupont@univ-nantes.fr Mon Jan 2 04:09:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q02A9XiM152238 for ; Mon, 2 Jan 2012 04:09:33 -0600 X-ASG-Debug-ID: 1325498970-0222017aa611d5a0001-NocioJ Received: from smtp-tls.univ-nantes.fr (smtp-tls1.univ-nantes.fr [193.52.101.145]) by cuda.sgi.com with ESMTP id HL5Xr9Zfwj3w3pDH for ; Mon, 02 Jan 2012 02:09:31 -0800 (PST) X-Barracuda-Envelope-From: Yann.Dupont@univ-nantes.fr X-Barracuda-Apparent-Source-IP: 193.52.101.145 Received: from localhost (debian [127.0.0.1]) by smtp-tls.univ-nantes.fr (Postfix) with ESMTP id 4104E94DB3; Mon, 2 Jan 2012 11:09:30 +0100 (CET) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at univ-nantes.fr Received: from smtp-tls.univ-nantes.fr ([127.0.0.1]) by localhost (smtp-tls1.d101.univ-nantes.fr [127.0.0.1]) (amavisd-new, port 10024) with LMTP id CadxwarE9o+c; Mon, 2 Jan 2012 11:09:30 +0100 (CET) Received: from [172.20.13.9] (tomintoul.cri.univ-nantes.prive [172.20.13.9]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-tls.univ-nantes.fr (Postfix) with ESMTPSA id 1863794DB2; Mon, 2 Jan 2012 11:09:30 +0100 (CET) Message-ID: <4F0181A2.5010505@univ-nantes.fr> Date: Mon, 02 Jan 2012 11:06:26 +0100 From: Yann Dupont User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: Yann Dupont CC: Dave Chinner , stan@hardwarefreak.com, xfs@oss.sgi.com Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <20111211233929.GI14273@dastard> <20111212010053.GM14273@dastard> <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 In-Reply-To: <4EF30E5D.7060608@univ-nantes.fr> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp-tls1.univ-nantes.fr[193.52.101.145] X-Barracuda-Start-Time: 1325498971 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84802 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address X-Virus-Status: Clean Le 22/12/2011 12:02, Yann Dupont a écrit : > Le 22/12/2011 10:23, Yann Dupont a écrit : >> >>> Can you run a block trace on both kernels (for say five minutes) >>> when the load differential is showing up and provide that to us so >>> we can see how the IO patterns are differing? > > > here we go. > Hello, happy new year everybody , Did someone had time to examine the 2 blktrace ? (and, by chance, can see the root cause of the increased load ?) One of my server is still running 3.1.6. In the coming days I'll see a very important load increase (today is still calm). Is there anything I can do to go further ? Thanks, -- Yann Dupont - Service IRTS, DSI Université de Nantes Tel : 02.53.48.49.20 - Mail/Jabber : Yann.Dupont@univ-nantes.fr From BATV+c08f527ca328123cb62e+3053+infradead.org+hch@bombadil.srs.infradead.org Mon Jan 2 09:02:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q02F25aN194153 for ; Mon, 2 Jan 2012 09:02:07 -0600 X-ASG-Debug-ID: 1325516522-005fe612a6e3500001-w1Z2WR Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id I6CfhVgDn7H5HEQJ for ; Mon, 02 Jan 2012 07:02:02 -0800 (PST) X-Barracuda-Envelope-From: BATV+c08f527ca328123cb62e+3053+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RhjOj-00020T-Ci; Mon, 02 Jan 2012 15:02:01 +0000 Date: Mon, 2 Jan 2012 10:02:01 -0500 From: Christoph Hellwig To: yangguoquan Cc: hch@infradead.org, linux-xfs@oss.sgi.com, pengxihan@gmail.com Subject: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again Message-ID: <20120102150201.GB31110@infradead.org> X-ASG-Orig-Subj: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again References: <1276846374-23916-1-git-send-email-david@fromorbit.com> <20111123143045.GA20892@infradead.org> <20111128111947.GA26454@infradead.org> 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325516522 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.70 X-Barracuda-Spam-Status: No, SCORE=0.70 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085, BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84822 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.10 BSF_SC0_SA085 Custom Rule SA085 0.50 BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL Custom Rule HREF_FROM_MISMATCH_TEXT_URIx1_HL X-Virus-Status: Clean On Thu, Dec 29, 2011 at 05:19:55PM +0800, yangguoquan wrote: > > NFS Stale File Handle Again, But this happens when mount operation not during accessing file or directory. > > My /etc/exports file: > > /mnt/storage_pool/testnfs00 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs01 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs02 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs03 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs04 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs05 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs06 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs07 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs08 *(rw,sync,no_root_squash) > /mnt/storage_pool/testnfs09 *(rw,sync,no_root_squash) Are these mount points? If not take a look at http://xfs.org/index.php/XFS_FAQ#Q:_Why_doesn.27t_NFS-exporting_subdirectories_of_inode64-mounted_filesystem_work.3F From pg_mh@V01.sabi.co.uk Mon Jan 2 10:08:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q02G8oRB203657 for ; Mon, 2 Jan 2012 10:08:51 -0600 X-ASG-Debug-ID: 1325520529-0222017aa4141df0001-ps1ADW Received: from anakin.london.02.net (anakin.london.02.net [87.194.255.134]) by cuda.sgi.com with ESMTP id DfU7htmPgbf2QZCw for ; Mon, 02 Jan 2012 08:08:49 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.134 Received: from ty.sabi.co.UK (87.194.99.40) by anakin.london.02.net (8.5.140) id 4EEB63D200418F31 for xfs@OSS.SGI.com; Mon, 2 Jan 2012 16:08:48 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RhkRI-0006wI-K6 for ; Mon, 02 Jan 2012 16:08:44 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20225.54924.482210.587313@tree.ty.sabi.co.UK> Date: Mon, 2 Jan 2012 16:08:44 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 In-Reply-To: <4F0181A2.5010505@univ-nantes.fr> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <20111211233929.GI14273@dastard> <20111212010053.GM14273@dastard> <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: anakin.london.02.net[87.194.255.134] X-Barracuda-Start-Time: 1325520529 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84826 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean [ ... ] >> On two particular server, with recent kernels, I experience a >> much higher load than expected, but it's very hard to tell >> what's wrong. The system seems more in I/O wait. Older >> kernels (2.6.32.xx and 2.6.26.xx) gives better results. [ ... ] > When I go back to older kernels, the load go down. With newer > kernel, all is working well too, but load (as reported by > uptime) is higher. [ ... ] >> birnie:~/TRACE# uptime >> 11:48:34 up 17:18, 3 users, load average: 0.04, 0.18, 0.23 >> penderyn:~/TRACE# uptime >> 11:48:30 up 23 min, 3 users, load average: 4.03, 3.82, 3.21 [ ... ] But 'uptime' reports the load average, which is (roughly) processes actually running on the CPU. If the load average is higher, that usually means that the file system is running better, not worse. It looks as if you are not clear whether you have a regression or an improvement. For a mail server the relevant metric is messages processed per second, or alternatively median and maximum times to process a message, rather than "average" processes running. [ ... ] >> As those servers are critical for us, I can't really test, >> hardly give you more precise numbers, and I don't know how to >> accurately reproduce this platform to test what's wrong. I >> know this is NOT a precise bug report and it won't help much. >> All I can say IS : - read operations seems no slower with >> recent kernels, backups take approximatively the same time ; >> - I'd say (but I have no proof) that delivery of new mails >> takes more time and is more synchronous than before, like >> nobarrier have no effect. > Did someone had time to examine the 2 blktrace ? (and, by > chance, can see the root cause of the increased load ?) So you are expecting for a large system critical problem for which you yourself do not have the resource to do testing to see quick response times over the Christmas and New Year period. What's your XFS Platinum Psychic Support Account number? :-) > One of my server is still running 3.1.6. In the coming days > I'll see a very important load increase (today is still > calm). Is there anything I can do to go further ? As it is not clear whether you are complaining about better XFS performance, it is hard to help. However you can probably test a bit your systems by running while things are still calmer Postmark on both machines, as that reports relevant metrics. [ ... ] BTW rereading the description of the setup: >>>>> Thoses servers are mail (dovecot) servers, with lots of >>>>> simultaneous imap clients (5000+) an lots of simultaneous >>>>> message delivery. These are linux-vservers, on top of LVM >>>>> volumes. The storage is SAN with 15k RPM SAS drives (and >>>>> battery backup). I know barriers were disabled in older >>>>> kernels, so with recents kernels, XFS volumes were mounted >>>>> with nobarrier. >>>> 1. What mailbox format are you using? Is this a constant >>>> or variable? >>> Maildir++ I am stunned by the sheer (euphemism alert) audacity of it all. This setup is (euphemism alert) amazing. However at least it is Linux-VServers, while there are clueless sysadms who setup mail servers over virtual machines (and amazingly VMware encourages that for Zimbra, which is a terrible combination as Zimbra also uses something like Maildir for the IMAP mailstore). The use of 15k drives is also commendable. Unfortunately the problem of large busy mailstores is vastly underestimated by many, and XFS has little to do with it. From pg_mh@V01.sabi.co.uk Mon Jan 2 12:02:58 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q02I2vEr220461 for ; Mon, 2 Jan 2012 12:02:58 -0600 X-ASG-Debug-ID: 1325527375-00a9eb19d5108cd0001-NocioJ Received: from honeysuckle.london.02.net (honeysuckle.london.02.net [87.194.255.144]) by cuda.sgi.com with ESMTP id Wl7yXFUbUGuNqhyq for ; Mon, 02 Jan 2012 10:02:55 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.144 Received: from ty.sabi.co.UK (87.194.99.40) by honeysuckle.london.02.net (8.5.140) id 4EEF52D200387AC4 for xfs@oss.sgi.com; Mon, 2 Jan 2012 18:02:55 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RhmDi-00075b-KM for ; Mon, 02 Jan 2012 18:02:50 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20225.61770.489211.356415@tree.ty.sabi.co.UK> Date: Mon, 2 Jan 2012 18:02:50 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 In-Reply-To: <20225.54924.482210.587313@tree.ty.sabi.co.UK> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <20111211233929.GI14273@dastard> <20111212010053.GM14273@dastard> <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> <20225.54924.482210.587313@tree.ty.sabi.co.UK> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: honeysuckle.london.02.net[87.194.255.144] X-Barracuda-Start-Time: 1325527375 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84833 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean >>> The system seems more in I/O wait. Older >>> kernels (2.6.32.xx and 2.6.26.xx) gives better results. > [ ... ] >> When I go back to older kernels, the load go down. With newer >> kernel, all is working well too, but load (as reported by >> uptime) is higher. > [ ... ] >>> birnie:~/TRACE# uptime >>> 11:48:34 up 17:18, 3 users, load average: 0.04, 0.18, 0.23 >>> penderyn:~/TRACE# uptime >>> 11:48:30 up 23 min, 3 users, load average: 4.03, 3.82, 3.21 > [ ... ] > But 'uptime' reports the load average, which is (roughly) > processes actually running on the CPU. If the load average is > higher, that usually means that the file system is running > better, not worse. It looks as if you are not clear whether you > have a regression or an improvement. Perhaps it would be useful to see the output of something like 'iostat -d -x 10' and 'vmstat 10' to see if the load average is higher because of processes waiting less and running more or whether it is processes running in 'iowait'. It can help also using 'htop' with an '.htoprc' like this: -------------------------------------------------------------- fields=0 48 2 17 38 39 13 14 46 62 63 1 sort_key=63 sort_direction=1 hide_threads=0 hide_kernel_threads=0 hide_userland_threads=0 shadow_other_users=1 highlight_base_name=1 highlight_megabytes=1 highlight_threads=0 tree_view=0 header_margin=0 detailed_cpu_time=1 color_scheme=2 delay=15 left_meters=Memory AllCPUs left_meter_modes=1 1 right_meters=Swap AllCPUs right_meter_modes=1 2 -------------------------------------------------------------- From david@fromorbit.com Mon Jan 2 14:35:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q02KZmxo236447 for ; Mon, 2 Jan 2012 14:35:49 -0600 X-ASG-Debug-ID: 1325536545-00a9eb19d5116d60001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id wkjkc0wCxpFCSSR1 for ; Mon, 02 Jan 2012 12:35:46 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmdcAAQSAk95LLu4/2dsb2JhbABCggWpQYERgQaBcgEBBTIBIyMQCAMQCC4UJQMhE7wuE4t8BJUBkkk Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Jan 2012 07:05:44 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rhobf-0001V0-D6; Tue, 03 Jan 2012 07:35:43 +1100 Date: Tue, 3 Jan 2012 07:35:43 +1100 From: Dave Chinner To: Yann Dupont Cc: stan@hardwarefreak.com, xfs@oss.sgi.com Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 Message-ID: <20120102203543.GP23662@dastard> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <20111212010053.GM14273@dastard> <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4F0181A2.5010505@univ-nantes.fr> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1325536545 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84845 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Mon, Jan 02, 2012 at 11:06:26AM +0100, Yann Dupont wrote: > Le 22/12/2011 12:02, Yann Dupont a écrit : > >Le 22/12/2011 10:23, Yann Dupont a écrit : > >> > >>>Can you run a block trace on both kernels (for say five minutes) > >>>when the load differential is showing up and provide that to us so > >>>we can see how the IO patterns are differing? > > > > > >here we go. > > > > Hello, happy new year everybody , > > Did someone had time to examine the 2 blktrace ? (and, by chance, > can see the root cause of the increased load ?) I've had a bit of a look, but most peopl ehave been on holidays. As it is, I can't see any material difference between the traces. both reads and writes are taking the same amount of time to service, so I don't think there's any problem here. I do recall that some years ago that we changed one of the ways we slept in XFS which meant those blocked IOs contributed to load average (as tehy are supposed to). That meant that more IO contributed to the load average (it might have been read related), so load averages were then higher for exactly the same workloads. Indeed: load average: 0.64, 0.15, 0.09 (start 40 concurrent directory traversals w/ unlinks) (wait a bit) load average: 39.96, 23.75, 10.06 Yup, that is spot on - 40 processes doing blocking IO..... So absent any measurable performance problem, I don't think the change in load average is something to be concerned about. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jan 2 15:37:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q02LbBPF239029 for ; Mon, 2 Jan 2012 15:37:11 -0600 X-ASG-Debug-ID: 1325540228-005fe612a8102640001-w1Z2WR Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id zmuoSzZQ7xcfqw1X for ; Mon, 02 Jan 2012 13:37:08 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtIzABwgAk95LLu4/2dsb2JhbABDggWqU4EGgXIBAQU6HCMQCAMOBwMjCxQlAyETvDATg2qIEgSVAZJJ Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail05.adl6.internode.on.net with ESMTP; 03 Jan 2012 08:07:07 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RhpZ4-0001eA-Ez; Tue, 03 Jan 2012 08:37:06 +1100 Date: Tue, 3 Jan 2012 08:37:06 +1100 From: Dave Chinner To: Michael Lueck Cc: linux-xfs@oss.sgi.com Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Message-ID: <20120102213706.GQ23662@dastard> X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? 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: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1325540228 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84848 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Sat, Dec 31, 2011 at 04:50:27PM -0500, Michael Lueck wrote: > Greetings, > > Happy old year! ;-) > > Running XFS on Ununtu 10.04 LTS, I have noticed more warnings with > XFS dump the longer the system has been up. A reboot cuts down on > the number of warnings xfsdump encounters. An example run of xfsdump > is as follows: > > /usr/sbin/xfsdump: using file dump (drive_simple) strategy > /usr/sbin/xfsdump: version 3.0.4 (dump format 3.0) - Running single-threaded > /usr/sbin/xfsdump: level 0 dump of ldslnx01:/srv > /usr/sbin/xfsdump: dump date: Sat Dec 31 15:25:42 2011 > /usr/sbin/xfsdump: session id: b56b3cd7-30d6-44b4-a8a4-e131ee70b60d > /usr/sbin/xfsdump: session label: "data" > /usr/sbin/xfsdump: ino map phase 1: constructing initial dump list > /usr/sbin/xfsdump: ino map phase 2: skipping (no pruning necessary) > /usr/sbin/xfsdump: ino map phase 3: skipping (only one dump stream) > /usr/sbin/xfsdump: ino map construction complete > /usr/sbin/xfsdump: estimated dump size: 115786343168 bytes > /usr/sbin/xfsdump: WARNING: no media label specified > /usr/sbin/xfsdump: creating dump session media file 0 (media 0, file 0) > /usr/sbin/xfsdump: dumping ino map > /usr/sbin/xfsdump: dumping directories > /usr/sbin/xfsdump: dumping non-directory files > /usr/sbin/xfsdump: WARNING: could not get list of non-root attributes for nondir ino 234778: Cannot allocate memory (12) > /usr/sbin/xfsdump: WARNING: could not get list of non-root attributes for nondir ino 234813: Cannot allocate memory (12) > /usr/sbin/xfsdump: WARNING: could not get list of non-root attributes for nondir ino 1828443: Cannot allocate memory (12) > /usr/sbin/xfsdump: WARNING: could not get list of root attributes for nondir ino 1828443: Cannot allocate memory (12) > /usr/sbin/xfsdump: WARNING: could not get list of non-root attributes for nondir ino 2234019: Cannot allocate memory (12) It's getting ENOMEM from the kernel. xfsdump is asking for the list of attributes from the file, and passing in a buffer of XATTR_LIST_MAX bytes, which the xfs_attrmulti_attr_get() function immeidately kmalloc()s for a working buffer. That kmalloc is likely to be failing randomly as it is asking for a contiguous 64k allocation, and that may not be available given memory gets fragmented over time. > /usr/sbin/xfsdump: ending media file > /usr/sbin/xfsdump: media file size 115563111376 bytes > /usr/sbin/xfsdump: dump size (non-dir files) : 115472209824 bytes > /usr/sbin/xfsdump: dump complete: 4099 seconds elapsed > /usr/sbin/xfsdump: Dump Status: SUCCESS > > Could someone please explain what is going on, and why a freshly rebooted system would result in less / no errors? Memory is less fragmented, hence more likely to have a order-5 allocation succeed. Try the patch below, and see if that helps. Cheers, Dave. -- Dave Chinner david@fromorbit.com xfs: handle kmalloc failure when reading attrs From: Dave Chinner xfsdump uses for a large buffer for extended attributes, which has a kmalloc'd shadow buffer in the kernel. This can fail after the system has been running for some time as it is a high order allocation. Convert this to a vmalloc so that it doesn't require contiguous memory and so won't randomly fail while xfsdump is running. Signed-off-by: Dave Chinner --- fs/xfs/xfs_ioctl.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 2f3f56a..0f3fab1 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -448,7 +448,7 @@ xfs_attrmulti_attr_get( if (*len > XATTR_SIZE_MAX) return EINVAL; - kbuf = kmalloc(*len, GFP_KERNEL); + kbuf = vmalloc(*len, GFP_KERNEL); if (!kbuf) return ENOMEM; @@ -460,7 +460,7 @@ xfs_attrmulti_attr_get( error = EFAULT; out_kfree: - kfree(kbuf); + vfree(kbuf); return error; } From sgi-linux-xfs@lo.gmane.org Mon Jan 2 21:25:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q033P28u257639 for ; Mon, 2 Jan 2012 21:25:08 -0600 X-ASG-Debug-ID: 1325561100-0222017aa517d260001-w1Z2WR Received: from lo.gmane.org (lo.gmane.org [80.91.229.12]) by cuda.sgi.com with ESMTP id 2EQt0iXQJmkJ78A8 for ; Mon, 02 Jan 2012 19:25:00 -0800 (PST) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.12 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1Rhuzj-0003JB-Go for linux-xfs@oss.sgi.com; Tue, 03 Jan 2012 04:24:59 +0100 Received: from 75-134-99-39.dhcp.aldl.mi.charter.com ([75.134.99.39]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 03 Jan 2012 04:24:59 +0100 Received: from mlueck by 75-134-99-39.dhcp.aldl.mi.charter.com with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 03 Jan 2012 04:24:59 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Michael Lueck Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Date: Mon, 02 Jan 2012 22:24:52 -0500 X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Organization: Lueck Data Systems Lines: 18 Message-ID: References: <20120102213706.GQ23662@dastard> Reply-To: mlueck@lueckdatasystems.com Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: 75-134-99-39.dhcp.aldl.mi.charter.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20111221 Firefox/9.0.1 SeaMonkey/2.6.1 In-Reply-To: <20120102213706.GQ23662@dastard> X-Barracuda-Connect: lo.gmane.org[80.91.229.12] X-Barracuda-Start-Time: 1325561100 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84872 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Dave Chinner wrote: > Memory is less fragmented, hence more likely to have a order-5 > allocation succeed. Try the patch below, and see if that helps. More I was feeling a bit guilty that I was bouncing the machines to have the backup work without error... as "Linux Administrators NEVER reboot their boxes!" I have a few too many things in the test tubes at the moment to take on custom patching a kernel build. So, do these mean that there is anything wrong with the backup being made? Is the final SUCCESS return code in error? Thank you for providing an explanation and patch. Sincerely, -- Michael Lueck Lueck Data Systems http://www.lueckdatasystems.com/ From Yann.Dupont@univ-nantes.fr Tue Jan 3 02:23:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q038NDDp009896 for ; Tue, 3 Jan 2012 02:23:13 -0600 X-ASG-Debug-ID: 1325578989-005fe612a712a1e0001-NocioJ Received: from smtp-tls.univ-nantes.fr (smtp-tls2.univ-nantes.fr [193.52.101.146]) by cuda.sgi.com with ESMTP id 4SeeuX4Fv9DDXMw7 for ; Tue, 03 Jan 2012 00:23:10 -0800 (PST) X-Barracuda-Envelope-From: Yann.Dupont@univ-nantes.fr X-Barracuda-Apparent-Source-IP: 193.52.101.146 Received: from localhost (debian [127.0.0.1]) by smtp-tls.univ-nantes.fr (Postfix) with ESMTP id ABC29849FE2; Tue, 3 Jan 2012 09:31:49 +0100 (CET) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at univ-nantes.fr Received: from smtp-tls.univ-nantes.fr ([127.0.0.1]) by localhost (smtp-tls2.d101.univ-nantes.fr [127.0.0.1]) (amavisd-new, port 10024) with LMTP id dyklzYvkxcDh; Tue, 3 Jan 2012 09:31:49 +0100 (CET) Received: from [172.20.13.9] (tomintoul.cri.univ-nantes.prive [172.20.13.9]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-tls.univ-nantes.fr (Postfix) with ESMTPSA id 8AFE7849EFF; Tue, 3 Jan 2012 09:31:49 +0100 (CET) Message-ID: <4F02BA35.9040909@univ-nantes.fr> Date: Tue, 03 Jan 2012 09:20:05 +0100 From: Yann Dupont User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: Dave Chinner CC: stan@hardwarefreak.com, xfs@oss.sgi.com Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <20111212010053.GM14273@dastard> <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> <20120102203543.GP23662@dastard> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 In-Reply-To: <20120102203543.GP23662@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp-tls2.univ-nantes.fr[193.52.101.146] X-Barracuda-Start-Time: 1325578990 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84892 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Le 02/01/2012 21:35, Dave Chinner a écrit : > On Mon, Jan 02, 2012 at 11:06:26AM +0100, Yann Dupont wrote: >> Hello, happy new year everybody , >> >> Did someone had time to examine the 2 blktrace ? (and, by chance, >> can see the root cause of the increased load ?) > > I've had a bit of a look, but most peopl ehave been on holidays. yep, of course, I was too :) > > As it is, I can't see any material difference between the traces. > both reads and writes are taking the same amount of time to service, > so I don't think there's any problem here. ok, > > I do recall that some years ago that we changed one of the ways we Do you recall exactly what some years ago means ? Is this post 2.6.26 era ? > slept in XFS which meant those blocked IOs contributed to load > average (as tehy are supposed to). That meant that more IO > contributed to the load average (it might have been read related), > so load averages were then higher for exactly the same workloads. > > Indeed: > > load average: 0.64, 0.15, 0.09 > > (start 40 concurrent directory traversals w/ unlinks) > > (wait a bit) > > load average: 39.96, 23.75, 10.06 > > Yup, that is spot on - 40 processes doing blocking IO..... > > So absent any measurable performance problem, I don't think the > change in load average is something to be concerned about. You're probably right : I have a graph on cacti showing load average usage and detailed load usage (System/User/Nice,Wait, etc...). The load average is much higher now with 3.1.6 , but the detailed load seems not different than before. And for the moment, in real world usage (that is, storing mail in folders and serving imap) the server seems no slower than before. I'll keep an eye on it during high load. Thanks for your answer, Cheers, -- Yann Dupont - Service IRTS, DSI Université de Nantes Tel : 02.53.48.49.20 - Mail/Jabber : Yann.Dupont@univ-nantes.fr From tinguely@sgi.com Tue Jan 3 09:48:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03FmvCG034841 for ; Tue, 3 Jan 2012 09:48:57 -0600 Received: from [128.162.232.180] (eagdhcp-232-180.americas.sgi.com [128.162.232.180]) by relay2.corp.sgi.com (Postfix) with ESMTP id A427B30406A; Tue, 3 Jan 2012 07:48:53 -0800 (PST) Message-ID: <4F032365.30500@sgi.com> Date: Tue, 03 Jan 2012 09:48:53 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: Ben Myers , Christoph Hellwig , Paul Anderson , Sean Thomas Caron , xfs@oss.sgi.com Subject: Re: [PATCH 2/2 v2] xfs: log all dirty inodes in xfs_fs_sync_fs References: <20111218154936.GA17626@infradead.org> <20111218155015.GC17626@infradead.org> <20111220200841.GA2788@infradead.org> <20111223214703.GW29840@sgi.com> <20111226121302.GE12731@dastard> <20111229154207.GK21646@sgi.com> <20111229214441.GI12731@dastard> In-Reply-To: <20111229214441.GI12731@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 12/29/11 15:44, Dave Chinner wrote: > On Thu, Dec 29, 2011 at 09:42:07AM -0600, Ben Myers wrote: >> Hi Dave, >> >> On Mon, Dec 26, 2011 at 11:13:02PM +1100, Dave Chinner wrote: >>> On Fri, Dec 23, 2011 at 03:47:03PM -0600, Ben Myers wrote: >>>> >>>> Reviewed-by: Ben Myers >>>> >>>> Mark also reviewed this. >>>> >>>> Reviewed-by: Mark Tinguely >>> >>> Just a process note here: if Mark reviewed the code and is happy >>> with it, then he needs to send his reviewed-by tag himself. If he's >>> got concerns, then he needs to discuss them on the list with the >>> patch author, not just in private with you. If a person's questions >>> are not posted to the mailing list or posted by proxy and they >>> didn't aprticipate in discussions on the list, then there is no >>> evidence that the person ever reviewed the patch. Hence the tag has >>> no value because it is not verifiable. >> >> I tend to agree that it is important to discuss things openly on the >> list. Will make an effort to do more of this. >> >>> More importantly, tags are a semi-formal statement that a set of >>> actions has been taken by that person - see >>> Documentation/SubmittingPatches for the actions different tags >>> imply. Hence it is important the actions they imply are verifiable, >>> and it also reinforces the fact that they only have value when they >>> are issued by the email address (or a known alias) in the tag.... >> >> I don't see anything in SubmittingPatches that says the address on the >> From line not matching a tag is a dealbreaker, and I think that we >> should give credit where it is due. Mark did some work to review and >> understand this code in addition to his testing. > > But credit is not what the Reviewed-by tag means - it's a statement > of fact about actions performed by the reviewer. A partial review or > partaking in part of a review does not mean a person can put a > "reviewed-by" tag on a commit. An Acked-by my be appropriate in that > case (though I see them a worthless by their very nature), but > reviewed-by tags are not for "giving credit" to other people that > may have helped you. > > Further, keep in mind that I've only ever seen 2 emails from Mark, > so I have no idea who he is or what his capabilities are, so I do > not yet know how much to trust his reviews or testing. Until I've > spend some time interacting with him directly, I won't be able to > form those opinions, and so such tags start at the lower end of > value. They have even less value when they don't come from him and > he hasn't commented where I can see it. > >> I have him a call and >> asked him if I could add a 'Reviewed-by' to his 'Tested-by' because I >> was suprised he didn't... Next time I'll ask him to send it himself. > > So, perhaps he didn't consider what he did met all the criteria of a > reviewed-by tag? See what I mean about tags being worthless when sent > by proxy? > >> I'd like to point out that plenty of the conversation surrounding this >> pair of patches seems not to have made it to the list either. > > Happens all the time, especially on #xfs. The difference is, though, > that such conversations are not "reviews" or result in one person > sending reviewed-by tags for all the participants in the > conversation.... > > Cheers, > > Dave. Thank-you for the feedback. There are several good points made in this thread. --Mark Tinguely. From wkendall@sgi.com Tue Jan 3 15:15:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03LFcOU077674 for ; Tue, 3 Jan 2012 15:15:38 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0D066AC001; Tue, 3 Jan 2012 13:15:34 -0800 (PST) Received: from [128.162.233.117] (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id 8FF7770016C6; Tue, 3 Jan 2012 15:15:34 -0600 (CST) Message-ID: <4F036FF6.2080501@sgi.com> Date: Tue, 03 Jan 2012 15:15:34 -0600 From: Bill Kendall User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111108 Thunderbird/3.1.16 MIME-Version: 1.0 To: David Brown Cc: xfs@oss.sgi.com Subject: Re: xfsrestore: incorrect restore if file becomes a dir References: <20111226201856.GA3909@davidb.org> In-Reply-To: <20111226201856.GA3909@davidb.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 12/26/2011 02:18 PM, David Brown wrote: > http://oss.sgi.com/bugzilla/show_bug.cgi?id=915 > > I've had this happen again. It appears to be the case if between > incremental dumps, a file is deleted and a directory is created that > gets the same inode number. The restore leaves a file in place of the > directory. If the new directory has any contents, xfsrestore prints a > warning, and doesn't restore the subdirectory contents. > > Given the sparseness of inodes, this doesn't seem to occur all that > frequently, but I do have a couple of backups that exhibit the > behavior. If no one has any ideas, I'll start digging through > xfsrestore to see if I can figure out what is happening. I haven't looked at the relevant code, but it sounds like the inode generation number would also have to be the same in order for this to happen. Two inodes from separate backups are only considered to be the same file or directory if the inode number and the lower 12 bits of the inode generation number are the same. It might be possible to verify this is the case by turning up the message level during the restore. Bill From david@fromorbit.com Tue Jan 3 15:31:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03LVrbo079120 for ; Tue, 3 Jan 2012 15:31:53 -0600 X-ASG-Debug-ID: 1325626310-0222017aa41f7010001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id NMiXQbcHwII0bzoO for ; Tue, 03 Jan 2012 13:31:51 -0800 (PST) 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: AuIIAKxwA095LLu4/2dsb2JhbABCggWqW4EGgXIBAQU6HCMQCAMOCi4UJQMhE4gCtTwTi3wElQGSSQ Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail06.adl2.internode.on.net with ESMTP; 04 Jan 2012 08:01:49 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RiBxT-0003m0-Up; Wed, 04 Jan 2012 08:31:47 +1100 Date: Wed, 4 Jan 2012 08:31:47 +1100 From: Dave Chinner To: Bill Kendall Cc: David Brown , xfs@oss.sgi.com Subject: Re: xfsrestore: incorrect restore if file becomes a dir Message-ID: <20120103213147.GS23662@dastard> X-ASG-Orig-Subj: Re: xfsrestore: incorrect restore if file becomes a dir References: <20111226201856.GA3909@davidb.org> <4F036FF6.2080501@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F036FF6.2080501@sgi.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: 1325626310 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84943 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Tue, Jan 03, 2012 at 03:15:34PM -0600, Bill Kendall wrote: > On 12/26/2011 02:18 PM, David Brown wrote: > >http://oss.sgi.com/bugzilla/show_bug.cgi?id=915 > > > >I've had this happen again. It appears to be the case if between > >incremental dumps, a file is deleted and a directory is created that > >gets the same inode number. The restore leaves a file in place of the > >directory. If the new directory has any contents, xfsrestore prints a > >warning, and doesn't restore the subdirectory contents. > > > >Given the sparseness of inodes, this doesn't seem to occur all that > >frequently, but I do have a couple of backups that exhibit the > >behavior. If no one has any ideas, I'll start digging through > >xfsrestore to see if I can figure out what is happening. > > I haven't looked at the relevant code, but it sounds like the inode > generation number would also have to be the same in order for this > to happen. Two inodes from separate backups are only considered to > be the same file or directory if the inode number and the lower 12 > bits of the inode generation number are the same. Why does dump only use the lower twelve bits? The on-disk generation number is 32 bits and we use all of it (by way of random numbers) to distinguish between different inode generations. That sounds like something that needs to be fixed.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From bpm@sgi.com Tue Jan 3 15:53:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03LrmMX080438 for ; Tue, 3 Jan 2012 15:53:49 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id AD325304053; Tue, 3 Jan 2012 13:53:45 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 61F0E426DA7; Tue, 3 Jan 2012 15:53:45 -0600 (CST) Date: Tue, 3 Jan 2012 15:53:45 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 01/11] xfs: remove xfs_itruncate_data Message-ID: <20120103215345.GA6390@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200130.784802192@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200130.784802192@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hey Christoph, On Sun, Dec 18, 2011 at 03:00:04PM -0500, Christoph Hellwig wrote: > This wrapper isn't overly useful, not to say rather confusing. > > Around the call to xfs_itruncate_extents it does: > > - add tracing > - add a few asserts in debug builds > - conditionally update the inode size in two places > - log the inode > > Both the tracing and the inode logging can be moved to xfs_itruncate_extents > as they are useful for the attribute fork as well - in fact the attr code > already does an equivalent xfs_trans_log_inode call just after calling > xfs_itruncate_extents. > > The conditional size updates are a mess, and there > was no reason to do them in two places anyway, as the first one was > conditional on the inode having extents - but without extents we > xfs_itruncate_extents would be a no-op and the placement wouldn't matter > anyway. > > Instead move the size assignments and the asserts that make sense > to the callers that want it. > > As a side effect of this clean up xfs_setattr_size by introducing variables > for the old and new inode size, and moving the size updates into a common > place. > > Reviewed-by: Dave Chinner > Signed-off-by: Christoph Hellwig Looks good. I had some minor questions below. Reviewed-by: Ben Myers > --- > fs/xfs/xfs_attr.c | 4 - > fs/xfs/xfs_inode.c | 124 +++-------------------------------------------- > fs/xfs/xfs_inode.h | 2 > fs/xfs/xfs_iops.c | 47 +++++++++++------ > fs/xfs/xfs_qm_syscalls.c | 9 +++ > fs/xfs/xfs_trace.h | 4 - > fs/xfs/xfs_vnodeops.c | 17 +++++- > 7 files changed, 65 insertions(+), 142 deletions(-) > > Index: xfs/fs/xfs/xfs_attr.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_attr.c 2011-11-30 12:58:07.820044461 +0100 > +++ xfs/fs/xfs/xfs_attr.c 2011-11-30 12:58:51.519807719 +0100 > @@ -827,10 +827,6 @@ xfs_attr_inactive(xfs_inode_t *dp) > if (error) > goto out; > > - /* > - * Commit the last in the sequence of transactions. > - */ > - xfs_trans_log_inode(trans, dp, XFS_ILOG_CORE); > error = xfs_trans_commit(trans, XFS_TRANS_RELEASE_LOG_RES); > xfs_iunlock(dp, XFS_ILOCK_EXCL); > > Index: xfs/fs/xfs/xfs_inode.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.c 2011-11-30 12:58:07.830044408 +0100 > +++ xfs/fs/xfs/xfs_inode.c 2011-11-30 12:58:51.519807719 +0100 > @@ -1166,52 +1166,6 @@ xfs_ialloc( > } > > /* > - * Check to make sure that there are no blocks allocated to the > - * file beyond the size of the file. We don't check this for > - * files with fixed size extents or real time extents, but we > - * at least do it for regular files. > - */ > -#ifdef DEBUG > -STATIC void > -xfs_isize_check( > - struct xfs_inode *ip, > - xfs_fsize_t isize) > -{ > - struct xfs_mount *mp = ip->i_mount; > - xfs_fileoff_t map_first; > - int nimaps; > - xfs_bmbt_irec_t imaps[2]; > - int error; > - > - if (!S_ISREG(ip->i_d.di_mode)) > - return; > - > - if (XFS_IS_REALTIME_INODE(ip)) > - return; > - > - if (ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE) > - return; > - > - nimaps = 2; > - map_first = XFS_B_TO_FSB(mp, (xfs_ufsize_t)isize); > - /* > - * The filesystem could be shutting down, so bmapi may return > - * an error. > - */ > - error = xfs_bmapi_read(ip, map_first, > - (XFS_B_TO_FSB(mp, > - (xfs_ufsize_t)XFS_MAXIOFFSET(mp)) - map_first), > - imaps, &nimaps, XFS_BMAPI_ENTIRE); > - if (error) > - return; > - ASSERT(nimaps == 1); > - ASSERT(imaps[0].br_startblock == HOLESTARTBLOCK); > -} > -#else /* DEBUG */ > -#define xfs_isize_check(ip, isize) > -#endif /* DEBUG */ > - > -/* You've tossed xfs_isize_check in the round filer, but you didn't mention that in your commit message. Isn't this still useful code? > * Free up the underlying blocks past new_size. The new size must be smaller > * than the current size. This routine can be used both for the attribute and > * data fork, and does not modify the inode size, which is left to the caller. > @@ -1258,6 +1212,8 @@ xfs_itruncate_extents( > ASSERT(ip->i_itemp->ili_lock_flags == 0); > ASSERT(!XFS_NOT_DQATTACHED(mp, ip)); > > + trace_xfs_itruncate_extents_start(ip, new_size); > + > /* > * Since it is possible for space to become allocated beyond > * the end of the file (in a crash where the space is allocated > @@ -1325,6 +1281,14 @@ xfs_itruncate_extents( > goto out; > } > > + /* > + * Always re-log the inode so that our permanent transaction can keep > + * on rolling it forward in the log. > + */ > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); Oh.. This is why it's ok not to log the inode core in xfs_attr_inactive: it calls xfs_itruncate_extents()... > + > + trace_xfs_itruncate_extents_end(ip, new_size); > + > out: > *tpp = tp; > return error; > @@ -1338,74 +1302,6 @@ out_bmap_cancel: > goto out; > } > > -int > -xfs_itruncate_data( > - struct xfs_trans **tpp, > - struct xfs_inode *ip, > - xfs_fsize_t new_size) > -{ > - int error; > - > - trace_xfs_itruncate_data_start(ip, new_size); > - > - /* > - * The first thing we do is set the size to new_size permanently on > - * disk. This way we don't have to worry about anyone ever being able > - * to look at the data being freed even in the face of a crash. > - * What we're getting around here is the case where we free a block, it > - * is allocated to another file, it is written to, and then we crash. > - * If the new data gets written to the file but the log buffers > - * containing the free and reallocation don't, then we'd end up with > - * garbage in the blocks being freed. As long as we make the new_size > - * permanent before actually freeing any blocks it doesn't matter if > - * they get written to. > - */ > - if (ip->i_d.di_nextents > 0) { > - /* > - * If we are not changing the file size then do not update > - * the on-disk file size - we may be called from > - * xfs_inactive_free_eofblocks(). If we update the on-disk > - * file size and then the system crashes before the contents > - * of the file are flushed to disk then the files may be > - * full of holes (ie NULL files bug). > - */ > - if (ip->i_size != new_size) { > - ip->i_d.di_size = new_size; > - ip->i_size = new_size; > - xfs_trans_log_inode(*tpp, ip, XFS_ILOG_CORE); > - } > - } > - > - error = xfs_itruncate_extents(tpp, ip, XFS_DATA_FORK, new_size); > - if (error) > - return error; > - > - /* > - * If we are not changing the file size then do not update the on-disk > - * file size - we may be called from xfs_inactive_free_eofblocks(). > - * If we update the on-disk file size and then the system crashes > - * before the contents of the file are flushed to disk then the files > - * may be full of holes (ie NULL files bug). > - */ > - xfs_isize_check(ip, new_size); > - if (ip->i_size != new_size) { > - ip->i_d.di_size = new_size; > - ip->i_size = new_size; > - } > - > - ASSERT(new_size != 0 || ip->i_delayed_blks == 0); You didn't pull this assert along with > - ASSERT(new_size != 0 || ip->i_d.di_nextents == 0); this one into xfs_qm_scall_trunc_qfile. Was that intentional? > - > - /* > - * Always re-log the inode so that our permanent transaction can keep > - * on rolling it forward in the log. > - */ > - xfs_trans_log_inode(*tpp, ip, XFS_ILOG_CORE); > - > - trace_xfs_itruncate_data_end(ip, new_size); > - return 0; > -} > - > /* > * This is called when the inode's link count goes to 0. > * We place the on-disk inode on a list in the AGI. It > Index: xfs/fs/xfs/xfs_inode.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.h 2011-11-30 12:58:08.843372251 +0100 > +++ xfs/fs/xfs/xfs_inode.h 2011-11-30 12:58:51.523141034 +0100 > @@ -491,8 +491,6 @@ int xfs_ifree(struct xfs_trans *, xfs_i > struct xfs_bmap_free *); > int xfs_itruncate_extents(struct xfs_trans **, struct xfs_inode *, > int, xfs_fsize_t); > -int xfs_itruncate_data(struct xfs_trans **, struct xfs_inode *, > - xfs_fsize_t); > int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); > > void xfs_iext_realloc(xfs_inode_t *, int, int); > Index: xfs/fs/xfs/xfs_iops.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iops.c 2011-11-30 12:58:07.856710929 +0100 > +++ xfs/fs/xfs/xfs_iops.c 2011-11-30 12:58:51.523141034 +0100 > @@ -750,6 +750,7 @@ xfs_setattr_size( > struct xfs_mount *mp = ip->i_mount; > struct inode *inode = VFS_I(ip); > int mask = iattr->ia_valid; > + xfs_off_t oldsize, newsize; > struct xfs_trans *tp; > int error; > uint lock_flags; > @@ -777,11 +778,13 @@ xfs_setattr_size( > lock_flags |= XFS_IOLOCK_EXCL; > xfs_ilock(ip, lock_flags); > > + oldsize = ip->i_size; > + newsize = iattr->ia_size; > + > /* > * Short circuit the truncate case for zero length files. > */ > - if (iattr->ia_size == 0 && > - ip->i_size == 0 && ip->i_d.di_nextents == 0) { > + if (newsize == 0 && oldsize == 0 && ip->i_d.di_nextents == 0) { > if (!(mask & (ATTR_CTIME|ATTR_MTIME))) > goto out_unlock; > > @@ -807,14 +810,14 @@ xfs_setattr_size( > * the inode to the transaction, because the inode cannot be unlocked > * once it is a part of the transaction. > */ > - if (iattr->ia_size > ip->i_size) { > + if (newsize > oldsize) { > /* > * Do the first part of growing a file: zero any data in the > * last block that is beyond the old EOF. We need to do this > * before the inode is joined to the transaction to modify > * i_size. > */ > - error = xfs_zero_eof(ip, iattr->ia_size, ip->i_size); > + error = xfs_zero_eof(ip, newsize, oldsize); > if (error) > goto out_unlock; > } > @@ -833,8 +836,8 @@ xfs_setattr_size( > * here and prevents waiting for other data not within the range we > * care about here. > */ > - if (ip->i_size != ip->i_d.di_size && iattr->ia_size > ip->i_d.di_size) { > - error = xfs_flush_pages(ip, ip->i_d.di_size, iattr->ia_size, 0, > + if (oldsize != ip->i_d.di_size && newsize > ip->i_d.di_size) { > + error = xfs_flush_pages(ip, ip->i_d.di_size, newsize, 0, > FI_NONE); > if (error) > goto out_unlock; > @@ -845,8 +848,7 @@ xfs_setattr_size( > */ > inode_dio_wait(inode); > > - error = -block_truncate_page(inode->i_mapping, iattr->ia_size, > - xfs_get_blocks); > + error = -block_truncate_page(inode->i_mapping, newsize, xfs_get_blocks); > if (error) > goto out_unlock; > > @@ -857,7 +859,7 @@ xfs_setattr_size( > if (error) > goto out_trans_cancel; > > - truncate_setsize(inode, iattr->ia_size); > + truncate_setsize(inode, newsize); > > commit_flags = XFS_TRANS_RELEASE_LOG_RES; > lock_flags |= XFS_ILOCK_EXCL; > @@ -876,19 +878,30 @@ xfs_setattr_size( > * these flags set. For all other operations the VFS set these flags > * explicitly if it wants a timestamp update. > */ > - if (iattr->ia_size != ip->i_size && > - (!(mask & (ATTR_CTIME | ATTR_MTIME)))) { > + if (newsize != oldsize && (!(mask & (ATTR_CTIME | ATTR_MTIME)))) { > iattr->ia_ctime = iattr->ia_mtime = > current_fs_time(inode->i_sb); > mask |= ATTR_CTIME | ATTR_MTIME; > } > > - if (iattr->ia_size > ip->i_size) { > - ip->i_d.di_size = iattr->ia_size; > - ip->i_size = iattr->ia_size; > - } else if (iattr->ia_size <= ip->i_size || > - (iattr->ia_size == 0 && ip->i_d.di_nextents)) { > - error = xfs_itruncate_data(&tp, ip, iattr->ia_size); > + /* > + * The first thing we do is set the size to new_size permanently on > + * disk. This way we don't have to worry about anyone ever being able > + * to look at the data being freed even in the face of a crash. > + * What we're getting around here is the case where we free a block, it > + * is allocated to another file, it is written to, and then we crash. > + * If the new data gets written to the file but the log buffers > + * containing the free and reallocation don't, then we'd end up with > + * garbage in the blocks being freed. As long as we make the new size > + * permanent before actually freeing any blocks it doesn't matter if > + * they get written to. > + */ > + ip->i_d.di_size = newsize; > + ip->i_size = newsize; > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > + > + if (newsize <= oldsize) { > + error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, newsize); > if (error) > goto out_trans_abort; This newsize/oldsize section is really a nice cleanup. > > Index: xfs/fs/xfs/xfs_qm_syscalls.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_qm_syscalls.c 2011-11-30 12:58:07.866710876 +0100 > +++ xfs/fs/xfs/xfs_qm_syscalls.c 2011-11-30 12:58:51.523141034 +0100 > @@ -31,6 +31,7 @@ > #include "xfs_mount.h" > #include "xfs_bmap_btree.h" > #include "xfs_inode.h" > +#include "xfs_inode_item.h" > #include "xfs_itable.h" > #include "xfs_bmap.h" > #include "xfs_rtalloc.h" > @@ -263,13 +264,19 @@ xfs_qm_scall_trunc_qfile( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, 0); > > - error = xfs_itruncate_data(&tp, ip, 0); > + ip->i_d.di_size = 0; > + ip->i_size = 0; > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > + > + error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); It it worth a comment that you log the size here because of the possibility of another file being allocated these extents in the face of a crash? > if (error) { > xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | > XFS_TRANS_ABORT); > goto out_unlock; > } > > + ASSERT(ip->i_d.di_nextents == 0); > + > xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); > > Index: xfs/fs/xfs/xfs_trace.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_trace.h 2011-11-30 12:58:07.876710822 +0100 > +++ xfs/fs/xfs/xfs_trace.h 2011-11-30 12:58:51.523141034 +0100 > @@ -1090,8 +1090,8 @@ DECLARE_EVENT_CLASS(xfs_itrunc_class, > DEFINE_EVENT(xfs_itrunc_class, name, \ > TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \ > TP_ARGS(ip, new_size)) > -DEFINE_ITRUNC_EVENT(xfs_itruncate_data_start); > -DEFINE_ITRUNC_EVENT(xfs_itruncate_data_end); > +DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start); > +DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end); > > TRACE_EVENT(xfs_pagecache_inval, > TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish), > Index: xfs/fs/xfs/xfs_vnodeops.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_vnodeops.c 2011-11-30 12:58:07.893377397 +0100 > +++ xfs/fs/xfs/xfs_vnodeops.c 2011-11-30 12:58:51.526474350 +0100 > @@ -226,7 +226,14 @@ xfs_free_eofblocks( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, 0); > > - error = xfs_itruncate_data(&tp, ip, ip->i_size); > + /* > + * Do not update the on-disk file size. If we update the > + * on-disk file size and then the system crashes before the > + * contents of the file are flushed to disk then the files > + * may be full of holes (ie NULL files bug). > + */ > + error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, > + ip->i_size); > if (error) { > /* > * If we get an error at this point we simply don't > @@ -670,13 +677,19 @@ xfs_inactive( > xfs_ilock(ip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, ip, 0); > > - error = xfs_itruncate_data(&tp, ip, 0); > + ip->i_d.di_size = 0; > + ip->i_size = 0; > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); Maybe a comment here too? > + > + error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); > if (error) { > xfs_trans_cancel(tp, > XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT); > xfs_iunlock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); > return VN_INACTIVE_CACHE; > } > + > + ASSERT(ip->i_d.di_nextents == 0); > } else if (S_ISLNK(ip->i_d.di_mode)) { > > /* > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From wkendall@sgi.com Tue Jan 3 16:43:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03Mhq88084264 for ; Tue, 3 Jan 2012 16:43:52 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3328BAC004; Tue, 3 Jan 2012 14:43:49 -0800 (PST) Received: from [128.162.233.117] (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id C0D71700072C; Tue, 3 Jan 2012 16:43:48 -0600 (CST) Message-ID: <4F0384A4.6000505@sgi.com> Date: Tue, 03 Jan 2012 16:43:48 -0600 From: Bill Kendall User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111108 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner Cc: David Brown , xfs@oss.sgi.com Subject: Re: xfsrestore: incorrect restore if file becomes a dir References: <20111226201856.GA3909@davidb.org> <4F036FF6.2080501@sgi.com> <20120103213147.GS23662@dastard> In-Reply-To: <20120103213147.GS23662@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/03/2012 03:31 PM, Dave Chinner wrote: > On Tue, Jan 03, 2012 at 03:15:34PM -0600, Bill Kendall wrote: >> On 12/26/2011 02:18 PM, David Brown wrote: >>> http://oss.sgi.com/bugzilla/show_bug.cgi?id=915 >>> >>> I've had this happen again. It appears to be the case if between >>> incremental dumps, a file is deleted and a directory is created that >>> gets the same inode number. The restore leaves a file in place of the >>> directory. If the new directory has any contents, xfsrestore prints a >>> warning, and doesn't restore the subdirectory contents. >>> >>> Given the sparseness of inodes, this doesn't seem to occur all that >>> frequently, but I do have a couple of backups that exhibit the >>> behavior. If no one has any ideas, I'll start digging through >>> xfsrestore to see if I can figure out what is happening. >> >> I haven't looked at the relevant code, but it sounds like the inode >> generation number would also have to be the same in order for this >> to happen. Two inodes from separate backups are only considered to >> be the same file or directory if the inode number and the lower 12 >> bits of the inode generation number are the same. > > Why does dump only use the lower twelve bits? The on-disk generation > number is 32 bits and we use all of it (by way of random numbers) to > distinguish between different inode generations. That sounds like > something that needs to be fixed.... I don't know the history there, but it dates back to when the generation number was not randomly initialized. So an inode had to be reused 4,096 times for a collision to occur. With the current scheme (initially random, then incremented) there would be cases where a collision happens more frequently. I agree, it should be changed. Bill From david@fromorbit.com Tue Jan 3 17:16:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03NG99K088739 for ; Tue, 3 Jan 2012 17:16:09 -0600 X-ASG-Debug-ID: 1325632566-005fe612a7170440001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id YlMVVUILCsz05CvP for ; Tue, 03 Jan 2012 15:16:06 -0800 (PST) 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: AuIIAHmJA095LLu4/2dsb2JhbABDggWqW4EGgXIBAQQBOhwjBQsIAw4KLhQlAyETh3oItUkTi3wElQGSSQ Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail06.adl2.internode.on.net with ESMTP; 04 Jan 2012 09:46:05 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RiDaO-00046j-3K; Wed, 04 Jan 2012 10:16:04 +1100 Date: Wed, 4 Jan 2012 10:16:04 +1100 From: Dave Chinner To: Bill Kendall Cc: David Brown , xfs@oss.sgi.com Subject: Re: xfsrestore: incorrect restore if file becomes a dir Message-ID: <20120103231604.GT23662@dastard> X-ASG-Orig-Subj: Re: xfsrestore: incorrect restore if file becomes a dir References: <20111226201856.GA3909@davidb.org> <4F036FF6.2080501@sgi.com> <20120103213147.GS23662@dastard> <4F0384A4.6000505@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0384A4.6000505@sgi.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: 1325632566 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84949 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Tue, Jan 03, 2012 at 04:43:48PM -0600, Bill Kendall wrote: > On 01/03/2012 03:31 PM, Dave Chinner wrote: > >On Tue, Jan 03, 2012 at 03:15:34PM -0600, Bill Kendall wrote: > >>On 12/26/2011 02:18 PM, David Brown wrote: > >>>http://oss.sgi.com/bugzilla/show_bug.cgi?id=915 > >>> > >>>I've had this happen again. It appears to be the case if between > >>>incremental dumps, a file is deleted and a directory is created that > >>>gets the same inode number. The restore leaves a file in place of the > >>>directory. If the new directory has any contents, xfsrestore prints a > >>>warning, and doesn't restore the subdirectory contents. > >>> > >>>Given the sparseness of inodes, this doesn't seem to occur all that > >>>frequently, but I do have a couple of backups that exhibit the > >>>behavior. If no one has any ideas, I'll start digging through > >>>xfsrestore to see if I can figure out what is happening. > >> > >>I haven't looked at the relevant code, but it sounds like the inode > >>generation number would also have to be the same in order for this > >>to happen. Two inodes from separate backups are only considered to > >>be the same file or directory if the inode number and the lower 12 > >>bits of the inode generation number are the same. > > > >Why does dump only use the lower twelve bits? The on-disk generation > >number is 32 bits and we use all of it (by way of random numbers) to > >distinguish between different inode generations. That sounds like > >something that needs to be fixed.... > > I don't know the history there, but it dates back to when the generation > number was not randomly initialized. So an inode had to be reused 4,096 > times for a collision to occur. That's kind of what I thought. But even so, with the way XFS reuses inodes (especially for short term temporary files), those 12 bits can eaily be burnt through in under a second.... > With the current scheme (initially > random, then incremented) there would be cases where a collision > happens more frequently. I agree, it should be changed. Is that difficult to do? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 3 17:45:01 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q03Nj0FA094564 for ; Tue, 3 Jan 2012 17:45:00 -0600 X-ASG-Debug-ID: 1325634297-00a9eb19d4196cb0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id HKdv8gJeD2Qg2OgF for ; Tue, 03 Jan 2012 15:44:57 -0800 (PST) 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: AuAIAHmQA095LLu4/2dsb2JhbABDggWqW4EGgjMcIxhdJQM0vU4TiGKDGgSVAZJJ Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail06.adl2.internode.on.net with ESMTP; 04 Jan 2012 10:14:57 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RiE2J-000497-Sa; Wed, 04 Jan 2012 10:44:55 +1100 Date: Wed, 4 Jan 2012 10:44:55 +1100 From: Dave Chinner To: lsf-pc@lists.linux-foundation.org Cc: linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Subject: [LSF/MM TOPIC] [ATTEND] xfstests: what do we need to do to make it better? Message-ID: <20120103234455.GU23662@dastard> X-ASG-Orig-Subj: [LSF/MM TOPIC] [ATTEND] xfstests: what do we need to do to make it better? MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1325634297 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84952 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Given that more people are using xfstests and developing tests, we need to consider how to make it friendlier to hack on. The current structure of the tree is difficult to work with, the way tests are organised and numbered make it difficult to co-ordinate new tests and results in patch conflicts, etc. We also see problems arising from people not really understanding how the xfstests harness is designed and how it really is supposed to work, so an overview of the underlying principles of operation would probably be helpful to a lot of people. It will also save review and rework time if we can avoid having people make the same mistakes the first time they submit tests.... I'd also like to discuss some potential infrastructure changes to make it easier to add new tests without conflicts with others developing new tests. Some of the ideas Christoph and I have previously tossed around include: - break tests up into groups in their own subdirectories. e.g. generic tests, xfs/ext4/btrfs specific tests, stress tests, performance tests, large FS tests, etc - change the way we define groups of tests so we don't have a single registry of tests and their groups - allow different naming of tests, such as desciptive text names rather than just plain numbers - allow duplicate test names in different groups I'm sure that other users of xfstests will have some ideas on how to improve it for the way they run it, so I'd like to gather and incorporate these ideas into any structural change we make to xfstests. Cheers, Dave. -- Dave Chinner david@fromorbit.com From ygq51@hotmail.com Tue Jan 3 20:20:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q042KZl5108285 for ; Tue, 3 Jan 2012 20:20:35 -0600 X-ASG-Debug-ID: 1325643633-00a9eb19d31a12f0001-w1Z2WR Received: from snt0-omc1-s22.snt0.hotmail.com (snt0-omc1-s22.snt0.hotmail.com [65.55.90.33]) by cuda.sgi.com with ESMTP id CZv8SWZ9g3Xcoyeo for ; Tue, 03 Jan 2012 18:20:33 -0800 (PST) X-Barracuda-Envelope-From: ygq51@hotmail.com X-Barracuda-Apparent-Source-IP: 65.55.90.33 Received: from SNT135-W48 ([65.55.90.7]) by snt0-omc1-s22.snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 3 Jan 2012 18:20:32 -0800 Message-ID: Content-Type: multipart/alternative; boundary="_476c5d42-f273-4573-bc02-865d7a977ed1_" X-Originating-IP: [60.191.94.124] From: yangguoquan To: CC: , Subject: RE: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again Date: Wed, 4 Jan 2012 10:20:31 +0800 X-ASG-Orig-Subj: RE: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again Importance: Normal In-Reply-To: <20120102150201.GB31110@infradead.org> References: <1276846374-23916-1-git-send-email-david@fromorbit.com>,,<20111123143045.GA20892@infradead.org>,<20111128111947.GA26454@infradead.org>,,,<20120102150201.GB31110@infradead.org> MIME-Version: 1.0 X-OriginalArrivalTime: 04 Jan 2012 02:20:32.0390 (UTC) FILETIME=[6F515A60:01CCCA87] X-Barracuda-Connect: snt0-omc1-s22.snt0.hotmail.com[65.55.90.33] X-Barracuda-Start-Time: 1325643633 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84962 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 BSF_SC0_SA085 Custom Rule SA085 X-Virus-Status: Clean --_476c5d42-f273-4573-bc02-865d7a977ed1_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit Yes, They are mount points. /dev/mapper/storage_pool-testnfs00 on /mnt/storage_pool/testnfs00 type xfs (rw) /dev/mapper/storage_pool-testnfs01 on /mnt/storage_pool/testnfs01 type xfs (rw) /dev/mapper/storage_pool-testnfs02 on /mnt/storage_pool/testnfs02 type xfs (rw) /dev/mapper/storage_pool-testnfs03 on /mnt/storage_pool/testnfs03 type xfs (rw) /dev/mapper/storage_pool-testnfs04 on /mnt/storage_pool/testnfs04 type xfs (rw) /dev/mapper/storage_pool-testnfs05 on /mnt/storage_pool/testnfs05 type xfs (rw) /dev/mapper/storage_pool-testnfs06 on /mnt/storage_pool/testnfs06 type xfs (rw) /dev/mapper/storage_pool-testnfs07 on /mnt/storage_pool/testnfs07 type xfs (rw) /dev/mapper/storage_pool-testnfs08 on /mnt/storage_pool/testnfs08 type xfs (rw) /dev/mapper/storage_pool-testnfs09 on /mnt/storage_pool/testnfs09 type xfs (rw) > Date: Mon, 2 Jan 2012 10:02:01 -0500 > From: hch@infradead.org > To: ygq51@hotmail.com > Subject: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again > CC: hch@infradead.org; linux-xfs@oss.sgi.com; pengxihan@gmail.com > > On Thu, Dec 29, 2011 at 05:19:55PM +0800, yangguoquan wrote: > > > > NFS Stale File Handle Again, But this happens when mount operation not during accessing file or directory. > > > > My /etc/exports file: > > > > /mnt/storage_pool/testnfs00 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs01 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs02 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs03 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs04 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs05 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs06 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs07 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs08 *(rw,sync,no_root_squash) > > /mnt/storage_pool/testnfs09 *(rw,sync,no_root_squash) > > Are these mount points? If not take a look at > > http://xfs.org/index.php/XFS_FAQ#Q:_Why_doesn.27t_NFS-exporting_subdirectories_of_inode64-mounted_filesystem_work.3F > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --_476c5d42-f273-4573-bc02-865d7a977ed1_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: 8bit
Yes, They are mount points.
 
/dev/mapper/storage_pool-testnfs00 on /mnt/storage_pool/testnfs00 type xfs (rw)
/dev/mapper/storage_pool-testnfs01 on /mnt/storage_pool/testnfs01 type xfs (rw)
/dev/mapper/storage_pool-testnfs02 on /mnt/storage_pool/testnfs02 type xfs (rw)
/dev/mapper/storage_pool-testnfs03 on /mnt/storage_pool/testnfs03 type xfs (rw)
/dev/mapper/storage_pool-testnfs04 on /mnt/storage_pool/testnfs04 type xfs (rw)
/dev/mapper/storage_pool-testnfs05 on /mnt/storage_pool/testnfs05 type xfs (rw)
/dev/mapper/storage_pool-testnfs06 on /mnt/storage_pool/testnfs06 type xfs (rw)
/dev/mapper/storage_pool-testnfs07 on /mnt/storage_pool/testnfs07 type xfs (rw)
/dev/mapper/storage_pool-testnfs08 on /mnt/storage_pool/testnfs08 type xfs (rw)
/dev/mapper/storage_pool-testnfs09 on /mnt/storage_pool/testnfs09 type xfs (rw)
 
> Date: Mon, 2 Jan 2012 10:02:01 -0500
> From: hch@infradead.org
> To: ygq51@hotmail.com
> Subject: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again
> CC: hch@infradead.org; linux-xfs@oss.sgi.com; pengxihan@gmail.com
>
> On Thu, Dec 29, 2011 at 05:19:55PM +0800, yangguoquan wrote:
> >
> > NFS Stale File Handle Again, But this happens when mount operation not during accessing file or directory.
> >
> > My /etc/exports file:
> >
> > /mnt/storage_pool/testnfs00 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs01 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs02 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs03 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs04 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs05 *(rw,sync,no_root_squas h)
> > /mnt/storage_pool/testnfs06 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs07 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs08 *(rw,sync,no_root_squash)
> > /mnt/storage_pool/testnfs09 *(rw,sync,no_root_squash)
>
> Are these mount points? If not take a look at
>
> http://xfs.org/index.php/XFS_FAQ#Q:_Why_doesn.27t_NFS-exporting_subdirectories_of_inode64-mounted_filesystem_work.3F
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
--_476c5d42-f273-4573-bc02-865d7a977ed1_-- From kernel.vijay@gmail.com Wed Jan 4 01:56:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q047uAuW122125 for ; Wed, 4 Jan 2012 01:56:10 -0600 X-ASG-Debug-ID: 1325663769-0222017aa6231290001-NocioJ Received: from mail-tul01m020-f181.google.com (mail-tul01m020-f181.google.com [209.85.214.181]) by cuda.sgi.com with ESMTP id iPg7cx04j68IOToA for ; Tue, 03 Jan 2012 23:56:09 -0800 (PST) X-Barracuda-Envelope-From: kernel.vijay@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.214.181 Received: by obbup6 with SMTP id up6so15709130obb.26 for ; Tue, 03 Jan 2012 23:56:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=WBM51gvjEcNkFBK5Dy9gIbSWNw+D2VLcLSy3TRTft2Y=; b=OvsZZBt3ElRFExO2SfYpYmoextAb5QivIVQgkHEu+vMxWB/I0D+rWTqmSdUvlhJptn q6uSgndqSPhQbKX+3CwkpC1rQ8qjzWXw0hY4Fl7gVXIMFvTI0xvB5ejMW0fcKwnu0vdJ 6CVUFbT81PJ7d8hpmz7j+0cDSx/a7q+4CAgYc= MIME-Version: 1.0 Received: by 10.182.73.71 with SMTP id j7mr47060205obv.55.1325663769318; Tue, 03 Jan 2012 23:56:09 -0800 (PST) Received: by 10.182.204.100 with HTTP; Tue, 3 Jan 2012 23:56:09 -0800 (PST) In-Reply-To: <20111229215412.GM23662@dastard> References: <20111229215412.GM23662@dastard> Date: Wed, 4 Jan 2012 13:26:09 +0530 Message-ID: Subject: Re: Conversion Routine Help From: Vijay Chauhan X-ASG-Orig-Subj: Re: Conversion Routine Help To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-tul01m020-f181.google.com[209.85.214.181] X-Barracuda-Start-Time: 1325663769 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84985 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 X-Virus-Status: Clean Hi, >> >> Can anyone please provide me links about the basic explanations of XFS >> basic blocks and filesystem logical block mapping and conversion >> routines? >> >> I tried to understand from code but its not clear to me: >> #define XFS_FSB_TO_BB(mp,fsbno) ((fsbno) << (mp)->m_blkbb_log) > > Convert FileSystem Blocks to Basic Blocks > > FSBs are defined at mkfs time, BBs are always 512 bytes. > >> #define XFS_BB_TO_FSB(mp,bb) =A0 =A0\ >> =A0 =A0 =A0 =A0(((bb) + (XFS_FSB_TO_BB(mp,1) - 1)) >> (mp)->m_blkbb_log) > > Convert BB to FSB, rounding up to the next FSB > >> #define XFS_BB_TO_FSBT(mp,bb) =A0 ((bb) >> (mp)->m_blkbb_log) > > Convert BB to FSB, rounding down to the FSB containing the BB > >> #define XFS_BB_FSB_OFFSET(mp,bb) ((bb) & ((mp)->m_bsize - 1)) > > Offset of the give BB within a FSB. e.g. if FSB =3D 4k =3D 8BB, then > "bb =3D 5" would return 5, "bb =3D 63" would return 7... > >> lets consider the last one: >> #define XFS_BB_FSB_OFFSET(mp,bb) ((bb) & ((mp)->m_bsize - 1)) >> >> if basic block (512 byte size) number is 7 and m_bsize is 12 > > m_bsize is the FSB in BB, which will always be a power of 2. > >> (considering FS block size 4096), then this will return 3 [e.g. ( 7 & > > in that case, m_bsize =3D 8. > >> 11) ]. then what does 3 means here? what offset value it is denoting? > > It's the offset of the BB within the first partial FSB in the range > given. This was once used for sub-block zeroing needed by direct IO, > but is now stale code as the generic DIO layer does this zeroing. > Care to submit a patch to remove that macro? > Thanks Dave. I understand. I am newbie and learning. Sure, i'll create the patch but before let me try out further in the code. Thanks. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 03:27:34 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q049RWh3124919 for ; Wed, 4 Jan 2012 03:27:34 -0600 X-ASG-Debug-ID: 1325669249-005fe612a719cef0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 46KCg0FuoMvgI0oT; Wed, 04 Jan 2012 01:27:29 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiN84-000825-Qe; Wed, 04 Jan 2012 09:27:28 +0000 Date: Wed, 4 Jan 2012 04:27:28 -0500 From: Christoph Hellwig To: Ben Myers Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH 01/11] xfs: remove xfs_itruncate_data Message-ID: <20120104092728.GA27447@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 01/11] xfs: remove xfs_itruncate_data References: <20111218200003.557507716@bombadil.infradead.org> <20111218200130.784802192@bombadil.infradead.org> <20120103215345.GA6390@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120103215345.GA6390@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325669249 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84991 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean > You've tossed xfs_isize_check in the round filer, but you didn't mention > that in your commit message. Isn't this still useful code? It falls under the removal of a few asserts in the debug build. I don't think it's a useful check. > > - if (ip->i_size != new_size) { > > - ip->i_d.di_size = new_size; > > - ip->i_size = new_size; > > - } > > - > > - ASSERT(new_size != 0 || ip->i_delayed_blks == 0); > > You didn't pull this assert along with > > > - ASSERT(new_size != 0 || ip->i_d.di_nextents == 0); > > this one into xfs_qm_scall_trunc_qfile. Was that intentional? We never have delayed blocks on the quota files, so there's not much of a point to have this assert. > > - error = xfs_itruncate_data(&tp, ip, 0); > > + ip->i_d.di_size = 0; > > + ip->i_size = 0; > > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > > + > > + error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); > > It it worth a comment that you log the size here because of the > possibility of another file being allocated these extents in the face of > a crash? I don't think there's a point in duplicating that comment. Eventually I'll see if we can simply use the existing truncate code for the quota files anyway. > > - error = xfs_itruncate_data(&tp, ip, 0); > > + ip->i_d.di_size = 0; > > + ip->i_size = 0; > > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > > Maybe a comment here too? We log inodes in tons of places without adding a comment ever time. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 03:31:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q049V7DH125055 for ; Wed, 4 Jan 2012 03:31:07 -0600 X-ASG-Debug-ID: 1325669465-00a9eb19d31c7180001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id gI60zhZuqUrJgee5 for ; Wed, 04 Jan 2012 01:31:05 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiNBZ-0000YW-1J; Wed, 04 Jan 2012 09:31:05 +0000 Message-Id: <20120104093104.971865222@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 04 Jan 2012 04:30:16 -0500 From: Christoph Hellwig To: stable@vger.kernel.org, xfs@oss.sgi.com Subject: [PATCH 1/2] xfs: log the inode in ->write_inode calls for kupdate References: <20120104093015.056917499@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 1/2] xfs: log the inode in ->write_inode calls for kupdate Content-Disposition: inline; filename=xfs-fix-kupdate X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325669465 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84990 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean If the writeback code writes back an inode because it has expired we currently use the non-blockin ->write_inode path. This means any inode that is pinned is skipped. With delayed logging and a workload that has very little log traffic otherwise it is very likely that an inode that gets constantly written to is always pinned, and thus we keep refusing to write it. The VM writeback code at that point redirties it and doesn't try to write it again for another 30 seconds. This means under certain scenarious time based metadata writeback never happens. Fix this by calling into xfs_log_inode for kupdate in addition to data integrity syncs, and thus transfer the inode to the log ASAP. Signed-off-by: Christoph Hellwig Index: xfs/fs/xfs/xfs_super.c =================================================================== --- xfs.orig/fs/xfs/xfs_super.c 2011-12-14 05:33:07.193262189 -0800 +++ xfs/fs/xfs/xfs_super.c 2011-12-14 05:38:56.108038623 -0800 @@ -905,7 +884,7 @@ xfs_fs_write_inode( if (!ip->i_update_core) return 0; - if (wbc->sync_mode == WB_SYNC_ALL) { + if (wbc->sync_mode == WB_SYNC_ALL || wbc->for_kupdate) { /* * Make sure the inode has made it it into the log. Instead * of forcing it all the way to stable storage using a From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 03:31:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q049V7Tf125056 for ; Wed, 4 Jan 2012 03:31:07 -0600 X-ASG-Debug-ID: 1325669465-00a9eb19d51c7190001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Fy1USyLfh30kbjMf for ; Wed, 04 Jan 2012 01:31:05 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiNBY-0000Xw-Pl; Wed, 04 Jan 2012 09:31:04 +0000 Message-Id: <20120104093015.056917499@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 04 Jan 2012 04:30:15 -0500 From: Christoph Hellwig To: stable@vger.kernel.org, xfs@oss.sgi.com Subject: [PATCH 0/2] XFS updates for 3.0-stable X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-ASG-Orig-Subj: [PATCH 0/2] XFS updates for 3.0-stable X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325669465 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84990 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 03:31:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q049V7f7125057 for ; Wed, 4 Jan 2012 03:31:07 -0600 X-ASG-Debug-ID: 1325669465-00a9eb19d61c7190001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id s0IZeGDudwyEcfPb for ; Wed, 04 Jan 2012 01:31:05 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiNBZ-0000Z1-7J; Wed, 04 Jan 2012 09:31:05 +0000 Message-Id: <20120104093105.180405280@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 04 Jan 2012 04:30:17 -0500 From: Christoph Hellwig To: stable@vger.kernel.org, xfs@oss.sgi.com Subject: [PATCH 2/2] xfs: log all dirty inodes in xfs_fs_sync_fs References: <20120104093015.056917499@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 2/2] xfs: log all dirty inodes in xfs_fs_sync_fs Content-Disposition: inline; filename=xfs-fix-sync X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325669465 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84990 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean Since Linux 2.6.36 the writeback code has introduces various measures for live lock prevention during sync(). Unfortunately some of these are actively harmful for the XFS model, where the inode gets marked dirty for metadata from the data I/O handler. The older_than_this checks that are now more strictly enforced since writeback: avoid livelocking WB_SYNC_ALL writeback by only calling into __writeback_inodes_sb and thus only sampling the current cut off time once. But on a slow enough devices the previous asynchronous sync pass might not have fully completed yet, and thus XFS might mark metadata dirty only after that sampling of the cut off time for the blocking pass already happened. I have not myself reproduced this myself on a real system, but by introducing artificial delay into the XFS I/O completion workqueues it can be reproduced easily. Fix this by iterating over all XFS inodes in ->sync_fs and log all that are dirty. This might log inode that only got redirtied after the previous pass, but given how cheap delayed logging of inodes is it isn't a major concern for performance. Signed-off-by: Christoph Hellwig Index: xfs/fs/xfs/xfs_sync.c =================================================================== --- xfs.orig/fs/xfs/xfs_sync.c 2011-12-18 23:35:30.909834592 +0100 +++ xfs/fs/xfs/xfs_sync.c 2011-12-18 23:36:40.823167508 +0100 @@ -336,6 +336,32 @@ xfs_sync_fsdata( return error; } +int +xfs_log_dirty_inode( + struct xfs_inode *ip, + struct xfs_perag *pag, + int flags) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + int error; + + if (!ip->i_update_core) + return 0; + + tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); + error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); + if (error) { + xfs_trans_cancel(tp, 0); + return error; + } + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); + return xfs_trans_commit(tp, 0); +} + /* * When remounting a filesystem read-only or freezing the filesystem, we have * two phases to execute. This first phase is syncing the data before we @@ -359,6 +385,16 @@ xfs_quiesce_data( { int error, error2 = 0; + /* + * Log all pending size and timestamp updates. The vfs writeback + * code is supposed to do this, but due to its overagressive + * livelock detection it will skip inodes where appending writes + * were written out in the first non-blocking sync phase if their + * completion took long enough that it happened after taking the + * timestamp for the cut-off in the blocking phase. + */ + xfs_inode_ag_iterator(mp, xfs_log_dirty_inode, 0); + xfs_qm_sync(mp, SYNC_TRYLOCK); xfs_qm_sync(mp, SYNC_WAIT); Index: xfs/fs/xfs/xfs_sync.h =================================================================== --- xfs.orig/fs/xfs/xfs_sync.h 2011-12-18 16:47:25.000000000 +0100 +++ xfs/fs/xfs/xfs_sync.h 2011-12-18 23:36:45.119834149 +0100 @@ -34,6 +34,8 @@ void xfs_quiesce_attr(struct xfs_mount * void xfs_flush_inodes(struct xfs_inode *ip); +int xfs_log_dirty_inode(struct xfs_inode *ip, struct xfs_perag *pag, int flags); + int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); int xfs_reclaim_inodes_count(struct xfs_mount *mp); void xfs_reclaim_inodes_nr(struct xfs_mount *mp, int nr_to_scan); Index: xfs/fs/xfs/xfs_super.c =================================================================== --- xfs.orig/fs/xfs/xfs_super.c 2011-12-18 23:35:42.863167854 +0100 +++ xfs/fs/xfs/xfs_super.c 2011-12-18 23:36:42.963167495 +0100 @@ -869,27 +869,6 @@ xfs_fs_dirty_inode( } STATIC int -xfs_log_inode( - struct xfs_inode *ip) -{ - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; - int error; - - tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); - error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); - if (error) { - xfs_trans_cancel(tp, 0); - return error; - } - - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - return xfs_trans_commit(tp, 0); -} - -STATIC int xfs_fs_write_inode( struct inode *inode, struct writeback_control *wbc) @@ -902,8 +881,6 @@ xfs_fs_write_inode( if (XFS_FORCED_SHUTDOWN(mp)) return -XFS_ERROR(EIO); - if (!ip->i_update_core) - return 0; if (wbc->sync_mode == WB_SYNC_ALL || wbc->for_kupdate) { /* @@ -913,11 +890,14 @@ xfs_fs_write_inode( * ->sync_fs call do that for thus, which reduces the number * of synchronous log forces dramatically. */ - error = xfs_log_inode(ip); + error = xfs_log_dirty_inode(ip, NULL, 0); if (error) goto out; return 0; } else { + if (!ip->i_update_core) + return 0; + /* * We make this non-blocking if the inode is contended, return * EAGAIN to indicate to the caller that they did not succeed. From ideaslogisticasbounce@yahoo.com.mx Wed Jan 4 04:46:54 2012 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Akr88128586 for ; Wed, 4 Jan 2012 04:46:53 -0600 X-ASG-Debug-ID: 1325674005-0222017aa4243ae0001-w1Z2WR Received: from server.elcumpa.com (server.elcumpa.com [67.23.240.32]) by cuda.sgi.com with ESMTP id tZVR70GNYurKJkB0 for ; Wed, 04 Jan 2012 02:46:46 -0800 (PST) X-Barracuda-Envelope-From: ideaslogisticasbounce@yahoo.com.mx X-Barracuda-Apparent-Source-IP: 67.23.240.32 Received: from cargaint by server.elcumpa.com with local (Exim 4.69) (envelope-from ) id 1RiOMk-0006gu-Oy for linux-xfs@oss.sgi.com; Wed, 04 Jan 2012 05:46:42 -0500 To: linux-xfs@oss.sgi.com Subject: SALIDAS SEMANALES - DE MIAMI A SANTA CRUZ - SERVICIO PUERTA A PUERTA - MARITIMO Y AEREO X-PHP-Script: cargainteligente.com/boletin/cron_sendengine.php for 190.186.15.78 X-ASG-Orig-Subj: SALIDAS SEMANALES - DE MIAMI A SANTA CRUZ - SERVICIO PUERTA A PUERTA - MARITIMO Y AEREO Date: Wed, 4 Jan 2012 05:46:42 -0500 X-Sender: ideaslogisticasbounce@yahoo.com.mx Errors-To: ideaslogisticasbounce@yahoo.com.mx From: E CARGA INTELIGENTE Reply-To: Consultas Ideas Logisticas Message-ID: <35c9325fd0201e4bd9bc145237105e38@cargainteligente.com> X-Priority: 3 X-Mailer: oemPro X-Mailer-MsgId: bGludXgteGZzQG9zcy5zZ2kuY29t X-Mailer-CSID: Nl8xMTE= MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="b1_35c9325fd0201e4bd9bc145237105e38" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.elcumpa.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [503 32003] / [47 12] X-AntiAbuse: Sender Address Domain - yahoo.com.mx X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/cargaint/public_html/boletin/cron_sendengine.php X-Source-Dir: cargainteligente.com:/public_html/boletin X-Barracuda-Connect: server.elcumpa.com[67.23.240.32] X-Barracuda-Start-Time: 1325674006 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA090n, EXTRA_MPART_TYPE, HTML_IMAGE_RATIO_02, HTML_MESSAGE, MIME_HTML_ONLY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84995 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EXTRA_MPART_TYPE Header has extraneous Content-type:...type= entry 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.55 HTML_IMAGE_RATIO_02 BODY: HTML has a low ratio of text to image area 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC0_SA090n Custom Rule SA090n X-Virus-Status: Clean --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: text/html; charset = "iso-8859-1" Content-Transfer-Encoding: 8bit
linux-xfs@oss.sgi.com, Ideas Logísticas - SALIDAS SEMANALES - DE MIAMI A SANTA CRUZ - SERVICIO PUERTA A PUERTA - MARITIMO Y AEREO
IDEAS LOGISTICAS
IDEAS LOGISTICAS BOLIVIA - http://ideaslogisticas.com.bo IDEAS LOGISTICAS BOLIVIA -
http://ideaslogisticas.com.bo
IDEAS LOGISTICAS
BOLIVIA - http://ideaslogisticas.com.bo
IDEAS LOGISTICAS BOLIVIA - http://ideaslogisticas.com.bo
IDEAS LOGISTICAS
BOLIVIA - http://ideaslogisticas.com.bo




  DE MIAMI A SANTA CRUZ - SERVICIO PUERTA A PUERTA - MARITIMO Y AEREO


Click para desuscribirse:   http://cargainteligente.com/boletin/unsubscribe.php?CampaignID=6&CampaignStatisticsID=111&Demo=0&EncryptedMemberID=NDYyNDI3&Email=linux-xfs@oss.sgi.com

Invita a tus amigos:  http://cargainteligente.com/boletin/forward_campaign.php?CampaignID=6&CampaignStatisticsID=111&Demo=0&EncryptedMemberID=NDYyNDI3&Email=linux-xfs@oss.sgi.com
--- --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: image/gif; name="spacer.gif" Content-Transfer-Encoding: base64 Content-ID: <11570258-10974> Content-Disposition: inline; filename="spacer.gif" R0lGODlhAQABAIAAAP///wAAACH5BAEUAAAALAAAAAABAAEAAAICRAEAOw== --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: application/octet-stream; name="oferta_r1_c1.png" Content-Transfer-Encoding: base64 Content-ID: <11530728-19122> Content-Disposition: inline; filename="oferta_r1_c1.png" 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 --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: application/octet-stream; name="oferta_r1_c2.png" Content-Transfer-Encoding: base64 Content-ID: <19885331-18471> Content-Disposition: inline; filename="oferta_r1_c2.png" iVBORw0KGgoAAAANSUhEUgAAAAYAAAI3CAYAAAC4dSppAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAOwwAADsMBx2+oZAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAABC SURBVGiB7clBEQAACMOwgX/PYAAFXPpsKsnkqK8JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAvIAFCNsFbUvWeToAAAAASUVORK5CYII= --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: application/octet-stream; name="oferta_r2_c1.png" Content-Transfer-Encoding: base64 Content-ID: <18289806-12119> Content-Disposition: inline; filename="oferta_r2_c1.png" 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 LRutsc5iraPZarJr1y5mr7iCA9ce4ObXvpZbb3k9t97yBm699fX81K238tO33sKtb3gdN990I6+5 7gDXXrWffVfsZe+eXezYvo2piTHGmxmNNCaNFFkSM97MmJ4cZ2pygqmpKXbv3s21117LLbfcwpve 9CbuuOMO7rjjDn7u536Ou+66i7e+9a287nWvY9euXSRJQlEULCwssLAwT6fbodvNexLlOiWgNmc7 V5H184nanAl8eZ5RNV3rmqV1Ddcvf/nLgCdrw3Vn6/I/gyVpZmdnOXHixIqo6aioXk1mm80mhw4d WrUfZ7rdUbj33nu5/fbbeeyxx/jqV7/Kfffdx/PPP8/dd9/9imvU1m7OWmvuv//+3nrqY/zud7/L lVdeueIeOooAHjp0iKqqaLfbK9rqldTRPXToEN///vc3RHLr9Y8693Upn/VyowcxKAtf7zwBfPzj H+8NSGz0Ghm8Bgbb4tChQxw7doz9+/ePbItR7fqTj2HZ5yDkiGnl9zJugmh4Aar1zsNCCOJYkWWZ V+PECYgEQ4qMx3FinFwnlC4ZMKJam+yuP19rPzc2CSFQQT2zah5IgKyjqyPmNREdnq/CoNHUqqjl em08el12YHBglFHTRuY4yRNPPIU1Ebe/+d/QaoyTxU2uO3ADrUYTIRyTUy327NlBs5WidU6zlRLF kqNHj/LCCy/QzMbpdkpePnqC9nLBxNRWdu6dJR2fYDEvMcKbdlnha9GLEI2WEAy46jjs0CTY0FQf T9/QauD4+g22zrSJy0XCvEl0N3HOYa2lyLt87nOf4zOf+Qz/+I//iDGGiYkJ6lzDtf+BPKGJoohu 0aXSFY1Go1dwfs+ePUTnMO/unEP4vN1aGrzWVLfDILGt37sN/r5ebpD4Dn43THRHkeNBrEc8L8S0 /rb94Ibr/Vmx4yuJLvWAvEMbi9aGSmu0MRjr0MbQarbYvWsXs7OzXHvttVx//XVcd+217L/ySnbv 3s2OHTPMbNnCWKtBJB1WV9iqQDhLEikaaUwjTWhlKWPNBmOtBmPNjFYjI0tiWo2MiYlxsizrlZxo Npts27aNffv2ce2113LTTTdx22238Za3vIU777yTQ4cOceedd/L2t7+dn/3ZN3PllVcyMzNDlmVY 53oqh0bWoNFohAGA1efwUiPA73//+/nmN78JsEJiW0/DtU1ruS54wjG4bE1ifu/3fm9F1LXVavH4 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 RU5ErkJggg== --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: application/octet-stream; name="oferta_r3_c1.png" Content-Transfer-Encoding: base64 Content-ID: <14452622-13808> Content-Disposition: inline; filename="oferta_r3_c1.png" iVBORw0KGgoAAAANSUhEUgAAA7oAAADHCAYAAAA3UC/vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAOwwAADsMBx2+oZAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAACAA SURBVHic7L15vF1Vfff//q5h7zPcIZdMjEEm8VcRyhSgGsUBFSQI+qhRW63EDvaRagFp+dmnSRyq MmhtcXiowUcsgj4WENRSBBmCrSBQUREBJRIEbAJcQnKHc87eaz1/rLXPPTc3ww2EJMh681qv5J6z h7WncD/7+/1+vqKU8jwH8X7nnPbOOq9EIpFIJBKJRCKReL6gdvQEEolEIpFIJBKJRCKR2JYkoZtI JBKJRCKRSCQSid8pktDdDF/60pdwznXHySefvKOnlEgkEolEIpFIJBKJLbDdhe5NN91EWZbTGl/7 2te29/S6nH766Zx66qmTPjvkkEN20GwSiUQikUgkEolEIjFdzI6ewM5KFb1dtmwZy5Yt28GzSSQS iUQikUgkEonEdNnuQvcVr3jFpJ/nzZvHPffcw7p169hvv/0YGRnZ3lOawtDQEHvssQejo6NcffXV O3o6iUQikUgkEolEIpHYCp5zEd3UvieRSCQSiUQikUgkEpvjOWFGdeKJJ9JqtSjLsmsMtbX1u/Pm zWN0dHSSudTGDKZuvvlmHn/8cfbZZx8ajQa33347zjl++MMfkmUZp59+Os45lixZwsKFC2m3293v rbXd7SxcuJBOp4P3vjsuvfTSTc7v9NNPn7Ss954lS5ZMWW66262WW7JkCUNDQzzwwAPd5VevXk2z 2eyel7GxsWnNccNlq7Epk64Nj+nWW28ly7JNbr+id77JACyRSCQSiUQikUhsNUopvyPHC17wAj82 NuZXr17t+/v7p3x/0UUX+U1x6623+jzPvYhsdixfvnyT2/De+0svvbS77IoVKza7rzPOOMN77/39 998/5fssyzyw2f31LleNTe3Te+9PPvnk7nJbs92FCxf6Tqfjr732Wt/pdKYsv3r1an/ppZdudFuX XnrppPltad8bW+f000/f6HJLliyZsu0Nx7x58/zY2Ni0l08jjTTSSCONNNJII4000pg0dmahe9JJ J/lOpzPpO8APDQ35Bx54wHvv/dKlSzcrcqttbGzZSrR67/0pp5zS/XyXXXbxDzzwgB8ZGfGHH374 JtdZvXq17+vr8yLSPaGVwFy9erVvNpvdz3vn3CveKkE4MjLiDzvssO7nldirhO7WbrdafsNt935e HUO1vU3NpXedDYVnr6Ct5lrNacPtLF++fFrCtfeYeoV+GpOHgEfin9t0yGbGjj/uNNJII4000kgj jTTS2OLYmYXuihUr/MjIiD/iiCO6n1UTrwRsbzR2c9HcTQni6vve7UxH6PaK3F6hW825V+BVoxKM vdHPKpq7JUG3tdvdlDCGiejshlHgTQnMavlNidTec9i7nU3NN40tj957qvfvgEc2so7gRSmvtA7P itZeGeONNd5k1ts4sizztXptg1H39Xrd15sNX683fZ73+TxvhFFr+ixreJs1vDY1r43x2mivdRhK 6ynP1JaOJ4000kgjjTTSSCONNJ7tsdOaUVXOx41Ggx/96EebXG7fffclyzLa7fZGt/HKV75ys+7J 3/rWt3jXu9612e1sjOuvv77rEO2jQVbvnO+4444tzrnZbHbdnVetWrXJ5bd2u73H0DvPirvvvhuA 7373u5OWHR4e5uGHH2afffaZtO8tncMrr7xy0jkcHh7mggsu4Pzzz+eOO+7gsssu4+1vf/sm552Y jIhM+tlPMWATRAtKKZRSIPHvWqFFo0SBEsIzHr4TpFo16uTe/SlEABHwCkHhYl01cVnvif2t23hK vPN4oCwKnFd45/Deh5hvz7yVUt3jcc5t4ng2fg6ms1wikUgkEolEIrExdlqhu7246667KIpih+y7 v7+f3XbbjXXr1nHvvffukDlsCzZ2Dj/96U8DcP7557No0SIWLVrEbbfdxoIFC6b9MuH5SiXwRAQl giiF1hqto2BVCrEaozRK6ygkg/AUEQSDiAJc1LohuTls1eFcAT1i1yMgE8JWJIhfRIJeRijLEgGM sngU3oc9GmsREUpX4ooSBShRXbO3CudcWMdPfDadc5BIJBKJRCKRSDwddnrX5dHRUY488shu9GrD cfTRRz8j4XTIIYdgzLbV+6Ojoxx++OFBdGxkHHXUUZPm3Gw2OfDAA7f5drcXmzqHn/70pxER9t57 b8bHx5k/fz4rVqyYlvPy7yLVddoUSiusteR5Tr1ep6/ZZGBwkMEZM8IYnEF/fz/1Zh95rY6yFi/g vMf5ICbL0lGUJUVZ4nwQsc6DqyK2CKLVpIGqtuFx3lEUYRtaa/JaDWMNQhCfJQ6HD/95H7apVBDc SiEy8WzCpo+VMBNsZmk0G+R5PuleTiQSiUQikUgkngk7rdCt0mgbjQZ77bXXM97GwoULN7rMG9/4 RowxPPDAA1stEn03vXPq/ubNm7fF9detW8ejjz66xeW3drvbkumcw5NPPnmz53DVqlXsvvvurFy5 koMOOoiDDjro2Z72ToDEqKpCRCOi8V7wPohNUIjSGJuR1xrU+/rpG5hB/4wh+oeG6J8R/t7oH6TW aGKyHNEWrzQlisIpihKKDrRbJa1WQdGBsnB0ihadokVZtildh6JsxZTjDihPeOx1z1CUDsrSURYl ZXucTmuMojVG2W7hiw64EnEFnaKgXZa0y4JWu83Y6Cgj69Yxtm49rdExxkZHGBlZz8jICK3WOO1O m06nTVkWgJv0vHjxKKUx1mIyS61Wo16v02jUyfMcrfWk1OdEIpFIJBKJRGK67LRCF0LtJ8Dll18+ pZ9q1Rd3S31Wq20sWbJkSl/aL33pS5x66qmMjo5y3nnnbZM5X3HFFd0/NzbnsbGx7ufDw8PccMMN AFxyySUcdthhm1x2a7a7ran2vXTp0inncPny5d1zeO6553bn89hjj006nipNe2RkZItp2r8bfXQr cTbRR1hEMMZQq9dp9PfR7B+gb3CQ/qEZ9A8MUG80sHmONhZlMrTNMTZDaUvpoF2WlD5EX0O9rKNT hD9d6XGloyg9znlKX1I4R+FKnHdhHQfOeZyTycMLzimcD2K3SjseGxtn7dqnGBsdCzW7CIgC0Tgv lM5TOo/rOMpOlZrsKZ3rpkF7HB4X5uA2rA0WOu02I+vX0xpv9fRcBmsN1lq01tv9yiUSiUQikUgk nvvs1EL3M5/5DLfccgsQxG71C7hzjl//+tfUarUtbuPTn/50dxtLliyZtI1TTz0VgHPPPZc777xz m8y5d39XXHFFzy/vngcffHDKnM8880xWrlzZNZra1LJbu91tSe++ly5dOmnf1Tk855xzJp3DZrO5 0ePZmDnWhlSiGEJa9HOTIPy01mRZRqPRYGBggMHBQQYGBujr66PeqFOr1ciyjDzPybIMrWKzIBdS kYuioNMuKDoFRbuk6DjKdpui06ZTdOiUHTrBHooCjwMcCucVZQmFg9LHnz10Sk+ndJNGUfoooBVO FE4ZvMoovKJVetoeSqXBWEyWk2U18rxOljcQm4G1YDLQBtEG0RrRGpQBMXg0fmP/1MQId1k4ik5B p91hfLzF2NgYY2MtOp2CsgyGWltKg04kEolEIpFIJHrZqYUuwCte8QrOPPPMKZ+Pjo5yxBFHdCO2 m+PlL385b3zjG6cYJq1Zs4b+/n6WLVu2zeYLsGDBAs4444wpn1c1tr1zHh4eZt999+0KyV6WLl06 admt2e62ZsGCBZx00kkbPYd9fX2TzuGqVat461vfOmXZpUuXTst9uUrphmB0tbOxsfroiS9BK0Vm g7ht9vUzMDAQamvrISU3sxnW2u7IeiKXE/WtClc6Ou0OrVaLdrtDWZS0221arRZlp0VRFDg8ogS0 wisFWgWxqUwwrRIFonAIpScKWkIU10v3714EJwovGqcUTgkYjanV0FmOKIMYi81q5LU69UaTRn8/ 9WY/eaOByTO0yVC2jrZ1lK0hNkfpHNE5oiwiBiG4OodaXoNWOqZ2h4hyiApLSKMuK0OrVLebSCQS iUQikdg6JPam3enYmV1Xd+a5JZ5duoJLqvsgNO4RFdKStTFk1mJNhiiD965bZzqRzCzoLJh3uZjm 61xv/apQdILIy7KMoihotVox/VmBFBgrODF4CUZQ3nkK7/ECCgUOlAioMENB8LHjkKCiR3P4znnX U28el4vHarMowivHZC1opYCQKi0eOu0O7XYbX0x2c4Ywh8rkSpUlyrnYumiihVBZlnjnqsmFc+yj i3SYSJzrBjW+6TlMJBKJRCKRSGyC5317oURiulTRW+893gXHYW2DsNUm1pQaE/vWhmQJ76XbJqiq rXXO0R7rhLY8ZUmn06Eoiq75ktYG5xxKCc6FxGRjFcZoanmdRl9OnlsQTSmasfEWT659ChBKPL4A paNgjD12K4EeRDVUhskeYu/c0F/Xx7kqpTDGYIxBunMvcN5RIjHt2KM8eAnGWmIEetoHVedLEeqG RTvEOyQKXQgCX2kVe/B6fKwnphKxKvQGDrncxaS0+UQikUgkEolEYlMkoZtITJNKXGmlMJmNxlFB nHoforpV2NYTWv6AR4lQVELRhQhv0SnA+W6P3KpGF2B8bJRGXdPX349zDhFFlod058wYRAvj42OM tVo40XQKB0oHsekEZV3l6wxKJle3egl9cjciFAVBlGDzDGvDXFxZxhitR4KqRZQgVRq08yBVurSb tF2Pj9HZEI2F0OYo+FRV0fAolr1Hx9xl50pcGcSs0oISDb5EpKqv9ySdm0gkEolEIpHYHEnoJhKb QGQisIgIxliyPMfmGUYbUEFCKhUil6XzFGWJ9wUisXWPczhf4F0B3mOMwWqNVkEYW2sxRqFNhnfC 6Mg4XhnaomkDjXpOvZ5jdEanU7BurMPY+Bhj46PBBVkZCg9oi9YWXzrEq4mIZ4zG9h6UVzpEUONH 3RThSnQ3mmTWUhQlrdY4zvt4jApNiYpp2wI4V4AolBbE+66gndhdFLouRII9LqZBR/lczc2DSBC9 ojVKe7xz+O4yAqK7acyIq8LRPQbXMTd7Yu/dxVMEOJFIJBKJROL5RRK6iUSkkknVn8E1WaGNQRuL yRsoYxEdjJyUV4gKdbPee/AhkloULZwDYzLEO4pOB6M8jVpGZhQiHp8rlJEQBVWewrUYa3naheDt IOPG0hlv4aSDN47OyCijYzDe0hRO4VU91AQrjXgfDaxARwdmlKJH5XWP0RMMp3plnw+xV7RWYAwl QqssQwsjUaEeWQTRBhPlajAaczgJplW+Sjd2E/FjEenux4tCeUF5T/c/3yNSJdbg4sErEI9oYoQ3 5FqXTvDig+B1DiS8PBCprpoKKeVBSXdTxkMd8mRjtF6qRkiJRCKRSCQSid8dktBNJCK+50+lFMZa Gs0mxmSUzuG8Csm20TfJu5KyKAmRQ4/SQV9CCa6N0Y4sM/QpizUKpRXOhfTlUkwQbi5EG1tFQVko xORobVCqRHmHLz3ttqNTglcGlQniDAqNMiYaUblo5kRwWvYShKIEsStMFrowtTet96BEIR5c6fAu 1uCKCqnKxLRsH6LWZbc210DwvAo1tmWPoIwiM8zLoUqJdbg9QpfexUNzpA0n5lyIHItTeB+Mq7wH 7TVlWeDLsluPDCA+GH5573Ex8pyEbCKRSCQSicTziyR0E89jeqtXQ1RQKYW1OY16jSzPUcZSOI93 HUQJSlTMmHXg25RFJxoqCRmarJZRz/oQ6WA0GKNQRoNWFM5BKQgG8RkeRVk6Op0SLxoxGrBoLdSV w7sgSzNTQ4yi7Qu8FjIycKFWVilFSRmCqd4holEqOCd7IdS3ygZHLBsI3ZhKLAIOwTsXIqFKITq2 UIpC15eewheUMWKKNqHmVwniXTebuHJPVpX4dC6mG1dvCXoMp+I6Ydm438rNOqZedzoKVXbwXuNc CTjwJqRhS6d7dKKiUZhzSFlVFwfhu6EjdCKRSCQSiUTid5ckdBMJQGuDzXLq9QZ5loV0V4R2UeI8 KLEo8SF1FhVEGx2sBa0txmhEwBjIMoPWBnGV8BOKQhgvwZUSI7GWsnAUJTh06ClrMhBLXcMM6ym9 ApPjlWG01caLDeti8IWacE1WYR9xoiGSCzHlWIWvK5EnMlnfE9KSgUluxl4JSkW36KpfcFzWCyF0 HY2pQp2sIghNqpBqiNpWc1EKT+WaHCOuPcJTiBnLKFAhBi0iYX3nEONx4sBVLZ7KYHwlGq+i27OL 62mPK0ocJd4FN+dJ9daJRCKRSCQSid95dqo+ujurYczOOq/E1tHbYiegum2BalHgGmMRoFMUtF0Z jZwELcFpWCtBW43WHvFFaAdkKtFZRLGrUZJRlArnPJ2iQ7sowRhqeR7qaXUQ0KULqcTW5jiBoixp ZooZtqBQirHCsm7cM14G0egFvFP4UiZcjZnqQux71GyIxgah6vBU2rO7rITeuM77bgq0Ugql1KT+ viFz2eFd2d1flYYMIXVZBVep4NbsY71stR9Xhv64ldjtbUUUGzL1Tm2iVjpEaTtFh5AWHo5OS4kv Q9p2GdO3Ja5HGfr8lmUZaqd9EebebVsUlW96tBOJRCKRSCR+J0kR3cTzht4XFkoJNquR15tkWYbS odesI/Z/1aF3axBPLqQBK8EowRrBWIX3Ch8NqJQSEEVmDdooSq9Ba8ZHRvEUNPpq1GoZWZZRFJ3g ZGwM3hls3sBmGSOj62l1WjT7myhlGB8tWDveoeVCVFeUIiYqU3oX62onBHwgmDIpUd1jFpHQDxcJ rtDipkR1UQoDlGUwhJLe3rs9wlaJAkWIlMYwaSVORfxEeyFPTO+emFa1PJUA9hOyVogtjyZsrnEx xdmLwlOitA7rqCoFWsCX4drE46YS3sqHFxOAd0Hi46pIc2wF5atM6s2r3ap3ciKRSCQSiUTiuUMS uonnDaE+VbBZRqOWo7M6yubRlTekGavYY9YLKK3wKrgMK0Cr4BLsvKMswsJWa2ymu67HxgTzJgd0 Om3ICgaaDfoaGbg2+A5aFRSFoyw7GF3D0KY1PoorxthlRp1Gn6ZTQmscCpUhph/vo+mUbyGUaCWx xY+gdW8droCYmErsuynAohSiNMaVFK7VXdT7kGmsVJi31sFBuoroinO4UlFGN2PxIb3Yu9Af2Lke 8yjxqCgIHVFgdtscgUIh3oXIcU8UOspplItiNFJ1FQqZ0QodhbL3CnyJuBKvFEJITZYyGml5F0S3 ji2JVIwiq1DvW6Voh5LgqdFwFVO1u5I7Ct3e1O5EIpFIJBKJxM5NErobofcX28Rzi647MD39V2MN qbaWvJaT5zmZsXhlgJCeW6XOiiuBIOK0cmgE8QrBoSWmLgshsmt17KubI6KCWJZwz2iE3DtqNqde V4guQAeR6LzCMYrSOdpYRkcdI2MObRt4M4OxQjHaKWl7ixgd06Y9JcHMyis9MV+lUErHWlkI4lbj Y09ZVQk2JTEt2yJFEHzOecBFEayCGZSAlyh0JQhdVDkRnXUunC8JEVURNVFr632sXa5SkKVygqKq yhWEqqy3OlfhMXOhVliFaybOh5roHtdkr0rw4bjxQcQqcTF9usDjEK1QZfhMxQhxmLYDr2NUNwhq 7xxeF+EWKauk51jnrLt/pWpbFFoqxftsShp8IpFIJBKJRGJnIgndxO8UPkYdJ6JxCqU1tp6T5zWM 1ohS0WAJiJE9ieJVfIkrg1jTeJSKkUgErQVrNJk2WKtQKqQf66pnrdc4HM6FqGCzVkNUiZeSIkYy 8YJoi+5rYrMG7fGckY6nkCaFV6x+Epw4nGhwBqUcEGpbBYfTHi8GLxolCq2i0JQg8sNxqyge47Gh UCr0wVVKYcTgXBnrWmN7pJiq7PHhuOLPgkO8hBcAIigJ8xEnXR1LVXMrjqrsVqmYShwjtD72wq3m 2e1WVKUnu8r0yqNQQbQSU6G94H0JUsaoPEG0AlVKsgigS0SBUwKli6nJ0RBMstCaSKp5+CDgXXCB Fq+74tsTe/cKIOEFgPfB4ToJ20QikUgkEonnBknoJn7n6IpcpciyHFuvkcc63EnmQ7HOUwWjX4wW 8FFkRTGklKCVoJQmzwx5ZjHaBNNhV4KG0pfVDoMQUqGHrclCj9nx1jhl0cFkGdZm1OsNOsoyOu4Z GfWUYsDmeBHaPvSSNUqhrAm9YEsXJWyIhnpRoHTscatiG56qFQ+UhBpavOBFYlqywktwkhajUS5E TR1mot6WWGcbTa5EFKIV4iYimKIEDbjq7UC3Ly54HwQz0fQpmEGHiKyT8LkwWSh6FzcT3ZU9Yc4h yCsTTYFEum2RumJXhWOMoe3oLi2Icihieyalwj4ocS64NccP8M7jycJ1Rk2YVfkS5zzSbdMU3KS1 GJxzIT26ClWnrkWJRCKRSCQSOyVqy4skEjsvUrW+iaMiy3P6+/upNetYa7p1qlpP1NOG6JxDiUOr KPKURyvBGIU1IYqrtaCMx2iFNQbRscVO3KfSoX+r0g5lHKIdyoLH0Sk6eEqyzNDXrNNs1snzOp2i xpNrPa1OhpgmYmuovI5kNUy9js1zlDHBFEsFYytvdDBmUgaMBWtAa8QYxNjQ01brEGU2OrhDW4sy GtG62xpIlKC0RlmNtgZtQw9f0fFzrVFq4k/p+VN03LcxoA1ea7wO8whDgQ4CGaUQZVDKdLcnPQPV u5ygtEWbLMxfW7S24TNt0coiEteVOD/RiNJBkMdzpJRGx7lqrVHadPer4mfhc+muXy0TllOhXZEo PBICwx5Ex3unOq8mLr+Rdk2JRCLxu87pp5+O956TTz65+9ny5cvx3rNkyZIdOLNEYvuyPe777fVs bey5fq6zw4Wu9yFNcJKpzQ6mt6VKYudHooDzeJTVNPqaDM4YpNFsBIEWU3MV0k3JrSJ3QoH4EnyB 9yVaKfJMU8sseZ6FdOZuVLKkpIOXEpRDmSBytVVRVGq0FZT2KFOiTYnNoN7MafY3qNVrGGsYa4+z dl2HtqshtoHYDKcNThmUqSG6jlcWrzPQOZgcbIY3Od7kiA1iUBmLshaVZShrkfizNgaT5Zi8hslz TBZFswrickKU6mBapQ06bi+Et8NnPvbGVUqjs4wsCzXFxmYobYPoVHG7Ev6ONqAtonMwFlEaLxqv gmBXyqJ0hlI2RGhFE/4ZCiLVmDCXvFYjr9XJ63WyWh7mF9PO41uJEFOVIEqR8BLA9US8UdGUK85T VfuPDtZd0R236ZWAkih8bTwuFV+QKLTRZLEdlTEhDVzrIKyrlyeTHbATicT2YuHChXQ6Hbz3XHrp pRtdZvny5YyMjHDYYYdt59lNZt68eYyNjW1ynonNk87fc4N0nRI7Ayl1OfGcJrj3ht6tWZ7TaIZ2 QVorisKFiGtM7/UuGB5VYsT5EuV9SJf1KgoXyI0NjsLKoXVs0aMEpTyOyqxKRUGkQAteHEqDUQrn BZ1ZtNGUZQcEbBbEEWieGh2h3dEYXQtz06ENTrB8NiGVV5XBbkok9KaNrtBoolmS6tbVdtOKq5Mi wapKxRpT6T1PlT9XyN3t9uJVSodlyg4S2/BIzOlWsQ+vUgqPovSOzFqcc3Q6Ba7qN+xdeJkgoTYa V+JiTaw4EB8NnHrqhqu0Z7xDKyG3NqYbe3AeV5aURRFdoVRPiyAX0rBFYg+hEgi9gFEEIyoFeIXE FkvBCisYWmkEL2WYUxm2qRQ4J3gqUzEdrzMxahzErILQn5f4UswV3f7DiURix3PSSSdx2GGHceed d+7oqTyvWLx4MYsXL97R00gktivb475Pz9bTJwndxHMepTVZrUazr4lWGu89pQu9YG1slxOcgkNd aulKOu0OSkpULbSt0VrINGjxGBtMnlACynTTk8uyE1KWdYgQV+Ius3WUCVFcJIhiYy2iFEXs4aqM xuY5WmfokTa5DS7QojVlCSU+1qaG4eIx4EOtLD6mVkswbYrNfoiOScFsqnJ4khCJDLostiHyHhcd jIEQEXUSXZIlREm9B6dA3ESNrniqVrPeh9pc0YZarQ54xsbG6HQ60ZFYoSUaQzlBlEHbqDedx3sH rgyR99irWKKIFoGaUeTWIgidoqBodyja7WCsVRaI18TZACHdWboF2cEQKxyzg7LykoovNRwTKedl CV4FQ6oogkWrKFYdzpex/NjhRChdMOBSTDiyIxL6IBdFOH899cqJRGLH8b3vfY9XvvKVfOELX2DB ggW02+0dPaVEIpFI7CB2eOpyIvF0EYS8VmNgxgz6BwbQxgaBGBVPlmdkWYZSKkYfO7Ra47RaLRwe azVGq1iPq8nyjFo9Q2uhnmcM9PfR16xTr2fkmSHLbEhh1YKxGpsbwFOWHRqNGoODA/T19VOr1VBa oa2iXrPYTGEzRb1uafQ12Gvenhxw4AuYu+sM6g2FsWWoA1aCltguKKYNI1UNq+qm1FYpvKIk1rbG 741Cx7peUdWIkchYI0tMIaZK75VYKysTA5HY6kcmUpmjMZPWmszaaN4V/m6MCfWrolA6I8vrNPr6 GRyawcxZs5g1ey5zd9uVubvOZe6uu7HbbrszZ9ddmTlzFrvMnMmsWbOYNWsOM2fOZGBggGazSX9f H339/dT7+qg16tg8C6JVVS2QYpqwkmjEFZ2lVTTEiqOK6KvojC3V+dQKrQw61jWH1OeYXh3TpyU6 WpfeUXpHiH97HB7RCptn2FoeovVVCnQikdih/OAHP+Diiy9m/vz5nHDCCVtcflPpzJuqVavSMXt7 a2+snm3FihXd71evXk2z2ex+/uCDD1Kr1Vi0aFF3mar2bvny5axevZrf+73f6+7n1ltvJcuyjW57 w+1PZw7TYWhoiAceeGDSfrZUH/hMzlnvddjcvLd0/qa7v2dyfqaz3nSu0XSPeVNszfrpPt/4+auW r2pgvfcbPU+bm++m6tW35tpu6Xnb1D6mO//ebWxpuY3xbD9TzyY79DezKvqxoZFQIjGBdAVYZWpU 1Y329Q3QPzBEnjcQMeAVSjIyXcNKBt5QiKJQikIUHTwtX9D2Jd6G9GKjc4yxuQ+q5QAAIABJREFU KGNACbaWkTcyVF2jMkNWC31yPYI2lsxm5CqjZjOymqbeb5gxVCPPBXyJVYpc5dRsDavB6ILZQ/0s P+dKvnr+dzhwv/1oDhralAyPjDHahg4ZJRmltxQ+w3kLBNOlqhbVacEZjbMar3WshQ0mVMEQSuOV wSmN6AylMxALYhEVfg59e3OUzkHCz9Y2MLqO0jWMbYDJ8dbijQ11tZXhU1c8C95Dp1PQbndwLqRx G61ROsPYJrXaIH39A8zYZYjdd5vDPnvvzj57784Be+/OgfN254A9d2e/3Xdl7zkz2X1okDn9DWY3 a8yoWfozTdMqcgHrXYwQhyiqKjzKxc5APQ5QwWRLBQdpMSA21thaULbbjkmUCWZa2uCVCf2IlQFl 8EYhViFmola36i3s0Tiv8U7hnUJ5wXjBeI/1Hm00PqZhhzs2DB3H1lD9z25nqCNMJJ6rLFu2jPHx cS688MJt+ovWwoUL+dWvfsWVV17Z/b3loosu4oorrpj0S9+KFSs48MAD6evrQ0RYvHgx1157LVmW sWDBAvbee2/Gx8e57LLLuttZtmxZd/1ms8l1113HJz/5SUSEo446ina73f1lM8sy8jxHRNhll11Y v349q1evnvRvxubmsCXmzZvHI488wpo1a7r72XvvvTnttNO2+t+l6Z4zgEajwR133MF111036dhW rlzZvY5bOn/b4hptji2ttzXXaLrHvDme6fob4/lyn1dzuP/++2k0Gt053nnnnaxYsWLKtdrUfDfF dK/NM3nepjv/FStWcOSRR3aX2XvvvVFKcc0112zxPnm2n6lnmxSCSABT35ztTK5r3sOJJ55IqzXG unVPcfTRxzBz5iz6B/pRoiiKMrSSEY3RJkYYDR6hU5R0ioLXHXccTz76KGseepjDDj0M54XxVodO 0UEZhc0MJjPY3JLVc7TVoD1iBZMZsppFaSGv59SbTYw19A/0MXvOLBrNGqVr02mPU5YFxijqtRpZ nmGsoa+vrxtRpLQ8+uiTrHrkCZ4aLSjFRoGrKAk1wKGPruBj1NZrBSqIcW2z0KYoyzFZFsyhoitx cBwOEUqvFV5FE6ge8ynR4dzYaKpkrcVY23Wj1saibY42GWIyUJrQKEghokP6sitDlLPqrRvdjW1m Q4RXKzKtqVvDYLPObrOG2GvOLHafPZO5u8xg9lAfMweazBnqZ/ZgkxmNnL48LJ8ZjRKhbLcZHVvP unVP8dS6dbTG25SdAhdrYzd8MRYi0FVEWkWBHiO7UkXEe1yakW4UVypH6GgqFWq6VTSvCi9YEIVz nqIoKQpHUZZ0OgVlWYY6XcLlnTSnmIaeSCS2L6tWreLDH/4ws2fP5swzz9xm2z3rrLO48847efe7 39397Mwzz2TlypWcffbZZFnGvHnzOOKII7j++usZGRkB4Oqrr+alL33ptNOoG40GN9100yRRAHDJ JZfgnON973tfd1vDw8Mce+yxKKX40Ic+BPCM57Cx/axatYpZs2Ztdd3zdM5ZL0uXLu0e9/DwMBdc cAGzZ8/muOOO22b7e7rnZzrrTfcabctjfqbrb8jz5T6v5vDQQw9NOtZ3vvOdG71Wm5rv5pjOtXkm z9t0579gwQLe/va3d3/u/TdyS/fJ9rofni2S0H2eU705e9nLXjblu0suuWQniCptGO0XBgcHqdVq 0ZQofiqxTjVm/HoJNaFlp6DTauOKorsFpSZqXq1VZJmlVrPU6xnGqIneuVbo+DaldMibGXlfRr2v Rq1p6Rts0j8wA2tzOkUH50u0CWnNosAYoVFvUKv1k2X9ITqL8Ohvx1n1UIeibGBtH5BRIiE11juc FHgpu8INbdA2x2Y1jM3R2mJsjjEZ2mTsMjjIzRd+iru//nle8sL9ghtzFGtBgKro0ByHDuZKyiq0 USirMJnGZhptBG11iIaaUD+MiVHQylFZmRAlRYVWR1FUmiwnr9WoZZpmphmoZQw1GsxoNhmo1Whm hro1NGqGRm6pZ5p6Zqjn1bBkeY7WhrIoGB0bY/36EdavW0+rFV4geImx0irNWvUMURPtgqJAlW4L ItV1bQ4OySauX6U1665YnzFzJr/4rx8x/OhDHHbooaHnsAnbj15aOA+d0lEUjtL50IIIJiLePXdr qthNJHYMX/7yl1m5ciVnnXXWNvn/WPWL3AMPPDDpF7fh4WEefvhh9tlnH6y1rFu3jkcffbRriPV0 GB0d5dxzz5302dDQEHvssQc/+9nP+NnPfjbpu1WrVnH77bfz6le/mmaz+YzmsLn9bC3TPWe93HXX XZN+vv/++ymKgkMOOWSb7e/pnp8trbc112hbHfO2WL+X58t93ssnPvGJScdabXfDa7Wx+W6JLV2b bfG8TXf+m2Jz98n2vB+eLZLQfZ5zySWXUKvVuO2227opEyLCSSedFA2GdjQhunzNv13DrNlz2f+A F/LTn/6U8fFxSleitQ6px0rw3oXhSsqyQ1m2KTodysLx3Wv+nZl77Mme++/Lvff+nP5GjaGhQQZm 9FGrZ2S5xRhFWRZ0ijalK+gULUrXwkkHNNg8Q1tNrVkjq9VpdQrGWi08nryW0RxoUO/LQXla42Mo 78ltDVdanAup+mtHDJi5WDsDR0a78CFiqhReC8r6KEIzTFbH5DWyvE6eN8jyOtpmiLGhHZFoStET UUNl8DrDaxtTmzV0/x6H0Xgb9uWtIu+rMzRnF7K+Gh0pEWPQedbt4au0QdvQ31bbDGNraFND6xpK 1RCxaFOjVu9ncGCI2bN3Yffdd2XP3Xdl11m7MNhskBuFFSFXQq4gU0KuFTWjqFlN3WoauaEWnalF hLIoKYsyvpCIUeOq/jj26iXWHnfrkfVEPXFXDFc9gEVP9OGtapWrqK+OUV8RhPBCAoipyzqmzcd+ u7F213koncc5H4ygfYwkB8uqrlFYiucmEjuG4eFhPvCBD5Bl2UajaFvLIYccgjFmUr1hNXpfFPfu 94477thmZQj9/f3stttuU37h7KXZbHLggQc+ozlMZz/TZbrnbFvxbF+jLa23NddoZ+X5cp9vjkrE bQ+25fNWsS3nv6Pvh21BEro9VBfv+UL1JgmmvhG6+uqrGRwc3AnaM3iyPGNgcJB6vU5ZlrRir8Sq IrLqaSriQ1qt6+B8G+iQWUWjZmnULc2apa+eMdjXYNbQAP19NUR5RHu0VZSUFL6gKFq0y3EK3wHj MZkBFZ12bQ1t6qx5fJjHHx+mU5Qoa6g3GiEiaQ06E7QNUWGrNOPjHcrS4T0U1PFmCDENRGd4ZSi9 gNJoE3vhGo0yGcaEmlrRJkRWTYjmKpujTB5rT3uM00Uj2qJsFnrrZhkqs4gxcYTte9EUPvSbrfX1 MXPOrmibUzgQkyEmR5kMVKhzFZOjbJyPzVGZCdu1BrEZYi06z2n29zNnzlzmzJ3LwIwZ1OsNrDZo FEY0mdJkWsii2DUCuVY0rKFmgpmVNoZGvcHg0CD9AwPU6jW01kH8eh/6JUt0Oa6iukYjJhhseYHC +56IeIhsh++iuI2RX5TCx9Tm0INX0atMRQzS7btbGVbFFHQkRHZdMKdCqbjPIIhFaZyolLqcSOxA rr76an74wx+yaNGibVaK01tv2DvmzJkzKWXPWstFF13UrdPb3r1Ed4Y5VEznnG3v/T3d87Mznddn k3Sf/+7Ra1jlvef888+f9rrPlfthYyShmwA2n7qwIQsXLqRTic04NnYzVw5vS5YsmbTOrbfeysUX X7xZF8fqgfzIRz9Kc3CAfQ/Yj1+v/BV33/1T6o1GiNRFges9/MnixTz84IM8+tAqHn3oNzy66hE+ dMYZ5Dk0GooD9t+blff9kh//6L+YMaOJ1g4vLjoLe2bPmcP3r7mD/7jxHn5w472suO4X3Pzde3jp Ua+hdCA6I6v34VE8+tvV/PfqxylcOVF7qxXOO4479k189YIb+ernb+KL513DWaedR7Ovj0qWF6Io te2KLsRy3DFHsfLbl/Dgt7/Gr7/1NR644mL+8cw/BV2JJtutr8VEoyVt+OZHP8hdX/4Ee82ZST3P uPLvT+e+fzmX+y7+FMcd8RJEaU49/hXc95VPcdopx/Hqw17Mz7/8Se7/l89w5cfPJK/VQg3z+Djf +sgHefAbn+e+r57HfRefw/2XnM8H3/qGmMIcBtpw7JEHc++l/8Q/nP5enDJ84+/P5Fff/Bx3f/V8 VnxuKW9+5TF0nKdThoY8oSbWcPShh/DhD7yPD//VB1nyoTN433veTWZraDFYZTnk9w5i+Xkf54OL /4h6vc6F53yEe278Dg/ffhNP/PQ/WX7exya3X2JC7O6x26789vabGb77Vtb+/Ees+8UdDP/iR5zw mmOBqh1TEJx/8Z4/4slf3cXZf/V+Tjju1Qz/6h7WrbqPm67+Jjd++195+Bc/5gXz9qJRr/Mf1/8b Y489wtjjv+WkE9/QU/+rOPENb2Bs/VqK8THKsTHc+CiXfvWrE+ZdSgObF7obOiDeeuut5Hm+TZ69 RCIReOc738n4+Dhnn332lDTZreGuu+7a6iynxYsXIyLccsst2yylb999992kucvIyAj33nvvNpnD 5vYzXZ7OOdve+3u652dz623tNdqZeL7d5xujCgKtXLmSTqfztLezNWyL561iw/lXJpeLFi3i8MMP 74rUM844Y4vb2lnuh2dCErrPY4aHh7nhhhuAUDA/nTfey5cv56qrrsKYyS2YFy1aNMUavuIP//AP p6xz1VVXURQFJ5xwwpR15s2bxzve8Q5GR0e54cYbMcbS7vnHJkRNbeiLiueKb17G0r/72yn7PeOD Z/KG419HniuyLKajAqJLHC08HdDCh//6Y/zrpdeSZVNFxsf//3/if515DtrkjIyO89Bvfsvq1WuZ MTiLmTNndU2cvHecfdpnePsb3zf5WPY4gPP+15fYdfau4QOjgsOvEUQc535wMV9eejpGT/bnPfGl R/Cvn/gQtUYNlVmUyXqGDQJ4c07lUQRW+QknHXMoX/jAH4X+wICIRpsai15+NNd89APsOWuXKZv4 yze/lg++7QS0NShtumnCAIce8AJ+ddlnOfJF+01aZ9GrjuH18w8JKdmicaI5+vdfwnEvmz9puT12 25VXLXgZ2tZQNkfbcA8MDfRzyT9+ihe/cP9Jy7/5+OO48Rv/Z/K9ooR/+uiH+em1V5LnU++7r15w Dv983kfjslGkxr66bzv5RL7+pc9hjO6er83FXkPNs0KJ4sLPX8AV//eyKc/A2976Fn74g5vJ8jpE M6uQzjyVFStWTHmbOn/+fB599FH22Wefja7zdJ69ROL5zqpVq/ja177G/PnzOeaYY6Z8f/fdd9No NJg3b173s6GhId7//vdPWm5r6956ue+++57e5Huo6hMPOuggDjrooEnfbcwI5unOYXP72VqeyTnb 3vt7uteod71neo2eTdJ9vmne9ra3Tfr5ZS97GXvttdc2TSfeFNviedvS/Kv06KuuumqrszR39P2w LdiuQnfD/O6dhZ1tPtuTxYsXc8sttwBwxRVXbNZteeHChbzrXe9izZo1XfvwyjJ95cqVzJ8/n7PP PnvKevvvv/+kdY466iiuv/56Hnroofhwv6TbQgjgrW99G7VajWuvvZaf//weyrKkdA6IQjX2N+0U JYvf827mH3kEY2NjvOa1r2WPebsxb9/deemCI2i1WhgbethqIxNpqVIiqkCpgmNfvoA3vD4c75e/ 9r956fGH8MqTjuC1b5rPF758HgCvOOY1HPJ783lszVpq9QZ77bMnu8wZQLTD1Cz1Ro3DDjqG/V/w YgC+dNnH+ZuPvZm/WXoy/+fr5+Li3AGMUlgJBlGv/oPDefOrXsoTT63j4Hd+gP3f8n72fctfctji D/ObNU9w8H7z+NOTXht65yqDUran1ZLmnZ9YzlGnfZLfPDbMeLvDmz/yRf6/U5fwosVLuP6u+xFt UPGc7j13Jk+sG+GIv/wEL/mzj/POT32FogxRR4APfvGbvOTPPs6L/+SjHPSnyzjtc5dROsc7Xn00 jWYTbwxem+412nP2Lmit+PPzvsx+bzuD/Rd9iMtvuh2AE44+lLxWBzE0ag3mH3wgnaLgoq9/i7+/ 4EI+9o//m//62T2hJY9WOB3a8wC8aL99sdbwkc9+kaPe+A4OeMUJLP3M5wA4/CUv5nXHviymqQvH H/tyFp10PADnfOEiZh26gNmHLmD2oS/j7877JwBOOeE4jn/1y2PlLFT2UPvuPY/Hnhhm95ccyeA+ L+ZVJy/iVacsYq+XzOfBh37D2NgYC153Es3dXkBz1725+pp/B1G84YTX8YdvfxtrHnuMXXbdA9s3 gO0bYOYee7Py1w8y/8gj+Juzzgxp7sqjqh33qOiFCxdy9NFHA/CmU940rbr4p/vsJRKJCYfQ/fff f8p33/zmN7sR3+pl0VVXXTXlhVNVgzY0NMT3v//9SS+Wli9f3s2sWLhwIQ8//HD3l8LqxW2v2czT /eXxnHPOIcsyvvCFL3T3PzQ0xI033si6det473vfO+05PJ39PPDAA1uVAj7dc7a1bOr8bctrtDGm s950r9H2Jt3nm2bRokXd4xoaGuKzn/0s7XZ7q42nni7P9Hnb0vw3dh0WLlzIpz71qS1u+9l+prYH KaKbYMGCBZN+yd6U4D3rrLNot9u8/vWvn/Q2rXoQiqLgRS960ZTtr1mzhn322WfKOjfccAONRoOT TjoJCCnIWVbjzW9+MwDf+tZVlKXHedezNQEvtMYLxsdanHD86wE47bT/yf333o3VQiaeJ/77EQ49 dD++f9P3CD5BlczxFGUZ62Idx778OLTW/PO/XMj5F36BNWsdqx9rMzYm/Pt1V3DDiu8C8LIjX8GM gSF232su/bsoXL6eUo3hTYFTnsMOXoBSmn+78TLu+/VdKJ0jeoCf//JePvSpD/Dfj60BwKCpKQ06 470nvY5OUfAnH/sHOq1xjDLYrI/RjuITX/03ytKxz25zUZLF6GA8Bs+EQZJI1/LIGovNMrQN6c0h xTlELJ9YP8rr/+6LtAqCuIwi8yvfv52D3vf3fO+u+yhjCrZXitvvX8WjTzxFI8/Yd49dEWvABiMm gLF2h1P+9p+44Y5foFAo4IvfupF2UVDLLLvPnY1oje6JPoo4HOF6Xnnt9Vz/n7fiFSHKHa/Prx56 hFPefxbX3PJDnlw3wujYOJ+/+FIuueLbQIjsVqZPJ77qFRitOeeLX+bcCy+OhlNBAH7+X77eXeeU 418Tmu/22HQ/9sQwh7zitYyOrMf7MrzoEkH1/ouoQImP0XGNIJz+l++n3elw0lveyuj4eNfoau3a J/ngmWdRFAUHvuiFKOXxqkSUi47OGmU0RmvedMopGGP4yNJlfOvKK7q7u/rqq5kzZw4rV66c8gw9 3WcvkUhMtPXYGKtWreKtb30rhx12GK1WC+8911133UZfPF199dXst99+HHzwwd1lvfc0Go1u646r r76aa665hvXr1+O958EHH+QnP/kJCxYsmNIqpb+/v7vcdH6hrf6NmD17dnf/TzzxBLfeeuuUWrkt zWFL+9nwOJ944gm+8pWvcOWVV25x/a09Z1vL5s7ftrpGmzqWLa033Wu0vUn3+aY55ZRT2HPPPbv7 6evrY86cOdvNo+aZPm9bmv/GrsPy5cs55JBDGB8ff1rz21bP1PZAlFLbLZS5s0ZNd9Z57QjmzZvH vffeG9r3EB6gK6+8kqGhIe64445NplVW3Hbbbd0b+/TTT+f888/nsssu2+j/0BYuXMjll1/O8PAw ++yzP63WOC888EDuvONHrF+/nt8/9HBGRsfwCPPm7cVt/3kL69ev59Ajj2Lt2mFmzBhkxQ03MHv2 HP7H/3gjP7/nZ6G1j1Joq1BacFaDEvbYbQ++883vMTKynleesICyLNhl5iCXfflKdhmayTv/bDE/ vvtn5AaaNc/c2X3MnjnEIQcfw2l/ejb3P3AfZyz9S0ytBNsCVaJEk5mMWl7jb//iPA54wYv5yr9+ mp//8g6eWjfKwOBcBmfOoeMM73/LafTVm7xn2fnc8+vV1AcH+MayD7Dn7Kkpw738dOUj/PG5X6Fd lNGAy+OjtBWBwWadb3z4vcwcaPKe8y/hnod+Swk4Cff0u199FGe96VVcc+cv+JuvfBuPnxRhrvjI O4/nlKMPnvL5eLvDu879Cj958FG8d7zqoP254LS3c/evH+EdH/tnOq0O3jvEw4zBPi7/+PuZNdDH Ry+9hrVr1zFghZe/ZH9e99IjALj7/l/xje98j6II/XC9AN5xwAv25t1vOpFfrnqYxWcvY/XqNYys H6HVbuGc43Uv/wMu/odP8pN77uOEP/6fNBp1brj0S8yZOcTCxX/JT37xyzhjF94EeMdxC47hK5/5 BD/5+b284Y/+lFarzV/88dv52F//FZd/+xre+8EP4VyJ857gkCzMmNHPzVd9kzmzZvK6Ny/ix3f9 NP6jLgwONPnB977DC3pSvzbGj26/g2Nf/Rra7TG8d11xLYBCuOGGG/iDP/gD3vymN4WXSj3rVs/Z 3LlzWbBgAXfeeefTevYSiUQikUhsmuXLl3Pqqad2f899rvFcn//2IkV0E5NYtWoV9Xqdiy66CIAL L7zwWautueWWW3jooYeYPXs2J5xwPH19fZx88hvJ85ybb76Z0dFR8GDEoNVEDasvx8kszJ45yNy5 uzI2NsqvV92PtWAzg8ktOrOo3GKsxVrbTbkFiW1y6ngaeC/goTWmqesh9tptd/bbZyZzZ1sa9T4e efQxSlfivUPZEpEOWnuMFUwmaKvoH+hnaHAW7U6L9WMjOKd5arTkN8PreLJVIvX+6NorYA2lVlg9 vdYzIsQ2QROj6vlaRW2rSK8YgzLBqErHoao6XgFUaNOje75/1cEH8uPPfmijIreLCrWpKroch3lJ cEOOrXq8UhRliXMO7z1Prn2StevXMzw6zrW3/oTv3HwbAC8+YD+WffDP+fN3voVCa8YLz8h4wehY Cw+UZcGTw8OsW7eOTtGBqqygpx5Z4jmoDkx06PWrdIiuhla7wj2/XBlaFAkIVWp8dT4k1uX29OSN P3e3G9sTiejQo1kmWg9t+cIpwAAG5wUfx4yhXdh9990ZHR1l1aqHkitzIpFIJBKJxLOE2fIiiecj y5Yt4x3veEe3X1mVTjk6OtqNND1ThoeH+dznPsd5553H29++iBtvuomFJ74BgMsvD2+ntFJorSYE G6CNJ/OCiQaa9UaDA174Qu67/95o1BRMk5RRobeq+EkCLbcNnhxbC6MtShf8kJUz5JKxS/8MZgys I886dEpLX3MXtNJorWj2GdquHQRupvEoyrLEqbDdzOb09Q+BMsyYtSePj2lW/XY9+eOOoizj8Ris sWTWIBIjpp/8Aj9/aDXa1BBlggArFR5HGSYdzJQ8OO+CyJTQzsb3Cj4VhJmObXiArnmUIDHNVrrf AbznNfPRSvGzVb/lPRf8XzqtNr4s6W/U+Ppfv5uZ/Q2q3rDBzGlCCHqjoSgRIUSJ1URq9WNPrGXN k08x1N9gsF7nqv+4i2+tuI1ZM5os+7N3sdduc3jf207mk1+6lJGR9Ty5fgQ8FEXJ6Ng47XYnHKuv Clx7BajupimH06NDD2HvQQq81yCeFx+4PzqaTbnqHPYKZmWAEuU9DoUXz0RRLSGdWikEj/MT99Do 2BjHnXQKP/7xT/DO4Yh1/q7EO4d4h3c+zFl8OOdxGRfbYjUaDfbcax6333HHpGei12BsQ7Oxbfns JRKJRCKRSPyukyK6ic1S2bhXDag3dO17Jmit+e53v0ur1eLlL1/AAQfsz6GHHsqdd97J9d+/PpoO gUiJBMkHgNEaLTA2tp7Va/6beq3OHnvNQ0wGNsebnFLlOKmBynBYslpfSPgVoRSPE8fjw0/y2/9e Tb1W4zXHzqdsPYlrjZPZfp5c57n7F7/i9w/+fbTWPLnuMcR20JlDTBA9SoUa2HUjTzH81OMAzJwx l7Uja1k/Po7NmuS1Jq1WG1eW4D1Wl9Qyx2hrPWvWPkUts+wxdy6m1ofJmhBbD3kTRayqBKbpthhS vRFMPRFlrHrBitZobdHahvZHABLnKzoaWxlmNJvMGexjvFPwyctvwjnpblt0zzswpUI0OfaeDfvq +dyYMI9qLgLtjmf4qVGeWD/Kk+2CJ9slT4y3+dVvH+N9536RNcNr2W32TAYHBnli7RhPrR8HfOiT XDi8MuE8qNAb+A2vDvW41/3gNjqlZ+36MR5d8zj1Ws5rFxxN5fjkUXg03gvHH7sAozW//s0jtMsy ukZX50PiOf1/7L15vCRVff7/PltV9XK3WYFZcBBFFgVkE5kRlCWCzgTcGAfFCKioISCbwSWM0V/U oBiNMflqAKPRYH5GJowishlZDKAoKK6oI4OAgDN3lnt7qzrnfP84p7rvnQUBB78q9fC63rndVadO n+4u66nP83keE/OCw7ogprhflxXgmKE7vmkTD/76Ieq1GgvmLwivXyrC/cIYFyV1393ZS8L+SoWb DEoxvmEjD9z/AAD77rsfgbg/elX3yfjuVahQoUKFChUq/KmjIrpPYZSZnFtm2ZbudlmWTbNxv+KK K/q/tzQUWLhwIe12+zE7MkopaTabrB8f584772LmzJmsvPBC0jTl2uuuJ8+LQHSlB9EDMTBLUFIi pWZi0wS33noLAB/+wMfYc89n47yi8JqZs3fh9htuYcmhLwIypAo9xwIYGhti9s4zmTFzhP+5+UYA /uqtp3PGGafQHMlYt95y1/ce5qw3v51lxy6jl3e59ptXILUDEXpzlUyROkUnGR7Jt374TQBeevgr 2W/PA1G6S63e5aBnLeJz77mInWbOQgiYM1NQ0+sxynLL90MO3EfedCKHP+dZeGkQMkUIzc4zx7j9 I2dx1H579CuRUiq0NmhtUMagtGGyW/DIpkmyRHPEPruh+tJkFaTFYlCe9HWHAAAgAElEQVTJljIa WEkZ1zY8lxnNC/beLZB3rZkxMsQXznsN82aOhBWTMkqlB67L4U0M5E3KSIKFHhgMK0m7cBhluPTc 1zMyVGdDJ+fhzZNsarUZaTbodHO+9/O1PLJhgk2tDh7Yb689uOf6Vey7954hSskkvPV1r+akPz+W dqfLtd/8NirGK331xlsBOPe0kzjvtJPC6xFBgvzRvzmPFX9+HO1Oh3+87PNBoqymS5ODPZXAxygm hGTDxgkeeOhharWMY1/0wiAtFqKfoXvl1dcAcPlln2LpcccGkzMV1mjhgoVsfug+li19aRxP4OOc vBBEVzRWXbkagJUr380JJ5wQ+60FS5cu5aGHHtpmL+6O/O5VqFChQoUKT3WUea9/rP2tf+zz/32h ki5XYOXKlaxcuXKrxx955JFpVvgXX3wxJ5xwAosXL+5feD8RKKVoNpvUajWsc3zlK1/hkEMO5uij j6LdbvO1r13TdxUWwoHIgQHRlULHH8Xf//37OPR5hzF//kK++Ln/2upY1hu8SOiVuwtBvVHHyg5J C7523Vc5/rg/45m7P4tTX386p77+9K3GuPamK7nvoR+DKBBSkJgGkFA4gdISk2qu//ZXOXCvQ3nG wr14y6unx7xMdiYYnxhn7uhc5s7y7DSzR8ulfOmWO1i83z4852nz+OgbtkNSZJBfCwRShWqtLPtL 48/adRvZb9HOvPGYg3njMSGv9u3/fg03/vCX/YpuSXTjIoR5dQv+///9IWe+5Hm88eiDeOPRB219 fEGfODvnBv3ApVRaKrzwSIjjDwikE5JuYckSwyffdvJWQ193+5388lf3Yzs5vd4gJ7mWpdzw2U9s tf01N9/OD39+LyrKtT/1hSs57vBDOfg5e3HuaSs497QVW+3zsU//B3f9+GeB3CP67ttANIkqraAE gYsKfvbLezn0wP254Ky3csFZbwVgxRvPYPXV1/KPn/o0y449hkMPOpDLL/vUNt+ysEYlgQZcfEwE G7GPfuzjHL9sGYcddihf+tIXp+36yCOPsHbtWvbcc89pj++o716FChUqVKhQocJTBVVF9ymM1atX 87KXvWyb2Z0rV67cphX+kiVLOOecc7bavtVqccABB2z3zlJZCVRKMTQ0TK3eoCgstnCs+u/VdLtd AH70ox/x45/8CESongoEuCgHjfDSIrQFXTDemuCwYw7jW9/59lbH/KdLLuPGW27FFZa8U74OT9Gb RDpLs1EwOtbj7z50Pv/w8fdirZ22/8TEZs5f+VquvvFyVGpQSYpIMkSicUaSC4UVhnq9SbPR5IOf fgff/P7Xp43xg7Xf5h+//Nd4goW7VBPMmNmgVs8wRnPWJ/+Lj19921Zz7/QKTrr4v7jpRw+gdR2R NNDZEKY+hKk1SOsNsmaTtNHg//vKbdx570ODffOCBzd3cSrBlyZeQuJ0itMJVkuskjgl+dz//oBz PntNP6e43H/Fx77Eqm/9OPQFu0BctTJoacp3FHwZbSSiFJiBV1Mk47/eMMFZ/3Q51k53er7436/g Te/5CK1Nm8nbk+AC0f3uD3/KPi99LWsfeGja9qe864O85X0fBRVk0kIFGfIJf/kOXvf29/Z7oEus G9/Ibi94CRf/62dQKki/nZBMnUW/B1fKsr0Y4eGMt7+HW7/93f527XaH+379UDStUhz9shVc8Ld/ t9V71mq3OfSFL2b1VV8LN2qINyi0DFVfBU4E3vuCI4/msk9/Ztr+l19+eTRXa8e5TJc0P9HvXoUK FSpUqFChwlMRT2q8kBCin7f0h4Q/tPn86SOQVK0UjWaTNMtwzlEUBd4LrPUoJTFGgXDBd8k7hBRI YiVMBqIgpEMpgTYKaSRONSiswhYeiSJNa6RpilQeKRU2F1jbIUsdWc2T1hRJojAmoZYW1AxoNUJr QnLf2l8jhWDXhTvx9N3mgZygnU/SVZ6WdLSLLl4pkiRBCE3uUpSE4dRghKfXa6NSialpdGIw2tDI UmqpILebmOi06XYbrFuX8tDG2eR+FCcbtH1KbiXWF1hf4K1HFQlegJASbxTSaLQJRltSWrTyCCHJ c0uvKEI2sPN4L9FIhBh8xkN4ToDD4UQPvI8UVSB8+J6GxzTOa2zRw7ocbI7LLUoJEm3AQVEUwYTL WcD1XakFHhnHsdbiXRGO6z3OWXxhsd0utujgixztLLIo8K7LkYcewD//7fnc/dNfsOwv30EvL0Jh tJRYi0isvUcEwXH/3OJ9gS88OB/aYxEIH+YEwRiqZyUWhytyXNFDiimxP94jHXgXMn6FdYCPsUme Al+2HoO1FM7ivUXg8F4gXTg2cR0Gr7fAC4/XYQ7eObyNWb7eIxzg8zjPOBk7yPsNxeDqXFWhQoUK FSpUqPBEUEmXK/we4NA6YWhoCJMkWGtDBbFPVCxSGrSWoVDoHSDwzoH0COmDe7IMbsrBUTklSVIK YQIpUAXGaOq1lCTJcNYGEtjrIrUjSTVJ4kgSSZYqjAHpBdJphPBoYVm0cC5jM8YYHs7o2Qly1wFj KJyjm+d4XUenWehXRYAqkDjyogA82nik9ggZM2KdxxZQGIU0CdpJNrc1mDo6GyLPDSXdDCROIqwM xetEIaRASBVIc5qgjMYJgfIW6S2FteR5EYmsDAm7UfItBduhSA4fs2bL3lCcR/ryBpBC+CBzdl7i pUYZgeqbYgXyLbxDSY33LtBO7xDCIZwHHNJbnBfgHGX6r1cCb0w4ptR4V+B1AdaESjmAlBiTRFMp 8Pjo5jxFMl2umghk1FuNFQVEd24Ry9BlP66QHunCXmFNozrAB/IZPkDBITlYcIc16Sczlf/wgX0q KQNpRYa1Eg6UwAmHsGFbKQROh3GCnDumH8vwuQjV2sFxvS/H932ZzTRldYUKFSpUqFChQoXHhYro VnjSIaWiXq+RGBMqgdZOq/RrrdBaoYzAWYEt3KCKK23ojVVJyDLVCWlaJ0kzpFC4vMDbHkZBYjxa O5S02NzS7XTo5QVDtYw00yRpQaJBihyBQ3mF8opMG2bMblKvN5Ba0Mk3k/s2RSLpCUEuNTrJ0LoW YmiQON/D+XYwyZISpQRK+yC5RiKFi3xJkFuLUuDR5EVKp1encCmIFKEylFfk3iOcQDmJEwIvFcrE ynCSokyU6wrwXUeRO/LCUlgXq34qZN2WTsiESuWgAzX8j/AC4VNgQHSF8JGIBQLmBIE0+phJqyXC e5z14eaAVJQMzPlYX/U2ksQQCSSUiscUgVR7j5OEPNmYUYs34CxIj1cZpQOxSOoo0cO5UB0mHs0J F+dIJOrhhghSoMpTmYsRPt4jpsixhZRIwLmYp+tdJNKDten3PeODrLmf0RSPF+XY8UON8D4Qf2Qk xjL4TfnQyyysjCTdxVinMH9E+BECPCoIHmIVWSoZphLl4tb2dsRXsEKFChUqVKhQ4SmHJ43olrLl Ck9NlO+/lIosq6NNQmFDFXKqpF1IiTaKNEtQStItOnhhI+/QCCnwKhAVk6QkWYM0rQOaXs9hbQcp C4wS4B1F7sEVOCvI8y65jRmvQGg4BWkdSguatQYNVUMaQ2IEzrfJcwsip5YlbBaeTm5x0iBUHWQg iM4RzaFKsuWiK7JEJQp02aLqQXosYAvPRNezqW3YOJHS9QaRpKBMcATGQ66QKlSDrVaIxKCSUMlV WvVJoxOKvHDkuYukO9xMkEpHAy/i2tKXyfbbPQXgXVwTgYJwQ8HTr74K4RCoYKTsZawshogn6UMj rnQS5x3eFlEmHXJ/fUmuZXA49gKEC+MpwGuJK2uy3uFEMLOyUof9hAwxUXE+wgZi6/AIYaOqN6x5 P2NXhMq39w5HgXP9+ml4n5CRwIr+++SdwPfJpuj37jpZ3gwQscBqA7EWYsqNAx/+jv+OQupI4Mvq s+ivq/fx/S33jXsQY668kH1teVk99qVEO76J1bm0QoUKFSpUqFDh8eFJI7pVb+5TG957tNZktRrG pIDAutDX6X0gn0ppkjShlhmyNA29nrhIEkOlUSiJVClap5gkw5gEBH1zI6lACg+y6O9rkhSjFJs2 F1inabV64CaZNatOI01ItCLViixJyZI6KMhdTtEtUIlCa0nPeTo2J7cCYSQu93hboI1EC49UAqVN kL7aAhAYY0izlEK4IO0VElwo1jkMBQ3axRDtYgiR1kEZrAwVYq3BeoH0CiUELtEorVFKo2UwNQp9 sS72koIXAqUTFEGu7IUicjKE8H2XZWvDmpcSYnyoVvqwYhCJIDicswjvkEKClgN5r48xQ14Gha9S +CIPFdl+STT00/pIooWS/c+CkIEEGiWxQoSqtXext9Vz3Z0/4uknnon0RZiriCS57KUVgJBx/pH8 xcieyP/jaywlv4GIi1IeHCYSKrAuOkaLUA123ofqcelmjQg9u1HO7a3r9zgHiH6lmanVYVGaK4vg OiUDYaY/PlHK7JHC4+LnNUQYhTmGWxfRKMuXJm6hIuyc6ztt928UTcngrc5vFSpUqFChQoUKA1TS 5QpPCqSUZFlGmqZBrupcJGqBjSipyLKUWr1OLVM477F5HnpBkSXnQBIzXHUCUvUv8LVWmERRFB2s dQhp0QmkKTRqClsYjEno2CT06/YAq0hUSs1IMqMxKgEdCJktHLl1WCvIkbR6HVoUFCJBWIsVOVJ7 jFToxKOUjT3DCUZq6omhXksRWga3aO/RLlSlHQKhNNZqur0aiJkgM7zyUeLrUU4gRdkzrHBROqt8 7Nl0DopocOQgyerUdcy1FQohNdZ5unmOwyHlgDwJUYArbzzF/lXh+tLiYEQViKyP1VAdial3LvBi V7oAhz5dvA+GX95hSzIsfCSRAu9jlViIvszXx65ZKQVOK5wXOBv6sL1TOOFiNTZInIWXSOkjybTh cemD1NqBiwQ6cF8PTuC9xEdyHCljqAa7fs01tvxGEu9FkBp7ixOlnFsiFGHN7HSKG1BKnAN86VTl pxBUZN/gS5bEnLjWsT9dxhGcsGFN+2tMv0ouZUEpSJBCDuKRBHj7h3czsUKFChUqVKhQ4Q8FVbxQ hR2ALepdQpBlGUmS9A2nnHflk2ijqTfq1Ot1EhPImncWW4TKqBQi8iMBQuHRSKmDwY9zCOGDQZJ2 aOXQGhIjqNU0tUyitaOWCUaG60ghyHs5SiqMMWidkCShQowA5wo8HqUlOjMUwtPq5XR6lryIBUdH IHwuuPDibajilbJUqUEqcuuxcTvvQEmDSVOkypiY8Kz7jaXXqyP0EEIlIA1IFSqvsYLppQIl8d7R 7XZoTU6yefMEk5Mtet0C6QTGJNSbTUZGZzAyYyZjM2cxNmMWQ2Nj1JtDGJMihI43GDxSaJTUKKGQ QgUjqDhnIcu/JU6EzN6yOtx/X0vCGiW5nkAyA+8VSK2iG3T8rWTM2I3RPVKGarAQCBekyBKB9MEQ LBhER2Iu4rz64whQMrovRxmylCgpw2sRMa829upGR6vpUUeESB9fflZjpTsQ6kis43tQloen/kd/ 37D/QHFQyqbD/MKNhdgD3HeLlkE8HfunpRzkH5ffBxm3ETLIqoNZVilnFv1qeJBdh20G40mUUiil plV3K1SoUKHCny4WLlxIu93mP/7jP/4kj1ehwo5CVdGt8DsjXF+r2JMryGp10jQQyWhZFJyTg/UO SapJswSTaASQ90KerrMEuWlUhkopEcogdIZUSZSuOqzLUfH5xDhAI9Ak0mBEgkFihGXmsCQvHEVP MDaaUa9rdBJ6XwulkM5hiiLIn9NALNqdnI7NKYTHKwUGvM+RGlQi8VpSoLDeIoocT44zCoQn8Y7U CpRzOAFdA1pAqxjm4fUNNk7uhM/m4LVFIYLUWIpQwSVIWa0I/smul1MUPYrC4YWg3mgyMjxKszGM zkIfsNEpShoKB7n1yDxHeY/yDt/thp5bHxyAIVTHweOVx0twtuwDjVVRR+zxFWE2PhzbR+JXVk9D Zb6AGL8jRXBl9j4YTHmvAYtwDi9d36hKxLKnw+J9EftngVgRFU6ErmFZhuoE0zJnoyw9VmSFiOQP gbXRR1p4nGAQSeUlPj4WHKGjUiBSV4eLUUBl5VcgZJBoO+/i3Q3Rl1EHYXcwqZKA9A4vXFzRUMH2 vsA7F/uJBxXdspAu4uuMiu4gXcahvChbqfuVYalK2bmiJO7Cu1BtFuBdlGHHnmMYxD5VqFChQoUK FSpUqIhuhR0IIQS1Wp16ozEwJSqrYy6QliRJyLIMY1SMpgnEqXCWaKcbvXQDmdFaoxITsnN1JGzK I2Wo5GqhQz8pCqPK6jAUokApxcwZNZSskdUEWaZIMgU6xsRog5YumCH5gq7t0Sm65DjQGpUkoRfV 20DmlEFKS4Gk6PXQoodJgnTYitB7WhQuVCkpUDqYMG3e3GOyNQOdzkHURuiJFsL6QDyVRCoVDLec R5gEnKPwoa9WKo82hjlz5jJv3nxGhsewomCyM0mn06MoAgGzBLdhoRRpliGBXrc7kLb2iVa4kSBj D2vZ1OpjpbKUjcdNw/uhZDCUEoEE+rLnFB+KqLHiK30ku2EUEJbSuEmKGBdUuhATpMMCh3dx30go w+cmHCfImstabJS0hw9b6FHtk8myZ7a88RIqxMI7nAhrLYhS7NIpWoSbJbhAwV3M6kUE4imJJLcc On4+PaFi70tyHCXHvjSSIq5JX8QQraj8oDIbjLCifNmLSI4HBn796myw64b4vIhqB4QbkP5yLaZU iitJc4UKFSpUqFDhqY5KulxhByBcXGdpSqNej0QoSnj7F9wCpRRpmgZJczRXss7ilEcYgUgUwuhg ghT/lkagZIFWDqMhyxT1miLR0REXUEphjEYbHfo/hacQDic9OgFhCiwdhLFo4/CioCjaWGHxtYSe dLTyLq28h5ch71Uag1EJGhPJoMO7POxnJ3G2hRCQphlpkiLRoZ/TJ3hvcL0CURQYl+HzJGTKKhcr cxongkS5lJ0abcjSjOFGkxkzZjA2Ywb1oQYjY2MsmL+AXRfOZ+e5s5k5Vme0WadmErx15HkPa2N1 VXiUFGhjMFmGSlKE0oGgK4PSOvxWCiXCcZVU/cqqEKI/HylinFGUIaOic7GQUVasEELhhcSJwOks oZPWexeq+SK6K0dXZGQpLw6kUAgRxlFBiiuUAjUgi316W85JqdBHjMdaR+E9hXdYG3uMt/hEisiK pZBMk/XGnOZAfQNxLGNtw76lfH76TxwUb33fWM3a2Hvu7dSvwpRJxH+WMuey+VxMMcSaIoXeUn6s dXDcVmqwduUQEAht36TMDwzIKlSoUOGPEZdccgkPP/wwe+21F+12G+89t912W7xuGEhoS78O7z3H H3/8NsdoNBpccskl/e0mJyd57nOfu8OPB3DTTTf1ny+PPRWPdd7lHB9tvJtuuol7772XLMtYvnx5 f7sLL7ywv83ZZ5897Vjbe+076ng7ap0qVNjReNKuiqqKwlMH3juSJKE5NBTIyLTnwglNKRUruWba xbnzIWLFKUBLRKJAC6RRoDXWFwiXk2iB1h4lHVI6lHJo7YPsWAq0ligtkFqACqa3TjoK36JbbKZn J3B0kRqEdPTyNu2iTccXtLF0hSUXLmS9SvAiGBX5IrjuOltgiw697gRF0UJKi9Gh71UIFWmTRqkE KRKE0HRaBa2WBkZxIiN3jsJaPBIhFVIrlNZorUmModloMDIywtjYGGMzZzJn7k7M3XkuzaEGiTEk iUEosHmO7fbweY63Ba4ogpt1XHMrBF4bZJqC1qHfVqrQ/ysVSoReUSUkSkQTLBFegRTBOEuW/bux F1RIBZFwKlU6Qsce2X5DbNnDGwkuEJi9HDgLR5JbRhCV5E+U/bgiVFpLR2hXnkdk7IVFYIkyYkQU /w6MmadB0CesTCGGlAbLZR+x6GvstxpgSittpMUDkjm1kuz72uOpH/74a6qBVJyLl0TZ+rYJbjmu lDLImGXo/S3DicpJWGv7kuVynIrsVqhQ4Y8ZjUaD6667jg984AMIITjkkEPo9XosXbqUn//856xa tap/vrv00ku54oortiJVjUaDe+65h3q93t/2O9/5DjfddNNWhO93Pd5NN93EHnvsQbPZRAjBqaee yjXXXNMny49n3vV6nTvuuIPrrrsOIQQzZsxgYmKCNWvW9EnhkiVL2HXXXel0Olx++eX9Md/znvf0 53PQQQf1H991112RUnL11VdvRSx3xPF21DpVqPBk4Em5InLTKnn/7/GHGHX0p4Dy4lxrQ3N4CKUU RVH0nysvuqWQqFi9hMHnI+xfRt6U9buY46rA+QJX5CgJWnm09CgBSgiMliRGkhiFUhIhPNYVWG9D /6X0WAq86KKMRRkRY4hCtTHEAwnaRZuez8mxOOWwwiIkWJfTaU3Qbk1Q5DmFKyiKPPoduWgKZLCO UFGM/aFCgFKxT7kxk04xyuZ2g56vU4jgMix8MG4CsM5hnUNqTaPZYGx4mOFmk6GRMWbPnkOSaNaN /4bx8XV0OpPgbOjrBNI0iWZeDudyrLNYa+lZS+E9UhuStIZKDF4pnAwV2Gh9FKi50qTGkCiDKaum 0RQq5BgH0ht6d2Vf1uvDIiKlQUoTJLZKxrynUHX1URLtUbjoQuzxwZhKlb3AUS0cjaScDzc/rIfC e3Jr6RUFeWEprIvEV/SJu5QaoVSf7Pqpn70phk3TqrMyGG6FivbA0GnadpEZb2t/qWT8zA1YcNkD TH9P+mZSXopw46U0vhIEbbOK1XE5GKv/nYmPWeGx3oXXJyVIEfqrp1aKI6ae4ypjqgoVKvyxol6v 841vfKNPpEqcf/75fOc73+F1r3td/7Fzzz2XNWvWcMEFF0wjTPV6nfvuu2/atieddBJSSs4777wd dryFCxdy4IEHcv311zM5OQnA6tWrOeyww+j1eo973gArV67sz2V8fJyPf/zjzJ49m6OPPvoxrd+S JUt49atf3f977dq1vPOd79zuGL/r8XbUOlWo8GSguvVf4Qmh7AvUWjMyMoIxJjgOMyCy5YW3Nhpj TH+faTcdPCjrUY5opATaC5SDVCmaaUamU5SXvOu893Lzdd/nve/8MHWTkqmEVCuSROOFw7oCh40/ Dqs8XjmSxNBs1jFpqEDWG01qjSYOQVEU+DIXVwoUgLXYXo9ePkHh2ljbBW9JjEYrjSs8Re4oCk+e O2xRIKUnSQXKWITqIDKFHtqJjZ0G61oNrBqJFdWYUSuCFNWJUNlLjCHRhlQbUp0ghKSX52zetJlu t0Mv79Ce2IzNe9TThLHhIcaGhmjW66SJQUqJx5K7gqIocD7cgEjrNZJ6HZNlwc0ZF4idlBgd3pfw O/xbSRUIuwoVRCEUSBOcpUVwY+4TQVFWRKPTsBg4SIfII9WvQobnw+tWUqK0jlJmBiRTykh0Q722 KCyFteRFTq9XkOcW6wLRlVF6LZQKhJwBURwQWtF3MlbR3VqqAamVcRulVJAIxwp1WR4OZHFqVXdr OXMZMyQGBet+tbVPeb2PZmN+4PI85XskRZifjtV9rXWf6Dof+q/L11EeaP6CBWzatIkHH3xw2h36 qbKxLb+vFfmtUKHCHwNarRYXXXTRtMdKovSLX/xiGjEaHx/n/vvvZ9GiRRhjpu3z/ve/f9q2mzdv 5sEHH+TII4+cdt78XY5Xjrls2bKtKsVPdN533XXXtL/vueceiqJg33333e6aPVZsa4zf5Xg7ap0q VHiyUBHdCo8b5QXzzJkz+dnPfsZ9961l7732nvbc1H5PrXS/grflxbaAmCkaqpTKB4JbTwx1k1DP amQmZf4uCznyRcexceMG/uVfPkSqMlKdBHKYaNIsRWoVqpreUUTH3TTJqDcbpFmKTpJA4JTEJCnW e/KiiKZIPrjaxtxaLQSpEWhtEdKGarD3ZbIQEgVekHcL2u0W7fYEed7CuzZSdSikY0PXUKg5ZMOL 0I3ZyCRDqEhstEaaKAE2BgnYXkF7ss3k5CSbJyfYNLEZrTWjo8PBiMsXKDyJUtSShFqSYIToGzI5 PCiB1AaTpJg0Q5sUk6SkaYZJMqQy/WquENFBuKx8xm5dIWL1VqmYYWxAaoTSUc4cfvdjcdSWZFf1 o3VKyW2oekbyRpC7lxVOC/RsQafTod3p0O11cd6RGE1aSzFpEsmpKsXDkRzqSMAHVVktB1VcKWLv r9j6NFcS0tIJuiSHYlq/7Ba9s6XJ1ZTe3gHR3ZL4lqZRQa5cEust9dWlvdXUPt3yiTLaKNwgYorc G979zneSZRlvOv30/t3xqd/PkrhX5LZChQp/Cth3333RWk/rES1/Fi9e/JjGKMnXjjze+Pg4Z555 JkmScMcdd2zVC7sj5v2HjB21ThUqPFmoiG6Fx4iBs06oSgmyWm3KhXSQDns8WqtooBNlxTHzVE2T acY8GzxSBPdc4T1GS7IspZZlGK3RSmKM5pTXn473jve+73wKZ9FJSprVyNI6ianRbDSp9+cTujeV gHq9RpqlwT03OjR766klNdJEI2NEjHQeCg/Wo4QkSRMa9Qb1NCHTmlSrEE7jBUrWSGsjpPURdJaB FBS2oJd3cK5Aa4nzhg2bFMgZzJ67K6MzZpE2EtJEkeo6WqZopfuv0bqCbqfFxo3r2bhhHa3WJoq8 i9KSLE1DLnGWYZ2l1evRygvatqCdd2l127S7bYpegRSKrJaR1jN0ohFSoo0hq9dIGzVkYsLLjK8l xBvL0OsqZOifFYAUKCGCGlnQr3ZLUcp5VZRvx8/FtH7TWAkuS5zlj5axqgyuKLB5QZHndDptNrc2 025N4J1HmQyVNkgaw9QbI2RJRpoaarWEWi0lSTUqEahEoWLsk0oSpDQIlSB0EnqTS64tXLgR4IKD s3NT/884JAlZG1zBS7dvpvb/lvOPTs2I6NAsBmQ+MNrwPRH9160QUg+q2VHWXebtei/xXmCdx7qB rLnMnXYuuDKHeywObx3Cw0uPPY7XrDiJL/znf/Lf/30l5Wl8QBa6yO0AACAASURBVNYD0U2SZFq/ btW+UaFChT92TO0RnfozZ86crW76/b6Ot3r1aowxXHrppf2e1y3zZn/f855qwuW958Mf/vAOP8ZU 7Kh1qlBhR2OHEt2pF1pVJeFPCSV5CRfoIIPbcFqbsk2wD0I4QjFQEL2M8EIFl2FRugwLwOJdgcCi VIjRURpMoknTBG0kOpEYLXjB4sUcddRxXHHF57n33nsC2VJEN94EJQzSS7IkZaQxRGYMmRQMZ5ok BbBIFXoznQWbW7COTEuyTKGkR3gQTqJlQpIY0lRTyxoM1ccYrjVp6ATtQ36pThoIM0xXa3yaoLMU bRT4QKYdGXlPk3ckhdUMN5vssssYc+Y2GR0bppYOkZka9axOs1YnEQopPc73sPkkRa+FsAVKOJzt 4ZzFmASvJBsmJ/nN+nWc9qyEdx84SkaL9ZvHmZiYIG87lDdRFhz6nfEhsxYlSOoJqpFijcFJFauh GofEIulJSSHBijJlx4PzSGtR1qKcC9JyEYyspAhSYCHKqqRAeAlOEv5TCB8/N1LihMDGCrSwQbLu 85xet0VR9DBGMzI0TKM5RlofIa2PAgnCScaGm8yeOczISEaSeJIEhkZSmiMZJhPoRIM0WKHwWuN1 cO8WMc4oJvTgXZBRSxTCyb5bc+gNh9GRYe646j/51e038Oy99sQi8VLiVJi7iyTXSYmX4ZhSKOQU /bKL+gQnNV5qpDRxW42I//ax/9lLhdMap0LPsYi9zmVEkXAO6TzCepy1OAdvO+ttjG/YwGmnvxVH kJM7L3BO9Em7tRYpZZCjK1WR3AoVKvxR46677up7gDxRjI2NMW/ePNasWUOe5zv8eKeeeipCCG6+ +ea+RHdHzPvxYGxsjF/84hcsX76cAw44oH89fs455zwpx9tR61ShwpOFKke3wmPA4AYGgDGGer2O nuKw7AEl1XSTHqKUWQRpsFQSGeJTUVLGHFIfilxiUAEOMSmKxAQp6m233cTxyw7DJBqdmBgvk+N9 MDWSUuKsRRtNmoGXFqQnqZn+SV7GjNaisBTeUhQWqR1eKKy3CKkxWajkOhEqbEp5tNR4n+K9Q9jg xKy1R9ChyC1SOVSsCmuhEA6c9SByVLIBLzegTI+xGWM0ZynGxyfY+IhFOoNJgxlS3uuBC/JjRZDy OmfJC4u1PbrtLi63tKIxFgXYYibeCDauH2di4ya81yRGUZgEZwTKaRQSYp8rhUVnhqF6Aw10N7cQ hQ0Eyg+snKx3QVbMwKGYmI0rAOltIGD9/N0AKVTIvNWhEukKG5yrJf04HuEdmmDelecFSgqEMhgp MKqJVrXQLywttUQhhWfDZAfTrDM6c4yxZsrmiU0UeYc0TWg0G4BHS+h2cqzytCfbuMIGZ2UPAoXF ICToSFaDT7QLhNKFar6XQXIspRz4RUfJcbhhELNvgTLPF6LpXungPM1kLRLoWBkXXiAcMYLK9TOD pSJk/EbJvBc+kNsofXZx4UX5DnnPC486JvbBxwG8Qzgf5xO2KYoCIQRJkvRdzitUqFDhjxVb9tc+ liroiSeeyKpVq/p/L168mAULFnDbbbf9VgOkJ3K8Ej/96U/75O13GeeJYGhoiJ133plVq1bxne98 50k9Fuy4dapQ4clCJV2u8JjQN59Smnq9gUmSvgMvEEhav1dzqnSFQHRL/yVZRqYEh9/QQ0k04Ylk VwfCq6Tqb1dGzwgVCEduCwqXB0knFiEF1hXktocyCpNqHMEYCxcknz5mnvpo8NPOe0x22hQOdJZR H6qT1VOM0SRaoZRDaUeSCtJMkdUk9UwgRQfp2xiXI/MewhWBnET3aO/AJJ5mvU0jaZOIIlYQNd08 pycn6ImCTmHpORA6RemUNGtQb4yidYrzgqKwdDoFk60Wv1n3CA/c/wAPP/wwG9avw1kbZLd5jvIC 5SXeWvJOh7zTDr97XYq8S95t057cRKc1iSsKtFKYJOSzBqV3yL713gY5s5dYL7BICqAQAiskVqog bfZTU25DJJESMf5HCZwCqzxWOJx0WOmxPhiOaQe226PbycktqDQjawwjTAOfjZCOjDFjuMG80ZQ5 dc9YQzPUbFD4IJ9u1GrMGB1hqFGDIoeioJ4YhpopQ02NURZhuxhAIrBOIEQajLG0QmuFUKXJVJBe SyX77svTbtJM6y/e+scPvhzTHg/SbhE+w/0bLQNzrNL5uTSY0tqQpGno2xYybhfzi8ve3Ti/8FXz /fdAxvGQg974cpuiCMZkpdlWhQoVKvyxouzxHBsb44YbbpjmVHzJJZdsUwK7fPny/uNjY2N89KMf pdfrbWU89bscb+nSpdx///19c6uFCxeyYsUK7r77bu6+++4nNO/Hgu0Za23r8aVLl/LBD37wCR3n tx1vR60TDLJ/KzlzhR2Jiug+DixdupQ8z7nwwgv78pBtBV9vGZz9aF/acsypvRTb2r48AVx44YXT 9pkabD51u6k/U0O9ga3mvr3tph//LLy35EWXDRvWcfVVX0Eb0y/pTY1FKQnD0UcdzZqfr+FXa37J vT/7OT/78T18+EMf6T8fJMiCU17/Jn7w/V/y5tPP5IgjjuTWW+7mlhvv5p//6bOYJGHW3J344n99 g09/ejUq0ViX41yBE5bGcJOP/P1n+fdPXcvnPnk9X/zXm/jiJ2/m5ce9PkT3eEfhHL4IZNcojUo0 OY599noen/7AdbxlxbuQWnPGq9/LRWddzj+c+0U+9vYv8bqlb8P6Ds7neCxSOPbbfX/+z9s+yzuX v5uGUTRSyXCWYoCmyTjrZRdz/qv+mV2G5mF8gaFNPrGeh+69j5HNm/jY4fvw2WWH8PkT9uezf/5s Tnv2HNrtFp1ujzy3dPOCI3Yd5XOvfC4v32ceB82fyZVvOJovn34sFx1/CB9cdjBffNMx7DzaIDOK S09+ITefvZRbznkxh+8xG0RO3uuQkvOpl+zG6hV7c/Xr9uO6v3guXz1xL175jCa9XpdSx+u8jQFP QbqrlEBKxWgt5YpTDuX2c47h9vP+jNvOfzG3vv1YTlmyxzZyWgcxOzYouDli76fx/b9/Ex96zdEI 77n8bSdy9yfO4c5PnMtPP7OSj7/t1Xgp6RWWXl4glebYg/biWx88nU+e9VoWzB5m7miD1HjyoocS no+dcTJfuPAsnrlgHs56XF5QtNsI53jh/s/m1ss+zs++8gXWXr+KX1z7BT7xN29DCIX3umzW5Q3L /5z7b76Ss9+wgiMXH8Kam7/Mr279Gldd9nG+cunH+ckN/83CeTtTyzJu+PynWH/Xjay/62Ze8qIX 9PuPx0aGufO6K9n40++y8Z47Gb/nLtb/7Hv89ZlvmU6Ep3y3XOwNxjuEEIyNjvKDb93CpgfvZeP9 a1h/3y8Yf+BeLjj37Nj/PLhhVOKlxx1Le9M4eWsztjOJ7Uzy+c9+eqBYiO/LOeecg/eed7/73Rxz zDFs3LiRPM+5/fbbSdP0cZ97Smx5Xit/tsyB3BbKfrHtnWN+2/MVKlSosHr1ap7+9KfznOc8h263 2z8H1ev1aXE6JU444QTmz5+P957169fTbDaZM2fOY650PpbjrV69mquvvpqJiQm899x7771873vf Y8mSJf2q8eOd92PB+Pg4RxxxBENDQ/1jH3/88dt8/JJLLmHfffel0+k8oWM92vF25DpVqPBk4E/6 Nv+T1Zd22GGH8a53vWtalWT27NmsWbOG66+/nuXLl0/bvvx7yxPaJZdcwimnnLLV+MuXL2e33Xbb 5gngNa95DStXrtzmvG666aZtuvitXLmSu+66i1WrVnH22Wdv15SgHHfLLLltjbv//vvxg+8HS/p2 u41UoTIFYd0v+vuLWH7iiVsd47hjX8KCBQtYcdIrybtdpB5czL/0JcezYMGug41LD6D4PnrAl5Vc HMtevJxTXnPmNl/LiS89FS/gP6++LEQG4dEyVIt7wtN2Od3YVzIyNJOLz/k8Rk+3+H/usxYzc3QO /3j5O0IFtZwPoTI93DAYk2CUoz1pyUxJIjx5q0DnEpW0aK//KcsOWcySPRdtNc/nL5zB7JrmXVff Tber8Qi6O4cbF4fvNodX77dwsByxMrhdSCiE5VV778JfPm+3bW7y2n3mYq3ls999AGsLvAuSVhWN pZyHk/abxxmLt73/KUv2ADyf/J+7+++PkEFuLqQIAa+OUN0GZjXr3HnRW0nN9FPNnx+2L0/bZRbL P3ApOk1oNocYzqKRmPDUajXWrV/HRKuFV020ipVKoJcXdLoFwnmUk1xwynKOW3zwVnM97gXPY/Un ZnP8Ge+j1+tGdUEY52V/9kLOPmVFf9vgI/UoaxtJ51tOXsH7zjtjm5v89ZlvAeADH/0Ezjmcc30H Zu8dPvbbnvGm03j/he/c9hjnng3A+z/wQWxUlHvv+eQn/om/eN1rt9r+xFe+gt2e9jSOeNFRdDvd aa7OW54ryptR8PjPPdvbHuCKK67g8ssvf9QLtlWrVnHyySdz3HHHbRX5MTY2xgtf+EJarRarV6/e 7hgVKlT408epp57Kqaeeut3n165dS61W2+7zW2LJkiVP+vF+2xi/6zilidNjHXN7j2/52I463m97 7rcdr8TFF1/MxRdf/KhjVKjweFFVdJ8Ajj76aHq9Xr/Rf9myZRRFwezZs1m+fDmPPPIIzWZzmgHA lg33S5cu5eSTT562rRCCGTNmsGbNGg4++GAuuOCCrY69++67T9vnkEMOodfrcfbZZ7N48WJardY0 A4Jdd911m3fxTjjhhGnVp/I1vPWtb50mS1m6dCnPe97zAHjNa1/HzrvMZ/acnXjNa0+eZkCg5CDK 5OijjuIVL38569at41l77cmiPXZj971356BDD+JX9/+KZ+/zHN70xjcjlEQqgYwkZsGCXdmwYT3H HHsQLzp6f84482ScK6Z8Sn2MpAl9keWNjI998m858Q1H8Mo3LOFVpy/m/Z84D+ssxx7+ctI0i73B Ib8VAdZ5es6Re4sHnrFwL4w2fO5rH+Pcf3gVb//HE7nqls8CsOtOz2Tv3Q7GFR7lBY0siybDgqFM MZQoaoliqFEjywbVss5kh97GTcjer9lnvuKwPXZlc7vNKf/0b7zqI5dxwkf+k5P+5cs8tKnFM2YP c/yec2h3JujkbVwkn7sMZ2zs5Lzq019n6b9cxdtX3cK7rryFU/79Bh7a3KZbWN50+a0c88lv8mf/ djs3PTBOLoLJF8A7rrqTwy6+isP+4WoO/+freec138c6z/F7zEGFVNd+P2n5W3mPjmTpXV/9Pos/ ei3P/8hXWfzRq3jHVXdineeEAxZhEoU3mmSoSX10mOaMMZojQzTqdYbqNbIsA+Dg3eeTGs1pF3+O ea+8gKct/xs+9KVvALDvonm85Pn7MHfWEKN1GFLd/vr9/P4H+cEv7kNnDep1g7d5eb+D3EKvcBQO DnnOPvzZoQcyvmkzR572V5xy4ft563s/wKvPPI/7H3qYffd4Ome8ZmlfJlx+Rp82b2fWbdjI7ke9 jHnPP5alp53JstPOZO9jXs7aB35Nu9PlyBVvZNb+hzNr/xdw1Q03An2FMK894zxmPOsAxvbYnxnP 2I8VbzyDwlpOe+2rqdcH/2df9tVSVnan3Htb/henMbzzrozN342ZC3bjpFPeQFEUnPb619GoN/rz felxx/Kak17NI7/5DWNzdsLUhzD1JrN3ns+aX97LQQcdyNvPPw+YztXLc8XQ0BDGGA477DB6vR7L li17XOee8lwF4WbY1PNGeX5bvnz5o1Z2b775Zu677z4OPvhgjjvuuGnPvf71r2fRokVceeWVv5ee sgoVKlSoUKHCUwMV0X0CeOSRR6bJX1avXs1nPvMZAG6//Xbmz5/fb8i/7LLLWLNmDfV6nYULB9W5 888/n16vx4tf/OJpzftlv0NRFDzrWc/a5rEXLVq0VcP/CSecAMBJJ5007WKxvMtWGjJcfPHFCCGm GTTA4EK00Wiwxx579B8//vjj0Vrzd3/3fq655ppQpRKCa665lr323oe1a9f2t43X85x++pvJ85zX vu7kQLJFiEcZH1/He9+3EmsLdlv09EBAhYwRNTC+YT0vf+VRdDrtWCkUpclzH9ZbPA6hJKu/9gVe 9trDuPGb19DLe30J7o9+fhe/Wf8QWZKxy9yFSB3yV5UITljdoksuHEQzrTX338OZFy3ntu/fSFFY ut0O3/j2l/j2j24AYP89FqNVSj1tkqUZxAxVE9JyUEKglQpuwuU8ezntzb9mYuNPOXyfA7Cu4F+/ 8gUyv5Es34TptOhsbnHp17+LdZ55I3WszbEix0ePr03dgjO++n1IDEliCH6+wam6xNDQMLvMn8fY rJmMzh6jMdrgv378AEd+6hvc+st1GKNJjSHVhh89MsEjrS6ZliwczTDa0Gg0yGppPwIoNZqv/OhB jv3UTdzxwEaazZQZY0PMmT2LB3qe37RzaonmGQvnUB8dJhseIhseojY2Qn10hJFGg+F6k2a9CQh+ cN/D7H7y33Dtrd9n7py5zNllHl+8/cd85bs/BuAlB+1Noi1jDcGus4cRCJy1/OgXa+kIw/CMWXTb k2wc/000zYJuYSkc5E6w4tgjyIuCN7/3o2zaMMG6X/+a9Q8+yMSmcT7xucux1vKMp80jTVN0YvoV zXUbNnHoq95Ip9OL8VflZ3EbmbsMMm4/8dn/YPZzns9Xb7ix32+LgNu+813uf/DXNGo1nrHb08J+ U1jnVG3Jx/7Pv9LY6Wl8+avXAOCso7CW/731du5/4EEa9TrPeMbulMnG57ztLHq9nJce/zImJ1v9 ccY3bOBt55xHURTssccz6Rs/x+fLc8XExAQ29uvC4z/3lOeAlStXbqX2uPjii7n00kuBYPyyPYyP j/P1r399m9uV564vfOEL292/QoUKFSpUqFDh8eJ3ki7/oUZWPNnzuv7667cimj/4wQ8AuOqqq6bJ 8sqA8kWLBrLV0uK+zBHbHnbbbTeSJJk23raOXY7XarWmEc9Hw/akiK1Wa0pvoOeZz3wmAD/5yY9B BIfekgwIKbbY2zE6OsxOO82lVqtx1Ze/st3jL1iwkHqW4GzRr0Ldccet9PJurGSFntFgaju4eg9O zQqlNFJJkJbT/+J8jnrBsq2O0e11yEhJCfE/3hhaeYdWu41ODSaKmp33jE9M4IRFCo+RHmTGD352 G8/d43Bmjs6hMZLhvaPIQ9VRIkilxCtJQY5VUPSKfoyNch4jczJRZ7g+htEJb3vFX2x3PXYarqOF pOdEyG0F7n64jXcZhhwhevSEocMQqc76pbuhmSMkjVlMtCZxWMbHFZtIUULxVwfM40W7zdh6XQpH Ijz1TJIajbWCzEmyWo00rZFPTtCdHOeMw/fkhU+fs/X+1jE6a4zRZDOtTZvwPUfqa0gv2ZhDq9Wh l4fPrHUWnyTMnDGLWbNng9R0u13+98e/4sX77sGuM8c4YNEwO43WmTerCUBeFHiVkNZHuO/+9Uys 38SM0WZwPga8C1E6zUbK7BmjZGnC5Re9a7tru2jnOcxKJJO9Xv+eyTe/ezed3KKkQWDxMlRb/VRy GmXZ4IIkmxAv5YGPvfddnPSypVsdq93uIKVGSom1+SBeN8Yv+TgcHv75Ix/i5BWv2sYY7RDHpGB4 ZJRddtmZer3GbTffuN3XuNuiRZgspdft4kV4ldffcAOtdiuaxoW7UGNjY+yyyy6P+dzTaDR+q6y4 lCVv63w1Fe95z3tYsWLFNHfOhQsXcuCBB/LII49w7bXXbnc+FSpUqFChQoUKjxd/0j26TxWUdvKb N2/mJz/5yaNuu3TpUr70pS89JhfW0bEx5s2fT7vd5v4HHojOvB5rfTQtmlI+moLHkqAsROgLnWq4 I4ToOzcPNJh+yoDBtVZLgzGGZ+/9XC4464OoKTFH0+chyDCInqBQIXZootMhz3MaaYKZ4mLb6eV4 VaBlYCbdrg05q0SXaC2xRY5W4TEtJPW6YjIv6BbQ6oFyCTGRFanrDI3uRLM2jBS/XTghcGhRIKih vI7rIUlEk4Icp3OyehOTzmaomYU1QtBDMGk9hTC02wU9Z3j+00Y5/6C5qEfpOU0SRaOhEHjquk6j XsMYQ7tnefboEGcf9uxH3T9VktbmCTaMr4fc0VM1lNT8ev06Jtsb2Ty/SekKPH/BTmiVUasbpFEY HSJ6ALIkYf/dF7Fp/H5+9cCv8HvvG3JgnaC1qUV7c4tUZKS6Hj8OHhv7X8sK729dW+9J6FFIhypf kpAYnSBkgXce6yQIH2J1yz5sJREq5mEh8M7z4iMW828fef+0aK0t3kiSJMUYg/cWFyN/QjBu2OS4 Y47k8kv+Ba23MwaAFng5pSn8Mb1QEUhu+XkTAi9lCA+e+sJ2MB5rjuLatWv59re/zeLFizn66KNZ tWoVr3jFK8iyjFWrVj3psRsVKlR4auCx9MxWqFDhqYGK6P4/RKvVYsmSJTusL62UHT/aeOeffz5a a26//fZphjNjY2PccccdzJ07FwjXxVKFvttarcbOu+zCd+/87pSc0Ef76Aja7TYvf+UJ3P3D7yFs 6I8NEUISpUFrgdYaqdWgQiwESqlQxe2T36lVtphZiqfdbXP8cSehlOKeNT/kgoveTLfI0UnCSGOY i87/JCNDYzGiRdLr9nC5o3A5SmqUMoPLfu8QNsQQoQReOEwmSbOhSDQEWiQ06oahRgMBIQopg17h adshOjajWZuJFxqEoMjmkOeWdEYTqRSFzbn6W/9Kq2hRWM+mfB0dZ5jozqTDDH4zIWgkNQRDpAyI CiJB1pokQpE2MrLaCJkckBZjMtpdy0QnZyL3uGSIE545ihKCe9a3eOc1P2VkdJThkWE2b1zHexcv ZLRmaNQbzKhnNOp1up0eExObGd+wiXa7zVlH74ESgl9uaPO3//MAv5loIXyH2Znj/cc+h+EsYdO6 dTyw5gG63iJ8QUtP0sgMI7WCptbMHa0hhKCemf/L3pnHS1LW5/77LrX0ctaZMzMMzMAArogbCETB xChoUDBcY+J+jUu8ZrlGNGo0ConmXhOuuVmMZtGgJkZuouIWYzAxUdQEFBVBUBy2YZl9ztpLVb3v +7t/vNV9zmEGBe/NgqmHTzMz3dXV1dXV/amnnuf3PJx83CyJSumVBcveYUWTJCPyr9m/BF/5+i3M tKZ57lPiDPWwrPAoWnmLXHmsXb2oEsKoJir+e1iUvODi/811t9wWq6S8R0pHqEosCqs1nZYmb3Xq AmBQSrCJoAJ4rwlOo+tE5BH0qF6IMA6j+qWffQHWGL523Q08/YX/jbKIlvmZ6Un+8cMfYG7DDMbq uhPaosTjQ1hHWC/8hVdgreGrX7+Ws89/NkNXgAgbpqf50hV/w6a5jasXgGrXRH8w4EfPfirf+No3 4vaPTCtqNf14dMgcTmjrmi9Zdbv0+32e+MQnfk9VF1g3r39veNSjHnWf64suv/xyzjzzzHG/ZWNb btCgQYMGDRr8a6GZ0f13wMjOfM+53R8Uo36z77e+tRbnV77yld870l2g1++zZ88eAB5x0knrekLv DYuLi+zZu4dWq8XWrVsJPlAbThE8qBC7dI0Zh0QptUp011arMLIsr57Vo5XCh0CWtdi4YRNFOeTd f34Jvf6AIAptLFqvKmVGGxQQgqcsK6rSRys0ijzLIiUQqIqCUDksiumJSSa7Ezxkx6PQSvPdXd9E xJHlCWkeT+hb2RQLvRVWShj4SQq20w/bCPWA7aGize6lNncvCcvFCtYktNrTBEloZbOktkueWWZn FUdtKXjQDsdDjhU2d5fI1KD+DAKlFiRrYdoTqCShVw3oLx5CSUApaOHww2XElyij6LYss5mm8MJf 3LjE0duPZePGOZQx2MSusZtrQoCy9CwtLXPo4AK95R6pCmzopJQ+8KdfvoXv7LyVO/bs5Y49B7jt zj24uod49+7dlL0Bs4nhuI05x2+Bk7cbzjvrRM457WiO2xg/01aiePKjtvEzT3oETz7jEUy2LctL +zj9hK0YrfjHr3+HT3z2Kq69aS+HegEBtm2eI29PkSQpaWLQWh02jiBBWFzqsffQAnmWsnVuY1SJ JarFWilskqKtwUlgpSzoFwOSdHRsBERKUB5rFMbWnc6s0kSrTe0WiPfMTE2yddMcg+GQ17z1Eirv 6jotsy4N27vofJBR1/Aa18L09DRbt2yhPxjwy69/M6Wr1g/wjo/0eNFneWmZu3fvpt1qsf2Ybff6 vVv7OvcmAo8qNu7Pb8/a36rzzjvcqg2rM7y33HLL962J+PCHP8xwOOTJT34yD3/4wzn11FO5+uqr +fSnP/19t6VBgwYNGjRo0OD+4IeG6K7tdXwg4PLLLx//ec+00lFf5X3pp4T1QS8f/OAH16U7H2ld 9zxpHam5ozliUWCtJU1TPvk3cc729a97Hef+xLnjntxzzjmH6679Jtu3xZNlVRNWrTVXXPF3ALzn T/6Ms89+anRtKo02mmOOPpqvfOUGfvxJT0EpjxoNLLK+i1dq9SlIALUavqSMwiPjIKAszXnsyY+n qBxlUZLbFm9/7buZ27AFAI1BPFibRNIroMVQDEqcqwA48diH8aFLruAhO05m8+atbJw9ih955Lk8 +sFPoHQFN+66CpsINrMc6N1JEE+WdvmxR7wUxxxOb+Gh2x7FWy84n40TEwiKZZlg3m/gQNHhO3tv A+DJj3wuD9r2aDZu2Mrs9IlMT57AsZt38IpTXsyxueWomXkedPQi3ay2cEqIil2S4Ixh4GEwLBn0 llkelqRG89hpRbtcoBOWaIc+1heIQGYUpxzVJclyhqVjZX6ei884mk3tWF00LErm5xdZWFik1+vj qipeJFDxMkBqNKdt34BWkbjlSnj/i5/MUVNxjnZ6apqHHbeZxx43wZMeMsF5J3d52kk5px8rnLIN TtwUFfOjpmd55qNOYWuuaRtP8BXnPeZhPPUxD2ZYVnz8FFGq/gAAIABJREFUS1/n9j0LLA9Srt81 jw+BDZNdLvm5Z5PU2/Njj30on3/3b3DMXJw3jseF4CXw91d/E4Dfv/ClnH3aYzDKopRGacNRm+b4 2uXv5UmPP5WBE1bq4CmIroDgK5x3BAlYbTHGsLTSY8/+g7TyjKeceQbRfq3XJTa38pyn/diZKBTa aGanJ/iHv34f248+CgDnHd778bau/U0a/b3danHuOU+OxFRrpqem+eIVf8Ox2yOZDT4+T2vNJz/9 twB85LIP8sxnnld/RlGi3bZtG8vzB3jm+UcmoaMLGyL1CIBa/e356Ec/ep9+e0bLX3zxxYf13I5m /fv9PpdccskRt2Etdu3axV/+5V8yNzfHxz/+cfI8PyzXoEGDBg0aNGjQ4P8HGuvyvxN+53d+hwsu uIAzzzxzfCL5/4LXvva1POlJT2LHjh33akecn5/nne98J+94xzu4+OKL77WPVytNq93CGMM73/WH nPf0cznj9DP4wPvfv265gwcPctfdd/OgE09cZ/l8z3vfwznnPJXHnfo4Ln3P+++5+ohRB6thrOjC qioVZKQErxe8ApH8Li0v8PHPXMbPvfBCXnDBy3nBBS+/1/eSpRkTrUmWesv0Bn28cYCwvNwbrztL c37zl9512POv2/nP7Nq7k+nJDQwKxc679nHd7dfw6B1n8Ijtp/OI7aePly19YOfeeU6YmwQ7hc9g xS1z5c27OHn7ITa2ZznluCcecTtTq0n8IjOdwFQrEnCkQmmPCxZPwAIaTZ5mDOpwpLNPmOPsE+YA eNe1u7lyT4/P3J7xXx82y/nHd4kRXS1g6h67XxN8nE8dDob4ICTa0Heev9+5n+c9ehvPfMQWnvmI LYd/dEpz8o6jCNUCx81WbOkU+OU99BfmoTrIg7ZsZdOGmdVZV6XZPred7XNw3sMePl7P5775Xa69 fQ94hfOaA8sFn7rqOp515mN4+mkn8fTTThovOyxKvnbTnTzi+GPqe+Ind+mnPseTH/dITnno8fzB a152xH0bANEpPjiGxWqFkULjRaJ6qlcvtNx659087pEnceFLns+FL3k+AD/7urfw6c99nvf8n4/w Gxf+Iq//+Zfy+p8/8gzY2EZ8hMcWFhf54/d9gP/5ljfyxte+ije+9vAe6FhJFOp9rXjnH/8J5517 Lo8/43Q+/KEPHvE11feav60vXsSKo/v/27N2+Xv73fjt3/7t+zyCMQqvOvHEE5vu3AYNGjRo0KDB vxp+aBTdByLOOuuscQ/lWoy6cO9ZAfS9MD8/z/HHH88Xv/jFwx67+OKL19ULjTpz177eqaeeyqWX XgpAklistYgIRmvOu+ACPnTZZevW+bGPf4xHPPJkint09IoIIQSe9ez/wq+/9eLDtmU4HPDCFz2L L37xc2ijMVqvm9FdtUdHpWtc4VIj9qEKSgX+6pOX8qu/9Utj9Qxi0vLF73gVX/yXWN0iXmhlOe1W i067i8FQDSt85VAq2lhvuu1GXvyWZ7P30J512/qej/4W7/vkO/BFSm/FsGeP5449lt//1If5yFVX rFv2Szfv4af+5AruOLQY7zAJzrRZGbaYX+7y6Ztu5jvzuw/bH14CV+7+Cj5XSGEol/p00pHqWFKU y/TKHmXlqKoK5T3e5Hzs1h67+9V4PVUQCq9IPPztrj6XfH0ev+YKQemFN//LXj5/5woKRbuVA8LB AwcpK0ea5qA0xiZ8dQH+/kBBWKNEFi7w63/3db508160gqlyPyfNFTxqe0Yy2EtXCds3bWHz7ASJ hqXlPgjsOXSA1/3Re9k7v7juff/Cu/+KV/3RRwlBqLzHJgntLOPiSz/JJZf93bplP/3P3+AxP/sm du09uHqnrB5rz3vz7/Bb7z+csA2Lkgte/et89qpvUJHgSAh1fpViZJnXBFF4H8bz56+/5A/4ynU3 jNczGBbcvWcvKMW7/+KveP6rXo9bc8wNhkN+/Nn/lQ9+5BNxu0aXT9Ycz2tvf/Anl/LTL/45nFtd R38w4PFnn8uffyh+z0Ri4FZcjeLJzziP173x8GTpfn/A6Y8/i0986lOHPTZ+p2q1Q3j0Tbq/vz1n nXXWYb8bwLiL9561Q98LoyozgOuvv57rr7/+Pj+3QYMGDRo0aNDgvkJprX9gr+9/JJvwf6RteSBC qTgHmaYpnYkJrNEEQFsbQ6Lqk+T1wTeqDt2JhDGmMof6cUHEo7QiSxMya0izhCSNAVdGg03q5ycJ 1iasHf0VakZiPKRgrMUYjTaG0pVUrkAkUKIJxB7bJMvIbUJbJ3SSBCOGYuCwiWXuqDm8Eu7ccxfL /R4mSzj9lCfy+pdfzM5d3+X1f3AhXhQaRTdvMTPRIUmjrVWbKVZWYO/8EJ9MUyYtlEnQrkPQGZJ3 cLpNUEJmNIlRBJuh0zZdLczmiq2zOSceO8tRR7XI0grbKsntJN6n7N+3l913fpuF/XdihxUzm7dx h5/kW3d6BsmxlOkMaIUJgVbQ2EShqMiUI9OePDVom7McFL0KCmVRymAV6FB/Zgpim5IilJ5iMKC/ sgwhhi6lSYoPARHHbDdBesvs2nUHTlmO3nYMD9lxFDPWM9FbJPcLtM0htm8Wuu2AK4ZMT83itWFY LtOrFAO3hdNOfDy37d3HK971Ufq+TdFfwrke/WFJ6T1GFInWWMBqhRZNqLcBcXjxhCCEUBc0CwQ8 EgI6BFAh1v2IoOueZK1jgJOEgPcVobYRFx6UeDIqEu0xCioXqHytngaHQtXHd30ESsD7AMGDeLwP BOehVoFjy60iBE8Qj/gYkqWCIxb6rEmHrkm5iKCCQtX3CdGCLSGgqFOhJX53kBh6JiJUVYWvfOxq Dmvs0GvCqEb3jd6DKA+EaNen3oU+7tMjDgb/G+LKK6/kzDPP5IILLrhfF/QaNGjQoEGDBg3uKxrr cgNAIRIVrrzVxpoEiGqukroIVI91qrHCOlKJ4sm6R4VQV7GEaKUUIUGRIFijMQpUEIzRGG3qsB9d 1wwFtDIorWo1SyLx1RovvlZtdf1vS1AKJ4ITPw60Uk5woWKgHEoCWdKiX5UYX7HR1/dpzVAbfFC4 4EZvHytdjLIEKoauYLnydJNJCp+zNMhZGmQsyDS4DpoEVVRo51GJA1WCDaATRLfRukWStbBZSiuz iIGFUnPnvGaoElKtaaeOqWmFSQz7ljy7Dwih12ZjqhmuBAZuiPIGrT2m0ngyEE0QR/ADRDu8TejT RlVA5fGhRGtIZBDVap0RsLggBALODRmUBeKEcmVAGBZ08i5aNL5SKJOhXWDxUI9+GbAbtjPTsWya ythsSo6dyNm8aYKpPKFDiin2kSTg8w77lw9yYGGZLG2zayFQ6i6nnSCUHvpB0esdYtDrYZJY2ZOG +pjQelxj5IPU/EsRQvy31OFXiKAllhJJWHNBZbS8BKJJWWNExSTt+mYlIBIJckDwxIs4iKBVJKnx uQaUrrt6AwhxSSVIqImtMWsIZW2lx8ftVBK7puvQtFiHFVObdZBxKBsqhqOFEOJz6/5eGVFnrVBi QcIqiQ4y7uQVrVAhbsBYdVdrZ3Hj/K4SBehYCTZaThsYbYeMvq//tmi6cxs0aNCgQYMG/xZoiG4D 4sm3otPtkuetsSKkRnUkIrgQ1lkgV62QkWQECajga2tktIBaY0kSjTUWow1G6VVrstLE/wzarFlv TTS0EZSGoEJNpqGqKgZlReUlEg5dr0dFBuBCTO1Fa/q+xAkkeYpRit5gGJU4ZcnyNitFUStbcZbS hxJ0wNpIpD1dnNrM/sWChb7G6zaYFojBlbFjV0lAa0GLMDIba2VJs5yslWOsicqf1ojRHFgcsLAy xAJpHmgdVCjT58DigMXlDFtM4JXBD4R9QwHTQsQRZAUxDlHgpUIrFwm/Ai8KcQalLFoSCFEllADa pDgneFfhpWClt0i/N0+qA22bMNHNyWyJTcAkUQ3Vopie2khlW9y6ex/93jIrRcVCX8ik4MD+A2yd tezY0GKyNUtRLVGWFSZpM7Oxy8GFii9/9RrS7pCffsLZlJXn4Pwhyt6AxCTAqGYqwaAIIjWpFAJr lNuah0FUXJUAMopgOrKDIyqoAlrVbcaxnUdpRQiCJ6qe8TKMjBOWY29zTFeWELdH4mAvqAQlHiHa xEcuBgDnXCTP46LcEemknotVoOIFIx1Gb0pw4iIZ1QrCaof06rurB9gFgrhRje99wsiZcdgT1Jrk aq3G+/nfAxdddFHTndugQYMGDRo0+FdHQ3QbADFlOc/z8YmyWnNiHG2ZgrGrJHd0sg+sCkT1fKLR MY3WGjOe9zXGoIyO1UL1XG681WrsmgqW0f1rbZlBhMp5KucJ6MgDRKFMrCASHZVlrTVeSbSjKk83 syQmZbk/ZDAcRoKcGIKq1Woip3DSQ8SQpLNkZoYgEyz1Z1kZDmPPasgBE5XE4HESUEZjAFsTscQm ZO2cLE+xEsB5RBtKAVcKlasIropW7TyHRQhKUThDkI0oyTl4aJnJ1iRJOk1wJVWoEN1HzBBfW5HB ImLG+0UphQ4aFUysURJHCB7cMkV/BSkGBNcnVH3mcmFjS9hxzAwPOfF4+r15lnqLGKvpDVaweU7e Ndyy7yDzh24nmJQVNcO3dh/gmvl9tCl50DGzDNjC5twy1ZpmZm4S11+hPyhZYUhobSDonNHOFZWQ t6OS7alQOir6Kkh0AVAT15FFmdU/R/+tdsB+j3R1AS/xs9fjdY42QzMmkRKTxbWKhFKLBmxNfh1K 4ueCMpEOqxKl3Lrjc7VP+h5QI9I6cj4olJIostaVvKbupybU87wSVjnnPd7W6L2OaoPkCMuMX3rd 9girT2Dd9h6RCP8bYWZmhic96Un3OaW5QYMGDRo0aNDgB0Uzo9sApRSd7gTtdhfvo513bVeuDw4R wVpDkiRYa8cn+0CcZRSPromINZEIG6VIrCFLLDaxtXIbT/SttSTWxP7SlLoyN5LdNLUoJQTxVMFR SIHzPlpCjUWZJFqXQ8DjozhmNUlqa7EqspvEGDZkXbqdKXr9kgMH5wkabJYQtIA4klwTjKeoSrAd ktYcWm9mMMgpfBtHAsqMZzm1DkioYsVR2samGWkrw+YtWp1JJruTZDbFV0MQj9IG5+N8Z+UqnA8o Y9FJjklzxCY1MRIS5emmhpbN8EPFvt48RapIui1UkkAwaGdBbLSgaoXSBqUCyhW0U4WSEl8V5Fbj +8sUvUVaSrBhyESe8LDjj+H4TR02bZjk6NmN3HnwVm64+UaydheT5gzMNJ+9eifX3boH6W5mYuM2 JrtTDBcWCIMVNs+06RhHMjjIXKvktEc+iMQobrt1Jwu9AtWe466DK1z9rV3MDw1BckKARIERR+mH SD0zigtrbMKB4ALiA4gnuKo+7qLlmCA1IZVa5Qz3+M4LilCrtGEsCSuJlmERwTlHEI8GtBIMClS8 cKJDUt/nCcFROY+XaHEnFIgv6hnm1dcMIeC9IwSHBB/V9Fq5HdU0CYKoOFdbS9HRQeA9IXh88PXz ZZyMDHV1dIhdv6N53RDCeP2qvigQRkyeVaI7CrGCOPsbV3uPmqMwmj1ufjcbNGjQoEGDBj+cuF+K bkMmf3iwVt1J04R2u12rpKuBNiOyq5WuZwll3XPXqr6xDxSsinO3Wus4cahGr6dRmnGK8ljBHdk8 lRB8GJNorQEvKKNRTkVypA1JkoIx+FqVi4QhYOr5RqlVO0FwrqLUQ7zv4FA4kzAYDkhEkebxvbkq oDBo3cWpNit9ixdwPsEZQAdCqHtRxY/WHClVaEFQ6GDQWIKKdlYtgKvwfoj3UYkeFo6yqgjRl421 PbKshU1SdJqRGIPNEgTNUn9Ar+/oO0dQBlNAIjXJLQ0hVKikIskUVlVIWCY1S0zlQrsltHygYwwT WxO6WZu2EabSCTZNzHDU7AamUhAZALcxzT42Zn3aUxNMz23iX25Y5obv7KUfDBs2zpGECVYOlSzP 90mVY7lVEayibbpkm2e5cU/BtV+9hltu3kmwGVNbjsZk06yUhsrHz9EokOARAlqbMWGLxA5GtTdR gFyrYMZZXanJ4WjxkRq5+ntU25C1iuSQVTu0qe3tzlV1qJoBwpjfKR0N9HFw1pOY2kEQPKLBa4NC R9u0rBLJ1dCqe1FGRRhp0iOVd6wohwAjS3s9Vyy1ij0i/uIFVYdVrfvO6viKUgdK3VNVXuvGGL3H ewbIBZF/L0G3QYMGDRo0aNDg3wyNdfk/MUYnxa12G2MNvorqz8hWPFrmSBhbnOvwnEgXwtiuiYoE WdccQo3/rdDajGdyAQihtpyutaXGWchECVXQda1QfI7zPhJdIFEamyRkrYzKlTElWRtQggpxbtOL x4ti4Cr6paOtDRkGYxMQSEwXpEVRpXjVxasWwRiCCvjgwAvB+1USbQ1BLOJAdMCVFZUegtHoAEUA ccOxChiCUJYV/f4gkvkkRbdTXCjQvk1mFLltoXyg7A/oVwX9IARlMcHiC48pV7DiSQlkqZB1DegK Xy3R7Xo2zxpSlpmZMmzudNDlgJkpy8bpDpnApGnRpgsUIP2oepIwsWGOLckEO/escM01d/Llaw/Q 81Ns3HI0rXwD1aBg4eAeQjnPhpk2060Jtm7exOxkC1es8IV//hY333wAk2xGWcvKwRKTrlAEi1I6 zi+LR9VEV2o7+kjZHCUSS00exzO7IyIHeAKqDqI6EkIAhcd7IaYMh2gLlgCi0MasuWij0AaC9+gQ UDrUx5IDKlp5gg6GsuzH7VCAkjg7riPJVUpHlXWkpsqoxzaGqqHVqnUaxmRVMbLZx/lukXhMI7I6 ix5CDKYaXQUYk2lBa0WoO6OUVkgYkefvjyPZrOM8/D2V8QYNGjRo0KBBgx8ONET3PylGJ7dZmpKn GYiqSaIeq6rOudoGKfd4LrXCGk/SR0m1ak2Iq0LXhDaqulpTd+YqrK2JrtZjFXmkIFtr0coQVx1j g7TRJCSgdG0XFTygjCYzCa0kjUohFYhgNdHaq4TgS8qqQKcTeNEMSsFYT4cULcKwqKh8oJSEUk0i 2QTepFQIzgFiMUGhg6PwAa8MqByd5KQ2waaWYDWioHKOxeESvihRbohVMUhI1TUzUg4R79GkeNeK dm6tMSqGdXkJDMuKgQT6WpPZFqnNSVSgmxVMtXvMtAds3jzF9GyXQ4eWKHorzE3lbJlOyELKREvR 7RiMsqRWocIyiWlRhCH7Dh2ilXWY606gFNx26BDfvGMf39y1yNduGbBzr0KlG9i45Vjak9ME7wlu mQ3dih2bZzhu6zQTM1upgmbnd2/i2zfuZM++BczEZrBdvA8oKhxgEx1VSR/TuE1wOAVBYs0O44Rl xonBhHo/hWhfjsdZYI0797BjON7qpG7xEGrrsgjBO0QprNZYk+CVB2Lqt9UavEfwBDyOitR4Zmem 6GQJzg/ZvzwkEKu19OiKTa3TBonOXx9Glz/iMT5KKdd10NbIUq2VinZkapKtFSHEkiL0qk49jrWq 54uj8XoUnxXXO6LPq/8/MrSKaxWlxnb+cW5WHZSlpN7/IveRMjdo0KBBgwYNGjww8IAlumutt40i cX8RT6mtTWl1J0FbXPC1LTISXgmymqY8UpdGahyjk+ZIVOPDMQBI6Ug0om3Z16RVrwucGtuWR3OH eACMNSRpQmKjvdT7qADqmpi4QK3Qxc9bGyGpE3ZD5TCYGDoUFFpbRGkKXyFlIJQDxFXkVqOUsNwf YHyFEYMkQiFAYhFjEKMQFUDF7RZAdBJVSJOQJBMkWYYxHmMNYkCJ4Ad9qkGBrxwGj1P1+xqJ3HWV jlIaCS3AoLTDhZJ+lVGJpRcqSq1RSYdWkjKVeCbTkmO3Bo7ZomjnQ6YnA+22pz+tGA4nwRmytEXZ 19xw8x6y3HHcjmOYTSbw2rF/peS2W+7m5pvv5OEPfhA/ctJWrrv5u3zsn67ia7fs51DZQU2cQDK3 jampSTpZQvAlEgqyxLPtqE2cdPwm2qnj1tvv4ls37uTmW3fhQoLJOzhJKIuAEk87ibPZUh87hNj9 Ghh91rVFV0KthBJnX0e3cVCSAkIUdkfFPBL7gGVtZvKoIifU5JJQpzfH4zZPE7qtnGAC/UGJClEJ 1cogKuCCx3mP8jHhuz8cMDGRMzE9wXx/gPclRieRDKp4ZAsKjYByKOUYBz+FkU8/fgdM1EsJOl6g UbCaii2xLknGboe1YwA6po4pQwgWwdSqt9TsNVqv474YR1PH4K/6Gx5Dq3RUmAUY6+F1MBb1a9fb hFbRKr3up7T5XW3QoEGDBg0aPHDxgCW6DX5QqPEtzdskWRsnUenSJp4Mex+VMS++DqkVNBKrWpSg VLRRwiph0SrUtmRi7Q4qBuZoQatsHdGNSp0QghCUR8Sj6nCrIAG0RilT1/fUM5Sh1rREkehIBLQW lERqY2xCppNI2r2PJAHBm5TSgy96ZOJotS2SGBaHfVQlzHVn8SqnPwygPXiHONBGoXS02walCToq u9YYslRjjRCkRCqQKlpuvatwpYu2VQ2OgFYaZSMBV8YCCjEWK11U8FShh3eKskpx0iK0FNpWtMOQ jabi+DnLto3C1o0DZro9lB6itac/P6TfE7yepFfm7DpkuXNvwe27LJOZ5a6BMDXdw5WOffuWuOuO RYJvM1NN8LkbdvGJK67iX27Yh8s2MXv0g9m09TjyTgcJA9xwSPCgtWB1yvxiydXfuJ3h8jy779rN /OIKmDZZu0swFh8ErSORM3iM0jhfIc7VgUpCUKq2FvtxurJQk6vaObBq9SWyOOqLAkRXQZxsHYU6 jYguMQStViZFx5oenVhSrZnIMrpZxny1ALqKoVO+7hUOFZUUtNM2nXabpZWD7J1fwuYJVXBocSRO wEAVNAFDqNOulfJYHb8XKig8Bm9M7bj2dQhW3CdOx7RuLWH8/aH+cxwcNbZCRMIb37GASWoyGruA 1Xi/EHt7qedx6/Cr0fNHlwsiwT2csCoUQYEYFbdTRhbrtcs2RLdBgwYNGjRo8MBFQ3T/0yGezBqT kuUZUTmNoT21gxEYzU7Gv6+tSxkFTY3XJsDImqlHEtEoaKquVqnna3VtVY4EmVpYjiTR1Kfl3juc U9hEj1XfuLzCKBurTXVNRA3IaC7TCEoLOlEYSXEhECqPxmG0BiPkWUxrFmuZmJjEkKD1BCv9qLpp a/FKRUWQ2lbKKA1aY5IYeBVCiQ8BpQJV5WLyro8KpghYreseVlA20r9Yb1MLgxhEOVyAyhsEcFJg KMl9wUTS59jpnJNO2MyOo7tYDlH09lP2FUZn3D0PN9w8z8JKxYajJuh7z9IAemWHyrY41PesfLsP ukcIAVcYCLNs374VaW3kii/+I9fedJB8ahszW06kNbuZtNUi+Jh6nNiEoBVlUdDv9Tm4skgY9qiK Hq6qSDtdsqxFUIrKRcVaSbT4GhP3l/jVQKiRGjm2GtfHTggBNQ52Glmaa8u6hHq2ezVwqc4ti0nJ ISrIqFrf1YKIxxqNtgkKha3nxUvn0E7R0gnddgtXVKz0eiiGtDNhy0xOqlOKgWM47LOwz5EaxXQn QzJhGDKWhvE1qV9fIXWHswajUdQ9vBIv8AiGOkkLJRolJpLf+vsS54gDBBfXNdonInjxGFWPBCiB EJVhrWR8nUpqZ8BYw72/rpZaSY5idE2GG2dMgwYNGjRo0OCHCA3R/U8IpTStdpvUJjhXV5dIGM/Y rlXXIIbWGB1Tj+PJPOOZv0h6BdGRk+o1YVSR+OoxiQmhDgNaM7sbJJ7ARwJtVitSvI+JyiMzahCU iX28ow2VEJU5BThf4iuh7K9gbYJNUqzVeOewKkUnCSvLAyqBVpphjcUkXQZlQqFA5R1IErwmzv8q sMqiZaRo1wROBLyLk50hJilLqIk+CmU0o/5SpaKSGcbkPu5TqwJeSrwkeMnxKkXjSWSFSTXgkVtn ecyDNzI7Y1ha3Mkd++9gYaGP0h0GK/Dd3Yq7FhVZPkV3mIC16HQSZds4AmUILBY9ijJ2wmZJF2sy 5ssOV9+wl+tvHULrOGY2H0vamcE7Rb/XB6Vop5AaxcqgoNfrURYFeZrRSTPKKqM3XEZ8IGgiMQ6C FtBBRVetqT/++kLHeBZX4mc9tucSjyHv689yfIt1QipE27qqZ2pX93+IU69BCETbcDziAkaDTRME oawcXmt8CFSAJSE3cNTsDK4YsL+cpz2RsXHTJHmSsdwbsm2uy8qyZ9jvs2nDJmZmNrC0sMiepZKe G1AVVU0GR0FUdT3SyIZddzN7YmKyDvH4N6G2NYuJ6dMBdB1EZWq3c3RIxPflvceHqPj62u6tCIiW 2pY92tH1PHK9jvszwhEv5WhQUWUe5141aNCgQYMGDRr8kOD7Et3Vqor/WKdBa2twGqzHe9/7Xl7y kpdw2WWX8dznPnd8/yjsxtqEPM8JEucjY6gUkXSswVorqbV2fCzE5NlapVV6PCsoRHVW60juRmU/ QrQpA/Xz1FjdHRmpjbH1TdWkOEqiPnhEgVEGa1O0tQge70uCr0AFgorJxgI4X+FDtFynnTZGMjSG TqsLIaNXeQoPwzKgPDhJCGkONifyEYMoHb3HmDpYqFYhw+jdCOICwVVIVUWrtVEjfk/QdcI08b3G 2U7qcCJVK5AVyqSg07gcK7T0Eg/dPM1pDzueNFFcd/113HbnTXir6RctFhYNy0sppZ6kNIahM6ws KLKWhcLh6KF1CiGjdCWiu1hjqUwbJ/CNm25mz+7byJhgcmoWVM6w38fYIdbFZGtFSlEVzB9cBGVp t9ukRhGGA1xQYFNQHh9U3SsbL5Boqa2zMprZjgRYhLouJ85whzWzqIcjVjkhYTzrrURQymDq+WYJ Qhnqblzv0CiSNCXVCms1Jktx3sUeZ62RIFTekwFKoBr26aTCjqNnmdvYZW5uiv2H9uOKAbNzbQ7p ggU3ZCJLmM4zJNXME9DBo6VEmegg0AKq8iSJhiDcXm37AAAgAElEQVSUzhFGBFTJuOZIhXiRxEtU oE3tcDBKkVlLnmUIPireNdusSsOwGMYRAiW4UR+w1CPJCGiN1JVairqxaP2Xd+zEGH3v7rnfhZHi zrrl4tPvJQGsQYMGDRo0aNDgAYIHrKLbENwjY/v27Tzvec9j//79vOxlL1v3WBxjVOR5htYaH/xq 0NQaxfGe/bi6/nNMbtdal4kWyyASraREFS92dRpSk2K0HXekjuzRdXZOxJqwK5RGQlxPkhiCN4go bJKTpS3QGi8eDZTBIYCXSI61saRJhvMhCmii2TCzmd987TuYmpjmzf/rYq667noGweCUQUkbTBd0 RsDgx9bT+JqRnKg12xdid2+9ySqsVhiJjoRfjyKmlQZ0/LvWTLYyPvjq57Kh2+Hlf/Rhdh5YwCQp yoP4FdrZMg8/ZoIzTn4QoXB87uqd3LX/EORbcDZjpZ9S+lnKtEPheiwu7UcUTE1bxJUkitrqGpVG bUpa7RZp2mLYdywtLrBv/91450gnJhAEXyzQziBBkZHEEK8ioaocE7khyScYlhXDQUkoC6oqILoO ZPL17G2IQU4KoshYJwWHEBDvwQe2zExw+UUvpVeUnPNr76Q/LAlhHCc1rmBCKbRREMAagzHJuEtW iyC+iiFOSgjB0UoTrLV0ux2muh2qcshibwUIWBs/y9Fkr5NANRhQrBzkuC1TPHjH0Ux1LRqH8kMS WyBeGCzPgytJtUYFjwqOltW0dGBqpo2YQG9lmdQm5Dpnqj0BCAvLPQ4uD+mPZrSVcMzRm/jixz/K Sq/HqWc/nf7KEKOEdiujlackijjrHQTnfO2YgJ4fIlbwSrDK4i0MB0W9b8HVIVb1lYMj/xbWiehq zV3re7Dri1Ajklt/t0cXNdeOMdwfzMzMcM0117B582bOOussvva1r93/lTRo0KBBgwYNGvx/wAOW 6DY4Mi666CJCCDztaU+j1+sd9ri1ljxvjWcmUYpzzjmbP7/0vVRVxbnnPYNrv/lNgDGhVcaMSe5I 8Vk/pxuZa6jNj1InzKrEYhIb5xiJJ87eS0yCrS3Q1KnKI3XYaIO28fVC8HHW0iZYU69HRSXYiUEp iw8VToDRtKKKqbjBK4ZDR5HpOvtIOLBY0iszXNJGTIbWGUqlKGWJTcCKIArxIyKwGukzIhaj2WKp WUJUpUfKmYpKpNYYE7dPxqE/I08viI7BRUY0SeWYSCtO2NLiRx65jYlWwpVfup5v37YErQ24oo02 k5hOi7IacmBlgV7vIFCQ5Rm+GmLzjJbRoMH7EjGBdsuQWsWgt8z+uw5y8OABlC6ZnuyQpmDpM5l7 jprJmWxZQlmwstzD0WHFxTAwXw3wwxLxARUkKqRiwEus1amty6HW863UjxMvAoyqgtYSptExJFpi D/FoPldipZBWUaG1RmOMQkkkct5XVJUjeEeiNVknp91qIcGTGE27lbLievQHSwSlMLZV11ppfvSx J/O7r/1vlK7iRa9+Lb5apj2ZkVpNMawoy4J+bx7vFL4q2DQ3x+TkFFmaMjU1jbNDklZGkisWlg/h +wUtA7OTHSayhAC02wmdTsW+Q4us9IeIAju+iASIQytHkmgmJhLSRFEOVyiLisQkpFYR6gs3qYVq WJJaQ5JmVA4siuXeIF4gqJPAEcbH32H66z1I7n3F6kUuDXUaeoMGDRo0aNCgwQMRDdH9IcJ5553H i170It72tretU1LWqixPfepTuemmnbVNWa0LnQLWKDp1ANUoRErrdaruuuUZzQ7GyUUNWGtI0xSt 9ap6p+pZRCHO3OoYqoOEcb9qCAFjDFrFECEfQuzdVdFerZWOlTDO13ZlAxJiV2iIFlFrLEolOK9Z GlaxpkhgUGm86eBoEWhhsFFEDqoO+1G1PTTOWIqKabaj3TNSIOuqVLToemY41t1I/Sa1Vui6D3is to3CfwBtNF5bghNy79jWTXjktimOmWlx4/U3c9uug5h0lqDbhNDGFSm9wRL79t1OWS2TJzl52o0r c0KmLVag6A9BAq12izzJOXTgILfffDcL80PS1DI11SFNNJgem2dbHLehTVcPaZkKk8Bw714OLAo9 NYlKM0S3UCojMSbOGSsFQVPVsnbwIdprETCRHFmJtD/UVTUqsE4alBBDqkII0YfL6KKJAiUkRpNY O7b4agXOe3zlUXgmOi3a7Rah7ucdFiWDXsmwt0g5WIlVQXlWf0aCdx4X6gogIGmlHFha4va772DL zAzDlSG9/hAfCiBlbvNmtmw8GqsTvAvkWc5k0CjpU4Y+rUSYnUhJjGWqnaNcifKBlk3RExlIF6tg WBbkWTw2lIJ2ZkhUxkQnJ88SekuHqMoeiTIoHY/DqijQWpOlCT5Lx3b+ctjHaOL9wzLWDK2zQ8Rj V6jt8Wssy/dHlh2RXF3XITVo0KBBgwYNGjyQ0RDdHyJ88pOfJEkS4MgzeQAmSfES8BJGEbb87Wc+ w6atW6l1ojVzs2Y86xgdyodbl0MI+OAJKgYyRbIYa3istdHKK1JbSDWmDmsKstonqrxHKYXThlAF SgGlJdbz6EhalTLj0CGItk5XWzeNVgRxiAiZyrCmgyendAlVNQMqqqnOtil1jqioDgu65gFRafVS z/j6sk5alrrORceRXdGRUIw6VVW8EIDWMVzLKIw2WG1QNeEbERJTVwvFHWyAjFRVbOkWPHr7DI/Z sZV+JXzrtt3Mu5KZSYtJDfuWlllammffoUMMimWmJtskSY7RmkyntNIc6wLDYpnKVWTtFhbNgbv2 cvN3b8EVgY2Tk7RaKTYVUh3Y2DXs2Jxg1B6qYj+t1ixOpllQKXv6fURXJEGjjUFbsGKiGu88TmL3 bCWuvuAQU4NVAIzgqWI8lITVcKqxqgmhCoTSoYJHiGFZWlvSzGBtEo81pQnBE0IVj2MXaBvodDQT U22SpMWB+QXml5cYFgWlc4gSMmXopi0MisoHgqoIoeTLV32J03/mi7Q7hnYG/WqZnbsWSdRxTGUt Oqmlk20gsV2snSRP2oChCGWshjJ9Dh66k7IsmZmdpjU1h/KKbtbBKUcRCqoqzt9u6OS0jWZxcYmZ LEURL+4cNZNReYWxmv6gT79YBiBNUryUVENHCNTBW4puuwNoirKkrPo4L2RZCy829gHXAXABVSc6 14Fc1CnWtctgVEG0flaAMQFW4//VAwz1zG4zGtKgQYMGDRo0eKDj+xLd1TTU1ZqPBg8MHEZ2lUIb U2fGRrux1jqejNckFUB87AHVSmHGtUCr832rgTWrx8Z42E+PEmRX05uVEvBRxQsSlTpRMWSKOtFY awPK4oMGX9edaFtTJBOtssGRKDtWTJUOGK+RUEEIGK3IkhaFszjJyfIN5K3NjGqCgs0QFQmnlgDB x1qhej95EYL42B+MQodQ1x4ZYpSSAW3QRLIbFFirSZI0dhCPanBExxoZFW2mo/nHscymFeIcaVKx /aic446eQnu49obbuONQD5/mDId9ZFiyd/dBDq6U6DRnenIDrVYLpU1MGBaFDp6it8KwKrCtDBD2 7NnLrlt3MRgM2bplCxMTOa4aogy005ztUxuYyWB+2WGzNv2g2X2wx/6qBZ0OSjQugA4BGxwhDp0i 4nHB48XhgyMEP/7sFaYm/6MJZgFdX8xQI1M7KB9QPsSeXfEkaUqWpxibRHVeg9GBJAi+AleVWKPY 2J1mJoP+sOTgvnmWB0NKp0G3sBl4E4/X1CuSUGKtJyQepQvmOh3mptuoJNAr+gxWHFVZEHxBnrQw 7TZatUBleLFYpekXJfsXDpClKYEhnW5GWhgyk5ElGcHFWi4vgjOGShwQsEaTZxbfyUjsqJ5KmMgV KwPPoBwyGCzXOWeK0pc4H/AuYIxFSGA0V1xWDIsBgou1Q74kyxK8NwyrCoUmxMsMsY6IeJGJcY0R 437dVRN+fT8KFdRhJDdaohuS26BBgwYNGjR44EN//0UarMV5551HVVVcdNFFzMzMcMstt4zJ3r59 ++h0OkAMhRoMBuPHPvShDx1xffdcx+h20UUXHbbshRdeOH5stB0iwlVXXUWapuPX3LdvH+12G4Ar r7ySQ4cOsWPHDtqtFp/77BXM79vL4sEDPOPccwE45phjuGvXLm781g3keV7PTApnn302t91yKxe+ +tXMzs7yhc9fyc6bbuamb3+Xf/nyVeR5Kz7/6GPYecMt3L7zTm656Q5+93feBSiqqqIoCpz3cVZV YHbjHJ/65Bf47N99hc9+5it89jNf5TN/ew2nn/ZEJERSGWdmDQoLoqhcnKMsq7K2VlqsScmSNmna IniDryzPfMoLufw9/8Cn3/cp/v79l/EHb3oDE918dQdKTJMN4vHB413Jkx/9UL72nt/km5e+nW+9 7+185wOX8Hu/+EKC9/V86egm/OzTnsC33/dWbrj017nxvRfx1296Ge00J89SWnmLLMuw1vKCH3ss X/ntX+Irb/8Frv4fr+R9r/wvtFOzahEXj2FInhsm57ZiJo9i/yK8/KnP4q9+5fV8/FdexQdf/VJe /KOP48BCH9EpebtDmqcxsdfErl6tNc45qqpC60jg9+3bx03f+TaLS/Ns2rKZFz/lFP7xLc/nyre+ lC+85aV88nXP56yHn8ANO5e5c3eXuezR/Ma5r+R1T/lJVMhRomPqsRIm2zmXverZ/M3rn8cJW2YI IVBVFSEEplo5V7zlpXz7D3+FG9/1Or71ztdw7e9dyMvOPiNeMAg+WsZDnOONuz8mFouGoDQ6a5F0 JnjR087iK+/8Vb76ztfxld9/HX/26hcylQbe94ZX8OV3vZWHbZ2l1+9xaBkedvyD+dx7/hd/8Ztv YLI9QSfv0Ek7dEzOhnaLy//wbfzDh/6IHz3jZKYnIE0GPPTEzfzp29/J7/3aOzCqwmgHyuFcidGG R5x8Bm9+66Vc9LY/4Td+8w9580Vv56ee9dPcdeft3HX37ZTFkKlOl5951gt435/+NT/xE+dz0qMe ybvf/X7+7M8u4+I3v43Cl5TBUeIZhgpJNL6+jCgCRVXRHwwoi4IfPfMp3Hj1rXzkA5/AJilOQkyj RtGdmOCjl1/BP33hqxz/4Afjgq+rsizdTpd//qcrObR7N/0DB+gf2EdxYC/FwT30D+7lfe/54zgP DkxNT3PD9d9guLTAcHmBYmWRsrfEm9/0q4f9rrz6Va/CF0MuevOvcd55z6Aqh4j48e/KvWH0ezS6 XXXVVWRZdq/LA+t+t77fb2ODBg0aNGjQoMH/Cxqi+wPiCU94Avv27WPHjh3j++bm5rj11lv50Ic+ xO23306er5Ks5zznOYed0F144YVjEnpPXHzxxUckuwAveMEL+MQnPoG131uQv6/2w7VLrauSqv88 9ZRT+erV17DtmG3j5WZnZ/n8P36e3/vd3+fLX/jndSe4Tz/3PC757d+LJMxVeBdnJN/wxov5P5f9 zRFPnt/8pv/Jr1z4axiT1qRNE3ysPPI16ayrRlFKYU1KkraxNkPE8L/f8m5e8cJfXLfOE7dv49K3 vo6j5jYAEMRHG3UQvBd+4+XP5Xd/+WejXXYNnvEjj+Fjb3s1iY3BSijhJeeexa8+7+nrljv5uK28 7GlnxOobE+d1//Tnf4pffsZZ65Z7+DGb+MRrX8DWmYm4HcGTmkCWWRYLz/bZo/nxR5562Hac89iH 85E3vYxutxv3hxNSY2mlKVorfOXGFwCQwLDf58D+fWgDW7du5QP//Sf5xac++rB9ff7jHsTxWzay MGiz1MvrnZpg8wmU0fU8da3a189xlWMwGDDo9XjuGSdx5Vt/jqM3TB227lf8xON5+Tmn432o7cdC WFNbJeLQxpB3OrQ6E7z/NS/kl3/ySev317FH87H/8QaOmp2q51thZfEABw7uo3IFEEOFp7uaPCnI 9BBDiVUBY+Is+fSUIdFLdLIhvjpUV+kEjC7Ic7AWnCs599zn8uzn/rd1dnyAU045nd+95A/pTrTI EhPrferHfuT0s/jlX3hDnM8m7r5+v8f8wiGWFufpD3sECSRpMl5fVVZ47ymrihDiXLMi9v5qk6CN AaNjSdeaL2SaJeRZxgnHncC111zHtm3bD9vnqxBEwX//pZ9n9x23cNyxxx62xFve9Ebe/MbDyS7A 85/3PD5x+eXj35W17o174sorr+Qd73jHuvtOO+00du/efcTfM4i1Z0f63XrOc57zfUl1gwYNGjRo 0KDB/UVDdH9AnH322ZRlySmnnIJSivPPPx/nHHNzczznOc9h//79dLtdlFK85jWvAeD888/nsf+X vTcPl6wqz75/a9hD1Tl1hj7dp+dmnkQggkxRcMaBNIJe8XuTK0bFIaKob3wVRRNFM5io8MXh0yRq FE2M0SAmRjQRFRNnBcWAIggNzdDzmat27b3X8P2xdg2nz+mBViPw1nP16araVXtae+211/M893Pf p566ZFsXXXRRd1LZv61XvvKV3Qxxvx199NGLtn/mmWdSFMWS3wkhOPfcc1m5ciX33HMPWZbxhCc/ hfFVk4ytXMW/XXddn2Ztz6mRXbhy6B6Pf/zjKYqCCy68gCOOOpyXvOwlWGtZsWIFm39rM1NTezju pGM54piNvPNdfw7Ak5/0VE444UScDZy8jzv3CTzzGRcA8LGPf5CnPP1UnvyMx/CkZ/wGf/03fwXA uec8iTMfe1Z1TL5ych3e214trRc4JxAiOMO2tJz9mN/kUcc+GoDXvOVyTnv2c3jSxa/m7X/zD9gO qU6F0vQVbfKTH3sSzz73DGYWmjz/nR/kuX/yPs591ds562Vv5r6dezjl6MN4xUXnoZRkbLjG8897 HFlR8py3vo8TX/xmHv3St/K5b90cpJe8w5UFjzt2AyduXA3AG//+Os58w3s5843v4w2f/FLvOAAc pOHwGU9qHL5inNlmxhMufz+P/aOPc8rlV/OUt/wtD0zNcfJha3j5004H71F46loxnGhqGrQoSSNY 0ahRiwRlNsdITXP0EZt4xflnc/LGlbRLy8Uf/nee9M5rOP8DX+Qlf/8VCmuJagk+TXE6BCiEFCAt zoeMrbUWY8pusKPIc4wx4ExXtPXVH/ocJ77inTz6lX/JSa/4S17119dgneN55zyGOFI436vhri4B UoBUCh1FPPGkoznp8HUAvO6vP8Fpl76Vs171Fi7/wMfQSjPWaCCE4Kj1E0yOKOJ4nkg3QYDSjtGR jLFGRqz3IJilUVdoFcif2gu7Me0phlSJLrOQzceTKBhKI+qx5pRHncpJJ59BqznPO972Wv7sitfw trdeyh+9+RJ27tzO8cedyO8+74VEUQJVnTLA6sm1zM7N8JSLHsfTn/dE/vDNr6SZzdFqLzC/MMf8 /Axz83soi1Z1wT3O2kDyZC3Wmu795qq28QKcd1U/CTty3lUs44pXvfoPSZKEH938Iw4/eiMbD1vD 6b95Onmek2UZj3vyU3jBS15GKEoIzunzfvf51EbGSBtjJMOjPOd5/wtjDJe8/GUMDw8v0rMGOPqo o9i1axeN8RXIOOHss89edlzZvHkzZ511FrB47OqMW8tZhyivf9wSQrBixQq2bNnCGWecweWXL++A D2xgAxvYwAY2sIEdih3Q0V2svfjrtUU1ob9m27VrF5OTk112489//vN8/OMfB+B73/seGzZs6Mr7 fPSjH2XLli3U63U2beplZK666iqEEHzuc59btO1vfOMb3HvvvQwNDXHcccctu+8jjjhiWfmgvU14 HwiqFvHQ7L/9Qm2uCnWnwNTUFGecdQa33noLANdf/2Wu+ew1ANx8882c+fgzabWaWOv4zDWf5r77 7yVNa6xZE5wYL+AJT3wqSin+7mMf4KNXfwDrbSDFspZP/dNH+eKX/hWAx539OKwpsNbgsEAPQuys rRicQ2rXGEeRF5x96uNQSvGRf7yar3/nRoyTZLnhhh/8N7/zhj9j++6p6rwkyMCK/OILnkJpLX/y iU8jNQzXUuq1mFaW8acf/WesdRy1fk3Fqgx9uGOctzhruOLj/8JHv/wdpADvLY8/4XCUlHzkK9/l P39yJ7Ii8vr2z7Zywbs+wQPTc+E48DgvWWiVPPlRx1AawyUfvAYbN4jjlLHGMLo2zAe/fBPWeY6a HGcoipgYqjHRqDGSKCaGEw5bs4Ljj9zA4esmGKkJVo8P8ehjj2DTmgnOPT5k3//iX7/Nndv2UEs0 Asf2mTme+4F/5ptb7sMpg9eVo4Una85TtHNKYypW655z7ggBEK0Vn7jh+5z06nfy1ZtvC98ErSVu vGMr26fmqMURh0+ugMph9n2YAaV11a8cTzr5KJSUXH3d9dz285+yadQyLOf5+vdv5Lw/uIxtu/bg vWftRINzTjuSow9LSKIFwJPGgnVrJeNjhnqtzVBaMDYSNJi9c0QUjNcSJmrDrBqZgErjeGSozuhQ nZHhIc5/xm9jreFjH3oXrdYcRZFRlC1a7TmuufbjOGdZvWotrbYldzLUEAPzC3O8/LUvpMhLZqdn mJ6dBmHRWuKFpSzbzM7NMr8wSwewnZcFeTunX4zKe09RlBhncM5gbEBAdErei6KgnZcUpeHww44g a2f80R+/AVPkeGu47967ueZz11Cr1Th80wakFDjnuer9/x96dBX/8m/XLRozv/nNb3HfffczVK9z zNHHVORyHeo52LVrN0cde1wYV/Yz1l544YVorbniiisWjV2f//znmZycZMuWLUvWueyyyyiKYons 2fT0NK95zWswxnD88ccvHYwGNrCBDWxgAxvYwA7RBqzLh2hf+cpXljiat956KwDXXXfdokzI9PQ0 999//34hfRdffPGS5a1Wa5lfL7/v5axDIBYggUsDFR24Zlcvt3ovpESo3oT8m9/6Js3mQviNEHg8 t99+OwA3fP0GjAlkOc5Ydu/ezY4d29mwvoI5CxgZG+W0086k3W7zjW99rco5VfqpziG845vf/Crn Pe18Vq9eDcLjXFFlGA1U0kbOepxxgd1XgEejIsXGal+33fFztIpwKsIKgaXScu20B0F+ZWyozuoV Y6RxxJWXvGif7bdxcoIoUsw1Mz7x5W9w+e8+m8++7dV84bs3c9mHP00tTYkijSM4dBsnxgD4+QM7 A0VQh+jHOZzty3QJF4iWnGfFUJ00jvjk635v38cxMcLalWNMjAwxWk8QyqK0ZLwxivKSqT27WTUy zMZ1q0jqdUxZMDlSpzCW6WZGo55Qr8WUriAvDbgIqQHl8NJ2+4rNJUrEeGEr4eBFnSn0JwTOW7zz /Mnvnc9zzj55yfG2i7IrIeS9oyd2IxBagTM0aprTjw1Bn3vvv5tHrWswORFz+z05P5kvWXBRVevr 2b3tHlY3LPlEylhdVP3UI8UCtmiSxhonPcZOdTOkqfI04oRGPEojHq9YtAObsfWORn0FY6MTRFHM K/732/fZ9ivGV1EYifWesqo1vuUnt+CtYCgZYq5d4H1BEmmEVCHZbR2lC7JDoe3AWEdRFjghQlq7 Mud9kG7yHuMsRVF0AwOlsRSlQcoO4RvILrOyW3yNBEHky4ugJS0lf/Oe9/DC5//uknNqtbIqcFmR vlUd9atf+xrNLAvkaaKr/rTEjj32WCAEuQ7GxsfHWb9+PfV6nRtvvHGfvzvyyCOJ43jZLPLABjaw X6695VP3HdTv+ksY+t870fu+/7V/veU+d15ltYHA19i//cXBNSH3TraEgUmLXrlU/776yTL3tW+E wxUtLB4vUkSUEEcxSoF0oByM1iGbm6Y5O83We+/k9NNPxynPbLNFWhumKDSVrMCy+9/fsQVbfF4P uv3E3ufn9tpXtX25/PYk+0947Ou4uzKJHZn1Dg9nJTLRnff0p9GEw4veA0V4h6LkP774JY444miO PeZRSBExP5cxMlJDSWhlEEVBzb00BTpypLUIY9q0Wm2iaBS8Wnps3Y/LtwdUyRwE4hfImQnV914s foXFnI69asA+qcXuSmE9WamNBGURw6rJBK0h0T1HzQDGgilBScgzcMZQizUTjfA7BZRVMFxFGqkT HKEdMwtZ7siNpdmcp94YRmtNHEtqElolOGMZqSlGHwLJzV+WDRzdX6Nt3ryZz372swestT0kq/qo 0hqto+6d1oE1dgckv9gF7mrlLrpjWUTbqqTq1pMKAcKDEhKpqw1W97IUAlmxFHcsMCarihHaBadX Su6++46gyep9gM/6MsBkvaP0AoNDyRhlLaIoAUmcpEysnGTViknyPGfP7BxpfQhRG0bVUlTU0QOt NH6txRmDs5aDMe891oWM5Ee/eAMIweW/cwHnn3kK5595Crfdt5NXffAzNLOckVrCqtFh2mXJjqlZ hPOIinU4EFv1jfoOfGnZB8pziSklWTMxyuhwynCsSBNFHCvSOCFvtRkfSpgcH0bFMW2To+OUsXpK uzQYIdi0diVOhEFMAraIQHqsa1cOeKhb1jLFa3DCgOsFQPChVtpZg/eOJ5x4NO992XOW1BQvbju6 Gs1+r6eJ76vbzYuSdnOOidSztq4oV45z7w7HnqxiVcLTnJ1m6r67KaVkbG2oOy3bOdu23k87EyBT IgXOtqh0drC2xBYGnUZgqyeSF/hC4EuBlBwku7DAOEFpLXlRAmCMxZaQ6pRSp5S2hXSOWEckacqC hVYxC339TKoQcCqt6XP7OxOIyjn1HmN7utZSyUrWyXDXXT/nsaedzktf+gpedelL8MKzYcNGnnvh c8myjHvvuwfvLEpKzn/WM/inqz+273FFgFYSJcD13f+iqn8XVUBDVNfXOddlcO84ra1Wi61btx5E +w1sYAMb2K/WHqwqiPDQaIxg8RinKYynKA2iVKQKtIS52QWENQjp+cmttzI2PsL4qpWMrJhgdq5F HI/8Cs/ooW++mvsd0MTyEdOFhRZlWVIUBWVZoqTEY7GW6s8ihEIlkOoYRCDetNahVLTsNn/dtreK X2fZsra3Uyw66jYAkiwLXCI2Cq8IMAZsWeNPquQAACAASURBVGJKwEeUhUW4Ei0EhVV0aEOUjJCV 1Gj/9F0pguqH92idgtc4KzEllDGY0vciWI8ge9g4ug8FuPIv2y677DK01nzve9/jnHPO6WYyxsfH ufHGG0N281DNKwQSndSwMujIQogidTq9AIIETn+kzYPzeOEXOcD44AArKRGyn6TGg3doIavIYV+U sVvrK7qLtdREqODQOvBe4kXEEUedgFKhDlJ4D97gfI7H4rwEp9FaIa0lVhbtCrT1pHIlUiqSJOHw w47h3j05SdpAyIi8LMlV1BtoSgulAVcCnrwoefNH/pF7dk7Rzgtm5+eZn2/SarWx3iNUBCLE15Dw keu+xke++DU2Tk7w73/xRo7fMMl7/uC5/MFffQLpHcJ70ihi9UiDO+6fChIuwiOlQ4qe0+O9IHcO X0Wq24XhBe/9NPdMzVKvRdTjmFpUJ41jYi1ppBETI3UaMaSRJNWSWHpc0SL2hlojJooinHdo40hk DAKSSHHShgl2NEsK74hyRyw1eSkpihLXApGHax/qZwuk8EgZ4QWobsjS42wgURLe8eKnnomSkh9v uZ/fv/LjlCac22g95TNvegkTI0NAaI9QG93LqWvn8A6kDyN3Ekccvn4dttiF1op64khtTpq3qmOR rF6/lrt+ehc1LI3OA84JRFsQeUc7n2YorrN2bHXXOW+XFinA2DaZn+/uP5tv0pqZZbwxAQjKouCv P/An7Nz2c9rWMl9YcueRuoYUCWVuKYp2eOh2tWcFEo2SCUrVsMqT5RnCWxq1hEgVFKZkPs96d0Ok kcITG0VU6TpLIVAWSuNQUmJcJcVV3ZxSh3pj5+HK97ybZ1/wHDZvvojNmy9adKtf+y/X8uObf4TG IqTjda++FK01N950E791/rMoTInzjtHRMb7+1RuYnJxEK48SvnJqw1FKIYilwHkRpKMIjq+Ucsn4 2ynD6JRuHIy1Wi3OOeecB7XOwAY2sIEtZ/sqqzvYuWJgfxdYX5U1CRHmQt5hTUHZXmDlSJ2iZVhY mOOOO+7glKEGclzQnG+RTIwcICf6yDcvlsMKBpPVRLMzu+x3iiVQixNGG2PEOiLWEVIrUpcQxVCW 0GgoihLyvEBKUNojpQjOr6QSpvz1Wr9PKPZ677qaiuHFdyQ4q/eiD5ElBF0n14VJMM2FAqUlkZIo HTL21pYYW2INOGuw1qLxKCHJC0VcC23rkAGVRcgCQ7gOHVSjtT44ypnEOYNSikIJisIihEerX3/b /jLtkXU2DyPrz4xccsklvwK4nkdqhYoi+hCUS0wKsSjjSgXxXO7HHfhnyET11o90yPBKIdCqByWR MjARLywssGv3TtI05awzzsWWFmtsIKqygYDn7LPORSnFtu0PVBI2Hmd7NYJCKqRU3QyYFALhPM35 NjOzswAcc+RR1IZGUCrC5DntLKOdFz1H13qssUxNz7BzaoYkjhhOUmZm55menWV+foEsa2OsCdBj H7KPvsJwhmy3ZNdckwve/gG2Tc1x5JoJjli7iplWm52zAd599LpJrCOQZhFgOsL3MnnOC0pnmWtn 7JydJ401a0brFFmTdtbCe0NNQU0LGrFibChmNNU0Ik1NCoQpcUWOL0uk9wjncMbgjQnQFQFZXhIp xbqRIVItqCcxo2nK6FCNNNUIafG+pNM51o030NpjnAlBDcSiCYT3IQvbSCImxxq0i5Ir/v4LFKXp 1YG6Xqfx1oaAifeLanQ9wcFqlTm7ZkPN8trJSRojI6h0mB179jA/s4NUZuiKQbk+rFgxOYJWUJYG EEyuWsumtYeFPuGhFmvGh+vdYzampHSGmdYc0625kFn3npmZKRbm5pidmWFubpoojhkeHqNdGOaa OfPNnCw3tPOS0lqUVsSRQuADM3LVD5wL2wt6zopaWiOKUtpZGyEEExMTpBUTuQeMCzXPSiq0CvHF Des3Ua/Vuxlz4SHSuntvWW8RAsbGxvjMP16Lc46dO3csuiff/f++i5dd8lKUECgpGB8fZd3atWRZ xuvf8H+wzqCVCA9LSfdBK0Slk70XeqPDIN5PjtfPSN0pwwA45ZRTlg4Sy1hnnb05CgY2sIEN7Be1 zhzhwSZD8qwgzwrKogDnSSJNpKAoF2guTDE+VsfYjJ/eejPOFNy39d4wV3KKdavX7oXNHdgSO0Bi cGhomJGRUbwTOGfwNsj+BYCTI8sLEBalBEXZZmGhRbOZk7cN7fZBwuF+ReZFgAIvgiIvA1Xufe71 0d77zu/6pUVDIsQ7QVEY8nZBu12QtUqyVkm7bcjbjiJ35IWlKB2l8bSNp5k5Flown8FC22CBAsgL T2ah7aGwkBtLXlrKwtNsZszPZ8zNLTAz3WJ+rklzIWdu7uBQjw8XG9ypv2ar1+ts3ry5+7mTzT1i H/W8D8aUjpBCMDszzQPbtlGv1XjW088DRHVT9Ry4jh0Y/tOJolbQZSnROibSEVrpaqLeqSGRyIo1 9j//8ysAvPCFL+f3fu+lGGPCn7W88XVX8KxnXECet/mnaz6JtQ5jXJV5lkBwmLWKUFJVdD4KqSIc km/f9AMAfue3nsljTzqBmdlZ9szOcNqJx/IfH/xz1k8GeaEO+ZWxlv/4TqgVvOLi53HKEeuYnZ2l 1WpTFCVrVqzglk++j6c89tE451g/Mc6Nf/PnnHTERiKpiKOYehwx0aiTFSVbtu/CoLjhlrsAePHT z+acEw9H2AJhc845bhP/+qZXsnZ8pGpBD9YhnOf6m+8A4D0vvZBzTjiCMs/xtiRWjo0Tw7z7BU/n 1CPXMZTEJFqghUVYg2mXYBzKC4T1+MLgC4sWoe5yx0yo4X7WbxzNptEGCYIhqVmdpnzgeedw6rpx nMnZsnMK6zyj9ZQ3XvgkXFnirOXsY9bzb296PutWVMfsHN6ZLoNyGkc8+ZRjQ3/wnqEk5jN/9BLW rwx1yj3osl1U7Gm8C3XXFHztR4Hc7PwnPJn1azbQKgvmsznOPuMUvnj1R5icmAA87dYMpWlRCsuO PVuxzjJUb/C8zS+k3XaMjq3mvCc8i7e+6t1MjK2qQAaGhbzNTKvFbLsdoOvOsXtmN1MLM8y157np 5u8A8KKX/B9OOPlsjBe0i5x2njNcG+ZDV36YU08+lTiJUXHUdXQRUJRt2u02AImOGa4NUU9rocdK zcrRCVaNTnSDQlEF4VdSseWeO7HWMDY2ztvf+hcYYyiKgqc+5Tx+8K1b2LB+U/dWk0oyMjLC6snV /Oz22zjj8aex4cg1rD1sFZPrJ3jnu9/ZvQ+l0kgZjrFWq/GMpz8j1L9Jwfj4OF/7yg0ctumwzikE ZIYUSyLRUopwv2mNqgJX/ePCtddeG+6dK67gwgsv7C7fvHnzEsm1vde59tprF60DPc3xvZcPbGAD G9jB2HKOxP5NIqUm0QlplKKVwJkSUzYRvkBHHmsyfn7Hrfz0Jz9mbHSI4485lrGRMWxhAxfCwA7K pN/rjxDUNbmlzA1Te/YwvzBLszVLO5unyJvgc9r5HGmqGF8RUa/XkUKjZEQSN0jioaU8IodgXhza 36Jt7MPZ3fv7vfulw+KF6/ZZB9hu/5UgFB6NdQJjCVlco8BFIGKEjJEqxYkEY6GZWWYWCqbmM6ab LbISmm1HqyhZyEqamWU+MxSmxLhAnkmF0lMy1HxrJYi0DEGHR5DtF7r8SIQLP1Rsenqa97///Vx5 5ZVcccUVXHHFFb/U7UspiYTAO49Qip/feSdnn3Uml1/2ei6/7PUAPP8Fv8+XvvSlRet1JrUHe+07 EGipFAJFiHNVx9DJFgn41Kc+wRPOfSonn/wYXnzxpbz44kuXbOufPvMP3PHzn1U1BR0INUihkCJC 6bjS2Q3OL15gLVz7xf/g1JNO5cRjj+EtL38Rb3n5i7rbnJqd54Fduzlq43qcdSELh+BD13yBp515 KqcefzTvftWLefer9nV+oR1qScxn3/aHS76/4cc/o5kbpNb849e/zxNPOpJTjtjAX77ogkW/m88y tk3NsGlyJQqPFB6P4+PXf5ennnQMpx69gfe87LnLHkOiJZHwCGvxzuAKgysdUjvQvldr7T1Kh1rp m+7YyuqxIRq1hN85eymbrStyZFkylRd8/da7eNopx/CkRx/Fd971mu5v2qXhx3dv44QNkwgc3lnm Flr8w1e/yxue93QuveCJXHrBE5dvOB9koTrQ9u5iEfSMjTF88vrredpjjufEI47kCac/BYDfr5qt KAuarQVqaQ2kpW0KjLPMLOzhR//9TU5/zBN57Mln8fkP9/pvWRZs2XoHG9cfjdIqZH8jhaz39Kyt khR42tbw+S9fw6NPfCzHHXMiF7/otVz8otcuOQ3rHELKitCtB11GCIxzKEAhkUi8r9jKrUcKST1K 6CAk0jjBFgEpMDW1m+u/8iWe9cxn8/Snnc+W27b32ryd8cObb+LRjzopyBE5z/3338dfXvkO3vKm K7j79qUEMnv27ObUMx9Ds9lkdnaGD33kb/nTt/0Zl73uDVz2ujcsd3HwBE4sJ+gjC+shNZQSOLd8 4Ouqq67ioosu4vGPf3zXge3Yrl272Lp1KyeccMJBrzOwgQ1sYA/W9oYu99fpHkzNri8FIg4IG4el sG3AUUsj0kiR+JIsmyWOFY16nd845SSUinDWs7CwQDw8/Cs9v4eV7bOp3V6vPQizMx5rAymSEoI4 kmSuwLo2cVIjTSNm56aZ39aiKBxD9VHGxmpoBXmuKO2h+ye+OqJDzfS5zpyrH4rc7Xu9Zd39Lfe+ giv3AG+d5WH+LWUUlnUzvz1+HYnESxWC4d5jvCMrS8rSITDgC5LU4CpH2niLCfkVLBBFEcO1oHEp hCJN0+510VocHH3Jw8j2eZ0DY+oj7GwfYnbVVVct0Z5stVqcdtpp/N3f/d2D3l7/WCOVRqkIgcBb xyte84d8+7vf7X6fZRn33nvfshHQ5a79YmhFGKDCb6vMsA9ZXrWIACfc/LJySl9+yQt4/esv7a7b sZmZaZ75W7/J1X//t6E2USqUVNiqSF4IjdIRWsUkcUocpUgZdFqzwtLOLZf88dv53PVfW7TdL3z9 W5zxvy6h3S4AX2UYAxOzsZbfvuxP+fO/+6cl7ZjlBRe8/h1c/70fo6Vi19Qc//s9V2PtYlKFD33h Bt70sc8iJHgczhVc+t6r+cJ3Ftcg3r79Xj50wxeCfqonEFxYg/SBIe8F7/4EV17z1SXHUVrLp755 M3fv3IMzJWWekzdbFFmGtSELmLfblEXQvhVS4pzFFgWthSb/eP132T41u2S7//r9W7ntvh3UI4Vw Je/7t6/x4S9/d9Fvbrh1C89824e5f09YX0pZwbDh6n//Nq947ycXaQO3i5LnvvWDfPY/w7lLQHpX RQx7fUlLRawUqYSEkje895381w++sWjfN/3k+7zrw5djTICdN0to2hgfpeTW8O9f/Qe+fMNnF61z 463f47Vv+3/YPb0DAQzVGgw1RrBI2s5VcCjJ8Mg4w2MTxEMNDJI3/ulrufpTH1rSRnmR89q3vpbv /OA71XUX3Wy2w4HWoSzAO4qipN3OaedtCmtxgDMhYw/BkUxUhAKMMZTGcOVf/Rnv/8CVi/b5b9f9 C496zJHcfc9dlcauw1ZST88871lLjrFjExMrue2/b+ekkx6NkJ4P/M37+J3nP2/RuJJlGU8970n8 /T98onsOHRbtDrQ81Am5LtKjMwYopZZMGs8555wlY9SnPvUpJicnybJs2eM855xzupri/dYZ8/aW WRvYwAY2sAPZvhyK/a8k0TrCGYfJQ9lYHMdIDFO7t3PH7bfwwAN30xhKGBups2PnNu666y4euPc+ lNCMjo5zQGzuI91E399yi33fX3e562Z2a0lMoiMUgtHGEI16DVu2mZudYm5+mvsfuIebfvg9fnDj 99m2bRvGGPI2LDShnbN0x4dg7hD/euv7bpa3//2+/hb9xtvwVzFSd76z3mM94CXeyW5G1xiJtQrn NJ4w/0VQ8e4oSqfJrSe3YLyi2bYYp0HFOBmRW0fhPErH1IZT4hSi2FAfEoyOCkbHBGNjgpFhqD/C YjhCSrnsyNDR0Hwo6OfCILt8MNbJxAohieKUOEkrmIUIdGtSgHOoSvpG4FGyU3MrAiED4dpLKUmS BFkRSlV7QKkAdSzLAuctcRyhZSCXSpIYrRXWGqQMTLNKKaTSFdS5mlxLj5QV/Lm6yaXUSBUjdITS EuMKCpMDljhOSdMGtaRBPW0gpcJX+rqzuWQ+c8znlrnckBuBsy7UVEqNF7LruAspQMqKXKoi1kIj lAIlkRVJkJAdYgrRneRLpdBJjNIKIRVKBYiwkwovNBJPLAyJzRiJYc3alJGRkonRIVavXIlzMT+8 9QF+dn/GQplipMY5sKWviKAEUjpGRupsWj/J+hUN6mlKooJjqDzYdh40VL3vknxJqYi0Jo5jtI7w 3mFsibEW41wYmJ3EOElZWppFmxYWqSOmpmfZMz2DE6pqe41UCmuDo5e1WuTtNnlRUJYmBAqM7cKA l/Q/KgIKgrRQYFu0FRxWhgCFEEgskcxRfpaJumf1sKBszzCXzxNpxRHr13LUpk1cdN4l1NJh3nTV HzOzsJuVDYcwJalOqacN7r5/GzOZJRlbQZnPI/J5RoZqJDpc8/k8Z8fMHJn1IUKvY7wDLSO0iGi3 2rSLkpH6MLW4xlyzxdTsLFJr6rU6iYrRQiO0xlpLnmWUxgRRHhcc3DLPMUULjw3XIoqIVUTkQdpA 9GSUpyhz8rwgLwusc0RRhDGGuWYT58L1NMZU9ekBYi+lRIqYF7/oZVzxR2/nRzf/kAt/ezN5nuO6 8k2eL3zuS5x5xln85bvfwTuv/ItuUEr4nkRYKFcI23UuSD7JEKEJ17Vv/AhjrcDZ3mdjTHefAxvY wB7+9nCXF5K+x7y7XPnV/pYJL5lsxMzPO9pFTjwUk9YkO3fdy803fZvbbvk+0zsf4OlPeiLN+Xm2 b9vFxPgGjjr2JNasO4K0MYaMYzpiCv83ygt1dh/Y+nv7lBXErHsdhQtB7/5texiKYr75rW+wZ89u nnn+eSAst99+G7Nz0yT1GvdsvY/5hYwVK9fxG6ecxprVq2g1oShheLjj7Pqlx9b9uG95IbGEm+ZB mqiunljsJ+3Na9L/uvR9L+HTv56sJKtUVWIYSFsDZ0yXM0NC6QAVOFkCos8gsEgsWnrSJKJWi4nT UJvbaudY76jXajSGAOtpzu4hTWuM1Yc6pwVAiWVCPGy4ig9oj5wzGVjXOiRQfbd478ZcxnwHHkHv xuwnowH6Pvdndz3GWlxpiLUO5E3WBaKoSshIQJCTqTjfwqAbvpUdp1I5ZLUPTyD6QQQYqAs4ZrwF axzWVQ4rEus8xgry0pMXltL48PuOLAqVQ9bR0vWicsDCg877fnItxSKAg69g185h8cRJTBrFIepW sQg4EdrMV7qmtmiRqIKTD9/E4ccMsVBuJSrn8AsZCwuOkShm/coxtu42zOcGYx3eBLkmLwRSCpIo JtZB99jhKYzFFAZhLWWrjbOBFU9IKv2zpCLOCox8IWttMASYdmjrACEWCqJIkjhPXhZgDbU4Bh0h VUxuDEWe4xy4skT4ICnkTCCKEPQIFPYNb69AQcIhOvUnCJTWREqBC85fJDyrx8c4euM4K2uO6T0J o7aBEDnjjYTRCm7svefOu6e4e8f9HLtesGFyBUNJjBRQT2NarsQ6g5car+o4ErwD53LKogQf+qH1 Eq9idByhZQRWYITB4mgVFrCUNgSEpI4QUmGtD1Dx0lDYAltasC4EEJylKEuMDRrSRWlAWFKpsMJi nSDxAuXBe4O3NmTwhSQvc7IsQ2iF0hpZObrOe6S1eO9RSgUW8j5ax3u23kOe533t7hkbHWHtmrUA 3HLrj+lxK4aAV+eaUfXREEXu3EOiu53F129xHT7QZV5+MGUNAxvYwB66tl+d2QMs29fn/uX7dpQq R60jUSjZ67vF85B+WGiHjFIIgewjg1pu+8s5GF24s4f775+hVqsF3dY06JZrrTnqqKNYv3qEaz/9 Sf7rv/6Lepqyds0GTj75ZCYmN1IfHqM2MsJss73suR+s9ZP87esclv9u8bLeV2Kv9Q7ekT0k6zjQ /Xv0vpp3eEzRpl6vU5aGOI6YmZnBecPKlStpLTSxeFauGGVhbg9Kwp133ckD27ZirWX7nbeTtQ0n n3Iqxx5/MnFUY3bOEEWa4eHla2GXHN4S+cPF/UHI/Z//gfYhJYs77z5sX9d1bxWfXsoxfGFdiCAs OY1ADB7WdwTW8OqAO3yTpbXkxlJ6qBHjPFgjcEiMCcECYS0qiiiNY77Mq1IrWMhaLCzM80iygaP7 CDEB3ftYaU0URWGpDGIowUFxVc1pzwntf++9q7Jvna2GKoYuaY3vPYSEksgKxlxai1aS0pYoJ1Ba VhnjoMnpvA16nVXNrvAhEOaVQIkwoZdIvJBYbNdBUyoJ8E8vsTY8iEpjAgNzpTnWLgNLbmkCm7Hv xOm8w3uDcLKSSQG8r97LQGpVObceGRiDQ8gsZMKE6MJHtdbUanWU1pRl2ZNgUgKsR2ORtiC2Tdav rnP04SlSTlG2dmGtwIgau2dy5ttjCL0CIQkw5DwHDyqKkCqwVwtvsUVOWSrSSOO9pMjamLyNKQuC zJNHChCpQCTh2hlTdp0aKYO0j/KBSl4K8DJE/jQeXVjyIkd4SxwrvFSU1lEWBWVpA2GXMZiyCNrD zlbw9F7fCX3O97lFnQ5Y/U4AQoEXKOGJtSISIDAMxXDCUUdwzMZVTG3fwpaf/RQp2kxuWMXEyjVg LK3MhIAHgsk1h7G7VbLlnp9SU0NsWj1BIgWNYUNOm6bz6GQIL2IEjtKWOOvRMqEWexQQR0PUa8NE URzOEUetJpGywJQWh+rWmQd5KxeymKXBI8grdmnhK23lql2sMxhbUto83C2lQBJTduS4CHI9XigQ nihJqWvFzOwcZVEilcZVzrhSCnTUdXKdcRTG8aUvfoHLX/9mnr35Qp69eXnCppt+dCNf+er1ew0K gSUc5/rIUyryqW5x0eJV/JJP4VqGcUHgnFi60sAGNrCHrR2sw3OwTu4vY1+Huv0HY7WhOhJBlpWY tsVSIoRifHwCRlNe8YpL2X7fPdzxk9uYnp5nIWtRzzKEysidgPjBabnu73wOlhD01w2w3P/+O1nb MA+YmBiiLKGT9l67bgIcLCxkDNVSvC1oNWfxruTmH/6A++7bSitv0Wpn5KbkmKOOZ82aNQzX6pRW Yp1BGB0C15bFHvb/sPlfcPe/LFxUR94pzNQVzrtQKojGYrqwZ+/B2DDTNy6obAqjsCYGQJYRSgdn 2xiNMQ9NneJDtYesozvIGjxYE9U/QRLHaKWxVSbT4ysfxQVtUnyVdSVkvAKquOuMaq2RsgNhdnRg vIieYyNEx3kO6xtckNFRGu89WgTpEl85R1JUA7gXCCfDsUqIRIQiIlQNmpAdxeO8RogYKXVwUL2q MmdtPJY40jjvKIo2WV5gXAwyQSIJWnglOANWhyyxrNqn0gFGCLyQeKG67dDB4ggcQoRMJN4HIXPf V7vceS8FkZNEeZuGKjh8XZ1jj64ho/tYmN+DyVoIneKTlFkruHPHPE0b0SpSXOnBepzw4ThlBWVx OcIWYGMoiiCJ1GpiTV4ROXmEFSilkR5cYcgL04W0BJbrABvyPtQASylQ0mNFyOp6pSllSaIU3ljy sqSZlWRFUcFnbSXMHrJ/ztqQSQaktyGDLMM1tNXy0G5Bk9mJAOcOQRKHEh7pHJISZVqM1OHwVTVW 1RJ+etfd3PbTm9lwWIP1q0eoi4jZwrG7zPGVU5ammpH6MHvmRqkNrSZNx5jesY28ZYiEIhYhGCJU BL7EhNJgJJp6MkRNShI1Qj0ZAiEorMFIi45iImKMtjjhMbnBlgZhPFIHXeimaWGMQIioesg7hLAU NseYEu8tpW1hbR7uCQNCebySlEJQosBpjPOUzlFLEpIoRs63yJsZQjuoNOtElS1XSLSQWAmRlmzf vp1jjj+Mf/705zjj9LOW3Pm/f/Hv8cV//0L1SUL3rhfd4E/AHciqPqhCcIgQwOo8dZ33VXCBCjVg q02JysntObuD8XlgA3t424EyrvvL1sLicNehZH0P5Th/GdsLG3E46zs4M4SquAiiISIZo6ixcngD ayZXU4uHuen7NyGlZL7VJBkaJYkU5QHcnQO138F+9+suH9zneVQJkU4/kFUwtfP/D35wCwtzs3hn aDabTE6uZHS4AcJz4gnHUxtStJoz4HPu3XoX7SInSVNKa1i3cRNHHXUMK1ZOEkURhTHduaRFYKEC +B66HYi0+UBPOO9Dze0vdAz0elAnw9vJ7PoKFu2q1Hl3uQyPbCUq6ldBlcByIFRISoiAjDTOU5Rh PWvD/FUVmkIIMAJn0s7OOjFt8iKmNPVf6LweavaQdXQH9uCsAz/WWqO16kGMu9/3W8jKeB8gxviq FsCHWtElQuwV9Lj/AdiBMvZ0UhWikhOSKtS/ShkyuLbSEIUAJ3GEGmDhg8OplK6yhgZRSZsIr6oa CBscTuErAiaHx+KcxliLFh7lLcYZhFB4VDWt70z0Ha6qN5SqA+0JAA/RhR13ss8ORLW2C+2ktUZF CovDOY/1rmo7jzYS4TPiqMnGdcMcd/Q4K0Y87WaTrG1wMhAyFWWBNZ6iVdAqWjgRgzcIYQEZIKW2 Ek0SMpBKGUPhPNI6XGkQrnI+fCD/ckJQmoLSlHjviCKN1nFwygnl2MgADe/48KqCjRsBsZJEUpBb R5kXlFlVk1sajHFd6SelJEVRYK0jjiI6EHi/bK2mQHhZDcth4I2UIJZhIFbCMlwXrBhP2LnzHoSZ Z+Phk0zNTqBjx0K7zfTsHLm1zGYzvOPDb+WOLdvZM5XRbrcZH47ZsH4Ved7iJz/7CVEcM7p6NUIF nWJvHc4WgAXncNZV/UuFbHl1lEkUN7K7pgAAIABJREFUoZA4k+O9wAF5XmIKSxTpoEvsBLVaQp7n tFptarUYqSTGWKQIddtB+7pXKwuBpK00hkTGIEU3wNRutzHGEEVRV7bHGoMQHiUjytIgXNB5VpXk jxCSOA4ogoWFjGdfdH4XjuWrzHInmNWpq99rUKiCXL2/vq8W3ef7d1w7GedOnf3A0R3YwB7udvC1 pPt3fg/kMO9zGwcxhHSgzHtDoQ/G9utQAk4aFAqhNUKLSqLNoIREIdl63w5WT4ywfv0m7rjjLupD Dax36FgzNFJnZn550r39HcuhtHnv8+LXX7U9uP1XF1MENJQExkYaSEKQPMuaTO/ew56du4iTEJAe rUu23H0bcZwGB0xHtBYWGB0d5zEnnYZDIAnqCR1kXRSJ4OEK+gU+fi22N/T4QVunbG7vxXst6Sh/ 9C8N8/uONKBbvF4VnPZeUFqPLMNvrAl7K4uKhNJSBa1DU3a4VosCSpv8gif30LKBo/sIsziOEUIG eOVejm7/88V5ERzCrrMaYMaycgy6JEx71bv01+76isEY36nblEip6BX9q6oaV3SPxTuLFLJLjGOM RXeyWlbgXCDhCR6CC1Eo60ErnPNorZDeYXwbax2R1AzHYJs5DoFQCR1wZSeTXcW6QkayymJJKboT 9u5E34NwDiHBIVACkkiTRhpVOdredgYVwBZIMc+6dZIjNyliPU1zrgjnJQQikpjSkmcthusrGB+N yHaFaKTXgtJavLMgdWDXszbUfBqDLxRGWLQDWQ1AwlXju/eUJsc6U5GFVYELwMngqGulUFKHa1FB sp1zeBeeE7ESJEqRK0UkJHiLLQtMYTDWh2NwlqL0GGPDIKp9d7TtEh7t/TDsvPrwX9BkFaSRZkVD Mj6kGBkW7Nj+c3Zth8PWr2XdptUgczJjuGPLXeg0IqkPE0URjeEQXDC5YrReQwrDth3b2blnJ2mt hmqkyCQGK7C5QfgQ/PA26DR7qVEKhAnohABXD/0iqlzy0jicMUQ6Ik2SEDO2Bms77RYCNVGsabUK jCkD2ZoMou6h7ltU/Ryc7SOTkgJnA9uytbZLJBXHMVESU5gSZ0zQQ/aBGVw4QVGURFFEEutwrFG0 DBFUVePeV392IDKM3lXq3rRAFYDaH9FU9VAO900vyDWwgQ3s4WsHgsweCsnS/rZzKNDlpduuxrlf aPhx1OspzkHhPMZ4kB6NQmpBLBVxMoyQKaWpoJ5aUYtTZCTJ84Nzcn957bf49X/altt/p/nFPi7E scceRpatD6VV+bHMzc5y991bkFJy2623INwsC/N7mFixkiQdxnlJez7juOM3sX7dJrbccz95uyoZ QoUgtAwOmTEWfRD1sQ8H67VjMNchuNrr+bq3Yy1kL6vtfd/crKo9lj6U5gVlFN/dgLdQlqHOt8O5 4gkoOAiwcPcI04keOLqPIFNKoXXo+iHL1Pcs6MKPoUPQ4+nRLwkhQt1txbLcdWYJ2buQfA1O8BJi h2rA6UBWnA1RPZwN95bwXWhE5W0Gkh0RHIUsn0coAlRSOWLn8CicMDjr8RZwBl/VFtiiQAhBHEUM JQmqBkU7xzuDJcJ2SLKsxTsVXO1QrU+XSMp58BaB7GY+O5mrThZOxzFJVNWEFEGCIGRUqwypK1g1 pjlyXZ0VjRJfzlOUjqJU2MhjhKUsPdZoJJYVI8M0m4aZhZJaGmNdTtnKQ6ZZBhyKKQ1lXlBU8GCJ ClleIRGVu+7o0oZVQQURnHA8TogAyfEaj0f6ipjMVRlrG1gMtIRYS2pxhDGWWEoiKcm9w9tQ1CF8 YOXWUYB/97M0hoji4v7XP2jSgbzL4OzW0oTJiRomu4c7fn4H+cIeRtIG95KzYmKYiclVNBdydk/N 0ZyZJqkvMD6xgih2jI4phqIGiU9oZ3Ns33E/MlIMj43Sylrk2RyRjxiKUiItsUVOkbdD7XikQx04 Auk8zga5nkBYKEBqCmHQQoYMvFA4IcnabcqFVnBQnSXLFihKTavVpCzbKBXI0Lr3jpBoodBaI4TA GBOcfC8wJrSLtbbKjofAQZKklC7URAsRat7DPSq6jjJUjNVx3IWTd9AUzrtuFLcfYbH3Nem/Vzv3 abhOAu9cN9CzvGO89wSsM3IMbGADezjbwZBNLbd8OejyvtY/2NrTA9mhbGf/GV1BaQuEUCgdI0VQ Y3AeitxhXEmaNMBL8tKjogSkIEpikJbcFCA0+wPQPthM9/LfLf/+f8r2t/+u89uZ+VVzEVVVjU5P t8BbEq0qFY8YpRRHHnY4G9dN8IPv/QcrJ0aJYkUtiUjro0xOruNRx51AlpUh8WHDHEjqMO80xlJY gzUeHaf/I22wnPWoKvb9LDxQP91XkqBnIV1DN2tb1Rh2ft9PptVxYn1vu4FzpIO+Et15uveVhnHf fewcGN/Xmx8ZMYSuLXF0l8BWB/awMa2Cg+pcyLQ6G/D8XoiKfKlzd7rguFQY1zB/lVVGdvFfJ2vr vEdW2wcWSY3ICsosqqyQtQ6lBFKBqaR+vOjALEImVUrdzYBZB1nWxNg2aT1C1kFr6AiFSSnBhTrf IDRWEsUJ9Xpg57U1iZQpOxcss4UNEGMXMmjCVrUYos8RqM4pJDo7/M90GZs7k3+tgy6wAIw1XSck RJMtjZpk4+ohxuoSl0/hbRvrBIW3QU9VBJFuvEGQMzoySp5H5HmTAh/IoTTggjRNgC4rirIk8xad pvhKFiq0LSBAC0HlY4VsbuW5WFviRRWkIOR4lVMI50PtLh5hbDhvCZGEWHikt8RSkAhJ5j3e20Bq 0M0W0/Vsnfd4IQNjttjLgfJ9UUI8UnoUCi0FSaTAFbSbM0jaNIYTxkYaeCsxXoOq46VD1+rkC012 bN1O1i5JahFgGBodYTQaRhAysKPjK5lcs5759gImm8e0S2SUEGmByUusKZBeomUgHnPOU5RlqFsp g6OrRRSO1VUEDlU9snGWLC9ptZrIilSqnWdk0y2cd0SRIugm2wqBECSLoihIbTlrMGXIKMeRQ6sa Q0N15ueDU9uR+EmTBC88zSxDVaFq7z2+khfSWlcM5L0Meue+dM6FB5fvKwnYW/5nfz5pt8P3tr34 r4K/d39M9dvlMsQDG9jAHm52IEdsubngoUJvD9Xh7c1ZOgHFX16grd1uIyONjiNkpb5oTVDQw4iQ 9jKeonSkaZ1Wq4WMI2JbkkQp/iChs4fWRntvY5n3v+JheF9O7qJj28/l0FojhSLWirm5OYQQzE3P sHt4J2efdQr3br2JXbsysixDioi0PsK6tRsYGmqwbecUQgTCUCkUQoEx4Fwo90nSqHoYHbqfciDo 8cE07353f4Dt9yDKvu//XoZcdJJE1beiKo/qri86nDGB/LUSDQxb8B6tg3snOohAEfq495WkoCDw dYjAzxGqGHvSlY8kG2R0H0EW4Ma9UEyI1LgK41A9vDqkuCJAjmWVpan4mYBlBllCNsp5151s90sQ KanQKkKg+ibaVR0v4Kua3KowsBOnCtBQ77Fe4nzlPFuDsSY4mN4hXDj0sB8ZNGylJEkThtOUmvJ4 CdHKMTIzz3RrnsCz29Pt9WL5IctX8GgRPgTHu9IziqOEJImROEwFMfayYowWCnxJpC3DtRE0nrwV nJccKHAYH6SQQu20wdkWxs4yNNRgYlyx4GKEBuMd7XaJswbvggZwO2sjYkUUBQZg4yBONFJrrHd4 Z5AiPGWNtdU1Ez3nRwm81F0pH4uvsrw+ZNsBKki0VpIk0tTTGBjGK0E5t0DebocRUkjwIkCs8RVh WQie7G2dfF+383lCPbFzlCYja1koLSPDDRLtwEpKAzt2zrFrehbrQ6TWk2CNYuf2KcbGh4kTCcZT G4qZnc3IC8uqyTWMja8kLurk20umsx0MSRmuhwjt5l3g4FZeYKzBOF9JD1UOe6QCCZWraqSFxBQ5 WZ5hS4sQKtSTC0GaxAjhKcsSpUKdubUVbNmHTHq3dt2K7n3gtSfSGlH14ZCRFZU0VKjjzY2pGMzp EoCFh00INBS5oSiK7j3Xqwmu2rsvM7PoAeU7vNgs+r7bT6oxoPNdD/ocNHeX3i90z5FqTBjYwAb2 yLFDgRY/mO8WLe8+lx/spPoXn4h7Ecq8TMWfYL1EKI3WmjSJSGoR0gjK9jwzM1M0m02mpqZQSUyS FwhZoNQvxkwbzqE/U6cIZIcdQkHR99pZ5xBPdh9zoIM/2H3vv3OErkJ9dXh/jSvAeWq1BKEjVow2 mJqb44fX/Tc68tSGGpjt4TpEUURrfoEizyiKgpFGg11TC6Gkq4LoegEoST1SpIlift5V51WdX4eC +H/MOhDjXhMf0it7X+XlTPa99mV1RZhfB2dXVO+rskMNvkp2ddaspuChv8swNw5gR9vV6wWQauDo DuwhaEIIpNJIKbGdqnKqzKXqDQAdN7NDJiQQUMnsdDK6QsjugCalxOKQqkeC0yG+6ej1ahUyWdaG bKGOVJUJFERRHCb5Mkzyi7LEGxs065RE6Zh2WWJdgGIa44NsiymBjtauR4mQIda6kiNS4WyUCLjQ /5+9N4+zpCrv/99nqaq7dE9Pz8IMiEQUhESMG2pU0C8qCZGgQkhA3CIuiRDFoFmMiUDEHSGLS/QV NGoUUQSESAyBHyYSNSgkuMUVkCUozUxPb/fWcpbfH+dU3Xt7mWlgQBn74VX0nXurTlWdqjp1nuf5 PJ/PbH+OvD+LiPWSiJCSkko2TsjiIn+avvBBU2lIW1RFQi1jqyApJAJbtJDBeZDCUVbz9PMW1nbx hcQgMAqMgkqE2lKNwLqSqhKkyThpKikLiXRtFoqKMi8IdRSGqoS5mTlcO8V3Fd5VzFmPRrBuvEur 08bYwDmYKqghrnUGrnZOKilIo9asgpgVjBltG3WEBSgvaWmN67SwCLRSlN4xX5RBP9ZGR8jX2ctQ yy0lINWSl95ovLGOWHq8s1hb4EpBS7eRqsSZHGccRSmYnp2nV/bpjCV0Wh100mXLljHwhm4nZWw8 JZMJ0nnKoiTN2ng0eWkxxpMXFUoItAy1xUoIFJKyqChUgdZtLIq8LIPzKzWekKVHCITSKAseg3eO sqyw3oIIjMXg0EohZBaipMLT7/coqxIlwrNVFDnWGNppi3hpUFqTZll4hgoLIgSjAgu2pCwrjLcI AbYK9/EwmkIgMMYO6u3j0gSThAApI5x+KWHL4sRrA1WMCInFU59h+HMITC12dgcIi53W867Zmq3Z z72NZrSaGofmmzqz07ijiz4Pr3vvocVuKMA+OuUfkOsFtNOAViAgwWro5kr79ou+G1kPwAoSIZA6 SBuG2kYTSC+doas907NTpAmMj7fpdrtUecXkukms0DgXWJHubca24c+oa6F80J8PSFOHknrIC1rk HRFlICM6qz6r4d07FxQYQmeMOoGjxznK7SAaQdfhjP4ggTHUSlhjKKvrCPvxXoHOGB+X3HnnDFJK Cg+d9Zu49b+u5xOf/hzP/n+PpTu2CW88Wia00zZlr49CUDjH2PgEN916O7+y6RH0ckhSgbehLGjb wgLt1viivl7+88CG8bghHYKIr7nYr7XTiIhCtSI6kdI33wtk42A7EYi3nGDJX7XC9yN/CWzKTizV 0Y0p3eHujqbCfeIsQQlFDm0icPHki2rQTMj4DvpFxoMQTjTzRxFEPgOX5zKB7gezrTm6D2JrSJQI DqBQImT8YsbNCxf+EqI+AhAiZiddneULTLmBoEnHl9uoEyOQKFFHe4LDGBAPUXMWh3WmIZKSMgms y9QargonAizCC0EVIZNJlpK0WrRkSVlpqlJhjcQZTUVkeVUqZDSTAHUWkdzI2Yp+b5aWHkOnCdum e+zoF1iRghdIJ8EJnIwvgrh/gUc4Hwau+iR91Ah2wYlVUoL1lHGk8ARpFaU83ofGHJp5q/m/mR7j XUFXBDZmJwXeBcIjicU7kFqSJpLZHbMUfegtJGwrYWZmAWc9SivwjrIoEaVDmgoqSy4UWE2qEwoj aJdB9zYRImRUhcdah/MW7wP7svOgvMJXkqyb4jOJFx4Ta5y9c7h47g6Pd0Hntq0ExhsSZ2knGmxG ZSpKE7KWMhJ3GSnwUoZrI8HbWpuZ+KKIPSYEWgYWaZW2QGfkvqKVrSdrtZjedhvCVwjt8b7CVh7r UyqhSJRjvKPpph22btpEN0nJezmuAoynk6UUZY+p7XeRG0OFZGzdJrrtNsp7bFUhjcBbT97ro7I2 PmnFjK5DOoP0CudsQCMIhdXhfk7bbXRRUOShP6VQaOEweU5RGUQiSdMMLVNS4UINt7TktoerDE4a pNZ453HWNSUDNeohSNlJDGCdobRRTiv2nBYhuFNzRJuyCvekUkHX1w1QFQgRIUcDJ3g0YxKuxbJQ Y7FydkAqEScuqplcNr/Jej+D8Wd4HFqzNVuzNVuduSWOYW27Czq5YvsoRERFCR9k12R0NBEWEaUO DzjwYdz8w4rb77iVvTZtRCYtjHGoVO0SObvqc2iwpYv/+p3/3UUOMOx+yAtdzaEs2+SwPm78JEbT Bo0PHvfoREDslQba3TGEECRteMwTDmX7jll++L0bKQ2UBWGeiEMiSJVEa0kmNf15Q1EZegWgIdFQ FRIpYbw7hrF1NnyRo35Pbx1Rz1pWug6xZmzxdcE1zumyf8UK3+/k92UObvmvvWRl2uk6ID34pi51 q/1XYSGRnkS6iNJKBqV8e+CrfM3R3SNMhMLz6NSKWHfraxlMwDqLllE+SIRIlG/CcbGNmEmCweS2 1tUc7CnW5IoohSPABbaogJBWgeDGA1ZIfGXwKji43nusFyEbiEDqFJ0ktJUk0TI4BkqidRulw3GV laGwUYZHSdII56yMoyhKdiwI2jJAY1BBxxRAOBGcGemaiBYx+zbIVEUPOC7BcQ+kQK6yFJQIrUM2 WaoILQ21p14pKpdx944+GzsGOW5IlMOhgqNtQ4bVWkvSbmEQbJueZn6mT6L2YqHwMautB9k667BU lLnBlgVKpiiZUUhLv6zo5Anj4xndJKUwQRNXSYl1Fc6bcC2co7ISYSV9pZFKomSARDvjgjabjKpr ImgTOx/qdJWATGu6aYozBmMrasIiPEjC/ZGkKUkaapcDO7MDbAh6uHAMWgrarYR2KyFLNDpJcB6s EnipME7hbYkUFUmqWKdakKTM93K6GnwSpHq0r8hkC68SSuvIdIopZ/BJgq0KZhf6FMYFuZ52QreV 4EuDUn2Eshjn6FclWiRUVYWpDBpFooLEEEictZTGNs+KE8EhDreMbyKuARUgUSqhO5Yy3p4gVQrj Fuh2WtEpDRaIo0LfCBmukxIKL0EqHQjTnMf7MmwjY9DIg3eWynqUkDg1YAcfZG3jcxq1kt0iEqqG VCre194PCKdqqDX1RGWZ9+ggiSAbBEjz21DkeE+r4/lFsPPPP5+TTz6ZT33qU7zgBS/4WR/Omv0M 7f5wJu8t9Pn+rgNe8tuyaBc/8ntRFEyXPbZt29Z875yjqioK48nS8ftwDrvJmxDNcA6Mfh4dtxed 3wrHtqT5FbZbrg8Xm1KKsgyZ+dnZWXbssGzevIHjjns+t93yK2y/6yb6Q0i7+v1krUVIjU6C02st pGnIQtbcMzqVTdnW6PHu/JiGLbwml57EgyVo61dgnW70dl2YN0NzBYFancmhRUUqbYSOB5URj2i4 QvYkW3N0H8Q2XKcnF008wyQ9OryAj+LoSsmorVpLpQ8mrcPLUgZWEZGSkexIDuAS3geGNxWzTCaS YYXa2jCxrms6BWEABLCmIs89OtGkWZsxAXm/R5IktFoZvd582NZa5ubmSRJJmijStBXqVfGUxqCr ilaW0EokuQlMyjJCkWSEJNf1jsQ+oY4+LhoYAydQzK+JUNovlQqjrK8HeA9OIkhxtqIoPGXLh4if F6CCZ1RDh0zlMM6w79a9+fM/PYN13XH+4K3n8c1bfoLTkn5hcMYF2LX0GCdwXmC9RVPiK4/vF5SV AjGG7rbIdEJVWawUgKMyFVmaIiUURRn6PwsvBB1FxEM20EX4dThU4xyVMYHESkq0VgGmG7OBKkoT SSmRSpEoRZZq2q0WUgl8ZLd21gSW68qAUrSylE6nRTtLSFONlALhAulHafpIlVGakl7ep9WZYKy7 gV5RkamM9735PWyY2MAHPv525nfcRa/qB4khG+67DZOT5N4znxekSlMVObPzC6TWojdOIlONarfQ zlNaR1lVVOV86BfrIc2CY+wtwgmMqSjyPOo9G8oixzvTXGsvQt2U1B4vBWVV4oxnojtGt9Mh71ck KGySkuc5zjmyLMM5izEGXBGZlWO9uSTUItfkEhG5Nowyc96F7LPSAwhhA21WMcBUy/0s4+RGconF 40UNORaLs7+rtJhApq7VXUKAtWY/t7bffvtx0kknMTU1xSte8Yqf9eGs2R5gu49wavntdtb+7nCU 6+/8Mr8rpfjql/+Tn9xxO1u3bqXX62G8ZOOWh9Av7TBb3713xu9DsGElB3elkpWlnxevt3Sd0e0G Du9q3KCgG68ZHxOk6QTbt8/R6xVMTmQ88pGP5Dv53eRz0whvQ5DfWqqqYmFhHpkJsqzL5OQkSeSd CuoFgXk5zz0ItarzWd4Ew6nLlaX47j+7b/vyKyZ7a7i1qcrmOQmlULHcUAikMGSyop16Wi1PlkGi 6n6Wexz/xpqjuweYiA6ci0RKQSpniKHQh/pXH5mRa7C+oM4QLX1m6nq9QYbXNgNoPelulroellg7 42sQSICj1BvWbQkxkCmK5G/keU6WZZRFQZ7nCCEwJkz0tXQIrZncuIGP/P0n2XvrPiv2xSlv/As+ /x/XgSQ6t5FQKb5UQq1PXVtSA20G5ppMnojZTI/DIbwJWfOoWRtOUOOsorIOJ2Rw8K0JwuZpgssl RVkinURoWL9+PEB+gXYKG8dT8spT9nOM8UgR5IKCIyqxwuKdwbsKb/r4SlIaR2krlEgoyoKyLMIx eY91Ke1WB5UmOGPo5T0EgkynSCGYnBjjdS97IT+5+24+eOElVLaiMpBXFUoFCaF2qnnXH76IibEu r3rnB/n2LbeTqIQ0SdEyOO5ZktBOU1rtVpA/rgzGVFhT4UyoRU1Sza8dciCnv+D5WOs478JLuOmO 25FAlTuKwlDmhn5ucL6g1XKs647T2jDZ3F+zswv0ej3oWMa6E9jZitnZWWSWMTkxgdY5qQlsC9vn F5javg1nKyY6bYRWyCxFVpbKeXxZBtkkEV5wznkMgRk5LypMVeKcCfe5q2L9S0AueB/qYYKjaEO/ 5xWJlGglKYoC6yq0TpogTpIkOO9w1rEwPx+CSwTnVLgAN4/FQUOYikHktX5Wgqa1xpiquUdrCTFb VdhlHM3aoQ2SVEsnh7vnZS52MZH4xbHJyUmuv/569t9/fwDOPPNMzjrrrF1ud/rpp/Oe97wHgOuu u47DDz+cMsqY3R92xhln4JzjqKOOYmFhYVXbHHPMMVx88cWUZcnhhx/ODTfccL8d35o9uGw5B+re OrjLtbfa9lf6bbXt++a3MAKLOE/odroYY7jrrrvYsmUL3W6XvAoa6Gk7JS98nEqJoTYG8UW5pP2h z7tp7BzMyZZmc5vzFX7o/EAsA30eOLlL93Fvri0QeT0kCwuSJIG99hqn17NMT/dop9BqdYITJgKv TP3eqqqKVstjbMW6dWPoBPI4LKZpihIWa0p0omkIoe5lkGW5IPGDxaLeQvPvRirUh1+zOE8QOIRw QV6yhi5TMNaRtBJPO4MsGTiDVvlGOnFPMf3zdHFraMiard6klCQ6QSBi1qge8UZhDY6hB1mE6bVU KkKeB1JCwxIm9cDjvcP7wcR2mHk5wJFtdGlj7aYKEj2NBA61ptcgE1ST8gih8F7QW+hRlRVSJvTz nKKoyLIMpSRKZygJ491xNm7YtPP+UBYpDVYmeCGQItbS1OcvfDP5F0IwMdblX97/NjZNTnD86/+K b//ox0g1IAPyAfeNc7F2QcWstgS8pywtuanInUdhUIGqCucV1nmMAeUdWjic6YEPUOqtGzt4Cbfd uYNp60JU03u8lsgEJAJrHdb2ERQkiSVTHipDb26GQsQARzixQFxBhXOg9TheJpjKMG/6mAzSVFFF RXDvPf1+n8p5KiuxzlEZh/EeO8S8J6QnTTWJTui2umipEK4i1ZJWK6XTyUiUCjBnU4WggA/SThD0 80S837TwpEogUHg0Co2vBLawFK7PQjLLunaHfTZuQkWyqNtv/ykzcz9h06YJHpp10GmKVAl5v0Co nH6/oKwMCYqWTvF4jI1QZaWwgJIqZq8tUoXaIukd3lYYKzDOkpcFwgukCPrLSnjQRAfXY4XDUWF8 wEA4PF465nrzWFsiMQTCLt8EcWSEKudlHmqBCWObiygKhEcojzQO7QQ21hrVNbdShcirEBJjTHCm rY3M6qEtYwzGLY28NtFp54fIW/xIFtY7h/V+BAlST/6C/JFvSpKG26yDZ/Uws2YwPj7O3nvv3fz7 1FNP5ZxzztmpMzk5Ockf/uEfPhCHBwSH9SUveQlnn332iLNaO+lbtmxZc2R/wWx3Q5fvS3v31ZFd TdZ25LcVxq7hbcuy5JBDDuHHN/2I6elpOp0OsnLMzs6yca+9KcpqZC6xs/2v5rf7YgOuhGFHFhYX XO4s67nz30Yzuqw0/g9WCwH/RDI/u0BRFGzYsL6ZW6ZpcKuqqiKRiloBQ0qQClrtlG0zBWnawdqQ zVUKWi3QUlGVaTO/3N1O7gMlsXqffS8xysA8sECQ1WqFulvnLSKiLL0z4V7xBRPtcVJtSbRHYxpH WQNe7ll+2FpG90Fu3ocMoJBDY7cPsjbDz1H9yHoXJtINTLmpUV39/hb/Dc5umDjrqNfqvG/IjnAS 6X0TzRwMIFH+xEva7Q4L83MgBDoJUFcpJVqF7KT3DmPCpH7HzDTHvego+mUPrSRp0kKqlLwSzPQc UqZUsbrwvupeL9szIsjtWFc2+w+2AAAgAElEQVShdIUXNkjEiJzECqQTUIHzIQtnrcOZkoKFpsFE 5LRkyXgqGG8luAVH6SoqC23Rop1m9Ho5UNBOLamuyKRFEbK/lbUIIUmSIIkgSAhF2QJEhkNQVC6y VSdNfUu4ZoTMubEYJ7E+OIB5YQjszPFaOxOkcGrZBZ0inEcrwVi3RZqocK0j6ZhzEucEyoJA8t2b buOP3vN+hBQ4ZxHOkihP2s5ob97CDgnFwhxlv8cCnm1Y1rWTGAAReCeYme2TtlPu3r6DdekEaZZx 59QU//eTu8lNKEKf3LSZ8c4YnXQ9QnqKfIGiqkLtsVAoL/De0G61UDrBGIM1FuehrCqMqRAyZGa9 dzHrLinLIjxLMiAiXKwx91KSJAk4T1lWaBlg+k4M2MjrQFBNCGWqCus9TkYHOkbYRf0sNQiJUA/t PHjhca7CmACBbnSgGehYLyGgam7RiFoYGgNGXqxC7Gma8D9zm5qa4uqrr+bEE0/kDW94w06zui97 2cvYf//9+dCHPsRLXvKS+/3YLr/88nDPPkDbrdmebys5Ak32cpUT+V21s9rvV/ptV+sHbNuoMwew sLDAvvvuyz777IMxQeLNOkFZlhRFUEvY1b52CWm+D85UrbIw2q5r3t8ByCaa75fuf9efF9tOnb+R nwKBotYwMdGlqlpAcGwrUzA7u9CMK1JKnI1zSRzGlIBDa4lIJEV0csMcJrh2WivKyq3Yv6vp1vpK P5izul7IoViGC2Ij8XNlSmQsP5NCkCYgZRLJLmFdO0OLsmbyiJdvz3Jwa1tzdPcQqwdrHx3KmoHX x0LUMN/2IbozuiFDqJad2CjhTZ099j5qkloosUhlUUIFTS7noySNjazOAVJtrY16ohKlNCpKBiVp irGBVElKRVUZkiRrahL9kAMvlEQnKUpCaXJ8ZZCqTafTouwLiqrG8QzBdhaNfsOOw7J9KoYlDmrY c5Rm8hYhCrKWJ2kLrAjwVYFCu5ABD5ChEIGwtsK7krq6pejtYO7uaTTjrOu2mO8VISeugvNf9Pso DFs3T5DqHlXeJ5EVuBIvFVYLjCkxViJEivMVrpA4b1E+wTiDqSSJDpHPUHUc6rLBY6wJGWMHlbVU xtErigBhjmLLpqyoihIlFaYscEqSSo8QFnwVlREMLjJueydwLot1nBYDIdAhQjQxVYYscbTSFJ2t p42lWphh++w0GsPCzBS33xoy2wJBlnUoSsvMbEGnVSLyeRZ6ParK0O/3MU6QtjLarTZtldBJJWWV Y4scg40Mxjq8GFttWp02IOh7QeUDZLss83ifWnq9+aCZ28qoigJjynj9Hc4HHV6Dx3lJIjRZokmk IhE+yFQPTfDCM+HwOIT0WGOChBYyBIFEDY13I05rIyFUR8+tw5paK1k293FwpgXeL++uhgDS0vu9 vrFrdIXgwfdy/3m2yy67jOOPP57nPOc5vP3tb18Wilxnc3u9Hl/4whceEEd3zdbs/rR7m/3aHZnQ 1f62K2jz4t/qd//WrVuRUlKWJU5oNk9Oruq4H+jMrvd2EVy5fjcsdV5WPublvlvhWFc8hfA+SVOY 3jFPqjRjY62oXJEyPpaCMbhyhixroYXAmhLnDVVVkOc9yrJgbHyC0kNReNJMIB0UhaP0lnYruUfn sKeZE0u7v4Ys1/O8+dlZlBa0tSZrJWRJi6yVkGpIVYoWoILIUmCc9gwhQfcsh3fN0X0QW5OVrWE5 DCC6tZNbO7qIALkMkidxOzmIaFKXq640pom6vQH763BW19ogE1NJCUl0ul3ADItIhCSon6P4lPoA i3bOUlUGrdOmPSllrN2wKCUDdLrONHpP0S+RSchWWueCY6gsrfEOLafpe4lF8srjj+HNr35Zcx7/ 890fcNzr3kxpHRefdyZPOuTg5rfPv/fs5vMpb3svV113I857JsY7XHzOm9h3r1HY9N9fdAmf+tfP kkRYtrMh82eF49lPeT7HPXOw31vu/AEf+PTbmqxqu5uQl7PMG898rihNxUO3buTz73sb6aIMyrkf fRdf/voXSGVwsJ3wKJXy/GefwO8de0qz3g9u+S5/ft4bsJVEqfUI0Q4aq87jrMeYwfVydiBT442h LHNMZaCGawNlWVEUOXjP0w4+kLNf/QK+8s3vct4Fn+UvT34BB//Svs2+L/uPr/C5L34V40qMrTCm ZK/Jcc49/ffJi5I3nPd+qirHajDeURU5T/+1Z3DUX/5108aPbvkeZ779DSF7iSdtd0Bm7JjPmVxv WdeGdnuMC//xH0mSdKSPPvTh9/G/37oeZwxaqhiQgKOPOo4TfufFg+twy494yzv+nF5h6Oc5ZZnH DH2QSbLW0u8byqpA64QkUVTWDmphRYCV1/XtWmsSWd/LvnFYgUbjuIbqG18zVIN3LsgjWBfQDr6u pY9OMhFabH3U/q0zxTRszsvp2TYZ3vpZWW6SA8HZXXN0d7tddtllfPWrX+Wwww7jOc95DpdeeumS dQ477DAe+tCHctFFF3H99dev2Nbi2t/alqsBrut9zzzzTG644QYuvvhitNZN7e/WrVv53ve+x9zc HPvvvz8LCwt86Utf4rDDDmvaGD6WY489lksvvZT99ttvyXYwqN09++yz+du//duR45yammrWrbdv tUJGZ2dsz4vXXXwsa/bA2iDIe+8c0uUgx8Of5S7InFZbo7tSRq5B1SzzW8h8DUq5hvdT/6e0pixL ut0u27dvD/JuIozrThicSCLXx2DbkZF05PwY+bwaX6whDtwFRLuGKjeO7Qj3yHAbw58HpWhLsrk7 ObgBoz/LrDj6HnFDZTNFUeG9J0kSjBEszMzgnKPf79NKErrdLtLZ8P7EIqQnz/sYkQSVgkD9QZLI oPbqGdL7Hd1//e3w/bvsuTRy9Ku7txf3wc/aobbWoZMkEEkloFEB5l0GLeh169YhFWRSkmaaVqJI kkA6pZuuiS5gTJDh6/Pbs6IFP1fotbX63HtmDVmUDzJATQLH+6WDpPfB6YkZPSGC5IkUYTwWSgYC HykDw23U462laEK9n2+yT00WynmkkHHCzGCfQoBWyEwjhQdT4m2FcAbhLNI7tAj6adYakkSRJIo0 TZlcP8mG9RvpdMbCoTtDIiVjWafOq9Kf7bP97llm5gxCddFKUfRm8cU8Y6kklYJX/vZvjTi5AI89 +EBOfcHzl8gmLTbnHRZ46fOezXUfO2+JkwvwB8cfy0uPOgbZt7RdRuJCJvuPXvy2EScX4GF7H8g7 T/sIG9fvBXhcalhI+uxwPeZtxVte+zL+7UPvXuLkApz+0j/h9Se/iSQVpJkm0fC8/3fciJMLcODD DubYI47DFz2UL0iVQwiLdYbKQeVVffXxBPIpKTxKBc016Q3OmmbQM8aRFwXzCwss9Hvg4YCHbOXT b33TiJML8NynP4VnP/nxbJ/exl1TU9z5023cNTXbBEdme9uYnZ9jZrbP9h3TvPSkl3PUkceOtPGI hx3Exz94OVs2b8V7z3S/oOcFfSvoFRUnnPAKznn7h5Y4uQCvOvlUTjrp5VTGgk8QPuPoo44fcXIB HvawR/Abv3EMc/k8pSsRicJicb4iyxRJJqNcVpDK0kqjtEYohRaSllSMJQndNCHTQWLJmCqSPw2C TsYYnHcIFFJqkBIpNFpIFBLlQBuQzjcvZuccwnskkAhFIhRSOpT2zYJwOFviMQg5gC0PoxOaz8Ih pI2LQ8pAduYj03NcuWlj2EkHgia0iNlhhtZHNLW9o6UIawZwySWXAHDCCScs+/uf/MmfoLXmwgsv XLGN008/ne3bty9xciE4umecccay273oRS/isssuQ+sHJob9tKc9jbvuumvkODdv3szNN9/MBRdc wI9//OMRx/XEE0/kggsuWNLO+eefv2Td2i655JJlt1mz+2Zi0TO8eLkn7ezO9XaX3dvzW+z43Jus 8K7OdbWhxV07uYv20zi9A8d2ebuf59rC0e8XdDodut12c0ytliDLAqkUXjb966NEpcdGSHataewQ u6gz/kU06Uevvfc1D89gnbwsAlTcmhhAAKlB6eDoWsLiHNgIXjY+8IXYPSwHumedzZrt1Aby2hGW KwLZDUODf4jq+MAyS/2dH4E7DmeuatryoHUSop3GBGkWqRVKCjAusOqJAJ9VWqClhhiZc94hpSLL 0iD7YiwzMzMEpLBDa1BCoUWAWUxObuD6r3xnyfl9+KPv4+Of+Rhg2DQ2zsnHHk2/KPjt0/6cb/3w JgDe/YY/jOfuOe60N7NuvMO//v272DQ5we++/q/49k0/Dv0iJV6pZuR4zTvfzxe/9t8IF6JdRxz6 KM7909dw7JFH8eWvX4GzFQ7Jox/5RB6+b8gS/80n/pIbv/df6CTh0Qc9hVOOfyNKRsZcJ0FklEXF 4Y95HMce8TQALvjnz/KZK/4JrTzOGY5+5nN42W+fwlMe9yz+57tf4cb//TJpkvHrhx1HUeac9Tev 5abbf4iz8PsveD1SBYkggUUpj9YCIQLJQy3x5D2h6AWPi9lGlSRQ5LhIKy8I16WqKiymgWBu3bQB gNef80G+/I3/RQrPG08+kd96xlP4zac+gY9edAlVbnDWUfVTash7Pt8nwVAYz68cchD77/cIAP7+ H97FN2+8gdnpeX710EM5/TV/2TAXV8agtEY6weMe9QQe9+gnAfDxC/6Bf/viF0jTFnjJkc88ihOO O4knHvo0/utrX+aG/76e8fH1POuI36QsS97z12/l5lt/gHEVLz3p93ERUh8cUULoRIS6n1SkGK1x fiC9lagEhKcwgXKtk2ZolSBFgiTUJgcCLhrWSGstLrIcJjKJz0qAGnvrgmZujaRggJKoHWalAqio 8j4CMgKUzhjbwPuhhvQPnstR84xMqepsxaL1Vszo1hCRZb7GL50Erlmwiy66iLe+9a0897nP5fGP f/wIwdN+++3HoYceynXXXccVV1zB1q1bd9rW4mxmnUldifDqgAMOGMmo7swOP/zw+0xGdeSRR9Lr 9Xjyk5/MDTfc0Bzf5s2bOfHEE0eOpc46L+6XmigLlmar621OPPFELrzwwrXM7s/AVuvo3Vsn8J5m 1O7NuqtpS9QD2yqPaziDe2/OIWRP71mQYHQ/g/E9JBcWO7lihfWC/Mx9Nz+a+Gs6IzjRgTgxvNc6 nQQhodevKPOCLKpPSBFckAYliGvUDwYw3NhNy76m9tzk2C7vozhH8T44q0LEHovzhSRJUJJADgtU HkQV1rFx6hGn5MRKu9Cbe+Ar/ecqo7tm958NsrIho+c8gRwnwpxh0f09NJFttHPFoG5lRF7Ih2xy 0DgzVFXVQDGtdc0+rHUY5wKhj5B4IaK2r2rIp6SU9PM+RVkEDVI8woshYp+VrZVlZEmKKXKEyZt6 WOVBeonwij8+5wOc9/FPhyyXsCOkhPW7QkDQGfUVH/7cFRz0vFfx/33lWwgngD5Kb+N7t1zH1PYp 2q0W+2zdRN/0sAgee/BTUVJx0VUf5Wvf+hKgkLLFt354I6e9+6VMTf8UAGcSfJkhjeDZhz4OpSQX Xvl5PvfFS1DaUNp5ymqey665kH//2r8A8IRHHQ5W430Sr5bAC4VHglB84IK/5tKrPkOapREWZkBU eF9QVn3KoojXzlF5hyNCu7QmSzN0kiG1HvRz/OsYoC36Rclxf/w2rrj2q8zP7aDo7eAfPv0Zyqqi lSbsv0+XiW7FZMfQFr1mf23n2NBOaUvHoYc8DiUVn7zow1x5zVVML5SI9hjfv/lH/PFbXsfUtimE EIx3u2gh0ULw5Mc+GSkln/rsP3LBRR8lTZNAkNVK+eKXruY/v/IfADzx0KchpUCpAT7MOygrS1U5 Pvjh93HhRZ8AL3DG4WwgycI6hIVMazqtNp2sRaoTlBBoIdBeIJ1DeUEqFC2V0JaaTKVopUAMgjxl WTZoB2st1tjmRb5kkidDUCUQdwTSryAppJrnDgRSKqQcfF8/00TG9FWbCNvU7HVNTfA9QdPUkTLW nN3l7NZbb+WTn/wknU6HY445ZuS3M844g1arxRVXXLFTKaFzzz0XIcQSx+7aa6/ltttuo9vtctBB By3ZbrVO7u6yqakp9tprr8Zpvfzyy/nYxz4GBMmkfffdtzmWj3zkI9x88810Oh3222+/po3nP//5 aK2XhWSfe+65fPjDHwZWzpCv2f1nO8sorva34d9X6+Q+UGPKzo5zcfZ3pYzwvT1ut4tVV8pCCzHq Hy/dv9vJb/f8OO+9BW3chYUe8/MFVRXmh84FiSYhQulPHaQdRkPV24evBs7u4vPeHYiElWxX7d/X /d/X9ut9ODdYvAe8xAnBxPou3XVdWu02XmsK45jtWe7eUXLX9pLZHOZymCvD39ki/J2Jy55ka47u g9iGHU/YuR8YMqf1IvBeBAfUBc0s50alhZqsklJIoUYGmKZeUMgRJ7h+8Grh73oJWaoQNXIuECE5 Z7GxdtdHhj4IrHwystrW0klSiFDLKEJWeXZ2hqOf/0ye9Ixf5VefdDC/+sRHcsSvP5ZPXvgPCBze 9FiYuYsLLrmEdpZx+Qffw9/9xR+FgRKP9B6BjdCYUVhm+A7AI71B+ArpPWef+iK+cfGH+MbFn+C/ P30xX/jQJ9m6eWtoUzuQgWBoy6YA6f3R7T/E2tDXQmi0bqNVl5pQyLsUVyk2rVvPkx79KIqy5Ovf uo6y3IFx80hpydqSNJF87Rv/gXWWjeu34Ixgdm6eK7/8ObI04+1v+ACvfcmbQCqETAI3vxAI6TA2 Z6G/g7mFaWZmtjM3PwMerHPkeUFpqsCW7YIOsFABolvfSVLEazuU8fv+bXfy7ZtvwzlDqj2d1OPp s23HDoSATPeQbgplpxDm7tCPAjaNCbqJQ2HYsjlksb7/gx/QLyxJa4xWd4LxdRtotzp1qJtUpzhr 6bY7POqRj6KsSr7x7etZN7EuOrqKJNW0Whnf/Nb/4Jxly+YtpGlGr9fjmi/+G2ma8ud/dhZ/8MrX YZygMpaqNLjKYqsqkGxZ0wRSBojewFSolUI4jy2q4AgrjSIwawcJoXi/l1XzEh9GPDjnKMqiIV8b BIoCJLjOGCfJYBl++S8mTBNCorWOJQs1BHnll+voV8MvSRom6XtkcbYhJYj47A+f15oFu/TSSzHG cOqpp9LtdoGQzT3ppJOYmprinHPOWVU7559//sh9sBKcubarr776AXNyV9rft7/9bYAlzvz09DR3 3HHHyLqTk5McccQR9Ho9Lr/88mX3Ufflwx/+8AB5XLPdYvdksr7Y2VvcznKfF6+/mu12Z+Bstee3 Gqd92W2FwEuBE8FpXenzcss9Pf7w78WLCJwnwjPQyh3eNqbr6nMSbqTcZffbIAMLQZ5JCIHH0s8X MMbQ6bTpdttEYFuY94lA9ihV0Ky3rop1uoNzGe2XVSfCH9S2q3tXQZjLOvCGMN+M2VmEIGmBTgEd oMm5hYWqYiGvmOkVzPZhtg87ctiRe3bknpnCMpMbZnKzi6N7cNkadPlBbLUzKuoJLEPokUUDgQgu XoBZykCog/V44dCIpj5QOLd04ipC1qkmlWqib3GV4Wzr8CS/dpydEEEyJtYTh0xXgNZ47/HGYmRw NmrYZ5PRIhxrojWJHIK5OE+iNDaxeBfkdoqiwitDlkpUorno8k/hlOdPf/8UjjniMI454jBu/O4P +O3XvZHSlk3WuTbvLLhQwSpkqGV85pMey/v/7PTGEV/OvHc4IMu6TI5vpCgLtm2/G+EV1jiscSit 0Dqj7qhWq8Pk+nVB/iaSVghXIhjAfpJUIXD8+I6bAqQ4BilA8i/Xfg7vJS865pU87QlH8LQnHMGP bv0hZ73vL6isxVuP95bK5BiTUJaCJNF4PHttmKSX93EIkiylsh4TpXLEonBJQ7wwuMBIHK1Msa4r 0bJEyqq535zLMWYW5QN7sSCQjmzZkDE726O0nnXjE5RVidIpD3no/mzetJVtd29jvtejNdYNJGaE e0EhSCJkHe9ZPzFBliVM79jGunWTtFoZoLjjztvCPdVMDCRXXf1vIBS/c9wJ/NqhT+HXzr+I7/3g u7zuz15DzdSmpAjkUkKQ6gThg5ZuXYtKfKkmUiG0D38bMjWw3oVny/uoPxuuX12jG0qNBGmakiQJ VVUteYalCg7jcI1sXUPe6N7W9fg4RpOvvqmDXgxBDtdkUXo+brPYhpEaYQIlmnaHSeBqJ5lYp0sk fKlfvouJ6n5R7fLLL29IqY488kguvfRSjj/+eFqtFu94xzt26YzWEOAHqtb259luvPHGoSzPmj3Q thpHdfG/781v99QB211Zu2H48XCTKzm3zWc/uu49PSYhWPK+XW6d5T4vdx6Dv7unf++rdTodqqqi 3W6zzz7jWAt33DHN/OwM67qtZv7q7Oh7w9qKpnObOt0oo/Nz9FrZVX/u6h14X6/HIKMb37/4oWut 6OfNNAfjwQmJVxohEoTy9O3w8bkRZKYTexYkfC0M/yC2JpsqBdQkM7glRekQ6zNjiMw7gbGB9TUQ v4ZtmymxGMCVwwQbtNJLYMtA0BaNrLR+aKK+2OENLNACpELppIEtu9hGWZaUZdlM6JVSoT6z/ixl JNMKJ+eMxRuLdZa8KimqksJWlLZEKMhSQZYaPnvFP/HYow/nyBe9iKIseczBB/LZv347SaKQAfQ7 2k/exvqQUFP5quOOQSnFN7//fZ58/NEc+XtHceypz+blb3o+U9t/AoCxjrw0lGWob83SjH0370ur 3UFKjTUCZyWCpHmxSQnrJlI2bugE+KqAVpaQpR2UbONdQlUJisKyz+b9kSoQSTkb5ZXQXPmfV/DS Nx7H6e/8AypT8Yj9DuCMU89GIXGuoqz6VKbAU5HnC0GnOPb39MwM26anmdo2zbbpHUzv2MHcQg8t JZsm19ErCn50+51N/+vo6AsB3XbCxHiLLPEISpwvqGWt8lKikjHWb97Kxr22NBODVnuMojT0TQik pEnKfvvuz14b96KTZaSJxjpPZQfsf1VZhiz+0M3camUkScL8/AIzMzuYnZ2lKHL22fshQf/We/AC gUIIydVXX8krX/1yTvuz0yirkoMOPJi/fsff0eq0SbSm2+7QabXpZi2k81T9AiqLcGBLg69MuP9a KTpNsXiMdzg8lakoyyrWngfn1lQhYKO1Jssy2q0W7XabNE2bZyH4hxExIdWyWYxhjcTlnjuQy47e gxddRA6sULbrI3BhtRmUZg0fWbyHnN9dyXT9olpNSvXGN76RrVu3NpJCK2Uuh60mrLruuuvIsqy5 Ths2bODmm2++vw/958oe85jHrDn8PwNbGSVyz7O6K31ebfv3h+1sHzvL8t6Tdu6LLefkDmd0l+5/ NKM6cM4jsdPi73ebje63/neaymb+0OvBzTffyY9+9AN27NjRBK7qBMIwdLlWK9iZ9u/wu2tn2fr7 Yvd3+7ve/84XKUQkDrU4bwYksUi8FMz3Pb0C8gpMJOhRWqMyRdLWOCVwSmClwCqF0xqjBFZLnNqz xts1R/dBavUEeDjj5iNOP/zPL94gECzVEZsIWQ4OyiBbV7er1DAkOn7X1AwOjsG7QDQVanGXBty8 C98bF4ROpNZIrRFS4UWAUNdOsbUWT3ASgrauDBIvSiF80DqtzyVAoi3tbhuZKhbKnAIDicZJg3V9 hF8gTfq0W4apmTt5+okv5vaf/JRH7r8fBz38EQipRiQOQlQrLs6zrjvBlg0byIuCd57/N6ybcKwb 13RVRossnB9QWOgXnpmZOaZntgPwsL0fTpIkZGkbpVKcl+CTOFILjCvw9OkXO9gxO02apDzxkCfS TsdRoou3KaaUlH3HoY8+DCUVd919Z4QDycACrDVp1mKuN8fr3noKU9vvYt+tD+UhW/dtNOmKskee z1OWBTOzs0xtn2Zy3TjH/8Yz2T4zw7bt08zMzDAzO8vM3ByvPO43yZKE234yRVWZ5jrXUglSCDot zabJdUx0UxQmaARHJt+iXMf8/Bj9vIVON0W0gUSyHqHHkUmL2fl5AB66z35kKsGbionxDipNmZ5d aPo1LwuQkqIs2D69jTTNeMT+vxy8NBxzs7NMTd3FzMw0j37U45BSMXX3XVSViagEFetQHT+9a4rf Pfkk/u8nd/Kw/fbn4Q9/BFoGwqc01sbmeb/JajsboFRpmuLx5KakcAYnQ6CgKAqKsgRC3VFZlRhT RVIqj1KSNEmaTK6pbANtFkI2z5hqSgWaJyZmhX0D+VdxXR+DSRACJbLRvBtkf+u/y72HQ8DJRfki P5Kd2OWLu3G4fXR23RpL/i6srkk95JBDeMtb3sL+++/PZZddtkvCp8nJSR7ykIfQ6/V49atfvdNa 3ge71XDm5eqZa6treG+66aY9ui8eaFN4FH7pBD7W8EdsU0NKuRq7tw7A/eE47NRJUTFrFeG80geC wHo7K8ALj5ceJRzKW5QI6BY/9D5crTM8bKOqOG4Xf/2Ik7vcOQ4+L0ad1ZA7ufNjE4uWVVit2Sq8 YxEpMj6mEHbM9BkbSyjLkquuvIrPXXoJvdlZDth/P7Zs3hT6Mx7XMIuwcALpRXM+wg/1WQRThf/d 1/fPsIN+b/6GqLGo/6461huTRIhmWfr78o2Nwt/D8dfJmZrAS8Zj9MZibRXQYa4mI4v3kQShw6I1 CBUWJRUylizuSbbm6D6YTMTBIA5IIurhemJmta6/ZfCSEhAkS3ydyomPUb2eUAipsV5iPFgvBnW8 1NlZsF5i47pKqXDj+PBQSSzCGbwzeGdxOJzw2BBrwjTHFjNNUkZHN9aT+gBPlkKiRCDdkcg4kRd4 KUFrzNBg7Xxg7NuwfgPrJzbgvKQoLaU1FMYwsXGSyz7xRR75iANIEsd4G/Zar9lrwyR5nnPn7TeT SMvc/Bw/vXsb7Szj2U85FC08miB9pKLT0soyfuOpT2ViXJFlnu66cc44/W/YvGEr+EB0ZJ0nL0u+ 9PVrAHjus1/AYx55OIlnpogAACAASURBVEJ08D7h0Q9/LO887W1snNhAGBQt1lSYquC///e/ATjm iGN43rOOR4oOUmcINK996Z9x5GG/RVEWfO6qzyJkwoaJvXn/mz7GQ/c+EOcUxklU1mb9ukmKsuC2 n/4fxthIQDVHUc7iRc7M/N3806WfA+A1L/xdfv93jiXPS3r9goWFnL969e9x3LOfDsD7L/wceZXj fR1VjS8hHJkoGGsLNm6cYGzdBEp34+RIkHY2IJJJtk07pu4u4tWSiPYEe+39Szz0IQ/jO9/7HgDP fMYzOeDhB2GNo9Pq8oRDHs8H33YeWzZtDoNxZUmlYnJiHTd882sAHP3rx3P0Ub+DVArrLXmZ83sv fBWHPfUZlGXBF678PALBxsmNvPsd5/GQh+6HqQz9fo8sSdi0YSN5kXPbbXeA1Bx66NO55DPX8JkL rmSfhzwML0EkAoNDZy3S1hiVgd5CgXMCh6SyltJYjHcUxtDrF5SlHTxTXmCdoDKOyjiM84HGPz5X riZj8yoSgimcVzgvsVbgvAxTUB9/ExLnBDZwZg2ecx8juouyqoPs6gDG7anXH5op+AG0KQwP4fd6 qBDOD8oi4uKFqFcbDEsPUIT7wWbT09Ncc801dDodXvGKVwDsVFJosS12/lbS1b2vx7grR/P+tjrz vZxs0vnnn8/JJ59Mr9fj3e9+98/i8PZYq6fZ0g9JowkZNEikpjQuZoI0SiconSCQAblSlARG3YD4 qj8vt4TMXFivXpRavoZ1cZ2rlyKwxsbPw8vOamCdCHrtw0uYj4TFASIFEkiEI0GiAekkBrDCITPF N771P/QWZuikioWZadaNd5FaUXmCLN0y/wU0jkcBCtBisCQStAqL8ENSOtT9VPdl3VdiSQZ32LyL cd+gAxeC4GKguV4HVKVQsUxKRW4VAkun8sELWGbxtbPfLAzGfuHQeLSwSOFDKZxUuKGl1Wnzo5vu 5Mc//jG/cvBB/PA73+G2m77H5okxJtoJ68a7zC/Mhrmf1CzM95gYn0B4SaJSFAolNEpIdIwtSCxK WCQV+EFfN07ncMZTimYZzYSPrlv3c7gvJUoJlJLNdVjprxQWKeLxCI8ScR7bLOG/wfszHoP0eBne 47a+dEI0JJqJliRakiaQaJAqyAQabzCuorAFRZWTtRWttiZLNVoFqUjvTFAAqcrQjpIhmOUdvrLY wmJyS9W3OAPOgDXgbVhwIGxY9iTbs/LTvwgm6wFNIFVwFGsiKetrCfRFcA+gIa4ZCg8KIREywcsE Eyfo3saXk3DU3K7OhziRFwKZBAZjWxVUpkLgA4W5DzWh3nm8CBBSKcILRbmQTa4DS1oohJRID04E KCRCoqUm0WkYiIUY1EAqjUw0NjIYTEys5+qrvrJs95z2F6fw79ddQ24drazNh9/5mSXr/PtXv0Ri ZumqFrm33HL77Rx6yC9z2otP4LQXB2bP097yTq7+yrV86p8/xxte/ipe/LwX8uLnvXDZfSoPynnK ouAT//xRnvK4p/OoAx7NKSf80ch6cwtzbJ+ZZu/NW/EGqMLgcuWXruJxBz+OA37pETz3WUfz3Gcd vWQfF1/xKe786U/otCdQMiVLW5x16tuWrPfV71/H/EKBNzIGBS3OWzwV3nk+8umP86ynPZVDD3kU r3vJCbzuJUuZTC+75st84dr/wmmJSCRCZYMItneMJQXe93AyozU+gTQJNVQ2bWVk3Q6mUPSqCKb3 jun+ApnUtFvjXH/jt3j0Lz+K/fbdlxeecNJoH83Pcff2beyzdR+2bNiIcCWOis9e/mme8KtP5OAD H8WxR5/IsUefuOS4/+VfLuP2225BRTmgNE35yzeesWS9r37tK+yYmSO+NgHIshZb996XW267CesN OtHoJMWhkCJFi5REZYjoNAoFlbXkeR6hViKERyNCwliPsAEjLHyNkFAY5zCVayYdDhedVh9lioLk llIKqSIxh4sZ1FgC0Dioi85refhwuC5hRhRJ5kTdRk3TuLihuNS1P3WkXQiEF7hFe15zcle2s846 i5NOOolWq9VICu3Kpqenee9738t73vMezjzzTM4888z79Ri///3vc9hhh43sa7Gs0f1p5557Lsce e+ySYxi2d73rXfdY+mjNdm7CuygrIoPr51WcLATkl0rSiOQSCKWQuMj0oe9RDd/OoMzL/Xu17dwT W5J5FRYnHCrMUMJcx4GLiSwnYPvcNFddcxWzt/6Y3zzyNzjwgEOwtmJ+fp7W+o0RD3oPjoGVEqZ+ 6K9g6ci++nMjTKVWdzB1jdCSHxYf1wpNyHC8ygtsTMCMHL2HvfbaSivZwnhb8sTHP46DDtgfhWFm +3akEDFz6CM/RtDe9WXkdyFkcmst95j2QFB7YTE1eZ9tpf7fyV9RZ0494f4J2ODwJNXvy/owh6PC YRuBJ0nie9yGgsPQnR4hY8DDB44aLzxOeFIRzlz5QOBlqirs18fUlhwEpF0UEhX1NV7mUo4ojuzh lUdrGd0HlQ0RJ4zU7bmmRnLVLdUZmiYTFEh4jKkiURRN+wH7Hwl6hEKoBKQOmSuCxI2UGlkT9XgP Edro66aGx+I4uZaqhm3WEUgVSZs0cohkS6rQfl6UbN++bafn5Sqoepbbb7uD0//qNKwdDU394wUf 5ox3vBktKsZannVdz1v+7hxu+Pa3mnXyouCuqdvQquCz/3oJZ/zNWVg3aKcoc0458xVc+aUg++Mr i+mVaK9pqZQ/eccp/Nu1XxjZ71f/56u85i2voaoC9M6XFlcYXGlwZcW7PvAO3vex9y2Bg87Nz/LS 15/E56+5nG5rDOkF26bv4r2fOG/kmAAuuvJi/vYTHyJRY0jRJtEdEp0GTWRboFVFllle/IbX8Mo3 vSmQLg1ZPy/4zVe+jteefR6yHjy9jxHLqK8rPFpbjMmZm5sj7+coocO1ApCSygNJgsraIQDjHDff dge33H47d01vx+L5xMUXc2NkZ63tm9/5Jm9++5lBhxnYOLmRiYn1CB/qX//07NM55/1vH0DYmz6a 45TX/h6XXXYR9Y02tf1u/v4f3rekjy74zCc56x1nURRFAw0GKIqCHdPTVKakKCuEkFhrKYsSrTXd 7ljUpQs1tdZayrLEGNPUldewfylkJKwK6+V5n6oyCClirbuOQSbRtDecka2j0UGHMDrB8TlkaD3v FrucO7cwF4n/7WLkF4xC/4bZ2Nds9Xbrrbfy9a9/HVjKQrwzO/fcc3nuc587QsLU6/V4whOe0Mjt 7C57+ctfzrXXXjuyn1tvvXW37mNXdvjhhy85XwjyRWNjY0tkh9bs/jXhacYk51zI4g6xygeY5D1o b4VxY1e1vbu7hnd4uyUSiX70uw0bNnDggQcyPj5Oq9Uiz3PyPA8lSZlesd2fxRjZgK524653WaO6 Cy3eqnJNljTPLVkroSxz/u/2O4Iz5g1aCFzktciyDO8tvd48/X4/trJcMGGorG6Ffr83wZPl6sfv 3bLIt/UMyVYOziCVIdOocEhnkK5AC0Mioa0FbS1ItaOlBS0tyLSgpSWtRNJWElyJdyXCO7QUI0ui RERbNkw4zfEsRmT9IpgQ4ufHl18jNNmF1fWk3pPE2j/vPc7akC0VA2kYWO5hH63Ha4ielAIZoMpa SsY6bbI0QcQ6Qesc1sVtZdiDqSqqIg+wmChI7b3DW0PlHT7q4iIFWiYkKo26p63gMERWZe89yrlY h6jQiSbRyUgWSSVRZ1dIKlshhMdaw/bt2+j3DUJJXITgGGOQClrdDC8Cs7NAopF0sgydJsz3ehjv 6E5MkHXHKIuChYUFkjSj1W7jrMM6i0wUSSJJlUWIgqoqsdagVItUt8lEgLgUeR/vHWPj43hn6ec9 8sqjs7FIStSKZCoCpROkkKROgXNUkWFQKh/ZewOwykuJSjKch6m7plg3Ns54t0N/fgGnDFZYnJNI oVE6xVmBcSBlhik9/f48TixQlrP08zm8FSilETIhrxT9vqUqBNZpHBrvZRPNVzJFKA2pRmWhRlri UdKzsTPP5PoUKVKMgdJqDF3+f/be7ce2LCvz+40557rsHXHOyXOyMuvSUFBgoN20DZTdtoQMz8hy NbxYAh54QPwF/AO8WvwP9WqQLGELW275zQ+WJRoXstwN3YYypaaorKyqzHOLiL33WvMy/DDmXHvt OHFuWVmZlZkxUpERZ1/WXntd5pzf+L7xjezukIpHCtbwvczVxTsDGeeEUZS7w8DZOLAZe+6eb3GS mXc7NEfoHEWV/W4i5Wyu05KY5x0Xl0949PQJ82Hm3t03ODs/57vvvIsDfvInv4xLmZIiznljVIsu hmulwJwna/OTMtM0cTgcGMcB77uaJU523qZL+t7T9yPBj5Qs5GK1Ls0ko5SytM6iXWGLS7kY+KXW w0ZL9ti1vwFx5FiqU6I5JpaSlx68zbnZe1+TBHFZaBowt/tinRB5nhlUk3WpCiUXY52p9bu1zvY6 Ul621aTM7R6sNTu2n9kM0cQti96cTx3Zb8fy27iNH+/47/7Hd6yEoprXoL4ugj1mdicm01SsnpI2 ntdx4hXqVE/UINcA6uuAlPV2XjVe9HlIwvmM10JIA04DqBC9kvwM7sDbDwb+6v/43/lXf/Lf80u/ +J/w9ls/yU/83D/l8z/zT3kyJXzogWd9S9qKOtRs4iJZXf0NINX08nn7+LKWbaa+O7KHtXpo9X6W 547bb3+0+eEDAkQKvjKbaLCaZkxO3nhRpxDnCSkzcfeUf/U//0+QZn7ii2/zX/znX0VV+eu//rfE /Y6+E958cJ+i8OTqwM//4i9x/+1/QpKOLGZe2hQFocq8s4Qj8fOS77Cej26am177GEgx6bLCsRba kh838vzSnmkqCgjOoTmhuaAk+uAYusDYB7rO4cTekRVSKcRcrGypdWHI1oLJrWqzc53vrQGFlUgd 98mdAFz3kqzIv3j708ODfuzS5dsF0auHVBnHKZurx9J1W33aa6/9XrvaHVuY1FuyTloq4FevORoz FbSYZFGTDWM5KalY66DgPc6bPLIUYwGlLqSN7XPLgHQ9iyoCLtiNWjD2z2mpTJczZleqnESUvuuY 5pmclbPzO/iQmLMBDkUZNwP92DOMvR0nccT9gXm/ZzzrOT8/57C/5DDtSLNjHAvbwTOEzuTUIVU2 LuC6DrQwzwdiisQ5QnEMfWDsN5wPHSE4YhhA4N7du5RSuPRPeXS1Yz9PaCkLwxdCqHITM0Gy7ESp oMgKJFpNbMnCMI5c7Ca+8/2nPHwy86W3Hb1Yi6BdnLi8ONCFgc1GEPXEWEgpMkVld7gg58c4d6Dv IQx2DEUyzmU654kBpqlQNFfms8rZVfEdEByOBGXCkRg7z/mZYzN4UsxWg3rIJN/heus7W8i1j3K2 dk1q8t2+C4gol2XmcIiMwVFy4t6dDSJwiJmSJuuN671lQIvJ6DdDj+o5+zly2E08fPQIreAyzpE0 RzpnK4hCnRRSNmGRCLkkpmki5QR1ogghVOFBwTm7h0LfMfoN9Uo3gFuoTsppAXPtp91fTjyqjfkU QjCwKwpdFwi+r4suX29RS5DY9V+We3G93TVovM5CrP9+2aS8sMReIB9bBgEItV3RwiS/eFvrjHXd Om1Zs97P2zH9Nm7jxz/0hbKOQprTIiGdNVuZUpVDilO6fnxhT9jngdMX/ft1nntZvBBIv8K2vv/9 7y/JzJQS77//PjF8i3DvLZMuLzTqx8PoLsfXXX/8eW/QV/reL90OTRnEcgwW8C5HqmW7gV0JpMOe cRz52a/8DI/ff5f3vv8uf/mX/5q33noLNLMZe3KciYeJbhzYDiOa13DR5OUt1HZgtZ+vnwQ5/Z4f 7P2CR11rXHvcpxupQ2n/E0SKrYjnCS8Z74QuCENna6txdITOarozkCLM2TFHZU7Rasy1sD0fcVTP DBViXXfNKVFKxnet5/jqAjkx13itr/uJjo8d6N7Ga0YFs88ufm++al+FXVHWpXpiLsrOJrajdLnV BbaMkVqJilr9QBAxgNI5KNZzFyfmfOuOC+Cc87JPJoesi2ROXWMRsebmRRCxy9Qk1cY2CY6+HwjD wH63I8XEMPRstyPdMBjzpND1I1kCM46x69j0gSEEdpqJ044cHX3YEoLHdV3NUntEPJ0PzCmyu5qY 4oTH0/me0W/oxOpStQhCsP2XAC6DOs7GLaP3eHFMU6LETFEhpmwgvlrntwSFd2ZdkXKVNrqOq33h YqdE3bK/TCBX3NuMSA+JAXWB4noKIw6Pc4WcJg5zYj9NTPsLthvl/OyMoffkWMGTS3hRxm7kbNMh dMSczCxMBS2KBGXKxoD2vbDZCGdbYewhxZmSPaiguVBKorAHl8lZmQ4H5nkmpmTMOErfd8xemNX6 NqfB24CvmbEP1XU7QS6IBESV/dUV4jLjpuNwODAd9pRijGKME/fu3WW/2xHjTDeMFC2k6vKdaz1r ypkpTuz3+4URbSAypYRzxfrYuoz5aXhKVuaYqszcmzuz8wswbsxru+8KIOJxziYcVRZQLN4qi7ow LN9RhPqaXLdzBM2NOW37WkXKJ0CyfYfnDxG2X+v73pI3VrfTevTKK850x6TUi8eSdc/f27iN2/hk R9d1FLUxWQs4NT8OL66Oa68eN8mNf1jA+6rjzPO2ez3pjq5KSFTJKfHlL3+ZX/3VX+Vzbzzg8aM9 MUZUlc1mZH+IN3/WxzD8vSJ2/5HETckOpzAdYJ4P7C4vubft+YWf+4+Qn/0pvv2tb/J33/xbSs5s NgPnd8847GG/vyKj9OOdVzq3L1MEvE4f29dndCv58rKXnGxKFxTsyARnMuWhc4xDx9h19IOjq0tm ATqgdNXEDKFzjpQKWT13Rm9ricr8phjYS1UFJiOeWC5Ht+xMO1/yGZqnb4HuZzhOBnqON3gphZTN qXmRJBcDD60nbixKwox2SjTpogyBvu9w4hE1Jzoz0KkG7BXots90zuOdmNOtGO/rpd3kxgrnYjIV awOkCzCQ6mwHmeCt1UoXxFjElBhCT18nZDeObEPAS4FUuHN2zuXVBfEwcdiZZKkf7tAPvblBO/Nd 984hs7K7SlzuJs63Z9x/cJdNN5pTtARySewPE6Vkk8Zmkx77bqCkTCmJHDMlJmYRSjbZeXYZ70MF NkKK0IWOrh95/PgJV/unHNhxcYAod6AXHl1NXF5dghfCOHC+ucPQb3Ght7qMEJBwxfT4MUMOjMM9 thvoe3MtHIaA5shu3pNLYugCfgwmUw+D7f+USJMSy4TgKD5ztg1szxzDsKdEmKPS+TN6N1IGDwUi Ezkl5kNhd3HBbr8jloxiLYl8CPTO0yN0DnLpUTJDEIJsUC2UnK01lhRSylw+vaAQ8e4O83RgP11W KW/mcLji/HyDD5ByRNzGzl1KpJyJsdS+vHZeUs6UnE+ApMn+Cx6HX0vrREklkrLWfs5mVtLAZbuO c06ognc93gvgyLnVsZkseUoz8yEzd2mpuXXOkXMhRSWXtLD4Ta5cil3f1gqoLGZzcFwwPg9UHp2X 23MrBpi1xLnOpM+b6+pza/XHujf29cRaA8Ft/27B7m3cxic77p5vLTkXE0UzXhNerAzDOcfFfs/L bF5eJGV+3us+Klb3ZSPU3bt3yZLZbrdM08QXvvAF7n7+S7z55ps8evyEYdx+LEzu8QOfVfSsmdXr rz3GRzM2Hw6RNM3MhwPJG+i9f77hP/3nv4gj8+jRI9J8IKeeIXimJJATSuby6imfez0CGvjhz8Hr vH8hR9tvPf1n++PYGulo/igUtqNnG2Az9AxjV+tqMSmzZkLobP0E4E0xN2hHy3H76mDepvE8mIxZ ZMTHzCGlI+O+KuBevuJnaI6+Bbqf0XhGyiyYbBVbJMdErcGomZ92dxTIRavzqqv9Yc2NNWXoEJwP kJWcZgOsvvbMLcX88lTJYjJZRShaO/kaOqhZ02LSSu8Q9SavhiMbJVByIZUJRyF0juBtG/M00fuO rvPM2QwRQhcgJ0QdZ+OGu5szLqNjOmRimjjjnCKZMATc0KPiKFnRJHRhSz84vB9xbmA+RK7mPdM8 UDAGM8YJ1cI4jgxjT5oOTCmhRXGu1m4UA+QpRnxvsmx1npgy05RwM8R5x/vvPWZKmdydMbGl+NFk 2MWhmsAFYg7s9yBk8mBg38dMygnxwp3zc7bbLcKBEvc4hU2/AdeR0gVZLasoeQZ1BPFkH8FFcwAU q5V2Xgg+o2XHYbend2d4RnLMoIXge3rvySmyP+y4ejpz8dSArog1KM/OE2dhJtD7jk3n6UJiCI7L /QFHoq/GZKUU5ulAStmamwuklOv5ThSSOR7HiZgmtpsNWgpXu0sET8yRy6s9c0qErgc8JRecWGsc Myc7BX+llFrvBIjVpCsYwK37VKrzsaJI7SmteARHF0bAJNJWC9uMTay+RlIm54mu6+h6j2alZMjZ 2gSJ6DLnHBNP9lhpbOpqr1+q0FizFOtFjZrDeSt20GUCfK7Wqu6XHhlm1eWx52XRb4HubdzGJyN0 uf1P6/eQwuPHjym5qldSxGmi89UkL3h8v3nhtj8I6PgwweLztvWqnzEMA5dPCn3fE/dmXvj06VPG qyu6YfvC7XwUzO4rH6sfgQ1PI0aKeJtB5FQZLQLj0DGELb1k7oyed/7h73j6fuJXfvGf8c/+41/g b/7mb3jvve9z9fQJ9+6eM469tbqMiUePHvHTL9wBtwDJjxLcPj+u68evf0hVI9ZSJVcKZ0PPtoNx 7Onr13EUpjwR44RnALHkeBBPcOYmgrfjP2dLOFsBkom7hx4UI3jmi0Su5+Vm8dbLWelPS9wC3U9Q aCtOULEbvV3itZ9maUyonNbM3RQnIFcVqa17kiqSCuKE4sSMdLzDu0zJheLF+uAWa+AmYuCtZUjN HVbIqZAryBRx5tRMWZxjvYD3tW9Z1V8Y2IUcE1Q2LVXmyeOsBrh+ZhGra00lU7TQVQl0zrE69s3c cXeRLGQF9SaTphSKCG+88RZdmnh4dcGchd2UmcvMtng2YsCxI+D7M774pgH1GBMlZyQE5uiYD4lx 6JFhQz/0OGfsqZbZXHaRKqM1XVEBkjpKVHpMdizimGdhmoWr/cTVbo9yhvQDRayPnHMeJ4KEAZGe 4DqCNxaxqOcwK0UTMc0UjbiUOeuUgYDLgoqZZlwelKKOJPeRIBRnLaX2kzLNuTYWLzifCDhEM6ko 00G43CsxCm+e3+HO+X0u9gcurvZ0g8MFZTdNXDzdcXUVmfYHNCVrKVUiSgSs92HuAonAPA1MHp6i HKaZO9uRO+NIiTNxLigFFzwpZ64OEfxA358zx0sAijr2u5nhrCMfDjy83FGC9dzb7Q/kXOhKxvuO mCO5tecpxdyDfUvqKFkzxGTjviiqAe96cNR6Y2N9lYCo4HFICARMmu9cA9DWo7AZRwHGsvvKxKKU khAJKAVxaTGzMLbU6uJLUXJq93hEKSbl5xRIXmd52+PNCVpV6jS4Gj9kGUiot9tSMrDeZlNNtIl5 YXGX3pjttyxJqNu4jdv45ITzXfurmgitqSnrsrs5OyNNB+g9f/1v/h8unjzi13/tv+LeG/cpoefi as88z3Rdh3OOeZ5RtdZu6/FpHdelpc9LjL1M6tzUOc/9fjVJ2Qz+mmomhIAPgd3+CkVxpbMerQ66 zkwgxcPjxz+gE2EcR+bdgXEcOX/wAO89/XbLo8dP8b6j6zpCCAvI02yKH+f8tf25JjG+QfP7ItOk 08QisCp5qY8en6ufd6wNhaOnwqt95vU15PrwL74pN0TtOkTfw/k48LfvfJu//etvcT4EvvvOd+g1 8XM/97P8zE//FA/f/z4P3/8B5xs7hrvdJdt7b/LW229bIvveOVOBi6uJ4BzB2Tqq66y//KvOO6+i GLi+XH4h/hVHJmMNh23+9CuQLwIlWu9onM37aKHrPNttx9k48KA3AGanqZUiFcbeDKlySiBW4lfP tDG32JHvvb0rA0khZet4VUrrDexQZ/tXbkC6H7kC4WOMW6D7iYvWjtrAYWuFqUtKzT2z8IWbL+pl wgEDypVRVVWcOuvjJQ4vHieF4O2mcThSFgN9WP8ugKyZKQopuyp1dkjGJMnU91OzyIaQ8c4RJFQQ q1DMkAqxaVcEsgeKW1KGilKyDQJaAXZKGS2FEBzOw5Onj8k5cme8B84bK+g9qX5Ork7VIQxMcWZ/ dWDcOLLLqJ8JXY9zgb7rOdtsyao8fPKIR5dXiPNkAhDQ0jEOgWHwaImoRFwXGAJM+5mcIlpqv2KE WMwRL2UhZpt8U/Gk7CkI0gez/JAeodCtFgUqYoO7OrwKTsLCiOcEhwgxF4gTZY6c9RvOu4Gc4cl+ 5uH+wCEqm3FDFzxQzNmvlLo9ofMmZe58RzpkrnYzUYWsgRg3lAku9zP7w8TVIeLCJeCYp4lpjuTU JL5ybFOlxoI6QEszq4LdweqBJ++JeUJn62tojsuOXCIXVzu8d5zd2XJ+fp/LqwMxJRKJ+b1HpKs9 A479dGD2EHygqCVZ4i7hQ3XTzHZdiYgtalYLAOtN2xyITWmwLFKk1PuraYTq82J8qHOOXOYT2e5a xuuWya/K/rPiXHMzj3WSlGXhoMoCUu2cYyysPitTuwnownGBt5YrsdzpNe3eElwr19AjyD0axR2X SHoEydK209ZRR0b6s5Qlvo3b+DTE8wylQueRYiVIToQ37p6T5z3f/cdv8+677/ITX/k58/OordYa iHTOMU0Tfd8v2/q4FtWtLdpa5TLPMzpH6zu6eu0CVJscB07G8usxjiMtSdnaYokIXqyDxPVhcC2M e914HuB89vkVfXfyutcfk192zkqbs256r8LhUIj7mbOzDYfdJU9/8JQ7G0uA/P03/44YI5//3JuE zz0gpomri0vOzu+yGQcePXrEgy/91DFh2+bVH6fpRd2SCF4z+OtEg/Uarr1zRau6EPpwbPojz0lA iHdmdHnt8aJtmOHP1QAAIABJREFUi3ZNpUJ1Yza1ZVIjd9p9/fxj9uNyIH/0cQt0P0HRbnbvnRnf tJo7aUtad7LgfZ3QCnKLqrW+bq2Hgm0vuB4UfDH5sADqqjuuC6jrQEpdwGcb6dRTtECO+FzIIRCC w7tg9ZRq0uWWddT6+Vr3ockkS275KEXEWMI5TogTa22kEFNiSontdsP59i5XOC4vD/RuQzcMFFWc QOcCRZU5zszZao56HKkIvghBnGUkUwFvznWinqdPL3j45MDl3gyPsvrK1M14dyAETILbB87ORvrg iUWI2WC+DwMigeYJJARQD2J1yikXhEBw1iZIWUtFV1JUEYpGZgVKsm05reBxYk6zSWy18Hhf8N1I KRBFiKrs54mkCkRKTDXzB70PdF2ASRmSY3u+5Wrec3lIZDziOvCOXcpcPX5KzskA+5TM7blkGzdX bWYWZ2IaRjS7exVHzAU3TcaTdh05TpQ9bIcOF5yN5lKzkgq7qx1znvHiiKVQRNGSreet75aabe9s gZFLNuwqinfVhCkXvHe1jlpq3ber5+TUbL8ZRDlp8nmbyMxwyq5JS5hAKVaXvTZTW84d1pYj52N9 egOi1i/Y3JitVQ/H2lqpEuiS0WJJqDWIXrOv63u4PearqdZLFcRyZImvg/Sbxoh2Xp37gCu227iN 2/hERAiBEmcbz7Tw4P4bxP0V333nH9ntJ959/xFf+vJXePvtt1FVpmlCVa1Eo+tO2qHBi5PtL/r7 g8bR8NK2VwrEaFLslGc224DDkvruBgfqm8owmiJIVRnHnpwtyd6A7tpg8+bkZPt+H+w7Pss6Cg0u nWxPCkc57XoSKKv3vrqh2Cmb+7IX20eG4Li7HYm7jsePH3M+OOJ84Fv/39/xCz//s6CZcejog2M+ QInRlGkxLiVFtoaonTfauXyBEeNHHU1kidSzUHPIAubbIWbYiVqHheCFoYPBGRMrauV8zdG81PPj sW4OGVNuNricsJKnVCp7i5LVfrQYwM1abmRwP8txC3Q/YeFqfWCTDEIdzsSkocaCvj7YtUX1ehA8 skPNRAe13mlaMq4oY+1Bmpwje3MeLmWujKyxwbmYeZQZMymqHieeLgDOW79WquS5LqK1fqeiYvXB pdTB1SQgKUVySVbTEMx5LlfGbrffMx8mRBybcYMPVqNZMDk2IgsQ6XyVnw49Wl2UfQFfBC/mpZxj Zr/bcXkxkXOH6warlS2OXECzOfceYkaK4g5wtU/0wVrYBD/gXWfAtoJahxAqMwhHWYpzDql1uBmT yzbp1XrCVeehZFQgJ4hpJqVILJlUQVxSx8OnM/Nsg6zrRlQ8SR15NsBN6fC2Z8w45gxzzLBLbKaZ nAOxnFFwqFYwRj0PCFOamaIxtLmeJ78ybFp+LyDK4XxXvwvkUqxVlCqSC9lZq59AIOZM39tnzocD SOHJ7inzPCPiEClszs+5uzlD5sJUMiUnfN/T9SOaqECy7kMuUM2opLLNBjLr1eZczazKMyDSO4+r i4YG4nO2Vk4pp2UhJatryxZWtXetlsVx2YCsXzkwi72/Zq5ZSZis9c8x+XOT2dN1KfMpaG2AvUmz Xl47u2zfNv7MGLH+W9aU723cxm18qqKNYUGAkhi7nvOzDRdP3sd7z+XlJYfDARGh7/tlrnLOMQxD LSF6dpvr39cfv+m5DxrHZOsR0DnnjHWupT9Oi6nXuHkoW9Qx15KABqJt7F4bHLbfpRS6qgq6iclt YOhl8SIm97mJA1knGG4Gua8TzwO5slJFVbHTogISrOwnODMmTXHiu+8/5OrJQ0YnvPW5+9y5cwdN iZijgd7RzEBLnMlOKLGWALmjiaOIlei9qK3VRxFl+b7HK2d9bKwkqAFhqWyuAfW65DWAK1XpVt8l OJwWsljH4LLaXgbmWmWVizKlXImp2gmlriFKZXNbj2xWnwArc6zPUNwC3U9Q6EIHygIIm1HN0rO6 vnY9QMMza9abt9/klutG5VXmOykL6CylGGCrxfEmHy5YZWWVE6s9l8Ujak3US1FyVGZSZYsLwWll yer3qVLNDPgKKKzPp92sKVXgbHpTcjQZqhbFEaAUdvMe7z1nm/s4cQYUipJTJvl8/F4pI+LxPtAN I32/sR7ARVEKkUKME1exUCQYu5trbWdRcu1B6rJHJOAIFYQZAxr6QB+CgSSl9j+WylZab2KlVOls 05k4BI+XfMoMqtYJ2jM6T+edGWHNMzknDjFSiqA4imYKwuU+s9tFshbETTjvydmT6XAiuFo7mlHy 0ipKSKUwX7U2T55c7BxL9CSSuV2XcGxx4xTJrWfuaY1Pk471fY/zdhyK2oSVUSTlSt5aomVOsTKh NXNeO6aLd7iaJPHBlAIOY0FdcHT9wDwXc8PGVUYzVzWCZy6RFCPBe7qus+25Y8a7wHJNnQJdy/hb aQCr73b8uora97rOZIvQ3KRTiuSUV6DfpMF6/HRatU5LOmm5mbG9Xvt1kwvy88KJq3cqxlJzXBCu 7/vnba2xJCchztzOOW7vNm7jNj7ZYcoXu69TiqQ0E0Lg7bffZnt2h+2bXyCq4+LigmEY8N7M+6xt 22osuZZ4f36N5IeLXq670nvvrb62t4RrypOV7GhNY64A6ZI0dKdu8gujC6Rkj3sPznlUvUm5K0Dr er8CxlVU3Bi/V2B0n18fW/9QgCMIR8oyv6xe0I7Gax+/FwPcm8OtpqLOCw8f7rh//z6//Mu/zP/6 Z/8D33vnP/Bf/sov8Xf//t/xuc99js9/4S3OxpEYE10IDGdn7BNcXV6Qc6xAlwUkOhGKViXWxxwm pdajCdc16XL7W2rxrkdxCppAg708UdlfjvXGXmqCZPVZuUqU5wQpK7Eoh1jqetlerWqtPsFRSrsm bjLJqlv+DE3THyvQvV0QfbC4rui3sWXFxHAEGXCUAF9nqk4WrXI8H+u6lpTMgMnXVbnVr2R67+i9 GTCZpYXVVhY1OaaB8Lb4dTQRZ1aQoqSiZvIjGekM6ODE2hVprhmsghStbJerzK31bY1pqkDQE0uh D4EQPJDpu4EGiktXFrZYSiHFSFElpkRMmRAcKWXwmfM7I5ozOR5wBbJTImbKRQhIFgPBqpQcKWrO w7kOYFLrO7uuZxgHxmGgcwZsVbPJo1RQcq0VNiZ7ycQVqz92TsAFA4YcmTjvPV3f0znoRaoJQcbP Hd5pZQuNwStFmItQstRev6WaVwlZCiF4tJmISbEBuwpoigQER6lyr5wURO0sitX12njq6URxWcmm E0brgO1W15F3juC99V6sSYtCrZlV229xBvgudnv60LHdjChC8IFuu2GeI/fO75E0k8ns93tyVlJ1 5x43I67zte1PRLA+kN6Z3YPUfRGRWrd7BLQ2TzSQe8zIH+8uhytWMnB8zs6HODufjbU9Mr55Aexa IrlYwsFVF0XL9BbzkssmQbL2A64mQKyNF6sF0Rp8t7i+qLm+oDRJ9FpGLnWhZpSCyaKPTMTCFGOL ipNxR9efcdqqqC3gbuM2buOTH4KabLmiFu8ccZ7RkvgnX/gCdx98joP0XB7iIlf23jPP1ge+rSue HY9endH9YdeHbTxbJ/CdgxCsTrJMVqZk0uxn378uM2n71YBuUltfOBcIwcCu7a5Dszv53NNtvhgo 3hQ3gswKrF58fNuXuhnkfhjS6ReF945pPuCGM/6zX/llLt/7Lv/b//I+FxcXOFH+/lvfZJ52fOmL n+f+3XuMm57dPHHYF8a+ryZiCafDonxyApo/fpC7jmfOT523iy1p8eJwISAlUzQzTbZuMCWmJQeW NRXg6x/zlGhlTQUTpcUMMVup25S11t8efTYWDFsJMTg9+6KfKXy7xC2j+ykKU5Ica+2uSxVfVN93 U6ha0/QsQqp1jqqK5kxSQTqhF0cQgWIgN1RTLFWrMxAVioRac2sVCK6ILejxIGKut1j9LWK9ZktR pIg52RXrq9pqUSy7HHFe8GG0fryhMymS82SxRu591+GccDhMqEI/DKSU2O33HOYZFzrUBRJCSYkp ZXyVe2RVEsIsQhYoTqtNu4LOaD5QNNZ6WAPxLgScE3wQgheCmBOfVHNsVzOuqqXKu42ZNrBbGfta kwoG6rUCwXY+UKv5RKwq1YllqZ2YuVRRRWqdZy5CLlYM4ivTjBZUMtl2pcqAck306SJ3UUCKmUVR SpXEKyrH9jRmUgKu2EBdBLLYAC4i1obHe7pQ+wX7OviWsjC7KWe8FLx4FGUfI3OcEQfD4AlDh6d9 R8ejy6fEFG07XnC+I3hPCJ6udOz2O9KcCM6k8yF05Fysv3MFu04cuSTmecaJMzAqJo/PpZCra/Hx Rsg1a+qX81BKTUiomYuZmfhpfbLq9ZRUfY26CmSrMkHbVFSBaWnXwA9Zi3QNBOtKL2dJjVzVEsdF 5bJAg2rb+aphiShTZ9y2F7qN2/jxj5vv75YuzznTdx6nhX6z4XEdM7fbLd4LD997SLc55+zsjK7r rFREZCl1ehVQ+8xnf8is7lpV1CTG1tatJmK1mgZdG2rXSb01YF3/3X4v7d+rdLfvA6oBTYXT5OB6 +7ySCOeFrGpFVc8eX3ghnKkJ1VeJFzG5zz1VVfy02+3puo79fk8vgV//9V/n8Q++y7/7N/83d++c cfHkKe8AOc2En4Jx89ZyfO/du7e4ZS/rCXn9JMGPOlrSet1aibqfphh0uFarW5Mjh10mJkfoe5Cy AF2nIFqWBPN0iOAyTgI4T1ZZmU05cu0ztOzD6rpU5NoVsEqIfAan5lug+wkKoU1Cunpk4XIWkNvY WFhlRdeSHI5OeVrTT2smGI7Z0CUzuLxBaY25rN+owznFFyWgqBNaujGVXC2COBbHK6iYWAPxqPgK Hqvrc605KFqs7lMFTZGYUmX+WvbKkUshiLIZB6u39YJ3QgmBlBNzKqjGxQgol0wsif1+R5GCamJS pR82OJT9tGfsB0LoKCUzl2KOw0XRAjErc0xM08Q8T2Q1iZKomjzF1/6zTulE8USChGoYJfVr2jGy +ltFKFUSbsdW6k/MlZHO2bhwEZPcCgTM0KnVRKWUrYdrA6SqOKyNkhMDmL5O9G4xpK8MMAaMm/mT TaCW1GhXlxO7QkQUL63ew2wSPFJb9QSiNiCnBO+NyQ2BUFtPqEi9PqiyYrswm2hXncNpB2Jsr5Z2 nSghWNupw27Hk90V/WZg8CYVV/E1e+rofGfyHamJE7XM8nbckFJinidKmklTZJ4nM69yoC6BKinn 2iroGLkUHIGgK4MwdNW6Ij2zoDlZfNR67NYv17ZfHdPLMZGxSNwqO77cMPV3e39j7e3fN8/8Jn9+ tgVRGwxKPec3AdJXW2yeZpDtfY2x+DFbjdzGbdzGc+JYw3q6NK5mfM4hRRn6EXGBaU4UES4uD9y5 cwc/bFFVnj59CljvWVVd5MwtfnTgtu3/Tb+pDK4lwdv4NM9K0ZnteQ/lCKDaqK9abC4siscvSU5j z9TaxWBsbhvPG/sbgiMEa524vzzupa6O8/rRBXTe8FuWtVGj+2QBkct3l2rW9DqFlx8A5N703PVP XF5enwghcL7Z8MYd+MF3fsCbd7f8xn/zL+n7nm/8xf/JNEWcCI8fP+b/PewowE/+1E9zVjouplTX Q0cWfEnM+6NbdpFXqzm9/lWWt9Tjt5h33XC8G0N78htL/Nvfp1mLdtxS7WaBE0QCxRlhE0vGFUff anu14EWOjG59fI5mYCXeOjUoQqYm1rGaXGvroDhbidX1W91NPR4bXSXNldP1zWchboHuJygsT3Ns G9Iciy1746rr7FGufL02xtzYdJEtwqlT3MlnrTOYHF8gCk49QR2uBEQHNAtOlKHvsB7WgpRCPkxV 6loQXWWd6o+K1R045xG1fqZaG9SjxWTEaHX4tclEtPYu9daWyGvBa8J5j++7ylrClHZc7id6FTrv yBo57PdEnfAeho1nKlDw4AdEEpSDsW1uoOCQWPDVdCrnzJwz037iMCVittrNTjxd7xk6z9gFNt3A xjtGX+gdOLGsXhGqqZPJf72G2mO3UIqYyZdWl10taC7kNFtdZ2W7g1NQzyIWz5kY97WWJdYJ2lVW VhApeA/V5pksJrf11UFYBJyaPFm01YnIakgs9XU1aQI4SY0fREVICuqtNVLGWkypKqGzmubOO0Kw XrNapJK5xa5dNXCL2CAu9DiR2l/ZkiDF9LXsdzvQTN/3+MMeV8CsxDxzstpc7yAXUwpok/+kZH0T vaIpEUpGS6bkiM+zJTG8h2RsbCr5mN1f3SMqstT8Ggts12vWmoyo98di3EZLMtXJUI391VITOPWA rhNL9S49+exT9UVj9o/3qa4WLevPbeUK6+dOnscAPHqUGa63cT2eYTgwJ+pSv2N7myx9dm/jNm7j xznUqTnGVzmu9x4p1n4npol7d+4CpiyyXvQD3fYuc+nqKsSR5gMAfWhqGQN8/XZc+nk3M72WhDd1 TkBr6dG6xGrd9zYl8/JoLs6tD21Tz6Q0GyCsQEUq4LP+38pmM1TgKJiLvQFI7x1OOlKROs8WOnEE by+dSiJOe4ZuYJ5ngt9a/3PXIT6wTwfGOw+Y93YUbMw/HteU7GcYHaWYK3POiaJNOh1wHvrBHPfN Dbowxxko9P1I33tSUgzMOpae5fXfoPjOEZMBwj7YmiDGqmbru+o5ga2JuAG4lucztk2dczhEk6UH mA6JfgiMI0xzXTc66Gvu2xX73nOGnCNd53k6TWQC4c5dnkwHtuf3+K9/87/l3Xe/x7v/+A88ePCA t956k3/8x3/gnXe/i+8HxrufY04wHya2/YCaEM2chgV8B7s5MbhqZHrtezVw51dfyHGcN1WhiOKC WIukemi1UbOLKlEWACzu+LhgbQPXqisRfw1wK/1o52TK9m/oIDR/jULJ9Xxiifrroa625yq1C4VW qTJWG2z7XwG6tv4OLOuX3tvHlqJQTBHpUZw3GXiRNl+v7kvnfiyZ8x82boHuJyqev4A84sebHZel vegV42Qbclzg2l6YeVGMhaIRL4r3Qug6cL7WJbQeo7UIEWcGSM6ZlDV4nJg0NmdbLJthlLGvUjlg 61da8EJ1lTYAh9Y+n1XWoeKJ2ZjGOWUOszGvUQt98OCrrNb1DGOPD46QATfipbe+vxlytMmv5IIW 6xWnRclFiTETZ5u8u9AREIYxsB03DJ1nEGtkHnyVRKnVBWsFqmKOXJW5tsHLWLcGTkodsNbn83h+ nTQ5eiElmOJMjHNt52Tz35KYAMT5epxkOY/FcGOVKrfBugEgu8JazaY9dv2aK6fXg3MGuHMi5WIy ci90IRB8IPSeri4EciyYBVX7/AqSqmS31ZlbjrKZODUAmxEtdH3HOAx1gREoRetkXwi1niqXY71s rgytD0rKEcFep8HjstREgy32SilVio45dDcgWlUNy3mqPXFz/SypmaIFlK4P2erx5VheA6CntVzX j7dee2z99+vNRicqjx+SeV0bYF2v+7+VLd/GbXwSotB1thif55n5sENEGMeRu/feZH9l/87J1FFZ hayeLAFVZTsMpr66NtaCjS1935+MfacLaqnz9bO1rG0Ns91uF/A7TRMiYgqh4Kq3RntDM2TS5d+v 8ltl4X3r4/ZjTswNIDaDwPpZTZH0HIC4jhhtv7wXvO8Wxq5oIsfCdhxsTREjIsIwWJ2zfd95kVq3 kq1mPFVnaVopzY9Ki7p85xXYs/NhHhIxA9nYRV/3xgtsB1DX1fPjOaTMxeP3kTjz3jvf5vv/8B1+ 4ss/g+TIMBi4Or97h3EcuTrsSe4S32/rPlSzpzZ1ChRvrO6CS9tuPud7tDTucpj0Grf+SteLHDdQ P8it1kmyAN7TvdDVKyyqQ3f1rVlmfeEZpl2vf6Nr2y5SFvK5iLmHnzxfaAs6Gsj1ztotOl+WjiVr eX9LcHza4hbofopiXZsLz4IUJ1JlwzcBmGe31V53ss0qaY5kci6QE0HUXJhzAefwfWeMbSOztNZy NilrrdlsYKHkAhXYlJIqMLbRzQu4kheQ3MwhWquWEgJzFjhEY6tLS35ZtjiTmbXg6Qj9gPMOCcEm 7VzIyVGygeZcYJ4Tzh33tzglpsxumrk6HJjmhDpHcI6+D4x9z9B3xlyKEoLHO48HpLrsUhl086Wq NbSFY9uYgjnh6lEEY4N7Zei1tZWyvsWalYT1m5tjxNoWt3ZFq4G/an6alF0qaG8LDyc1cQALM/fM ZXHtAa1pYKnHx4kjloQmK1R1ztO5QHCBznv6rqMPBki1uiiaHKmAFtMlOI9zVZcg1XQsmVNx6awN lBNhd7VnzqnW8AoymcOnUpcj4cimppSOjEIpxJwpKdGJZ+h7xDumnIjpKB1uUbQg5WjatExGKxBn hmQZzSvgzlHGdp1dZbWN65NhYzSuu4S219+0nQ8ajWEBk3pbJvuDbXftUv2873sbt3EbP55hNYNW V9t1HZsmNS7KfJjous7mCU5LojxC1MLFxQW+C/R9v7guw9HM72XjgD3fxstaLiO2KJeaPC/LfGXz YymQs6/zu9S56HTd87za4NcNcQq5GTyedqRYFC4rUHD943KO1ek5GBtdj02qyfzDIdl6B5sDui5U dd3phl73e3xYpSN6Te1jfxbr3JAzzrc2eTYXqDhc58yKoyILJ4HLi8c8ffqEN7Zb3nvvPf7sz/6M f/HL/5yf/+mf4OnjHwBw7949xnFkihE/zYxn947XkB6XIaYoNAfjIjdXmV8TZB3/3VRSL3jvTXGT Udrznj99/AXbrOl8PX3wJJ65e1YPmBKzKRnk5O3L9y4tqW0GouoEFxw+BJwvy/W2/nHP7sanIm6B 7ics6vC6AEh91UFtYQaPr38VsLsMdHpkH20/tOYZTdKhCpKtl2kQEDU3Y3OltYGqba+5F0Jd3FdZ RSkJ0VLZSygqeNG6IG91jtbv1MY/AddZ4+x6LEo2+aixy4Gcqjw4OxKOkgSdCkWFGI3lcy4z9ANj zoiL9J0QOmcmWDlzmGauDnv2c0RFcNKZaUBRggqdCL2IDfCVxRWxAXmRbdURRGqGLcVIzJGUTAaN k9WxbcxsPXErpl6AVOW3MVrLnFIEXIDqsNs29DIzkBUpZ+diYexXce0xLbr0h2vysjgbgA3eI86h xRZDwZmcHm0JklJdqysjT3VnrgoAj9VYU9vtSM1c5zxz2O+4uroiqcmLqUmDEALinLHowkkSpUnf RIRYQWnnXWVrHVprgUsD/dfUEAuAU312ElozFXZQT0Be21ZZvX79+PXHXhZt0n+mtc9rxCkItdYZ pk7/4MD0GS8A2nfkmcdv4zZu48crWgvCEAywigjzYTKjvgpsQ21n1vc9fd+z3W6JJRP6btVL9PRe X7sV32TgtP7sm0wzwWS4S9/bui85Z+Z5ppRkNcAvALo/bFxPQB5ZL0E10yTB9pk883eTgtoxgDaL 2mOeq6srhqFjHMfq6K/LMWl9iddx+v2eBV8ip3//sFGKmhS8ovl2DmK0UrK+C4jUFkq1RCclM8Ek QS6JcWvX1f3793n7jTfYfPWr/Nv/6xvknLl//z67y0cV5I8MmxGdE13XmRQ7F8iF0gh3pXXXfLU5 s67B2jKnsfB2FlaM+AvieSD3pn14netP5bg/To/7uv4tekPlubyoJvl0QVeq4SlibqHiBQkBCWKE jzx7nZSTLXx64hbofoJivbhe8Exl1qiD31omdPpeW9C2Ceg6CwPHyWJh/NqgnmudbO11K86d5KNK dZKt3eiIc6IUGygdtV/pGlBVmVMDvGbsa+xQcGL1tg68F1rNojhHzIk8WQ2KiMf5DpVAUbNgd85R pFCcJxdIpQLhlIlzIeW99YSlNtKurK8P1vpG54z3Dmv/I+SSmOaJaUrMMZKaSYWzGp/Oe/rK5HbO fGydgivGMqaqrVGEnMyVWoGYMofZTAlSyaSCgfR2fNrEX38awHX1HJdsNT+tlilXRled1ZWYbb2c LDRaSD2WK7r95DmwfVnA8jrRobW3qyE7csmVjcdkyl1t5dN6sjoxIJ7MKCunhOaC5oTXytY7TE4j QueO5733gdAJ5nisS+0RHCfc9pNToiSlpMQ4jst11dhcaIkZJZXCFONidrbUrK8mj3VrDKEtwo73 y9JuwrX+i4quWlC01yz32OpebMB7vf8vYnKv/338DOXaOugG9rctiI5jgkg1okLQTGVKng9Gn/vc MtEfx5Bl+zXR89Jt3MZt3MbHFsHVticipJR4st8jImyGkXv37pHmuPTEjTGS58jlk6c8efKEQ5zB CTHXEqE6PnddxzAMi3JrPb5drwXshs2yxrj+cz2ul38s4816rL4Gdl8GOF44KknhGfZWtNYJ1zGO Z2tf69AMNPdlqvrMEqImZTbfijjtb96vG1QxN4Go5wHbDwvoF00LS69qxyNnS7AXlMPBWjwG5/De 7JBQ8+nIUTHTo8A4jpwNHZdPH3H37l1+8zd/k2/97d9w//59Hj88oxsCTZbd9z1d1zHPM360dQPa fGUcntqKR+yz1sBvOWIrarNNkW41xWt9bp2keVm8LIHwQZIsbT/MA6T+ppaX1b9VqkLx+uvqxzyr Wj+SX4sxrBhZUg8cTZEfy83X2KcxboHuJzXqOrY2c6mM1IvfIvWCvymL+rofbRs8ZoAENRCD1ZAe 7dYrE+uOE08pZcnWqipJFS0JyKBixkU0EKwUZ2xfLEIstv+dDxB6ingQhzhvrr4qpAQxReYUiSXX GttCLrXZuFqNiXeytKGZkxJLIvjC1NrXFKnvsx6oLXKVMvUhMPS9OT2XQnC1vqeBqjYAFxu8cjYJ 7TTPTJPVtZpzXkC8OzpTe4fT5sBbJ0cxdtSp1Qubg/Bc5bkGEIXjwCjPyaLXB45nsmU8G5iu4K3V q54C4Sq4yeZeJap4LNPvaiPBlI+so2aTzaRaxyW2Y7XMSRAH3gneeeuR54XghKH39EFAE1qMDe+7 jukwLfvaGg3pAAAgAElEQVTQruPGmKeSkcritkTKesFQ1BQIURMSG/izY+EroGXFMFyPo8/jEcSW CnCf8dI8WZTpyTFsfRjbebkFgbdxGx9vfP3rX+f3f//3+dM//VN+53d+5+PenY8s2vizZixVtXYV mOl8YJomQgjM88w0TVxdXbHf79lNBzZnW0IIbDabRUmzTp5fXFycJBuBRW0jIoR+PFXGXAOpLSkf Y1y2YexfxzB01Wn49D0fjNVtfFk7MMfPauoqNC/71OYd1wyKluO52oQz5+Vm4H9d0eO9cHZ2RimJ w+FACIGu6wjBk5Kx1tZl4WZG8aZ4VabzlULsvFkNdzseQko16eyEw97aB419T+gGvK/qLDwZY3en KYJm7t8Zee+7V1wedrz11ls8/N49Hjx4wPffPQOnxDgtyVklG9t9/gAtGafZ5n09mqc6qZrClzhI H2tYrwFdbBuvdChuBLnPqrGeZXhftNHTfVzvl15//Dm/PWam5RbUe/qBPlTD2iolVAfZga/LklJA OCa6b1JnfVriFuh+IqNNCs1OXF5yV1m0QTZ/CPbipd4/C9AVcLSJs8p8xC+1CEUxJ+aczfxHj8xZ ppoNkSlizsPem5OzOEG9xxUb1NT3iBOyOLL42ke2WxjMWIxRTsnqL+fs6/FRk2/Qbn5jP5sEtzHM 2VfTKIVCR9PKqDdnaOuT29H3HV0Xqpuwopop2bji4hR1QhJ7ruRiA3+2SWKaJ6aD1ZqqCBJ6fNfZ 316W/rXLAoTK+Nb2QTklcjLjj6K1DYGd4YUFVmSZ+J5h9+1iWABjG9ica67dQipKKpWpbNuoiUFt hlqLjMteJ2JGYyE4+s7qahWg5KU5upZqPuWxxIAY2A3e0/mAr/aIqiYsEi2UZPb7KUXmbJK5pR5s qZG17xhjPAGWC+Cs0mZRJRdrNVWobaFULON7LYO//p1LqWZfKyC7Arxr1uJU1lzPxwp0t7q4V1mU tNespYC3cRu38epx//59vvGNb/D5z3+eX/u1X+Ov/uqvlue+/OUv87u/+7v84Ac/4A/+4A8+xr38 6EPEEoOaLfk2dMH6zF9esdvtAPMcuHfnDgDjpufeG3f40hc/zxRnLvY7Qn9kcEspzPPM4XBgnmfe fPPNZVy8idG93B0AV2s/1wC1jZPzM0DcuaoC8p6i6Rlw/GHKl6X2jC+arMTGtX29iXFd/V2xV842 Vyxuthznh5wLw9ARo80Hbf2xHudfJJtlNb/fvO+v8g2vC1UbYKqKHz22tIN1jW5EcDgPiq1DIhHR YKVB3syF57kQglRGGx48eMC3/v276H7m7t27bDYbYyuT4lyo3/24b5orCCu6kJKWXJfaglJo5pjr OBIx19c9uvwWbcfuVebUtsX1tdXW3mvAew38vvAcfDhg0qlbp+BPngu9sy4ialJ7xRL+sdha3YMl Cpb1SVvzfPoS8J9Cf63PUFSEuQwCLxjdBBY9hCz/8dL7rQGcJrMAVjdFVUQ4j6s1omAyFleZUlVF iv1QQZ8ZBUVijMZq5mz1KQoxwyEW9lPhEJVDFA6TcHUo7CPMKTCnjlQ6UunB9eACiicVM5bKxZjF XKgZP5MaBxeqUZKjc85qicHaGKVInGbmaWKeZuY5UmImRzPdUkCcmXaM48jY93gU0gw5ohXAp2Kv z7lUJ99EKomYIof5YD/TzNU0sY+RKUbmOJNStNZCuVByqn1x88lPrsdNi5lZORxeQjWVogqym0jX 6p5FtFHudQLTWg97bRwWsXYPTixTba5XlPqjWtvyKCb5rWylcwJq39U7GHvhbAgMwVk/YVV8KUjJ SMnWDspBEDNDateJ1B52ztXvohCktp2q10cqmTnO5qK8klRZWyUlaTEn6gpiVQScQ521UXI4VB2p tGtDcHi8+LrIaBl7X386oMrv1IxDiibLjpLr8Tw6PK9NWFR1pQxvFg/HOqzldRxdsl94D3JqDPKq 0T7Z7nW7aZd/X7v5P1zp0npb672Qa8/dHPfv3+fv//7vT5IG139+67d+60Pc39v4sOKmc3d1dcVX v/rV577na1/7GjHGk/f8yZ/8yY98X//oj/6IUgq/8Ru/wdXV1Y/8836cwjm3SEVTSjx+/JjHjx+T c+bs7Iw33niDu3fvcufOHbbbLeM4Lsxtk7FeXV3xve99j29/+9u88847PH36FBFjK4+lNfmZMbIp bm6KNg7tdjvmeUZEGIaBYRgWg6zmVNxe/zrMp72oCkVFFwb3pv04Le9aG3MWbgJJa3Oqdj07J3S9 o+v8qs7VnmtSb+cch8OB3W5HKYW+75+zT8/5Oh/W0L06FlpZbPvbwOY68bDdbhmGgSZ9n+eZeU6k ZGxh13W8/XbPnTvnPHz4kP1+zze/+U3+9V/+BZe7K1SV3W7Hfr8/qcVuKgHAQK5aFw6nBalGoVJB N3CDfPfloXLz+XvuYXnmAOuNH/xRyn+9OrxSO3xcr90tBG+qgia3h3r+MDLK++OaZ11//lF/j48i PlKge32hchsfNKrBUznW4r2sxgVYbNpFLaMjKou77/VY19whVfrRmGNVnGo1Y7IbTtTY2wZcoA4m cjQdQtUAYbb6yKy51vc25sxR1FMIZAJJB1LpySWQcyBGT8yOXDxJO5QeJVCKIytkFbO+V8tk5fql jcM190gvYt1XtbK7S1sZm8g0KyWbRsYVrUyyZQC993R9xxA6gjhcjrXXbSTnaIAPY6hLVjQdJ/UY bSI47A/s9numnMjiKeIXRhA1IyuWGlwDu+3vlGo7oVzQuv+tN6sVXCZEE1oSRaMBVMmIsx/V1g+g sqoqCyAraD2G5fg618woWlugTFIli1j9h1irp5Zl7zxsgv2MHsYgjMExesfgHJ1A8ELnpcqXV6y6 1D7KVjiKZMVZ82FrkF5NzZxzjONI13d4X1tKiO1bzJZoiLWeXLwx5Ijgi8drwKk5dqpajbYrvjpW tx9LjAjeTMforCbdmamDSAEy1n8uI/KsOmKRqdEWS5YIapngRdIsi7bgRNp247177d5u2fabPvvI JnNMgtX7r13L9lZ9Ztsf1gRnzIX9tO/9OkD3zp07fPGLX/xQ9uV50QDZy0DYbbx6/OEf/iEPHz7k K1/5ysnj2+2Wb3zjGzcmJ77+9a/z53/+54RwKjD77d/+bf7iL/7iuYv+Hza+9rWv8Xu/93v88R// 8QnL+1mJPngomYcP3yPGiZxmgjfp6Ljp6YOjD443778BJfPk0UP+w7f+nm9/+z/w3e9+hxgnYpyY 5wNnZxsePHiDcewZBut5O0175vlAKYnd7pL33vs+l5dPyTkyTROHw4FHjx6Rc2YYBkt8V5nyo0dW z3l2dmalMSfuv26RSd/E4j5vfdmWL5b/tO2tW/g4Z+A058z5+XZJAEzTfmGPrZwqLfXHtuG6znHr z1H6vsP75mzfypCUrvOM43gCGkMIbLdbNpsN3pur8ThKlQunasBVlv0HyLVMyF5vng3m8uzJmQpi 5OR7H78/lZCw13gvON+ObWPOHfNsvX1DcMRoCYvQeVKKpBTZbjekNLPbX3J2NtJ1nu0WUjJC4zvf ueLJk6cMw1CvgfeYpomLi4vlvh6Ggffff5/vfe97SwJlPkxs+o7DtKPrPBcXTyiaGIKj5IQonG8D cZrRXNgMjvkwkWPi6uLSyquKzXXOycrYzDGnuLTVauzP8bjIM8ft5r/btdfqto+/2892a4l456Dv IaXI4bCn7+GtB8drNqXE1dUVfW9gc7fboapL54jG+FcRHV0HQycEB3e2jiePHjN0jrOt43B1yZ2t q0kKY9ZDEPre4/sA3tU2YYUpJuaUrDVkybb2E0xm5z5dQPdWunwbN4ZWJm3dmmapC5ZXlzaY9McY yDZCq4NmQ6xapSQLa7VedFdcvdpak1ms5aCFQsqFFBM5W19UFoHyy7/nWlbVHmv7jrPJIKxa5XTO 0TXQUtSad0ttHVSLXgWpcuVCSpn9NLHb7Zlmk9+qBGtDVNlvqLWfTdpUjz+w9NZrkldVyEVrO6ay On7HBAi1p27JpUILa9XgtNa2iJkSqZYj7NBsrQIoy2ffFItip+E1YTHY6L3n/2fvTYMtPc46z19m vstZ716LqkollZayBbItJJA13VKwDEsPM6bRTDRjDD1M4C9NmAgiFOAYBx8sRwcTTTBSTMfwoaN7 mpimuxnTwdga3BhohrCNbLAFsi1ZMpJKi1VVqu1W3eXs75KZ8yEz3/Oec++tRZZASz0RVefc8275 5rtk/p/n//yfSLmcY6yj+2rlcsi1ER5I16nFxgOi6T2XKIUUrgazNT6fS7m6vEVZIqvC5j7XvKJ5 i5lrGe5TETjX4ZrWrrFjZjt3qPXA24HDMBCF77OU5DBxcX6ma3PaVbivdv+9EVbPh7PW3Zd7RosF DsAbZuomv9VsfX2dY8eOveuibW9nG41GMxThQB0+duwYn/jEJ/j85z/vJ9BTsAnw4IMP8thjj1W/ f+Yzn+Hee+/lE5/4BJ/61Kfe8HZ+7nOfq014332W5znnz5+vJtM333QTSZIwHo8ZDoe89NJLAIyH o2oe0Gq1WF5exmBRaUJpNJPJhG63S5IkVW5pqH0bRRFpmjpK9GhURWazLGNl3xrbW/1qYt9qtSqw u2/fvpmavHvZ5RyDs3/Pfp++cedpwkESaG+bAdZ2fhnOmbgrfXXvCHbd0Rm+9/u5Z5C5e7QsLWVp PGATaL1TdHS3853/e9dN9myny1+ezzGWUtJsNkkSgVKKZrdLUZSOFVdGqCQijhVRkpBNRhSFoyvf fff3Mbh0iVjAs88+65SzcfTuVqeJtZYkirEIN/+0+LQm4dKYtKa0riTTZCxJVUSjEbmpoTY0mk3w ASBh58/Lj+c7rtnrA3VitwPU9hki4MPhqFI1T5KY0ahgY2NEt9tle3ubVqPJzYcXGU5gY6PHQreL VIJmqig0mNIFIlSIZLvKjLQTGPU0i+0Ol85vcPjoCrccWeDUuQFHD3bYzqbkdIuL+FazOiv9r2/d sf+NtOvU5eu2q81QMO1UpOf1vBR2e71Xaq/1CNRcZCm8LGa326m+GABSUbgB23iq8dVEjsI+6tSN iq4tnKdPCVf2RkWKSHnlPx8xMzPgJwAu4+khUBQlw/GE0XDMaDRmkmUOjBhbDYiqBtz27i9bo4A5 GrP2x3LUWn+9jK9Na6k+MXhhqJBb6uoVW6PBi2c5gG4wOpQs2l2NNwwUU6zmSvOEeoFCCq+cXIn8 eap0QIXM9FWd1lZ6RccpCHUg3nnLnQiJUopSO3p4UZS1/fh+nxOiskwB4Dy92IHC2nWr3vnTyGN1 H0pH9nY4MkQOXMTyau+zqv9EAM2miuaGdn23di3P5xsdxb1u1+3RRx+l3W7PREg3Nzf5lV/5Fcqy 3LH+xz/+caIo4uGHH65ALjgQ+ru/+7sA/ORP/uSbFtV9N1tIeVlbXSWbTBgMBpw/f57e5ha9zS3W VlbZv7YPay3Ly8vsW11ldXmZlaUlFrsLs2NWNQYXnsKaVxH6oigYj8dMJpNKnTmKXA3PVrtBXkzY 2LyIsSVJGiEVNJrSsYmkoxbv9n3vHNbLAWNm1ptZV9RBrAcydVpzKNUys8P63GhKbw77mx5zJ2Nn r5zi8HsQmwQ3nkaRU2wWIkSH9zr/PU9/57Ipvcfb9PzqlNewnvD50VEUsbwcYwyMRkPv6I7odltE kSJNHVU7bTgnuJCWdrvN7bff7mnJhl5vwA03HGZlZaWiyDvnhkEq4RzlwhLHkmbaIIliJAaFJVES k2fESqIEZOOC8bCPxNJIIuJI4uQ93XxICkutrsUe/baz466mj+evY/h+/nyfOFasrbXodhNCsYtm M+bAgUUE0G13sKWmN4TJULO4sMBiR7C1uU02NljtmHLCQjbKGfQmZKPSCZxqaCjFDasJd962Qitx uiY3HuxwcTufprPZ6QylTm92Al1yz3/vJHtnnc27zaoo1S6LvovJax1oaGMqsHDttPNa2G8mwX3n S3239s7QMGuexHot3im9o6DUU5pHADFht7u1fTc6aN2EcBRbKZ0nLZKCWEliKVDWixpp/68GVCyg jSEvSyZZzmSSkRc5hQklbfw1s+w4r2ryUAOFAbxN82ByV0PXKwzXl2szdSC4sSmEHg2iAsXBr+fA lg55wP485vtouu50v8GkFURSkSgX6a6oYNqVlhI4YF0B8rk8rbIs3eSoyCnynCybMBiOGE8mjrJt NKWndSsVkSQpsjYJ0Ho6aBkz73CwXjhrZx7t9Pzq193dq5Iw0fHnGHKIcfm71rh6zVo7+pjR5rLP Rv33QI+u7rlZYWvfxzt2UTWviiLvYTNOIqb3dd0xVK3L7vf929FCjmfI63z88cdnrsknP/nJmfUf f/zximIbaLVh3UCvfeihh6pt6zmk83Taa8kvvVLucX27vdadP5er6Zcrte1a++9a7fbbbyeKIl5+ +eUqmru8vMzhw4cZjUZ87nOf27HNY489RlmWHDt27Kojr+GahX9f+9rXfNRopx09epTxeMyFCxdo t9szy66173c77lsdnPf7/QqQlmXJ+vo6/X4fpRRra2scPHiQ/fv3O0aNp+pmWUav12NjY4PBYMBg MGA4HFZqzJPJZOZfUHCuA+BAWz558hTj8biqGevom65O73CY7RifLwcMd/vu/p6+x/eaEs0snwOy 88ebAr9AI551yFdMtBqNeXeQO3uM3dJH0jTFWstkUpBlFqUgTYOa815gbee5Xen8p7bz3EXwbHsL ObRRFPHSS+c5depMNd6GtkWRIs8d1Tb4tgL9XAjBxYsX2draIveU3TRN6Xa7NBqNir7dbrfdvZNl lKWfy8kwPmoipWjECZGUWA3FeEI+GpNPMoSFZqR8lQqnTlydD87BI4XdcQ12ux579rGw7HZvhv4W ApaXuygFoxEMh6WnlxtGo5x+Lwdd0koSkjjG5BqJoBnB5qUcm5eYUlNOcsbDjGI8wRpDLCRKSqSG cgyUsHE+58SJDf7Lf/4yv/1//Dt+83/9l/wvH/9VV0XC4vKbpzU9LlOH951r16nLbyOrU3gdHTM8 aE4cSJidD9/M9vMT6rl1dp2oG1cyyOzyEgyfe4Hq+q5ELcYqhKP1ztNh5ttdB8Z1QBi+a63JrYve ObCrPaaWIfPCqSLbaZvr9OQ6gN7t3FzavkDIyEVzPWVZ+WjuFDxMAakQ0inblYZJqZlkHpRqXy8Y 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 AElFTkSuQmCC --b1_35c9325fd0201e4bd9bc145237105e38 Content-Type: application/octet-stream; name="oferta_r4_c1.png" Content-Transfer-Encoding: base64 Content-ID: <15447585-10202> Content-Disposition: inline; filename="oferta_r4_c1.png" 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 --b1_35c9325fd0201e4bd9bc145237105e38-- From Yann.Dupont@univ-nantes.fr Wed Jan 4 04:57:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_41 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04AvuGm129002 for ; Wed, 4 Jan 2012 04:57:57 -0600 X-ASG-Debug-ID: 1325674674-00a9eb19d61cfdf0001-NocioJ Received: from smtp-tls.univ-nantes.fr (smtp-tls1.univ-nantes.fr [193.52.101.145]) by cuda.sgi.com with ESMTP id ITejx3rzhNzYYKJu for ; Wed, 04 Jan 2012 02:57:55 -0800 (PST) X-Barracuda-Envelope-From: Yann.Dupont@univ-nantes.fr X-Barracuda-Apparent-Source-IP: 193.52.101.145 Received: from localhost (debian [127.0.0.1]) by smtp-tls.univ-nantes.fr (Postfix) with ESMTP id 2CA5394DB7; Wed, 4 Jan 2012 11:57:54 +0100 (CET) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at univ-nantes.fr Received: from smtp-tls.univ-nantes.fr ([127.0.0.1]) by localhost (smtp-tls1.d101.univ-nantes.fr [127.0.0.1]) (amavisd-new, port 10024) with LMTP id H8DdqtUGZNZr; Wed, 4 Jan 2012 11:57:54 +0100 (CET) Received: from [172.20.13.9] (tomintoul.cri.univ-nantes.prive [172.20.13.9]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-tls.univ-nantes.fr (Postfix) with ESMTPSA id ECA4D94DB1; Wed, 4 Jan 2012 11:57:53 +0100 (CET) Message-ID: <4F042FF3.7090104@univ-nantes.fr> Date: Wed, 04 Jan 2012 11:54:43 +0100 From: Yann Dupont User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: Peter Grandi CC: Linux fs XFS Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <20111211233929.GI14273@dastard> <20111212010053.GM14273@dastard> <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> <20225.54924.482210.587313@tree.ty.sabi.co.UK> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 In-Reply-To: <20225.54924.482210.587313@tree.ty.sabi.co.UK> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp-tls1.univ-nantes.fr[193.52.101.145] X-Barracuda-Start-Time: 1325674674 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.84996 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 02/01/2012 17:08, Peter Grandi wrote: > [ ... ] > >>> On two particular server, with recent kernels, I experience a >>> much higher load than expected, but it's very hard to tell >>> what's wrong. The system seems more in I/O wait. Older >>> kernels (2.6.32.xx and 2.6.26.xx) gives better results. > [ ... ] >> When I go back to older kernels, the load go down. With newer >> kernel, all is working well too, but load (as reported by >> uptime) is higher. > [ ... ] >>> birnie:~/TRACE# uptime >>> 11:48:34 up 17:18, 3 users, load average: 0.04, 0.18, 0.23 > >>> penderyn:~/TRACE# uptime >>> 11:48:30 up 23 min, 3 users, load average: 4.03, 3.82, 3.21 > [ ... ] > > But 'uptime' reports the load average, which is (roughly) > processes actually running on the CPU. If the load average is More or less. I generally have 5000+ processes on those servers. The load generally reflect a mix between CPU usage (which is unchanged as dovecot setup is unchanged) and I/O wait. So naively, I'll say if load average is higher than usual, that's because I/O WAIT is higher. As kernel had big changes, it could be XFS, but DM, or I/O scheduler as well. But it don't seems the case. > higher, that usually means that the file system is running > better, not worse. If delivery is I/O bound, yes but that's not the case in this particular setup. It looks as if you are not clear whether you > have a regression or an improvement. I was just signaling an unusual load average, nothing else. As far as I can see, response times are still correct. I'm not experiencing a performance proble. I'm not the first author of the thread. I probably should have changed the name of the thread, sorry for that. > > For a mail server the relevant metric is messages processed per > second, or alternatively median and maximum times to process a > message, rather than "average" processes running. > ... > So you are expecting for a large system critical problem for > which you yourself do not have the resource to do testing to see > quick response times over the Christmas and New Year period. > What's your XFS Platinum Psychic Support Account number? :-) I'm not expecting anything. I know open source. All is working fine, thank you. I was just "upping" because I saw that my traces have been downloaded last week. It's not always easy for non native speakers to send mails without sounding agressive/offendant . If that was the case,I can assure that was not the intent. > > BTW rereading the description of the setup: > >>>>>> Thoses servers are mail (dovecot) servers, with lots of >>>>>> simultaneous imap clients (5000+) an lots of simultaneous >>>>>> message delivery. These are linux-vservers, on top of LVM >>>>>> volumes. The storage is SAN with 15k RPM SAS drives (and >>>>>> battery backup). I know barriers were disabled in older >>>>>> kernels, so with recents kernels, XFS volumes were mounted >>>>>> with nobarrier. > >>>>> 1. What mailbox format are you using? Is this a constant >>>>> or variable? >>>> Maildir++ > > I am stunned by the sheer (euphemism alert) audacity of it all. > This setup is (euphemism alert) amazing. Can you elaborate, please ?? This particular setup is running fine for 7 years now , has very finely scaled up (up to 70k mailboxes with a similar setup for students) with little modifications (replacing courrier by dovecot, and upgrading servers for example) and has proved very stable since, despite numerous power outages, for example... I can give you detailed setup if you want, off list, I think it has nothing to do with xfs. > > Unfortunately the problem of large busy mailstores is vastly > underestimated by many, and XFS has little to do with it. > really not sure I underestimate it, but I'll glad to hear your recommendations. Offlist, I think. Cheers, -- Yann Dupont - Service IRTS, DSI Université de Nantes Tel : 02.53.48.49.20 - Mail/Jabber : Yann.Dupont@univ-nantes.fr From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 06:33:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04CXfax133318 for ; Wed, 4 Jan 2012 06:33:43 -0600 X-ASG-Debug-ID: 1325680419-00a9eb19d51d8310001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id HaSWyA4SvMU3znMS for ; Wed, 04 Jan 2012 04:33:39 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiQ27-0003Db-Rj; Wed, 04 Jan 2012 12:33:31 +0000 Date: Wed, 4 Jan 2012 07:33:31 -0500 From: Christoph Hellwig To: Yann Dupont Cc: Dave Chinner , stan@hardwarefreak.com, xfs@oss.sgi.com Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 Message-ID: <20120104123331.GA12204@infradead.org> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> <20120102203543.GP23662@dastard> <4F02BA35.9040909@univ-nantes.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F02BA35.9040909@univ-nantes.fr> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325680419 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85002 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Tue, Jan 03, 2012 at 09:20:05AM +0100, Yann Dupont wrote: > >As it is, I can't see any material difference between the traces. > >both reads and writes are taking the same amount of time to service, > >so I don't think there's any problem here. > > ok, > > > >I do recall that some years ago that we changed one of the ways we > > Do you recall exactly what some years ago means ? Is this post 2.6.26 era ? The only thing that I remember is Jens switching xfs_buf_wait_unpin from schedule to io_schedule in "block: remove per-queue plugging", which went into Linux 2.6.39. With this processed that wait for buffers to be unpinned now count towards the load average. From Yann.Dupont@univ-nantes.fr Wed Jan 4 07:09:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04D9KYf137014 for ; Wed, 4 Jan 2012 07:09:21 -0600 X-ASG-Debug-ID: 1325682559-00a9eb19d51db1d0001-NocioJ Received: from smtp-tls.univ-nantes.fr (smtp-tls2.univ-nantes.fr [193.52.101.146]) by cuda.sgi.com with ESMTP id Z4sLW5hYPTFgBD6o for ; Wed, 04 Jan 2012 05:09:19 -0800 (PST) X-Barracuda-Envelope-From: Yann.Dupont@univ-nantes.fr X-Barracuda-Apparent-Source-IP: 193.52.101.146 Received: from localhost (debian [127.0.0.1]) by smtp-tls.univ-nantes.fr (Postfix) with ESMTP id 25A92849FED; Wed, 4 Jan 2012 14:18:19 +0100 (CET) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at univ-nantes.fr Received: from smtp-tls.univ-nantes.fr ([127.0.0.1]) by localhost (smtp-tls2.d101.univ-nantes.fr [127.0.0.1]) (amavisd-new, port 10024) with LMTP id XsCWRRo595I5; Wed, 4 Jan 2012 14:18:19 +0100 (CET) Received: from [172.20.13.9] (tomintoul.cri.univ-nantes.prive [172.20.13.9]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-tls.univ-nantes.fr (Postfix) with ESMTPSA id 0772E849EFD; Wed, 4 Jan 2012 14:18:19 +0100 (CET) Message-ID: <4F044EC7.3030203@univ-nantes.fr> Date: Wed, 04 Jan 2012 14:06:15 +0100 From: Yann Dupont User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: Christoph Hellwig CC: Dave Chinner , stan@hardwarefreak.com, xfs@oss.sgi.com Subject: Re: Bad performance with XFS + 2.6.38 / 2.6.39 References: <4EF1A224.2070508@univ-nantes.fr> <4EF1F6DD.8020603@hardwarefreak.com> <4EF21DD2.3060004@univ-nantes.fr> <20111221222623.GF23662@dastard> <4EF2F702.4050902@univ-nantes.fr> <4EF30E5D.7060608@univ-nantes.fr> <4F0181A2.5010505@univ-nantes.fr> <20120102203543.GP23662@dastard> <4F02BA35.9040909@univ-nantes.fr> <20120104123331.GA12204@infradead.org> X-ASG-Orig-Subj: Re: Bad performance with XFS + 2.6.38 / 2.6.39 In-Reply-To: <20120104123331.GA12204@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp-tls2.univ-nantes.fr[193.52.101.146] X-Barracuda-Start-Time: 1325682559 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 04/01/2012 13:33, Christoph Hellwig wrote: > On Tue, Jan 03, 2012 at 09:20:05AM +0100, Yann Dupont wrote: >>> As it is, I can't see any material difference between the traces. >>> both reads and writes are taking the same amount of time to service, >>> so I don't think there's any problem here. >> >> ok, >>> >>> I do recall that some years ago that we changed one of the ways we >> >> Do you recall exactly what some years ago means ? Is this post 2.6.26 era ? > > The only thing that I remember is Jens switching xfs_buf_wait_unpin from > schedule to io_schedule in "block: remove per-queue plugging", which > went into Linux 2.6.39. With this processed that wait for buffers to > be unpinned now count towards the load average. > Ok, that's probably the root cause. As I already said, I don't experience performance regression right now. Thanks a lot for the explaination. Cheers, -- Yann Dupont - Service IRTS, DSI Université de Nantes Tel : 02.53.48.49.20 - Mail/Jabber : Yann.Dupont@univ-nantes.fr From info@amorosa.ch Wed Jan 4 08:10:05 2012 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04EA394143332 for ; Wed, 4 Jan 2012 08:10:03 -0600 X-ASG-Debug-ID: 1325686194-0222017aa5258340001-w1Z2WR Received: from sh01.ticino.com (sh01.ticino.com [195.190.166.201]) by cuda.sgi.com with ESMTP id grfSJbY6iu4DgGq3; Wed, 04 Jan 2012 06:09:54 -0800 (PST) X-Barracuda-Envelope-From: info@amorosa.ch X-Barracuda-Apparent-Source-IP: 195.190.166.201 Received: from [84.55.234.43] (helo=Amorosa) by sh01.ticino.com with esmtpa (Exim 4.69) (envelope-from ) id 1RiRUQ-0001Tc-0n; Wed, 04 Jan 2012 15:07:02 +0100 From: "Fattoria l'Amorosa" To: "Fattoria l'Amorosa" Subject: I: Fattoria l'Amorosa Date: Wed, 4 Jan 2012 15:06:40 +0100 X-ASG-Orig-Subj: I: Fattoria l'Amorosa Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0484_01CCCAF2.7C75E7E0" X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AczK3prLrrJ0rj23Sme8VRO5enCC3gAAGyFgAADt6vAAAGp+8AAAizswAAAG+SAAABmcYAAAEC1AAAAY2xAAADNVIAAAYamA Content-Language: it-ch X-MS-TNEF-Correlator: 000000000252FEAE39A2E54D85405FC735B8C9B8C4F63700 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - sh01.ticino.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - amorosa.ch X-Barracuda-Connect: sh01.ticino.com[195.190.166.201] X-Barracuda-Start-Time: 1325686194 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_0484_01CCCAF2.7C75E7E0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hotel & Ristorante, Facebook: Youtube:=20 =20 www.amorosa.ch =20 una Passione, eine Leidenschaft, une Passion, one Passion Cordiali Saluti, Freundliche Gr=FCsse, Meilleurs Salutations, Kind = Regards Fattoria l'Amorosa, Via Moyar 11, CH-6514 Sementina Tel. +41 (0) 91 840 29 50 Fax. +41 (0) 91 840 29 51 =20 =20 =20 ------=_NextPart_000_0484_01CCCAF2.7C75E7E0 Content-Type: application/ms-tnef; name="winmail.dat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="winmail.dat" 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 kiIhFcE381E/RhDGkBFw1UL5UMrwYSD+LtSFRiX1sEayS9FHH0gv/0k/RnAM4EYQzcAMIEsPTB/9 TS9sBxBGELYQSs9Pn1ClPilJjCJQTm9TX1CFYiD+KOqCVJ9GUu7gUi9W/1gP/1kfRmEIUFpyRv9b 31zvVP3/7iBaf2APYR9iL0ZhyMBfD/9kr2W/ZsUFAQSg1NAYMDdQe8RjOGJx7WHplgrBCxBs/zhi /iJDxS4xIYBuAMaQbwLfQMBoYEPgMVLBoWoncMWx/x1AMtAsAPoBKGHrNjhhCID/7li138QEKAFQ Qc0AkDK3bP8IUMjjdMLzUL5AdqM9IM0A+jMM4GMr8najOwB2+TsAf3ei1UFzX8QgcxLEi8iQNN/1 sHsCyZEIQXa0NX0Ed4X/eFZ9gTdQz4DvGXOACIDQOsZIDwHtYCYgUjKxzlDzuhATMCwg1JHCXMNB tqf/zFF7bINwg+LJk3TFdyiGMffJ4M4gL2Bmflp5Bnbzfx8NgCxGFAHHAG9rOiAti5hZxiG54GWL gA0K/2uygjBrs2xvbX9uj2+fcK//cb/wxXnOg0+EX4Vvhn+Hj/+In4mv0KOdL54/n0+gK9SR+yzz 1KJmFFCbQQnwed/EbB+Xxn1vfn+bv5zGSFlQAEVSTElOSyAi9QGld6mwLkPgiyQDI5lhST4RZS4M YHA/zaA9vyMBBEGyEO3h7sDxgCbPkLRmPQtwXwtw/6AixGAb66CpICGqv6vNc2s9zzFA+zCtYgnw Il8aMLoQ/mutYNMiofHuQLdgom+jf//FUaavgDvGEAuQDlEMYKER/wThQZ9Cr0O/RM+3D7gfuS// uj9Fz0bfaU9Qn0oPwQ/CH//DL05PxW/Gf1F/xL/Jj2a//1W/zN9p/85PWf/QT9Ff0m//Xj/Az9Wv 1r9if9RP2d/a7//b/2fP3i/fP+BMlK+Vv5bP/5ffmO+Z/5sPtQ+gv6HPsm//o++k/6YP7M+oL6k6 EDCMY3MDIydxci+LABhRLABh9kENUALBYbBfsW/wX7OP//Rvta+2v7wfvS++P7r/AM//Ad8C778/ wE/iv8oPw3/dj/8Kzwvfx78OHw8vyu/dXxI//84fzy8Vjxaf5H/TbxU/Gg//Gx8cL9i/Hl8fbyB/ 3P8ij/8jnySv4T8m3yfvKP/ur++//+Zn51/oZJAQfMLzNOlP6l//62/9f/VP9lLlfzDPMd8y778z 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 r8GyMC1QaZDhcPNQ8zCyLVAwTrfQH3KWtK6Q/7OysDL1sy1B65C2NG3SszD/5nAlcG3SJjQgFLOw qrIp8h9bkeqhIfQgM5ukEGkt/SCSpawhJhZe9OYRHyOq8P8m1J0xHuOr8OZw6FTpdCiyf6wz6WOe E+/C5gOrkB/QsvxaR7dg76Fd1F3y71G4YP9uAW0w8HHrAu2BMfSicmyQ8CYl5BzyEC4x6wFcsvEy ERSsObORrmFtMPOwr6vwuPDjUKLQZ8JgLWnQ5CQlLbAEIeOQr/Ix8vvrkLdyw7lhbpC3sLbSbvBz qHC7UKc5+bA08P7wJY4t/FE1ITUyCFLnviH//LA5cjkQORD9MMAwu9C/0IP+UMJwJDEDMSyswJ5B cdC/0DkQ+zDQZr/Q+75w+TFONRAz8HUy+zA40f/34DThNPCwsfzBv9ByUvnw0ayQCEpKNsGF+oP4 EP04UGh3xj3jd/TG0bPDAzP/hAFHUgOzO2QBZcVQPlAEMOfGErc0edBKNcNQw1LDUP/EMHxQfFAF 0MfQzBB9Mu5QuUEQpRx90AYQQhNGfnKDflB+0Vo7XxpXuzD/uxC7EAdQKvF/4ZkwvBGAYdm8cyzF ROG9EMW9QIFE/0UAgMECEcZBgpLO83fiDKf/4BYbctwSEjaONg1yDFCGUP+EUEq2iZKHklKyDhSG kRAjf432T/BJc0jBz/DDk9dkRf9OUMbS1bTU0tkTTmPVMREj/9UyT/DDVMS5yiWNNtQUFxP/y6PU EhezkMVKEhe0EFOSaX/QEJExkqLNQswHDLWDg6tJ3WAxinhANYnbID1Y7EVoCsCqoCThcA8+Sm6Q KnDjkCpwbpBJMf9pkNIQ8rAdcR3hWjDT8Zsgfhxg0dQB4hDysECQljJi71oi76MgEh+RFPZw89Dj UP/W0uuTWSCpZOXjpBHuAKRg/l5ldB80YfNtoCHFmBLq0P9oktX065ErAO8h9dOhwe+Q/fUQcWTh 21Nn5eXULLLrkPniMPRiabAykOMSILBlVP/jUFuQW5DjUCpwYND00pfy/yoS4zSqEB3S81CmMGzQ I5B3HfAdsB2xIPKwl3QqcFnub9TwWjBs0MozYTNwqxL5qxAlKTJwbJDT8qXwHbDnaZCp8KhQ4yD2 kN6w0XBlb7EcbzBMTjfwNLDpYbDhhzksTvlwcdCOjl74EDRQNVFaZD050H/58PywOfD7EPnQ/BCu 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 Yvx4d5QQlbBasFqwlbCW8ACZe9NiBi0GKciKObuVoXpzlbCWcB+WcJXQ1HSWcJaymns23muVEBvw l1CSUKrWYZJQ90rwS/BKkAXJwddSS5CIcMaj8yAugAxhDKfQp9CMgxDX8NfwghCi2QHl2RCB2SMF HZnxKrCaIP/MgRAwVPNosB+h5vLvU++B/SeUxeOA66HpMGHU5nHvo//vMudQnZIikO8x6yEikOvw /+8S6jDqMOkQJRBi0CYwX/T/JRDqECfyJ/Il0CRQpBQl8v8l8J5ynRSlUF5waNCndKDw/6eQaNKn kGiwaRXww/FW9ZG/a0NsEmvwbDMwgW0QIWrA/+dh8jEuQGnBalBuVPDR5GEP9vDYEPcS93CONRJC JHZO6fCXTq5S+Vo/NBBv8HAzNYBwoXCwjikfcjBx0HAQNXKwcBI6K/82YTbwNfTs8rLRsoPuEvsU /7JzskX68DfQdBB2ELP8ObD/OhG0ZP3hdtGEorXhO1M7Y/8MkLcRwUE8c3ghPDR4sggy30TTuWYD wwNTBIEHAOF9Ef8EYfV0BtT30n5yQdRDtH+2//k9REIJKL+lCXRGsTvjwTb/O5L/kHdwSNFIgf30 hLDCcUgkCCnDsCopxTDOfjlvUMPQb1JxMMQQbxAyhkqFUIZQjDGuNYUQn3YQSzBLsMXw1nE1zEsg C8XgeCAlh/AoJQch/ccQJ2dgAmHHELUQxxF0ADFzYCFJKXYwApAIJYhqLcUEQCkHJQQQf8cQApAC kMcQBBACUYbCMf9McohwyRBpIJdQEFCRUg6w/0qQTZBNkJfQS1BM0IhwS5C/SrDWskqQklCXUFkx Qs+wv0rUhpEIAIoB1rEQQEIOkM9LsIlwBfJLsA1G1nDFsB+XUIbQBPDYEASwSTFqnDVIxYHQ8NPw N2+UMAJv0eBq8W40c5f4ezVvk/BZ8FoyWrCWUJHTMpJastOhJy3Q0H9aUNRyWlAQUpWw1PYQUprI d1ZrWHBvTkvwp+L7zcAJE0JZcEsw0PCH8IfSfwKQOFGtYNihFDAT8scQpe/wYBUD1/CI0MOIwYgQ S5CnFhKZcs5Q4yAYES1oMP9SMiExZoEfsd4DXtKlVCJy/OdBUFIfkN1wKtDdcChy+yrQZJAp3iFk kB+QZrCgUv9kkCXQ3zAmlJ9UnzXhgSPR/kbikmLQn1QeMiYw4pJh8vwJRmjQ49IfmuPXMkFo0Peo Uy4jbRBjMSNsVDCSbRD/avLl0W2CagDFMG3EIMNpEnnYEEMQOfCE8G9QxBBTykrqEVLqMLdSM7Bw UB9xUDQQM9A1cq9SfWevYXEBKh1MJeuw7JB2A65AbyA1rzFtJUz2IXIwNvDIsoEpce5Fc3L/Nxqy UnIwNtA20LMQs3C1EO+1EBTwFPB1koV14Tnz8QP/djAEsHbS8jXyZLahwTC3EP938jvUL7G4In0h gXI+cICw/om5QPVjPtL10DHy9ZJEOP/3s0IkRElD8bwjvjS/FrwS+0SUefZK+yf60knwSXBGMN5I /GH8U8FCU6A1wpCD0M9I0MJTd2AuQQcpDLKEEApLAOA5APBsLYwtHM81cTCuECZQtlJTYEYzRnNO /zC00Ev+KW9QhRC1EAYS0PAGUMkQ/Ow9AdKHUMhwx9CH8odS74dQxxQCssdRGM8gBBAEcP8E8MhQ BJDx8AKwBBACsAKyZ0FSArCH8Ms5xfLHESD8DUISEArQCXLMMEsxxWD/Q6GJUIgQTNBMMAYSxZFL If/WcBIwEjCSUJJQ1hNFgNABA0YSCTJPTpFW014sNmdZ0BGwuloBFWeA9GbUXgYlg/BhCKw97jEg OexFLppKC7BXWiHR0K9mDfDol3/7WsHbEOHS8pZSgLNecFZPVi6dIPGGoDEOStLSlnCV8JXSk5XQ EbA4b9RQWW9NUMAWYzdrV29aEJIQyZdQLUpHME5OTlBOUP9G8AuwE1IE8AJyApAskRSh/xPyFPLF MEG0iBCG0AewzRD7zdKJ8GaYgYrwirBW0FuQf43RV4FXkFbwU3IZUB8wx32MwEUfMFcQj/Cl8B8w S/VfAWuTIE5dUF5wm7CP8P9dUFURpuObkhlQm7CMMV6B/5uwpbLN4F7SGRIYElgU3fP/X2PedKVQ 3zEZIeD0o/LjMu/j8+PDosFbzwAgxNggFCD/q2Ajwqgh6BFphGqlXrJuE/9o4V1SXVDkcekBalB2 MIZQ128SxBCt0HXqAlLqU2/DD3BQ6xSvkHCw8DVtKQQROq7wGld1RvIBKMApsC0TOhM+MNExjykp EOywyRT/7NKw17IjZljvNnOysxGzAP92AO/gLKfxEfEhaXIEsPDyv3aSdvA6cGqx8sF3cOVrJG/9 oINgL6Ivowg5QMmAOfvAULvSaAwgMWIzY7h099R/eNJ8knxUvDT5Vr20NVhK/3FlM7d/ZPSgOIRz AvsC/EN//FTBE/1Eg6L/QMNwGrAtPipOsk6xBHC08gPQCSF/w/A7kMPwrjKusq5QYpFajLdW/3D/ MR3POQEQ/7TQhxIBcsXwQjEBYcjSyHD/PtTGMMhwxvBBdgWSQRMFAP/IocfQBNAFdEE0AxINMQHg //agE4FRUgvxRWJFgQeRCcH9RPExRHDFUMVSyHAGUAZQ/0IwQjATEEYSEnF2M0bQRhL0kFYR8HfT YUpREGEO0gvVVEfQL+BgMYMYpMoc0/DMDCA5Lk6hSTADTdCUME5W6lELUhSZf0fwFoZD9WL1Fl5N UQ9gVg1wFm9w+FrkKNOwS/DUkg8SldEB1MB7cVIwTi9K+YjwD0aJMIcwEbAOsBHQ+ZUQslrV0BHw zcBG8FYA+0bwiPDtwEDIYQKwxtAVUP8schTyA9AUsEF019DXMM6ScqiNoDmHmEDNAI2COVArTshB jrCnkKBFugqnIEpTMY7hjrCmzqD4Rac9VBBUEI7wjvAXEJ6GmsCPwVMwFxAjKZGS5IU1F1KFMZJQ kPCSUP+O8FSQkLKP8JrQU7BUkFMQ/xdwGVBTsM3gGVAasBewpfD/zeIXsFUwGrAYEFbxGUEXsPMa sJuSjFZaElUwlpCbUP5ArGTjolumW2UfluNSXVD/6FCpMKwy2BAkEl1SI/OogP8joWEQmfEkYyR2 rRKosLVQ+I05MQBhJdAl0GHwYfD6lmJAUiZQJlDrEK7wrtDD6xUnYzI6ri1j8OtSPF1jsDCwMCaw KHBVQhDZUvpWoTC4TlWIRtE167AsIQrswf8rkSuhZdGioyr27dAn0u50/yvxaAO1Eq2wLTJpUrVx 8aF/LfEt6bX0wfS2VGuy/hCl6CCEHHVwajhAvsExUP9tUPqwqXG6A6mybZS387fj//bQq3I3071l +rI1VfqjcZD7NXdy4ylzhK7DNzCvNK8W0/wy/DUxKbEBSrEAdaFPJVC00GjwaJCFEGiQpT+yQWiQ 79BoEDzQABDwOfPD8DvQlkom0OwQ7BBkEThf11oAUO/waBCNMT/DsCVQxjAGUtDy0NDtPfPGMMVS SCUGksVRxiEC8L/X0AUyAtF+AMiBT1EhBJD/yJIEkBOQBVJBMLlSxjDGMP/IsMmSe9TJEMwwzcDL 0EbQ/wjRzSEJEUWBBjK2cciAeYO9C9E5EnISME5QzVBNTsEjijC90U5tUr5w0V75xOC6e4WQg1IQ ctSSEbAAcFINSstB7UXthDBpRQABwD3AcMXwhXLQNm+RXsHRWsByS/BzhDCLUFBOiJAO8tLy9cJq h7DEJMxF1BCD0pNMsEdwFmvAkKs9xPH9wUA9hNBCUE2wEbAQcE3QT4pQRxBIMIpQkFJHErMEVpKJ AEowRs49Ls04QBqwdcAlzyAoIV/H8mhwP/LwcPBwgg5wMX3LkUXPsI3yybCPEI8QLMhSTFaPMOpJ ylKQEJzpQZAQyvCQEAtOyvCzy/DLMUGHB2COID2PEMGOsIc9RTFnjeAHYJ/J4M2hjvCOcFKQJC3M cL3McGYH4J1Qf6DOQDXMkHvNUM5RKY3wkVCQ8M7QZcI1zVBFNQMpUrDOcP9SsNBy0NCQ0ZCgkIDS Ac7QO81QznACFwFSkBcQZzX/5JDpcOQw2DBUoWACW2OX899bp5fVYCDYoEAAIPBwhHD/03Lj0Jmw YFPogZmx1Iaa4jQIZFDAJaXSnTDwRUTwQZ1SdE5UneBSd53zJkFkEVti0p8y61Qz4D6OLRI+61Cg UJ9QR6ByoFCgUH5j+iYgShGhMJ5nft2AYxtb/6FwZNAnsGVSK5JmUqL07XR/7tKiEO22K1Kk0mgQ 7/Do/6VjLfKmNNYw8ZIEsDowprX3p2P+EP4QpOPj/nLxUP7Q/kpAwDhCbiL2A6lw9ZLzkJYm88H2 0AbmxeU089D85jTmsvP0bxH7CfrTriTb+uRzAyl0Z+pxNeqQ/NL16xRK60FJbGB84P2A/sH/ajCl EbJBsjCycLIx7cfucR/v4LJBLBD/kCjQM0J0HyiAO+C0AbPwnpFa2FqpAHAJKXcQSzuAPfDw/w/w vFM/ArcgPcF6VLfyAXD/udK4MnryBbK4EkCxugG4Eve6ErcwAjCr9UI+IRNyBbLXE5C48g0RLb4y bswAyaD+Pb3QghKCMguwf/J+MAYyn0TyBtESQ04x90BSj/og/lb6Mr6QBxBG0BKQSTBHMX5rDzAO 0hBwvxDEsElwunlKQRVrhRBLUPywSzBxeFZYb8MygvBLMEtwDspOS3BQ/mEvUsSwTLD7DxAPEP+D wcGwh7CHsEkQH790TLARsMSw/LBQWsz4TQ5WOHCE0A9wR3IOsK8OkMAwD/B6Ei/7IEa2EHuLcHyR LUEwQNCVwX0AIf/IMJeCaHBocEDwCFCAMLWy/4GRyuDMYQexRcCPIY6QytH0TenLAEnK8MuxzMEF kp6pyiGQEI8wy5FF68wg1QWB6whBDBIgSY2wB7BrCNQIkMok0EpJEMEQ7P5JwFDAUkXwSRBF8E4x EiDGRU6xTqBOLEoI0AjQ/soJwwjQDDD60AjQjlBGUvfJsAiQCJSpQ2COYQ1xjaH/jXDTUtNwaPDT sF2Rl6EhUT9g4l/ol+MgMV2hOjAoLf8SMGnwyRAhEiB1IKScByEQlWjwrXkAOTrQjDXZULu0kBUx Qp1y2bCd8pWeIX88EPBQJpKesJ9Rn0UosK7YMVNCYxCgUH2gYRhQQ9zS3PCfZ59rJzCX/kagkBkw GbEZIRhQ3dAocOsosCjwK6IAGaIQonajfv9nVrLQaDBocCxRaSOl0Wpi7x5DLhBpcNYwxWqBHzCo ceQkpeQAJMQf4ePRH8AiHGjQazEQPGBajPeuIeVzM4FHbiWrMubQq7D/InQilCMyq7Bu8iFRN0dz 8f834a6QN7TqlOtyONLrUDlQ/+tRJsGw8Scl5PDsci7QOhPPH8BoAbLS7pUQhimF7fD+p2ihshJ3 EHjwF9Czce+iBzwAtAEW0Vr4XlNO750QaHDvEHiQrfWhfjCA0v+4EYChtzBEsoBSuRB5UkIwHy2z vKG20D5SezCsOc37xWDFADl+MEJQtbC2Esew+z4w9ZIn8+W50nzwLVIC0P/GsIowQvD3UDNR+iFO UEMQ/0LwQjB7ErkQPfFFoUWQtXD3+ZCBUPmTPVYATpC98L5wf/oQDRK7MPrQuvBGUkbw9NJeR/CZ c0fRY0cQ+FB/Q5AFMsAwvxDDUkrSiHB5cHdYdw2EQD3APkA1+nEBodxKof8Sg9BIEMOx+CiqQUgQ TbBNMEyw/XABh1DUZk9aiUnswlFrUO1J1GKHUE0waYNSmnO40FBZYDEhrGY1PrI+0IwxPzR80Gv/ A6LIIVcAQrC9EEkQgjSNcP8FcAoQjlBScENRzcHKUcuB/8ywDJDJsA5zyaLKIcywybBXBxKN8NMw aDdgPUvQJv4pDnBB8s8wjlBB8o1wjnD/ChBBMo1wwHC7UL0Qf5ALUP9AsU5BhRKCETZBTpEMAQVw /wVwTlB+8I1wNRK9EI1whPD/NxBGMY4hu1FGY7tQCNDAcO6DD4CaQBRgFNPwS3CXt5sRwtOgEPmh XmIIAddiLgiEkGrwKFEp1jCDFCvTcFxUAVzLY2jgHCmeLRSQx5BhUFCS7z20kL+dUmGwnZLZsNmw FjCVd8DOUmJwtFCgsBlXnzMYgfBbX40pn9Bi0O+wGFBbFxLc0WefkN2RZ91wnvhrv2uhEKCwVVJV UBkwv91wGTDdkKCQ3TBkcG6h4P4dGvHfAmaD4NAbkGfTZ6H/4FRZEqTRjIFZkwSApqCmof8fEh8S aXESgGmA1kASgE6AudZAJKMgAeRwhJBD7cDGFLTwnZCVWq2rYDHg/yMlIpLnM+bE5qHnkOdQ51D/ 5/Crcufyq7DrsXNmc2HqkP/rcbDBJvB00GGRYYR84GJBN7EQbJDk8CooAeTwjT0QrkHPRWOw70XO /xBwQIAfQh4hpdK0smiSZVMPaAGyMmiQaBDIHAklh3iw8TAD0K41bC13dNHacPhWdJ2ARlJQtHCc rjnhcLLw7xAqIbNQ/zGQNPC18C8yefK1UnoQi3D/tzB58WoCgOH1MzGFPpJ7MPMxkItQDkIwkgMR fWFskf/FYC9BbbEwoTES9ZJ50X8D+zNwNjFKxrDGsDZSM3A08L+3MLkQehCBEGlSLvQN+aHngNT5 cEmRNaj5QLsgvaH3NxD3sfgCOTewNbKBUIFR/3GhvDA4sH7wNbKGsMXw/xKDiLD90Hh77U1pIcD5 wOA9eQCA+6H/EohQxfCgsl7kLAV+4EV3kI/EsIhyPJA9kLNmLsIgEFGqUUeFAFL0av43PGCDYzxQ uJB80D7QA3L/enI+0C0wezI/UHuSP1A/0K98En7wC9D6EEwGYEaOUv9FkYFhBdCNcAtQjnAIkH0Q /wWSDFMHoH2CCiEFkg3yDnL/hPDJcMlwOLBE8UaBRnK70P6HzyA3YbtQdDD5cHTydDD/hVC9EXUB OJBxsAvQSFA3sP84kIUyijCEEgsRg0E08rVw/7rwLnGBwXQwOLCBU28gB6C/hmMLULbQ9jBLUEzR DLkw34ywEBKXlBLQ+aEQTpDWMNtQEEzxEDXBEgEntoC3QP8SYbHwi/DU+tby4lAU0BTRdS0gPV0w 7lEA2WEVM0b8UkqNUCyQUdSd1haSnrAHFvTcMduBKhnwNfj6WhfwfNuBoBCfkFTUVjT5GTC/b6Aw s/CfkJGQkXIfkjaRkKBQoRCg8NAxTe8awFdA3oFX0RSiEOASHHj/svDglCkUWfIeMqYRH8CmovnP 0C0H2MFbkB8Tp6CnAQdQEOFw7fDPNRlf+V5iXTLm1uaQ51DFqEA0/+eQ5tCacubSmnXngV9yYHN/ 6oOcdOqQJvIm8CgwYpE1WAkxKibB7DCMjGBBA2OQY/AQTjJOEU6AMU4QShFKz2Og856gY4A9CSiA 7QCgYmTDf8iwKpCVUWjh7xDw0PDQKp4lsxBnMGcw2dDQPfEQpo1jYJ4AJWyzIRZOwQAmBg8AIiBX TXhGQwHW0U8RpINPUEBlpIIgT1C8/KRwpdAHHgBnkO+Q2tDa0NdWtb5S2bAVcGcwobKhsR0X0L8w 8GlyNPC2EjDwbpLMaiH/uRA/EWoDahAwUPiwtfHAgL/HoT/QvgC4cDKwMHCLbKHzavK+AEkluJBs 0rYQwrD/cbC2EDTwahAzEDGQLzJwcu9qErcwMZBxsHAzoDRhLbHP86GpMKyx+EBCy63htxD/cPA0 8DRyrnJyEjTwNPC68J/50gtSQTC90L4wkFZIUP+90LvRNyD5wb1S+vH34TwwA/8SwBA2c/Nyb2Kk ikXn8IlB/HCaOYOHtHI8kDuQFW/TZraQDz2QwBD+8Dxxc7NiDZRSij0gVXjwxCy3kPDSavRutZD+ 8D4S9jD7P7JaUSD0cHpyP1F8AT8yj/YwqzB6tAtQLE4rNoD6Un5xQc4Q+tB9MDbygXD/DtJDkgjx gCELUQjBfvQI0g8Hc0XDhbCFsEctBSXXOLD5cHKwyUmiNbMQ+xD/hBJz9PsQ+FGv4TMQhDA4kKUz EE+EIEYvwoEOwYH7wnCs8UFt0q3ScVL20fGh33GwsxBJEm8xfaIxhXCFsP1qEOYgoIeBS1AD0Ihg EHB/ExdP4hIBTlASkEzw2DIgjgwocChwOlAGJcQSgfzFGE9yT5YSkJdQMFBQkP6sqsCMYVCQUJDZ ME0AzwHn2YHZcI1xSnNSA44QUjLvFhBSko7S21NfkDCO0Few+WkwGVvbsBdwU5DbUtyz91UhVjRV UW9VUFWwGVCS0e+SQpLh0VMZwG/dkNww3dCymFbhjinecFeQyJRG/d/hyFfhKTFZQ2ZSlfNZoe/t MFoQZDDMAGr0YD/AUID+QV0wzAAe0eGAKMHksIfwA2cwKpAyPnxnO2P58JDnLJnymfLn8Jr251B/ mlJfkl7y5pEx4F/i54AwvgcoYGJh6xUnBHwAPZ5w5K5FY5DwSdywnzKfUH+fkJ+Q3LKfthSwaJAU sI7rFKHwsKYew6aKgeFwZ1A/ZzBc0KdS09CVMtMQbSnf71BncPBwFjArMI4XwGigfByNZ2EX8GgQ plGNwEpfFnCm0I/wKzCh0itAQCH/o1Cs0sLwdDDC8DCSAlKH0P0/0EjlQaxQahADMIyQrJD/9FAw 8GzQbNAxcKxQQFCH0P8wUMrQrJDmEqtx88GsUDBQ/+RRr+HokjRyNPDC8OiSr7J3bVKsMj/QLsHh 6XHmoYrzLiDlwDEPrQFs0K+ybrPz+QD1wQ0+9bLtUnGSsDGeMfmQg3H3wfcQsFb3UH82cAtQcDEz YW+yN7A3sFcFtEP8/KBz0W6pTaO1MHewJjUUtkBqdXTn+9C28HbQeHd18ToAPeGfAFJ50ADwt9A9 EGhBXtAAoyirSbJusmrzAfC4shdn9jAU8GqQuXR/epI/8HwQrFDoUSbAQIAc/zKwfBI4kEEwu5C7 kH0Q95L/fPAFkbxhvFIKELtwDdIOUv/FcUaBQdEJgX/QQ5J+9A2S+cByZy2FcLMQNfKx8HIyr4KU wzHBgcIxSqpzQcJw/8LwAtIxkDKQMxDtMmqQArD/ahCwku0yqJBqUuyTwKE4kP+EskDzcoF08DBQ EHFL4YgQ/4fwirAdcA+wh3IQcBLQx7F+IDKw1ZDVkIdxEsADQBD5ilAGKYowx/KL0IvQEJD/T1FN gUbAWhDnUTBhMHBj8v9QsIyQIPDLcY0jqwCNUsxyn43SjlKOUSwgUqBbOlLBn1OQj3IXcFWwV7Az Qs6w/JVKUvCQUo9yVNIZs1YDf5K0jrKS0g0ckXJU8o9Q+vJWk1CvLZOwk7JXkFfS/+BzlYVZUmXw WXKWFLmSyvL/yxJj8HAAULAU0FoQAvBLsDDxPacQK5DXsFtn/PhiYlBe0NixyQCboZuS79mQmjBf Ml8RMBSTXkAVwn/a4MkAKGBe4BbDYREoI2vKPZ7xVp8wMlKfEJ8S+hLdREUZNN3ZY4DeYtKgvjkg 0JZw33AbE9WAJcvwfeFw8dygoCCnoA/CWOFs2CXxNWfQLFFajdBc0M8rMKewzRBoMM8xzRDNEH+P 8CxQUpBScGgw4jHi4xn+Yx/QORAzMYPhwjLDcj/QP6kwelL2UjFy6/HCoQ9GnFBOwvA+sedgNe7K 4f/mETBjInDm0D7QPpMiA4Mx78Nh7TGoYSK0auphQFA/0H/oEkBQujA+0SYBQBCsMGv/esD2AT+y PxIxkCMwr7Jtsv/rsCMwqTDtUgAS/nQw8P0y/zPw7tCEUG+QhDBvkMMyrPIMNme1svCQNXfRcsxn RTvQO9DjMLTQuFB/9JC1tHcUtbI5Uj3yuNBxFl55EfEBJ/QBqkmQ+GrSbvSQuNF4gfawP7Hxm6Ak 5SBqkGqQh9D2cv+XcHpR5eGL0JdQP9BqEIVR/X5AQjbQNtB9MH0QfPD3sv83MDbR96H5MX6BvnBG Eb8i/jVzYEMQf9C+lEJw+JG9IP+8oIWhxNL8kcQA6WBr4uTh+SrQzEF08KuwcPAlMv6w/2qQbZKq sWxh5bIg8vZyIzD/ahLosv6wcXA51Kjzw6KBgX+EELNQSnCzUElxcgECEkH/iMBMwYgQWfAmcBrw rFCH0L2rMISJIJZBl3A/USXIVflkQChJuWBagFtBi9BNsf9MQU0wq1CMFAaQZBAG8WPg/kEicFCw B1AHUIzSjVBRkfZOjVDMtVJScAkQZ9Bn0P/OsAzS0NDN9FQQV7DiUNfQz86wpnCQUpBwPGNWsJCQ /49QVVCQ8lUR0EMMslWw0HIbDR/RwmtU0UeB2lJW/kJW8JOQD3RZFFk0lbaVMv9lUBMwP5BZ8Ihg 9TCrAN0SflJOsBKhp7Bl8NNQ0xB14krXsWdzUpgxFUCaQO4wmjFQQRYwxZggUMO4ED8VMFGTUONS UlBxmCAs594wnXCdshewnZKNBJAZBf+e0N20ElBU8d3mY2CeYGNg/2dAViJT4FZBZvAbMlsQEvJF ZvC2HwBWVEoTUOl/4GHT0pVwHPBnkGfwHrFe5+FQHdBnMG0to3BpMGkwc2gQo1BKJafQlZIc0Smb ppDNcDof4VuwsVZv0L6RXCMq0KvSbHD+sDAkAf/m0iZwI1JssSDBdDCqkuWS/xrwBlS5sG5QBnCM kAaRIwH/anLDUiXSBpCokP9QcbBr0D8oEvYRjCB7QSYQJ1Elrf8R4Iwg6qD2IGcBWrAmEGNw/7ow qtJ7EiMw7BIokiixIgG/KXEiASQS5bJs0MMRTlwSHzfSOTFtwebQqJAWY/8DLsMssPJ2h0XlLACj JCU58nLybp7aLkNoUGn4LrhwXrfQIfDwaUGKPXewiUU4j2qx8aG40HhQWGv/EdEGYTFwMXAxsAZw 5TI7EPurUPWxOYcwiTCrUCgSO9H+NbHwcvCG8HMx+AP4kLuQ//lQu3JwlH0wvJKF0PoQfTD/vFGA Ab0y+TJycbyhgvDBcf/t4eXResOp0KzRIMGFsF6Q/6ox6CNh0K1yqPIoEmfx5oH/YdDr0CiydHGv wagxraEAkv8AMq0SsHLAkrHR7yG/8DGw+QJQQwh6MIgQejITMBuwfzsQPxHWgAWBx1GIYAIgDNeJ cLmQiTCjP+ApihAEsM9AsJfRfGHWkRgqXyCMIf8a8BrwjHJ+lAdQInBDc8wBn05RCAMIllfRzUG3 Vs1QP82yzbPOIUY0E5CQUlRC/UcUG89DkNKQ0kf00FLRULtLEEkdc4X1DeVK8F6PQORfXs+BdkYP EODwT1L/WvShcYhl1HLVEdUioUN74Osa8AdQUY2gThJQJlDT0NejcNMQkdBbzwBrotDI0J9pEJgQ URBpEFJSpChSdLtQMoyzLLgQjhKM9yzbUO+dcNsyU3KdUTGe0RkFn7L9n7KtGkGRMhpzGoEadN5y +96QVvDHGyNXUroQptCAshwzRqHQTXBYUAohTBIl4RE+0KJgMUslkCohrzUfsV8aH+AeX8zQHjAc VaGCGI0pUBI+11JbsDoT4F7/IFCu0MJSwvCo0mHSJBJikPNikawgKc4h4l6D/ZD9kP/sNCOxYANt siiSYdIpMWTD/zsy5ZJmE2ZBKFK50iQS5tD/J7DGkCZQntJjEGOSJ7Bikv9jEJnwIzHmgebQoHJd cuvQn6CUJBG6Y+WUrHBQSq7QH8Kw5DGsgKkhoVM9F2OTtFK40FZ7aXCISS0Q8MMkBDUtdmqUbLKm cjcsUvMQ8xC7L2G30MpNAkduoDnDKIhFLZhakWanUGyyeXM6Ev+rkEERMaFt0W5hq9AyUTmh/zKy 5fAzEjvwOPA48F6QAXL/shI0kbIB71BwUHBQNtD3lP9xcXGBb/BxcjRxcyGt8rxS/3myJRTm0P6w MfEnwShx6MG9XNCKKmAlYbnSZNE+/hJxPHM1Dz5k0KFwsrLuv3cBsnKxsHbS/7HAYDE6UP/EEPxw /bB48njTXoFekL/wUf+yYwhEAiAEelMM3xMw1TBfMVNAP4AQxtLHcud7skFQsPBpNcjw2xF84v9u wXxwfLAH8d0gkEBDgX4yuxJQfpNFBzJ/cl1QUQfj53+QitCK0HRSzJLhcIEw/+Ly4xAe0AzQvZLN 9EbwgnT/zxAK8ILwgZC9kZYAR2LPgH/SIdIQh3DSEoQU0FCBkLj+Tkk0wZaGNtGVSEGHcs9w8NpW NELD8ILwlTDS8P8Pkog0EDDUkYmETWPVMBFT/cpgJZOw39CIsgqQi3LX0PuX0JEwxlAgUodQMY4A LSH/jPLJVMnWjNeMQVNQU1JTUP+PEctA5wDf4FWBVXLMd1Wh7VVyrxplVnJtVoZ7YX2Qn88RV4FW kJQwi1DPNdAQ/5QwRJAJMB8QgTCLUBNwTBL/09KLUOEwWXDR8lgQHjCXEf+XIeBSWFBakItQl3Dj MJYQv1gQ/RD/UP9Q5rDUM0YGcP9dUBJQmfCiMWIDKHIikCJQ+e/wNmvWMf5jZNAxsAaS/2HQkTCh 0yohZVI7EOax2KH/JnBlUtcxKEGhcl1xQoEkEv+TsJ7Q2vKTsJOwmRLVUmNx/9thoFKykl1yYpCZ El1QnNL/oRSZ8GMwZVLmkiJQ/tCi8M3Z8zXeUV2B9l5qEi7QlFZzLXDK88A5RzNg4EUUcxVv9JBp 1vIwMzjQ/bCzWi30pzL1akL09GGRXnBa83CxMmLwsFd3LxLzEFlv//6wsRBc0Pbw9vCptCZxbkX/ MrADsnRTKSF30TgAAaPuMPfukHOQmpJN7wA0QW/w6RJ/+JAzkgFQNLDo0HFQ+VAt/3Bh/BK1sO4w XpD+knQQKVD/XxEhwGKB2DJeUv2wmLFCwPnYIw0+/1D+0KGwmREjIfehcu4yoXDvkWB7ICFhs5D/ YZLnkv6SM1CrUT3DbrBc0J/wkjzwXrKe0FrQZAyIsc4cifLGcBxQSylNkAKQHXpQIj5ht7Dz0QiD GN+5MGvwp/Cn8Gvwam3gQQF/uTBCMk5wRDIfcBvQYnE5a0MS9tQwu4BKirB/kHL9REBOCFC8UghQ RLNX4b1Q94EyHvBHMjpF4EegCgEK0P8KcFtwC3KBkBOQWTAe0L1x/7+Gg6P8NoR0hRNIhUk0wtIr wdjAcNlFIE7BULlSAJdKND6wLTM+7G4pRlCXcI6IAViyWHH/EEMQ0sVyERAQ0hEzTCOC8N9PcEkQ W5CL0M7w54yByNL/yDNRoI0DUlQtEIzTyUME8P8ElMryBBCPsMsyFvBTUAQQ/Ocoy/BC8k7wVVaR c80inxqFknNWIZOwVdAqKRLx/1djExDyckwSS9BPkEUxgSD/vOETUFh0WJBPUJdwl3BZEP+V8B7w lnCUMJSwWFBa0FhQ4w6y0DFCEkLR0ESQD5D/1/Rdct2TXsFkUddiXYGxU/5B1FIjcqGwu7Ci8KGw XVD/KLKbcjsQ7zBlU2GBoXAiEf+jYaFSoXB20l2Q5zJlUV5Av6NgE0CbgBrg7AGfsS3ZkvehUhPy ohDOmWPb0HcSXXLf2JJn8hVSI/KykT6ydN60/97y1tBk0NvQYpBdkE4w4DB/arYwkDCSLJAdEi3U apR5dHcmjCAkKtDk0C5UvLx7vDDApoCnQR5QeCABLFhzHlCo8LvkgHt6/nM6UKLwbnJ2Mp3zngUx sP9OMLpwJnInEl7QXTAr0WGhv3SRK+F10N8QovCYUU7oUr/p8T2B6ZLo8D1w6pAMM8H/XpA9cCrQ q3JhsSkio8Gvsv+g896AGYHfEOzSMbBlUmMw/d10LynhsvKyku8yGHLvML/G8Mbw2zFjYWMw7ZFC ePDvq5E3wery8PMpePBdMHgSc6OQntAqJXpQLjDzMEy/LqOVcJVwlpCWkE2QhfOBh3pQuDAmoGMY pCCn8MRoPeEwqkFpOkBuoP87YDrAYUCRIX8QgDL2MisS/38y9zL3MrmygBD4cDPy9fD/+HC8lPjY RXC+EL3UStD7EP/6dE+wg5C9kJUQvVBZkDVx/7+BRzKDkEsQw5D79sBSwHD8G1vBUEfyObQ6NEl0 vZB5RlDZVkrQwpT81PuQjmAt0TUSOsQRh8Ax/TxwKw6gxMZMAwIyArRNEHSmEFiw8MRgi4Fbsgn9 CwAojJEGAQWxyUJAggUk68llBbMkQlDFbYAGAVLw/8gQBBAG1AewB/GMQEMgbvD+LX5wfnBVEAmx VcCR4X4Qf0T19oFWclbwCvDGsC4w6P4gRtDGMsYSifPRYEwhWtD50dCVTgxy0HCLUZSBT3DnWJA9 UJZw8TkNsE+QWRAHD5DHUIfwjjGwMdHFaWA5w/FGdkrQkAxw2pfQwFKZM9vAPbuSMzH/EyG7skyy m3BM8U1h9tTUUf8aYBrCGoV/EGTQGFay8RIj/xnwFhJmEqFSXVChcNbQu7BPEhJNstqV3CGUUruw k95SfxBRshuSf7AQEsGykv8psFPUXZBTkLuw99D3MRSB/6LwGjKgcmTQG3Ki8BRxE0Hz7xJdkPdi 4tRqtqbSHZSR4dd7BilacO1F4dYZ5NCbd+JQ4lA3bxb+a6jwW9Co8OTw4lBs0OBw/1twqnBh0ZxD ZJJiUJ3UXbb3IvCiUlHScdbBV1L3UV+BZ1WyTLG7oZFSmHAkUk636eFhkJqwTphAmqBOdLK7c9An MTli0mMxo8NQFIH/szKycOww77KjcRRBTPHvIb0T8Tkp9GVQsnDb0FH3QPd3ITKx7yGNn4GfkJVQ K7L9I1DsYwEjsusydRAm0HPR72NCmgEb8YqAOp9w8lBnUPzwOZUwlbA8cDxw01DG8Bku8SkrLiF7 4SXnIKcIEDBwjFAGMfTRQWzxhd6gTVqw7knNRQiw/whwf7D2MFNQvJL2UFRwuhD7u3G7wE73cruw M7H4APhhp25RNME0sLVWNNdS+1BfvtCBkL7Q+hCCEJWUQBXzhTCDkJ1nNtCLsJeQD5D/vVDTsDdw +1KDcDfU+9L72P05Utg5o4SU/vQ7EoGQhfTu34ZjwHD/E2sNsP8ww5Dw+lq4UsEQhPCDkHjwfzyw lNAA8cTliPPFY0gRGcwROgNyl7DXXggQBBB/BLOMQYySQNdApQX4QpClfiAH0kQQyBB+cn8SfzEk 8saAA+ckztCRtM7QunC7kvCfAAlGwYGSRtDHlyD/bEDSoYJygtbHEtGQPXLEkB+IEA3wDfAMcNCQ dk7y0j1JkCwhSpEtlbCEUv1LUFVKIZZwDFEMoUvQS3BzhNBLcJdOh1AMcYeiVvxyUhnwiBCKsFGy 27Kgcv+6kUyA94FV8lGyGLKgcpOw/9qS7zBuEFfykTCTsJ/wZ1D/Z1CKdBoS3JTf0mVQ99CNsv9T ck2R3qHvMN/Si9KcsHAQ//fQbhBU8ruTMgG7sFRwnLD/kHIpsAhwj9ShcGCybhC7sP+hsLIQmRIa lJ6wV1LdtAkwH6Q0WJpZeOLUIFAGLcT+IOJwWXbk0B8y4lAgUB+Q/x5QqNCosJU2H1Cq8SKB6/D/ 67CZMaJjIvKiUasBmhLr8O/cUhpREsBTwXFuwVTxZUH/ZpD4cJyS9hBgktQyX5XUAf/fMtQ4FHJU cLJwYLKfcmVRv5ti7cCjYE7BoBJlUBAaYf+gdEzykLHcgGaBnBKfcbMB/vAJoICgzoBngdrw3BBd kP/UUtTQJtDocCRSFFEUodvQA2dyGDCNLRYQAAAAJgYPACIgV014RkMBpnCnQac0pnBAJadCIKZw vNynMLz88AcAYwyjkGqQo3CjcO9I8KmSoFCjcM/N4M6B1dB/zBC7wPUwB7CWcOEw9LDLQEWJQYk9 J+VARfwOTm2R9sH2EFRw9lC8cP9xEbyB9jBuEE1QubRv043h/7xwU1A0sK8RcONw0HES0ND/czA3 9PqxvkNzMPqy+tI1kNnT8DJGN1P7YF7TsPtW/3QQdBC/MHQQ/VA4UnixN2D+UsCz/ON40EtwvZDD MXkh//44dhS/MACQOjb9cL8wwxH/wgE2sP1wAFJ50ElRemd7FP8/csew9/D1UH6QQHS7NkCSYckx JIMgpUJhQlEgnUJUpM+ARwBCoCSECyE/vdC90PRQvVG9Yb1xIKb/C+DPQYGQgnGCIYJwgnDz4P+C 1A7wwFfTIdGQDtDBlIPUhUmQTcKhbykTPksxScMiQlWGAEJ2S2BGO4dQSfFODFDQkNBwdEpfSPDQ cDTUsnJzkviywF6fP9DT0MfQIPDk8DhrU5D8lFb2EK3RMgHb0J/wU5A/4DD3UIgQx1IS0JQwGGf6 tMdgTp/wbhCc8fgBn/DPKrSqUu9QbhDVWvYQCHD/9hCKMtURjWOcccukoiNlcp+ftRMh9hBU8sgy OGfO0Pz3XlNQnLFuwTLwMvAS0P9NMvfRM+FvsTPhyzBV0BMy/2WwZvJWtBMyTPJV0Mkw4hIBHfTV XtReFmeaDnNZuOISHlAFKcQk/Ks9WFjk0OTQIJDicB+QH+SylTgfUCEQmTLlHOZ+HOZwIvDlEZrF IvAtUMXeGOuwmhEIQE+APsmSx3L/oVLHlMmREyDbAJ9h25DHkv9SkJIyYLJWUGDRZqGbssyS/8oy 23KisdpB23KcERLAyaH/nHLcEt8y25HgQt1BYLKhUf/hY5ISVFLaManBqlCgUKBR/2bBkpBoEJJw JNDt8lKSiNLroFAYMO/1oC3zcO9Qo3D3qhKjcOJyEeJC4WMIcQhgYEkPTs1JrDCr0UX4ykmqq8Ew sPSwMTCsUPoPTaBFcBBusTIBNLD5Mf5ah/CvsG5wydRwNFNQU1DfcNJw1K/Sr3DFc1Y11XIh/TZS +fmBctI2sLHwc5CyE8/GIu6DDhD7UPpeeNB0Ev+zdHR0/3D9cLGSdBD7ELRw/zvxOgW2drgRdkPt UP1x/efHs7L90/5Ca11ntHD7EP6PPUMMMHpxeyEPcD9wNXD/e7BMcH6wuvhCcbwhvLW84P/4QX6w +DO9Yb5wvnC+UL3x4BiEFGQUC3IlICLQ/yLQbDALUL+S+xP7AoMjL1H+HfwX/MF50A6zDYH88nnQ v0mQSZB5sDxww7AAEDXDgTf+0sPQw9CXh0D/oXdKvzmQulAN8EuQc9BzkV6H8H9I8K+wxjDPEMYy AVTPEBjmXwJQP9AYY9CUkFLQ8BfHkuYQ5hFCx1AXa7SOWsdQbvDaEUZab5jw3Bdnx1AqsK6QtdEh KrDPkTGT4yqy0PDWWnDQz1X/VONlcjKxoSHeFFQyizKdEP+dEG7wCZFwAY+yn/Az0lOQ+3DQCZFG U1JV0DLwyTAJ8v9TkDPSzzJTUNB0yzDHktCy/1RxkGOdEMlQyTAFEFhY1BAbJ1AbUFgPCdXyV3NH 8jEecA1KHTDV2Jjw1tDkUVLVcPZil3IdlJdyCURAaTGZEAclBiHfIRAtUJkQmZAUcyktUC1Q5KQY LVAoJdnQoFALUPdIUAtQVFBykELHogNCrgD/FmELUIZQF5PQwRdSC1Df0f8W4hZhF3Df06FhSPDa 8dwC/cmhk65AGePfcdwi4AIaIP8ag6FwFvNgwwL0DZTe9Buy/xZy2rJU8lRQKfBlUB+RkAL/kiIZ w6YwpBCpEJsxiyCI4T/isqlzGgLhYk5hEpAvUkAOUuxNy03nkMu2Seewq9CIq+PVUO3nAd+IMjLw NFAyUDTRUu5wslT9h/CWJYFIcDSyrzFwQa8Vn3CncXI4ETghcjBUQu00/7Cys7Bz0HFQ7nBucOYQ xZK/7nKykrKws1CzEu9zWyv0/3QQeXDDsIXQxDB00jgxOKX/O3DxlDoU8lB5cO1QdjQ6dH+zsDcQ O5S2dDjw9NA5cVK/SxA9UnnQSnA2cPZRZ4Bw/70x94e8UDN0M1G+QPljvnCf+bC+UPmwySC+UGMQ +jCva/BrkINQatAzhmBSJVHxSMBSTC1HMMGx/UL8AUf9MjcV/MEqIQr+ISteJWswhVL1MGqw8Tyg Pv9J8LiwwxDDEEsQSfBLcoc0/3lweXDzMHlw8JLwknPQhnD9KhFWsrDucK+wo5Am8m5w/8TwSHDE 0BdwsjBuMBdwbjD/sjDrMAtQGlLaMqNwG/OpwB/IAcpQxxAEcts0Wmu9/nvJMECS0PBBEMhQyhEe 4v8LYAdArwFu0dpi3+NDN0MC/kIZkh11QyOc8gmScNBGEr+vFAcQPlRucAtSBxFaU5D/JTAG8kXy 6lJuMBfRCsEKsv/qUhawzzKc8QnlEtCY8Ftwk0sSW3B6d1xw9mZLkfGX4HN5b8bSXBAQEFvQ6DVv NlvhN02BxxAFUK8FUBLQTjLT8NVOQGYS0Dz1YtOwEtDTsNOws1qBE9AGJScpJyUT0G8UMFAwUHRQ 8SFQ81EiIf8V0MmxrSA+YRixF2HQ8Onx/60gJUAZgQtQUlGGQRZQU3L/GLKGUBfSU3JT8hlyGXJV FP8+UicQPnIXsgtRPWFW0kjzv1eB6zBUchdwcNACMWPHMf1wIbQMYz4yVtJFclRzSULvVyVJEz5C VQNKa+EhEIFwf5pwXVTMEMfxGkNDEs/RTgBxVnFaL1YtVkjrUcojYexRJBCpLkXn0OhQlpBIj0BJ UP+OQa6S6rBucq1wKrFzge70/+8QYhKvsScBYxDrNusxcIG/c3HtYbOwsPBxsCkRFbiw6JVK+C8h OmKhPNLucD/rMOYQbjAlscXjKzVeG/fGgHQhs1FjZ9DsUPYQ9hD/KFC6cLPSdHO0Iy20dTS4UP/w 0AAQdNCzsC9W8rKwcvN2z7gUdVItsOxwsDE5cIZw/AoZ7HDGML7w+NAysr0Q/oT4QW8yNBD5Um/y +bIVkHRjFPnQg3DANUE1UCn+JbIwqVCmMDYRxKEmkCZQOSZQTCn1cjiQ/fElS5E4464xz6lB8T0W UH9osvYQhdBosjoQ9hA6UBMgOvI18zV1sNIx7LAtdjB5kNnsQXa58KD/tIHzEu1Q7VAAcDxwshCp Mf+jgIvBNbCjsKFwxPCF0K+wz4ZQ5LA1sKQQrTHrMO8Q/+LSqVF7BKnkIaJAQ0LxP+L/GkGdED9x A+ADwcmS3tKbcK/H8RZAFuHicTkaMTqp8P8WUBZQf1Kp8NuQfNLmECcQ/wOwsjAYstuQsjDbkEdR VqK/NkEZchwyf/F8oRZQMRpj/4EzA+GD8X+BgtIXkn+S25A/VTMYhRYxFyOukMyRRs01k0BBhxKs h2KLAD2rOcwgPYuH4YhUiFCKOfRqNYkQaZlgiSGJsdkg7dkgNZkQ2HAoimMUsYrjU4qQipAHKb7w xflAGP+L8NmQjDSMEjVwjPP6IYvz/hiqsOLShbJHUli0U/FT4f9cOFX0kHNVJVPSkHbE8FpS/2Fw YxBjUmFyYxInEOnSxPD/V7JSMpRUVHLp8lLyUxJSMn+UNJZylFiUdZDjl7KRdKZx+gAUQgj6sPqw FdAI6iVdMEqkIDHK8OJSfbRGMQxA0SBacF5fUAwzX2Ff0AxS55Dn0T3l+CzlJLvQIxBg0BKQYPD/ XtCukGFUxVMlo2cTsuHvEH+e8jxwKFAmU2PDrVLsVjsWW7iwufDQbeAxri3/oZCmMHPwqfAlUD2R xWHE8N940CVQKpjukiszYwBw9hD+VbWAs0EAcGjyLFSztPAy/ylyLZLwULfSbXA7MC408ND/LrS0 cPBQL1YuVC2w8JAAEOfD0DpQ9TAqHbHwJpA0c/+qpr5hvnL50DVwv1C/UPnQB/nQIRA1UEIMYgxB 8giZECEENZDmEHQwORD/AFCyECZQJpAmcMTQNfA5cH850ikQw5IAUFPUNhA2EBLbdQHDMFbDwMQA SsOwsLBB/tCxLbIt0rGAKcmxkLEpshCPJXWQdpD/8xF2pTtSd7TwkHaQ7HB4Uu1zcCqZoHNgKfyQ tLB6UP/ksHQQxFAD0srSC1AmcCZw9+8QfvQ/8Tq29HsSdDCaMP45fGN7kuXyGjK4tiJVCQD/ogA/ YX74fxJ/8nQQf5J/9P+BcoFUhhS89oOXPwAaIYQz/77jg9K/1PYQVDF/oH+DwFO/fqFVFD1RU+Pb kMwQbPqB7YoSSonCicGKicGIUNVwf4iViEOHksUSh5KI0ohQjP+IoMYh1/CHc8bCxSPosMdS/+bQ mTJRsPqwi/D6sovwrDDPFDCL8FGw2FDmIMmQ+tH3mUD64PWgGHpwUxSO9ZFF/8uVl22R15IjlnIm kFhyV5T/wfLCEBlyUlKiMpaWlpTPE/+WRpZHlhGWZFPBlnKRUtM6H9LxU8EhEKzwNVBiEIP/cUH5 khWQrDBdMF0wmhHkAQPkEGDwSTWzYpJiKG9eLF9AWptwTl4h57ImNQUt2DDtTdBxXpNemxCTQqFI 0f9hQiejnfLsEjxydrKj9O+wf/Zw7xErACqidqPscCiSGf5XwJBuMmXQMBI8cFQSe/HwNY4xjaGA dAHisD0Q/+KwNhBhcK4xJ6HBUn8wrpD/7vCkMCtS77AoUGj1pkDhoZ/v8eHipcJpofBQdkYxMP8t sDswajPjoy408LIvlPJS3+1QMVAucjFQtDFKMbBpEP8hsKyxcUCsgHECrIDVIayyjyEQrTCs0K0R DCEIrRCd6HIg6ICtAazwxhghsJ8hsHHTcmOkUKRQ0TU6Ef46dZB10HXSdnA6cIP0sFJ/sNL/8P/w sLDs0rCwsZDThbHBs+2jkSmQKXXQ/3gSK5Da8e7hdpEvIbKTPCGXAJGgQjzhtkbgTip6QX9z0HQQ AFBYUCaQYxBCEUL9YxD3KsFhcLb0t5by9n4w/03wBdAGUCHzuaG6sreUFhD/e7EI4ZoyFhBeFH1S vjSCs//35YQ095QXlITWFlIWMoPS/4NQf5G/g4TzVCO/1sA3VEH//ThUlFWTRaJKwV7QEpCa8PBx UnJW/5D/cJrwmvDg1GLUXrTYwAABEpDH/3AAcv+xVjBOAZBe0P//kF7R/wEk8Hxw2RAA0v/yLJJa AHADUVoi0M499Iw1BBCsBCEEMgRQA/A/BpAEUAaQBDKIMMYQSi3/XNC6cEcxUmSQqP1Jj3WQaP+R R822XDSRdq+SkPiYVMuU/1I0DLXMBZFR1IOWcq+Sr5H/1AbUYw4XR0HJkJxwbrBgcPKjNIFiFBGV 1SHVMXDjhsURIV8QsmZvYtfQZxN0m1Bf0GhBI9DXUHDoYrFm1zCzAIEn8SgB/5WSV7GdgyeUn/Ym MCXU2xanaDBiUilSOlvlUEtzIGAZbSUROmVQbhC2f7RhKFAltCZyVBKOUD0QbP4tOPA1sKHSNhBk Mp5VK0CxYkJel1KuEGf0+ith/x3QK/HiBSkQLBJkkHaSZJL/aXMtoGpjLRAuEKfSKbDkcxhvXGdk cOVSdUZMtiXbkHHQIuiDItkErTE+CF0Q6DJxUHCQcJDmJOmLsEgtJPIGUUGZ0DWwf7SQwhAZsa5B OrI5ULFw084xsbAm8Cbw8zHqsHVQP4KT7AI6gez27PGxIELT7jXtcimysdKQsmTu6O/E/+9mnqGk UPAxPMG50JnQ3pD/ofBYUHIyn7CjsGGQvjLbkv8s0ZpC9YSiAffWfjBB8Efw/4QSJ/Qv8z/DMTS5 svXRhUP/VbS+VjOe+bq+FPo0VNT6FP/9mFS0/hX74/zzOQL9jUj0/0WySdFKwU+STrAAcABQmvD/ S/BOsE6wAFBK8ABwAHCc8IFg0A5KklYPSgGx35zhnPA8sTuA2MBWPnQ9UP9PsDuyAHBPsAGQxnDC 0sLQ3wRQxnAEEgPywtEtQPLGUPzuQZrQT9B+MAyVlEORGP8MdQxqCedE2NE2zXcQZNLn/9Jz1AjS B0k70wNlcEp0bhD/zjJKc/HARyVLEUvBgnDHcMbtTODYAEGrQWBQYFDUKDFgkIqIAD2JEE3w0Ylw STEnJUApEPBfMADTarBmbmKQZjKQT4FOWk/wFJDSbrlQUrJqTzDXEABwlGMA/xUhYvHaYRVQFTAW Us50FnT/YxAW9J4Rn2B2o2IR7sHckuHl8FM+Kx0iEG4QwJD+8d5Bc9CusK6wfxKuEOoQ/bZy1tqC God0ELYQLTJ8EP9mkhc04LCeMBvwcpBndGgS/+GypTB5sCxQ4bIeUm4QpXM/4WRpwaZyIJLl8KUQ fGt/XTCfsHkwfBDckuYQIjBbjmcbUOlwrJEMhBDKEN/IMJjw6XCY8KvRFHFwjfDv1VCNUIqwxnBp TcBOoWCxzSUAKcgwtXKOLcIQpFCTtnLqcm8pJzEt9GLj/ydwdZDAsjDx+8F1UOyUKLi/ddBi0imy sbCyEnWQ+p7C/xjgnqGekiGyK1MsIyxQGrD/23Cj0njQeTAbULYQfzDCEPd1UMIQcZE9c/KQ8J3w 27D/e3J80vNVt2F0EG3wfNLgEv+71PfWVbB/8X/iJ+OAcruU//eQGrC+uPg6hPTUcL7Rf2T/NqL6 AzU2cdIG0TajwTQ3lP/8F79BOLb51jY2cpWGY5VQ/xUwfHACkXfDPBAAcDwxPiH/P3L/kpzwh5Al cIbwPXE9gX//kHiyPnL/cXrhArAAcPX+YgKwxnBgcWCBQPCZ8ARU9wQSjhCOEIyaAUDQ/tA8EP/G UDgUDbMawUMcy3iYUtKS/9KQRHgJtEN+lpNGytKFCzT/gvjTNq+S0vLTc9QHSpLUVZtMQ9JTTgPQ mxCRXtiQw5wQnBBoOQYxnFCJUgjLSezYoZFiT1YIDVJPEyHzbtFqYo9PoGbRbk9QFLBvRYkAYosw FHcTjIBz+NNu1HhBuHBRMI1RFmD/FWFRco4YonDfkq4yFnOfgj/aI6JwFzBUkt1RIgFsJWuqUKZw W6DAZ91wWdFa/tksYVtwtbBsEN5w8VCS0r9sEMEyj1JXMi6w37NKuxD8CiHecJLRViExErrwWXLv U/EsYK6AkoBC7vId0GaQ/1oSLFBbcttwl7SXFCswrhIi1izgRggl5zKuOd1a0V8iEK3QpTAqtSFg EM/IMMLwyXHIgSgl6XCZUO9gENYwmVBfkRDIMJtwyXCZJHKkFJ0QrPAIHbwSv+nQW3DqEBcw6lJb cJCxofzUMWMQnxLrUieytdLsEp+w8OySKNTi8LCw8zknEf+xoe2RsaHuUOsQHNPwImcC/xxi78Oz caNj6hBUEvoQ6ZL/j5JbcOEwbzJYcLrw8bC2kv/mgOaA87e3ZVWwbBJrtFWwAbe0FhAAACYGDwAA IiBXTUZDAa+pMKoBqfSpMECqAiCpMIS8vKnwvPwHAKiS72uyqJb1slfxMbswuzIxNv9tVlWwtbHA w3SUb5djoDOn/8C0+/T60vmUdjY2VrMXv8V//PX9JTpyODJzlmnwFfC0/1MgUSA+QTtQ1tAD0LcS AnH5O+PcfwKQyZLGcMdw/xD/PXDFksYy/5H/A3eyQFHCwZ9BEEDwBRDWsAUQMUp78DctEH0ywpAx CCF3UBhn/Lx7xlB3UEV5DUjLiQtU/8GTgIK858x00h3SDtJHSxL/0lbSkkrX0AVLlktShzpKkF9b cEqTFaFBsE4QDv7QVmhuXo+KoFqJ0NgwicJFT7CxatJqizCM0AEUkJFm9G4Vc/RgcvNysGqLsFCQ 8hvKgYswshSgUEBqNXfzy1DJ0WrVjQnMclLZ2oH92nFaFzLNso6SUzIWlBzR/leQskqQGRBm0JGQ kZBm0P/wUGf0LnBaNNuU3DAasN9Qf6XSG9DekN6SY/J+sc/gJe/fkPCSFpDfUPFqIenQJdDwKyVM KaYSlhIt8ByU/2gy4TDqEGgTHMFZ0uBwWLCXmpBfEBKwgySAHIPXwPgcEEbbsNtwSpBh0F5Q/Akh fVCbMCVwQTBfMJlQ/18wmxJgUF+w2bJgEF7wI/Deg+fBYDDpUNuTDNkwWrD/dNCS8GHxFyGeMSZh nrBjcL+fM59D6tD8sWyAZAVV7KF34vDs1uywFOsgJ2FjcNLz4KEm0NEt6xAYMhhQ11D/4ZKjctdQ GlEaAR9wVzKAMN9TtBaQWJJiMhwzXuFxLoHf4XIucOcgajKndvBWQWwR/1hg5mRsA+ZS5tbzVG2S MjK/MbSvtmzR9AHrsG2ROlWw/6+SbtP4R23TcWDsYm3EdOP/sJX7p3N17iSxJXVy/LM4pv82J/02 c5S10zrBtnE+QVFQnwPSQbBBsP8QO3K7eztQ8wXwmzDGHLiQA9A88AGQ7z4UApK5sfUASrlQQRJB EM8F8EDwQhBBEO89X/B9EIctMDJyNhYXY5t3ffL/QlQN00LD/TQnsFqwRvH9RP+0g1qwv1ZCtoMa hNYO1YYE//2pD1jBVQ5jiDZIWogzgCGPw1OIBMTEPaBOL06JEIFPsC1aLFZwWoqwQAUxs2oUcwTT dxcE0MtQBVQ0jIHxctFgchJ38nKMsMkxZjDTYrJeExBQ8HFWbtQ8QTuS9ZBzjWE7MHTvFYuN0haW j9NWVxAKlBwx/lKQshiQGJB00NCQkZCR0P+R0FOykBLOMhxSLrANcg00/1RR10AOgc5S01JuUNRQ kvL9lPDQWILTQVPSzZLHcOkR/j0tMBtRG8HUUFiwJlEVgd9pUqcwVjDUUNkw6PSAX4OD9JDX8SCD IKMg2FDHOzAt8OKxUq8xLnBYcPMj8COASSkVkCQwnVCdUN9e8BXSJDAVkJvRJV7w2xKXX9AjsJsx HF6y5xidmltTcZZhsKHAnwA1Y3AU5jafcOAwEjrv8t6UoFCNW3BV34ehMhQ+0eCh8xxQHJTQMSew otjVcORS/wzTjyNXcZSBHtTO8DFwEfH3zUjkYqMBGGigDoFrsjGT/6wl6pDos6cDa/Iik+yEM8P/ rtItcNRQV9JstuvyM5Mkgv/qwSRyr5Sw8ibxsOQnAmOh/yh1tCft1rV3s0U5Mjhy+th/8Hk5Ry1c OnN3ITsQtnDV9z5AUWA+QlpM0D9QvJB6sP9BMPawmVC4UEHwuLF64HtB77aw9ZC40reQzUDlfRD2 sH99EJtwu5C7kqzwN5OABkr/d3C3kPawOtD5UoWTvUaGJf+Elv3SgBF+QvvHNTrB1oVa/0c8xFmD 58FWSpLEFYdjSpXnPYRLaEtDk1IDsMsQi/ABT1DqTWc5BS3kpixPMMtSVXtA9FZBI1kF8DR7BnAG cDNB4HtdjJA1y6GM8AewkgdgWuQORjIQ7UEx0LnQt5D/UTB6sAkwd1AIsHdQRJJFFH8JUgiwUlHM w0ZWU1NZoFb3C5Jc8NBSWpGB0FEMgVGU/44ajfjOUkqUmRAOcuTQDrI/lHMRIZTw0rSVMLuQ6CDh EVDHGKYUbnARUBgw/xFwEzDZMF/wXZBOMl2QX9An2nKZcJzQCCkT8KQk5MQoFDClII1QFJCAMJmR 0M8xorBdkIUQXpD/9rD0kJ1QXpBe8F/QYBCdMP9gMBWQ9JBf8F/QXrJTEl8Q+xVwXtEMTZBscmHQ W3CV8sHjcVJ2Tq8tn5AaEr+icFXS3lRWk+/goSBOXLAdZJFOoHKhERtBVEI0//tg7+DeYCSBkpDc UKKy4dT/CrANUHdwzTDMsgjSfpJuUPsO8b/CTujwvBAJEQlhCTD/zTDNMArzDYJLwWtVa0WolP9t 0qc2bZbpNmyW6TWtha7T/21GKIEmcrCYcBViBSZSYvT/dNJxMPH1ceTvwxpwsxgrcv8qviz4vxa0 lHVRtWOytETyFy8wjVD1kJIvIF44b/A4a+9FuJFD4bkQehA2L7cgbSFSeuJ6wc5B/7lQ9rD2sBWw MFEVobuQEVDf9vC1UfxDb5W1Qa0yYbuQ//ewvdp+NYfjN1O+LTmZNYn/NvimMP3RtKECEDb2hhaG 2H93vQEqAuTF6T6aiLD1sC4ATnBeT14EManCScjQDFJnPYvwQPO+e0EQQRBBkH0yfTF/QhBzQnAG cFN/QnBCcQVAb08HEC/wQ1Av8HFOu4Du8j27EDBGu4DH4BRwvNH2TvKQ9vAygoCAg4FW8nI/NNJa 8kSxCOEe0hTQt07/kNHRQJfB0BCR0AwyxdBccf+Nw4UXSOGN0o3yjfEvYI6i94aiDuAvYdbzAYew MXCNUP+F1Aiw0zC8EPcwu/C70Luwc/dQEXAqKVOwu5BNkIWiFBFQZAwp2eAhTXAv2TD0kE8wTzKl nMAcxf4kT9FP4BRhpjDQkOTw5rD/nhCVMLvQidAVcBdy2tCdMP/aElHwFdAwkVLlF5CLMROg8hhN ckMITZCoUpow3FD/xdAMs5ZhI7BY0FhyWDJYMf80AvllmNFXoJNBGzCTcxtA/1giAuF10pRRdcGe cKMUzZL/znDMcoHWvBC8EPbw6PBaMOeW8thwutDvQfbwltKWsu+8MSABzvJZ8Vqm1CK0q9P/X4Tp ZOsFrtJe0mP2r7NkBv+v4+1Wm/VfwWH0J7PexSe6/69U8HizOO/zZsct97JD+pD/LPjcUBpwvxZw 9Db0M9i8MhZyP4G2cPYH4F4XZ5xZb/MwuVC4sBBK9RD87kn1EPUQMRAxEPPQujA/udC4kDBSu7C7 sLpxLc3+NbwQb7Rz2vxSv9L28L00//5WM/L6lPq1OojF43NWvTb/eJZyGXXDsXZzWgLUw1Y9mf8+ hJOBtNjFMsbxCWC2gt1BJ7ayx3Av8A5Ox/AlNcxvXgVSfRBWf31RuKHWdrjjuVZ1ueFTfiC6IJB/ dH9UfSE0c0MQ/LNe89Av8PYQ9vA/kAkw/LRSp5K78cxhWjBbsPag/9hwp5K8ELzxlwGYUoCX/GHf 8pDvkB1x0MGD8FzRYL/B+dAUfGfHUlw0iFDBNIW0d1owSzCHWLXzAMMhMRCthD1KqgA5STEo9GD6 JJfwU75hxHCCtMS0gfT/9vCJNG6wFXAVcE4wF3BusB1PUIXagTCwi7DGIMWfx+CMAcfQf9AKsNZS 0ZD/XxAPEvKQiTAWshdS9JDZcJ8y8MmyFXDZ0Y2hQwyKkJ9NkNeQ6PAY0k6QhhAVMP/UMBjQlHDk NNZQefDqcJQS/1ewk9IYspLy3rNxpZMQkxD/1DDPk/pB+jFxp9UwlHCEMP8g8pXUCNCWmPbw9zD3 MBJwV5dwiTDzUK1uICmX0K64Oa0181DzUIkSMe3h/1ryXLAKEOgz6CfnOCG1meX/YDVhhenSXzDr 8pvT64jsQ/+e2CP27tYnsmIU77Ltdu+5/1ZioUFmsqDzK0kqt/Gl4Jo/o7biPS6hb1PygQkwe3P0 vHf1kDExwTHQMPBtMr9t0DEwa9D1sm4UqlExjVD/iTA00Wljcrymt2/jcnj6kv85cnMa+pA8UDf3 /Oml+LJX/3JEdiE3M/tiECF21qu0PFb/PRUDJAEls98/I7V1AeFbkMMv8HuwJjXrUUKwQhD/BfB9 MrkcuXp+MLqQupC58PG6sFZ39EMgf0EvkEQx77wiu+KWA/hZVoAQ+VQu8P9aMITSXHJccpaxpUAe 4Q1Q7wuwv7SD8AwxW/vyR/AekNrO1EA11DHTgDmX8NMQf4AyRFFEQWuSa5IvsDHxQQgoMeZQIYMc xCT8xShP8P/Qx/DUcMRwpzJ/AJa+MgEUghKWdhrQiRJs+4AwUaHFx8ADYYvQjBJQUN+LsNRwGtAR sBGwjDTBLvD/gDDTEFOwTzAV0E9Qx3HKQfOPcFMwBx1R8BJwTtIU8AWTsNlHwF/6Whtjf5QQkxEe oQhUEHSC8F8QE95CWBKTUZMhlBFKGxAVMP/TEJ0RmCCdAYjRKcMLvNTQ/9TQH9CrUCDySxIPFNKU /VH/06HUMA7yTJKNUAbwiTDS0v3JUo3WoFvhM5BG8FnwXLD3TBKaGJoxPV+SI5WbpttG/9sFm1Um AxOXC0JkBGUjYfb/YzSfdKITJ+TfJKEh3fUpSP8pY2bWK3SkVqVWpVrQlub2/x1e5/hrFLxR/kFt MkQQRBL/L5IvkG4T0+DmYdTQaxHrj//vFq56dpbr1CWyr9d6AnoE/3Pt8VNyKSh5lEVYUFhQcjL/ O1i2crW5egU7VTtEPqS2hocuS5MwW5D1Yg1OfJD00m70MXu6sLqwufK5UuqWMQGXMQG3MUExUjFQ Y/YwupBzf5UygTCxe/wVb7sya7CnsLw2vZD59/u8Yz+QUW0gl6HJUIYyWjL3Nhjj8BDRTr+WN7SD 0L/Q9b/QfISAY6xSW5AM0ZhD8cXxPc05bhCoUEQQbRBHIPGpYf9QghyDjEAo/zswUBBP8jvSUDBt 8IBRPIt/xHIFEgIRgiOAMZbDltNG9dOxLdOwB0/EjAHH8OZQ+02wyPFKTlCAUIBQNVB/0PNu0Mow YxBTkcfgykHKMD9SkMaSzFASUFTSVTC4VuEHkBxfG19XMUdglYCfRGFU1ERwVPCNENA90BC/V7JY EFdRRiEKcNBw0F+g/1aBghFHAuOjanKTEHWy4JR/VFELIWpwS1FLQUyS0xDwvkHMUFvQcNAOsQ9A NYnQ56qwibBRMGspW9DU8sRwH5YSBJFGwVnwXVD3Xhn+Y8qAXVBqcF2W1pNd59pw/07UErObpF7h mrjX+t8UnXT/ZNIXlKA2ZZDfFJ91n2Xdtv9VNGbUZjJp9GoVaIviF+Ir/x4WpZgeOaZlIpSYsqcy gJCfp7D+8DqSqNAhMs095lD/qrBw0AtQpxMf4qamdaMevP/m+ioxYOVzF8EBwNKsVCVU/67WdlXs y+zXdiPucu5ydjL/KxTwmLXWKFMoJfF2LNa2k097Ay41LYE2kNRiBQDL2E0Ud/QQfpJUuqC54/0x ErYxZTGWMRD2crqQMrL/MVC4AH8Qu1K70qeSvDqWMv+AESABIFKAkJewXJI0WDQxN8Eg+yH7cjv8 QYPxWxn+V4RSwBDAUcChSnCXcJYSzzOSNTD50PlQajH/EKhQo7uQINFSUFIEEIL/gPwko3dBdzI7 MHeyOzD/EP8904HFePqCFJhUvdSXkv1x4EGsPQctd9E7YHej/Is5DZDNMuHxgEGAMH/wPUJSYgXh j3CN8MpQKCm/QpAG0AbQApJEcUOgWn9wxPpef7FaNEZEMERy/0NRCQENcgkyElDQcJPyRhDnRfKT shLQjjEHUNjx2QAP0uGXEgtQ1nKwMdEx6tCEIDUHUM+EoEpB/ND/41BJcvtQ0vJI0NMQzFDMUB/U 0pdw1BBLkEuQbS0K+B2OLYKwmRKBEYVi0aEDaDCM0Fpne2tba+h8bxr8oFbYeFBUorD/EtDZdk+2 nJSadNxRUamg1P/QcKD03vbe+I743PObwaFU/6L23xZW1u6SV1DQEFcX4k7/o8McnqVTpAHstx8n q1Dos/9jAskhyRKXcb5hvLEzgf6w/70wDpKXciKUr3uazdUR7AX/8XPRA5r6YpCIcdVhwTHSAX+w Fe7EsKSgDyoSKpQp9HX/KkElESqD7vIrm/KLtfkt6y22dLYvIy9Q1xEB9GJALlZnQfN2bDAy/2xh unJukjKwbTBtMDGQMZD+uKmDqVIxEDKwMnQxEvbwDW8xXv6x/gEWEAAAACYGDwAiIFdNeEZDAavw rMGstKvwQCWswiCr8LycrLC8/PwHALxW+DTJUPlS99I11H9yEj6SNTA12wjhc/A3tFxWX3QQOBFb OFNn/BFjPzjwAhI01v6Q/vDk0Io1hSEQULUhcVYvTncQeztRO8AsO1A8ETvB//Es+f+w70U8csRy eN95qwKR8dKERu5B/xB7sHvwupP9QCAkxDBM0Iiws3INkMlQZzVQxFDKUKQYQpDLEKTOFAWwfnB+ cIQQvNAG0D/UMAbw3hDMkcvgRMH5Xv++kAgyvpBEdMzxhWPL0BJQj0WTRiNGUIJS0TltB0Ev1tAN EINSg1U+hBKwLf/C1MGRSmHGEEjQTRCIsPqwf2KQDZBI0OsQh9JcMoaSMv/JYATBBNBO0N4QDZDK gMqAeDlnOsbhTNDI0IjwnSBvnG+dc8fQvnf/xvDXFtfT2WfZtdqBUBYSdP9P9BPyU1JP0hiWUZpT Fo04/1Mz2mHecMw3UaYWgVXR3oP/3dXeg5J0GBRYVuFXVuNfNv9YOl81G8xcBeg1nAMCMphS/+OS 6HfjQN+j6/+W6ec7JIX/6vI48jXSnnJic57gn8VkW//t5Sh1JOYo56IyZpO+AO3D/+/YoBXxY2j1 ZuItRaZ0pFRH5Tam0PsxUvdabzBvAFoENdFuEncybn+oMKhwqHCUqKWpVtn9qYOYMgVulDLwMvD3 EPdQ/ZlQc3Wh6lJ1kjVQ+VA1cP8CEm+0/pE0aTVQdRI2tPqw/4ewf1BzU7KB/DD7cPww/DLvdHP8 gftQ97By7QNv1P7weSDQijm00HbQtTD3UKv+QXcx/+A74LYhuvI7MTvB///QPFA90bfGPYc90nn9 9YLveyO6MHuT8cGCuqJ8YU0Q/3QwdDCIsE0QBTF7QQYwvPBzQfC80OYg+NJ+cvlSan0DQBi9UAWQ BtAFkAcQKv4lBzAHMALQWFKGMEUwh9D9gPNaEVDAM4IERgEKcChQ9QdQboeALcGwS5DB14wh/4RQ hFHC4YRQwvCEskqSXpD991FjnDJLsoewjzDl8A1w/4fQ2BLdsZhhSNAq8QEgTOFfxpD3UcbhiRCJ EnvHoHP/x7IDsMfQUH4UUlBSFRMFg//JFMs2E9fMBBiHCHoZlo5R/45Jy5NUQwnWGpPRw5C8VbT/ VdJXUdJmHClhuN8RYYYd7f9lN5bo2WYmRNhFJVWcR9l4/yR6I7Yl9Sbh4nI5EBf0YlL/NdKH0Lew h7Bi0rGyn7UpZP+ixBqmZAOgPZ0jojLg0+Hj/6QZowQsqS0U5JgvUGgwL1APILMvQabQp1D4Vhlb A+Yw6fBvXkY5LFpsEnsi0ObwUm5lMXISQGvqRQxKTiRQUoRvViSQkF6QYjIwDahRezJQMRBVd3h/ 3+nwM1CrkFzwNXFCNXCvkP85sDVQcVMzxrBFchY20jly75fwcvGHwLHlWypBspBzUs9z8HRyOJB0 khhfh9A0MB/wMK+Q9HB1kVzBL1LMHEXt8SG1cOoQaDmCfiQtsnvxd+B4IXgSP9Eg/7ow9HA8tC8y LzLzVEEReea/vAH1VjVwdlA8ULpUorrD/7bwtNCI0HQyIhDG8LewQVERvEApCCVCkMUYBv4lNNC9 ErzQNLC80H2SvVA/vFG8oX4wvLBB8LywjDHvevD7MofWRTBUgWFocEQR+ziFglKvSsD/YE4hRtC5 8f8mgXryTfJPcTrATiA6wUaw+f3yzTWF0QEBnlIAsl5y/zwxcuFekEjQxLKX8mKQ7bK5h9DWWkzw TPBM1jkCwf/G0D+yP5CL9stTUCNOsovYfwb3y2OK2Io2UZwIfY5CPv9WMlYyy7TMNlMUChaQlI+4 /w3UVtUNp1hX0oVK11aB0xf/WS9gNmEUDpxgOtvU4JWaq/8W+tsWPdOahxmSp3CekmIy/7OwaDEY Yd7a31bfHd9D4Ff/4yFmVqD245ge1aVDaPRqU7/kaWpSILGmwX9QIfD5N8AGVj7Q5lLrTYhF0Q5y IvHnI25QTVbrSYG44OQkYRCCFGAQCGIUYmAiGKlBVQEi4HOPZtBqE2/8FG9vEOnwq5J68DHxJqH/ e3AnEvAydTLwM3VDcFhyNn/0cDnyw/Bd0rJSKlBzkBr2V7IU7zA7s0HHUMdQsbJPdTLrErUQtXIN Ti0RVhBwVrFiJPBOYiUkOcK2QeUs8ZDuSfyMPXuQe5DzEHZQ6lB9MP/zMvRzNAFr9H1QfTLs8TEh 3XERSjG09f62sSSZEMdQf7Nwc/DHUD+Qt7B9UHtwB74lcFD5kPjStPD40El7wP80obxwdhA0sL1Q frC80L1y67ywvVJK+uJKvdCH0IfQ/+Ywh/LFsH8Q/RD8diESVXD/hjA6cetgPYH0ln0RemE9kn91 0bmAhoGvkv4ws7CI0Hx/iQCzYHhriLC/kOYwP7Fj/4jQAzCI84kBA5B6EnnyxvC/M1HG4T+QQBLG 0EL4EMpj/0FSQn8IA4tyfxSQUouSjJD/BZTNdM9egLgN0pBSjtcNg/9KVQ2jSNYOdoT6EfQMmA53 /9MjEJahc1BH2ZESK5Y/3in/nbfip+JxjIkV9hf2CZDicv+j0NyRjKaP4lWCnuGmkZEC/6UC26Yf AxtWTxKi1hoXWkr/oaNblJSYXRSW1uO05RUg4f+m0KcSpvKkkL5QXdJd8CIQuSHzXtTmYXgAIrAL IsECM6hjbl6hHGEU1IEUYDCjvIAUnDRgcDCCHE9WYbAicAxSg5twaXCyXpFakqug/xkg6oC3wepx LGHs8iawLFL/ZDPrxGRrr1JiUK+Q9NKzsPNdsGY1Xzwq4LLBZjOzIF+zYSuQu7K0NWVhMDQgRTnx kKpBLPDxMJ3Q0mYQE3fxcqWQ6k0mwjVpMGk1Jy33MHGw/7UQtLDqUC8xZWFrcqeyp5R/bBhs9LoQ pJD1knAwMhKthEEGuoeMOfhiK5D9s1Aau4ErsLvyNDJwULzQeXBQSC208HEwNTL4sRz8izE10HCR NeH5Ur1QNrJ85yDD0P4wxdDE8j7ytj38ARK+AXTSsJZVcPBB//4wdfm5I+/w9NJsEfUG6yHvbVC3 sHgwtBJ7eCG0E7SG57RCemF4EFprebIrkL+Q/3gQx7B4MLbRx6F68LcYA5D7wnJAkTq4ksoSQJJD 1EK4/0PYyTTLEQYiuMTN5cnUztP/RwcHc70jvfVEKILkCyODEv8NlMu0hBSCk8GFSNaDFElz/4Pm S0neOtHyUHbbOtX2Ehf/3wIRI9oehjZSXY5pUfgUs/8YQVP0jdpQc1hI4WKGhc5Z/1FHk3VZxR6W HVIfEh8T0yPfHTEgI1yYIVIg8tgh49VTE5nDPtCzXuZwLlryAG7qUUxeE3tU4dchiD1AEJuwm7Bg cA9gUdgiYIHX8RSKPXH2WpzwX7AN8UAtYS0x8KH9p3KT2kOedmJSbXBjNGNWv6DyM/KxcuxU7dAC UVoq8f9nBGah7tDucG+Q71BnUO9S/Fpj5jAo0J6Sd5KkkPEwAyzQnPAOTk9ScFo4NXczmwHhkCKw JTVEkWKk8Ks9zPZBUf/woWtRa0NokGv4NBBokGzU/+sSqVRrEKnS9hJq8PZQqnBn9pL2kPKwMU55 UO9Qff+2IN8gK6Fv8jQwcTBwcTWgfims0qzQrNA1UPhw+NCLhjWu8DWwCCEpJfmwzEot6jLqEGsx /lB3UGytMVTwN3Fec/A+sBLfduE4UnRwIVDskVKwUAHw//5QbVF16bLy5FExQPUh7tD/MVLk8ne0 q1G1o7WytTrwVPd68ntQ5zFnKdDfsLbyt3Pz8uXzlJtrfZm8QUCQQzb/vLZ8VoFVvON/1n9TRuP2 tf9/JkTDgLR/EsN1R+oIIoMH9wlWv/SDEz5ZcA22DZNWYv9ZYUnVw0OH90tjVjZPNBuy/xV5EiPQ V83ljrJYlhzyUVX/iCcbt8uLVbEHBJXlF9MX5f8HUwdljNmTzNBLjrSV1pK2/9K30kXSdtM0lnSY kCDymHLvEDaZVDOwETVfM7B5UCuwDNRenPAicPNuFHcETl7W0G5iE3PzQGqJPaIcBejAMbxoMRPw plAT8BRxLaZQoy1Q4LDtSezZYE7Z0v5QpIHaEi/SnpTacCxxY6L5qKEPPixSYzihUmuwoFjfPnIh 8Gb03jAqkVIqcmcxfyqAo2FncnmwaDIx0Gswkr8cYeLQ4TCc8BzRJIBaYZADI5AjcrBmyUUVc3D0 brJiLXAtUSyhc/8e4mVha/HjrOTEbSOplGsQz2sQbhIyUDJQ5iwuETLh9OYoPzFftPGrgd+wb7At q/RJrcAuwBitMGo13yTQ6bCtMDSwNnAnNSE10u1ycRjqMHIQ5zXhNLDqcL9iUC9w7VBU8HPRr8JW PZJv7LTs8HSwdPFSd3Bt0UL/7pKykjBSa7MpoqiisuSpRPZG2nC0Epy0IrbiLGYtJ//x0nuRb2FU 8LayLFC21C9S/y82evBClrmT9QN8Vn8Uu9L/vtUyxL0h97iDEL4U9pP7w/9+sjUYSDSEMkWW+LZA 8Eg0/0DwSXK/9fqCSCP/0zaF/9T/SZVIiznVxEo8yIqMz4vJFP+IVcXkTUhZYgWFjbeMi1ox/4zJ jHvM6VLTyuXQVVcHCzb3CzSI0lowVFmjk1YOGs6x37BA04IPKdS0S5dOeXDV0Y8R49XSEfJNlBhj s5qAvRzAWhKw1rClkBNQsepQDZqgUl+QpXBWe5h/JJd/T/B4e1BQV3P8Nm+aUGiwFTClEODQaTDB FdAvSg5G7WLg42J/KkFSdJ6UnnSeUHVwnzFK/2IwKtJicKGw29xn8PKQmbD/3hEbIt6FGtGjQKOA oyGjcnt8ELMylB8hWFLZ8OEQLqfgwWlQnPDSah3QtlABFBRrHnAVYeBu02rykh6AXnIfIFhDUhNS I/9okORSpJAg0iDSqZJtdSGhv+gwXdIiMOZSItDmsSCqUH+vsG9SI3DnknwQobCkkUGwaTEHKZww cTDl6eA4KSclrhBxkHBQBiX3cTBxca7gHK7QcVJycq7Q/GstKVCeUHVQ69KvsHPwm3OQdZAzlaDs o5dS7JL/sFB3cO1SKvbt2LKQZdbukv93kilQn9DxWLWSLFDzlWkF/3pyeBDnMvKQ8BLzOPNafNjP 9/K40rvSu9bwNW1S9VX/gAS5A7pUf9I0dXCJbXa48v1+szqDEPpxwoLDSDjlfrL//jY5E4PF/3b8 9Dr2NnYAUv8AU//kd8s+e4mlk1ONIwJ2/5K2AnmTpgXklaHLV5UDlNn/B0OPlH/4jZCQsgi4lRKB 2f8EhZQ3lSUK9IMXDmWU1Q5F/0qSDlCXU4ajmPMQA5jV5yE/iJQbsYkAiOKJZ04yLk7v4VBZcBKw ErFzEtDhcOFw7U/QVYuBi3F3nRCdEB5xhl5ZMNnwLkrsRY0Q7+CwjVGkgFGhL+9gH6Hvkp9SudvB nnaykClQ7j3bcf8r4NvFoFJYMFWTJ4CZgd5R/xpDopJXUSNAVyFXMRuB57Cf37BVsNvyVDFbIlIN UcARioGRXpCdgGaWf4DXf/x//X/+lcHkNXNZcLNmWrAekFrS/6EgWzKXdVwj5XJctFzU5XL9XbNF XfUiY6rQ5vAfUK/Q34lQ57CjUIlQXzFr3NJR8NGmUqQcxZyiGGHS6XD5rRKrOenwrJCc8q7QrpCT rVIlUEkpYxLvOWOS/5+SY/HFgIhAZMFksKCSiFH+UqAQKXDlEGW2KlJSNKH2/7Ky5NTlENyQLVhr Hi21HVDfX8CJAUywI9Au0p0vZ7eyWS00zzUxUKhy0KhgNfzQMW4wbjC5kKjQuZCpUf+pQqojqVJs 0qlSbjL3tKr0f6rUbVWrY6zyu7GrYzU0FgAQAAAmBg8AIsAgV01GQwGusK+BK690rrBAr4IgrrC8 fOGvcLz8BwA1U/1kwIP/+DRykXIjsbg5VsKV/QXC+fv6gcIyMzkj/1Q507aoPoX/P/bBsgWTxUdB FHkYQfY+Gv/QVtOSgbQK1r01CYtDdghS/8yzCGZ/QXoyAtSDegX2SNT/SLZKcs6yDhPSQ0hyw9NK oP2HAZaHAYbRhsPUePKQG9D/G9Bf0MdTiQSJIYjWG9CM0WXhIFZaELJmWnCKs2qTHlDKEWrTyaBi kR6hZxWUW5AV0A5K4pCKcC//jaFR0OVyUbJcNOOSKfIWNP/NtiQRkEGQMBjS2rjbEN2S//KQEPDn kN8QGhRWklaQ3jD/VvKJUJORG4PrcBZR2iKXYX9RsNjwWPBZMFoQ4VCVUHX8e9iVwZYQlfCV8B4w WXD/4jBasBTwWtDi0o4TjiKYB38hsuVy5XSZfCIw4nAicILxXqAkBy1jsolQ8rHyQZ8j0C6wGVCZ EFHwijnbEIckkCSQYlCEFGMMnnDt6JEl6HBhsRwl0OmQ6ZAHnNLbUZ4AHIsxjDHlj7DOY2nwQe0w ZFFkwv/fQwlQKXAh8O1y7pLuNiqW/ypW73Zn8i3yaHdpwywyaZj/ahASMF/QVbAusKQ+a9gxk/9v ZK0Bq/bndm5V98TnhXJQ/2/wMzS2UPkSOTQ1UjQRNgL/+8P3cq2wtlDrtfcj7XS1tP/q1P4UOtc5 pHLjQVE8R/82//6SOfK2UrZQd9XywwDWARX/umtLcD3WfPkAp7wyedS89f/BJn7ECWQKxgdBxlJ/ +b9H/whQf5T7tH8SgNEGTkiivab/SiUN90qhDfVDQ0rxDuXF9vfFtId4apD3pqEDEV/BLjL/x/QD syPBplIb0FuQy7BZMP+VMMlxBaWWsdWBFPKUsFuQ7xWwW1QFEVHgRYpwjXBRsP4PjeDW48xSXNHM YV0wIFL/H3IWUSpBU9JUkc3DZ7FsYP9Uoc9SFjKPsBnQapCR1Boz/mOSkBqwGhBW8ldyI3AbUT+T oRnQkDAkMClQUfDMPXCLOao9UVDK0NP2t1x/2pXDUHAeUWZaEHH/lsHVmstSIPGYIpgjCHLW1dtR wZmWzppBmlDlIsEi0P9dsCMQmxBqUhuSI9At8GOQ510wIjDbEEgxnJAkkCYwf9uwnnBisCVQJdBh cCRwBiAhzDlqMWGwrDX6rBjALSUQGNDdsBkQX/D/Y1Anc2Oh2rCgFIhQoNGgwv3fwFLgEqF0KlSi OgoyZxb/4FDgUGfwp7Cldi03L2LmJ+ensGoQX9D3WoDwgPDlENcvcy9jp1SbayJvq1JtNv+tsOpS MdQy1HCUslIx1un2/zIUrbHpwzM06zQndSPBstL/I7LstChzcmM2FrXXs6V0tv/vMyprN5J1lerh LjLutTeD//Jz8IR35XfXO4P3NHeWfLT/vBh5FEIafXJ9dPlX9if5+P/AdjS6wDY3tr03wUYzRzIW /8OXw+DD4f7bScnGMz2DPfP/AoNNUQREA2M/EgRzP+U+1NQ5ZwixSssRWlFwWTD/UXDK8o1w1lPL Ytahy1JcFP0PMUHMEAhQCFBR8MwyRJL/W5AO8V1hoXJdcN2yYvDdsMNi8N3QrTXNOUaRGSA+NUaQ RpDd0E9AT0BKKf9H0l/wVbBMsEywX5CKEFcyv9E4knCTEFbQ0jIOcWPlEPMZEBlyijVLMJxQFzCN cDvUENPxVqYgTxCVkHV/enaWQHtPEpVwlTDK0FH/BoEG0ctDjbCNkROGTuYUAT8T8pnRUCNeMFHw 2NKLPeEVMuYotVqbED6xiQEfFjTaEJsQZXAW8kkxhP/dQheBnpDb8WJgGEEY0NzwrxdynPKc8mEx FBlRMV/wv94QFrBjkhawDFALcFSBIPffYVcy31JTn0APAaNyZzTf4VQc2OCSo3NnYkLasOMc/+W6 HtIe1OLSX9DakF+w5fn7p8HmVJtsQG4jbjOspSZW/2+UJHTt0iQS69KuFG5UX/j/LxKx02Ek68Xr tGR07POuI/+zs2Rl7VYn9HP0dVLsEysF//HWtjTysWojMBgv/vNVe4n/whn3o3y099aClL8X+QeB lf89Zb8SOhHGYtAggIH8N3DG/3+LOLaAkm/WhRS18IMWgpP/hil3k8XDhXbF1j4yxvHGwf950ccB PrA/8wNjerMDoHtj/wM6ezQIsggRCAKNoxMSQzT/o3GX4370QtCcMJwwy7CNsP8UEo2yFDHWo0aw RVIJ0EVw/5AwRpDeEN4QkDCCMkawRrC0ByFGEK2CwUcSjEcB/0ZykTDSsHpRSKENldEB0XHfDOUN kZOCFiOQUM0O4Ybwudry7EGNcE1RjKBapiBE8m5MkHR/M0zgd/TRbk0QkMrAiAHK8waj/42QjZJ9 1hNUCFLMlE/yzFDxUFasPasVIZrQD3AVsfhaGFsV8Q5jjfLHMBbRcj1LMAcpU5OdAFRAIfmekMQY 3FIY0J3SnVBUEKeQ8tvwF9IIIUeQ74Jh+NVW9laBGpLgUFfQ0FD/0FDQkFcy0FBX0gky4HaimecK 4aI04fi0VqewHzuniu8hxZg/XmKaCmuo05srrRD/qNCssyhDKDKsNCbyYFbqUv8olCUUJTMlQ7Fy KVIoFygl/2RzoGUqVeziZ6UvFGi27jn/LwQt48UQLzYuMWjqMyO1EP8xtjn09nb5d7ojvDTCVL32 /zj7ucH8lDTcvTj3UHTT+4P/vpi+dq4097Q4vDnWxBV3JP//BcUQxRI89niV+MMAlHiQ/8cQtXHG w8by5RA/OLaft6nfXVBA8QqAi2fXUi8I41o1/+IhQtETQULQgJAPMsuwRBL/2HDLkQjB2HBCsg7R zyFFcN/iMJHwRzLeEEawzoJj3hD/V/BX8lgQ4lIecuCSDFMMgQ1IsVuFMg0QG1v5Vv/RktESwNGF 4EpC2oHQMAdTf31hB9DMEEGw1BCH8Uwhj6heNHeI0BKI4dGJIf+JMIlxQYDTQEIFilCLN07n/xQS gJLLsESSf9BQdA9QjPDjURBRcKQgUgyAjcEC8PsD8NoQewOhyfLakNfwhvDwaTHlINwQ3PJUUt0R 6hwY0EiQYQiQoUeQkJHnGCHcsN0wxhhH0oHSFrC3UZBWMhawEfCAVwd1kyH/WhBX8lo0WJQJktDz 0MVYlP8JMkVwkjBcmNL/XAeZ8+Yt317SXlDWcV7jnVM16dToM//XgZ1SXzAjUCOS2PdfhaDY/+zS KJLtEic06nJntigWLxT/7BZo06OJoncuxWmV8cUtFP8xs/CFOfLhVmqS85lq5vSF/2z2/PNuxnTH c1qv+nIxcoX/cXOrJ65yeFjpsumy6BL6+P/m2+hm5yg8L/7Ud5d4hT1U/wHUAfR50AxyAnJ50APz e8L+a/JSe7PzCQNz88V8tk+U/4CQuhK6FLtwfjW7AkNFQ5T/gFIT8vWRREEIUEMSFFK/cn+9klmU lNz7GAoRcmC1gFb/GjCTUD6xhMGFsoU0wbTB8f8EwEnghmNKcCEwHZGJwIohXA1K/zFLwf/ST0wg XtDSbvJyxNNmxTLD0P9Bk8XhQhSKkn2wffICtAg074Cyx9KMMn+xRUPQUNCM8vnJMCgtUZD+0I20 yjAOcv+N0EpwP7BaEBkxy+HLUMvw+Rhw5RyQUBhwkDIFUEsw5iiPQRjQJyUI8JCQkbCfzZCC8FXQ RrBZ8O45krAfVjKSUJKz8SCTIZZWdffPIc+yVdCrRqG9Mr0yWBD/vnC9kZWFlXJZlPdTHqFeUP9b lJbfmSdbk5iGmg7WoyNQ/2SwXzATMmKVX4VfNCazJcX/FXYk0iZ0FVUpQ2ASFRQocu9lFKgULfRk szpoEShjaJT/pFMZJidhpVSmUjFwKxOkZf/guKS2alHkQ+Gy41UfZmtC/zOlMTI1Ga7I7UW0k+ZI tcL/7Gd0d6zvrfQ+MnQ4NvbnmP+q1eilNXV3ga3Ud1R3NrTW/+42ePQsNPEQ8JAtEXmjSHB/e9Ty ti6f88PCsHv2uNIO/79AfSF9EroQudK50b+B9lKv9lO6RU9yf9CrhwBFT7L/x5HDYcNwRNJOsvlR MgN+sx8NwjYl+xnC4Tdyc1KU3XpAVkhYhTJJEBpJYTlQv4TU8hFJ4Uo0kpCBkHE7AP19oS5BQcOx w8EAMDwSTTC9iRCwxQOIMAASQZAvxeT/fWICYwQQA1U+4wPURJBD0L8z0DPQh3BLUkPQQ9CsUwD9 ySAkgzDOMMmQenD+0Mnyv440e/KWUAbwkFAHMRBVcf+PoQiQy/BTcMxQQTCG8MuwT1TwCPDLEEsQ SSmQkOa/VOFHkINwWfBHUJKw1c6hf0ZQUZCBUM7ykxKTMM+QdN5SgVBK8DJRv+GTwuGWsPqTTcBO StKDcIKyvnaCUf+9QVXQhDBcWFxzW0VccdUv/136DtHWow7SXlBhlBdWYHL3YrJgEmM1QhfVaCFh cmES/6dy2nKi+BmUorZnmGOzpKT/3SZnYt5l4Fgc2KY2pbIccv8echj04vfkI25zq8TkhXHy/3h1 c2fotXUlXZbs13JBXtj/J3AtcXTFI9av2CdScNZuUv/pk3Jn6bPnCXF0Jni0le3m/+8jdrHkpSxz LAQionjH8JD/8JB52jAx8wNp2mrT8qFrGf8wImrFfPT1EjG09bQyun6T/zND97J/0ICQBDD4csgy gJD/NfK7cLnSujM2AslwN2k3VD9IcnNU+9AOsDhQhFDWUv75/KWGMIWSwXL9uf6DBjB/yrD70cXh ApE7If+3/8Je/zxwPNOIAT1SAbjGMQJHepPPPwtAkEASQDKrOQS1QSH/lXCScQWh/JEGAUISjnK3 sD838AbwQ9IHVH90Q7InKWt+8o9QBgkAKcuwCJAp/iUJcwwhllBJ0AoyRlIKsv+WEJMS/DCTEs8Q uZAG8Ehyb9B0+VBJMIGxPQnQ+XQQ/79hvzIJ0EFQQVAJ0A6w1vD/ELqHP02mEY8SlZoDFhKck//b 4VAzUyWMEhYyjNSf8d8D/6Ax2mNRlFT0FnXbQ1L02hD/VZDYM9eBGZSRVt2U33JVlP+jdBmSpBaT 9uB0p7bgGBjV/+NjIZclZqprXdeYi2fz6AX/XPbociaW6bQmc+1l79iqlP9iUuFS6lddaaq2mHbn l6lG/7KFsnTu1bTGKcFoVrTy8bL/X9K1kGly8hH0aPSHLjj0O/+4ac/xMUa5gm2nMlS6NvXS//lQ M9D30sgSu5E0oQPQcRL/+RK6ErsSNfhyMvr1ciVy0sc38XQgOEPYVhr+ITj0ABYQAAAmBg8AgCIg V01GQwGxcFeyQbI0sXBAskIgsXC8QlyyMLz8BwA5UBn3OYHA9MCwWjjhOnLKMLeQ/8LQOxDDMMgQ +PA7kjwQO/XxO6HLRS48IMWAPAM9kv+4E3pCeiHGkT6CPoM/EwPFF8NwQJBAkKMHQBjEIPdAUEDS QDJJSqA4gAWDyZDrMBIGkWMFsDmlofvQfva/y3KA0gcyyxCAUgmQxAmAfUVgIAfwCJBDccthBxCM /jE10EFQsDGCQ0ay0XBHFJ8LcEewR7BKUHyQs1JGUJ9GUIUQQxAG8PkQs1b/EN+EEeUgdAHSsH1x Xs4whBD/SLAOsNIw0rZK9ky/TAkO0v9Odk51yUWM8hRxT0OLMo3y/430FjJReFTzUaOMlFLWGvb/ GDfcoRbSkjZYEtsU2hBYkv+R+Fa435TgNJU44XJZM9Pi/1nH7dag9ZgnnHnpBZx0XVWfXEXq1GQY ZHLq0061XuX/2lTZs9sF6Led4yK1Z8Ve1v/s8lz21nzs2WaEpAQshfA1/+zgaMEslvBzLWHxUvHQ vTP/MKFsWGq/8sNqXy5FqTtxQ78C8aqBMzL48DMWNRTMq+D/DMBwKQIwcPRxMuvyDdQ3WP/tGoQS ctKwMvwxdIE5knT08Dpb+VL81XYBtPE6Yd92dAqwdxG5gQHQcQGhPBKDtnHyglIGLeUoBRD8Dk54 MLgXdyN6HD7UA9EPPuN70kCQuxCCGKQcn7tSP/SFEAVwvJAYXwWS/zCQS5Bs0GzQ/tAwUkiwSTA5 QxDlIICwf5RDEsQcx0TwRDAIMSWlGPnS+fD/BxBEkENRCAFJUA6QSdBIsO8FcMLySLCC0DILBUcS dvC3hLIOkcPATkWw7RCSdyAb6SMOEPYFgWzQ3Xfd+Hu9dwCwTFAw8EiwdvD/BZAO1MaWiX8DT4qW TDXJQ/+LURYhBhrMVI1yBpXLJcpS/xZ2kDKP9lT0F1SNtQqkGYX/kbQaEh4SDFVVpB1qlCtUFP9X 8hNwHfXTRKGnWrUgwtVl/5d5n+Ug0hC03xuciaNSmnT/mpVep2GTYMrVCyY0XDKbU//aQdv+XXJe cipRZaYcRmdn/nQp4eHz4SfjEiZyaRNpof4ZMOAuIqfvpngf02zCLib/H+UjFDDwNVA/kTElbXaq F/8liTEyfPDqkLqQM/CsU2/h/3GyMpRxVHDxbwE2M8VArmW/OxByGKkQSpLu8Thh+LCh/zkSdTI5 UHVw73S0s/CgtSPf8RBs0AAQOxDx8nDygHchjg3zwPLiPgJSJzG7MPW7MAaBAC25Uj2QuNK4lj8+ VrnU9nI/sj+yQJBIMd/3EPcQuvBAlbvANSew8bD/vDT5MvjyqJBB0qiwvBBH8P9EMIDQvhCBkL4Q gNBEMPnyb4BQgFBAcH/RGL/xu0Ax+f1xSoxJYTfQSpD+0PyQ//z0wXBIsIYQwbFHQ0cQdvD/r/CF EHCwR/Ap0EUQ7RH/gc9w9EiwxJJs0P9/PHgAtP/GFD12xnZONoqSyPaKkk60/8kaTtLK1I2TD6NR VAcUD7L/QhbLFAjWRRgPtQciECNS1v+R81Ghz1hUeNHXWeRbAqHF/5UTE6UTmBj0oxZL+mVz18j/ nUYWBU2VZMWamVEH4JQV9f9Sb17VYMkXlhlVT+hTzFzkv1xBZHZl+ODfpAYeibdpod8gEX5Baj/n CaiwW2tlXZb/atZblmzUI9CpcyTHcVaqmH9xdCQQfNB8MKySMhK6kA3/6UBxAXGU7DKrUOyUKRKv Eucp0u08qRCtNcDzvCArQP/vZivDdXHwZePx8IDxQbUyv7Uw+FDtEPVyeZQukC64QecvEngwfDDl JPrQfTAvsH+78DBULxIw1nr4MhJ7Ei5Xe6V8cGtwJ/tALTNTRf98MIPywTC8kDRy+FAgEH4S3/kU qJDBcP6wvvKjviH6Ev+/MH/y/FCA8PqQgZDAML5Q//qQw9LBcCrQOJCBEjsQ/JD/hBA5MjkwvBDB kirQKtD+Un/CUDpyJrHqgaqww7CqsHG/8kD/gS3QhrDEsAFxazx69T2Q3wCgcwUSAZUEC4qW/4oa yZKKWkE2CtQJEwaGQqP/jNqMFM6WjvSAVo/Sk1GNh/+NlA84DZKP1EYSldSVFNgQ/9QQ3/NJqJXj EjYRcp4yENT/olKj0IgzoYShh6F2njLVmf9YBIjDmpaMWhUTnaeaNBXa/5tS2bYX2BU4oVhW1I4W mRv/o2eh9KKUHPRXNFmWlTTYEP+lcO8QvJClklu4pr5b3+Uq/14sqKEj0l/0JDYoFZ0l6PL/6HQx 0OqQq9Ri8qvw9hBj+N+tdOmQrfig2SnCTqISwpD5/NCVVu8QsFIrUu9y8NDtK/FXLD3xIGNpEPFy qLC/LdDrEmoxtkFvkPOwLrjD/WsxQfsQvhA20PrQ+9Cr8P9sFW0G62EnUqvwupAmkGKy7zH0upK7 UPewqvdjupAzkv9ikLwQNB74UpcQARJxsr+QvmL8QTZSvvD6srvwBzch/7+QNtC/kL5w+nLAEHNQ dJDv+pD/MDmQb9FWq/H9YHVh7yqQKZA6UDoSU7IhdnAmkPcncDcwvvDUt6CiQXeR6+PfxRA5MMEw eFxdkN4AoeWQ+0B5QaF6QOvIdn0WfBZAuf9BoX84yjB/tEW0BxSCEszz/wigQqVDk0VnzfVGaIOF glH/ggMJVA42SdgQtEsyWxAScv9LMohSENrBVopYHLROeYsj/9WyGVJPuuG1WOPYtONQ1lT/HfLY mNuzUAPIUVPFUxTKVP/YftY02BRZGFFVVgnbtFhU/9OQHXUeZ1cyx5RYuMpSrVH/8KCahtMv1DzS 1l2QX5BdkvvV218sRSQ/nQfo8tmzJKH9MdDs96GpkmLxnwHrMDux/yfBJVD00Z/j25Ls06HK7eLx 3aXuPe/4AKwB7xDvEP/vUCzQo7Irsywh8Fjw0GlUvy1R5gGw8Ogx9MH0kssnYD5JbBaqkDXw9zD6 Uqs5/zExbCXrEidw6vA3MHbSqZH/6oE10OPwMV2fAWLRqaGq8H9hMDvyZxD5MHBy0rEiITi/+GEg kCCQdVBxsuNxGHOQ+TbQ5Rw7EPcwL7Dj8PvQ3TXQJ69h6dLrssbqQDYh+XSQrTn+0DhQ7lCxUP0R /l6w8NgQdbQ50LGxKgF2kuE3MMw59WKzkP9wd3L/qPCl0HcwcBDxsLdwPHogcL95UT1jtvl8B3zW extzfLz/fBYF0AXQunR/s3/GB0VClP8IEgXQvJUIogslC1W64wbU/4Pyg5SEGA3zSeaHwUmQhTD/ /RYScB3wEbGIo8IVlCMZFP+GVM/U/RSIcksyEjZYVsQX/xLDz3VOZ8m2jNjIVMm2VXr/UPlQqxff z0RNRRQ4kpYRkv/Pts/yHlfHRVh8U7AfcCAS/dQaOtQvDx2aRl1m1SkROP8j0BPSm/ZgUmBWnjJg mCRy/56SYrLakJ5xJ4DboSew2jL/YTIlVDuypdCg3xllopA4EP92EKMQoxBnECtQlxFoAaPTcywn LXAYW9+xLWEdFWt/sVCeEmyUbtBi8qbSs5CL/jnqsDZQNrCukDHSMTMxAe+e0J6xb8Cp4DkmkuXQ YpD/npEeoDOBMfWqgapy51Mzg/8nsLPxrCGsMuiQm3Ks9OiR662AmrA1r/EkNlCu0CYS/6/wrtA1 8Oryr/E2wa6QrjL/dHDsEjdydNBhMG/SsPCxUP+xULDwm9CxsLIwdDCyMLGw7yoyIVKukOXQFqXA 72PcEf+zwbDw8DDs8Hzw8Hy1VraXfUDqb3mVL4+2cTCquaI6//hSRDj2tICUvJYz1oBzR+H/fxH5 I4L1QyOEdPwShLI29f/8g1b3OGX8lP0WyNBKNohT//6jWBYBdom2TJ6UOE10yNT/kFY+dj930MHI 0MhSyFPII//JuEBTQOnIF8hljneOBtIj3wjWjpTI05JFlTaV0GfQMP9aGQxpVLKjUOjS1dFKo0qS /0sWmrFLC14RS4VKdNXUTLj/TdhMtF/SH/GcYxS62RQYUv8VFdghsrAWs9rj5RAXcGOU/2JwZFDa MWEjoLIZX6HlsbB/ZpB2MGbRGyEbMd9jZ/I6faRh+Q5gpGFoluEVpWMX1mPh8aYhT2qgSh6SIDX/ HoGu0B9Q5RDm0FuyWvTiEP8g0na04/Br8Osw6fCvEK5y/+UwbdaqNmNw53Ll0HVw5/PPrEGW83EB l/AYY3AQ6LBeOHGB6pDrMCdRHOswxf4grtDqkK7QcxDlMKfwdJD/cvByEHRwrtCvcrAQrlAoUPwG IW/Q3pDskOzyKTLeUCexk+4BdnAySt5QMU6fqzHl4eXQ7xDvsVJw26F/3DLvUB3Q7LB2cGEQSrJ8 /XmAc/RQrDC1EPRSLlx8lv95kvJW8xov/nzSu/X2x3/T/24lvHQ1Em/4fhC/UnCz+MH3vPI2UjYT RoQygBL8EpIU/5MyjzKPUIrXkyX8Mb7h/zX//ivP1YenO9aHsv0RACOIuf/ECYqWlRTQ0tHX0WXR UAcW/8l3BCYGKY6ZjU+NWs2USJT/yRWQB881lEWVddBDBDMNgv8NhJag0oHXEhK0SrrUu0vC/4al mpOHZxI6TJZNVBOUqRL/m/Kb9Iy4njKfcJ4U2JKedP8ekamDsrDbsiuSWfJT0dkBf1PwGLVUpZ+w GPIY8lTUEP5G7dLe8ugwozCXEKNwG7f+UhxWG3IdFOFQrLJhcNpS/x40qrCqFFx0qfPmxKpDqHKZ qvBIMWLQ6fAoLa8Q/+uQIfLlEKmSH/NeqSL0ntB/5RDs8N7S6BQkkuiw15D3/F72JIDpYK2B6pDq kCXwP+qw65AnMihwJrLrkMQY3+tQKFDsMa/AngAYsHDrcPPsMGNwSSnpsOmwKNDvUPfeUClRZWHO saGxsCnwZjA/GrCxsBdwFrLj8OUws1p/Z1LvkhSS71DvUO6Q6pCMnjXskBqQGpDekM453rD/tBBK svSwtZYxVqa/MG25Uv8tlraQMNA0lPaWvfM15G+m/zKD+FNw4r/Bv1C82Lzz/CL/rgcIVDfyC1I3 s8NFOLB0Mf/KxQiUwfLI0AtSeVbCdIP3AXoFFhAAACYGDwAAIiBXTUZDAa+0MLUBtPS0MEC1AiC0 MIS8PLTwvPwHAMQU/wIWexLHOAmS0ZbElnyyhfD30TK6Nj50dgRBuhLOsroT/zghfLS8ebvkyobM BsfNBdP/e60GkoXwhfBEdg2WR9DRV8/N5EfDfLHQw9hWDnBOWD/E/8YNSvrIEsc+xz5Za/+L+FA/ UchSIxQQUpRmkZoD/xeSVBBUEJYR2gTOo5F6z9r/VRKh0lbUDlBXUuDSk7JX8N7YWEEc9FjQWNB7 4SJZQ//XkNeQVBGPoiBBlpAiMCA2/yAyl9da5eMx1YAiwo2hjBL/WnDakFKS1dTV9F6aUpDn0i+c E+hhYTKdcFnbgRdfP2EyYRAd0OUwXXBiUKMY/Go16fBicGOQ63Bi0Osw/+twZBBkEOwwnjJdseth J9D563AoJSjQ7pDukKEQ4dDzoxAd0FFSFBAXsO5Q7lLfGrChEBhwIdLu0T2jUmeQ/+ISX1Ll0I+S kPAXkpERzuDCRpKQD0IQQp0Qpnr/8ppqU2mC9On1VKiWbXIw1P9uEG4QNPEx4W4Q+FBt8vf093EU NNbq1PL2IHGhrPAzdP/5tnW4rjA4U/ylsDQLUzhn/3/zCwKCxUa0dNJ5UgvUANL/dvd5Sf1zeoO3 tEc0Pba4dP+4lbrHBTa603yGQSlDkgmS//c0RzOCQwU0f1p9Vb5oCKX/uHYGVL3XDUwNZIVDDVwb cf8RaAEPEp0Sh4tWilUSBhIF3wV6E7MjQYv0yzNCFHaNN/8Uw1PwFBAhcltQzbiPkV6C/xfjWfJT 8Y+BVLTPc5EmGOPrGlKSs1KTFVuTkNKyk9D5HBIZV5PSlLJY0NPyWPT9nLFnVRDU0tYymNAiNFpw 6dYU7UnWMA2X61z0IbL/n/Dc8FKSZrDYcBHUWnDWNP9acBKSIxIhsKNwm9hgMCSSt2EQ25CdEV5h ENwxVqCQ892wYnBiEN7SY3De8mLQvx/QJ3CfURoBY5BjkMXdQuPfABrhByGKH+Eo0OEQ/aETVuA0 ZbJT0KIwZnBT0DNdUN2wqzVnkB/QkVbDXpAd8NNisl5aMCNS/8zyzvKREM9yznJoMFnQpZb/pZYw 0iEeqVMiajEnMNABMP8w0HCyrBTpknEUb7Y00jSW/6ySrFU1gzZydNJ1MXWj8tb/O5eARXO0gJWC xu/FR1Xw4/87lncyOnKD+TxHSJa4mHr0/3x0ODJAkro1Q2UyW0JlvBT/urW/xfj2f5Yzm7ulNxWw xe+DVfjFNNS58VJGkMGSSVj3hNjEFUYESpNQSlVOC4b5/4cnSpOGQz53BehZYgSGSmP/P7ZKdM0y BvUHo8tajfONxf/LUB6yopNS4wpSU7LOktXx/88FENKR2M/em9DReQ4h0lL/DnTS8JQQlBDTVIYR 1AGVEfpnWRBalaFf8NX21VDYsv8SkJhy1tASmFwYZpJdUAby35lzWsFQfxUCEgRFm7DhEP+S0qVQ 2tLbNFNyWdCdMtwyn2KQXXBiEBqQoBKDEBkQfxkQXfIacRngZCGekGLQaj4t33DfMN3yY1CfMEgp /99QkPCg8KMQoxCicJuwDTH74MMLkVKNsJiyZ7DjEt5QDLJa2FAeUJl7un/w1F6SVqPxWuHf0FfR /xaB39ANUA1QIDAhvafpqBr/5/gjOl/xISNt1OmScrLpsv9vdiaVYicmFHHSrjJ30/tF/3VRdkfu Ve4D7pT79bCEeAD/sQPute4leBZpFvGTduryKP+5Y/PVa4V7tnszsQH59jQX/23G+WUx1zWm+Mh8 ZfmV+0f/KvZ81oCWt7e5Q3w07rDR8P/R8LER/yM6Fv70t/R1c4YC/wMPA58/SQHfBCt81gU3QSP/ BlQesgtQjBhDFAjTjMUHUv2MUUKOlJdUENKQcM7xCoT/gscLkh+UkLGRZc90DTfRo/zXUtIwSjYP EErwDvDSUu8PdBASEBQQUWPb0NXy4nD/ETKisJgWTjBOMBJQihISNP/VtBSyEdERI0azTyMR0hHU /4yyFTSbUgdQWzHRgZ2QpVD81VYX8dOgF4GdcBfwnTD529AYZ9/Qn/CekFXQ3HD/mTAakN2SmVAZ kp5wVdCgUHyCEBjQGRCSUZKhn3Dl/ZEgJZ3QHFAbkkZQoxBa0P+icBRQ0TKiUMwxomGicAmQnGgx FFDi8h9QiTWacGJPjMFwUpGkAd/y1CeXIaVQlzD1XpeS9Vr+OAFhJDQkUiQWI9aZm5rG/5ljmLyq k63DqxSrEuxxY8H/rNGqoZ4RKCHqsGOy7fAoMf/uAmTBsRa303YBKhaxFrny/2Z48HbvknWyZpix U/KFLFX/8epq4f7V88sscmrUdDQzcv8xdHfwObKpEakhuhI2Wvc0/zF1M6W6Em0z9wmtV7upczjf bZJ30vrXcWu98rd14XF4+3FWMbdO0hA8trQ/yA3G//9By8gUuFcCYcg3P8R8wX6Uf0L0ytJDX4AF BvIRcEVyqv8Jodew4hHU4gpiRsSCpYQ450f/hWnR8PdW0hBKV9Lh+w7QDpA7EAHbUEuyiHJMNv8Y EIJ1EUEJkBWyjXNOI8Y2/072T1DU8uJQllDhcIkQx5P+Uk9QllDItIx2jbbiUBaQ7xhQjtEWwVLS OFNnl3AYEM8gMOAQkXDdMIIY3NDMsjnc0OUk3RDdEJEw5SB/VlCR0lcwGpPe4RjQkxBpnx2AT8Hf cFhykFCTWlkw/wawlDDgwEZQWTALklkwCZDEJy0T8C5GT9Th4lD/4XC9sJZy1PFDIb6xWaFXsv/T kpawwBAgMCQyXx4iv9Zv/1/4YBJhkmGSnXTuEJ0UndX/Y+Ge0GTUZhTs8ynkZyANYP9owZ+ypHal sDmSoBJ38Cl0/942ZDIplO6SpZCx1KA48zj/KbXyA6Z08zJpN2uGLef1lP63Mab5wzFyq7jl9zhn M7T/9/T4FTVj51itWa9lNXY1dv9z2abmOQPn1ekFcLr3dKPQ/jpMIQJ9PYF5Uz4Pth8/4e/xNQVq tI+6FDsBYVawfrfffwMHHLuWBvITksuBgYGS/xMRgmEfMkbygtYGsIN1C+W/+9P8ZQ0SHLANdEm1 Wkoyv0sSDjCG+I9Rh8WIUntToHePoR8xEQJG0XCB0om5Rf+KOMb4yNYD/MYQyZGMpU5y/4kQiRBJ Msp1lwAXIo+hF5H6a4/RXpAQIDCUEPiQi3AIy0GJlWEmKQUp7OQgGLDNEoIZYczQkJL/GZIYcJB0 zZAYcBtyhFFbwt8IYRxQHRAc8dBAQfpQWTDzi9AI0CYtlXC9sPlwiRD/FbAQ8BWwvbBZcJYQFFBG 0v/H0ovQ0bCLssjRICEHsJh4/5haB7AHsJgwEdIQvF/yEF7/2TNjwWXy2vLbc5+k26WfsvcsUuFY N3K13EGiMWVHaHX/LKHeFyrCLkMsFGQWZ9Qqk/8sQ99Va4mlmB5XsIVsVDjT/6tnq5Plo+TwqjLl 1iF85bf/MWN38LHQqfIyu+il5ZWraf9tkjPWZJKwFjGXsGjvYiRF36uSqzttocIwQhJ7tassOf/U YS0bLi8r/rW0XJAwdi+7/z/DQpL7UPdYu1tE47vyvPL+zb1CgaHRUL1Q+JCCMtKy/74wRHKCuNHy /DbAHv16PDD//jH+gIdBwxKGEEsU77BLkP+PUMQRS2HvsIgxxGHLUFrw/4vSjjCJVoyTlEABoYrS TjHfjUPIdD9UllA/lk8/40Bxf8jjyNIFElGxyiHP0cFgVn/BUAbyUrKPcVOGj0CIoGf3k/AGEYtg RUSwCLBE9L2Sv01QlXCRMM2QCXTNEyDN0H/NktIw0ZD4kJTwDBBa0VZ3fxKU8IOwEDRiDQFOcKqm PQjQCNCINUlxNb2wlw2xCMGWEGhFwUctjBC/kVCVcE1QSdJJ0pDQFtRD/5s4mtYHsJdw1DBMMI7x l0Ovl7DUMNQwmDBYnGF5YGH/T3YQUmBwY/La2J/SFZbbcv/g9J8yoTTfcut33gJrQxz2/94VVIVV NlM04ZZmlWfFFxT/VF6mEqX6a1Kldh/55Upc5v/mCqumIGduVa0jbrCx0egn/3P2rVjp1HH3Yolw dHMS6xf/sklkE7DHYXmxwXgS8VsuT/9pP2nF87jx17fJtXwxVe/l/u32o36/uyP4F7tB+RKBsv/5 ktFQDRKCcoJyNBTS8cog5w7lg9f8KVFKhVD9VYXBc6Oy/jD5Wjpw/lL+0vj/hyM7cI9QZ1D/UcRh 77EAZf+QUIKyjjCQ8NFQi3IB3D6U/wUSyLRAVkEWQJDIukG0jfP+QZOwQlLKko6yj/DEsMSwdxIS jzBOs2eUEIkQRLTruYDDykGBUElQSVCp0kC/gaGBkUmBlXCRUEYSokbB14twAXDHcnGWwFaD0L3S fwzySRD5MEkRiSEI0IGxPd+BcgiwhdSBkgiwyoXpSXLhSrE1yzk3EiHwMBBemRHStFJPcE8weWtP MN8HsE8wiDCX8ZfBs0fgg+F7kFCXMV5MMEwwTzCKEW//GHTa8hYyFPJUVOKz4QXh8v9S9Viln/He Rh0nVhSOVqfT/xrkVumlc+9Fr5Kx86gCp0b/GoRbRh6j4hGtJR+VIgYnBf8hdSBl3fCZkiB4IVIi FpnY/64yI/KZkqv4rRiqNLMU5hr/5RieF+UFnhaqlOO0W/rCMf/yJDDlbHsw4TDSK9Iw06Tm/6Tl pJam2ivTpme4NKZXpqb/88G6mG9YNHC7d/glb9K9UP/RkHFUPXJIcDYxvqEM8Tck/7zFN5bAEDf4 wJR1MMFYwbD/OhV2o8MQOvB2kcNEO6F4NH//UABw79EAgU4wNrK9UAb9CoA1DfBB8snRPiACoT5y AQGwFhAAACYGDwAAIiBXTUZDAa+28LfBt7S28EC3wiC28IS8HLewvPwHAMYQ/wGwyNM/pwTw0pBA tD/R0qD3uufJkn4RRb3RhEE80H5Q/8qQQnB+8n8SEhAQMr4SB/H/RCMCUkSygPC/tIFShZCB9X/A hvnBwXHBwUHyyJIMEHH/wqEBcPtQSPLQMviRyiGFcv6qgYGFuoaxCKHFftJQTBL/T3ASmxGjEbLK kE9winKKMp2J8niKAooAT2FXa8owkBZnFWOLsNNa05L/g9BR3uIQUTSOdlCWjfRSsv/jcsw03RJS Uc9hznTjVs4V/5BoFwfSFZPlV9TgtdDjlRb+dM+Dz3IeOlrTKsOakyBp/5jUl7QgW9gG5ode2idQ OvD/nHOYRiXh61RiNmO2KFdgx78aMic4KBahldYl7xJ27yP/OhBsWuJfo8+kWvW3L2vxkv8r/y3K 5eJua6reb3z5MXFL3zRwcjU0BfbwD5AN7eE3Et82MvufdSBCYv2Ftv4D/jD7dnP+wFf+9ndys7F3 4f9w/2dRPADywbSy+rIBcEsQcbD/AZQ+knp0AZa5kHt0ufK6u/8/xbXSAlFxAryivKEz8Mswv0JS BpRCcL6zf4UH0WKAM/9EpUTUxnPAiYVS/RVJgYdw/w3yfVLLMMKwBPABdDLyNdH9vGOJh2KBogBn htABEsR0/wG2xFABEogUTLAR0sg0T9H7jGER8WtCcIwxTyHJdAVT/wVGBeXJkgU0jJbU8s/009T/ GHiR9ZXjz9bMFpZ1lmMctP+UlNFUHxKVFRsDkBMe5BwE395DHzXRR5YX1WFV1WaiB+fWsWcgEmRK lyElEpYkMv8TWpqWElIiGdwDm7ecYpQh/9tyJBgl9lxYnJveRdt4J/f/FoVb1io0OnAyM6mIpS8f P/8gT6SXpWmnl6WqpWan46p0/6qSbzgzNjNUrFVvQa1Q6/X+Na3Tc4JyQzNyrnDuMu4y/3PQdFY4 srA6sTFCobGU8LD/OdA6EGdQdpR2kLLyOnGzZP87QXhSdpC0cnhyTfCqkMHQ/0WwtVA9Uv+U9TQ+ sfTBuZD/exS7FrrQvBAylveyfbZ98v/4MbyBvHI88IBQQlGLQb2y7X8RXr4V+oBiTrCIMMpw/pJE YD5hRLb8FYGEggT8R/eB1DEyQXFKwrC60LwwSrD+q/uhrTBEsLxyPrCF8gCYPwJyxFMBBQJzxGOF lT02/mfIssiyA/IDtVBhiDBCcAOIMIwy9WL0YhVn/T7wV8ohyZBB0gaYBrZSlv+OtAfUjncJRQj1 RAVENpFZ/wsEkWMKdtQWUxJIFVbJDVb/SXRTlFb01hRGNguXoicTt//Wp5nWFhSc8pr+2BOZx9e1 /kbWsJy2YBLb8tgSmBJflv9mF58H23bdORtJDtAWFGYa/xgQ8xPjj+ef5+UjsqR249/fXa9dOqgT Xsjo5c1uoa1Q3262w5DqHnASb9FCJ/GtYP+twexYc3LtMq5w69Dt8Salf3OS7pJz1K+WKtL5UvA6 9/+yIi2BdpB3ELLwdxAt8bOD//JQs5AukrOQ8pN4AS+SrVT3cXT+8MaQzDQEtmUx1HuU/zKWfTD0 dDCYNHa80uvQ7rDPflDK8vlUyxAWX/oQQLLNBHDV+sGIMDdrwrC8kf+8oTsQhfRsEYcJh3SCcIHQ /3VRh4GG0ICQMXJ7krwQetD5h9BHMXbygnB3EIdwh9D+iIfBdZIAenkfeYMAEogS/4pUijA/MXuC PyWIMLCQiDCDyjBA8JBWb1JOfVMDfTB9ELFa0l4UY/1BUWt+cEGUfNKQUo+Ujfz/kpWSxNYDTBbU 09HllPWR5f+Wcg9WDJkPR5OSS/cNJYRY/4V4lVSWGJZyFZOaYxMQFF7/ElkSgZwxi6mY1lNzjO+X 9v/bEhg0nHIYEdipjrqZs5yH/5AWnRKYEpzYm7ZZUS8iqSn/phuV75Y+o3gim6Tvpf9f5f2qcuzp h2I9w6HrUymB6dL/rVA+0GQSMFRk8u6wZPImmP+u0u65r8mw/PCwLHKyEC5w7y06sxHy4fJRW2tw a3AvUfWzw3zpIGe+EClStZJ2Evf00q0wdPBpbIP1cjGSMzL/MlP+wW7yuZKq+MORb4n1M/uvgb0S szVhrVC9snH2AvD/QRByscphyzD4lK90bLFzg/9sknTwbDP9hXUQeBL9sG0ShzOS/rF2wWc1aDmy 8J91EHfwdPR28HbwRjF3EH+0MXcAd+Gzcj11tW15cTn87D0C8MkUe9g/FPrxQKOJylCRVn1Qbk5N uUQGUrlwuXAMSixKLSBKTlJvTrkQslr9QTFjf1G7Y83Wf7bSctMR/0tFgZe9x9QVTYW/Nw+nvpr/ DTbUFOBz1AbPxg1rEZVFgP9M59n7FmkVVosZFQeOkta0/nbZ5xWVjUYYRNiDU1Tbt//dwxy23JJP lt9T26cZ1VZk75QjhHEcxeGRUqdQHbLnGf9ci5j500rSjl1P5x/WKdg+/2FW+JGd5iXrJjSf2GRQ nXD/7lJmUikSKbJlkf9DKfIo8u9mlGc17uMrEUpn9yxhpFDfF5As8GkSpRJpkPhpwfLw+S4y91pq cS6ha3Bq8GqR8/LBHbAYY++wn3NtITtx/kltE20hbNA78C/wsRA7EN9ttjOS99Cq+vVS7vUl55Zv MLT+kXEjcVFWrVD5cBbGYzXyNtFj9F7p8K6S/DBO2bKvmigUKDKws+0B/3USL/CxknTwO1D00jox MmH/O/Cy8LLyd9J38AAQ75J1ko85sHWwtNLu8TEmLbQw//EQdxB3EO+R/Sd1sj6yevb/A1K3EvNz BUHp8KJQcvBy8Od/EG6wuVaPVrnxueC54T26MU72cLlwunC6cAxG//cQhhIbMEoYRdLP0hwS95T/ hrXAB/m5DSgRZUuTEAdLtP/89X/BVXINloUZV6dVcla0vwz1TcYSgRNWExESh9gYIf+LXAGzjQcS nRLDU3YU1JIz/1Gqk4dQ+JC3EoGUMRejk3PXkkcKmZEITmmQfF/FX/b/mtoOnw+vEL8jj9X82DfR a/8lUp2WJlRik58BJnYmNJ1w/2yR7MMmcWUEoQVlumWwKRL/op4rleAnpJQskGkQpRGlZf75aSGm FmtSptNqoS7QYND/8MAr8GSwM7TktOSWMTHrIP/kgWRTYaBtYTOSM5Rtcarr/6s3bWOycekB6RE1 Ia1RNcD+Wunw6fBAskFwrvCu8HLwu0DwNRDNr0MnVjtQrDBhvzBSKHiw1vKTr0ExUUaqUf5SdhB3 ErLxtAGzUnUz8kX/ejXwJHUjsvB3EPFS8VHvAft1ErbSWXwB8/R71zAhQRBOcHyjQXAwkE5KurBu LzFAuqAxoX1TUvZSjlr+TPYBulC6EfyGSgV/1gaQ/8/yRJm9i4F2SJV/5sUBTRP/wse/lYQDvpaI tfzl/9ZUcv+IFL/0+ZZW0oyZWUHKF4tB/wGxPkSLR8aSjJ3Gp051QSf/jFSTdI2WTziUOlhTy6uS NP+SskbUUPkBRWkQDRBg05zB/1+WE36ZNJtamhcTL9SZ14/31tdg42CwOtFlUJBhOJ14/9p0njZj Up+2sfDcNKxwZLD/GLRlUmTwnjTmcd1goONmk/dWy6OR3+FzpARxoGhjpNb7aXPhoFalUVoB4lSm kmrQ5x5xpyHRUDhjcRChcXAC3+SDdhLkFuRX5IBJZDSvMv4PbwFesiLcJHZe0aIh6PTn6RatUOnw 1Fpy0XLhJtHub2KSJVCeEUWeEus1KQFnZBIoumwWiTVsEHcQJ/4tGHOqgXRwtJF3IrQBKzT/d/Lv c++F8HLv9GjSdZTvsfPvAbQwRi1l0CbSaxIvEMN7FmtU9V5PSvSyfHD1VVFCbTIubYDdYaqQMTDt qpAtbkH2cAv3ADMBudL/iFSA9Lz0u1LD8oM1OYc5Hf86iPmIxUT8xoiLO/b/Fv+y//8YO1XNA3g2 lPMEBKSAj8H/jHIGkD70BDgEFYtFAbJ58/96JYx3yCeQUwQlyPQBtox0/43WjdVHpkEljFIK9HmR eaH/k7ZEVQxoSOEOP5zDDRIN17+G7xF/hkCbb5v/msdcUEH/nNHRZZz22dQVnFNSGZafdv+gEaAl oXKhEqJQ3hAY0t1y/6ISbbHe5qLNozIb8N/yWJD/WJEcpVpQ4RGlYUjQpbOnAfVacBfhQF/i0KcR HqHh8Humsh6RZ+AQYLCsc+eiSf9c+ORTmWOYFCLy7DLtkK8y/yJWXrKbWiJTJOElUGEVrWF3JdJi NK7wV2LB9PCu0LP+Wt4QYLKrk9uCJ6UnMGPWh2ScrHBnMMQgSC3mEv9ckLPysbKjNGfyo1WzYaR0 52h0aVppmA1CavRrc/RB47gUaxFv1F70kTDBtvDZ31AOPm00bXBPbeBVQb+m0PbSMjC6UvcQMfBN wcf/cPZvtPlSNDHFIPsnNhquGf/5Zr1EOCGtGrCa+nzEdszy/wEU/7T5ls1yfld54rWDgrN/fIeA 1LVWAbSAVkB4QxIWABAAACYGDwAiwCBXTUZDAbmwuoErunS5sEC6giC5sLz8+buyBwDH3AaSQjbP NLbT/8jnC5QH+MrWyfTPU0TizCD/eaFE9EUZ/cFE8OHwhlZNeP8NOBLTTIaK6g1p1bdMjtTF/4rW T/XJ70/42VDccNmTGGH/n/LM1FL6jpTMMtwUIbAW8v9Ust0U3LCm0FYSGdTc01bC/96lVpIY0BjQ 2tAb8FgSlDE+VlhSHLRZMOHRHaBW2PdZwVoS4fD2WSDjAZaTWwG/WrMfgeAQ2tFcA+RRReRS/+UQ XBHkY13SXbJdsiNW5hD8zUWakikwJzDmEFSxImPL2lnuYVElAZFSMJDo8p8l0mKznmEmst1Uk1pg sj/d9uPyn9frR+tWZNgGJbCCGOUkK9JnMGntwf/vMqNWo1rvNKL0Z/sroxfQ/Z5QOPMjaxOoIuZD nlBiEJ9skDDR9OEmkWIAVrIlAJ/RoNCAbUFScG2QDT5TUf9toabQ6PFtgavy/Fj+uvhy/3Gz60k6 m/0HszNzp7SUM3L/AJb+Ff7G/gN4FjkROEIBJf/5lEG0edB50POSBpBZsHox//Qh1HD0c3oi9CEK UPRy9BL/9RW15Xp5fOYDKELkAyO1lP9EdL5UQHe2A78cQfS+Vgux+/nkDAuX8YDvQR1wDRINE/8O L//8iVIBmgFeS38Ab4r0/wHTw4mJU4YjjTPMpGOhKnD/CLSPGAma4FNUI1GRmwAY5/9Vcc1BVfKi kFYwbjDRGBjQ81JwU9CLNQ4yUnAfsJQSdxwWHNAccPcdAVlyWZFS+9SSlhFbWlCWUFqQ1VLVcP8e 8FqQl3JP0BwQ3rIkcFwUvxLW2DaYFl/2m5ResDBfgf1ecGpl4V5wopIV0Bay2lL/VNEbIdvw29Rh tN1WJrLnkP9ismFQ0PEL49tU23Iksd6jnxt0J3rgVCGy2dAGKR1w/EgxZbEd76RSHtWkQ6OW/6PW o9RqUFGwJjGnZadY5nL/nxCREJ5xYoKewSPVMMDn4f1scLNhINHBVVDo0lJwJVH+PnPzsSzwqTh3 8GixbXUyv7DWNtKy2e0pdRruuFU4Qf8t1u66QtT0Flmw9bQwdbak+YLh+Vr28/TBQxL2E7do/3nj tha5Fn70edK/UvQSgNb/QDlGJUHYvvhGFoA1MCK/g+93snuySFJ50FyXYVA0xpz/itDJGQZmiivH nMl3PsdPl9+LBzt1jIOE1kH4O1EqUaf/CRNSh1NSU1jg0FQQVBBq0P/PUmyQbJDQ82DBzLQI0JFy 85HSUVCKNUmSU9BScA2y/5LxV+OUE9NJhLBL8lmwEHT1WjLWESBfWnLVUdZAWoP/EhIPENaQzPVj QdmQ17ldY/9b8hLSEtJb8mCS2jQW9AiQ+UmSrD1gsNJR20EW0VajlnDbwdwxTp8Q9WIjEM42noHn 0FTRa3gi4VSQ/xdyGfYatBrXl+IbYxv4HFT/ZVReEh2wHXDZ0F4xagLlYf9aNmoQ4fAfWaOD4jJc luP0n86QqNLmFeYpntLTWl9QDLJWnxCfEPRiFWN/55CosmBynrJgk+fiX2BW+nBIAEKzOHc1dmdj Nydk/3ehdxbrFney7V6xtcIjdxf3eCh4C3HydvIleBQ1EvZ2//Xy1FJMUTAD9fT0EvTS9FH/bCNs NDIVa8L0ovXnL5R5lP/zsnB1MANu9HnU/LS4dn5U/3I0uLy1lrWT9MF9fL0SOzL/hNGMQoZCd0KG QwJeAZZ53/3IAG8Cn3wvirzDmsl4jPr/RJLNHgmc6XIIkODSRxKQce8Lo5CxkWIWAD0I0ETRzUH2 ih3AFkA5zBBKU5KlU7Lfk9YPEJRR00GU8LZsI5WQvw/QD9AQcZVBTfA50PaIIJ5eEVGJYRGUEhJ6 Z9Mw/A9Gn7CfsFeUitOYJJgB/xTyFLYU9Nk0m5AWkxngFsPz0fGRIYs5DnBS0JExk6F/nNJT8J2Q U/IYcSODGNR5+nPmcW8jMo9zkgdV95yjP1cZlCUblqETocMdsCct/1lTRuKWoc8QlrBakJcWWrj3 4ZLlUqN3MQjQpvTmdlVxPyIDmpLmclVwntJUkPRe5rJfgdvw016cEFURGYH/I/ckQ+73LOjrZbB2 69E6I/8neO45soXs1u6UsDChfvBW/557ae75pPXFwbD2FYiBbBJ/bLWoh/W1MEH0UqhUv/C4v/Un 9rIQci/YrDhsNtZxhf84lr9Uc9hyNrYU/Vr1kjA07/44v/D00DsyeztIO0JDY//Ddjw6A54F0XtL xDrHd0EE/ztnQfm6b8u3lYHfcghXRYf/0FKBd83jCtPPIIVBz1GEI/+DsgiQR1C/Eknx0OHRuMG4 /1RQSpDSskqyhzCHEg9wh7C/S9BM8IgxTEJsIUy1Vk0yv9Vw1PARsYlhENASMWdNEP/WkIqxRaOK 0cciUK2L9oy/zxbFF3JTEhcRRqy/QQ5w+wiQhnFSU9RUclTw55FVAM3mYm9VcOeQcVYLtJHV/wvC j4NV+FZYV3bWtJT5HOH/lfPg45ZyWrCW0ZahWpRauPsf81uoNZmSnTsjxJ0jm3Tv5nPXxufAJMBi IzBfkJBQ+5wwX9I1kKHnkmhSZ7LxVf/uBDjBY1r91O+02pbwFaQn3/Fd3kfdlmif4CuXMeVt1P/0 0ONS9DY50DGwcXMQQeN0/2wS5RTkdPOy5Zb2km9Sb1P/EGHlVG3UTDLi1ohRxCNMM/+phvWhc1P4 ZPfHc1ZyE+sF5+zUNNQ09Bpfd9V3QTsw/e7cXHfMO8V7EnoUBdC2en97FgHeBlYF2vBwQpT2GWfv 9xJDcvBwQNDtvENE2QknPwjQghZJMiVRG0IKxUgt/5YQC3K/8giSRNALlEfQhlT//TXMAf2UhdCQ UA6yStIPMu8PMoe9xKARQddNAYkwxVLHAXSJlIowGGMQiqGKkv/A8AKyA1GNQ8kcjRYVUo1V/8rj kdSFso6wBtSF0AwQvBFvRsHA8hgQIzAVGUHMsjfvm6Ai4lUBwbhRzAENUwpm/w1jjnILdAw1GsaN JZT2lVLcKDFZsJawWPNBlrAPEvfTNNNUlxKJEGYeJb/wI7nvmyeadCLREwd5JEETVlVyS81xYWBn nBKRVpwxWv9nuaCE3cVnsTpCOMGgdBgWf9133sMo/qT0o1CeNycJdv8swRyypPJqER0kHKFysh4z /7GDbddsRzB2bvXjheV0H3b/5rdrKzJ0p3Ntx23WrdOIYP/o5Kzm48Ow8Ot36wQ3Qaazf3SpNbI3 8TfiNyDewQCwW/xjfHcidyUq/yxN9hI8OH98+S4JfB89RT82ub8ySmf/Q9BDvLyZ+OiBjr1BRtHL YfAFJYIYlXBFML/wwPL/R3LO1As1wa3L1MKw/rDDEP/DEob0h5FLocQSrdBL0MSS/01QiTD/kE0w TPAB1MXVxgH4OWcwA2ECtAORA4IDhv+MAkAmyOcDkkFzU0cG9gb0nwaUU7JXMEmQSjDUXlWw+5DR zMBvCRAJUlTyy/KF2v9CdIX4ClcLZ5M6lHbRllmS3w5wlbIPFtL6EJKp1Au/8P9fElSwTdaddtfY 13abGte0/9eWYFBU0Bf0UjNSoinjZ5L/JzKw8FI13OZkottlslTeP//ew2oSHXVWTx04ahB2sx6D /+c04xPkYGwD5FDkUFsQ6NT/7rCoMuU26LSoMl1W5ZbnVv9vUedHXNxgvCXy6hRh/qdU/yB4dPZx 9G+TdCQeIyqQ7/f/d0EqsGbYZ7Zm+/FB73N4Rf9+EGoV8gfx1Gs6bDbzPHoW//WT8On3lPe0gBS8 mL2yNTC/vdOCRYI1k+LHAb0Qy5WD7/hwc3KD8ZMhT86H/T/9xP92I8JwhtD+socShtD/kP+Q/zxw w9IlVIiQxVCI0IkwART/iZGKIInDAhSI0IbQA3J6s/+DoXsxQgEF0kHyQXR8NZNh/wOSe5bKdYXH ClAHUv40f1Rfg9CQEERw2dCc8XPZ0Hj9kWBzCRALtH8S/lQKUHYU/4H2/jOQQYM2y9QKU44hkxa3 P/QNupYQab9g0ePLDuX/h/SXOBBWdFAR/BJfE2oTJP/NYRMympCMFpqS3XJStCcy/xay3pRSdI7z GAXbk1KjVPLH3nigkpH6lkZVG2GjUd+mRhyIGaSlw6Xwl97B4nBnWfSq9ObQ+V5a8uQxXvwZY6gx W+Hm0MSyYxaW8P/kUOiWqDRc9qkUXxqotuoQ/8SyALCYUsVQYXjEM2GjsZP/neWd1eWnJpVkZWOU 7LSu9P+ucGZTKs+iku9273Wjx6Ub//GEaaemmfNlMPHyAzA6L7//uAczFLTxuaW8EEoRNCXHFP81 ONCSNfo08rxQrxLG8vhw/4cQvRDPVDi4ONd0z8JwOtH//qHDUHcS/3Q8cupSPHbFUH3D0V7EMD5R PaU98j5Stf5aPpJ7UnsSyxF7RHsluFj/QVK3mLdyynYG1AayB1GB6AEHYRYQAAAmBg8AACIgV01G QwGvvHC9Qb00vHBAvUIgvHDEvNy+cfwHAAdwgHT3RXAJMoFRSocQSNCB1oHU/4K6gjbBmsMygnOC YQv20BP/caANqUpyhvIO1Ie201PHJn8QxYmS1bLIlNb21vvV4Vn/2EOK+IqejdDbUu4Qj9JS8/8o QhajKFPt4xew3FKPtM7x/x7DjtpVd84E3uQbZVW74Mm/kzCVsJWwZdDUcuc3Tpe09+pQM5IzMDoz ZSsUtXBvdvkzUhpjnLLYdOi2Xnrq0L8AsLVwpFCj3DMwl5Fe2LP/ACDcIdwS3JVgxt2jYhpdFt+f +GT2KBLnkNqUe2aJZ37/4TZns2lFaLrw9mox5WNnEf9qZ2s7bYv0FGu/8gTw6fgYv/hwrPhxcnF5 OAP6s0VxUX834fvy+/D4cPtw/JTvHHD/hCl2VcNC/sT/AXdcPHIlkH8AUAFQmDCdsLUyeVMB4mff mDD0VADQPTC6kDG6gbpy/7o0ffa6VLn0QhG5xwXzfkU/RtWB5TqwClD6EfoJs1Z/gRAIkIDQRXAJ EAhwCBDF/iA0UIOzw2XDNDqw/Xb+Ev9FsIBQ/nj92sM0hPZ9cg18/8XSxdAPEEoxcyAPJofoTCP/ 8BBOGVEFzDiLPwbLBhpT9v9UM9KEUyMqEc5jj9LOsieS/8/RtEELsbRBzTYXlFVUk9e/GyOPNhY4 KdTUkpWyt9Ri/6HhlnQj0s/QmRDXUTJPEt5fM5EUJ7VwXFCYWPhbgTr+X1xQM1KkUBZUoncWQtug /5hC2+Fb1NhzGCNb094J3xL/WzAYdZeBtXCZECFToCOZ0/8igTNSonykVqUW4XoeHiAa/yEfbovm 1DBZLganR+c/MKX/NBDrcDRWNJ+t5TUwNfrtUv/u0+7hNRDutysmOahFxQBTefWiSlKywXbyLfKz krW/PGF30jvRm+G00p2w9vPDvz3SPbJ4srVyeNB5EFH3wf8xk7pC7uH31Pc29jW5xrdD/hD4hrqh friysPm3NmeAUOdRsPtwRLD0YvAS7TKCt//8x/oS/VP/LYBQ/7A69DrV//1lgxZItsT8wDACMoeS AtL/A5nHJfAQyLfJBslDQVVRCf9QOE9fTmGhspXyUxRVdQ+F9wp0zZRkUJagItwhY7EMA98KlM/S R1EMZ5B1RlQyzNX/zQERMksUljMQAUwQEHBMVf+WYpujmDATlNeVbkdOHyFK/6LFZlAV8BazUGqi w6RRUar/1+PXUiHbouMUEJg0lzIYOP8iFtcUtjIctFhSZn1YQuFr/2b+otJnulx+Z3putuXz6Qr/ 6EapJ2rY6bJh1ms0rHSslP8n+CkYchLtE3HjchDu0u7UfysUcBAq0Cu+gpiw1DIxRv9pEi248bB3 lJ6SLtSaUpeQty/SL9B5V2d4svRyGGug/l4xcLqxbYMtMi0zbej5A/9vei0yurrAtvpYcloscMiQ nNNeN7CtEDzwslq/MN/9ejnU/xY6+P+wkzsDgFD/dpB293aBd7R20TsnPLXEY/MBWIbQSDGG8Idy AtsDI/ypOYBQyJKJvkITfeIFj/8GHgYWzXnSp831kCGOtM12/8+2g9QMM4SDg9SEsgwyjlL/g7bf 8puxzcMP8UvDS7QQkv9MMkwzmsIcoxOw9JATP4mD/xZV1+OilBY+jP4ctha6jL//oo8WUhTymRCY MtdSVNpSG/+UT6PflGwgSpVHHxmYC1u2/yHZJUiob6X7JYjpoerwJvV/Y0cn+ewFKNjuUaGiZeNP /2YlKrJwMrF6urAyU2lBttP7pKO6kUqy8i38LpIvEs/Q37Tw29Avs/QDMFQ4tOEwMvw4Y7aQMXJt lm2SunL1lf/5ArpmbwZvB7s2cZY18vpUyf249WK/MHBOZND78P6yduE5Wf3l/xx1+HZUd7j/d5V3 iTsU/9S6MQEjAVJ6Mz/GQcXwAjHGpQMyx1aRVv/If0FPQd9CKUFUzLK81wpi/0XIDwHPEIaSz9JH M86ESOPfz9LP0FYSg/XeRF7cchlU/9xUiRJHMdTi3sLVJUzTTKb/S8ERslSWJDJOUpGzi0lRl/+Q j5TcFriY3ZjOHwbao1h6/5pa2rfjxcx2Wb1YQ1q9WabvWaNdfll2XPR9XOjjolzP/+SXYclh1GA0 YdEibuVE6aH/6tQnXOwWZNBkOe0johiidv8sMiqyLDZo1e7hpJukY/nx1/sBabJpsLTyYdXyY6bU v2tUMVBr0zBFbJqpUDFwgf9xEqzVcOVwmHC25nWtRTY2/zY9/INyVnaQN/IscK8weNT/tPY7O7LE d4Z3Be6S/xD7MPt2kO8TWu8/7wGz1HiYeXDPNPC19npwAfQnMXpwezz/c/BBlPuxvCkFeH0WCFZD NbZvfpX3xmuC10VFdkqB//nRvcYLRUcVRwaGIwvyR9D/VnYakBVzGMOD8FYUwvILEPfD0JJQFHQ7 FOHDcMLWS7H/EMEP8BYTE4QBhhLrFnIWNv8DP1FBFnXFQAVEBSaUb5U3/wbPCN8HqJNPB58LqQ1W DN7/C9qWGR8L0TWYj9a2Id8iaf/PMiJbE6eesj4Rnu+gPCkU+91UGbhPZmUrcmMwoxGkgf8bkiny G7QblhzVoaFpsDXw/+ISabAuVC5ySDAe0adFMVDH47KoHzCgY5RWcJCqsL/lnCGX5YUhkuZ2rRxS 6KUPJTas9uwyNPCKNc09/62w8NF4YevxsMc7FbIE8UX/dvo58O7U7nTvFyvP7pR4Fe924TUy4DKg cUU+0npwPpD8Bil6kLcQP/AvkkAS9FL8N2d8krh0ud26DzMfuqX/g/FLYYdSRfRFEYeBNbSHEv/C 001hvthLEkhwwVJWEsNw/0b2hdDAFkdw+tT+tP+Qi3X/UAf/Mv+xNyP/kAFUTtXaA//GFU8GPsyP zw4fUolBvdMm/xHKC8dbekU6Wf4NVhFWQ7j+fUgq0avP+tM/0sjUaUvc/8t/zwbVpDuB1RFQixT2 Yt7/oHKgONz7ZchmIxpwZxRl0/hGqzkbUOEwHNkbglhl/xz0oHBwcK3waZTiNB62prJ/a1Ig0Kaw a9Af8qiwIHJZ/+Sp4lDllCUy6JYlMnHTrgX/XpeuR3IydHIlMHIU6PhoVPlwcKw5V1Dr8nddLWft 3GvuOPCSk++iWvDQ75a0/++hZ5Dw0GfUaFJn9mf08JJ/Z5LwkHbS37TyUHo0ejBp/jUvUvNSt1Jz cDDUfNMyRv984fWSfhZuHX4O98PDcTjg/74FgRWHQ/nS/pS9kThB+vT/+3S+tDcTgkQ1wjZH+TXD A+j5VjsBAGM80/9jATb/O9SSkP9x/2ICaAGHitgDuv+MegUyfDk84ZaUybI/1zvg/wYmBOORtEE/ C68FdJYWDl//hAeAOQThDVqGH0IPEbeID/8P2ohakZZ+FhCUjHQKnciluZ1wzTkW0RcmF+BFnvD/ U1qgthl1VUcuNBuSVJQbkoiKMShXgEbuRRuUfxwVlIaRRa3xHaFZ1FpzVj+mUZbh4xIg0OPQH7IX X/+X8KkwIDKpEpfwqPRdVpm//12IrgfpduGyrfDo2q02rTPyTmLQajUbkOjUKZO0o8+0dio1s+Nn kPVeuRK4kP72r0FqEiqS7pTv12mlaJ5faJvvK65y4DLydKzyoWgYNeUka3Dy8Ik10/8wYriiMKP0 kzJPuxr1OKr8//+QxRD7cTVCNwF1MHUyADT/NrX6xDhDwNI21sOR/qJ1IP2+QEYANHUwrhWuBMPh /xH/POB3AX00BNXXYxaw2hQCFP/GVxVPP7j/MraYgJ8J7Q1ePxGezD68ukI2zfWMgRYQAAAAJgYP ACIg4FdNRkMBvzDAAb/0lb8wQMACIL8wvLzBMfj8BwBK1xCF1RBJfcOv/8S8wtKIesXYSHnFqcXU 1PL/EJbQObtvQjnK71Kx2uQXIv/bh4+wVDyVNFV4G/KS9JLY8RuSajFJk6HR1eBsVKH/GDBWMpW2 4lBaUx5j4xLi0L9bcuKQ4/CX8CDQl/BZXGLnIKFcMOT09l4lFF6WX5x/YDJhMtpaKBTa2Ol06Fbu /kHScJPQ6TYoFKJ3o0WjNoA4a9x7/X/+4CED4BDgctx/eXMWZ/dptuE6Z/TUaGHi3+Nl4pb/Z9br ECXwLjLycmsSLxDzEKDEIKMY9KFgZ/SQ/zEVbWmruG4/6ctv1v+Q/5L/65J20Haw/9KuW3ZFOBb9 UP+vt/mDsNKw0XUh7dOuBbFx+6/B69JcdwJ3BPGmFiQ94f8WsAF0jrB6lnpUtJUB4zuS/3dzBQUE uXzn9v5/NQWm+Kv/g7qEuoT+uBX75f2f+2362P/4dv4//I36/wFPBN8Br4u29wY/uKl5MMyO4xby UtiP1L9UVlVwVTJXkNDUkFVCGJL/3RANMpOxDaKT4d0S0nKT0v/RNBu0HXAuMlYRWYEbEB2yvx3S lrNngJbjHxJbcPcfwP5Wl9HYAdaxIQPX8JjSmDD51/DWXtxTJEZfJZt4nJKfFd5hMtv43FjdEGkx npDfIfclxN4FKxxmFN3gIxv4+eCVd7OiAWd2o9zjX+RB/tUfCB7iHuFn9mo0EBAJ8v/mcqgQJxDn EKh1MOQxz6mdvySOMUaLQPGGJ6nsMVrscfvtpSl3UnDS7HKwUDfxNSL/dOErU7IjsXQ60DrQPFB2 sf+ywfFy9zmzRczxtGIu546w/7RWPtq12nv6+TaEFYJjhX//+ge6vYiLQ7k3rropxdc57/86/zVP Az8+L8Kyw3jDE8Jm/0lnNr+7y8lYvD+9ws2DCfz/U3aQ2Ax2k9BINVOjDV7R8/5C0nDSUFeaWZAQ UlmSVlD93XFOZHAQ0pXQWlARVRFDv1ryElBcsNVQW/CX8WNb8PuYME8RZ5gSmDFPYNgBllD/m3Zf mNo+25RaEVLH210UwfmesIs1WZHlwRl2YBPloc+iUN404hhnctVe4BQb9Ib/4CXgMPx/u3+h8O9o VFmYIDJak14gEiARWyL/WyGhUCAwW9pblFp0ITSiMP+dcJBwjzDmcmLw4RBsdCP3v6tLbbJu+mD6 qhjrUjrr4f9jkPaQY9LrkmQU8XFjo2Oy82OQspAZWyySc3CvUuxy/3LysdQreSxjspLxVPFw9pL/ J7ryGH51i0Aw5vMCa0V6tv97s3rI9ep85fFwLZqD9W9t/4VUbvUCqXAW+9iE/HSXMkb/byNz+nQ+ dz/8j3ZU/Ph7Fv89v3yve/9+z4TfjASOxY8Q3suBw49zzqmP9M2Dp0jSn90QhLIM0g1UDX4oKUqx /9GpkfOSA0xSEJAZMBAQldD/llBNEokziaHVUhJQElDVUO+XMJfwTpNPgTeYwdaQTxLvErHfoZoY 3ZRSFiaNz58z59pL2XSekEkxVPIUOFUxP5wIn+Xedt9QHnHkYTZr/+ByWFZYluAQG9DhFFmYHvb/ WpRbdZdHIDBcEph2W9RbND8hMiExk0Gc0M8QXvDLOfwVYyM4m7ipO5zKJwadDx8n3mi2oJwtMrKy OmMZ2l/WMPjugO2juCxjsnH2Vizx6+Bfb1FpJaH0pNv/pexq5mrn8rQw0DFaMpipvP/4uH3frE96 NKy/rs9AF0Ev/7F/so+zn69vx/W157S/O83fw385D7rftq88dM1Fpc4RvwqnztJGFIQYCvKEc0WF X/sO6w7xQoawVNBLGNOyEHJ/VPAZMBCQiHIQ1IlVTaW2/04l1pBOkRLCi+FPUYvhT3EyZ08yFmNQ MlEZTnP/UmneFFK1koKSRSHQyjTcEP/dENJQ3RBTnhn0GhJWP5WjgVly9WZ4c7p74NDzlD7g0PVi WXJdUtGW0lT7W3ZcN16YdNRU2BDUUlew/9TU1PSZc10lIdALsOcwnF//YEfp1Ni/6MXaPGPU7BLx sW9ko9w93C/2kBpmASxy2f+kA2USoJ2kQeDTogWkMi01/6SlajItnTBGMYr2ZuWv5r//M2Tn6XXc cHToFHX46l/qK/97fHtX6CnuXuhTrYbw7+gz/2Th8bvsD+sXeumtt/XvejL/vFH2be5YbFAZECJy Cbb6M/w9rPong9AKFr2QGND8Er/ANUjBwNLAksFSC3FCwVTTD3IY0AclVNAQSuFK1v9LkYfkAGLE Y8USxRIRUQGD7pWKIYuQxdDViqFQENTS8cgwFl/1mWEDUAOyxxL/U1CNUBfYjX5TUo8yUtrKU/5W yVBU8A6QvZAWEo7YTJHvj6YXZQlUIdKTjCGTNllwwR1QV3N4e5kMIVlQFtsc4x0Quwxgexdr/1ly DXPPZZZ4W3rTNNUUEFSf1JRdkBE01LfUQ/ZiAtH+YsgwI9DXEpuUnbactCPU/yP2YpidH59vaNah tuHWGb//pGMYnKT9pG6kZqRipOPoVP9wdnl2MNBE8qq4cfbnP/SL/yN/rce8VfeiJU+8Fa3KJgb/ NQG4/yXG92YpzrpO7WNBFf8ohyaeKRawWKrQ978waDIH/zcSQR5BGS1FvXWBx/rRRaX/+3L7cYNn /HqEsv20SXaHGPn+duck+ZBK0sORS+EAEP871ACWyTABNAFVxeVO8E0w/tYRYcbQmDJdkMbQA5KL Uf8/YBFhi5A+kAhYUlvLpcqY15KTQwWQ8IxUwDFWdFaS/wrRzmOSkkUzRMXKMwrBVhCPCvGTZNHj R5Fi02IMELS6f0gwmkhBDDCaDSHzWVBI0PZmWXDRclsR1gn/0vrT8xBlERMSodS0TNhQENfIME2+ yDAXyCBn1xATVP/X1l+WX5BfcGCYX7zaW5th/2QT3aPb+eDj3X/gyOElZNT/ZLZUtRkNWRobNhsz pEhbp//m3R6l4vRb2aHlejcfJlup//I/YQlhPuy3YU9k32JnKpb/8r9ij/dbaWtmtmi/ZM9pX8/w ri3GKoqkY3tn+ZCa0P9xtDZUchQ3E4JBNxS9kPv1f7/BhFI4lf2HOXr+Ev6U5rggrT3/NsOSh7FG ADb/QzEBI8nRAQMBsouQi5ACkP8CkotQA3DPMANwxzSL0YsB7z/yiXCNdXymUslWyVfKYw/JUAd0 QzKBkGotMEb+lJLFQxiAl0SFgdgKtZpDLw4xR6JHwUfQFRUgd5lvSKFIMAxwSRF3z9DT8WL/S1JK PQ8H0/bT9BC4EpJNdf8DYE3PTtNO4U7S1xBPEE9V/9chnZ3YJZy3UGadw0+xF0//Vj1WaRo/ko2S f5SPW7dgDf9e921J7vpoP5kmZsmbX3AP/50/nM+e326Pn7+hz6AfpK//o7+nTbZzow+nX2/Nqt+l Z/3j8K1yA3KYNbJy+L9z+6H3/JI39sww78ClwZTBsjoYz3hQwzYIMHcwzkHDlHgxvQAGTsMQxFDJ 0MXQtLUC7bVhcz0BAZLWPiDTYUBQ/8eyxvKLcceCe8PHsXuhfFHfQIvJUgd2RdhC91bCkAgQ/8ww ydDFUEQ0zxDO8bwizsD/vITPI704ztILMwvBgzPRgUeD8tFwv9Fm9GaEMHDIVm9WwDAWa8/QTzAP 0XBJUMExhYEWEAAAACYGDwAiIFdNeEZDAcHwwsHCtMHwQCXCwiDB8Lycw/H8B/4A09XExtPDS1bV E0ytinL/1NK3cE20ivLIlLdyitQ/svNPUcoCZzgTQcqSjvRPsv/a9th2FdhRnlRc33JV/lS5/+Cm 0S7Sb9F4lP8aylol1n//14/Yn5YuYAma32qNZDdgif9sv91Fllrff94P2x/dK2B//5lv4pxm+ts+ cD/cT5f0IPD8rDVxsvrQrbdyJXLRrqL/7iJzxa+Y/Nh1tjnx/iKxy/87kPmQdzD+0Hf18scAMDuQ 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 MB/pJFQgnyFNeu3KdvUA/8t4KUrLusu/gk+DWjKJhGv/g7tIWH9RhDjSX4ZL1n+Kb/+Lf0+fji+P P5BPQ7aR3+S//5Nv5D+Uz5afl6+Vv+tvm2//mm+c/56fnZ+gL6E/no+in/+kb5i/o49LuvUSqS+n D6n5/fgma/i2U2StZPmXVFX6n//8BFdaV7P9ff4FWWz++f/X/wD4ANNbtFvkXKIAQPrCAxL+lF2U Xc0E4g/TBgJqIWHE/xuwXzK/82G1BwwJMglGW7H9CgBavTEAoATSZa9l/2iP/w2PaSwOtA97BSIQ iRDVbDb/Ec0SUrnVE2UYVBbWyL8Vw/8XNnPFySUYOBh2c40cLs6//xxaeSQcvB3/fqLS6tPWe9n/ IxLUv9XFIp/Winp3K/CHUv96sSkR2bPZr9sWKRN/en9+/91P3lzfn+CphpLhN4be4gv/4bqAz+Sv 5tzieuUfiP+JT//qj/gwiabtX+sL7h/vL/Ff//Jv71+Iv+P182/3H/gv+T//+k/7X/xv/X/1L+u8 9fd/Qv/tBn9D7LfhogFmAYj+D4yI/6wTUlBTQlJhBpNS46yiB65/rkasYFV4Ce2wfldDDC17/1jz Y2FZemNhY3C0WlsQtZnvXBK1ALKyWtBCvTBaMGNw/7dzXfq1ALyhZkNfVmAHYeTvcmG6ZBRlYfOc aFBehBLB4VKAY0pSUrPRwAG8o/8XhBgUZWQYSGbPZxbAEcAV/2d4G1Zpsmk/w7fD5sTGxa//xl9t kiHWcVjICcf4JE1ytf9yb3VTJwp1TykPeOMpfyt//3oxLIUqYtKv07vUKy/u1ToPfax+5V5wwBG1 7+f39TOw7zO09zPyNAU1BDRw/zQ0Nbo1XzePODQ0FjQzNAD3NHAzwjPQ3jpyOlI20ztE/zbFO1U6 RjppOrg6cjm2M9H9OmX/PY09JDpROmNBmToD/z0oPHZDXj5dQexCCz7gQsj/PuFCrUM1PRdAEz6E P0RB5v9LBEXFQBI5tz+CRc5OrUz391AvT19R7u9SP0yJPSRUX/9Wi0p0Vp9MwzrCV3hZl9zxfapw 94UgNABAAIdxWxP3/6wwNQBb4+ggNHBAAM3QfbD/XEBcMlwQ3PFHmUAESi0z8v+5YWzDbUNgy24A JgBhE3Fj/2J6x8JuYGJyynNjZ36Qu/D/ynZlG2WGZsZlMcfAfoBnVf95YmepfoAuEml3ajImAH6B 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 NKHFXNCsf1zhywD/AqI8cz5ylDQkcKCB6XCwbP+uROLRmLGu7+FN+pGz1UFR97eP7OfkEWPpkzq/ vO+9//8LGSZiNC/AX8FvLxbCP8QPv8UfLwzGTzD7x2/F0a0SQbUSQN76ELUaUT4g5xtD/8M3JwQl IHH1LB8jaxEVz6n/yH/Fz9If0y/UP9VP1l9ncNuAUT4g3hrjFoHOOfAYAv8LgCRgdbDicHaAy/QW cCXw/t6AU2tDcrDL5dAf1y/df//ID97f4K/hv+LP49/k7+X/v+cP6B817+rv6//z4dZAQP8EAepB ABJiEKgR7UFD8fPh/0P9r5c+VJ0x7z9QrvLkQ/HvQ/GyMQEBcSDGBVFxICSwv0lG8rdc4UPx/aGp MNZfgf9FcEa16kHuZPfv+4L0MSXA+enQMXv2cVzk6l/yfj/R7ta8D04hJcC1u2ELgBxw//pv/5+R 7loRWwGwIQB6R1HvlMP8vwSP/cOtQMH+Xwc/v/LGCM8J37e/u//4qYz5YfPbYQ2wjNbt0gi/SQrt Qf8Orw9fEMD98UGEVcERv/1afqVNsT9xFF8W/xgPZSI5/yUibNFnz4tfG68cvxpvHt//Hg8f3yIP Ix9rSIDhy4GAIf8oZSPvJtkmDyZfIE8qXyvP/yzfIA8t3zAPMR8pi3O9auX/0GYyPymPNv84Dy7/ Oi87P/88Tz1fPm8/f0CPQZ8xznKRv+o/RT9GT0dfSG+6T96AsP6UDAD330v/TQ9OH08vUD//UU9S X/pfVH9Vj1afsTWa8H6lDkD0tVjfWe9SzGHw3uOc0PD+pa3GmvB/QF2f816v7iJ7hFhPYS9iP2NP /2RfZW9mf2ePaJ9pr2q/a8/f91Pz4vD/bB9YI7VuX3D//3IPvybNIb/W339z73W/ds//d9/PCHjP ep97r3y/zq3cX/9/z4Dfge95/3RPhF+GL4c//4ivh9+Kasmkya+Mn42vjr//j8+Q35HviT+UD5Uf li99v/+Xj5lfmm+bf4tJ6f+e/6AP/6Efoi+jP6RPpV+mb6d/qI//qZ+qr6u/rM+t367vr/+xD/+y H7MvtD+1T7Zft2+4f7mP/7qfu6+8v73Pvt+/78D/wg//wx/EL8U/xk/HX8hvyX/Kj/vLnxi5Qhly NL/Ob89/0I//0Z/Sr9O/1M/V39bv1/8m5v8Z79nfOaeccNif3W/ef9+P/9qf4a/gf+Kv5N/l79tf 5u//43/qL+ff6y/pn+nv73/wj//xn/Kv87/0z/XfQ0+eX/lf//pv+3/8j/2f/q//vwDPAd//Au8D /wUPBh8HLwg/CU8KX/8Lbwx/DY8Onw+vEL8RzxLf/xPvFP8WDxcfGC8ZPxpPG1//HG8dfx6PH58g ryG/Is8j39ck7yX/cxScc4CU+BAzUv9/U3NxKDMoLykzKhopJisv/yw/LU8uXSjvL/8xDzIfMy// Kb8qbzZfNSwqCDgvNj87D/88HyrPPjY9AT1vPt5BWj0//z5PQl9EL0ZfQK9IHz0vSj//S09HH0vm OmpOrDXaTs1zkP+eH1MfVC9VP1ZPV19Yb1l//1qPW59cr12/Xs9f32DvYf//Yw9kH2UvZj9nT2hf aW9qf/9rj2yfba9uv2/PcN9x73L//3QPdR92L3c/eE95X3pve38ffI99n36vf7/MllJSjP0nUIzN gIGhJ3GCD4K2+BDvgyrNcYKUJ6A5hQ+FUoOw94Vfh4qE6jGH/oa6hrWIq9+KOINfg6yJY43WOYSn jjz7kS+R2CmQHYSkj++KOox575Yllv+HjIdxjM1QjvGIP/+HY5kjmUXNUCegnACF3ZHZ/5YVjqhS IJ7yh2+JOpkjms3/mRKZs5kUiemNn4Tppa+OW3+lf5MClAaoz6nfmCSfcYT+/1JfrV+ub69/sI+x n7Kv/7O/tM+137bvt/+5D7ofuy//vD+9T75fv2/Af8GPwp/Dr//Ev8XPxt/H78j/yg/LH8wv/80/ zk/PX9Bv0X/Sj9Of1K8/1b/Wz9ff2O/Z/yaSWmNIhFJagXBSnIGApdmBgK1C2/LcZK3b79yZ/kLc YoFQ3ADbwd8hJ2DfEv/b8d/j39nfyt/P4Z/jz92J/+Uv5jbc9Ocf3IbcQ9z66Dr/6b/r7JmA7I7p ZO0p5l7iFP5S3OToK9w43xSBUN9h4gD6WuIBlOIT32TixN9j8tP784LzY1rzYNuw86TvL+c4/+lY 8pbi/+KH8tffIvKI9TP/+RX8hfe5/g79jd7D3uPneP/4++yt7fQDVQAxAtfc8QOX/9zE83JSTwdP CF8Jbwp/C4//DJ8Nrw6/D88Q3xHvEv8UD/8VHxYvFz8YTxlfGm8bfxyP/x2fHq8fvyDPId8i7yP/ JQ//Jh8nLyg/KU8qXytvLH8tj38uny+vML8xzzLfM++AkwyCADVgQAkpAKo1YaE14mgB4AE14gQ1 YRQnAYEgAzXjfVxwCGFyfTgAe1xydABsY2hcZmNzMSAgXGFmMDjwbHQGcjiEOTFmMzlcYwM5IDlQ YW5nMjA1AjU6k2ZlMTAzMwk6k25wOuNpbnNyCHNpZIGwMzg3MRo3OlBoN+A8ySANCr83wj5/P49A n0GrN7NkOUNRN9FccWw5QWk6gHI1RCF3POBjOGBDkndygGFwZGVmYXU5YD05AHM30ETgPZBF4m51 Sm04oGFFoHRvOQBkiGp1czlwaWdoRdDNRFBuOoFIMml0RVA6gJ830TfgPNOJYD0QNiA4PdpiOQBp OQI5AXM64DlMf0sQS0BLsjpRPRA6kzuQMgY0OydOEW5vcHJv3G9mO9o7NDwiNk4gPJ//Pa9Bz1O/ VM9V30KFSi9LP99MT01fTm875FuQNDqEUG9TUX9ShENvQyBpRiBpDCBTRiBHIGksICDARnJldW5k RBA4gABlIEdy/HNzZcFhcE1laWxsYcBewNVhBGFhUG9eoCxXv1jP/1ndOoBav1vPXN9d717/Umb/ V69lT1nPZ59or2m/as9r341ShEt0MEMwUmVnQxH+c21fbm9mb3BfcW9yf3OP/3SfUm1273f/b396 QjqEev/vfA99H34vfzlGY9BHMERQQGEgbCdBbWCQb/xzYWQ/gV94/4NPhF+Fb/+Gf4ePbM+Kz4vf gv+OL48/F5BPkV9/G1aJcU1vef9WoaNwk0+UX4xvlk+XX5hv/5l/mo9SdWFwnM+d35VvoC8foT+i T6NfpG9gQ0gtNsg1MTRhAGVtrCBhUPxuYaXfpu+e76jfqe+q//+sD60ff3+v37DvqC+zP7RPHzwU t3C137bvt/hUZWwQLiArNDjgKDApEiBJ0CA4taAgMjm0IDU6gH7DUIkBeMH//8MCOOBWVsU3uQ+6 H7svvD//vU+1L79vwH+S888fxbjF7/84zznTya/Kv8x/zY+4HkL//0QPRR9GL0c/SEtKHtJPOnFr 1hzQySo6kXSvQd0webVjIHM5UHN2wGFQbcOwDDI2vuHjcGxvY2s8ZWTbATqB43GvIGlo79Zg2wBh 4NsQMeNSYdDlgc9hwGKg5LLmE3FmYJDjwH505MZPEGPw2eDjANsBOQY53rDkN2V4Y2Vw/nQ5QeUq OTLmSutE54XfYS/oSetE5GRv4E7nomw7/+pv63/sj+iUwxDuGmIw3PB91hBnnJDvM/GP8p/zpzJ3 9E/1X/NcM/df+G/zXDR3+m/7f/NcNf1//o/zXDZ3AI8Bn/NcNwOfBK/zXDj3Bq8Hv/NcOe8z6HY6 MO4L/dzAY/QlDR8OKPdEDy8OKP/6VBE/Dij9ZBNPDigAdBVf/w4oA4QXbw4oBpQZfw4oCaRfG48O KAy0Cg8d0zXuC2P/2uBj4u8/8E8ff+iF08DuC75USMBjIB1L7RTuVkTbFNQgUEkxZ9rRaGGQZAA+ dCJfI28kfyWGKAxTdX5iYVAnBiqfK68sv+MAMu4yLgw5cGQAZy9fMG8xf7Myhu38RW3b0dZQczRP 6zVf6Ek1C1xUx0BjIGJRb9ZgOVM1nu5WUNQQ6hBo3G9s2wBWQMHAeCo/Ol/fNl8nj+6FYQBWkGPz 8UCP60Gf6Ek2N/xM3WJhANcQ//PiRa9Gv0fKKAxJZElg3TD/Sj9LT0fKMwxJZD13Tu9P//1IFTPu C2LgYLDcUEm29CX/U09UX0gVrvBV/1cI90RYD/9ZH0gVIQxWtU5SV59db0es/jZfb2B2XG9iD0e7 1+BkD99XAFKyYO9mj0esOGiPaZb/ZY9rL0e7C1xpWhLkbw9wH9XtlDc3/ETXIGtOT3QP23UfKAxD P+CJUGbbQEm//3gveT918TMMe1d3X30vdS5/Vdx7V1K/gb9Hj1GPSacg/EFj6hCvUGoPhm9MP4iP /2Cjih+LL4w/UU9SWI7/kA//kR9Vn1avk++U/5YPWl9bb/+ZP5pPm19fH2Asnow+D+5l+FJldjkw Ii+f/0J/HXn/nKxgoylnpo+nn6ivMoYLXPhRdW/isKv/rQ+uHx2m/Tf8SeLQ1ZCk8LB/sY+g3/9j 32Tpno+2v7fPaD9pTLrP/7vfvO9sz23cv+/A/8IPcV//cmzFD8Yfxy9173b4yi/LP//MT3o/e0/P D9Af0S9+/4AM/9Rf1W/Wf4OPhJzZf9qP25//iB+JL97Dbq/gL4yvjb/ZSf/kP+VPkZ+Sr95p6S/q P5aP/8i/mK/uH+8vm9/xT53/82//9H+hL/afo0z4v/nPuE/77/+6bP3f/u+9bwEPv4wC/wQP/8KP Bi/ErAgfCS/HrwtPycz/DT8OT8zPzd/ojxLPE9/SH//TL+OfF68Yv9dv2H8cHx0v/x4/3L/dzyFv In8PH+IP4x//cy8nz+ZPKe/ZOivvLP/rT//sX95pMN8x7/A/EG/yXzXP/zbf9Y84//evOx88L/rf Pk//o0xAb0F///9Dn7psRY9Gn/8FH0i/v4xKr0u/Cj9N38Ss/0/PUN8PX1L/ycxU71X/FH//FY8w P1p/W48ZzxrfK09fX/9gbx8fIC9jz2TfZe8kbyV/n2kfai9Wzym/Ks8gNG6P/2+fLh8vL9lYc590 rzL/NA//3ml4j3mfN+9YHzoPfX9+j/89P4CvP1+Cz4PfQo+F/6NM/4gfiS9Hr4tPumyNP45PTM// kG+/jJJfk29R75WPxKyXf/+Yj1cPmq/JzJyfna9cL10//3fvoi+jP2F/Yo9y/6cPqB//Zs9n36t/ rI+tn2wfbS+wz8+x355/cW9yfyA1tj+3T/91z3bf2Vi7T7xfeq97v95p/8A/wU9/n5/Pgb/FL8Y/ hO//yF+HD8p/y4+KP82v/PzPz//Q349f0v8CHNTv1f+Uf9gf/wc82g/bH5mf3T8MXN8v4D//nr/i XxF85E/lX6PfpO+/n//p3+rvqS+qP7qv7r/vz65//6+P8y/0P/VPs8+03/h/+Y/n5i+5H7ovIDb9 7/7/vX//vo8hCAL/BA/CX8NvJhkH7/8I/8dP53/JbwzfDe/MnxAP/86/Ei8TP9HvFV9ErBd/GI// 1w8ar0nMHJ8dr9wvH89O7P8hvyLP4U8k71QMJt8n7+Zv/yoPWSwr/y0P64/snwdPMY//Mp/w3/Hv Al82bzd/9i/3P/863zvvPP/7f/yPQC9BPy3WxHFmP0BtYXQ45AA2AjEu7FN1YnRsZdAgRW1wgcBz jGBFn9dGr0e/AEUyOOxJbkBuMN9CMEqPS59Mr0g+MzjsSiXgUmVmZXJuMG4gUK//Ub9Sz1PWPjxP plWvVr9Xz6NY3w/MQm9vpbBUAIAPSmBb01PHJKxCaWJs0QBQZ3JhUEB5W9NeLwNUAy7sVE9DIEhl AYHTO319e1wqXDZkSDBQYHQ/QFAAMDFoMDUwaBIyaBNn0DgJaHQ0ZENANzg2ZAQ2Y1nQMmU1MzQY MTU4anBpUDRjNX4yGlAF0BUAGlA+IGoQM39q8GvAaHRsfgCwaBE+4GMAZjExZTBhMWK5bhBhZWfg bt9vzDNuMIdwsWgQW2BmZjA5bVb/ci9osXL9ct1xUnVyclZ1Xv9113ffeO95/3sPfB99L34//39P gF+Bb4J/g4+En4Wvhr//h8+I34nviv+MD40fji+PP/+QT5Ffkm+Tf5SPlZ+Wr5e//5jPmd+a75v/ nQ+eH58voD//oU+iX6NvpH+lj6afp6+ov++pz6rfq++s3GSs1XVlrs//r9+w77H/sw+0H7Uvtj+3 T/+4X7lvun+7j7yfva++v7/P/8Dfwe/C/8QPxR/GL8c/yE//yV/Kb8t/zI/Nn86vz7/Qz//R39Lv 0//VD9Yf1y/YP9lP/9pf22/cf92P3p/fr+C/4c//4t/j7+T/5g/nH+gv6T/qT3/rX+xvdXNq8G1h dcHuEjfqNGhENGgBNnDh7pI+IP/ucXGi8F/xb/J/84/0n2ixL22CaAHsz632Yy7QZDlqOPgwYvhQ M2rBaoA51WZgZmnQZGphYm4wds+j+kZxoGQyN/lQNGZg+mP74GNn0HZf/V/+b/9//wCPAZ8CrwO/ BM93bwbMBU//CN8J7wr/DA8NHw4vDz8QT/8RXxJvE38UjwWvFq8HzxjP/xnfGu8b/x0PHh8fLyA/ IU//Il8jbyR/FZ8mnxe/KL8pz78q3yvvdB5oBCzVZtAALwAAAAADAN4/r28AAAMA8T8QCAAAAwAC WQAAFgADAAlZAwAAAAsAAoAIIAYAAAAAAMAAAAAAAABGAAAAAAOFAAAAAAAAAwAEgAggBgAAAAAA wAAAAAAAAEYAAAAAEIUAAAAAAAADAJqAAyAGAAAAAADAAAAAAAAARgAAAAABgQAAAAAAAAUAm4AD IAYAAAAAAMAAAAAAAABGAAAAAAKBAAAAAAAAAAAAAAMAnoADIAYAAAAAAMAAAAAAAABGAAAAABCB AAAAAAAAAwCfgAMgBgAAAAAAwAAAAAAAAEYAAAAAEYEAAAAAAAALAKeAAyAGAAAAAADAAAAAAAAA RgAAAAAkgQAAAAAAAAsAqIADIAYAAAAAAMAAAAAAAABGAAAAAByBAAAAAAAACwCpgAMgBgAAAAAA wAAAAAAAAEYAAAAALIEAAAAAAAADAKqAAyAGAAAAAADAAAAAAAAARgAAAAApgQAAAAAAAAMAq4AD IAYAAAAAAMAAAAAAAABGAAAAACqBAAAAAAAAHgCwgAMgBgAAAAAAwAAAAAAAAEYAAAAAJ4EAAAEA AAABAAAAAAAAAAMAs4ADIAYAAAAAAMAAAAAAAABGAAAAABKBAAABAAAAAwC0gAMgBgAAAAAAwAAA AAAAAEYAAAAAE4EAAAEAAAAeALiAAyAGAAAAAADAAAAAAAAARgAAAAAhgQAAAQAAAAEAAAAAAAAA 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 ah5zaB1qaCBtbyxZektogGBucVa7vbDf3+Cop6iLi4t8fHyCgoJ8fHxRUVFDQ0NcXFw/Pz8AAAAA AAAAAACppKSck4meiGiUd1KGZTp5Uhx9VRSEYBmNbCOSdiqVfTCPejOAdzV1dD50d016gGJ+gmyg oZvr6Ovz8vPl4+XExMWfn5+GhoaAgICGhoZiYmJBQUFXV1dSUlIAAAAAAACloqKimIikj3Cbgl+b fVigg1ililyZglRdZlY3eZYrh7gtfKw5Z4FnbWqlp6O2tba9vb66uru+vb/Nzc3r6uv09PTf3t+7 u7uZmZmGhoaLi4uEhIRTU1NGRkZWVlZISEihnp+Ohnqsm4SllHugkHaiknuGdmZTamwry/8nxf8k uv8jr/4irP8zgbPBwsPFxca+vb63tra2tra2tra7u7vQ0NDu7+/y8vLY2Ni0tLSRkZGIiIiZmZll ZWU1NTVVVVW2srJzYECHYSR5aUuCcleTczXDiRiBjIdEz/lE1P43zvwqxPoltPsdlt6vrqzm4Nzj 3NnVz8vFwLu8t7SwrquppaSrqanFxMXr6+vv7+/Q0NCmpqajo6OXl5dRUVEAAAC7u7twY1DCegrD gRDPkBDZnyPlsFCakX1ksMt54f9k1/pH1PwsyPwktf13jZjc29rW1tXS0dDOzczJyMjExMO9u7mr qqaTkpCVlZTOzs34+fnp6enY2Ni0tLRmZmYAAAAAAAAVEAWvcxTChBDMlRrWpU7pv36vmXh7nqql 7/+S6P9z4/9G3P8r0/9Kjazo6Onk5eXf4N/a3NvW1tbS0tPQ0NHPz9DHx8apqamlpqbMzc3q6ur+ /v7MzMx3d3cAAAAAAAAAAACLXhbNjw/RnDHcsGvry5nawJtuf4Gi4faEprOAmqJzlqBZlq5IiK3l 5ub7/fv19/Xu7u7o5ufi4eHd3d3Y2dnU09PMzMzCw8S9vr68vLzZ2Ni1ublcaGgAAAAAAAAAAABZ PQ7cmhHeqULnvX33267/8cxgXlVNYGBbeWprnohgo4VVlXRUfmemqai/v8C8vb7g4eLs7u7e3t/V 1tfOz8/HyMi6urqxsbGurq6rq6umpKShoaF/f38AAAAAAAAAAAALBQVdRBSVax+3j0+xk2VpXVMO GSxRgnCi8t+H3Mdoz7JIw5tAtHlNaFR3dnh/gICwsbLExca2t7esra2oqKinp6enp6ekpKQAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUPZ8VRJIaQW8RR3MUg7gel8U9X1qS4s150LhdxaZBt487 pGs8dEevr6+5t7erq6ukpKSoqKilpaWqqqqqqqp/f38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAZNoMsdvAtlvEvs/gux/krve0jSVd1xqxpy65NwJw7r4E5mFw3g0IHEwsAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGUMoXdsqed4sk+Qt pOgvsvYdUXhOlXlUzKdBvY87pW06kU08jjoaOR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBRYiQr4lXdYqc9wrg+AsjuojXKcxaFQ6pHscTzcQ LRwTLRcfShsiSigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAYJY0hP9ckUdUmXdooZOMmWMcOHiQABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBoMFGAU JYwWL5cTKHgGDy0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAADAAAAAAAaPgIFkAYAJDsAABQAAAADACAOezoAAB4AATABAAAAJAAAAFBpY3R1 cmUgKERldmljZSBJbmRlcGVuZGVudCBCaXRtYXApAA0AATcBAAAAEDoAAAsAAAAAAAAAwAAAAAAA AEbQzxHgobEa4QAAAAAAAAAAAAAAAAAAAAA+AAMA/v8JAAYAAAAAAAAAAAAAAAEAAAABAAAAAAAA AAAQAAACAAAAAQAAAP7///8AAAAAAAAAAP////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //3////+/////v////7///8FAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAA DwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAAP7///// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// UgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAABYABQD//////////wIAAAAWAwAAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAAILOoFOrK zAEDAAAAgAAAAAAAAAABAE8AbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAEMATwBOAFQARQBOAFQAUwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAIBAQAAAAMAAAD/////AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAHovAAAAAAAAAwBNAGEAaQBsAFMAdABy AGUAYQBtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAgD///// //////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAAAAAAAD+ /////v////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////wEA AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAABAAAArwUAAK8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQk16 LwAAAAAAADYAAAAoAAAANwAAADcAAAABACAAAAAAAEQvAADEDgAAxA4AAAAAAAAAAAAA////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wCUlM4AlJTOAGtrvQBra7UAa2u1AHNzvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHt7xgB7e70Ae3u9 AHt7xgB7e70Ae3u9AHt7xgB7e8YAe3vGAISExgB7e8YAe3vGAISExgCEhMYAhITGAISExgB7e70A e3u9AHt7xgB7e70Ae3u9AHt7xgB7e70Ae3u9AHt7xgBzc70Ac3O9AHNzvQBra70Aa2u9AHNzvQBr a70Aa2u9AGtrvQBjY7UAY2O1AK2t3gD///8A////AP///wD///8A////AP///wD///8AlJTOAJSU zgBra70Aa2u1AGtrtQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQB7e8YAe3u9AHt7vQB7e8YAe3u9 AHt7vQB7e8YAe3vGAHt7xgCEhMYAe3vGAHt7xgCEhMYAhITGAISExgCEhMYAe3u9AHt7vQB7e8YA e3u9AHt7vQB7e8YAe3u9AHt7vQB7e8YAc3O9AHNzvQBzc70Aa2u9AGtrvQBzc70Aa2u9AGtrvQBr a70AY2O1AGNjtQCtrd4A////AP///wD///8A////AP///wD///8AjIzGAGtrtQBra7UApaXWAK2t 3gCtrd4Ara3WAK2t3gCtrd4Ara3WALW13gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4AtbXe AL293gC9vd4AtbXeAL293gC9vd4AtbXeAL293gC9vd4Avb3eAP///wD///8A////AP///wD///8A ////AP///wD///8A5+f3AK2t3gCtrd4Ara3WALOz3QCzs90Ara3WAK2t1gCtrdYAra3WAJSUzgCU lM4AWlqtAK2t1gCtrdYA////AP///wD///8A////AGNjtQCtrdYAra3WAKWl3gClpdYApaXWAKys 1wClpdYApaXWAK2t3gCtrdYAra3WAK6u3ACtrdYAra3WALW13gC1td4AtbXeALW13gC1td4AtbXe ALW13gC1td4AtbXeALW13gC1td4AtbXeAL293gD///8A////AP///wD///8A////AP///wD///8A ////AOfn9wCtrdYAra3WAK+v2wCtrdYAra3WAK2t3gClpdYApaXWAKWl1gClpdYApaXWAKWl1gBa Wq0AWlqtAP///wD///8A////AP///wBjY7UAra3WAK2t1gClpd4ApaXWAKWl1gCsrNcApaXWAKWl 1gCtrd4Ara3WAK2t1gCurtwAra3WAK2t1gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4AtbXe ALW13gC1td4AtbXeALW13gC9vd4A////AP///wD///8A////AP///wD///8A////AP///wDn5/cA ra3WAK2t1gCvr9sAra3WAK2t1gCtrd4ApaXWAKWl1gClpdYApaXWAKWl1gClpdYAWlqtAFparQD/ //8A////AP///wD///8AUlKtAKWl1gClpdYAnJzOAKWl1gClpdYApaXWAKur1wCrq9cApaXWAK6u 3ACurtwAra3aAK6u2gCurtoAra3aAK2t3QCtrd0Ara3eALW13gC1td4Ara3WALW13gC1td4Ara3e ALW13gC1td4AtbXeAP///wD///8A////AP///wD///8A////AP///wD///8A3t7vAKys1gCsrNYA qanWAKio1gCoqNYApaXWAKWl1gClpdYApaXOAJ+f0gCfn9IAnJzOAFparQBaWq0A////AP///wD/ //8A////AFparQClpdYApaXWAKWl1gClpdYApaXWAKWl1gClpdYApaXWAKys1wCtrdYAra3WAK2t 2gCtrdoAra3aAK6u2gCtrdoAra3aALW13gC1td4AtbXeALW13gC1td4AtbXeALW13gCtrdYAra3W ALW13gD///8A////AP///wD///8A////AP///wD///8A////AOfn9wClpdYApaXWAKmp1gCpqdYA qanWAKys1wClpdYApaXWAKWl1gCcnM4AnJzOAKSk1QBaWq0AWlqtAP///wD///8A////AP///wBa Wq0ApaXWAKWl1gClpdYApaXWAKWl1gClpdYApaXWAKWl1gCsrNcAra3WAK2t1gCtrdoAra3aAK2t 2gCurtoAra3aAK2t2gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4Ara3WAK2t1gC1td4A//// AP///wD///8A////AP///wD///8A////AP///wDn5/cApaXWAKWl1gCpqdYAqanWAKmp1gCsrNcA paXWAKWl1gClpdYAnJzOAJyczgCkpNUAWlqtAFparQD///8A////AP///wD///8AUlKtAKWl1gCl pdYAnJzOAKSk1gCkpNYAnJzWAKWl1gClpdYApaXWAK2t1gCtrdYApaXWAK2t1gCtrdYAra3aAK2t 2gCtrdoAra3aAK2t3QCtrd0Ara3WALS03QC0tN0Ara3WAK6u3QCurt0AtbXWAP///wD///8A//// AP///wD///8A////AP///wD///8A3t7vAKWl1gClpdYApaXWAKWl1gClpdYApaXOAKWl1gClpdYA nJzOAJyc1gCcnNYAnJzOAFJSrQBSUq0A////AP///wD///8A////AFJSrQClpdYApaXWAKWl1gCc nNYAnJzWAKSk1gClpdYApaXWAK2t3gClpdYApaXWAK2t3gCtrdYAra3WAK2t2gCtrdoAra3aAK6u 2gCtrdYAra3WALGx3ACtrdYAra3WAK6u3QCtrdYAra3WALKy3AD///8A////AP///wD///8A//// AP///wD///8A////AOfn9wClpdYApaXWAK6u2AClpdYApaXWAKWl1gClpdYApaXWAKKi1ACcnM4A nJzOAKWl1gBSUq0AUlKtAP///wD///8A////AP///wBSUq0ApaXWAKWl1gClpdYAnJzWAJyc1gCk pNYApaXWAKWl1gCtrd4ApaXWAKWl1gCtrd4Ara3WAK2t1gCtrdoAra3aAK2t2gCurtoAra3WAK2t 1gCxsdwAra3WAK2t1gCurt0Ara3WAK2t1gCystwA////AP///wD///8A////AP///wD///8A//// AP///wDn5/cApaXWAKWl1gCurtgApaXWAKWl1gClpdYApaXWAKWl1gCiotQAnJzOAJyczgClpdYA UlKtAFJSrQD///8A////AP///wD///8ASkqlAISExgCEhMYApaXOAKWl1gClpdYApaXWAKWl1gCl pdYApaXWAK2t1gCtrdYApaXWAK2t3QCtrd0Ara3aAK2t2gCtrdoAra3aAK2t3QCtrd0Ara3WALS0 3QC0tN0Ara3WALi43wC4uN8Ara3WAP///wD///8A////AP///wD///8A////AP///wD///8A3t7v AKur1gCrq9YApaXWAKWl1gClpdYApaXWAKWl1gClpdYAnJzOAKOj1QCjo9UAe3vGAFJSrQBSUq0A ////AP///wD///8A////AEpKrQBaWrUAWlq1AISExgCEhMYAhITGAIyMzgCEhMYAhITGAIyMzgCM jMYAjIzGAJSUzgCMjM4AjIzOAJSUzgCUlM4AlJTOAJSUzgCUlM4AlJTOAJyczgCUlM4AlJTOAJyc zgCUlM4AlJTOAJyczgD///8A////AP///wD///8A////AP///wD///8A////AN7e9wCMjM4AjIzO AIyMzgCMjMYAjIzGAIyMzgCEhMYAhITGAISExgCEhMYAhITGAGNjtQBKSq0ASkqtAP///wD///8A ////AP///wBKSq0AWlq1AFpatQCEhMYAhITGAISExgCMjM4AhITGAISExgCMjM4AjIzGAIyMxgCU lM4AjIzOAIyMzgCUlM4AlJTOAJSUzgCUlM4AlJTOAJSUzgCcnM4AlJTOAJSUzgCcnM4AlJTOAJSU zgCcnM4A////AP///wD///8A////AP///wD///8A////AP///wDe3vcAjIzOAIyMzgCMjM4AjIzG AIyMxgCMjM4AhITGAISExgCEhMYAhITGAISExgBjY7UASkqtAEpKrQD///8A////AP///wD///8A QkKlAGNjtQBjY7UAY2O1AGtrtQBra7UAY2O1AGtrtQBra7UAa2u1AHNzvQBzc70Aa2u1AHNzvQBz c70Ac3O9AHNzvQBzc70Ac3O9AHt7vQB7e70Ac3O9AHt7vQB7e70Ac3O9AHt7vQB7e70Ae3u9AP// /wD///8A////AP///wD///8A////AP///wD///8Azs7nAHNzvQBzc70Aa2u1AGtruwBra7sAa2u1 AGtrtQBra7UAY2O1AGNjtQBjY7UAWlqtAEpKrQBKSq0A////AP///wD///8A////AEJCpQBaWq0A WlqtAGNjtQBjY7UAY2O1AGtrvQBra7UAa2u1AHNzvQBra70Aa2u9AHNzvQBzc70Ac3O9AHNzvQBz c70Ac3O9AHNzvQBzc70Ac3O9AHt7xgBzc70Ac3O9AHt7xgBzc70Ac3O9AHt7xgD///8A////AP// /wD///8A////AP///wD///8A////ANbW7wBzc70Ac3O9AHNzvQBra7UAa2u1AG5uvQBjY7UAY2O1 AGtrvQBjY7UAY2O1AGNjtQBKSqUASkqlAP///wD///8A////AP///wBCQqUAWlqtAFparQBjY7UA Y2O1AGNjtQBra70Aa2u1AGtrtQBzc70Aa2u9AGtrvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQBz c70Ac3O9AHNzvQB7e8YAc3O9AHNzvQB7e8YAc3O9AHNzvQB7e8YA////AP///wD///8A////AP// /wD///8A////AP///wDW1u8Ac3O9AHNzvQBzc70Aa2u1AGtrtQBubr0AY2O1AGNjtQBra70AY2O1 AGNjtQBjY7UASkqlAEpKpQD///8A////AP///wD///8AQkKlAFpatABaWrQAWlqtAGNjtQBjY7UA Y2O1AGtrtQBra7UAY2O1AGxsvABsbLwAa2u1AHJyvABycrwAa2u1AHNzvQBzc70Ac3O9AHNzvQBz c70Ac3O9AHNzvQBzc70Ac3O9AHNzvQBzc70Ac3O9AP///wD///8A////AP///wD///8A////AP// /wD///8A1tbnAHNzvQBzc70AY2O1AGhotgBoaLYAY2O1AGNjtQBjY7UAY2OtAGNjtQBjY7UAWlqt AEpKrQBKSq0A////AP///wD///8A////AEJCpQBaWq0AWlqtAFlZswBaWrUAWlq1AGNjtQBjY7UA Y2O1AGtrvQBra7UAa2u1AGxsvABra7UAa2u1AHJyvABra70Aa2u9AHNzvQBra70Aa2u9AHNzvQBr a70Aa2u9AHNzvQBra70Aa2u9AHt7vQD///8A////AP///wD///8A////AP///wD///8A////ANbW 7wBzc70Ac3O9AGtrtgBjY7UAY2O1AGpqtgBjY7UAY2O1AGNjtQBaWq0AWlqtAFpatQBKSqUASkql AP///wD///8A////AP///wBCQqUAWlqtAFparQBZWbMAWlq1AFpatQBjY7UAY2O1AGNjtQBra70A a2u1AGtrtQBsbLwAa2u1AGtrtQBycrwAa2u9AGtrvQBzc70Aa2u9AGtrvQBzc70Aa2u9AGtrvQBz c70Aa2u9AGtrvQB7e70A////AP///wD///8A////AP///wD///8A////AP///wDW1u8Ac3O9AHNz vQBra7YAY2O1AGNjtQBqarYAY2O1AGNjtQBjY7UAWlqtAFparQBaWrUASkqlAEpKpQD///8A//// AP///wD///8AOTmcAFJSrQBSUq0AWlqtAGNjtQBjY7UAWlqtAGNjtQBjY7UAY2O1AGpqtQBqarUA Y2O1AGpqtQBqarUAa2u1AGtrvQBra70Aa2u1AGtrtQBra7UAa2u1AGtrugBra7oAa2u1AGtrvQBr a70Ac3O9AP///wD///8A////AP///wD///8A////AP///wD///8Azs7nAHNzvQBzc70AY2O1AGNj tQBjY7UAWlqtAGFhtABhYbQAWlqtAFparQBaWq0AUlKtAEJCpQBCQqUA////AP///wD///8A//// AEJCpQBSUq0AUlKtAFpatQBaWq0AWlqtAFpatQBaWq0AWlqtAGNjtQBjY7UAY2O1AGlptwBjY7UA Y2O1AGtrvQBjY7UAY2O1AGtrvQBra7UAa2u1AGxsvABra7UAa2u1AGxsvABjY7UAY2O1AHNzvQD/ //8A////AP///wD///8A////AP///wD///8A////ANbW7wBra7UAa2u1AGNjtQBaWrUAWlq1AGJi tABaWq0AWlqtAFpatQBSUq0AUlKtAFJSrQBCQqUAQkKlAP///wD///8A////AP///wBCQqUAUlKt AFJSrQBaWrUAWlqtAFparQBaWrUAWlqtAFparQBjY7UAY2O1AGNjtQBpabcAY2O1AGNjtQBra70A Y2O1AGNjtQBra70Aa2u1AGtrtQBsbLwAa2u1AGtrtQBsbLwAY2O1AGNjtQBzc70A////AP///wD/ //8A////AP///wD///8A////AP///wDW1u8Aa2u1AGtrtQBjY7UAWlq1AFpatQBiYrQAWlqtAFpa rQBaWrUAUlKtAFJSrQBSUq0AQkKlAEJCpQD///8A////AP///wD///8AOTmcAFJSrQBSUq0AUlKt AFlZrgBZWa4AUlKtAFpatABaWrQAWlqtAGNjtQBjY7UAWlq1AGNjtQBjY7UAY2O1AGNjtQBjY7UA Y2O1AGNjtQBjY7UAY2O1AGNjtQBjY7UAY2O1AFpatQBaWrUAa2u1AP///wD///8A////AP///wD/ //8A////AP///wD///8Azs7nAGtrvQBra70AWlqtAFpatQBaWrUAWlqtAFpatQBaWrUAUlKtAFJS rQBSUq0ASkqlAEJCpQBCQqUA////AP///wD///8A////ADk5nABKSq0ASkqtAFJSrQBSUq0AUlKt AFlZrgBaWq0AWlqtAFtbtABSUq0AUlKtAFpatQBaWrUAWlq1AGNjtQBaWq0AWlqtAGtrvQBzc70A c3O9AHt7vQBzc70Ac3O9AGNjtQCcnM4AnJzOAGtrtQD///8A////AP///wD///8A////AP///wD/ //8A////AM7O7wBSUq0AUlKtAEpKpQBCQqUAQkKlAEpKpQBSUq0AUlKtAFJSrQBSUq0AUlKtAEpK rQA5OaUAOTmlAP///wD///8A////AP///wA5OZwASkqtAEpKrQBSUq0AUlKtAFJSrQBZWa4AWlqt AFparQBbW7QAUlKtAFJSrQBaWrUAWlq1AFpatQBjY7UAWlqtAFparQBra70Ac3O9AHNzvQB7e70A c3O9AHNzvQBjY7UAnJzOAJyczgBra7UA////AP///wD///8A////AP///wD///8A////AP///wDO zu8AUlKtAFJSrQBKSqUAQkKlAEJCpQBKSqUAUlKtAFJSrQBSUq0AUlKtAFJSrQBKSq0AOTmlADk5 pQD///8A////AP///wD///8AMTGcAEpKpQBKSqUASkqlAFJSrQBSUq0AUlKtAFJSrQBSUq0AWlq1 AHNzvQBzc70Aa2u1AHNzvQBzc70Ac3O1AHNzvQBzc70Ac3O1AHNzvQBzc70Ac3O9AGNjtQBjY7UA ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AGtrvQBra70AOTmlAFJSrQBSUq0AQkKlAEJCpQBCQqUA////AP// /wD///8A////ADExnABCQqUAQkKlAFJSrQBjY7UAY2O1AGtrtQBra7UAa2u1AGtrvQBra7UAa2u1 AGtrvQBra7UAa2u1AHNzvQBra7UAa2u1AHNzvQBra70Aa2u9AHNzvQBaWq0AWlqtAP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wDGxucAxsbnAHNzvQBSUq0AUlKtAEpKpQA5OZwAOTmcAP///wD///8A////AP// /wAxMZwAQkKlAEJCpQBSUq0AY2O1AGNjtQBra7UAa2u1AGtrtQBra70Aa2u1AGtrtQBra70Aa2u1 AGtrtQBzc70Aa2u1AGtrtQBzc70Aa2u9AGtrvQBzc70AWlqtAFparQD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8AxsbnAMbG5wBzc70AUlKtAFJSrQBKSqUAOTmcADk5nAD///8A////AP///wD///8AMTGcAFpa tQBaWrUAWlqtAGFhtABhYbQAWlqtAGNjtQBjY7UAY2O1AGpqtQBqarUAY2O1AGpqtQBqarUAa2u1 AGtrtQBra7UAa2u1AGpqugBqaroAa2u1AFpatQBaWrUA////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8Ae3u9AFparQBaWq0AWlqtAEpKrQBKSq0A////AP///wD///8A////AEJCpQBSUq0AUlKtAFpa tQBaWq0AWlqtAGJitABaWrUAWlq1AGNjtQBjY7UAY2O1AGlptgBjY7UAY2O1AGtrtQBjY7UAY2O1 AGxsvABra7UAa2u1AGxsvABaWq0AWlqtAP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AHt7xgBS Uq0AUlKtAFpatQBKSqUASkqlAP///wD///8A////AP///wBCQqUAUlKtAFJSrQBaWrUAWlqtAFpa rQBiYrQAWlq1AFpatQBjY7UAY2O1AGNjtQBpabYAY2O1AGNjtQBra7UAY2O1AGNjtQBsbLwAa2u1 AGtrtQBsbLwAWlqtAFparQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wB7e8YAUlKtAFJSrQBa WrUASkqlAEpKpQD///8A////AP///wD///8AOTmcAFJSrQBSUq0AUlKtAFpatABaWrQAWlqtAFpa tABaWrQAWlqtAGNjtQBjY7UAWlqtAGNjtQBjY7UAY2O1AGNjtQBjY7UAY2O1AGhotQBoaLUAY2O1 AFparQBaWq0A9/f3AO/v9wDv7/cA5+f3AP///wD///8A////AP///wD///8A////AP///wD///8A 9/f/AOfn9wDn5/cA5+f3AO/v9wDv7/cA5+f3APf3/wD39/8Ac3O9AFJSrQBSUq0AUlKlAEpKpQBK SqUA////AP///wD///8A////ADk5pQBKSq0ASkqtAFparQBaWq0AWlqtAFxcswBaWq0AWlqtAGNj tQBaWrUAWlq1AGNjtQBaWrUAWlq1AGNjtQBjY7UAY2O1AGNjtQBjY7UAY2O1AGpqtgBjY7UAY2O1 AFpatQBSUq0AUlKtAGNjtQD///8A////AP///wD///8A////AP///wD///8A////AL295wBCQqUA QkKlAFJSrQBKSq0ASkqtAEpKrQBKSqUASkqlAFJSrQBSUq0AUlKtAFJSrQBCQqUAQkKlAP///wD/ //8A////AP///wA5OaUASkqtAEpKrQBaWq0AWlqtAFparQBcXLMAWlqtAFparQBjY7UAWlq1AFpa tQBjY7UAWlq1AFpatQBjY7UAY2O1AGNjtQBjY7UAY2O1AGNjtQBqarYAY2O1AGNjtQBaWrUAUlKt AFJSrQBjY7UA////AP///wD///8A////AP///wD///8A////AP///wC9vecAQkKlAEJCpQBSUq0A SkqtAEpKrQBKSq0ASkqlAEpKpQBSUq0AUlKtAFJSrQBSUq0AQkKlAEJCpQD///8A////AP///wD/ //8AOTmcAFFRrABRUawASkqlAFJSrQBSUq0AUlKtAFhYrQBYWK0AUlKtAFtbtABbW7QAWlqtAGNj tQBjY7UAWlqtAGFhtABhYbQAWlqtAGNjtQBjY7UAWlqtAGFhtABhYbQAWlq1AGNjtQBjY7UAY2O1 AP///wD///8A////AP///wD///8A////AP///wD///8Avb3eAFJSrQBSUq0AWlqtAFlZrQBZWa0A UlKtAFhYrQBYWK0AUlKtAFJSrQBSUq0ASkqlAEJCpQBCQqUA////AP///wD///8A////ADk5pQBK SqUASkqlAFBQrABSUq0AUlKtAFlZrgBSUq0AUlKtAFpatQBaWq0AWlqtAFtbtABaWq0AWlqtAFpa tQBaWq0AWlqtAGFhtABaWrUAWlq1AGJitABaWq0AWlqtAGNjtQBaWq0AWlqtAGNjtQD///8A//// AP///wD///8A////AP///wD///8A////AMbG5wBSUq0AUlKtAFpatQBSUq0AUlKtAFVVrgBSUq0A UlKtAFJSrQBKSqUASkqlAEpKrQBCQqUAQkKlAP///wD///8A////AP///wA5OaUASkqlAEpKpQBQ UKwAUlKtAFJSrQBZWa4AUlKtAFJSrQBaWrUAWlqtAFparQBbW7QAWlqtAFparQBaWrUAWlqtAFpa rQBhYbQAWlq1AFpatQBiYrQAWlqtAFparQBjY7UAWlqtAFparQBjY7UA////AP///wD///8A//// AP///wD///8A////AP///wDGxucAUlKtAFJSrQBaWrUAUlKtAFJSrQBVVa4AUlKtAFJSrQBSUq0A SkqlAEpKpQBKSq0AQkKlAEJCpQD///8A////AP///wD///8AMTGcAEpKrQBKSq0ASkqlAFJSrQBS Uq0ASkqlAFJSrQBSUq0AUlKtAFlZrQBZWa0AUlKtAFlZrQBZWa0AUlKtAFpatABaWrQAWlqtAFpa tQBaWrUAWlqtAFpasgBaWrIAWlqtAFparQBaWq0AWlq1AP///wD///8A////AP///wD///8A//// AP///wD///8A5+fvAHt7xgB7e8YASkqlAFhYrQBYWK0AUlKtAEpKrQBKSq0ASkqlAEpKrQBKSq0A QkKlAEJCpQBCQqUA////AP///wD///8A////ADExnABKSqUASkqlAFJSrQBKSq0ASkqtAFJSrQBS Uq0AUlKtAFJSrQBSUq0AUlKtAFhYrwBSUq0AUlKtAFpatQBaWq0AWlqtAFtbtABSUq0AUlKtAFtb tABaWq0AWlqtAFtbtABSUq0AUlKtAGNjtQD///8A////AP///wD///8A////AP///wD///8A//// AP///wClpdYApaXWAEJCpQBCQqUAQkKlAEJCpQBjY7UAY2O1AFpatQBKSqUASkqlAEpKpQA5OZwA OTmcAP///wD///8A////AP///wAxMZwASkqlAEpKpQBSUq0ASkqtAEpKrQBSUq0AUlKtAFJSrQBS Uq0AUlKtAFJSrQBYWK8AUlKtAFJSrQBaWrUAWlqtAFparQBbW7QAUlKtAFJSrQBbW7QAWlqtAFpa rQBbW7QAUlKtAFJSrQBjY7UA////AP///wD///8A////AP///wD///8A////AP///wD///8ApaXW AKWl1gBCQqUAQkKlAEJCpQBCQqUAY2O1AGNjtQBaWrUASkqlAEpKpQBKSqUAOTmcADk5nAD///8A ////AP///wD///8AMTGcAEpKpQBKSqUAQkKlAEpKpQBKSqUASkqlAFFRrABRUawASkqlAFJSrQBS Uq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBSUq0AUlKtAFhYrQBYWK0AUlKtAFhYrQBYWK0AUlKtAFJS rQBSUq0AWlqtAP///wD///8A////AP///wD///8A////AP///wD///8A////AOfn9wDn5/cAra3W ALW13gC1td4Ara3WAN7e9wDe3vcAY2O1AEJCpQBCQqUAQkKlADk5pQA5OaUA////AP///wD///8A ////ADk5nABCQqUAQkKlAEpKrQBKSqUASkqlAEpKrQBKSqUASkqlAFFRrABKSq0ASkqtAFJSrQBS Uq0AUlKtAFJSrQBSUq0AUlKtAFlZrgBSUq0AUlKtAFJSrQBSUq0AUlKtAFlZrgBSUq0AUlKtAFJS rQCcnM4AnJzOAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AHNzvQBCQqUAQkKlAEJCpQA5OZwAOTmcAP///wD///8A////AP///wA5OZwA QkKlAEJCpQBKSq0ASkqlAEpKpQBKSq0ASkqlAEpKpQBRUawASkqtAEpKrQBSUq0AUlKtAFJSrQBS Uq0AUlKtAFJSrQBZWa4AUlKtAFJSrQBSUq0AUlKtAFJSrQBZWa4AUlKtAFJSrQBSUq0AnJzOAJyc zgD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wBzc70AQkKlAEJCpQBCQqUAOTmcADk5nAD///8A////AP///wD///8AMTGcAEJCpQBCQqUA QkKlAEpKpQBKSqUAQkKlAEpKpQBKSqUASkqlAFJSrQBSUq0ASkqlAFFRrABRUawASkqlAFJSrQBS Uq0ASkqlAFJSrQBSUq0AUlKtAFJSrQBSUq0AUlKlAFJSrQBSUq0ASkqlAFpatQBaWrUA////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8Ac3O9 AEJCpQBCQqUAQkKlADk5pQA5OaUA////AP///wD///8A////ADExnABCQqUAQkKlAEpKrQBCQqUA QkKlAEpKrQBKSqUASkqlAEpKrQBKSqUASkqlAEtLrABKSqUASkqlAFFRrABKSq0ASkqtAFJSrQBK Sq0ASkqtAFJSrQBSUq0AUlKtAFJSrQBKSq0ASkqtAFJSrQBSUq0AUlKtAJyc1gD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AFJSrQA5OZwAOTmc AEtLqAA5OZwAOTmcAP///wD///8A////AP///wAxMZwAQkKlAEJCpQBKSq0AQkKlAEJCpQBKSq0A SkqlAEpKpQBKSq0ASkqlAEpKpQBLS6wASkqlAEpKpQBRUawASkqtAEpKrQBSUq0ASkqtAEpKrQBS Uq0AUlKtAFJSrQBSUq0ASkqtAEpKrQBSUq0AUlKtAFJSrQCcnNYA////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBSUq0AOTmcADk5nABLS6gAOTmc ADk5nAD///8A////AP///wD///8AMTGcAEJCpQBCQqUAQkKlAEJCpQBCQqUAQkKlAEZGpQBGRqUA RkalAEhIpABISKQASkqlAEtLqQBLS6kASkqpAElJqABJSagASkqlAFJSrQBSUq0ASkqlAEpKrQBK Sq0ASkqlAE9PqwBPT6sASkqlAEtLrABLS6wASkqlAHNzvQBzc70AnJzOAP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8Aa2u1AEFBpABBQaQAOTmcAEBApABAQKQA//// AP///wD///8A////AHNzvQAxMZwAMTGcAEJCpQBCQqUAQkKlAElJpgBGRqUARkalAEZGpgBCQqUA QkKlAEpKrABKSqkASkqpAEpKqQBKSqkASkqpAEtLrABKSq0ASkqtAFJSrQBKSqUASkqlAFFRrABK SqUASkqlAEtLrABKSqUASkqlAE9PrwBCQqUAQkKlAEpKrQBjY7UAY2O1AGNjvQBjY7UAY2O1AGNj tQBaWq0AWlqtAFpatQBaWrUAWlq1AEpKrQA5OaUAOTmlADExnACEhMYAhITGAP///wD///8A//// AP///wBzc70AMTGcADExnABCQqUAQkKlAEJCpQBJSaYARkalAEZGpQBGRqYAQkKlAEJCpQBKSqwA SkqpAEpKqQBKSqkASkqpAEpKqQBLS6wASkqtAEpKrQBSUq0ASkqlAEpKpQBRUawASkqlAEpKpQBL S6wASkqlAEpKpQBPT68AQkKlAEJCpQBKSq0AY2O1AGNjtQBjY70AY2O1AGNjtQBjY7UAWlqtAFpa rQBaWrUAWlq1AFpatQBKSq0AOTmlADk5pQAxMZwAhITGAISExgD///8A////AP///wD///8A7+/3 AHNzvQBzc70AQkKlADExnAAxMZwAMTGcADk5nAA5OZwAMTGcADk5nAA5OZwAMTGcADk5nAA5OZwA MTGcADk5nAA5OZwAMTGcADk5nAA5OZwAMTGcADk5nAA5OZwAMTGcADk5nAA5OZwAMTGcADk5pQA5 OaUAMTGcADk5nAA5OZwAMTGcADExnAAxMZwAMTGUADExnAAxMZwAMTGcADExnAAxMZwAKSmUADEx nAAxMZwAMTGUAEpKrQBKSq0AhIS9AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgECNwEAAAAAAAAAAwAFNwYAAAACAQo3AQAA AAsAAAAqhkiG9xQDCgMCAQADAAs3/gAAAAMAFDcAAAAAAwD6fwAAAABAAPt/AEDdo1dFswxAAPx/ AEDdo1dFswwDAP1/AAAAAAsA/n8AAAAACwD/fwAAAAADACEOJQ0dAAIB+A8BAAAAEAAAAAJS/q45 ouVNhUBfxzW4ybgCAfoPAQAAABAAAAACUv6uOaLlTYVAX8c1uMm4AwD+DwcAAAADAA00/T+lBgMA DzT9P6UGUpUCApAGAA4AAAADAE4BAAD/////AAAAAE4EAhCAAQAUAAAAVW50aXRsZWQgQXR0YWNo bWVudAByBwITgAMADgAAANwHAQAEAA8ABgAyAAMAMgECEYAGALgNAAABAAkAAAPcBgAAAAAhBgAA AAAFAAAACQIAAAAABQAAAAEC////AKUAAABBC8YAiAAgACAAAAAAACAAIAAAAAAAKAAAACAAAABA AAAAAQABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8Af/ /8AH//4AAf/gAAD/wAAAPwAAAB8AAAAHAAAAAwAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAcAAAAHA AAA/wAAAP+AAf//gAH//4AB//+AOf//wH/////////////////////////////////////////// /////////////yEGAABBC0YAZgAgACAAAAAAACAAIAAAAAAAKAAAACAAAAAgAAAAAQAYAAAAAAAA DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADMzM0xMTFVVVVBQUE1NTU9PT05OTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISDw8PD1GRj09PWdhY4V9gWZmaD9B P1VVVVBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAExMTD09PUVFRWNhYZGMiqulnp6bi4SAbWtqV3BzXouMh1RUVD4+PldXVwAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISEJCQj09PWJgYIqIiKGclauhkaOa f4mDXX59SnR0P1h6SimYTFpUS4mMdIyLjGFhYTw8PFdXV1FRUQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADxISEtLS3Vycqmgmqabj52QeJSGZIFyR4BvOX1vMnRrKWpoJGtoLDSOShC/UEk5 PXV6YICAgH5+fnl4eVBQUEFBQVtbWzMzMwAAAAAAAAAAAAAAAAAAAAAAAGtra2xpabuyramZiYx6 Y3xmRnJaMHZcLIZpK4xwKY11J4FsIHFlGWJgFmRiIyaNRAfdVmFTUISKb6Kio3l5eHt7e4KCgmVl ZT8/P1ZWVlhYWAAAAAAAAAAAAAAAAAAAALKsrKKdmaCSfYZuTmpKH3ROGHpWFoBfGYhoHYxuHolv IH5qHnNoHWpoIG1vLFl6S2iAYG5xVru9sN/f4KinqIuLi3x8fIKCgnx8fFFRUUNDQ1xcXD8/PwAA AAAAAAAAAKmkpJyTiZ6IaJR3UoZlOnlSHH1VFIRgGY1sI5J2KpV9MI96M4B3NXV0PnR3TXqAYn6C bKChm+vo6/Py8+Xj5cTExZ+fn4aGhoCAgIaGhmJiYkFBQVdXV1JSUgAAAAAAAKWioqKYiKSPcJuC X5t9WKCDWKWKXJmCVF1mVjd5liuHuC18rDlngWdtaqWno7a1tr29vrq6u769v83Nzevq6/T09N/e 37u7u5mZmYaGhouLi4SEhFNTU0ZGRlZWVkhISKGen46GeqybhKWUe6CQdqKSe4Z2ZlNqbCvL/yfF /yS6/yOv/iKs/zOBs8HCw8XFxr69vre2tra2tra2tru7u9DQ0O7v7/Ly8tjY2LS0tJGRkYiIiJmZ mWVlZTU1NVVVVbaysnNgQIdhJHlpS4JyV5NzNcOJGIGMh0TP+UTU/jfO/CrE+iW0+x2W3q+urObg 3OPc2dXPy8XAu7y3tLCuq6mlpKupqcXExevr6+/v79DQ0KampqOjo5eXl1FRUQAAALu7u3BjUMJ6 CsOBEM+QENmfI+WwUJqRfWSwy3nh/2TX+kfU/CzI/CS1/XeNmNzb2tbW1dLR0M7NzMnIyMTEw727 uauqppOSkJWVlM7Ozfj5+enp6djY2LS0tGZmZgAAAAAAABUQBa9zFMKEEMyVGtalTum/fq+ZeHue qqXv/5Lo/3Pj/0bc/yvT/0qNrOjo6eTl5d/g39rc29bW1tLS09DQ0c/P0MfHxqmpqaWmpszNzerq 6v7+/szMzHd3dwAAAAAAAAAAAIteFs2PD9GcMdywa+vLmdrAm25/gaLh9oSms4CaonOWoFmWrkiI reXm5vv9+/X39e7u7ujm5+Lh4d3d3djZ2dTT08zMzMLDxL2+vry8vNnY2LW5uVxoaAAAAAAAAAAA AFk9DtyaEd6pQue9fffbrv/xzGBeVU1gYFt5amueiGCjhVWVdFR+Z6apqL+/wLy9vuDh4uzu7t7e 39XW187Pz8fIyLq6urGxsa6urqurq6akpKGhoX9/fwAAAAAAAAAAAAsFBV1EFJVrH7ePT7GTZWld Uw4ZLFGCcKLy34fcx2jPskjDm0C0eU1oVHd2eH+AgLCxssTFxra3t6ytraioqKenp6enp6SkpAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ9nxVEkhpBbxFHcxSDuB6XxT1fWpLizXnQuF3FpkG3 jzukazx0R6+vr7m3t6urq6SkpKioqKWlpaqqqqqqqn9/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAABk2gyx28C2W8S+z+C7H+Su97SNJV3XGrGnLrk3AnDuvgTmYXDeDQgcTCwAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ZQyhd2yp53iyT 5C2k6C+y9h1ReE6VeVTMp0G9jzulbTqRTTyOOho5HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFFiJCviVd1ipz3CuD4CyO6iNcpzFoVDqkexxP NxAtHBMtFx9KGyJKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAABgljSE/1yRR1SZd2ihk4yZYxw4eJAAHBwAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEGgwU YBQljBYvlxMoeAYPLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAMAAAAAABo+AgWQBgAkcwAAFAAAAAMAIA57cgAAHgABMAEAAAAkAAAAUGlj dHVyZSAoRGV2aWNlIEluZGVwZW5kZW50IEJpdG1hcCkADQABNwEAAAAQcgAACwAAAAAAAADAAAAA AAAARtDPEeChsRrhAAAAAAAAAAAAAAAAAAAAAD4AAwD+/wkABgAAAAAAAAAAAAAAAQAAAAEAAAAA AAAAABAAAAIAAAABAAAA/v///wAAAAAAAAAA//////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////f////7////+/////v///wUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4A AAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAA AB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAA KwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAAP7///// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //9SAG8AbwB0ACAARQBuAHQAcgB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAFgAFAP//////////AgAAABYDAAAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAAAgs6gU 6srMAQMAAACAAAAAAAAAAAEATwBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAQwBPAE4AVABFAE4AVABTAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgEBAAAAAwAAAP////8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZmcAAAAAAAADAE0AYQBpAGwAUwB0 AHIAZQBhAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAACAP// /////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAAAAAAA AP7////+//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// AQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEAAAAgDQAAYAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC TWZnAAAAAAAANgAAACgAAAB/AAAANAAAAAEAIAAAAAAAMGcAAMQOAADEDgAAAAAAAAAAAAD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////APf//wD///8A////AP///wD39/cA////AP///wD///8A9/f3 AP///wD///8A////AO/v7wD///8A////AP///wDv7+8A////AP///wD///8A7+/vAP///wD///8A ////AOfv7wD///8A////AP///wDv9+8A////AP///wD///8A9/f3AP///wD///8A////APf/9wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wDv7+cA////AM7OzgD///8AtbXWAP///wCtrc4A //f/AKWlzgDn7/8AlJTOAN7e/wCMjMYAzs7/AHt7vQDGxv8Aa2u9AGtz/wBjY7UAtbX/AFpatQBj Y/8AWlK1AFpa/wBSUrUAWlL/AFJKtQBaUv8AUkq1AFJS/wBSSrUAUlL/AFJKtQBaUv8AUkq1AFpS /wBSUrUAWlr/AFpStQCtrf8AWmO1AGtr/wBrY70Atb3/AHNrvQB7e/8Ae3vGAM7O/wCEhMYA3t7/ AJSUzgDn5/8AnJzOAPf3/wC1rdYA////AL29zgD///8Axs7OAP///wDv7+8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AISE/wClpf8AOTn/ADEx/wApKbUAc3P/ACEY/wAh If8AIRi1AGtr/wAhGP8AISH/ACEYvQBra/8AIRj/ACEh/wAhGP8Ac2v/ABgY/wAhIf8AGBj/AGtr /wAhGP8AISH/ABgY/wBra/8AIRj/ACEh/wAhGP8Aa2v/ACEY/wAhIf8AGBj/AGtr/wAhGP8AIRj/ ABgY/wBra/8AGBj/ACkh/wAYGP8Ac2v/ACEY/wAhIf8AIRj/AGtr/wAhGP8AISH/ACEYvQBra/8A IRj/ACEh/wAhIbUAe3P/ACkp/wAxMf8AOTG1AK2l/wCUjP8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wDv594A////AFpStQAhIf8AGCG9ACkh/wAhGM4AISH/ACEYzgApIf8AIRjGACkh /wAhGMYAKSH/ACEhxgApIf8AISHGACkh/wAhGMYAKSH/ACEYxgApIf8AISHGACkh/wAhIcYAKSH/ ACEhxgApIf8AISHOACkh/wAhIcYAKSH/ACEhxgApIf8AISHGACkh/wAhIcYAKSH/ACEhxgApIf8A ISHGACkh/wAhIcYAKSH/ACEhxgApIf8AISHOACkp/wAhGM4AKSH/ACEYzgApIf8AIRjOACkh/wAh GMYAKSH/ABgYxgAhIf8AIRjOACEh/wAhGMYAKSH/AFpSrQD///8A5+fnAP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AEpCvQBza/8AKSH/ACEp/wAhIf8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ ACEh/wBzc/8AISH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8A ISH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAp If8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAhIf8Ac3P/ACEh /wApKf8AISH/AHNz/wAhKf8AISn/ACEh/wBra/8AQkr/AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AGNjvQAhGP8AISHOACEp/wAhIc4AKSn/ACEYzgApKf8AISHOACkh/wAhIc4AKSH/ACEhzgApKf8A ISHOACkh/wApIc4AKSn/ACEhzgApIf8AKSHOACkp/wAhIc4AKSH/ACEhzgApKf8AISHOACkh/wAh Ic4AKSn/ACEhzgApIf8AISHOACkp/wAhIc4AKSH/ACEhzgApKf8AISHOACkh/wAhIc4AKSn/ACEh zgApIf8AISHOACkh/wAhIc4AKSH/ACEhzgApIf8AISHOACkh/wApIc4AKSn/ACEhzgApIf8AKSHO ACkp/wAhIc4AKSn/ACEhzgApKf8AISHWACEh/wBjY70A////AP//9wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ALW1/wBza/8A KSH/ACkp/wApIf8Ac3P/ACkh/wApKf8AKSH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAp If8Ac3P/ACkh/wApKf8AISH/AHNz/wAhIf8AKSn/ACkh/wBzc/8AISH/ACkp/wAhIf8Ac3P/ACEh /wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AKSH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AISH/ AHNz/wApIf8AKSn/ACkh/wBzc/8AKSn/ACkp/wApIf8Ac3P/ACEh/wApKf8AKSH/AHtz/wAhIf8A MSn/ACkh/wB7c/8AKSH/ACkp/wAhIf8Ae3P/APf3/wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC9tf8AGBjOACkp/wAp Ic4AMSn/ACkhzgApKf8AISnOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEh zgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHO ACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4A KSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOADEp/wAhIc4AKSn/ACEh1gAp Kf8AISHOACkp/wAhKc4AKSn/ACEYxgBra/8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8AOTH/ACkp/wAhIf8Ac3v/ACkp /wApKf8AKSn/AHN7/wAhKf8AKSn/ACEh/wB7e/8AKSH/ACkp/wAhIf8Ae3v/ACkp/wApKf8AKSn/ AHt7/wApKf8AMTH/ACkp/wB7e/8AKSn/ACkx/wApKf8Ac3P/ACkh/wApMf8AKSn/AHt7/wApKf8A KTH/ACkh/wB7e/8AKSn/ADEx/wApKf8Ac3v/ACEp/wAxMf8AKSn/AHt7/wAhIf8AKSn/ACkp/wB7 e/8AISH/ACkp/wApIf8Ae3v/ACkp/wAxKf8AKSH/AHt7/wApIf8AMSn/ACkp/wB7e/8AKSn/ADEp /wApIf8Ae3P/ACkp/wApKf8AOTm9AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wC9vb0A////AL29vQD///8A ////AP///wD///8A////AP///wD///8A////AP///wDOzs4A5+fnAHt7ewDe3t4AtbW1AP///wD/ //8A////AP///wD///8A////AP///wD39/cA////AHt7ewDW1tYAvb29AP///wD///8A////AL29 vQD///8Avb29AP///wD///8A////AP///wD///8ArbXnACkp/wAhIc4AOUL/AEI51gBCQv8AQkLe AEI5/wApKdYAOTn/ADkx1gBKSv8AQkLeADk5/wBCQt4ASkr/AEJC3gA5Of8AQkLWAEJC/wAxMd4A QkL/AEpC3gBSSv8AQkLeAEJC/wBCOd4AOTn/ADEx1gBCSv8AOTneADk5/wA5OdYAOTn/ADEx1gA5 Of8AOTneADEx/wA5OdYAQkL/ACkx1gA5Of8AQkLeAEpC/wA5OdYAOTn/ADk51gBCQv8AMTnWADk5 /wAxMdYAQkL/AEJC3gA5Qv8AQkLeAEpK/wA5Oc4AMTH/AEJC3gBKSv8AMTHOAEpC/wBCQt4AMTH/ ACkpzgApKf8AKSnOACEh/wC9td4A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAA7+/vAP///wD/ //8A////AP///wD///8A////AP///wBra2sAEBAQAAAAAAAAAAAAAAAAAAAAAAAxMTEA////AP// /wD///8A////AP///wD///8A9/f3AAAAAAAAAAAAAAAAAAAAAABSUlIA////AHNzcwAAAAAAAAAA AAAAAABra2sA////AP///wD///8A////AO/n/wAhGP8AhIT/AFJS/wAxMf8AKSn/AISE/wAxOf8A jIz/AEpK/wCMjP8AMTH/AIyU/wA5Qv8AhHv/ACkp/wAxMf8AOTn/AIyM/wAxMf8AMTH/ADEx/wCE hP8AMTH/ADEx/wAxMf8AjIz/ADEx/wCMjP8AMTH/AISE/wBCOf8AnJT/AFJK/wClpf8AMTH/AIyM /wA5Of8AjIT/ADEx/wCMOf8AQkr/AJSU/wAxMf8AjIz/ADk5/wCEhP8AMTH/ADk5/wBCQv8AnKX/ AEpK/wCUjP8AOTn/AIyM/wBCOf8AlJT/ADk5/wCEhP8AOTn/AIyU/wAxKf8AjIz/ADk5/wApKf8A KSn/AHtz/wAYIf8A5+f/AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wDW1tYAAAAAAAgICAAQEBAAAAAAAPf39wD///8A////AP// /wD///8A////AP///wA5OTkAAAAAAAgICAAQEBAACAgIAAgICAAICAgACAgIAAAAAAD///8A//// AP///wD///8A////ADExMQAICAgACAgIABAQEAAICAgAAAAAADk5OQBra2sAAAAAABAQEAAAAAAA c3NzAP///wD///8A////AP///wB7e84AISH/ACkp1gBCQv8AKSnWACkx/wAhKdYAKSn/ADkxxgDn 5/8AhITnAN7e/wCUlP8Azs7/AGNa1gB7e/8AhIT/AOfv/wCMhO8Ae3v/AHuE/wDWzv8Ac2veAM7O /wB7e94A5+f/AIyM5wDW3v8AOTHOAEJC/wA5Mc4Ae3P/AIyE/wDn5/8AjIzvANbW/wCUnP8A5+f/ AIyM5wDOzv8AjIT/AN7e/wBra+8AKSn/AISE/wDe3v8AY1rOAN7e/wBjWtYA7+//AJyc9wDv7/8A ra3/AN7e/wCUlO8A3t7/AISE/wDW3v8AhIz3AHt7/wApKc4AKSn/AFJS7wA5Mf8AKSnWADEx/wAp KdYAKSn/AHt7zgD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AAAAAAAQEBAAEBAQAAAAAAClpaUA////AP///wD///8A//// AP///wCMjIwAAAAAAAgICAAQEBAAAAAAAAgICAAAAAAAEBAQAAgICAAQEBAAEBAQAP///wD///8A ////AP///wAYGBgACAgIABAQEAAICAgAEBAQAAAAAAAAAAAACAgIABAQEAAQEBAACAgIAGtrawD/ //8A////AP///wD///8Avb3/ACEh/wA5Of8AQkL/AHtz/wApKf8AMTH/ACkh/wClpf8A7+//AOfe /wCtrf8A7+//AP///wD///8ApaX/AO/v/wD39/8A9/f/AKWt/wDn5/8A9/f/AO/v/wC1tf8A9/f/ AIyU/wDe3v8AlJT/AISE/wBja/8AOTn/AISE/wC1tf8AY1r/AMbO/wCEhP8A5+f/AJSU/wD3//8A lJz/ANbW/wCEhP8AMTn/AEI5/wD39/8AnJz/AO/v/wCMhP8A////AIyE/wD///8AhIz/APf3/wDv 7/8A7/f/AJyc/wD///8AlJT/APf3/wBra/8Ae3P/ACkp/wCUnP8AOTH/AHt7/wApKf8AMTH/ACEh /wC1tf8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AN7e3gAICAgACAgIABAQEAAAAAAA9/f3AP///wD///8A////AP///wD///8A KSkpAAgICAAQEBAAAAAAAFpaWgD///8A////AAgICAAQEBAACAgIAAAAAACtra0A////AP///wD/ //8ACAgIAAgICAAICAgAAAAAAKWlpQD///8AMTExAAgICAAICAgAEBAQAAAAAAC9vb0A////AP// /wD///8A////AFJaxgApKf8AMTHWAFJS/wAxKdYAKTH/ACkx3gAxMf8ASkrWANbe/wCEjP8AWlr/ AFJK1gBSUv8AUkreAFJS/wA5McYAUlr/AFJa1gBSUv8AQkLGAM57/wBrc94Avb3/AEpK1gA5Of8A SkLeADkx/wApKdYAKSn/ACkp1gA5Of8AhIT3ANbW/wBzc/8ASkr/AEI5zgDe5/8Aa3PeADk5/wBS Wt4AMTH/ACkp1gA5Of8AhIzvAN7n/wBjY/8AQkL/AHNz5wBra/8AUlreAEJK/wBSUt4ASkr/AEJC zgBSSv8ASlLeAEJC/wBCQt4AMTH/ACEp3gAxKf8ASlL/ADkx/wApKdYAMTH/ADEp3gApKf8ASlLG AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8AAAAAABAQEAAICAgAAAAAAO/v7wD///8A////AP///wD///8A////AAgICAAQ EBAACAgIAAgICAD///8A////AP///wDGxsYAAAAAABAQEAAAAAAAvb29AP///wD///8A////ABAQ EAAICAgAEBAQABAQEAD///8A////AP///wAxMTEACAgIABAQEAAICAgAc3NzAP///wD///8A//// AP///wCclP8AISn/AIyM/wBCQv8AMTn/ADEp/wB7e/8AKSn/ADEx/wA5Of8AjIT/ACkp/wAxMf8A KSn/AHt7/wApKf8AMTH/ACkp/wB7c/8AISH/ACkx/wAhIf8AnJz/ADEx/wApMf8AKSn/AHt7/wAp Kf8AKTH/ACkp/wB7e/8AKTH/ADkx/wBCQv8AhIT/ACEh/wCMjP8AY2P/AHt7/wApKf8AMTH/AFpa /wDOzv8AUkr/AIw5/wBCOf8Ae3v/ADEp/wA5lP8AUlL/AISE/wAxMf8AMTH/ADEx/wCEhP8AMTH/ ACkp/wApKf8Ae3v/ADEx/wA5jP8AKSn/AIyM/wA5Of8AMTH/ACkx/wB7e/8AKSn/AIyM/wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A1tbWAAgICAAICAgAEBAQAAAAAAD39/cA////AP///wD///8A////AM7OzgAICAgACAgIAAgI CAAhISEA////AP///wD///8AnJycAAAAAAAICAgACAgIAEpKSgD///8A////AP///wAICAgAEBAQ AAgICAAYGBgA////AP///wD///8Azs7OAAAAAAAQEBAAAAAAAHNzcwD///8A////AP///wD///8A QkLGACkp/wA5Od4AUlL/ADEx3gA5Mf8AKSneADEx/wApKd4AMTH/ACkp1gAxMf8AKSneADEx/wAp KdYAMTH/ACkp3gA5Mf8AKTHWAFJS/wAxMdYAMTH/ACEp1gAxKf8AKSneADEx/wApKc4AMTn/ACEh 1gApMf8AKSnWADEx/wApKd4AMTH/ACkp1gA5Of8AOTnWAM7O/wBCQtYAMTH/AIyM/wD3//8AnJzn APf3/wB7c/8Ara3/AISE7wBzc/8AhHv/AOfn/wCMjPcAY1r/AISE/wDW1v8AlJz/AHNr/wBSUt4A Wq3/AISM7wDe1v8AhIT/AFpS/wBKSt4AOTn/ACkp3gAxMf8AMSneACkp/wAxOcYA////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wAAAAAAEBAQABAQEAAAAAAApaWlAP///wD///8A////AP///wD///8AAAAAABAQEAAICAgAe3t7 AP///wD///8A////APf39wAAAAAAEBAQAAAAAACUlJQA////AP///wD///8AEBAQAAgICAAQEBAA EBAQAP///wD///8A////AHt7ewAICAgAEBAQAAAAAABzc3MA////AP///wD///8A////AISM/wAp Kf8AjIz/AEpK/wB7hP8AMTH/ADEx/wAxMf8AhHv/ADEx/wAxMf8AMTH/AHuE/wAxMf8AOTn/ADEx /wCEe/8AKSn/AMbG/wD///8AlJT/ACEp/wA5Of8AWlr/AIR7/wApMf8A597/AK2t/wC9vf8ASlL/ ADmM/wAxKf8Ae3v/ACkx/wCUjP8AtbX/AJyc/wCUnP8A7+//AJyc/wD///8A7+//AOfv/wD///8A 9///AO/v/wD///8AtbX/AM7O/wDv7/8A////AIyM/wD///8A7+//APf//wCtrf8A////AJSU/wD/ //8Ae3v/AN7n/wCEhP8ApZz/ADk5/wCEhP8AMTH/ADk5/wApKf8AhIT/AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDW1tYACAgI AAgICAAQEBAAAAAAAPf39wD///8A////AP///wD///8AxsbGAAAAAAAICAgACAgIACkpKQD///8A ////AP///wCcnJwAAAAAAAgICAAICAgASkpKAP///wD///8A////AAgICAAICAgACAgIABAQEADv 7+8A////AP///wDOzs4AAAAAABAQEAAAAAAAvb29AP///wD///8A////AP///wAxMcYAMTH/ADk5 3gBSUv8AMTHeADEx/wApMd4AOTn/ADE53gAxMf8AKTHeADEx/wAxMd4AOTn/ACkx/wAxMf8AMSne ACkx/wBKQsYA////AHNz5wApIf8Ac3P/AP///wBCStYAKSn/AISE/wD///8ApaX3AO/v/wCtrf8A 5+//AFpa7wAxKf8AY2POAP///wBrY+cAMTH/AJyl/wD///8AOTnGAEpS/wCMhP8A597/AHN75wDO 1v8Atb3/AN7e/wBaWt4Ac3P/AHtz/wDOzv8Ae3veAOfn/wB7hP8Avb3/AISE7wDOzv8AWlrWALW9 /wCEhPcAOTn/AEJC3gBCQv8AMTHeADEx/wAxMf8AMTH/ACkpvQD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAgICAAQEBAA CAgIAAAAAADv7+8A////AP///wD///8A////AP///wAAAAAAEBAQAAgICAAxMTEA////AP///wD/ //8A9/f3AAAAAAAQEBAAAAAAAJSUlAD///8A////AP///wAQEBAACAgIABAQEAAQEBAA////AP// /wD///8Ae3t7AAgICAAICAgACAgIAHNzcwD///8A////AP///wD///8AMTH/ACkp/wCMjP8ASkr/ ADkx/wApKf8Ae3v/AJSU/wDe3v8AQjn/AHt7/wAxMf8AMTn/ADEx/wB7e/8AKTH/ALW1/wBzc/8A paX/AP///wD///8AOTn/AKWl/wD///8A1tb/ACkp/wCMlP8A////AKWt/wApIf8AnJz/AHN7/wCt pf8AKSn/AKWt/wD///8Avb3/ACEp/wCtrf8AWlr/ACkp/wAhKf8Ac3v/ACkp/wAxKf8AY1r/AL29 /wApKf8AKTH/ACEp/wCEhP8AUlL/AN7e/wA5Of8Ae3v/ACkp/wCMlP8AQkL/AHt7/wAxKf8AOTH/ ADkx/wCcpf8AMTn/ADkx/wAxMf8AhIT/ACkx/wA5Of8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOfn5wAQEBAACAgIABAQEAAA AAAA9/f3AP///wD///8A////AP///wDGxsYACAgIAAgICAAICAgAKSkpAP///wD///8A////AKWl pQAAAAAACAgIAAgICABKSkoA////AP///wD///8AEBAQABAQEAAICAgAGBgYAP///wD///8A//// AHt7ewAAAAAAEBAQAAAAAABzc3MA////AP///wD///8A////ACkpzgApMf8AQkLnAFJS/wBCOd4A UlL/ACkp5wBaWv8A////AM7G/wAxMd4AMTn/ADEx/wAxMf8AKSneAFJS/wD///8A9///AGNj1gD/ //8A3v//AN7e/wBjY84A////AM7W/wDGvf8AUlLGAP///wBjY9YAUlL/AGNj5wBjWv8AOULWACkp /wA5Qs4A////AIyM/wBCOf8AMTHeADEx/wBKSt4AtbX/AFpj3gBKSv8AMTHWADEx/wA5MdYAUlL/ AEpS3gBCQv8Ara3vAP///wC9xv8A5+f/AEpK1gBra/8A////AL29/wApMd4AMTn/ADEx/wA5Of8A QkrnAEJC/wAxMf8AOTn/ADEx5wAxMf8AKSnOAP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8AEBAQABAQEAAQEBAAAAAAAKWl pQD///8A////AP///wD///8A////AAAAAAAQEBAACAgIAHt7ewD///8A////AP///wD39/cAAAAA ABgYGAAICAgAnJycAP///wD///8A////ABAQEAAQEBAAEBAQABAQEAD///8A////AP///wB7e3sA CAgIABAQEAAICAgAc3NzAP///wD///8A////AP///wB7c/8AMTH/AIyM/wBCSv8Azs7/AISE/wA5 Of8AKSn/AN7n/wD///8ApaX/ACkp/wB7hP8AMTH/ADEx/wD///8A////ADk5/wDOzv8A////ALW1 /wD///8A////AP///wDW3v8A////AP///wD///8A////AP///wD///8A////AP///wBjY/8A7/f/ AP///wD///8A////AM7W/wCEjP8A////AP///wD///8A/73/ALW9/wBKUv8A////AP///wD///8A ////AP///wCcnP8Ara3/AP///wD///8A////ANbO/wA5Mf8AMTn/ADEx/wCEhP8AMTH/AJyc/wA5 Mf8AhIT/ADkx/wA5Of8AMTH/AHt7/wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A1tbWAAgICAAQEBAAEBAQAAAAAADv7+8A//// AP///wD///8A////AMbGxgAICAgAEBAQABAQEAApKSkA////AP///wD///8ApaWlAAAAAAAQEBAA CAgIAEpKSgD///8A////AP///wAICAgAEBAQAAgICAAYGBgA7+/vAP///wD///8Azs7OAAAAAAAQ EBAAAAAAAL29vQD///8A////AP///wD///8AISHWADk5/wA5Of8AUkr/AJSM7wBzc/8AKTHeAEJC /wCUjOcA////AK21/wDGxv8Aa2PeAGtr/wCEhN4A////AHt73gBSUv8Aztb/AP///wBKUs4AY1r/ AL21/wDGzv8AQjnOAHNz/wClrf8A5+f/ANbe/wBSSv8AQkLOAK2t/wC9xvcA////ALW9/wDGxv8A a2vOAP///wCMjN4A////AFJSzgA5Mf8AMTHOAO/v/wDGxv8AY1r/AHNz/wBCQv8AOTnGAP///wDO zv8A////AEpK3gAxMf8AlJz/AP///wBjWt4AOTn/ACkx/wA5Of8AMTHnADk5/wBKUv8AQjn/ADEx 7wA5Of8AOTn/ADE5/wApKdYA////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////APf39wAAAAAAEBAQABAQEAAICAgAUlJSAP///wD///8A ////AP///wD///8ACAgIABAQEAAICAgAMTExAP///wD///8A////APf39wAAAAAAGBgYAAgICACc nJwA////AP///wD///8AEBAQABAQEAAYGBgAGBgYAP///wD///8A////AHt7ewAICAgAEBAQAAgI CABzc3MA////AP///wD///8A////ADEx/wAxMf8AjIz/AEpC/wDe5/8Ae3v/AM7O/wCMjP8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wCtrf8A1s7/AIyE/wD///8AY2P/AP///wD///8A////AP///wD///8A75z/ANbe/wBS Uv8Atb3/AP///wCclP8AITH/AHt7/wBKSv8A////AGtr/wCMlP8AMTH/AP///wD///8AlJT/AP// /wDv7/8ASlL/AL3G/wD///8A3t7/ADEx/wCEjP8AOTn/AIyM/wA5Of8AnJz/ADk5/wA5Of8AOTn/ AISE/wAxOf8AMTH/AL29/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wBSUlIAEBAQABAQEAAYGBgAEBAQABAQEAD///8A////AP///wD/ //8AxsbGABAQEAAQEBAAEBAQADExMQD///8A////AP///wClpaUACAgIABAQEAAQEBAASkpKAP// /wD///8A////ABAQEAAYGBgAEBAQABgYGAD///8A////AP///wDOzs4ACAgIABgYGAAICAgAe3t7 AP///wD///8A////AP///wApKdYAOTn/ADk55wBKSv8AhIz/AMa9/wBzc/cASkL/AGNj3gCtrf8A paX3AO/v/wBaWsYA////AO/v/wBjY/8AUlLeAK1a/wBKUtYAUlL/AEpK3gBKSv8AOULWAEJC/wBC QtYAQkL/ADEx3gBjWv8A////AN7n/wBaY94AUkr/ALW1/wD///8AlJTvADlC/wAxOd4AMTH/AEJK 1gD///8AnJz/AFqt/wA5MdYA5+f/AP///wD///8AtbX/AOfn/wD///8AUlL/ACkx5wBrY/8A//// AP///wCMlOcA////AHNr/wA5Of8AMTHnAEI5/wA5Of8AQjn/AEJC7wA5Of8AOTH/AEJC/wAxMe8A OTn/ACkx1gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8AGBgYABAQEAAYGBgAGBgYACEhIQAAAAAA////AP///wD///8A////AP// /wAICAgAGBgYABAQEAB7e3sA////AP///wD///8A9/f3AAAAAAAYGBgACAgIAKWlpQD///8A//// AP///wAYGBgAEBAQABgYGAAYGBgA////AP///wD///8AhISEABAQEAAYGBgAEBAQAHNzcwD///8A ////AP///wD/vf8Ae4T/ADEx/wCUlP8AUlL/AJSU/wA5Of8AMTn/ADEx/wCMhP8AOTn/AIyM/wCt rf8A7+//AP///wDW1v8ASkr/AIyE/wAxOf8AOTn/ADEx/wCEjP8AOTn/ADmM/wA5Of8AjIT/ADk5 /wCMjP8AKTn/AM7O/wD///8Azs7/AP///wD///8AWlL/ADk5/wAxMf8AhIT/AEI5/wCMOf8Aa2v/ AP///wCMjP8A////AP///wC1tf8AMTn/AM7O/wD///8A////AFJa/wA5Of8AMTH/AJyc/wBjWv8A OTn/ADkx/wCMhP8AOTn/AIw5/wA5Mf8AhIT/ADE5/wCcnP8AOTn/AIyE/wA5Of8AOTn/ADk5/wB7 e/8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A5+fnAAAAAAAYGBgAEBAQABgYGAAYGBgAEBAQAFpaWgD///8A////AP///wDOzs4AEBAQ ABAQEAAYGBgAKSkpAP///wD///8A////AKWlpQAICAgAGBgYABAQEABSUlIA////AP///wD///8A EBAQABgYGAAQEBAAGBgYAO/v7wD///8A////AM7OzgAICAgAGBgYAAgICADGxsYA////AP///wD/ //8A////ADEx1gA5Of8AOUL/AK2t/wA5QvcAOTn/ADkx/wBCQv8AQjn3ADk5/wAxMf8Avcb/AP// /wD///8AUlLOAN7v/wBrY+cA3t7/AHt7/wDe3v8AhHvvAM7W/wCEhP8Azs7/AHtz7wBza/8AnJT/ ANbW/wBze+8AUlL/AGNa/wD///8ASlLeADk5/wA5Of8AQjn/ADk57wA5Of8AOTn/ADk5/wAxMecA WlL/AMbG/wCtrf8AMTHvADlC/wAxKf8A3tb/ANbn/wBSUv8AOTn/ADlC/wA5OecAOTn/ADEx/wA5 Of8AMTnvADk5/wA5Of8AQkL/ADk57wBCQv8ASlL/AEo5/wA5Oe8AOTn/ADk5/wA5Qv8AMTHWAP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// ADk5OQAYGBgAGBgYACEhIQAQEBAAGBgYABAQEAApKSkA////AP///wD///8A////ABAQEABra2sA GBgYACEhIQD///8A////AP///wDOzs4ACAgIABgYGAAICAgAvb29AP///wD///8A////ABgYGAAQ EBAAGBgYABgYGAD///8A////AP///wCEhIQAEBAQABgYGAAQEBAAe3t7AP///wD///8A////AP// /wAxMf8AMTn/AIyU/wBaUv8AlJT/ADk5/wCUjP8AQjn/AIyM/wA5Of8AjIz/ADlC/wDW1v8AWlr/ AJSU/wD///8A7/f/AJyc/wD///8A9///AP///wC9vf8A1s7/AO/v/wD///8AnKX/AP///wCclP8A ////AEpS/wCEhP8AOTH/AIyM/wA5Of8AjIz/AEI5/wCUjP8AOTn/AIyM/wBCOf8AjIz/ADk5/wCE hP8AOTn/AIyM/wBKOf8AjIz/ADk5/wCMjP8AOTn/AIyE/wBCOf8AlIz/ADk5/wCMlP8AOTn/AIyM /wA5Of8AjIz/AEI5/wCMjP8AOUL/AKWl/wBCOf8AjDn/ADk5/wCMlP8AOTn/ADk5/wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANbW1gAQEBAA GBgYABgYGAAYGBgAMTExABgYGAAYGBgACAgIAP///wD///8A////AP///wAxMTEAEBAQABgYGAAQ EBAAzs7OAN7e3gD///8AKSkpABgYGAAYGBgAEBAQALW1tQD///8A////AP///wAYGBgAGBgYABAQ EAAhISEA////AP///wD///8Azs7OAAgICAAYGBgACAgIAHt7ewD///8A////AP///wD///8AMSnW AEJC/wBCQu8AY1r/ADlC/wA5Qv8AOTH3AEJC/wA5Of8AQjn/ADk57wA5Of8AMTH/ADk5/wBSUtYA ////AHNz3gDWzv8Ac2vvAPf//wC9xv8A5+f/AHt79wDW1v8AhIT/AO/v/wCEhOcAzs7/AGNr/wBC Qv8AOTnvAEI5/wA5Of8AQkL/ADk59wBCOf8AMTH/ADlC/wBCOe8AQjn/ADk5/wBCOf8AMTn3ADk5 /wBCOf8AQkL/ADEx9wBCQv8AQjn/ADlC/wA5OfcAQjn/ADE5/wBCQv8AMTH3AEI5/wBCOf8ASkL/ ADk57wBCQv8AOUL/AEJC/wBSUvcAQkL/ADk5/wBCQv8AQkL3AEJC/wAxMdYA////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDn5+cACAgIABgYGAAY GBgAhISEAISEhAAYGBgAGBgYABAQEAB7e3sA////AP///wD///8AhISEABAQEAAYGBgAa2trABAQ EAApKSkAISEhABgYGAAYGBgAGBgYABAQEAD///8A////AP///wD///8Aa2trABgYGAAhISEAISEh AP///wD///8A////AISEhAAYGBgAGBgYABgYGABzc3MA////AP///wD///8A////AIyM/wBCQv8A lIz/AFJS/wCUnP8AOUL/AJSM/wA5Of8AjJT/AEpC/wCUlP8AQkL/AJSU/wBCQv8Axs7/AK2t/wDW 1v8ASkr/AIyM/wBKSv8ApZz/AEI5/wCMjP8AQkL/AJSM/wBSWv8A3tb/ADk5/wCEhP8ASkr/ALW1 /wBCQv8AjIz/AEI5/wCUjP8AWlr/AL29/wBjY/8AjIz/ADk5/wCMjP8AOTn/AJSU/wBja/8Axr3/ AGNj/wCcnP8AWlr/AJyU/wBaWv8AlJT/AEpK/wCcpf8ASkL/AL21/wBzc/8Ara3/AEpK/wCcnP8A Skr/AJyc/wBSUv8AtbX/AEJC/wCMlP8AQkr/AJSU/wBCQv8AjIz/AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8AQkJCABgYGAAYGBgAGBgYAHNz cwD///8ACAgIACEhIQAQEBAAOTk5AP///wD///8A////AP///wAxMTEAEBAQABgYGAAhISEAGBgY ABgYGAAYGBgAGBgYAAAAAAD///8A////AP///wD///8A////ABAQEAAYGBgAEBAQACEhIQDv7+8A ////AP///wDW1tYACAgIACEhIQAQEBAAxsbGAP///wD///8A////AP///wBCOd4AQkL/ADlC/wBK Sv8ASjn3AEJC/wA5Qv8ASkr/AK2t/wD///8Axsb/AP///wDGxv8A////AMbG/wD///8Axr33AP// /wDGxv8A////AK2l/wBSUv8AlJT/AP///wC1rf8A1tb/AEJC/wBCOf8AUlLnAP///wDe//8Axsb/ ADE57wA5Of8Aa2v/AP///wD///8A9///AGtj/wD39/8AnJT3AOfn/wDGxv8A////APf3/wDe1v8A Y2PeAO/3/wCcnO8A1tb/ADE53gDn5/8Ac2vnAOfn/wDGxv8A////AKWl/wBaWv8ASkr/AFqt/wBC Su8ASkr/AEpC/wBKSv8AY2P/AEpS/wBCSv8AQkr/ADk51gD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////ACEhIQAYGBgAa2trAAgICAD///8A//// AHNzcwAYGBgAISEhABAQEAD///8A////AP///wD///8A////AFpaWgAICAgACAgIABgYGAAQEBAA CAgIACEhIQD///8A////AP///wD///8A////AP///wAQEBAACAgIABAQEAAQEBAA////AP///wD/ //8AhISEAAAAAAAICAgACAgIAHt7ewD///8A////AP///wD///8AlJT/ADk5/wCMlP8AOTn/AIyM /wA5Of8AjIz/AEpK/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8AQkL/AIyM/wD///8A9/f/AEJC/wCMjP8ASkr/AP///wD///8A////AP///wCtrf8A KTn/ALWt/wD///8A////ALWt/wDn7/8A////AP///wD///8A////AP///wD///8AY2v/ALWt/wD/ //8A////AGNa/wCcnP8A////AP///wD///8A////AP///wD///8Ac3P/AIyM/wBaY/8AjIz/ADk5 /wCtrf8Ac3P/AK29/wBKUv8AnKX/AEJC/wCMlP8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AOfn5wAQEBAAISEhABgYGAAYGBgA////AP///wBCQkIA GBgYABgYGAAQEBAAjIyMAP///wD///8A////AP///wD///8A3t7eAN7e3gBra2sAe3t7ALW1tQD/ //8A////AP///wD///8A////AP///wD///8Avb29AP///wC1tbUA////AP///wD///8A////AP// /wC1tbUA////ALW1tQD///8A////AP///wD///8A////AFJK3gBCOf8AOTn3ADlC/wA5Of8AQkL/ ADk59wBKUv8AnKX/ANbO/wB7hO8AWlr/AGtj/wD///8Aztb/AP///wDe//8A////AK2t9wDe3v8A xr3/AEpK/wApKd4A////AJyc/wA5Mf8AOTnnAOfv/wD///8A////AO/v/wD///8AjIz/AEpC/wBS UucA////AP///wD///8AMTnOAP///wDGzv8A////AM7W5wD///8AtbX/AL29/wBrY9YA////AP// /wD37/8Ae3v3AP///wD///8A////AP///wD///8A3v//AK2t/wBCQu8AY1r/AEpK/wC1vf8Ae4Tv AGtr/wBSUv8AWlr/AFJa9wBCSv8ASkrWAP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wBSUlIAGBgYACEhIQAYGBgASkpKAP///wD///8A1tbWABAQEABr a2sAGBgYADk5OQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wCtrf8AOTn/AIyM/wA5Qv8AlIz/AEJC/wCMjP8A QkL/AMbO/wBCQv8AjDn/ADk5/wCMjP8AMTn/AIyU/wBCSv8AlJT/AEJC/wA5Of8AWlr/AP///wBC Qv8Avcb/AP///wD///8Ae3v/AOfe/wD///8A////AP///wD///8A////AP///wBzc/8AtbX/AP// /wD///8A////ADmM/wBKQv8A////AO/3/wD39/8A////AP///wBaUv8Azs7/AP///wD///8A//// AIyM/wBrc/8A////AP///wD///8A////ALW1/wBCOf8AlJT/AGtr/wDOzv8AhIz/ANbn/wCMlP8A 3t7/AISM/wDW3v8AUlL/AKWc/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8AGBgYABgYGAAhISEACAgIAOfn5wD///8A////AM7OzgAYGBgAGBgYACEh IQAICAgA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8AY2PeAEJC/wA5Of8AOUL/ADk59wBCQv8AOTn/AEJC/wA5 Oe8AQkL/ADk5/wA5Qv8AOUL3AEJC/wA5Of8AQkL/ADE59wBCOf8AMTn/AK2t/wDGxv8A3t7/AP// /wD///8A////AP///wDe3v8A////AOfv/wD///8A////AP///wDv7/8A////AFJa/wC1rf8A//// AP///wBSSv8AOTn/AFpa7wBKSv8Ara3/AP///wCcnO8AWlr/AISE/wD///8A////AP///wBra/8A QkL/AL3G9wD///8A////APf3/wBaWu8Aa3P/AHN7/wDGzv8AjJTnAOfe/wBze/8Axtb/AIyM3gDe 5/8Ae4T/AEpK/wBjWt4A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A9/f3ABAQEAApKSkAISEhAGtrawD///8A////AP///wD///8AISEhACEhIQAhISEAGBgY AJycnAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AM7G/wA5Of8AjIz/ADE5/wCMjP8AOTn/AIyU/wBCQv8AlIz/ADk5 /wCMjP8AOUL/AIyM/wA5Of8AlIz/AEI5/wCUjP8AQkL/AIyM/wD37/8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A 9/f/AGNj/wCcnP8Ae3v/AP///wD///8A////AFpj/wClpf8A//f/AP///wD///8A////AHN7/wDG zv8A////AP///wBra/8Atcb/AHt7/wDGzv8AhIz/AM7O/wCEjP8A3uf/AIyM/wDn5/8AjJz/AN7n /wA5Sv8Avb3/AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AEpKSgAhISEAISEhACEhIQAxMTEA////AP///wD///8A////AFpaWgAYGBgAKSkpABgYGABSUlIA ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wCMjP8AOUL/ADk59wBCQv8AQjn/AEo5/wA5OfcAQjn/AEI5/wBCQv8AOTn3 AEJC/wA5Of8AQkL/ADk59wBCQv8AOTn/AEJC/wBSUt4A////AP///wD///8A////AP///wD///8A ////AMbG5wD///8A////AP///wDv9/8A////AP///wD///8A////AP///wCUlM4A////AP///wD/ //8A////AP///wD///8A5+f/AFJS/wBCQv8AOTnvAEI5/wA5Od4AQkL/AFJS7wBjY/8AWlL/AEpS /wBCQucASlL/AGNr/wDW1v8AlJTvAN7e/wBze94A1uf/AIyU7wDe5/8AlJTeAOfv/wCEjP8AOUL/ AHt7/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAhISEA ISEhAHNzcwAYGBgAvb29AP///wD///8A////AP///wCcnJwAGBgYACEhIQApKSkAISEhAP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A7/f/ADk5/wCMjP8AQjn/AIyM/wBCOf8AjIz/AEJC/wCMjP8AQkL/AIyM/wA5Of8A jIz/AEJC/wCMjP8AQkL/AIyM/wA5Of8ApaX/AP///wD///8A////AP///wCtpf8A//f/AO+c/wC9 xv8AhIz/AL29/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AIyM/wCUjP8AOTn/AIyM/wBCQv8AjIz/AEJC/wCMjP8AOUL/AIyU/wBCSv8AlJz/ AFpj/wDW3v8AlJz/ANbe/wCMlP8A1t7/AHuE/wDe5/8Ae4T/AN7n/wCc9/8A1t7/ADEx/wDv7/8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ACAgIABgYGAAY GBgAEBAQAL29vQD///8A////AP///wD///8A////AAAAAAAhISEAGBgYABAQEAClpaUA////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AMa99wBKQv8AOTn/AEJC/wA5OfcAQkL/ADk5/wBCQv8AOTn3AEJC/wA5Of8AQkL/ADk59wBC Qv8AOTn/AEJC/wBCOfcAOTn/AEpK/wD3//8Ara33AP///wBja/8AOTn/ADEx7wA5Of8AOTn/ADk5 /wA5OecA7+//AIyE3gD///8A3t73AP///wD///8A////AM7O9wDOe/8AQkLOAP///wDO1v8AUlL/ AEJK3gBKQv8AQjn3AEJC/wBCQv8AQkL/ADlC9wBCSv8AOUr/AEpK/wBKSvcASlL/AEpK/wBarf8A a3PnAM7W/wCMlP8Aztb/AJyl/wDO3v8AhIz/AN73/wCUpecA7/f/AGtz/wA5Of8Avb3vAP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8AlJSUAKWlpQBaWloAra2tAFpa WgD///8A////AP///wD///8A////AP///wC1tbUAWlpaAK2trQBSUlIA5+fnAP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8AUkr/AIyM/wBCQv8AjIz/ADk5/wCMjP8AQkL/AIyM/wBCQv8AjIz/ADlC/wCMjP8AQkL/AIyM /wBCQv8AjIz/ADlC/wCMlP8AQkL/AJSU/wBCQv8AjJT/AEI5/wCMjP8AOUL/AIyM/wBCOf8AjIz/ AGtz/wD///8Aa3P/AJyM/wBrY/8Avb3/AEpK/wCUnP8AOUL/AIyM/wBrY/8AtbX/ADk5/wCMjP8A OUL/AIyU/wBCQv8AlJT/AEJC/wCUlP8AQkr/AJSc/wBKSv8AnJz/AEpa/wCcpf8ASmP/ALW9/wBz e/8Aztb/AISM/wDO3v8Ac4z/ANbv/wCMlP8A3u//AKW1/wCcrf8AQkL/AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AMbO /wAxMfcAQkL/ADk5/wBCQv8AOTn3AEJC/wA5Of8AQkL/ADk59wBCQv8AOTn/AEJC/wA5OfcAQkL/ ADk5/wBCQv8AOULvAEJC/wAxOf8AOUL/ADk59wBCQv8AQjn/AEpC/wA5Of8AOUL/ADk5/wA5Of8A OTnvAEJC/wA5Of8AOTn/ADkx9wBCQv8AOTn/ADlC/wA5OfcAQkL/ADk5/wA5Qv8AQjn/AEJC/wBC Qv8ASkr/ADlC9wBCSv8AQkL/AEpS/wBCSvcAUlr/AEpa/wBSrf8ASlr3AFpr/wBjc/8Atcb/AGN7 9wBzzv8Ac4z/AM7n/wCMlP8A3vf/AKW1/wDv//8AMTHnAHt7/wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AOTn/ ADk5/wCMjP8AQkL/AIyM/wBCQv8AjIz/AEJC/wCMjP8AQkL/AIyM/wBCQv8AjIz/AEI5/wCMlP8A Qjn/AIyM/wBCQv8AjIz/ADlC/wCMjP8AOTn/AIyU/wBCQv8AjIz/AEI5/wCMjP8AQkL/AJSM/wA5 Of8AjIz/AEJC/wCMjP8AQjn/AIyU/wBCQv8AjIz/ADk5/wCUlP8AQkL/AIyM/wBCQv8AlJT/AEJK /wCUlP8AQkr/AJSc/wBKUv8AnKX/AFJa/wCcrf8AWmv/AKW9/wBjc/8Atcb/AGt7/wC91v8Ae4z/ ANbn/wCM7/8A5///AKW9/wD///8AY3P/AIw5/wD/vf8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AHNz/wA5Of8A OTn3AEJC/wA5Of8AQkL/ADk59wBCQv8AOTn/AEJC/wA5OfcAQkL/ADk5/wBCQv8AOTn3ADlC/wA5 Of8AQkL/ADk59wA5Qv8AQjn/AEJC/wA5Oe8AQkL/AEI5/wBCQv8AOTnvAEJC/wA5Of8AQkL/ADk5 9wA5Qv8AOUL/AEJC/wA5OfcAQkL/ADk5/wBCQv8AOTn3AEJC/wBCOf8AQkr/ADlC9wBKUv8ASkr/ AEpS/wBKUvcAUlr/AEpa/wBatf8AUmv3AGNz/wBjc/8Atc7/AHOE/wB73v8Ae5T/ANbv/wCUpf8A 7///AK29/wD///8AnKX/ADk5/wBzc/8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AUlL/ADmM/wA5 Of8AlIz/AEJC/wCMjP8AQkL/AIyM/wBCQv8AjIz/ADk5/wCUlP8AQkL/AIyM/wA5Of8AjJT/ADlC /wCMjP8AOTn/AIyM/wBCQv8AjIz/ADk5/wCMlP8AQkL/AIyM/wA5Of8AjIz/AEJC/wCMjP8AOTn/ AIyM/wA5Qv8AjIz/AEI5/wCUjP8AOUL/AIyU/wBCQv8AlJT/AEJK/wCUnP8ASlL/AJyl/wBKWv8A nK3/AEpj/wClvf8AWnP/AK3G/wBre/8Avdb/AHOM/wDO3v8AhJz/AN73/wDv//8A9///ALX//wD/ //8AnPf/ADmM/wBSSv8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBaWtYAOTH/ADE5 7wA5Sv8AOTH/ADlC/wA5OfcAQkL/ADk5/wBCQv8AOTn3AEJC/wA5Of8AQkL/AEI59wBCQv8AQjn/ AEJC/wBCQvcAQkL/AEI5/wBCQv8AQjn3AEJC/wBCOf8AQkL/ADk59wBCQv8AOTn/AEJC/wA5OfcA QkL/AEJC/wBCQv8AOUL3AEJC/wA5Sv8AQkr/AEJK9wBKUv8ASkr/AFJa/wBSUvcAWmP/AFJj/wCt tf8AY3P/AGvO/wBre/8Axtb/AHuM/wDW5/8AlKX/AO///wClvf8A////AMbO/wD///8AY3PnADEx /wBaUt4A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AO/3/wCttf8ASkL/ AJSU/wA5Of8AjIz/ADE5/wCEjP8AMTH/ADk5/wAxOf8AhIT/ADk5/wCMjP8AOTn/AIyE/wA5Of8A OTn/ADk5/wCMjP8AOTn/AIyM/wA5Of8AjIz/ADE5/wA5jP8AOTn/AIyM/wA5Of8AjIz/ADk5/wCU jP8AQkL/AIyU/wBCQv8AlJT/AEJK/wCUnP8AQkr/AJSl/wBKUv8AnKX/AEpS/wClrf8AUmP/AKWt /wBSY/8Apa3/AFJj/wClrf8AUlr/AKWt/wBSWv8AnKX/AEpS/wCUlP8AOTn/AKWl/wCtrf8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDn3v8A ////AM7O/wD///8AtbX3AP///wCtrf8A7+//AJSU7wDW3v8Ae4T/AM7O/wBze+cAc3P/AGtr/wC9 vf8AY2PnAGtr/wBaWv8Ara3/AFpa5wBjWv8AWlr/AK2t/wBSUucAWlr/AFJS/wCtrf8AUlLnAFpa /wBaUv8Ara3/AFpa5wBjWv8AY1r/AK2t/wBrY+cAa2v/AGtr/wC9vf8Ac3PeAHt7/wCEhP8A1t7/ AJSM7wDv5/8AnJz/AP///wC1vfcA////AM7G/wD///8A3t7/AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAIBAjcBAAAAAAAAAAMABTcGAAAAAgEKNwEAAAALAAAAKoZIhvcUAwoDAgEAAwALN04BAAAD ABQ3AAAAAAMA+n8AAAAAQAD7fwBA3aNXRbMMQAD8fwBA3aNXRbMMAwD9fwAAAAALAP5/AAAAAAsA /38AAAAAAwAhDkUNHQACAfgPAQAAABAAAAACUv6uOaLlTYVAX8c1uMm4AgH6DwEAAAAQAAAAAlL+ rjmi5U2FQF/HNbjJuAMA/g8HAAAAAwANNP0/pQYDAA80/T+lBgiU ------=_NextPart_000_0484_01CCCAF2.7C75E7E0-- From info@amorosa.ch Wed Jan 4 08:10:10 2012 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04EA8L1143372 for ; Wed, 4 Jan 2012 08:10:08 -0600 X-ASG-Debug-ID: 1325686194-0222017aa3258330001-w1Z2WR Received: from sh01.ticino.com (sh01.ticino.com [195.190.166.201]) by cuda.sgi.com with ESMTP id ROlpXGHJkoxcvze1; Wed, 04 Jan 2012 06:09:54 -0800 (PST) X-Barracuda-Envelope-From: info@amorosa.ch X-Barracuda-Apparent-Source-IP: 195.190.166.201 Received: from [84.55.234.43] (helo=Amorosa) by sh01.ticino.com with esmtpa (Exim 4.69) (envelope-from ) id 1RiRVu-0001k6-IL; Wed, 04 Jan 2012 15:08:34 +0100 From: "Fattoria l'Amorosa" To: "Fattoria l'Amorosa" Subject: I: Fattoria l'Amorosa Date: Wed, 4 Jan 2012 15:08:00 +0100 X-ASG-Orig-Subj: I: Fattoria l'Amorosa Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0520_01CCCAF2.B3A345A0" X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AczK3prLrrJ0rj23Sme8VRO5enCC3gAAGyFgAADt6vAAAGp+8AAAizswAAAG+SAAABmcYAAAEC1AAAAY2xAAADNVIAAAZHlw Content-Language: it-ch X-MS-TNEF-Correlator: 000000000252FEAE39A2E54D85405FC735B8C9B8E4F63700 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - sh01.ticino.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - amorosa.ch X-Barracuda-Connect: sh01.ticino.com[195.190.166.201] X-Barracuda-Start-Time: 1325686194 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_0520_01CCCAF2.B3A345A0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hotel & Ristorante, Facebook: Youtube:=20 =20 www.amorosa.ch =20 una Passione, eine Leidenschaft, une Passion, one Passion Cordiali Saluti, Freundliche Gr=FCsse, Meilleurs Salutations, Kind = Regards Fattoria l'Amorosa, Via Moyar 11, CH-6514 Sementina Tel. +41 (0) 91 840 29 50 Fax. +41 (0) 91 840 29 51 =20 =20 =20 ------=_NextPart_000_0520_01CCCAF2.B3A345A0 Content-Type: application/ms-tnef; name="winmail.dat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="winmail.dat" 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 o5Pt4Z8h0eGh4HLnUCmQzTlpcM8p0qpQqlCjsOcgZNAqFPtgcaLgKTMwK3CjUKpQplL/qlDjE+PB o7Avcqu0qlAlsM+qUKBwI5JpkqIY7tDx0f45cdCjUC9y7hKqkCQw7hDn8bBqcGPwOGszMO4QovCf JPKjMtsyJLCwcDBGpnKfLZCt0W8jovAzMJJWMDIH6hDpEJ2QoRhFKco+PbLw8FB6sDsQ/DCMXvxs XjsQ/pC3ED9wP1AC0PxMVv7SARAAkP5QAXACsP/9sHbQ+/D8sLYQ+/A7cHlwfz2QepC50HfwPRJ2 cTqAPX91UHqweXC4UAFQOvI6MI9OZgHwPdD+MAtW/hFNbT2QZnhA+2BNuhC2kEb+MUASBHRA8ECy QFC7trv0/8azf4O9koUSf9C9sL2xvmL/Q2H59EG0QXKCcISwgnCEkPzGKIDwgPHAw0Qw/LHDYQBr NXRStlZ0TjpTwmBG/bHCoYMwOmMBwhDYVhpbPGMa/GNKgEFIcMNyw/FIwQeQ/8R4XBKasohS1lGa oUnRmqH/iDPHA1uyyBLKkkJzAYPLU7+NoU/QBPHSoYr0iZFJiZL9iXCsBmGL8Mszx0HHUY9D/40U UxGNoU8RUeFVs8vqjeWf0VSUEs90kzaOcmlJjRT/UrMIw1GSlRVUYleCUOMOlf/Nq4rU1rKZspf0 mdQQtJmR7xInSfKZVYhEPcdwx3CIMn9nUJxy2JNqQySQXpDqsNX/neHcFKAwIfMpACJBJJDcFL9l 8Z/hZNBi0NxUrJEQLXD/KNHd4RY4Y1Ih8qFQ5PDnUv/g1ODTFoOiMJ/yoHCeEBZy/xy6nhAckdxh YTDgchs0HfLfGVKgMOD0JbDkEU7mkWYDf+GUZfKoUmQQYBDrMOIxHP+gcKox4QehUN6SqxArUmDx v6JhoVDiUikQMTBycGd34P08IDEs0J3QYXLitiSyYbL5LZBYay2QYXLs8qsSGRHxZ0GsNYvtAGVA NIHrMOfbkp+Qn5DMPSzQXrCccBHpEKIU47JjyT1valJ7kOp1AErvcDiQSv0rgE12MDtQerA38Dty tJBF73DpdQGOYm3vwE38pkWzsHWwK7A5cHWwO5G/dKE+8D4Q8vA7UHYwhnlg/k4/UHiweLB1sCzR PIE6kNnwcK9ieZB2kU16MPVQ/3mwdjC10PORe0H10U2guqD7fYP4Ukr7A0DwQfIztAKx/0HhQxBD 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 kLLQrxLu0PFw8XC+sP++sP6QPLC68P9SvZA8EPyQ/zTQN/A8EPuwOLC68DowOtDXvZC90LsQz7Fg Yf5QuvD/dzPzAfxy8BB3cq6wOtC+0L86UAEQwTA0sDpQPJBr+gAHnyk+X7cr13aEMGM2KDrQpP1a 3b+N4jBRMmLcvjFaSF8tY7Vm/NVmvJ/P4baeOpC4ULafIS1hGXMQUrwwGHcjwHT+kM5J3cCvc2LH uvCOXxkIRSk9xD9RawfCsMB/w+0QVmIsSgZJxr8tYZRqQyTPllHGFq8wm1IvEFpIMA/GH76Pzpa5 sM5R71Hgzk0xVrW7K/6QxdDzzp+lwF7nSE/Uv13s9cP/1t/X72z+rTCqEDMQXhB1kP91kHfx2O9m Ntt/3Y80cgCQv6+SM9D8ELPxcePyMV3OH++Rg3XQZHDs0Mc2ojQh9jH/Z+JkYeIwapD2MPhQ4lJu UX/kAmSOcGK0AfrQqnD2ECrYac95LnBwU0jsMDowvJV2PBD3cPdwsZFEqxD/ARABEPyQOxCuUAEQ slFzwO0ZgGV6cP+QKv/AYyIzAfJzcmHvfTMQ/7A78OlQ5DFydNApRTyQPBBd8P+tMK0wtPE0Q3Cy 9hABkfIh/3GQsfB10P5Q+xB1MDiw/1D/83DkVHAw/5CusKOxN0E6EOs60Diw76ygRDyw+BDvcp8v MDwQOjB40DiwrnVn8J95v/Kv8zbgcIQwjFEq/DBrQeY44H460CEs+kG7AF7P/EgQSBBoX13CDj24 cMoQKvwIOWIoeMY096Mj+JY6MLhwOYZ387pH8KU0CEHgcAwpORmwVbAhMK1ZSeBwOHtIEHNu+H6M flVVscBv8/bKMP4w9xDv/l0AXy1l/HAZsP7QCv8ADdyUbrh/e+QAADT28PrwW8t1/gAo0NACXFr+ oCjCOCsLMWbGOP3QwnLB+bBCJOc01ixHwtBx/fEszlW8MNEwwrBieCCMScuwAlRz0AZQc9O97fhw rVH+MIT1z/i/P5oDMN8S75q/KQOmEsdc565Q7HR10DF67RGhZj2q9SZAZRhwCfCAny0ZX6mB/6xw b1AK8CrQdXCs8e1gNgJ9rUJhD/48kCHwNFLlcDH+fqoQnlCqcKpwtZY18jWwn7Vw4rBqcB/S5nBs bWpQm3HU4hFcalCqcIxx8XD/qhBuEORyNdQr8eXhPBBzcE+x8OpQ7fCs8DF2dZBSyHKuXTxwlXo5 8PAw/znwb3B4kHNQObBu8DvQ7ZE/MqVuEC4wYfMy4zsxSFP+ag/wLfFuoKfLPZOt4neB8+5wsfDw cWfQ6ZA8sDfw15oSqXOnIF08kJRxIO+g/nZ5UDxwPNA7ELCw6FDfsv+uEm7w3xCs8GfQqDSh1rZf mS9PlHIIsA/8SkHKMKZrkg3CECE4MvDvhGt2/jjhVbA5zM+RkkgQax/IC72wkdDT0N9wYyT3/wwH 9DI3UMPwNJY3cAuR+yB8OLUMAa8w/tA80DLxMHyLScIQVbBIEKRedNAh+DRjLNPfwkVIEDLwrRDx /ZAINfe5z8F0Or87xSdIEDxakdCMRS6SU1rn05CDmAfROGsI5ZHQJBDhPFApQUo9LpqvMDww/0fw OJtIIAvgYqEGMAsQD/DetAZBo3DQN9+AOKNwNBDtvVVuRND7MXKvMPwwCLD3PDCwsJkdRTLxVe9M 3nGQz14fTu9P/9wKUPDiwXmV93HDbB/cY66tgGtg7oDcr2NVv6giTK5lr9A3cDH+XjxQ/DCtEBwU JZAkcGnQ+6+UcxFycZDsdLVwqnDkcP9uEHJRTkkm02fh5XBscFKy+a5wjXHmcOKwXLLxcFyQ/+ZQ alBqUPGTUuKoArUBprDU73V1sM8kYH5u0JoRzkjwELCwdnDPaaqwK1DntVB4sP/wS1Wr8nZwdbB8 pUgp0KyQWrXxqiZAXf94sHlQ/DB10GqxeALvgeyzn2RF4/BlMm6QnnBsYXYw/3lQpzDi01snrTBU cG7wadCmz+6AtAPOYWnQaxjB/yDTcITxqVPT8m9rXsLQuvBrQvgPEpvLoHZBfAOxe+88EDLwwhCk /W4M0fSrjZc9QWAoPFrRENEQrvJSXn98UDxYrzAxkNDwCrJL8EreTUbwDZBL+HMxZvbw8VA/rzAM kJ7Q/ZAPkEBfNEpP0m8Kdo4w/jAPZq8w1vhmSjF4nw8BWTJ233fk/8pp+HDQ8M3wDJCvMJHwRvDf dPBqkjQQDPBu8TRJkD117iRtkK8yzfAxuyvrcAIw7fhyvAegdQAojjA8Vg+Q/wzwapKBELrwPF/z 50bS33BzhDCEMOdA/lD4evVxSfk8EElRSRaIXxGLGZ+K7/+L/6KE3uFSEF5TqYaMj5sTvlSusCPQ 4pCoVahHho7vnxW0LVDocIQy+HK2eqaQh6lUThCtEGtZbFWzsP+s8JC0lJGqAafSJnBOM6Ht/6IX ImPkFLPy7HNbBp3jJnDbrTDocI3jwFdAaZ6Q8TB5WZCtbWBw6VD8MGXw6GWVYEhqcOhE59C1UDKR V6BulHrxUFJ+rlA/XvGtxI9LrhLn0K/QjVn6a66AZadwspCsUKaw8HD3KZDw0LFRYSmQ6vDqULFQ 56dwrJDe8WkqZkUX16Yj/6xQmtCtteZAp0EeuC3XjSp/Lm+nX37BftCH+kvw9JCln/SAfyM4mEu/ PYQoa0KD36y+0NA8MPFQxTlJvDD6lfZFhnCsuO9y4XoxbcEH0JPwMKyclGZKdpVqNfBzSn5BMu9Z rL+tZ/4Q9t+uKba/32Cyzw8QKLQPCdC/rfJ0MYegqwE0cnGxPDLw/9+Qz1YGUMLU33BG8EgYDxD4 7lmtM0FHMP4S/ZLFV+xREPdD+tE9+bCsnw8F9FFmB9Clr6GyEEPw/hAnQDxE0AfQrV0PEhYQAAAA JgYPACIg4FdNRkMBxFDFIcUUlcRQQMUiIMRQvBzGUfj8BwDAvztKG6FOP8nP/8rfUWtksRwFJnTW tFPRzgZ1KGGNoAB2UjUoQGWgZf9aulM31sju4ecQQDJZEmMw/1sY5rPPhd6yG/DaUdQI0G8/2Xom 0ygk1m8bsNqwrnE5ThAJUfFQr3DpkHR+/2hwYZDw0JTw6PDoUGNQQ/BZJNDHQGgwZfCNJ8BIvAhZ XtCKEeSOUYZU5pA92XFMohAp0M8wZdBTds9fMCQwYFCb0KVE3vCkUf5V6ZAr8GBQ4/HspNzP4Jx/ 5HDtEdVP0VqV8Gp/eM9SyGJDJEv8akn+EqnQ/wIwS/AN1TLgf8HlXnGw/XCXCLDlXw8Bk3Yh72Ez mH+u0HLQPXTwMPcQJ3Bvt17b+bB78IS7oAfhei+OweDeKPwwbpQGUPbxNEPwSLA761Y6ETS/lPM/ MqQsMf5qh/8DK/sQ/jAH0BuQ8hov8dDy/EXReCBVPbEwIH9/w34wSjH+ITBwPVUJ4CT5hDRzakbw u5BL+BtQr3D9e/ClOkECECowBJly4DND+XvyQSwEEOtfCqP7sH+yLUvwWgPhbvEwB7C2cueGtHQx S6AwEA6NA3/Iof+a8JZxki8FvxUHnl5SEiHQ/hHgYaDQCTBj0ChVjkaORP2QYG1jMCHQ4vEeAZuQ 2jA/kLEd412yBn2XZZQwEGr/KjB+MBtQXrAoMlbzU0UoEsNW82SBSmXOdZaWBhb/FZIVlQZPBl8q oZXw39BZcPEO8UxSdiRwZfBl8N7Q7d5RXVqQFZF6aDBtsGeQ/yww2VCasDBw2VEewC1BVHB/KDET rRJTKqWjUKBwFtCMAmUj0DJ2c3p0ev+asCNw2pDe8Jqwn1BXUNow/1qQITATkwdvHX+XDx6epl8v Ig9L8DMwvnA4caH3bmd+0LIQc/QQYmgw9vEw8Oc8MVa8UDQQsLAy8v8iH0TBPDB78CX/OQG+cDQw 36+6rtAhVGEQQVEwfDa6Ut2hUCG7oYEcuhZ0N4U3cLkCkOZEQ7BG8HRw1Xohu7/x8sJiIV9zx75w xq+p3zF/SIItobEQLfNVelDpEr8uv33BAZDy0Jvw/TE0KNDfRHCCcCS0J1Y4MSiyVHvw/IM4LfGE J9JwRvCdMPLQZCI4ApzOWXnQr/VZn/gQ8tBwf4WEw6AwB3hD5Pd2YRDnSPbwunA7MPzWaoQwr1JD sGEQO1+JDv8EwE4tUxpCX+EvzLQQ8NlwNY3xdV9wKUWgZcBpjHJtRhCNbWHQRlFGQm35WhAQetSw 3hDU0Fzw1NCga23HWDEaoUqhAC512jDg39GoUNkwjF3/5TBkMUgg2WGUMEjVaSFj0PzPdZ1wGDCY slqQCbNJL+dOP09PShbOcaFQWBCcUHWVMDptoHrZUNmwz1FI951wDvFoAFSb8GFQ0lBgUNHa8DJm zqFAcmBQnLA/YDBfcGk8VRxecEgQzm3PSDBocJXwz/AJXWhw2XD3yPAccNOy5yEgWeFb8hm0/+O/ VQ9a30Eu5S+034KgvoD/bwEqUvbxcGA6Zb7Qw5CDkKmwsBFWXzEowhAAJcC+PGgwF1CrOn4xI2As wrz3NrYBcYaplIQA6eXs0CWw/2GwsRCo1v0RZmC7oWNfgEFd8bDPw+PtNCiRKHvwENBaEFbnMMA8 YbJRUN9tsO/Q9P/95LXgLKs+bd4dfjDXaeGAkGoxUuc0esZmYSBq49JwXVhmMTQOCX+hfxKHkIxV SVn/JbFs6esQ/xA21L5wYbF/5fe7U7sBJbEwUbBt2gCQb9DvfzS/kPmxZoA8LnK38CSQqwKQ7NBS d6BeajCEPaA+KGMQqNi88WoBrvDwUe818KnQLfBmcVBT0HvwXV97s0qKAEyKPwbPfR+NaFT/CNFF AUxQodDPUKEwC1GgIHhlKmGCGEXQ0BCC0WHvmVNSwVRyV9FMm/DPMJQwn1dQmpDX1H9fl2EIYUsx cRhgUI1xRbDcEExQ8P59DLAKkEdyEPDUsFfwjhD/lfIQ0MjyElJ/H4oviz+OgX9IEKBQmpDe0Jyw UbBxsM5noIEYEFQwEHKds0vhMpsW4N8gZdJQnLDWehdQ798QITDfENuwraIA0CCFL/eXdQ/jo3Fp RxCVktdylpb7CpAMsK6A4B8PDZqlXpafP3+uIS9jn67AckBqoDyEvkDasNuQ6PC38KkYxjgj+7tw nNFEK3K+cGzQunCc8Pm+2HNivnA6MJofZwJ6QDeeaWoQvHC1+qGo0A9mviBhwfbwvtS7cDXQpD2A f/0hbP+6Qb5wAZCfmmMQMeu/oS5ykyWgPHAQLfK6cPhiJFKvA/O9OMGcOKl/36Vvu3BrEJtypvRj p2DzBR+PkF9x74G98C5yB0Ei/1+BoNoqkCUQMFatcmMQbDh/35AqUjg2oTb20D3wYpIP5l4lsKJQ Qyz5cBdQrJD/X9NgAblwv5Ch0JleLjCssP+ZUquxOQAlwSpS6zC8cKd//UAoTd5QyP+5z7rfzCvP 8MNMUEUzcUtdCd6AgOD/14i+L9Q23tAbcOByV/AQ8D/U9EHZ0YbAwUhw3nAReodLMMzyuPBLaSll wBFObVcQ1PIaUK1xFpDn/0vhu5/F78b/0UkKkM2QTFDnjvDb0BXQjVXxEM/wUtD8CU3a8OByzDDM MMLwUXDzGvDaMHN2nZBFkBtw2dD6bIGgWYIQxP/hT9UbVKn/yrLNX9Ev0j/TT+Sf1Y9oO39fgWew ohBrXiQQ7ZCclUB19vCtC2BeYxAqkKyQxt4sZBr3MNVfrwJdX9DxcH/bmG/Q8fA09V+icoWt0M3Y YcVEeXD+UIQ44C5hnywc9vDvcNt6rpAoNSsQrbXzcvLQUXDwiABaOzBwCDljIGWQ1l84wCh/Ozyt 0tufPGLiK3Ew4xy16zkBZ3JzOWPd7iHvkvEU/fCTbmnw4jIXUPmRX6EuMB9ilOoQnBAw0BUwrVWl njDpsOX4rdBvsIxFrdJ3bLCiUTfgKK6SnDBp8NX+euX/+InnUWKDFbAlsJ2Q3XfRWS4wNfCskJS3 LwRf/5ev9f/3D4CWTFAQ8IFSvZAfwtAJcBx1H+8H+VTPbbeOUAxSgLF9SBCQcAmQgP/EQpLmCgP0 8AsSG5B6kIhQfb7UrYhAmQGB8BDQCpCG/8jFjpP3LwG/As8gW4fhUlDJGzBTchUw723KEBUS3xdQ gbAPlMSxygBMF/AXcPdKsVFgFmBZUnCNEI6SAx//fe8JPxzPDF8Nbw5/D4+ZH3sSD2iyQSXB6zAS P18CSawYb63QcTBBNmu+d4H+9nNjrdDhEDQQZ7iukCUwc66SohBSbhWQOlZikjE+ZmMwaNCukJuw JbAIST84NDOQ41A9cnrSahAIPXwpPbFaFxHZoBdpOHN3/q3ugeoQYzAt8NnQdFajv91zhCw18BFY aNCl5ODZI/0iPlkeIyCyHrhosuDQb5D/aNAYsF+RHQEnVjdQFZF0IN56mrjfsC4wrdAxJUAuALI0 LRa1YhvQMxEwcHL/ahBg0ONQsVissHiQahAaEf9nQT1wrpY3UONQFRARVK3Q9Dlzo9977nA28jrz rcH/aHYiP/RHSpC4/zHPwdlZzGVEoRFSgc9xURCIcXX/knC9kMLwBpQ2H7vrhtA1EO4IBoBMAIhg XEVw/tBF8P6ujoI4of1wRlBXUIjwRdDPjTA4cFcQkpCUflbRvIb/VIGNMEZQzHWFA0E/QcJZz5c/ H7vr/BF1y/AqUVNQpXzRTAbwzmkF0LaNIZ/BMQbig8K9YQYwc3pSEP+OEF0Rz0tE30XvMrjBWUhP /0lfSm9Lfz0E1S9OH6ZBdvK/U7CiEE1faMHnUOcxUd5yf0/4adJjMPKQFnB0sZ2gOKPaME42Sj0i IOBE6pDzthJf0EEsahBrViGxpQD2TUOwYbE4GbB0VmDQX3KPm1Ct0q3Qc1CkMNZ0RT9YMHqwUXFX Y158odD2fs9f0nEwT/9oSYtVLjFVAeVet1WzMEMkLx9Z58vw91qUa1hRETljMHywq/LqUPta9ucw 5q2BGzBa+HnQ61BbydGjYWNhp/GRRS4yrJ5d5zBP0usweHDWdibXiaUBcnouMTAxalr4N27wWjBv sNW0gV+xKCj2QVr+WjFuQXBWMvKwXl9/a498v21P+p4BGv1yBTDv/nmM8I0wgTCDEPjykrKWH79/ r8QQNTDDEISQOZFQwtCny1CBUIhQz3k5UAiJAfStbTWRZZKwPBDD8Dkw/5Bw/xGOocRSBvD9MMOw gfD/dXBs9Avfbq95P3tPChUAwU+BkAYwh1CBUMZQBvDo/cSAab2QgdD08LwwiBD/E/s1YQew8EJh cPDMcnvfee//Cz+Bj4ISiVKJUoNfhe+G/+eYj4l/1wVJNWNQtFAn8P/qUGSwtFCmENkQ51BdGOjz tmpksLZSKSwFsHVNnfER2cBR8FkbMTSlOPfXUFgwY1Bb66Jm4a9QLnBfT7AVkhmw11AYMLXtg9a9 UoAsZvDvEBWQrpgYpODDrkHhEIxV7lW0UFLQ/IQ0rJCulNjwUpEuQbOwxghoy+4xPAdJJ9KtMPuJ 3+VJKY1gJmFWdp7x60B938BuiV+V57iwlp9Xw8XfHQGNkRkJafCz8nvdB63QP2iwkhKwEWqJ6pCS EmM8/+0w35CmELRQKtDrUJoWZdA/VPCQMhnSmlxp8LbwKEV8zmGz0mp+8ZEowa1y9/9l5abfuAr0 wTD/PUuqn0Av/8Qy/dD90Ky2q78+T6zS+TD6a+hAdjVwwxB28s5zTSB+XMPwdXD40PjQrPS/Hir7 dsB+YGk6MAUwrf+1D7Yf+7cvqX1UwxAGcMpw/PAIME9+MPlQ+THDgehg/3FxPug9YnVhdJA7cPTw 733/xNG4T70fvi+/P8BPrp/CbxvDf8HEWE0/xel0DgAAACYGDwDeHFfwTUZDAccQx+HH1McQEkDH 4bwcyES8/AfqAOcwSmEAJB6RHqAVoG9SoMqBKnDKsSQa8PD7Qc/u8lN4WFboUK1N7VBSkn3rUEPK gsoh4vApUNnySX5BznTOEsrSkHCTEGVxar5iyoHMeucwj3DqUTRc0v3KcmukYI3H3PAb0M4S0ND1 8xDVy0n25+Cfol0J1h+/4cSfgRpwHnAS9ipwUstJ/9k8UnDVP+Vn75Lk/ClQ6NDT4TzTsyx8UGvG ZuGfsesVocqySqRgTcVY75KekPfNsNk/UQI937RPsOHekdH+MFYxJafln2wNfrGH7+h//xDE6O/q /4SHgR/srajw+RDJ/DApWXawjHEGk3Bl/7mwsROCjwpS/XPyZIWP85/P9K/1v4JLurCMbfxy/TBL NNB90VSzkAhhClNY7EtturEGwcZwgn0EwcX/9t/s7/v//g//HwAvAT8CT/+JHwTPKVApEGfQI5IW cB5w/ykQ3jAqktx8jrLQsATfHyNfV7LeMN4w3rBl0BDQ0EE8EFYfFAm0GfJjkFJq/Z/whJRDV7AG 0h/8CrAe0HzGPAwwGpJgOAl6j7B69wjLV3BakMYhCRIf3eWhMP/T8N1QEnaUsMsRWEUVPxOhf2bw EX8JaRcf4g/lPt4wMPEOIFnGQGcQ3jAYXwzDfxxfCYVXcJDSnlAd/xEgUd8n8NHwH78iL1IQ6H3h PDD/qlnCDyVfJC8mPydPKZ+spf+7EHaws9A8NaxoRE8sGzLv/y0/MI8vXzKvLfuySKxj8tP/Lgws 7ze/Mg853zrvO/89D38+H0yvQF9Bb0J/zOmMEHv+d0MfRY9Gn0evSL9nhUkf80tPEtzvUZFQTB9O j2fQEPduGGtOmLRi785JTp+oJQawD1JNf1Ov/1S/Vc9W31fvWP9aDwuQEFDu1giPCZRNUVpbv14v bJP/8KBtC/1fYS9iP/IDYp9kr//w//qPZ99i72j/YI9sH2sv/24/hMduX3Dvcf9zD22fdS//dj9m T3dfeW+IP0APfP9+D/9/H4AvgT+CT4NfhG+Ff4aP/4efiK+Jv4rPi9+M743/jw//kB+RL5I/k0+U X5Vvln+Xj/+Yn5mvqBtfoT7fnK+dv57P/5/foO+h/yxHqloj3uzQon//po+4X6evqD+qz6vfOO+q P/+sz69erpaun7Kvs7+0z7Xf/z8vml+5L7o/u0+8X71vvn//v4/An8Gvwr/Dz8Tfxe/G///ID8kf yi/LP8xPzV/Ob89/f9CP0Z/Sr9O/1M/V3+cGTdjGSMf4YfLRVOew+FL/2BvyZtgj2f/bD9vY1//d j//en9iv2Xrf/ysB2TXir+G//+VP29krwOYv53PoxuYP3B//6m/mv+dP7l/vb9x54ybxp//ZVuO4 I5B7//Tv9f/3D/gf//kv+j/7T/xf/W/+f/+PAJ//Aa8CvwPPBN8F7wb/CA8JH/8KLws/DE8NXw5v D38QjxGfARJpSkUpRcZExnJME99MxxSmI4AUAki65xXsTBYdFgMV1uYX6P8XBhcDFdYZVRTMFAUY 0RQDzucVpBUHHf9MphTIFaL/HS0WEhUSFtIVEiHaFhcWAPBECE3mGAsWECNRI2PwCEkHSRZ4HhUh QxxU/yOwI7AXPBjUI1EkaCNBI7H/I0IZJRudJcor6SOzHsgf4/ctvyAHI1FASj8xDzIfMy//ND81 TzZfN284fzmPOp87r/88vz3PPt8/70D/Qg9DH0Qv/0U/Rk9HX0hvSX9Kj0ufTK8DTb+a54tBakVJ TbQpUV9wKE/gUCJVT9mlUEUJUCFKUU+wSU/g/k1R8E/QUjFR4VKTUmZSb/9T9lU6UDJV/1CCV0lQ NFDR/1CGWAZZClqHm3Ba+FjSW1V7VklT8ipQgVf3UAVR8krpUiBNalPgSVPxUiJS4u9SIV8SX5Bf cmtSIF+iVq//WLZe81OPXxRR8V7lYLFjQ/9lkmJWWphVM1CDUbJR0VeF72M2WvhRsVtDCGgAacRQ gP9qRFBiX4H0H20Pbh9vL3A//3FPcl9zb3R/dY92n3eveL//ec9633vvfP9+D38fgC+BP/+CT4Nf hG+Ff4aPh5+Ir4m/aZrnTACLgGSLgYvG31oBi4BnjIGLxuCMgWiRjIEpAKqLyYA/jj+rj/+LyCKL gQyLgf+SMSpGi4Eci4EQi4FFTbBGKwJAkdSLwg6LgS4Ui8WS8pRyBIuBAwHICAAFi4ELAovClfKs DAKNsI1wA4uBHpVjTAcBlXCXlqH0lzBB8AsgAMyNoY1yjZKZVJYojUmMgBiLxOkHkK8AITlKOVJj KUqEWjGc8yFCUhicwCOdQZ4CWmshnSJrKRWe0UqegWueYHspY4CEWpy9WqXGoBGCUp/xrcZKlLWg cf+hA6BioZmhiKDQoVKjFKOmD6ACoTSjEaT3OYStQuSMtaXjvUKlxqMRpeIDpcGnczFrlDlznFmn 8nucqCGogKWoInOSlKfwjCmfkBBCnQBAUnshUnMYnzAY/kKegJ7Qn1Gq8qpAqjWrw/ufUaqQY6x0 qvWrBatCqaH/rfKrY6tSraStFq6CrRWp8fOegKyEOVqqkLFwsWCw8d+w8Z8hrHKsU59RELFirJH/ rDeyxZ2gquOzoq8BrhKeYJCEMWOMtgCEQqlQ7aggjLaRtmFCqJKoEKmA/6lxtmKoAJ+xqjG2MbeB uNOElEqo8EqEpVK5oP+5YbnBt4GqoKlgthK2sLYQM7VQqBBje5zgsyAhMUAIGCEIEBi8ECm7vDC8 IBiN8LxAvJEAvAD3vVCS8L2VGLxAvUC9Ar1x570TvrG8ojEpsZCdoLGhXFIQnUCw9sBBSsERCL+7 4JsAvOG8gL+gweA5weD2QsAhv6BKwCK/wMGhu9T/vzK9lr6jkvGV0MURxIHDY1e70MNxwfEpvNA5 mwAh/8Yku9LGAsGQvEDFwsJAndH/v/GqMKzxnZCwoKrBnvHBcL3CUgi/wMJhykbBMVLKEP/K8srS nRDKEb+gy4XK1MrR78winmCd0LFBY7MwsyGegf+pwLYAzdOxQbMhtBPPM84Bt6qQqlDQUnvQp56Q hJ7w/ozQQbMw0GPSA9ATsyC2AH+0sc8h0ES1Qc2hqgGeYIz/0WHUwtGg1MTQotWU0LHSAu/QyNGR nzCpAGOpYNGgnRD/0MHQk9aE0gnTcs4RzqO0sf+dENHgnmDa9L+g2xCe8Mtjv9vUzHTKMsmynaDB cEKcsP/bocoznaC80MEwnaDeJN7l/91zytLf48Ah3cPMdd6BvNDfw0DB4IuAvjG78THMIeKi/93R zYaxYNZhzfDOo9rBnOD/tfCqEdPh2bPlQuUjtLK2YN+dQOShrhCc4L+RCMFw51X/vKG9MsT3vFHd Uekjv8C74P/IgJ0Q6fHegZyw4vLTRNNCv+ZDzmHX8dfxsWDsUZSfkM61uxDXsbmAa7WfwKAw+nuh IHOg8O3y7dXtUe3h/angpaqgpdDtMu9Q7KCcsP5rnJHCA81i7GHvM7mw7fCuWu5Qn5DtocafwM7y ATZr7ZCcwHuS4MagCDHf8CHtsvIQ8+G14M7z5KoQ1/Rh9PWfkM7yY73tgu2S/sacsZ0SnSCdEfdE ngWc8P2xYGuxYOSg8dCeweaSn8D/uKK2oJ/h7QCgMqChoBChtf+gQ+2goXGjhaAAoXPtAPKA/6Ah +3H7Q6MX/OShZ6MXpYT+SqZQABGnNKTypuGnRqf0/wH4qPGokaiTtmCoQLYQrBL/uIOuuatyqgSu gQPUrBevqv+poAUUBROuM69PrSis1qyU/7HSCyKwoLM2rPyytrOWtKP/tM2qELWiusSoArcSuWAD YP8QobmiAAC5oOygoPClwNGg/6XQENG2crcQErO5wRFR1KD/AAASU7XT1OGucp+BqeDUsP+p4MoR ybG9UpLixVK89b0z/70kvJQXVr9RvRC+UugEmxD/xmHp0cADyJKx86zTwNIVo//wdMnUyFHCuL+R waEX4rwT/71QFlMeQb2XHkG8EcbBvNH/vDAf8Rfixvwflbvgv6DCgf/20MjSsLOc8Z8CzfDKh8om /81D4sLbseMD4sXdwiTjyzL/y6Li8s2i01TQJNoVz0jS4v/PYtBnrwHU4dFV18Hlo9is/yh563S0 JOThnUAq9aqQ1OP/0UPRNNDY0RbxcZ5g8BC5kP/X8rnA7JHRkdGUMNLQI9AV/9LDzaHk4s2xtgDb VSTjzRX/zGTexsmxybHCwTZJ3qXJtP/eud6mNfrcicHSwXAgQMXh/8JRwuHjJLGi5pHaY9pVzaT/ tLHBIOUEKXXaZp6A3dQ3Qf/KEOdUIEA8ArxhvYPFIh+B/x/xu9PikMohwhEdYb1iGMH/4pQmQdMy DlTYIdghLpGfMP6cn5Dvgaig7Qae0O6XowD/R5UAAO8RSLHvcUkUn+CwoHqUvNBavVDDcJ3QNVNa /9eRsKDtQRIA8bHtwPIC7ZPx8mF7lM7CQPBAwFDzIV8/Ee2xtVDz0rYQ1vRCcz/0xPQy9ZJOULYQ TLCl5/v2JKoQvZ5hnsL3I52hnUH/naGdEZ3R+GH48yNynmAU0v2fgSGfkPoSn/L6yKRmAPP/oOCj E6G4/OWhcwDVoyH+E/9VOachV5WnM6b1oNH/4+zg/6jwAZ4CwjGAqMOpQ10yuBH/qdED1AYXqydf J6u1DXStpv+u5K6Fq8MJe65krFizUp7y/6rWDWZglgnurGesZrNEz2L/s4SrcrYxuuK3AxJEtyGp Qf+5kRD1EiASFRDVbJITMxGg/6XBqVGfwK6BtaPRUbBVFXP/HXW9VYvCxVTn02+zxZY3Uf+78R3T H6Ido700vQG74OqB/7/xszBR8KthBreqccsRN0L/zBHBMhtCyiHC1CJAQMQdg/8f4r6ikuB4Qx7R vRDEVR4E/73VcqS71MOFe4PCMiJBnbD/npFklHzHyhTf0zmVdpMk9P8lsr/ANOHb0yYFniC1UbEz /9r4KBbPVM70J6QpKdBoKwT/MlMvcjLl0LXZm84DgrTxAP9t0tGAL8nOYapgL67R89DC/bsQnC9U MKUslisCtmDYI//Z9Nn1DlTjBduUj2Lcwzdx/9413SZKkc0iN7g46JI034P/3QQ3Oswm3STpIuHi 58LB8f88knYyy3Ow8X80l8QmgyWz/yZmROJ/0j0jy3IdQucivKH/wXDiEZsiPCHDYSADxQUWEP8g VHgTvUOchR5hvCA3coBF/yd15GNJ8X0wqKDsFbthqQD/+eDvMu9ISSLuSUkioVMQsHvsoLvQSvBR 3lLAYvOgc76t7YS14Prw73D18ozyUfumUvHQtbwwN1BNM+/x7eL/8/FN806jqGL1kfQSTBWoBP/u YaoSIpFSxL/AUfJRF/hkX1KU+JFu4VNUuEB773DO/63h+hRVwVTUVQf7wf+E/vP/8cD7c/zo+9X7 tPsiANev9f+v1lp3AKFa0FxyAfQBwgMk/1tBXGMC511CFSHa0XTBCAn/CFFuJLklBZlewwXVB5Re 9f9nFAcXu610xlMhZ2Z00kBi/w7DvLtepQY7vsdnYQvjCWL7FCEPomsQIrZTbDVqM+1A/7URahPF hQHQa4QRshOjiGHf+VJjhXRBaHKZo1I74m+E/xaiGGPoVJwQIXAhYR3RITH/cdHwoSTBJGF3pCDW esZxVP9vQRyRfVHmkdRjrXNgIeDT/+LTGkMi0NBiJ4LJADdz6oH/O7Idw3n2eVV6JXnXynNxhv/S AxizIddR0c4jIrUHkVMh/31RltE6zJbCdjOYpMilmLf/PoQ+tQ+BwUGD+Y1C5YSCFP+DBdzlK8Qv VIjBhWcrA4lz/4ZmMxaN85+2FRGIwTKC7HD/KzQwRSsT5BYwZVCwK4GLgv+JVYwDitMogYcFP0Pn kusU/94Tl4MmZpSSO8ObUUQhQ8L/kCKTMeqTHNEkJ5LGkEOQ8/+SZZM0kVIj5pbDkXOQoem0/5ZB 6nTuB+tklwQ1XjYmNhf/NzKa0vAClhNzUnmAQXLTAf9Dw+oBeYAehULzeCFBYnjD/3AWQtLLldj1 PWRkQGnARhH/jVBLEX0wojExgLGgo8JLIP+hsVCwRuKhg6IBomSjImhg96GiS0FQwKVNUUpR74KZ gv9NoqVBw+BPgKZ0pbBdIE+w36VTp4Gm8Z4wG/FSRmGqgf9N4anCAiJPUE9DTAMC9Knm/wQCqbKq 5VEiqzFRMlIxUOD3PYGsUdthY6xl12IU0q2x96UgrgH/YLVPgAggVNNMgP+uIFTUWnD88LSAW2FZ srTh/1xhbRGy07GiEcGyELMrCyP/WnJZw1mHWPYNE7S0tvJcc/9borXiXRFb9sXStZVboF/n/7ia EsdjQ7nSu/de9GAQuCP/vby8t74CwCa48sAkXqbIVP9lWrqku8dhxGN1GNJldLrD/y4RurO49cdx EGId9WqQalL/HdVdU62wMkDEEmz1bQFqkf+4kWQydnJ3oW9hy6MmMWg0/ybByVXVMdUynBCbQXmB cCH/nPDLAnrRd6J8AvEUy/NvRP8lUpMiTUH045XxllE3cXRj/wdVbgHPU28Sf8DQMWhRz0X/dhAp pNAFdnFvUW/k0uJzg/9zQ3ty9lBzZXK2c5PSBi7E/84CduF24taRZMJ9NlMhfbP/kbV2lNjTgBSf kuIxNbMzVf+BczSiNIQ+h91R4jFF0UAx/44xh0M0c9rF4WWMhopiULD/XTDjAoxE5MXmhIehg4eD tP+54Whg4xJu4ONximCKUeKj/4UxOWHiwj4mhNSFY+N0imX/OfQ7Eoey3XI280Fl23Holf+YlJTX IdFzQZ4ILPKb4tXh//QS7QaVZprBlYJFokWC9AP/lFGSRZDVkCTsxJqi91HwMv/0k+oyJ2NxpUkk 65hMBJOG/0ZXJ2X00/iB92ObE5vD0wX/njUkAZrjLRT1wXiz9qT1sv+UE33k0MF2EG7Q2yHnVbnR /oSjwaPBoPKFcbLwOWGhV7/80aVxo2L8JaIyqsCcASHrpFGXA1Kq4IS+oKoVqZPX/zJZcqoytXwQ c1giATD/8fFf8KNQouKoOAM1AoQDQ/un5FmmzqxjqtT5wQUEf7H/WNEGUqsRrMTHwc7hx5KlQPej 0KWQr6K1rkJh9K9zsLP/sHSvsrCxr8OzEw62ZUgOtP8LJbQwtOK0wg2zChJk6rXx/4pQbAGh0MVj t0UfYx7IHeP/w9O3wBQkEqwdoRNVHSQUJ/9sFhs1wIa55Ly4uHkdEhb0/3A5uJS92RtUG1UcJbok GlT/GlJ0lcNxHaEdosPjaoIQkr8ROHj0w9G3ocNxv/CMxzL/w+AUFBkhftHMR8tRklEqAv8Fgo6B QoDvwS2jUrPNVSQB/9IU1dQlhElS1hCUY8vSJPL/WsDq0iZRe6YlI0bQ0WHQcv/DNI0B4iE18Sqy 0ALW0hgl/7+D1uLIISoD8/Ah0Uq0zaP/S2PLQSNi6tHq1OrRyXQj1dvKo8lCKX8T2RJKMScxgf/l YM8AEeHyZ9i08pc0wvmR/zZS6JLx0590N7M25NrTOFL/jwXec+GYkSg4Vd3U5hP6Qf/lQN+SNqI5 6+C0kkndEhTg/zmBPXRr8eNw5FPj5OOBPhT35WHlYKERnJhE4FnltD/k/+bU3RTdpOH1jTM0FPJ0 TQP/JTEsJPfR06WGk0sWRraf6P9GtKDnzOBNAUYegcRFNe/3/yHRJqD3kp61SyIk9OqmRnb/pvTL ZIiRTqRE46hlT8FO0vv1oygAGPYlUkUkAanh8BP/9yKqE1JH8DRJQtGB0MFUAf8iUtr1OMM44otx edHD8FX2/1YRFOBb0f0jV3FX0PyjsJO/5UBSIEqR/nBCogaxlABjX//BA1Vc0wOC/9C9zNBa+1r0 YABzW4FZ0bNEBFO2M78Cs7N0s3O3Il6BEJDeADH/X6OFodaAuPMGkdDABfAE8v8GsmCUiyIHM2GE IKEOEAoR/2VhD4EQ0rxzaYK9YwmxZxH/xXEQpL2yCrEPkr6TCoK+Zv++tL7kv3W+k79xvWLFMccR /woBZVLCYcTlw8PGMsYSw3P/H7ESYhNmEdAShW1SbWMo5f9tAm5pFOIc026NFaZyZzDx/2wzGvt6 1HL2dMYZMxm6yNf/EgQSAhkyHEUdFBHRlmJhYf9rKx+l1yB3khfT5nHpFSly/+jRGTKchPPyI3Yj k3wzGGH/YSF84UOyJEIuQic09hQvQ/4hn6BMdSGR2YhIQiZjfbP/ovQmEUgCJlFgAITCMQMhYf/d EoWTMqUqQTFixxHjQXB0/3UkhaMq0CfCLCMuUSYRK7P/gSK50eEDTQF981Cznnbgwv+J0X/hf+GC gN5Si1K6cQcy/zESSJj5I62hsoONUzTDNmH/NsIyUjL0KrCRZzcFkauV1P+Q+DdoO2U4E5PimTOX QpLU3zn27nWS0xyj0DJjVSB6kf+TIjkEmlaUePDFk6I90jmT/IQQOLLw7DrD6vWQcili/yKCnHUy AUNETESh8lFiUjP/RQOrUkp4nxdKU0mzp5Sfsv9GtfrzpESm5PyVpaP7QqP3/ygBLdHXg4aiT5L5 WKVlTkj/AKelUqgMUAOktSPxn4BO0v+eM6qCJHCpwwLEq5NEBFJh/0TERtKh0jKEMJDnBTfHlbT/ HpBM8NMQVZBbgbSRsKGwE++wMrE3sHRgEHuyJJ+gjVL/FOAgkLXBs+Y2cFwDXOJecLx7tSRAe1Ar ICRAMSvA91kAWVG1ws4N0lpCtgK38myM1raqeiDWEfTEwN7/XrGDoV92U8FUIV/0XwSFQv+K+G0z P3DDUyCBZMM/cGiS72hEYkG8pMSzpcUQmGDApP/D1GjiGWS/lMSiwVBqobyT/2oBHzG/Uh91aiN5 0Go2a6L/G/NrdHmBHEMeQm1RxgFsn//HEB7zbVdzJ8uoyyRyE22G/8rSdcB0AIR2yrVwOijHcSn/ bnfOHiiFzmPJefBix2QfVv95sXgxeDJ41XfDGJF5wztC/9P0QzJ7UKbBTMEwcc7gLnL/LfN7lf2T Q4GDcnAE59LUYP/YE4bYT/WI0oHB3aXaVYAC/4phf1PVgjSkgEQ0RK1x5nL/3YPcI4fg3SOEwY6D fHF0Av93ch8hzlRz8XPz3RS50QIC/9kBNjGFwt0yfCLhQocjUCb/nnRQ4YdhigW5IYrTipR1kP8k QXQB3cBMZkg05nit45uk/3zijOLoQo6B6LNDAghpj8L/ldFM8Jmx6r/sJwjT7rMJdf/wx/CU8JOS 8+70RKOcBPAx/67zl3GXQ5MTmcKZePC4mKT/R/RLjK7i9RdPQ+dS5tX20v/25q0ijJPaUf6CBGKr AjMx/z/x+vQA8/82AHSkNfsThvX/n5WkUnuDBUZ7lPezq1ONMP+p4X1Eq8KHEVgi/4bYpKpS//7D /0JbN6lyqzOoggU1W+L//sH/UgUDA0GqYQRkBPMyc/8C9AX24tJZA6ajQFSL9Qf7/67yCWMJgyuQ mIAM4a/ksTJfZLMLYXoQC7EKMa1/MHP/rCCJMX8RsqIM4Q+CEFO2dPd1oLP15ZCctSEA4DJRC/Dv DPCzEbN2tjG9eiC35bXjrta20Wsx0eDeeiDeEcZ+ztRQ1tG5whNyFEW41Fq/ErG6wW5li2DUUMdE c/MQ/xeCviG8FLwRFnMXIr3xvfH/cNR4kx5y0gEa83M3F+XAAf4pHLbAA3UUG0N5wUpBJkH/HpPS AhiR0hR3fSDUINV5Nf950x/LxvQg9SWJyWrPxMxi/ykazuYmmcj7x7QhVMnKgef/0IIi433DyYUq vLuiLJJsgP+XwLEgdTQsopaB03LPBC2E/y5BQlNhMi5AZnLdokKSiML/pLAwQabSQETW49BGQgEu If8A8S+mnbLVov/jobH14rTg/2Elh9HkIo5HN0KH8zSk4fT/4BM1Ij3RiZHcUTazEzHKRP84UsdV zHIlZSY0CwDy8OWT/6gBE9LNlDOWoyHa1J4U2MP/MuKQtTeEFHM54EXR3iE+I/+4wNxRP+NhZD/V YdNhwedS/zETrfIthJxWQtNBE+uzCOP/ShJHgAkz9OhFw09E6vautP/tUdLg8uG74AmBTWjuxU2y /0XgQ/JC4brAr0Ht4e5y8SV/S8lLu+0TY+Gh902TTtFz/6Nz6cRPNgfjQrLlgOhV9wP//3BRoVC4 MmFYouLDXQCRAP81oVLjYOJWQ/+dXDQvmVbm/+BRX3ivxPuT+jcBtAThr+P/swT/BloXlwNaOvmk AkVcsv8AtVqVA9L+o2BD+CJfMF9F/wImuCU88l/CVYVhNFDjnMn/Q6RIhG6QHwAV4N2AZGFkAP9k gM7gZSG+kgsHCzEJ4QyB/wNRZlQFQGbRv7EN8hAREBPvagRpoA+Q4jCEaMEO8VMA/zCQDqDR4Guz w5AQ02fAEFL/D6JrMWqjEhFr6MRBa8ETRf8TIxQzEzLhwWyxErFuZMjCvxLACnDy8SdCFeFkULVk UP9x4hZHcKlxIxcQciR5EnVm/3BBGmZycdLg0kOF1B3BFhH/HZTSNB7jzoPPY3gndqZ3tf8eIXZy hMYrRCDKIMPwUCAX/yEGfHp98iUuJQ+BBiY9epr/JmUpd31DKZkqotB0hRMsgffOhSukhaOUTaB2 BDkV76f/QfH/cJXlicIz+KohPfM6I/8/5y5zbfAnMirSk1KHMarS/5YSPdJS44ukPdGKgTfUmbb/ NDKOQZWRM1Q0QpWiNPCt0f9dAZY3usOr4pWQlZEwhZJC/ziCIzQgwnmBIBSkEYT0ezD/i3KNMhQg EsEwkOOS5kQ0sf/3wa3StKU9clKAPaY0MAvw/5lRP4E/gTRxNiIL8DOE873/6WRh0kEVSfIIM51k OCNBQ/+dRpxBCLVjsUmjCORGlEPz/0YvvVOkUkSRY7FNAgnAPvD/hoFIcvyyopX5QqQBhsJJVf/+ uqLVSLVIMaKQvYFHY//X/58bnaOpNFBSCAGNUIthB8L/UMYEJC3QUKNdADSQslK4M/+ugTXRQCRR MWD0VkRW17Bx/1QzseS2mbDmVJetc2DhtpT/VOJYgj006wWzOrPFPYEOw/+05bLhtheux7nTW3dZ Aqvy/17CXqQKaVxTXiJgSFVEYUb/LyP3tUNmSVNHYRdWZAG+wt9lkWUxv2RlM3CQc8owv9Lvh6Bd kToQQQNripDKMGhx32exaBDBoWelaxLGZfKqMP9owb/xdWDEMmxRahEd5MYk+8RBahDGbFNrtMQB xkHFgN/DkGxRbgSPAccTY2yx8vT/xuNs0scSyQNvUSYxfWHJ4f9w1MpBcBZwAnFhzXBwlSTX/83R eRByoXbydVTOAXMRzOH/dJF2qHKSd7TRInakeOXReP8qMypT3oEr9SpTg8h6SXrE/4D0hmWENIB0 2GTvQtkIMBP/LrV/1Nf07JaAu3ptfNfsl/8xN3zTdpPQgzfK36TPUoZM/2jQ8lFBVJKCghFCJOJz QDL/lZSYApWiQnHile+T5cKHsf/khNATdRJkoM/Q7oFQEkJC/49isZPmA+vCioEjgpwC83P/Qlby 8fO6liKt0urSVURZwv+yg7Gy6OPvYuxH7Zj8EdP1/0ey70DkUe7V52OVxOik8FX/DyRgkoyysiCW QpfTkZGdkf/zEkMC6LHzA5mzO6TzqkJk//VVirH3eRaC+kD2RapjvFf//fKoiBakFtL6O6DTAAL8 gf/6QZ7EVcf7NGOxipBkkJ6g/6Qz/fL+ZqDyoNRYmlj1dSD/pGFjsf1Gn0KjcaizncMDJP+dUQUD YgGVoOWRYfKq8arD/03UBCmrkpTBuDULsLGjYOX/DVG7AmGUs2NiRLOKtidj9f9iV6/UCOSyHWSV DURiNQga/5aiESe3VBEittEQFreEEGH/rrTxsIuQrCMSc/Eytdu6Bv9m1K9FFSwagxaC+5ZXkQDy //xRvzBXYb5ivzQhgL6VvnS970ClE5Dp4Bo1FoFzxKH/waIb48U0GxLEg7OgiYDC0/1D0GvEoRvW G/V1dB8BGxPfxPF48sUzeeUggM7Iwcgx/5Wgx5LIwSFxQ9DG0JlgeuL/e1a/MCNxyIB9A4GB33HJ 4P/LUspBykTLMsriJeTLgyTi/8wTJXHPYybhKATNFSgRhkL/KIInRc/EJ1XSddBEz+XUE//P44TD KoPeVC6X2yjS9jWB/4Vl1WwvVdX27VExBC7H2dn/2EPZtDOC0wnbB5ME13Ujcf8059MB7jODZc9y z1He4pID/99xjpMtAtcB7GOoQTrhlCL/qmGqMUkxOsMWgT3lPBKYE/88o14hq9CZw0PQOoReIeRC /6ph4JE3wzk0g0HT8jpklbb/6nXhgSNR24flcekFllZJ9P+qMDwxQ+LmlLri8DKyY+bV/+LC12TZ 0TDTkAI3wuASR6L/3oKBUSCAlGE8FEkx72GV5n/phhMTDNTxcUSDEIBLtDHfRcFJ4knz5HGXgEqp kU41/wWy4xNOGE9IxtFQEhY7XDT/UVf1c/pB/gLdcFgy/YNQtf8WdlXEAcT8Ie1R+PYCFbAn/6z0 9fH18f4BWARac1KxAej/+qX4QlpiAcRVY1SUAkNcCP9dAbZEXfNfkAPRA9F0grY1/wWjBBU/8wWR UbHhkQyCD5P/C7BjIGD05oIHlWDmB8ENY/8H42OzbTZpk21DZbYKImAT/xGjCbIMY0rzn0Fgo2G0 Z1n/YjKfMg/TbVMO8sM3EO4QA/1jMTGmQHaxaxFpMGnkw7T/E9JjMhIT8NNpEQ11YYNDdP9CtQPC /gFXEVdxysL8AVch/mtyMXI0zAgYQyQwy8DLUb8dIURSDLAHMXSBX5CEeTHfeBQb0RsRdgZ48bUE wRzC+/pA85B7GxHdcHg1G0HRgf/Rg3UwG7AZYnOheIR5pnqB/x8BQVO3kUkhIrMiQSJAfAH/IjMh kppA2cEjQSNFNqGAIvmAMZStJrEkoSUzcmAkI/8msYHXKhU/JCgQkZSB1NmU/SYhIY8x7iQskysF hOIpFP8rh4XjKlOEpYkFhwKG4n1g/zIkNDcteojEiGWKtjQPiIX/Mcc2GObE5F80xezVNRiQ0f+O kpLzhQSC9JIikjOCAzky/5IhgdIpMTHRXbHKQf2xNcP/q6nysSHB9tQEUUOCSNH1BP9wBAPQosBP EqAgRqFQAj2D//aUGQCY5ifAgnOZQvijOjH/lMFOQZ+hRROfwpuBR7EwQv/tsz3EnQRGAUzFQ9G6 5KRh/wuRQ9FExJ+DQPKdEUajMNL/L5MsJOCEoSH74owymfJI1P9GAvyxanGe8T1zQ/UPI8Ok/0ty bBANYqZHTBOmMZTApiL/AMKe8UN4AdY841GjqVI6lP87U1IkBKdQdFB4sga1IQcS/1fRquk7QVQz VmVw4gh1s/L/CGQIYlv0tZMWhVbhs+a1hf9VkVQUCZlS4q/2CkhcJFzm/7bYdIG3oRCFXPMagiLw GfH/X1hfwrtRugNgIsiSu2S8J/9hZmDzYaO60WXkY3O+U2mz/2ASvnfI9J9RSxJl0seSGBT/ZuTB RsKEutFLUGFWYyMaQ/9rE8TYHctt8RpDxdKe8FBA/1/xulNs22hlxmJuU2yhbtS/YbNL4m/E/hJJ MZpAhMtR35yAJLGJQDsBX8JKo3A40J/LwDJgcvEmMsuyY5xD0H9ZoNChqiBhkWxDzkTVkXv/1FLP UdOg0ATQBtBS0PHQwv/0YHwQVzHYwNJSdQJ1EivEf3KwV+DYwHdheOBHkHpE1vt5xtOBxnt0exF8 My9ifAH/QwF7odaVesJ9ElfgiUGN8v85EdinfkN4YH612MLZkjkg/z8RkiHahD8RgIGAgYJikdL/ V2DbJDjzPxLeV4Tm7IWEJ//fFt81hLhH0oa0iVSHSzwZ/4j3NvVHMo3LhlSJuNdmPM3/PwqJJ4d2 6mVHgoQi61brc/9VQNs022frVUUyoiNTUnJw/1ERrMEPw19AnRJRMqnxcGT/mjLv8wGzt2CVYkjo /WGxc//vFfEBmITXsjXhV1FXUJjn/zRSi0OX9RbCbDD1YI9QetD/elCT4N2gjVFSoUqD92P6If+V dZxxlzGdw/4SAkT+VptB/jmccY9RVZExsvs0JKHrcu+hdPwCoYGcIJT8opYj/TP//VGWktWhppH+ WP8ivlOlUP/GUG8xwDABNFpCI/H4clo0/wG6AeentcnkuWcEzwRWBZb/EANw8QeCrWELJKrGB4Gx c/8GsrKRcMQLFAyVY3ULO6sW/2IyDGWwCGFHZBqTwrWZten/uBUQ1BDSt3TGUBDSuSITYP+XAafj E9LOUrhzEsFtUiBR/xqCyHG6ocFUnwIcUrvTFfT9mtBCcIEct770x5THNRWj/7xRHFGl4JqAGZIa 8xWhvwP/INK+Qxs2vBVvZByzvKR3Bf9xqr5kwxR0o8eBnzH5YPRg/57w1QAkYM3zxsH/BcjmyNL/ wKLIZRoDFOQW8QKDqNGXkf+p8ajgrOCz8c3RecJzos3x/3oRL7DYkCYizYNrgbLwKpJ/wFGaMCfC IjLIsfBhBoGM/ehAvdP2LeLP0s7yMyDMUO+fQCqzVGCcgJSC4Su40WL/LMEykCmB1AYtnIck1KGp 4f8OkdYgVBHUwpwx1cHVkS81f9ckR1Cx8a8hjfK04MvQjM+MAdki2EDYwJy1MtDPAP/Ys9mQTWDY IJHyRsA0Itmi/+ryNOTa6fNg24ON8/Ng4AX/3mXr8dfh3YQ4dJlCOaeTrP83JkIuO60/O5W/6AiV j0Mk/0Gv+6HqCd3EQ/PrNNrkNde/NFPa0vN0Q+M0cpHie9hg//OCr4DtVasySPIlYX5AauH/9GBK YUtSSzLxEU8CfcOhg/+iNPoyYiHpkX5xUIFQ5/KS/9XA5XC04DKQoMBNRwmgTcL/2xLz4Gij76JJ 4U+CozLVwP9UolAx7TG1UfKi8rFLwaMj/1QhB3FSE1bjAwMCNCNiUiH/q8PjEtEwRSEnINGwpxNN Yf+Q5fYRVMFOk83gXxD3Yv1D//cEUrUi8lOTeENYsxshKuD/yMEBwvAxWxIBIVpkAbMB1f9sZAJ4 E2IC9gNCETLuNgg0/181XxYR80k1ZNINIggkB8T/ZDll0WKjChRlCPRgZcIKhv8QEwSVDpcNoQ41 C0cM9Qpj/+2iJ0EQAg/kEZO/JxDDEdP/awUQtfpgE4QUE3tVb5MVVP8BcBNhGWZ8hHuTFhNv2f5R /3C0IuIhpHdVe4YcYxU0I1D/baFPcG5TGeWB0hqXFMKtdP8VxieydoTLqBok0bQdgtJX/x9B0lJ7 kh/DEpLxESfSGpL/eMF0Fnc2FFMigyFX0EMjU/9sNSdxgRQI0HoR96D8wNSy+3wAJGBS3xAv4AmA J3Iqsv95sieigVEVUU9wKASCZDKg/4VR3OMucYgShkEsdYUwKsP//2H3oIAhK2GFYizCXyBNYP5j JsDdI91HiCEpcYfHLTL/LpIGgYogiSOKwwlRLwKJc/+JkjDE5PTpITQgUACL9jJC/4yyjSDm44yi M6CNwpIikCT/NcKP1Z9G6LrqZTeTONadov+SQ5OI67SfM5LDOIU4kjRU//smQlhAXZS1Ovc/qj1m nPb/8ytBG+tm64Q3LY/UnkanYP9GwE0SNeeeJvYyViGvk54V/02DqnGhc7riwnKrcqIivlD/TKNM waVxpRFJklKhoZD9M/+lYSSRYPFOZP50S/VRcEhh/0ywVIJFMSswMjA1UEaCj1P/qDSPQjkQojJS w6QTufKwE/9NwUQwTnP+RX5xlhGloq5Q/zCgALEAUgPyS+FS0wdT/hO6Y0fgnICwr0I645SnEf+n EU4H/DIKJFay2RCI8Yjw/1FiBpJR4XpgFaNZQ1iiWXH/WLGzocwyWhG0E1skWdS0wf+1VFzUtbJs c7anXTTE4xGD/7gGXllJRV64TDJlOhUaaDL/vTNL4WZSpcO/BbjmaVlIE/9eVEfS/HLAJmSVFOpp hSix/0uRwANphcQkuCZqc8TzElX/xDcoYW4hzrN/g1kxeXPHAv1sshiBodISfEJ7YnV5yTX/VuGy Ms+0fQIk5CV5dbNs0/9SgmyiIFF5E3P3blN60llx/7XCJEcjtnKkdpTRgtFi0gT/KBYr89GDeYEt VHrQSgFtov+zsNqQVtDS8nFV0TZ8Am5k/3ySeAV40deC27IQQ2Aia0GzfpGKcJxjkHDaEHvUov91 EXDy2sVxc9skcKBHUIjA/1ZgPiDOdF2R3IFRoAkQ4ab/g9HeMeGRN6RRoDXhWKBW0P/acYARhVPm kIaAR1CMAN9h/4a24iOH54eziGPiUYQB5JP/4wGJ8OLB5EOJdF8QfiCJ4f/koeOAPsOLEVYxQcKC wI2x/66wjFGL8uaT5oTmg4xCjaN/j3TsQY96jZCQIUORj8Up/5Rq7dRFCfEpTcHt5/WY7Kf/lFWL AfHEmFqXxJxz8bGcZv9K5ZFV8QdIB0y1kXVOuvbD/+rkksXog4/yApKOA/fkRDPfj8GekkPSkHKP YhiqgEWD7+6gjjSP46qApQXBumQFwf//A4tBlfAE56VzqPEK0aGh/wWSi2LuopYD8CEKArB0AIH/ pQKiE5YxwBAJEvh0AUGvUf/ppK9RrsGhoWrgouH90grQ/w+hufI/UapB7rFoofAyWUL/VrIFlQWj sHKhsaGDHKL9NP+WQ5IR7rFbEZwyqoBbEa9U//nEoUGwdAYhoXE/IVpVAAL/MlGtYrNxMUMxMrND szIpEf8OxQ2BaENoBWgSDlG1RBBl/7Z5tvMRpxHT2DE2U6ZzbPn/ugUTWL8HbfRt98DlvHT7Q/+/ A6ORueESw77mb3VdIRNx/xyjwOca6rqww3O4I7/EGrL/whR+8R8bxPMfo8XxeErGIv8QQs5VKMEz on9TIRLL1C1T/zixIpIn4tA0z9nJxMq0zAb/JTbJpTHFD7OtAiAyzZYs9P98dCe0JyPGISZTKvrT wiyC/4SJLOQtpCzihRWEZyyhsOH/AAHYEXxS1tN7ks4D0hXWRv8o4S8TJFIyEnjSMpD9EMAQ/xPg 7qCoEOOAW8A5MZ9BVYC/eyLSQ3uE3pMwEcpxY95h/zzAjOHmADWg1KTUERNxNrH/4oE31OBB3gHf 4d4x3jFmAP8zccaC2DHfIVWA4DHmADnA/99R4KM3YpREO5U3U+Chk+T/O8Q8tePjYSCuUOTR5KM9 1H/joQYh43LlkL1A8+JCUIz/P+HnkOZjQFEIcZqz55DnVf9AQ1Gh5+JDEq7R9VL3Qp6l/0MjAdXp Je21SOftleyF69P/SJpCwvdEoPSi1O848kvw1P/ytetE8+Wgdva18Yfxs/XH/+xs9zX3Q+mzAmRB 80HjQyL/q9RCcumgQ/esk+kj7EMEYu/usvYQApIJkpRXgwtRGKL//nJJhUlhpLJfMWVmGcAGAv9M 8gRBXAGw8u+zXtFWNPyR/1+UYaFeEvHACVACgQKCNaD/lACbQVwTApFcAQXBc3GLUP/9oxKTcfEE oVzBWNKxYbIj/7IUXzEA4kNR9GHwE2DhsDf/YsLw0rUxCIBiQ0yiVqBcwf8IYQGiQ7EEsARB/nRk 0l9G//0h//IRQDGhZoMlBWaG1tD/DYJ88cxRwfLBomgQ3DBnwf8N8mXxPjEQeWnUw0IQqQPS/2yE eXUexAAFBnETkxL2/AL/dxMS5h8JF9Qa03OkF8gUQ/8dBBi2HhTUMFghsWEaQBzW/xsZF6R1+RT7 z2gyUnc1xmn/eXskMcADgcF8woPZjkOJh/8nqX1xIxYqwL/iKfZ/DidR/yZqD+cnUyCCgecidC7S DsH/XfGAQSIkLHSGGC+G3sQtaP80YzigIhDfmCyUIYIuIzQT/4lUiVUvBTA8LkFd4f2x/GH/EUA/ QDWg5gIJUIzxPMChsP8Z4IgRNEKJRNzjLqEgMZMQ/nMzIYzDCIA5wDlRC3CP5n9d8phR7qA5wJHR 6xo3o7XvjDGOc8KBORGlSeA6YDlg/5DklBM3ApWUPCGQ4jlgNuH/SkCU+z5hPmEykF4wMvDxQf89 pJiSPPDxcz61mSHzI0zy/5sAQhKaEUBEm/GbYZqiQRb/QHOcFVG0rfJCylwTnpT4lv9Iq5/nT0MI 4rDyqMqfCUdp/6PFSsKkGUzYpxOiV6Ckpwf/pthLBk9FpWf4RkQ0qpe2kv+14FHkrKGtY1IydZD4 ta31/1jinQJCsUMSTdBZMVkxXAL/TgJkAMihr4NZk0oiYyOuov9ZYlaiZSILtD9SrmO8kmPDf2KS F0EZ4KQCC2OyQlnVWs8MQ67RW8Cu8GOc74Cu8P8IhL4UciPNkh4hVpOkglik/1iiqbG6Y2GhFoCn glsRTfT/sMRbGlEhYjG10gUzW0FHAd9bc0JxvaFjdOrRjHH0P4L/pBFVgF/wdyFl4YiQekEw8f8q wNtSMSNm5MGkjcBnw2hE/zAAaPODsMNji1AfwSbjJwP/2sYmVmsVeZLGJdL0XfMgiP8gxsdD0GRs 0sXEIRtyBtAW/3LTDvJ1E8yaMkJrgr9jdRb/dNY2gSLEbgJ4AhFDKTvG0//SZXNieUq/w4uTMeOA M9hE/zixgsLBINeDyDCLQoQyelH/4+R7Q8LAkEF+thpww2Ees//XYzJ2faTd0TJlg7Ix89rn/9sR wrB8g4HkiKPUsdzxiPH/e9PdoYTGhOrgOnvkfMB6Uf/gg96XhPiN1X/Tg1Li2Byh/3vBMsV8YYpk NvLlQsihzhD/zdCmAIxxj0Bl0LtgYVGIhV+JIzazgnJ+sOKhUqRwa/+qEOjR5pJS4JO06THpxuDw /3gCc8Hq1OsEkZHrMpPhmTDf7FCi4I/zfPGPwHOaMEZA/0WhQ2KT8kYhkTFDU5Py74C773DuptaU FO/BVqDG8gT/SuTpwJeS8dTyA5iG82MTwf/+xPPhm5KaI/Xz9YX1ZJsD//WymzJb4ZvRqtP4mQP1 A3jf+Zqg5J6ooqWoISGkcfn2/wAXoBYUQaYC/vX96aN1pob/F1GgEfel+Hj8GqbFoZSoVv+ocwQT 9rGsRK7hmeBQofWwf1CRq2FRIbyhrROr5AZxGP9AQZMwB/WtQlHGrmMQkRby//aQDQSzkQ2TdpDN saQTvYP/rPGvMqgivNKzsSZBDzILYP+8gggkngIIMruRYqL907lS1woBkqDDcVLoUEKkkbVB/49A XuG2s70CvXK6UeygchH+Ur9kE5IUMwyluaa0VKST/xJmsrG8owykqvJkoxABkzD/lDCbcV5xvEO8 M16BD/C2EP+8Ma9EuBOZQWWiv2PHAR2i/8CywMCLQ31UwZJ1FMDAfqH/GzDg8MKRwvTEoh1h8PK/ 4f8xsYETMdMxw4gwg0J4Ah9l/x+mIgd6jSsIt8LQlSklxXb/IObJF/DRtNLINMp0gCLLd/8iFotQ P2HOtM6yfnXRT8dC/8jV0wTGFMYXxkUtEdqT02b/hmIt9S8jMAHbo8BiL3Eso/8etN2j3BGP8TbT PVN0MYfp/8RCdnTXddnGMjWN9R7T0/T/NXTb0uDzO9Lb5jdT4WSRqf8bQJJzOhKS0xEgk3gJcJQ1 /5Jk6FDi0jsF3ALi0TRl3yTfNBc1MNfx21PkdynEUM3A/7OgQDHpwLhgE0GB4eKxlTP/QeE74+RA 3IPqIh3gQGAKIO+0MOciESA7wErxILUwRhD7QzQdkITp9NmAgxHNwRcQ/0WFRQLpYkNysvDIoOyU RCL/zdBHIkfERhARMK9gzqO0MH+sYO0wn3Xute6USkWzoL3/8pLyoC2wa3EPMKTDHfCiYf8OcfLi 8pe0MBJhD2GzImoB//RBThJP009mTyb1QU/V7XD/EBD1MvSD+Gj3U/jyDXH3U/8CVAB1UtZctFXH rScM1P/q/1xW/W/+ewGGA+hdk//4tPr/rXT6M1zzZwS0FfbDBJJe0/9QUl5y6bAGUGBB9xAG8Qhy /w3wu5G6YgW5ZvMIYs4gEiL//9NiwrlxBCJVYAlgQHFAcf9okxJCQrEFNP/zbKPN8c6x/xHSDHRW sbzir6RVQWOCweL/C7EZMpxR0sMKBGmncSQEwv0I8oQmURhxx3Lx4GuBEwL/DIP7Mm4BUtIT4g5T bVITMv9c8xfkFyS25HDxEAFwB2nT/8qycGHtMO/gcEAKwQoBJcP+WkBw+mC/wRlxc6HaoXlD/3Qh MZR2weoAGnJ1FBtEm8T/McJAYHbEd1F5MXQhdCHNlP+MVBq1QWHZUx3lIDcjzYNov3wlgpt+4yRx K/N6RFprIv96ZoC510N/p9nUIYPqUZxB/yfW1rohOiuyg+QgVoZDLAz/hlQstIZVLVcfFB7jmyJB xP+XdoejlsGKBTB0PQE8FjGC/zE3jRTllIfXjgUzIzPU5lL/luIwkY+llbSWQjmzOOeTQ/81cZYx kzSUsZSwCmBo4Jxg/z+AZAALoGoA7aFVYGCRCHD/ofFqAG1g7cCgQZShGHA3xf/vxDpydEORE4dE ecEuQCTxvxFwHfAuky6yPQGYMFpDwP9tsBlBPLOd9OKVngHqgS5A/jlDwOKTPQEacTzBOiKcpP8d 8AjQy4BtcKLxBaBAcPSU/xmTRKBqAEMxn3NHoZ/BBaD/P4Av4vTSQaZ50ELREeDtwP8EMJ4AaTDs kzvAEdH40vlC/UlEhEpxSSGkckqBRdGkhP+ldEvUpUFL00yDpqCmAUyRv6ckE8IPU8qSqpACEqUQ IP8QEU9DThWqkE8FXtECsgKS/1CFTrBhMa+SWiNRqqzDsNb/YgO1ZVroVhWwK1QoVqexaP+yZVhB D1NcJlRjWfpZ9rem/7QHDslsg14Et9IFUV53ccH/FkHLwbkwb3Ch0AWCVDKskf9kALwRWOFUYRfR uXK5UcZ0/ggicWvyEQVeBAVxxDdXof/Gok0xvqLEhV4yuBGuUGXi/3tRZBDGEWdhGqJi826CZ3H/ waPu8T9BaIR+0vIBZBFNwf9v4aphywISsrzlrlG/wy2w/4MR8kAuQMYSHtRsVLb0XAH/WEZyEcgj sxJjocFkUmRwYX/KBMoAafId0iPhTxBDEMb9oTDOcbG78cJRxVEBgrGw/8NBH4F28c/QPwF30nZk 02T/d+Q1UnUi9pE9UoyEMcLTcP+lEXbxdIOLU3lAh6MydYiS/4ri0vLRgnaiKoNrYn1DemT/fEV6 2X6FfLfctX20f5Z+lf+EEoGwMSbaGN4V21M3oGkC/0vR3AnV99s1hibTgN5ShMT/heZ9ZIbyh2d5 heBShvN3sv+HUuIklsKKc0HSi5GWdZaD/0CR5BLrEpBk5hLmJORyi0P/LBcsFecmeQKMY45mQQTm Ef/pc+MB6fbkckSCkzmUoWNwf4ICchC6QnGwuwBgYKEwMdVJEClJEDH9cCn9cEdw7s5HoUgCRyMp n4C5sUYh/3yRnKLrFouRoGHoxJxxLCD/1HKEQUuSHGH1YumhmJFMwf914HPS9mFDdY+E8rOZANNw /5wRnBF5QPVwngOI8fMRmUL/99HaIITRmUGhIaEhphCqEP+Z4J321HGeofjSoYOrAJ3R/5OBlTGe AuKyitDpovYRfPP/pQEAsWEgFdFjcJzRJfD3Uf/KsP1ypEUl8ATQV6P+U1hC/x+BAMEfgaS0AAH/ Qf8XADL/Z9Fn0QExbdIhsgHkAqECQ/+kQAMVA+VdlakVBNIEth6G/7gTE4KrV7WkBzQjU6w0tTf/ r2UOJrTXZFmtQgzEDAeyZv9lYq0kIHQGl1+kFucFRBF4/2lFaPZpFhOBqcJx8bzxuEP/BOESAUbg FVK6ornyJsC6IP+9oGaw+zGigbtDbDENgboR/7oREUQX0yDABYO+kRmBF3D/HoIFcb2hGDNw0hdC GNIZc/+scSXwRcApAMAhZqDL4cnR/x4BGqTIs3PSHLKBsMBBdiP/S+HbwseSmeBxcxfCvsRx1P/H MRnlFgHzgHSixNK6YRiB/7ajeoLH4sfBWsKZ4cawx5H/G/S3FA2BF3HK9CTEulAksP8DocOwy4El UsuQzKHBwnSB/3FRvVEcwy4hzfKMk01CjDL/l7PNQYJi4WEpMSmVP/Plsv/N8ipD0eQn84yk6CTS M+Kj/5ixjOSBNOHU05YxpdinLoz/MmcueNUUM56NFYz2GfLcuP/hESvhzTE4Fd023zTC5Din/9Wj ODQ6qJLY4bOH9o8C56D/OtaVJ+GC55M8oeKjPzOUEv+ccejD5DNKgZai5VLPIOQC/+XE8HFP4Zn0 QyLlopoTQDX/5qPldSnz6QKWtem0REU+sXdNUetxvaAARgFuIcoAKWuhwEdAtUd1jEfwoJAxjJTW oLChAJTeIaDxZ6FQoUChMdYhoSGgkCH9SEMhRvFTUSVQxSHrwvaB/ysh9WHr0uTC56HxwUvE4bD/ RkAiIPfD8nGmhPJ08nXyUv/S486QwDAdUduxMrTztUzhfinxwc0QDaDL4CnQTTFC/c6QY/shUcCq YRzQ4bD0lP87Q0vh9yL+4FYBq+FUJeUx/0Rz6XbegPNAIMDKAPyjuaD3IiDsgSwgY7GwyiD9c1hR //kR+RFJYPkE+QL5Ef2RwED/WlZZhVjSWUXIAVpyWxMNAH8BVCIhy4IlkSWQthG2dGP/y5C3AQKi t3ZeIl10AxIEp/++42i5BpdktWHEI1ZopApW/7z1EOUGdQXBfWFh1AtrC6T/C9JnBwrGBpdpZ2kz BTNsQ/8XpMQtw8IFImwlbGIlUGyV/R5AQgTyWBAX4m4DVfB1wt8d0EaBFNMZchtgnHIxfFH/ycJw wmyCbzO5knCxeDR4Yv/5sXwwyZIHM2q0GMEHtH/h/x+xNUF0cg3wGtQXchliX5D/ddJuYU9AydJl 8BwB1zAcgf9JURyxGDF6oxZ1cXJ94B3R/xdwr9DRIv/B85D+wBqkezT/gHF8gWWie6PQsQEkfFQc gd8iUSFiBbEjs9ejvatAHlH+rdgxJATYMX6RIiHQIXyB/9Mhd4B6YXxxpeFJcYex4fH/55Th84hh j4Iq4kXwKNIpQ/8pxUIBK7OH4if0KjXfA971/4GgpDHikiyz34eEBCshOZX/iGMxtzSJNiHjY+Sk NJfjiP8wg42mMziNo+aj6EjxwfGS/ycRLveSIjqmi/I6o+tj8cL/6kbsRZUoPXXbwztiN1ftav+V 0T1TmDE8sfpS8uGZMjo0/zwVPmNEg00RPhJBgz82mzb/nQOuYvrR9JScFj809aaYkf+ugkzhrmGZ 8kTi9TFOsHeBD6zxR1OghqHB3jGc50wpnPpE+tal7/tw5zYx+7H6YDn7gPww50KB/HNare9jte9H IP73DSGV0fhzn5DOsWagU9J/PuGF8DvgHEN6EP+UiGBr/03TptRMoqfTToEsILRgq5D/HWA1sB+B 6RIvskuyAjEnYd1OYyFLkapBNbCMl7OIQP8csCwgpGFKYU1mVNQysUYx/2wwj9FT06TA8uGIYKiR U3D2a4diVKVSNbCvcXTwRyD/sHE+sKRgcjCqcbBxWFKxcv8XMLcwCwELZLKBVtFW0QsB/wAhtGBZ YrOhWgJZI7MWszH/1eFbESIQ1gQO0WUgtzAkIP23Ea23Iv0gtmMQsBBCtuX+zrdtXoTDxbmMvWe8 2mDG/7zzvsK9KGMzurbBw2S3yEP/wFYhoiKjZwRhZME1vSJ4l//DNGwzHJbFiWwEbAIe8m0S/2uk bYFuoW2Ba6DHQ8dgxvH/x1G5QW6jyGFt0mM0udRGUv9moKOB0CEmQFAwy1Nx1Mrn/2nx2AHLoWBh cURnIX7xfRP/zsDFs3XCZqCPcZCRjiG1sf931nNydWRvw3YRzIHaktFy/XzCY5CRdfGwILLQJqFz A//YwwxAfeHNYf2RecIr9RfC/2GRyCHagnvigKEvYnzxfDL/bmB2YVXwgKFhsmfCfZB+ob/Xs9jB fpGvwNjjtxGUsYH/bjGAAr+h0yF+kXOC1UPOEv9CQ4Fl4CGPgUtxVeDrIohi/zsxh4KHkYZy8TFC E0I03pT/hJHex4IliGE3IT9gp9Td0/+E5E0y4fTt99vziWiIgpPU/+eQBlNLguOniUmLFNOg50H/ jmgCtUHDPcbps3cSkBbrVf+S5IIyk4JFVOkUlaeVGJXk/+4F7YWT9Je1lkSXyPKThrT/OxJJmPJC mFKdEPKBmIGYI/9ME/PprkT3wQBipwYBgffF/5jx9HWZ9eC0VBCeEkzjVAHzjiFp8LU5oMH53fuw +uHt+9Dv+9JUkzn9AFSBVUGFVUFCVeNKtfdS/TAGY/1gVsF7xveEzn7/bDHuUamDn2DAoLjw3v+Y gAcyldGlY3YQWXGmMKXB7wAjp8OmhZ3hMahhq5Ha0f8ClZHzdxSmIbRhnqKpwZzw+wUxBHE5paCW kKPSmHH4dP+Yca5jp5LwAp9ABXDZ0TCh/ygBCFAkAcmheACvIQRxqVJ/rAQ2UaMA/oAMQLKQryCU 37ARsBFjsa9RC2JauiALQu9kkYBhffCwsXPHEBEAq6D/EtBmALLntDMNAg0TstJ8gP8N8Q8RDuLV 8X+x1fHBUdjC/7cTtkH88BFTarpqVLcTZOD/2UAs0LfDf6C5Ux9FvIG8hP+56bplFrS+wRgFvMhx P75y/3KIJwO/RBlzwRJ0Z3KEvWj/wxIc9MVkHVge5RODuUES4P+5YX3CE3XFsrmRynEggm0R/xLg f6C48FMAx0R5MXuiIAT3upO8kinxCNFSszEjgAaS/mMaAXkUx4HLpL0E2AHYAf8btyITykG6snix 2AEnta8g/yhDs8C1kyk1y4HF4RWRyCL/v5MwkSrF/1HoEtqizoG8gL/S8dLxMdKGcyzx0ACchXT/ LAPSIiZh1oPWos/0KrO0gf8woYkiGmIusspAgTEsc9gx/9g0MaGLpDIxLbEj8KiAheL/uiC7wmlA JYCHUb+hL5E00//fQeJzlGG0YAJiryDa0dyx/9xR3OHhZfMA31Ga4weRqCH/mPCRJZxSOAE1wY9l OlKwMf/gl1sy25HfU/AmSYTx9Dt1/49UjvLbMdsD4eRFEuT+5rb/5tPlSD3U5GPu0u61PeP/Mf9A ckJm7uPu1up37FrviUcL//ASOmFEhEfj8cVJZzwS9LH/OkFR4QiWlkTwUvFSTFFMsv9MkfJipkRQ xlDmUEQ6sVpj/13RT6RPo1AmUENRJfeSUgH3+AGnIgVhEH1x+XH6Nfwi21V0VXP3VaOuckJWcFYA L68wryJWUlZg71aQ91pdVqNrVwNXIfmg/2IQvU9F4fDDOkH5ENb/yXDG/wVhRJHtoCrQyWDnMysC ACH3qOIAld1xMQgAQPHjmEQD/0MzQjD/Mf8xW6FKkQXy4RL/R1IDgqvDuKK4gk5DBdjiofvnsS+B jNPguwC68jChyeH/vSDXoARBYmNK4kcxKsDaMP8KsL1RszFkEavwCRJlAmTl/ymAZaEMAQwACqN8 AGZjzfD/ZqVdUQ3RNlFn1g3yZraJ4e9pEmmCc7PXopzS4GxhECP/EoFsIWyCxRYSVGyBEfjTAf8S kR3TyoEcRW4TFAcX9nBr/yYBcKpwrHMyFtom9HQEzdj/dHUWC8g3HQjH4Xbjd5h48f94wm1jHgYg kdN0eIJ6oxLi/4bQIPEg8B9hUvAgEHrBH3P/HeMgECnxI5L/QSrzQHEj8f+IoYhCx7Rtg8wkMgKG 0ICS/xjwMXEUY4DiHcR/EjDwjqL/QFI2oAHgKrGNsYgUHBJ6Ef8jEYryLpIzUsEhGhHewisy/99B iuG9MCzheQGDgn+jjFH/bTAlgH3xhLErIG7hiDR88f8rMisRWcKFIH3yKsPXBDODf94SiBEskzKC iBGLpIvShP8jIOKzMyKFUesBscAPUmih/3TQXMGFEUTxNfOPVb0Bj8H/aAE18o/TnFM745VAlHE3 o/9K4vDyN4NN8jmV84OPdJRT/1/FqbE3gjlIuBSiU0jTo1v/SWYDkfghlUPw5aAjQ6RC5f+a5kRh P7OdAvUyoCSPRUTi/0XhmVSeD0RSRSiec0VVBLP/RJI+Q6B1PkOPNkZmS8RIAv+WRbHwO1PyQgXl qvJLnadx/6aETRamckyzXwM7IFBBApP/TxRd4bgBUARRUwRSUAe59L9P0qvzq/BX0ENRZUAhDAD/ U5JUwVVZrlZVnFVQVpFWklVWou9mAPdmAO9XIsbe71MQsUBXMG7QxlvRV+TxPgGc1vcMcYrhWOCZ Qf+zslwwXOEvsLbSC9FPBF3B/+yClUD1gpy3XDY/EbaxtWL/D0H+xAQ2uPO4417REwJesf/ycl/l PpJB0uRxvFC68hUD9xWCu8KFUJSxswVzkIEgQf9sUGUBXYBEgIIQYIFkcmRR/zJgvVK/pL/Q5GAc wMADwIH/GfRm5Ga0wXRm5RrEaNOFUPcuwjRxKcCMM+HgYocAgVL/xXzGJGyHxcTFAsXT0lN7cf8k dnmFx8JvVslFIy/JSdqh/3IGKcHJVcyQgPRzFM3Rzpb/zHQxMsqgcSt2GdFT0IXSGv/SddTCbVZ7 VbGQbUXU1Xih/9YA1WPKoCWx0GF5AWagvTH/sZDPUX0BfQF98dwS9RE2Mf+FIIrh5LGBsX5U4MHb IeDB/+VEzIQnEYORJuTTFNahg8H/WcPndX3xjbGBsSZS3OHIFP/NUmJQ10Pe5ONiMXLqoGhw342x iOBkwDcU5PKl4MGL0f+C0Y0hiKE3BIqDMSKE4oTD/+NkfZF98d9zzlGOAoLRhjLf5VOMAYukvTBm EYxcMWhh/4Hw5rM2goWQhSX14ejzj9P/C7GO0o+jjtFoAeoiYgBDwv9DE0hR/jLugZVDE8Fd8VpS /5JCUIKSMpMz7YeTUZNS/tT/lRFNoe1mulLpdI/R6vPsxf+YoZVClbVGA1CysjH7ZLHw/7Lyn4aa A5mXthT4FaAJl4b/6rP3wvejtiWeP1EwOVG2c/+gFaETn4WilqIhVWejF1bq/12Blce5M1py/1OV UgEy//T/puJaY4IQkYCb4KGkpENflP8FtQXCqTOSQUYTlSG4Aar1vwLD/sgEEgPwplHkgBhiEMIp BuAhhM4hBxII05+vhQlmB3CwYWK1rd5rYOrnbCDWZODOLdJ78Xyz/3QyJ+HkkYoBhVFF4RK0mVDt DKGUsoALUO8XwInhdRD/jMDCwOdBs7E8wEIhtGYO5P+T5JyDokJKgjHR8/L6YrkG/1ykEp+m4QaB 5GC0IrhRq2PP/+K6k3PQ2rGlGBVRb1L/FTK7oRhBs2G8k6twmVCFUP8dcL5QwsAM8IIQF+G0II1w /RixexlSv8MZshok9LB4EP8ZcnQVHAJ0wxq36iEbpcJy/xywwwLDEx1igvKMAdIjfAD/0jHSkcPy 1LLHQh4heXMf8f96IiBkIAThMdIzKebTYyLf/8s2zNnK5Sl4yVYpSyjyKHP/zpTOlM1zyyQpRSki JyPIBf81NDU00sIsRtLDhiTStCy0/9On1AIhgiykLNIv4YlTIuH/NLHd4RZQYICKcM5S4zGNIf+6 gzGC12Hh4Y5xKPEqRMcS/9LA4MLZsycRinDkonexJxP/N4MqVDXB3pDcE7YiMfpk8f/dNDJU3xE9 B9xx3EREUd6B/2TDHXE8Ms1yNxTaENcBk9L/gnNk8dcDPhLfETZyNoOxwL6E1zHe4ugiGJE3IZTm Mec/etaw1LB7lNxxG6E+APcw8DyxQZJj3pA4QEK013L/RBLqsRvRD6FNgfWTDSHqEf+zsfWC12Cb EuqxQkcCMO+C/0bH7AFIckcCpOECcEuC8rT/R3K1Ee6oAsGh8/L3+/NKFP9X8qUT71JKUg+CTFKj NWlW/01T62HzRPmi9EQ2Eg/mT5n/VkXzVBuhtaS1pVJ1T4gGQf9UE1JTrQZSylX1+xSv1Vfy/7CL pSVLwla1D6C5811hXiD/sVVX9QBzAGNxwbTitVW5kv+5o1+zXKfsJAV1owK3I0Yxf7cWaNER1APw VjENQcRAKcELICGM1imcByIJcUcJcGOQY4BSpd6+sNb/LXEwQYqhZwHXAdfxcbFtAf8EYBOAveIT IxK1EsMNAAvkl+6iZiPTsNZmos7/w+D8xhA8EPlgdcEb8TDwaAH/nREOarNkptPttbKkWNKhQu8S TBLzvbHXYAj0sTrAikH/ikFk8N3gYID0oXCUWAJukzMz0LxBxjEG4GBwnBDvFVMVdXzAbcIAAkFt kD8Q/5tgBsA8EG0BF+EXIXMB9LD/OiDMgxmRc8HNBHdQzGjMcv8b5Br2zrgcoRvg5GAdEXcS/+gU d1F3sXeyhdOFZHiheHH/eTKNgh71eZQgKh9k02SJI/8i4iI02pIlcn/rJcHYQn6J/ySjJ2PYj32I KEI8YYrCKDH/JleClNllPsGEhCrhhUUspf/gwdM0LOR8MTBxeQQsgnkU/y8A4dOI5eHVZBPfY+EF ihP/ipXBMD2BZ+IxNDux3AHcAf+OMY3Q1iAp8I0VjbON0ZEz/yjiMxKPYNwBfMEd4oaRkdD/O7GY IT3yaAE4kh1BJ5J3Uf/oBJPR5lI9Qz0ymwP3EkQx/xDRk+A20oyRKxE1lDvCHXD/MLFnEYMDHbFk 8ThUbWE9ZP+aYjyANeE8ozkBGzCSAz/S2R6BlK0zoxjxnEFRywH/QnRDxEMxG6GdlJ3EQ8RN4f/2 cqhSSnKdwupSECMbgRtR/+2EG4NRQvwzn9leIP2yn/T/X0CjQkbioeRbMACRosVZVf9HxUfV/ilX CUmlRfRG4lhj/2lkVkOwxKrzU4RTsqc0D7f/qISqNhEi+YJR+KikEGMQ4v+ocajSkCOudlYRrpau g61T/0+zr9ZXdVn0sqOx2GrTVrT/DlSjNlf2VjG0trPiqNC2Iv+1dm5AtkK/tLiSRqG4RRFn/10y uWESaLlpaaJtcC6Qe2CzvAAUoOdCuxAVAM5goPqtYHEAcHGYUGzQTFG9k/8WmGzxvfMXgmyTytLE smwTf1yiDPNdkVxBbPBPMLyQxuNmomawhMb3k9CWY+Vx/08TRXKismikX6FeU1aSo7P/tgPFVF/i xKVslkRQQVA4cA80kIpAQRBvIClzrSH9cxAhIOK6kDPQOFG/hFnis/gyNBDO98DRc3D3Y3G5KkDG IbqAb6eogHtT4fnE8DlKYIB1UBWAZPBx4f+ucXJBbXDMlM1SJtPWICbj/8x0VCCVQczyO7CXsc7T dbH/KSN1E9BVmCF3ItDQ0JMrQ//RYHfleaEsU9Kn0nd5ly3G/9O1LHLVhYkUfCaPM9lm2DL/gsQy QoFW20Yy9TJC6EJ+Z/+CuNwzgcGUIn2xPBIyh9lFv2SChQ0sc9++3wS6gM7i8f96JOF21ZaNgTrw iGGIY9Ml/+PnvLKaMO6Rx5HlBJLjREH/nDDmBIHghNGD5IaCjPKHML98cJXhjpPR05mA3AOEQdH/ d7HZweYj8bH1camArBHs8P/BoOtSZPGT0fEERZSS45eB/wMknzObMe3hRRJ3o4VB12D/vRHBwJKl d1LXYIwhk9GWpP9KdfjyKNCSAJcB8HVKUeyQt/ARilCNwbWZQZmjtZMRv/Qx7OP28lZV9EO/YDlo MP/5YnaRKmKaoJ8UnxJOEquR/6jz9EN0s5ABk5PqsprhRwX/w3Fw0GkxAFIcIsNToDT7Uf/7sV3S XnKmgWhzoxKhcldo//2r/bmf41fyxHKmgvoyw4j//bXDcqf2pvhdSm2QByOqRf/LEVHDrLefkV23 A7UbxK51/2HGr2Nf8wf3rlKvt8vRZHj/saYAIQobt6MS4aCwCsWfMP+kwQ8VopEK0rYhbkC14gCS /x0jxPP9IbjiHITCg7MTEqP/bANrNGy1EUUdIQ5Q7OGSAP/gcHvgk6DLoCTSvfPK0xem/8SBvcEA URZ0FkO84HGhufD/B9JyAg7itGSn0MVkIjJokvfAQUHRwKGEIvOJ4b1Breb/aAEM5W1XVkNpUWpE d/LFhj8fePQwxsTLcCFwITC1IV3JUCkjsclQenEYelAY98xQyXHqoHu+laSwBjKsEKil1vcUsP+7 EP/ApP8nQLtQySDJccnShHAGMCHh+/mwJTKlcgG9of1wRPCZQP8n98zUJ5QoISgnzNLNodBE/9BC 0UDQ0tBSSSEqY/Jx0OL/0VKE1CpxQJHegjFA3fHeU/85BtIz0uExAS1DOWXUB42D/zk31dJAwoYx jNLWNNsRi1f/MeMzKDV0jHY1xZT1kaHY6P/rJN1DMxY05Nfj7lLWNDEhf+mCiDYwAuJJ1sEaYTfg rf/V04oiOuEjcJVg1SA64zrS/9SxO0TV1NM45yPkd0mwjAP/S6LwYpmURNHcMvKQmBEr4v84U5gR MSEyQyVA5sM2wUnh/4Wx6PPnADEBOCBEEZky6iP9RrNj7gFIAUyBTIHshOWR/0vD9+ReQf7QUUNN 0Umyi/P/6bFB0Umx9AKkweXS76Hcg/+i0fIzRljH0NDx5fHxwuySO+wRPsGcJTCUoE0kpb3942DO 0VHlkfPQMsDsAeyQ/wUR+gKhI1AR+RHAQfcx7PD/UGGoUvlzUPL08Us0+LNRsf/5Mk8kKXbx4VOS vnDGYchx/2ER9yLCMO0CU9X7k2qy+2H/EkRrJvyhd0T75Pvj/wIcIf//0v7I/DL74lVjacMNdB3C /7OoWbT+B1zjtzMDuASF+bP/+YB+sQYjdaVjtglBXUYGwf9huHJCZBS6gmJzBBa8tWQT/wx2/0cN 4wlRCkRoAx3i/MT/Z3EdwvxwCGEK0w8TDnHCQ/9phPsSZ4MeIQ0SZ3AfEbBl//0h/SESkxNSEm8T RBlDHwL/yDlvqsvCclIBgAeh7ZGtYP/KwTbAe8F7wX6Sy4F5wSUw/+rRgBCnwCTSyDYaIL/SqcF/ +OB0QTbBfaAjAHSzIODe/yUAUeIMBPryVrQTZtEUVwK/E8Me8x+jaOF5liCie5gwqIS9MX2gKRrQ MRUQ1CmU1JIhfaAhdNB7MP968HpQ5EFwgx7h/YFEktPw9t59EdcS530w14DUsHTB+X3Are80sHow 3tAaICHg+03QHDBzUmDV4QxRBQFMoP+BE+yQJsUFgCgY250p0fTx/4QChKCjgoSg+IGqESrBhGP/ hOQrFutwplSSEjfzMYJJ8f84WCyWLXSSgzzzLnM44+GW/zlSMPGKlOSTN9XltzS1NYT/MoZCAY4n MkWP5jaUjWTpFv80cZCKN6aSIzjTiZU59e10/6dw7fEj0DYgmOGncDsUelD+1oIwlZSVN5ZQlwM9 Vzt19y+zlCIygBCmMZizPnHzAv+loKRBP8RMgYWxM8GcMaKS/zgji1ORoUEx9ZGcsp2JQ0H/J+FL saWyKsGeeaHwpCKfhf+rYqhxUmCtdF0BGkFcUFDz/6qwnzGiBCUwLSCjwE5koRP/ocRD0qXCmgH0 BKuiphVFwvul0ilhe0HRQdFNEk0hK/H/QPD6UgMQpaBM0fyBkCC5Iv9HNfkE+EROZK4Ao0JSgQch /6syUvGaMahCq+IFxFQyXpD/KUQDs6uBrxJcoU/hqwLdgv9FgKCRYNLQElWBxWGwQhJC/2s1EjJq k6/jsbEe4MHgD5L/W2RZVVwEs/Ue8lWTDpOxsv9alVqjd0R8UVoxtSazAlEy/1LBt3O3NKEXt5Vj fk60vMP/daNj82PmzfNykrwhH/F1cv9jvllzZiW/o2aFDFVcUGeB/8RUa6FngXYhGgXDQ3NQwsT/ cuPDRK4RaCJv4bBisTELAv/QlmqxxydoQG3RIILHKdEE/3OhCgFzoniVcJFx4cphSbC/y6WZcZgQ 7lDToM8wOdPwMy0wLwHWUn0QJrDnY1S179Vw73sQ75Og7/1OQIxwg8jAvpH+gE2gLwC/jCB0IKmg dCPzkc6he86w+3TRexDnRNFPgQ2oClVrOv/Rw64AzSNvgMoxyyFM4CSBF3pwemPUJjnXcEKl768u EthALhHUcOfVANbVAfAYe8Yx08CuAPsAyLP/zMIBcJgRJgHYAX1x16HXcf/Xcc7RJjE2wD7wQ4Bv wVsA/1AAe9Fw8zNRUpDaYoCkgKH/RQA+AH3QgKJ+QNnwgMeSkP96UN8ihHFQI4QzgzSdQN4S/4OT N1MDJ4WxnJTgFozFipW/4mea9u1j45TiGuOXvevh/zsE9XXgV+Yo57ONSJjB6NT/mnKQYugCS7D0 k47m5vaQdv87A+uk4Mjs1Jwwl3Li45OC/+3xlOEk4PWRhgFH4ohRfdC/72J90JZRTWDwQ3tw1pVy /5WA7QTw8/GiljSV1JdVl/P/kYCSYkbRo+GZM8vBphKfYX+jsSeBnDGKYPXF9pGcM5T/omIBItOg /3IAElEkf5Cjov83of8C2fCExP7U+6EFNAXE/6CyZhOuMwTxTtKP1fKBpRD/eSOo4gPhVdRDQZzz 3cHdwf/eJN9BmGCloMxhpZGfMVCU/+5gliBI8YmAARGlAWEhqhH/AOGYgNOgrVBhIWRSCBGrdf9O 0k4iW1OrYQOFqHH51lJy/wPDBlJcpAeBgBABcV9iAYL/oNIHdKCxNoCQIKVypGCqsv+4cXDR0ZMg pGwV0cEKBSCS/wtxDDIdsh3DtpSzlbT1tBT/dyMPUsEBY/LIAWWzxDR3Iv8NyBxCEOm2qvtBXPG6 CRYy/23Wz7QTx7umzcO+JL5UHdD/uWK5QgFwvTS4Vb7FwFPPov8ZNL8FG7PCwR/Er+EwccMi/xCi HUQwYRbhwxUcMRuhHhL/tJQgM7A4IMF4s8X0ZYWyIf9jtXs0HsKwMdIiwkLBwargP9nhy3HMMZGA hpHxod5axSWy935SvfdafpR+wDl/E+9rfsB/0CXwtef/pEHV8yxRBPCYgIAxJjGcMJ7G/nEjAqGg /kGExjEy/y+gKPCCsP4RGFEO+ApeIpb/qcGtEMowQzHTcNPBLWMvMbYp1IAvATkusdhASn5g/S6g 94gTJoCIUC4Q2FAuUPmHU95CMXD+Qc1UFwJ84aemsEdg8aCl1jET99SA/zGVi9GUYIngQrCCQgTg zmH/ycO5AYsA26k1AtVwpaAlAP82YzVkquBisTWBNYE4gzcj/92kkOQCYd5kkpQ5K0Ai6fX/k+NA kur47COV8j+U5QPgFP+iMpr04sHhRvDE04DnUTo2/+WYROXnlEDW6BLosp4ipYD/9JOcg0Mz6ebn 9FfiQRVAMv/gROAS4UZG0e0z7SLwk0ci/+vg4nRG8+3T8JHvcfCR79T/8eGjc0vRpILisZlRoTSj cv+jUe+wpYXwEfBzTQFKMdhwv++S2HBPMSUA4LAzkGuGAf/+QVqypiHiAFBk9XFPQf2x/zmyQjPf UV4UXhIJAVdhWOP/3XEFM1tiVpBUonGR+3JUw/9UtWOQVRIR0awinHI54k1A/1Y0YvJTo1aRVdX3 AVGRYwH/sNJSArITsyM3Ieaz9RFQkfecUfOR9/Cc+fEpkVdS38H/V5E28dlQbFEioWcRVIP6FP3z 4Vr34YqxYsJYVVKTTsH/YtNVoV0jz4JUha9SBJJVof9eE3zx+JFbkvySU6IHYvqx/w1xDmMggsWi IQnQw2oyIJT/DsRnRyn1ZjIPQguSHsIggf/CJb+UaJRoMwskdaCDqAxC/w71ZjIaJQ1xcZDP4xTV GQb/FKnImG/xb5UUV8jlbRXJlP/Jx8w5CSYaIs3UGdIZgdAy/x/ECpfDRw4hHYF3IRrhd1XvHWcr ox6qeJMpHkAqxcRi/8ayBCEeMXhiIaUOMynhY6HP0MImwRMggUCt3iYBJdHffrgl4H9Bf6F/QVLY w39E+4ABhnDOhgGAlCNhTTEmAf+AAX/RS+CJ4DNhgNFW0QFw/YKhc4KwgwImEP4REHF6xH8gyitD ZGEnE30RT0DugK3/LSKCoOBgLaAxcIliLuEu4P+HsS6hiBGIEIgD4iOHtIkx+4kBLhFSLrDy0SgS MDBwEt9x0SQA6vC0cC/QOSUgS+D/11IyMYvRJbCMgPCggJQYIf9mAAZwIxKN0lNwRgA1QFNw/zYS NfP8gTZxNSKOQZGgs+D/6gPoo5EFODGRoWFxkdU4oP849JL3YpQ3of2xsbNE5EKn/+4EQJWfVJlU 9UVLMfxxlyT/PGOgFjyj9SOWukBJ7pKbBP9BAkKcnUHuFELkRDr1lJsz/59GRcOXcjxmorRHwUuB pwL/J5FLYUdD+8P7skfBpqRJ1f9JIEplTyFL86ZE/vVL8Upz/0pip6NMEqFDSUIBd0oRS/DvgSGo 4SlhJDClWuFPQTmz/1CAT4ADEbLTkoNdkoOAEvP/q7Q3okLxkhBd43Jyg5K20f8G5GxgbGDLUccE DWISsTAw/krtuLHEWxCp0jqBTvC3sv+SETkxmlNOJFGyBKJSYVki/07hT3FD0YEhWWEKxA1iYqD/ KZCuEl/xCUEJQSmR1PIQQ/8HM1WQYYA3oSdRswRYoguS/7CDkhBZwkIxTgKw4lRRX/P/rPJUUrsj NxFg4bvSujNf8f85IRFTt0O50ghCepN5kiCS/x5jIXEYs2QBH5HDRBgzaNP/ZfFn1Gm2wfV08mpS GDIcM//EYsRzzuLC9GgCGvXSE4PT/9UhxcXFddSyx6XHuHBnzQP/jTBxZCJmb9LImnGQXRBtJv9u ynB3bIJuo8fTxkV14mfn/yr1KtfUI8VB5GGr4NDScsH/cFNwQnBR0LLVQnTzeQRkQf8o6dWRxIAI ITgDUpAzUNVV/8VCa+EVwbgA52IzoTDC2+H/NaBKIH9S17N/I9kQftCDELfZRNl3TQC9gPGCFnOB sfvpcH6iY4MQNSKAQQQwgJfd4EDe3QHc0X3Q74qx3ZL/aNLVoRhkZSF4cXjQc1Go8G+GYn2ghsHg kSGJ0Dow3vYhh5A6kTHjEeLh4lKIYv87togEiMPi4uLCO4HYUT9Q/rWCE+cSMBHawTCwMGBLIEoQ THAhjrGUzo+g7++J0IwgjHCSEKXfcivTeqD/NCJ78LxQ5/Lo8I/Rj9Dp8v9CUo4xj7GOMEpg6NLo g45C/0JS7CIVFJESkqFFhpKWsjL/UwRYFFJC9jacUp6jnpSeAv/u7PRHlxeftZZtT4DyMZ+3/5ZU 9KaVIkh0T2T2tPhkgSH/+GdRGE90lRSVFpmGmXCgIv/y45bE8kKg8jFhpwKgs1WT//viooSigQFi /eCPoP3xpdH/+1P8A6akpeKkRKOFppSmlf/yMf1xj6ACQlehAWSjoqQQ9/Fw6eCSoAheU6rBqpSp cv9HY7zyYVHrgKuxDxOxQl6U/2LCsQGukcbyg7JnEq7zIUT/CIaFweRxrnKTIpRTtFFP9v+UkLPQ snGr4UdTEmJeY7EQ/7kS65ASImSyCdXuJbQQl7D/AQKqQKlxuQEWwQZyuRMWwf8PERSxtgGrsQ+i zVAGEQ30/4EhY9OlQGwhsfOvobACsKb/FCEG0rpjufS5krDQuNIUMv+t4hYFYFPccOdABfOxIrZx /7/UeYK+bL8zGTO/tXo0LjP/GnN0+Bziv2jSYy4EHVQsUv+FI8O0G0UfGcKV3aPF9wji/yhxzhYv 4iJHJgYjVct0yNb/q7HLMQlBySnMd8fFJ0IHFP/OFCBm0fJ3xCzzvkzVo+Rh/9DhMLAq0YqChUEq 5NHTxTL/1ZLScThy1bEqcSnoxsAUgr8Eowgh1VTkVZ4A6mDW/LD8zhDyMNTwNCEwwTYwESD7lTHo UOfXkTJV2PjXsulw3+Fws9A2FdvgsnCEj9BXkP8xo9lH15Hf0OQR1mJAwaeR/zng3PHXgKHQ1PLV wngFOIVfzSGysTmC4FA55Iw6Id76GDp5KeNx4uM7geG0PKL/4rM8oeLU4YQ8odhSNNDnsf/fQYET PtOe8F0QMGCZUT9Q1z9BOXHf4M6hEO+o4clR/z5SQTHJMUGR2+Cs4FLgm/L/sgGcMpyjQvdCYkPD 6MD+kP9EU7jBiOFFkexS69TrcetE/0Wk6WDtEeyFuKJIhvaCrIH/olNH4rGUsHRSRPbB76b1Zf9L I0qHTGL5BlQS8zFMevmR//ADZ8L2BlI1pJP0RqNY93T/UCX35vRE8jHxcfFxVBHf4P9coelQ8zNV MTPRVuT+xFax//6Vr6dZY1ehW8Jbcf3g/pH/r/RXRFkk6mBYsAFzW8RY9L8A0lbAsXTXMP1l/LC1 XCT/AlFosQSRBqHr0bohuTi3I/8UIbgybaMGobsRvPHtURaS/71hCMPVIcDiwMFhEGLhJyD/arC7 c8F0HkIWFQnBR3IOIf/1w2ciR4EFtGzTY/MS4m2B/+uQRnIKgm0yoNH0IJEw6VD/+fIEIFQgkTHn 8OlRDwAV0P/Ao2clDBJt0V+TyiBmYmzS/2dHkTBtBArBDQEEYcYSC8D/DCAEUG2lbnW4wm7BXtIG NP8CoV/QD1IGwhUS7EDJpLgz/xdCB5EXuBmhcxmEIXM7HlH/N9Rxxc51dFIeInR01FEYN/+IQtOB gsN0FdGEHtYe+ILD/yBDuxQoc4GkL7N7xdYzJqH/m0KAViaifnUnJCMBJU2ACf/aJSclJ8eBxR1T KIIdsTiD/RvRKRrAGwOEgoeSKqSFMv8WkBAAX0EP8JgxmDHnkpAz/4exhLCGVCpx4XMcUjixYWH/ uYMGAGUBN3EQMIRymwEWkH+KoKDgilCXwpXB+xA2UGN/3/YHIOvQ/LEzoTGRMudrfzbhNcBQsTZC i0O+YZ6Q5//nETUkM0I1YzGR9oAPApBD+wXwVsCENxDxcQVRN5Eo8v8eI5IiJ7BmcgNAOaLq0JPT qtaUNBiUcaXuIimU098695VUlVfvujwUUpZQi/H9ObDn3/QiwiNhDHAT0GQg/z+BVfAwsAKgVfA/ QvoQMTD/DhAScN/DvHAWwBrAMJFiEf9dMAQwxbGcEUSwQsFnIV4h/0OxQ7RER550XNCe8Z7wyjT/ nxKfgBUUoAKhY0Win1VGgv8McASAEuNHgkiCDhBrMwxx/0eDZsKpx6RV/pVLAEoEptP/pCRP8krG rMdS80uVSrJLKv9nSk6JpIOshf60q0ZntKcT/61mtiGtg6dzbRFT8FWUsOf9toKtW+Ovpq9kV6E5 4LQ0/1Wws5CzgrAxV1Kx8wxCWgL/s+VbcFxRDGOz0lvxC6IO4/+uEbOBtrGekLahVzBckVPA/2Cl uoJjMm6CcQMWYaKwRKH/YGNqomM1uGFg1B/BkiId8f9iwy8hu/Fi4RtBFNbPYC8h/6ECZdOS8WuR 9fGhY16R4FH/RvMXY7/zbxW34UhRorDF5f/CAU0wbQHA0cKBNfCtcE0w/8LhXsFtARwiHDNHgmuQ MLD/4uBQkGuBvmFtAVKUZwL2Iv9mwsPUyOReMWwRcSFq8Rzif2VhGlJu1aGFcTFpIMiDY/9v0V7x yIGRYciBbrO5Q+tC/8wzciTNQXMTg4NzMi4Dc1P/zpjMA8zkiWV01M+VdIKD9v+CxHfqecR5Dtxz LHTcM4ZG/y8n1AZA9HwzMOXWZHw0gLT/fPTX4TMzfFaAlNpjE4J8E/97eIITe6TdkIXhgxXL8Hej /5KRhIM4QuCQ0QD04dkgPyBaGJvwCK1QOZEAqrAA/+USivOOEYSwg1Dh8eDUhkT/goPXwdixEkKa sRTA42PggdeQgMew5CBCVmBC7kDxYf/kc5RQj/FBYee0XpBQgZ6Q/t7mIZfB5lFAUV6Q9LDntP9x IFUBsdDmQo+CjzaNEeZR341wl4ACIOBSjhI5aSD8wP9woZAid9TPZHRAu9Gisezw85Ny7VAYjO2S lDfuMI/Qf+5xlQCU8O6I7sWVA+8irf+WZfEGjELxkeZRkNHlAusw+4DjarFSyID7QQOBXNFo0OsM MPRglIUQjPRhXpBvYf/0sSWh1oGFg7/g6pHIgMAA/61Q9kScQZ6BnZWdElGBH6H/UeL385/B+TMS ofrTn9H5c/+hcvtTn8RUJV7Bv+JV9fxl//0zIPKpwgXppCispP6TZwL/AZimgQcS/oOkFaS1/1Gk Cf+pkfxzXVVZRazWW+ZYf6Uj/6qyqRCl1KXRpCOrwlnUrVL/CyNjNA2BC3NAcLZjtNQNgfkPMsbe sXayIrAhtBSNcP9l8q+TDsAJo+0g6IC1prQU/w/Cs5CtUack87AHQsHxvaH/xqATcLdQ7FG6oZFi eyJrYf/YwhmyEqO30bpCm2G7odZAP+LycWPVcxZxK3OCQ0pa/1XQFdAls9HV0zLWQLkhwBP/xLIf 4qIhcYN/MX8xnuNEwv9uQr8B4qG4obfhchId8rgy76KwkTFqgx9ElMQEVVEcUv8cM8DRo/JEsr4i aZICIQST/1nSGZJ09CGCfzJsc7+BG5H/xqHiwcEyqRC4NbjUGiPK9P8jp/jhcsJxIiCTI1LIQLdQ /8u40NUqg80UJ9OBZsz0KBv/KgPRdd2B0APQuCi03ePOEv+84hYzLcW7cYdD08UuBtKA/7xyLxLe VeOh1BcupTDDMIX/1jpMg9hk2e3aFthRvwG/Af/XBNZC1iM1hrvQj5MWYTcy/ycBLzI64psBT2E4 stxRJaATPzCn4L057YBCnN65k5FKpZPg5FBOEM7zsPq9OUC1W1G+AUwi9WHgBP/nskRi8mDIQBnz 4FM4Y5sx+3+RIiAp7MCT8fBB8ZFAs//xIK8QlpFFA0GVrwFL8Z2gXtZMJOAhxJHp8MZL8XPf6QDm IZw2mSKx0OcMMD5g/0IQGDHX4Tril8EiID0wmbFf1WQr087z62HssTmvEDH/7YDtcEeYSGOhk+6j 7sFINP+hd0koSifwIfFzmNJCc2Vw/vd4MfJSlbCeod5QvxG3kf9OUf6h9yJdkMZgTbPIIPNh/xNB vuC/4E+AMyHYwF2Q6pH/t1DDwRQxqmS6MOXwUKRQ0f9SVveBrEJ+wsswyjRzI/og//njuGFTc/qw +bFTVa6xFDL/bJS903VS/ZFW2f6iWIv2If+x07ClWSZh5Vp0X1a0xQKy/x8VXZKws1XkGAJWgwP0 OUD/WfUAxrlk/8UDAgcDWpNhdf8EgRgDGmL0YMtAHqEdIQ1l/2iQD9EQwAyRaNENtGhyC+C/CTEN 5AuhZvEMwAkhtQxk32QhaNBowg5znaGlvfRo0v8PpAxBCUADNVrREwEHBgQh/zog40By0xHR7FER oWtDPIL/GhMjAfnCIZEkMRPh4LIVof/LZN0BKtLdQp/FN3IUwRbS/0WVgLEWYTahI4JxwXOhInH/ vDM98aywa6Fz4RNSf5E0M/8T4SOkc+H44eKT4rJ8URvx/2IRe2EbMRsxIZFswhsR0Pb/HFFD4ZTj GFECwwSRHnOVsP+8kXx4fFJtMV1zHCAccnnk/xMhITFVsnw1dGB8kyGgfTP/cbFzwhXgdIDyYEzQ b7CtQ/99MuLB+OEVMoLGJ5MpZisx/+HQKRWB1yiWgBLdI4Z0cOH/kPIqe4VERVUsQomyhsY2FP8t ci2D4IiH40VDiRTjdSvB/4m2idU7tTAnj8PNwW+wM8T/MVY0FDLCM2EtcI8FM5aLc/+XwecSh1Mu xZEVN+Q/wRfRvXHgnDqx9SGpUmEgMWgQejGToDmi0PBA8PPuA1Kf8RE+ge2hoMCggMYplMD773IC ICFQsDnApkBdkPQA/30wV6I5gPVhO1T1AH+BRBJ9M9A5amGa8O4gPpLugOf2Yz7g+ADeW1GVozrR RGKv10F6cZHjfrFz/+DGQhD655TA3mOSdaEhQRey2FD/GNHEw/JBl+JEIpICLXCexf9FMuI2kbLM 0VNwTkCU0JRg/imToPriotJItUjDouNH5P9H4kfE/RJIZEmHStWYs0uU/0Ox88KSIkyhzXF0YUTB TlD/w8BRATrAfZEiEWHRTcBmYL+oY20RObCpMZUQmgBjdID/q7KrMVHxUHGowqpTUHFQcv+rowRy CTCsgazhU3Bs4a6D/1ShczF/A1NxCDRUZwcUcaP/bUK3N3mysOIawl0GseJZdP+xxQyaX4MLZbMk uAN5VFkU/1lHV5S75dP1sDIa0bSVuhT/eNNhUxOUulTDVsNyeOBpo/9hURfSceB7lDqQVdB4cR2A v2OUaEa+cmWiZwDAw9ZN4H+95WYAaMXAMWnxvlFoEN7/wMK/sWcxvUAaNGn0WvWzs/9Z1bOzxFId 0bpz7EF003GQ/3yRfJEjsnSRvDLXQSHzqOH/2FDOgk6wdsCOgDVgLXDIQf+IYDPhOtHI84RzcCWG g0WW/8kiN2LN8G5Q00GbMPfCf3D/VcFyopXBcQLx4c3hPSJwYf+Q0ZCgyEHH4W3hzeHYAdhh73yE DyJZUNWgpSnxKWLV0/95VB6CWwNetVxQQ+HSZNNR/9WR7EF78ddB1uE88dlRvHH/dWHV8VdhV2HQ Iy9SebEWEf99RKzhbkF8tyYEc+ExdHR1/3nCfNJ+MnBkgCbbUoBS2yT/hXE0Y9yZ3abhJIb03iJw 4f+ChdukhTKD8oQBRZODlIqD/4dKh6P5aIg2iXLkdOPn44P/PRQ+n4oljKGLhIsk6jOL1/+NIuai fnONlYwmi4mP8ur1e+uSx9FCtzB3AO9QTqCtH+xylbDIcHPQTqAxjM79oODW+uP+MKORotBKce2Q f0nS7ZFIgaCw+wCg8KCxOXeTo5OQ7zIxlMDwALhBpf1PMGuV0+FR6HLhAeuyxkH30DGakO8QxpQg ZNBNQJrh/1xQwXBe8I8RkbdLgosAcAD/VdAuIZmhlYGeIVAUa7HrMf+IYefTlmF6cSdgTAH4Muyh /8nA0KBs8OczImKLtc2T9OL/6GGgYZRg7ZDtgv6hpESkFP+iD6K1/hr+of8CpRGloKVn/5wxYVFR gp6DA1EPkPrQd0B/lRBq0MPAlmDFwacBsGGc9wJhsuCU0a2q0QIBa3AuYP95IAiQq+KrYqrkBIPN ALMA/2LQBWMGFasBqkEHo3NC2MT/CJGtdAfSYbWu4mI0c1YuYP/L5HGB1FNkdLBz2OAgobRD/xB3 DISxlLlBReEOlmrQeBH/aKMMvQzkZ0V34hFTaxRlRf8SFrXGuOkdJm4auJEU1Hlk/2YHLxEekXdR vyAZ1MKkwAH/wqHAwRmhwqRyssEBGzS90u8aIr+hR0D18c4awsJSTSD/dyDwAGhSsfH28ewRFqHs Ef/TUXcCFfG8Iney1ZOydDAQ/6+AzPH34a3RCJAvIAjUMwP/l+PYItbhjTLNk8sTxTAoUf8kZuKC h6PZsX3DJHOBEoNh/jHOEjMzmgDO8XtDyFJDAv8fcdfSzKLH0iezlcEjgIeh/5Ch5rEiIScCAQHL wnozFpD/zQDQgdAiK1MTFLPUE3HRof/V8NHCDCQeIhMhD5IBYM7i/5azLrKF8aghsGIJ5IdU2PH/ 2PHPAczxKQMxAzAzHuR5cv8zAnhF2STTss4gI2M0Mt44/46z3zPZ2N1H3gI7qjeCOXT/45Ekcjj0 NTXeEjnTOfXhUv86pOo04ZPhtH2ylfROUz34/46j48Y9WONkmOaYdz/JQBP/6oTngui5IdFEKJWW QYKeNb/rAuABywHocNIQ7xDOqKD97zBzRmD3gOlAW/ICkASQyIzWIaFAGIRHUKFD/0dhoWFJcUlw onKiU6JISUHHSUFU4ElghL0hoFBKkf3DwLXz9Eah6IHf4n3UTCH/9DHyIvIyUGFUIuX041LkhP+b hPgzRWNUIgCSggJFJEBy/+fTUbPNcE7DAFFSo/CA6PJ/qlIAgkKSnEMmcZ8x9IAI93mBunFKQELz oO3xWHNV8v9VckgB+7NWM1eqSEP+sf8Q+/7T/1HvWZFZkf/DWYBNEP/r4VqEA7HZIF+CXDECAUFA /8cR2FFkkdIhZ8FeMYdBXLD/vxDlMCZReZENwAVFBJG4lP9ekgShXSJbgwUHYgNh8mF0/wfRYdJh 5WK2YnnW4YMEf6H/1iNkYmTSd3K+lWwhApDwsv8OxA2kDIhv9RAFDjcN1QtG/8GkDFQO8QpEawcK QwrzbML/EnhtFW0mFYTIlxUhHfHJtv6l9mAaUPKBcRD2YhvwcfH/GFLLoxdhy5R0kXIgF+AYM78Z QhjDGaHMshgAWyDn71D/cqB0EM7BdSQX8RWDhWJ2cv/TY2WSMAFlRmSkdzJkI9JU/1qxJdIuJC3y vdF5YQOgUcH/1BPmsAnQKREiUSHAUeHWEn8iUH2U4fQjZyJy2iQz8in/UeF7InszJjH1cXtTJ3Dp QP/moehSJzPbJCJBJ7JC8tYC/yURgPGDBHrxjVN7QoRRLYH/h1PEwwsRLrEekxNCxvEL0f9sNA53 9MEyEGO0HxEO0Mmg/yoxjEO8xB8SCfMKEgnDJjH/eaExFC4RYvIL0WSzjKArYv8O0F0RESF2wIfD BrEjxJIFvzikNOY2ifmykLOUkClBgb9AYerSNxmQQo52OREIOSH/NlE4EEBgIoI6BzrzgoFBpf9B gzq0PGiaAqhTPcKT4/GV//I98RQ9E/EHmOg++kFnnR3/9xtEF0TVpjF8MIigVOJHcPZKVSBKwJxG caChA1EMIA8sgKFBz1D7YM4Ye8b/oZD74HSQ+8J0kPth/IT7Yv9HQaGi/ZRHgEdARzFU4U0A/69g pKBb0puhUcGl9DXVNqL/1tM75UVTJNKZVECiAskCg/869CiQRKJFEe0Q2nGuAUKT/0Ag1mGEQE7C NDGdkXsSUbH/BbEFtCITB7IigIFARTFFMXdOYaXxHZApSwBNMPoArf7nstGyoa/Ur9uvtUjQsxAZ WKzvY1oAWcFrxv/rs8H70P+gUNalUybhrPD/xTBjsGFhXpK1ckYQRrAlYV9hYbiSXSEmYCERc3aw rf+10bThedApsF3wuENewmOA/yyA+xEQorp0LXC3MCCQh0H/EvEe0WIieaG7o7vIYdni9f9iMbtx H3EHNb4iiqGDUdGy/3czvyJ387/kxnJo8sNkxmP/v/ItwSARHBPD5BpSaZzBp//EpuBUay8cdC8S xwkhvm+i/8iViLDJgciUyhGF0nEQytL/TdHMMKUghlB1wHSQdODNsP9x8XExdDHNcSayzSFzsHHy 382BzGZ0lXOwcTCtz1JzsP+koM7hdaLKERzCd9QY4hvC/76hT9HnIecjERGDVIOChCL/UTGuAavx BZN74jlh7cGukP9DEgfTUJMCEn6zgXMEoTlm/zrTlJSRlpDD1GPc83lSB1L/L1JAVO7gB8NC0kLk qgOm8f+skAhh25FR8TLzUbGEIQbR/y2k30F4g7gxwuHfMr2FvcT/Y/WLYSqS0KHZ1NRhfxLkY//j ZOOUf1C1Yd0h3MG91WOw/9QivbTZdInyiRPnIYeBhgH/StDLINAgOpTjlX9QgYHr0/+Rk5KjksLs 0zEF6acxpERo/+v17hQAFZKo7USskO3D7eX/67LvU+7g2+XvcpEJ8JWY5//xx0v614CuwZez9ZDz FJdq/0gG9Fo2Iffm9fWoA/XK+DVv+EMAE6nA5RBCzsCj0pz7r5CvUBiIoKBzCTBokG3Q5+KQy/Ck wLUYoFBVYhRg/VXxEF3wVlBWQlX0VfARcP+3MFVjVVD8MVfjWABc4FOR/1ihoFGlZNrRCGJ+YACD R+j/2DROhgHCp2Dp0ICwipFSFf+tgPCUA7NP8/jhjyKmEQhRfwWxioLlEKXiqGP6dICga/+nYAVy q+Gr4V9SLeFiAnwA/wiSBOKrhFxRCRFZIQmhr3D/CfMKFq+kZGeyoAxos5ENNvuz4s9Q/3SQDVC0 MVCStKX/qkCLYbWRaWIQAbnEEzG41Pe04S1A3bGEavN5kWliFdD/EmMSIsdgErMUIm1BdAC6g/9t 4xKyFrl6Eha0uwN5soPi/3oE4wKEAYHyNFAIM2GSgQD/PHQ6lIxi4KaGxIbEhUTDUv/D9SDSHnXE hCEjwXDCg8IX/yG2wRYblNGCecfGJHb43mH/yWHIc3wL5kEkUyPnyqMlgvfK0SZRttDGJlEjgcti zbC7JoFTgK0mUbcwJqHOJ3TrJfEQ0LXL8M6AsSiRz1HfKJGB0ShizzCj4OfOkSmBv8p0dUjGY9Ck ifM40hAs8f+Hw+b12wCnArSSGDKnAphB/wF23BGs0dWDnHH440hUSRH/MIWmM+3zjbSLAy/TqmDc ov8zUy4ytJLasdgR14IFJKdA/47irNBr0DvArdBhgWPAPjH/1HOM5F+B3THZ0+HV4bEV0P9pwS0C veO90mHxrQGnMa0B/y8ihmM3ZY1V+OAtgtzCNtH7BtEXUmt5sCzylFGNA5BVvz7RcpI/E4WC5dLh 8mviQf8qUH1w4BB5ZN9B4AHeUb1S/+TwSTHXxOmSXqPpA0Mj6vL/71MxE+sTA/TrZee37DHtgf9b NOzK1wOqsk8EA9fvZPem/1308HXpkvRYTmROZqHxTlb/papMCvIGTvj1kVArXhNRFN9RE/cGqmX4 s/HiIRpR/vC3+dCvUfnBe1lAVLEI9wG/LTHVQM+wEQARcFbDELVR/6/T+kGvYlbBr9OvwneQVlD3 tWBWAVbGIbcwCXBVsLJx/7VQWVEGEWHxXUGmY1pB1vI+GJxTTqZMhS+x6+BCMf83EQYhpJIEUTSA o6FZkaSS/6sE9YEEs+kQNGEHk9WhYYL/aIG3o2hy3jDhcGERYdO7Nf8roWFBccEIk+mRjwC/IF/x t/kyNFA60BBAMFVgrf7B/lIJ4L6QDMBl8A0BvvUM4/dm0WbSwFLvZ2FnYQ3xDfL7wLBqEMYhEOKQ QDDpEA51/2jkWcDkEWnAx3AQAeGwaWH/5cESYg9BEYGjoNlhQaCGIP9fsdnRa+QPQRNhE2cPRBNi /8ekbmPlEXA4bsI5MnABF4H/ltFvGTkyPUBxoWJ0AGCOc//c0ZhTOiU6wtVh0aO90eBk/3Y0dsR4 1Hb3eKfQx3jV0Qn/eBTS1d7zGWE6k4VS0/If0v+FsB4iHpB4gSEk5kB71COxf3wGI9UlZCVkKhAk wiZRUv9/0H80I7Ek0n9BJjiBBSfRP4GhJZMpQigzJhGBwK3G/4OB3SSAsX/Bf8EqEXil4QP/4YHi 0h6G05OFsiCBOFLjQ/+T0TtRP3I9QC+C8SHrgZVj/zOkueM2MIqFWaHj0osyjDP/RgUAgeu49eKQ RJOi91M2Qv+4pFtxilPk04wQUSFxwS+R/+ljLyE1VC7xBWA8AkElOMT/4SM38S1CNWIFcpVVA1Ev A/8vIeFyiWEtUeJCLoI0kY7x/y1BLyE7sUGBBVPqwlmQLWL/7gcvIRhBmaHwoj5hO/AUUP6MmgI4 kJlC1MM4gUCROIH/83GZEjvA5EJKNUJioPNGtP9fAkmVoHREA+X2nwNEbKV2/5zxRyG44aIDuKKm gUg4STP/qtVJ9QEU/gapwaTvoLKmNv/MAwDVAI9IIfv0S4akVkqm/wQKUSUFleRCt+NTIi1Ad4H3 ENAlUivAY2NyYFErwDRg7zchO9Cv1LDFjL4BVEEKIv8J0AqFD+EJ1gnzCwEKcr4B/2swVtBqETrQ DoEF01KznLL/ogJDwbVpplW2JJ5gNRBh8P+IMoulnqJQJAZjUTOc4vbC/52SLwJfcrniDZO6c+rx K4D/LIA3MjxANzRfsptQ8XCH8PsvwUNCMfFwO3C8Y0pRkZHvLIAf4RpBCbIxriCAUCZw8q2AELXn GVDAAGaAwHX/Z0HAsMFgwSFngGaBgyBVAP9W0GmzGAGU8CuAh1ErwGHw/zNhO3BVAGkRPTAqwc5A w+H/akAsgA0RDCAeEWpAWZA8Af/OQGuRzcC7AT1Ax+HfsGxS/8bCaXINAiDybBRqYTvw88H/bbLJ dG9FcWNvpMo0yso4sv/wsrxzANMwE+bVOXRzA4WA/+Eg1ISFNHq0KzLOlNOjd+L/Kkd5E3b4eFV4 aHwEfYLetv96gnoKemL0gc9lfAfWx32EXy0H2fF+FNckWSCcfwKcvsbIkL6Af3J+kt2w1ttB/9tB 3bGCYIOi23R/woIWgXEFa2Cl2LDOpdbvpfze792DNNLdtDbB3qeGIf/gUnlzLZTgJXQFeVKTQoex /z8jiSOYoMy08OKPQcMBkPH/6mRSUxMyPgKLxkQS71aeov+2Me+xchHrAZUlcfHswbij/7UBPkVB g+p08NRhw/EiYQD/R9Ds9F9jKIF6sZrx4RKVA/+N1Ipz5GLokZWC7PNH1O1z/w7CizRHomLy4ZGY oZci6VP/jcIlsSWx8TSQQ/DymFKRQv/rhJkyTUfIs3EVctAnU5Yh/6LlnDr28qkEXXNak5yxn7P/ noRiUVMUnoZeVKVmy/KhQv9eYeYwYnL+4lFzotP8x6Pn//3molGlJqnBuJGc0cwxADr/UQVQ5Fp+ XDem5VlyWDxWE/+psgP1BYmrFxCDnmDOk4dC/72BrQOMMPEhljGFUWogDND/sFCwQQmwCgLLoM2h uuAKVf8YQmTUY+ILoh2x9MBmAWYD/9Phy6CFkA1RceK3UQbRULP/V/ZZk6WGrSIQM2HjqSMOg//7 tJ/RtlG3FLejodIDkuSCv/EhS1Ec0boErLHvEUpxgP6MrkFnIW2ykvORYZZyJ6D/FoO81PWgDfID su5AcBHNhPt6cWbiAJHwFQGGIPLQdzD/DBAzUq+gNHHa0H/Q1dFmMf3V0JyG4IbRHWJi0auwQTH/ cTHCeHXxHvHDoXVmHZHEUv8eMYbgHcIcIbvxs1LNwB/h/yHBwiEgEcbUIBIM0CKAMyD/3PB7kc4w 28AiYa+gIfHKlP98tU5zTUQjoySzOyOZE8mS/yW19rOAFQOhSxTu0T1iKHL/fvOEws2RgrUuZHJy KWMpUv/VAikSKhKE4+CThSErKYZo/9Hl03YuhM3CchLN4tUWLG7fij4xxDKDMVAyka0zANdA/zH1 jYXXUdqx3bGOUjcA3DH+lDcwNmE1Q48C3DR0cbDw+q0HkN4ZMDdI3JHbod2x/zIQ3mLf8SlBroA7 kCdyznL/KsaFo98QL3XgAcuRb6HNQ/+ZcnADTyJvobtD9YHiAqOh/52hS6JDdZu06JLvkz51R4P/ 5HLfQZeRI3C9QgNxqaFAYf/7Arzi7+Hw0u5DO3EnMT2D/ychPaLqQkPz3zG60kQhb9H/7GG9Ubch S0Lycepg6cNIZv9EAkaEE1JXQ5kDmtG7IcyS/yWAcEDKEOfS6cKZUvkWSIT/pYSjcuIAmwNKUfLD TvMns//Ko0ZRB+AVhD0S6kIRU1AU/yYTgDG0UVkF/xX+MxCytOL/+ZPjw0/mrZX6aarDzFIIkf9o Aft0BWPj8Ub2raX92+WD/11G+1IBmAAwf/MAx1uPAsT/tUVaZgNSt5dZc1hJBVMD9v/9JRJj/zJV AAbhYRAIIrii/xCzHKJi0m7gZRIJownCZkH/daGB0WYTZFNkc77EzaJkEv++I9UxyKFhoC6Au1EN hWf2/1Ro5XMPw+Yw8FFqMrQj+AT/XaVrYfsSF6LuQWfCPjBscf8P01907dNLUecwwcJB8fzB/27C YtFvMn1AdfEdQsmiHxDfI3AWh3ESZ/KzQTkU0SWA/yVxzCKTkg0xHGG7lhaCuzL/zgNVAvcgEJDM whVyl9FzEv95gc/yZ2FPUBzi1dAI0XGA90hR0WbBMSnU0XiADBExUP8bxNFBH7ENUcvWIAUh8yJy /3thIcR8g3ryJYBGEiMY1sz/JGL1ACSU4FQjccYB9td/5f8mJO9h78E8oyc1KMMoIoHS/ydSKFgp Ud4UKPLrsilDhIT/3oQYUSlm9TErYiq0icMbcP+H9k4iJ5QnlPRjK3UwYy0l/+SXMVU0A4x1MoAw kJKRjAC/MlIyMDIgc7GOIQkQvTflbKW9jxE2YZw3Y49D1m8bQI8xNTHpMdY3UTcg5/0ZMPfqkXRx joE1cTaRkkL/MoM6J5S3OuQ7E+5Eh+JF8f/ZISdmTfInkojCHTH1oEZQ/08hI3GdJaCTnqGbE0Fh pkL/Q4QlsUNUSJTyo6diPJGbpP+tQaqkS5Q8YScDnaL1QvCjf52D9xI7cp2ScECVUoQhc/8X4B6B 0THQcaFnPgJMIp4i//ehF/AT8Va0owSawkviPJH/pBFKcUShPnQTI0BEUqBAwv+YYvNkmBGkEYFh nqMVIjtx/34BJDHxIp0ITEIDIkPCT9L/VYFQSbezu2MFMsFjujQF9f8GNavkuZm781r0FrJS81W1 /6UTqbMTQ5oGosVrI1YUvBP/aSdbFlDjUKm1Rlp/Dau1zv9c9MMjB1e55V9iVnVgEWEC/1SxXzRu MWegzQNJYD0RPLH/LzC9FCERZSRkAYHS3NNyRf+/w7+zKCXAQXXRHtB+AIog/2NAH1G7VGwzzmJC Yj9AqzT/wzVY8Gogn1BMMKp3aEK4k/9rFh5DPxKtMcYibDTGkpvi/0cxSyGiIsYzZ9HRYhryZkF/ GnKI0sn094L6MXCTVDFS/6RQzkMWEJewTDDL8oQyk6H/iYHwEKESt9Pa0rLDUoRR9P+7UX9RyQIj Q3WR8DMuEH1A99CCddN+AIyfcHuwNvArRf8r44kQcrFysBqg0pErcW3j/26RTBGkMdRo1WfWgXrT LyX71cLVcWNF4NhwfgBOhfnx/6d0MXR9o4JChAT1QfYHtEL/2rWAOUlgxgHbyIkkckHVMP85MZWj dzDdVIjDiLKIlDjW/9xXiXGEloXRepA7EoVFhhT/4lQaAeK0g0WD4+PX4QCKJu+K2Ysn5qSSEL1A 0eczjhC/K1FzwI1gQPBzwI0AnHugOtaO4XOQcZHC6iDO3q2PQZyPUHwAzuow3uox3+sh6vKRM+lx e6DGfJCSMv3sE9bsEeiykiDs0n7Qk8P/PfOFMYPjktTwMk6iepFJAv+CtHy0laGeEffklgQzgvMS /6+goPCikvH2pKGwo5g0mML/THOYYqaD8aL+Es3zmmB/0f+AMq1B9CQCxJ2y8NaWwviB/1KDiRHY M9KBfZHvYIng+fH/qSP0FPp1l+GbQpcF/+Ohgv/zVKXjo2L9oZdBrWILxcOw/8MQpSP/E6VkmfL9 kXEg8tH/+NFwIn5ET1Oow0yUThP9Y/+YpJljpSEcwMOwNKi8I2Gy/2diX4cFsWBCbhFgswZ3E2n/ rqmZMW1R9gNoYmfiueGiov+aFP7DrYYL9K5nDUq0lgTB/x5DHjVo7h4ntDQ0Mme4Ee7/uRWrprlE E9S7IhUzxmEcgPsWkCJSOR2RtPAIIQNw2SD/dZHTIb/XvoIYY5/BclLdIv8phDfBczTdM3JiJuDh AHhi/yzRigC7ghuSwdHOYcR0q1X/XwQdkZygcDGu5cWUsfezQv/FhMSRpOHBkSCkuhN6xcZB//Fh x/bIQolA43DtURsQ5bC/viIpdcoSnoAkdF4RMR3D/82iIDGegMyx3KBw4hbwKdHf8BCb0RK1s7PL AUJakcQE70/hn3CN8dVA3o8QQ/CDcM3qAO/qMEPAzvdTYSqGqnMjEK1EkP9D0PfpcN2FYf+RUIXC yOC9zzDdYdqEIxC1hUEDAIQtgdOx/5pg+/HUMnzSF3EscIh01ZH/1EIvodWhwNCJxDJk2DT58f/Y YjDAMXQCATGilMHtQzLy/xoRM8dqLDSpwmCmZJ2UOKP/MpPipfCRNlU4Q0nSPVU5SP/d1d6k2QI7 4jsB4Tbj8+4D/za0POdI5O9D5LBAI0AUPyH/5bTnMT705nLmU+fC6GBB8ffnAeeRQQDGm8HnwebR wND+xulBRnGcs0Qg6bHpsEUgwvfrUO+t5/dFIZ4Bf0UgRLLpoOli64HpEUNCxv7nnUGdFNVAnBDm UT+RVAH/PnI8RZfSO9O/05KFKfTc4f/eYUoESsE3cUo0SjExEVwx/wCBXJTyRU4CpgPzpADzpqf/ TfFbEypBynBkUq0xG9F+o/+ow6i0+HOQdeKy7+E3IaTTfzZRv+DA4CoxShLtsikQnP+sdCHiw9Hb oErB9vNKsvrk/1b3//L+g1dTzjEf8Qo09cH/zdF58V4zXiJWtyqhqBP9w//XQfVB8YFcAVRUTENN sqYU/1ojXOMLpxyCKJMnYfXhAbH77jGtQWPvkEiSLLGl0OFg/89j0WPQYl+DX3PIEwhUCO//y4PH JGTU/GRllwuUHxQMg/8cMg5l2fYRM2f8ww/EH8Fk/w6JD/UNAGz3begTlRUkFhH/IDGHhPtQ7/Bw I3Ci4WAj8f9zGBpBGDNzdTKQNxKs48yE//jRdDJKMHpA8UECUf4BSKD/fUHZIAUzNbD4ECVDJ6LA Vf13Ein7UFsA/EEb8ngVHlX/yEUfOGQUvzPJQhWzvIETNP96UnvhemN8MiKhfNKKMYow/yxiKsJa oDHhMeF+YtryfuL/V/Akgm2AY4FOYCPjf+PaYv9yMID0gSSqclfBTFAkgiARE3FAoNDWUkPQe87/ 6oSFUIzdc5SFsYWwK0HLKoPLsXOGYaXnhfDfU3yt799ihdG6IixzP4CtvZvQ/84xKoFfYQpQUi5x /4ihL5HiQkEAiHSJ8i+mMFT/ifNHsYsC5RUyEQHjAdIydf+NQ0jD+BEoQtIF6BRohDTM/zSEDDFQ 1q9C9SGRVRnDUZf/k2w5t6QylFUzEzvRlaM+Bd+WCcuTN/Y5lj3Sc5ZCmPOvPr9AJZo1F3C1mta1 GtD3m+H1gkDTtYNgg1GDUZ0C+FqlvaBxQ9GeMZ4wnrT2554xQ9Dn+PFEMUQEoHDfRjGgYkZERbEa 0L30RLmS/6ID5yQ6RBjiShEyo40lOfH/JnNJQ7pxTwIxEVIUT3JaBP+owwpyAFZc9UyzqCdVcbqw /4IAlaAqU1UCNcEoc4/gCoP/V4On4TYRr5I85CZhzLWQYf9xQFNhO/K50JUyKjCtMcrT/3PzNgBL VHQxrEEDEXuxTBH/TTRUg1eisY9PwbLyqjIM5f+yArDztEKrUTHTlDFSAa+R/yHRp+Fcgw+0TpUB iBSguzH/sgVlkdvhXtR7sZSgLmAtMKpKQ9BSRSBKE9NCnaCvFFETYEJALTApQUAhijD+EIdhcgCG kLrTvBInFtOE/71iIIHn0WQBBLRklrBDC1T/wFliuGg2HmJpvByd0hXok/8dqOhLxOxrm2zFbNtu 8qnh/9TU1NFxMNwgpdDPYmNxrqH/SrDX8NnSOEWTRCWCzCZKsP8mw6+ir4NWAwohWAGskUoh/3Th zxLqIGRibYDcAU+T2zX/spED8bTQCbFhUnbx6SHoVv92UNPVLPLRtRgWvXB7kWVB/3uR1NHVNW3C z7EuxMDAyXH/tKGNQa5AiIKj8glzpCBLkP8yIQQ02OhdsVFgBkGAkYSx/4AyMgKA4NU0FqZeQnfR YbFncjDdAKDAte9CsEVwxm733TLdQ91g90Og3kGl27sRfZNzQcHd8YyFsN3x/zmihzE+oMtgfVE8 cCjR5DH+a0cgiIDhgnpCggCKCYnE/4k0iWKJdD4DPWLk84t05gH/jALlJYvzldHlsucS2CBJkP+N mx16jmzpGL4BF3OulKzj/5F9ffJGpaNl7bhIJf2S+8L/lIGV0Umm78ShMvJw/XTvMb8ll/yCjTGW MfJx9CSEmRP/moSagZqAoQGZI/Tw9XT2AH/1xE/EnIH7AZzhnXGc4Wv0rc5RQ8aeYZ5i+NL3wf+e 4lHUnaFRQDkwnYP30aBx/51xnLRRQZjwStLwgfy1lCb/+/T9dY0DjPGiVK2VmBGVoP8J0l2SZVCp QP8w2rGpkrOT/xIDEKOohKYRD0JcBKfTDfT/jGKU4KTCd3GvIXoR0pG/E/8KY6tA0UGSRetlrBOs Aozx/4ggm4CaUa1BiCHvQecCCTL/BeWRhgYT17GQcK+xCtKwIv+ohhkkDAUMp7J0uELTIbPT/w5U P3O1MrXUAEO/Ur2BvVT/d0GBALCBsIK9gaiB3BHTQn9rwtEg2SAzE4KSRaI6QBhVOzApoHAxOCBC nmA5+94gbfDnblYT4J4wE/JuMf2doEqcAJth8IEDERaUjtT/dbFbMr3DdbIE09RjGMW/Zv/AQ7zW QhzSNcJk0pF2ccRi/xtYHXsd7xubxN7GkyEZIZLvImS+QtWR1NI5p0DxADCB/89jJHLX8CEQbAJZ I+syBkH/66Uz4tnxzZIPFL4gJ/HWkf+pwySyCWEosqkQ4IDPNQ2x/koCMAcglIGpgbqwggMk8v8j gy5RFoEapNJEIyDURC7S/yuCvgEy4b1SviMs5HIS1QL/02HZYn7Rz1MtAdaRX0GUMf/O4jjhrEED o8nQqSH8wIRy/7Ng6oEScNwxEsLV4TPSjeb/AjD+IOVwI1LIFIliIQLP4T4Q61AUUJvgnjA20r33 8Tcxc8733WE3YJGCnXD+92ExuxHL8zkC3ZE3xN2Re5sxNnB7NnA/APoQmnDG7zrAO0Cg0P8wnDuD vCKpQP/iYuLUPHQ9ZJVRPWXjQuMi/z7kmLelVOUXpYKjsvwVaLL/584dTeoT6Uga02axCwICQ/8m w0YCRtUIpPEzRnVGiKvj/0fX7pUHxO9ho5RMkzsRSqL/8FRJmPADTMiuME1R+zfzsf+ktU3x9jH2 NU+F9cRRQfYgzq324fqjUEClxlFBFMDa1t4g71KUU1DerJHeIKv4spIg3uRgtZMg1lMk/6vR+bKs oPqgUWJPYfti8JP/7tL8wqKS8jJVolZESPRXYv/vk7oQWHLmUUqgWQATATuy/wZA61DiYOtQgdLb ktAx6kH/3GFsMhkzAGIPQQH4XMMO4f8HMUEhylBbgtuCZrLRIcow/2zhETQI8P+B1/NW1JsWQKD/ YWFhMTFjCTHtE0dn2kJ/4v/sNAXm8WDYILXEtfICMLXD/2VzC5MzgGbyuGQ14WdnAfH/MlHl0Q7h AfFbwRk0a+MM8/+0tMPmDNK05BoDtKPbov/wv+vAEoI2MdEg70FO4BgVIL4Q5GDHYcdgu4D5gCH5 gPVtkL3IgTH5UMjiU1Btwf9uIMmQbdH30G/RB2GEcgRD/wRkctPn0YzSckfBkgtiLQL/Gfcrxh4E zv/QD+jidVrSH//TLx1JeschIns1cMFegSF0/9uDK7EkYWtxjuFx0InDL+D/fpRmwBoChJI2QgWA AuGBQ/9kIhABEYFy0luhKiEzUofB/xAgMLFJkDUARcHw0PCAGjD/uOF9EimxJ9UDsTiwEwIj8f+5 4N2yRPEN0SuhGsfqYS0h/4kyDbA1Nc3kyuPiGCGRdBH/4TF9GCOCKWDX4pLgKSGB4P8I0CSx2dHY JEAAQVE0AYqh/33h5Zcn0QNxgFO9Ae7AM+GvKfMvVEThbKQIQAA5kyD/E/E21zc0NzPrspIgk/A4 Y/+7wmFglAE3kevDOEBTUBVwt1kQi0E7AEKSIBUQtRVw/6XBbYA7Yd01jBA0cJhRmCf/PQQ7UYLx 8WJh0fFzgvE/E/+ZYZnxsuGZD5p0QQTHEUfB/40idK93nSCYnbbWQYhAgXH/RRKftP+RgJIxsqCY RnT60v9GswXzoSJGESXSMhCxs0mQ/2JA/gIxUKSTSiemkqTEptP//rKz8aSSmWBK8FUxKKD/xP8B 1AFBqAJN5E+RTzFOQamU/5UwNsAEMFFAUTKrQQSBq3H9URbGrVGsAVIBrAFt0FK1vwbBq9JUIKwx rVFTs96q4N7WCKGu0quAPOC1SuFOcP9OAFVBWQAz4KXAV7FKkgrS/2FhCfQBIgmjCuFYAUWimeP/ vjEpsVzhwiLGQLaQK1EtZP/4dBLxvrLMdL70XyNccl7x/1xRClEz4DxhMYC+cS1Sy0L/tWIrcYhB n4NoIWBHmdFi4v+bA0qyt4K7tVZUV6QU1EbE/7niYjOZ0SaAJ8KfQbmDJ8H/W4HMw40QajLA4mq1 nxNFAf9dAYPQt1BoIbmBwoLMs7+1f8SntLJ18h4HxMh0Z8XwUvfGUJuzkAExP6JOIMcw70D7bUHw sBAh0WHQIfLwsG1gv21RMSDH08hRI3LIlITu4P8z4LRD2SL1sbXCc0NxMrkw/5XhcwZzVWYSK6Jw 5XjU0er/0eV3byrv0Xssfy0md+XUqn/VCHag1iWJg4mig1G5MGP/5ZM1En7RjRBFkGLg4vN84f81 EodCgeMmQzuhyrbW0jUz/7UxgkHmwoGRg0BJkDtR6DF/fHBc0Nfy13KNoeWRJkNK/4xRufDvQGFg fnHlkXIRjyL/xWPhReFSWvDjMnyAcKV7lP/LE9YU4bLhMjsRhqCIUYcB/1yg3EHcEtthPsI5Mj6y 25P/flGNsotS8BGOwX6ig2NAI//oVOZy6JGCMRLyNAO0ErOR+8IAxzC16nKREERw6vKRk//rgEVF 61KuoJJEX0CnsOTg9+0BBWDrQcbtwMmwIDBwULdOcO7xTqDG7sFIkmO7gPvucJnQnIyQWjDkshKx ugH/8bFiQfG08JZLdvHzSpKaMv5rmcL8IEyl9JayspmimtP/mvSawemDnnZQf5zfdHcwMf+1slvz +iL6BGKCQqH8I/rz/6CF1/BVdvy2/QL9E6Kj/eP7YjGj1GP+1f6FqIUCwv90/6YFskGoVwryWiJc cgKxA6H/qUCpwV0EqTGXoAQRq5KrEd+rcaexBONepZUAvQihbdD/rCEGg61grGGucGBRCAJhsveu gAfhrkPWq9EJMGAgruC/q9EkQKvCYzGtsWLTtSGg72Si8LADIGUhlGVipmCUgf6UTJCvgYsgwmHa kVdDmvP/5qCHIbbB+kIYgemjDrThUf+IQIHTyrHN4BnCvrO5MXHB/8FBuMCaMQnxuzKosPWzEoT/ g0C+pLliVLG+I7mTbhK9tf/e8E+A74Da0FTSgHKx0scR/3BimWFmgaLDE/NwVBPkf2H/U6EOERwk GVVq8xp0GzcYxP9y9HUEvsN0Aw9yzSHDZMSH/52zHVN4xLTTzkQqgiDwuCH/tMPAQWfybpUMkZr0 jjTcQN+8cLAxu6EikVjwIQkwfaL/x3Eh0fwgtEMyMrdQs0C+cv8Pscqyy4PMYoBzMgPNph1y/1Av 0PXVMh32hD+FT4ZfUT//0exR6J7RUuXWco+jMxG5gP8ycSTC1tY35Msi1nXi4uLE/8wWDpT5AjSC 2FH5sTcy3jH/5wG3ATa0RtBJkt1ys4Jnwf8+seRRPfE5Qd4ilaHdc7OR/91i4TThNTsU4aLjAsDA yzH/aLc8cuGSOxPjc+SAMCA90P/X8D503DE+0ZIVQVHbsssS/zli+tHdAeVBr5AlkKCAkTH/6hDl YfrD7NCa8bwBmyFvQf/pMkFgQ2EX4O4wFGDIAMoB/lrqsUdSnpJFAesBnnGecf3rAP+edOhA7HVG 4e6QBWDrRIDucN7uYJQkYCIRDID7oUBEESHvMe5w3EBmgQyB/8fg5pHkgHoh5WFCNOgxnDP/b+FC JMJBDUFCJegB89f0A//0gsIApwX0ZBgE/HH1U+zQ/2rxUmsupqqL0OeD9PkEakX/uYRUZPr0GAR8 I/xlvdUcAf9XpL0jvaNxMxZiWNFbQ/7K/xVDWagCsxUyFUMVNAFRAtP/DFC0obZZA2FloAPiA/QD 8bteggTAhGIgXrQDwLUJAbtesQjQ3urQCSC5gs4IQfMGZAfhpedg4ghxB4MIYv+8FLu0YhFhUQfi YrJjUWQR/2QSykAIML1BCLEF4L3xv0H/yAC/Yb6iv0Fa0GUCv0FbAP6tWPBd4GuxfzERUgpC2pD/ coEQoREAzRDCca/gMaDokP+cxOdCy8FpccvBM9I1Mk4y//LBa7DBgQ5B26LNcPlx20L/mjL6IhgB aBOacd4A+bNyNP9UkW8xF9Fvk1dRF8OyNlkR/3AkyiROZ1QC57LaoROh+rH/crIPY84CdKEPZNqy EtDPNP90odrh2uJ0sncCGeXYcCXx/3jHHXR4xdGEJgAzMJmxKRf/epTUZtuyjbU1FTPTZ7EzEP8Q cPnh/CE5EfWRfkDX0f6B3xayp9A1E9iR8tGU1rIdIv+MYSVFD8JDAuEzgUU8JC9k/y0rL1ODlSl8 iE7fX4dfK5//4uwvZYAAl6EntCYRQuCXkv+K4ovjMmI2ASTDjAPV1zuB/0NgMmCYwY6lgBH5ccVh xWH/NjLX0JtBNjOu4ALQSkE2Yv+ZQyYANiHr0z3DJkI/cj3S/5fi7UKTs5dllB07lZXWPI3/k7Lt w+1TmCGQQT5SP1I4Ev9BUpm00uERMcyx+uBbsEFQ//qxnCOcovpSyfSxAnxgktJfkZNGgQzwZoBe IDkIcFKTnlCeQYzeRSDG756i/0XQn2FEckeARHOfUESwoFbvQHE4wAhwXuDe19AhsDbR/wPAAtAD gAjQoaH7oaCQybD/NtFHEEDworBdwJnQMdEaAf8ZEaTyF0Ow8UIipfJ8NJwS/8gxyDEToKeAprRN QU0VTSP/qGRN1nBCT1IYQU/Cqjjh3//hDwSFipFqRsOhzQNt4a/h/1Xje1YYQq5Vr4Kv8wqoFvP/ sNYLg1jCskSyS8sSsvmz1P9a8lvCtaG2NbRjtIO25vsQ/r0RlLfxZIC4cl6xErS4Uf+5QbhRudG5 0r9QYDFgNbsA/q27YLrBusG80WHjYXAV9/9j0qEwZJAWFL4kvfHAML6i/2OTY1C6EGMxYwO/YLpy vVL/JEBeQGWAGpR+QLcgZhJboP+ngMJBIyAXIRchX2ATgcFg/0zhwVHAlBqRprOogEzwwkLXAMKo sa5RUsxwlGSxHTL7ZMCn0HskkZLRbkF+0Afy/yDxcpJVxH9hw6OuOEDwAyT/VYd8sQxTDHLLQVqV yaEJY/9w4acRVAMikm3hp9GuAshS/9ozasJqomlh0CFzsn/BxSH/0kV3YtFyKpMpxHlV1FV4Vf8s aoHDBhrUNDCBM1KBBMUU/y/GNKGBIX6zkZJrAYzAr+D/bzH10dkhxjI1gulBOMC0oP9mwZzzQZGQ USjCQvMvJOb1/9v1BL/kMnhS3fnizzl/BK//O588rwYZg6GUApmCevDoQf/90Zmy2/PlEuZyjLIw dqPB//cBIWH0Ydchf5SWQ8zx2SH/9dGQYpBB6kH+IZqVsSC3AP/W4Umx7BV/kuxkdzGZUux2/0bD l5XuE5c17zhsgWxi8Eb/QBSUsu7F8aXtAu0SmJJMov+v4GrwkLDYoY9S1POToepB/1kQ9OP00/TC mnJPoqDBpOX/mqCkQJFSfqGdYFlwWWCd8kzeUrtQ+iD3jJ8QhFf5ELiw+PH/nkFaoVBK355QU5BT gp5BWRCcoIT+0f23AK3X0H2QthCkQMmxqLH/6xC3AFVx/tNVkqXC+xDNAP6cizDD4JuAkGGbEaX1 pFb///dB8fRTyGIBogEiptUCxP9a5AFzptIC9KlT18AzIKnt/y5GBGoEaePlPxF0ks7Sc2L/IpIK RAjDCOIkI8oSWfKuRv9j6AijCJQKRq92sIKxtXzh/yTiysa0N7Kws5fK038wDjb32UC0c1ZwrWsx EZG3lBNy/7gAuREUBLjkElERkbjhuLD+5/igufIUYroQFVQVIrsw/7x0vWG+U75ycBIYYhpRGTH5 FFCtvRpht3C+QnHBccH9GXC1vfS9A3DzGhS+NRkC/xnRvoF1J3UiwEISQW1ht7D9GtGcEhB3QHah v9G/omyRzxkhd9N4hBFwzpy6oHlz/7twGJG/sRrQeUF5QbSgGZD3d0EbMAlglB6DXUEAEQkS/65n 9gEMgSRVsOPKVrJCtST/tVEMsQNU2VHYYqmRCQInEv/BgbASzQLPsQfxgjLZAShE/8TgxBHVg48i g7cuwqoSKvL/KtWFd9uRiqAvhtGB0VKOpP+rJt2k0hEu4o0i5JFhQehQ/5gxP0GKEoqG8yHaZZkx nVHfMXIwwo6h54IDwFrCQUHB/8ThL2HGxKmwkvHaxekBNTb/2+WIF91X29LeFpC7kpaSav/i75Pe lk82X9Ix7FRBQD8h/+cC1LTb0kAzITExseuRzNG/sRHX4A+wEGDA8FZwtWOB/9kB6IPwUiIR6vL0 wUQTRAT/9aH0sfSx9XH3UZqh6+Xrw/9GF+xE7Bjt1qIj8RJKxKLl/0qi7/PwqEsYR/VLx0yCTJL7 Q9Fh4HPGQNiC6+IhYQlQ707kMYBj0QARc/3w9NKpQv/1IVTCVoJYodbhi9LWkk0gfR3AObiwUeG6 APjw+OCUZ/iB+jAV4P9z+jBUIVK2rVOwrXBCu1CtkOdSEP7eyZD9oPYA9RFQMaixQcD/xlCvUdfQ V+HE4M2hqiJXIv9Ygn2AT+IB8P1htVBX4qgx/w1wWKJUwsni9gFjImMEAGP/w8HDkQHRWudbpVx5 AmQDU/8jggHRz8Fe3AZJ4+Nfn17G/9NhYVLQQbvCIMDNQQrCyZH/anANkgv02GEMsSPCCKBjI/8j 5L7I9dNlJbMyZRX2IwtH/yTDyxMMoWl0DcZn4iUCw+P/ftNooFiwESMaYJvx/HBrsv/9AMWyElH8 EBLRbHJsgVeQ/xyQEpDHcRPSGJHIQ26UFqD/b9JvsBTgb8PJ4nAicMJzFNd38iAQDzCtDzClASAc ALfL0MvBaiClemEgAK1xwf91UnCDGFLKI2+DyjIaYXMU/3ATzcNuQHZBdzFWcHtwHaD/0NH8cB/A GYB3YxyQ0aMccf93wdJSGYBx8m5AyeR4VBnRn2vQyXB5gG+BbGDnrRTQ/9Ug1RF5kRbC0rQbgBAw f4L/DZS84VGgVzIjsrLUwgZ+1b8LlPYBtyUCoWZhs0JSCVH/AdECwSGCJ8Mn4YHiKRFh4P/q8Fhh TVDdEN0BMyDZ8N1E291DWKBa3cHe4lrdg99Q/97kYeAIUI0wjSEykeCUs3D+c40wrzBeXiv1iQTk 9O+i/7tRPyBhQonRTWDk4oJQ5UP/ggL2wkXCR4FBIZlyi0E0Ef80cYVDNAOoAkYBNMKYwDUl/5hx LYKRc5XNN0PrY5RflK//6k/sf+ukOk8p8l7k7WPkQb+Owf3Rg1JKYwQHKhEpQHCfV9AxgQpwazGb wLUxGOD+MfVB/BCbwVYwnxDmdDqi/4mRqERPkp2qnjUMgJqh5jX/oRdCYkb0RvNG5EekLxSiP/+j pvNF/aajlKKkR+KmQUwU/0wTnHEpUU0gf0CdQMOgqkX/XUHXgUNgEWBUkL4BnWCrsP8C4VfwqTGv Mdrh26CwRFZwfzHQ9JExYwpwanCxoK0AQn2scFpSIKxBUqOswVLCSqtvsAcw3gXg1gXgzquw/r1R gUFhIJGwMyOwAsOpEb+usqlTTrOpAlBhRSIAUUH+UloAG6DQ0JmQKAGOMbPk/wyVWlSoIVpUtFOC 8rVEWxT/Wxod8byRXDQQxdpyWVBh4P8uRbmvYIXrhV8tLsIpZLtx/4dQIIHnQrXRgVEzUR2RIAD/ dvAaYBuAdyF2wHoAtzBrgP9rQH9Ae6B7IMFQf5LXMr3z/8FBvbQksySiJaFjgX/S10L/GkTD0mg0 abElQh6Qw1Yapf/D4a+wEUFoUmrXxiEX4mxhf2vRbbF2gG0RxrFsgVHA1r/HdCFCbnLIVSIzc/Hn z1U/cOJwBMjh0qLR8Bege5T/MgA0YkECMDePQRYR3OF8IP9YsMwQcdJ1o3TQ1bF0AM/U/3EoyqEo MnDjdwHQ1NDSF8L/d1J3NNKCd9Ig0HsBKWLKAv91tNK2z3LK0SiXz+HVsdRh/2xgzrLVswYA0UBV EMTwF8H/IJJtMGvQMQHFAX7hfZFnEf+9ImZgC/BnA8FRM1a8kX/U/9qUtCGBIdskvDHcEUMR3EL/ 28PdMd00NtNYYENA3THBEP+A4OBwgeG8Mbwx3TFDETi0/zhS3FXbEDfTgSGA8XwRe4H/FjKJ0kGA 4ubzVhUzQRKEc/+QNV4DmcHnwxYygxDloo6D//whmSWQAkmhFiL79LRU51P/jsOPQekXpEJeM+tT iLESI/9eMROK8BWS/5QDkp3tn5El/4jQRGTtcUphRDOIhUpS6aL/5HGhUoagUODj0Yji6hQ8lL88 Ea/ABTHBEGsB9WEhbRD/T2IFkdHwV/CakPZl6bHk0f+zgotQqQEKUfdiUgJqQFJh//jEjAGmc4sD +iWgaPs1oXb//+OmA//E/5T8Y+bw44FXk/+vcFgGWLav4VllnHGOkFoj9wviWoNh4JS3MMfABnBm YEtbgW0wjG5QlOebcNY/aZDQYFyQW8F/QAXQa731DLCtvJClZiA7oPWQA6F/tyDE8HbQFvF7wNQh I3H3r2wgB4AG0G5g7wZw/wegX2BgBoBu8KySA+ClC/CM/hDQ0FnwMtFeUa/Ar3C0gf+yobFRAoID UKoxYuOqUGLx/2sAYuJkQajxfuAK8fehsPH/XsGHUJ3AZfKoQVIhs4E2Mf8OEw4F3DIOVItBtmfY AA/C/wywtfVqB7VxGuLD87VxP6H/nLM+krn/h9vhvoQJj5KEAf+G0j9hDqC3kHuywwDRMcYh/6pw GGIXUTEBwtAXocvg0UH/xdHF0dERxjAb0RhBeCEgsf92pHZxdzLRQCCxzvDO4dYB/3TUyODVgB0h dLRyoXOS0UD/HPHYsTJRwaHBcXh0xNEfYf/GIcYhx6AqMXNSMWIXYdGi/8cHxzIh1MehIpUsAsah W4D/y6Ar9CDgetHNAXTQy3CboH/LgMyQJZWDdPOY9ALawFL/tzAXEcvgy3EskSwxzwLNYv8kos0h I8XN8idx1nHQ0NDC/ypBc8HRMiuiH+GBwXTRx5H3JPLI88lx5yQR09HSIoIS/89xJDLUkS711HIv ctRhykT/09N9oXGiH8QX4nrCc1IXsf8XsR+RHzIfQMTRwyF4RMFx/wUwp7DAlNhheIHBUA3yNcH/ 2wBpQThUOIKzcjiiOjS8Av/ls+XSt8DcE66gkja3sUGC/xYT6HGRN7SBq1BoQI9idBD/gYEXMJxR 5dE/gFphmXFEof+7Yz+CoSOgIeeRf9iAR+I1/yYi/PH7QruQ+uA9Y/Nz40H/DmLnpLuSZ/Pnc0MU Qxg94+lBAzlCtKBKC3CewLfA95YB5TFM4DH6wUDjRbfw6v+hj+8PojjqAuoSSPVMA+nB/6ViRLPj YD9RVUM/gE6R9qH//lJE5eNC5NH0k6tQNALR8P1PwRgCMKmQAnDWcAOgBOT/5rJAAmUx+NGrU/zw +LKr0f8J0fzwtBFk4q6BAHL59fmi/64TQvHowULxAGL5IQUh/+H/WVLAsFm0sIlNEVqRqkEOQP4Y ZRCyEOlACfBPwBWArOB/BbDkkLehZIADIOSQw6A5/wJws8DnMLQBs6EDAAWw/DBlAhBKGJBjxguw XZBa6QfgY87aAMa8kF1hXTBbtpAzIN7BUFzR77dChNbn2AC1gFr1gFowkLfgy8LQI3C1YJDG/9SQ YJH6/8qg/9Fg0GAGIWEQYKHFybD/YNGt5/9fUcSg/pwBEAKhY8EzMgzRV6FnMf8KwWNzGzG9CNrA CWHX4b4k/2SCZJXE0AuwMqAfYAwSDCL/DhFm+A1j6DXodOchaUTCuv9o5hCyD3oRU7NxEdXhvJk3 /+IMFDU8k+Nzb3bps29U46H/5JDdMTLwGkKE04viHwEXsv9ygovielSLwoThc9IdQhdR/3SFK9Ip QdYAfWMhEc90z0T/ddFyoYJh0DV0YDChHqHYsv/bYxq1D1EfQIvyy8MgIYrU/x+ShRJ8IiHUIaEi A1ygilP/0AIkgSfihzAtUIXxgmEsIf8tcbjwJDIYUDGwaVBCoa5z/+j3nejgYQ9QjKHOcXOCcqDX fdKCM3XBxigxpYbxLVD7hBAW4IwwwBjgFyEBoF7g/4Qg3kFzkypi29KBs9/EJ6T/2KEtciwwgaGH pIJh4IMkYf8joy5z4mEtcS1zdQJ1FIrR/x9kH5IYgeS3ccEXkXeRepb/dUNzUReiGNEdIRsReNF4 ov87AAUw+RAOMTlQEYI4ATlS/zkwOPE1wZtjFgTZYhYRk4X/P5Lr9OtjJnEVxUAxJcMLQf+fsA7z NZDTsd7FDTNCYn/z/0xSwiJokMGUOUE3wWuyTlD/2fH0cJ9gkmEV4ZZSSlH8Ev/6Eu3i8zI9M6Ri QPE6EDfj/yVx+uA/0WfIQKHthUMimpKvPdM/INsSjkBrOVBj+OL/gTCPYPkygSD5AJ7wgSElcPpC n7BCPCA/kZbwPBBVkP/+IRO2RekTOKIZRoRJyqWh/zvg/1H/UUwhSlHyQfsRl4L/pvJNMT3TmsRO QVXBpvOqcv8/0RtxqfFmIHhlqiFOUK1B/6hiFYAMMgUSq7JSIgWivkPtrECcNVC/0XOtIgcyVAT/ l7EHRK+BwkFakcJBBEALYP9mE1LhrOE0ILOQs+ElcB1w0kIfUFKtnuClOPC4UP5SuFC4QI9gC8G1 sLZhtjD/DGMMgg0v1NC2ALVhNuAMstuPYAywWnbgD3RjD4VekP+2ERCitcG2IbXxtcMP4jsA/tYf MBIgtvCEELnQXGDPED+4srmBuVF88LlCukGt7+e6wl9gYPC13lFQu1C+1fc0ILwBYjIhURFkM2Nh YzL/u2MXBRcVGHMYOWSFBRGrEf/AcWfDZ7vxAq3yQsVpFMRn/9KkadNo0mnSeCLFQ2mBNZD/m4LI BWzPxi7GCqZScAPJZv/0oz6FPUSfoScgJxJxMHQh/831cWHLxnGEMZImI3GzebL/d1KLQ3Sx0bQp 0yxxdKEqgv99UtamKmMxgttxMiA04CyB/+ohOwI7EOhyZaDNEyizfaH/zbN683pUKpLVhtV0fVFf sP+MQH9A0MLYIeGz3JPhAonhvTKjzpHzs5B+gN/QzoGwZsbf0Nzgtb1/EF9AlK+pUJ+wcGGNgIzn 0JTcAf+Eod/EfqHcwYiSgnHcQGmk/4+B05Bp9jeRcTDbcThyxED/3YLbUJVRlVF/AOBCh0Lbs/9z kSlzh8KH0oJx4bI8UuJi/9gh39BzAoGwhNLkg79gC2D/5LN6VNIRi5FyQT8DebKLMv/O8n4CKXIo 8nsxKTM/oueS/4Rx59HoMegxLNGpAejBjyH/yyGfQKpAn+HJ6Z/Rn9HZ8v9Fc3AzoCTaoyQVV8Ca ce3j/5ChxZDvEu8k3zTo8eoSAQP9ULMpZzFm1JxywaX2kpnS//Xxv7D7ALHxrmPuQACTUHP/I7Ql AyT02xGUELKxa9CaQf/2IQQxk+KPEoERkQCRs5Oyz/dRR8G8cZ6AWmtShPkT/1M1lBBPcVPynuBP cZ7R+lH/VLXCkZ+hn0KfsPKxVhOt0f+mgXAk2nT8P/4EpJRZVaYk/67ypvHytvfi9PP34fJBn5H/ qkGnQu1z+uCPwSzkjhGogX+twqsx6pEEQcGBBfe7gFKt0jGlqTB4AHPSAcaOYP8HEq0iu8BhImGS BEHqkUPQn7Mya0AKwMIwBrBCpbUxf5QQeABj0rggZDCe4LggQvsLkQywSgyxtYBkM5QQtYH/ZWG1 gbYQZkmPYGdF+IB24H9nwRAAZ+Rl0WdSD3D4gN7/v7AQQ2kTaZYPhg9zaEFpM28PgWgybDSOQM7L UN1we/96QBLTuMK5MN0gupW6obsC/6mhGcJd4rwhXiIWZazgGHT/u3JxYxhzsDAYhl/hceS+o/++ Mhn1wDHBufbiHBMcCRyE/8PXwrc3tx6UxVLSgB4wxFL/luDF1SAzIM7ItPzWJIejgP/7UezB96Ha Mp/0JIT7p0cz/0qy8YMtEO7CjDGM8cxQ05H/PbQoUygTKAbT9YtGi5HOs//O0ypz5oEqMtBzg6uL cNOR/yyk6eGG0i1DzEHnQy9l5rI/hEM+1DA0g3IwQ9eBjM7/3UCK0DAx3kHnEeGkukDdQN/gwLpA 2MI28c4wpZngziCrNLDXkO/gwO8x8Oc6YObeMfCOQN7njlHucZMR/ZUAa0AAP4HfsOFQ41Iygv/g cDphNIDpkLPQU7DLIVEC/+qBUUGRwrygLRDMQDdxBoC/j1BDs+owkxGPUKxAc8NC/8tgOKM4kkj0 zxI2QzZjPLL/4vc9JoOS5oHU4b9g3dDlQ/8mQd5BKdLOw+dxy7Mnss8T/0BzMEJAdEGTQJPndNtx 59H/OKTSgN6QOOElkPiABxD0Qv/896fUfKZ6ip7of3J1YfGRf+mB6ZAmAd3S3kBItidyrf+78ejB yyFHogEx9fGHQOjx/+j1S0bxkahzrsKmgvPi+uH/9pLx8fHxebGoA62h2hAkE//CIfYTT9LqQcE1 klKHUF1y/4cg+UBRM1CRr+BNoFWBUoL3+MCHQCXQa54A+MDLMJ4Bv6yi+XLbMFPXyyBJ0UpT0f/F scIwVXHxga+hr0EDIPoR//kl+cJT4FKgU7D6M69ArzD/+GD7EltSRpWem01CBvAzQP8FwMsAAYRb g/gR7WCmklxj/wIiUkD4YPrx7UEbwn/CS1P/XpIFwAWwvGDAwejhA1G/0FlgQWO1YGBkQHsRwIx6 3l/g5wbQjtAZAGIRAP8aIZPwFWFvMR4wYFBgEOnw92CAC7C/sL3LIGQSBvBlwvu9Ycsgxr3xZmHC MGZUETD/aaC+gb3zvwG+cL70vvDLIP/AUmmRZmLBAmlUaSJpxL6B//lAaVJpxGclEPPD82v0a5Hv wyJpNMswxclrxcVoQRIyWxJAA0DebYE2YO88APf/bkVugDZgaYBvQc5Qb5Fv8f9VgHATTGAWIRaz 6LEXlhe2/3GkBvAYhRhlmEAWsrkguIH/GkLOUqfC7CXron1i92IAQv92ch6Td5N2xjdVeEd5BUMS /x2hjxH0Y/7iIH8gz9V2RQH/VVHshSNUn98it32iNOADAv8tEC0QOMIfIQMxA0DeYeUg/zZgKILn spyxmMInwZhB5oL/iAMn8ebkQCSCuJwWmZMn43/c8XjQpQTo8UsChxGSgoT/KOSJeYjSMbAxoptB 46IpgOOKwYvknNbvjBFCkqMzv5ezQoGLcStwMKLgkXtDAAM0wIywxuf3zu/3/+eQjbDoAY6Q5/Er kIyQNID7+XElkIRAMIYwjRBDkHbR/82hSdBT4JHhBCD10OzBUdH/7PZwYE1gzxGvka1wJbGq0/+q k6sTgBGTAR2jlBVIkj9B/5nSlWEnse+Sj6GVpDwF5BP/LxEvpIK0J/GLUdwhPYGPpP+VQT1R2/GL U/BRQWRBk0D5/6OBgQE/MT8yK2Ap0j9xPWH3onE38C0Qe5+W+I/9adU1/yTU0AADAdFBHbA5sEkD 85T/o4FJUpdk38E/cKO0ShNcwP9cIaGxHOCjsWDwuTGqNUuR/3UQSgJ1YaaEWpGncs6ydMX/GzIb RACRpFJFURxAzuOnov9LE1BxqqcIsJGmVSAzYVIj/68wrYGsxq1xB0Sw0a1wUqH/U5ivsbChr+FR Ma+Hr7KvMP8I9K7xVDKuElKjrPCPUelB/+lBDCRTsAfCscFVITThtzH/HFFN0nCwFoEkOCUEoYGR 4P9NEKixdeJaM7MCRQUjhKbBv7lwFrGlYHDRF5G5ka26A3Np4G1gIXNmgG2QumDn8xQBupEhY6Og LxBgkD4Ap4rwEyCM8K33mrD/gQD+zrlwvMRkQGVRZVBe8L/x/2ZTw3MXZMBiv+O98cvQF1X/v6EZ dhhCaf/DIMEBGSNrEt9nMxcEvNGHQItAax3hbRD/bQHHYWzSHALE5B9yxbHFs/2PUOfF1yBhbMNr ksdRbSFNeWDePSDlEMb/5PD//z0gySE00MrCzaFd4snxcFH/uIHNg0NBywBw9cy4y9Vydf/NcXOk c9U1IbSRdWNecQ4j/01SVvHQEw/yfcLSlNKUK0r/97GNUZ2ydsJ45vugr7F7Nv9ZUNP01R8vNHuT nsdwcc7F/1GS65HUVda1MszZpX+yT2P/gBCHsNtASwFDIdqijQB5Uf+dsJ2hnRFIsoBxnVPzsd1i /9vxmlRCYjeDPeGDQppjOST/giVAAEOy4UM7BKUCh0Dh8X83ooNSilKLsCIwg7HjgHv/jOA9EeOh jEE+NowAjgCL4f+atIvhPRE9EfVymXKVwpYy3ZASvelx52GZcN7osYrQ/+gSnTCGkKihMbTq03Bg 66H/SsECIURTzxFbAVXwSwB1Uf9W8LKRViEFo5Eh7QEFwq/x/+pDvKCSkIeg0dHR0pKznbH/nPCV AO7xonDzk5Vi8DSBEP/wU/Tw8MP1kt+04iOIEZoSb5uhkACM8PcyrY9xeWCl//dRlOKVUYRCm8b1 s/MBi1H/i1H2Ydvx9mGVEe/RnYPSsP+eIQLR0ACPUaFC2E3Vf1eR93aRjxG8oGOQ8U2R+9T8ZP/8 B/z1SeKDkodio/GHQAC1//6zh2Fe8HDRkXG4oaXi/8L/KIGnUwERpoHPkc6hz5Gn0v9/wwJhq2J/ wBCj/pJ01Kni//92qqeq2XTBt1LXcbygsVD/saALka0TB2YNJGDBsRLskP+xQK7xCPIKU5GBCnIJ MbHAv2CBVOGuNQt1ngKtcHv34f+HcA0A0kCUAGal6dEMVGd3/7SRyoEFoIewCQFFMevxtuL/zyAB hLhhAVIAoNP11wERU9u1wqkRKYAQkRGck/ATYN+54LkgvhAeMBOhKSIgFDD3FOBtgcfwKW2BE7HH 8LxQ94sQFfC8UO9y0MXAbwC5sOtvQBRxWr2AWh1TxAC98f/FEXDURnBxstNQHMAhYHHz/77QxVHG oHKyIWByUdHQblD/w6HFIXREcjPD8SFRxON1Ev/D9K1wIXEeQnahx4F2odMwqu+dAPfv4P/74PfS oPnIAJTvj1DFYXEhHqbCUP/G8nmzIJt1kyFRj1DGgSHT+x4wlRDW/AA9kMggjQDDIf9C0LlRI6bJ wbhRqZBIQZ3R97wBndHSsZRGcJLwy1HK8v8nEickgJeR4MmByYO50ChB/1q0KWLP1s/1Kja1UYdA 0iD/Ks5mENJC0fLQ4tKgLSLTNP9H0KgxLeQQ8VJPU1/6OLcB/wOlt5K1A/hP+V8PkwLyoYD//kIQ sabzuyAOgrghqkGp8P//ssqDyhGRMpGkO5GRpNCh/+4jSBE2QaKwNdOThDUxhLHfLYEEFKthqnOl Ugih4S0AnzxT8aI/5D0Q8RC93j+z/T0BzuUh5SA+suSQl5GXYv+asT9Rl3E9QuawP7KZAJdz/5jj 6YA6UPCwm3LwUOmw9+H/sKHXorUBt3G3cqGR66JF4f9FIurRz3FE0kYCBfFFsZ+D/7exRgVElQWi CvKqEUZxqtF/7KHuU0gRLCJI4klQLQCt//cho6JKQaQTSgLzcMhAm1Lf+9L74Pby32I4gaXgoUnU +/wA3BB7ppBQ0klhOCHmkv/04/1C/JLlk+VUUJFPou7z/+7i0kALMfsRjnXPke5gnOL/EdGrkmuz a6cDMimw62IDcv9Gceyh7xHzkvN083FQ0VXk/1av9OHg0eoytoESMSmhDqH/khG00TsU/6HacI+U t5LO4v8JoP+hWmIA0gLyuyApkgHj/wRxkLGPAioxWpECc13hlWX/AnHhoZIRX0dGs+sjRaLPQP9j oqFhCGFh02DSu6MIigji/2OyCcMJ4QiUvGdgh2CzBwH/ZhBmAjWx+5FnMVUwSPBmt//TME4QDGLu 0NKg//LR0KsA/9NwkhEogVshgrIo8c6Sw+X/ELHT844ZMiDOsSNw3IAWwP9s8BTw5vBuQRZQbmEU ABPy+hgWUDl4kBQxbjMjIBRC93wAbwDJJZQhQHyAFnAVEP5KyjEWkHCAykAWwsrScdX/GEEZYHKW y5VwgXCBHmAkkP8Z8M0ictHNAcvicNF44TVw/x2yHcHPIdHQHeAWUPYQeBJ70EFIwOfpoG/QFEBI gM770TH74P/2cHewfRAsQEzw/3ywR9DQAncycyByUdNBeXH/V/AfkR9jdZV1FR6DdyEd438UocZg UDDfoHywfKGF0K3/AMAoACSSkWJ+IX4hffPYov9HANeyfiE1Admi3IA1AEhB9px+4RagjCNj2xMn wADA/1jwbRBpkOqARnC1EgDCEAH/hBeEQ+tQ3cMRsoZh+3GGM/8sIkiBhROGseAihmOFYjwh/yzy R9CMAjPziEMPRIpML9v/ikURwYext4S3gxCQEdGJSP/56vpljhcRwt4CtxPc5Y+J/+plt9BHAJ0Q 6zLrEo/T7AP/6/Tr88pA7VH+ULbg7ZKH0P/spn5Rj/HlpKGSV8RH0EZw/5MQLQBMc5mimkI+oD2h FZDO5z9RPsKYcKXWd7BLMO8ioJi19OE/VGNKQH1AqBD/mBGas5dzPQCZwUFwSIGhMf8kYA4gREOe AZ6RnXNdQfcy/50QA0FgQZ+j9vSfla4UMcL/RSFjgUUhQ9FExGOzoVMI0f9HoWWhwDOi4jdSpyGj Ykmh//2lVkJNsUnASbBBwVWATYL/O8GGYRZwWVKWITvBPCGlsv+vUUjwhdBH4klBSOFPcVXS/6mx pxGwQqkAqPGpg6oxTfH/A9Re0Y8CRBMGgcDhp2NVYP8CAaegLHCjYAZTBtQGQQEx/2aDNeF/wHiw qjGqMa8TVxL/T0RW8lbRsHJVwgmlCbNKMf9cYjSBXNNYcp4AMYCzgpIy/7NyXOJbpTUADlVcEr1A XlH/6pEqMY7hUiG38RagXDFcMv8Pglsx+jANQrbgt/JeOljx/6HiX2RHYUUhnpEFIZyBVOH/LVBl g2G0YVJIQbtlVOG+o/9isbwiYye95RcDu6RhohUm/3iwwEIHxAdkB2QGEgWRBlL/OCBQELSyldHu seqThJHDs/9accQ2w/Nf0H5AqzEyQZ6Q32oR2dJwEFCQcJBrV6BwUL/HEW7ByMJt4MdDINJCeJBP yPBuVHbwycBSpXigpf9v0SLgfRAmoMfAybBGcDrBtpzKQDrBrS1QyvG1cfL/cLJxsXBhzoUlNMp0 xlB7oP/HUNFh0WHP4Wywy1DNU4XQ/3eAcCA6UHgSSmBvEHyA0QH/LJA6MNaw0oGFUKhA1xAtMH98 YCKhxyDS4yox0DHQkffdKVbewtBvcNMhc9Nl03L/dELTky6ifAAnU9Ex0QE4EGbvQQDQkLX/8vAw Ypz+ztDAIzBIsAuh2QCHIJUz/7OB2BLX81xRMqVeRLbCj9L/Y6GB0teRfZHaMSTQbHB/4//Xkmyw 3EGdILPh3PPeBd1X/95w3mPeUYUZSBPgcznXhsH/hUeHUZTRQxFq1IhPVELjD/895d4hQ7Bcsl2E nLIfFFQF/0DjjW/FZbXjtyOyYtyj6qL/tCMd1R3majKtoGqRWkHlkf9GJNw0EdFc4O2RRkfu42hi /1rE3gGL4arw78KSErMikXEf8FGn8fODl5KYw9ac1u+YgPGATAEw0N7y8PHA/wD/TAGYxJm0meHz 4Zm084GXcv9OIf7QuHFsMJzS+bWgs7nx/50RnRT3cayiOAH4E51HnaT/nUMfga5BUuODEZ6jY7G5 kf/7NpKwYqJX0WKxokOTMoUy//zh/OE512dA/QEGkv7xp2H/OXeUsCUh14C4s4cho0KwEP/fQVYh XqGqYqkhsEMJpLCR/wOhrxFb9KZEuQDZAO+hZaD7p5Hw4K0v4KYwCJOqZAQC/1e2VuKTAWdABAGS 8QQBrxH/hyEEAQLiCPWwhAqzCqNcJPOwPJwQpbWMMmuiUlC1Uv/c8q3xDfGL0epSsoG38Q4C/4vy abFoUmgzi0E/QWcCDdP/kFGVBZYBguLsIg0CM+IQUv8SoZCCuXG5EbkUE9JVsqEC/xRhvTC/8cHR B8EaI280wKH/GkDAMcACFfOikRUiFfIWZP8XJBaVFtNxUniwFgMVZhoz/3RUwOJ09cGRGtYEELey Q9L/tWIQ9R1iRNF3pMQEBUG/4v/qIZ8g2ZGU8AOg1qEgUdwgfLUYxsDIMCKBx5LI8Of6GNYgIXuD xxF6gXug1pC50pGU1tvwyjCwkBggIP95wZXwkWHZAIIggAIiwCRBW0PQBIBCJJTMEELKMEL/ypAl cyVhywMlIMqAz7HRMf+UsC+g0gDV4YHSxsDWESdy/9LA/7BfQSow0sCUsCrw1uG/8XAxMYQSIGCn YJfArTAA/4TgL+DRIdGCLyErYa8Q0SH/J2IvIS8hzUPVEC3gy8HKQP8lgdchIoDNUicx9ACEsTAg iTDRrd6JcOf/tYnAO4mEiYGliZBMAClAte/7/ODXUDnXgDZRM4YSQkjhv5BhjJL2cYzSjURnYzna Af9Gwe7T7sHrMR7AqXA1Itag/0bCzCCyocXCraGtdA/j3lL/3mKRtcZQ4OI50zjV/OGS7f845mDC F7Hkta1CPYk9dTwC/+RZ4iGWYuYxaCEOIcQSP+P/rfJRITxTN/EfMz3vH0Lecv/pBGr0HSJFVsQW RfLD4VSA/583P2ExsCgwoDPXsKBDkBP/oII2ETYSRhFHYR0ztXXmQP8N8trAtkDYcdexHLDcUbiy /muvEaghS9FMN/KQTULzJP/yM0yx0bBNkvOiS9GnsfOG/wty8sHgMNtxs7FQpVCC9pL/tlEN4VRh UrL5U5qB4jC6Mf9S1vcU9xj34PfRUUK6M1CB/23xvVH6E70T+6HvohMi8CP/VqE1QVcCVoTvwVYh ViFVwr8FUPDwL6D/YMXQ4MGc4YH/8ADa4RjA4QD+MfDg86MCMfv/YFXDa/4BtQJjILShXCL/AvFc BAOxCANXFOEgAbBfwP+1AQuBTzHxEQnR2zAD8igw+2JCzCB7AEF9sKTSukHgwf8DocZQX9Bik7nh CdFklGSa/2NCZHMDRGNE84EJ0qjiZaD/5kIfUsShxKbAwmZCDdJ2sf8P85ERZfKcxDhDmSGaQPbA /zZh6qLvYRBjMeCMwWdDSKL/xHNnkRIUSfKkAfwAEwLG4f8TonJicnNy8W6iB5R0VHVx/3RU/IIa BfxyyXdvRHBhy+L/cKNwlHDBcGTNN832yiUBMf8aJXVTyXIaMB2zduUPcg+C/x2qDnJEgaPxo/Ex 8tiR2zH3I/ADoIfAWrwQfEIlgHrCfyZwIMAikXujKFAr0HqAtVoh1hAxKlDcIKVPwGv/T8AEsItw fbDW4KATNhGQoffcQRUQ2rGc2jCzobVRfRB/JLAlAX+RJQKAw9nGvBBS/ycBJwFdwCKg20MBICnA gXH/g4GDUSsxAZBbIfDQKfApgfuEoeCg3iAgJ2IrMQWwKpL/g4EqE4XiAfCFsOAAJ6EB8P8nYSEA KKKIUSZwJmCHQSiR9+HUXgC08e9LoIqQiuCKoc+KQonE48yKoYy9IiCI8P9UoIxFP3Pl6ebE5dU/ wo4FXwGQMiFEgR2zUHFaBVCU/zQxMiGOYkWENrQ3pDcVOEX/OFiSxpLlOMS3sZNUOPNiIf87VK8x QkQ8T/EqPtORET3Y/x9Sv7JDQ+fTDJLCVpISPZn/QgmRF1FAkKJ3BR1Ed6JEtv9FlESiRdKfggzx x1Cg0vqB/8dQ+nF98JpAjoKgYqDUolL/+ZRJIr/jUiHz8hBkEhVaUd+yEAJRMBBM4UxQzkyATHP/ TSKlgEvRS6FOp05xp7VOs/djdKkxpUDGXmASYY2Ss1H/UCSqgVC3mmKt8FCA9IJSNf9S06xkq6RS ZB8zmQBRI6ri/1AzT/gUAK7TMeHGZknRshL/sfJVwhUQyCEOIfNzaUFYYf6tcMHXgMOgseEVEI0R MfH7VrFisKUpgKhgtLFLIFiR/7Vk3tBkJBASD8EQg13Ayea/FSDPk1ihtUADMTAQxuUA/0thEuJO cbmBukDXQP6RWoD/uAB2UOhxSdG7E14A0+Av4P998BpwMEBao7yjWxG3UTBA/74AFwS8ortiL+AV YWRkvvT/SxFO0k6ArzGaQETRaEFpwv/q1JozZvK/tfFP8Qc38VDw/0jBjxFoET+SHgJp4o8SmkD/ VVBPocXxxEEyAjHixtHG1/ttwbIzY8qUyRbI0siydPP/IrURg8iDz/DPiM/GyzYkxP9wYXMyc6EN kHkBzcVwRWGw/yehyhRukrtQbpG3sVtxZ0H/dwdEAXcE0fjlszWASHHTArfTc7pwcyBzFeDdYBjU MH99UH0Q1hDV0XuhLiLUMBDf2RAvFC4jfyDWoTnQUHzA+34gYhGtfbBhIZPw3kD8od+jYUAyQ9CO YXOQnHGAf7H/fyB/EEPQE6AzcrnQ2UBQgOV9QDl+kDmc0zAzsn8w/S+QQjLwfEHa89kyfxDYoP8N EHvhf0LbMoHRNUGLMOBw/4bwsXB78C5gtTDd0oUx3bH/26GCwIdhgrHgEqlg4lE54v85weGj4TKI kWIgfIDVUGLgfUyx/6cgisKK0YqhPSb37z0nPPSJUd2w1teAH9EfEv8eZVCSP7VAt40SmYSQgnlR /yBi6PR5MWxQDaHXcJ3RVfD/Q4Gfc6LyZnTC5+s1RgLsQv+SspR5WzGT1+5ik+GVArgh/5VLkiSX m5aDmuHxB/BJ8DH7ZjXCIynEkXZiMlIH0sHF/xvY9jcIA0V1ZpTRdXgU0eV/+SmOMepykFGhMvqz +zJz//tU+mGhIawAxFELAKlgoeH/jsGfdE11loJl0fOSqcIgI/9+QMdRsoBhELShpXH/0lni/t6m ZKkxg/ABEKeRAlMCEf+m9KVxXEICUACRqQG1wbWR/11ibRED1KpvHcEGAquDB4T/BsnGAAiykMCt 8cBwrDQIpP9oIazzBlIEU8QhqnKyYmRm/7HUsFJuAGhRV2WQ4QlDs4H/sCHnca/Bc5HEkbGhEIK1 Ev84kL2y25F+kbCiaEW9tGlB/3OQWCGyYVghwfZ+ILOQEpH/AkGnUADhpuICQQGBpRG6Ev0K8nO4 YLVQlZG4YBXwFSL3uYGLcLmhnLtkvRQWgRbi/70ivHFxAn2QDRCFMBgCFjD/FoG/ULlCGSMB0QMi s4EkMf8NshpUdIawALPQJ6GyQWWx/x3AGtJ2AvUUCALxCR2xQHL/dERrQlFyQcKZcR+yHjDnd/+N QbERsOHG0bHSXXLIRM+U5pSVMBIghJSzgXyxfRP/fKLPp8hgz/Ikw7RgJNTJKf/Pon+TzTTDsLQw IgAh8YFk/yeQJ1IohMoHzlXIYA2BdEP/nbMq052U/iSN0UOxtaCUUP+xIDJzsoHTsNOgFBCUIFsg 72vwLhAvhi6AvS4gLhOJKDMuEtQhCEK0ADEBc73/1zDUcNkR2LANgBOgFfCYkP+tMATxwcEJEB+B VPFYYGqh/zTS2uI1UI0xxJA0cDRjjcX/jgLYwTaCjcGNxDThDYDacPfZdNlDOEJauXDgYOBRkbH/ OEE34d4R72BtcN5QOEE7o/+pUDhQ4FGxcDmB4NCSIjvBb5TS4mHeQQMw9zyalmb3f5chpyCXQgAw l0E8gZXwxtb35QECQOcNgIQycerR/2LRGwNOgvQ0qcRBpUGyHlH/GgIycRsQsBDoohoyMnGCYP/l UekSxAIsg6yg6pHAYqwQ/1GAdgTq5kU3R3NHN8nxoNL/odfuwe6WuCDvYUkw77NQw//yZaSf8dgb 5PITYfKZ4vRi/9exEhAM8g2QTyXCMhu0T3//wLRXclEi92FEo9FC6DH8pP/4WUBx/JEsMfwDa/BU ZfsD/66W+rJUYwwhVvLSRPdi/UT3wLXwYfNhMeyhaZH+5G8B/wHgXMJcEWyRXBFaY1wwbQH/tNEA oW0BEwKVwXNCuJFaYv9cgxVgujEhsA2QCiFBcl6Q/w3iXmkG92DHBsQG9F7kYPX/w6DBkV7lBnD0 khrjwZJjE/9OYQkyDABdwg2AZXInkEmx/xti8mSpAwkBDVHnERIBFjD7ErACUJxb8RKhEnANgW5A /xIgDQBo0W2B3bDcITLxMXD3WVBooW2DjMdhnYIbcQWhrwwSedJrdBOQrRXQxphw/2yAEzBskhLV XJHcUBaQ7sH/FKFIkW7RE7EU0UiRF3IV0P9vwdcwySMOsBdxFoCR0HJC/zvwFvMW4dcwybFvgHIT GPH/cpFzIVuEc1R8sSfB5uMsYv/lkYTCZ+DS0UnAJ1ALIHVh9xnAIhANkGMkQShhdaJEAP96sdDx GcDREYxxzwIKMQPR//RFYUH0InjD82TzY2ZyCdD/7zLvoENhZ8EPcXVgwhImgP/WIyZlJDJ+ptZU KCQh8QwA+lIKMFonkAvx2OGBgSdQ/yhhgvYkMSfyKMOBYQvTvzL/1cF1IScxDYHa1ClE2wPYU/8L IOfUnbf+UUNR2eMx0cTS/9/hJkEfUuhx7jD+4PugFrD/LfIvhC+FkRAu8S6QLuEu4f4pN/AxYDsw OXAvFOQBFrDfOzGH4DBBNVAKMJzqcYxxv1BzimB1kHVg76FJoEqPYn80s46kSLAzEecQj6Q0g4z/ kABqoUkQL4HpICsAioA08f+P4S5hjdIzUS5wNhCTZJRR/5xwkaKccJHUcTDj4DgVklP77NEM8Oc3 gZQikiCTwpWE3rU90D0BPQQ80K09+T7R35eC8TGYgJhBEyDvW+DyAf85IZIwN+AfUXnhdfS810XC /6eD3mIJQx4zGgLEsgTgjKL/rbKcJNjgCyB0RL9zq7Oakf8ag3X5USOrQgfRoHJH0kb5/6EXR6FH GEimSAHSMaPpSpP/G9R3JEuv//UdwBoXA5EM8P+2kG0xzHHNwt+i2qIncSZA/16Q9oGEgRuxSyQI MGuDUTT/GnOE44TS3oasA6y0K7St0f9OoFaRhgAugAgxCJEIZAhi/1aCCIFWkURhSdAT4CxE01f/ YKDg8SCR3BFdsVkCFBETsX8UEW7Rb8EZgLPFWmRa8Yz/XCG001shteJbYFx0GSRtIf9dAUbhe2EV 8HuCaWFnIV5S/7hm1LG6NWB5YYFgmtSxTmD/TrBgcAQSX1Ji8mHlYEC74f8yQRsQxNEyMmJ0YqIg Ic4h/7+CTxO8406RQCFdwWVBZFHvwPFqgagxcACthoBv4BGh/yfAguIm4RyDSAAxcSHgJ8D/3LHc sTPAvqMnkHmxo7F5gt/Q8Ccxa0VgMH1QtcaTwXD+zlwAW/G1lG1js6Ftgafx/1XAR8BuUA0RrtAm YMoBcDT/xADm4MJgctDKIXESyvTK8/9vwCUyrtBvUXH2y4DMw7Yy93NSbEC2EpQb0oXinHCysf9Y sUAghgILAkHjK1aE4mBwf0BwQtI/gp5x9VDccNACe/2CYIxqkMoQ1pBCxNIyeZP/e9Ar8UmgHsK8 BJsCHfGzEf9t4XrTXbKdQdyygRPZ4YLj/9oBbjCDst0BgVLbwtw12UH9vnBCZEB1kNSxdSHFER0y /9nB3MHcwoQigTKCY9yCNdL/2aKCIx2yMLQwsllQSYGGof/eMyki9yI0Ix2TgtFJQIRC/0HC3+Hf 4XQRQ7FY4UJAZZD/yiDhwYoxijCREOMh5QHjg7k849Yp4+A9ceng5+Oh/eRic8IAPYGIwIsjj/GO Ef+ZIEJAV2RgcKOxTiLFEOkw741A6LPEQEFxMeAA46Dpce/nAemh3LDpwYRgMIRRazB/4xA/gUMR 6dGO4+qCsuC1/+qRj6DrcpSAkjDrYOxz4/D37FCSoXAA72hA7kXsdFlQmVwAvf9v0JjApfeTMfvt Ae9D/1vglibvtpe18ZH/77DyQ/Iy8PPyAJjgw8DsYf9B4a3AdFJXUgTTseIBEnZi/9OimcGZl/XT 99L2xJ5CzrP/nSHfgXgy98O8EtNh80Ges/+ncvRkBXIFU1NzYHCE4WPQ//u2+6H64taQoXL6xBzh oqf/+4a/QajEn/KlT6Wfpqdjg/8BUXgR0PACYcEhblBcIgIy93Kgh0AbEaVwAM0QXBFyoP/GMXPh qnf58bIhUnEGKq0U/6vBmTOewSmxYEWw02dBruv/r1dn4LMAY8OvsQgBCkGwcf+dIWUz0jF7gQOg o2Bv8ZWg9q1xoa7QlOGQDHCjYIgg/4QgZmNtUWgFITCLAEaQD2D9PnDe7OCSwM2RzQXNEnLA/3Fh IaGVkY1Q26GEEYPhHIb/t8ESUrjDo7G5cb3wGZIEEv9ts7miFcO7s5xRnRFtxhNS/9NxH8BtgBOh A+C94W6FvQP/E5IVgRNzvMMEsQEivYG9gf/PIN1wzhH8MbcxXYFG0Mpw/7dA1rPIYOagvcSBwoJg 2nT/2nGBMX8hxRFbRNMhH3EFk//TobFS34E7AYYRDFHBIiEw/8GBemIOQbXws9G2QcLREHH/IzEJ wMOAOoENsGZRInEjNPvMYSYAnH00JFQkUcqxyrH/JaElQs2Ax+CPkCWwJgDEEP8mEMnxzGHMyVwj G5ADIR4h/+FgdCGCMijRKNNMwQfxKYT/BtMp06zhKoEqUykiuICMwX/2gTiFhaEpMwFiHoHBMN79 DkDv14ACtAOgNCPVkeFg/7CQHyGjkTP2NWGKJHZCNjL/1eGLAjgANeHccTQBi/I2g/tj0Y0AUtjh 9oHFAYvzM/T/iacDkY7lHbLfgY/zihM5Nf8dso+RAeEB4cNhLtJFIB3x/4/FkVOP9vLwKmHFEDX0 q2L/smCDMeFgGrBpgK8APELjEbfjFjygRoAhPPHj4Bg8xv/jQjxgPmGn8DvgP2HnEuhw/+lQCeER cBtAh/D1UDNAA8Jv4PIpQEQh6WGU6dOogBDf/dA78OrwkiGCAXu4gGQB3x9gCQL3cK8As1Ctm5Gb M//pYOpy63HsYOiQNTACgQ/Q/0aw1UDswD7Q+6DDIUfiXTC+56ChzEBIcuzR/BDWwTD/oJLW4BBg DvANsKDx8jBIAO/G8PHQSVC0wO/xJPFRo3H/8VDxQklBD4DyMqRh8kElsP+3IMuxZ1FFIKsy+XVN glsB/1pVWCP6IROw03H0FU8WUaT/+AIqgrER02LFAs7U+KH0Jf/6A3Kz+bMFdAEmVFRUgtcg//ui +sE6gQIAVdRVpK+or4P/+3CvMle1TdFYVv7TWVT+o/+zFgBd9aK1U1vSELACMmog/8FREEJdkCJx wnCAssuwt6L/JGAPEBCwcuP/g01CxZH48f8GFbnyB+KEQvbxBfJfc7rj/weUCgJjsWKSnYCc4XOA Q/D/nME78HYQ9oFisnOA93H2gf+DIweAZTIeIMNh+6D9ERsQ/8uAJFHKIO8wJPENsGdxIkF3ZuHM NMdRcxBRxkA8YMbn71BIQIfBzufpUH+QAgD9DaCcEHRoAWnhtvHIowyh/y8g2cH8QoIBDBHOkSpw xmL/EwNt4nMxFsHzskAxbgVuRP9ucBeSAEIV0poRbaNwxRbS/xOCyIZxR+YiBJBtsvUyGOL/GME4 APtxTEAboF2Rt5NcYfdsIdnh3hCUIAF3YdsxLGH/GjIDwNtj3BDQs+agH2H6Qv9fMR9zeNMqMfcx N+HOFCNw/SWwtbZhJhDUINRwTEB88P+H8GsBsPIbMSHF6ZANgSYQ/32RDaF9xSMQDaGAkYCRwOD/ wHImYX7hJjEl1CYBZuElo79/8YBRJoRp1CdyTBDGD8D/TDCH4B3zvLD7cChzgmIoov8K4YVRqnPd woPThIMBYQdl/yliCuLf8kygLgAoISkWpkH7LGGHkO/b4QOQ4gJ1geJ0/2whZjCAUF0wL2ERYR2T inS/MoISkDMRUIEs4dCRQo0hvzLxLWHk4S1hi6E6oGsfUP80kTIhDEHRIuSzMuCMEjZC/4846UU4 Io4R6ELoJDPzksb/wZBngJqh4GE7MfLR7AFl8f8pQJIh7ULy04WS91JSJLqR/yshrxBnoCWRRUCi MJ2APuD/PMhHUD2wlxGYA0xgojA+MvuhcFcgvQeAsXBCwB8Q3ACvP5Bj4QpBELDeD8Dvh7H9J2De HRBBUUPxpjGCAZry/5rRnOFiYiLQOADcAR3hHAFPOdDA4DUwDcCc3gIA1nsxoCWQUpoAPzAv8HUR zr/4kffRSCGfgXWAJ6HeoKHr+bEmoP9G0NZ1gKGBAlHdDlC1paChoBvA5yNw4dB/D1D6oV2QpCBM IPyBweDe/6OhSpSkM6QiS1H+OidQ9GD/JGBXIPWAZ4Ao0WUyGVLMo/+no7UBtFG0VKbTThJOIVgV /06TA0RUUwcBKeI4wbriKXP/UeRSoqwjWBQDpFRSW1QHdv+rVYzxxdJVAVTSr3QJpxzS/1WGrxS/ wWWxXqPJkVhvDRz/WlwWMQUTQLEfUCMQwuC2cnvbciRg1rdQLFDOQyeAzv23ULW3sXryehBy5F7S rOX/YQKD9F/EufVf1hOUYONhwf9RcUzBvIFi4pzh9cM6AXXR/yjxY3UHMLxTmJC/MlDUwYH/TEAl 0SVBgJBqYWmhEaB6YP8kUTyAIjBMQBuhZrEmwxGgeycBh5B7h8A94KWgJ2AA/2zwqvGAYF1wJwLE khGx1YH/LzNRQDgATKAuwTPSbOFS0v8uVSoRzHO4tFryzNES8W2R/8eSTdFzgCnhpvK1AU7gAnH/ yFVx9MfRy2Ijk6cEANZTI/+qEa3RknExoONhESTOZ2niv1xzdqF2oX0QgaER0JR88P+Z4DIyQHDK AXEBytJNEV6y/7RxckFSwHmzL2FXI7Dh2fD/VPB9A2agdZDUwRowasDUcv8oIdPyawFI4B4Bn9Bd MP+B/9YRZlLXcV0w18IesfegfTT/anMvQMBgZrFmscBRZ6HAIf/WEzAxsXDaE4CTadPEUds0/3oQ 27XdQdyygvDcIrxQUKH/4NZM098EA/Nfc4RUX/KD0f+DoeDShoF10Ybg3gKFYobB+6swegHei6OQ 1c9RruC/4f6ETEDT8MDx43EbgWXRdoD/dAHhAOTSywFY2MmiyUGr0f/MEscRd2Hb4eHjdvHTYHaA /4uhdbHksuZAQhRCFOjRdAH/6iPssFbANhFboU+hTuFO4X95MXkx6EPs4tyk3HKvEAj/VyDtYB7B ltBpsGSw3ABmsP92EFCBddBQ0XkgpkFs8O6R/+9RiMF8MdnxMwGW0JbEl4N3mAGWIPKAWnwAlsGV 0BD3mQHyEIRghAcwkECZYE7gr71yZKGZsR1g54eQ99vAWv+HwP9rEPEwQtwBjP+dcJIhmRGegJtA BzB8MMDg/2PixQCDYfZQm1HTYGmwooH9ZjDGdzCAIGmA+/GRgFwhaeHQjN5mMM6AcPlB3v/30VIx 96H7wVPkooGu8MRg906A/FGigqW4MVVS+8HAYOdUAoBw95Cl1rbA+7Cjgu+j8qRkpVT8APdp4P9B UZD/f+HWUJIxJuKmgwvks2an4f8BIqcCsoTIEnkCAuKoBO7h/wNWBDMThIRyuWECI3iiXIP/BgZw 0LkBA9KuBAfVXcKtYv8IAzlxCXMKta93zyIJubAD/8AR1jALkbHEy2EhJrLTDP/fDIZm1HNBtUR5 I4wSQbYx/30QalB6QBDBdMDP0NTQtsH9tsDWxBLCEWuQuEpdEhWC/7mDFAbfcrozBYA6427xu+T/ FkLeEYaxGAIX5JuRcSP14v8YEhbUvcLeEbyCulPKMJIw/x8wC3D/kK8QgFHAohrhlaD/HmBrkB5D L9GegBux4zDXkneA0bZBh7CEHTAdIVLQ3v4AxXGP0ICR1bJ9QtPxfYD/96B8EuLQgkCCMYbiqsDS 0f8gdiAxqJOnMsdTIUgAhXwm/3uyWvJ8B8xUXIPM0rhyp6T/JdLKYQJwRSPGIe0hzgLT4v8oUtrJ tlHbcaJwHiERAZng7yoSz5HUoKswe+6iZfOE1v+o0eVg9lCT4e3hCULWsjKlX5rg2NLXlGuBGvDn VsDn7q3bwP1AVeDGVtBqoLbB/zHxwjA70CewLULDwYny4vH+lC8kLOEo8THxMfLTsC+B/y+BjCPD oNmx4zD/scFyM7H/wbPOYh5TNSUQcdRAKEAa0P/b8NFhxiHqIZOH0BE8EkQC/8WA5dC1cjmyOTSp w9zQtUH/3fLeBCdQlDQ3YZST4CBI4ffugLYQ98BjPJPj0+kB/7D/LKFA4MCREhDWcWVSrvHGAP/i 0TvhyqLLEMsQADGZUg3z7w4Dx4NpsE1xhOGQLlAqIP8JsIPR4mDiUeGQleGukQVg/+FBByGpZs1S N7KqkUhBBJH/qgKtQiBy0lKtQt/CTwA28f3sUWPFAPWwdaBHsb6Aw6D/+ZDZEFGQ+ZCvEEvwvuDd Yf+qMidQ9lDqEU0RlLJGAq8Q3ycQvsDY4E0wS5G18XCkoN/CwEqASzDyELxArRggS5D/HJC74E7D 8UBM8QVg/9BNAfdyIbpgMgDW8+FN4k5QO8B2//dB4QCc9WFPw9mQUu/WAE9w8vTl0IzS4rpg6xD/ 80DYsAmwKdFTQEoBHJDywf/6ofpC+uAI4C9AoWDVMP0A/1UQ93KtA05xEQBVUVTw+9D94uDOKEAd EFVy95GDEVXi9/pB/IG4IP8a8Fdg/kBWwP/9MU5g/zBOgP00V2D+Efzw/+Mw1gDVINxx4GHSUivS DkH/AYEMZGflmXMMNZl0s7ICY/8TA1xytlK2OFxCBbJe07hh/18kAZC4sW0huXJchFxTE1L/FdJh ozlEk9TgxGRsY2gJFP9kxD0BvsJlYqaxsxBm6Gim/wDkIVnB/Q8UH5HNoeLRamLvHWAoQGqCKHDW zvEQ8Wox/xIRzmNsAVLgHWBZ5hLzXGL/E7NtoxYDBRHgIBZwcDJwRP9QYW/j84Fy0Rb3F1TLIu/w /8sk9cEXskggonBhIZ5BcyP/c0ByoTygZUHZ8RpCMiD8EP90lkdgxODPUzIhcNBJsAmw39giKHB2 wPygHTCUTlE1wP1KMNbx0OLAKEFrkBrg11D/1xM9wYxUPZHVIQphw6FPAP+eoj5RPHSdwkkAnHIH Qp7S/30jJDJaFcF61kMrMSwgXQD/XbKfYbo0EpOzwSDxJvMfYf9wcOdA96ARtCiVNTF2oNvU/2wS a5A0QBrQmwAfwZSQh6H/+RCLEBEAj9I78PNAH6BZs/4xgLN3oAjgPQEzcxoRjiH+pXWhR8AyQjJW jKDQcFgw/1Twd2BVcLDRiLA1wIjz3LL/HnQwotNCdEEREiyx/5BLkP9DcIsBavEuMbJgJ8GbQBEA /8TxLsLQcEaRBNAAAOxxRAH/c9McBBwxgsGOxR1gEGERAP0ycFqggJywgCQqgPZAQ3DVmsOcKiC9 aqDn9EHd4f87sS6ggxDFMd3xiZGbAeYB/0GQkCCRIDwhQ3Hakd1ilIT/lUI6MUQhlbGbgWnR8Bc8 oP92IDCA9mAyQnQhG6HQAb7y/5iQ2cKY8CsyQEAjwQ4zEsHfDfUj4ZyhQMEJsJya8fTx/wjAhqAI wENwdiCcI2x1aPL/2DJAYfdknrMTg4SCIoECod96EVmheeGUgfJwEKJh1WD/R8CHcErQHJBw0Kmw q+ClQO3gocZxwOUhnBihLCAZUt9JAEOyH6ByAbMRMf0B/QH/K/CfYZxgSaBwcHjwd+BxwP+pUByQ cHCpsEzQoJCowdPh33lQTxBM8UyRpvZSO4F2oPeIgE3AdqD3ENBOYqihQ/D9pWA5TOBMcE+RAwIC 4EPw76jAqgBQISRAQgdAQdF48N+mQB9w9RBTwFkwzh8w04D/R2A9EIKwrWBRQZGgPYAcwP+tUVL0 U7FRQdHAxOCtYFTR+9BwAaH3KHBXYFbwrkGvkf+wIRsgscAIsbCQsOGw4Vbh/7ERVxILI45AldCN IWQALCH/X7GfRGcMP7Cz9We1tNRgQv8SsmfjtSGe8VzD2cIQMrap/7byX0S4Um0yuHIShLnUXET/ +BI4IpQROtmVIhWnorFkFP+b8YpSvcaKs2QCvVSYYWOD/6vQSbBlwg2iZwxoRn4kG9b/IXlpMpSS owHmYGphxGHEYe/EwcTB6YEwgK10kFXg4zL/jrCVsMWBagFE4WXkX+Nfof9egW/COvKkAXLhcuVy 8iMT/6dB6gFxol2Ay0UD8k6xBAL/BBFGIcuiPrADgcuhWXGUgO9x8c0Rn+HNQlItE6lQMID/4OF0 hHZhdRHPQVhgryA7wP+rIFSQ21CHcVDwdEB38KFg94iwTlAq9JROIHaRUbB0oP94ICvh6JEvgYqi h7OMIpth/5sABdB48D5i58F30DGhmwD/PlEMMd2B1CFpoXqCnXPVcf9hNNnytyOE09ZSRaNxEdVg /5IEPrCakZ6CkpFD8DbRZDH/BdCbQHfw6JHbRNwB3GLPU/810nageKSgkHFwq9CUkXpR/5wR5mBr 0OyARLRZtLvB/QL/PQA28XPyl6HxEHWheEGHE//OcT2AOsPQYXgRgvKJM+lR/4IwgiKCAXfhi8PF EdJi4aT/47HyIR4DHrLbUAmB6XPEov/iUHdgPzEIQEuQkaB5Yp5h/yfAjaSHpNungsJqoMZBixDu vZGQyKHzIDFdkZ9hhPTterFS7XGDwLUfMFOgazHfiZFr8UOx0NDE0O+nscWQ9vdN4UcT7wGBTbGn geZgf3TQjDFTsBmCZADvgYsQzv3wGZRI8b2hNIE7EXRRF3D//zGNYI2xllBdoXxh6hHy4f/0YUQR mjIN0Xuy9ANgkZyw/4/hmvKbAlHx04D00PWxkaD/y6G7sbQD9vKZAFBTTUNgk/9d5pOjgNEkIHWg qHGr0PURr9Gg+/CX8OHB3ipgzvoQ7f7RrXWggiHnoeGKoNLA+3SAcqNK/cLH0ZQSVmB5cf2d0kKR kP3guHGUkJVghhD/jYNwcJfhePDj4HNAsrDOIP/L43IBALUj0QSByCGngQGBrbBQ9wHh7CD/kBCc ZbD/3UF1wFtApmIDcAMBX5Blof8D5cmkJDHMEd1gq/IBYPugf/vw8NBrEKGQU9GtUYPg1v/w0GvQ BYDRwAdyX3GtUaxh/6xhr2GucYsQ4uBis67RsLF/Y2Sw4bIBsOOtQArDxPDW/zSB35D94Lrh53CY 4Pxgs2P/tTF+0sIEfca1MsEW85L2g/8N62fDxwMQcrZTEcS4grj1/5KR/XBsZ7hibTT49Lkx35D/ BCBwgRWHlRKUkMpRHZFBYv9vkzRB8PG+5Ra1vS+8tPIh/4Xxv7waxHSfdasNosZxbnH/lDKF8eZg HjQeNYjQQOFA4f8fgc7AQNCCQdtQxhLsIExS/xoiENGSoiGT1ZAiBMlTIxT/WgHGcMoiJtMj8MsC fcLK8/8loVmRWZEAIMvC1QEvMd1x/6a0ItEnUSKkJ1GiYM1AJ8D/zeI58OQBKHKVoM8CjpE2BP8F gCmSKXHPQSjhqgCMoOaR/wHA0MEGoNIwK8KOsNIizqH/PjLj4Ynh0nQ2YuhyPOM2of9zM+OxxbG/ gZBB3VHuY54Q/xnA3zGRwu5D7jIuMIo56gD9MlJr3SGRoL1k8MLD0F/B/5gQc2GNQehALWE0tYL0 3BL/jzSO0oeUPnM90rywA1GiYP+5MSCARcE4EjGV2VIwwWVx/9+RWIGXkUuR4LItFNBxOyH/4YLk ADrz4UM6cehRPgHkkP9PYeWg76HFsZSz0pLkcpeT++VkLCDeLCBbceJQ4hFDYf/sIB40mQHEYUDh 3VEWgYGR/9+RoJDQITni0qGHxNvT6UT+zvZCwgNM40xyneXqEeng+xmx7gBj1OEZgtTAjKF3RP+j kbJh8dDlgasxztDTENHA/0Ww42DvsAgxIAAsIKLx5aDfsWDcodtQv4FZQHPk0eTR3/IhWIHxMeYg LVHGgiHxwv+b4dTAIKNMouoR8xLzIA3Cv05wTXT0BSPRTtPRwK2o9PfUwPAB9gM5/GBEshoy8uH/ UTRRwVHBauW4cvyQ6DCyYLUskc7mIN7/ESGgjEMg/vcXcM6hVXDRUMqgOzEo0Gfi8OKQR2D3/1Vg ZQC9/v9VgQRRw0CKIL+AUrG7wf/446cx1EJXw97y/NGiAUqk/6ER1LCNsu3g6CAn0dOQBIHfDAHN ATCgfcHJwTHssevQ+u/Q0PfQ0GUABVADMQQg+1xiOWCMfsIAFANw35C2Yf/f4CYgBFGwE1oiXxPO oNDA/1/RYMHt4M6gYBFUcLywQ9D/X+HQwLzA43BhZgVB/OCI0P9iUAhx0cDpcUBxAjAJcAnB/wmR ZRFLcAkgCXG+AEMgC8D/PABLkgXQzWJlsfkh+UBR8f9z5BBVILPGpA2yxoIaZw53/xo08+XB4hBo EuFqRMci+LH/bSRs9GxiEwMUEm3zOQHVE//vFdQgb+LI1G/yJ8BBoTlh/zlhQaEYMxlBjeIXdAXQ zhD/0uHL4fXwcLFxdE6x5NEuUf8woPwwwWUa+Gcodd8cU2fhf98hioA5cfDR77B4AuIRxv8ehTnQ RhDvsECCHtIf3xBi/2vEe1Uh8iHSfTEiQiLh1uX/IsIm8SRT1+Ul0SWif1MkUv8lgdm019P58RVR fZJwgcij/lqBwZPzLYE+AIKRjvUpNP/dZIPG69ArsYKAS1CGUeWg///gLYCXAUihK8GGIpd1LKH/ l7SGQT0i5sHvsOPhLKEj4P/6gYaRLwCJIYpzijF3oePS/3eDLlGTMzlRUwGLEbRQc5H//OFYYqQx jeFysVxgWJLyEP9zM1iB52GG0SzROiAXYZPh/4aSQmTdEod1LAA0wzThQyD/uZA20fSwDGNdED7w n3BbEP9Ro8EkMMHls6QwcSLMUVxg/+axC6CYFPFh8TEqMZTh3sL/8XGGgOo0lLLpI+HBkAQtM7+Q svHiNME9kCBBAbDWQMD63jwQ1vMBeAEuwEAQHwD/HsHzknmQT1FlcSFwQZGKsP85oznB79GcZzwC 9wMe8Ypg/4ohMIEwUabUMXEQouxBN8D/qgGgETmwoGCj4aRBSPEWgf8ZgZPC0+BLkQXQjkAqQXNj /08wYaFfYfvB/wA5oKIBSQD/NNA98e5hlSEqcejDjiA+kf8sAGJQpWHv0ZwB5zFZQNqQ+2gjTPAx TPBM0qcRTmFOYf+npk4SMiGSEUWBTvVPME7A/pSgYFAEFMEUARuyTOGKYN5CAaZOcmxisOEIOJB/ wP9YkCogU+BUkX/AlWE8UFwg/+IgZTCuQAgxgoCD8GKACjDw/97//wpgvSC+ALQQ+sYncJRWEl5i BVEw4QVRv3sjCuM4UJFyOQFzgGtJAP95Ek9Rn/EvEYxBiaLkEjQQ/7RgFKG0wVcxEUFOgZ8z3vH9 8vHvjFBLsAnwt8IlABUQ/xDCFpAQYUvgEOG4MKyxIrH/SYG0ZIpgoBFPoYfgunFf4P8ZgDtgrqCg YEXhvABgEBmA/0jhPXBhAWByouEp8Dww5fD/oWF6AL4w/MGhoSBAYdC8sP/+0YaAZTDT4KFx+6Fl EZig/60xQ9DuAbLgVqIdcJJzDxH/OJIgo7ISsNLH8xrCBjK/wf+oI3Y3wJFQhE4DwJGr88Ry/2q0 GjPU8iEBaTBtdSAJv5L/axIvUW6yM1CL8bLg1dAj8P/KAtsgsIEnEaPgk2FTESLS9zlxsuDVcGvM YbLhJLRzIv8kw8q2cZEk043ToFJO8Ilx/zPBMhHBKc5sz6924zkk5XK/0dOZstJheJJ5kI4glNRB /0BSg+E8EVwQnYE/AXp2aJH/aAFqcUxx1VIyEC/kBVFecf9EATdwMPHWwDEWfEH1MNbA/3/hf7Ey l3/hM1QykjJyzdD/2rC4UX1BXiDbJM3QfABJkf+CIbgwOqHhsdyhedCPUTxx/0DBN1bd1YO1hUA8 ELgwT6D/d+BVMBaQhNHeoZZCriCIwf+QQ+kUlyLxNY6ihqKY0IbR/+IiZRDkkg1QzYHlUchDDiH/ iWHRkiIT9TBusD3SIiI9Yf/NoM1hQFLLYehBXeC0ceYj/+XhInGl8V5gfoA9sXORSTH/cbCXsXoQ SIBIEINx6aHqBf+QQvFy6yGRVLEzxEgoRFeRv6RBpfFLwe3BWRFZsJyWA/+XouBHlOGGEkkm7rPp Mjp2/0tD8cPuU+8C8MFPUZkB82H38zHzlNRAvfPxD7LTYPeB/44gXeArU/Vx5nKCAukF4fHfj0Gd IfclmsBZQGOfwZ/C/+wgoCBfAbkBoHCqIAxRDFG/97G0YBJBcKANIKlQrdRB//xhsoH88aUB+6Sz 4BhBFvH/rxA5kCwBosGy4fVB1gChMf/gwaUkWAX/A1jCpWH/Y5UA/z0hjiAAIiizBdIBI3sw7GHf p/Kn08XxAlao0pwDKg0g/6nQqMDaEDChp2JoQasx1ID/BVKnduxhxxIvwjCQ7cCOQP6cu0BjQK5w vSAJUH8w3uD/u2AQsNyhvnJj0AkSCSEJkPb/jiCJAaXVcLhB1kIKcf8KRNXy1gCwQWUEL/G/Qf0h /6LBd9EMgc0h1XDIwQVQ1IH/exHUgEcBXvGKYgRQwGEPkP+RcC/BD5BeQY3D/+AREZew3+agTwHY sBLyswGEPjB80f8n0QZxbgEKwLBR9gBusJvw/76wcaAX4bmQvCCj4BMxE8H/A9CdIBUhy3CVkINw jWAYQPsYkOXwlBeRFeOyoaFgvsH/mKCMsHlAo2AXwfuh5tGzcP8QweZijWDwIIKQ7cDo0qER/7BB xyS/0iHx0VGzcGwhzYLzgdB9IIwI7cAGkNqQ1gD/v0Bo4cNVHPHQhNEBKKnB0/8EssXxDxAbkh+S x1QgBGwi/3pDYFQOYQ5hC8HIQT9RP+P/ImOM0MnzIvLbkXxzJHIkgf99lCZijRGpUCYHR3DLkiTq /7NxpBGNAY0B0dTR0SbQA6H/5sCqIPfAEkAPgJ5yHpMEpP8qtHeYRxHl8eWT94EslIYH7buAnC5B 6wDnLVGRAN1g//QB3YAuQdR0wJLFIscS1cH/ZNQwgdZTsJFrsdrytPCLNf/RINlwuPCLEtmYt7C4 AFPw/6Ch2dTZotpC7iC/QOQh5LD36IAjMcjRAMjgNcG+slfB/6Hh/HCv8LtANyHeEBUA6cD/3YA3 2N4TrtC+EEOx3kE3UP824tzyO+TqhZzCOfNIVOGS/5ixnNE6U+gjSEJLsYABP+T/oCIMYE8UzYE9 RP0hGRF0Yf+ZIvWx/BHNAiWRftHoough/+2R5nFCUUeU7cKa5vDxpUD/o3C1sNQRQ9HxU+ACngTc 4f+y4etTX4FF0h6DRjixobNB/+fBR/DNEDySmyGyoEwj8PL/8oKi0zpSYfHvNEqI4QTpcX/qBaOx ++HyoPHh52F+wKX/8wTzAfxw8+L3gYXXh7Gz4P89MspRQBKz4fshVbHqc+rx/1DB9vP24E3RgfAR YOPxfAD347KsAT9xSj9g5XFR0eWh/1OBU+IrQVowckHLkLuADLH/VPAJ0Xwy5nHmcf0wXRDhEd9U 8FQh/JH8kXJQnMkB58H//tJYVlhzWGdYk7JVucAm0P/6Ib9Av8FagwFQIbAeRATB/1qitUVe413h gkGm0X/gTMDvpuACweMgQzB7EhBfQAR3+9EgAMBCMKEBlB7ReQNmAW/V0BHwGFAI8L0JAJLBnK9i 0LtxB4CS4f9Q8Oe+MHz/zgkzY2AJQAkAvpD//66APTDe8Nkh2zRlZtZzNUP/IzEjMTUByEDbsHJQ DIEMgf9+wHGBa1Bp8tnQDVAN0VQh/1PBBEFR4dEgMKAE8XSwg/H/uTHDceWz+bBIAfKg7fH+Qf98 dCJza+QasfhgraFHcMqB/4+QyYFSMPGA9hBtkf0RzRH/EVEncPYQ/bGvckdwDVDNEP/mUSux8QEY UCORccH64HHi/3DRFwFwcvtR9hCOoSMCroD/JvOXYaGAr4EkYT9gGsJ6pP+r4X7AGRI+MPrhlcDe sd6x+yzgF0KtdeIfIoRGKFN6A/8oNBnC1QOgBLniufYbohoB+wsxBfBC1DEEgDDQe/Ejcf8O0WVB IxEO0WyRIlN8SNWS/49SInN9tUIhMGBSkIATgAL/f+OABCYJ2oPtoe2hgBKmwP9M4Bbgh6Lb4yxR VoCncoeg//dhpWEDkevx+aHCofwwIeH/GXIhsONxK9FV0SaRLSOngv/gA/OyLPH0sU6BuuCSgIHx /1Fj3HGIdEYTHwIbs2VRiqH/iqLkI4xTjlKMUuVEIeCMIf8EMWrwjQDmYRChZOAnoebl/73hBrE+ MOYjvfJrsY7xZzD/isI1gvYBNfEHoJBCECCTc/83VJGJ/3CSgZKDOEaSkZCx/zaynwBD0faUlcGq lPbB8MH/7zKVdpXBSdSWgVVC70NA0f9BlP0h+lH9IWTgP6GYhEGC//pRP7FAQslhm3ObYtsBFtD/ /hJU8JyBR2L8EJsCSDOkYf9EYewBnXFDoOGhnfGegpXA/07QUHKT0DvSBwCxAVPwGjL/DwOg0hvx CzDRlCHhoTFPo//p4aISTBFMEqQToxei4UxB/6PSPPEuEDpEzyCk5e/zotL/peS6wVnCZmBM0ogg TTFRYP8tcCxBTdZOIYYzGHBM4D1C/3yDwULIcLrBsnGWIZShqpB/qoBRBYgAgfANcA1hreFS/z9g BjIF4QWzBvMNUZvQ3fH9DVCEyaENIDXgztE5MAfx/z4xzUE+MKvRK5Kw8QfxWjD/XgGA4j5iyAAJ cfHUZxFUIfsmkWZglEdwEzDwwVTzyHD/lYANct9if9FeQYPzg/Ffsf9bNXbidvN240cBUcDd0F0i 74JQgkG3UV21c40RZPFemf5CaOD6grWzG5Mvkb7RySHXvSFjIbzBtbuwtbygOPD7LXBjIMa7ILzB vJG68Lyy/2LBb+G94uYQU/Brgmhw5EH/vpa+I2uSv6HYMZxQfcFzEf+wAreRlRG0Ao0QQUMiQSbx /1QhzUE+YVKh+nIpodQAIeH/C1OaADXRliBH8UMQTwCmEP+hkT+x1bJsAWAxe2EDgUygv4qQIHFq MJXAZLBnMWs9Ef9rkXXhdeEclIVCT4Gs4Ihy/6DhaMFSgytB3yHIMSFCliD/b+FqocthcxF1sRkz xwEmQv+PYT9RdeGJ89Py06MiIsXE/3NAfANHcpqRajHn0R+zHZH/n2DMUYWxRYEJcUDRoZFBYf9X IWvx3rB59NLWPmBHAT5g/wkzIeEngSXSJeQLEnWw1FD/PePXZcUVdXDG83x2MVV80v8aA9oD2cuA lX7wHAKaUvQA/5vQ2yRnEYAxDWGWIARRnTDviCCrUT0gowGt4kE20UEQv8DSptGBUbDxrlEII5Su sf9UgYIRptGGMZ8AAVI6Ak1w/4bE3QFDgIdxiDCIIPDw4jD/ApNow4jBueCJcrpxLlLT0P/kGKAg iwHlYmhw6GKOEozT/z+iF/BAM8gh5xLU0GowvcD/ZaDnET/05xJAMejRP0UeoP++EVcgwEAD4XCB V/HqY5HX/5FCkzORpGIQnZBNEJGk7AH/kdSQg+7F7hQEkpTjUMHv9P+XEZYhk+L9ggMAr7H8ZO9E /1SA8+KFgfJDwaHGU/NAclD/zFHyMnJQT3L04sRhzlBaAf/7c/ESpEGmIPZSojHqMaTW8+wAh3De 72/Au2D3UZHh/Z2y3p4znuDtYZ5z8XHOkf8ssmhwuPGgEltS0YOFEC2h/4ABqaJP1lex9TOkgqo0 oxT/ooNZgKRGpJSXEVcVpQNPZG+mEaGR84ENELUBYerw5/86MoZDAiSoUahTUiCVEPJi/zIym+EM APwDlHRI0QTy4cb/scBX8Lggm9AMAZoAI8BgQv8QsGARHMFf4rfgsGHJIbfg/TihpQgwT4B+wIbx rQEvgfcJcq1gLvNaroHOMQfxCFT/yVLxsWihrdBgQQbUrNNmYv8Fs2BjI8EL9sIDJtDT0Hbh/7SE E9EO8Xbj0MG1srhxI7H/3cFiURDxt1G3Uwzwt/ESIP/CYQ8RaLK44aERBlCD8Q7h73cC0mKDUXtx a4XBFRG88vW8oK27sKW88M7xSNDhcfLvnVD3xruwvJEWMZ1B/8gx+uAm0OfwiIAkAbRBCTL/KMLM AXLlGbLXwb5Q5rFNQP+mcDXilRDA4SFxTqGKMM0w/12CHvINMQlxCgPoYINAuOL/TKTOcCVhViGh wCWAlxAecX/MtJnhLCIp8dfAoTKmcBD1pGAQpPAhpYDn8PGQlcD/xuEDQZgxH5LGAlNyoKPiwv/i o4Rx0SHRgRKRFHK/8XQh/5vQsFB+5JXAGfJz0fMxXYH/mWFzohkjJ1ISYWxhPVRucf++kcXk0kDP 8W4y+gCNsCLB/3mReZEMcg0Q8XHOwQ7AoDD/KECEcVXzdQIqQSxR+tLSMv9T0bpx0wAtgy+zHaIK 874z/y+R10HVYZ9gCyEm4fOxe3L/zSGPQ6lD6GDNIdfUM6B7Qv+LQ5qj2ZMRwIy0MuFn8ppS/9sU yOFlEsxT20I2EZcQleH/nTHiMuDxWoA3EOzRWuDBcf9DkA5weaLTMAlTkoLU0J9g/2EhwWC34Drx OpGnMQE0AWH/4MIRwN0B4VHhUV9Tq3ICgf88dOKj0YH6YfoBH7ETUTyQ/+Og0IDNYShQelCYgZjj n3BfelD64MWx6YEvQBiKwWv/y8CagOXgmmI+YReTQ5CpMf9N0OTxocDoocvA1aE/weki/zDRxuAL cCkwocDqEURFUpH/RXDrwp7h7VNSge3SUdI2gv+ghewxRRLh8O2D/WJKIqJT/zYSBKCkYA0gpQLw RFhY2FH/SxRZgYRx7zEhcalxihKtEP9MAvIUTTHao8xRHzIkIU5Q/3XTJGCd0kPh/iH8oqkz/uH/ WLFKcgTwO6C7Ue0wvVBRAP/hYTtgO7JHYdzQUmGe4p9R/1MADKHNQoPyU9Ic8VRDtiH/+aPB4chw KYED0/xFxNGzwf//sv1TSlBX8Pxh/qJXYvaD/6oU/3b88/CxTwKEgyjxzFH/AfE6kQEz4UBbowH0 7oDf9P9FkBGQd4FN4deRzIHxcVCB/0nxXpUFM+Hn8PACQVvhugL/39E5RN9BNtLf0M7BzjEKYf9i JAhRCFFi4gmDCXQvgcpB/7vEDHEKwY70ZVFnAwXSaFH/v7Ty0MxAELDCkSLxwNJncv9hgcHjZcEG UBhw0VFo08Ma/2yybOJ2wMrACDARVJUBa1H/OLLd0BIRHJAfsR0TEuQOZT9swjzRFFGXka8Qy0DW 79sVFMsQ/0ewUiHel6AyEevxwdqxpaow3hVCb7Hw8P/pYphhmGDjwXLRg+If0fpS/4LhJ5AdkdTR ixFVkM3EefH/GoEC4Q1hrzHYUxmw8wH7c/8NMUyRCpIjwIbkzZQzoCVR/0+x9YBKUNJCK6EDIyhi JyGvCVIGACCTerExRyA57DD/55D5ECUQeiKJk4iRaoEQgf989FRzlsM8sn0UlyLjwsoS/6fRQCKc QYvBdCHNcHkgeOH/AHB/9HMDGJSBMttyTeAno//jIX0ShrEsVa6zfJP6wiLx/+eAh/LdhVQg+wGR wUzy8eD/32LcQ3chLOOHMh+RJxKSZf+9wmMUCXMvQc2CcwGJUpKU/11TMTIxo3jRbmAbkUKQi9L/ GhAhI4zlMsM0AjOyNLLnc/+TYTWhjcNkEwxBM9E2EbkjPzwwAUA7sJYwWxFRIL3n/u+rQU+gBOA5 gRGQDiEz0X9NVDlBUwA7cXAgOeLtZNbtRtDnlAFwYOdkQGSwZ6D/AoE7UZVRnmA7oKCg7+Hvsf/H Mn2ShtA9FS2QGOE915vB//IzQqETAD7T2UEeoD92P5L/GcA/8h8wP/P+APT09bQJcP9CwdMhY8E/ wfOSnKFDkVVh/0PxQoD+sZ5zRVP45FKRnrX/oQFG00by+hKq08jArMJH8f9Hw0ohBMFIpKJFSdNJ 8UkB/081DgFLglBDDgENEE5BhHH/HAFMkR8wCcJL0TSSAQMDov+PYN/CTQRc4AGCXOBVkf6F/1gS RBGp5DkwRhFG0G/gO0BP6xFRIBXg7lDn9xXg9/9G8V4xWAH44qrBUPBPkH+B/4PSLXIjMFQSCCLd 0xhwhCH/DKGvY2SwVdFEAVZjssdeMf8egEpyV6NYhXhAxdCeYLLK/1gxVZMeMSuFNMFcgToBlAT/ OgFbxLmxXFgawN/yHcK3kv9PkUpRXpNfEl8mkJHv0Vxx/zwyE7i5MJPBuhVKAaWB/7H/YpErcGvA N4AawGshHMGvAf+SheMDZDGPYKWQvJHFwJND/3RBTFKTEcIkwQTBNWYh3oD/v+PAkcG2I8BnEKTQ X/AjwH+MoL/wKADdQWmSxDMd4DH/rdEI8d6AX/DF4WuCxQVrov84sJDw7NBs8WkhaOR28ZaAvyhQ xrPD8pcTnWFPoN5wwddwwm7wUvDWXdC1eHEp4P9xoS7h2JJc4F8AcQBwwXEh/4jBl5F3IC2Qz6CC MSoRrhL/JoNt8ZZzflBkQWKSu4GPcv/Ogc6EhfFL0PVwdYS3sUnw/ythppG+kEEQIUGtUJHQgEH/ 9UFL8FgwMODscXsAejApQd+KcXeBL1HagBrxa2HBeQHveEFCsNIwRyApXsAuglLw/3qwU0AyAHkB h9ErIWTBloD/iLDGQWZRloBpUFQCaVDw8f/dEIKhzIHi8OOxdCH08UGy/zKCP5HZgnQhh+CPcE+Q v2D/TXDaYYuhY1GA84FxgUfg4f+W093S4OHH8pa11xOus9zy/9hAHRJ82FTFeZFt8eDjhtf/gfLh p+JhhTGAs61xJdA8o/9dQugAiMLNcMzRd4Hk1HtB/4uU5cHlwdPyP9Hl0cngp1X/jMZNVOgBjdRL 0GGBj3Fn4v+PhE5BeLBroOnzq9GroO6C/+sx71GrcU+gkGLrkY/j/YX/uSIUsbaRlZC6QV/h7sGV Uf/vVaCgdVDE4R8SpABcEPAi/0iylkLHQiITTeDIIX5By1H/2EDy0vNB2EDzMTNQ8yMkMt/0pPSi dBHSwE4RSnjBTob/WABOZDKiniBOYc1wKrGdIv+ccfNxJAHjUZ1h0bF4QfUw/7JSn6GfoflDElGf kvlBnxH/U9Oq0vppBKBUc/u0/KL8sP+iorqxVfP9BqOCokQNgoSw/6qB/WGlEf9EpXQtoNIAxbD/ LQEAYUHTjrECkubhpvHfwf+m8megXaK+oA5B/6JZJLLT3/6EBLOrwsrwcIH3cEBfNO7/RQIFsMmw 7/tRquCrkf9ggPpAdjGAs81RgWF8Ua6T/3zUaIGDwAkzeJJ4Qa/BhZT/C0GiFA1UClIEMbCRsqN2 Av+FoWWzA8J1IA4UAkFc1Kfh/4TRSYEPkbU0sPATobqRkGD/agMQg7bVPGLm4P+hsjH9kv/8s/xx uMSVsrnBliO1kbtA/7WBlXBtwm5nq5BuI7kwSID/bxO5wG+1tlG8UcVQdKWTof8OwRVhunQYkuk0 hOByAkmRv7qBu0C6orZQuwFxc6XF4f/F4RmQFhF1g3VxxVDF5MSR/81wwDC/8McBIQEhAR5hrVD/ B6CWgEfUH1QfVMTCH8AcUf/EYcLjxsMH8CEzIJPGspby08oBoJD3nMjgjMrA1MD+/yOhydGK0Zdh 26LbIfLA/ylB6nDK4CTQyKGSINZRNxH/B6DxcX9i1uIIc65xrvAhEPuu0RxQhBhhJ6CFsISwh+D+ e86CWMGlsw4UDkO7sAnR/76g4vDfsN6AlnE+EdqC2OH/2dErwSvB1RDoAOxxqGDPUL+JIojVvWE/ IYlAAwAIsFD+ANixLCDUgLHAybBOcP3h/9UAAxHsYZ3RptFy8JZw37D/1YGEcToBOFExwYtj8QGX Mf/Nk4Vy9bacMs3B2fTaIuVB/+ORPfKS0TULzBHxkDXxNxH/MXPw4TcDNyViJTdBIYXHlf/dkwgU 3YPH4pD10QM10tOh/9Oj4jM9oTyyxuE+ETz0PbP/22HC0N4g1dGG0swhXEDmUf+ZMjMUK5Kn0dlS 53Tmtlui/0LG5/IABOgBAMNbcqWh/WP/6gLqdAVxq0DvoblxbXJFwv9V8/2RoqNGEq/QuvC6gZ/S /7kQurG6gaGyoTIQ4b8h02H/02AHoK8Qv1EHUt9x33E2Qf994vFTjvLa0T3RETGl4vW0/9kD9dXZ A5pB9XOn4k5Sp9L/9WFQUbGg9PFNESQzqUNR8P/2oVCh8iOkASPwXBCGQQnA/9IAZYH4YLDg+9H5 MvrBuGL/VQdHgNTArfL7IVRlE2GuEf9T4/zRoCJXEXEhoVL5YLsR/1bi/GJjoGXxZHBXo7Oxt9P/ WTJZEv8joFINMcWQQpHVcv8RgwEkQLRcElyDASL/smVh/1nCXiENIijBu0AEseswyTC3SHFIcF8R 1iTQ+2D3BeD/uTJfQQWhyUBgUGCi7TBFQv7nGDFrEuGxOyLcU8fSOVX/CQFhIWOSCXMKXbQCD8AK U/69AwIKY/7hAtRr0QnBAwH/CWJnwwJBZ1EBgdLSLZFqYP9t4eogD1P7AGnBD/JqYA/x/w/x7UFx cRlR1XGGoQMB/uH/BjESM2y0EufHQm20bkTDMf9uc24IcFFvk8nibTBwRMm0/3CiyxrtEW8EbkPt MnCySiH/FCoTYRS2FNHOSM6FFVBJkf/QYvxgSCAfsQKwAXB3IEfRexrTAIFjKpFx0x8T0SKl9+7B ebEZwIRi4XpzIMXegP5a1yPUkh2xlvL38KxQ+WDsve9MkP4RxuaBq2LcEs+VBH4ijTEpUL2lX7D5 cP7ef1I/ANvUkDGRU5RxN6L/gQEdIIFSdZQogQkyW8Aohv+CESogAxC2QwKQKVD/oRhh/4RhOxIn MOJjhUVcECwCLBH/UcFRweUBK1MswS9iLcLr8JfyAOxA+vBS+1Bare6w69bA4rD34uFjIpCZAdlR /9hiEVEvsT6AhKDmQNoivAL/NyOTsXph5dI7QCYAjUMzNv+NUfaROhHj8btxmAEmAQdw334Rj+M7 0jXiNZE5kAI80f/xE/ExHSB/cTjB2gE6QJDT/+uCqzDq8ewTMaGTszHCk4T/OVLa8JOCOoPxJDpA lbIXwP8XhZZVOiHlgjiBNYAs0RES/z4jmEGrMYfBKXNNMClSmkX/10EpoZkxmQFbVENTQcWc8/8Z cVvVQyRCBmaAWbD8dPrA/xMT+wFpofsBn6VtEvxx/HL/oJOgg54EocPGcvuS/ZAo0P8UoFlxKjEN 4gLhtZO0kReh/33R2VBLIEsR/lInUClw/wb/I/HVUCPhqxAAIqYAAIGptP+mIQAhAUKmAVHwqbJS IDxg/wJSAsJQgQLSUSAuIACFqoL/SpH+kf8l2GHZUS3BxaAqIP9kMWSRRpFFMFQCVQNU8q4S/wfF EjSuk1SxnpFVQQkSCSH/V/KxcfwQ+fT6JFZzVpJXY/8NcXUg/HOxwbNDEfGx4fxS/1jkKjERcbSR tPe2QmuwXQH/XHG1ISoxEESzcV00suH34d+6YV8QIwC54M0A73CQuQD/uPG5UhLTE1ASgboCuJMi kPrn2TDvuvXwozhylDU5Uf975KsAWqCCIr1y3WHA4lJR/2S0RlRZo2ayF2S/cWdRWUH9J4BzKjLB wkHAnKDBsoaw/1vhYzFrcSzR7+B5sPxAyHP/nsBpcfiBokNp9MPxaoFxcf9b4YbRg9HFp8YJ+5JF wCES/5+RtNAcAHogduF6EXaxQwCqjHmwlHmApXnArcQi/2pg/EBqoG0wwzK4McpkyUj/wyPJ1MnW JabLOsnkyzPMeP9uOG4RKfdqgUjBcmFjQHEw+0ggiwBa0sGGsKvgQwO00P8ikHnC00PTMNMhebEi 0YGQ/6MQ7gIudDhxMII5M3u0epHXMdBM8Gww78WgtQCCUaD/6CJ94eXBOFDs0jiCBMJAUfVUAP9X 8N494dmCkKJ3wP/XspJi2uGA8TjRONLuAHoR/3XzWcC9QYaw3OHchGMx/PP/taHdwTWwDMG7MdJz 3FHcUf9bI1uhhdLf42vAbDDf4UBR/9+yQAGdgH2iW+BR8GNQiMBaSmBgSojx4pBS4pBa+37wPLDv 4lE/AQShBWP+Yf+MAvIR64FipJhBSqPbIO/g/4UgUPEBkUBimQHXQ6tSSzP/lcL+EZWkpNVrUepC 2gFCEv/kMe8T6oPw0ZEFkOOQ1dnV/xbxkPHtZNTxk5a8kkc0kGL/MbKQsNhCQwLwAZYI6SLZcf/a 8X3wo2C7UUBC8fTr8YdB3/LgmTEakIPBTSIAmRGIAf9A4/LS3zC1J7UhteSc9PWk//Ti9tJb0cKS UMHzQNOgoPL/bLIJsviE+ILHQ8Og+EFW1P/6I/oTCrb7R6ERbDGyIrOA/7cEWUNZ8hBym+KFoVwA G8L/jeBYg1shwYH9IqvR/TKyoP/dUVoy3TFa0sCSWmOGRIZy//NA37OGYmORXSJccoXRmhL/2HD2 UOET3yJAgkFTj4FhYP9nUWVynzAKQKGQrwGucbrQ366UYRHWkK6y1pDvB3GyIf+tpAlRYdG6YWHT BwKyIVPC+/nR+7XOC/B0kGxzCzLOQP8LNPyR/JG+47fiDaNmEg4E/1eEtkUPNLKUdBDeAfyVtxPv DOERxBTBudD/udFsJLlxvxNBEsBs1bmlukAUAO+e0f9uMW4BuIHhcA6Ao/G7woFR/+3lFhGTAjHg o+GDETvBF8P/tvG3UmfSoJNXgcWiBmDYwf9dUV/xWdAMErQBwkG1Ijli//ViHxS00DrxejA/8cKw 0mH9DGC1yKTI0x2y0OEc0Xfy/yNx+UCCsZyT4VBZcXPhvpP/+BBUEsaToiKiMcdSxJLP4f8eoR6g xGEeMXgx/EAjAdFB/yLR0eD3oCKA0hAKccpBboD/yjXDJCX1foTKUn/mgDYUsP+A3ygUJvSCpSgn g0XMtQ1Q/XwxzhyhxbC+QAxgbyH3Ia/SlCzQNtHTSpTUEHtwdf8ut9IQlCKIhdWA6UD3IGcB/t7f Uf5yMYOLQ5O1R2IxstXesVL8kMbzQMarMTAi/5Cj8mGRhNpy7kE04dRRkcD/fcIsohgQ3DNXgdyD tvDTgO/2YVEhUSEcQFqi8fVB3mH/LJH2QN3BHAJXJJOFrABcBH/gQZQROSIbwPKkrACv0MYU93OW AGuWAGO17/2WgVI8YTwxB0Dd0eExLzD/kWAcgZ2AikDpMEaD7ELVIO455JAvMOSBayuwkHA3Uf/2 QOExXnE2Uf3Aj7EuAfUA/8Uh8fAVUf5BpNPrcO/hSVT/QpXXwulzROTZ0tnkM+Hr4v+kgfFQ7xW7 kkbFRbFIs+2z/7wkRQPrgUjl7IHx8Emj8pH/o/TwgUvS2AHwwelB8DFLsf/mIOPy//DskPQykWDf wNuA/6bzTXBM0fOVHFGVQeFCEDH/9WK1tVhS9oJPoxtBqlO0cP+RdHkRNxGwFFIS+UJSk/lz/1OR xvRllAvyC0ULIlUW+eX/siQM5Ldkt2K+MWezDOKTku8ZM3ICt+EIgdazYWSgBwDvs6YHQGMRY3Hv tLFi8flg/81wudC1cbSBtgK14W4AtRL/ttljgLTUCFDMML5RDjJbI3+Uo8EQ/TMZQtzBvsAy8Of+ eyrwurFgsrsjYdG7dGHU/2dCVbAJswlyY1Vg8bgh/BD/DdGvpwpx+uQLB2dC/HMMUv8NUcAEsZJr Ig3TDcVoyt4B/2mxNxEM4XIhaeTBEVWhFPDfEhBuQBOgbZIS4+9stBNE/8a0bLFsIBKiEoESVG7C FQJ/4JHXk0QA7ZRwcspV6jFj/7JBF/EF8tbyDQCxlgsxucP/ayKT4d2hGsEYtAsxNiHy0P5r9OFe cRxAXyFJwP3A3jH72VClFEJK0PyQ/HB3ZHcx/x6xeFQd8XFAZYAeMgvgDVD/T6HhARuBH6mvN/vy +TIek//RNB2R1hYqoCPT1nQdkYVx3yIRJCiCUyV0JXbWgDfZ1f8l7NrIJqglxSe13a8o0YVx+4VB 8ZBz0uHS4W8hLGSHsb+HIg1QHuEtg32AIuBaLiH/FkAvlgWQRAAroTHgPlAvpfuKEexgQiyABrD+ 0v/wFqT/yqRHlu2F5CP2sA1A8hNwkf80se1R7qA0U0sRcKLiUi/i/xcQzuAiIJLBInCVId/AkJL/ h3FzAFEBdoDwMDKwdoBKMP8FsC9AFxABMQWwiUCScOti/4WhqvH1QvZy9iMhsFhE8uD/OjBZovOA nAFJUDcTGBFx4v0AwJRMohxR9GGkc5Jw8yD/TaEbgBcQUaAPkSGwIiD3oP8tsVYQ8yEjEPNyh2B7 QAwA/2ogGNBm8SzSEbDCEffBNsH/GSCX0XaAOsDuUYZgmhHyYf/18fKRmGFEAUNB/hH3RG+z/53x nERI1T+xRtNIpEtAn8P/RzJFw5+zSBM/A0UhnpTi4f9KwUJS+EHPk89RHEFKAwAR/5vkSZGloM9h /heoMnkwOxD+GADhVsA1gO9QVsAAogFy/6ewAjMbgFhgqqR0olgzqwP7V+NQJITtggLB7fF5IGoR v7hBepNkkqx3BtYGZNar5P9yhM4yCxN6lK+lZUJyo8CQ/8wiZyJnNgszETKwoQ4RsTH/DIaKYCAi 1AQYUqxSs7K7Q/9S8GPwu0O6oFQDaeLB4WKi/w9it7Mp4GNjEbITcGIxtXH/k+EX8RshWXDBwjvQ CWE8QP9XYRPRs9G+ImVQChNhQ71D/RGV52JhvMO2gSqgFeW9Qv8Pc7OBuGErYBiBwSAgkTnw/3JB wHJl9GVhaAGwMXHA4gD/axIZglDBwdVmY2XHwv1qcd/BpGgBs0CC8Gywzm2BbSH+/2zYbLHFwMcz bbBtFR+i/yGSxfRsIccRYtBuUGJAK9H/S2A7gEki+pFHUcoBNMKJ8/9EAPKhsZDLlMvBdAF0BoXx /c2RhFSBzXSoUXSUGuFo8f9XsT2wpaCSkP3UpkGSkE1Q/5wB+WQxsUdwdtHWFXvCerD/eDPSUiwz srAY8GogeRRd4f9pIcGizhFUwr+w1NOtkns4/9YIdwl3UReg13LWwScwNaD/2FraxX722gg0HDN/ NO9/Wf/cG4ST1qHfcZKRhsF44Szj/4aAfQCGweFUkOHPAPSSqPD/8uHiMOlDiKTjYeMymGDpNP/o Qo3ATHCSIGBQPiHnhEgk90c0jyBMYCGLk8oi5iGfEP9L8ZwgiNFwwUGyodNCE46S/+JBQxHpY5gg iUDp86lg6mN/kDD1IGoh6yPskUvwpaFS/+yR1/Hr0aQQTqDpoO+hhaH/UDVQQe3ydaHrkJGDdeHT Ev+VAF9h/vKSkP+yo7Jfgf0A/6BTo6GbkXaxiTB2MF+hXeD/mkHq4nYhmNCJMPShKvF3gP/W4Nji MREXMVWwThT0ETuz/pzhIfRBmNCRkF6yX+BZcJ/18XaxmkHykZgwY1KpgP+dQ+yRBaCo8etRknAj UZvx+6BxmDBa90OlcKLDmPKjgf+eEuOBjzH9APrj4uFCFeZC/yOhnxKf4krzo9TxcaZyWBP//dD/ oUnijMBL8liVXfCoUf+nkl4hlIABYgF1l5BbogIS/wH0qjOqIqqRqgTuQ0axXKn/qwFJ0UVRqYDQ wRVBZNEQBP+vSGAiYVRls642LgZjBWH0/1/jECJyU7AhZLcOQwvFzBP/ZNMMo9P0eiVnxWBUZBO6 sf951LNkwOHA4rBDq+EVpL4U/6yiD1HfIBaRtXGx4c0Ur0X/usHW4HIhw+HOMbhBv2GwMf8Wkb1U FdS9s7vCu0Fscmwj/3AGDzIGcXoExEOKcW1SBbH/GiEQkRmZDDHA0MkwsJOykf8eNB5jryEJUa7z wdHQwcLx/wNBHeQZxJXQyLDIEnjyxcTfILTG5CIzxnIf8e8foB/x/yF6IdQiYQdAIxL4wYxhiPHv fbLmQso3yVFrk1TwUcwj/7ICGcSq8cHRsMHNofCAw3D/uRCBoeRguPDv08Phw+EDQP6MqIMn8pAh 72L4csoBygDvjEDzEdeRsZC9hQMu4CwG/0SxHiDSEizhXyPxAZIg07LvGYEmQtRovNG9LuDVAdbj /03hibOJqNdk1hTXxTMi2lr/MJXdz9sUjZ/chY8Y2RKMM//dZ9kW2ELdkd2RT5FD8eCS/3cxKEGo 8EQh9TE7gnWA6rP7wQA6oXs8A+JVPMVFoZ/A11cBypXJg1LjQIxBVOey+yQgQEA5U4Ck4H4k4oY8 Rf/KsTxZQYJCg5sl4lb3EFNw/+NAOaHrFB3wGeDhMkTRGzD/wMEd8eoy8rDN4Ybyz9E6sv/rEUQh zOHgYQSSqYJd8EVTv0eyqqM6YKlhUHDL0AAtcP8qE1WyKqEqFfog93FL0VlQ/+TQSsEtcP1Q9nDg QUyiU9D/V+DvMdDU1eJNldewLAEFwf/g0DIARBBHke1hqwFRUO5B/1PASSIjUOvALXD9caWhV0H/ +nX9QUVQMfHjQPHB95D4Qb9UsKnCV+BTUVNRqTEp/YHzhCDiIIxzOqHq4PcQ68D3I1CdkT/ROUOQ mXE/0Zfz/32h+LKEQVdBSlCm4kEAWCP/shLw0rHRsdFJNPFxsdH90POzEFoihBBaggDyANBa8f8B IFvQtHLwUOTAAkIB8wUR711lXOTucVSwWkfiOnD/YP9TcO6AXOPxwDmgAxJe0HVx/wYUX+YJwgmp LlIJFAhVvG//v/Ri54gEaXKIE84xvIQLhf/AhAuTCIVjJ2nicmJvFAfz/s4McfBQy4EbAmJRBhQH M/9sMQb3bDJsE3IyYKdr5Gvh/2Q19XHMkxpRiGEPoRFUb6H/cbTFUWxF3yBxU8n2a2O7Mf8cNRQA apLhMSwBYjRz0wrC/3WyG/IdIRvVaqMbFSwxLqP/1MEl0BoSamGCMxCCBeERsd8e0R7Q2EBvsHkA 73qzebL/IXTTMnlCfFJ7QtUjH2IfRP/WFiKSH/D0oaSDVzH4sfyh//mh5TMks+sRCLF1cH/kvuT/ yHJ1cTphc8KfUQxUCwgL1f8McAwwFDATMe/y9aHvQ/1B/1lQ+UBWwfcQ8xF0wIlx3yX/LFOF5iwx wCF1gIdDg0IeEv9mIRwTCLEGEhbRxNEu0YjS/4VRTgEwY4nDkTMwxSszMbH/bhAyADExNb2SVjNv Msbon//pqzeWHvCN75H2a3C7oDuB/0fhO4HvwZRhQ/FD8Tr4dSH+hBsA9ZAx8Dw0lphSYvcQ7yOx JEM/wfkRSvXBPuNDEfskYq+xKUZwJBLwWJaVm1n/mqMkUfwC9mSag50TfwBTcP9HAAOwBRAx8LfR TGE680Shf4hQLhFlwXLhn7BEsX9Axv9FQR4gL0DDgDoB+jEssXbB/3bBRLFD8UqBRUE6wyaiE0Dr JVEUQdYDQJTecdeErJD/qzHxsVZzSsOrElSBV4BS8e9FQ0eglABe0K1X0UURT2G/lYHv4YTRqTF/ AFKBQiNQ/1KxU9BM0FOxUUFQIVPAXxP/UAFXsUlxqyRKwfIxq4Ovwf88ELmgoZAAMgOhX4BJkasT ffJBMVUxPfAj0KbArqCM+TswtZRqoUQwAzEjsUcA30YgRYAJgfOjCDEhB+LX8v/eYkpRWAVQAYeA DDGHcbPh/7JlX4BYZbMBE0BbBVqxtRH/tOR1cFthWnJcM7UAD4Fe4v+48kczXsRKgUfhRFFIcV9R 76G1t4OAsdsQnLs3FBdhBP+7MbvDyKIV/RnIaqIZiBsR/3VxX7EYk85CLdN18s33dOP/alJz8RlV G9bI4WrDyKJh8/8dM3ZyYMbNc4iVLtPEw7ry/8WDH9IW5NEhLvMf0h73L1B/wnAhRIURywIxsHGR I4TO/29ixwVsIcpDI6fFUnIhYRP/HRLCkRxjHaTBBc+0zsJ3Qv/QBIDkG2N4NOCi+7KGwYDz3xsE 0VFrgdLRLHStb7BqEPre1IDv1sF7ctZzMETWwbd7QS7keQD/dpHlkd57tv958tbUqOCskQtC18NV kkJT/ZsjEPfxHgHZYdlivwaB4P9E0JQTXOSjAoGA0eCTwIKg/xsC2yM2A4EwUGC4YFiAOaD/X7E3 IT4wpcELMwNBQ5AxIf+FlIWU38PgcoKgRKCGM5QB/6MBAMGHgHUzdVLP8r+DxIH/iIXRIXbBdMCK NE5hPg2Lhf+LxJKzjxuTEsUAkuOPGo8f/0NvkHzsSkGUkPWTEYvBOrH/okHuA5PBUHCu4KZh/KN2 UN+VA17QlgDv8JdAY5ZJhEH/rhFY4ZdWmPP2UAXxSjCbbP9KSvS3Tu/0uJkx8EpTwKYg+53SodFz sXGU96Ax+jH6kf/6kaABc9CLICZQqWHjstSA/5VRZ3AsYGywVSPFcGDgn3H/paGnIaAx+sF/QMNg cbDhoPd1YG+gg4ClpdHeQa8x98H/B4SrpP+kWaKxgAcio9HdIPuHgNAhzg3gsiKhIZWxAYL/4bAG kKVgCfCEIFnB/8H+EP+wY6mTr+AGpayx//OsoQND3wNhAzGroa7QhNG9qHGtIr8EYl8BmcAFVggR /uMhrnD/hrC7oIpBreEJM6tjfZF+Iv//AJxRhFN9tKvhXlKmQLHZ/7IgstOyNKPBsjQBIAwhtJH/ DpS1URBCEFHdIBByECJp0/8PxKJBEmGp8hDDEmESAZ4h/5/RbDIQw7jEotMGUKZwlAH/KpF0I3ZQ dAM0UXaRF3V0A/8pdCl2zqQpkwigb5aUI0ih/4fhgDGAMxcVdkASkZQxbnH/cXRw4hn2JzO99BXj HbSIc/+7ZDzHKvQ9Uj000Kn7soaS/3fFPJR6dnsm+5Pi84UgxQL/IGUigOMSuwPEhIi1IibjFP8g BcaiJrMnwtBDzcQcghqD/8ExG2TR4TWhKdTRgSl0+4N/egN4o891GcAlsCzyVWDv/dMBtTDAhnHW 8dNg1NLTxf8woIdh1IHVQdUR1nDVYszg/u80US/SLdHVUS3UMKDWwP7/ruAxQPeQ3nKtUPJQZBL/ UIKMI7BR7+H7UTuiNnHQEv9vtTRS3uBIkRJkERGPRaIh/7exEkG3gamhEwC2IKngbNb/ELJrtKGT E7LBQDmSk0R6Uv/gEjRRNFPRcNHANXHEAd1R/zvUtpApAStyPGQV9BTS45H/5RI+BD4ymEQ/M+Ww mRPtcf/l9Os26vhBQkAyQc3qD+rm/+ranedDv0ao5TFHpjXwcnHfBnByYUj3SSTawIy4oKxR30yr ZOEAYbfRsYBa2HNNZP+v8Euh8sJOP6cfqR/11oxh/1CyUDVYkPey+HELgLOgUmH//LE8QRtA+RQe AfqRBnBWwH+hEEcROLFHFI0CwUChEOfnQUKvYsnwvecAoFMwVBLu71TBwaCw8e/dYMzxV7D/vCA3 4V6CWIBYgQMEWaFrEf8S8QSxC3JeklnxXGBXwP1k7w3gZ9EDsvgwjBkAhgDDgP9bsVxDtCICoQKh OLH4cQnQ/93QWhEHkbgzWLHXUd5x+GG/8oANoANC85DygAYAUktAv7Swo+AAAd4SBYAKszlLEP9c kAfxZPEKkfNwCfA/8RBA/wKxXLFYxDfgMhQyRLwS2CL/vqDegg1xS4Bls+ERC6LasL9RgF3gDEFb YGdU4RB7Dejd0eAQcpBbIVshEEiQwqH/w2JbMmfSxCJykF2BarISof9rg/ghYJIAcmsyxORq4scG /0iRjoMXNSqRyKPIZck3GAb/dbTJiBdI2pP8QfqB/QGN9P9wtHDhrFH8cnDySCLNsgig/yl0b5V2 A+IzHZZ4dXeUIeT/frZ+1uMheS7SqtM2fychZ/990tcoIDTX/322IEd5hnrF/x7BGtA7kc0SjZNx ARpiGtH/3sHc4khBGQFxgs2lbwKUA/+T8xbTW/DjIbYg7QAtEegRft6GYC0QVZDg8i0QLYHv/4iQ MLIt9IoCMEAvFIkSMEP/LrTisopyLbGK4IiQiyVY8v9lAYyU5jb2UFIAOOAnEY1z/zNireAYxG/C bfIdBJNUJ7H/lHLOoeo2KNDOg85ySBPO0v8ZAJJ0N4HuYZVwSIJtsXDk/26iW/CDc91hg2Hu0o2U NsH/cpDsMO/jNgEzkTQhb8MdA/8vsT3DW/CJwJggKqA+Mgjg/z7/AWCbc0TyQdpHFFSRRif/RHz3 GEHW9HibpPZkm6ZG2P9HF5PBXYE1UDthlTCicZVQ/22yUsJSowHDkWACYFGgSk//wCEJ4MUgpmFQ GOXxAL8Bz/8C36nLBKGm16uCUZGZ8awi/7oA/YFJVJUgo3ErcJWANVBfNKCVUFXhmWHlYGMuU97f YCFUkptWsQEigOc0IJdx/7CTRpKw8iKAJICG0CFgJgD/oRBUkVSSDGKZg1cSU8AhYP9tsDpwGcBI QP1xrKEbUK3g6wpBhSDeX/CUE1LFIPPx/7XioRA4weVRtDNjUBDhWID/5WBicEgRUgBdAbhVY0Ix of9fwLjAEWFhIjHDMeJk8L0B/7l0vLG6AWIRu+C3EGMAUaD/awC3QRXBSiC5IRWxS5Jk8v9ZAmPB MkNkRzKQquFdQ16D7lphwL+RrEFaWjNhQGWC/1tBN9Fe0MEBSJCrgGgCaiD/s5Bmo2bExFPEQme1 w3Npkv+ywDihxgSPEsTDH6dsNMV0/2WAa2J0Q8uWgaLI9zQRgYP/yshvVm6Bc2duI+tUa9FX8f+s YVYR67IpIDWjolKsUTgR/8WhSJE0sV/wpAD8EOgkN4H/zAHtlYIxYGB00YUhbkR2gv/KA3dxbtV2 YuoiLMIk8m4C/24ULDNuAt7DI1IsxIUkeJ//hRXYMX5jhLMyR35w1cMyJX9+A3jm6bSW0nOihGGE AUL/oqHKA4PVNpNw4TYigmONkt9I0d5zeGjRgH3RpeAkifD34KLgsIiA7zrR4WLhcIgh/+HziKDj 4eRC4/I8gYkRiOT/PUs8keHT5PHsUA9AWJC44X8UAmQzjKEE00wSUgDSAd7/lITNJHDjcfUsAvFi QwST5f/fUjjSMBZ6U0N0d3Irs8fq/8n3hGGUVOyh6CN08c0U3KH/SEHnsoQA3KGC0Uk1lpfe8f/z NPMD8vTy9QyBmWycI5rD//S99geaJ5//Tw6giqAv+qf/9cIIAWvRrHH8Ne8hJ5Ci+f/dwLehYnCk Ev5YpPbFI4ux/6R3A59bj1yfXa8Ekqe3vKH/BcE/IaWRFwH9gaNTo3Hn4v+U4Wsgo9EH83nAsoEI 8Zuh/68hCSz7YLFAdoDaYAqDr1HfZNOwwYbwiUCGQPdlMZ0j94ZgZjOvUs7lEDngZ0SvUu/14U41 ZVIPAP/woAvhDQH/YiEIsmZRryG14SeQDcFH4O/9Y/2B88ERk4S5Qa5huXH/uXHEsbjAq7FtAbJC baOLpP/loroAq6DsUK5wkRA/w7oB+7ph7FCM5wH9wCfQbGG3wP9gIroAu4O4QD/1GHI/4r7x/77x F9G9oLMRGpGz0XOksxH/tGIa0bWQGdEZ0cAxkMAoAP/AEaIwHQMZwXThwIIfoMPh/x+RwRLA85BQ G8DA8WziHvT/kWD/Yo8jxgQgZB+kxgSSQf+iMcqIgaQihciVyfWCNEIF/zhS7ZQ1wymyJ+EhUSaR uyH/bRFV0vxD/DKjsBOhcxKzoP8RMikR7UF/VAaRQpbotSx0//FjOMU1Q9rVhYYsBC80MLL/hwbf hNZRycMvgYXF0gGGBP/SAzGU51Avc4kE0+TMMTC0/4ezMZKMlIPzh9LOoS9k7ZH/LbWNkbYQNiE2 5+8S3MPug38nojXEzbTJ9ETEZBCZUM7vrrChIZPDmaDe4QQ60+FQ/+Gg4ZE7k+Gy4cE+ZD5kPjX/ PMc8kjwR4bA70DrR5SoY4//mNKZBQJJwceDR56CNougk/91xztXtpi2Bo1Ghoe30LYH/6XNDyEYX NKSgFYfz34Qp9P/tkoOjYHHoVEtQLFHLwY/h/6NjC2CjdfDS8LJK+ZNwS/X/pdXzM/L+GzC00Pna 9DT5pv/7E6nyT9n336vM+udU560O/wkz88FpgQ+x5VFV0YGC7FD//AAOUFcDV4ERkrzgs1C5YP8F oOajBRZZEsTRxZIesQAi//5ZtN+177b/uA+ylxcBvML/CGEGVbDRzQHoAQeAG8DsMX1hwYwL8Q4x EfH0AGLx1v8P4wxxreZn4GQQC1ILYTng/wrBZPTg8eHg4jC/YWZT4GP/wDNm4WShRMANMGRTvtIM Y/9msvWwv2Fl0GWwvfE6QEsA/5Og86GUEPJww6IMJPMzw6P/DALywmmBJhBIQKgA5TAJEL8wwPbx YvHOQT8wxqKUkAD9u/ClxoE/If2xvJFwcboA/+wwcOMUkW8hxiEI8WLxurH/PyH0AGASEfIXQT/z AHEZQf8Sgm2xEIJ0UxqgzRN0snTC/3Pkc4ca0BqgeEB2I3bTGlH/zfZ244DQ0ATRhXUje0F28f5S BiEg8XkTH2IbYHnyH6D/z3EgUhEB1GF5pIGx8PMqov8qtDfTfnHeUehzNpKSg/Jw/5F0flQpMTWU g/HoIieQs2H3EiKAoRJiSiZhIJTUYf7x+/7gchEhEfGB4dWyN4G6APsfQns1a6fxp/Em0ILwQQD/ sbP8gbvCVsHfpOAyKUGR4f9IYeEG4PYOge2CYUGbkuK0//1himgyUPHwMvLkYvuQ5GP/i0HlQjEj 5XTmb+dLM1MxM58xKUskJdEnUkhirSEhkf+b0X7Ef+Dqgn5piWQy8ZOBvznhZcD7YMWhTFFRxdaU 0e1NQNaVMjrh3u+glaKVsP+VQD6RmJOWAPBmPPHxRPDB//CEmJE6gDshPxKZVG9UmhT7BNIEwhi7 4T7xStCIwaG1/9diknR+YpzR9wKd1J3US4H/+6BEgy9xK4EvcX1xSAM4wv9DsYUl+CFFoyuzicU5 AyLX/+nGJZGjYqNDKqGkhErlfKH/K6RLtwAUphlNVWIx3rFPpv9URlBGroQJJ6l3vJEHcNXQ/3BQ PyG6sQ4BDgHGIcYhR9D/OaAwwKdiDMNL4q3fVUTDgf9VobDBKEFWAVZi37NW9w5i/3BQueEW0LI0 WhVAIHGQeeL/IUB5Udvy9JNe5bRKtE8PL/9eHxIMF8EU8MiRX8C6Qj8h/1b0kPCNoThQYYOwwVci f+D/YmG6gcsBawQ4cGpiakJj4Pu68JPR78HgwxJk1JsxTUD/lhG/sWWAGUHAA2aCOiFlE/2+oZTB 4DNQTkFn9WaCwqH/lWC/kVbxKRBXoTiAkPC6s/9rImqkf+AGkEsAaYFpgh9E/zDBBiBfkH/RYrDF oGgxBiDuvRQhxiFoMsbEAcbSBtL/M/FjA690IREiZFVypZHk8f840UgBojG58HFh3BNAwSXi/23R YmDUUSajdQF0Fc0EzfP/c7LOsnN2dUB243Xhc9XN4e8qg9yAc5Eq9QArFCwGesL/eMZ38G0w1BPH QczhesF6ZP+zMyoBX7B7YYLhnGKxcOoE/1eRMCTGsNlBRqR+VNYUnLP37IRHKmFhjMzh3BETodxx /4JE3BU1wppg3CGZwdsBzPD9VmOUChFyITTycgM4LPQB/zkz8/I5lDgTNiRzIzsoJXH/esDOkSsy zzN2ctBRz2B1gf9LJYZD4/Xoh4uzPxY+3PwD/z9JQdhBV0M3fWNLEtahkCH/kCHr1JFD2THXgkYG BjAiof/HscWgRyEbQJOg7WJkkU5Av5SASEGUeJSw72EaAOeVxf+WA/BU8XSWhfDD8XPwRZXx/+9h X/G5sYIT3JBvUAxGmpP79OA0QJSVMabR4tAwwuEo//YI14Gh5KISnXPH8CKhUnP/nsFSxJ7E+GL4 Qp7kJPKdQf9PkVUyyrEGIGHgBjD5Yp2S//mE93f5gunWhIX8ZJLUxrD/abPCISDSperFZqe3qiOt f/8JFF2nqFSmcbnhVfJq5srS/8rigyDfgd9SgaCC4d7BBSD/s6BhskgRXdnElGlwrKAJof8dIvpA CyHfRLDEX1GxI7Gj77nwbYDcALJbIXrDs4LLMf8N8fTQmmNoNCXWEW9qf2uP/xBOcfC5wW8huiGC Ecqif+D/CyH6E2PBJPFUkPny+XD10H+6IR80H8PEAgGTcaWu8P/9GFD/GWGpQcJkGlKVYBqz/8B1 wmQY1HJxxCD1URvDWfP3GoEhowSx5wohKqh50DwS/3gjJWB4kpnAzWR5UrABecTrJWEGIK3CAMam 4APwjfH/kbAGIHqxG8CmIejgpwEiZP/F8yKFIRG8sXz3JKSRsH7B/5DQCkCCoTZyOtLL4JnAChH/ 0KN30XhjztE8JIGFKmPQs//Q09Jxg0IrwSrSJ7GDMoMS/5mQhMWCNCm0z+FnMNACDcH/LjQtRNWB 1JTdw93iLsXUE//bgQpiyrEzs+nzj4KKRUQD/zNyiuMz0+wjMvWxEIrljHL/NGQ3xdyg2vEKESzh Z0DeQv/LAWBC4QLggeF1N2bMEJGk/8wxkdg0sU3QjwFNwsu1NhL/miLMQ9sBlTV4xdBBs2HPga/S YLoQ4JAm8IzUAHOXYf+fs2PAntFAFpiMP5PpFT7e/0D6nmNCykMu6WdEgesSopD/n0fhIVlSRtJj kK+BRzPt4f+hInrxrsHAwhqiSKRJNu/jb0ozSxfx0kwB/0vjpTT//6UlS9bv4fMQNEDzwM8Q2qK/ y7GO4TpRlIQM8roAjEnB/cYAzrFRNDHdYdiwC9Df4f+qZlAnT5FR1fhDUmdSb1Kz//hDVHSuovjT +MKvRK62Vla/Vzb5Zld0iqJW9LFSpe3h/yCyR5AAQgPiAMHEyMUE3rG/vMECWXa0tzjEdrcH1j2h /60kxfK5n60lfZEio7XzB+L/YrcJEcODxwHo8P1RrkAK8f8VoWSXbrSpkmXC3kAMJRIWf2cTPZEN kRQh3ICAEfRgGP/zscKQbdDzwCZw3MB/oI9A/CkxJWCVETVxqDcMY8Sr/05mToQOYfQlTpGUYdTx yVD/PbDPYMtSbocJoXIRHoAjQf8BgnzBBeEs4R5xfMFYcO3R/wkwXtLLRXbxCRFyonSUcuT/oiJP UHHBcQMcAc5SAyVI8P8YgHVxF+EaUSC0GoLuUACj/t4s4NVwKfLS0ITmJ9En1L8n05YwKoLTISi1 lSMxeoH/7iB2UBxDe9QcMgiRfBhwsf8fJXzGfOLX5352CxD6QGDV/2FzZ0CXgHcxKEMqQdLV0or/ hLGXANFRhlPcUoSkJ6Pcgv+EQZcx3SfRUXhBhNLcQimi/SbwhJZxNGB5sMfghrPg0fctM2dC3IFS iGEt1C3ULRT/CmEzeOQlMkXlMuwW7GEv4f+qVOX05TQzc7NC9iNVg78z//ql+ZNGkjBR64GfUy/j C6D/6rF7QE4Y7A+UYpR0lHKoNP86gvPjNRXzge+CJXHvwoEy/9/0yCBmAPERE/AvsVel/DP/nTac +EEl8v9DYj4C9Ub1+v/1Yz3zU6NTlrBX9SX7RY3C/5xERvFS8pwgRvWcIAFhR7D7APChyt5Ikkkx STlKEkqEv0tDS9JL1P8qS0hJ0vepAX+ng++h73FOA8SnTuBukKX/TMSvYZChlrBgkG6QibMD4t0p YGupwgpAL7BzkKE0Mf/olK9hVlGvNFOF93cGp1Y0/1Y1VPJfUgmjCcRusQmSCUT/VOMLeldzVzXo 8rOUtINbCf/K4VsrYTGh4lzFXNPOlWJ1/7gHzoS1AWHBrGbXRblarkP/FPZYcI/hs7ER2rUEY3Yz 8P+uQL4BvmE3AcqBZVS/VF8h/4+xwcBmPCVgLjIt4S7SKaD/w4BNkJURw7DDIOIC4PF6AP8s4B04 Z8EdRDawebEesh5k/x3UH7RwYSAUHULDIGghaCL/aABmECHQv/B6AIOhbnFgYf8Y4m8RyURbk7VS v4FgoWOh/8+hJMM+oEeA9MAlcEeArkD9tVHeyXHO5MnSWHB0tc9A/VwAlIFBeiF5ZHmULODgQf9u EMqAvmF2wrPDdmQxQLWC7zaw3aLIUD0gIStygjJ3w793tCxB08PS+H9iOkCUMpD/1LH7wNXBWjJ7 gVtwe8Nagf9HAXza189ukDIFftOMQOsR/0TxcDBkYSlBKUHBYYaBgjF/0zTxMYKVeRXcgYTCwcBz /94U3DR3gdyS3HSGkjgEh5D/g2F44tJj0lWAcuDkiPHhRP/h1Ibj4TKIYYgE4pfjt0Zk/0/CnyKq cJCwqfAFNG4Q63D/0ZA/4ZcgYOAD8T9h5xJRsf+ySUIGsrOx40F1U2CNFIy0/0XRnxCfw2RBZcCo EsDDaOj/xcrtXkhW7zLvFE4Af6GT4f+nkY8x3HGP4OCCgGGPgI8h/wPxV6eX9fKf9Ar1jPTg8mb/ 9ML26/k06mCnMIjx4mKIcv+IUpcAwYEiEPFxYKAEUDQR/nNhYmHRZcBhAcqAYJAF4fqMGOGcrGH7 UfvnohDQUP+isHHAosKi0f1no8QAo/6l/1jfAIKmN6RBpsCnEkkk1FGvp7PvEWgUwkEhPrClWvG/ ozH7UQWiBbJd5DOxe4kh/1Kx8ZBTAQUAVEOP4WUiLoD/VJFgYaxhs4GzgQrkCrIKM/8LdWK5CoJh Y2FSQVFh+GRz/7Nj6PRhs2FzYTRiVJ7wECb/tVIPlA8HFxV80A/yESm3Rf/L8hFqvTBxwBCGuRCP 8G8T/xOifwFv0X8BrGJugq5kFSj/D/G1ZLgCvMO1AciQChC/Nf+MoBkxrBAEUQRSuUDo8ZEx/3Mk GbNSoBoi7ETAwgLR4OL7iWPiAznDUBwwdjHCwDyS/xzCO5Xh0juDO3WIGOLjiKP/iJPIEVMCekMa ATlR73FcUP8bIMfBv+EeYSJRIrQi5BWR/8l3ydHY0ZExvXEQEQjQyiD/oPAI0KmAoPB/ISUhyvHJ cf8nkSeRt9EwYcyigUMkYTPB/+iSyJNkU2JisXS+kbZRKsH/0DfN8bbhw1A5IdJiOTE5kv8rYt3S 0bTTZJYSOdWF0drQ90nAqRD7sdaItC8R1gHU4v9V8bPDLpEukTDBzfEnAdZi/zCmMewy8hfRcvNF UQSi4FP+czeDNfQuEo9M2tGPbZXR/9RAj+fwU9tEhYI8ER0h3HLfHTF3wsLw4xDdYkKTMuDz/+Dj 4iIbMRsxUcGWZnWEeXP/BPLmcQUyG5KYg1MUM8GZYv9f4UBj8ZEz9KsSQSLlgrMlv0QiQWGbY7JE +bKeomudM//lBD7SRUFEtuttHCAgQdFA/ikcQMJgXKTUUcNQPIAgI//wEBxxwtEfEjwQUtLilZiG +8GSU1KEShJJwe3hLEHZcP9DJEvz+NJC8vcWplJMBfcj/6Y0qHqnVKb5piWd8r4ifCL3AfDgsSGx CEsRrDJLUMLw9gDDUK0TMa0SHCCt0knD/0mF7tJIUnFBFiL7+FZi/Nz//eJXkf6xWgVaE/+5WjWy V/cAwv3w2aCUe7FKEwGixAL/XIEChtSBtPFXkdDBc4AEor8FEQURA8FgAErxlNFCIiH/uLErMCBi yCEgQbixUoFUZ/9TcehiPrED0ePBYTO7tLzU/1TxBdMioAWx2aDoYSQxt8H/ZFS/FWWzYSG9M+hS MzS7hP/oYXAk+4L7MmhnaDMXUxdx/9ohw2FqJGojxEpr8xCQI9L/xDgP4BMx5RAx5MqUMGMTc//4 AeSBBkL4E+UQUrHDM8NS+8okJGCESwBKMUoBHDA7IPtywL3hpQRQjhID8urhzQP/t8F61HaBtkMa l6Dw4MF5ZfXjQDF2QTl18RoR4vXQ8/4YOvLjReF1G3N1YtoxcsD/01GlgXoTpGJ5g1MzuMEcAN97 kUnAHpEh4quTKTQwvbT/BlFvgReQJNAXcCYB18LH4t/8cI2RA5B/EgQgtdkh5cD/Q9ApwCVRJhFE ICohJpaE0v8qgYDCcsE0IzlQrAI5gHvQ/6yAkaDckuEye7Fw4vxwKgH/JzIqooTgEwFzwblRUpEd 4f8g4oWhLVLw0YVRopGgsJTQ/yjBKMGVsjZSW7GIh4mkL3I/VfAv0S/RLpFtMSIAe2v7X7DkwXNR oOUhE0C+0CKQ/1GgIwBEIDHmMvLpgubjcdT/zAGOIZBgzjAbMEjzrZA1oP9JwDmBSmBKUUpQoaEg QndR/3QRBYHkwOSR6yRz8N9BIMT/k4M1sjmASxGRke1D6UEBVP+u86viOuWiopOzHMPQs5aD/3kz 0jYf0F+AYAEz89TyIEH/IEQekS4gkaFKYShwKDGVsP+ZNAYDnFWbRQzUnHf2pqYk//dXm0REqAQx NDCflEYAn7L73+GDsJTP8Vx0G/EeYRnh/yQxX6HzYRnhSSFSgU3RPzX/ctFBtUGSDJJuUAFSrwJI Iv+8EkLTpfYAdVB0qqeoP6pr/6d3A1pB0j6AHmF7sQwxQUH/CfQKgQa0CNAJ40QgyZMG1d8H1WEA t8G20T6wrSTQr9KfVhRWoVavV7tY9///DNP/WS9Z0bHBWvG1ISgh85J7wP9bs/8kXJW3AlegC2Eq YSKC/yKQYMRvkRYgfxAkgBug1SL7lbBfgIQ90IiAn2Dx0dDR/x8R8+E5gO7EIjBSgRiQU8P/5SBU wrzhM3KCERISu4FegP8/sF+DvWJfsJexFhFgAb3y/1SjVMNzQ7vDvHXBBiQxyiT/wwVoVMqWyiTD wnABajZwtP+A0cexxUuAIcNDcFRv8W1V/wIRblBoQ9eRyDIkATBhx7T/b2FiccPxbbEi0sOjx7Hs Ef8uIFvQe0BJIbWxebFyAXJi/8yhcqC80lSizRLyoewRe8D/zjCfos6ldQLdgZQxz6PsEP5CoGB2 MCoBoeF6gtQzo2b/dZOYkywS00KkQz/gc4AtIf8thC1RLVQ3kBYBjhE24e1R/y9w0ADVwerxuRFJ scsRc1T/5zNRIIyB14HXUHABlbC7cP/W8waA2aJFYPlQm6BegLyR/8mxVaCAI2rkgBGMcWrkgZGf lzBAcdwQPEF70CFSOkB/dgCs4OkwdpClgDcykGAx/2jUT/DjwGpghJPjkOLwtzL/OVC0oQsQCyAK gLTxCYHsENfRYJSQX4CMViDvOPGJov9WIL3QgwBvkCdR7BG1ITkB/4izsMCJ4omV49FdAUemR2T/ RwZH40uAmuGMZyHRybJA0v+vsOeRmuBFUL6AStGQYYeS/4cT7iZIUi+xO8FAEa71tiH/SNDPAXTV oGA2MLjS82FKFP9GpUsARzVH0lwBroKUspUh//PS7tKWMZVH79RJopbTd0T/BZJGgVvxECV0lVwT e3B2IP+jg1KgU7GawXySv5IGIU8S//T1ciKcOZvE9rH2hZ3lblDfnnJzkV4yF4G4oXOfxhBi/9/h E9Gg4VxyoDP7curRU0N/y3F0EulxX4Ca4Y3xpEE5/xXxzWFSUnNwwBFzAzBRXBL/dOPyEVADnLhR t51SpgL3Gv8FIv/2XIVbdv/nXgNRNBqg/3uxe7EGIZpRN6HLQctBoYD94VFCoaFhQu7x38G54dCQ /7lBuUTAAlLgQ6F8wK+ifwD/wgCJUeLwCkGwr7GyscEOgf+ytw15s/1ltQuRuzAPQtWx/+BCreGv M5+RdRGukQdQfqD/OcELcLAg21GAYGSDCnQKQrvi8FLglJFQroHzYTmDsP6MgmC/AIiAJ1DyMbpR dYH/d2GV8ezxy2DVQdVBYMF2kP92g7oin2AV0rrBn2EY4bhU/7siLxHL4ibiMLGZw/IycTL/UuEW srgUvPW4IXPU0VB11P9xUCbQlzBxUssRGXXNkyCV/8W2IPEkIcXVwfLXwteh10H/edPHEPIgyWMx YQfyyELIsP8IYsdhyLGqUf6Dg7C/wiYB74vifCLIYSMhve/S3YOiMf8wUSYBVve7UfpxgPN2wLsw /28hNiDhUa3AKFhNA/tQ7uT/KcIqMLkgYTAqAboRmRHyIP/TVNR00+SFGCdQLMMtoob095SQLXL5 YIyH4S1RQiGfYffQUaGBoYJS1eIwIrbg5GH/FkMZ8b8B57H18NnA5zKrEf8xoNdC11AywSdQzFAw sK3Q/2Ewn2BB8asAIsHa8yBAyCB+59fRx7Eg8dqh25ImcnP/NxE2sTdw3NHVUNzykHE3Zf8jcBKg wuHaoN5hODE4wmQg/wtwkyELkmtDOVHaMF6wOnT75GEOgP8Lcwtwt3HIsnui27nRF9B7PRHi560i gOOn/73QWMCfqZjLtuDf4eZ0QNf/5tFAcSQRQcF0ZIbCn2Do8P/vMOyAQrI2IO6BQ6Ghceqy376Q L+FIId+BuzCcSCGiQf/ygOrioaGWgaLxaVFCsaCk/0LhoTTtB0NBndFpgjchSSP/3XTvcfPx79RK MtHl7wLv0v9/gbaCTMNMtrZxn1HPAW2S//HC8jHroP2RvsW8ZE/2UBbv9gRQ9fZ2WudaWFNS0UQh /1LTzaL5mD6guUHHMdVhELH/+xPQcfRBVuAnkfxyRUCnMP+isxVBuZCJEDBxMHH9UHbA//jku5JC EehAQ1JqYv9i8iD/T3ZQ5VrmXme0qF28XvW2m/u2q+exnBTE/nHPYUNy+dH/afU+trMUPnivAEgw B6F0wf8loWOFG/EewQpWIEAK9wuy7zlyZ7cNRg0j78EUaAUOpf85ocKyOPE4wRHQBnCs4fHB34Oh hCBF4cuA1VEpEQJlcfsLEWUS3sWUNIBkwmwi4vC/bgEUki9wL2EjcMfgzgnR/yLxe3F9sW5SFAQ6 sUmwYfH/FITzsfOBb9Il0cqjYKNwhP/rsHYTzHL6cHFS+nEZceCw/7EQF9N1JHVRJmEW0XSTdFL/ HTMiwM/EIlQigHzSIWLmkv99YedhIJJ5tNezIPGPAniR/zSzIGR6ZCSBIPH5YUByIWP/fWEicdFi IWPWRAZTfVIwsf8mASGCIxF+wY3wQZEnUTYh/7qySDBKMfpxQcEmwfRR+WH/cuFz0vIgiQHHQmDC gjRMxP9M4sTRo6LwdCoBKmJwkvlh/y50KuMtoYTRGHGHEoeFLWH/LWaFQS4Uh+GIQTNQLvET8P8G gNuDggFtUCpARBBGEYoQv4Ih+zAwgxaS+WGlAIRbcu+M0DFEfWHSs95BkTCx8/H971Bj6PBWcAZQ M+Ec0DQxv45gjrA0pffA6EMKMecmwf+JAhSicAGfQCoQ6lE2UJBy/+sRb7DE8JHijmEfAThSGqC/ a8HFwQuQC4AMEO1B1u1R/wvREQHnUZ0QL/GU8Awi7XL7DAFjkLUjASNh8qGewWuR/zzjOFGXw2vR PVP6kFjAP/D/+fH64UVS8tQQU8TRQBN8kfd7pJslMpO1QDFTMuKBTrD/LVFDIC8gM1D24aEwnTH+ 8X9tUCpR/NEaoC/h/KMGgbX7+0GEIErvwRjAVKCJkK9Bv/7RMjE2IO6RBbGdAVpwEP+gkkmwkBBp wm9woUGiAYNB/6NSX7LLYUjkoHJhgpzR/lT/SiWlha7h//LcmPKTamJVMv+EwYCizTETwXMyqRQD Fakl/08CqmKqc1CUUJKrNlIUUqH/sbAu8FcwrKJXMJSxmMhUMf+eAdVA8yJMshDRoqIXxBWB/z5h ndH9c50AKXFykoPgF9D/4PBxUKzmBnKJEENyRWRFMP8j8U9xWHJZ1QV3Dt+qeKpW31phENlfNKo3 T0Oc/XRYcf4xdrEZ4G3BseAmUK1BgWH/zqFVsczxzbAV0VZhVnDEMv9vgV9hVyFE8fjxInK9xGRT /2xUvwG/BpNjZdTAN2cXZgb/aGKTIe1RlTE5wcXUZObFOP9k4zjxxWTFmjkRxlHGUWzht2zhN9Go 8KUvYUgwKSQw/45gyBI0ACHgegCR8PIRyHH/l3DXMDvgz6CcYCaxhNBvA/+KIcp0nRDK8ceQbVCh MCVS/0UwsFImIseC3VFwMIQgr3L/YqNiwXbRdeJxcjXi7rHpwv90o9sj2rFOQtshp/NxIuUS/3ZT cTOyUHgzegF5QXoB8CH/pKBaUSJRlDDSw3phemTUlP/esTERe4LUAH1h0TNAkpsB/31h1bKo8H2R ArJ90eVBe2L/2HKL0V8B3rFKMbKhToGK4v9YghTQ2nPaY83BbrCUwJ4R//khiZBgcLCATKbctwpS 3WP/YcCEIEQQcJCQMPBRhLGHJP+HJOHk39M5ODqXOmriQuJT/4jT9qCEIK9Rr1HeIsdR+TD/uxGJ 8YkBqFF/QbzBTlHVg/9+cqjhejSbAeVBucF3kUmh/+DB5+KOItTi6KFAZcfR6XH/j6ZwQTcyn0Cd EJ9A6vPKQv+JoLBhUuBAUdAxZDDsQZKmv+0kwMBloe3QGeOUQK3+Yt/X8ZTiwlC/IGfA5++WmsL/ YVBu4P2wHtGW5+zR8dOX8v/VQL1AruGnMM2wFcKUwUzy/3EQ3SGd0a9x9EGa106m9YL3m8NzYVNR hJFAnKSUkedw/fxiQvehmfH5MAmQo+GD8P9ZAa5hFbBQcPkw+THyMa5h/5nxolNg0aDz/DMBkP1g VUP/+KFVY6IS93Em5K9B/dOjYv9pVFeipTOkY1jiP2HHQQGh//PCJgA9cXLQ3hCJgAjkptX/f4Cn xYDTYyFuMLJhAtbXof8D5l4EqdOqUgT2s+G1MwYh/6jwBnQHAQbSgHEKEgflriP/NXBNkPLBB9Ov Ip/h+LFy4f/ZRJ6x/gOkgtfxhXClEPBg/wshsSHOwWYSCeGec2oSCAP/FXIz4w35BjJotmh1Ebpp Sf8SYwRyqiRsDALxcyD9dLPB3gikoBTgc2DV8Eoy8QZR/7QAFCAMwIPw84RvpaXzxNH/vPHOwX+h +PG9sRfil7ByEf8YcRhxeDAewB1hlTAdshnV/8JSv/IbJBsuwlcchRzEHnH/8OIY4R1lxeLFYsVE xUJ4ZP95iPCxxrQYcchhJfH34dIw/+xRyCIiwSLB1ACV4JgAIyH/0WGN4DDxmvHXgTGxrSAVsP/L 8YG1yoIlgyGBiaAlwSGh/4AkJTElMXFQJhJxUcTRJNP/fyEnNMlxJ8IoMokQvbRxsv/QsoQ1QAGF B9Wx2pHUwkK199QiRdGhMEIsI9PF1GKIQ//YgdKB3rH0pdGjhZSKStdh/zHAMbLXxJsB2LT1kjOw +2H/1/ENwrIh9dIjodfg37LgIP/wYAhAohElgI8yx5AmMq7R/9xhAJYApq8hr0HHQd4lJFD/OIKo AOBkOXUz0OJz4dXhIv/18DrKPEHhtZX24nPe0MdQ/z2TkbAlEMSgJeJnYswAPoL/2zDHQd0h51HR MYTUTzHSgv8s8jMAsWGkoKBB3cHfQeYB/9PS6UPo0egR0rEHQENU6bX/2+HywacwkYElUTYg64Al wf9kQfMhw4FGMbcARlPxUOzD/xmS7YFHge2CR/j6wvmxG/P/v5Iage/H4+FkYUcBSxFHAf/s4chw S5DxgvFiTDK7EZfx//lQu9YK8PBgZtGvMvQliXT/ShIwo6lS2jHOYDRRPMJQsf9QsvsU/DFRgeug RHT3oVKR/4+xAWK7s55hATWsco9BVkP/SHBV9lGQURCupKtyVCOnsv/8wlcD/VA3kv2wCEDEYGR4 X1iA/nRYoz0xycBSRfCM/r3WAEvwmkHkoN6g3JO01P9R0Vuy36HOwjOCXHACkQ3S/zPzAyO3El0r EyNdgwOlBiN9mZFKzqHOEBURYQMJ8Vr/kIYIEvQRPoE2QtyScLI3kf9OEUPxV6GwIfzhrqL9UWOC /+QQWWFlMbXTv7TgAo1QDNL/ZxabUY2kE/EN8gOEuH3Dhv+4xgQkA8UxwQLjAtVdFhNSr85hP0Ek QVzhAMngITSh+y0hyJNK2kFOQGWB2UJZwb/ZgQzl3SL44QykXbC10QH/5bAX0dBgfEF8ERhWcwEZ Af8dgRljdiMaA3QjzqUbcxwh+3YrGxL/R4DRAKNRRvHs4f8e0Uqyd8gfJR9neicgUXvR/3ri8bBO QPJQ8zCNUaAQRlD/IhZ8wXzCy8DLsX2AfXLlcP8jcCNgbQXHQSmQ3cIngiry/wdhWYIWowGQ3VEK gYBFf5f/gFKA8SYC8xINAiYBjzM3kf+EoZphhrKEgt5pLtPfMi6g34X0mmIuc5phXACMAZGGJP8u OC5zP9MvFE5gqUWKAdcT9w+wMBKMMr2LlDOkP2Ew0f8y4TKyQAD+AXAwUrAxwI4x/1Ai9jMCIb+B 7rE4sY7xcDP/kKjqD5D1DQEBoffhOCqUZf+UcZOxlcY6+pLnOUk5lZW0/yqhSHA94UTwRPCn4JAz vML/CTGBwgGhAaGPUSgBLXGFZP8w0d3jnSCf4JtRAZH84oJC/7OwB0BOQJnALYEsMZ2gnNT/AoD5 gJyDK5LxEr4hnnL4Uu+fUfGhgPEAAhBF1ZxRh7H/QiGg0dHAGjOjUUlRSVEZ8v8hUEhjNPFI40dR SREbYUnB/zARTzEx8WNxSralwkt0S3L/F/Ao0AigtWJTIKbRYdRwMP9t0U21shBORy9RTzFPwanE /6nx56Xv8/yhqxJVEVSg5xH/ZwL4UcDj8mFwNZEjWtI2VP+nA6xhyrFRoecRCKesMoCw/6xhCEIG QQiBJsM3kQris5B/V0RXQrIQWDRXp1dxs4NK3K2ly+AwAJwAhHGgPtD/Y5D5gZCGsFE4cDUBXABl 4f8pUlxhtsK3OLlXuSbDa2gj/7kSX7G3EWBxFuBmYrYiZoH/WKC1B5hTguC7cQeWvURkYf/ZYauw yfI3keFAJwFBoE2A/z9hUIBYsEphZTMo8b+B7LJfwLVwVGJATYBP8JTCIVL/2IFoCBIvEngRmcJi XQS3NPe39x9FtoEAZEOLYW9wVbDvjVAcIAPgXbA5jPAi4OXg/1wBSOC/sY6RXCI/kBaEysT/KPE/ QV2w5AJ9IITBJgLMRf9LUdGRe+DNNM1hzcNzhkkR/3VTKOd2AnbSePLQ4iq20PHfpaD6UUZR0drT ge/S2nnB/3b1J6J30kqx1OGJMZghSOD/DmDU89URfGR88XzyfcB9tP9949fQbRPK8cc0YWFmocCh /9lh2TRD8YLBklN+wH8QVrH/f2GA4txDmCGPgp6Qf5TcBP2PsyHeRN5C4ME3xYal4dH/4IRb8Yaz 4cWaYRqAUHCzAP9CQ5zCiGGINOIF+kBQUQLS/6iz9MHfwYXBhWM+YuUD5YL3jaSZcbsQpYm0XLHK sVSg/6pRxsIbwVAhk6NQcRoBTUD/SOA7EexRrYFjIVrT6XWRcf/qf6xhV3HscOwzgpKXEe5J/+3X 74ful+zm2YHt9/DDluL/jrCR0rOQfxDxwumqWuOtMfdTUTsRuxCchKKkAV/A9nH/nQKGIA/BJVHa JG2SZND+Uc9b8V2w1lH8ML3n9JL0APf3kZxxWWCE83FW4ZFyZFD/s5BWoFqw29PdADZx8dDLgf/6 AqBE3fGgMXvgKJKh8Xmw96GAoUKiE6WidNlwovKhsf9XMnTQaYA+Aajym1KzAKS0/y7iK8GEsCu0 pXH80ZEhAKH/DYGtgaySp+CYgTeBj1G8Uf+kIahyAuPmsanBjgGOAQPx/wPz8PEEcejhslB+0Ktx BaP/cFJjIQgSYgNf05Fil/GRcf+RQYDABWCRM62Bs5HxkOxw/7IQ2dCqoAiy+MJ/QAvAb4L/AKKn 4bFEbZELEwuXDLT1cO8LtwuyfyLZ0EL8QMVgtID+tbQgDfAOkbBwvPO1OcBi/xAhtiGOABBw5aHH QiACaxV/tyO3GB8It5a3hQPgjPAx/9lxFLFu4vEh5wC7rAIRRTj/riIhshpxsgCy4o7BgvOOsv8M NbMzGVHl8Rm1v2BfRrVS/47BG8F1wo3hwgJ2cm0twlT/a9rB83anIAF2pHaleJZ14f8hgJlS2aDH cWQBIaC3EW5xv3whyXEaQiNQIiL8wFrGsP8CMNjB5wDdAFJxIfEZ4U8h//dBMSIlwjDhMLLMElng JwH/JwIu8y6C06EoCoLMKjHP0dfTN9CxVyD/0LD/0kExYP69McCcASui0edZ4JwxpaH+1tKizRDT x4eR1IPUo6Tw/5swp6D5UItwMcDV4TBG1pTfJeAxR8bAIXD3MJS7EIwA+pQgAZQh8RDitsCOkRnh /xnkjcQZ4UsC2aAPwtmgMwH/GAG7YcfBUiKwwDVykHI1+P81cUBg3dL6ApH83tOTJN/h/5oxOYI6 UzjCvaIagOUx4aX/OmPiYuHj4sHjIz2kqbEyYf8x0QNRxaPlQ2pSEGRugL5iv77Q5cGkIbMAdMLV oISpwf/ucAOyXWNBwOUwv4K/YBBR/+MhosE1QtxzYDPyQq0xrYL/6p3coPGQ6+INgUaBwKHvJ//u 9EkhodS/4qHjGVAzUe8V/+768HugYfFwUrHxxeq8rTH/3JIbEVvBXAHZQEAh9nHfYf/+ItWgsvKy EpoRbnBAYN9h//YTJsH2wvSUO3SbEffB2oL/3RNPMTaR+RFS4gXxU7FAYK/eQlCBkfPGsL1Z4M6E 0vdWICtAr3Her4H8FNnws0D/wKFaQNDCV0KEwjHA/eEC8v/sgQuhWOKFUNGxiRGFsYcg///CK+H8 wWlTWrdjUluB3MH/F0G+0D/BAmECYpgUm6NBwv9B1+Xxy2AA4AmjwQPpSrvj/7m5RHOeM+k4AIIG AQYBAKH/APbcoNzRGxZFotoDNRIK9f9ncKljDDoXoWVz2hFGgRwg3pQl4D4A1VCL8IwOkGLw/0O5 GJFyUQ/j99GZcBBSP3P/eGprr20abgNrIwIxbnI0Mff3MBAiUgJKuagWM2Sxb8X/rFFxUWQA2NE0 IhqBjpLosf8zUdmwGWALEmZzzVTY0nQi/9mx5wC92TMBxIRucXYjG+H/dnRsIhxSeQJ45tIcaubS Xv/UFYvwFTFPIXvFIaDcwRUx/xvBIZFbcRnkIZDLkPfRfJH/fkDWcNniTTHlMRlRIZGLgf57MWF/ yyYAWeCA0yb0iKL/J52CIYOig4eDsifhiEMuxP/+4CFwwlEN8FPhhcCRsSvh37MSL+PfIYlAWjGM hVGHxf8uDy/RNIGdUTFg47Av41CA/zCB39I+ozEVi7Ea1E+BC6H/4QFCwUFAatHm8iFhM/GNYv8Z Ykag7MLs0Y3iGPIZ8zPE/zPwQrEzsaDQNJCPoOqyZ4H/+RJSgD5QOGJOYuwkOaBOZP841TmlfkA7 hjvSPlDhAffB/5kB7EM7wpYBPGKWFZPhqCD/XOE9k/GztsWYdJnBaoLEkvuZgTsxUhg0Y6Fjobix twH/IQMDgWsBeOMUgWnRM3JvIv8z8olRW8E3YVsCQ3Ng8giR/6XqB3JLgUuBNOHqkxoyomP/GdGi 4qHT+8ShlaMho7Wjyf9HdwQhacJLQWeRS6T//1/C/1vCW0JPgU8hC6GagU6RPbH/o2A/4KkDT7KJ QD2xApSVod9Q0VChOoSbQeCg5yHhq8H/IaClsjdh5iGssY+BrLEXUf9TpD4RTgFOYahiheGGgFUj /6+lr4GvIbBBVnThMVchK0D/KXKxAVZAJaA+ULcB4QFPsf+ysywAsvGA4VmGs9GPIBrA/8NxUoNF sRdBe5FcEVu2OgH/MaFAcjoRm0Rdxkrw/uEjUP9jQMmAYaDDcUzgveG5M1/j/71kYYATNhSkE1K9 4xSrFRb/EvIWlxNmGDNlFE0xZRRmYp8ZhGapZURPsmKhWlpZ4N7GhyBOUGhx72BS5mCfKv9pk/sC RrH28vNzP5TUH9EF93evyAXIQUKZcMihyKBuwf8zssljcMjOIFhwc8DLcktA/8uhWFGO48xU9oKO Is4isJD/mgJPcRk1wGQmlG9iFNVpUv9vYdaBxFLQAueA1UE/c3ZU/3ZS0GPQVSwVdhEsVywmKsX/ K/nncVpBnYBGgTsR1iJfgH+3kMRBWlDlwbiBctNPIDH/fdAz4PZBtEDXEHJRW6BkAP/VMXIBTyGL gfGAtvDZwDPhv3/v2yaEkDmgWQDiY87cYP+HYYIl3GDeAYPRhDLeQeIy/+LUO5GAYLZQXBNocN/D s9H/XHDywNhAOkFzwH1gc5Gf8P+FUYeahVGIhIFhheG+slKA/zjC5EDbYYoz5OGx4IsDiyL/aGDh AUzhiUGPEZoh5bREYr+f8cGxtEBC8Yuxo2CE52H/5qEpw5lSQoRDF0JTnRGr4P9usOahnSGPoeph 6gGA0q5z/whkrmSTB+3BUQH+ce3BlIH97lPWmcGZwZbwl6DtwEeU/5YC8BeTc5kxm0HxgfGES4T/ mBSZASri83XzsyTwDyIUpf9SYcjQ8rIRInjF9hO4JPbC+8QxIxJrBqGQ9VvDWoEHYv+9EvkL+iF+ cNcw+iDLoCgD/wMw+6FVE8zh+tKcY6MS/Mb/+8/81sP06IGlNJ/wrEH/7/+mlL2xB3GQQstiv0Pv QZpw/wLRlvD+cWJg9BAKcP5BqeD5ORClzpfwrlGFcAWg7lT/7cBI0JbwlIEFwfbBzqO8cu8OoQ/D UeMGYiGagZYyrkjvhyDgsK8hsCDWsTOv1osA9zLRsHGdMIyxAgny3GCxov9/oPIjslF7oYchCOGH IeAR/4WxZ0M6An5wtaDLEQ/wtML/98G1OA/RwZK2c7aT7cCbQf8t5BHE7fH+cXWBElFsgnOw/52A vzC+sG1EbRe0oP+wbkb/KYESUQqhb4VvYQpwcENwN/9wkriBbyJxpW4jn/C+scqB3xnfGiUZdyeC p+JjhcCF0PatqFDfcIzCgOsAwsH5Vv8PU8PIq9HWkh7R0KMgSiBN/99gxyvHY8hDIpAeAx4i6bD/ GyG5p/fh6YD3Qe8x6cDpgf/Mc8yUJgnn48BD9CEvoWaB/791zcSpYxMWuuLLoqvRKjT/KjMudiwo 0FSF1vMhhoOGdt8swobU0DaGlZwSew9U5YJ/uPEkMUSjgPIk4clB2TAQ/bJQKf5RIoLpMesAnTGa M/9dUtlh32DyErZR2cyrADUi/zU04KANMNupNo3h8jaT4lL/26KzAuChObCXcCHB4NHfwv80YI2R wjDfUfcwdnAL0LJQ/8KgDkA7mDgSkiXcIeBxk+H7w4Dz8VLt0JLiPjOO8apg75PxPtHlArZhpfSz fkBCAP/m0sJgq9DE0OpBP/DKgQHS/0CyBpEOsCgg6RGMkeahQiT/LzBD8vOULzSddZ50nSKKoP+f A480jzLr9evSRt3t89tR/V7E1vbBT0FIJO9zSlKq0P8E8EoU7RE8sGvxxIilw/MB/6YU8wJNol/i p2PJUtWh97H9usYp8qHIEU9KyBFLIXyh/4PCp6MF8b8RaPIGVPeT+IL/tgCDNLl35lFUIf8xVFIo Jf/M4a8yVXLM0s5h+tNXM/q3/yYy/NP2Y+h0qrDEAfrBVGH/wZAOob5hWk+59vexvsMnhX/NMmmQ a3BFoYyQpvLp0Iz//oAQYV4D7jGiYgTCXwRFofcCwQMwiVGMr3LrMPTAWYH/aLAP0OthDrBR4vgR ZfEIDKti4eKA1uJQ1r0RxmNR/2NR3KDtIAvACnDNEYyRCvD/ZBALYt1hC2DfYGXi8qEMUn+rgA1B wLQ+0GdlDXEKUL3/2HBoUWkhDrKBgpmTD49MYf/EkmsDEV1QgQxw13ADULpB/86RDHFvpmxjx9Rs hDExA1D/6BFVYfswEWAoEAxxA3FvQv9tEQHQmyFvQsgFb5KLkMdS/8wUtlMnwnM2J8PMt3VUgbff lTENsMExdiACgIRLQHai/xzvHfrWgXjiKyfTXCFae+f/K0SIcU8AqoIioRIg6KKrgf1ayRhpkMcA GzFSs1uhmwH7mwEbAFovwSmBL7FdUcvC/yVAZKFdUS+x9MBUQTKAKCD/2+HDgc+RG5EUAykkytF2 sP9Q0SnTInEqIvNxKpPe5YQC/xGAKpIqFN+U84Lg896iKlH/3fIvQuF1LzT28YLRZlEDMP+JgKhh GACMkekRMORccVYB/SognPngJTCrYYKBVJDqAf8bIYexi6CBEjmBTKAzo43//zShjzc1ke3QOLE8 oDyTkFL/O3GSE+tHPLE8tDzjOOKYYb+U0S9wtuCaIJTROfDWMVD/HIBCAJOxluGS8TuROGE7wfeW KOx2a3CUAgAkQA5AkvD/mCKYNDTRmMSOEGXhESBCAP8BoRkRmhFFUUEDVDBBchyA/zqAnREwgX+h A1HkIiQwgtH/m8Fy4Sgg4+FBgvdCnSRDtv+c5HiDQ8WPA0YFRtOg+zmw/wUiMuFKkQShBZFLUhDh mMD9pMPeUDFKkqPlpLGkhcSh/6rEUPZRFLLAqqF+9DGAf6H/L8EvwCgx3DAyoWFwfZcAof9PEV9h T3FQA0/CSyFZAVDH/6shL8GDMk6SBdO1UbPBJDD/rEEGRbUjrMJUAA6RW6Bbkf9y0RqxVEA/4BqS goHmQiiR/9nAr+SAc68XrubZwQrkKJL/mwIG4VtQJBAF0bQvU2cNYX+BMQ+2XAGBIRshxEM+gc6/ ESNHgWIhkxFGYV6X518x//6RjJBNIcWyVaEn4lxBBsD/XaBVcCegWXBhoQbC7sFiA/92AEa0Z4Dv QWQRY1W9xDeQ3TpQpZdhl2FRYHs7oTYA/72hOEA4EDkg56Fq8V0QxmH/OzDuMWcUwUG8wWdEOhFT 8P8jgQfiaMGowzBCz5Fpukxzf8TyawJcwMWaR/HJ4ljQCP8mYMnhyeEgsF1xJKEhkyFS/ycRbHNv kdJQIvGLoNdQycH7xWAi8QBvYdsCzBGBEcox/yGSJETGsSXFxpO10lxCzQu/XAF0ms2kYCHOYa7A Uugg91+A0FCaIIRd0H8AXaANkv+09neSf1HW4nhILtLTVITz/9QPe0TVGHlEiQFY0YvQd+T9ssFz YKF9lrTZfaStFE6T/5uSgWJuUXSBDMEBgVVg2zH/xxCBUUBz9kJOVTNVB1WDlf/eNd5JhAmD+N5k 4TPhtDsm3+I1PBvjQdcQ45NaQZFAcr8rclQAfUHacXIxHhAQwFD93lCU5dLGMWmQ5mFcMYzD/z/A zqHOQOe6S7KOL48ykwD/6fGPkY/xj/SQJJAm6tXsZ/+S8enx8dTEgF5hR6IbEmch/5LTwPCStZJh lZNJsu+R7Ar/fpA9gIpgp6Bl8HXwmDehwP61ocCZEeiQQoEZ0InRAuL/UWCiAddjMnZggrrAg6FR YP2cg4TuofShidGuUTFi9jH/9jFboHLhlQKcY513+JmeUv+gF+zz+mOhE/sD+7Khwh8A//wiomH8 kLnBo9HEoVYkXMH/tvGkB6Qy/qZr8bDIr+MLiv8MpAHx3ZCCYNyAwFKbQQd2/5dhp6CpxF2TV6Cq NNIj/3P/0mKnsjFlNlQGVfZCKSR3kf+BI4pB9hODEjPCiiCs8Gkx/zWRD7cQcc7QQMHOwRBiZNL/ myEQgRCCgSSBIYohYfMCeP9nnzOSEJLHELojbHHXgGNSvzPxs7BmhHLhsWCU0MZXEt+5QMVAjvGk sunw71ZUpDG3EwL+oBnwvYAw0nGUyVLv2bLboLrguuAIFRF2sLrQ/7rg84EWMaGTvFcW4ZFCFyD/ F6AXkJGxFyG/oGyQ8qDO0Je+kIOQ3IBaF0Dv/79g/xchcwGUcRnxpeEAoWbR7jH/FtHBpMF4GsCu ERxjwrGCx/8dcgXwalIBMY2CxLIelQQxt7eBxZw+0WMggcmBIeMA/yCweqDMYcxhepHGk3ujAkD/ IMHjACOBI4LjAHsQ5iExUP8kVHyhIePak3uSzgAgciNR/yCBf5XXcLWkzmMVIMLRCGK/JwYIwZsS ELEnAlFzUpOg5ypQKlAqQWtrP5AVQDHJ/9GCK8HR9QAh+BPS4YijLTn/LYWp9S/kL+XVxcWwjBB7 EP+wILFgMKPXImZyMduMHza0/2KV2QHYoWnz8UCO843DaJT/Z682pL5x3cLd0sXhkhPSkv/iA5KY k8WS6ZS/lc7jUuSy/9gQ9uQ+I91CW8EAEdpjHFD/HhDeUfPR5gOoEBxBm9HxcP/jAUEixxDnsbnQ qWDoILnQ/+gCQeXoj/HRQ/PqEuoi8JT/8JPsZe9wnoSeJPHWR3LEgP8WUXXySBhIU6Gx7GC9YOsj f6OX7GRI0VCCu3A4AIRAtf9MgUyG8qBCok0CxGC/wB0i/9gx+BJ7MHaRs0G6YAiBZwv/rKGzYZjB 2GD3FPfVBWH1oP9p0gXx2DDxcQVR4wT4z1Tz//oprbZVg69zQOClkVZCVZH7HzG38OdtkfLARxFY UuMA/75AWEz90hNwICGcEbnQxML/XjCcAl4xHwF0IV4wXiC70P8fANBgGFAaML5hqhFN0OHw/w0B 5SFi5HQhA9MTsFegHzH/eTPWkFnAkcT/hj1SZeRbYv/b8fWg0cF0UW5RbiBaMVnR/4rAu9PI8cjx IjFjoBzgNZL/HUHkQT5BNgO96zOTvw3AL/+O9SIwvUHLAvWQybH78dJQ/x9RxVEaQF4wbiFkMc5h ZnTfUUMJMlmx2wAAMYy0EbESfxIga7FWU2yRxsL+wMch5/3ywNbJ4f+AbhIj4CDRYYB/CGHzoHaw 5HAVEQJhFbK1/xYDcFL60fuQ7vCjEHGwcSH/GRHvkcu0bPDtkDUk2IHs0O/NEnDxFuEAUIweMeSA FBD/XCBm0eggpbB1tRtlcMHtkP699GHdUtkQ5MAAMOTA8XHfXCHQ8Rxx2LEeH62x0Zai/x+qyDIg cnri4GDxYH0Q3lD/euTVEX2xfbJ9MtUy1mPXFf8jgXtBeuQjInuEIMNAwH/j/yBhIGMjUoNjgUWC coMU2/VfKAHcZ7XxUXHxcGMawMb/hBE9QPTA9wAqozIYK5LFMv+GE/9j4nKHJodFLeWI6y4z/4lI ORG3MDCQWcGF04XxAHH/J9M0IQihySBcYOYkqcHmiv+pxM3BHAHuQUbAEgBCUPbh/3bBYWR2wVFx 6eIpMenD6nj/uoAAcjfWlAPr75OGOFXudr+UP+/ckdMrwT2UWcB7Zwb/IjHJQABQCUEMoSNgAGA9 Qf8wUasjCaFAwfQxHjEkEIGR/3lhtVCbk0G0nNGc0UJ9nZb/RBKeWJ6W+OOgJ6CC9/RDYf/7I0vC R4hD0UfDobGhsUii/0TxRVT9o0ZjEpAW4B3xpUH9GjCtTGNM4qZjQgKm8hXg/0/BqZJOIEDx9DAF oDLDHQH/FWEoQKoQXAD0QHrQHgCQS/9RIh3QKTGX0TvDT/FnAYtg/W4hc6q0UjhQAVNlVSIWYv9U VAf1VSFsMhNha7Ft8VdC+xcQTeClE2Gw4W1kQ8DHIf+xwQqjWEIMUm1hssSv8bQT/r2zsbOxtBO0 A7SxtIO1Yf+loUQgHCA94BiyLSDzEbZR/2sxHjG00l3jt6MtAHQxXnH/5RIsQxMIfaC6giqQhmLw 9f+5UTDRu2F9KeRhFkIrwPFR/yARehAW8RdSl1H0IeTwbjP/aaMoUCJBPyFlY2VTm0IYwv/0MMTD NOLFUUDhecJeMMMUnTowrT+gXlAcYDlzHHDse7Uc4SNgnCOxP0KAwv8kMXLArEEQ8hFiEXJd4G3x WzowLWGtsUFV0PcKUPftVdD/IKEKUP/HMW0xx8H/0zEj4RViabCA4qVQbtGlUP8Ckr/hS5HKBAfk z9FW0BzQ/5jBhKGogCVUJZHIshkBuzD/qDFusMkQqeAnAagxgjMZE/9lwbaw0AF058/SVLF1gHVx /92RMwJnEKgxgsGCAjFwZtL/0cMQIZuBeHW0si/SeWIbov8bgtQjPtDaM9Vy15VfoHry/9dD4dDW NtYmMTMwMS9yIjL/5GAxwdWBffJ6oi6zIkHVBf/VEn3x27PckuWji2BmwSNQ/04gNaFfsTWhggFm 0YIEUXHNWcBrcdBtUKWcO8C5cP3JQTmLi4LA37KFwYsCuWT/uQASATrih1KHOhIih9nhl/8f0Ioh 8ULVkYqRWdPk4or1/z9lhdJAE7qzECFA5FOC3eGrcRBxoPdyAP9xQPfLoP7vb9HrkR6UhoRfIl8E RFn/kcaR7JJlRhvw1Ugf8NRIBv9FitQR5PD0QJeUWuCYFI2T/7awJ8T1UWSS0hB8wE1iZAT/Y6FZ sc4hY6D1RbUB9bvJ4P+cdPcJUbL7IqEC+BRS1KCF/1MU+sWhMXDgUcSmAVHz/SHf/PP85srBysFd 4K2g8aKh36S0n6X54aMQeLC1BdH/Ef//cabCWYQA0yxCnFHh4BAh/3ZhqiGqgatymHLe5Zhjq8H/ L6DecAYBlzF8wGTggbKEwX+QZdigg8BLEQHx3tA3gnP/BiFDcazkrInvMK23reGttf8I4wljcCGv s8gACiGw4bww/7DRIYBkwSGgDbFtMMdSZIH/DJZtUWaC9zCy4bNCtBGIwH+0AQ6UtAD3MGeCHzFo tZz/nHB4YMxRuoN0IZrBuSH08f+4ArfiawE7AzryLYF6QPRA/7lREsaGcoYhPtSGIYqgF8P/irHk geSABfGXsBWB1HIVmv/WNDJxMnEdcbcw8/FxxR1x7xyCcq8cgRxSa3QCdHEcVf8dUcNRdIB1wh1S HNKZ0HYT/xzzcdGKcNgBTcFNkl8R4IS/H7G8MDsBt8KbcQvgznnk0SEFxveMx0CEZqCyMPr30nDG bnHDQCIRf+F+Mf/0gqtx5iSo0qgQ0nGvYS0Q//uhryNW4faBBYAFgIQwpYD/hDCtoH/j84CaIE0h 80HroO/OwYERo1DK4catkRUQEiD/7zAeQLygqcDQAc7hAEDPMv/owc9DKfKoQYyPhLUCcR5A/9Iz xcLS8tMDH9DTo9PHb/L/FNDYEHxwm3DWxBWUiRXYgf/WcjFB1WLWlTE1MgQvAtZi/4jxiPH0AIix 1LLYgddoMgD/54PcMuWh5gEnYCeSj1KQIh83IeWTkFMn0jehc973+SCQxr3vMENw8eCPsVxa/9+T PpHk87jU4ME7KzxWPZP/4deWx+PhmaFttATh8WHk1P+3MD8imTOZJOARmhM/Ez8C19/TpgH98O9C kP9CcJwi9ZwQ/zfg96FRbMJ4pO5C/0nY9ABFv0ePRx+g3kkvR///uTNLYl8CS+OpwKgRqBG2sv+m McRCOMCnI05jNiGoI8Pg/2qBASBPESeAECD1guPAtHL/s5JQOvbPUgFUoffZ+sL6pP+thlSaADFV UQAx+yIp4VX0//eh/7cAEFVR/KJXo/jl6HPtzgCcNdEQIFL/01n7LEH9qYOUNmG24fHx8fJdEd7Q /9rA9LA4cOoTfQJ9c3zgbKH/BSAc4PPB7iFsgPNRAfD1UP8lcEMxQ/DdgV0B0SFgMgcx/2CourVg YWJyYcUI87xUCRr/fqB78XswYyAhoGhxIKFks/73DbFloWVxC9IMdQsAx3H/vaJm4sNxIBFnsSAR UNCSMP/CJCyBDDAN5B+BUBFPsWn0/6mx38R5IeOCa4XN4wcCbFL/9DFDJB6TExU/A27CbnFvBv/p EG9DfCMzgTNTiYnWM85A/3Hg0LDkMB2Ay3AQcHXQzAH/drHMk3alzMoc4B0yzPHOQf/Oo86fdvPQ WsvRLlJ8kyKB/digWvDTBrF5RXlRIBOy0LdjoHWg+KDWIPF6woQhcP11oN53cdnB9DAVIS4Rh4T/ E3MVEOSABlC1k6lhIgAj9n8KMQlBgsH6oPmA/gDZU+//N/DZsNmwkfCC4fMR3YCo8e6U2aGR8Jvw 3vmA2aABwP8sYSzwIgDzUHfAgpUpCIQA/1Jw3bKEICpDA5mEtAO1LBP/hpgRcXmCLXI+ANYDLiUu Y/8iIjCkysaLVzBiL4E/AIix/zEkMbJwwRTQp3DpQC0w5GT/iUJywHgAM1QvCjIANkI2U/+mZDVT 6LOO0ul0NpOPYTdC/wYB/fEtEKmhRSA4gCLxONr/J8GTwsSRFROUVIcyOyLvBP+VOMtQPII7qTyC 7xH0AZhx/2qBPnNu8m7VQDM/BJn6PwX/EqBtUbKBQsFCYUIQ9fJCYf39kOctMOGxFSKh1J4bEnH/ FLT4hvmU+Ev4X/tH/D9Kxv/7JZ1C/nMXwUBAXWBLlJqx/08hTCIrkQBnAGNOYqfjAIL/AJNqgWBh p3FNQU+xEUKpzP+qEVCtC+BRgqvKq/GsVAdF/6wDrvNRglEEWdSvJFVRVbH3sKS0B7EztVXisaNT dVJg/xKgtdBdQDexamBQ8VBhBJT/tIcgALXBt0BOYG5xPjA4cP8qcZFQJ4AlUZHAd3A+wF1gvSaA Uv8x/wJLEXjQMRGj/7fySZIVUbigRUJMEF0Qj3H/67FgZrpTFBZDtGPAWNCDsX8gUGMzFjq+Qb2y ZyFywJz7ZyFQ0MbT4WThvrS+UmPA/2bxIBF7BHsweyBnABoyGqHvZwA/AGFwLRKtwYTC0uC2/+DS Z5ItIE+TfIFLYS0zuHH/qOI65ZTBeNHHk0UyxtBp8f8/9MbH9yKUAz7SyLYi0m+h/3wzI5R8gDNV iORvkC5wcMT/cVLLkMwQMDAl8jJwy/PMc/fMZ81WxHBjKDjLcMy0KDb/dpTNBXWydWF3dE2h0gPs kP/ScYdzePKHQX3QePG/QcDBr7/gstB6VNSAnNSwnNSA/3Wg1DIuEXvzM+N8MCMyfGL/fHLaodqh TaA50GMwvZFqYP9ScbwzV5CC4dkhMzE38Nml/9mhgxExQtqAgcHZottw2VD/2TLbwXjQw7CXwT6w 3IFpoP+BQYMEsJCDgN3Rg9TyIG3Qu+AQ62BKhhGGEV1gazkh/zgxDvFbsWpR4HoEEXkhh2L/4daI I+ey1ZGM1YzkiSWKUvfjFqYRAiE5jEeNwv8wk3H/b8FwseiBy0ElEuiQ4ACCcPskMefSjI4h6ITc gKZgECD/plGQkOn0pkJCs0NhjtJ9FK+PEU2ghECA4dZjIbVgAN/y8LkA3thcE6bAQmqB9RT/IDJt YsYi70/wVZaalRJsEP+X4fNhmHES4SJE8qea4fISf5PRmgVuwk5VmpPGwZuj5/2cweecQFAx6+Hi MOGw14H/nTGg8qHH/aX72p5JcZH63v/42vgf+kv5Nv6VWKLG0PSB/xEBXQGlwWzD9WD3YcbVxuP/ xtYgAm0FFUPHMwDhafFQwf9pYZYxqkEEdqpmfwEJBQW//wZlB/QHAq8hCMSvIas0BTX/hAAGJa9j s3S0BbQTC2SuZO+ss4MwMwClYFKmUe4wf2D/ZLMOCbSz9wCToA/Q3/GA0P+6AUKy7KARAOyQaiB3 QP3S/ywxfLH/MRLhd6D/4P6xuDD/EfC34VQSAdHD8RKzD9J34P8PwEiSuo0U6BbYb8gXJRc37+iQ 2+DBMAUAznsxenN6lHfVIC7Q91CUewF7AtURrfrnd1DndpAuAMEAciHh8f9x8ZdQRjAGUMMEwwI6 th0x//EhHWI2MCxhAsE2IcXRuIH/xyXG0MbB4BHgEbiBtnOAkP+24Npwk7O4wMmgIRUh5ckR//JU yUJ4EtIyMYN9kiQDMLL/iGNAcYlxjHQl0iXiK5Altf/LwCbSgCKAx4DxgPErEYIS/8xFgdWB6Crw y9GCctGA50D/KwGCMSuQ1rAr0mzBMSHagP8focmgx3HGUYcS1lEYUxsS/3JR1KG/EdTSwQBzQYk0 F8H/8SCq8WHxcnCSEJdgL4C/oP/YMYqCsiDgoS5BF8GKgTJh/7GQMrIMAPYxjTT2kDPi2dL/3LHa cPJg2rH3ADMxRfD10P7e9dA1ojoxG6AtMcbQ3IH/NdA206zBN7Ov4a/g3WKXYP+vEBcANjCxIJJ0 Y5GrEa/g/9vx4ERPkcKh4K3WUTvz4hL/frUkk0CiPVXn5UEB5qPnIf/mMKdR61A/4iVULPAr0Udg v0LwMGGZYssy4xdB8ko/pP9BIg0RprCmckLhDyJC8ELh/+pkaeHp1eoSRXDrYUWgE0G1L3DWviC1 1rDJgDEBAP8P8Ozb62Dtw//i7lP3Q7gy/3Vx7wUfEvGR7+dJhqNE8qP/IyEQ8dqQTFMiR02UTZNN JP8QkahFoiT1Qu4wDsFLAJMS/x+AHnEgUvSB+TT351fvrMf/rYv+ou5jrrX+g6wdroT41/9YpbCo 7kTIMfNQxABHYe2g/8QQehK0EuARofKh1SDjINH/8uA2UTZR1uHGwddEXSf28f9KkR2TBAReNl7k BUMFAV+Z/1/jYhMbkAi4XtUK4rwouWf/YmYK9Q5iDkNfAQmCZaEIQ68IAmIQ0dACISHCoJS+1//D lA7BXYIVoOlBnXGqlJ1x/8mgQbCggCtw/+AM8PHhApL/IKAgkSwz0fBq4bRh95Nrkf9ZkntjR4ET cXgxE9Zt8sgx/8gEaYHINDqwB2GL8BYjyhX/FxPK0nFCcbEX4NGALzIao3+IoRjkGLFI4Cth7FAa cb3u98+gdFIogN4qYBlgLwD9KmDW5nFx8XHxzXF1sR0z/3YCOtHxIfEg0PTxEn1hHrPfeHKGMaGR nXHTExDC9BOA/9M0nZFAYEWQ7ZGGMEexESP/qPJrU8URMSLFIixh0rJq4v/Xhe2QxbB92yR0a1GX Aj+0/392QkLayPEg2sHawStx3BL/3IQEEOZx3Hfmcd3FgNKWEf/epU3A5yHlEJ8yA0DU0Tih/yJU fFbycSzxLeGIEi4gGgDq9/WQ5yzwrQHQe0AN0ftywBfQ/xZQ4pCMQc0izKG/iSBxQAvwy4Lk5NJg xi5B/+V0MpIypjWRjwE1MjNmZaD+vTFEFZE1kfXA6+CPdg7C80uRNmIxjJCxMwA3QTdE/5FykYLl wBcAvMHsOpPh7DH/k+k6aRuQLPGVku9y3hFO0P+WNiRTMBQ8oyzwPgTx19mh/w9QmjA/Mpmim2Wa IkBg2YH/PnJ/wj40QTTyAz6A9XOdgP+eUNRznUGc4dRkE6FD0p5x/0Sj1MOGISwgRnCzMXNAYfH+ rf8w1jBDIdOQRtT65KGV//9BT1KyxFGiSRWjVaQlpDr/pVRTwacxfrDWw30Tp8QA1v8AxPvkIOBO Z1kSWPVPQ3vR/9Wk/EK2kUhTq3hXja4qriX/Vk6wWbBBVkIJDLAYCKmyif8DcxDBaRBCsKFxDZsO lNMh/w6XDpUNup1gE3CmQXiB0ZT/XbESEsISuJhe02MVufcUVv+6phTzuQQTCV6VwgC8tWNU/2L1 vrdLAGU3ZZNkAzawR4D/Q8IfII/iaAYSA1DQ6fGQUf9ZkUSRXPHFM5+gxvDA4U3A/20AaZDGgzaQ s9NHgXphxNL/SAFWQcbwnXJE0HtSNmBHYP8RAEVgfUA5cFGSIfTIvclCf2hh7tTu1Hdi0UF1kSTl rftI4IKRjINAi/CI4M8hdAH/LcB0IHIwy/ElkSYhSdAV8Et0cCqQ7yoA51rO0FL5LwBSlCjhNGDR kOMxm6D+rXHxdzDQNdBElTEq1NEx/0ix0fV4Y58iRTH6cNQC1AD/bXHUAC2SoKMtwfdhRUBE0d9E 0NUietANM32xSt/RR4D/wQFDMDCBLSHHUfpwLLOfQv0xw0IyUdgg1+N9cX3TfWH/xZDZAjPSmoF/ IdmClnGmAf80vTRSQBEz035G2PM21TUy/zZlNzZnAIYwwvNEI58ER6P/R8JMs5VhilBxgXSwJjHO EG2BAM5+sFFBnOHhcjD/83LAUIDv/3Iw44BQYCaQ/4jAPCBmUOSk5KCJ0DwUvnD/ysGMI3AgjJaf 8I8BjxSPQP+PMekQ6DKOcDOSyZFF8I8x/40Aj0HpEKLwHILowJBFHKD/+iCQ9pIxqgGRQ2HwZlDs M/9GUUaylHHtg0dzlFPuEpSy/2hRd1GVJAihlbTv4ZnS8UP/2TKXE5bSl6mbVZdyorDXkP9rgZlw 82VZUSBx+oDRkPIC/3+zTqRMBJgymBOchPfSnPT/nnOeaC8B+nD4wvimn1F7Uf3AILV9cMWw94Eu UqDZWZH/+nCmQQHDfAIDE6LT/PClU/9XNf12/TilUa+hfBT/5Hxz/3ogfOIAxacDAeWoJVY2AoP/ VkSpBF3I/Feve7KGriKxA//cQGCYYZ9iSF/sZCpjbwMl/2ZlXRa1YmeVtSNoVmgV+/L/aSVp+rUy h1Bu4f1i0ZO30/93c8IyuLft8bkZE5Sf0BO4/27kFgUWQxeBwda4lb8zvRj/wdkb8r7UGEK/o+jA txGeQP+fkBtB6fHCBBw0t4Ki8LNk/31weNGcoFWi0hHXgR+AekH/fUB+IA2AUqHgcHshx0Kgof8v ALG0EPYeYLag+nDTALOh/x5Rx+CqkSIye+IjEHuxfHz/HGPu8u5DGYFHc4xgftTCAL1/gcaFgIpA iRDN0+/QEH69hYB/gXSg7uCV8SfQtfODMJAQnN4owIIh4sApAOmCkozOgvDGxfADMCmQ/4URKbEn csAghEKUgyqk0BD/kBGlQCvWa7KjgMTRoYH6cP/VELPA06Ithi2xLcEuBC6T/56CexEfkaHBxWWz wNTxnyX/ioPGsS1D0/ENslWBjIK3MP/UAPhQjPGNWJ4hUoEwYp9R/8dBOaMxIo9UMKKZAY1TmSH/ tyGZIZClkaSQstPBkkQOd/8t8S3wVHX6wS3wtzDowRGC/4ZjwsCk4IRANtE20Sthf5H/JcGBcSmQ +gHLUuVBPCA9sP89oT2gPiHkIT9EP0PLsj/R/zxC5hhFMuhQQ1FBcueBQbHvm9D58EDgG1Cl1nQe gELx/5/w6UJBwvzwwrCjgfzwtdH/RILqxkVC5pBFceuk7DJHBf9/I4SzoSlIwkik7ttJ1QJx//BE SnHxkvPi75DxcqSS8cP/pefw8tnC8dKmFabi8OHaxP+DUfUBg1H2IfWR84L2A/Vk/1Dk+AIu1FIU LtZS9/jBexH/rSJToA8T+uItsVTpVVYhEP8BZFaE/LRXSf1n/WL9c1fz/54xDFABNNcB4PMAZzsV WzL/W99dR111t4hmZwqPegNgf//wEboOZJ+52mQoDBRljwxk/7gqt223+PxTBOIMpAzRyYH/xARr UlchyBCylbJDa+QSFf9ssnC2bXxtlG5dfqHIJseE/3EVEnds3BvCddZ1Y3OiGPL/GcJF0DtgIHDU AN+wevDp0d8bUBIUxkJ2c9KAhJSQ08LfHMEcwi6h+oB4E0r/sB9Q/9eg/7HVsSCyISGM8YlhL5D/ DNF4QfsSEQAEwiGwOdL3UP8g4nyixFYjBHyi1uZ3YOZA/+aAQKBAkOTSQEDYOOSEJrBv4gDlgCax JrF75YAmgM7zJ+DYYM7v48Hjwdrh4qDvgxAloSZQggbegpODEvOB/++Q/0GD0SoEhJWEoSqhgRT/ EbH9cbPk35LhwJE0izQdEf+TdS4S4faURC2B9vOHER8B/5yAtDIAEoohIZD5gYmydtH/k7pUdZPE 4rbmwZNR57UOo//odefK58fnk+q054XnnJMo/5Nm7PWMES1jhvEzsjAB7uL/MxPzETEhh2DTwDEA i4AzoH4AVcB7YfWQNFWj8dtw5++YUNtgPmA8sO+YgT6xPrTvPBGZofHhQAPOmRBAgJpx/0DQROCa 4Jrx+fCb4UMxnUDz9UFFkJycQnH6cEsgQuD99YXOQKBBsELRdmEFUkQg/5DRRLSfE0WSRXFFREY3 RyL/fxShOfvnxtTflKNihEAC4P+jtaRTpWQBIaUy08Ckoqby/6bTpsT/QtvQp1NMVamUTDH/qHGp Y0+0qhIBJEvXSrBKoP8a8wS4q+gu4lMlrBwuBa6K/1UliREfgPaBr9a7AMEiVub/+EBXKlcpC3FJ YR/xs7LkUf8Nw1pEDYNa9Fr2DWK15LXm/7bMCoS4Z74+egK/Fbtpu1v/FHq/jhJ6Eh8YaxcsCoQK g/8RxBHFVlZegMCEEzlfhMQz/7DTVyayMmwhxiZsQctXIW3/yjrKPCrAytkg0iC0bLZxVX/Lls/U xhpzx1ORULE7YHO/zZF2YimGSyDQgfhBY4uS/y8AfDFVwY/hL1A6sVIgrcD/uwBOMDJgWYN5Ugey rzF1Af9oYdTxeXIxASvADWG0UHtB/S6DY8PUL6k7oTCz1wA1YP9rQUdRRTDYIzIcPzJAAjNC/4BB gEA8IIGghYDOADvg9OD3QSDZQNsx55TylZD9wdvQe3LwPfBjNkGZsDaQNlCc/zawNwCUsB6wb0BL IM6gO+D/gLCEkYEChEHfAjiz32GjMfuyYYX2nEnxU4DwkZKikWP/ktPjY3pSjJU8JT0o1SKQ9f+S JpMD7kTlr5QI4teTJJLD/40RPbM7Zz4Fj4OQlDszk1P/4OKLE3bBexDkworUiwRGuf9GooqiSHJ4 AUjieqBIsklR/0lSVcCF8O8QSlN7YfFkpvLvd1CkUVCQmRH/l0DbMUxA/s7bYvKymJHzgJoCl0DZ AP+AcNtwmmR0kJ8A+VCcQVPw/9uw93D2EJ8gmuFPYLJA3+B77zGcsoSdAZ1AT9GbAc7/WWAqUmtR nlRXgPlBmrL0wf/OgZ+i+VKgIvsk+yKaAPtf//xjouH84lbC/WSjmaUxWdH/nnBcgKRS3YB6oNJg s4DvIP/vEe9xeJBcgNPAWQF4kfFR/6ZSqZGmZKVyBDMD9HcQ/8H/A7UC1KZjAaODgKt4BkMHVP8G MtHBBkdgqXnRk9avFYjE/60j49LkQWlysDMekgr2sOz/C/kfMyyiDxUOY7QmZ+YPU/+1GQ/9G2cd d3n0uP8WfhxX/7sBbw0chxuVavi7U3BrGy//GZZzKxDGEOhznRM4HoAe3v+yIZWg0EEgv8i2yELz 0H9R/6Cwe6Z8U6AgyYCXMHzSfLT/fLHJcXuTycXKkctSzOUlo//G5CWTz9OA9CCTzXMn9CkR/6qx q3HQkdAxhQAplrLSxaDvxTAospNAaZBa1aE58PCR/4kwrcArsdQh3YAdMhCxLnF/itOPcZDy5BEq lD+R5OBS/9Mx0wGIVdTww0Qwk4n6MUT/MLLX4dhC2CTYJfMAjOTy8f+YkYzh2vA2QJflTJCOophg Wv/a8P9MMI6izo7AvfuYMDbQ/zQh2rBOIDPT26Du3qRgsiH8kb1XADg0kjT/3mLeFJahlkHggaRQ DdE6Qv/+Iu+QREKG4YbkLRJHYpXV/+/A4RSWykcbRoBFwZihlXT/BXGvgQWolSQtEq0SmrdjYf9G VK/COgHu0eSy76HhMeT0/+SSRiLksZahSWFEUTsjRcH/RiEOUMQgs2HkUe+TOfDk8f+dQ+ThoYKh 8kjBojKhgkph/6LiogqjUvFBpFJKlUrUWgH/OoFMgUwkTFHbcUznM8Ezwd9NQk2w2BHYEPSBzvTy 9QDvqTNP0k9Ug4CcoLRQ0fWB70+BqzL3oL5weypiw7EKYHc/AbFQU9HG+REjIPlktf/OAPnyVDtU RlVT/ApWY/Qw/zpR/WH9wrri/eVaYVpkRoD//8BaEVmBs1JGoZTRSUHw8P+0EQ7QLnDkwFuTtPNb pV0D/ytABAH/grVCXEK2I15RtnH/teT+sdVBX0HTkILSmiYFM/9fVJozYwAo8LjB06EvUJow/y1T YlUIIILDhbPSMA4iY+D/DWBKsMNhHuV4Mb6JCze/Z/94IhyD/8Fo8g4XDbLgAw22/2jzDuVp5xBz cSYdF4qRbG//FAJtv27HdVRu9nRacD7Lb/8Zn8xpci11VnD4Ec7HJB5k/74neMogQfzSJcIjxSQB ezfvKIF8VPQwfTOt1eP5UPQw/9bYfOl+Un441LMm1ClwgMX/JwYgAh/iKkEp49njIACq0N9gMRRQ gzH34SpRhFcAhCH+hIQ0UME8M/FhS+B1QJTjfz6RmeBfUSwhKqBxFFlwOf/g0e8gL2KecyjQP9Te 0eBR94UA7mNKQVot8YuBiaPjx//jlOOR3xHjkjG/jJbzgIzQ5/Kh51Cm8dbvTbBMcPIwP01QjzCO k49A6HA1Iefv//OApkDpUkxATDHqEabB8mH/TSMAQCVBOSDzcJG0keE34v838JNjOYCToSiAOZYO kTFw/5RhOpHxEUgSnaKj5e+Kohj/72Pu8+7k7uhJYkoB8yKVEv9G+ZbGSRGXpfM09OWgwp0R/6Ny oLTu5C2xnJLDRgnCoMH/lhLg8F6wnzJesGOSCdChFP/05EjFokP7SaKy7rFKQu7C/6VRooakgf5T /PcscElA/KL9DdFrpxCmok3gkCBMwurg/41zTgFNcU3SjlCoNE6VUAD/T6FRYQMQU+ADkKmBUBGD gHdQYZ7yMKBzUWFRMIvA1v9RYE+AdUAK0B5xEwEOUD8B/x1QfRGtNNdgTmBToQeii+D/ZwBVdVTL OCFWJVY7OlRXMv+x1kqwXnBQglhwUIFYwe7B/w7QDUKzsQ2Is/NdYMJwtsL/W+K2sVkgWsS09FlE YDBasv1ZoGNZQUvBDvK4MVvBdcD/grFe4N/SmiW6E2BqgrA/gf9iMrtVYcQ/cLtTRhC9R2nR/2Qy ioIex76yZMS/VmTkv3f/wDGGdGeGwXQb1O4RG9WT8f9nhGn7cSzHt8YPbUvHJc2Y/25pdLeGgcfJ zSgfh9GJJm//J3xtm8WVKTV3KdFGd5W+U//SiDnBeSPbInm1gCTUvdYC/9an12DW8dbxUAB9EU2g MNT/U2Aw9tgKe8Ey9nrygHKBQ/+BNNsE2wKEQdt6NjPhY6CQ/4Mgi1KJsYmAUMHeM75AxDD/P5Ff QYUjtLA/cYLA34Q55P/g0aERSZC9gkYhh8FgMGHY/zuR4rE24WHhhbHjQYlziZL/5D/k5Wtxi7FN cOaZjUCqAO+OEKcgTIBMcfeMgI/wjxD/6IGOUY/Rj9GPdI9x6LHosf+OVE4QjkNCA+mhQZHqMX7A /X3xzpDwTcJFgeuyTXDrgf/rgbdACsNHRNWQ3uFnUUcB/+6C/TKig0j1oiejFaLDSTf/+/bvVvvV 8cpLOVlw+zZLmP9Nhv1jo1PCYfjC+KSiAWll/1H2aNXhoN9SmdK70BLhoSP/8thLmKLm+mFWQlqx ULKkSP+jCKRl/Mj81fjBveGD4JBw/6aFp1MBcadyAbWnAI1CqIB/piCowq0gqdADcQMBA6KlfqXZ MAQjFqGV0arRqyDG9tarQAVhzgVggoEF8AwR99AQZAA88BjFsK1xrTDW8f8HgdkwB3F6sDGQMwEI cmIo/wj4CHMKRApBCtGw1GUE7ZH/C2MMQjzwOdBmYRFgZreCsP87sGdTZ3GZ8J8h9WENYrMR/7Lh D7ESJ5QgEDEQMA/ADsH/s0TcsP1BDQFKsBCwEoFr9P8OwRKzmhe587mG3LGZ8d7A/+IRYIHjILzh u5CY025RFpD9+jJSFzBSAeBgxJLjkR/C/74jxxDAo76EGmO+3BqivkL/sZHMwbcwG0RRRRvkG1VS hP/ENncBGvLElMTI0KclC8fp/yJrycN8BMm1z8YilXl/x6v/JamAL8c5IbskAsU4zDwrB/8oOMCS GDws9pOwLZMuEq1A/y5P1egwU4oUMKIJ8DFjivH/MMnW5jK3M6PUggqR2sLeAv+OhdNBjpKPM9uG rjDcUd2h/zZU3FHfITth8rBwkT1g4XH/4dE7wJggOsDhcMLR+xG0wP+70PmQOeKZ8JPj3rLewZ+T 77zyFMK79sJwSjthErHi4f/4cJZw4XDgQ73hPZKXdpeS/5d1PbNGgFvx51HnUudhQTT/plFBZegw RMLpsENEQuGmwP9CpejiQjRDXOmi6DGmYEZw/+ug65RGgOxxRwHtMetRP1B/ZbSx47HTpTEL8jPg w8B7//+ST+ezsVUppDXvsP2x7rT/UDZQV/1z8cVVaVAVTktN9f+pWfBmVubuAUgBSABSc8Rw/wXw UeRQ8vbR8rDewPmylBP/u3D6kvHZ8KVZJq+4sIP/o/9WxLQxpSlJZUwaV7Sisevg/q3qker0ARIB g1uhRhEBQ//mA0DQAsS0cF0gBCAFELdy77RwM8Bd0N0gjPSCXrMFoP8FMF0QBWAFMAWgHXC94Bdx 373RwlBvEcQw2MHGB0Q1EP9hkggBR9AJpAmjY8a8NAoR/7RRCnLsgmTCCtEK1EcBD5D/ZbKsEbGx 4xA7sNywrWHAsv8Q0FOQwKLBQcGi3LCW8cID/2dkZ/L5kPSha4RrImkia9H/EOFrE8TUxKNrtsXU E+xtdP8TcxSA3MBuAxLS+gEVgcgx/zbhVCEXAviAl9JxQYBBhY//cxxzmM1GctJ0NHairLF2I//4 cs7SUgN3RB3XHgnRmuB0/yIZg1YiL3rNgtZ5+4GGga7/gY1xlNmpcYnbCyd0JT6B6P/aG981zFuG 2DWBh6M0gi4H/43SLtIus0fQLyUykInhME3/uwDlJeUEi/yJ0zKWjaplUf+PUxlZjzQ1xO3BNfUt 8ery/5BBdIAdoJZRlWFuk/KhO1D9cRJjOGHKc1MillHIMZQS/1OQlHeU0m7RFQIWApdCumL+EBKx PIGXdPFPmIWYlgAQ/sZAYkDUQNAAQADwQTCbJf+e8UTERGKeoJwoQpadQp0nv0OEnqVFELSQAaFF UMaN4N7GRqagMqDREUCMSIH7Av+QsPqkZcFlkXcwDxFXcaVE/1RyVFZMNaqUstVS0KWIqqn/qaWl B1fISugNEQIlSYaql/+sEawSODAExGAhytEFUgXz/wSTUXH8olSQHGBJ4VNxrgH/uIFegRawszpX iFEwpJRWA/9Yk6gzUYQCs8nSVIBoIAKW//znToFRs1oRj9Ce8PR0RZDfXCD0gLURRoBbkLW1wT/Q /7T0QTBiELXwttJdEhEyEWP/XeAycF0gNyC4ZF/xjMFeIEm0cJScXlCcnMcgQv8WcFRybkCTcJUA PJBloInQ/7sSu4OP0F4widG8Ep9xvLb/Y8dj9r3mvvE0kb7FZZJloP+hYUgAGeJIMI9QLNHMYXfQ /1LgIvBR8VGRVJGs0MICwJL/Z8Rnw2dSlYHDQh20wvZoIv/DUWjBOWC4kcTDxpDEcRPw/yASx9fG tG2jbNvHQ8cFObH/OtU7EJfTPiF6JiiydIKGBP8lzPvhJtgllCVkd8J2VXZm/ymWKJMqOXgMK8/S qC11hAT/eGgty9Rof1l+jIGqMq/a1/8z5jdAGeE0V9t1MxgxH4Eov9s1OQ/L2eDJh3HhqpyNtP/i eIlPPofmMuW4YfA+lYoS/+cqFNE9YI4CjhRaMTrDckT/hiVDAejU6fmQE5DAkCMacf/7UCPAb4PB 8ZRiyYKScCOx/yOxkaLxIZGyUOGjYcBx7pPv7rGV0UlD8QA5kgEMEZKR/0oikeGXU0tIkbFME5dE S0b/+YHz0pniDvL0YFqR9LabCP+e0PX9ULX3g/hhngL2AZ5x95vTnvRahJwPIfSAtaG1oW3ksN5U cecg1rXR+YDO+7XRPWDGVZH5sqAgqaSWQP9oIcMQVsVtYSNxbWFXAWiD/6OEWKmk86kGA1WnWv+n svj/rQIJs10UCaQEY89xBOKr4f9exnbDX8NexAZDcPAF8uvw/wjB/VNhxKf5qWf+VqX4xDH/rSK4 criDIRMjcmYSbgAMQf8cMpZA7/Bu4e+xuqDOQJnA//TC9HQOUQ9CnvAOUeYwaWH654hAxg9zEIEP 8LagEJGvjfCfoCXQl1Bzl1BrkeD+WmuxknALQK5gwsET8cIB/+9wrYDw8G0CrXEg4MIywYL/ltEe IHYg6yC7ZRWhFXNvwv8XVL5BF19wghjXvwSiMKCR/0LBGbKhYpCwoTSG8hqT4wH/NSEbERsUBzEL UXYyBxPxAf/xAaNElkHCw5Ogd/N35Bz2/3hjwbLDE8MAH2LIcMgyInb/x6Qik8bXIlB6wWZSyQBH Yf/P8u1ALkPLNIHlJd8mjybT70MTzmTUwSsxIc9h0C4u4v8rOCtz1Pkt9dTBhW2HHdNM/zD715jf g96FirWLitnI2y3/Q2F1Qo3oNRE05o4T2+/clv+Mm3+Py9RDpjrO6pLh1OHT/+gi4mPiUOMC4xM9 nz6qQCL/5jRACD5j5y9CCDsiQuSSlP+UdUQURBLoo0UF6iKfIzMg/ejway7gSLJ8Iq3w7vBJdPdJ ECOBs8BC7eF9s0fS8RH/8RLuICDh7tTJsUfhrfGtwP+ogO4gSBJLXUtZ7PTRAhpQ/04RThK0wKgR 9HRTVE9kT2L/T9NP+lHS9+SrJvhiUnH4obf4oKnE9NP/DxG14P+2AecQAVQSD7B7rVTArrAP0XeX kK8hVVHWVTH5gfoQrf/AIleyHLTApEbhwlNXgWWS//3CDZF3grJ3YyMM1QJmW/b/AkgMd1zktrV2 FQbBt8Regv8EwwaSX4cLUQSUDiEGFP2A/waS/LL/M1vKW2YAYlgyBPD/wCG4ZMBRvUPC4e7wSaXv gbdG4vDhRsMhayE/INYzIN9FACwxCeBnwRBhrafyTjD/EEH1MMKBFwAP8GlR+SBpcf1x8N5p02kE ELFqgUAg4xD/ShHw8QeRSRBXkuyhbNLFMf93kRwRWYDGErG0bgNnAe/Q/2cioJHhwG+SxPFu4m9T Fyv/FzIWUhgVFzByoRhzzAVypP9y0XM2J8D7E/vyGmFy4eHA/+gQ+mAm8jbzKxEpAykh7YF/fhFh QI5SJ7CX4BcAMyCc/xrhYTEbQgaxXMF3YVhBd8P/eQd5xccRevQgxCITwBIh4P8HwEcQfBN8MtYS IfBHMezT/zLpLTMuQYrqgeaShItoKBL/imUoYi2zKt8uhDAJNxsoJf/bp4v3k6eAX+E34iyd04Gj /+KM5IaStTm4j6U0xo9CRgH/jyLoeo5zjvQ0ao2niwaLKP85SJMvlDqVITr0RRacYvBH/5bXPTWX eZeQmBGYdZiMPnj/myQWARYCl3Ob5ZXDnxSBpP+NR5Rj+Ecac58j+XielJLB/4RQZVBXMdbkwAH7 okk1SgD/oeJHMKTi15FIIUeRa/DXgf9HgkiwSWKhMLkgpQN9w/9F/01gKhClMikhAGXQQ19RxAD/ aNCnz1OAU0JoIq0xqamsZP+sAgTNrHNSwgZzU1Otd2ig/6ggP3BUYa6Zr6OvA1UiVfH9adC1ssGw tVexbdEcErFm/7CUCmQb4ErRWJR3UbBRtBX/YgN3Irw0WKS0V7aSdxQOOb8Og3abt1Zjorkgs5Bj YZH/ZMG4NLuUWDFkwLtRW4IcYf+7kUrQojA1ILfRvmIu8LLA/3awOmAVYhvgXyFj0LhRFkH+a2Lh YXAbMb5QZ0JJsG6A/0oAv6HWUm0yI5CxcYRQ8uHe3sHxxGHPQcoQzk3iwpP/woEa0RuRlfA/wGiA ajGbIPrOrqDWlSDJYFRRw1FOQP9qkZcQVeCV8EoRxhFW4mzi/7ECsRS/8Hkhx+axU8f0sXL/ZtBu gXyQiGFFMOhBMyBhQP+KANIj0bFxVXBGy1pydMxy/87CzPjNOHEgzlVzQJWzlpL/n9E1Us+zz9FN gc/RfhGOY/+OUn4Q0UBv4HMBz0F1dDVR/3SyMjDQ8dHh0nUQlrIyd8D/erN843xDoSHXIi/j/HIa I/3WwylGYqIgpvEzF9ik2Wv/M0w5RNmTzeCLdtkE3k/ZXP+BKO8VlSA7RHMgnyH2tPax//aElcGc UDqIOmiVojojOVH/OeY5RJzkKVE5FO8DOKnkCP/uBo5TjwPoZPoyQkVCKkJS/ysh+pKPN+Y6RO9G X+5T48n/7vw84pWKnEOcMpwTnAGb0b+bpfIsmBPzXvP4myO98rH/8rFLlJvqlVPuhea4QSdCQv+U tFM9RAQqgIRR/UBkwMaR/9WSv/D80jFgbJF5UaPioYL/o9EwQPrxZMD9If2CVVGhgf96sf7m/zal 4Vm4X3GnQgCT/6dzxBHCYaggAeNcMagwrZLvBxUDBK6wBuDeaBAGowSF/17PrJIGpF4CrXQH0moB CEC3w5KuocjQtWJxadDOadH3r8OvhwnhvbKSDEYTsWTkf3hAZvC+0QzRZYF3kbzAAP8VcRbBFsAP YGcRvQK1ZApS/yLAsgQO1GhDaYK1YhVxd/H/seJ4AQvxs6K7YbFCeRG+0v94MrLCt1NugGvC0zFt Ur3h+ysgepBjDMG9FBgCFyG2wb8WwA9wF8r94RfBujFzbzLfFsBw4XDhbhDPwYx6YL4h/nOwUhkE ImEhocAi1ZShEf+5IfLhwnLEMStRG5FbsXXD/8KhAgCpMMKyqNDCgcNBmyD7r1KdAJweMcLhG5Eb MZXw/r0sQRWRsRLGIgqk04IfIv/GgmjwE8EOgQ9wIsAR8A8Q/6CRe8RXwS4gslFqcmWhfOH/E7Oj EM1wyjQkacuvzRWUsf8pYIoikPST885hKJHNEpzw/4Gj9nHuA491QUZTAvkT+TL/K7ErhyviQPOE xCsj2MABMde5kv3hovFrLNOMMPShIf/WxdYQoMTW8ftU1sf8oqNg/9Ax2ETY0djTNxfbk4zmjcr/ jWQ11dwTNjzba+NcPymTEv891jnblB9Jlj1ZlrU+1pz0/ziTOIvug5kYmkRBYlIm6Fb16EJ7KUCE 3NCcUZxS6oD/nIGcgJ+xQ5Xn9Zrn95L3ef/mL/e05hvuCZpGkxPviSik/pRQofAX9hSlxku38hin p//M4PTmTSNPhExUUEqkRD2F//dMUf9TBO5YgQMp8SpRuOH//YJWAYrC+5NWcVfQ/SD9EP+zkLJR CtHIEXMUMIL8EwqB/xYRFwH+EP3S/zIAMrO+uUP/ATIBosQBHaHDcR1AW9K2o/9clFwwt3AI4Adw XdK4El6C9Of3YAP3XxgEYwaZXPK/B1FcE2FzB/K2YsjQrR3R7R3RUh4AOxC9YtFjxGMD/saE8CZl JkPMktyRb2Fm8SoxTIAxHeAxHgAxhKvAgB4AKR3gIWPwEG/R/28TbkFuoWXSx6F88RPgEvG/ZFJl gQ0EDrETAArgShiR/w8QcTBmoRaRDrMXcpqAEwB+e9LRDePEERUgbQHFtYT/FBFuotfgwYLX4BcS F+FxI+/ckMYgOWAqkJRx0tqAwYHbFsDvQaXKI9yBhMtBhPD+tXIByoHLQpqAb3DLYBgR/xMyxcEj 8tFR8CBPoB7AqGH/0VJbsHUxW7J1Q3UxtqLPp1/QZndBHjEJkUyAxiqQjP8rgc206oDvoI1wEgES BNL0/y1kIsAS4iPRI9GIIYghLTH/KmMsMoSU0pHWgvAgF6EXof8qAfZyJBMmcivCJ1jR0StR/8yR gTIpQNoVKbLalK7h3mD/1yEtQSOx3AMp0im2Q+Lvwf/vkfkkU1fepitR1cLd51Ml/+AFhzNxAbNi s3PVUCyDiXH//BGKNPskVgEwxYrV+6Pjsf8xYTFgAAGuwjKF64g11Own/+v1NzSPLzZijXozS/ck mGr/mAKXKDzYk+yUbzzI7UiTtP8+xz718q+S9t5JVGREcZ1SK0LQg1CUHsClTwC9tfzGxhtAG7D2 oB6QzpD2QP91cfXTQ3ZDlquURNRE1foK/6FZ+ZZAG6LHU9Kjz6TfS1T/S12nNamEqMJM9EzzTOSp tv+p3oMRqqQ+FevF+5pBNK3I/1E2rrOHQa8F1MEVUC7wiaH/iyOKg1YhWPB94VUhV9B8Ef97IWwh c3GyEljhsuKzXbOL/1rotYG2QR1xY5AdMB4Rz6L/XMUdUF2xulBeABGRudJelv9hYLmQEsASshKU uYESwLl0/xGUXZNhFVxBtqN1IR4iYtD+vbxxvHEzMCbAYeA7EGMl3WPDxtF0D+IYMsYWcTKgVIQI KpApAFA5YeBCwJzWOa3nKRpAGpJAjM4hc60YOxAY/3EhhPAbgG4ybhAkAWLASlD/1HFuorNAaxFp w2thZ9Bnwv/EQmnAxZJywWfjb4Iegh/i/33BcBIcE3Ewg3Bl0B1RaDGv4bDJccly3KGMyiEQyCH/ yUHHkbxwyZJj8MgSyULLYvvLQRuAe8tBI2FnYKtRG0D/yyPKhHDh0dHOoYKz1nBOwPd4YSe0TIC9 tkPQ1CiSZCH/D7F4ASkBKccqgrfAKuG+kP7OD+FQ0MvBIUBqYWxBw8D/a0Tc5NXDUwLdoX+xjXBM QP9/YH4wS4Augy52f6IvkwTy/6s1fjDbwbWA27PbRNqC2gP/MkvaMtmDM6XapTHi3KXGAf8s9Akk h/FZdYdz3CndMoRn/92i3YOD0TjzqyU5tN2kg9H/rsPb5d0Vg1CygeNEisGJov/jgj3EilIMUeNF ieHlYoui/4wUjKRARujbQHnp9ELUj8H/jDFCpeoF5xaRikcWoony6/+XppOm7ZuW2JOz8l9LXqLY /632mXlUNfGRhoQ5kZygnSH79pAVkO9gEFBgEsBQgmAQ9vdQlVEQvfcA1pDWoZ1x/6Kxm5P5efkF rAygXPoe+9f/rdb0R/F1hSKWE/5016L/E/8FBKpzABUuogDCLmCp86dC/3bgAmFckQO6qeYvVwUk /1L/qzaYM6JFVN8GnNXBD1Fi8v/cYglyzQDUwcaAiPE+o+Lx/4qUadCwwLMhsvJlggyzbgB/sOGy 8w0TDQVnprTiaJxrvyhBGIS2oQ+weCB106W7Yv+3UrdhupQRk7jQbD9tcmwC/7qyupJrobdxFZBu 8rXCKnD/aiF4QnACAFAXURbCJaG80vu8EAUwvRfyu+AYXBgScfFmMQBQc3CcAIygwDC1gjkaQEq9 9yGUdFLxGvJ7vSHJ0STBG8LB0q8r0YBxgHHGw2MfQQjDQv/D4r+hylPHocgwrsAesR6x7x4i1FHJ QcmijMRRv6HJYe/IEyJiy0GuwJS/oLVBddK/IhIbwnySI2F81CLQc3dg93cgyFElIyG9MCNhIcB+ o/HJ0UJ7CIygJOGP0JgB3wChGTAaEClhLtC9g3AZ8P+AEnuhHkF3UXficrTRcrfA/4KkF/GDbYJ4 0YNx8b5RMUH/MUNPwACUL0GG1gUwhuIuEf8uEXZ02PQnI+jT2xaJ+DNn/+iR32KLwot0jDUzPDNV ijj/ybGOx9WyLPSP9WNl1SLUov8N42fR1HGSNDaE1ZWio07j/92dOXJilJWUk4Z7oOOyPTz/PViW 0j0XC/HlgQ0RrsHmdP9ARObYQOhAykCV6alDwOcd/+sG/AzsZ0cv8WlKBUleSfn/9Djx2Epm9Hj0 W/3JqITdoP9PAlJBT6FRsLgAUHFRELkgr1GBqlirJBLA97jA9/Zh/1ITTwUHpVNM+fnq4gaKr6v/ UrQHXuz0qKSodP42WOL+8/9Z11rF/+C1JARTXPFcN12J/7d0XdcAF172BUTuYkpS+W5/YbxgVzX3 Y1gJMQtACkEAv76gZNTisAxACrNlYlJnAv+/9GdJZz9oTJGhG7DhQHMh7xWAFkEV4Wpz3msAasRq xZfE0cWTbrKtxjTO527B/8XDxSLGgcXCarLExM7x0NH+1sj1aoH28Mmx0REoQf8A+q0bYLVw0f8A cJBxcWqgPxZxcfQP5HKHFnElgL0Ia0rAc9EpdBAxdKAakN6WIc5xdKAhdQK1KSZx335lddM4MClh /wClK9F2FL9383byesN2Ycshh6G1HlH3IJPSEoGwY4YQMBHS1SDy/3wkSsA5IMtSJdEjkSXRfNT/ frMjUdZlfQd1sdfz11V+4v8bYIABfuEhwHOQf1DLknGh/3IAgMKAcRBA2jTdoIhhMBH/iAGAsXMy F/F/UNzyJYCAgH8X0N1mK5Dc5NzjF8d/UMZ/ytHpoNlh2cGyAdvSTQCc/+rwSuHhEABQegEyMSdR InH/4hd6AeIT4gInUSciLhCJNP/j/Tgz5ZbkNOQxi+Nik+bm/4u2lZPoPYuTjuOVlDVj6wX/vhKQ lDvSN2I2gTaBkpOSI//tATdTLSRUgTiYlIk4xpah/z8SPvS/YT4BPXQKQWSivxLvltIKQvGDHXBS vMJAK0A9/0PBQDKdR0OiNRND2UDN+w3/RaZNR0a2oERLX0foSs9L2P+grvvYThWnOKiTskepFqkA 40+wYJCM3u9QMKpyUFF/URFQkQTFqkGrIVAwA/LW/OfeVhAncKxXCEbkg1RE/5qU9/IH9AjlU9lT ygfDUsX/C4ZOo7HFAkhYp7PDWVS0F/+001pmW0YQhbinuHm4ZVsR/7lmX1O52J/UVQWapO50u0Y/ noM11JFRYzM3c2PSKTm+Sr7BvqE8sSxgPNEYvwH/vwJlQ2blZvMg8GZBeZEa2P/CBCDwaFRoU2hD gMJyYW8g/2/hyYPJd8lCHqHIOsgEyAP/IHQgFsjTIgIpQMj6XWAoAf7GI7Rv4cpycLQk48rRytF/ KWHLwsPDzIFytdyDzXEAM32gJ6ExhHVAzwGU3pIYdKAYjCiwhMbPIv3fEBhZ8NiE0EF20SXC0sD/ dtLQ4SsUKuTTUXmxOSB50f950H2xeWHR5XrxdzDR4oIR/yvHfBR68WMgeiDW0NSRdeL/fIPXZdev foTPsDHn2cHZMv/Z0TMRcTHPwNpSNGrK0TRl19pD21WBAErLQFLdQXRAAGOt52u153O9Ru83kDfi Y6XnOFDeFTcA1jcBQigQOXOt63+AOWG1faClOdU5gdPg/3ExcTI619Pg4MSAMTwW4UL/5gA894kh lMGJIj0y5kGI4P/jwj40rUI+eOVz5HzmdhWj/0I2i7eLI+ojQ+aVpOo07lT/6vKP5uwVF6Pt85LE kd+Sst+QVAr0WKVR4JbgMZjDStLv8OOYIJim8mkx8vO/UBiw/xog89D0L/U69Br18p0t+KX/msn5 bJ+5+vb72/0GpfalXv+iNFdapNRW/wGbWriocxQBv7Nzs2azgakCrEG20K0EUL8Ei156q7Grsash A9Dvo+D+lIdQXNMGvgpXCNUIvhZ2/wndrfoLhKeYAamyqajTDp//D6u1KbUatRRsHbmStPC58f8T wqQRXAMHBlN2Fkm7RQhj//cSFzMXKRgykXAbAJlgGTD/GMAZERkQvwC+4PKjGcfAVf+R4hs3G2PC R3Z57bHfEMvh+r3QsM7JI8miH2MfVyIj/yG1H+l6ayIkyLUilHiiHrDvrBAj0Mgw0LC9I4EjUYXg /9/AyxMlNzRk3HTDtCaK36H1ngCcKVExzzHPASjQzsHHKPDPECkAGGutz1EzQv/XctZh1gEdoCWh h8AssdEx/y/lLtTQIywh06HS4S6TK1L/1JXQIdRx2DIvEzAlhnEuIf8v0tUhz+TXB8+DKaYyB9hp /zLkz7LZUyTQNXI1VMsyjqZ/jgF+1CTR4YHVIeAxJNC94TkRQozGOZFDKACRU3uC0JFgzpHBkoKp wJExMf5zziA5Usrxj3DacdznkUD/3WGO8o6iNpKPho+jO2Ek4f/MsO8wlvLgkspws2A8kZfk/+9R mHQ9sj4hmXOY1j4Imun/P7Wa5UD+5wnpBOe66BMLEP+fieq19gFGROu3cWRG1kez/+y67RPsc/C4 8bSk9vJicxH/vvFL5kwx8XDygBhwTeJQlf/3MqgaUIf25KooUJ74h1Ik/7tnU3yxNxSV/64NBAFm /c//sh+xSrCIWHYNZVxoaWFc0u+2ggZRXSIPgLU4AF3vXs39BCHnBfB9sBDgtyZg1GFi/wtjYiv2 ALyNYoa9mAkZCNj/ZV0UtAwXs+pnmlxTDnVp1/8PdMT2aNXFhMUrE3wNlP+6/8DVCtMIVcpFqAIX geuh7GL/F5CkUxzhR9JHUHZQGjBzBd8Y5BkQc8fx0fOwQk2xGuL/zyYbcc9zdZdI9EkiKqEqcf9+ cR5G0ml4iHzj1DwiZyKW/9X6HmLW9X4jfhQkco/GfwT/0bQl8oAHJgTcsoFhOTCQUfVt8Eo2sDGR oYJAgjHckv05sCGDYd6wgaDwoIpSKdEXLNAa4EsQQt5xACE5+4UBhuQQ30iGFS6WLreFuP+F94Vs hVaEIYP0MUYxAuVGvzFn5oiDkIvEjdE6YKVSYHqc6DOU26EzQY3R3VCUl/fQgfDpYpQs4GMAGuDP 8XBy8M7h2uBrpTdQOJCiWjhgSpznkWDe3PCn3OHsEtww1jkocEo3cH5jN9A3wTdg61A48DMgxvs2 0SxQhI3RgXHdYJRZkUD/kNGPVo9wlrKWkzrSl4SXh//x5ZgiPCLy1EpB8tHzlpmG/5l0mgdAZJqd Q2BvkUFOnTz/nVhEhp52RSNDk0YmRkX8OP9xg6KYo2NJIksSTEFNMaWDf6ckp5BMgs33cwFzwExw Mf4xctFH4afjqMsCSE9EqRP/qfRRF08HrMdSw2+TrlpTz/+wirLMZppVuFWSWTRYeFo4/ww1FDRu ZMOzDtRotsQntnL/toFgcbqhunHJUChwYCC4IX+4L17ruhFgRLqhuqavUXv/uzVlZL5/Yru/k2H7 v5Vkv//At7umZhq0p2gnD2rEzWoC/24DaRRot23Dw8Qf1A71WqX/r6itRsCzypSgZcsLcgXMSv9y cEiQcuFzgUzgpmBzUU2B/3OwTOAAw3RCzuFyoXVDz/L3KdbRF3dEWo3g2YLSFNMH/3hD1uLUJ9aT fFQuey4kNlA/1uDWczAz0yF9cDDUrdb7MSGEsM4xgX8Q2GF+ntqy/doFvdqDgHLauJUAO7G/gP/H 4TnAOSCSsDZS3PGDUINA74Hh6HPkdOjwe95BzaDNUP+mkXSAhQbiuuAbiGPhlYZS/+AFOerje4ia 5HTlCuYiVZD/jIWDlIwIkJLdUOkSjdHoMv/agOgAk5HxIJDg7gGPUYiU+/KBiYBS6nKEQIgBQsDo IC+TsJEAkhKRMNZF8UqUROdS63BatfftEPfohN7/7AD3lPFFMYvx/92xiYHqQYiR74GUlJCwlR7/ 8KOWZX6hSwyXJbZQl7JMsv/zsZemTOPy0k3U86eYifTv//X69fv2A1LDnHP29ffGnnn/VKj6VFYF oDej0KDhoLT7p/+koP7zc/FZE//1pmLNo3PB/3ORzZcnsXVBoPFxIqkVXAL/BCJcJl2Wqq8FJawp ybQjh/8bGK8pB8oJRgaRC3axDwlF/ws6tMZkxLToDpcOxQ+fFGG3akQRM2r1jMgA7bDeEdDfEhMS NGyXEgS6EZS6UMlQ/2uSa6H5sBUgbuDIgG8iFWX/GHLAAxmSvZO8yr5Lcf6+P/+sghoavybAaq7C ClkcQsMW/yEnw2toeB0lHTUihSKXCCX/GvoGs60GAkTK9KIS/XF/k/+kVMwV0HDM0czUW5HNZFth /82TWleDA1kgzxApYilxz9bvSIDQGdDxQSCt2fHagTGz/9MihnUw2jBxMWKH4of7iGPfMkGJpDJB 6BCKVM6K+NqQ/4rx2oHagY6R2fHZkYyiM6P/jTSNz4zBjJSMwtjTNiBDA/+TQOgg3TA3UZDy6WHb sT4j/9AA5JC7kDiAgbCk4N8wK3H/5Abi2d+W/qDfQTrz4FTflH/iNZXm4Ic/A5OPkxqX9Xv/3bTl +uTU29Ho8ej33VHdU9fdcZCyv4Cl6kBa7gFKsPvrgErgAEhB6hDNYIGxkpHXRMDfkN7QWp9wc+jw 6LHv8qDwUdox7YBznlDdgTNh/+jwHEBMAPEQjADX4PQBqlD/ocFDou+HSedK00rL8NPxsf+lhKYc 8gnx+U5TqKRPak9l/1CU9CpQ8qtpUqX1sVQF9on/9tf3yhmyrwewLbZQ+sb65f/69P60/9HOUloV zZJbUiei/wDggpKz9M2SW7G8sMtwW/X/XM9dowJ3BOd0pLkXYJW6RP9hyWIeyPZkXQyYDHpnyQtx /7/bDunH9SFHD9sfRGpyw/L6lMQRlFCwxHQUYsURbkGHbkEjIMdwra3GzmwAfOfvxqAR8hHwFCAU INbRbBC1xr0hoJQUQcWi/xRSbpQUyPZAFYAVQ3AlcDj/FkYZZBllzI9z/HX3Gb8b5f98hweECo14 D9N0Zxh63Qn5/9Cofde6+GCoGLUlKX92/aT/gIcm4ylxAPEnkgCh29IoQZ9bQwEQADEAxP9BITkp b9+EQ5aQJoArwzRRhIsAMhP+zuCkMhSKMoql4evi4u7Q/4qRNFCMAIsANLHjoTPxNFP/NEXk/zUE M+U3MI3p50qNF/+M5IzhSibxMZBgkLFCspGB/zeBnGNH8DrykjE9cF5Q/uD/KfGW5j5SPdSYae6U PTOWZf/uxpbFPBOV2PZAPAQ8CpXT/z+Bl9PzpD61QWWahj4x84X/m9GboZwBQLGck5yyQdCc4AlH 4nt7RvBrte9z/r34YKDwj9EpQFigRIKfsP/5cZ+hlsD5Y/oROGArUPqyt0hBXlBB0IReUEixreRA tOfGbDDObRAvsP80sf9KFqQEpAeP8v5DS11L5gAK/6aTALlNBAEGTSVOXU4kedD/TwRQJU8VBWpQ pAUJBzWrnP+sHVP2U7mxYK67VPRZcrMj/4HEDXonxigSDUVbYCcxteH/f4PZ07aGnfAQl12EXwO4 bf+4833YfVphNRVGvF27amVc/2PzHKRmJmfLwCQaVmi8aTf/aiTDMsQExDnFch6TyBIfJN3F4ZQf 8sfhHRCcIJPFIP9uICDxwfDF8h9KyH9u9Mnh/3ASycFwscpWdYhVUs1pcXr/cXRzVXEl2ONzyCYq zplge/99BVVR0FR3SXxEdtoulS3m/yvLdHe5eyYVE2V+w15C2Va/f6XbMoCygMCAuNuxGFskvw19 WySC5NvCWeDeADlIcOZK3pzZkJy15nbn4uSZ/+eH5pnm4I0y5i88hejIjef/Pi6NAznQjLOOs0D1 37RCJf/psKFxQuJMAKFxj9OQUJCi/+sSkYHrseuxm9P2UZfVgHDzDKDsgloYcXCWke6I7pb/7oSU uJiylNWWzJSllLKXNv9Klkw3kyaXy/Vl9UD1MfUy/5pRmWqXtJwKo4GcAZ4R+HFua/gk+FCg4Oeh EZ1g3v9TMaAwo0CjMJ4R6pLqcQBg/1RT6oKeEKBxqsAdEPagAWC/VeC+UKlABICiAaDw/+PR//52 6lGlJ6WI/zVZRADGWiT/Amml6AEWWk0CIwOYqCgEc/8EY11sXwQEGgX7qlUIvgj0/6oRCY+uLQqS srGzEjfhNsr/gfA3oA6g29PdE7OQDqAOk/+eoLXN2TVqZ7geuUATb9cn/7rfvK1wH72Lvr8atsHw wMT/c6TBJ3niHLPCowIgHOMc1bsdpmKgpcRRd5QEgKUEgP94QXii4EB403iSIXB5UnnB/3oiVeB5 YiCRIGMiMSBSIkH/eXR4gh8lIpIdAMjFwnByQf/7wMmhfmMs89EHJTbMTCk5/4Efgi8qL87LFGos CC9Ih37/Lw8wHjC/McW5RRLI2R80Vc/akLFg2tbbgEJKs0SQJL+zxTY5DpE3od137HA53jP/OLPf kOWwOmg9TOjUPiSVuf/80JaI6MeX5OlXPtZAdZmV/0MC/hFDpP4SXHEAY6gBFtD7qUGdoZycgSew 60RREZ1j/0SjRMr2MU7hnvPzgvYz7DH79BC5QAhGse6SSxZLNaG1/6EComSg7O+pScVJfO9jSkb/ phhQQ02XTobzVPUw80GpUn9QV0VynUFQ80US95DhIMbO907hUwFSFHPGVuCsUZ69/LBSsa0TrKPv e6uQIoT8MIzO965RnNbE/5z8oKXn/1Lg/ID7/ED4IP+sgK+Sr6FTQKxg98ZQ6pAiMLXicPyQ/n// KP9ZmABmWiK0CQyQWYW05QBg/7XeWgdcdLcGAgRaJnYxuP3/AiRfW18GXm0FjwgUYq9jtv+/5Q5g kBI2btxRN+EPAtyi/8LEDvRptNqgEDbZwhDyxNf/a/wTBotdhetuvRY0F14Ys/8ZbhmtGdzUZnSv HKVVgNBC/x1zHZR3kndy0bJ4V3nSITD/eRF6ktMj06YhEdQi1Jh6cv96VHoj01LWMnxDIgIiryO0 /yOwc7EtASzULHYlEygFJmX/KIXbf9yPJvsoL4OYimwplv8wFSnEiZ+Kqd+J3T4zAt1b/42E5gGN 5cQiNGHoNo7qOZD/ZrFn0mjSN8I30uozNfs3gd8OcTeyOCEMsJLQKY/QOMH/QZKTwD48mIrvXUJE mFOaVP2a5a1VQfjRGaBWIZx0RFL/nLKVAJ0T9AKekfRH9BLz8/+dEvPCRIL2IfaC85L2ovX1//VG RMJQ057En7efgkWSqTH1SoIQRuJjoWP7IDPg+wr/S1H61fxhJ7D60/rG/VH8lf9IS0zWSlhKMand nUHzspz2/50XqgVO8AFoqnQdAFORq4H5sPDnIR0AriCsYa3irfHvrHBSY62hBuZ7raAHwQXh66uB rlGUrpX3U3CvAq9x/wmisECvcq/jr3FS0Dygk8D9W1DWsbSxtVl4WVJZNls1/w3GWwgOLbQmtWUQ y1qWWl//XUYTr7wHFOe6hWBnvoW9df8XVL6kvkm+PmRBN9JnXMIF/2ljwyRo9DdEoRAz0moUxQz/ a1VsiotGK5Ig5CvZyO8tw/8tK3GvcxVz5CWvc9d1JXU4v74wKNd2h9CDdzLRdaXRwh94YNHy0vB4 UdLjpYyt/q0ssNXwLPM5wNXwLYAtcv6tetAtsi4i1DEuYS4DLxL/LaEvgizwLLAvojBBMEHWef/R sddf2MfY84kC40eATNtV/95r5N/dr9675MWCZDnHhTj/4w88bzrYjRc+1OWcP+k/FP+NgmpTQVSN 445iQnLoJelY6CE5QpLwSkRR7VFEIf4pRDBEIO1ARDDq5We0HWP7G9bqchBFEJww8HKX00gD/5hz 8Xexs5vj8tPzV/gDquW/nmRRJPgA92PzMlUBrU1R11PxU/FVoL1T8L1OEU50/03mm1FO8lPz8oFN cE0zi6D/TRL3FvcznPVSWEulqkP6Qf+fUVNU/jX7RFUf+t9W1KSy/6fwpgLEEKogcZAEkViSurD/ WVEEknYQa5AEhfQQWgeqU//4ogRWW6Sq0QRFAhD0Il1hPwHjXYUDArFRCLEIsP9Km/GxlaCErmBf 4P97X2D/YBIFYa2mB/RPoAhDq5BfI3+uo67ACU2wAq/kr+auUOf7CyFQ8M6xvbVGZs9oBGcf/7Tn tpm2JRDPbA9tGQ5Yt8X/Egu5CBJYuwkUz3KtvJQZZH/re5GgkgJFuJGEdobqQSn/k1DkwI5FxLTE uUDFxjeLX//H34cVIsbKmH2/y44mVMvJ/ydrzsy8gc/VKbQo8dB10FB/KqIqsoTynDCFUtIkLFu1 2q0tor0uEC2ApYdQh6HzsKCHwaWth+GHVYjkiIL+pYjTLjMtmCzh1nqVANew/zHQ0KDYENegbxCM ozL42WX/4nbkejbFOIE3b0C45suQX/+SKkD23wuU/NtBP52WlZRo/0GUxaNBh9tRHeSYuUF157S/ m+ToekNjxAHpVZ3zUunBe+2B7YEh7WFExETA7RAhvxwxn9PrZsKioBHrYRAo8//y5PfD9FWqskvV 9XRNA023zwUhq1GrUVDw1mOwYFDw7t6l0KXCpmRarrCm8giw/wUgC3CuUF+wZaCnwa5QTkP+xk5B TkFQsE3RT7CpQlAS/1CysJAhcKpBSkFRM1Em87P/Uf1d8ktF+KlUQf2j/HP/Yf8As8QQWFGvsljD sHLFwCAQ/1nysTZZw1iUWSWypViEWIL/WGEBA1iBtDFYgLLVA/FY439Zll0UXRa3D/SD9uFPoOe3 YlRMYQfA5wiAYGKEYsD/YEBhggfAB7JhAmEQYcqlUPdipAkzCVCtCYC9QQmkYRCfvcW+AQawvlNl AcbnBSD/SPJKIQ/faNtmR9ggSSBqFP/CxRBfanTEqm0ba0wTQ8WL/3NHEc/JfHMpcWLK7ch7ScJ3 c9cX8OnwKZ/RoSTOsRj/zvHq8nZfG7HqkEQhd7Uej/8/FiB34FR7ndU1IyZ9GyQY/33x18mA7dlv giSC4oICKKL/KRmEIIO0g1YqYijxMlBpwP8qtIVBK0eGCN/ihuMuEIdSPSzwxi2Ah+KG8IgQtc7E tbXhtbW9zodQh1D/4jbiUuJhiAHhcofjZWCHMv8vsyxBMPExXSoBKgAyn3xl/45PlV+Qzo/v64+R SJPOko//lptBVJdpNsaYm/FXmxpCBv+aFEIlm0qcyUNKndmeIZ8Q557dRTL6YjExRaWgoXXQ/xnx UXFQgqRiTaJdUKUIqmD+3v2RBYAG8AWQ/fMHtLrzq/5jCvDnCvDvppneX7B/pxIAwqeRp/Gn9Aiw X4DG/6inqNcDZanVqeCqYVBkTQL/SnKr1KvTo+OseV10rYNb4v9ThFnjsTRcFFnRsHKwV7OH/6/B Q5ALObMzCfcMz1kSDbj/ta1ZxhBUXUQQVxEWETNLILVTAMankP8S8bjxKYvx/2LAE7S6EmCDuqIU s7qhYfr/pbBjALzNF1O+B73SvtZjdPunUEhgnAJgwO8ar8JGxKj/HH9PcGqRHj8dCB+KxJhJEf/F ZsWKxSpqM8e1Il5umMbO/8BFJ0XJaJ/Rn9DO0c+QzsGfz4HOwXXtdUVHUCkxnxH/d7GbhNIYQNOs kHm307l7Vf98InuofKl88n35f8TZwS7h/9e/gcJ/ndn/2wfb/4M4hDP/hLSE5uXyhaGGMYXQhlKG MB/gV+FI45PikeHRvda98eKRxtbGPGA7wOJxPBD/PJE9JONR41yHwuDh5Q+E8f+L4eaj5pCMtNdR 59h8c+jK/5oB6/+TO9LT9UNF3JoCmAj/R59Ir5fOSNqYz/QInCKb1P9NmPal9rZOypykK+X3pZ2G /52rnhJYYPkCnr2fEPpRVIT/+oLP0nWQorD8wKUgX7GnU/+ncKVQp1FlUKXApzCmA6Xw//+yV+Km MP/AY0BXlKZjZUH/piAAoKeBAPRaMqfCp6WkgL+owKiyW6ID8AMjAxk5BDP/qrKqMqRCqrmrlaPB Bjm4gv9gObanCGJh5w4YYxKyI7LY/7BwskMMNQrIZHQMhmSZCrn/Da0PuA/2EBVqVrefBzakge+6 0RLxqiGm8MYT5hUgFFK/bjIVD7xCFlG8srzC971C37zwF3RxRb23F7a1vtC9Qf254Pe0QcHDwDJ0 GMF4xvL/GeQZ78JKHfV4O8MjHy/Cpv/FZcIXe+8ibiQpxW/H+SdX78M2yPwpcSlzMYLlKSEo8H/Q A6CgoUCEYYQzz2L6ARj/+hCaAdMD0pQthC2P1G0v6f/Wbdb4M6zYdTSfjTc0WdxS/46/3UTc6kDR yxA38t42N/Dv3tTOMN9YOcy14LHhc+KCD+NRPSY8gTxg3s7O3v08YOfioOKgljWWQTxwlmHfPVrj 5DqxOrE/OaXl8UAk/98BQLfm4NrRQWPXNUJVQm7/6TVDf0bGRubuVEjvR1+izP/uufCFSahG4vR3 S3f0FfVM//aFqFpPRFDHTrf1dFEq97/+UlJ3+Qf58Pnh+eCFgVRk8in6EBAxhbBV8RWQVnH/WyEA YrBVAOKxDwETsUQBY/8BUwESW4ACBVuEAnNbclx3//yhBLE0UAOCtnO2YQSjBMT/BMlehNSwBfK5 FV8judQFov8GcxGkBycJNbwrD7UIdGk+/wmlvzi/FL8daNYPK78Tanp/EEjEXrsDr6EREdOQurSc ZwbB/KFXYNYY2ZAU0O//FBVt8xQXFTLI42/Ac3IAcP9wQRZxcEMWynJzy3gX4xcU7wCgExBugIEQ 3mOR1pA24f92SXS8HCfQJngrehrSNh6L/+aA0lnTwtEP1R8hCtRI1Ia/1Ekg+RzJd0x8pntGCCjB 7SlUMVVAKMUh+4ArMVVgtylRKMCDEzHdQVQzSkVj/4Y1LNotMy5BiBLhkogLiEL/iRmKUjCZMaTl FDJtNBznRP+MjI6JNWY2TpC3N9g34ZJx/zihOTCS8pLROQGTZT6Q7cH/lFOU0pSxO9E70T0kl4SW Md/wApaglpCWEZYi3vCg8DP+1pZgllI9VzvRPnKUYTph/z8Q7cDtsZmyOQSasThAQHD/QMGbU4Ig QT6cz0QKRk9LQv+oJkV2qAj51kU1pjWnZqcm//t1pd/+3KfNqpVOnwIoAvW/URYDXKxAT/ZR8QWS SqxEf1IfrbRThgg3rseFgFLwlP69VhGv5QolCsJbgbTyC07/CmIMj7TltPO1osbxDse2Rv23I3O3 hRBDXbFechGXuIP/XwK5ehN4xVLFOBT9ale9Nf+9RhdvvzZoiGhtaP8bnsNb/2sTuxXGCGDRayG6 c7nRxjF/H6m4ornRc7DBEF+wVwDO6VfA3nPMkHNtAG7RbtP/bsJu0G7DyLNtIVqgI7JtIf/NISSC cqBYYMsFJUckhCPC/SJRtVjQcIC08AnQgXC8Ev9zwXQlKGUoRIEEdQnQoypk/3qKz9h4L9Ko0lLV z3lP0w7/188tD9nreuzaFHaJffLc5r/e4t2kgrLeoTcgODM5OJL3hWOFUK6xSoW2hpiHlOFl/4gH iP2KSeZJi68+pox/6Hn/jRhBtI/1j6aRcupj6uiQMv+RmOwHkvGSk5oCk1bt25lA/+7ClGCYUe9U 8fCWY/FAlqA/8SJKQ5bgScLxIPEg797/8SHxIfG67uLuk5kA8ymaBH+aAJqx9IlPMptB9XFlUIT/ 9gf2wJzhnXNRBJ6Gn5L3+f/5DfmVU9T6D1Xc/L7+3aWX//8+/TwBe1u8qhgDBQT2rAW/q1irNgZI rFsGyAfyKa4S/wgn33IJgidgDyELYw60ZJ//ZUYOZEAQZqNmZGPFZSW143+1oLX3DwEQJRD7P+AR h5z/9sBrUmvOuPMgZLmpxZMUGf9uOxWXm3AU88MvFixxAXLp/3CVFhgcv3AZHbYUFcX2ubn/bUrG MWuRzeF503pVglHNsl8RcreBtpMnYa/AY8pQY/8hxMugIhEiEiIgIqEj8cnB/331I9LJgMqQfxHJ 9M2QynD/yFHHkMchCkMPQ87hNFDORP4YhbA1ZoFwLEQprs9U2pz/1pfTxNkA0LHSO4XmNEGSQP69 h4/SX4do06aKx9kA07T/ixmM6odNjX0su9y3N9Hctf/dsN7BkgI4dzjUr5A5gagC/+ES4Jc6++GU 4rNugeIRPHn/5BI9Ypd05Jnlr+a0P8+bD//oE0NU6MWdZUQFQ+LrG+uFf+xR7CNOguy0TgFHQe3S pf6UTXChwU0xTTHusu6QSRH/75Dvk/DT8PVLk/DBSsHwwNvwgksh3ktg8GPO8MHyQ/+jAu6ETTDu EaHhobDt0Ec0//RS9GAU0PTQqMCGMKkCT6L79bJQJVLjsva49+FSFPeK//uo+agBw1rL+qL6Ufq/ /a3/ATL/+AA6/3sBDwJ6tVldUf9fYQSpXskGBF/bYEgEpAbi/7o1YWoHwGJyB8diiDjzCBD/NjBp VWliaOK+db8UvuZmsf9owYFRv/kPQoFREKLB4xEF/8KuILIStGzlbJ1swnfgEvX/H2RuWh3nb6tu Nm8TyNUVT/90pXOWG5cWuXQ4cLV2aHaj/8rEHeh3Ph5iEwMSlCB5eLr/ejUPwXrSJ6AWI9QzaXRp EH8QgA/jaOQPFAnYCkF8cN7/DRKAodfTCbB8YNj1fGAKIX8nYisB2ibAY9rxKoRikHP+SiFhhAYq VNzZhBYqZizP/4lWiUiGJN+chqOLFeAaMhj/jCLkg4gyO3CMVSvUMR+OP//n/4n5MHg2tTdR6vs4 gjfQ/TiyEDjWOYE5gfezOmP3Mv+ViJaClgQ8Oz1l9gM+JZmP/z9CQoKaVkHLT4L0n/Wpnaf/Q6yf ovgJRXNFYKARn+KgUt/6AkcBTiFHNKFipUeyocH/R/qmdKYTSZFMAaUSSvKlkv+jsEswpPKloKWB S1P/cv7x/0vh/RRIs0hyTTKnQU2iR7L/qCFOUqhkTvFFwU9RqVhPw/+qQqriqs1SclHGrBSUEgbi /1UJVVkZoDnSr9cJElPasK3/s3WvzwsMs/+1BA52tq21Vv+2lBGKX8sTRLjjt7Zgq2BQ52GaYfW8 lUpKYpDtckAQ/9RTvcFpNsCCGL8ZZxgVGvj/1FMbWxvH1CRrVMWLHqgffP95R244yZJvdR9mIWUf ZNwR/yDqyeFumiU1z/Ulv8/4d4X/0KhuFXhI0fYexGynxATC6P9QkGnTLMTCd4Bg1DTa8jZg/WMg a9wR3KPAEoFSL8hmrPd9wNcz2BCc2EJoMNeCMre/Q9AzaNnU2dJoEIYwvdph/2OxhmKPoHIh2+GP xjabNnT/hpc1hN/fOH+HbztY5MPlQf/k5Tzh5MQ8tI+gTrA9sT7U/z0n564/2D3YQRpBGz3JiVJ+ CJIAkdFE4usgkLDrMTm/RXRGB5NR7MDtQkbzUl8x/1Gz7mJISKrS7ySYIkmUSib/8EVQMaphS0zz 0UxaT5FMgv/bsJ6wTWNOH08qnQJQJ/em/1DWntdSSfmC+WOgQvlg+kLfoID6c/rzAmD7ZrVVwQEw tr1WIacAxlaBoxDOAKD/pLEA4P7QABAAAaQho+H+Uv/90KVgWKBYkVjyWENXpKTx91dBVxGisMZW JAGQAVBV0f/7oafW+qGgoaizn6GpNZwg/5ixqfIEZKqTBdNe1JPxBuFfBuYGppPRrSIHwSlhQnP/ YZO2gAm0CbNiUq70rvu1MvcJdbH6tJdatxNmuAk5tPv/DDBoyLVnEIgTYxF4E5RrIv9sIrpJuOC8 MLhivDC8Ibko+7rpFiUxvEIXQbzjcHW9Ev+8kZcQxhHDc3tiHaRylxxd/9RVG6MtZHogHWodxdMD xXv/H4Meix+OH/ghViQfIiR8Wv8gRHrefn/QDyfox5XHSdCU/9CTKfTRpdOUxbIrxITfxAH/w3Es 0R0ThsOGuCzG3ZEuwfsXgLhhc92TMJgzcTB5imT3imMywzIg1jNEM00z2DGgL44EM3I1NTTkrezA Wgj/uHHcUdpDkHk3VJEqNvk1Zv/g9t//QN5ClT9PO9aWKTuPfz1VQqfnL+R3lsxBnwEwxq/3IPtw /WCnwLX5ALXxgHdcoPYwcABatUGqYauwe7+qYu9xR/BN4fmBTJOMUyHv+qCfYKcAqCC9U+CngFbg 36KhokHF0Jkx1LGU6dDYEP/3IKPCqnCidPkAppD+MPvA2QBg5/eioQEA3qWhAfDevaKh+VHp0KKS rQAQ+/Ds1rX90KWhpQBw+/CfMH9aoKVx9yBV0P3QppGn4853onGpwdxQxvlRUCECULX/XCCfkAGQ +qAB4aKSq0OiYr+l0aaRqcGiQVvAVzHnqxHXpXGocQCg3qVw5wGQVuD87/dbwFbg/1CvAa50pkDX qACfUKZA3gCg1p9BWqD/ADD/sACgWjGwoFXQnxFaQP7ercEAcK5g/uCwUVbhWDHd/jD3VrSwUf6Q 57BTVwD//fBWJFYh9yBUkFzAnuGe4ef6cgJi1LCEhCnA+RBUgP8ysAOQVID3cNwwtyG2wNxQbaJh tRVxBwBjMrDwEHv+ezIgdlAD4bdTMiBcoPtx+/0APsDGYiG3objxuPG3oX+5gvYw8LG3clSAw2Dd UZR13aC9CRNzUjVUgG7hCP/s0HDBFgJr8AeR8jFIFGsh/0qxDoHxEM2RCNJrUsDj8IH/SBGg88xw ErNxUN3AATAEMN/F4cJBZIO9gk8hjG0xcYL/R/ADQcKxoGIFM0qx8RLvEPnIcK0YwsDCsU8ES0L2 k//whEgRa1FI0GkBEsAVsOzBX0eQyKBiMXFgRXApkBAp73FRFpHcEAZhcxeA7FHrMP9HYPEQdZPL +S7BzKkblM3s/3ZKdkIeYh4T0/HQX9EHU+D/cbLT4ngE0v7Q9tQY0/UiSf/S1dbf17rcEB9f2UUp 1Cl0/4KI2x7aOIQJLhCFOiwuh1X/GnEvcuCCL8Dg5C+E4FQZZK8n1B4RGlEn4M63cM6Mv/+NNOOg jeLlUuOxjCHjgo3h3+ZmNDHmvegIM+SU6UJ/wf3GoGvp4SOxNPTow+rHO9H/64STMuwkkxTsJzx0 7XqaDP8+Fz7SQ2s9f/EKlz2XaPHf//UqPoLwJvZG9yqfkVPQAvD/rqGfRFQRn9EOYKDioqFMYf+g 8WSUoJA2MV0wTxQEQKWh3a9i1qjwn4Cng86ngabE/6wEVBGicatxqQGpAa1RrkH7ppGmQO+fcaky n4C1MKMh/1XhpoNbYaeRqLFZgJ+h/1D61lFQrQGxWhD/8FtgAJH/qBJW4KhxW2AD4qhBqfNakP9Z gKhCpzEBY68BAbGvAaVB///R/HQAkZ+AWjGtoKuAtBD+9wG0rYH8c66RpcCo4AJB/6fhAkEJMlbg WhCxMQUx/JH/sHGyIK4hqUGusKhwVqD9Fr/9MwUyrxGuobhhXCCtVKG/XOFc4UtwoUGhEcBhe0RQ j/wxGnC40V8AITlCyaFvXaG3cMewXMBKpNAQ5DH/uTAQ5BCBuDFVwSbgE+C40PslkGhwc8rgXeAQ hBC1tsD/vLEMwWWwxUC2wLkht0G7M/930cXQEGMTUbaBUyKrgN7g/7iAvYS8Y2ZxEpHLIUeQuLB/ ZoAe4C6B0jO/YUhSSAFz/hBHMMIiwOJH0cCSZYFlge/CsRvyR5APkHvCsWnRwxF/yOAaYr7yZfCh IcSRR4BC/6ABbTH7UWXka7Rt8WnRoPH/TGFjQ79CR+FeAlIRU/G1MH8Zs1+gZfDGoG+SHmFGwDn/ cAEP8MtDy2IkQLigyUHJQf/GoEdAEAAkkhAAy7TPpM7o/87GJzrQBdAWeEJxwneq01//0oi5ECua fH/V2dYmLRZ6uv971HyV3HUv+YNoekfaqdqa/9zaM6iDooUxhBW5UDbF3ov7iCKGhrXgJnSgkpDi BuEE/4miOxSKeODFPLLkquYj5kX/5TQ+q+PC5hXjhOa5QNeOUv/muOOQ3QBARIxx/bDpYIiT/q3r BI8h62WO0+p2Re2Sdf/rmJbm6/yVT50d8XqaTJxH//Xr7nn2pqOAuqD2R/JWl4/78UYeYlIeUL5x UsIe4Whw/x22XgEhM9FBwDLEkclxyOHfXjHCwKBQXwDIAJwh0Ksx/qX8QqgjppGoQP+QphJXgv+h gQJys7CswqagWCKfAa6A/6LQp7ECALYA+XIh0ABlq4D7sIEAA96foQsSsmCvAQaU+6hxAMScnyFX FLFwXZKog38CQQzEpdCuAQOCAzSu0P//qKIE8bOwsgKogalyplFh0v+oQKiSqHRXZGNkpmT4tLYj /xcwq4CAkCHhRGC8k2VB4tD/qqC3Ub3hFvD5cbhhyaHIsf/P0MXQE2G7EbvQyLHJonAQ/xKREpHE ABRgtaOgkGwxoCD1EzAxDuBCtsARQRCypBD8QowVILbAE7Kk0AuhD2L/EzBnsbjxEUChELbAEyEQ 4+fGABQjkFCtpbMQL3AbIP9soxRBuSG5IWqBbYW2wAuh97rRwWLHQCkgs2aRZpG24fcSkcnRvsBK Z1O5QLhgfhH/IfHHwb2hvyLIAMBBoJDGAX90AXFgw4C+wGlQx0DLIFL7wsDB4YzCsXTRG5DIcR9A 76Sww3T7UcKDUsJUuJEjQP5CyjAQAMTSHTFVoh8hdZH/FuHH8f3BwKMS4RowwCHFwX/78aqTxbPF ocDwvqMP8Rh/y2BTFMnRafH8EcSRcXBa/2exgLAfcsuyJibLsyY3gJz/0lLSNIIWK2uCp4SEhF+F Nv/SRNXRhhiDXoh+ia8vNIsf/90zjE+NXtUTKHfe9o7yKEL/3to4Sc2xzbDgNpKs4TU7Gf7Gu8CU pkVwlLGVdOUx4+TvlgM9o+ZiQHHWQLM+MOYw/bpA3phCPfVAQ+YxmLKYkf7e3uCYlpi2mNWZokMS nDT/QvJDY0NUQ1RD4edJ6vNCFP/o054V6uvrVut17i/u3+/qv/fNpNtP+EPR9jlP8r2oP/+o5Kak p2T3tqqO9OW+MB5R5ySxfcDJYAAhyhAakMnS/8pAHmIYQMEBtoEaFPtRHmH/yjHCwMKgHnHJ48kQ yoIPAb98shMwEFL48LhhymBCymH/btF/UWeCxfAOEcrBysHFUHpzSeCUL7C0IkdAesGM/7SRwdAT cBYAtSK70Baz6mF/udC1AWajDhEX0rYhDiGl72YhvKBlIoBhhEmAu4G04v8OE7eBt4K2ERBRcjG3 M7aS/xIzwwHGAXNB1WFnomgSFaH/saO8pBRBaBQWsRuQyZKxY/9oArxzFAK/dGqwEQS/Mm5x/2IR fLGxM8GlZ+Fw4RgxJPH/rLESwWyRZLBm4BSQxeBTwH5ryKBv02qDEZFq0cUyWt/DoG4SDxDDwQPA vW7Rz9D/HxCz8BUxEvESwRNQZ6AVEu9noRMww6AH0M4YYXPgsVD/yRPCQsSTxvMTQRNgFJC0Af8f 4h8AdWFxQURQIhETcCFw775RrXCuIiOgSniReqFz4bNw4MdBjBgPkC/Qe3Xx7xrR/cF3cSQwSh/i +wBJgP6laNB0YYISKPBHAXJRfKH/abBXwHcSHzF3gRtzHgEeAf2t0FIj0FMxcuB6Ih6xeFDvHqEl oLJRr7Ax0sFawSTxr640MbD7QLMgCB2AIXnx/7UgGhKzgH9RrODPUHKifWP/I1MjcXyyexJowNVz FcMVIP/6EYaGhqWFn4iPK6jch4cF/4cZhSWHG9nShwQvF91JLzj/LZfjfzMl3IU1t4v/5t6Ozv+P ZelFRFDpfTkFkcY5PJOC/xNQk4WU4ZSIlYc+sj/iIcD/l9VAspslmJDwpJoAmHPxcuuYcZEw5/IS rVnw8lDyod+ZlD3h8qLytkRQ7/LUmlH/RFD1AvLS8oPyE/Fw86H2df+YwvcjQxFC5J16QWGfWJ9s /6CpRsKhNkciSIylE1E3UWj//chLK0ufUA+nL6WfAx+pm/tRUh/gQhhhH+DPUdcxskD7cuAkMCkH 0dRxaKEeAXCxL9a0wqOyQSMxMSOhCBj+IX2grhAakFLhZ1Nu9bWx/8Ziw0OsscdUEvFnsayxsiHv aNGs5CPQCCEpI6Gz0XKS/wnBGKHHkQkEw0FvobLywjL/EyPFAcAhbgK3wWThFNFskf/CE1RQa7Fq wRHTFZJrIcBy/72CaxFyMQv0btohwBmgEdP/b5Jqxm4RaBFEUERhsbBtYd/EkcQAaoDH0sABORFy xTL/axHFoRpiaaHBA2hxE0Jrgf9vQ2fhVPJTsXewf1EcE7iQ/7fQw8FpYbECHjNvAskRxtH/ymHJ RBOBbxBdYMZQbHLGsv8gw7FR2OF/Eh5VspDDkVlw/sbGk29Re4Fu8n7zanHEQP/HAbKQw8EbJMIS erAo8Fqw/19w0aMJcK+QaKLUIK/haiH9dBOEcXFz4TbQc9HqUXVQ/4rwdBFUwS9wa5ApQbMgzkHv ZLCgQTyxOAGMcXNv4HXAf3bhz2B4sHGAeYF1wS+wrf918c4gzmHVIHkAzPEs9azx/32wvlEJsy3S 07JqMBKBz2D/2FB8kFUhc+AWkMxBfJDOEP/DIW7xfNJTcVVRUrFSsX0U/c0jhDCEv3KxoH7wxrDe 3f9P4NAkNH/f3zcvNKqEDdAi/93vOw/gC4OqPauC+I7W6Ar/6GNA2epRQYZk4I9xVMBCdP+SMeny kkWRwFTAQ/KSEkSo/5KRkm2UEu3ClPXvApZj72f/mSJIgpoCSQXx4vHH9hOYcL/yYfPo88P0oEvF WlC1TDL78YbzId6XIUdhmBT0VEzR//VBTNRPFUyETIX0cfUyUSP/mkJk4JpC9XL2o/ch94RSof/3 tJzxVCf6U/knoQSgRaQT/6SYVmal6KRMqguo+qobqij/qCurOwJ6Wguf4AQmqPRw4P/UANhQEoEv MthQBxEJgnLQ/gCtIcLg1WG2EbJRYvQN0/8HwQ5QsIBkEg6h1+AKcQ7B/6zhCbKs8HaQxaAgcHaQ rMD/sXFvEKzhEoFvAXJiYbFlEtHXwgAYGGQQIWhheTH/0hDGIHJAsKGyI65REqJ/I/8NAhNxbwFr Ah9Tb2S5oW5x/8PxJFJvEMeCa0NvZMUTtRD/t9AUMrHgFnG3wbtQ7GDI4v1q8hCyMGcSIKER08fi I0D9G7EpfnAQRP6wpqG2Mb2B38UDcRMfQRjhcZBaETEe4f/F0hoREgEUcMZksoJwgh8C/xMT4tEv shLmxtAUQG9UxsH/dhRgsckCcFPG9GpEfACzUH9vZcIxyDKxAayxw/F/sHPHJ1DYgXoitc7Wb4J7 Mb8dQ7KBLzGtoRWBslA5raH7zZAVQcYIwbghJXEsMRWA/ytgJtHSENTA0rEKwM9w1MD/E2DNY9oR wnAcMcXA0UAoEfsngQXAtdUAc/ApQCwxuOD3QqEwEdBxxsJwv8EYQLtQ/4Hh0LH+oJIx3HKDASrj K8D/zuIq0M4gLPHSwYbDrcGHEf/TEczhhuIu1K9S1+EK4zJh/ych1iASkLoSKJDY1K8xMSH/HOLL YM9w1QAyIIixs4DVAf/OQTBRwnLWwbVgGRLZwzev/44PO0+OT5DfkG/g2JRc4fr/4NblF+P53PPn BD766C9BhP/p8Zsj6kNCtENzm1ZEp0R0/53p7HlF0+3TRtPu0kdm7zv/xaBIcqIkTcJJVfDgTUak B//2A0wHT5NMIk8DpllJ1E5R3+YQKnHU8MAA1iCMGRDQ0O/rYKZE/ECpB+epqFDVqrb/UWVRH/ZD UbRTBFM4+CJIof9Uo/jm+oP6dc3wVlv/lbHP/1nPX7Ncr7QvWPUFxLTsti+/t/hchP7yCYLYUA0R IWb2/w0RxpJpAEKwgRHMIxyyJxL/CSIxUgfAaLBowQnhZBFkof9kc2JQDkNkoSKgBqAOQcAz/2eh DXF1gsNC0rAvcClAFpA/i4FjwQpQvzFkoc0AUqX/FWDPcGcAEpDSMM+ADJFhI//DsQ+zHMAVwyQi ymEV8RXw//wwC9DKwNIwwQEMQSCyJFL/JAR4NB+HFlNsIcMhFYEYgf99lOYQEGPHUxXhatIkAWbx /7wSaQASMRqg4NAgsnl0dbr/xxNtZXFhzCEL8cyCxvTOFL8V8zDhdnG8M9EiJ2CcLED/f8EMQiDC xdN1VCFRzLLGwv/VsHoQJYCGQBVgCtMrkdeQ/34QCqEJsn5gZ6AuwAmSI2D5C9C91nzCCbEG4cCy YhD/wIO/Utgk0ZNF0BCwJ1ApIv8l0YkAB2HEAWdhIaCLgovy/9lBhjGEge/Q26IjYBURKDL/PeD8 IISSgaELsIZAJdFwEP0hoZyEJNwUgbFCsITSKNT/hXJ6IIKhK0BnMCrADsAN8f8KwTFgwvAIMQgA fnBjAy4R/xzRMXEIAIbkZMCJEAsBLMH/K3CMIbxRqEDDUWkgMFGK4f9sICpweiApAWxQCOF2Yqgg 9y8givD8QMaKgSmRu0AnEP8znI8E6HYo8DS23xHpYiJw/zSn6lXqajWv6Nc5g+v6OXb/lsmVPzkW mQxAfEG5QglCVv9DMvU/RCH2dhggRDL3V/xA/0PR93MqQUb0+UKKIKCSR/P/R+dIGEhVTdGixUkx TbJNlL+kBaTW/dFME08Cphn3qRK+vf/VRuAAY6mzTEQQQlB+CCNgcBCMUEbQIYBAAa3fAKGx8ACS AxYDxPcD1KlB/wMSBNKpMgWDqlUF4atWq3j/rTdSE1LIUqMJM66TPeBT4v8KMrBwucAKtLXEtcVW YrW9/16AXzoNNlUBDecO1F9VucH/EDwRRBBYLBAQXxFrWSLBcv9ioDDhFnFs5L2EMmGA8SJw/6jQ IpAscLvAMnDaBNozZ5P/ZLHXcsQAw/C+0mhwaLDCsv/CML/gIHDhkMKyLeHjZMoT/8XhL7AycLzB wdEqwOdAY8H3GWFjAYkQpSBwJnG/MS0A/2WAZIC/AmVBvuMeosCTHzf3Y+HCAOVBpRnB2IF+US5B /33xjJC9cSGSfcLD8IkxFgP/iMEowMwRwzIbwcGRL3DT4v8hlcbidBF1ZHqhZmPGUXox/yUyaoJx sS8ibLFqobvU06X/uyDJsdQxdSLBUsEybLHEQv9nUSJBZvFqgX3SfmDD8Hog/xbAHTEiQ2mF16bU 8WDh1bH/ffHWEYrwnqDJYBnBGcG/Mf/WEmbBYbHCoYkgvwFk0TOQ/GvG1rDC8BgAMCEvwhgz/+GR MRNk0cIxchCGQH8g2IH/iWHnIeVBjbDJ0IrwFjEXsr+IU4wE36GCcUlAubCtR7GvhHDcUJfRgnKl R+Gt3TH/YXDE8YXAeiCEgTbRghD4If8gcIXi3wMWwH/R2XHfEd9QfsY5cnogY+CAsX5Bw6Fr/zqR f9HicYtyFkG8cIsR1SD/4OOA0IeB4VHaAYcigNCK4f/j8Yrh5LHnIYqx4/FCUIRA/90SdjF2kOaw jMGoIG0xcYH/cGHIsbzgM+GFsO/zlPXoev+Pxup0j+PqY0NvkBvsMpEm/0bIkSyUr/EGl7NKhZh0 lvL/8onyf5p6mtmco5vV9Vb3Uv/3MVAanxT3ZPjh+LX5UvnM/1Pi+6Gho26QVJT7VqL2/IL9/Svv VoFXQf5i/wJX9KY77wChAEcDFwPSxgCUqTKuIX3ToJxwEI0QbCB8EDgR1v9bAQPRsHBdDwRFBFW6 YAVK/wWoBeMGmGxQrGmtcgioruH/roKuZGPpCjEKlQqlC3oOFv+6Ybo2Z8i3n7YJt3UOtxMPfwrg sfCD0BO7FCcTN+XQtf/JIPRhyOJ0Ab2CF8CMYePC/9oShbAdIBex2RG9s+FwLwH/w/A0wePB4nHw IMiAvQHBsP++osIwwCCG4L5QLmHjccIx/8Iwh3GHcMGw1SDCAIow2UH533OMEOECIeDmsNdgK1F/ u8DDATLwiFAY8XNRMDEh/8JxwnAcsjHBHkR0UoCheIP7McF3UaXGYBoiHfEZQL8B39YRGNHAgr9D HkEIGUEyMv8aQhzBMvDm4C7QiFCJ4ONC/y/SL+ExNMCFLGOJAYdR1DH/0ZGHUC9yxHMiITqwIeCo IP+60NUxKoOJMYdT5yEy0r5C/x9Gu6IXwCwif0PWER6kivD/FsE3IC8zhiQw0R2xGNDhEf900dVC I4EuA61gLnEaMoiyHzJSLzMuwi6l4nFzxs7+1iPxviEcwYs0fePh03Qz/SkQnB0hwjFy0a0ANyHT Af/LgTwyFjE98RYxcqE+UuBw/5YhNkHb4c2g3zDgQN7hNwH/ySCgYcxANfF1sJjQGhDgcP+QdNOg 20GQAPFUlvJ2gSxB/49DN6A68T3wJwDwIOCR2XH/5XGWYPdhP8CR0ZHSu5HS0f83UMOAOvLBwDrB lwE98cOA/5PyOmE44JeA55DksaiAN1H/08E/kkCR3cC7ATjQ5PHmsP+oYN8w5MO7QMcBQCKAEZuz /+g56yrqZURF6iiez+va7Vr/oPzr/uw8RuWStvKITnbzr/9PRfRv9dxPBFDq93lStvln/VMEhPoG VOH7H67Y/SNWgP+v5PzQV4RXhVgg/wZYAf+/+1nWXVL3XUJbEF1BtH+0AtUKoPfksLVn0Oe18bXx /7XEtu605l3fuXwFNWCXBaD/BlYGcweCYfQIUQf6qCAJOP2+M86+MRbAv0Bk07+B8eD/C0MLMxKk Do/BWxKmw5bAU/8WwMP3EmDEScSRxhTFJsbF/xIVxokXsWoA5NHnERTRGzH/b8IqQnTxcwHk8CkQ NyDac//ZETTx4hF2ANchjfGUsuBivxcx4uAckB2hfdEt8VLY8P8ugjHB49A9IINgHGF2kTUh/TOj jJWzO0DWEcxSJXAcEP90gTLhHVF4E3gyeEEZknlx/yQA0qHWEeNh4NAh8IwzMcH/IqD78CBhLwEa MBkx2IEY0v8glDGiMDJ3gdYy1qLVIXPg/4Mx1JIYkNXj1mUyM3zDiLLvHJHZlILx0NCUd7MeMXHQ /4eDKtEokSrRLFJ/RH9DNTD9iFHGHMGKcZfAKFAV4Riz/4NRLLF/YYXzIAEuIozjLSD/dDIZst6k iMQdsZfAlvEYwP/KgubAfWAu8s4y2JKMJBqD73nidLHiMYqw3oTgHOB6Av/hxYWR0GHQYT0B3bF1 sCBg/zLwdCGH0c9CdVB10clBlAH/FjAmoegllGEYcMyAkaA38f8CAI+iNkE4U/dgNiCQQTZC/51B P7CRYTiBOIFNsajQqMH/plHwcJIAOvHoYTVRIjCNwf8CcJdBzIJywJvFP5Ga4Txg/8+zmRE3ke3R gBGUYZQBlGH/lGE6YUYB7dEMQE2gmkDt0X83kZqRN5E3ZD60G0GY4Ur9KRAQjnFBAZpBcrFAEJkU /5wTnAWcG5wvoD+djKOrSAr/Ruj7L5LVo5b9hkvppatL4v9ODagCpgpOeE5Sp3dPJKm0/6s/rTCs ZlNCUyOtfK33CeD/VZiwAVZkVyKwcrBXVoGxof+xRbIeWXJaRVsTs7+1iLWX9UvgxrxQ3raCtvkQ tBF6/7TfDgZer2AfvBdht1fwYmb/vda9kL7VvugZXWTyxBbE9P/E8cHJaoZuB8dPxzUduMDI/8cJ afI/sB0JwyZ5AX+RKwH/JQJvgipiNPE0MjwgM7C2QP+FwN2xN0Cb0JpAlnEz0T6B3yWymkCegs+w dmEIMZHLIP/MgJJwP7DLIN0SdFRzkc0C/3nRy/LbsIXAP3HyIXVxPoH/PoFKADlhy0CNUI2AkqAv kf/Rldby1vHjgSxyy8GDUOOz33+yc5ExkTwgKxGterHUgf94EeFC4MPZBNnx1gQyUTAC/YsCOTLw dBF48NbT2oQwlf8x8uKx3pB2odKx3oGZ4I5A/3VQbvDWwtZzexHxwCrif5H/exHWM3jyiMNvoVgw 3TF0kf90ZDdl4QEtIdhld1GF8SlR/9/E4pQzY4uxiLPYheUig1H/mkCIUnQh4yJ5E3LSdkB6Ef96 EdNhcHCSAG7w5KKK4s5x/3mEhkF0cnJx8cCSENogkaC+vYMkcwEtYY7xS+CljyHvlJGUkeahSgCl 7pF0sIQx//Bi86DUcMyAmpCowJIwkQD/kkBIsewBkjGFsOsxqHCa4f8mwGHAtiJhEIIwjlDzoIIw 9ntwAG/xWvHBdaOTMphR//GSJ6B1QE8hKiBF0JFk86H/Q7H0MptglYRIA92g6KHPsP/yIe9SkgF1 sHVxmIGRYe+x/1xgkkCYMPT0jyGCAHbg2iD/62Dn8E5zmOGaM5hAyzEnof/3T59KnoQmc1FXdcGf n1OP/6IfktWjOVLSV2elROyD7HL/qKNZN6aPAo+oR6gWBEQDg/+pp6rxvFCrEaw6BmSskq2R/wc7 B6Ju4K6TroYJMq9HveDfsOGwhbzAsRWxJfexo2Uwf7IaswINqA3vDjC3LbaS/+0TgaVpoG7gxrZU afFqjf+2hGt4t7y4N7lRE40VwW82/7r/vA29U3IOvbK/cL0iGRz/GoO/g8AFdZ7EdR2Uxa/Gu/94 j8a3xHF5nxyB1OGIwn5R/4CR1VA1QajQ8bHoscyRpJD/iGCDEeWxfsJLc0wi87Apoe9HofChKsKa QAjWYd2xhbD/z7CrAJUAgyCssCpwmzBAcX/wwDkw0GHLscnS54ClgK39pJClvFDBsSnwm2AqkcqR /80BKyGNITIR1OLSITMTjFL/OTCWoOWAyeCXkSkQ5PA5MO/NwS0BLiHK0K0uoTISLvH/3KJAEM6R PfI9oiiEOEE/kf4QMJHfANdRMYHR4uPBMHHfLaM4FDhBOKM7wWPlsTP0/zRBhYXY49OSOIEwE9XT 4TL7MPPdsWviY9XxkXKHxC3C7zBEMBYyES4gY9dRNmfX4v+S55Bz1vE+4M2BNuLiYc5h/5AEN7I9 weZi8JAqcIHB5lH/5cHkoYVTM8GKJ82y0nOJkn/aITxhPSKC8dVA1UDPsLX+zu0RRdDq8KWA7qBC sQRA70kxpVNFwaTgjO+E6wHrYv+B4ESh62BEws9wRYDsA0bA/yTg9uFGA+yxpOGdsUegQuD/PmDp IMnBy3E9oIIx8jGAgf9HgfIxSoHooPNB80HvIuwx/53B6KDuAaFBoUTrkUOx6bH/T4DvoPBTzEJO Q/KyJ6BHQf/tQU3RR0CC0NogTvDuICrR/0xjTjLaMO+E9eT3D1GIUoj/+JpUT1W8/Mb9qv2lUwRX jf9Z+rHvs79buVusXCVdVV4l/wtABUMFN17VRHAF9GAjYBL/B6EHcmBmB9xiKAmCvNJjpP9jqGSm vsQLsWVSC8UL0mZC/2YiDbXBPGh0aHJsc8LaD/TdalLWa5jEimw/72yfbaP/FLBuFBRGFGVvxhVT FvAU0f9w4wvwc8BxdBbmcrdzpnPG/3PqdTJp8HXPz+p3mx+/HcX/G/IduR4FIF/UpNRHMPLi0/8w kCug4/GUMCMS27BF0PzB/4CAJNAkkUAwfFCCAEChRRD+xhyQGLHqYE7RQDGm8UAw/0CBLWE1EOGR SyLbYSfxQUH/idLxQYmz5fGHATmBhzEqYf8qAT5hhGGHMYmiPuBB4CTg/9wxmjE4Uy7gMyKXVN2i SEL/ofDnQJfh6PCnkEAAJWB+wf854ouCLpE8oCTxlcHmUeEE/y4RkeFAgX7xisHnQZZj17H/M+I+ EeYTJFIuET/EP8E7we8oUYrBJWCOMJw0dDZSQYH/O9E70TbBPuAkUD7gOEQosf+ZMT6Ai1Gb8JhQ fvEnweuy/5tSOAIy1IvjO5KQ8YtTM+L/QYE3tDY4MxEuAUAw4BGYcf+RITlhOBTmRJgR5ALj5tjx /sY+sDvg5vA7sz2yQhLzsv/h8YTBl7E+cYHxOEFAkaPA/0bQ/3BC8Zzxo2CfsPwhRdC/SQCc4d5R S7L/4NoBnEPh/0Rw/2BMwXxQnnGdgU7wqdDvnrNFkZ/0SSOlECFEcZ5w/wDho0FMESTgncGh4qZw l/H/f/JRsIHgpWFD4Z8C/QSnIf+fo6mBQ+GpgaVhnwFM5EWR/Rbgzv/xqeSpsoBR/0MkMH/k4CMQ m6FDgVqgX2GewYT+IaaTqSNJEUtSJqEmcwQ1/5xhR3JRowU0UZQFn65SUcr/q5wFJFMCVhEJVAla rFQJVf8LFFjBV3cMYlnCDCYNZfcj/w60DoQOgw50DPpYwrgRnFD/XsIRgxaAR6BfMRJKX2BfJv9H oLn3ufJLkGF3YaJhsUHQ/xXUYvEWAGNxYxBjkRbRt6D/vbIXkVqgcZC/Vl4AZiNmEv+/khkXcFJm qMiTaF9qgsSTrxzXafAcwq/Axnxg72nx/x2XHu8ds2rFxcRtoiFTxxb/IlZuRG5GyJDJE8jSy1DI cf9GUSSzJTTK0crQysJxYMvj7yZjc0ImxCbz1iZiJ/Fz8/8oeM7jdTcpmoHgKbl1cngj/3gU0SvV s2pQLDkuCHsMLmW/kKI6AIrwMSCI8HywGHyx74EAMZLjc0QRtYOwX2CDgH/0wZtB2MF+kdkhSQAM cYT/S5B/0DRRjjCR4UFxguI5Yf/kwEDh5bI+4YpDNlORpD+A/z0BPuDdcu4yQWDqMTvhP2D/3yGV 0enROJNHMOAimkJBof9IMUjwpVCDgJezSFDkQq+w3z5xhTOI4YsDP4ExkhFBcf/hBYejkeGX4ecx 8DGTw++S/5Dh2qE0QUGh3dFLMQFwQALvQQHh8YnTSkGUqNBKkOcT/4xBOGKWporBiXHzIZtBiXH/ 2tGB8dvx5zE7kYKB3mCe8P/bcOTA69HkIvMhl7FC4jbw/4ghNfGGR+GSl+DvwJthNkKbN0LpwnOS QfAyxs7jcf+aITWS3SLhIKHhiYLmMUty/9rR8qHfg+kx8XHbsJfxgCD/4hGG0d0S5MCo0N8w8HJG Qf/2sHDgm8GXsECQ/rHbcKNg/6+gfwHZkKGAn1B/krQhpGLP9+KEoYRAqVClMfoBnxP5vECtGK+w o7GhcfeBntH/FtBgUd9An6Gb0PwworH8sv+dgQIA/dKh0f2BARMDcEDh/6NgpcEW0J+A/WCpgacU opH//nSoYH3wowKp0IAgoFB/0f+igoNAffBSgaYBrhFa8t4g//nQWlEPtPmRApD48UDwQIH/psNS EbxADHGAMF3JUGFecv8Esl6V23AEwd4gX9NgVV6y/1/iBKNhZV/y+aFgx2J1Y0n/nHGcc2QWYxRk lGXsZXV/oP+wUPYxZ3lnkWJRaLIDkGjl/2mEaJehgGSTZ1H2QKGAnFDXt9BrYWvDtWwpvWy4xFD/ bOIU0m3zubBuAxTibgGg8P7Ob4ewUHSRdJAXcXCEcRP/csPLwHGkJqJycsrkJaQktP/Jw3Pyc9Qk g8hiIkl1dB5xf8XwIZMdwQAAHbIAAHbB7/uvsfYQvXdmeK93FXbGI6D/emR3xHbSe8P3kHbC95B8 Nf98cXVSdTMjAiSTnlDEcH6Tv35SfyIl8n8SzZB/o94mAe8mYYCRROCBFNaBhChEonD/KGErAYI1 WdAAECvjg8LTMH+Dx4OaWdCFlyyyhmkuxL3/hdHWU4gyqNCHpYb4iLiIkv8xQZCxMUIxJDEhjpPn AeNB/aJwrTXxRKHogZLRMRDzEn+bQU0xRqH9YJ9Q6DBZ0KX/miEyAEmi6LSRI+my82LuM+/otEeR lvHqBwiUsJSykqP/TsGbMZkhRJIDkEegqFA6Vv/aoUBy80BJcY8xkmHnAY6h/+JR6XCaEDciMMOQ YkVyTWT/PsKaM5pUTTGP9Oyi8QJBJf+YAgORlLbz8+ci9LH8cI7w/+mx3VCYYdjx7oPwsklx55P/ 4JLa0drRSmHtwPCB5gA5Uf87EqmgWOE/ED8R52Q/ETtk/+ghjMPaYOQT9FFQMqjQmJb/n3HY8fWR uOBOwzuURGGg1L/rsz4i9IH0UU6x8qDn31H/31HjcUah4hFg4k9Q9CQ1AfvYkdnwxk0xWUBtAAhB 9wLfUIGbgaBiPxHZ8M7aofvR90XhUbH2cK3+0VkBXYFTMf9S0ergVKGwAFnQU2DdAAPx//hR+gD9 UllA+TFUgVIQT5D/xgBWAAiBUpBP4VHAUbFRUP9VYgCy+LFRwFORAULboQCQ/1jS5BHrwQEi/gH9 oTuwT1D/WWEDgbOUWcO34V+ArsGwcv/6E9UA4cBZIPZA9vFXUQJhn1nBApG2kv7g/5ClGJaB/1gh sBH+4PSR8DC4MVvAUcD/5IG40rlD22HlINuwBBC58f+5Y+Sx5LC3w/GB67FOkeuz/7uV22IEEOIB 3IFKEZhgOgA/43DbMI8h2yG+A74kIUr/kmCSUE4gv5G+Eb/CvxPXEP5SvhO/Ub8ivwPAQjIhaSFV T1CcPzCM6ECU2ECcvUJgpehg3zDt0OVgzsOh/+zWSZE3AN1AvbG9sfWh6jD/xYNWAONwSfDGM+Nw 27H48P9CEO/AViAIkLWhN9DH8k4g/8fxWMD64OHAAWHHkQFhWJD/yZbJId1AyRTJQspzyycBMP// kD8Q+JD/kMwhynHMg80D/wJgynHM5Ms0ywTM4s80VSH/AmA/EM0yPxDQZc+E3UCgAf/PovZi0UPG 5M3UySHPhc/M/8dxzaOgAbsB0hMIkMdx1hP/1LLHccgBybT0gPswyTPIkf/jcNJ21iPHRNTF2bXU ssjC/8ijyAHG4QIQ+JDYxtT21LP/2Y7dIt5SUVDqAJUh23LWEv/fV9tivRHgIeQh4CLhJeEE/+HG 4GNIoeCL6XDj5dXhMRH/PVA9YDEg5RWMEYrhRXDvwf/0gTKRpGDrQEeA5XQxEJKC/48xjzEw0e8U 8zPskIrQkRL77LPtwLWW4e9BlcLk4fDT/48xMvHqso8TkvGSYOUx6qLf54E5IfCgjyAxIAgxEPLR /8Lx8xGkwqXE80Dn5OeBkmH/7bACwQ1QPGKgwJvRP5I/or/zAZdB6BKfYTjR8hJj/cD+eziSNvCP 8eTh6ZQ4wadi/0iTOnG5wagjvOFMAJuhkLD/qLHDIe3hkdOjkk8RNrEy8f+XcjtxS2KXwzLxovBO 4kgB/+uymRI6QpkDSpJJJD/An7H/QiGo4+ZRmpBAI6djxnGoQv82sjjB/VOmUTYAAEC40D/B/zlR mbKckkWg/VOaEqTw+PH/SnBMwKbjjzFEZEnRngKm0P/60qbQPDGo4ZyxMsL8kPeBf6fx5oBUQKLw 5mFH8Z8w1v86clHBm6HmYMFQjQBaArLC/VPwta0xXGGuIq3SVTFVMH9X8VHADVARsFlBovBS0Vr/ M+BUgVqxWxEK0VhyWsBX4v87EVZzswGzkwqCsqFV0KsS/1AEC+FWkgrS9YCxwfKhrRH/WFHmgA4k VRG2MG3xBpBSsP830JrBzTJhcVpRsbGwMb9A/6BgB6MNkb3hSdG4o7kiuNH/lBFHoKugtzFXMRJS EjNbsf+446hBqEG5ARTivBFGI+ZA/xXCNvC54RRxFlZV4Uwh/UD/94GWAftB5fGK0OkhvyE3MP8Y szEQGVO+URmrwcWW4MCh3xhhPKGb4JhgOPF7jrFPUN8cYKZgHGBCYEJgjFIgw0DzjLCEMMa95rBV kEMA5bP/QwCeQeZgnjJBMB7UShG9gv/F0yCE4MHj8aTwoAHkQ8bB/7GwxrScAZwBHEHaw0DwsbD/ 4JQhcrLQJETdMtlW1nTP4v/VYcwxUVAmtOZAJkIkpd7B/90S3PRVMCSCJkMmNVmwWfD/qSEptCd2 IWIms9XS3TUopP/Nsdg2nAHegyji3lMVYSjp/ypTIdMishxBKGIi1CLTIsf/MfQtpOPC49Iy0zNW MlTYU/8x4yMD3uEpIlUh3Rc2WCwU/zdYIUTjxOEo4BNCATi2ITL/48ePcDMBOrMjwkaQPCMjs//i wjMS49Q7CemS85GZkulQ/8RSjUCK8Ef0UJFOtOZAHyH/P/GXMO1QloGTgZOBptFM0d+MAZHSlsHo JIryKcPB8RT/lxWMQeZBFdHuEOeFirPtsPfskpdAkQEx7SGXkJEAiyP/k4G40FOASYKdweUA58Xl sv+TgUXUn5HDsfDilzDlFIsU/+2x6EP/QpWRkOTngZcRw+H/84PvgkMyRPK90UAQACPuQf+Zskiz j8H7oQLB/tGdouii/5EC7kGPwZGjHyGRAEbBjfP/jMHDsUmT56Kc8RGhUUKSE/9NApDyk6K4cajh ANLo4qDx/6URG8CWwZCxpKDyMuDBsuH/3uH7oUpiTOKSlJRBUgO/Id+voMLAnUGj0ebQ1qSgPGH/ nWCUQJOBT8RAAj+G7hGMwf+QsZFxAcFMYo9wV0L04fqB35dAw+GVMaqRsKCcBVGMgJ2w4XO3ga9Q w3DG3qux/whSrLGt0bKCrbSgAP1REWH/pNGtEQhgCmCykaMAr+MKkv9jIrFwETG80bNBYgGys7ch /xDBDZFXwa+gDAJmQQrBtCH/5JBhIQ4RnTAMsa4AsSCrQL+087BhCXKC0LYxr1C9CgH/wVCakSrw sKAQwQWDjdDmgP8L4atR7tG4pBLRbBWrkRLi/xLybQQTNLkFFPOXkBSibxf/FFQUUxa4FjYUob0R jjAf0f8AEEfxGEGW8BvAv3AYc+mA/xshGONz9BlhdFcYoQFBU8L/XyKOwML0wyN4cHcAw3AdUOui 8BzwrZxAzlMRUEAeUf/xAHhhRJKXMKYAF8LmUJgA/0fxF+QX4UAQDAAgxr0huiX/JFI6tOCEOfMj wzzUO7F70f8WAztyfhMqASrwJIHdEycU/4xxe9GMcY0AJzF/UXvEFiH/f1l/cydCstAF0YCygGMT MP+AQYCigIR+1Ca1KQOkEeZA/yahJkEwxS2ihyYCkYHVhpP/KSJ/dHzYClCtAId2LQKHdf8wtK0A QBAitIHCgmQzFN5S/4tFi1k1NSMSIXG40IZyJNf/LjYkZC4nJtWNGDjGPciMlf+UhX4Th2E8YaSw PRU9LzuT/zuEfnSfUZ9RTkMf4V0ymOL/7VCbwfsxX1GkYregSyFGZP/soT60SKH+kUSEQwTlo0Oy f+nxTbJGcOW0P6Hq4wARa/9Pwj9Sn8JY0eUU7GHtIkdl/+qy6cHuQf7RRdREkeXBm4T/7KHtsXXB xBHrs3Lx5TJHhP+lE++BoIjsMkuz81Hq0UNC/1ii7KKcFFlRW2JDwO+S5LD/SZTCwO4RX3A/Ie9z paRF1P+pkqKCxJJMZBIRQ/RLMaLT/6KSPrNYuOgSTsG40PNT6YX/rhSpMulDreOcYUgwWVD7kf1A wL1DlE4WWaXk0kLg6WH76NEE0N7+4f7hVKTplKaU/+yUEfB3oLJz7lFKIU+UtQK/TIJB0v5hAcEA Ef1xEOlxv/7gB8AVABxxw7DmgJwNwf9jcWRhBqEI4QbTDqDwIGAR/f4hEPdRFGFoYQcQY3EFsf9j ocDADVJoggkgCmENMQpi/WVgGPThYaAFsRlw+yC9g/4IUYEBoRCh/UAFsQvhwHG/Y6EF4Q9BCsFl gA7RtcKy/w8iCZFHQMNQEVBjkGhQvdH/CaEFgcfQbZAJIAVQ/HL8Uv8TomhAbpATY2xlxqcSchJT /xQqcVRXMRfhVzF5kcmiENH/ySJxonGEypEXVMkUF4F5w/95UUJhcmIe0XPPdNsb0uYB/ykh7hB3 YGVgHWDQMXaQCSD/YGB4EHaQHPDQwdFB0UF3sPt2gf5Ac/+gQcH9gXKxXdD/zHYfgkAAHyF6ddSF loQ7NP8mwiHFPBEg4tbTO7KX0xYF/yFSO3KAUoRWl/ft8YEUfnP/gQOSm4IolVSD5IQWhASARf9/ NSRUkUlC4DYEhtwwgYdS/4ylkNgzJjFnjsgyNowmh2T/LBIuxIeljYaONI73MBeMI/8R0QzwLko5 6JLa3yWUlDi3/5MUf5c+JJdqIRU91DnllsT/l+iXylUE/XH6FHWxmOSYsv+a8V1QQMRHsEZxSwGe YlOC/03Bc5FfAK8yVFJDgq6jm6L/Q/FNs0sCRJG2VEKh/jFJAf9LREtESuJLE0cimwNJQk0S/0Ry WJX7o/naSzFBgZ30+LP/oIWk5P2WSzJLI1kQouNV0P+v4UOxAIKjZvbDrWD8o/ik/04VWuBokKEg RCOtcgTiRqH/QBFDRlXxQtOiYVZwXwCnUv95AADyp5OmsgK1QzK2YUIRf7cRr5els61yQ1GupFCE EPc/4ZniUpFzXOIeQVwDRLJ/mMFSQUSTVXFIoUgRTWDW/0ohBjJRIU90ouP21EPBtrH/0BGntK+R WPOuxUBBSiFAoe9eYgZDC6GaYQg/4UHAFzB/bSAdcGoAvNBhoMJRhmCt4VLgvWOcvcJSY4DAof9l 4SCQg0DCAGlAYMBoYivg/2eha7C78MHhFVDC8L5hZGH/tqFismVgtqFlgWhSxPBqAf/EwVfBuqFj 0mPiK+BjgGIhP2oxaFHCgWHBGtVo8Hul1s5jQWlAvT6QpWhQoUD/YEDEYRnhWgFaASGwX3G8EPuf YMTAY8f0blTH88YyxzP/gKHHuMf32BZxdcpkecRx4f/LUm7zy7M70STob6RuhXGR/8myVABx8R9h xMBzkXOTzzXvczEpE9MiQQBrYGBS8HcSPypwdmDRgiqi0gJ28dbO3sbRISvQK6Ar0OcrwCxA/0Dg V4Fd0NPy00PT80HRmWH/1HmWI9aUlhR+pO+DlgJ64/+WAn522JU7tNok3eR+QX5E/4EXiGe48DVk 6gKCl4CDZ1D/gJTdkcKRwpHeuNjy2QOJFf+Fx4XzhqKLkYuUkHXn4+As/4cI6AeMJOU3ituH5IZh kXz/OxfgtI2p4QR8spJVhUWFVf/in4JY8BSUlJH3lMdHGJRy/0lL1XWUGH6Xe8DaYWoR7/P/WzKY w/LmUZW3QQsyx/Cd8P+a4vgnnlGmBqPg/4EJEZoRf083pqOd8qbS9UL4tLDjIf+qUfmh/cRPXfsi ddCldbMR/6nStEL/R/9GT9V1wZ30nrL/T5dZLwAUm2ENwffx/rRW1/9a9FQF+sP6BLaCBDLA8Afy //2GAHb6BKqECyMG4gFTEED/oiJY0/+5n9L786lht2Gvwf+dk6lSWIIBk6aQ9mITIsfw75XAvuDH 8MuQc5rB/EQCGu9lFA0ir3O0oNavkfxEEXT/rqRTowzyx2DSkG3wtmGa8f9gxPdk9kH2Qa0Ae8C5 8Jox/7hRE4ETgBIgoxG5w5XAEMC/BGGZQPKQHEEVIr0RUm9C/7rCF3EbMRdAjBC7ERsRvPDPFTF9 YBxCDFDGaxWiusD/HnCagbsxb5GLoMIQGrO+Mv+7QRqxwjFwkrrwuuHFwbtA/xaB8pAeIXEBupBx UuoAFdK7FqK20Ma+McIhF0Cc6fC+vR4CvPC9Qb7CG3KMwWH/HsOQAcYBInQmlIFgxEEms/+s8Sai ImQiZya0fPMkxcqj/ySTyWG/cMoTfsnIoyZRJin/x/ImsicigWGs0Sc0n1EpFtfPkikR0wFr9KGl KiH7MD0qAZQSwISgKsTSEc69XrUsQPgAKlAr0d4r0N7+zoWgK8C3UQ0RBcDPktMy/y4xH2HNQs1R ExCIk9RTMRT/ljXXt5Wz1HLXhCSTIwKKlP+LVpVFKdDeMBwx2UOSizT1/0wRvlDdwnmhNoLeddzW 2WT/3eKRZpWDOMSQIuJl51U60/9C1uuUNdFGUTuh5T0+1kK4/+GkP2TggTtGPgRC4jUU4Ff/4ILn 5kI0OWc8xjBRODE1Yv/uNp46ReSfVUg17negZd9a/9sCnJVLGUnkjNQypzRXM8N/1iKKkthTrnIF sPSRvqCM/680TgGn0q8UDRAEUfTxAGP/+fr6UgehAnRj9WwTtmEBUf8I0/wCDMRVhLnwvHD9GF0o /1BBEsDCEPtj/LUH9Kzz/3X/Wnf907RRWFD4EvtUVwr/d+8AZFWEBcH00M4HU/85tQH/BMOxCgA0 bJBeQqkkZva0VP/3hQSyrDMPMWOUEFFmxF8W/7RV/QQI1PtRW1T3lPwS90P/9kEMMcWAylDE4B8w fiBqsfvQQGZgvRBSZGP6Ak8y9gH/HpBeILpiBpH08A6hFFDkwP8N4E4DbgD2g8WAxeGmok4x/06R DeDPYfXVCDEG8RGiwiLmKW7gFvC9zvSRTRHJUL/UoPTwY4FqoW5B2XCUGKD6lBPhEE1RfCBw4xkR HBD/cqMYkXOBF9EZgckAfBBzMN0YASl1EXMwcgC1HIYVIv9zJXYEGrMXEdlweFAmsHkh/xthFrEV 8nwgG2NwouUQcoLvz8LQMx6ScAKEeJEc4Rzh/8rhyiJy0csic0AVEFgQgnD/cMFwwSbiejjT5CLm fQPUtP98aNZ2jCPUpX3jI0Uk0SPj/37BJzEnBCZEgTPaZdpEasD/IYLbk9piIZEnMYcxgucGkf3b gHMr4GZgKjISwCrwhMX3KtAr4YWArYZwAWAr4CxB7YZx5yxAK7C9BXEGkeED/y0iLTEtkyQiiFgu kIiDxxH/LwKKBIsjLqEkgoshJVMjAv8yoTPEOEbrgX0BMFKSEzdC/0dHjumdoulIORMhMBUg6nP/ jTQ2keqUNvEp0OljNPQ2c/8p4I/CnMeTyUCij6TrgxSQ/5OnlneaAT9AmNbUkZtllXL/QMZCxUMC 8+JAUTqDeaGaRf85+eiojxWVguk3NQVDt0eo/0fqQ8Pvc/dERAmeg/wGolP/OFZLOZEb/JU0CIFR npJSUP8R8RFBwyFno2jhxOEiIGok/2UREOAUkBNhUFQDN7OiaeP/A/MRpmUCUcLAcGPzsqHF8r8N EVkxVYHF1FpoCEghVSH/EnFgBKpzD+JUCGH5UBQpwf9R9FiRqbJaSa+HqbNP1V3R/1tYDPJPdWMy DvNT12HkXiT/Zvaw9q22vTOppWCxUNEW8P6188AoEGTAYhgS9LyTCbL/xkPE4bsiZMOpoVYUq2QU xP/D8cXATTCHwWZFZNKsJKtj/8twbNGmwWKjxOHCoVshY/L/VfFPAIfQLbCo8L/RazCHsP8iIChg glBlUVaCa/VgYmhD71KgTiKnESyQ3mVBurFpUf8dwTCgcKHOYIHRdIAoAGjw/31ALpBwQXDTcPOa AMmwb3H/hUB0oHBxd2J2sXax0dF5Iv98McoB0PHZwGswawAuYJJQPSRBhMvRc+F2sXjxhLX/xuDK AHiRNeBzECdhdXFvEP/Q5HjxdlMpsXBycIEqI3GS/3PicwPLQSPxmgBvgXNCy3D/1JDNAsyDc5F8 xNUVffXVB/+Lsi62ZUAu9tcmehTT6dhW/3/zfpLZNH/zf+V8wdnAgTF/3FTcUnSw25HbkYEw5RFS /4digvWDA7qw3dLeUIQ2czCvhNPekd9ThmG9hbCtOeH/ObE5sd/gy2BhkuDyhwI7Qv/hsjvGIRDQ 4Iji0OBhkGjx/+MH4nKK88TR5ILk9IoG1PT/pMuKNIo0SkTx4UX29f/p5v+R4eqS/lzvdOx0nSSi ZOuE/+x16G2aNfsFjiLzFpbG0KD/lkFLY5hEm3RJFJ0klvSU4/+Uc5RjlvGa4UYXSC9QWVE6/56J UqtSifoqkDRT9pxW/K//jfH64/0UVQRTLKTojSZ0sP8ggXwgfTGAAHUR3AEqMTZh/31AAdEB0cLg 7YHkgWtgqPD/Y5GnEWggfuDEwmgCprCs0N+7kW1hxhJfIQnRObJTXyL/w2FoEYHxAmQCYKhUrQLA 9P+0wQNSqHCEsHFgxeGykmNyf2dUaTGtpa24sAMG0hexvf+5RwuXtAbFkQfEZ5er4r30/2IHqqM6 8arxBSQM07aDdLD/buC4Y2oWvPi7uKnCBbLFwf6lq/C/oRkxq5S6EbjoxYH/CcTc4WDAslHAkgUS vVIX8/8FI8EBxVEJwl7yxLEaYcRS/6ezurG6sV6hYLEER7rxwrD+3sNhqGGmseVg2FCtgMgR/yG0 IbGyor9SY3FfIhhxurH/v3FdUR2RFLEggW8iweDIo/+HwI3AlbDKENww44DUkMLgvypRiPDccALR ydDL0XNvIL/Mks1i0rA5QL8w2+CUfYDfJDRE0c3wyoGJsIwmYYsA/nslcs5QzqLN8stg0PMpwd8k 4cuhKHHR0czBY8vgKWP/0HItgc/CJGJ/wFfg0OOJYP8yEcoA0ITKstTh3xBLMCOw+98QLGExKmEt MC0hLADJ4f9E4MzR3JEutdoyLzflWIl6/y+kMGYxRNrQi5MlsYwWNKP/MlU00dmC2WM00TTU2qTc If/bkjXT3CTc4ZCHuqEZIaphfnutgN5BOqE4Yt6j3pGte96g35ClOYHgcuAiOmDW/r3gcd6RAQE7 ON2CYKDh0f+WAuIRPHY9IiERAcE99ZgF/z5zPvTkAy73pkJZx+QyP5X/oQj2POjXVTRGBexDRXae o//pdPaVonVQ56Oi6pP00VBY/51HnXdEYkTQ5tPC8PDTpML/8TBNk0LVQlRG1E0388NNsv9OJkM3 +wLn9FOW99r1O1IW//mBVQb8GEln6iJUv6BnUpX/6yX6w+fB/qWxxFiM5qT6U/9Zs7PUWgE10YbR zxBb0c5Q1ycQygAtkK3M0L0kkLXy78aQ3nDGwH+wnMrA6uDC4P8qYETgIuHcMD6geEAqYCKhf/PA PoC4s8HgJxAtkIZwtf+5kWxBWsB9IC0wt4LEMFwx78SxW0HB4d8QrcHhxBHB8P9EsLrBw3O/cbeB xLFdUXiz/1sBL7HHoMRiAfJ6AmDAvzT/XGEf04KgxsDDMWFEYUJgIP9hQ8VhHSEVoRjTBaNyJBfD /xzzcjNncxtyvqEe4WAhw7f7vqFawIQtMNMQYkIJkgbR/2mFaQNkcsGyxDMUAfPxX/D/14BLQOfA XwUbMsiFa+Fe0/8XVHGyXtjC1sGkdwRxgW7x/yCRGmLj0FrhXqHOkiIhu9DfXGECYMChYZIG4bWT 0JiQfzagXVAYcM3xIRAmcePQAL+Xcd7gItF8oXuBHlEQw8H/zbO4oc9SfLEpEVrxKmAkkH8jsI9x h5G1gbuwfBHxMIx/LMAvgHyBIxGG0YNzLVFr/31wLPIrsH3ChhElUNdhK0BwpXOcxn8R2LH5oK2/ f3GDYjGxg0Ekk/rAtSex/4WhN8ApsoVxLPGHgfDQI4P/JVCC0duyLZGDEwwQgFHc8f57JpA2oIQy NGAqw4VxKEH9LMEpWsBsEIWQ37PcQdxB/yQhhvSDAbfhV+AxYjDgMEL/4nJ/4eKy4yg+wolMLzWK /P8xdL0BjwTm9TSG5+XoiTUG/5BCXeGRQjeAGGHqhZGDHFF/uSE5kA9QkkeSoibQkzKc/5Pkk+OT opOxODGU05TyN0b/NwSVspWUOuA2oTvgPSK/gP+Ypj5l8eQ/BTPRm1ZBo5m0/z9UmzNCRUJYoCNC hlYln4X/94hV9aiFTaFNdaSCRzRGRP+wl1M5otVDflplJNCFEE00/04koBKlk001pNJLcfVap+T/ AbWrJKQxRYG70KliVpRVRv9VaKiDm+QDxFTSqaGot0PX/1DOT4VUcwklWJWwlf3mnsn/+IYMKrMV m+FBhDKAQUSQYf9/4CYxMPAk0DMAN4AzcIfB/yUhhVHeAYmgDuIQ0iEQXVD/XAHQ0dExD6JawLhB HoAZwf+OMILh3OEzMc9ieNHPcrgR/4eyW4DP8DOBb3HPQVuQKmD/tLG64xGia+G8YbbxtLHN0f9a 4bVxgcC6QUtAuLFbQbox/8YywFHuIByg0KGSIBmwGUD9fXDOK4A5UNCguZFbQSCR/7xhbFDX4Lvh ElG74bxwu9H/uiG+0SFRvtG58CTQXTO+of8dsmDAvqEXVNDSdNNe0nER/z9RGON5QztQzeF2cMm4 y3L/YKLK1HUjLPFjQI+hhwFcQn91oiKUXhFu8dNBb4PQ0Vr9OFC9NoE2gr/TXtMmor5z/7+AF5MX srnx0KBb0VvRtvP2lLWhf7ClLZApoCmTtvHdLTCltOG2AYTwtbYBtgH9faDG3LB9ULuxheEVsbcx P3zi3/Ae4dOzfsAaoLXO/yvBRNC7wClhfdGDFITzhOH7hdFLwIxsEdZxL+HcQoXh/4TyROB909di gfA3wEewLkH/fUDZQTEx33C3cNjwP5CCYP571OADUICRgwR+sdlBe7DvGtCE8dxR3FKc21ExMX7h /zIifsB9kYURhRHakdqRg8H/N5N8kt6BgJF/0TWC3LCHgv/dQIKhgqGGYYbB4JF9kX6x/9vihnEU Y4zDO9vlRJswmOb/4xOJnZmyjWM/c+Iyi6fma/+AoUGXQlmOc45ijtCOwuuh/+/E66GRoeqxRRaC 0KlwkgL/7AGSkJMg7IWTIe6Qk3DukGOTsu4k3sbv7bCUQMb/XaBekF7Qy3GQgpVy71bwlf/wQ5aT lrOWopjJ8iLjlIpV/5sSiSGlQfMU9Pr1WKLrCeb/C4fzs6w19WH25qewL+D55/+hBJ5isQL99lTl nZ6qyf2W/1TjqvoBYqRzpYQBkgBTBSX/pHIGlf9SpfCh8QZAXHQDNf/UENkw/AizVVQWVGWwNa7D /watBzuiM5zkrQcKC7EFnrb/gcGpUgYxC0sM1qbBZyb0Jf9nJdGR2gESoRAxDxEO5H+h/4MBg2Ha kRBiDsa4cdEB0QL/vMAQ8hNyeNGAgGzjiaA3Uf+s8GlRhGFsg2xye/HiUYAQ/xDxD6G1cSNR1GC8 4iUxytT/zgIXMxEhuBG4chGRaMLPcv8m4XkWdaC/EQZAEVQow7qif84BedF/gPiwG1HLwCmxnHsa MH1Azn7AK1DOYIDQrf3csK3acBcRj1B8UMBRdsHvesF4FJIgGkG9KGEagdCh9xqBGcF2AMa28R/z KLLcsP+2shoheKF9QH2AvHB3Urcw+8khLeDW0KG2wSMhdmEDUP0ugZx3guwhfKN4EbbBySH9gfC1 eQS3gSpxzmB54C3gvyuRK5EZwRoheQJ7Ut6Bof92MbSxO7LUoxMBtdG10S3R63ZjLcHGdgSlfNHQ oDTQ/ytSLaF2k3vAFwFqcjhDGvH/1EHPkd6TLLE4UWoD2cLe4f85ctehLzDgATrCMmI0sC5A/6Xw 3DI6kisQiSTglDZBNML/iuI04LYQwECMoclA4QE5Uf81ANWAe8A1AI1xMiE15DTx/y8hOXHfQTcC 4KMy4dlBi8L/4QDYUdlB33Hc0TlBkZbWwn/d8W3x2jGxABuQ4NHdQCH/5YGQ4dgxKTCKQdbRLyHV gP+O4t4hagI/VZXaP8jjlj2H/01zTWPlR5l7PjPl00Mh5xb/6dOb5OnEQtPpUs4hJJHrQ39FYuqE ROLP8EV0SQHOIFo/RgVHIOyWNQB18e1k1r3/7bHtsUhxSHS8sCSBSbFJIf9JJOrR7yLvmksT8QHw 0sOw//DVTAk9hPK18jFLEKgCIAH/qHTzsakCTiGpRfW4+DxONP/1VQCjrIIU8Kzk86H5o6+3/wPk 91iyNFYXA/78WAI0Adb/AZQBlfnJAEH5KPbJ/XlYI//707a0ZSFSCFrmYilX9V/k/1kl9gi1KQcV +1W4l/sLC8n/ZVRlgma/wK/0ZPQFbxFqY//hcsNEEDEuwg/hNHHcsDQx/8SSD+HEE2wRbBHToS1D bhX/chJuNNoTBNDVQeFyF+AsQ/9qE22U0lHJohRhFzIRcx2Q/xFV4hBsEdSRbWLJg8jiFGL7TvFs MVIdIc9UdUHMpPLQ/+ZQG7BwAdHAJJAbsGwQHsD/G7DSUfYAKCAvwdJj8/Dbcf9t4XPgJOPS4WuB zfLOw9Gx/yNRD3ER4REka+F2YRORa4H/FFIn4RtggpHUJM6BzoHPEf9sEWRA3VAbICHQ0aDqMSZh /yYBGyDWkXUR0VES4NfScAH/0VF3IQTQdHA6QIKRIdDrAP/wYelBN6FBwSiilFAjYRix/xtwD0EQ M28CEDHegA8zxxP/wrLMgpKhTUDb420xEDEPQf9xsiexiKHe4ywhlVFt8ZOg//HAG+EjkdBx4SPQ Ysmyj3H/4iKPUoihiuGTIYojL7GKQf+OATshNqFFwAbwLzCMgYoR/zUkMuP0ADdxiQOKQ5Dy5ib9 jBG9kNEx8eaEMBD4IDUz/zlxiVHmVTLDjjHmI+hTNND/jRTkoS7zG5A7MTTROwFdgL+ToTcBbfHi kzDCMBEhFAH/FbGSYsez1PQ+Y+/kDcGWc/8JMfBnlgmYlz73mV89BJsh/5ry9TKdU0E4nApB0psg FTD7RShFNRCfIZ8g+OJFg5/U/UeAvaFQd/FGgvqSoTJHcJ9GQEexoeFIQUex9+d8oP15UHsbMEki ovIiIBHxH3H/JvElMKQhRFEf0HFwSmDW4f/+saYD/bGlwaYin7GmM3Gg/2jBpnCn40vyASOoyU7h Alj/U6EGkankA+IJRQaAPNMN4v8lQMzxrFZP0KzxrJSttVDF/wurZehRhWY4UXZWdVjJYnH/DFKy 9QwVsfgOEq60YUhQpf9hmVghNaBh1rnlXbRfOBCn/1AYBIViYluHrdlQxxY1FDT/CYZkSQjbq1M8 0k/QZ5NAsf9jxgUiZvU+g2gZ4JPgIm8g/eF0CCbxJZDPECIg1qDM0f/VFNLSyhLOEnJybyBrIiBT /++x3YSH023iOLFqYmpDOFH/z9IvAduz4jEsUSxRydNq4v/FgSRka4HGpcLGyOPcUVOg//ehcHBr tMpiHnF0wdiCPYD/d2DXgYcTa6BC0NEizXHicv9PIHTBHnF1UCrEKUGHcM8A/6MRQtA3AO2RhzFL MELQgpH/0GHGQdNkcYHWYcKQalGIIv/JooZihtAq0XTAL3Q44B4h/88ydXHGQXIRy+ZvAc9icVH/ cVHRsXOR0VHZMSFkIuVdgf83cV0hj/BrIXww28FEEHTx/5yxOnEk0WpBXYC7cJTiiJH/4IGHcSuw aTIigpVjNmFtNP9tMjSRaeNrUrpAkiGOYLrA/yGh7kJA4IkBNtQixC5h1MF70EFvsCkiwX/QjCLj k2v/1ACUMeTRiYHjIurij0A2Qf+O0YmQizHT4ZBEj4GNQYpx/zyQ0vDtUZWR5XHlcuRilGL/PfOJ geoSlKLpcuwilHI8Uf/tYNvhkCPl8ZCjlFM98+vz/5IU5wbFAJEy3oE6A1nAjlHrxaC6QBBwcBBL EEjBy1L/1zIeUJhjTwHvsUm0Sqrwqf/xv00pmmeak03F9VOWw0/Dv5sjUDOc4/eRnNFnwGOeJff4 Yfkj+OApUoNSdZ8QnpD3qZD6A34hpaCR+pGgkaEj3qWhgvvx/KD7se/8gFZB/1RhoGCRIHNQnxCf oP3wo2H/owGi4aNAo7GjMaTR/qKlc//9saTR/5Vy0NdA/+Kl+KVB/wG1p8Ko9Kj1wiQCeAK8wcT/ ZtPCcqjSqXWz0ayEYFIPxv+ukmVTZjcaZBppGHUaY79i/2Yyu2YNEWXDs2SyqbOxB+X/ufILYrWa tfdpDRXHB7Vn9P9rtmjXYGS6rRPkaT8Ukq4Z/wpFvawOlHB4GwHB9ME3GVb/GXYb1cIYdBQus7hQ SBLigf/C0TjBx1HRQydCMgIwwrpA/9UUxkHS0cji3BLO0JgBxuP/LNLfEDTjJIEfE3fhzOEiwf96 gc2hlWLDYiHxyCPEgjP0/5NEOKQ3YCSBwtGHwckxNlL/ydd31tKRfHF5oiFk0MR9RP9IMUgxO9LR ASjBKkMqMbPw/+jhDRAsUCwUKpApwSmSKpH/hPJ708tRy1HKAc+jKNLQkv/g8A7g5bDKQZsgJAIv giQk/8by0tEvctvj0MLIwtUx1xD/l8B4YjVQMAEo4ozj7pSTcf9+MYBE7UN9MsXh1FI39uy0/0Mi 3cHhIiGyjcN9wuCzxLLvHLF9ETjRNmF75RDJQiQT/nNWwLLQRbHqMODwlCFIAf/iMsTR7hExATSR R4M58UYk6+NQ46I5OgKMPJEdQeOx/0JjlBFCs4CBNqDT4eQTQ9L/RlJGM+lR7FLjYzzymjbpgf+W AuVwQRFFAz4D6cPlZDrij+ojP8Lks+TRe7XOlLT/4dTsURDAlBHsQpIS1MGXAf93IzyQyrDOkClx KUEwADJh/8txSLKpkFvSXcOnoUplqZP/pPXwRfXC8PEZo6Y0TGPzpf9Kgqgi8iNP008DqSNP1E+l /wDxT+ZOsv5R+IFZcfl0UrWv1sBTRQBgU6NCVHCt/KD+vfpA+oP7A1Uh/LBUIPpgOVXjve/8IFZC VbCUhP5z+kDs0M8wVzFXNFdj1tH/zyH9gliC/gBZcv6WW1FbUf8AMlqmAJEBh00XXlO2NVx9/1vk c1kb46aTvOJd1QYjBhP/YSa7FgkSRVAJGL9yGPPaoP+/k79UYhPIcDRhZMMOpwz5/wth5kDAdBLb GaELZg8ZDwf/cgZrCRKlw7wTNsbLutS7yP8LZGs7cFZxYgq3CBQWiwf2/78TdD1jIwT2ztTNJ7u2 veL5K7BKEHjRLyHWcITyI+L/H0ExEYDxXAArYRngJVAyY//Yg/lQHfBgMCcBJ/LfESdx7ydBSKH9 8NUxCP3w07HZwP//QYyQMEF8kiWh1DF9AGxg/yVRLiEcsX2jL2EjMjmQMIH/f0Le1DlACSDZNNgV JjI2Af+i8IexJFPfERjwKsQ34nex/yTRI+E740gx7jHiweLB3aP/R5F3YjtxN+IzEYTTKjIqQv+E tPdQNbGHEyixKUJ4QdPB/00QMeEvc33BNZOVUenxLmP/JtIukySVd4N+8zMiHmGBBf989ZUy3RTp UUX0QCOgEdhSfzkxJYK84ewxRpFD8pqkpf8+EeiygCGgY4ixQCE2ASHB/48U2zEj0oLyJpJ9Edsx KdH/OiHeAZ8ylYGJIR/xJBONwv96ITghQ8KgEd5RRDI8wT4R/93S8BZGsaCxDuBCgJlyQfH/nRSY kkNQ3lGXcjnxQCM78v/bMYLhPDHohERDCSA2oJmS/0UQQOFAgT0hQOFA4UOxP2P/Q9A4sdzyRDHv Mh1y3SMrsPpS0OBSNsE6gfq0I6IzEJ+UstFRKtHRUEEQcwgwUP4ISKH9A0mCTtIC8qRDpGX/pHP/ JKTKSpJLlV8ipttOxP+qoQJkqSFNFbWVtaUCNlwB/y2As4BSgVOwrEStNQWSrGX3BzJToVcQKVQE VDFVYFSyf66RVGGvVlXQsCBWFK+BjH2ws3ssUFcgCzFTklIgMf+xlFdhWCGyMrKSSRBYMljU/1ih WWFZMrRkW1W1MiVwtTP/tSBboYdQHmAQdFuF/iG1kv9OJ0sjpRpdSF/CYDPCAxkBf8WDwzcXp8V0 vZO9hL2BjP+GIGI2vaPMlM+UYGPGtW8L/xoXckNo2mjZHVtv9G4VHUv/bOVoo23VYGRwJWkZxRUi V/8bxR50cBLLRyGGy/NhMs2q/yXEdhgmlxiDdDslpHLEvZH/LEJRYIQx3sFgcC9idXDtsf+PYY7R MRHUkf1w1OAyoTdg/y1BedCGseIA1iEyQdZROZD/1kFR4FhwLtGs8FLQVwAvB//VwdOB0dLTY3fR eGDRAIvw/3s0N4I5c3syR1FsYDThebH+CLLw0+E5kTYClkH09vn0/zkBYiDrQbfghcCDEitSoBL/ 9dOFQdlwhTI90T3RhCLcgf84koLBlzLdkoVT3fGREIpB/4OzNTaOpH0B03J4MXgxMRL/gjDX0e9B 7TONs+Ly0fF3kv81wjIT5qLfMzcRjWKIwaAA/zXBiLGCtJMB6LHuVvFxRtD/3VLodZMBj6Ln0Y4D 5/T4ov+dlptxmuGX4pZygJJ9EYZx/3azoZX5YtdR05HQ85mQOUL/7oJAg98hRqSahJwCQ+KWUf+d 1fEiPVOXse5R9LNKsvLR+5nBm0O9oOGYQpuB8HHn0b/hEfYS7bL6UquhYDAYj1Gf7mOiMHTwQIGU YGutTYD/lGD34viBnWOg4k2hrrCfYX9L4vnT+fGiMaIx3mLfMxj/05HSoe2hONZUgd5i0kGFMeqU luCcnUCcocHdkT9B/3rA4sF94aZjpZSkTf8EACf/Wldfc6cCzwWmNQH0AKK21v8DGLWGAxIFM6wU 1eCslAcn/62DrFRg4gth1XAIkAlACZDfsNGvIa7yCJAJkKWvga+F/7AhsCMIoKAAsLCuMK8h6QD9 saIxsuNlgQvoB9Gx9S0B/wz1DfFn8gvwq+Czgg8QtTH/D2i1RRB2tUEQYhE0tzd1mv8TdKUHugEN 4ABxGZHMIm5m/8MjyRTK+BbEzLQXhShFGST/w9YqJnA2v1iL0AACx3LI1L8VJ3XmxoUiRRUCiNBr luD/gFG7aSKqw5XJprrEdwnBE/95h8K5HfjJEyNnJXy7RRjn/7xIgT8qJXILeHod4fmBRpD/K+BW 8cNARCHjkYnxh1EPEP8tYLbg1DHTcC4j0sKyUA3g/9EAh5Is4avgLQGMsc5wLAH/ovHQsLLQiLOI 0rERL0G1IP+JNEfE/SDiQtMh1cbSsU9g/7Gh1dHVcQfA2VAyUUeBT2Hf4kIwgzoxqUA5wCGLsS3x /1PR29Hh0S1gKrE2IcNAllH/3EL7oaJh3jPucZSiUDOWIfveIvSxa66AOSU6Id9iofL/OnOfIZHy n/TuItRR4sIw0//cA9vxojGhclWA58NTUuczv9zT9kHWkkwCRYGY83uPAf84ZdJB3JJTUfnhVfEA oNFQ/zehUMDzsUJCQBJEcp7BlSL/RAWgklKSRwNEUurCUWP5lf/to+bRSRLlMUhgUMFI4TlS/5Vz 4EI5ZpJk3yFUgO5ESrH/TqJEZPKh6jFOslFjPXLu8v/7kUJBRRKmRDlQN5FL0OUx/05kN4JK4vSE 7fDTQexiMyH/+lE0QfSyNsCPACrQkVdG4/9ScVGxUMGoUacxlBQ/4peBv1KAOGHxUNsg5iGcAzEr 4G+TslXj3pFTwRDiAc5wCP/TAK3zlGQhcIVQ9sCVIb6g/0hhMqBX5LHnbjLZUG1M00D//lO3xFpa WrpcmLHBWvZd6t8RkxCR4hBfogbYCNVgX8I/L2BfwwswYGUHZQswKZz3VnAJIgrgrbwACMO8JWOB t2TRCbIKI3NIQGUQe2PA/wlyDUBlgGZkZgFl02XxDUP/wHJlgMByMHDWYf2giCFl0v9ogWhTDYBo lMMi0pAOwwVR/8NBxAPTIMSnBEMTZMWH/gL/ElS2wxM1I8QaBx03FSYlaP8oRnbBz4SDh2/VI5QU 9CTo/x/kFBF60c50Gz8cqBqk0OX/b6YWs3JUzOV1ZhUhO9DZcP/OqBrk1Ol8hBofHubWBym1/yVE cfgpQSYTJ4onhxkWyjz/KXgjuSFhG/BTwD0BhNLgcf+FQivghaGGYSyRhpFYIOQh/7HQV2FGgZAB r7AtUS7RLeH/h1Je0IYyNjAqsd9BVyKF4f3jFGuWcVTQV2I2QZtTV2DXT6D9cg5ASo0gMY0hL5L/ BWCM8AswDUDm8gOwhdEAAP8t0C1g5dGGMaIhT9AbIThRvzixWGA1ElQRCyCNwUr9cP8tYK+gsCCN wS5QVaRVcE6h//vC7oOrEnvA8IH1MrDD/CX/N6X8EFbBm/OfEffQlsGPof+qoRUgoiH1cKnx6VHr Y7Fh/2IQUMBCEZ6DS5NFsz/QNFL/OdLrcTcUQiTrQkhgRSD4YffvgZaiVdEYhkFWcFZkN6H/8RBS kUdSOGFHBJUEUtGYYv+iYq2xPcCQkfvirVI30qsB/0WRNLDp8Kkw6URWQj/QkJH/nDFW0e1gkUE1 8fmxU8Hrcf8546sSVsFHAkCBUiGsIjgh//YRRFFN4E3RnzGSoqRS/yT/pwJKoKixlQJHEaESRXD0 I/9I4qFCUjJKwUPSPhDvw/oC/52iTUKk4DnBrsOvoVPBjwH/+wGugP1hn0A2waQTNQU4Qe+uMe1j qsFWkWO8gFaQUjD/VqDxQlbS7CKQgekC43KvYPuQMSvgEI3BVMFXMVcyRmD/uLFpxBIBsrMfowzI bjNYlv8UQl7xDqNaOlo0EgTHJrco/7cDXnRfAizAYaBg0WAUYBjvYFW6mmGDZlGMK4C9wGJQv2Lw vMNOAGKgvDFjVN5jgO7evfBkEmPwUugwZHFj8P61Y4HggC4wZWLAFWYoZgL/ZYNlcr8xwVHncGdS h3CH4P8cZ8LBjCEdU8OjxFMeRMSl/2ohafNrNB/0bgFrZGyzxtb/srTIQ8m1yNp85NgzcxfJvP93 KXBWJrZ/Od40yHnUwXrA/89GyxBvhG8q1nZ1pXN1LGX/eBF3hNPydbTUlCmD1OUvVP/PWdThyFN6 3CU8cnXKpcul/8tYM0rK1YPbce8iFSiF45H/VvHfEgnj3jA+UTnChpGPkP+WoOAT5dDFYefShpFY cJAQ/4ixXtCGkYnxiNGiI6KircH/+MD4IVYhrtFbMDjyVxOQM7/pAVdRkCHk4enx6KEI5wH/ijBH 8IpwQKGKMI0hhgGF0f+GMY0hiiHk4ZAh6fBe0ITz71XRjwGQUUPCezz0rbFVAf+0cK7CC0M/IlGh 9hKRQetz/7CCsGIJ4q6hR6KRQgdDSET/oQOVIpFBjqGPwZaBoiGVwf9Twewy6RE+Au1CnXLsEpTz /+wT8XEJREYE63L7QwiB9ZHbS3L1oyHj0VZwKeLh34D+GDpx6OI4okXUTnMBggdk/63x+DE9kfsC qAP3FKuCnkLfo/L5sZyxRgT4wVrxIAZA/wdRp4EKIppBlxGXEenBrZL/k8E54VFTBeFVkfjzVMGh Uv/4wAEiBkMEIv+BlKSew6YB/z3hWFHt0q3w3tAIAU5TVWD/BIGocvJh+eSX1Fmy7xJbUv8IsgiS 9JCw0/jB+MFaEuzR/5IUlmDq4Y/x3xNDIt6xpqD/+yFYUVu16xHrET7k8UHrcf+w9U6yC0Gw4grC 6vEccQv2/2pCIGNuMbMysrazASHXDiT/HzMgcWtSs/W0Bg66tLMSBf+vsGuiwvETZbpkumW5um53 r7oQjPAVobpQGEQwe7xxv78BvPEWxBYxF1S9s8YXseu+EYhgKRbwlL7RvtFEwP8OoBmTGnFz0xWV GlO5Ubsx/3UCdOIUYMBU4fF2Mxwi4gH/jCHCYcLC5dCNAMLid+HDsf+NAHiSw7EfkWZyw/LFId7Q /3oCZmN6xiDms1Fnht1KzqP/IROzIrMz2rbdF8nJzmE3lP/P5if2gY7X4s4xLscpUoMx/4QjyMfI Zsl50gUtAiYkhxr/00FnA86xg0SI5cidMKIucv/O6dg03IbYtozVy2oz19u3/9oD3bY2JyfmgUuF FuOR6lH3PuTjkPphY9pAl2CuMTnh/99R6RHkYUGROnA6wTrB4MH/4nFBgeKhlkLewhLAsENPwv9E kj2CroALQj3EPxI+A+OR/96xpeDuAa0hqNE5MkMw2ND/QoOjQOHQQvBlgBLwm8NAYfebgd9xm7EA vzE+9a3gkvP/AoCu0eOz6RDesa3B8UEKkf8KYUgU8UE+gewzmHKw8Qsj/5tAlWCv0bCRCmGiREez PYH/TFKXAukT5ITqgZNBX4JDQf/f4WJirJL2hEbyraME8fU0v630PiL1o/WRT5EIIUoIMf0WcFoI Yk5hqbKX8gs0PvP9UjRSVXNLQaVCZHNPkV/i/1tD+8JHAkvCWhZgwFwCn2L/V3E9kazE+DPtQlvx ohRIEf+ngVAhl2H7BAiBVZFPYvrj/jEJgfZgT5BS5f+CS+IAwf/vU/fgp4H1kUtBVfILYVeD/1yB /jEEYfJhVEHvkfaxWMT/BbGro2VAQ6BPYApQRAJXYv/uQvEhUVO4MlCT6lFC0Opw++Wwm7EIm8Gh 8vAQ5GFHA/+Z00ZSk0H1YDpQ6RD1YbvB7wqRY9K+qQmhCHWwbQF1QP/C4eGga2MfNGame/LP4g0Z /w1jDeIN9mlkeYNpI2poazf/a2J6QWzJbUBuVG5Vb1HHqX8Usm8pYgEXIHFyFnAWsZTbypFxwKVx sReH5xhQF7Hd6DAxcqEY0XHAnHNA6GD/GzAcIHZBeiB2MBpwGnIVpP8UsXWkdOMa0nVBG3YbMBsR 73ajHMF0MNCxOdGCd2IdpP8dpnnSeVN5c3n0eZN6oiC0/9VDEIHaU3x4IfJ6g9dCHBD/EFF91Y1H JKgxQyO0fYQn2P+EhyXWiYR9U4NC3SSD4y8R/4alLUQmIiY0LVaHH4cIJfX/2gQoq4muLdE4J4Dr jtjadP+OuCSkNtbnC5ClkLiNlTJU/y0ShycjxDGjYxFHgZl0o8P9ONF7nKEhgJWiA0A/wD8h/zqj lGKaET4xOnA8FDphpFH/mmRFoj4BSyWrATxg7/Gw8P+h4aKnmFSm8vETvmdEh5nV/2PimfI/cWEx QDFAAZuy8sH/PLBhxJNAnqFD4z8jvmKhM/89wkMTQAE/oUPECsGiQGDw/0Lwn0g60bDxP+Hv8fOG 89P/BgFGIZeymOSe4aJCmGOiRP9FpEeBCRFHUwpS/cdHIWQx//TCTrG94ZOAl2FXcbmCTxH/pPRF 4WI0A3M9xK9iqLNVYf+pAFRgqgGogwY0rDRVYV+0/6MyRhOv8j3ToSJXglGSueP/uCKx0wRyVZOg sD2hYdE/4fdJoRYQvaEIQEE8IQVTWDL//dKhQZ7Q/CKrAQ/ArWSvpH9GQaUjDJRIEWNDOZFGIGv/ JJBUUaAUTiMLc1KyqfRJMv+wY74BrzOvswHxCgO5g0sCv1aEpID7EFJAu8Ge4QBBAN9DkaJBTYVk cVISY74BokLfGBFAEfLBnvNiIQBuBW5A/7/wGkF40XnBwHXAshtTa2H/w4J78hwhN/WP8nv0w2nE c//RkMD0aThmEXihbQIaUcdC325Av7BuUW5SIXIYIcMhtH9vYm/Rb9EhMCMyb9FC4FL1ykClzFC1 cPFwynGxcbVXy/BxsWXQKXBwnHGBnPqMVFCEe5B24M2RJ5Z2Y/+cUXPQydEo4s7HdSPGoXVz/9GQ dtB0sXXyKrF20NDRK7T/d1J3wHogPADTEiz001F49f958Xn11PPVFNUT1TLoYS9C/2jx1zN4oNSi 0ZAws9dm1dH/fkJ9ZY1mhabhcdk0fVR9gv83R4nzizQ4Un3x+FDdWINl/9wlh9WG8oWyONbhmOGl hIj/Owg8P9tkkDaIE4Dn5QiNWN9+kUB055yOpX6QY+YZgVf/NSeIE4XJ4iQ62OIFUGJhsv+qsZ6E i9CGEPkhSBPuMkim/++B7vHvge7E7pHtoWFi9QH//Iv+cpiDntL4tPLk8uQBtP/75LWSqmP8pEv1 ZEC+AUy1f0yTU1BUYe0AlrP6lBjCWv+8Evmk/rS7AaMA/zFSExjT/53ynyJicaCBnzJkYmJjvpT/ ozCfMgkFY7RVmUrUVSJWJv/0w0bRmiFW8qJBnxSd8xVT/6JS/MKn4gTBVrEFsqm2TAX/D7KvY2Ki mFSvBaiDC9GsMv8G1ahmufFw0JfyXjYDNJ9y//wmE7Sr1KnDYXGyUK9zBmT/YVQKI1byqfGvBLjA 01CXc/+ykfMSXjWyIqnyulG6IWRj/6vSSrUMUhbht6GjkeyxU0L/+AGm0WZ0BMCzUaVDCAELkr/x kgvizUBwgGkxBmQxAfH/uiCXYa9hs1EIQ6CCWjK6tf/ycapxn5GXgxMDAYX30p5y/6DEo/EZsRoR GeQZ6sARKbD/0yDA49OUxPUeE8NEHaTWNr/DPS8CHvIuktNSIHA5IHT/IKTHMiFFI2Ah1slEIfYj Nc8iEMAgIBDKcKXGynDKMP+zYMrQfjLKQCWEzEAl0swR735gt/DN8H7zpc0xJkHNQP8kACej8DCB tCeEKFMtwCrx/862ztIpR88RKsSDRNAz0RX/hkQWwNJhhvLSQt3g0wLTE//ENCARiLIecy7mHoPU AjEe/9cqNjIy4+vyjkPWZozHNEL/4XEyopHWO9rg59zxkPI3k//dgzfT9PDsVORx38mS++Gt/0XI lbrcFuO65ZeNZ5jbMxX/QBK9sORgmpPoZkH1mrKcQv/fIepn7Bjr9DPFniTh6OFn/41S7RLtI1Oi +JO3QOeQR+P/7gFH0e4BosRRMaIyr9DZQP+0YO8x9QGqYnLiUlFTcvgw//91TkSqk/f09PJSw/ji XFL/82LxNaqTTFRcF1gk+LSnef/1ovTzSvJHRFSUb/QAlFUh/1PRp0NK8q4E/3FUB/60cvj/+JNf FP9FFpCkRKNSWnO+Af8EtLWT8wFnoL2zWjT0BLvx//Txp9T45FahXiQDBG8xUBL/XdNidQGWAbK4 YwNi+5EKwq9iYW9SYPMLkiH60WP3sP9hAwZiXIO6xG3hC9BxkmP0/2dTX2EC9RPjTiBgEgYiqDH/ AGBX48BEvCO5RWxCuZVeVP/BgxSSbhFksQb1blFOEfPg32aSCyFaQl5yCrcYFaHz4PvGAQPxAPdA DJEAMRd1uGT/XIINEmVHbqJwka5xDrEVEv8IMriECfIKYl/wDuO7UctE33FxVYQBtAdSDxAAIaIh Id975CFQdITO6SByIdHR0XH7h4KIJUJRsO/gLxUeQhxG/9JLeOTyQPAQIQAqINQgz5T/ewXU5SG1 e8Ijg9ZfIzKC4f8kwSRhfjF+wSUwJsIlWyRh3q1aUCvQfpEnAbUnACZB/ycx2nGBmvdAJ+WChysR KOX/dTCD0oU2hPeEZoXBguGC4f8rod2RK9EWcOCyhjEswiAQ/y5xiERRsC1wLTYucC4yLhb/9nCK ZYpyMRIfgov0MiA0tv82IzbRNMeZ00KVnQc77EYl/znTPkNaUDYSN9Q8UpG2mVX/k8SOhIzUP2d4 AZ52NWaZGf94Au6T7oQ8Y/F17oPudfHm/zLE81JCY5wi9F30JvXyFpD/mtLvSjxijvQy5EKmlRY0 pf8yEp6zk/FHQlFxTJNUlKMh7zkQVmAScaHga1zhotaixP/8A/vECbAEwnfARyKm0hkg/1AzvjCm 4XL1qNL7AS5AqWH/R1NTca+yW/CnFK3TsMWpIf9TcbYUsKdHdE10poRKpKuU/xkhtYRtsbWEVPOq A0wDGAH/SqdU8TIgUtL+cQgzoWWlM2+hZF3jY3EyQCFrURhAAP+GQQnDFxLIUbRzVtdG4xVS/1EC oqP+cQ9UpxRW1FWEzMH/VYRZollWyrJpQVg3YlRtM/9iQmMRqNGzgxHyYWDNUhVj/8CUv3NokV1S FbJscWBxVTD/VbJWURejXTRo0Lw1viHGwf4QgYFtY2HhYGPIYmHhy9T/xgAgME8BqoFhA8hEbtC1 oP/IUsgyw2JgdWR1vBMbQrwU/7qTFjNis0cSb0MUlBSUY8T/aHEgMWhxbhNgUmihudRo0f8ht8RR xLG6AiN1YFPJ070Cv3EicTJzg9XgziF1AADO0P/Vw3RkfKHVhHPVKfN6lXqh/4QQ0EItxHWV0eaH QNH3MpH9L2FjdQEqtXpW1HzVtdaI/31VKGHfsN4T3ZF/MH5SfyH/fsJ+oNlX2hF/4DPQgCDAENdE 8ICD2uBrgTCtf7HZAP9EwIIJNffbwTX5N5KF0YMT/95ShYSExoMwgyM484Wi4DP/hjHgkoZChuI7 gYfh0HM8Nf+IET0C4iSKAz3DinOJc+YC//Nh5hSMQT/ijCOMQ+bF55r/joHtZUS1RYbqSFpQlVPp d//rLZcplQLoV/CUmceZZJyT/+gV+KaX1fCVjvXxG/DGd/L/+KSeo5vNTnX0IZqxP1MGoP+JIPig d8DRUFAx9gH0IUpm/+jV52M/Qnd0LYHxUvgn7Rj/Z6CvkPriZzADgbHyyFG/4ff74aJyooJzYWEP NFrRV2b//AGjJIqgcuWmhAOBcOB6MP/cgAxRCnN2cPrCVTBUwf8Q/16wA6IA4QCz+wL/wqFQA4H/ cvRb1F1S/xCvUf8BslIKI/+ys7ABBbKhE6eUa5FVMLuQ/7VTp5Wv5KcUqPSsI/s1AXT/CkGgtMch pxehonJzJ4Engd/64SeBWZNVMgpxEMcAXkP/AZPzYFTkC/BnkMcAWfB6YOfigGlQaUE5CIMBr5D4 sP+isgyyVwJwcXNycRFwIa5h+3BRcCFrwxEgoSUhYbNyNP8D5RCzuXS4JCJEDdG+txQ3/6iRt5Fi whKSwsCrQ8SDtsL3JjO5McUyY8NAupW/Ix9x/x3zFUMjdNhAFVS/oXRjrxD/GnMldHcEHTDIMrtR H3Ehgf+/QcTiyLLAghqSIuK28riB/xW0vuTJAR1ituG9o70CeMP3vQG9ASCRCK+QxUS0Acoh/xE0 zJQgMiXkHLQNscQAFPXvvCPLEc2D1hQQKEHOFChA/c4zCM5jg0QogyimhHfUZf/P8ytiK9TlgomB LZLToi3h/9QR1BIusYgkLrfVc9YhgkVfMVPWtjFiMXffcCnZAJz9MmC1MpHasdj0M4PZoDVA39nh 2eG8gNuC2rNr2hE0IP/ZQcQQ3GY1mo/G3QTcpd1h/91l32HeQ+AS4oDfs96zOif/4NI38JUR4FiV 5TwilpQ9U//i4eKBl0IsEeUw4oPRYeYC/9IDTPI/5ecTK9BAZvf89dP/7VJJE5/nRpXrttLhtaDr yf/sFewgRnea1JlU55TwnUr0/0iH8JJHdvez54P5dksn7Hf/88RKBfjip1RO1O1RTnjzxN9TAlJS B5BQQK+Qa7RAAAD+a/XxP0Gs0E3QqXPloeKi/4Yy4vI9wuKBqXVNRvhG9fL/05ADQF0x+4EDMWuh xzBqQf+u4a7h+LD2UBPg/JFWMa9B//iwViKvQeOA4tABIV0BXQH/ASEGkQeBBjJqwlhx+gD60v+y pOVgZnFaogTQBwEAdVXR/wSktUH/AV0jBYIMUQCy/xP//zQBRGHTXIIEpLckYmQCM/+1w71AX8QU YOVwuCInEiDz/mtowVSxB3INU/t0CzRk1//+0wTAXrF+MWwBsWERcVgj/wzhwOP8Jb/0v8NKIGwB E7H3wtQLQbIjIS2A1/Bpotuw1wwQ82CusYzYgGvJQMUwFYxBzjUg59kQ1oy9tr3FkTPQ78aBNSDe xuHtxiFjFxHLIGPK8g3yBTH/EcIH5BMjBiESJL80YpNtkv/JgnpBWUP64lwTIMIR0yGD3ycSGaFz dBi0JaQ5DeE0QP/OwRZxH3R/1R5jdPEcdH9093WxH6Ee4VLN4XOxEdMeVN8dYx5BddMmRhqWlH0x IhT/IkLQJhlzeKJvghLA1DUiI88IkLzgXQAaAFIIUGDYsf8FMg2BgHPZpByiJVMfoSGC/ydhDtGB kSfBgcbb5YMS3Mm/3aYvlSjmiWEu1i6ROYvg9WlwGCsxUisQDBDjgCsQ/70QahDf0YfmLpQulSn0 L8P/MHKB5DEXMOGLoZPhNgE3g/eSYowyjPDOMpCOoDLoNCD1M6LeM/LOu1AGoDtQNXD+hObBjwKN kTUQWdA2FDW1/zbqNuyQd5IjafE4Y5PhkiH/OMWUsu417tc3szrylfCSIf824PBoPWCXJPGDrEGX o6z1/y2CqYKaMSyDP5ZEyktVSbP/SRScVkUXUpSgNZ5in2RGIv+gYUWloEXzZfQ3R+at1EGm/0gq TEuhREF5o3etxEl1TyH/m6hOqU2kAINPcz9CpnlBge+q4qo0IlAYkIRycD2CK5J/K3M7sTwS8RRQ YanRTuJrv6hAB3CrIashrlPE8IxzAP9gAXFBsuF9QWuh2DA8AD1g/1TAheCXQQkCTdBxgF0BUGD/ CmGqQAnCCmErII/Au7F9of9cQVBgDHMsUKrAsARqEZhA/7QSWrO00q9xs/BigGABvlH/WOQPg10k vwIYkM1CbeK1kv9fA2ByXkA24L9zu0S8M8qS/2cUVUO4lLgEYcIS1FxnYUH/W9G1E2BDtSNUtGUE t4JcQv+ykg4hr0LYMMSgEsUOVGiQ/1+xbBKdIHJwDyMPQb/BawHrsVTFkZTFEIyMsLFRr6F/r3Kv g09QViCxYWwABQClUNbv987F0M7GkMYhxdDe9//nIDbv/8b/ICGPIOd7pemAWFP/r6G04hl0arNY c1XyDlRWYf9XISRCbMDHcVgRYUGwwiSx/yWjwIHLMcCBySHH0tFEfsH/f7PT1HTDf2LQ1M+DeBHU sv/V53TCdBLPcnxBz4TaMtET/ynoKHMo9tA2f+N1tHJSjkD/cETSs9PF09MuJnNQdVTTqd1wZRhh 49bRfTEADCFz4//UZHxB2IFeQdixaJGBs4Ix/zYh3GLktNzdgtaLYYPmg0L/hQWJYN/x4FLgYYQg 4aDhkv/f8ogUO1Y5lIg04yXcFYIl/z3lghGLoeSx6sGOQHgAHxH3BMFvYI0AlIyRjGAdkI0Af+cw jRCMkI1UjwGN4efgxq280FrqsY5Ae4yQpY3g/+ki6TFbgOqxj+pET5CZkdH/lVRp8UbC7hFHNu3l lCaT4P9IB0bRlSFJs++B79KSAZah/5ZwSvHxIEt28fiHUUzChzP/hyP0B5nXmpWZ5JuWAAX0qv9P OPkC+CSkgZ7jUnP55J4C/5kE8/GlyqTSVJOa6Pdi/df/Z4D9x6LV+w7/xPYDABcH8/8ABVrYAIKc ElBVqbFNNIdh/5hFcVDxhPEgsfAHcBuxS4G/lvCsEJZy8FFqIcwAaxZw/3egP4EbsATBroGqAmGm b2D/jlAd8cwxGCAG4Abw2DALgf9jEZmAfbAYIenwCmK9MTVh/8RR75EGwI+x7aHg8JLglcH/ZKNJ oeDwYBIJ1AjhCOEJQf8I5GoRsbOs8AjCGUDXEXKR/xATtgG05bxzciLAwxDEucT/s/OsAOmQGBDp 8L5SIrK1Qf+zw7MiIvQi9CREIvHAsb+T/8LmIwWqUG/kcBMkQmmDb6LfgKEy8KjAr/II4XPaQB1Q 3rUJQQQQGeKusXPQgHTgaqXFMKUlAKXAgHUwnJ6tsMB1MXUCQODGpcWgGY4A7+cg8Hchzu/vAcWR hK29hKW1e7N14HhApXt1UBuwrXgg/3bxIQAfcMXQdxAfcHnEIDAfINAgMHpSdzEgMMbW5/2NoN53 4B2gwkEeIg1SBiD/Z7OvUgRQ1ZEB8AzR4HCToH998xohxEGIIIgwloDEEQj/lQB/YX7RDNHgoOqA t2KXMF+u87jRb6IxcCUBayqwWvvHgSdTWtPhL8PSso5AyJL/LnQfQCp02pTalM4HgpHT1f8sYdPh KrPUBNBEMHYycs+C/8FQL1TWoSfU0NiJ9izjhnL7zsHRkK3UBIPjMnKDJMkl/89gM3HQ1tHjLGEu oSeBc0D/PfE2EzYj5RDkseOU5LQ2qP3kwwA1sN34OSA8cuHy4FL/5RA6KN/U4YPfZzzE4vbj1n+X ZT125LHlEZi0SJHm0JT+rTIAQDHm0MUAdoDmZUDR3+cDQzRDAUHh6BDGQ5HpkP0WYXPnUR+wQdHp IuhBRdD/xHBFWZ5fRTVGY+VhoFahBP+gc+XDxGBI4qJpSXPvNaFE/0biSjFKoqTkX1JLtkxmDGD/ TKOmwglA8yPzE05TTkr0Gf9a8fZy9fMHsfl1qub5clTT/72gUwZWI1ZC9Ef++COAqoL///dVcv0J T6P7B/xb/2n/s/9a8vwtABoBxgITswMHAfLw/7mwXV+3pkuS5fBesvBR2DD9voBzUoDwY70AC4G5 QQTS/zFwupEE4bqRdQC5YMvQ6FD/BKBe8V7xYlEMIQvhYxFZ4P8EgB3xaVEPIQthy9HwUemQ/5xh RxFH0qD2R9HutO+BBJD/GUDL0NgwBIHAkWOQZ9ELYf8EkMFhY9PxwNjxYvTCYwwR/wnTZ+F8JGe0 bkJqxCOBImL/CVEegH1R9XBywgrBCUEMEf8McQ3zGYEKsXNSfVEc8Wmi72gDDHHJc2exYxoiCSIe Yv9xhMdifcFlAWaB8vAEEMZi/31RfAMR0DUBSLFMAQ8gBKFv/7DB4c5CXtGldqB28Pf7d+F04LWa IOgweCB34XbA/tYdUM8AeWB28XlhIOEg4tcfcHtBH8D3z4DGpMAFQP9j0QSgeWB5UnuA6BDRASDB vyAweZHTZ9OSevN7UPfPsP7WeHF9UXvRdFEEQNZTatH/cTEK0TMh8vAMEde0CjHsgf/hIN9h3qE9 gJCB2UPlIdih/9iiSNDeYNpDSNA5INp15WH/f8NloIACx4JoshhV+UA0of8h4TFwL7SEoi+SKvM0 czNw/yNAJCA0YzSCK8WI04QRK2H/J6QvgieHJ7KH8oOxgpKFc5uEoYShKSHhhpNSrYwT/YomMSGx LkMuNC7BMNGK1//msyrD5LSEhiehJKE2EY/n/5KANhI2FTYyNmo9go+zN1T/OKWTcznyOvWVNZPB O0OTsP89kDkB79M5UpNhN4M6wD5X/z3DmFM2gT7zmRS7sHYwc0D+tYZg86HQIM+AmkSa8Jrx/0DB QSZDIZvTQiG9AEVBQ5H/QPH1g0Fy83AHILmguaBf8f9FCUZDoPOghfnUQ8SgOaAo/59yRdG/0kjE ov5Hw7+go0j/+1JLE1/UuFMFMl6CTDRd0v+nYrajp8OkwE0TqRVN1lOT/7R2qtpSgFDLUxMXgE6i VIL/q/ME9rJkVKNWprIXVjUJhv9YpwqfsdlX9bX0DYdbNbMy/7ZCtlMPhLaoTGWAUEwCy1D/EXFI sBGYX+G4Y2RBszDGIf9YADPhMvC5YD/hYME/40Kh/7rRP3ExcPNxQAG7gdKwGmD/YHG/0WNBvLG9 odZjYHBq0f/IASJBwpFk0KewuaBGAaHx/2RBGEOhEkmypCUz4WAxSiH/GJEasmRwwDHMIRsiZBFl Mf8Yc2bjZmJgIWMTvQAiQWQR/zPhwcHGsnLBcjJ89NdRdIH/dIF8ksthRgLYMmfB1sTXUf90UXvR czCBkGmBYpN0IcQB/2KzIMFn4tbDu+BrAb2zZwL/HbO8sWCQb5Ak0bowe9Jiwf+nsNjRwDFYAL0A YGBVwL0C884h0qG9ztNAevB4QM+RrNaMQyCbEOedIPeagP8pwHfA0eDQ4NOgexF64XpR/9GEdVD3 gECA0kG+Uc3xexF/02Qq8irTeWLUOirTe1Dv/3twKZB7sHhAgiDIkXNAczH/XxEiVruAJuIochhi ZlMYkf9I0DKimKHZwtmyMqK/gqOQ/0ghNFTYoUmhlcBmAmWyNba/fwR+cZVgfgBmgVywGGZQ/iFn oXRhc0EiwIlSxlHjAZ/h44VkjLeC9N2whDFqQf/XMd2R3ZPg4d/ycQHXMd4h/97i3pM74XRhiWM5 MotwgpL/iiaH14ep5wKIYYvA3jCGBP+GM4REQgXlEeijihUiwOmy/+qDRD/qbZhy8fGRNpLVk6H/ mRCVQZPBldFIJUjE74LwUv/wMpMSksPxM5dVRceRZPKB/9lQ2EFj0bGA1zC60Y6g0GD/8+LO4HaB ePD0YfVR9GDO4P+bAfVlm6XQ4M/AvBCfcYAy/2ihvQD3kfOgmiFxYFBAUED/vSFjoGPwnfH4IqGU oHL6Kf+eD590oDRSgviwn3HYUhnE/7/BV2P9MaOSZhEY8l/R/nL/WLj7QyehAAkAV6aytoGnUv9d gw+WttIDBqgCr2SqUqpg/2OgqqGrBQYDbDBfhgUUCTj/B/uxN7Irs1au9bIHs1qu1P9jOK9Gr2IN bAz1DxMPAQhw/w9SDza2pJ2wAoEApBGBuEX/pfH/8kzBJ8S78tKhdMEWQf/CAMgCFiAU0ZnRTjH0 cItw/7sxTVGCQRwBAJEdUBQRFlL//9Ed4yiCH/HBwcZRF4MyEf/BYcBxw0JMs3Mkv1cYxL+z/xKg udIToRixziEkgMlRn5H/GrP8MhjUdsP8MsNQvUD3sP+9s6ETAoAUYYIRMEPMQSNy/xZgw9J6IzPh vjHHMrnRHeT/vSIXwSSAJNHV4sYw1kHWQf/V5X0BzMJ91CKEFPBRcIwAn8+AmvAqgCjxL0HW79Cw +9NALCDOTfCAwPSwpMDLoJ/9QxZgukLSoTFQjHMVcL0mQb3RwCrBz3FuYM4poe+dIC3gK2HT0fcu E9EzK1Gz08GZwL2EmcAU8K2CgP/o4CXgpYDSsLqQ0PUq0S4B79QAh2QvQSpw3tMx1YD3MH/TMNBx KOCdQNMwgHHQYLXv1gEwkJmw9LBzmbCKMYox/38hJkExtBshGGQYkVeTjNj/NCS8gXdHvjIgJCOA yXTJQv8bocKRtTCQAL4gzpEjgd0y/8rhkXO8YZHzOrFDgTfg3UH/3jAmURVwxVHdgUOB6YA5gPfj YdWwlCFj6WOUUcVRlOH/lFPjQDlBleOUUTqxlUI5Qf+TcZZDOHCrADyiOVU6JDjU/5jY4bXn8uO0 4pTpUkGCOkP/5jboBOmE6qbqZupznn+fh/9F59jxMvFIsUpk8PLw0/DD/+z179GjdvEW6tSgtOqC 63J/8kLxARoBvFEVMVHAusKl/+HgbnDzxM/g9EUsIPbQ9PH/9VH1WImQ9eFwIMDhrEBRQP+okfVQ 5RBRcIsQUeEMcLwQ/pxRQKvwgmExUL0BwkD3wv/b8fjD+IVVBfkFrj37ixoz/xokVpL+41fK/lP+ crLlWMb/+2KtAbmRCHC0w7fF/yC1d/8BQ1wlXDZqksMB97Ai4F7l/wfxXsVh1QOSDBMId7nTA7P/ X4QD02TkDnELemTnZL1wAf++52JMaGa7MmmHwUQNRA8l9w83afYQp1rYgAERE6FyUP8a0Q5wclHF osYTdWIaRP/R/9iAFQBwIBYgx4GncFGBz4D/bnD0wubwqJP0sOUQE+ETg//dsG1xeiFrcXnyJgIX EctC/3gSFtJyYXI0cvcEgHEB0mH/dzJ3Fx0VdmUcQW/wHuBt0f8awRzndocZVCiDF5EDgTIC/460 JqN81H0CIBMjYnwjETD/GHHMQcwRzWMXcRdxeALc0P8xUX3UMGOK4ooxIrF91MgA/q0vofcgiKAq EIQzLwIq9P8usoUwLxGJoRSQOeAEgExg//2A/yCCIhQAhlA68G8gijHvgoGJcSkRipCtDiCUoMgA fSng/4ChTrDeJYWQqxC9v4lBiNEr0YWQKPBOsN6FsP61IWAegSagpzAutCtUh5PXLeAqEG8gpSLA nBSQbxH+pabB4oHfgS9BKsEvcS/Q/6dwL7B/sC+SMJF/IYqQixL/4iGrgF5BMaEBEY6g/9BX0v/m tjSxVyEy0XbnITEhABmQ/xdQEDAD4KuAAoAQQHXRkiH/6PX3sNsRFADqwZDwD1CCAd+nMOuBkYPr EurBMejyksD/q4CS0e0y6YEXUDdRgbHsod3qw3s3Ug0g7xQpFmA3tP/voJCw1OEWYPAx6yI7Ue3U /xdQ7KDEEJKCkjHtITsBkjL/ljGScjzROFElAZhTOEGUgX88wTjRlyM6ojhBPMGWlGOvf2Cb1JSB 9pFrQwAApjL/S7NFFZ46ndhEq/rEpaBKof9FYErDTDNK1KU1SrVMEUoz/6RR+7Kkxkt5RiRL8a+R F5H/FREVYU1xTXGnoaeiqBJN8P9OQG6hqVGokU7xqVhPxhUA/21xB5BRQAODUACpUIigT9D3T2BO wVFhrVEwT5ACgKrh/6ihbnAGID0wbVEooTIBVlH/rYNWFVRzCMRVK3SQUHSviP+vxRm1dMGBgViE srRZ0rQT/1mjWZ4PJrVFWyTEVLZEsjD/IPAhAOfTz7FpIWMjXmC4sv+5UV75E0S5F7u0FPjusBXk /2h2vMlkbsBVcAFk7MEWu/L/wjQa5WeBG4cbW2jmwza34P8eM81BdSHFQUyxC6FY4leT/1dTICKx kjWRxzBv8W5Bx6H/x4FucU8AbpBO0ciBbnCq0//fAIngpuGzkscw0iCscNJB/0zBe9GRAGuAclFx Aiyhq4D/OMDK847iclDogXFx1WNtIf9ysehy0IHQVNGjzCKLs3Fx/8wicYF18XMijCN1MnUTJLL/ e9ElUWcgKTTQhHFx1HEwkv9+09RxjxF9cTDDfQJ7wsrE/3pRXlDLFHyC1pHXUpQQcDH/1+E9MMfQ iuP3MTGCirDlke9/MclR5HCAQPfdEdm02eL/NCaAEYWw5aCnMOCRq4DjAf9AcOCQ3CF8gH2QhqDL Qdzk9X+w3n9QvTdzifA1c4ah99sB5bGnMJyH8YT1hNOFkO7W4EGyYNwhjIbQ2mWHYft/4U6w1jWR y9A2cDwyNqH/1zA2lDMxh6Hg4Ilx5DF/Uf+BAeQxyABRoH9jhYAGIEMA/+LwUTAHMSWxfSFv8XJB QNP/UnFApFhxdKSBkYGRR1C1sf+34NPBggHSQemzQ0HrUetR/15g90DdUeuRTTBENOzRu8D/3BCC gEUigoBhYJvATTBGof9Fg/FA29B44elB61Hq8qxw/ilegGrw6ZFHsUORSTN4QfvxwV5QIWbAR2FH YZAAj2H/tmBegGqQSiF6kNvQSLFKM/+PwI8hgfDuIsvQkMDwsF6A+Uiwaxi5cJDBSmGQwU1k/03x 7fPtse2BT8JNMl6ASmH+EFyg7fJKQSwRy9D8AaGg/6Lh//H9oaYC+ceghvid+Sn/pUJR4XTBEbCy MNthUeSfkn/7UaVFpJP7UlOK/RShUBj/ezGtEA2D0iGsMSGRALRu8P/kEQGRf2EBxCLB3cCq4ong /6kDA4QE1APhMuBuEG2wP9D+ewNRBTIDwQVzBTEFMYfgtzvQqACoAJQGsTNwzofg/2EBiaACoAbh q/FwQHEhrNP/CHOu9Akor5wH0QoUr+ewEf8L9MbiVgEMxw28VgENRCPS/7R0D2wRYo9wgXBqlccw a1H/UOB60c7CdeEdgrl0bOi5Uv+4Qq0A8dBuQbayboFu6HsA/49gtuBaMW7EbjFuMbtSuwP/wnMY 08B7GffA5WyCwWTDpf/DtXRjL1Bw4rdTdWaPsHWj/3yAHiEeIQ7xtGKwArJBICP/jXKBcSAheWt6 Y7IzjdGxAP8hkDEhlODH8TLhIlEisyKh/wKTiRCJ4ADh0oHHUc+xgeH/z7LTwS9FzRIm8dIBL5PM Vf8opMsRK3QpBM0lj7EotuXh/ynzzXIpxM+S0wGqYdIghLP/0iFwkdKCgnRBUioz0gHMMf8yBKwQ RsFDMdcwMYHX49gE/4tR1KSG8iTD1KPSIJOg04F/MLGKszDSrBDi0J0w3YCt/4wEMpG90IjCi6IA 8djg5GH/4WHZ5NmxM1E7wdzgA+Dh0fvg4AbQ1txR4BDJcDvQBwD/N8AHADvQ46HaAtkhkIHk8P/J gOAQkdGnMJJS4oAF4DvQ/zthOYE5gZOR2hE3QTpC27F/4oAz5zthNNE7wY/BpzC1/9vQ5RAiALlw 2+LfgDdBA+D/44PZIDTy0jHL1OKAjXExkP/TYeXxz6InQIZzQJIqYiqy/9FR0VHoMbFiDMHoYdGz 0dL/1yJFEUdSLhFLgUNCNUHlgP9E80chRUFFEkZDR+KdFNRw/0PzRiGnMEYTMQFG8Z0CmLH/Q0Ew sPbg5PBH8jyRogfrkf9K0JzhlKE2Uaxw18CnMDU0/4txlKGLcYtzonGIYqYRphH/MXA1UKHU3LCj dJixpwL0kf9FkqLRHYBDI6fyoabUcKLR/+liqOPpMujhUbRR4bNxUcH//8P4Mv/z/+NZQ/6lU6n6 Y///4WvRKqHE0E5h0IBCgvfA//sTVHP6lvgW/vj/8R+h1gD/ykG4EITh77BaslrRtJI48P8A81tB W9QCcAHyXPBcgePQ/2GBBmACwQOzA6jjALOiARD+hF0hX8JhcF+SYXBf9GAh/dmgztmg3zHY4D7g BZG6gf+7Q7pyuTFhcQXxuEHWQEpx/wfBZMIIagnvZAVkGiDyZRL/ZoPngg0CDXPNwdBxwiVnov9m EGhiY0BpIcOBEWPD0Grg/3kwa7BqssQDw/FmEHkhgyH/9ADlgOAg8NAZ8mzmbNJpwP9s1GyiFPRw cnCCyIbIpsmE/27BbLJzg2yxccodMxaTc4b/zLN0tnZWdVJ2IQBwdbPO4/8eMs94bCF3ZG7AEGBp wg7h/8RhZnMhA3qZ23HTCXkQH5L/IKN5EX3xJFAEYUTAIfJ8NL+2UXyStvPekCNQARCcY/L/H0Lw AQdQhSN/0S8xLzKD0v+BooGCiaOYkdqShnEvQzCB/9lGL7MnAYBz5hHvsAdRPNH/PEEdgO+wPREv wSXUQEGFcf+FFCyxKKcrdBpgGFDYwwCh/z7BMgEyAOUQh8Dhs4vyMdH/GYAhkPbRQFGBkypRJEB+ 0X+pMeRzhVGLIS2SizQhwZT/IdCmwDGxOQCL0ahU6dGogb8tIakUkdAyECNQBtDOkXDq57wg5wbQ xj4xiTGKgX+chDUBM1E5tDlUjhE7kO/1O9DviTCcbLB/8crBphG/lzI9oOqik1Q5sSKQzjpD/2wh fAA9QD1C7QGOIJDhPUC23pchkdC1d6CkIaVC0X8l0JcRI0A7kO8ylOM00Of/fpE48EUQtCGK8S0x 8tPzUv/zsfOWJYEwAZpDQNKGcZvB/zBRlKGI1JyxqRGc4kqiJHD/nJOqYUeRRDNGAkfBp5FEAv+q dUM0oGL4wqICn3JMoVGB/2JQ59EkcEsxFqCqYfekS4H/QxKrA6kRqsH6EqjzqRE2gf+I0knhhJFD 4fXSpgHmIKay/zHCnOHmMeYyprSkEaTRpxH/qPTkZP5zNiJD4f4SR+Ewof+qVP6CiNGnMkrQVmCs AVJgf6yAIFGzIqyCU7qvZFIxIf9SMa2TrbNXxUKy0WHRM2qR/kKsIVHhVFhXMlR1U2YGFP+FoZhh 1ZF7kWHgDaN7kbSC/1rzfZCQsPJwtUS1crXixmD/PlB9ECMitvJhoF1UXYG8Av9gsFpQLnBiENah fEG5MhGU/WACzrgRYRNhMGDxu1FfAPu6wBCBpRS0FLK6kGDhFgL/XVBfYWCBMfAwYR7BacC9Mv9j RGQIvbJk5GWkZUYaVWaE/9JjG0PX8pvCw8LDchyVwzG/xaEdYlYhsIEKgVYhSlmg38TCa2EJoVJg eWEpJCG1Qf8+UfMRbsDfkcl5yKNvhm7n/26zSdBvsW+xcKLI1XCTyrH/dfJ0sXQkczEls84VdLNK AP92EiciJwd3sSgiQaB3sJ1w/2wi0LPbEuQg3VC0UI/wKkL/OEGdUWywaSRWAcHUeFTBBf8syGfi eLR44cHDr+KF8Zmh/4Zx2HH0kdXhW3B8MVxSENDbEDG1MYwQMX1Atd1RviP/whJ94SoxhXHkIZgy 25OJYf/Ys4oT9FIz8jOjM8TZA4SV/98I8pTdAtWhDdGLId2jmVP/hfI3kzzR26I5Q92y3lSFFP81 In5hmTF7keHx5hI/0D+R/+Kw5jTh4eQifyOEst7z5CP/20WJMIsy2RQzouQz57FKAP+KofkRiSBb AEPRiEOIxKjw/+ZA5UWlYvjhPzKJkYqBAlH/5USRsF4AjlDthJWgkWK8IN73UBCesGySA2F7l0CV gd+OMu2ERUKOUJHgve5ATnD/nXCJYFsAkbCVwY4Rl1DrwVPv4V4wrc6P8LWJYKX9pGClacCJcJLQ 6HBgsOjR/+qwjkTvMYaR9HHy8ZnkTGT/8vJNZ/PS86OEkU62AlEAEv+HYeZAbeCo0qrE/gSdcf6S /4uAqsGhkucynTKnNqAxUQT/o/JSlamzqmQDcfdx93GKgf/8IwMz/nPksfgAd7BRg4ii/6XCMzFE Qw3RQWE7M//ijTH/isAAEuZA6EFZsgAiPSHiwv+NgaVTWaLkJefC2NJiUFdi/+VB6cJWxTtxoDFe VVHSgBH3f1AFsa1zGJrBBcBgAq9EfwbVrROvoawjCoAe0AgjIf+rsa+keDB/MXfgsEPBQXkx/wsl ZQhl1bBhs/Gz89hxvKH/flF7gQ6TtJUO8Wiy15EPeP+1hrXRtpS3IbcnuQG34bfhdfxAMbRQaxDQ vGA8YOf/ExK8ILlyE+gWB7tCl5C34f98cbgRbxFu5HALl5C5ARUR/q08YDfgg0G84RehvXIYc//E gL7hvia/msGTGhfSdhuz/8IFHQUcUnaRgOHKEHayHbL9w2VasHD1gV/QHtC+IS3B9yoBESDu4cYg hCJpIuIjgv4x/BAiQSJEIkp8eHxSI+T/JWbOIn87J7PO9dERKKKJ4P8pAc7TL2HgoLyhN+C0QQ5x /6JgDuDWIKJgDyG08pcAZ4D/KjGCsSoByyDRcnaxhVQr5f+bYi5DMfTCgpwA1VH1EfTB/9hx2HHW UJAQ6CFPofOD9RH9NgBStOCMYA7gD6DWMBKx/9ax1qCQQOKw40C04dhxh0T/h0PYQC+h/8LdguQh 3oTdwf86lGcRPZTzUzPFjjLd05gx/zfB3oHe4fRxmgHKEIeB/7H/mUE3sjUlX5Lg0aUhOBKQov9Z kpCS5CENUkHx3yHkxI2F/zPz87E/I+wQ4jHjU9vCOPH/ZwSTk+Wxs7E3QfSRMsPjZP+WRDN0MuI3 Qbyx//Klpf4x90GxWzE8oK3mMUGx5LGlsu/lskLCQeQAo4zvAe2ERvDq7+zg59bA51swbDCnAP8j 4QoQuMDqsEbw6wWfREmS++/A6TDe7NHs0fERn3HvYf/vY5/A6TDusfwA8HGcwNYw/2OQ+3AwAbaw 6HDxYKEAozL/8eM44vRTHDPccU7z85VOo7/zkzixkWFMx53C7MBaAIH/D5BSY8eQUhJQcuck/mL9 U//6FPpB9uH5UV8jBUNTNlMi/6xz+wFVBf2x3FFVocvwSHD/KMGbQVCh20DjcANDM/DVof9Bwlry QqexogUxiQFx0UHA/0ixXCHhUfrgADEqYFtyKsD/WcK0MpQDOBHbopVV2zPaYf/cQ+6hQ1ICVDuD UTQXgECh/6cxvLAZ4WCkX+FM0YwBB9G/YZS7BwyjY5PLYGJgMQgh+wlCvSIY0WIJ4e6gGJDEwf8d oRsiC+UMKbyx3/He0t1x/2dBiQFncfaQDZHjIIMRDpP/DsMOsg9T40APxg/n4rAQlP9q9BFTEyMR 8GshGEEqMREg/2zAKmBtMkswxVQTkROUFjXfyGVvAhSx1wERULVw83Akf3ESypZu0UXgE9FtQWrQ xv8XBNDAckEYEXmxczkaEivi/xrzGoguQ3WmGzMbMpFhTNH/zLEz8GaxOXH7EPMROPF2wv93MRgB dqAt4WChi5EdcQ7g98bwEVARUMYO4YZgePB7s/97pCPhfSoiMnxDJBV9xiCz/ySUfFEKIdjyKAKB 4X9CgKL/2fbzsfNAKfIqwEOR+uDbof+DhNwyg/PbpIRKjlExkd4S/2cR/PErEdKy0pEaUmJy2QH/ kyFOc4uULBQuYx/g9MCJEfcv4WrQEGGlwVFx8TGTIkD/NgDb8jxhICCKEw+R8DAwwP+K0WyhwVGH dJLQ9SFIge6g/5PjtQFYwlfhOhM6Ayfx6fH/Y/HogkwyTKICUTgTRAHAgf/m8gAAmbE3cOZCsEJx 8TMC/+m0kcOokkwxwHJcM+bmmZX/lGG1Ae11jVM4tJLk9HH4oP+zcu7DN+L8ABdhZtL/8JCS/+qi jVM6xjOR3hOJ8I4zMqP/lQM/QpjyPaBZ8Z4DQVGccv+LAE/wPPKbUj0S4uA78zyhX0JxQnFLIJ8F oQD/okDn9TAw3v2gnCPhSEEYMEqQf21QSxFE50vSSXBG8W1Q779Fo0mBS2BLsUTwozP/VLDWtaRR ChCUhRCEIvEe0PvRUSAx3iBATAD9RETwEOD+zjjiRAFWAabWTJRMREwx/+0TgKF5IXfhlkIBMkIi MzD/W6FZAbMBBANQIq6yqzKrFf9T8YPArnFUoq6xU5K44VZy/1WRU1EGwlPDBmJTNl40sUT/ZpFc 4j4xnaJBQbMRQCJYl/+1Y7Lis+OkQJBV26FaMLPz/zlF8LKboPRzOnIO5JmD9GT/jXLzVzODssVD E0ITUQFAgv9EIrhAYeFgI2IRH6BgoS5B/YZyMV/kYeG/wbwjkYIrAfsrAV/jGL1Bv/FkMXLAzZB/ ZBG8k2RiZHAXEr+yYPAA/RWBGCwh65MxkcDyKqRnwf9nkcIBwcNodcLDaNNpg2l0/2o0ajOgEMSi arB6Ucmxa2K/a9XJocZBi1HGoTDAlMag/2tBbVJr5G3EbrXI9G7GbxH/asRw9CRvyxbJUW3Tx/FL MP+LANvBZsF3cHJFc6fhVXUI/88UhrLOlXX2pwPBBME0gvG/aPFnwWbRKJFicWJwKbSQd3qgedBq AIzUIh7wb2DG/4FB1+LVsn4FL3V743vSMBT/2OAvdtaBMUTY8XrRMmLZA78y8oAjgQOZEvJRg0Gt 4/L/ijCDUYNUPGDchxuzNnPdX/+Ewd405+JMUeGz4aSGsoeB/8KBixG0kNuRhPGMEShEdQL1j6BK tJBrb3BqgmyhaaG/TpHBUYcRxDGDQWeAY8Qx/8QxbKE8koqg4rGDQePj5PX/xqBxcCAAg5Cckffi DJYOMf+14kxijnGpQwIUwIEQhLUB/7ShZ9FUsPgQWcGM8euiGqL/wQHpsxpi56Fn0UNSj2NE1P9D tFmDtbKOM40yRKfrAPAy/3eiT0Pv4rBCTlNngEmxTNH/8EECIUmxqUKmc47z3hJFYv/vZg8ykDKN AfSFELQOR43S/7UU4tD20Vsx+CFY8fghtWW/lBOfoCaQ+ScmkIpg52aQ3oxjkLygVEC9kGOf0aUR //9xoSdVh6EkoSGhIfshVzT9BkC9maCqQPoTdqD+olyw9eQh1uTw3v9ypeKh0gKh/6ZjuaF3EL2h AHNgcQJEAvL/TIOTAWRhwEGpYrYzuDKycf+yEWigBUGqUQThBCXngQQB/wahBDEGcq6SrbGAkAmD r3L/etDMwYThrEau0p1yCDOrgv+5QrfUC3O2odsS80Pn8gxh/w8wmKGQYhGiSHOPgpAijfL/kKOZ AAIjDwbpEkU0j1TtpP+OkdrCZ2eOFbYUCYGxkV/B/xKCnZG30bYkE7QXUm5Gz7H/qWIHwSzQW4GR YRSSdhN34f1vk0q9GXkiAxFawr5yGLL/vRK/wL+xuiFcI+C0RYOEgf8bEi2RifC1QRt0whQcM8Kh /+RQwxE6csPWotDEMMRhPGH/PGIe0SPjydHFhyAgrOAgUf810NRRxqGKQSE0xVLGoMhg/r0h8cfy yJEiM8gjyQUjpH/JoclEJM8lTMiQIfN74tb9ICC1NdDMcY9wFmEn5c7l/87J4XTP1IPVLWHf8BSR z7H/jAEDccJi3EO1cMxRLJKMIe/PUc2SLVCKgJTUI6KQUXD/cdHY0TEiiPE78IjkidKkwP+Jp6Sx MGGK9on1jBSJQ4pR/5FQ2OC6oLlAM3I0EjPyB1D/mNDB8TYoGtHdKBqxdLTdmP9rgk0EldKR8o5x kgICMeGE/8+DLSICMSDAPyEg0T3xmQD/4SPOVN+xPAHkceVg5VLFYP8fEeWC4IIs0Bux3XLdgORB v+aBSrLNoyjk5oEgwJzEwe8uYUCBLmE0wK34UeSQmtX/svK4QQKBAiH10bGx3jLq8v8BMuwDDYFE o7KDDWLsovBy/51TGkSnIhojnbLsYkbS80L/AVG1o0dFDTIa0bLhteKmZP+dNEsjQoFMQvAhTSI4 kW8i/6liS7LwUqAikpJCFE0jkEP/oiNNg02jQ6MOU2ezRtPpM//qorVCNfCaw2RUZmOpcxCT3cww xvmAVsVToZR8ENjg+owwkFpYsHJQsOCt0FTgf8dQ+QH5FK0Rr41WrdwQve/98voQF7DxsXv6YTQw UPH+1jTA+xL7Ifyw/DD48CtT/+MivFG8UabU6GQBUVwhASP/YXBcshZCo4RqU6OQDuBjYP9kQWNS X6IEw2MBA/IGoAYx/wP0uaRegmNyYXAJ0AexXoH/BUNfwmJEBmW8UrsSbAER0//1culTAZVmweaz QcJjwRJi/0mR7MdNgfEREJOSI6OirIP/6mIPMfJRTaS/Q04jTkQQM//uYvODxCTuYWSCEbP3YgQB /yyxnuL+oBQTFDLH8xQxLWH/5dGjgm9C0mEY4xXQGVJtst8UMBYD4AFYsOEhUtMQ2PD/F7ABAeAB zGTfY1RATBFz8/+lsgJiRbLOdxuRREJ11Rxx/8/kHKUde5Ri+sAgwCbhHpH9eSO90sR5tHnnLfIh Q+Rw/oR7N4EQH3J8UiID1lV8l/8jVIgggTF+P4AE+XDZmIAIbYEB9x9gfFC922DWErX/NfAnMZLx h5SZB+Gi3SkqMv9wEt7khOIpc4Wi8JEb8h0Bf0SBCaHrQTmQG7E5sTxgnPsjwR9Q1kWxWwGuMY0B jBL/4yRu8BSgzFGMZYml47Xj8P/j4eXE5BtvgY2BW3Hngo3F/+dC7jEb4Y7ZNzM3JGlBN7L/wnQ4 VaxkOGbrY2uRkwE7g/+TWEzxQCHRpIZhOxGEwZUR/xahb1Bi0A/gPfE3cTiRScP+QivRQCP44EBi 4fE90jsZ9ygRmPIP4FInETzRLmEe8P0ucb1BETWw+BAO4A20UHL/DlNLMvYU9qMCEcDBTYEQg/+e ZVHCLGBrF0YjoKWm1E10/6NUTmOnxWlkQsSptvsDwfb/9jgQMUukXQJLsg/RpfQCIf+kdE1URWPC wgFyqcOcxBtx/wF3RrORs0pTqkcGoDXRhvD/+LHDQaMy7KIClvPgIACwpNuxkXjg967B6JCUVGLv YP4hYPBUyrB3s6QKRFZ1VTF/s7JXsrHxEvBYQBLwFsBz7xnQgiBeULfwtZtwiECxMPuzpIhA52e0 wRFyM1sStVP/tjJlQVwTknJcpcDyXVJqgf9kIkjSbRHGUscjYvJeUMaz/1IwXuFe4WLSuhNfQbrD uuL/Y2K6019DvVIVhLvjxrJkUf9IN5zySoBbg0xCTUNqEmVB/8CQUDFOorW0kENPkPVTa0b/v3Go sjrCHLOdk5fDGwPC1P/EszOwSoEAU8YCEdLGIsXW355innHHUvtTx9EhbdPIFt9YsHATo/ONgW/h IW2xyjL/yjPKJHKRGgHMEFtwa9AzYf+N8cwDtsK20Ssx0IOGYTYh/3XizeRNkc52QZB1qOkwz+L/ 0HXgkuCz0UBA8HeG0mE/9P9AIj6wfgEs9HmHewHUSHnA/3rQlKF6kfGheOHxoXu01hF/fEPW8dYz 1ijXg3thLxCc/9iXMvrZ64gggEcw5HxRfFH/gWA/QHZQNoLpMPBhglGCVP/c54Kx34Pe54S1cEKE EoQS/0rS/+LtIfLC7uCHIOHU9DP/aUGHceMUjKeI4+WhVFLkBP8+lz9a49yM8oXBjZUl4kHj/+Aw XQFQkUeUQx+pBENj6wj/kjZOkZKIybKVU5O1SmHu4f/hkakCNyDu4XdxevEsMlFA/+GRcrCysINT lXSPknZQlsH/S4SGwpZA8zOY8vMy71OZkf+PknVQlpHxsZSxUiGi8aLx/6gBTuZfkKqRTyF0gvsD WzK/o9Nrg70QBVKrAXkQ1lHj/xuiqGRpJPlkaUEDVsWSqJT/aTIGk6OEqJRTYxqyAsTr8/9n0qEU OuMAQpxDWZP2Q1CU/6XDOtIBFBx068Wng6CRUDL/w0TrppcyooIdtAWyBWHBUe8FAVeGAXKcxLWW 0K+0sTHteODnCMFtIJTgMBAAa9DvsiCbcNPQloDeCSGvWrNg7u9l0Rlxd5C1sKQLBAuR9dJQ1nhQ 3ncwszB4UPTg3rW9EA0wloCWgOeBUNnA97FzCzFSgN7AkRkx9aFzsf8QIw9FETJGMLYXEQHLEWmF /8WEH+SgAR7BxPLEcBfR+LH/TyH4hCdgbdEUkhRDbmIWIv+4opyBuLFt0bnSvRC38Lky/46Rx1LF sb4yHkLAlHPxnzP/9aJcZZBSnjMXEfWykCFU1f+q0KLiwVHC0vZCGuICxHXk/x1i+OHJQqPyGyK+ BhlxccT/xUERk8UyxUG2oRnSEXO9wveetPDB3MAhx9Ddozhhg/T/CHDgIZig3sEjwcgSyoPKQv9+ E8rznFHhsAxjsoEAQLVx/+bxglDgMc2ThkEq4SdCKoL/uoD2M1vBz2GC1ymgKeGCEf8ncuCy4LHy Iisy8iErpJRU/yxi0nPSMdVkmoAtca3g08H/mfCUoeFRmcHV8jwg01Hu0f/x8SzBLMMv6tYViurX R9g2/9eW2rPXpzMv2LA8IIdgScF6nDKRzkmxljA2gKDBWv/cMezx1BHpMQOg3KPd5JVS/zf23kQ5 NN3h3YM5VUpzOGH/1QHtUdhhmfHiUZxRTRDi1P898jzmEMHkJZg3PmHj1j6F/80xl3dBBJaxyRFB ZCXSnAH/m0LvoauR3ECCsXRy6fJIw//qt0RU7AbssuxkRdOkEqSQ/8DAR8NHtc0hfERKZDdxSUD/ rdBJs6NEnTGSk/LF3LHpMfvpMU6AjPHh0jFMQe7h76H/73F74aaiprNI4+kh6PJJQf828VSIA2Nc 9nty/qJTpQNy/xqWT2Kp1PmSKWEFEfVSKZL/w2T5xM4yVqaucvUhF9Jexf8ClMMywuP+olT4BbJQ IfnD/83Rd8K+xFb0sDVVVVQj9qP/+aNdSFV0wnNbwk9Cv7FbU/+dUxxlXqdfBE8SHdG05AOR/0Yw YOFlBWFTCSEJIWdyB1P/vGEK1GOHY+ENYQhw42FikP8poAsxuxdkINcQCtBhsAph/wuCDWHUwMCj jIEN0A4BDdD/Z2HbYA4QHxEFAWpEG+L9aP/9qEaCRjFas/3lRINx8RfC/3OxF9PGI/hhTwGs8/Ui bfD/bSNvg28SbvRv4nOxpjDgYP+CMIIh9/HGYigAEdN4gvlz/xgkGCQCBlhBtuP4snPzUAH/rsQG M1z06VMc9Rx1d3PMZv/60CgTWWMoEnLiF6MhUhIC/3EicQR6BoAxGHIhVAYh/tL/4UB98f8h3JGR 4dake8F7wf/ycfJx3sF9sX3xffEkgX7x/SGwMSUQ8oAMYRNwYmEfQP8WwBNwQsEloRoBKFEEwQSz /ycyhTKB87fEg2KDRoNkJyT/J0Leh4STK3eF3S8Ah3ItV++I0e7RiEfBkM6IoSzx8DH77lGV8LXg wy/ihvQtgizA/zYhiooxFDGhh8Dj4ElAMgJ/MeQx5jIEjVcs8ZFxh2Ct/4jRNHeL15YhA6AUYDcg pSD+czazkSD7MTsBLkA3cjfo/zgmkzOUpzkiSkA3oc+gNzH3O+L0IS8Axi5AoSE+sJfl/z5Smbbx ZJhXPrmZNQiAotD9IvBKR9CZoj2iPnCWsZrY/5xlasH1UdZCa4HFgp8F7DL/7EJUIvgndfNF81kR oQE6of/XcmrhTSKUYznDfKRKk6Kj/6UBqDGFEKOkSUFIgU00N9L/IxEuQExBkSGlIaMRpYE28f87 kUbxuqHbQAzwsrBfsOvDvRNQtYGASXGjoivipajl/7VkKgPdYymUKqIDpKuyKVL/BLKC2E8iuJe4 aCfhrZK1Kf+4o6vVg2GxtKo0s/QpoR1i/yoDq7UFM1h5xTIrYDaAJ1H/K2ApYq9TufRIYqyzHHQp of8OV7PxK1EnM1LADjatArfz/7XUHHKtc1+Sr1Ktgnc1srB/S8CLAGTmuxq89Lz3Y1z3/ybQPNAl oSkQY1plYmQgZBH7ZBFL0N7j4DxQwYAaUcFx/2gBZBFlkMHgu7FkIGmiWmL/WJNYhFDTwycdKlrU USELVf8RYV90EBIp4/3h3lMDoyoT/ytgTrHHFGIQb3Ii8W1yJ2D/bXNt8HO00sNUIrDTJWOeYv8R 4wtDCPKCol5CdTTLc7b0/9zh3KJEU8+HKJKRsQ7xS1H/p9Dck9BmHyVC0Trja1GRwf9FQcbzvqFx ZcbCT/B7kZ+i7y61uoNs4VxRY3wRgRGdxf+CcXnB+ePRktcScoBqIdeCfzKB/mKcsdlBPaJCAX/i hP80A57xbfCdIGwwyFB1gJ2i/wNjgaENkd90//MOM4OkcID/g8WBsYGS30QN8TYx38Lfovv9sd/r pYnBllDkc4eUh8D/39DiMZXiiKKKgOLR6SGJ0P2VkYTjkonQ48GJlIfA5En/imOKXeaVAcDnJIw0 jtrpNH+HIeijvGDosefgjzePNtbfpSGOceVBh5Dm4aWN4sGQ/4ihiAKd8GhQaNFMwe0XSoP/R8aV BOJBKrGVxaWxYOCcsf+Wspe1l2OXg/Hc8ZmZnPRx/6HAMoGWovSh8LJOU080T2P/9JBQlqcR0mOf ROtBxMMyEf/6UdexauBS9JIUkhIy41RE/1TafEOkguzEouGSAaWBpYF/o6EB8QHAgYB7keJAchBC 3wBzcTDEUFcUAZGt28GmIf/jYKMTo5Pf4QHR/eABwZCA/wIQ/VVcFFmwOMCDYQ3hg/H/CyRgQsyW 96LcwoPiEYQLJf+4tMzDxUIMs68jnTHM05+h/4JDHpNkcRKV0STOZLiiqVX/cFDfAyF0DfIFArhj ugRgtP+Cc99RIXIQExAEBGPeAqzS/7izaUVhog/1CyQhpQuUr4P/qRS4d6lyIGOsE2HlpdAVD/sV 7HDP/8ERGEDzoTOw2zD/FsoZkb9kGiHBEb/xvhEbof+8MXBqv5FS0HfhxGKzUTIx/3ZjxPKzUsUU xRINQne0dkL/+JKrsmtTNwOocg/0DiOmIf8hInuSODMhkq9CH9sD8Mez/xOVzzUGYq9ErUGrwiGz f8T/KJN5tBMhsLHQY4DD3OKBVP+BVg/Vz/UqY4PGz+SBAvmC//nRxQLVscTi0UGr9MqzyGH/xxSv E6+TupIr44Yj2QG08f+dwoNHg3MHE7oFeGNSsdZy/5uRnCFyQdnR2XHVIDwwyJD/m6DZwL6QwvAG kSPQNQKAwv/eESYz29Hf9DYy3kFr1N30/9323uU5QQ2R39GTEzn1/bH7OjXgQqXkiOWxO8A5QOIy +z1hlbPO6cE/EeDxZ+AEcv/jlj5xpdA+Yz6B5FHkUpmE/z8hpcDlEeUURaPjsUYg6pP/5+Dqpj6Q AcHhUUGyG2DqUv9CVMGQQhXoVj8R6WHn6knx/0MyRkPn4UaSAfH/UdXB+wLf/HVHuklk78TmoMbe IUiQ//Ri8UelSvF18bLWAO9Q+6D79DL0E0L0F9lAR5D+svSR9fQwIaiROakxqTGm8Nkx/6lSTqGo o/yC7NKkgTLCVAP/SJCsVDKCVLYy1K0p/lNWMX9Ts68FVmbskdqwsHKzsFL9N7B7AWOxNP0wWiH/ gAHA/wGxV2A5QP+D35AB0/3RstH/KKGzIt/mmCQ99JlQmKGXUd/jIRqRG0EbMvBA1pL0l6P/a+Tc YgsBDfG64Y+SOQK3k/cSIG7h8GDOOcHeIQQU2/P/3sKCs9DFi/RikQuR4CDjUP8gYROCA/IK9GSX 3aO994T2/yjDgCkEIo+yEBO4xPBA8DH/mIECUdviaXS/1WlTIfLcA//DdN5UvUK7oRNDXqNtKF7D /xQVwZL94LpBF7QXtBfh4CDvAlBKYObgG0DndREXSxe073Sx2VDxYfche28ec6EX4P8asXKhGBF1 EnUsddUNMnaC/+4y9uGG4kcg0WR45ivh1JH/7vEyMXez2bCB9AQlaQKClP+314PFBmJ6tmvDaqPE VRAC/yG1KpJ6Jb3ju8QP5YSyf5T/gFR7NANy3aU3A9tFgnTWpP/Es3rl3pdrxNsVJrX3kmP0/21E 4VK4ciLCCYUMkl3UZrT/K3NL8KnAYpEos4qVJsSEw//apYK2aoED8TSwASCOwY4z+owz4JQYkI4i clD+IDPg/4zAZNERcQURe5H/5JICtHH//aFC4f2hOjE40rtGOOfspN851DnXlDSTobSmrZzRlYP3 O6aWIz6ArT8RPNSgEZdh/z1Tl7S1tPJFSjGZEhTgRdH3PrWZtz9WzkMASfGW1ZlQ//ARmyFAk0Fy n3SeK/g0QiN/8HFJ8UJ0QheaBPl2nbTW/xoQG0D9oaGBjHGrolZCSEP/SVIAQaPB7vJKMGzxqoKk /P+oE6ayp4mn0QDiqoEAxqiS/6hxqHGp8aljqhCmwDAQqWD/TnADkdMlMbAy4atxq9QFFv8FBK0W MrFTsAacB6JW4VEy/wgiVtIH5FbhWDFYMlLgMTH7sgGxca2xtLG1C2LKIFuB/wvzZXDwAaPxNpFX oT6BPfP/FOBckCihtNLDEbXTtcQOpP8OoplQD/G2IbohxVdpFHui799m2ySTgZig1u5xk4Ffof/Z w/ZgtrF08MKhk4HZwZIh/7SxxkHZwmGpu/R8Ab1QlAL/w3lqtSjEKwOCU9mmKkJho/9pFGlCj5M4 hGglj/GSVDmz/xD0w0EhRNXxukHFlTaBOIT/kMPDQcUnvUHfRcWTg8JpYv8h0zXxtOG3Ebawbx3K kWMC32YgchAjDm9085DnMyCNYP/MkZAARBDNLnYBdRGQISyh/0pgQCB143V3c8RTYFLgMbD/djFT MXJAU2AxoNKhdjEyMv8rNVbgLFOmwHJAodFSwTGg/4XRaVJ+MmvjWhFo1cRkZVL/fWNo4i6TL/Qw 9XwTkWNo1f8uEi+i3EXU0+ADaDo4wTM4/8Hl3FflgjM3LubYNCIV30b/3gPa9t90OLe/5dbUeyM2 t/8x5DMHhkKhwIoReWOI9IRDv4qIM4TatcfiWdCIwKWFsOqljnCciaCc59GJoOgg/+gQ6GKORsxx vHDnAlzk1fH/ZUPqYpChnIGX9+sCRLPrUf/tQpMl7JWTRkaj7YZcUZ8h/5VTlXOV8bLw8EeVhJcy l/D/l/GcgZDR1eG01PIlmGPDAf+ZQZkV87VOWPYR8AC3gVcz/5BA9PSVgvMQmsSbsfXh9tj/9xeg EUkC9pD3dvc3nxGc0v/5hJ4KluG2gJXwtSC0cFgAv6Gw/IOh4f2SokD9886tYf+oQ//LpvFZp1lz qeEClgLj+6nyW5EYW6KKIKbALOGs4P2hwzm8EWgRDNFEc/wBQWD/KqGo0a9yCGQGgwhTXxkH0/+W QKHgCbKMofxQjbChwAoh//xBZICO0OPAsvGy8aGBsRH/sRFW0bLxnKENIZyhUBFQEf9PgWVC9WFJ AfVjZgWX8WTB/UuircMCFxOJwUbls8NGUv/rhHpyL5IxlLRxGxI0A9qF/xqDM5WFobvTtxETJdVW nGD/+6AqELpCbWN8AW4RuPG7k/82FZOB7DS/xjI1ORZxl7/l/zLUOKk4FXwFxZPt4+0UkzX/FxFp 95DRHXQXE5yg7HGSY/8XEXVk6+URA7tUHIXrdERA/8NEkOQbZyixKgEUMX0UFDH9trDvtqG48M4h ffGhAZpg/58AtrTOISSRfnFncH5QgFH/mxH70bagtxEUcRRxKLGBxf/C4LTADbGBshLhygGC4urx /7jwxgEqMY1wrkAqQELwq6H/hLCEcq5AhTeF8q9xhdoHYf5KuwOQMZI0MUUfspJzkNP/MsIdcmoC MFK0AYmkMYQy4v8wQ4r1i5eLZIpGiyS7UZDC/zGkxIMdc2iTd3N55o/CtHH/jiVo4ZShD9IQoOzD H7JWsf96tC+DjrV0s4smemSPOHoW/2nkjAUsIazBPhEtQT5BmHf/4wPiZDQT1APIdDBQCrAXANVs IK1iwK0tgKViMEGS/ULQpUKSYsDoMukApjCs4P9iAD7wsvCOoOoj7BOQI0Sk/0yDDmG1UvMU8xGf lO3Tw0L/7lLtWhzydkKfY/CS8KLv8Pd/QAvRSjEpY2FWsfPgUzL/+QHxkWe0oMIdsbihufFMlf+1 Ik1J9CG2QfPy9ANLILoh/2bhczHYAEjx9fCpEfTh9Lf/76BRE1EIUUNR9PXh8AH1If9LMVN6+IT0 lPmq+FNTw6xjv1EBTpE9oWKhs1EIEDFOkf+1wQSwARNYk1lCWkOzRFqR/wJ0tGQDBVjgXHADUFlA XIHvW+MDYFyALUBKL8JkAD2x/12TZHLrUUXyw0AJ8Cww/LP/YVEJYyvgLDBh5T2wtxFsYf/m0qmT qYTp0bslY0LYEGQA/2PA6BDjwBWAYvBi4WJA4rD3YpBiEGQgc/VQ7uK+j/Vx//ky+RTwcfBxS+Fn UfHBFkH/4FHi4T5BXQHBgmrwXeEM8r/8AdpgFjFdAT3h5EBjSJH/8xHgtGxixPhsIsTk4INs5f9w 42xU07JtshqC3PXT9OYl/2xh4cLd5NpzuqHigssyLfL/ayLLMjwS2nLiYtXh7HHdxP8xhcvi1IKO xI6DXeIypTs0/zaky7M7sj1jzkbdUtiD0TP/NqYtxT1jjEYxSC3DOEcQ0t8VsRZhFiDisdcyY+Gg 16P/YkDhoCiA4uHYgD5g2GLZBv/Y8Zhg2gAogNoRJoEtYNoz99qyXoFegWstUdthKxHcJP8rg9zV KxErEQYghFBcwFjg/wJh/RD88Fjg3rjeld/IA7L93mYxPdHEtHT0d3SRh4pj/4pTltyNaOU1jDiK NeU5eIP/jqKeol4idkOes6EU7HHrNP/C0pAUh9TrBoske7WI84kU/4fE6sfuJOr96ynl1fAE5qf7 A7EDgRDyEAYULTGHUiux/wPxPkAWsZmVyRZu4kiwLoB/sSAMsJtxQnCbkpwxQnCl70HRnMJC0AKA WgKAWWD+wP9BEZ2xKFEhs2nCnndIlETY/6cl+nMQMvsCS5JIkEX2oiX/+WRX8qlQStOjcXbQYtBX wf8aALFRPmBiEMOhPbG3ETPB/46CaOJIsl3hxhGOgUxdDwP/TTdloUwCHTGoZMDyqfNO9/+jUqpZ SqVQ461BZaGtcqzy3qVRx1GSrhaBUK2tQVN7/1IGUQFmAqlwHTC8kmJxuKH7EFBGIZxbJgx6tRBb M1sif1yR3vHecA6RtSK1wQ9SIWXyEBgPwBgI8hHyEAj/EHCHQTviFpFh8LuxIAETQv/p4nBiFqFi oWM0ShGmQU+0/4o3zaHNoSGBu4LR4HkQXbD/wxFo4cMRFZE9Yb4BvgFW8G0W0FIW0dcAUheRYnBK /7zRvlHAM76pZYTAF2ZC/UL/wPS5oSwwG5JdAfLBG4E94f8+cWxhZCE742KhHaLVkUYh/0YhxIHK 6GxyxQJsNcTzusH/mZFYMMcVxdQ/lDPEIYo/+f/MQP9ya5LK7csUzGQc0tJF/8yFzqTOd9WXJ+rR 3GsBbCL/0sYq1svjLDe8corSy/HLxf8s9s3TjCZoc4pVaxGZMT3A/z3B24XzQNsk2yPX0NpB2bL/ 2TvY5dfUNBTX1Nm02PLZAv81svNgEpDXtTakNDXY0NcB/zeSxeHyRIcC8lDeYfJxDpH/3mEOkYbR OSKHEDkx3nA6kf85cvJDOUEOosQhiRji+OZo/z3Z75/mjPDI7gbqIZEkj9f/L2TPs4e5/9PuWu5Y QyXt6v/t6+2T7heKIu5VihNJT0jU/4oimBEP4Q+CtlG1sFxzDWT/DoKYQZhB85MiVMpSTdGhYGrG jqDGY1C99nCbYbV79aG88L1iMLGwnNBYkGv9WnBaUMHZkOXxb4Ci4PUR/5Mh7OdC9PkK+WNnQqLy vpP/AmeoYgRQn/OB0QE0vqUEcvcGAvsBZvGEscSlMQUBBHH/ZtPUAsZjwfL/MP7BuoLKEv9RQRyg zaGJERHDdkIudCYB/3BxoLECwaekA7EEEanpBeH/XvME4l9UBSSq8q1B/gGrwP+wwmVBq8Zh9Qen ZaEIN640d64xwJEEoLWwRGShGsOU/d1gQqoRyhEPg7ZhD0G2BP8PQUwzD5NLshAiEAQQABAQ+xAR aSQAaTIQA0ygDoHGkv8cobdFuBUC8QLxw4BPABLx/8xAbOK9F7zh0wUsIxUDFbS/UaBvchZBb7QW QRbRnBcT9pwWsnEijNuA18BxIBKA/8CU+oFU43LTv+YYVqTx+nL/oyGfBPljeFDl4BthHHKxQf8m cLuyFlGhU3pxyTHqEfth/6XxiREe5x/bHsup0IJhg9D/xsEkgiGWJIQf18HBxgNOgv+ZlMTimabI ddHm0IaAWNLI/3/nKFbTusvS1aUr9dFxy9P/K8bT9Yq1LDoszIrjiF2LZv+M1tUGkCCasj9B+/CM wKSw3wshmvKLYvTh+/DG+/Ck4L/7kIxk9+GLoY0kjAOtmpD/vNC70RQhmvGawosC+IEhIf+TIY20 jGSUEALw+5CRc5sw/5qQxqFaM/8wxCGSpzZB1yH/2ELzkVojlGKSgdrw3AG5sP8coc3hRAVDhuW5 iG/juOUd/+ZsQRnkB0Ab8KZATz2cQ+b/n4k+ieaCS0XuJUm0oaVHiv9LQqGcW5I60fcis4GyYLWQ /w0yD8DyAKboTDJMQ7XVtWDfpjLksPUAwLATAMZQMamnf/Vy9eBRAFgwvPH1ULwwxv31gM5PQehw jUL8ceiT+ML/rNXo9ujx+Qf5OFQzAdL6Yv9VOfr0dKJkkFjh/fDAkbng/7kxPBDdYDAxExG3klgA +3T/+cV1YhHiWWTBwcGBMKLcEf8xQf9Da2Lo8FRV+jWxE1YT/40QSFEDdQOCXZReAAShA7H/X5cT QQR1VjC+VAUCBXYGU/dhMgdBjRCcY1FjVAYhYya+3mRRdPFkdFgAccFKVdH//zFpQWlVwM4QEmkh D1FoxP9Mod6RTTJNgN4BHDDdkMPz/6jAOLHzEhvhC7H/8rMSEePfbDHkEAuRFqFw0GMXAcbhv8dC M9BsgtJzgANuhHsV4f9v6m/jFjEs4BLBcLPLBBc0/9fAGBdy3XQnc5p0sgLxdMP/+2GLkFmw8yFa UbYyFcFCMv8SEl3z99Apc1XUz7N8bf+C/4A69FGNAFGhE3GEdMiF1Gb/JiXWRyMEfTN/8uTHgniB N//aH4FSgx+CqIPW5MWGdN4G/4kK3iXeyX+ghlWH5uIEiM//mHaJk+RlPNSK4XswUaB1ov+M4PuQ jPH04Y0AexB04OXS/1khevDmAvuQ9+LtsB9g/9H+rSLwFPCPEvfS9+Hng3Wx/1GhWADqNuhx5aHm BI0iITH/ieA2ITC0MLHzgTYhkpSSZN8ws/Ni7MOSYX/xnMSx9FH/n1lHVZodnymfH59q8/9HCv9A rKUXSNtIJkqNR4z6j0jn/xIw/BlBp/w1dyH3OP0T/iJ/PyE3ov/CUIE08BKgHGBz+wChxLBjsjAx 8TMQMwAyANeVUDNgHGBrxMBjTYDEYb5SpeEmIFgAZVBQEM5tMLrGE2DOE2ADwqsAtQRh+6tREbDe BPUasANBTxHmAv+sgVQSBoMGdAZSQlJCVAf3/65VU9WvMq8Ss3IZBnTTt7HvV1S64cZhsoA5v5FY AS1R/xEAWeO2ABKBEoIlsxGRa5L/HjN1cVRTtEsgYR2S0FNq0f8dMT1xr0e4EmWAFMFb0V2E/12H XwW6MHbRt7FfBLn0WAH3ulJfdl7TvWFBYwFe0b1U/1kCtGC+sL4AYqAeIRvhatHvV1Rlkb/BYqDO MKFNUUvy/cLyITuSONBM0E1CG3HDEd8bcU3AOjFnMBwCMeySMhDfAiABIQJyHYPEMVI4wSQh/xBi MKAvkWwiDsRsMzMQcYD/x1IfUDPQIOUhIW3hhSRucv+GIylwb1fJjW1CIMPLNTYQ/cawUiXBbRG5 MHSyYMF0lf+3YgsUzWfOtbextIFd4bch/1YxfjG10TChWxEOIpwBguD/Q3JcsrURWqKdoVORVgF5 c/96hHlqeZVt4FqiWbFclHpk/9YX1DXXFdckyFV8c4ApbwH/bGGCIoDogM+C+GxhM6N9Uv+F1+Eh g5XdHDdil4M3l1xk/9/YhqvagdqC4beDO93aOGj/3JSKwqxTkfKMZOZkjSHmw9/psuuki9VGAO3w e8ShkjH/6KPowovRQYXqM4ujRNJTEv+zgXrwUxHsMR0jHULt4pKQ/5L4RqRIE0cDk9KWYeaR7ZH/ iZef5rSi8R9Ln5eD+Gb4gv/zLZsI8b+cVKIk9o/4V6J4//bmUThRFaLI+LVQtvjr/FT/pAf+x/g2 bXBDYakgpFCqUFts0LXwjFpxqsBzqMBj/6aAdlBagwCwGbBs0Ing59D7dUDagK0usCEQcDF0IKsw Wt7KYNYOQAPxzspg3n8DcauBbNBaAavQFiB1QO/7qYBfQeepIF8Qr/DplK4G/0VSriIGc2GdrlKu NAfSCKf/a+Ou866Er0ELVGWCc3G/of+ygCaxvhEYUBcRF9ALwrET/3VhCDGWUX4BDUGVMbYAaLT/ LpHdxGN0D0R4Ua4kK0KCIP+yIB7AlTFowg2y2pQr8hKz7wpjeGFEYeEhhHLkuTILYv9nVRWkFUJw F28nDuF/oGQy/8/CWsDEsBrAqECnoA1BFLP3dQC2YO4AUhRRlaCyMBxz9xtB7JGlsDl1ERsyHHAa Uf9yccNhHHBrsRyAG+IbAMSA/3WiGxDDJBwRHBHCUcSBhpT/tgEMoQ6BCdJjImgSy/Algv3oMGMh EXsUJKGrEMf2fEP/yMMjEiMkI+cSkSPhJKCrAP8lRstjJYLL8CYSt7YnZCcE/7cUzZWCM4GVDoEK lLTikmH/lcBj1AyhGBEzRBEhK/Ij8f+0YLDy0jG6MNbXLRMtxNbz/y52LgeIMi2HLbmJWtNzLcL/ aUIuETFF1mgwey/BNHY7Kv8z3C/V2pciBDnW1XQ1Gz3K/936lPw8yOG24LHiaOQk4MX/OeorcK3j rFG4Qeni5XFDYR9DAZr0RRFEI+aC5/f//0ABpbGlsewx/7FZ0eihSXD/AGBpAWihSXFCIukh6PJA BP/s87VzSGbXgUixOkHuscTSP0hT7bChQZhDgzHSQOfv/vftkeUi9L7zHKVf8jTiqf9NRKO7qEb3 z/q/qi9SiP0U/1Jr/G9Xqf3L/XRXT/4ieWL/roX9kctg14ABkS7g6DD9AO1tIL0OQFxxtVsxdlAC QPfHwAQBDJDWxbAFoBYgX7HfBMFYUEDgFiAKgOcJwF+g+xaAMzDWXgEE8hYguDFdQdf9ALWxBOHW J8DvuVK3Iv+5QF//uwQIvw8yvIMYAbyo/2JVZKZkxCaDBZBlk/xRIJD+QiaxZtFm0SaxCyEoZ9Ih /xPH0iQSQwehTzErc4PyRzXvKnMigkqDwDFKZDFtwgeT/zYjK7J5McWxDEABENAghZT/bZTSYRIU KJeE0k8wKJaAov8TNArxSlF0URsRGvAcsXfR9jka0MwBOdhh0lEpUfxR/x8xGfF0MFsQ7VB1Qu9h SBD/dyLvYBtBdRQbgRwBzuQckd8a4RqjGpV4cdG2GM4hU1H/IgFo4R9jCcJ5wyBCeoEhof97Rntl gCBcASKCImrq0H1z/2YgI7TXt+gAbSAhhCEgzbH7zbFzsYwlESYxE0HaYymC/yljgaQK8RHjClGC gg9EH2L/ChYH8RFUDrQPQwrh2nTC0//aY8Kx4HErxIerDcAuZhER/+H3Lobh4+KbiZkvgzJCDfT/ NGovhi+jjeWIIo+0MrY0jP8xRehT6og0hI7ljsmVeDmp/+2XkhiW1ZIJltc9mvIqOdf/Ogb0Agdz moNB8EMBxBJocfebg0HhQSHeo0CawaHBdRL/nNAdUUMBn0FDkWAUQVRFQf+e4/fhGbBJcKAxodL5 4UYx/0bQMhGgMcbhHGFIERDCMOL/k2spcBQQozBJZKjWxXJKJv+YdaclKxFNBacXlyUAAqdp/6Tn pCdReqlrVUpQyQV/V8n/V7utFwcfCO5MUq1WWIevh/+fMSSg/8HTsLWRKpCfwFiwtyLg9RBckClb EEJQ1lxg+7cwD6XvD5G5URBXv0BfQuXIQOd+YOeUXzB9cF+g/1+RtjJdMCeQXJBcQFnwQlD/hqBj kUEyFAJgFD+BbgKbwf8VQrNyFZK7ARTUmfS+1mJS32RFQfC8wxhk3tOlZYQn0f8n0SIBzXHA0Wcy KPO8s7xH/9vz2+KBAmqUHFTbQylxHiL/vdTFVDGSK7JpA8RwLpD8Av9MM1ww3ZO8tMOCMhJscEcB /6Az4pHG0UpRsRFkMbOCKoPfi5IqgfsxdzH3EjF2w3SC/cxDQsxAJmAPMHcBFTEeYv/cclzQxzDC sYQR0XF3MsfQ/SixEHhweHF4cXbxKRV4cHsosXYzSnbx0PR2wSkQEP91Q8yQ0XN1IXjfZILJ03pw /3+iewHVwNTxeSDVodihenD/bSHtBdZljUB5Ytf5fhfYoP+NANl0MxmIYNkgNWCAvhwz/xtpYzWE cmszNpe68Y1BI0P/vE3e9Ntj2sIeIop1hsWJ2f/lSIcGiEM8NusnkSaM8/Oh/8bRH0KG9unqkNY/ JOVVaFH/j7fsJZF7QuTotEUnlpvtGv+YjJVIl2TvIfIplyfxLUmq/0x/l9nuAvQxFTFhYpqBYlP/ mtCcEZ1hZLC3gKNA+BGh0f+hwXJxdKJ2cJ1jwCBjkZpD/7pxnZSbsaDRxHH51lDy+hH/daGhsaG0 hVFOY5hFAqe+Uf+bsaHBTqL+YwM1V9oEZQa4/wRVpbiXsgBiAilYL11bBFr/pmZfaq/qryoJtq4p YJquef+xxWS5ZKexMmV/m7IN4rjSss63oM5SP4C1EHMPMO5adxB+8Lk31vaQadbK4PdqFRFBv0D3 EgIRgMogazH/UJARgMGAudK+4LowEwG+4P/2EbQQc7AkgYcxj6ECwRYS/wtAuuOoMbNjFhJvyhZU s2H/uvQWhXHpNgTNgRoRGbS/4f3A1NbAs8DTGyK78xgjdg//dc291Hg4yJTfQjohHoI29L8h9B/h xGfEwaGxJSBC+7H/JUSNQXxSLLCgISUhziH7Uv98An3CUPErgdAEK2ElwdCgzlImQSXAKuAxUiah 0AD/0sC6cMixpXEbAXrxwuF+wv/MESqg9tKc0NHhJVHQ8X8D/8xhf3DM0CjhJeH7USuBLET/hPTO ktCg0ZODMNAA1jN68f8tUtOV3EMUweJwLqAu8i+S/9ohiRTV14o28DEyMS2wxpD/2HHYcBNh13Ey BDFCwCC1kP//4vAx1fFCs+wABRHC49sI/x6xw0IW5LrUFaP+UyHiIZP/qATV0Z1xxULGgXF1UkG8 Mf+8x8iT3PHk2D0HO7Y7RDz1/zrGQmSWl+j45yjmGuZJ69b/6PU7U0HX7Inp2kLn6+Y/Ff9F5ELj jXHzWO8V7yWiREft/0k0SH+jtUvdAHgAuO+z/wX/8fRV4hYDGFG60hSw9FJPwPXC0N7C0Nbl0fdh s7FuQf/9cM0BDdGIsO3wUxJSAlIS//gBxBDUgP1wVTFVMVTiUOL/KNJVIfux+sFWEwLFr7lWAv/H Ia40++FfF1ZI/1Na9wt0/7H9XxlcarV/Wn+y5Vs1jPD/AEGzKl9fCly8PwoPDJlmUv++hWXvY5ZO 0uGQ2iAtsEOgor0mgGNKawFhxiAw/qX3UOjgbJBpxvaQagFqANtqssSY/2wya4OcxVBsAf9sAxEB ErEUYE/AbVFQQQAi/+7g5AD74PrBkkHz8m9jyTP/9DH6wW5iyRbKavQEV5SQxP/I9BZTNrInkRnw xgAZkRrg/t4a4dqSzgMas8BiFsbPz/+PpY+UdxaPghdD0lQYZvTT/x0hUoKTJI/ErMHIgj/BKCH/ H+Eiga3wKsAigSjRLAFVIf0lcyn7sStBKsAlASUgKqHfJRAl4YPBfySDwDklwNlA/yqwgBOAMSby 86EacYHxfPH/LZF7wSJhKNElASuEhgGDkfuGAfcDMSkRUTOEuCuy2TJ/g9FRYCVTKiF8suSzLpBS /wURwGEbZi5ClgGNYY0EjKT/jKNWZFhJ7gAjoBNh5UKHYv/llYyRjJQMs7pGC0C5AuUh/zS3IWQh knGDyxrVoyHykhH/j7HqxfXQ+pHIM8hz8+OG4f9WEmcycrY5clLQmFc695T2/5e2mtabtz8WmoSe SkDmnmr/PvJDJp4I8nZFs5tWQ+ZHBv9Dz0RGRJJK3vr9Rgaimk1M/6N0ACJLzQGCokGmmV8Ysmj/ VjvtY1aCz4SqUU+xqmGqsP7eq2DsAK2AUcEwoavByBD/BYKrwVHxUfFtgU/hUuGrAf9Q1AfF1mN7 se0yVoa2HwkW/x7zryJddwn8t2ZbdrLJYGn/v2UJ672vXumzyrkFEoq2f/++qWBPFtxmVOWiF51m ZBiD/3EBGiQjkRpVzMJPwD1wI/DPjJCAUOwwi0HG52mTxHG2/8RTHVPeHbUeWq0fI9/GAMWRH5HF YB4ApcQzc3D/bLCOoHEAMeAGwFBBq8ALU//pdM9mkvXQw5HRMNOtEZMU/5CS6sTIl8lpVsJOQzRC 22J7NPDOQed04SfzdHF01Of/zkAbVZK3cWMqVdD307PTXW94ESz0UfF7oHuu0YLAc/2EYGNRQILQ fcDIMVwiA1P/zGcvZ8tHerHWJ3vyMjSF8P/c4VUhg4KCcH9RUWHZ4YKQ/4DANCLaYjQRyBFPMyBg dHD/mZGQlMmR1iGEYYPRhVTf8v+F8d7RNvPYkjIzhPKDENgx++BBroBK6yKLMZMwgiGDYf/WESUB 2/GHYnMx6MOIIZFy/0Dw5nSMcuYkYTK/Y3qDijT/DjisglaQklE/xQATAAKy2/+g4WFRdHGO5ekn 6h96s0TC/3vBhuHWIQUhe6FVIVOhCKD/e8EFEgUh1fSG8aETkOIkk/uJcJWFa5V3lXUIoEjq7r// mJqYn50F9uXzafXKnIL2yv+ah/VEoUjyvPpUnSn8gvwJ/4qxifT6QqJk97alXqQcWDj/WT/921uv pwTqYq9Wy7JxgeDe3ufn72tgBsDtQf+sJAUxrCStEazhqhHBsayx/613B/V7ca1Ay9OmdbRvshz/ r/m0DrPkt6O0/7eDrKG1z/9nFWcpt/0SuLPluZIUBo0h/6dlupoJ6ME0b5kW2g6bFi//Fz0YiXJz KXEbwacA2OCIkP+OEOhAxrDGc8QlHg8eXx9j/8ZxIEEfIyBhzgDGsI5wxyT/BEEDo890kuZ83yoE yHF+V/8QkY/Ef0aS9epjAEHNQofx/89BJ+eCEs8SJ9Io1M1RrUD/BRFGoQURRZOVYZIiy9Lt0f8i E+3DIWGpwwbhrLGrkTfQ6mPfkFI3MEI5QNoA2OD/39AzEBxAiBE0QQUhEIMlw/+JSSWligbLpUOK RKPWIggw/63R34LgAo1y2hHadN/AM9L/BSThEeER1mGLZMih1fHXQf/fwd4xMyEzgzfC34E3ETiQ 393y3CHYcTpxRdBj5VGCsOsgkEKw1ifBxgQwP5Opob+U2jvz6NIv8ZmRBhCE5kP/PQHlceUS5nPJ okb08/N+U/8mc0eU9+eaTX5kRKEQoUKE/+6B1DE19JjzRFWEU0XSg+L/nsRGQWHyYiCEA0SUNlSx EP9JMYTR/pLt8tLDnUXvjO+j//BW77NRWExf9Fb2s/FoThT/pa2ZRPL3ThL3VPQt+TJRzP/6U/en VKdV9KxqUjZR9vzK//8I/uoAaQBfQSxi2bRfY9/vZOP+o4V07cStX8VAMQOD/wRBBuEEQWEWRjFh 8keSZUj/ag9u3A4PEha8fMDkEBwPdP8PdQ+Pce0STcT/53XnI23i/20yFYhxEkGCGgQY78K3yIr/ cnUZd3Q1GnXNz+MQGvEpwrMEcEkwnDl2QOYw3naj33bAIKEgcR8jeIXn0eIoAP3SE+/SQtJV0gB6 Yh+Bd3H/04HTgyjAIICCACEl1WKFY/+ABytDf3mAFXvB/pHsVCcB/ytlKxjZyCoBoZN50CfJ2+f/ NZAoAtzSlEA1kQrUQ2F+Y//sxTFDRdAxgWEgBNF/AfDg97m0BnKHURCHwDlAjmGHcP/hMYgj4bLi I4eBoCEltuN/v4lV7XPlBepU6ljqloxF4/8IgGEgOJCIMY5h4gE0kjRB9wghRKE1w5SS8V2U/pGY gf82sTehNyA5UZJQM8EzsZHh/+rxOrAyNEdRo9GVkizyHKD7KzCTsedCsJRAJ2A6ISoA/ydSNWDv Ae0lO9DvASyxI7H/MWB2UDzz8OQckByAOiFIMf8/wzFhPmVDw4tF82b/w/Q0f1gIQ/KZA12BQrAE cCdivf+fVJCBSzNJ8UcynmOfQQdg/y5ACBIx0zHhOeFHxAOUKgH/jzPygivh9lH7oSig/AMEYP9d gUlHo3JKRUvVSsb+iaR1/6UXS3gBD1FOT0pS0quaVGX/UvOtGgLIBCZUzQg2sGdSov9ZpQn4V1pX u1uLW5++XA4q/7V/ZPZidbcXwfKJlS/RKzD/MDHgNCQxuiTfgfkERQGYwf8Sprg0ZGrG07LpZEy2 v252//SnZ6kp4ymj3ZRo9MFKw7X/tt5r6x/8yCP0tW31xxXJBv9xPcobbtbEp3KLcvvN9MtTvyfj J6d0YisxQnBFQKUuIN9gsHaAdnF50XnS1nqBeWX90fS10sDSiNLJ0fF6BHoy+9OD03LO1RBCcNVS umJ71//V3Nd25KHeRBM0hUKWYRQh/xND1t7WsnviO5GBhNxwgsN/3IGDUPvwk9CC44HigxLO/8px FUJAUX3lhWJ7wcHx37H/YVBhEf1RTjG5hEigFACOQfvg8IehSoeAO0M7NDsBO/T/4TCG8eUW5CaK CYt6Q6dD2vedpqPRRLGEYRCQoJMQPBP34XE71WHgc5yx7YGWQvM1/5BDngDr1JEgkTKNsZHA7GD/ keCR0OFx6HBGY4w07wPt0b82YKHwlBCUAZQC2ECM7qH/7wTtU5XinISWJKPRkEGW4//xYvFEk4F1 UaRh32D3MI+w/6NyTNKEop3imKP+Mv2BTKH/32CeIE6Rj4CPsI+QT1H3wv+DkV1R9oTvwffi+cP3 45iA/+zRm0VPAffChKF2MLswknD/jOFMYaHClgKcolCDofX78NeUAN1gXnDWgwDW3TCDAf2DUa0B bv/HqAGPkKVZAYX/AESnN6NEWGStCgK2B1aaVf+uGFy2rVqvm67nqmSvF7Br/6+6CqkKlW3jCvwN jmZKC7L/s0+y3G5THxu3HGtkxdIc5P+4Ep0U5HW4gymQ1aKGYZjR/540a4XDbG+rwVu/Kh0YC4H/ JiYNgiYnHVyBEbjlfCXCQ/8c9L/3vbd4T3j4x3XIR8dW/8mAx8N753nXyi8nSCcozHv/fwnN/CeG 79DPFZehSFGh8fXtQMakgK3QEAgQ0rAqofqUKuOcKxEuFywE0sGGM38qUIalhlTR8dQx1Acrxdb/ KmAvMvFw1ZATUTB91hXa0v+lUN4j1ePaJNmIQAQvsdkf/9YS78E2Qdvn3ND74TVy3WD/0fDc5S8A k+DdYTGhPTTXmv/X4fpRmIA5YN9w39E88Tzxvw2AuVANgDrx4VPoYVrhUf/ic+ID4fBFYJVw6ICj 4T1F/+MZPf8+r+ZH3kNA9N+RUqHfQeLhYZwl6JFE0Ur2UVVh/5FkQzHzFEFRRLFFUUUyn0D/nzLo 0eqwRgFFQJ8iRpH4Yf9SkFAQrvDwUfBR7YHtUTaw//vg+9Da4e0hohHvCO/QVHb/8EJKgfC28ZXx oUvVT/G7MP9Mkasw/ZD3000sm5FOk1Mg/6h3ppNRg+LQ5fH78VVh16L/7oGeATIygoFUMhKkQCQK 0X9P8UxArRL3kQYRVHL8A86/rnDdYK6S9lHdYVXB790wFufdMK+Q56/x9+/v/66h/ddaeFnxWK8D o/6yAHv/WrkCWVtVA9VeqQK/BOxcPP8FJgJCCCK2mwLaraIJE12T/wfavVZkB2AXDNoJ1sA8Fzr/ DL8XKcObaLYSaBDJcmWZdP9s1en0ENmR0wvVctoeT2rr/8uPfLdv8zkC3bXZVnYiHAb/kcJ5N2mv IQXN9tNXzeZqGf98lXuzIRahQSEGzml37CbW/yXYIrQm14H4ftfcCoKRg5Jv7SBQoS8hbwC1PLHw 0N719kDvhKD/hKGFAYUCLbP/iDSGWiqwhqYtIythLgo10Pb34sHtQM4UAG4R7nHPU//jxM9DZ1IF sfKhmVMv54wU/zPb5LM39IzE6AVIsqIBNXT/kAKQoTVRkKGQoY/jNyQ3Iv9KIjjy58UwF/pROjGT oFGx5wbhOoFv4bVa/ZA7I5Yxf5WhlXKcpDxxlkGWEUVgUv9PoRXzl+qX5RX08oU/X/Wk//STQRWb gUG27uI68Jw0QvJ/+/E2oTahVWH78XLyUVKE/0Thn6FFIJ8Qn6FFoPl0RgS7+jQ5cFpGkaAxRPA5 RpHz+1FF8EJSRMCmcDlw/FD/buJmU0xBqqFVAUnGpOFcgb+kpEtnSzKNMYIBTJFzFRD/U4Gmwk1i pxpakk7RTtOo8v8CQlMgT2SpsaDBFjH3My9A/3Kzq0L/4TjxYjA1IZ3iOJH/yGMv0xYEFrLo8lCR ouGqYv+Rga6SVfFV9Alxr8AJwa/i/wnBr/FWvlclWgSzcLDDtiT/DGex17UKtWcMx1s9ER9f3v++ A13OtZZdZhMKYaW+5mF//7zlF1q+1cD6aKvChMvpITH/HyNoBWge0e/L33MUcxV0pP/HVyA9cssj fm++0+px2n3S/9flfcMoVaXhjbakMykyzxT/jsTQ+Xql1vYsDctFeQ/VZf9zZXu01YXXFX5/fOfZ h38s/zQ021mC8X2xNXI1VYLjggBfSFGqkapQSeDdUs5vAL338LGoYJ4QxoSQOIHesYUZ14iRh0He cNamgIyo8Kzgv2nwsfDtYJRxlHDS8L3S8P+QUYVQhOKEwOKhh7GJAK9Q/4VQ4zCUcImik9FNc00D QHT/5XSKLY485ufnRfPjQ7GSZP/dI49GSBBDsZAS6WOPUesE/5Ew6ySqUaQidiSLweWEibH37ULC cPcQjE8g7fKUYeNR9fXwc5TASkjE9qLwIPbR/0mCSfPv4Epim4GXeZdllxX/8gesI/NJZWP0SQHT bqGbqP4QnFeWsJNxVZH3YVZBN1H/rqGX4fPxm4Gf0voAnxL7gf/6AJ/Bn9WfkvsQn0Cesfixf6Ax nrOfMvnhn0H5EZ9BY/9WoI1y/ROrpKPFjvGUQamw/zVCoZGDMVkmpdQD4gCgrVT/mxRbBJr0sUKt ALQSptBcof+mwbQRs2CbwKmToOGpsQWk/3XUBUQHFF6D5oKeMqyiyTP/J3Uqs0LSbgD+AQf0B/Oq Uf+uQwhirnFjxapQDzSxd2VI/wIhZkMPlGTvC8UPNQr9sYX/uRq3+Gq6bGwTpLZwEwNt5f+11raL uWYTWhL1F+pxVhjF/79qcqvDOsAJdIvSwsDcHiv/eA/FGMtSd7/E9HnqHdfRWv993CNvJxnM28y2 JPsqowYi/4sEJ3Q1gyeU0n/TK9LfLJf/1H/ZQ4cywFMtONmn2dkyef/b89lJ3ATav9tk//KjYNzi f+khNyLdkKqRpAHdtANQnH5CVsE8kDij3vbiQAQQrcsDUDqhpftASgifEPZw/imUUu+wlOCUdJaw rXBDQL04keekoLCg6pCQsN7pEP7e6UCWsD0x0FDkouUTl+X/T1HleplG7LOD8z9J5upBpP/HsVsE q0GQ9OmEQ7LqgTvA/0NV6uSqUEUwrpEEcirFg/Pv5NRGoUgxOmCcrXChkO3itztgOyDaEMY7obTw xu/wd0iw8IDwcjkAcK1wUoCU/Vage/Wx9bHw0U9R5aHIYv/IREzG8/KmN0IjTgZN8luiv6gRTtb1 L/Y17+H5YEopsf+vMlGgQ1FFoa7hUiIXMAEBvfngSqyxUxH5dO2ga/lx31QQ9gFTMlMx+sBjVGKt If9Uc/lC+5BUQfshVDH8UPyU/1JwWlBiEldx/dYXI5XABCD//uo11CeRpJL0w2BltS6mU/+n1PPi W7IHUT5yW8MG4VEx/0UwCSEI8bjfCKEH4ekw3YH/Y8MIkLkiCSC4kglRCSIJcv+7Y7skCKJRQgjC Y5K91mit/wGAZfVmNGfvaPgQVBAlwrf/brEOVg4SDKZvyGvrb19qxv8WVMOUE7tz9MlKc/Zxehnq /8uvHTgXHRnsz4UdG325fOj/iGgf3B5+098ep4CIjGiC5v/X+YI/gucoJBziMWYqY9c6/9wUhIQG 4jSz3cQxoiZJ1ML/MhYtWdFYLq6K/oxV39M0Nv/i745FjiWNTeaHj4U2sjaS/zZGM/H9YDcTuqG6 opFCN1N3/6CRww4AtThBAvA4YpzrOOCTNHM24AhV0JRQlKD/7+CUge+w+QDuMe6WlOL7QNsPgAXh 3jfhAmCl7WGiYf//8PCAX/BIEJdxKfGBA0bE/0bDTjQBEZjFP0WZ5Jqvg8b/BzO3gk2kBuGQwZ2J nvBEgv/3RlFznwAI8UWCRaH98T9k35k0nGIXMFEBo7FSAOBHoc9IAvEBurCQsO+MnvD8ke06UJyV kv/wSqOwlDCjoP9HoK7BRqFHQaUC8eOB5SIT/6U4pj+nqGqhqHdlAU9k/XDXU3BQAgQWSlagc0XQ RYL/n2JF0FGRRcG2BFKErOFUMfus4a2QWq2hrgFUBK+yVQD9rtBjVPGtE1USUxFTEQmC/1ZTVQBK wLRDV0CxUleSYrP/QzCzEaDBlcCy8+lEDRcnkf8+M24xDq9NpE02tRRCBE5z/6giRoFMQbiBElS7 gLhyElb/EwoSpLvSUTJRMWNzRZFDIv+4YUUwElIWghaQFwEWv7xB/5hhZybAVBmVZRXAf2jVag3/ aXnDwMAiGUlqeGt2ZrLCdf9u6SBkH9chKWp9yJfHpiSW/8rmbsXKWMglJojLS8kZKTr/zwzQRtQv cgJ1QdTvK6p6R//Ur4ckfWYtz3id1reAH9nf/389f2XbIzWvNNd85oitirP/zfk5v34r4Wni2dio i3Hf2P9ARUDmewHklY7/6XTo4vcC/+pT6wb54er0kYJXgOviX8BlszDesMClY7MwkLD3zqWV4EcB kkB7AKpw7cJ/lPKUpEh0lQNH062goXG1t++hk8H9cKWiAfwQtfwC//7i/1WFE/GG8ieXwwGhmQf/ mTqD5VIzDmSbeJoT+eGecf+fAJ7HnjOeIFGBnnKfE/lj/7sRukP6Y6wht5WocfwQZiB/VWCJ8F1Q tCD8EMpw6RDO/u/s0OzDkuDsQaqwXGDv0P/7oaOwpDBdUKmxTaFLUv6D/6WU/nIAzWBip2mgxAJG mIH/AvWpY6ShqbED4qojqhGqofdg0fnRq2HvFeFS4mPBkaDvrDMGga4BrOMpBrEHdAdx/wdxr7Gv wqnhqbAKoazwB2D/YxKuAQeQrsBjhGNR/gGw0fu30QOwY4OhC2NT8WYCqCH/nPGQMrLy6TNnIvFi peGw0f+oM7UeEKVp9REjttagtLfH/wUzFLUUxBQPbKi8pL3CBaL/niBCIFPBFqQXZnCYcZcWkP7W Gs+/wsBhHQgfLMFaxjn/H5bECcM2xlR2OsL6IybFV/8bwylpdmXIRCQmw4LI2se3/yS2JiMjdtCy zronZocFzuv/yVbQOyp1hwvNlzQp1E89xP81KzlU3LUvrJAxPRnQezF0/9jPOLje847H4hncZJDF 2vL/jzaPWNd/4e8+FDzPjqiUL//gpEBMP6k/+kEX5fbpEUOk3+jknIrqOPcgngm9njIFAb/54PEA RdDk4PAB7XDeV5D67x/wvUZx7WCsEPkg7XBy1gTAexAHMGEwYWFj/2KxrZH9saIiovJkAPtwzaD2 rfwBqcCUZMBKUVSgSwP/8yH7EUtUN8Lx+f6zTedPkv9dAfM1Tjz2NfGB9Mz0cQth/+ph+HRR4VGB UYH4gO0wq/P/UeNR0flSBWK+YQXgqRJPsv8SEduhrtJNoVYBn+KvVLMBORXQreftIrCRsqDOSvO/ wPCg56X4kOTg8LDxAP+jofEh/qOylP9TAMJZv2n0v1uFAiNU9FyktqRdM2sDkbcZYAjwBAMhBJII 8FILwf/50ROjBYJTwRVxBicGwAjh3kJeoAPgBsD+QGu7cWLB+waxYnNC/eBhYAbACVRigP4xCHFj gb1RCQAJcmJxY+H/9jFPcWTRZWELkutwU+QB9P9nR/oR66DpY1ixTUMOUWoU/xAUZ+PDMhBIT4MQ eQInSyH/Ekb5MBJTFpTG2sf7bvUVsP8VcVORZWEWRcbBFofLRMsZ/27xGvsapXPFdbt6Fh30Inn/ 0Gcf8nfNgeEhWBxV05bTj/99CieEfop5ShjhfTfX8il0/3aJfHR9NYQF1giD9yh3KWz/KGbbCCqv OrMvb4etO4/g2v/fuuH/MCOCw4x6jZuNr5k1/5LuNHrq6De8NHbq2YeZjAb/OvOVGZUIL6OZUu9H 8MaZL/+U9wyhQYSa/0KfQoOgIJ1w/0TznxaeFJ8z+JcF4UJARgB/r1Jm4LHBUaD8kaExm4DWfVdw tf5go/BKoZ5QUjD39a2A/6wA//whsHD8EPzA/VLA555QoGBEgKOhpAId4d+MgEqRpPFYYRlgjFfw XGH/WVTDo//2phil91SRDlAOQf9Y47NSp5MOgqgvTzJQcXAR/54BUVOs9FIIrHOr0RXRXyL/U2Nv khEEUEFLU1iSSyFV0V8aUFViJ3Cvwfux1rCRtfbv/EJXkNax4asQoGD6gfdSMPFgsgG9MoCykQil /1b//3Va4lrDZmK1hLWDtjRcBb+2pl1StzZdtVdQXkNCZTD+hLjRybStkV+UFbHFMVxh/2CComBg 4F5hV1C7cKHQYxH+UryQuJG+MGJwYOG7MRVC/2KAYjG+EWJBYRC+Yr1TYkL/ZKBKMMJgvwJdgGX0 uNFl8v9QcGvhT5Fn0WdErFDBMGcj/2fRwgJoRMS5aP4sw2kqa2f/TWFQsW49bIWtMHGZIcnJMX9v QW+BXxNwEWxUcQ1xP97/zgLNJydTegHOMydjKEYoBP+n0FdwKEN0OXfldYPP1ngG/9E7LP8oais0 1DR1gX2Se/L/3GTdKtls1EOBitnWgFXax//dONm13MnV+YS0hLaEFzfv/4W35V2MGY0qh+uX6Yfv 50f/jOqXAokKmkaXBUIUmDaPU/9CJJGJQ5fsMkOlRHqPt0dK/4sIl9qTKZfISNyZ2UHIman/9CP0 ovYBlvJONvWlnEb2OP9e8lEXrcMS8VGUUlv5heWQ/1YxCmGgQaBDsaD6sFZhVTHv+/HKMFWDVXLv V5CgYbHU3r0KAQlCxXBkwIxX0aPR/1gzDqH+smTxDiMOoallAHz/A8IA2uFBJtJoMg/iptkEo/8E gwSWZbGd8quDq6arYAZB/wczuSEG8gcDrYIHwbnBXeT/ptQM1qPweNAJcVQRjIBXME/BYJuA++D8 Mff/sKD/3QrQ/2TQZOKd8OdUQp3w/wxCwTAMdfFhDRNnaQ51tjH/HFIPVw+GaLQQxhDlEYO31v8S UBUhAVG/8VIxJEJvYhL031RgDdP/IaKxFdBaFyCh4P+88G9DvXAXA72Cu3C7QaOA/nMWoXACb7MY Yb5BFyFxJP+7URjVz8AZlXOTGiPlkfWx/xtiG0F1FJxTqTAQQg/SHMv/w2b/tXf9tSipYgSRyD0k 3397niLiB9IS8vdBrcHKdO//y03HIXrJz8CkYM/AgOWAwvmkYHNjgaIpkYFTgmKCQv+CJIN1gjQn RII1KZQqt4S2/4R4KEiFVYek0iCHyNQI1EX/NCXWpDAU2aUwIi91iq7aSf/dmdk4NhSLBdoU2zbW ENn2/zkrkYQ5PTuo39ncMubG4aj/5ao53Uk64V/v5T7n6WRC1v9LOJvpnY/pTZv2RaOfaU0D/zuE 7edJbzw78XfxS/Pz78T/8sZNFppFpfT0MU7CwaBOw/+ouPYeBPJTgKrirdOrQ1HH/1HyUXqq4Vdz vyD7obHxXxD7C+JUVdYLsq9CVGD4UMDQ/wgQsiNYYQlBWJFZgplg/vD//fErof6xWLL+8Wo1/tMO h/8NksLzw1IBk7TdulNcolyB31nkRNEA3V4kBPG9qsIFQv9fUQW6BhFf4QakUjFhk2GCv8mxv2G1 A0WDZ0P+wVJX0P8JoQoBVuFUEWQxYGD8EGTT/2VRZSFlIVbwZdLmsFcC/aH/DHFjQWc3WMEOhmh4 EJRotH/DRRB7axgRgW7AEdBr8BDqIRIxShZgWhnEbZITRX8S8spBBMD+gHlw/yG9cHPfyLEWMRYx F7FyARjJ0HHh7xURFqEWYRbDORYBFlEWUe9vdMkTcDFr8GPMsrXBGUD/GV4n4XSBGrMbZM8F7BEB 8v9ctBxzHJocmHfKHxwB8SAk/9RUIOwi5XzDIo4jUa2Q+UD/+VAEwSOBeo8l6yZXK8UrSP+Hw4Y6 21opyCrFiMIvB7MR/yexLMSMAonVkKWLdeDT4JP/4IUsxojB4ILhuDG25FaQp//gVzYWMJQ2N5Dz l6M0Z/FxvzLll6TpmJEmkRSQ5Xs5Gf/sRe8HlDyXv0KzlhmiZ6NX/+07o2SXB5uJodpCZ0Uz8O3/ qaREP5u8Q+OqY/lNQtUCo/+dz55575lMB0q6TVNOAqaZ/56lThNNFajdqKhPfbjRuPD/x8IEwgfi B9EEtMeVBbUFw/9to62CsYNXQgxRrlIImWZSv8BisIUKMpaxDSgHs4wRwP9rEFPxpQBY8jGwsyFo tLKU/w9zaiIcg3fXtbR3otACD9P/HjK3Yx/DGNEQQbSDoAMSFP9ewbjCXwa5tGECUkEbQLmC/1+T u5G7lG1hJEEkQV7BXIHva1EY0W6BsdB7zKDI0G6A7y3wZ1Bmgb4Zvb+AVaBk5f26APevYa5xVuE6 4GZiwH//sWKzhbJCDOFodmlZxDOzQv/Ea2uTa7FvIGwxxjLEMcax/2zRI7S7xG3C1JDNcWkBa4H9 yLFCvXBvEclBcDFyAXHzz3FCyyHKkctSQkKx0MjQ98ygcGFrsGtrsCVBJiBrsP8lUcyiJcB5Mb2Q c1Fe4XOA/3NzyCF0WD6wdXN1ZF2CXKT/dmh45nePD1XS2tB0XkF9Av/Yj39r1nDZy31VbNHPcVoS 39exfwZ+9nynMHXehTSA4f+HR4xS36Pa5N4T4uTbBTaU/41xNmfbGonl3ofett/34Of/O0k1w95U NbPjJzzG3jKNq//lRpE2jZhBGOlmP5+PR+gn/+YVRWTmKUQ2kOrpMpJISAr/jmfy5+0VSraYhJo9 7veif/+iBvTW8NzxW/cNoMpPL3oR/59rU9eb7KIKTQtLOqV8pTH/pTL+X/8KW3apdVxmXRUD5f9+ AQbFBtIFNV61BtVf+V5m/wUxDSOOcbDRvlDOoL3RYnH/CfRjMsGlsTTCE2fcFuPawf+9MAyhj3Bu gbJkZvQHshaS/8PydmTEAcykJiHMoWlDJbH/JcDNQGnzJdFqxcyxJhFrcv9r1nkx2BF+ERLyuTG5 xBS0+7opbqLeuyG6kLtzFcOtkL+soCWxJkQi8CZgH4BKxbDvIuFjMgPgvgOt5qDPcBVQM7qQv6De /7lwv6DO9/9ykZzwwAATEAhBsFJi4wpT/7EGDBLCRcJWdnoeIh4FxNK/eFXFUsU3vYAf5MsgUhKh 3yDRXiN90iFn15O905EihPvKwCMAIcwEI2MkEMoDyUH/JIIlUctRI0TL4X+HyyEj8f0mE2PTAc0x zXPNss1yyDH/1AG84c7EgvTPg5lRtsHQQ//RSNDF0lQrbNG1s8OztMPh/8gh1L8ufzEHiqfW09bx BUL/FdPZDzOCi1jaktxTjsbcAv81Vjmb27I2i+TUNjXh4zt3/924kB3ipUmiNyXipuIF4bb/lsfj hjuWP3WYCZlKPBblxf/kVeuyQXhAmkkH69ifVkhM/0gPoExL1faX8S32mf1K8+n/9DimNvzV9cn4 WVw4/QTto//3I/nh+bT6e6lKUbut3K5Y/6fa/rahMlrE/Zqw1+lRAbX/AZUCNf7oAigDJatkvDED Yv+24gRCetFgBl8GBPW74bk1/wTvuBdhpD9xDFEMJMGCDMP/weVlFIRjvba+lhBBeSLEof92wmYi DVO88h5jZTYfUWgk/xDDFlFqA8MzFmHDc2oizUD/ypDGgCYganLNQGq0JsElsv9p08+xzhG3k20S FHkTcm5D/xN4FHMVUiE3FrIfIB8hyoH/FuEisXnAEDEXwXQxfEAD4J1yYZQhIHLx1ED/nHNi/O+M E0BzsVdQGjDMEwn1/woGdcJ1dLzpHRcMlHfSwQb/eJIeoni4H4AXMB/DfUBxQP9l0CCjepBtMCED FbXVBAeC/SJie3DhfpDUAX2Uf3Ekgf9/EX3wJFF+oH6xJVHYcSP0/34x2YTZ9CQRJQAi4CYgF5D/ w7ISsSfhgZQoIhxRGtGDUP/csQSQgwXcsYPUDeUqpCqqv99oMiOGii1zKjQuIK0wAv+Jjy+r47vk L+U/jZbnis3Q/2qQjuHov+kCj6HqMjVVO2b/PHOQAuwjOoWQqTYEPPc3uP839TgFlaQ+FTxLPFmW 1fC4/0L5mJSbmEa3nSpGV0UGRqf/RPWf8UbrnT9ClEzkSbFKq/9XF0nzTRyjqPyZVmhViVV///0F ABYA/adXAPtQwq12UnP/ADlP6QB7rXVVxFU/Vq4CQf9bPaXaSKJZyFuGqdla1rQG/7chGoAQUrby tna3sHsSXwz/Eg8TH7h4YYOEIdE7Z+IdIv/eUoeWh1nhdb9i0OFlozpg/xX0eBN1wWb1FzFkM8OS KgH/KkOFsdsBasSBMcMjw7XDc/+EIIQTKhEcRS3ELQOCIcbB/4HgbLJtI8dAx/Nt4tTh3RD/bnTI pCFTyPFvhIwyKbErs/8r0bwyZaA8ccKQYxHOUcwS53JSn4ApcM7vzVEyYM1z/21AzeEnss5SYmHP IWModcH/0Ox2e8BkwPRh4Wb0v9LTB9/K8NOCecB6QX1AQoTAbLH/1MLcAXsCbfF7cy8EMZFoEbfK gdQxeeBCfjB+YUJ+Z/9+YX5h2MLYpH6ggHTY84Ay/9exgBKAMGvUwtSCA4FkgYL/aAHgYYK6tuDc 0tZRhAWHdv+E+GTzOYY5SIT33jThwcax/4r9PI+KWIo65waM+kCb5vL3jZKOSOwWa+6EjrVDJ+wj /+lC7CSP50WVj2nxbZiD7lT/l1WQRuzVm7rxCvVWnPadGv9Mn/PbSrieeZ2oUAX7iKFn//xWUilT 9VcWoyOhNVIZ/Ur//manXAgLrSWtPggPq1Sr6P+qRgl7BcS0nV6ltigJTVpP/650XNha3aXqC1+w 5rN9sif/qhSDoLV+ttEgk2yRg5G2wv97BLqTurGMQblqbN66Zm3I/7sqd3gXFhc3v3G9aRikvbX/ dlQZo47BwLN3hNDDeSF3Ev8kwnRSyrHhxBx0hVjfb+By33jMebHgccZiNZKt3RG3wf/HJSHEx/Yi pyMDEbHHoMmm/9WRgdF4s87Bz1LpAKHhKPOvKFF/45qgJlG9aODezJD+5ydWMEAn83/SKLHO44Ko /7y2vKG9BIQnKiTR2Cvk0nN9v6OMc9HTIdOELeHY8Fr/IHHbodSofgPVkdTR1ZHVofvWUcWwczHU MRExMTFCNCD/2JHYUdhkiBHWsTGx1xEywf2LwEqNgdjx2qE0UcSCxaH/xSA6QcqR3CE1tdwIqmHc 0v9o8NwgNsM3pI6hxNHDIhvz/xvk3hHD4Rxz4GjgRHcHcxb/4hHM8D1WPvLib+VfP9jl7P/nj5sW QiRFUfDB6UGc5OrE/+1iRrmddJ0UndTtOKBZ6yH/73if++6lRzSfuPK08ZZUh//3Ju1STxX7UUd1 T2bz1PtT/6Xp7bL2OPXjUhL6BU/JUTz/9ypScvrFUpZVKK86UgQHOP9VRANdBlxYmw72WY0QxGK7 /wj8A38Ej1xlY5YCxbeYW273AFldGASphGZXCzO+yL/M/w+lZWppKMJ3afHDlREkgKD/aoBuY24q xb/GzxQyigIUvv+GMDgh0oLJ5dZQFtUW4nZj/xj2F53LBIbB07AcAXAFK3P/JTIlQYaRcxd2E8sl 1lEks/+UxNFY0i8kctNEehMRUdwh/yDiIPaJIHvze+F7wCFAfFD/1hHVtCMBazN9gX3ke9F+Qf+A sODh2JIlAu6g+1F/wYJj/4BE2kNpQIpAxPC+8CelJmH/gDSCQe2AKPclAilk2RIqBv+Fc952hecW 4HPRzdHN0YzA94qgioAwsGtz0eEi6QCMwP0t0UodQY/SLoEucIhxLwW/iXNrNyABioExwYrjITGB /zOxMTKNADExM7EykeHiHdB/MaEzwjOQMLGKsY0AiAFK/4tRNEEzUYqAQ2A6QB0B1HL/NgN6gjwg djE2hJC0kLJcsf9+8Rbg6MHLkx/yXLJ6EZEx/zdgG4Ho0ejB6NEdUR2dHiP/HAKOoSRRPdjwm0Jw PYs/3//zb/KXQeNCFj1TPcGfhKFh/6MaoBWd5EOGpMaFsaP3KsH/+magUqh1pPVOw0o4podPJf+o R0qN/lhMdKo3T6NNuVCs/6teTUJORa3BrZOq4q3EVXf/VIxWVQxWDQEKmQqIXvpaG/9dKWPTu7QM imNrESIOjbrh/8RDCum16l0/tpde2LmjtpX/FD4RH7Q0aEe6CbRWZefCKf9mBCiQZKjC1cIntBRp Sa3w/2jxHVJqIGnkxHN64shjbNb/Hu8gVmwTIM7IVCBIb4TKFP9wQ8rGcLfMP3HyzMlzpHUi/8/y cGTfwigE0QTLwcrUcTT/0QYH8CsU04nTeOzTLRfT8v+RoGqR6dOBkHsJ1/J7Y35A/TxAzntCfNx9 5YnyySB509+DIoPz2NJ/rH/EvdrB21b+vdvngq7dcoOLN/ber60g7+Dx4DTgZOEAc4cp4dJ3gf+P 04iT4uOJMeM0iQKKA3oR/4qB5dSLGD9W5aSLwT6E5jH/5lCNoUCA6BCM8edhjkaSUv+VAe7Rj2Tp lZAzd8GQtdSC/5GS6rFvsYqBLRR21EMCzbH/ioBCo52A7lB2R3YwdjLQIf/QIe5C7nBJku5QliKZ D0q//0vOm2qar5u9TsWhNPbm9tP/+HX82FI0oWRTWAFCBCL/hP+haPqH/5ahyf3E/Kidof3R/56R ouJZA6Z3WhqnxqeFAHf/AKemdKwbXhoClrBjX3Vebv+laK/Fsny4Org/DL5k7xam/w3EufQLi2gE ugoVVbm3t0j/CjZsDbxTB9MGQRP2EpllP/+zC2Wft4Yaeb93GakZCcLl/77SHErBVMSBdzMd45GR HmL/1zPI6HkPH7h6XHlfyQmTQf/J7MsiJH3LmCqFzQbKsEci/+BA4AGGA35lzvSF0Sm0KYH/ftTL 9JVk0ZsrGNMGK3YsVP/UA5Eh1IXWINZh11LViuMA/9Zj1ZPXAx7B1sPX1DHQyVH/1CHYst0QKPHd Ydl03BLaGP3Zklr5EPkQ2lHqQMPQ2jX/3IOQFjeEkSPeAt3k3eU45p/OIt90zvHg8eDxGCnlAf4x 5TDmYOAA4VTgZEChRVHf4nE8dOJxyDQ988Y80jFC/zJyPoo/dUFjPuTngUCUQnH/5TDlskJhQmI+ wOVD5aLnsf+cwSbhQsGIY0OF6iREgeq4/y4R64PvUTrx6tHp8i6Q5sHv5LFGASmB6tCt6pItIizj /6BCQ4LYUenB1BJFMRpRRJH/RBDwv/Ovph/yavYlp//1Zf+pxlOE+MHJ0PcFUORVBVUW/1U1+l3/ lfqVUvf8WvuU/pj/+TlW51tqBDRap/jBBPRbDf8CLrYHXqZf7gd0BfW51AbM/xjqZfhkXGreEgi9 d27pCoj/Z/VrCWc5wPehgQ55w4e9Vf/Eib4bbPYWpBuNDpoLP72v/w1fE0Ua2cdFGboNIg/SHTP/ GZfOts7VHbF34XdRl8bkEv8indMPITl69B+v05t6833v/36VJNMnNOyChHM3gYDYKnT/RyHgAIHx fbEoXjeRKYcp5f/d80ZkhojffyyO4MOIZJ4S3y7TinIvaX0gLxC9SkAvY/8w0YvxMTKLcjGyMceI gTKzf5HiMuHqcDYyjjSNo+fEpf1BUFqUcJyg7CA5QDgQkFj/kDw3T5FmOTc4pTnUlDKUwP4QlKHp IZUEOUA6ZEexQ3H/oyGXsTx0fVGm8SIyMWEesf99Ay5RoRGg8ZRwmxBBMT+G//KyQmCUwJnQmnCc kaDxQPD+Sj8x8rTy4ZyhQFE/EPQx/kJAUUKxSNFDMYhTneMuwf9ENClgRLV4Ap7SLDFHJEjR9y5R hcGcoForMkTwJZNEY4+F0JbB8cJ9IO/37/yg//yx/QKm4SNxLlEsMTxxqQT/pm1OTwBfAW9P+qeJ qcVRE/9RNgVcrniuswXZrLiq5Fbp/1hVWApWVwjSq4NUqQv3srj/WqgKBq/yDohcd12ZXYVgP/9U hhJoXSG05RFobZJyjGLi/2IChaFidcAUY09v+GH1Ygb/yp+9b3SWZ8hoCGnFxSRi4v+/ams/u/oZ hGpmaQfDY8X//3Fay+VzosyZJlt2hcymbhD/dSPPE8270JQbZNEhd7Q80/99cdIzfE8s33sFK7bW 4i64/y6YMFt9MUchOaN92H7bf0v/NE7XtDuB29GC8dxhgpZJUP/dMoNzhIMzZzdUhNSFZqPh/4W4 jLGG6obhfbGcsaN0d+H9iMK9iRKJtONUihI9AuNF/4sG5PGLtuUR5BGIwIyx5uV/O7GOoZBQlWDp oehU6vSl/ZnQY5TBlMGU0fNQjvCSA/+QcZE1kOrr05Jd7aTto0bU/5PylOHuke6RlGGUMe8kNdH/ mrHdgYiBlkjx1PFzfVHwof94dJ7xoRGckZmhmRGa8ZkS//YgnJHy5JnRmdGasfNDmaFvnAGU4ZYA +DKUnMCdMXP/T7GcsX/x9tH3aOKw8lE3Mf+eg58DiCGHgofyoMHdIaER/4yxnKGHQ/tC3YfyUaLU 8ZH+/1av/QekV1gqpmqpxai0/wKIWlqpxKj2XW6o8qw3sOL/XyetOgamX9VfKayXCTpjnf8TiQa0 FDawCmRqswywLBMX/7B0ujdykhlVFdMU1BlaGV7/IXd0yW3vx1e/rXGaHQlwaP/Ngx0uvu3HJMz2 HPh3n3iv/x9fH0wiCHPdea/JW3KDI+v/JdjNZs2PgRspnyWwPQArQv/SE+Tx1rvWD4V+8UPW5Yha /9OahVstYzVyNzDYFjMsOFb/2ZQ35I6NMhGgwJVyNjE2Mv/tI5Ay2cHdlDiG3kWj8d7mfzmU4OQ6 tZQ/3zHcIZ0wa/+dZkoxPOHjGj2lPkHketHj/+TB5eI/xOXx8HE7ouvT6tH/m0RB0avA6pJClOjB 74FI0e/2YfRBQ4FPYGNEd5xlRUn/3JbtaO1IRpZIAe7xSNH0Uff2IPSwSQWMnPH20LNA+PH/ViHw UUqz8HGFIuXQP2Hxl/8tMfAR8oL18U9gSMD0AfMF/6Ox9AHzdE5h8rFNQU4wpyL/8rE7QSKhUfIf IDwB9hFPUf9UkfbRqeJR0+Ky+SA3QlKR/6yz+XTAglOzNgPbwt4RIzF/VSI6klUT4dE8obAS/kHW /Va//7By/OID+lmUAg8Cvf+zj1p1tE9dygw3CZYFyl/1/wgXusVexWOGYHW897xsBkT/Z5Jl+mX4 Es0RFWN2EUURif9sMyhxGULL5mp9EcUXShYk/3CyFRolwiHhaqIlt8aZGdr/baklxxjWf+nJJXSq zn8bh/9xys73HcV0SiK1er8j38mI/8rrfkbRGiSacUiB1sjVJin/KITbNiA3gnnb1iiy4nNKQf9L 9IWOLjbfvoXP4i/xgYk0/4k/4XItUjG1i/cyWTgZ57j/n8EzZJ/CNYT50KOC7OAx4f+QZO8h7RGR 7TP1jmFVYzk5/+2POpVqwTlS90AEwPdAe5C/96GWMTy4PnSZYT3jrT5P/z9UmkGaQC1ghVGFVDqx n8R/m3NCsqNRj+Cb8UUmnNKE/0yxTXFOMZ1RTgHq8kUcn8b/kFE3Eq4zNxE1wpAERueQMfuiBJzx UlPQSST6gkljj9H/PEJKL0s0pNFLxC0RUiGmhf1M8BBNcE+BTXSmsagBnVH/neFPkUmxqqFOMkzw TaEDQn1MwTkEIE1QT1GowVSQWv83MaOzUuJR86wSO9GTIjuA/1MVO3Otof2CNzBJsaaxpAH/7NLv UvVkN9IFowoisH+xg/dLYLIAshHv5AFcr1jSWND/XV9bBVjWt6q3r13OutwyMP+5Ml7mZ0VgmL8j vBS5El/p/2FWZBzBxL1GZdnBSF9DvwX/FkPCacN0as1rV2rzhJHGxf9sdoJUIAxuNm2aJc5xn8x1 /9ame9Nzj8TS3aWBR3LWqjD/crQqg9M8diZ2RSjYfVl5J/8rd3qqz/Z1LHPFcxeAySo4/yuczuci h8QCxZE0AoNO1CP/J1iBHCt0//M/gePKOL85z//jqjg6iRL0Ajx/PYWKv4vC/+abjH/oH0KVQMLp olQR6hP/kDaQUp/BVYORouxC65GONv9FVAdU7o+Th0h45bBJ4pY1/0pzmUDegfF2l8XegJhcpaH/ mWKaBpkBhVRSwYxDRXOe4/5a+mL49PhlkDEBoQGAqCX/nPA/4fYgwyD4TPvBZ/DsQP8Cwa40+lOu UvchUeGgJ/lk/6CGkFKQM/pynPHsEaoCCiL//jCkhjgD/1Olsf/RpgSWkPumhFEjMQICWyEEIKsB UVH/nbFR4ffh9yGokAMSWrRdhf9bUlySBHGrQKGhkFDwEKnh+/BDq+G9BWFXoqyWrXEGg59hMq3U AsH8wPAgvcZHAv/S8K8kRSIGsgoSljEQoQq/9v/f4bHz7xFvDxQQnLVv/7T8aKS3X7JZwKChcO/w E6j/u5W7qhUVu7EXNbrXE7MXBv8bo7kgv6a96MBnvBbB1Ro4/8ItwTTD0h0nx6IdYnd9N1P/zMEc pB9HyEPaNSEnxXczuP93dsilHXPGaoB7IivG5TMp/yNbKovPTCh4KpmBW9PJhmn/MrWGOtQezBkw JyG3Ln7X6v925DOaM/M0rCbo2tiCWyzg/yUQ5VQ639/Rki+T/5Ms42r/39I7/uOPmJTlspnE5fpA 4/9A2ulEQT3nBOnU+uRD0emj/6xRRXLrgkNT58PsNkU1r6L/7f+iT++z7FDUMf3xpFJYQf/w8d6T 8dPxxUwy8ndNAf+Q9/7xpvKnnNYF8ekUT3T5Ad/8MfsV+IMJUVqAc1FRAXH/9+EIYVYEUhP49fzB RANh8P/6wvywrUTlsP2x6dOp8fpC//tH+6T7pFb2+kL9gUVRBaP//jP+VN6h5TT/dljTAEFacPv8 YAPjSvdSXiC1FASh97H3AaFcZAPjQl0lAVMDUl4j/1GAAaFTwujhBTPS0fAyBfH/TrIGZO7hHtLZ MLsmrfQIYf/p0f6Q9KFjFUYT7JKx08ig/9LwD6Fkv2WyC/oN3A3/EJ//w6/BK8U8EnRs0hTHE0QX ZP8UBRQWFtrJusklcXMW03G1/8v5FRV1hRoUd0F1yHYK1wX/h1fQp3bXd5p4sR1lITZ8Rf8zxIkZ fiokuH5o1X7aTYrl/zdUiI03J92HMqg1InixKHT/KHYoNiqc3HbdXigcKJjQFv8uO9uKgPripyk2 hiaAdiOW/zSbNEI2xI66jr2F4/DxWTT/PXPr5evU7JqYw+yP7lTt9v/tpO4Z8Ent+/BK7yU/s5oz /0CDmt+cTEI0m6hEtEPy+uP/RFYTMc5Rn2ObwZ8BRnFDQ/+gwkak+VSij0eOBoEGUWPD/0pBpLKk w0sVTHSVMEtCTUB/kZFLQkzUtDBNXQIVYqDG7/SjqTNH0KpglKnUrEmpwv+2AarxU5FWYqoUBHZP oq4Hv1QDXGG4sVzBWuFecFJa4f+8MWIxBhavmLBl97OeYpoQ/6RBV+ZYkrJxpSOzUpUxpyL/DLGz gVoxZABb0QhStwIIsf5aUYC3EF4gW9JeILXBYjH/XJK10LeCq3O2Abcht+JbsPerUl4QWuBCuTFJ 0V7RX2T/ucRH8f3RYUSGEkjBYHFIAf9jsLFSVMOtYWKRY4O9QElQ/0YXYKJkAF8BYXGnIevkbAD7 azFqceeycb6xanXBj2jO/8JqaQ/Cv8D8bANt1nFSbjr/bjYhOMfVx7XLhSPnIRGjYP/JRSUzcSN1 A3WEzRZFMW33/3RTduOGBc/GuvBgoYmIz7X/KxZ2Q3SCesl5P3vKfyaKt//YKdG3fDbThTAOfod/ eOml/4+Fgh2PCY7zhqqEC4I6hT7/4qnh2oFLh7yBfJA6OeqMd//jfNi7j9boopA7kESQR+RA/42A pSFOVJgI7B+YPfNUmGj/7ZWYtEcbSi/xC+/4mWf3s/+aRJpHTw6dVZvo9TSew54i/6nTrzJW9J9R oBK9YwLlVeP/+bShCfr4+VL8w1aF+0afEf9gtLHz/rKycKUTRSGlm5GQ/6aJpSWnpgGRszWRsPd0 qUf/tlGqBQR2nger5K96rKT4Af0WMGO1wQiBq6EIsbdRruT/BYFSlKvmCf6wZ69CqXFYQ/+x8gwS FpCytg1xlSGzsrPS+wEhtEGtD9EP0bTht8G3Ub+2xLaxtgS3UbYAtOFKEnH/q2Ro47dAteERwKth ESEQQf2q8Gts0bkxKjJlsroRFBL/o9C9sr3CKkH64RVR+ZJe5fetwbjB4vC1FvS88VO2FVD/KhO2 cFIgvEG40RLhmhBzAv/90HLy/dAMAew1GoHAYxqE/8X6di93P8UceBXAafNCxpH/yuYgtsjmzMnJ JyNaxuUlRf8hMiVhyniABH/Vz0SBC4h3/yj10XPPhoOnjROItT/yQAn/jRXkUtF215jTtEHOMwoz Bf80lIpLNc0+ZDj6L5k3BETh/+EjjrOPZ9m2uhDck48DP9T/jvaQk98okq2Rt4VUOr452//hODln NX/qmUThjvLiuYzrf/0wNkpEKOfB58M3A+pElP//MKZgZ0Dxfp9foG/t36Ls/6P0ow+lP6ZM65FN 7vRf9W//UKtOcffXFdNjBRdRVQQXsf9dE/rC+kSt5FYvr+/717rD//441JD+9FthWbX/w/8wAGJ/ W2cBMQExIJABtAHlSGPO//oTU3QEUl3RUpEEOQSCX73/FeAEWF6R99H6cV9UFGFOFf0VUGOrtriX uMdjr1LjcdH/ZfgMYg3EZyFFYgKSwIINc77GE5EJQQghD3ERIDEOwP5rCIEQAhFhEcFpcBYxEbH/ EhESEWxBaUUIkmuiEkERsf8I8RLRckFyQf0R/SCaQROy/3HRTnH5URSxFRL5YRVT9rH/B8QJQQcx cPRTIssDCvTKYv9TYxhhrSRVk1QxIRCoss3S/2eRda8ebB6JGibPn9EWeNv/HZN4dyERIRLU835B 1LJ+Uf8g9CUSfakhIyQZ2DZ+UiTy/yVifQclcyYiItAsjS0RKqb/hwWDg4Rmg5XeC+dW5lRAKf8p BilVM+QuRuIzM5QutzHu/zDV45aLaOBkM1fpFop3mIz/kkc36JAWNso66OkrkOQ2t//mNTn1lzg7 Dzf5lX071ue8/znXlJwzZYzvQ+rnCZhpWzP/tnNHbPmvSn/6r0XWSt9Kwv9FakVoAA9NdlLTTeio tU7y/6kIT9upVVTRTnEHNFIxrG3/U1O+JKmCVERTs1MVVcevBv9VulVUV2VYBm4AWKh0EFtD/7R0 WhNZEZ7RWsi1YrXTW2H/tiNnUmchV6G3FGQ0YTFlUv9kFLjZXzBkU1/PtxHL4cu0/8oQBcJpccNB vLQF0k6BuNf/vkq7Qb7YAgBN4cdyZdtmYf9m1GfyZ3XBkBvzaFFs0cRi/WoQEMZAxhRsccZEYWFq Yv/EEGrzHuLF4cXhxBHF48ZhfyAyabER41HAbUGDEW2lrf/IJ8lhyOEJMm8iU0JiUcRh713hU4Fp QS3wrbcRJMGaIPrGQFC9XUG8sbsCB/Zxsf/NMlWjrYTNYRvhdFoou3lL/yn/dS94enV3dfF0RNcl fib/1jTW+H1o13aAZ363fojadf+A4tdQ4FWDYtuSNRuDlod2/zxpgqc86EAq34ngZeEINjr/QeSI BEHviOn1zYzNjGftWv+P85c0j1aW+ENf6peSE5IH/4/4mujtS/ApRT+XJ5S3lOr/hVOYNezbRxiO 0m4AkdSKhf+cDZyYnfmL5ZYRWPG2VKbz/1Kkogt0JVMvAGj8Q1XnVbn/AL3+0v6MUnZXelL2q6QC Sf8DVqjvqxaq2cuTq9cWgSXj/wgyJzUHYwh0uMOulbcUsCj/r09kugv0sjwNE7PFDaW0Qr0NMrW0 2A1gD5S00862If/7oBByHFG4yrfRvOQTsRSk/7oRE70USbqSBmPJ8qe0xVH/ygEZIbp3cO+3ZbxQ Euerkf+tUWX2wBTAI8DVdQMb4cBg7xrBwhbFYh6BOcQRHvMdwb4hHXLGdMVgH4MesTnGQf3F8FLE MSQSqEDGocTEH0H9xDBKxGDCgXKRhLLHwcfB3xlxAeGxQ8kFCTOlu8EWgd8R0SbSzIPFUTkgtbxR JVGhakD31u//TlC9v6H/hMOAMseRe5MZooDSe3HI4P8b4Spv0s+Dvy041AmGf4e0/yyV1pLWEy+l 1hIwJDPiMJj/MciLfDEHq2Db0Y1j5wTgSP+WEdzx3PLk5t0s3ObdxvHJ/4BD8gWBM9373RnkJuXH NmX/4kXh9ebm4cbjaI3l5ZmZKf9RSuEj6YMlUO7ZRfyciu34/0KcSFrtDT7FT1ieh+t2OEr/7vo4 SeWJ9fbdIU9X8fFOMv/zQN/D9pZPCvZWPqY5JUWR/2lj/G/9ff2vVq/8D7Bf/or/sxv/u1mWAWYl 5AMxXEW2iv8DQwUWA+hdBbYjydMGImA2/2L1zBJiJQhnYpkJQyc3J2PfY+gJ9gudZlUbsKUNIWcq /w5xaEEOQWdUDwcP9A/3EFP/DWANYGsUy4ERpBaBFBoTsf/G8jPgxvQTJxR4FvMSkxGV/2HmcfYX JBcmyuQXpxj0XBH/gKNz0nPSZpMbww9RGyMQwP8bwXXBxOEbQSHxFfF5UnlR/xyRb/AfshXwHLF4 kHlyb/H3eqJ4oB2hEB0wHRF4AdNT/9PSIBF28NGRFfEGAQXAIUP/ZaJ/AIARGXFvwSKEIrFdMfcZ cddEBjFCHIFv0GMyEPL8jErYIV7BEVFjEdVxgFL/e7IhwWaBZoPawxuQ2zQM4f908S5U3FsuCS2b 3k+Hxofl/+AY3S+KYo0TM8TjduNlM5P/jYKNMjOj5PPkgzNxjXM8kf80I5DkjwI42aZ3qOI2++gK /0VzkY2OhJP3nDKoc5G980T/PGbyR/S4mByXEvYZmYqbaP/qkpdnQJdFE0IIJUFOc/Vz//WTRaRJ b0d3Qgn3eUWjm6b/+zdQxPvNS1j6taS8nDSrlP9IOqHf/vgOUKiyAR4A+kJ7/pwNYGiQUvoGP1Rq CDRUb/8HP1quUwgMXwlBWEIIbFKn/1aStbdcR7akXN8R7lxzXDL7IPFgBFJwMCDxYMIndcjC/yfB YnQWF7wUvi1jzxh4wA3/TjHb0QWSZ2t14GhUZ/DD0P8oQGlBdOFpc8SEaip2IbuJ/8niygHMYWxk zDNtFSEqbkr/cgEVUyMjfqBwItchI0V9kP9yESNDJRXKmcxqfpG/8s31/2YzdCPDIXUKdBF2IXWR 2nGt0gEhekDTIDHS8DEq5H8rEXbwejB4oHgx0jF28EL/eVHSlHqh0XJ4oHgR04TUcX9v8HnCXBJz U3OB0FF8wLX/faF8UXwhYcDVgn2hvTR9of/KAS6RbzHMYI0RuxMj0xRh/9mEFVO3g2KCflJ7ZDU0 2eH/F/F1keIkht83b4g2OP86D/+H3If0ijSKNeQXfWHjhuSZ/42y5VGPF5D4jyLnIZREkmT/v/GU Qudk7otFEU5DpWTrIv+RZUUbjiRF6JFjUfICpugt/0DU7x3u5pcYmKRJ3ZkMqjX/9Iidk2cAn+if Z/lk+W5Q2//zV/wm/in4GPtWm0n8L6MI//8lV7bsB6XlpZ/yOvI2U6j/VWig71ZV7TQewQ2ksZ2x w/+uBK30CU+vamHvDmdhqa8Z/6zFZD8OHl+wsaN54bXstmX/EEYRhBEsEUNvlBOjuoB8UP/KAbo0 yHN9MruDFgQRtLwG/7rUFxm9+nJaGFS/5ie0GoX/GyHBVcFhwTPCTc7Tw4jEVP/iMM8Cz2G7g8vC tqEukrqj/8ZvE5DHPCJNJRt939lTJiT/ytkhNXtxNMC/0yeJ2mEocv/PNM8ysYDPk86xzrLV8bah 28kBbgCE2PDX8jEscSqR7y0gKrErdNMgKS3iLYDQtP/SNNgR0IcsAdgRhIKI8b5i/y+yMwCEcrWx NMGBQYFBtbH/u4Ju04URhXDQoNgQFGFuAf/FcrsDzGEUYcnx2PFtobu0/yOUFqK4MbuUM/PQEtxv kR//HmIecs9hYQSRX+AXk1/iSv/k4kEzQAlBFedXQVjnZJt0/0weWCTrMesFSWZFaEG2Rxb/QZeo xujXmmNGJkZJoSX65/9G2U0q6ZfxT6olAKhNN6nm//j7+TZQVU9B9yRQmqoPq9//qGfw8AKR9sT3 711EVQasuf/5Df9k97pUJQAJ+HgEtk6K//3kUYxWi/lm9uIbIQuV4eT/Z7+6vDZzu4+8/wfPvx+/ CP/fIsCov28NlWBBD7QvQWrd/xDfb6MReRNFakAT026CygH/yhHFMRTyjoQ0wBWyxjRwV/8W4zLE cisYDxl8dIjcABsS/x1hkuAboxyD3AAcY3XAHcL/KOKQIRugeDTQ4x5RD1J3Ef8e0EIRH3R7UY2x bpR8dyDy/3pDe7EhVnliItYk0tbYFQL/11gykNe2jrUlAyNDf3WAof8gQS9SgaNH4RoRglMoRIMD Vykog5Ep887+kLWA85R7hLCEoYyE4d9IFEOMEGv/hUGHgSwBhgcrdi1wLSAsNP8zITIyJDFAYf6Q hFGEURBEfzCBccJ8gRFyi2J8cY2Ae++L0YUSh/HmEmuNgYxjhQL/jeGFQOCDiCGNwI2wjCLgYf/m lOaVh/Ap4ZRJlJjrSh5x3yhx3ZIpo4JC7TOtg9IqEv+C8R3hkmKU5O8alIZAdEAe/5nEmEpBFElW 81WkdZpmWRv/RORJxJyoRwdKlkul96r0qP9KSkMln0ShifkI9q9Nc0rI/6TZ/XSmREzUp89PzwMr UO//sWmoXa9JXUWxsUfDVBtaKv9WzreWs/ZZKAvqDEhUBFoM/wsoW+YOI1s1Xe8CFK3iHWP/Y69m /xTvFf8XDGVuGIsZuu+/78FfGfVpZHtp1WnsxVL/HwhqUB/EbIlq9W2hbpHINP9uNIt0eRMjFcX3 NEN7QY44/3H2Jbpy2jKgc8Fz6NxRMAD/KKN1InUwz4F1VHYUEuB2lf/RAXcyz5PShF9jeHiJwXBE /9OijBDIYmoh01N6z9WpfOz/2FrZe9bjfovaSns05XH2Qf/bZIH0gfPQMd3xNtKTA4ORve3mzuPy hJLfBjj2UoTw/znS4BLl8OcCOlI6M+YjhVD76KHg9BDh84SyHbHWskKR/UJhrT2RyJF7UYtFe5Js Ef9wYnxxi9E6Y24gOhOE4UCXvzo0QMJt4kDr5gXgcmtuAP5zd1FhJZWvkjpH4bmB7qH3X7FG8ivy 1ndR7eHt4c6B/5vh0xHj8YnBzoGuEDaygsL/R5O5gZyI8VOZJJdE/RfzhP/26PGF9DqjCPERn7Sd SaPJ//kGTVpV1aAo+j4Adl7IWBX/CPQAhJq5pqgAu6V1/7NdSP+nOarqsmirKah5q2FeRKy8/6nV qwperLBlrdReQ67osoX/Wji4FWOHBQ6u3AJnZQu0ef9lCrKHo+UBv6SgdSEY2cE5/xqfbTXBJOrV wTRvOm85bsr/ci+5lnF7Gxhxa3KaRHLDtP8eRsSWHubF8sV7xYnEs8iR/+MBIdfUBOSBySOPgT50 ypf/xwjLOyewy87NJiehKAvPAP82Uc75KdXQodBBKbO5IO6R/ynx0UQsNiuS0mPSgdzh7JH3yeTI keDwUuBhjMLa0y5j/9URLxTVotrD1jPZhddcJjH3n3CLaNeipYs71uPa9C9R/z4jPkJI0ifhm/M2 RDZ13XP/ksTdlDf03lIvY97lkyk51P9AMpR/OyTgBMgDRADa09bU/+ORzFCXstQCJEDlROVy1TL/ 5TIvUUAF3oA6MkB/QePfwv+b75yW5wHqA7mCRS/q5ES0/UZjrbmBR4RHJUbTLHGhht/u8tGB0YGQ wc8Qxkhy7KD9SNOlPZHyn03Z8bZNivC6/6hI8/P+laYX/qPzU6rSqWj/WZRPG1oCUIz8eatZ+5RV 9P/7l/ql8SKtFVd6UCCrBqrJ/1ksAPVfXAYLXOpbaLY/t6z/XHm6u2V3YkDtcWKVXEoGYv8Otgsb DWpm3AkL+5TA2QkI/2McEINrBmRlCkbO8Rpfxy//yD9t/25PF2sZsm1vFEXM3/8XShyHzDodf3f/ HzsfTyFx/3uhId8j0iMpINQkNYoQ3qH/2JIkFH0jfRImidobNYUoFf814oKhKPRscimVg0GjkIRR /yqMhWMrsixREtMsQd/jhvT/frM9AehxIjEvUYm1LwQvl//iRjQFMReKtIvfjUqIlC9T/yFkjrR7 kh/BPZI1kzW3J+H/kcY3KOuTOBeS1nuxOVSdSP+U7j/V72g7cjphiDIjMjRS/z2Rl8EzoT0B4jTT NOjzjlX/O4BC9DpU9FxCIPVUmmf2S/+IMPVUQ/grw0Y0n9iGgqDj/9FwJ+FKI4ThR0KiFPu2+6r/ /MmhyUexSrqzJau3rQpSdP9QNFLYWLWre6XpWYlZdlFX/1bHrcdahq27WHZU1whGwtn/WHmturPs s9Ozy2rrX7NiQf8PV1+gu3MP9Q+pvaQQv1+r/w80XLwUOWF7YnSwErzkYlL/vbO6eVr2YXpqGhpc v4W8/P/DHBWIayprhymBhoNF1HZa/2+fdGsi3yPvdF0hbyD/dYr/by8mG81jd7QrtdUg0zrTNf8t rHpZ0sLWodWpQ+B8pddD/31i2YIuVX6xfrR+s9tx2rr/gOSAL4GUVTCCGdzCxlCC8f/gIYRzg9KD 4YRFhXOFBoTA/+BiheKD4YaEOfLgIZGge0H/lqGIAYfR4dF8kfMXPJjipv+KEvFDiwyNALCglzE/ m+dT/+RC4qQ81ugDQlh+EexR6YP/SMLcVZCC7CGQ9+uB3iDqsf+FMKNhVJCScIlj7LftrO4l/5Rp 7iv0kPCS8KPkA4qCpVH2reXCgLBClqCWoO0ye6L/QnfbcJr09J73dJpF9Un3dfeaVVCn9/B73gBs saDioMT/+aT5ScuC+CHpsfgh+yRFwP+jsEWh6zBSId+AovKiElaE//2tocmo16Wq/3inCaaXrGf/ qZcEt6Y3rkYDv143A3qx6f8IpV/oChOxvAbKXlcJmV4Y/wSKBO9rGxFMtbwTaRTXw9T/FKhq+re4 vTJrHxkStcEaqv8PYxf2t+QRI76WGOnFBbo4/xwtv48cr7fha7dza8USF9H/4FbPD3sfz698eClE yvp9H//Kj4C/f48nJoHe0RkvsC90/9JL84LS/9TJLQMvlNXxlgP/1kwxgddY2LHywdiyLhnZpv/Z wtrFjbQ0pjST6bXcH+ug/6OQ3WA35DhxOwA3Ed0RxmD/33NE4+rSROE5lFXy36X6Mv87FImjlZXW ZDAC7SE+EEHW/+NF5BTk1+blP6nkoeJnPJ7/QnnoNNHhNOHpgaQk6bekUf/dQZNU+sLRcESR6/JE 4dFw//HB6GNMokxRTaRHQtXioWX/7v2jVfBT9JHwEi+xTVM+RPdAhOLxTCE54eCmJPARplH7TdFM IULWoEwhpBRN36lP/6pf89T39PrB+jLGc1KDrQT/Unj4ITUROSL+Y12w8eCwoL5zmjGvw6+Br1Fe cLXFoP8QUDlgVbPrgNFwVheu9FuC/wW2WmVZU16JYppll/82X4r/WeUHpbSZtgcMKQrKBq4KrP/B 1GW7B3m6TLvuDlQHZcFO/xQWDvUQURI/EK8PesNBxS//b2cUpsbvam3JSK6wcyAYCP/GRRfxGIjN Xmx3zuR2zMva/3blFCYbCRXrebM6dCjZ1I//KR/Wr9e/fjkmNSCv1h8nT//YP4M+K4RHEIZoht+H 5zKT/y154BSJoom2PDeLJUtDMYH/Lc7lw41kM5c0ijPKNaOQJP82UzZGNyE5YTeP63T6YJND3zlh +zY60TjCk8HnUnNE0f8xtIxzRtKXgj1jL9GoYvfw/5aUmoU+I0CEPzavcLAhmjT/QSb0K5ssPJzn Ip2CQ5GeU//3sURFnrlF8VVRn8NFgJ9g/TUQpS/RoIMvkfsFlsOhBf+WlFHCihWi5KN1p9T9sU1E 70EUoFE/YaXxOaeB49AAIf/+EqMJp3I7sacgplECA6ZBX6eTowRP+APfqohzRxB7/0XxejGss1J4 Bx1EwZ2B+QXbrMBeoK2vsjWwawmYpeDbsCAJ4WPv4eXAa+XBPuH/NSFDYTbgVYNVcGKzDLWztv9a a2ClYsNkmrYrEGxjSGgI/xKMEkoULxO7Y4h4ZGNsXDj/Y8u+ar4HZwzM9hxtwphpnP/ET2oIbIhq KG4lHntuTG41/9Jp0Tl29iRaaHpy9G7ad3P/dqvPbHVXdMZhwid5agFzIP/usXoUgf9+j37b2R8v 337P/4FfNI81/zUrOA81VYW6+oP/4Jrgk4fWO53jfYox3+HmpP+NNUNAiyPmkIv1RqHipovC/+VB i3KNxI6J54bowveBj8r/6rLqsZDy6zGRY+tUkhGVAP+SYu0BktT4wEWhVMIGY5QS75OTBlKs8e0w xo7h4uZNYr9M45dHSfPyEE2h8SBr/VH/ogGYSv80QEH0L/ZVpLBOf/+bLPpR+lGdhJ2zdXFoQJ6C //mxCGGS4kWhkRFFofmU5fD/CdA6U/sf+8SVmZXlV0KjVf8AlEvB5HPwNJgS8uOiYQAh/wAkp3Wj YqdgWyOkFf3Bp1H/AMNaIwJQ8SACAV1RplGmUv+jY6LLotbj0awrYMQGZGD1/t6vIUWhjWGgIWLC rzGvkf0JyXv4cAqjCpEKkgsDCvD/VGEKsQtDCwCgoOXwvNWd0f+9GhjHKUN2hGcYvdgTy2pP/74Z ai230Rp4uZa/hG8LEML/csQZq7tudzy/hyfGwPoeJ//DMsOqJqMe6pHAy5LEv3Y1/8jfHtwen8h2 eHzPFSoYfur/JXrMzyPoIGHRQ/hwyXTQ9ffPLIOuzX2ckhHusN653wb/28/dn4pvi3+Mj42f3O84 u/83fzVXLd/fk+Aa4QrhZuMF/+XoPAbf4fFTVuXhY+UT5Q3/P/HmLT/AP1Tnn+imC9HpVf9D++qX 6vFFUetT69lFY+za/6zz7edIce3irMEGMemh4CD/TkhKx6Rr9PJUcUri/SP9Qv9KYeTD9BJNBU4F 9B/0bk4Y/1EkUVMMEPeV+DHq8OtR+Ob/7ABTUa2C+fGygaux/cD6pf+uulSy5HPkZLBt/Ppflvqi //aS5xH/o0oxXhJaNQHCALT/V7VfGQVmW8r91VoiXZZds39aQv3kBfXfQGDlB1+6U97/U/HzMGKx 7jGtUryRCYBZgP+9YcCgC8ALsb4yCYK+svpw9WVDc+qAY2SzCzIK4m6K/w9DZ+cNhtOBK6QN3g// EK7/DtXGFg2DGyQbthfrExltNf8U+m/myvpzaxdjdOZ1CG+m/22EJ8N5HSAzeHEi+iBSdkP/0SfS 2iaFz++ERoFpIGnVe/9+VH5XJLgjFdlnJTgkuSUG/3L2hF8mt93pgQx1ikVRh1H/YSOH1TU44frj TDF4ju8xp//jn+d/Mts3D+kfk1OShJKC/6Lx6oi6QTmdk/6Un5oiPN7//bE+B/Zho3GYx1EB84NA Zf9AFEDTPuY/BfXvQmNNcEOT/wnARAZEQfhSnsRFIkXDReT9RSOtRtKfwkcoYJNHsqFj/0eySOJF 4KvhmkNK40p2SjL/StdKQ0o8AGKxtgXgrvOUIP+nU6hrqHyqeQHz9MJRJ1Fbf0TRDJGfIEhCUxJi 4mIw3v8HlK5ROwOVsj0WVNSxQgnU77DPVoamU17Qa/IBXeJLsf+YdWQwZCBZ8rlBtDRfALRa/1yS WshbCVxzW6cQ9LWoW1LzWkJdglJaDHGt9Pu0ulHvYFhhVWIivGC9SnAgUGLU/7zQ84NMMReiQQBA MUDzvrLvWYFl4RkiZWFaSzFK0WPC/2TyZrNnxME1G6RmtGmEabf/yb/JTx7ryy8eh8gWIF/N+v8i 5s24cklzVnK4zMjgJSgL/3X50lV2UXhh0jbSJ3oNedn/0th2RSmZLgp4jNaWLkt6u/92SzHbM8/f K9V4flSEJyoT/yoy3NiBZIXv4MeJD49eh1X/iIs+Hz8vjn89IeUPQo/k5v87HzzkkkQ7YpKI6reT sa9D/5Pf8D2aKZpESHRf8VaT8fL/8gGaRJlU9iFMwpmXSICZsv/04vTy9uebz1Abq+IGUZ4C//iE nrj7MqCCn9Lg8aBCn5P//PGhMbxwrNJgkp/goZRUovuik6GTzp2xo3GzBQPj/+L//zz/tgBlV9cC tLFUDREBZf+nSQHFXM+nNqsSrlEFWawx/54RrJIHB63CB9NjIQdh3kD+tZqiBNMDo0sHrtkJhQov hws5swG0USExQkIT0P8NkhlxZuO0uGiWD6RouRAi32pnEGcRvxIO/yCEFCcU5tcVA7smFFPenuC9 9iG8xP8HAZsxsWC6ABeWF4LHIHJy/5nyrwDAMZnBwASZwMCBvqH/GiDIih0bG0cc9MODyCHLhf91 GcUsyi/HdMg1xgXH8ndf/3yPISsdect54AQfZCj0JTX/ztnM5S5M2FOEBjfVLos0N/+DujLnNDqI biz/inmEwtcL/9s12HbaRjDaNb3bWdGL3lT/2vYyQThC2yfbX+AjyDCfsf89O+f8RIlEeeZ7RB+X G+bv/+Z/6E9D7Ou4nn+fj+w07bH/7nHuFe3DY6Si1/Av8Hih5P9MBAEE8FTyxRjh82WzUfBz//S0 YpH1F/Y19bT1WfMDR7H/UaL341ID+HH4uPkh/FH6cf/5sflS+lP61PsBBvD5cbzE/1W0/EL7xrox VzJHsf2n/7P/pWH/cxhwowP/1lnEWEZaqf8EgxlBGHBblGaicYENoV4Z37cfAzJzcAVCw6ClvJEF JP9gdAfGYVJhYhbVYhP5EATEf7yK78NjbQlnv04K/WdASvoQZzApDQAS02jTanEPUv9pnWivwsbE xg9vxrylcRQi/wdwFUQUVm/0yQUHYfkRFpL/uxFh07szBsFgMCUwGUD1Uf8YYRfT8MFM4P8gTIHM xHLy/80DGAJ35SDIG2QiViVGzuT/HkbQjiMsJkQlJoA7ITuCl/+B1NaVJ+iB99d+J9p9UyIk/4EF 1pbbaDLi4ADdIt0EKxH/+TErEt3SrkHeRir03dI4If/eRd3E30iEmCtvLxqExDA8/+P6KfaOx40X K/yExo5PNSjfjP03EuZ3jrc5yL05siji//mxOvQ69pZqQ1/vz0G18g//8Z9Aj/U9Qi/xO5wj8laV Tv9Btjz1R4ail0jDSySkmP2//0qZwBal9aJzqPipBKfio3T/ToNcUqkRTQapmLjSpZMMgf8E881h qjCr4lICBhNSl1LB/1UgrmFToa2irbFUQa50VNP/VDCvIVSBVHCvlVYxYPJV5P9XAcpQsVG9tLOY C8uz6lfa/2MTtVZdJl0RSyBdkmTxE9D/tnJk8WeUEFERpbeEqyJQE/9fw7mEYEGMoGCAYLK7uLtk /8rxuqS54aeDAXa4prjEWwP/vZUYx2QIY+O/6qY0tlFnQPZSG8FnYGMbYhxvHUprJN/B+GsHxipo /8WAa0hxCnL/bspuzMlEYlFPMWFju+LJof8J5CWGcOHLclNBjKJ5kKdT96UDzLMnk3vahHV61UnY nv91qc9oKd9+a3+UfPt7g3///9Nff3sy/9ZBfEI0TNW/5Qj/3cpTAeA3OCiFt+ASYSBgkP/jNd7C g1XgxYbdhSWE2olc/+dmlADpV920iAnqCoebjav/6irpZpGUi/rjJTrzkBTZxPeQ1duDVEHnoWKh GJl/79X/nT/5Ovb/SrqYm5frnH+cZf9K2ZvXSLvu9lJPnCFw0AsR/6GxokdZgFY0/GvNYaOfpEj/ okSmAqXgWjFtwCHivRKnYf+nZadCWUejAqjjzcG4wxlA+6WwpmBrXfRlIc1hBCQTIv9xYAXSBbes f68RYYTeEghW/67RCTFjIQlgCWCvcgm0sRH/IiOwwwrhC0Ki67MTsw8MCP+xswyUaKVoVA9yt5gS B/xB/14l/EC9QasTuIIR06lWufO/ueOr4DgBY4HK0nDh3rsy/6+UI+NucRLEFooXpxfcaAT/GR8Z zMEEpmGmBBwhG8G2Uf+mM7ZAHVZ26sHyHn8gqMKV/3qZxZbH8iUCZJN8nsllJPT9iIC1fpGBYI+R frC6UIXg/ybArYG70iTjfhaASct0frH2rQ+gqSGE2lnYBtmo0Ij/hMzQJ0cChPvQStnU068tb/+I doOO1QXZn9pK25DayY2X/z804Urgha4jYhM3peCI3cP/3tXeIpHWkfc6yJFE3pTge/82+Jdn3TOY SZI2lhaY1eqJ/+faP8U+WOfNnLo8JeYmOtP/5F/clkhV7vMj0e63ooTu5f/0n/PPpj+nTPeSpW+k /6qP/08r+Y9Oz/mY+4a+s1aDZdb/WB+yD1iCzdP8QXU1WkPBAf9x1BMhsTEnY10hEKFWMP+B72WG d6AcQREBc1WxXxYTE/8DqCjwE/EF0AXYYIFgc2Ei/5Q2YeIIIQglB6Fjsjfiu8L/Y7S9sgn3CrVV UGBht+FZ4P+/knL3v9YN12gyDwQOqw8Wfw81EAMRdhZxEcYD0RBijP8E4AAga7O1ghMDbPETgW2B fy/AgkETchRDJOUU11Sw5/0iU94kZMbGyqxwmw+0ci+/zckY+hrUWdR1MRwhORuQ/3WWWfTRkxtB /EB3ctJKd73/eQR5DHtjBPD84CUkfXpko/8i2Nd0faX2kCT0bnEHQYZg/37iE7Hn8O3QCTFvQhXj JZv/JgWC7DNdhRUvGy7FRtUqzf8wnjJa4d8o44Kn4k6ENeF7/zVvjs9FNJ/0kPc4EpcGk2L/YZGR +DdKN0XqOTgDlPPsF/9GgSbAkLmQpwhTN17x/ZH5/zpBmfdEe0RUoPuc60OGP4j/OcNFuO60OBRH RPq47+FGgP9IZVVQSJxIhFS1U6Wsb0ql/6urq12oj03tVBZQGVEnSLz/Up4HPwhPVbFWcVYVr/MK qP9X3LOhsZ+xJRrT0QEbUbeD/7EStdVs9LBxWpEONF6DXVL/uONtE20HuMxfcbmiX+Rf8f9ggrpS YPLIUZTxu8ViBJHS/2KpbnFjgr5SF6S91GSSvtL/YyGvsb+jsSaw5L/kaL/BXf/Cr8O4xRVs1MTy H5RqQXQA/w50WqO5Q8dwbWZuRG8CgOL/byF9lMngS+B/4cygv2BtA/9s9cbWyrlwfnEdcsrOds6V /89pdSLQhtAV0UVW0NHT0ZL/0yd3rXpBLkl5d1qw1gPbb//buttV2Md9pjNKbsBjkG5x/38h2hLH kX83b3Mi027AiSf/R1OECOF1RMKE/0JYhAc3e/+NqoyOjSuDGjufjG8//41q/9qQkOWRuJGTRJTs 2JJTyJD/YgDzRmJxRMeRtEc480jxQ/9ICvATlpSWlrwzR6dEF2Hz/0PavBMV1WHm7eqgEpyW+qH/ ngeQVPiXnmaaxVAoUticdPf1hJATfTC9o1migvwBVd//VoSjT6P2ovai8qd4WyQBjP+oOqm6XV+s pgLZp3VgBaMT/2DOooD82VhBBYFr4QoVCuj/sP1zE7JsJ+MRIWW2DejQcf5a0LFy8Q9XsHS2oXEU xvL/EaS5U2tpIaJr97ixNTIT5v+6BMhQurJukbsvvDQWkX/g/7zicRK9YReUfPd8abzgF5D/s7C/ kr91c4Z0k80WHU92ff/EIcNsH/XKV7iFzKB517ix/2myCcKv0RD12kLt4ciBIuTvyOLZESODIxLO El7e4BIp/386uNXFRYDWgenM6h24KZr/KoXU0NCB0aHPlCtwtyCGFv8sZyyY0kPU0Ig606i2EdYk /zF62GrXSIvv/LGMbddzI7Tv2vC+cNm02kCt2eP6UTlM/+BYPEk40jqU9WPgV5PKO9v/QSXjrD5d 5FXc7JlNPWDhdP/heeiDm1eaklGEnOb55Z4L/280RTrqSeskRMtE2+w2Sbv/8CfwVusyUsLqmZ4s TUn0Vv+8MUz38vrs9fkCUNtQJzoz/+m1rGpUE+sz9+P31PWRPWL/cKGNwVaQ/aKvpliUsC9XDP+y fv6/Ag9fLF3Pt48A1rkV/7m9CF/8r78gu/O+gGOCCiV/Cj9kvwy8ZkpqA9ACILIp8YVAECExK3Fm ImcladL/EQMlOH92Eh9r3BOhbaLH4/8UwW40FMEVUfkCTdQXEslz/xaDF5EW8W6RF2EV4XJXGFn/ GKJw0H4QZ4Bz1M2mZzPOeP91RByUz9p1S3T00cZ4dSS3/3ndeUt/UykBIMERkfUATgF/FrF9In0A 2RC78H2UIwPO/2xV1Nx/dXoU2Mx/HIC7JpT/J78pjyoALSAvgC0ghUErdP+GOiwPiGaIJS4LifIw 8Yo0/+RqMMkzXjLajiTm3zIG6Sb/j3GPcZOX6vXrlK52NyRUZf8UwZN3PTqUwzip+rc870Cf/ZhC hJvJ8Q9BHfMGm8H6tP+dR0pnRDZGMU0lRhFGEfgx/0zXVaFw8Uc+TLf6U/ubSAn/SppKk0qL+t8A b06YTnsCj/8WBqXHoFytOE+IpXZRBVUz/1JTjcFXjFaDvVAJ3gs6Ch//DTVYvrhSDrlaq1pYEH8R 6/9cfxPNX/ZY/2JJY1QZcb50/759ZfO/U8BtZ4Yag2cyZTT/vwEu4GPSKlIcQRzTZTHcpf8lXGtv bHsgih8xbjFtpMjE/24xbpFu8qfSTkWnxPpC1pH/cOHJ43FkcoO9cXJEMjfNQf80wG5wdMQnpmmi KGPSoij1/9KT0ccp6d0jeAl4Vx5CeMP/2gp/EXqUbOgupsdyyPL5Afs2QjJg5zCiWqAw0X0xHqj/ LkRtJi4yISds+WzmM2I0av8fyNs1J5CCWHe23g+F1Gjx/2kB3xTgAoXpO4eH54e/0NH/UOCKn+Y/ i/+NC0C3jyJAxf+4YEG6QJSVNeu3rgWTRPSW/+tWRgaTqZD165bvFPOcmkX/Sp/0cJeQmKOYkUxi 9Rf0hO+auJYX8xPyc732ZK4znOT+xqR2oWH5IMuR+CNR43My//k2UdLWkfojBGdSwiPG+5r/ocgE FKUF/i9Xhp8kcPFT5P9wovoky3EB3CO2AhWpdG8j/1xLBGehZ6l5BjkFBmDWq6L/9oSrgQkWr89j vA3GCWhk//9nL7YVFT+21WnKE1i5Aw/F/7fvtx+1L7peZBO0V3sihJL/vdjEEt5iv17d83R/G+a+ Ef92NL/Ee1E6Mb8BN8QeRsT4/8TcHs8f2cfTx8LIociVItP/XXHKRKlEykpTEsmSy4PMZP/MNsyF zSMjMc10KJXSA9Lifyh4KFmELNGUgv2CxCy5lP/TqNUDLyMyfYhVMEfXwdfB++ojMbGUOjHdYYjL MmYzr/8y243fNUMzKDMy3BfdCTiv/97D33E6BDqVO2A7K+HFljr/4jY91taimDnpZuYl5djnNf8m 8+Z1moXnvj/v6KHttUqw/0dVrmWsBEg1rBbtFEdDq/b/n0ahQ19kRe/vzKCH9PdMsv/1xfA/p+/z oVASqfL2wVDH/1ga+Tm89RdxvQK85memzRH/Fsq8lCbAzHD6JLA2AWj9L//+kqgQWnHNEQ3CZW+7 1FLz/7AVAlK1o7WUtlkBirf1A3//AAtfjQcKBkP+4rNYC/oJv/++yr1LvtUNiAyvFZzClA1H/w8t ET8Tz20sxZ8STxWecqD/HIJ29Hb0cw4Z0xnPG5KShn/echmTG2M30tCyHVHfoFr/N8N5X9KHNc8h GZBkIiJ74/8iIyKvJRMkBVIgsWBT8yOy/39zJZZ/5CTS2fhUE4dyh1P/h0QstyyKhxeGiCyShkws k//cBi1jLViOKIohNtHik+KO/+vAsWAPwLFgJdExgItD68DitRkxKTFCcnE1JuZJ/5BW4pLnueiU 56Ii4Oku6E//kEc3CivEOCQ47ZQ0lDE7Uf85oxxRlaI7Vjt9lvXTkZkT/5kEPns+Ip3cQG/1H/RP 9nr/RvZGt6lXn8SlBqIk1qBHVP+hhAgjYSJ9UvzlfgKfSkTl/0iGTYlNdUzGRohIpqWV+jf/qlVQ NEyQqiNQ0lFHUXJhE/9VMa5zcCkG3wfvcFOtNAnZ/4DiU/9XQFHxf7E+IFdAr2T/vOEM+GNbDOSB EVQEtVO2+f+wIw+2tpy497iV5FEQOFLi/4ESV1VgBGACVlaxwgzFY1//Zqxjyr2fGH9l7BvrHR9o SP8ez2sVbc9vxm9ZxzjGX22e/2/wcbJyVvHRJkcnCHPfzZP/dK/PVtG20OJyodGMLDp5vf82lHsI eNLeUisw4zJ7w3xz/3yU1wN+MjGFfiJf0n7U17L/2RaAhYAz2ZWAZlzxL7EvdP/cadHT30beS95Y hko3RuA7/4eTLmeM9YhT4wg9HH0QizH35KGYUVFgxtOUz0SNfOar/+KU53bqP+kG6JJD9kO555j/ QCd41+0fk5iUke7FlNTvw//w30qY8fKYm5kKmWVNefM5/516T5+axlBqipBiNAK5pLz/Uzn7Np/X YWLW0FuWXQP9dv/7WKNEVcb4uf8HALD6Fp7m/58CBURcF6q1qmNdkkUgXfn/BNS7JdjRcDeu2W/F HyVgr99hux27F2hwAIEBvQ2GZB//F1a842X/cNWuZR4/aPnbM/+v9bgSErO2+R6arheA5BaH/2/0 GV/BtG/kGa/BT79Yvn//dc923HUfH1rEZslvvSLIF//H6SLPyIR+OsiHJkMmNCYy/yc/KQ/b0M7p gnbb0NG00bd/LBcmICuiLQ/UT0ZsNsOM/4kUMA3WEdb4E2DXwjHGueT/tQEzNAth2ZaYYJtD2ZTa JP+1EbXhL7HhE4/FL0UvVZBd/+EFkq8vNeEcPIjh1OL9lv//RhJMUaGgA8AywCeRL0GmsP+8AY+Q 579COOoqQ/zkEkP3/z5QnVKd+51Dnxads0Q7Ronv7KVHrUmx0YBj7sFJtO+//aTISiWw6VFMVU3p UNhOeP+oVPcvqZ/2r6o4/lRV5lQn//nLVAZVqKy6WIi6hli0/fP/skWxmLKU+5O0NLELX1Rfgv+t NQNjXSW3CAQGXZm7UhZX/2AxqxIIXwlsYFQOxQnHFuT/DM8Ol78PvdrAH8GLwT8W7/8XPI4B2LMU oWwEacRqv2aP/8mvyrob/xfKyq8b38tNGh//z4907GovI20gnyIGYbQihv8irNVGfAHl8SXpgGwn foGE/ygSKL0qYoQTgxGENSszRuT/K4STxYaLO2U29oljKqTiZv87EzAxQZEwXzFjMVUyI4xB/zKi M3ONA42FM/gUoI6HM+D/BOCMMDWkj9qQNTr0OpiSZP862ZH7kguVFTwUlek8ZJY4+0KsC8DGmZFL 8KHw64GMMP8AgJ3SQX9C6ZuKlzqcT57f/58qns/2p0XWNmOh9UekosZ/SaJJIUkjpGdKZEjgSumM /6YBTDlMhk1qTc8C3E7+A/z/AdjV4KzprTZSw1Q8U/Ncgv9ZAwnEVlVVpljHCcZslLFp/xJXMwIP yedSEdVY9l01bNH/FRS5UlxiXrZeel0iFKFvAf9qWmLVYuhgh7zIZdzNrxbv/9ILxDzQv3K/G89n t3FKzn//dJwdG3mjHd9yDyNaHtpxP98jTXe/eGkn3Luw7yjueaT/KM8oW9f4Lt9+tnvWfjN5SP/X 39eS1KSBANnQ2iXawjRE/9qn3IfcsoLAgc+DNN6O3yr/hhTf5YbpiLmEU+JvgRDiFf+WY5aC5DTj 8or1ixXlt4x4/w7SjVTn6I5f6WOQE5UU7rn/lNmUbEXrRTiVmIf08AaV/f+WhYfzlxudUZDx3CH7 cfJB/6C3+uqgWvcv+bqeCFFUneL3ixBRUlIltVJPU1v5N6Bdv6GhktH8aqOxovH+EHP9s/5jo7Gk T/5imWECNwHQAiD/AS3V4AZUq8gEuqrqqKisEPuqiF8q1q+8CIhTsAiDrwX/CFetAgm1Y5djagsW i4GLhP9tKrfADWPmgW0BaBIN8RCR/2y1D+Sv4RExxvG997uwp6D/bEFnsw/nEBO2k64wxpG6nP9t yrq/wua+KnBPcVoTYL44/xNhc2dzOhivdc/NX3fveP//dq/Tf3nvdz98z39cfr+AK/+Bv8zqHJ8l K4PvIEwdCse8/4lfIlWJv8gr1zfZo6LS2d//2081bDcOkg45aJN1jhHgE//io5TkN4SVFpTalrnd 8uQx//BhPpTj8uUG5SWZleZoQQH/QQTnn+ip6HCykUWCRHpEef+d3EPIndRFKu8f78NIakhpz6HK 9gTr4f4Qa2vagPey//ND+HFO4/Srp/mn51VoUMr/+ZWu4VHGUShSK60vUipRaL+p9U6yOxaVZPzB V4FaV2PtV+ExOkA6QGP+Ef5y/0n/WfTo0VqDAHkCT7V/t0+4X7+5bgzCCsEHkmmDCIW9Y5T/u+pp kw+2D6IJvhGiCjMNhP9o1AzBY2mZYGPWY/W+9xFS/2m0atEVuRSEzLVxxGsDvjX/atFtd4wFFKXY g8cuFUfJ3/9xGXQJgF+CL9F6zg8onIXv/4J/I7WHX9Oc1Z8eL4Vs0Rz/KxDXvygv2F/a7ykf3o/e H//c7yFf4yqK2CvVbtArE+RP/4rMjqeO3ZAkj8027zfxkfu/k7E5JUYjOwc4M7GhczpB/z1Blr+U xPAZPGaxUaASmKP/Pm6Zmj/DQHScsT+xDeGbZP+cgZwkAMBCfpkRngekBaNf/0nW9/P5D0nYTdRL M6eV/JTf/VVJC/6XO5GmIHPucU7k/0/fT8uqCVCOUM5UZGQAU2X/UiFTqUwgU7IG0plSB1UH9P8H agdnVFQG1FRRVUQ7B1bB943jV3VYIGuydFh0DWRlsP9BQLTGtsa26rbjW+RdaRCf/1+GEWpfT2sy wMJhmcD1u8b/aZFiRGlmuxO/4766wPS+Vn++FqthYrW8nxX6a7VqEK3/c7BtAV/wxsVqlW1KxTdA 0P9tA5zgIIZvSm3MIMRuqHEu/yPqcusl3sbSz4goRstpjUH/dLpy1oN0y6bPL8zfLJ5zkv+DOiuf gskxqjBectIyXzSP/zBfzv/RjTeP0UyC3znLKtp/KJriSD42e798DshRpkBz/42zjjqPIVdAjxqQ D5F862uf7biU4+pXlNSysGNCWCD/R4KxIJTXlZlKSkVomDGX4f+YlPJk8xiZAk3S9BGadGhy/5sU aGH1ovYTnPQgUZzH9nD/93pSD1Me+Db6OftMmJP8Ef+jlv5K+EpUVv+xlIBD8aDR/6VIptSrIwEp W0WrFAGFCjG/9SIOkraAtSBPUWQAvQqV/6tjrxiuNQV2Br9hn2Kvrjt/BjX79JLEQwIMJJCwshFC ce5wKTlKDKGyQbOQa/8ZgLQUtNS0dQ60tUa5jxIk/2rftmUQSmxcw+GckJtQGLL/u2S+A7x3HTO9 XL12HTHAA3+6s75jvffGMhv0vCEVMYz/cJdwAnCocIcacm7hJ3MeAv8nRyZZx/bIUMg1xUVAKSG5 /4uvKvwkun1sLd8tbzZfNe//hZ+Evznfhn+CTNQJ2rqEnv/lctm/gs+Nn46vi5SGv5AP/9v+kV6Q GC7QkBbhf5Av4h//ls+Zv0A256FCAue0QkNDW/9DAenPSAPrL+wHR7pHvUhF+FpjSu6yogrwEvHR 78f/pFREg+/iCyFMCk3U81TzVf9OU/QR9KRdUcBxT5JPc8Xh//YjUTH1svbnDgH6qPlq+u//Vcj9 s67f/Navf/4I+EnoUP8MkO6wSTH4yLAJXyxgaGBKAfZB5/f37///96+3g7dxuAS3QP9BcOf0wP7O Cgq5LwdZTzAH8ruvvL//CEa96gXECwD/UkbTZhQMFBMNMWdAWiEM0BgpMf8ZsF2R9vJoVQ9fbN8R f8Vv/xLfx4Ue0vbxIGHIwx2xHYH/FLIaY3EvHOhzNXKE9DBzDP8VZXS1GvbMFnCIdaMZsskU/ydA HgQeB9Ham0V59HmiIhf/emkgiOK2Ijl7ZR6mJeh4fP8mrtnPKpfbaSgW3D+AfzO//y7MM28nuOE4 47/kz+M/4g3/Lp/o7+af4a/lv+wP7j/vT//wXz7r69/qr977H5FCEEHW/wvynAX2qEOvRROe1aPy oKb/Q/lD5bLx+yRJA/vUoUOzA/+jBPx1Sa5FwgtUC8D/A/+D/0zBVrNM5U2zCiFN1b5yToH/bvFO 8gYgT0KrYqljUQMEQ/9QtFFBq0IOALHWUxRUblSt/1ZVCC9WVK6ksU2x3bLyouD/WVFTIaFgBfys orRoXFRkOb20+++3oLekEX24Oe+18P9egmDbYU+7bxZMAwMWXL6E976CYxpao61GxPZEwQRnkf1I oGvB8mg4HHdqKmnPHt//Hg8f3WkF0YwjP8myuPDKEv/L2CWMTpBys8oFFnF2GM8D/yhldrZ1tqtg JsHREsnR0bT/0YTbT3hommN6FC28liJ6GP97eXtmfE/Zb90cPUjhNvKf/+yNga81n4Ktllg4PziP j1//O28+vz/PQN83z0F/7T9FH/+LZYyci/aK+keaSXw6Ppn+/5Vehd+HrJul9k/3Up0HpXP/+Hf5 z52kU+X67/v8okb88v+i0aP0pLSkuP/kn4CmMaYC/6YTW5EAlKZhpvIBaAFFp+T/AtGo0qdgA6Gp YamDqqEFA/9owalxBPOqIKqRq2IA8QeL/60Mrq9ibgDxY22wX7FkDgL9/RBrouCloVlhwAIGCq22 /7/SaHG0qBRdFCOpIbd3EXe3bBG3p7eh57eAEzD/AmD/cDC+023vF5VvNnWgF4SoEv9wFHATA6AX oXEfcKlvFhknvxoRsCGlcZxxwQTBMHO48f/CtB0fdznERsQExkx50njP/3c7xqd9wMkyfLLDAX0j yLX/fYbRg3zWfPN8sSTBqzAk4f8qUs0yJuknwcr2z/Iojyn1/yTBfmnRc9pkI1/SftMaMKv/0+SI SNVIiqbXiNiLjD/h5f8rrzSbjn/eheH2LOuSb+e4/+E84V+WDzLKjhaVX5Wvmb//ms/zf5tnkXw2 qJj/RF+iP/9Df6M/pW+mf5vvkelPoPXI/8Egqfb2o1FX+ihROKtErSa/VJWuRvqUVSdVX/yVQv0A /1dj/kn+mP+U/5FZxf+hBdH/V/FawQDxWvS1JrXSXBQC0f8C0VwhXHJdsl1UXeLJwASi/wNQdfEF AgNjE6IF2VnEYRd/CJq8D70dZG8K6gzx/QBj/2bEBa1Zo2C8DuVpJmlHbiP7xFSAMNYSlGvabDoS khMA/3XxE7TH7hY5bzhwmMpLtyP/clPMGnHmyrcZJRkyxEJakfevgXXBqnBzJyBdcBw90Pz/IcTR piAPIdzTX9OrI3/Xa/8iutieKzSGszIguRMk0XJRv4OHKeYpQSrBKsN80b2QM/+FGd4fkJ7gjoe6 h7yI9jCR/zFfl3rlr+TbjzykX+l/6o//6P/sr+2/Ry/vf/Dv8f/zD//0H/Uv9j9HaUb2+B723/qP /0nf+4/9vz2v/9/wDwH/M0P/DQBP2LGxUEVRSKxFUQWtjP9Rla4Vr6iv77DzVrOx+q8h/7FhZpFX /liTWRK00FlCZzD/tDK0FFpztPK1DFwVXRJcxf+4sV0zX2JdkrkAXlO5Mrfz/9sSXwFcwV+kYP8O 0mMNwqj/Y3jDJMLIGhIWtmAxBxFXYf8HEWS/ZcZl42XUZXZo/2oG38jTc3O4UePxx1DnbPDFr/9s hR+ht1EetW2UIcki2HCZ/3GsKUDMFyXmX3El1REzJdrvJURyzVrhUrCMgAB2EtIP/9VceER5Bixv LXl8BC6Pe/T/fRh94n2UfZYxvzMvMl53AP+AYoPVgNDddH702P9+tThp/9poOJXaVIUKhrbg34yX 5LT/5F+NGDwfQI9Bn5hrkDRDev+YH43rQ3hFPEbfQ2+euqCf/0rPSZ5M306t66pQv05u3fP/Uf9P T1NfS29OXOuvWO9+we8B01m/ni+FI9bAAapCBZD/qeYEM161qsBeIl7IrRGq1v0GRHsHEmGEB7iv SQhDsETfCJKvMLBHCwUIcDmxYAvB/68wDBNmNAxnsyhn9A31DvT/DvW1GQ/RtqG4sbZSt0O2wv8m RLlR25GBAttybOQR9Bfy/7pDv0q7jxWsGAVxLxjGDuH/DRELoQOxFSG9b74SwJS/Fv8a6b2owyHD sR2yxCsmkB2Qt7ew/1B8UPeQIHmS3scgX3mAIRUfoXoAefH3t/DW/yG0e4YeeMkOKLrNaMwnJoP/ f+YmOMUAgSgmeyXFJpARsv+DYtAB0GEqA9C31EoquNBi/y9ShsQr24c6Ks/WL9efi+3/OoU6OY3/ jwreBYx/34+PvP+SH5MpkxTfdVRYRlabeJ3F//9UPoPnqkL4PxWZX1X/W4//nU8BP1qYn0+gX+vv ob1Ic//836NPWk2mD6He/11Wtaf0/6K0oT+sz/x8of5EcKK/nu//sHWya67kq7kBD6EcrxcDif9e Nc/AX1cD2GCFBCIHOAbnf2JrYqNj6Ak6Crm+qmWSOf5KXbFmhAyzDTJn0sEmaDr/FSFpJ2lZEDgR YQ/hgWERxP/LpWrBxaFswx8hxlOBcmrR/4Fhc95v/3KHFw90sh0zy+jtbmFjXbALwGMdCB1Dd5P/ GNbMlM81zonKVXeCHNF3w/94dihwHoUo4hPAEMF5gB9w+v/ToufTwnmh/1B7EnoB+9SRePDOIbEh hCjTKG8j3/8lRn/5gQWDUiZn2p1rkhGj/9wfbBQS8jWwEnASYYRmiWr/hyqGwt7xh/qH/y8/4yeK Qv8wtDO4MV44tTOPMxs4b5BK/zT15sqMnzo67R6QKpAm7pn/j9mTL/IqlVg7x/Ef9SlIm/+WGvef Ur9ST/o/+69KmfuP//sf/y8AO6c6Ai9Uff3PWj//BS9a1gF6BH8JrwCfBu+wz/+cHqwZpy/xV0Rw XbFzkRHn/7jXEne59l4yufdhcWFJu2O/u1O8OWOsvZ9kdGU3MWXA/mu7oWY5wLNm0ynQZ6rMI/9p FcrTaOVp5MeibJFq8WtD/8bhbIF4IMSBxkLeAN5AIGL/bZFtYWxyJpFp0W8pIlpwkH/JCskLypVz EXKIy9NdwHP1c4BaviCMacHNqswqKJz/zikqLHdpeEJ4tNJS0sbTEfate2CEgO9EgNRTehEuc/V5 UO/WcM7Yg8Wx1gTWz//F09dsgpkyZoBug0PbiWvm/zXP3WmD4t2VIJLeSoRzia//iN2GCIgsOaje 8opPPvvo//9A35FPlD/0v0P/Rc9G3/Dp//dv8Vpc1QtPTd8Dr/zdB+//D79RHw+fUt9Sb1PfVg9W X/8NXwwvWA9aP10vW59ej1///2FvYn+uyFvvYR9mTw8PZ0//aX9fqLeCElYTPbk0E80U4v8VU7rk Fai8dxczF+m/hL6f/xuCcvTAdRVxGiEmwBlAc6b3G6McJRwznBuhIjEdgcQy/3cRdwJ3Mh3GHjJ/ g4FDxjL/3fHeEMVzOIPHAnpTITJ5Y/8g0iHTyC8jZiXIyf7PFSlX/RqxSibgu3HDInfBzbbR8v93 I4IFd5SBtHcCgfSDeCwi/4S00jMsIIWxLETV0i1F2kL/xnHVcC8xLbCA0IBALCCHof01gNYvId4h 1bHVUYkjL6P/MviKajLW2GnYttpf2YQ2VP/ZgzfCNoY3xJAXelSQSMbz/95TkkTlsD4Akug9197z 42r/4Yjhz5Yf4sXl3+VkmfOY///rT+rb6iqdb57f6U/v/6Gv/6K97omk76X/pw+oH6kvSR7/SV9P r2Q/CH0JCqvPCn+xrP+p77IfsyywT7FfrG+u/7YP/7rft2+2/6zPvN++rF+/B7f/we+5P2uBEtDN MBJUbLBr7P8SmBOTFETIdBUIbr4Wdxef/xjTcUjNDRtBEbF0UhpxG1j/z2scYiIxHNR4gBz2IlHR 8v8dBDOB2CMe8nq2j9bUDnnj/zfQHiEi8yJcHZQktdeqJSWrJTob4JQm4GPaQGslNf8mMydD2zQe UYJW3E+Dhd3F/4WB3pXedCxVLPOFwYa3h6Drh2KIxs7SkMaAoIgBh2L/iVOI54cCjRQvhYuui4/l Sv+NXzSajmM1RDcu6q+R6SBk/+z+k5c5mT4GPTA9KO/q74b/8SueL/NvQfr03/XmRKny8/+j9knp 99qi7rpv+/+6rPz///7/B8/9j7APAq+/qgePw7//Bv8ID8UwCN8KT70sCr9pBf/BDwYvDB8QLwif Ee8UHxCv/xUfF08YXxlvGn8bjxyfFc//axkmwGvtIH5t2Miub3MjY//Kp8rZy+RxUs0TcYXNGM8D fydDdLfOVHCRzuPQgs9Ec//PUXXjdpHQsoEi0XTX1NH0/4Dj00KOgHkUj0I3tDVyel3/56EtlDEx 11d89df72Avat/9/ldZw2jDF0Nowz1B/Ydtv/9x80RKDBneDNxffsTcTOCL/37PTMeADOTXg8TnV 4TTrIc+ItIiw7mA7c86U5WA7pP88lIjI4z+JtI0YjP/oP0AT/49pQprrD+u3ekNFR5KYRnn/7nOT eUgvlHOWr/Ekl1/yY/+aOE0pm49Ov0/PoJ9R71L//1QP9aT1qVXD+a+ji7NfV4//Vlxbj1yfxTBX /1nPvVteT/8C77mMY49kmR42Ys9h/1jr/wuPAJ9o/2Cvax9tr29P+v//a59r7MLq/38FzXTPZVll q/94e8WqxgXHlsdVIfJ7ryIj/8kDIjMjfSQJy07NDycoztH/ziHaMSiyJ9TPWSoAzzLOIf/XJStm MTHdwIXhL9HptEQD/+Wh3cCPMdOXQ1jpZT/x1TX/0wHWb9cU19WLKtln14EfwPB7SlJSzxHavdrt Nmj/NSveAJEE3i04gzkyORPlM/86G5RaO0c7oeAg40A8pz1g/zyTPUfjp+N5P98/Z+dNm6P/mYVC b+oP639FmuzjRk9Gn/9JI0c48ZKjy+8VpKSj6O/D/05vp2+of1T/Vgdef6sfq8v/9ZmrzK6PsO+x /3CvZn93RP+0+2VfeAy2/h3fuQ+7P7av/7h/vm+/fw+PwT/CT3fPv+//wD+9j8YfyK+5/8svx1/I b//NP89v0H8STx77elh6miDF/yKxfRTVZCKEIiIjIyMYfq5/JLgk+SYIJwgoBigk3FRS+zPAKMBK J8eDeiqThRSFGv8v0ZkyniGHY+Rh5ZEtQi90/4fI4mScdUOlmWExj+S8Mrz/joGCUY2gehB7QDMz 57WQCf8q4jZk6U83H+qkOIWSxuAT35OUmTY9pJd0lWKcLfDvQPuUoT3R1jwx70E7oh9wPJL/R+A8 lj1ImWHyHJzv4sVB+f+Y4vOP8xbjdZ5fRTafj6Ib/6Hyoyf7RPtD+/RIVftGpPT/SOumJEs0/zpN H04uVbGpj/8DrwS/Bc9OX1XEBg+vjwlH/1aesE+tx1sfDY8P7xD/s+//Ex9l/loyEv94a3RbFg8Y n/8ZrxafcS8Z3x5/Gt8fryBf/2voeC90v28PF78kD3X/JK//Ks8mzyxXeaJ6QtXAekfT6P97E3yM fQrXONd4f+DYl9ho/9lugDOAvNv33USNkd0T3HL/NTKEF4SwigTlU97ojzHgEv/gI0BR6yHhIYlC Q5XjMkIJ/5rRhwCI8oe1iso+leSvjrT33pHc4S4Qa96RjQTmGuYV/5Af6yNDmZEIkOXrWOyImqK/ RzOZIZhiSCOVZu7y1u9D/MaMk/DwAZbBpoHww/C3/5cT7pNLtuKn9rOZdU2Lm6T/mx/2VTxZ9xjh +p5H+QSfN/+holQEoGb6XVXa+0iif6Mk/1jbo5wIb1tvB+9cZgqZCWr/CWmtr2AfDD9jj2SfZa9m v/sOjx4/7ynfJyt0XyePIRv/KK8oP8wYbH9upc0fcU9unP/N33aPbFrMP7YLzP90jSMu/3c/zm9/ v4DPeT97z3tfhK3/g78VMtOjLifU5NQjMCjVeP+KRDFtMxPXudjNNKjZ845/59u73CrdIFJKLhDd cjey/d4ojN7Z3sbppOEkO1LoMf86pOHDO7eWFuL297ffVD9fr5i0QYU4wdXAczcQWt1x/0K26PKb ZkRYRVpEmusl6n//61fhIeAE7Q/uE0iVoqTxROzepVmQPmC1ksCVEv8C//Ch8KCkk/7y8SftoKKn 45X/9pr2P/Pu9a34G/gr+JpUov/5lFSPVZ78afxb/G+x2lhp/7Ol/jIClwIEtOUA/7bPBt//uO+5 /7sPvB9cP18vCQ8K2v+9Xw7vYS/Efwr+YI/Cj8iv/8m/J93IL8zPaP/Nn8//0Q//0h9yD9Q/1U/S z2vP11/Zj3/an9uvyu/cf9eP3v8Jts7/QQEucS4VLiPioy8jiLMvw/+JKOSJMW8yH4yfjU42Uo+k 94+tOEMucWs1EzgwN8U4lP+SwT5gPlDtBjm0OxE7Ejq5/5bmlnlQdE70UHerYJ+BPjL3ONiYjueA ezcR5RFCspn0/0INm6ib70OK94qfO0XWRri/RvyiCKtxotmlY6Ogxo+g/pylUqR0SkGlZqKJTGcA xv+obkyalqlPh1E3BKqV1gWH/1M4UxWs9lQLVZSuplZ8sGr/Vp5WGq7JWZFLIFeiwU8Pb/8QfxGP va1iiMHfx89iSBUP/xbfFgHgBxTvFZ8cHx0vHj//168fP29/3R9wH4XPeb0jCv8lT4S/eosl/3Hs bet4HyqP/3JfcY8lfypPMh8q7y6fg+//L/4wnyivKzeHgYnA4dCH9/+LcDxE45/kSosz5Vnmx4ul /+djjGPoY0FjjbjpwEJzjvX/6i7qxpC0kmGLcfRh7DTsAf/+Mezz8odG6J7T7zOU4vsB/wOYU2OW R/EOWZGaFPL/9YL/j/GaoTux7bH2ifYU9z+c+f+UBJ7PUoT6DZRS+n+hVKFW/6IzqIMAYazxpdKl hP5m/oX/pGX/CaXjpdaU0abpq1SouP+r9Ft2BMqqlwdkBzhfDAbU/wf7rjQIyWK0CdmxH2RHh5D/ pWBlGLFfsgYN1rSGuGO2RP+1ucERt762eWoKtm9tv27P/725bS+/33GPcR++Kb52FK//c6lz9cWv d78bn3i/eu98X/98ry7Pfg9/396Pgf+FH4Yv/4OviE8i/4efi3+Kf42fgn+/j7+Qz4kPLy7fv+En Y+HF/ms8Fjw14qLj05dil9Q9FP/lIz4tRfHl3+bv52NCGUMlz51lRA2eY+vTjEo7sUFh/54E7HDs 8kbToMTs9/Zj7pL/8LBT1e/xSQWrY/FzVYOkxr8FtfDw8mWmFvTU7HCc4nD+Y03h7HDyYUzi9ZT1 N07Z//YaT+/4T1LM7nL6HVR//Bf//EMAUP+5VzcOcVeW/wWxl/9Wd7Q3ASzwBVspBEwEbwV6/17k uXgG2GDlYP8JWmJqCtz/vv++6mLZCPeyQg6laOR0L//EL8U/xk9yD8gOdl+BL8gv/8n/GC56f8uf lDbPD48PNG//0j/Vv9LfNC/TH9fv2b7XX//US9S/3g/gD9qP3F/gz+RP/+Ov5R/lz+iP5s/qHzor 6z//k/bsz5VVO8c78pcjlxiYHf+YpT7sm9CZtEBMm+hCsPWDv0HXQyKdP0QdRTJFR2tDEP/5pJ9x /jH+MUb0+vxOU1Ug+UiTvZxRkAN0VQJJ2Erb/6LRXvRVAUcmTIg9YU3hm+H/qcqpzaqEqx+sJVFF UnRQ+v+tZ1PEU2NUFFTWrvJVM6+5/7AJVoexq1mVsidaBmFAsUb/X3FalLTGW9VbiV+ZXy8Q3/9f z7tvvBlheWLqwB9l3Bk8/2WyZl9nbWkYHPlsrBzfHn//cGxqLyI/xt/HLyUPyU8nj/8on3nPeh8r DywfLk/Rw9Ff/zC/z78yfzOPNJ81rza/N8//OW8saYD+eV48Pyxv0E88z/87/0J/PP9ED0UfRi89 fzym/5WF8FDv55XiluNK2Jd3mGT/mGOZRJkXmgXz6PQvm8L2Mv/2GZz49wf4VKCQnzH4pPey//TC +YJTxJ8woZSm0KFYoNP/qlOvkQgEqvC38LcRotGkVP2kJK1YNKT3pMNV4/sTphKipZyghEJKn9Fz AAr/pvRcFQJfXZiq8l50qt+sT/+tvQgUrwgH8wlk/SEJmrCJ/7Q6s9RmWbPKEqK0zbYauF//ucS5 AxMluQm2wRF/Eoy7FP8UKhMDFf29GJWQF0kbtBf//xitck3B1uxgwtggqsMawx//ea96uinpe8t7 Gz+4drF7mP/Jv32rzd+Bz4LfRv+Fj4af/4evOxaJP9wfis/bn4wvjf//jw+NH+LPks+Rz5Rflf+U //+Xj5ifle+Z/5vPkB+a70Ma3+xyoI+eb6FZ74Zr8BZKxP+kxPD3S7Xx//NkTrpPE/Td//VlUMz2 Wfc3+Fj4M1MUU0TvVAL3oPIi+nKUVPRVLfxC/wcz/WJhgVkkExBWkrdTWRXf/mwAkgCmUxEBYFq0 kfgA//wyXQ9dX1/vBO9gjAYUBtv//IIH6Qg1Y5YJLQmysTUKxf8PtA42wB8NIw6WayXAhQ+Y/w/W au0TjsYfE7pwhBQcFV//dgLKSss2czkacswfzSUZ///N6nHXI1B+snIRIHHRE9EP/9J2IHN22nbe 1K/VvNb/2An/ffLYl34+2WvZGngv3A/ePP/Z2tx/gF+Ar+Hv75CBBuS//+Jr5X/mj+i/6c/mv4Af 21X/6s/uf++P8J/xr/K/88/03//sj+Mc7Vd2ouRmdqPkF9kC//jG+Oj1b4Poo3NJsEqiScH//fNK Q6QC/w6lpqPATNgBTfen3k6jA417UFNawVDaWsH/WtCrulJwrPlTcqxgqhJSMP5CtJBRkFrQrtNV WqxgtAH/XaNWtldnWURpwbHEC8VZUx6cX7BV5AohSeBjSlL+Uqsxt2G0Aw7kD3RcxA+o/14vXna3 cbd1XtgStmESYJ//uxe7RrwmvQ+9v2TyGTZouP+/ab9YG61qFWnPbLMeamyv/yBvcEMg3yLfcZEj 5SHCyg//yxvLiydOzJp1DHZFVdC3cVC17+f3KxDvKxT3/ytSK2UsZCvQK5QtGiy/Lu9/L5QrdiuT K2Ar0CsiKzDe/zHSMbIuMzKkLiUytTGmMcnfMhgx0jEWKzExxf807TSE/zGxMcM4+TFjNIgz1jq+ Nb3/OUw5azZAOig2QToNOpU0d/83czXkNqQ5RkJkPSU3cjEXfzbiPS5GDURXR49Gv0lO7/9Jn0Pp NIRLv03rQdRN/0Qj3zIiTthQ99RRodD3fIArYPc3YH7RUnP3o5AsYFND34D/K9A3YMUwdRBToFOS U3DUUf8++TdkQY0rUrDBZCNko1gr/2VgHWBYc2jDWdq/ImXAWdL/wdNax3Xws1DB1lx7XOZeJv9c kb8gdeBetXDCXwl14CVyv2DXYZIdYHXhYZK0ELWwEL6tZbAowSjBoeDQodZjck/Mk3UQY8Bkct7v ztDev1JgVNBlIFJg34BSYNZlQv9mFmVCodBmA2UB0JJ2oLAg9xUSY1FwkOesYA2RaFNngvdpQ2SD abPnaYX7YWnFapJ/azZrVmXwa5Zs0WylztDv/aRAe2uRZHNs1mzyVNBs8f9l0WSycDZlIHDTcARx VnGl/2bScrRlM3KkMhArUGWRdGL/ZvZzdHQydBRzVnZ5dgh0Y/93uDGwddRSkHQYdCJ48XoH/3i4 ewZ7s3uke6V8f32EfYb/UsF6clKQenF/hIBFMaEsY/9/V0USLGeCzH9TK+RlkbSQ3oQOYAYBocE3 cf8xsIWQ/4VUN2CFr4a/h8+I34nuNkD+/4vHi6GKIYqPhWJB0Y4/64vIvMDnrtDeruBn8JAwX7eg N2CQ75G6ZSD3ruDO/67QkBCQYpNEZIGLuErxSvH3jAcrYI8t75CBk1eQIbUwn1ehkuGXkq7Q35C9 97Ag//thi7WzUJbQmQCLqovEtTC+vYuQi8hScbAA0FH/ruC9IxH/kIGQgRnwnEHWlxr/kFEZ8JTh UjCgcJiRl0aTSP+f76D/og+jH6QopVWTMKxAu5BCrEDWpnGrIKaUzqakdaeTzgSg1gNwqBCoY3Ns a8aoh6lyY6mS/vC966jh/dC9tLC1qpH90KriAarGvUpCrTkxnHhCOaWsdKxHrEGsFq3PrNSug6zE B2B7tZG/sK//sb+MB7MHjAWyKdDBCKHQwf+zzbY1mi+2n7OPsxyzNwfg+rUOYHuLsYuhvAS2DrKP /7yajAeVkrxEvi+zN7wEBsD+vQUQmBDAA7JPvv+8Q7md47xnuZ0YGEKMB7uhi6HhHpDvSkqEWvCV FcNv/72sxmq0l/mADnHJgcO9zOr/t+/Gf8tPi8QFEKwAhPDR/9e9T7MfDgClDnBzyq+2vz/VD9hf 1O/cr92tCKCUOYxCjK6EB+DeOTkIgPI5rqA5lN/ZrGHf/eCP3+Jc48Piz+GSDrCUnJCLxtkTUMZa hMAOcJQOcKxga97w5yCUybCU5pDnoFJ6jP2whNi/i8VB0axwlOQxKazxrTGukd+wHpDz6F+PSrXn 6oDqFuow6oB/7XHC0OzQmVXs0OeBrBCU+57BZSD/5pCskQfgwtDJU/r//bCtybDtcq7h7YbXIbq1 ALDO6oDxNA3x79+graYg1owlybCMALCt6N9a//7wlIuqE/DeBKDG+Q5wpXOpUAUQ7OHxMd9h7vfj wvEpruOcSvHq4a9B/+og6nHw1O137UfxMvfc+j///M/93/ps+ZH5lfmlAHX5kNYpALcBpbUC6DED OQMirwSyAiIEqAMxvQIgvQYT/QYPIQZvCDP5geGB6E/d7H/XQLVAu/C7gx6QjiLv4KXn5pAL0g5w jFLJwIvByGH/zdENA8LAu7C0iYSgzeAKev3IYDkN98LxDHQLtw30yGGLqsAL1L0PdyEYSpmxv+rh yGAUEBRjEPIMIu/N0fghIUqLpA3DDnIMQe/g/q0UgpnAEDQMQQxBF1MUcT5aybEME5DSDKHIYFIQ /BBSGfHIYdcA5nAYUg1gexkVFxG9FIju4eeQHrD/7xohFpkMwA4FjMmxFXO1Yf7nmbEaU/PAaNAN kxiShRH4GBBKFFMN6NNxDQOnQPtooLTj9xogFQPJ0BnxEST7tOMfgUIYE6ZgFzAQBx8z/xhnGzeQ 1erhDlEPrMmwDXP/zdEMFA5RXaAUQR7yaJHIM/0bMYybYSSkDHMSMgtUDNTf54EaIYvELFcsLHsS Ribevw5RF4Qt1hnhGJIYo0oRVf8S7BcmIKATSS79Cn8Kj+bQf+dRAESvcOzlAlYFFACXnP8ARjqJ O/89DzpW8SGvUJAh/9wPlMINYK6hu7CvkAmvQr79ZCD/6iDqETqGr1BoAJDf7ewb7ztTBRAhBaas UI/xv+mSQQLqETtw6mCsEKWpQP7W+wVBYBzx8RLqYKxABOivCCO7wBQQ9TDeSxac9uH35vHAdGQg 9+cgOYBFD1RRX/Pg+ODAg/AkybClhQDWrqVNEGgAQ+GlOpalnLDe/wIg8TFLZUdTnJ1x72H/RvVS SFImBKXxM+2TSxVUKv9Wb1d/R0FLOFffWm9bf1yP/12ZR2IHsV69YA9hH2IsrDH/CZ/ZHM3RybHz sfZSDXOLwX8aIUGB51MektNxGiALwIT4zggIGPENUNdJyGKLuf+7oRoh9lBoQGgAaIMPkMKhX9OB 88BIcWu0hQDOZ5PG/2fx7tLJwBJx9lHngUGBbTL93vAQGOBoIPASFyEdtMgG/2eh8BLCwPQAi7Aa IYURmbHvu6LJwR0CGPGcaFDoIGgw/29EtOQmhJtkJQNqgnMGntC/lOBn8a9wbSLnUWrwa6gh/Rog Y/ZRu3Nv8mbdEnEaIfstdMlT3gxBapOoQHcD03H3DlF2AmgwEGhiZ1LCwSU0vyaEb0SnABrSmVcb E3uZsd8jIRihu3VyI2rxQnK/cAdf0r13I3vAawLmsYR101L/JiF34xQRbeFswecRLZEY8v8YoUhx GfEc8WdkMTQlN3k0/22UhlSYAWdk87Fq8WghgRr/wvEOinfkavCDR83ya7Py0P+U4KcAa9EL0mqU bTpA8YkqezZ/N79a4XID0VlRr3D3tasgzqsg1gUjCH219lD9iXHGBPMH4wfVlg+XHwZD9rVKsawQ tZ3Rka9lQ0Eyv25A9A6cj79QUyENYMaUx+/qURzxnw/sKt7t4VHTVeS9BjGlRsFPlByR8ROtDWD+ valARuEAkqxBblEC5N+gv54UWUZZYJWBTAEElq2pQPre5pCtT2SgwfZQpxOfvPXz4KXzseeEkBJx 8+GsEfeZceWg8HBalaFR8mLn6BD5tTBKzggq6iFE4UPCVdH/l98Ex5WBULH2IFHBlCkH1P+wmpd/ sg+zpbLPBje0b7D//wgvrpS0P7nPut+76PmB6fF7p+/SrbUgsW5TewJmdlp9ctPWILEScRQh54FN sJz/dyFIcQ+sebIOucHuH2NvAF8igBz0bWPm4Gv1zoUzlO/2UVBReuN3EVrzhG1kvn3/06HG0Skk FUEY0W5RiwTFtP/CVHKh7wENMdCIge/GdRUg/3DCbRKGoiCxcqF6gVAhwiH7yRd5A2PBCh6hGNGG U8ii99Uk54FoUGvM0ueQwZbnEf/CRc+jfIHwEnkE7/SaS3Ez/9LX2vRskMwPz1L3gNeWgd+7+RLB 86Vy0dbELXNaKVT/iSPapXXUckR5BBjRILHBZN+CO+rQx2fgVXuCxu/gxHD/LVOAgM0r47HAR863 dvN24f9zIsWKH8J8cGfEblHHOMFz/xohe3PH4OPAva/rrnKh96HrAuRJYOf2sNb3cVDiXwX/t8Sj IaXx7cAoIKVGYh/w79de+lFx9rDnLRDGP6Lz3/9A85MBQXI/350pQ9AiYKPh2zpU8qe171GqUOfC jU54SYSQpaVQcKXnUIDnd0lhWVOiAK0xhSrQJ/Gc/yJgmZCqYFCBEtBuEKoAx8DE562bkHNr3gAR SrT/SrH9Me+B74FRoRLQ+6EE5N/zMtWhqWGEEf5Qpf4gQ9D7nO+S4IT1UpuQUvCtQTkCf5Lgo1NV 2S0QJSAoIPMSa/85kKFh7kj8Aa+ApxBR0/Ho2/gpTLHvA5EtEM46NfGs/5iB8f8ICgyPDZ8Orw+/ EM//EdxV4gvcu4QMWxPqtln4FvdKkr2f3EveKPEjIdY0Mub+rXUUg7SH2nmUmmpNsMkF/yUypzN5 Om9EeNHj4XsTbAL/h0FpdH50Z/F3IWc0GhQmIf/EYeMj10Gbm3ok4LNvkm7g/zBRIrAiwGWEbQMy d+oB6CH/i4WicimSm5ghNnCCfnNnof+nEnJ0OOEDkWfxJMR054O0/3A0MWHItIdCMLNnwWyki2f/ Hp0ysXFUbxFnY2yRUADXmX9+0X6hy+HN8idCJa8m4LW/Ju9A8W1ka1Ek8XAGUoWU/9eE0ASPsy0n 0yF5sntEdyHfZeEyo3sykK984echZ8fB+zqHeNBzMDQnB9eUblQoJP8ZUdeRjXRoUcFkH4SPsXsU /0/DfyIppoxxIbHF0WfgOp//RP/JykpwkvRjUHYw7ZKToe/HwKOBpThNsL1RoaLRBdH/qoBMIFlj quW4GryaXwOuqO+ZgPrwCVFJEJQB3ifForH/kvDLhE/f25XHkffBuAW8nP2tUJzvUE+f18weYQch oVP3ogPX+a+Q96PxCNGqgfyg/WcgOQShhYBYAJuBq6FjQfWp8L2roNatUKFB7QGhQv2udq3+Ub1w +vD9cHJBrVD7fvLXve/60NWhWXGmAUgDV6rS+FeUmDGOIEKk0CH/rOCqYKEjCtKhtK0hAYBfMf+t dpiVplVNQf0xkuCjspW//0svtv9kj7i/t49pP2eurnf7pRSpAOfL4PzAngL35KZV/67UbDqjlGw4 pPVoBL1vcm//15F1oVu9xGFbvYsGLfB99v/8oKvARICDJHnCfoCm8D3S/4LEdlo+oUR0ebTTx9uk 4jH/f2Qy0txMdQ9831UEeWbXhf/XkyUhxGHXmhqhgBgkFoEy/9ec3PHQYdM03/FbtNeRdNf/14Ql IXgxdoTZwfOgm5LoNH91P3ZIINFEcE9yGeYrob3//KB5RcQHh/R6yH/6gvkY9//bEeoU35Hc8UR0 H1PlUncR/8Q0ypDpkMRwhwPH0CRw1sT/O9aEsdayxYGPEnG/23fQYf97xJSFI7yDdzPDN3Un9C3w /3lCeAEuU3xFPqEycXmEeDH/lOTTxXt5IrSVX59P7Gmvw2/94qbBYAHKwM5HcISx/7+mwKJSAYAE cW6UWrHvx8D/7fD30u4gCawIRAhHoRSswferoSJAbUG9TXMC4JT/9PLf/OD1Vam/9wdPUIwTIhRf /251F4CeH9gIXKLfoFcAX/T//AGL2OmxpuD70gik7XFfod8IpEkhXWEEgXFwtVlBWCH/pENd5xLi BdH3wVfxbSEDwf9s8DLycuTfkWDxV8GnQauT/0hXEf8ARUczBYNRxv8AsyD+5wLg7LFaBAgcWxJY tKR//wtvvj4VuvIfcVD+scD/CATvE0G3v6YJtJP3cXBhQrJUffOg901xGqChkgSBV5DWb2zwyADv YO2g3l/RBFOl6+1xGqDvx1PWtPOzMv5R/6Ixo+GtExdvzG/Nf86Pz5/30GoqlD1Te0RwnFDSb9N/ /4lkJRLTz9Y/1087T8lRqZ//2q8kDCNhTVDc7xlR3LVCRf84M8u/4G9OLugB31+I3TES/5mUGbGt f+aP55/orzblMVT/NjToz+v/kQU/4uwv7s/v39/w7/H/QDOQA4nBtSDR1Q//9S/ZD/dP+F/5b5jT RtBXQv9IskdzstFt1LEjYWJd40pYr0jiojI7MKbg500QzklQ70x3cEX+0XFwxkmxopEFcfvqwAmB padBV5GnogHfHmH/TyLLgFiBA69cZjXibIRmir9qSAjRGVAD/3LgYPDvYSD1bOG9yTDOP4BsIlXt GnP//sFZwk0RWIGmhMtxKyFs8P9Y0rMRALGj4QCEWgoA4aIx/6ZXVzFXwSphTUB3MLsxy4D/SVG7 VWbZa9RSLEoyX3HI0f9tg2m1xjFc1mF2YlVNQE1Q/6FxVbNKzxF/F88ZnWhoE3L/IqB7sLnxXkdM SHegYREWwf9Z8mJGakRZAkkhwhRf0TdQe1qxyGHWSSDHEViANrCc3JzvSVGhcepQ50kgIaB/oPBH cR+iUyAhgFzysnDv7yFRTRGnEU1wxk1BVzFNcP7ObPBdsnF/Jn8njyifKa//gXuIcpS/LN8tzEkg 7Y8v//8xDzIfdvGHENy/NI87ioSi/4iujEYg4IznmOKJoPbfOj97O0+Y4nOH8TgBO39GGnv8ISHq QEFQPb9AX0FvQn/fgbqd4H1fRX8qraWRtEfv/0j/Sg9LHzcPkiDzlCWvTs//g+qLwDOPUc9S35/8 +tRjgr93oABxWNK46sQvbye1ACT/o7TI0QCxyrSi8bKw/pCiEP/70sQDDpLlcAmBAa+ov03f/ueK IMhw/sBjQMJPYBvH4N7OFPFhn/aCuaCMvQoJ4t6tdSviUSGAyqHWyTHKgf/qUJqgd7AMgJiSsrAB Ab0if7wRPvDFxMjxZzJvAQmAxu/IEcqBxjH/ZqXIcIcgaKD/yQGxNmAfv+/8BB9xIzH+1L/BWMZw ttFmIbEzvAecvKH/IzEW2L7PcT9zD3Qfb4q20f+zEb0DFmITob0EyNG2oSFSn8iwDLG1IboGx9Bj vbah+1UWIgHvisEJgchBemIL0P8jwWXxFnEWca+BoOC8oMiw/yAxxvEjwRZxp3EjwcbwfAL/vKHI cYmge9IVIGoxX1Hk4v9/z4Dfge+C/4QPhR+GL4c//4hPiV+Kb4t/jI+Nn46vj7//kM+R35Lvk/+V D0N5vLCW7/+X/5kPmh+bL5w/nU+eX59v/6B/oY+in6OvpL+lz6bfp+//qP+qD6sfrC+tP1Rb++L7 Yf8I4Pu1Gc+wfwbj/CT8U3jy/xD0HkRjc/04HAFbYAGCPQ//6bO7IQsxA4/pwsfgvGL8+e+w7xsz xjHqwK0hgLXOChD/FsD68/vRHua3cAos0MRlMfdU4wxAIoDeW8PiUSCQZtLvDjLDocFSd7H3xmP9 ogmB/3fxaPT/MxroataxT8Uf/wT/HfEd8sITGCwJETgQdlAhsP+yw8IREOB7VBDTapfLLVrU//1H BhjDI2N0xSkblg9XXYH/IPFwEQsxffHQdPvRyVF38fUhsIQlcKV68XxBcHP9ov9p4DNgFQAicBzz EOB8QWWRd/xkdnHqwMYLMSBhEHC1f/txeLHJUclR0lElcCTQUv1YYZwLkQVh0lHVg7jzEOD/dnP9 oyWP2o/bn9yv3b/ez//f3+Dv4f/jD+Qf5S/mP+dP/+hf6W/qf+uP7J/tr+6/78//8N/x7/L/9A/1 H/Yv9z/4T//5X/pv+3/8j/2f/q//vwDP/wHfAu8D/wUPBh8HL1RLZxL/VqBaIGVRDxBawnTvCt91 L/9Wt1aPcpNbSNm92bB5oSBhu3ARIDHvvjxu8NFRlA4vTxO/b8XJ0S7QjMa8DN6/0iEicWpCaBEO AtRQrWGP/9mwWTC49BWSHEEIBMjxF4P9H2HOWWQgMR5XJFEjkDZw/6+AdqJyDxRfce9WFslRCaa/ Y6RXTHAgfEEc8K/BjNNx+zNQfPHv1wEVoXxxveG/w//J0iTTt0DYAcAA1YElY2N1v1YHLtB7omNT Hg+vUudaIPa9f3Fdgd4RAr0RLtBmAP/R8tmAdqHJUSpxbXC/slfk923RxoNbMaXTosISxnFtYd93 UQ26ssJpsUQA/8VguSf91sSUI1F4tCuT2BGzhA3q/19R2Z80nzWvNr83zzjfOe//Ov88Dz0fPi8/ P0BPQV9Cb/9Df0SPRZ9Gr0e/SM9J30rv/0v/TQ9OH08vUD9RT1JfU2//VH9Vj1afV69Yv1nPWt9b 7/9c/14PXx9gL2E/rlbJ0b0T/2llCfTGpMUvZN9l72b/sib/dzG40LWeeaEp4NGwfIDJg/e48q6x fJDeM6d5o3kAZ9//bcvIHLchEbq28dOhwCEqch94wg3hygC+LwgBxsb3tStjlH2QpRG1wJFzwNN7 r+C40N4PQdTEzITTQmv9exHnfrGzY85WbX93j804fyhkx3ERIMQ1xf/RshEgpc/AISPhLaF28NZ7 I2DUke3Ssb3QUBXQ99SRa9AZUPfWINLhtaD3I+Ej4ckhKwD+98LwKCQTJTCkI+EuYM30t88aHIDV YO8YMBXQ3rjQ9q0aIdKw92vgc4AjkNEw/ufR8YRxvPEkoYOxLCQvVv/CJNbwKrBxUWr5L3WGudZi 54jFL2O3IL3nfWPKQREh/8pxg4FxUX4QHRF3e9lPjk//j1+Qb5F/ko+Tn5Svlb+Wz9+X35jvmf8I CMAg93IQtc//nQ+eH58voD+hT6Jfo2+kf/+lj6afp6+ov6nPqt+r76z/864Pmr/e75vvsV+yb7N/ /7SPtZ+2r7e/uM+537rvCAn/fSEI5CJoH68fP7+vwL/Bzf/LwQ9IcHZyETNxGuQNx8+zupxpcLVw 9NBB1eDOLvH/wf/H7yk21eDS8I2/CAF0IXdisSazcgCtcj+bZX1x7/73EckasohzdUGNcC6CLvP/ KUUjsHayf2Evsc/Zvi/Sv/94GS9CfhASwYZx018VVmrBW4OxdvC9exBpYc4PcM7GUtgg2BFjY9Z+ cRqwftYllH4SMUOCMdgRKeDn/dhA1h0jL9AbgM920IF+Yvclwc/ZMtGUKkHcMiOQJKC3dtAPwNhA rcwQg9HWGiH/g+GEoYShI7CKwBgwaXDMAe99cnNgf7Ix85zfxBohGrH/i2McwH/RgGDgsYsxiqEX U/6cKbF/MYsxJBF0sSPhI4HfKeDkwoQRfqF7EN4JEtOu/3zhjZ/on+mv6r/rz+zf7e//7v/wD/Ef 8i/zP/RPCAPYoOicEBDegK2wf/c/+E//+V/6b/t//I/9n/6v/78Az/8B3wLvA/8FDwYfBy8IPwkb /RqwlPXhGAAYPwuvDL8Nz/8O3w/vEP8SDxMfFC8VP2Jb/2tgeW8XnxivGb8azxvUY1P/b9BpZMPF 4sHEkxc/gwSLoN9pcS5ghtFjAs/UMYLUeL//jI1r4HDiJC9wsi5gvNGHMv9r4CQfJz90VHPwglNr YHPw/t4uYcT5LiJ28TExdLDmEv93vxxKbwkr/2MRMTDVMXX07y+Y2xGNcHsB3uCxcVHf8X2LMO/e cXWmhwXhESrA7/t+cWlAteIx5cJ/EHWpiFTda+CUbMFjM4nClOLBhBF/4RF1pWLwhBGF8cNwauGU /36h3/GHcTfihFCF8dig52K3f5Df8MaC72qRfhDOjXG/4jCFAH3w4LFrsX2zxirA74vgw8CEoeKA 935xjXCFsf3GAb3iwW/QwzDDgMahIEL7a8AqwM5qkXFSOIFi8H0h/4BRitFq8HX1bu2Nf0J/Q4// RJ9Fr0a/R89I30nvSv9MD69NH04vFgXDoM714FrFUP/akCY/UV9Sb1N/VI9Vn1av/1e/WM9Z31rv W/9dD13a3/BfQb9gD2EfYi9O3r314GP8ISGAwMw/Zc9m32fvaP//ag9rH2wvbT9uT29fvHfRQf+9 N3Fvcn9zj3Sfda/b0R1B/4OBw6FBpMYRihN2HyI1xRR/gQh63+ao0qzFQTLChQDW/0GqQaHh0dnx 1pQ5McoPgU9/yzFQUDaTesLPcSrAM+Hvr0FwH9LQNzmQ9+IA3nhq/9Kvhd99Kcmj2AGFE8vD44H/ PbHZkTgR3wTDocZxO6E7Ef/h0SWB2TMyNMuk2hI40eEQ/q3YEcah3hBxBHrE1NHigPyM/zBhQUK8 wDjRxkTe0FzGe9/Q38HlMK3h0O91OxD3PkCUkbH1sTrQzv3eEIxBcd4RPkA/Id4AxKF2KZNS2ECl 4dHdUUFwpf8+QcNAOAKQwcNwlNHaEcnB/zfSHjJAAjIzICDlMSPRMGHfjNQ3ISYAm9E8UefXgIUR /zbiOrE/wjRjh5/iUUGfnJ/7FgQosIxQEfYfn3+gj6Gf/6Kvo7+kz6Xfpu+n/8zO3hD+e+IA4zCq f6uPrJ+tr66//6/PsN+x77L/tA+1H7Yvtz/7w9c28Fr1sWS/uk+7X7xv771LOiHeEOXwayPgvu+/ ///BD8Ifwy/EP8VPxl/Hb8h//8mPFqSC1CJPHJjLn81vzn/rQKp/1N6I4MbiASiBqeL/cPJ5ekCq z4/UXyuPIt7hQfcxgRYEOfDed3AXAYw01/V/OiHab9t+OZGJQ9DVMqOtvzVD2aQdMDNw4yH1sNZ9 0f8v2C+41V/MpuBENLQ7oOTx+32Sd3DWOuAxcDygl4E64JbnKLCNIZTewPfOOyJ2nJPxOZDvOlEe MTrg7/d3cYoAHWHWknDX9TzxMJH7MeGQwN7mETJG0NR+IT7x++aSMMDWuUKbsJuhm6G5Qf/qZOoy 6tG5UDeBN4GQMj7g/z+RHjGLhD3h3rA7kDMQN7H/PeGUUTjRP5Ew8j/QipE8Mf064PeQwOYy2hKW eIij9gC/7ZEx4pcD6dGLISWAnD5Bv+TxjZEy0T5BOiEosNbgRV8i/EF/9n8WBj3Q72SAY9wYGIkg HcXbj5zuEdpfcbg7Y4yUi5D8n6mz792KwLVQT/9O3sDO8XA/oP8Av6lZ9aD1vxYEO6H4QQKftwVL 5PCY8aX+ETsQ7wR3uztxhJCUBwAFT9wIxvwx77lPCx8WA76wjD5AMxAKL38N/154B9EEfwkfDPw7 oK30EBh3cFI1UBN/FEomAMjWGBAMwHOlDOoP4f7eXv8DiSnxCg8Z3wIPG8uX+lGEkOfge/Iwc5yK wH/ewJFAG88j8gyBHg/b6r3/knBQPyJ/I49wr9Zoh18nD/8oHykviDYwkeLhj3KXMIqR/4qRl7Mp 7y0/mi8vXzBviFbdHVHO6yTYYTbwjPGzjqX/f+I9MBjvvY6UgYlx0mF+AN99kPNA3yLzQIow94lD fZTd2CG1g6E30YoAzjdFiVL/OdSaH4aF8LTx0oSQ5FDjgPs78Yjg1pDAkaDpgIxGkgD3eECLgePQ 7+4ik3GbgO4jvozkYeTx5PHtkZjQ949B/+Tx70ORcQxxkmCbgN7BiOD/5vA3UY7F5XGPYoowj2Ly 0O69igFBwYrA55MB8tB+QP/z0O1hJLErESsR8zPwtZfk/zvxNrI8A44h8GGUgdgxjHD9jDGMjWGW YYow3KR6NNhR34OQ6eDZU4LRBqCE8mKNYf+KMObBitDz0OagOXBLA4tQ3z7ii4GZAY1hvqDv0mE6 3/+bb1Bvgcs0gKoRkhDj4FLfc0+h8/CEMb6QNH+peAj4CFoIZGD8YJAQVs/6Ud1kUFpYEYBPI+17 +HES4VdZT38S6XBzExBSmWBr/41QVJ/KkIuB+HGWYFzuVIH1ZCDO0mBr6XDmIFzg8tDZXFAQUmRR VjBjvrD4IP1c4MYygFgR+iDygFiPygT/khATAFZwBE9lH1IjExFhEftWYYowvWRPaE8GMV6AYLHv YgJqH2NfFI3e+H+dH+RwvVgQa1YxXDEU+WDRUh0B/2dPvhRhwfAQAK9xMYrAOXHec2CBHuRaUVgQ SpJwYVCv/jCBy3FAYLNahJCt/hHXHZEH0VxgQpIQlBVRcTe/kYFtQfogcv9+xQxxpWER//hAVH98 r1lvytbQOtb/gG/fgX/MrIAF6MNGQL2PQUZ3e5SBisD3R2OCCuBu3mJKes6IckJMkdKPiX+Kj7X/ 5nFEkOgQklDsQZPx5zNH4f/dNOe0BvB7z733yrI6hXdR902B3uHZEdY84YkK3RXzQH/z8TfR7cBJ YZOjPYDmoN7v9XA9wTOlNuO9lKE84bkQ/udN8eLhPUBf4fDkM9XjE/c8oj+BPLC98GFDQUix2DHf RJBBgFawX8CWQb3twABwu3Eg6XCUTBGaoV/A3j+A7e/BveWxSXDe8tD6YEgy/+AHjFCIgOMRhyZC 1ePR9XH/3dDp8vPw5vEk0d9/4gbhxu/K0klx8GHtwOf1cB2x7GL/7fHK5Oi23oGYsPPQFVDSIv3m EedWEJpB6XD6IE+QSUH/5PEzVI4VnAAyYdgxorHgGN/WmfVPqk+rXxVQ52Cxjq97ygLmcIQTEfPw vt9dxe99VjBzsDFJcFrf60Le4bX/YOFJQKm/vaxYEfPwqZ8AM9++gexBMvFtQEJgvSGerNF/tsER kfdbtwB1I1yBd0Ct/yGStOFiAaWxsDPmoHgwBuFfYOFYEdpPyke7AWttQFr/IY8eH75QWBGwMedi YDDpcP9csbxPBX+737zvvfBYEb5PvfCBc1KghhC0893QtSEh+1VNb4Nz8/BxKLYxmeHsQf3y0ITm cDfgtP/LYb4RX8H7uK91QVpf8djxy2FtEXRhv6zRnoBtMtjxHBwzEXPOkv//q5wRVEBcohbgy3Dt AWCx774RSUHTz710jLAzTgCs7//Wz8Z9JN/Zj9qf26/cvy5Jf0zwN+M6qTqVLG/gXTjga/3oEfd7 IEmRTk/j3+TvoGT+nJoQMoDVwLbxRJC3AMYw/+0BwOGN55whmnHsEesnS4H/RJHYskaG8/E84vEx lsCFEf878+VsnhU4Ikcy4EHf41ww/MZrIXA9cTfR7tRN8e6h/z1BlKGUoU4m4CSgNPNSQKD/S9HQ 8D5AjnCaYY0RQnF/Ad/ygEvwSUE84I5h1p6RpMH7NlFAoOdrkTzgN8FJQPPD+z4xg2CUooGUcD0C Lk8qeP9CUfTRpVFeEYXRqXCfckbTf0sSRtb6OfnC+7IyMT1Axv+UcEEwTUClUaRgTzKDZZ25/ysR 4nGb8ekBjnBJkepDogD/PLAG8MYw6uCI8pUG+1Q6n//gSE9vBG+3LgOwEcHIPRr138YwFVBpocYf aTX3veGwMfewAQj/IOTedwNSz1tcXJH/YLEIv5iB5rAdcOliA7BfwP+LMSF+A6GuIR0xFnTVsYxg 3pxYEXgh1b0Qk85WMUkR/xLSA7BLgWAheyENT714jGC/H28ZPwOhUqDFsWcAhDKC9T+AzoxgYxlP WzzpoxYP/RcfUvIQsP8ScRDxdqEDoX97IBNSEzEDpAOxdzEKM2v70iG/+UoIIRLUEPFEkLib99TH ZxFiNOefMhNRG4AGwP8O6nshdzEDpCVhBqEO7ysf/2YzzgQy8cBRwFFMEB4BTUDrA79T85S94UqN MC3vML//fd9+5Yr/M680vzXPNt2OFP/e4fFGoPWhBjbPgruYIEqg/5mBkyE6CagWg9U6L4tforH/ 6MDAQrGl0LEpQEZBOUiiAPvA4ergtZRw62D1QEiCPOb9QqOtloGgdZ2B2SWLaT9f/0bGl2b7c5CD 6kSFZOxakoa/nYCcgUDx7qCdYeax1nsg2sZE4N7YsXsg3qTBeyD/pkC4kPyxqXBD4ZrAA4CpcL93 cPzAkCGFEOdBTUH3FUH/X8BPIfIkRBdGvzhmmGHm8e3uoLXq4PxxzmuQPJDisP3rEMbyAVOBoiFE 4JZw8kD/VBGiIfLxmPFVAVOx9oGOQf2YMNb4kP05h5uStVQRTAL/UJjrYejAovCR3aiMN4+pX/de X19vKNKcIgFdv2ZCa5D9+dF7GoFdr7lS1V+/j3Cw7+rgx5Vm/w+Xpb4RT8Ffv++FEHdwEbdv4Iwt cWd9oiB/ECIbEwhyb4Ga0WavcDTO/9N6mnCRwLTA03+9S6IgalX3cp9nvsOxtWj/df/Rim//9zIK cc+PmfdotBITL0FkUvuydA5Te7AxkyAYOMkge2H/rMBtpizhzjHP7Q/SegAo8P+wss6Rw7EascER ZJ0o8UTg+3T1asN7uZFtn4VPKZHM8P/JUaFga0Ju4cmxw7HEH710/65AyWAo8HT/iq+IP0Lwp6D/ 2R+Nz47fj++Q/95p+tNIlP+m8p14RnUC1JS6oALuoFPR91B1ANb8Qc7r35itlLXeKPvmoPyAtYfV 6XP4kextSZb3lvn4Q+fgtUTh39cBz6Bf/5Gv7Pail6Gv+BankfyggKD34uHx4P0QpU/BavFaQfHw /wBi9iKB8EMxpaHDgPTCybH7uZBOYYQAEfyx7qBdMU6Qf/0gVEHzIwG/pG/f0f0Qxn2l05xW4fZR lnH8gcgA77vykebAvfLBTYE5QIyuEf9aQ7YAQQC64fLB+/MBJqsv/5o8sN8Bc59/mQ+R2kTAA3/n uH8uH8zgxhgkgGSfaVL9ZmCUgXRigSbhuwG3pwqR/yNUt68RqM5h00G+nwtMbvD/FRHyMCWLwLFq ARAyI/ZtYX4Ih7DIAIfryDHOAckhIf4hfUHJcerwf75ueNNB0xHvCafPsRURxSBrh3Fs0cCqf6/x L1GDJ8yfzXu+A2aAjL97UM1/0C8JlwhwyhJjhrH/G3DKv8vBbUDMHxHVe3AYAfKtJENjACNnzxDn sYF0dwhQKigtQPckcSoXBtDW7yIxfSG7DTygzmrxxqE5QPd8UYGQh7Deh+8agSkhfeb/HdLFICew DCDArxFO2TEjVP+7AU8ACHHKIQpR/IBDcOjA/+kREarFEBrAROB4X+Svi8//k/FOMQLSUR/nz+jf V09Rn/84w6pRROFT4LBCVQHtcfmB70hGo1juzDxh3viRnuL9U7+fEU0iVdA806p0XWHG6q//O9fp SEIRRODHYJth3oDasf9OcLB0neVapu9J9rVJshtw+a5gc+9Fq1e6+nnzT/vf3/zv6ndEsVpBPKDn 9hPFUL+vQU+hUtBN4a3hrSO9UCH9AAP3qQEIUS0ACfHOcE/Q70Dx14Glo1ZxnEDB8HH2Q3/97/rb 70iqUVOBAeETkM6rPKFQIO/ggPem8PdA8b9VwoHwrhFA8U7RrnDOpvH/UCFOcP238w8LXwxvRl8O j19bP11vEm9hP1BBrXSxxvfjoBGhZADeIgFu4eKXRODXrOCpENITY0MAezygI8D33mNs0XwzcxNv iIt7ccah/xrPY2t0sdzweh5sQWoBEaf3UFDCocBhYyjxer1VweNQf31CJW96rqbwKihkAeOBMe9O sIaxLLFQUKVA4Mngm8H7atLL1MYRrydP4tN0sUSw/2tOKf8q207QJCJtYSSWQOD/JTC9RCW/Lmvi AXnB1vHbc+dMAFMwQwBz57sQFrcaqo9iIX5xb0fGoRghcyST/mPYp3sTZjGHgE+gHyJ9YN/jj3RE Q1DdAGu5tcphecH/aIE172GLgdEXEmsAY6auMHcfAEMAfCFje3FogU7Q1v/EwWrEhrEe8TlPPr94 vaZA/6ohjR+VqkKPQ59Er5IfkyD/+RGs8u2zVZGJIEghU3FWQH/bwEjBTABI4MdQSSNJFN71d+DW 7UD3nrGswe1BrkD+9+1Bd+BM4OcgB+AHouMg/VVR7/HCsP9Nr5dVpXHc8P31EZST0qOgB+ClwvUh TOl/tDLuMa5ACABUUAPxVxOl/wGB7jZOL1R/VY9Wn05PsFFdxDDnCNFKoOcBlNWh1v89oDURpaGm MZajuqCqAPYT76pw8gDW8a+QpZshsCGoEesIEPkBveCA57AhCZGuQP7WSAFBE7TPX1+cpEvBxDC+ 3kvxpyH/QbBRrMC9pyH/rPFBEQpRnTRKoBFhsuJRkv+ciF/Ptj9mz2ffaO9B37dv+2xvNg+cgXPH IXxSgXR/Yf/ENxREiSHdIdKhlqAEEG6C8lKG4QAAfFGuQKkQMqH/uw/1ohSjx1Db7zmd4dMdAP9r vAJAARG+iMLhfVFyMcTx/2u620N5QX1CdK+CSMTBwrL3XUDDHRyDUsah7UCe0WOB/SjRe3I0WaEC Qcdha7/b///XcHRxcv+EH3M/AMB+gwKA837zjNA5a/9AeULWMIAG95tga61482uswC+S4yAIUNuA oKhwlNzwrLBSOAAYQv+DDsBB3kEUF9YCckLWg7n5/4dhbtatwD2v2QSHYWukgKH/0/HWM3lx7PAl Y9aQSmFK8d7OwuG6oEph8MG1xtA8If5SFKGArdaQ4WLGoQfgrXH9hyFzvOHSQXlTpvAjUMah/2uv mR8ZyFvR5wBekg+Pm7//8u+d357sBvTs40cyUiHssb9a8UgB8KNhoPjwrVDGos37SGGtUM6j4wEQ XmRbw15U/WNjnNbxrbH1IazxY8Hvt7efb6f7xnDGUHMEQaWtsPbnSDHGcLVSIZaQ7iGkkf9KxfkR SqFjkezi9TLjEa7x/0EyBgWoH65vr3+wj+v6S8H/xVDuITcQAQAJkVoxijHEMNuTgUeRnF3x7UDn TIGko+9Rgl0AAgFikc5ccQmRK+D+9zKhcoDa0BGAt2EAwR+Av14QpCAK77jf90mikMamUf9KQfcF 7tX5aEaB8rEJwO0B/w4/84+x/78PwZ/Cr5+9EW9fxm91n7gRixF/oXuUUIT3duFykUyAvZMBOZ3/ QDPl/8WhyuPjQSDyFNF0cRpxyxH7gx3ggMYU0Tbxx2+LrZcRv81OMzKUkNaQ16LFsXs1sL/WMHJS 41GDF8WhMGEhWzD/j0SDHyJLFNEvcdXfFJIH4P99YiVUFbAYIX+gIOAklBpx+BAYSpPAzs9tyVwR dHH/yf3d/98P2E/FoQJByNTaF/8acNrBfWi3AY8TIPE4YDfw/yVUOuA6oI8j0O+4EYchqxD/KDnj 1BShgf3+4MwhM77Ren/aoIsAPKA3hZHweSI1gBj/NPA8wTKh4oFvZm+yN+GR4f/SYcWvN3dTAOLA kVXhQjUx/3qSHyR+kZSB2t/zT0BlWcH+nEEf9c/23/fv+P9Galkg+1IhR3bnXEBIIKqwoONGdP+n B/zv/f1GY7OhCNFPUbLi/wQBR1C14V6EQm9mWgDSTFF/ojBL4EqAUHFHEaTUXEDW9xpAJFD/0t5i QQEUpKEfgP7nCiJTUQEi+Y8IHwkvCj//Ae+6x1vgqsK2ETBQyeA1IN8wUFwCAFKmkKuQnFzRAFT/ AXJGYAQRWdFdAEyikPBbEF/MEF4hIKEcgIKgWqIhtf+iwQcfEw9YPl53Xqperg+0/xQPGN8Z7xr/ HA8dH/nLppD/a38gfyGPfOOPMohSkZMjv913xM7IoFJgypiEj3HIoL+UEVIQ2KDmceKBW+Badc/e Y7QwNSAjn+W8vTFRMqD/KO6HYS9wOJUvc28kgwgo0f84YBJAzBCV0XERlFA1ASsgfyjv1rSPcZRQ kpLHj1MwSve4MNbw8JbnjcFZ0ZaQSvHtYUGlOoDsYBhAwHgQL9+/fHh+kTh/5vUxfzHPQjLv/x+A iXE0T5WU45J61JDwj7V+7+SheZCPE7OwNSzw8N7/fpE61LcxjWJvE/ABylh0It/FMCYQjfC4EaVR Yz4xOJ3/5JKHQIKwYZDZM4Kx0yPMgf5S07STAX6RcTA4kDivSK/f5vU6o23Fk8DhgXPMAZNj/6rA lqPigfDw8m9Nn3DgDrH/WcFq0sOfT89Q31Hvsh6gt//7QqGG/AED4ZaQrBBjEFMP774cVz+koXKA 3rUhpKSgs/cG0E8gpBJCuHGlhLwKW/T/DTKkoanhkzCsEYch/pjIoP+sEcUyopKtILviDMm1hlhv f2G/Ys9j31dvslqrkaSglPUQoPezQOdDQfAAqgCmkP+lMUNBtzGiMbvl+mAGs07S+ang1sYRoQ3g H3D00gPh/5PAkOCzULWFZR9s750fbY//uj1wT3Ifcy90P3VPdl93b+/FP3o/e08iZhDxQkBxe5/r fjs8UJSmIN55oYlyzKI2Y5Yxylr31UBHAbW9/4zFeaExQY3BSmeM15ZgleD31UN5sZPA3oAB6OAA MH48/ZZgzi2By0HTsckxzGH0sP9oEOm243C3gDSwBuDUwYBS93mhljH0sHtOsLSg6b+CQ/cmIYLO 1obvyKBFcj7BLYH/lyEmYURq1T85ri2BlsF5rb/LQQGgNwElZZMf71XOjNf/kMONvSJ01uFLgDOQ 0oCEsv/TMosygGq3MYADQ4A9gDHdfy8x8AF5odjAl5HxoeaAnPuJ2O5QxolhPvHpcSMyiRP9TrCE NKGJzeKx8hGI0YbD//FCiHGO2rcxNKF/QXmneaH/tzCJ39ZpRVEoFdog5ALOsP95qonPp09OZmsx 9R+pz6rfvwJvArr6G1XQWwH7Mec8UP7nALFWYbtR/AEQEmmWsM//sd/6CV2xr0H0sHkybyEG4fdW YV3hBZDWXbBVkQExtKL/XtKIwPtxX8FOsJygXlC0Uf8FwbuB8PDLAbYl+rYBMrdR/7aREln+BLLO AaoBo61fvc+/vt+/71ST+0ERkRHwpQ4Au8sB9NApaAAGwDxQ1mhh/rXXYLdRAXNqBEORATH7wvtD Qc5A91twD3HCgR9hFp//xs/H38jvq58Br8wfzS/OP//PT9Bf0W/6Fx9v1G/VfziC/0GQ5RI8UPBQ 5xPXvyI4OqHdOnOlLVTXnRGQ50ZxLYH/S4GBUdeREQHlIeZx2DoooP/h4D9gPvE/gfDE7TLsgIjS +5GOBZBaQ9Bn4D3Q8UKGMX9Eap3RItQqsORV15FD0N7+IUOwiBB9WOPxQ9C0Qdnx9+LF5c9/MZzu UYGwQVKIoe9/0eWv6R8iVloOQKTz3zLZfoytGIZw7GBKpk/l///nAxGR54jprzShLYFOsC0R2ns9 02voGiXSOYKSiHH76B2GMLVGcQ5jiJE8ofIr70oD3JClAyZQvYEiMzXjsJ4h4+GO6IbD4IGtlGfg +6TzRWCMMPDoLegg5vFFIe1HYOfoEe8zUjLABCDoL/3mmd4RkeD0S7H9XwCPAZ//8XHCY7jBd48D vwTPBj8FbPdb1GdxmtD3WxG3UVVBtyH7VRQs8NYDFwr0BY8L32cl3r2vcYYwWwG19KUR8RCh91Wh XkFZ8Pe1odnQW5AVYPUqsN6wA84KYbaRtXARcf7WW0FeQ6kyVIRqEVtxTrD/ERBf0A/RAxhxfxTv Bv8Vj98YHxkvbthdciigvUNB2dC7tlFO0aVqEXlwJuHWVgH/S4CwgE8hrmBLgEURXISvwv9rMTQQ w0IJEbn1Gj8gjxcf/3CPIX8jT2b0JpkkryW/KQ8/Kh8rLwg1eW8ub3waSlL3lOD0sEuAvY2xi0H2 sTChc4Ywt9BrlDqh6009Ftb/9rJGI06wLZ9OkIUR54Hnge/c0R8wtNGIkWvLYJ4i4/H99KHei4BB M/oCXzBZ8KVg/9cxgASGMYeBg/E9cEP1iBD923FaiKGXoueQjt0/gN7R7+KSgnFrAF2ge1TQMLBL gf2CcGtMQaB33rCGUduhpRL/54HZ0PzfRNWc0Idgm2SIEP8/70MP4bnckZlC4VqFgeORv9ox+AE/ 30OPQQPZ0JxBj/NAW+ORKTHiZU6whT7+kf81s98xSev2guJSOuOLUP9f7zwxmRA60z3we43gXaDs QP8xkTChn+H00UbK+GHfETf034ZkVG9M5Z9R/LCM7DB/8P9E8ufR/3/2OJzS8aGLQdtQ/47vWn9b j9nCwmGpH7sPXh//X+9g/64LuVJvIWNyYsphr9+s32ZvYvPsMApRxrVBr9HfDlISI7k0ufHTcL0R gQ/R/7kBuQJjJmRma0yuYA8QEdH/HUER0LcBCPBm326vb79wz/9x33Lvc/+7xFHBwfEsEajR/rXC sBzixKFoIRJBbWEtcP8J8bmwttAtcLvED8IOgbjR/x2xmtBBEXRPep97r3y/fc//ft9/74D/Ze+D H4QvhT+CKr+00NOPiI+QSBvQ8TFKlWN/jaFFAduhi1KfUYuTDyC1+0Vr9laE1tCgAtzd5Crb4P94 AV0BiySVgYuwi0WKwh8wrsbfQTChmtCtMECEkTefkKWL0zhRPEHeg9YQi9P/jj/y4jbRS6PikOrz izT5gPdWQYebooD3nLGQpJTBPfH3+/CMfudQ508G6z6cz4lOM07U2dCU76WcVfGUlP+MfqGv2xWb X6Q/QNMzcfTR/+wwjl+okN9B3rDoD56UmSX/VDCj31RBwmD6AjPTNdKLlP8b0Jfh4NCnzKWk2jGQ EaZPf9it8fGrNTixru/kR9txY//g8zIftE+1XwJ5HcIrj7e//7jPJna5n7tvvH8mbL2vKFtbvs+9 Ma0JoQmg3vFwtfsRsTWA5xKjupceZByAaVX/I38aywh1xwm/370vyX/Kj7/Ln8yvzb9e0HexNYDe EkP9DeHOMVAPYgLgG8BtENnQ723gw1QN0B1Q3nezYqNqEP/DRcd/zo/U379v1j/YD9kf/9ov2z/c T91f3m/ffy1P4k/741/rQdY3oPth4aH3cllw/59x5KE7UetBO12m9zW0lJH/5p9IDupEO1E7UamR +GFogP7G/LFogBwQQKbqF1RBO1H79QGgkNZW4TzQPhXhoeXEn+9P8uLrkR0g4TAxe+3R71RE4b/p 3jcx1rNvRYEdIP61ssEC4BPQ8c/2/4lOUXH/UmGngffaPrGMI/Qf++/1I/6tOCH1v/6f6iYALwE/ rx87s1/wCYzwwdLBBRCM1v/lMgAfQGrkoQYPBr8IIPVR7zjkTSEJH/S6pUURNtELv/cOXw9vXII5 HIJkMV8vgr//Ew8UHxHPFj8Vbxc/GW8af/9iqHhBwuF3gR/FG08eOR1v/x2/F68hvyMvJD8XbyU/ J2//KH8g62sdYkXHximfIO8uX/8vbyZfMY8ynzOvNL81zzbf/zfvOP8pLmnx4Z88nz2vPr/rP8+x r954EJQDYO8/Q1//RG9Ff0aPR59Ir0m/8b9L3+9M703/qJWSUKUFoOwVUD83UU9KLFlQ3pQw6F6l rT7GklB2oFT/Vg/lgnuE/0+vWI9Zn1qvW79cz13fXu//X/9hD2IfYy/us+tC6F9jf/1Pg7Vlv2hf aW+2hsSBtzb/1t9rT20fbi9vP8ZocC9x//9zD3Qfxg3Tv3cveD95T3Ff/2uve799j36fgA9/P4HK wQT/wQ+D/4UPhh+HL4g/iU+An/+Lb4x/jY91H47vkL+Rz5Lf/4Kp4V+WX5dvmH+Zj5qfm6//nL+d z57fn++g/6IPox+kL/+lP6ZPp1+ob6l/qo+rn6yv/62/rs+v37Dvsf+zD7QftS//tj+3T7hfuW+6 f7uPvJ+9r7++v7/PwN/B78L/EBlCENL/LB/Fz8bfx+/I/8oPyx/ML//NP85Pz18eRhFP0T8xB5PQ /8//1M/V39bv0f/ZD9ff2g//3D/dT9K/3k/a3+GP3z/ij//g/+FP5t/n7+j/6g/rH+wv/+0/Oq+V v/C/8c/y3/Pv9P//9g/3H/gv+T/6T/tf/G/9f//+j/+fAK8BvwLPA98E7wX//wcPCB8JLwo/C08M Xw1vDn//D48QnxGvEr8TzxTfFe8W/38YDxkfGi8bPxxPHV9qdJz9auCU73AqsnazatEfkx+P/yCT IXoghiKPI58kryW9IE//J18obyl/Ko8hHyHPLb8sjP8haC+PLZ8ybzN/Ii81ljRh/zTPNj44ujSf Na85vzuPPb//OA8/fzSPQZ9Crz5/Q0Yxyv9GDC06Ri1q8JV/Sn9Lj0yf/02vTr9Pz1DfUe9S/1QP VR//Vi9XP1hPWV9ab1t/XI9dn/9er1+/YM9h32LvY/9lD2Yf/2cvaD9pT2pfa29sf22Pbp//b69w v3HPct9z73T/dg93H9HD9lJSjB6wjMTgeQH/HtF5b3oW73B6isTRefQfAH45fG98snsQfL9+6nxK Mf9/Xn4afhWAC4GYer97DIDDvYU2OXwHhZyIj4k4KYd9/3wEh0+BmoPZjYWOX37sftH+jMSwhlF/ n37DkIOQpcSw/x8Ak2B9PYk5jXWGCEmAllL/fs+AmpCDki2QcpETkHSBSf+E/3xJnQ+Fu5zfimKL ZqAv56E/j4SW0YT/Sb+kv6XP/6bfp++o/6oPqx+sL60/rk//r1+wb7F/so+zn7Svtb+2z/+337jv uf+7D7wfvS++P79P/8BfwW/Cf8OPxJ/Fr8a/x8//yN/J78r/zA/NH84vzz/QT4PRXx3yWmOEUlp4 0JRSnHjgpXjgrULTUu3TxK3TT9P5QtPCeLDTYP/TIdaBHsDWctNR10PXOdcq/9cv2P/bL9Tp3I/d ltRU3n//0+bTo9Ra35rhH+NMkODj7u/gxOSJ3b7ZdFLURN+L05iv1nR4sNbB2WBa2WGU2XO/1sTa JNbD6jPq4urDWurA/9MQ6wTmj96Y4Ljp9tpf2ef/6jfWguno7JPwdfPl7xn1bv/07dYj1kPe2PBb 5A3lVPq1//eR+jfUUfr31CTq0kmv/q///78AzwHfAu8D/wUPBh8HL/8IPwlPCl8Lbwx/DY8Onw+v /xC/Ec8S3xPvFP8WDxcfGC//GT8aTxtfHG8dfx6PH58gr/8hvyLPI98k7yX/Jw8oHykvJyo/K093 8wwALMBACRgpAKoswS1CaAHgSgEtQgQswScBeIADgS1DfVxwYXJ9L2AAe1xydGxjaFwAZmNzMSBc YWZiMDBQbHRyL+QwkWYwMzlcYzCAMLBhbiBnMjA1NTHzZmWQMTAzMzHzbnAyQ4BpbnNyc2lkMkCg NDM1MTcxsGgvQPE0KSANCi8iNd827zf/GzkLLxNkMKMvMVxxbFUwoWkx4HI7gXc0QGMDL8A68ndy YXBkZdhmYXUwwDBgcy8wPECjNPA9Qm51bTAAYT0AhHRvMGBkanVzMNDYaWdoPTA7sG4x4T+S/Gl0 PLAx4C8xL0A0MXkQoYDAMTM2IC+dYjBg9mkwYjBhczJAMKxCcEKgn0MSMbFBQDHzMvAyNDKHAUVx bm9wcm9vZvczOjKUM4I2RYAz/zUPOS//Sx9ML00/OeVBj0KfQ69Ev/dFzzNEUvA0MeRHz0jfSeQU Q286gGk9gGkgUwM9gD6AaSwgIEZyMGV1bmQ7cC/gZSBAR3L8c3NlWNBNcGVpbGxZIFYgWGRh9Viw b1YALE8fUC9RPTHg/1IfUy9UP1VPVl9Jxk8PXK9/US9e/2APYR9iL2M/SeRLo2uQOpBSZWc6cXNk v/9lz13PZ79oz2nfau9r/0nN/25Pb19m33GiMeRyX3NvdH87dY92mUZbMD6QO7BhIBBsJ0FtV/Bv c2H/W594v3Bfeq97v3zPfd9+7/9kL4Ivgz96X4WPhp+Hr4i/xXZ7VoDRTW95TgGa0P+Kr4u/g8+N r46/j8+Q35Hv/0nVWNCUL5U/jM+Xj5ifma9Hmr+bz1ejSC02pLA0mVhgZW2jgFiwbmGdP/+eT5ZP oD+hT6Jfo2+kf3bf/6c/qE+fj6qfq68zdK7QrT8Drk+vWFRlbC4gK0I0MEAoMCkgQTAggjitACAy OSA1MeD2frqwgGF4uV+6YjBATbb/vJewb7F/so+zn7SvrI+2z/+334pTxn+9GL1PMC8xM8EP/8If w9/E769+Ol87bzx/PY9/Pp8/q0F+ya8x0c18yCkqrTHxdKah1JB5WoBzMLCWc24gWLBtuxAyNrZB gdrQbG9ja2Vk0mHnMeHa0aaAaWjNwNJgWUD90nAx2rJZMNzhWSBaANwS2d1zcWZX8NsgdNwmRnDP W1DRQNpg0mE5OdYQ25fAZXhjZXB0MKHciv8wkt2q4qTe5dbB36nipNvE5WdATt8CbDvhz+Lf4++/ 3/S6cOV6WZDUUM1wZ5Pw7+aT6O/p/+sHMuuv7L/qvO4z7r/vz+q8NPHP8t/qvO419N/17+q8Nvfv +P/qvO43+v/8D+q8OP4P/x/qvL455pPf1jGQ5WvUIGPrhf8EfwWI7qQGjwWI8bQInwWI//TECq8F iPfUDL8FiPrkDs//BYj99BDfBYgBBBLvBYgEFOsBbxUzNeVrY9JAW0Lmn9/nrxbf3+XLIOVrVEAg WoCXFKvkdOW2RNJ0IFBAkdpn0jFoWPBbYHQZvxrPxxvfHOYfbFN1YliwHmbPIf8jDyQf2mAyMiVs MNB9W2BnJr8nzyjfKeblXEV2bdMxzbBzK68sv9+pNf0CvFS+oFqAWbHNwDCzLP6N5bZQy3DhcGhv bNJg+02guSB4IZ8xvy2/Hu/l5XtYYE3wY+tRN+84/9+pNv0vXEzUwlhgznDrQj0PPh//PyofbEDE QMDUkEGfQq8/Kr8qbEDENNdGT0dfP3Uz5Wv/WkBYENOwQRbrhUqvS78/df+mUE1fTmjupE9vUH8/ dRhs304VRbJO/1TPPww2Vs9X1v9Tz1lvPxvPQFtvTmBKElhP+13vPww4X+9g9lzvYo8/G78CvGC6 CkRmb2d/5PQ3L1x6RM6Aa0Wva29sfx9sQ/s3QICwZtKgQR9vj3CfbVH/Kmxyt26/dI9sjk08crdK H495Hz7vSO9BByBBY+Fw/6awYW99z0Off+9YA4F/go//g59Ir0m4hl+Hb4h/TP9OD/+LT4xfjW9R v1LPkJ+Rr5K/H1Z/V4yV7DVv5cVSZXb/MJAZj5dfOd8U2ZQMWAMgxx+d757/oA8p5gK8UXVvv9oQ o1+kb6V/FQYvXEnaMP/M8JxQp9+o75g/Wz9cSZXv/64fry9fn2Cssi+zP7RPZC//ZTy3T7hfuW9o v2nMvG+9f/++j21PbljBj8Kfw69xn3Kv/8Zvx3/Ij3Zfd2zLv8zPzd//eu97/NDf0e/S/39/gI/W I/9mD9ePhA+FH9Cp25/cr4j//4oP1cngj+Gfje/AH5AP5X//5o+TP+ivlV/qz+vfmI/t//+arPAf 8S+vr/NPscz1P/ZP/7TP+G+27Ppf+2+57/2PvAz//38Aj78PAq/BLASfBa/EL//FP9/vCi8LP8l/ yo/a/w8P/xAfzs/P3xN/FI8Vn9Qf1S//GM8Z3wZ/2W/af2qPHy/dr/8hT9CaI08kX+Kv47/VySg/ /ylP558Hz+m/LS8uP+zvMF//7w8yfzOP8j81r5qsN8843//3Xzr/scw87z3//H9AH7bs/0IPQx8B n0U/vAxHL0g/Br//Sl/BLExPTV8L3wzvJ59R3/9S7xEvEj8ir1a/V88WfxeP/1svXD9dTxvPHN9g f2GPTi/zIR8iLyA0Ze9m/yV/Jo//0Lhq/2wPKl8rb9XJb+9w//8vT09/MW9033XvNJ94Dza//3ov ez85731fmqx/f4CPPw//gq+xzISfha9EL4fPtuyJv/+Kz0lPjO+8DI7fj+9Ob5IP/8Esk/+VD1OP VJ9vT5mPmp//WN9Z72pfnm+ff14vXz+i3/+j76T/Y39kj6gvqT+V32jP+WnfIDWtn66vbS9uP9C4 /7Kvs79yD3Mf1cm3n7ivdv//ly95H7yPvZ98T7+/fm/B3//C74GfxQ/0XMcvyD+Gv8pf//l8zE/N X4vfz3/+nNFv0n//kP/UnwO81o/Xn5Yf2b8I3P/br9y/mz+cT7b/4T/iT6CP/6Gfsg/mH+cvpd+m 7+qP65//7K+rL6w/79/w792PsH+xj/wgNvVP9l+037XvGGj6X//7b7m/us8def9PAF++r97f/8DP BD8FT8P/B2/GHwmPCp//yU8MvzwMDt8P785vEg9BLP8T/xUP048XL0ZMGR8aL9iv/xxPS2wePx9P 3c8hb1CMI1//JG/i7+P//q8o7yn/6D/pT//5vy3PLt/tj+6fMj8zTzRfn/Lf8+83jzifJTZxZjag WG1hdDBE95YxJkxTAHVidGxlIEVt+nB5IHODwDz/Pg8/H/el+jIwTElloGWQOZBB70L/G0QPP54z MExBhVJlZvxlcmWQZYBID0kfSi9LNn81nEcGTQ9OH08vUD8HLEL0b2+dEFT34EHAUzNLJyEcDEJp Ymz3sGdyemFHoHlTM1WPS2MmTFQgT0MgSGV5Mzt9wH17XCpcZD+QR8AGdDagR2AwMTA1MC1fcjJf c18wOF/UNGSBOqA3ODZkNmNRMAAyZTUzNDE1OMNh0GCwNGM1MhGw/TDvDGARsDWAYXAzYlBjIF/U D2Pe+BBfcTZAY2YxMSBlMGExYmVwYWX3X0BmP2csM2WQaBFfcFLA8GZmMDlktmmPYBFqXf9qPWiy bNJptmy+bTdvP3BP/3Ffcm9zf3SPdZ92r3e/eM//ed9673v/fQ9+H38vgD+BT/+CX4NvhH+Fj4af h6+Iv4nP/4rfi++M/44Pjx+QL5E/kk//k1+Ub5V/lo+Xn5ivmb+az/+b35zvnf+fD6AfoS+iP6NP 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 fHx8goKCfHx8UVFRQ0NDXFxcPz8/AAAAAAAAAAAAqaSknJOJnoholHdShmU6eVIcfVUUhGAZjWwj knYqlX0wj3ozgHc1dXQ+dHdNeoBifoJsoKGb6+jr8/Lz5ePlxMTFn5+fhoaGgICAhoaGYmJiQUFB V1dXUlJSAAAAAAAApaKiopiIpI9wm4Jfm31YoINYpYpcmYJUXWZWN3mWK4e4LXysOWeBZ21qpaej trW2vb2+urq7vr2/zc3N6+rr9PT0397fu7u7mZmZhoaGi4uLhISEU1NTRkZGVlZWSEhIoZ6fjoZ6 rJuEpZR7oJB2opJ7hnZmU2psK8v/J8X/JLr/I6/+Iqz/M4GzwcLDxcXGvr2+t7a2tra2tra2u7u7 0NDQ7u/v8vLy2NjYtLS0kZGRiIiImZmZZWVlNTU1VVVVtrKyc2BAh2EkeWlLgnJXk3M1w4kYgYyH RM/5RNT+N878KsT6JbT7HZber66s5uDc49zZ1c/LxcC7vLe0sK6rqaWkq6mpxcTF6+vr7+/v0NDQ pqamo6Ojl5eXUVFRAAAAu7u7cGNQwnoKw4EQz5AQ2Z8j5bBQmpF9ZLDLeeH/ZNf6R9T8LMj8JLX9 d42Y3Nva1tbV0tHQzs3MycjIxMTDvbu5q6qmk5KQlZWUzs7N+Pn56enp2NjYtLS0ZmZmAAAAAAAA FRAFr3MUwoQQzJUa1qVO6b9+r5l4e56qpe//kuj/c+P/Rtz/K9P/So2s6Ojp5OXl3+Df2tzb1tbW 0tLT0NDRz8/Qx8fGqamppaamzM3N6urq/v7+zMzMd3d3AAAAAAAAAAAAi14WzY8P0Zwx3LBr68uZ 2sCbbn+BouH2hKazgJqic5agWZauSIit5ebm+/379ff17u7u6Obn4uHh3d3d2NnZ1NPTzMzMwsPE vb6+vLy82djYtbm5XGhoAAAAAAAAAAAAWT0O3JoR3qlC571999uu//HMYF5VTWBgW3lqa56IYKOF VZV0VH5npqmov7/AvL2+4OHi7O7u3t7f1dbXzs/Px8jIurq6sbGxrq6uq6urpqSkoaGhf39/AAAA AAAAAAAACwUFXUQUlWsft49PsZNlaV1TDhksUYJwovLfh9zHaM+ySMObQLR5TWhUd3Z4f4CAsLGy xMXGtre3rK2tqKiop6enp6enpKSkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFD2fFUSSGkFv EUdzFIO4HpfFPV9akuLNedC4XcWmQbePO6RrPHRHr6+vube3q6urpKSkqKiopaWlqqqqqqqqf39/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGTaDLHbwLZbxL7P4Lsf5K73tI0lXdcasacuu TcCcO6+BOZhcN4NCBxMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAADhlDKF3bKnneLJPkLaToL7L2HVF4TpV5VMynQb2PO6VtOpFNPI46GjkeAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUWIkK+ JV3WKnPcK4PgLI7qI1ynMWhUOqR7HE83EC0cEy0XH0obIkooAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCWNIT/XJFHVJl3aKGTjJljHDh4k AAcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAABAQaDBRgFCWMFi+XEyh4Bg8tAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAGj4CBZAGACQ7AAAUAAAA AwAgDns6AAAeAAEwAQAAACQAAABQaWN0dXJlIChEZXZpY2UgSW5kZXBlbmRlbnQgQml0bWFwKQAN AAE3AQAAABA6AAALAAAAAAAAAMAAAAAAAABG0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/ CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD///////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////9/////v////7////+////BQAAAAYAAAAHAAAACAAA AAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAA FwAAABgAAAAZAAAAGgAAABsAAAD+//////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8CAAAAFgMAAAAAAADA AAAAAAAARgAAAAAAAAAAAAAAAKAKakTqyswBAwAAAIAAAAAAAAAAAQBPAGwAZQAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgD///////// //////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABDAE8A TgBUAEUATgBUAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAEgACAQEAAAADAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQA AAB6LwAAAAAAAAMATQBhAGkAbABTAHQAcgBlAGEAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAYAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAQAAAAwAAAAAAAAA/v////7///////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////8BAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAK8FAACvBQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJNei8AAAAAAAA2AAAAKAAAADcAAAA3AAAAAQAgAAAAAABE LwAAxA4AAMQOAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8AlJTOAJSUzgBra70Aa2u1AGtrtQBzc70Ac3O9AHNz vQBzc70Ac3O9AHNzvQB7e8YAe3u9AHt7vQB7e8YAe3u9AHt7vQB7e8YAe3vGAHt7xgCEhMYAe3vG AHt7xgCEhMYAhITGAISExgCEhMYAe3u9AHt7vQB7e8YAe3u9AHt7vQB7e8YAe3u9AHt7vQB7e8YA c3O9AHNzvQBzc70Aa2u9AGtrvQBzc70Aa2u9AGtrvQBra70AY2O1AGNjtQCtrd4A////AP///wD/ //8A////AP///wD///8A////AJSUzgCUlM4Aa2u9AGtrtQBra7UAc3O9AHNzvQBzc70Ac3O9AHNz vQBzc70Ae3vGAHt7vQB7e70Ae3vGAHt7vQB7e70Ae3vGAHt7xgB7e8YAhITGAHt7xgB7e8YAhITG AISExgCEhMYAhITGAHt7vQB7e70Ae3vGAHt7vQB7e70Ae3vGAHt7vQB7e70Ae3vGAHNzvQBzc70A c3O9AGtrvQBra70Ac3O9AGtrvQBra70Aa2u9AGNjtQBjY7UAra3eAP///wD///8A////AP///wD/ //8A////AIyMxgBra7UAa2u1AKWl1gCtrd4Ara3eAK2t1gCtrd4Ara3eAK2t1gC1td4AtbXeALW1 3gC1td4AtbXeALW13gC1td4AtbXeALW13gC9vd4Avb3eALW13gC9vd4Avb3eALW13gC9vd4Avb3e AL293gD///8A////AP///wD///8A////AP///wD///8A////AOfn9wCtrd4Ara3eAK2t1gCzs90A s7PdAK2t1gCtrdYAra3WAK2t1gCUlM4AlJTOAFparQCtrdYAra3WAP///wD///8A////AP///wBj Y7UAra3WAK2t1gClpd4ApaXWAKWl1gCsrNcApaXWAKWl1gCtrd4Ara3WAK2t1gCurtwAra3WAK2t 1gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4AtbXeALW13gC9vd4A//// AP///wD///8A////AP///wD///8A////AP///wDn5/cAra3WAK2t1gCvr9sAra3WAK2t1gCtrd4A paXWAKWl1gClpdYApaXWAKWl1gClpdYAWlqtAFparQD///8A////AP///wD///8AY2O1AK2t1gCt rdYApaXeAKWl1gClpdYArKzXAKWl1gClpdYAra3eAK2t1gCtrdYArq7cAK2t1gCtrdYAtbXeALW1 3gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4AtbXeALW13gC1td4Avb3eAP///wD///8A//// AP///wD///8A////AP///wD///8A5+f3AK2t1gCtrdYAr6/bAK2t1gCtrdYAra3eAKWl1gClpdYA paXWAKWl1gClpdYApaXWAFparQBaWq0A////AP///wD///8A////AFJSrQClpdYApaXWAJyczgCl pdYApaXWAKWl1gCrq9cAq6vXAKWl1gCurtwArq7cAK2t2gCurtoArq7aAK2t2gCtrd0Ara3dAK2t 3gC1td4AtbXeAK2t1gC1td4AtbXeAK2t3gC1td4AtbXeALW13gD///8A////AP///wD///8A//// AP///wD///8A////AN7e7wCsrNYArKzWAKmp1gCoqNYAqKjWAKWl1gClpdYApaXWAKWlzgCfn9IA n5/SAJyczgBaWq0AWlqtAP///wD///8A////AP///wBaWq0ApaXWAKWl1gClpdYApaXWAKWl1gCl pdYApaXWAKWl1gCsrNcAra3WAK2t1gCtrdoAra3aAK2t2gCurtoAra3aAK2t2gC1td4AtbXeALW1 3gC1td4AtbXeALW13gC1td4Ara3WAK2t1gC1td4A////AP///wD///8A////AP///wD///8A//// AP///wDn5/cApaXWAKWl1gCpqdYAqanWAKmp1gCsrNcApaXWAKWl1gClpdYAnJzOAJyczgCkpNUA WlqtAFparQD///8A////AP///wD///8AWlqtAKWl1gClpdYApaXWAKWl1gClpdYApaXWAKWl1gCl pdYArKzXAK2t1gCtrdYAra3aAK2t2gCtrdoArq7aAK2t2gCtrdoAtbXeALW13gC1td4AtbXeALW1 3gC1td4AtbXeAK2t1gCtrdYAtbXeAP///wD///8A////AP///wD///8A////AP///wD///8A5+f3 AKWl1gClpdYAqanWAKmp1gCpqdYArKzXAKWl1gClpdYApaXWAJyczgCcnM4ApKTVAFparQBaWq0A ////AP///wD///8A////AFJSrQClpdYApaXWAJyczgCkpNYApKTWAJyc1gClpdYApaXWAKWl1gCt rdYAra3WAKWl1gCtrdYAra3WAK2t2gCtrdoAra3aAK2t2gCtrd0Ara3dAK2t1gC0tN0AtLTdAK2t 1gCurt0Arq7dALW11gD///8A////AP///wD///8A////AP///wD///8A////AN7e7wClpdYApaXW AKWl1gClpdYApaXWAKWlzgClpdYApaXWAJyczgCcnNYAnJzWAJyczgBSUq0AUlKtAP///wD///8A ////AP///wBSUq0ApaXWAKWl1gClpdYAnJzWAJyc1gCkpNYApaXWAKWl1gCtrd4ApaXWAKWl1gCt rd4Ara3WAK2t1gCtrdoAra3aAK2t2gCurtoAra3WAK2t1gCxsdwAra3WAK2t1gCurt0Ara3WAK2t 1gCystwA////AP///wD///8A////AP///wD///8A////AP///wDn5/cApaXWAKWl1gCurtgApaXW AKWl1gClpdYApaXWAKWl1gCiotQAnJzOAJyczgClpdYAUlKtAFJSrQD///8A////AP///wD///8A UlKtAKWl1gClpdYApaXWAJyc1gCcnNYApKTWAKWl1gClpdYAra3eAKWl1gClpdYAra3eAK2t1gCt rdYAra3aAK2t2gCtrdoArq7aAK2t1gCtrdYAsbHcAK2t1gCtrdYArq7dAK2t1gCtrdYAsrLcAP// /wD///8A////AP///wD///8A////AP///wD///8A5+f3AKWl1gClpdYArq7YAKWl1gClpdYApaXW AKWl1gClpdYAoqLUAJyczgCcnM4ApaXWAFJSrQBSUq0A////AP///wD///8A////AEpKpQCEhMYA hITGAKWlzgClpdYApaXWAKWl1gClpdYApaXWAKWl1gCtrdYAra3WAKWl1gCtrd0Ara3dAK2t2gCt rdoAra3aAK2t2gCtrd0Ara3dAK2t1gC0tN0AtLTdAK2t1gC4uN8AuLjfAK2t1gD///8A////AP// /wD///8A////AP///wD///8A////AN7e7wCrq9YAq6vWAKWl1gClpdYApaXWAKWl1gClpdYApaXW AJyczgCjo9UAo6PVAHt7xgBSUq0AUlKtAP///wD///8A////AP///wBKSq0AWlq1AFpatQCEhMYA hITGAISExgCMjM4AhITGAISExgCMjM4AjIzGAIyMxgCUlM4AjIzOAIyMzgCUlM4AlJTOAJSUzgCU lM4AlJTOAJSUzgCcnM4AlJTOAJSUzgCcnM4AlJTOAJSUzgCcnM4A////AP///wD///8A////AP// /wD///8A////AP///wDe3vcAjIzOAIyMzgCMjM4AjIzGAIyMxgCMjM4AhITGAISExgCEhMYAhITG AISExgBjY7UASkqtAEpKrQD///8A////AP///wD///8ASkqtAFpatQBaWrUAhITGAISExgCEhMYA jIzOAISExgCEhMYAjIzOAIyMxgCMjMYAlJTOAIyMzgCMjM4AlJTOAJSUzgCUlM4AlJTOAJSUzgCU lM4AnJzOAJSUzgCUlM4AnJzOAJSUzgCUlM4AnJzOAP///wD///8A////AP///wD///8A////AP// /wD///8A3t73AIyMzgCMjM4AjIzOAIyMxgCMjMYAjIzOAISExgCEhMYAhITGAISExgCEhMYAY2O1 AEpKrQBKSq0A////AP///wD///8A////AEJCpQBjY7UAY2O1AGNjtQBra7UAa2u1AGNjtQBra7UA a2u1AGtrtQBzc70Ac3O9AGtrtQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQB7e70Ae3u9AHNzvQB7 e70Ae3u9AHNzvQB7e70Ae3u9AHt7vQD///8A////AP///wD///8A////AP///wD///8A////AM7O 5wBzc70Ac3O9AGtrtQBra7sAa2u7AGtrtQBra7UAa2u1AGNjtQBjY7UAY2O1AFparQBKSq0ASkqt AP///wD///8A////AP///wBCQqUAWlqtAFparQBjY7UAY2O1AGNjtQBra70Aa2u1AGtrtQBzc70A a2u9AGtrvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQB7e8YAc3O9AHNzvQB7 e8YAc3O9AHNzvQB7e8YA////AP///wD///8A////AP///wD///8A////AP///wDW1u8Ac3O9AHNz vQBzc70Aa2u1AGtrtQBubr0AY2O1AGNjtQBra70AY2O1AGNjtQBjY7UASkqlAEpKpQD///8A//// AP///wD///8AQkKlAFparQBaWq0AY2O1AGNjtQBjY7UAa2u9AGtrtQBra7UAc3O9AGtrvQBra70A c3O9AHNzvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQBzc70Ae3vGAHNzvQBzc70Ae3vGAHNzvQBz c70Ae3vGAP///wD///8A////AP///wD///8A////AP///wD///8A1tbvAHNzvQBzc70Ac3O9AGtr tQBra7UAbm69AGNjtQBjY7UAa2u9AGNjtQBjY7UAY2O1AEpKpQBKSqUA////AP///wD///8A//// AEJCpQBaWrQAWlq0AFparQBjY7UAY2O1AGNjtQBra7UAa2u1AGNjtQBsbLwAbGy8AGtrtQBycrwA cnK8AGtrtQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQBzc70Ac3O9AHNzvQD/ //8A////AP///wD///8A////AP///wD///8A////ANbW5wBzc70Ac3O9AGNjtQBoaLYAaGi2AGNj tQBjY7UAY2O1AGNjrQBjY7UAY2O1AFparQBKSq0ASkqtAP///wD///8A////AP///wBCQqUAWlqt AFparQBZWbMAWlq1AFpatQBjY7UAY2O1AGNjtQBra70Aa2u1AGtrtQBsbLwAa2u1AGtrtQBycrwA a2u9AGtrvQBzc70Aa2u9AGtrvQBzc70Aa2u9AGtrvQBzc70Aa2u9AGtrvQB7e70A////AP///wD/ //8A////AP///wD///8A////AP///wDW1u8Ac3O9AHNzvQBra7YAY2O1AGNjtQBqarYAY2O1AGNj tQBjY7UAWlqtAFparQBaWrUASkqlAEpKpQD///8A////AP///wD///8AQkKlAFparQBaWq0AWVmz AFpatQBaWrUAY2O1AGNjtQBjY7UAa2u9AGtrtQBra7UAbGy8AGtrtQBra7UAcnK8AGtrvQBra70A c3O9AGtrvQBra70Ac3O9AGtrvQBra70Ac3O9AGtrvQBra70Ae3u9AP///wD///8A////AP///wD/ //8A////AP///wD///8A1tbvAHNzvQBzc70Aa2u2AGNjtQBjY7UAamq2AGNjtQBjY7UAY2O1AFpa rQBaWq0AWlq1AEpKpQBKSqUA////AP///wD///8A////ADk5nABSUq0AUlKtAFparQBjY7UAY2O1 AFparQBjY7UAY2O1AGNjtQBqarUAamq1AGNjtQBqarUAamq1AGtrtQBra70Aa2u9AGtrtQBra7UA a2u1AGtrtQBra7oAa2u6AGtrtQBra70Aa2u9AHNzvQD///8A////AP///wD///8A////AP///wD/ //8A////AM7O5wBzc70Ac3O9AGNjtQBjY7UAY2O1AFparQBhYbQAYWG0AFparQBaWq0AWlqtAFJS rQBCQqUAQkKlAP///wD///8A////AP///wBCQqUAUlKtAFJSrQBaWrUAWlqtAFparQBaWrUAWlqt AFparQBjY7UAY2O1AGNjtQBpabcAY2O1AGNjtQBra70AY2O1AGNjtQBra70Aa2u1AGtrtQBsbLwA a2u1AGtrtQBsbLwAY2O1AGNjtQBzc70A////AP///wD///8A////AP///wD///8A////AP///wDW 1u8Aa2u1AGtrtQBjY7UAWlq1AFpatQBiYrQAWlqtAFparQBaWrUAUlKtAFJSrQBSUq0AQkKlAEJC pQD///8A////AP///wD///8AQkKlAFJSrQBSUq0AWlq1AFparQBaWq0AWlq1AFparQBaWq0AY2O1 AGNjtQBjY7UAaWm3AGNjtQBjY7UAa2u9AGNjtQBjY7UAa2u9AGtrtQBra7UAbGy8AGtrtQBra7UA bGy8AGNjtQBjY7UAc3O9AP///wD///8A////AP///wD///8A////AP///wD///8A1tbvAGtrtQBr a7UAY2O1AFpatQBaWrUAYmK0AFparQBaWq0AWlq1AFJSrQBSUq0AUlKtAEJCpQBCQqUA////AP// /wD///8A////ADk5nABSUq0AUlKtAFJSrQBZWa4AWVmuAFJSrQBaWrQAWlq0AFparQBjY7UAY2O1 AFpatQBjY7UAY2O1AGNjtQBjY7UAY2O1AGNjtQBjY7UAY2O1AGNjtQBjY7UAY2O1AGNjtQBaWrUA Wlq1AGtrtQD///8A////AP///wD///8A////AP///wD///8A////AM7O5wBra70Aa2u9AFparQBa WrUAWlq1AFparQBaWrUAWlq1AFJSrQBSUq0AUlKtAEpKpQBCQqUAQkKlAP///wD///8A////AP// /wA5OZwASkqtAEpKrQBSUq0AUlKtAFJSrQBZWa4AWlqtAFparQBbW7QAUlKtAFJSrQBaWrUAWlq1 AFpatQBjY7UAWlqtAFparQBra70Ac3O9AHNzvQB7e70Ac3O9AHNzvQBjY7UAnJzOAJyczgBra7UA ////AP///wD///8A////AP///wD///8A////AP///wDOzu8AUlKtAFJSrQBKSqUAQkKlAEJCpQBK SqUAUlKtAFJSrQBSUq0AUlKtAFJSrQBKSq0AOTmlADk5pQD///8A////AP///wD///8AOTmcAEpK rQBKSq0AUlKtAFJSrQBSUq0AWVmuAFparQBaWq0AW1u0AFJSrQBSUq0AWlq1AFpatQBaWrUAY2O1 AFparQBaWq0Aa2u9AHNzvQBzc70Ae3u9AHNzvQBzc70AY2O1AJyczgCcnM4Aa2u1AP///wD///8A ////AP///wD///8A////AP///wD///8Azs7vAFJSrQBSUq0ASkqlAEJCpQBCQqUASkqlAFJSrQBS Uq0AUlKtAFJSrQBSUq0ASkqtADk5pQA5OaUA////AP///wD///8A////ADExnABKSqUASkqlAEpK pQBSUq0AUlKtAFJSrQBSUq0AUlKtAFpatQBzc70Ac3O9AGtrtQBzc70Ac3O9AHNztQBzc70Ac3O9 AHNztQBzc70Ac3O9AHNzvQBjY7UAY2O1AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBra70Aa2u9ADk5pQBS Uq0AUlKtAEJCpQBCQqUAQkKlAP///wD///8A////AP///wAxMZwAQkKlAEJCpQBSUq0AY2O1AGNj tQBra7UAa2u1AGtrtQBra70Aa2u1AGtrtQBra70Aa2u1AGtrtQBzc70Aa2u1AGtrtQBzc70Aa2u9 AGtrvQBzc70AWlqtAFparQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8AxsbnAMbG5wBzc70AUlKtAFJSrQBK SqUAOTmcADk5nAD///8A////AP///wD///8AMTGcAEJCpQBCQqUAUlKtAGNjtQBjY7UAa2u1AGtr tQBra7UAa2u9AGtrtQBra7UAa2u9AGtrtQBra7UAc3O9AGtrtQBra7UAc3O9AGtrvQBra70Ac3O9 AFparQBaWq0A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AMbG5wDGxucAc3O9AFJSrQBSUq0ASkqlADk5nAA5 OZwA////AP///wD///8A////ADExnABaWrUAWlq1AFparQBhYbQAYWG0AFparQBjY7UAY2O1AGNj tQBqarUAamq1AGNjtQBqarUAamq1AGtrtQBra7UAa2u1AGtrtQBqaroAamq6AGtrtQBaWrUAWlq1 AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AHt7vQBaWq0AWlqtAFparQBKSq0ASkqtAP///wD/ //8A////AP///wBCQqUAUlKtAFJSrQBaWrUAWlqtAFparQBiYrQAWlq1AFpatQBjY7UAY2O1AGNj tQBpabYAY2O1AGNjtQBra7UAY2O1AGNjtQBsbLwAa2u1AGtrtQBsbLwAWlqtAFparQD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wB7e8YAUlKtAFJSrQBaWrUASkqlAEpKpQD///8A////AP///wD/ //8AQkKlAFJSrQBSUq0AWlq1AFparQBaWq0AYmK0AFpatQBaWrUAY2O1AGNjtQBjY7UAaWm2AGNj tQBjY7UAa2u1AGNjtQBjY7UAbGy8AGtrtQBra7UAbGy8AFparQBaWq0A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8Ae3vGAFJSrQBSUq0AWlq1AEpKpQBKSqUA////AP///wD///8A////ADk5nABS Uq0AUlKtAFJSrQBaWrQAWlq0AFparQBaWrQAWlq0AFparQBjY7UAY2O1AFparQBjY7UAY2O1AGNj tQBjY7UAY2O1AGNjtQBoaLUAaGi1AGNjtQBaWq0AWlqtAPf39wDv7/cA7+/3AOfn9wD///8A//// AP///wD///8A////AP///wD///8A////APf3/wDn5/cA5+f3AOfn9wDv7/cA7+/3AOfn9wD39/8A 9/f/AHNzvQBSUq0AUlKtAFJSpQBKSqUASkqlAP///wD///8A////AP///wA5OaUASkqtAEpKrQBa Wq0AWlqtAFparQBcXLMAWlqtAFparQBjY7UAWlq1AFpatQBjY7UAWlq1AFpatQBjY7UAY2O1AGNj tQBjY7UAY2O1AGNjtQBqarYAY2O1AGNjtQBaWrUAUlKtAFJSrQBjY7UA////AP///wD///8A//// AP///wD///8A////AP///wC9vecAQkKlAEJCpQBSUq0ASkqtAEpKrQBKSq0ASkqlAEpKpQBSUq0A UlKtAFJSrQBSUq0AQkKlAEJCpQD///8A////AP///wD///8AOTmlAEpKrQBKSq0AWlqtAFparQBa Wq0AXFyzAFparQBaWq0AY2O1AFpatQBaWrUAY2O1AFpatQBaWrUAY2O1AGNjtQBjY7UAY2O1AGNj tQBjY7UAamq2AGNjtQBjY7UAWlq1AFJSrQBSUq0AY2O1AP///wD///8A////AP///wD///8A//// AP///wD///8Avb3nAEJCpQBCQqUAUlKtAEpKrQBKSq0ASkqtAEpKpQBKSqUAUlKtAFJSrQBSUq0A UlKtAEJCpQBCQqUA////AP///wD///8A////ADk5nABRUawAUVGsAEpKpQBSUq0AUlKtAFJSrQBY WK0AWFitAFJSrQBbW7QAW1u0AFparQBjY7UAY2O1AFparQBhYbQAYWG0AFparQBjY7UAY2O1AFpa rQBhYbQAYWG0AFpatQBjY7UAY2O1AGNjtQD///8A////AP///wD///8A////AP///wD///8A//// AL293gBSUq0AUlKtAFparQBZWa0AWVmtAFJSrQBYWK0AWFitAFJSrQBSUq0AUlKtAEpKpQBCQqUA QkKlAP///wD///8A////AP///wA5OaUASkqlAEpKpQBQUKwAUlKtAFJSrQBZWa4AUlKtAFJSrQBa WrUAWlqtAFparQBbW7QAWlqtAFparQBaWrUAWlqtAFparQBhYbQAWlq1AFpatQBiYrQAWlqtAFpa rQBjY7UAWlqtAFparQBjY7UA////AP///wD///8A////AP///wD///8A////AP///wDGxucAUlKt AFJSrQBaWrUAUlKtAFJSrQBVVa4AUlKtAFJSrQBSUq0ASkqlAEpKpQBKSq0AQkKlAEJCpQD///8A ////AP///wD///8AOTmlAEpKpQBKSqUAUFCsAFJSrQBSUq0AWVmuAFJSrQBSUq0AWlq1AFparQBa Wq0AW1u0AFparQBaWq0AWlq1AFparQBaWq0AYWG0AFpatQBaWrUAYmK0AFparQBaWq0AY2O1AFpa rQBaWq0AY2O1AP///wD///8A////AP///wD///8A////AP///wD///8AxsbnAFJSrQBSUq0AWlq1 AFJSrQBSUq0AVVWuAFJSrQBSUq0AUlKtAEpKpQBKSqUASkqtAEJCpQBCQqUA////AP///wD///8A ////ADExnABKSq0ASkqtAEpKpQBSUq0AUlKtAEpKpQBSUq0AUlKtAFJSrQBZWa0AWVmtAFJSrQBZ Wa0AWVmtAFJSrQBaWrQAWlq0AFparQBaWrUAWlq1AFparQBaWrIAWlqyAFparQBaWq0AWlqtAFpa tQD///8A////AP///wD///8A////AP///wD///8A////AOfn7wB7e8YAe3vGAEpKpQBYWK0AWFit AFJSrQBKSq0ASkqtAEpKpQBKSq0ASkqtAEJCpQBCQqUAQkKlAP///wD///8A////AP///wAxMZwA SkqlAEpKpQBSUq0ASkqtAEpKrQBSUq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBYWK8AUlKtAFJSrQBa WrUAWlqtAFparQBbW7QAUlKtAFJSrQBbW7QAWlqtAFparQBbW7QAUlKtAFJSrQBjY7UA////AP// /wD///8A////AP///wD///8A////AP///wD///8ApaXWAKWl1gBCQqUAQkKlAEJCpQBCQqUAY2O1 AGNjtQBaWrUASkqlAEpKpQBKSqUAOTmcADk5nAD///8A////AP///wD///8AMTGcAEpKpQBKSqUA UlKtAEpKrQBKSq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBSUq0AWFivAFJSrQBSUq0AWlq1AFparQBa Wq0AW1u0AFJSrQBSUq0AW1u0AFparQBaWq0AW1u0AFJSrQBSUq0AY2O1AP///wD///8A////AP// /wD///8A////AP///wD///8A////AKWl1gClpdYAQkKlAEJCpQBCQqUAQkKlAGNjtQBjY7UAWlq1 AEpKpQBKSqUASkqlADk5nAA5OZwA////AP///wD///8A////ADExnABKSqUASkqlAEJCpQBKSqUA SkqlAEpKpQBRUawAUVGsAEpKpQBSUq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBY WK0AWFitAFJSrQBYWK0AWFitAFJSrQBSUq0AUlKtAFparQD///8A////AP///wD///8A////AP// /wD///8A////AP///wDn5/cA5+f3AK2t1gC1td4AtbXeAK2t1gDe3vcA3t73AGNjtQBCQqUAQkKl AEJCpQA5OaUAOTmlAP///wD///8A////AP///wA5OZwAQkKlAEJCpQBKSq0ASkqlAEpKpQBKSq0A SkqlAEpKpQBRUawASkqtAEpKrQBSUq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBZWa4AUlKtAFJSrQBS Uq0AUlKtAFJSrQBZWa4AUlKtAFJSrQBSUq0AnJzOAJyczgD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBzc70AQkKlAEJCpQBCQqUAOTmc ADk5nAD///8A////AP///wD///8AOTmcAEJCpQBCQqUASkqtAEpKpQBKSqUASkqtAEpKpQBKSqUA UVGsAEpKrQBKSq0AUlKtAFJSrQBSUq0AUlKtAFJSrQBSUq0AWVmuAFJSrQBSUq0AUlKtAFJSrQBS Uq0AWVmuAFJSrQBSUq0AUlKtAJyczgCcnM4A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8Ac3O9AEJCpQBCQqUAQkKlADk5nAA5OZwA//// AP///wD///8A////ADExnABCQqUAQkKlAEJCpQBKSqUASkqlAEJCpQBKSqUASkqlAEpKpQBSUq0A UlKtAEpKpQBRUawAUVGsAEpKpQBSUq0AUlKtAEpKpQBSUq0AUlKtAFJSrQBSUq0AUlKtAFJSpQBS Uq0AUlKtAEpKpQBaWrUAWlq1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AHNzvQBCQqUAQkKlAEJCpQA5OaUAOTmlAP///wD///8A//// AP///wAxMZwAQkKlAEJCpQBKSq0AQkKlAEJCpQBKSq0ASkqlAEpKpQBKSq0ASkqlAEpKpQBLS6wA SkqlAEpKpQBRUawASkqtAEpKrQBSUq0ASkqtAEpKrQBSUq0AUlKtAFJSrQBSUq0ASkqtAEpKrQBS Uq0AUlKtAFJSrQCcnNYA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wBSUq0AOTmcADk5nABLS6gAOTmcADk5nAD///8A////AP///wD///8AMTGc AEJCpQBCQqUASkqtAEJCpQBCQqUASkqtAEpKpQBKSqUASkqtAEpKpQBKSqUAS0usAEpKpQBKSqUA UVGsAEpKrQBKSq0AUlKtAEpKrQBKSq0AUlKtAFJSrQBSUq0AUlKtAEpKrQBKSq0AUlKtAFJSrQBS Uq0AnJzWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8AUlKtADk5nAA5OZwAS0uoADk5nAA5OZwA////AP///wD///8A////ADExnABCQqUAQkKl AEJCpQBCQqUAQkKlAEJCpQBGRqUARkalAEZGpQBISKQASEikAEpKpQBLS6kAS0upAEpKqQBJSagA SUmoAEpKpQBSUq0AUlKtAEpKpQBKSq0ASkqtAEpKpQBPT6sAT0+rAEpKpQBLS6wAS0usAEpKpQBz c70Ac3O9AJyczgD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGtr tQBBQaQAQUGkADk5nABAQKQAQECkAP///wD///8A////AP///wBzc70AMTGcADExnABCQqUAQkKl AEJCpQBJSaYARkalAEZGpQBGRqYAQkKlAEJCpQBKSqwASkqpAEpKqQBKSqkASkqpAEpKqQBLS6wA SkqtAEpKrQBSUq0ASkqlAEpKpQBRUawASkqlAEpKpQBLS6wASkqlAEpKpQBPT68AQkKlAEJCpQBK Sq0AY2O1AGNjtQBjY70AY2O1AGNjtQBjY7UAWlqtAFparQBaWrUAWlq1AFpatQBKSq0AOTmlADk5 pQAxMZwAhITGAISExgD///8A////AP///wD///8Ac3O9ADExnAAxMZwAQkKlAEJCpQBCQqUASUmm AEZGpQBGRqUARkamAEJCpQBCQqUASkqsAEpKqQBKSqkASkqpAEpKqQBKSqkAS0usAEpKrQBKSq0A UlKtAEpKpQBKSqUAUVGsAEpKpQBKSqUAS0usAEpKpQBKSqUAT0+vAEJCpQBCQqUASkqtAGNjtQBj Y7UAY2O9AGNjtQBjY7UAY2O1AFparQBaWq0AWlq1AFpatQBaWrUASkqtADk5pQA5OaUAMTGcAISE xgCEhMYA////AP///wD///8A////AO/v9wBzc70Ac3O9AEJCpQAxMZwAMTGcADExnAA5OZwAOTmc ADExnAA5OZwAOTmcADExnAA5OZwAOTmcADExnAA5OZwAOTmcADExnAA5OZwAOTmcADExnAA5OZwA OTmcADExnAA5OZwAOTmcADExnAA5OaUAOTmlADExnAA5OZwAOTmcADExnAAxMZwAMTGcADExlAAx MZwAMTGcADExnAAxMZwAMTGcACkplAAxMZwAMTGcADExlABKSq0ASkqtAISEvQD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIB AjcBAAAAAAAAAAMABTcGAAAAAgEKNwEAAAALAAAAKoZIhvcUAwoDAgEAAwALN/4AAAADABQ3AAAA AAMA+n8AAAAAQAD7fwBA3aNXRbMMQAD8fwBA3aNXRbMMAwD9fwAAAAALAP5/AAAAAAsA/38AAAAA AwAhDiUXHQACAfgPAQAAABAAAAACUv6uOaLlTYVAX8c1uMm4AgH6DwEAAAAQAAAAAlL+rjmi5U2F QF/HNbjJuAMA/g8HAAAAAwANNP0/pQYDAA80/T+lBiWVAgKQBgAOAAAAAwBOAQAA/////wAAAABO BAIQgAEAFAAAAFVudGl0bGVkIEF0dGFjaG1lbnQAcgcCE4ADAA4AAADcBwEABAAPAAgAFwADABkB AhGABgC4DQAAAQAJAAAD3AYAAAAAIQYAAAAABQAAAAkCAAAAAAUAAAABAv///wClAAAAQQvGAIgA IAAgAAAAAAAgACAAAAAAACgAAAAgAAAAQAAAAAEAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA AAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAA//AH///AB//+AAH/4AAA/8AAAD8AAAAfAAAABwAAAAMAAAAA AAAAAAAAAAAAAAABgAAAAYAAAAHAAAABwAAAP8AAAD/gAH//4AB//+AAf//gDn//8B////////// //////////////////////////////////////////////8hBgAAQQtGAGYAIAAgAAAAAAAgACAA AAAAACgAAAAgAAAAIAAAAAEAGAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNMTExVVVVQUFBNTU1PT09OTk4AAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABISEg8PDw9RkY9PT1nYWOFfYFmZmg/QT9VVVVQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEw9PT1FRUVjYWGRjIqrpZ6em4uEgG1r aldwc16LjIdUVFQ+Pj5XV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABISEhCQkI9PT1iYGCKiIihnJWroZGjmn+Jg11+fUp0dD9YekopmExaVEuJjHSMi4xhYWE8PDxX V1dRUVEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8SEhLS0t1cnKpoJqmm4+dkHiUhmSB ckeAbzl9bzJ0aylqaCRraCw0jkoQv1BJOT11emCAgIB+fn55eHlQUFBBQUFbW1szMzMAAAAAAAAA AAAAAAAAAAAAAABra2tsaWm7sq2pmYmMemN8ZkZyWjB2XCyGaSuMcCmNdSeBbCBxZRliYBZkYiMm jUQH3VZhU1CEim+ioqN5eXh7e3uCgoJlZWU/Pz9WVlZYWFgAAAAAAAAAAAAAAAAAAACyrKyinZmg kn2Gbk5qSh90Thh6VhaAXxmIaB2Mbh6JbyB+ah5zaB1qaCBtbyxZektogGBucVa7vbDf3+Cop6iL i4t8fHyCgoJ8fHxRUVFDQ0NcXFw/Pz8AAAAAAAAAAACppKSck4meiGiUd1KGZTp5Uhx9VRSEYBmN bCOSdiqVfTCPejOAdzV1dD50d016gGJ+gmygoZvr6Ovz8vPl4+XExMWfn5+GhoaAgICGhoZiYmJB QUFXV1dSUlIAAAAAAACloqKimIikj3Cbgl+bfVigg1ililyZglRdZlY3eZYrh7gtfKw5Z4FnbWql p6O2tba9vb66uru+vb/Nzc3r6uv09PTf3t+7u7uZmZmGhoaLi4uEhIRTU1NGRkZWVlZISEihnp+O hnqsm4SllHugkHaiknuGdmZTamwry/8nxf8kuv8jr/4irP8zgbPBwsPFxca+vb63tra2tra2tra7 u7vQ0NDu7+/y8vLY2Ni0tLSRkZGIiIiZmZllZWU1NTVVVVW2srJzYECHYSR5aUuCcleTczXDiRiB jIdEz/lE1P43zvwqxPoltPsdlt6vrqzm4Nzj3NnVz8vFwLu8t7SwrquppaSrqanFxMXr6+vv7+/Q 0NCmpqajo6OXl5dRUVEAAAC7u7twY1DCegrDgRDPkBDZnyPlsFCakX1ksMt54f9k1/pH1PwsyPwk tf13jZjc29rW1tXS0dDOzczJyMjExMO9u7mrqqaTkpCVlZTOzs34+fnp6enY2Ni0tLRmZmYAAAAA AAAVEAWvcxTChBDMlRrWpU7pv36vmXh7nqql7/+S6P9z4/9G3P8r0/9Kjazo6Onk5eXf4N/a3NvW 1tbS0tPQ0NHPz9DHx8apqamlpqbMzc3q6ur+/v7MzMx3d3cAAAAAAAAAAACLXhbNjw/RnDHcsGvr y5nawJtuf4Gi4faEprOAmqJzlqBZlq5IiK3l5ub7/fv19/Xu7u7o5ufi4eHd3d3Y2dnU09PMzMzC w8S9vr68vLzZ2Ni1ublcaGgAAAAAAAAAAABZPQ7cmhHeqULnvX33267/8cxgXlVNYGBbeWprnohg o4VVlXRUfmemqai/v8C8vb7g4eLs7u7e3t/V1tfOz8/HyMi6urqxsbGurq6rq6umpKShoaF/f38A AAAAAAAAAAALBQVdRBSVax+3j0+xk2VpXVMOGSxRgnCi8t+H3Mdoz7JIw5tAtHlNaFR3dnh/gICw sbLExca2t7esra2oqKinp6enp6ekpKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUPZ8VRJIa QW8RR3MUg7gel8U9X1qS4s150LhdxaZBt487pGs8dEevr6+5t7erq6ukpKSoqKilpaWqqqqqqqp/ f38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZNoMsdvAtlvEvs/gux/krve0jSVd1xqxp y65NwJw7r4E5mFw3g0IHEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAOGUMoXdsqed4sk+QtpOgvsvYdUXhOlXlUzKdBvY87pW06kU08jjoaOR4A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBRYi Qr4lXdYqc9wrg+AsjuojXKcxaFQ6pHscTzcQLRwTLRcfShsiSigAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYJY0hP9ckUdUmXdooZOMmWMcO HiQABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAEBBoMFGAUJYwWL5cTKHgGDy0AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAaPgIFkAYAJHMAABQA AAADACAOe3IAAB4AATABAAAAJAAAAFBpY3R1cmUgKERldmljZSBJbmRlcGVuZGVudCBCaXRtYXAp AA0AATcBAAAAEHIAAAsAAAAAAAAAwAAAAAAAAEbQzxHgobEa4QAAAAAAAAAAAAAAAAAAAAA+AAMA /v8JAAYAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAQAAACAAAAAQAAAP7///8AAAAAAAAAAP////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////3////+/////v////7///8FAAAABgAAAAcAAAAI AAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYA AAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAA ACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAA MwAAADQAAAA1AAAANgAAADcAAAD+//////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////UgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYABQD//////////wIAAAAWAwAAAAAA AMAAAAAAAABGAAAAAAAAAAAAAAAAoApqROrKzAEDAAAAgAAAAAAAAAABAE8AbABlAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP////// /////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAEMA TwBOAFQARQBOAFQAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAASAAIBAQAAAAMAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BAAAAGZnAAAAAAAAAwBNAGEAaQBsAFMAdAByAGUAYQBtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAABgAAgD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAABAAAADAAAAAAAAAD+/////v////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////wEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIA0AAGAFAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQk1mZwAAAAAAADYAAAAoAAAAfwAAADQAAAABACAAAAAA ADBnAADEDgAAxA4AAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD3//8A////AP// /wD///8A9/f3AP///wD///8A////APf39wD///8A////AP///wDv7+8A////AP///wD///8A7+/v AP///wD///8A////AO/v7wD///8A////AP///wDn7+8A////AP///wD///8A7/fvAP///wD///8A ////APf39wD///8A////AP///wD3//cA////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7+/n AP///wDOzs4A////ALW11gD///8Ara3OAP/3/wClpc4A5+//AJSUzgDe3v8AjIzGAM7O/wB7e70A xsb/AGtrvQBrc/8AY2O1ALW1/wBaWrUAY2P/AFpStQBaWv8AUlK1AFpS/wBSSrUAWlL/AFJKtQBS Uv8AUkq1AFJS/wBSSrUAWlL/AFJKtQBaUv8AUlK1AFpa/wBaUrUAra3/AFpjtQBra/8Aa2O9ALW9 /wBza70Ae3v/AHt7xgDOzv8AhITGAN7e/wCUlM4A5+f/AJyczgD39/8Ata3WAP///wC9vc4A//// AMbOzgD///8A7+/vAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCEhP8A paX/ADk5/wAxMf8AKSm1AHNz/wAhGP8AISH/ACEYtQBra/8AIRj/ACEh/wAhGL0Aa2v/ACEY/wAh If8AIRj/AHNr/wAYGP8AISH/ABgY/wBra/8AIRj/ACEh/wAYGP8Aa2v/ACEY/wAhIf8AIRj/AGtr /wAhGP8AISH/ABgY/wBra/8AIRj/ACEY/wAYGP8Aa2v/ABgY/wApIf8AGBj/AHNr/wAhGP8AISH/ ACEY/wBra/8AIRj/ACEh/wAhGL0Aa2v/ACEY/wAhIf8AISG1AHtz/wApKf8AMTH/ADkxtQCtpf8A lIz/AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A7+feAP///wBaUrUAISH/ABghvQAp If8AIRjOACEh/wAhGM4AKSH/ACEYxgApIf8AIRjGACkh/wAhIcYAKSH/ACEhxgApIf8AIRjGACkh /wAhGMYAKSH/ACEhxgApIf8AISHGACkh/wAhIcYAKSH/ACEhzgApIf8AISHGACkh/wAhIcYAKSH/ ACEhxgApIf8AISHGACkh/wAhIcYAKSH/ACEhxgApIf8AISHGACkh/wAhIcYAKSH/ACEhzgApKf8A IRjOACkh/wAhGM4AKSH/ACEYzgApIf8AIRjGACkh/wAYGMYAISH/ACEYzgAhIf8AIRjGACkh/wBa Uq0A////AOfn5wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wBKQr0Ac2v/ACkh/wAhKf8AISH/AHNz /wAhIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ ACEh/wBzc/8AISH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8A ISH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AKSH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAh If8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AISn/ACEp/wAhIf8Aa2v/AEJK /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wBjY70AIRj/ACEhzgAhKf8AISHOACkp/wAhGM4AKSn/ ACEhzgApIf8AISHOACkh/wAhIc4AKSn/ACEhzgApIf8AKSHOACkp/wAhIc4AKSH/ACkhzgApKf8A ISHOACkh/wAhIc4AKSn/ACEhzgApIf8AISHOACkp/wAhIc4AKSH/ACEhzgApKf8AISHOACkh/wAh Ic4AKSn/ACEhzgApIf8AISHOACkp/wAhIc4AKSH/ACEhzgApIf8AISHOACkh/wAhIc4AKSH/ACEh zgApIf8AKSHOACkp/wAhIc4AKSH/ACkhzgApKf8AISHOACkp/wAhIc4AKSn/ACEh1gAhIf8AY2O9 AP///wD///cA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wC1tf8Ac2v/ACkh/wApKf8AKSH/AHNz/wApIf8AKSn/ACkh/wBzc/8A ISH/ACkp/wAhIf8Ac3P/ACEh/wApKf8AKSH/AHNz/wApIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAp If8Ac3P/ACEh/wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AISH/ACkp/wAhIf8Ac3P/ACkh /wApKf8AISH/AHNz/wAhIf8AKSn/ACEh/wBzc/8AKSH/ACkp/wApIf8Ac3P/ACkp/wApKf8AKSH/ AHNz/wAhIf8AKSn/ACkh/wB7c/8AISH/ADEp/wApIf8Ae3P/ACkh/wApKf8AISH/AHtz/wD39/8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8AvbX/ABgYzgApKf8AKSHOADEp/wApIc4AKSn/ACEpzgApKf8AISHOACkp/wAh Ic4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEh zgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHO ACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4AKSn/ACEhzgApKf8AISHOACkp/wAhIc4A KSn/ACEhzgAxKf8AISHOACkp/wAhIdYAKSn/ACEhzgApKf8AISnOACkp/wAhGMYAa2v/AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////ADkx/wApKf8AISH/AHN7/wApKf8AKSn/ACkp/wBze/8AISn/ACkp/wAhIf8Ae3v/ACkh /wApKf8AISH/AHt7/wApKf8AKSn/ACkp/wB7e/8AKSn/ADEx/wApKf8Ae3v/ACkp/wApMf8AKSn/ AHNz/wApIf8AKTH/ACkp/wB7e/8AKSn/ACkx/wApIf8Ae3v/ACkp/wAxMf8AKSn/AHN7/wAhKf8A MTH/ACkp/wB7e/8AISH/ACkp/wApKf8Ae3v/ACEh/wApKf8AKSH/AHt7/wApKf8AMSn/ACkh/wB7 e/8AKSH/ADEp/wApKf8Ae3v/ACkp/wAxKf8AKSH/AHtz/wApKf8AKSn/ADk5vQD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8Avb29AP///wC9vb0A////AP///wD///8A////AP///wD///8A////AP///wD///8A zs7OAOfn5wB7e3sA3t7eALW1tQD///8A////AP///wD///8A////AP///wD///8A9/f3AP///wB7 e3sA1tbWAL29vQD///8A////AP///wC9vb0A////AL29vQD///8A////AP///wD///8A////AK21 5wApKf8AISHOADlC/wBCOdYAQkL/AEJC3gBCOf8AKSnWADk5/wA5MdYASkr/AEJC3gA5Of8AQkLe AEpK/wBCQt4AOTn/AEJC1gBCQv8AMTHeAEJC/wBKQt4AUkr/AEJC3gBCQv8AQjneADk5/wAxMdYA Qkr/ADk53gA5Of8AOTnWADk5/wAxMdYAOTn/ADk53gAxMf8AOTnWAEJC/wApMdYAOTn/AEJC3gBK Qv8AOTnWADk5/wA5OdYAQkL/ADE51gA5Of8AMTHWAEJC/wBCQt4AOUL/AEJC3gBKSv8AOTnOADEx /wBCQt4ASkr/ADExzgBKQv8AQkLeADEx/wApKc4AKSn/ACkpzgAhIf8AvbXeAP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A AAAAAAAAAAAAAAAAAAAAAO/v7wD///8A////AP///wD///8A////AP///wD///8Aa2trABAQEAAA AAAAAAAAAAAAAAAAAAAAMTExAP///wD///8A////AP///wD///8A////APf39wAAAAAAAAAAAAAA AAAAAAAAUlJSAP///wBzc3MAAAAAAAAAAAAAAAAAa2trAP///wD///8A////AP///wDv5/8AIRj/ AISE/wBSUv8AMTH/ACkp/wCEhP8AMTn/AIyM/wBKSv8AjIz/ADEx/wCMlP8AOUL/AIR7/wApKf8A MTH/ADk5/wCMjP8AMTH/ADEx/wAxMf8AhIT/ADEx/wAxMf8AMTH/AIyM/wAxMf8AjIz/ADEx/wCE hP8AQjn/AJyU/wBSSv8ApaX/ADEx/wCMjP8AOTn/AIyE/wAxMf8AjDn/AEJK/wCUlP8AMTH/AIyM /wA5Of8AhIT/ADEx/wA5Of8AQkL/AJyl/wBKSv8AlIz/ADk5/wCMjP8AQjn/AJSU/wA5Of8AhIT/ ADk5/wCMlP8AMSn/AIyM/wA5Of8AKSn/ACkp/wB7c/8AGCH/AOfn/wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A1tbWAAAAAAAI CAgAEBAQAAAAAAD39/cA////AP///wD///8A////AP///wD///8AOTk5AAAAAAAICAgAEBAQAAgI CAAICAgACAgIAAgICAAAAAAA////AP///wD///8A////AP///wAxMTEACAgIAAgICAAQEBAACAgI AAAAAAA5OTkAa2trAAAAAAAQEBAAAAAAAHNzcwD///8A////AP///wD///8Ae3vOACEh/wApKdYA QkL/ACkp1gApMf8AISnWACkp/wA5McYA5+f/AISE5wDe3v8AlJT/AM7O/wBjWtYAe3v/AISE/wDn 7/8AjITvAHt7/wB7hP8A1s7/AHNr3gDOzv8Ae3veAOfn/wCMjOcA1t7/ADkxzgBCQv8AOTHOAHtz /wCMhP8A5+f/AIyM7wDW1v8AlJz/AOfn/wCMjOcAzs7/AIyE/wDe3v8Aa2vvACkp/wCEhP8A3t7/ AGNazgDe3v8AY1rWAO/v/wCcnPcA7+//AK2t/wDe3v8AlJTvAN7e/wCEhP8A1t7/AISM9wB7e/8A KSnOACkp/wBSUu8AOTH/ACkp1gAxMf8AKSnWACkp/wB7e84A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAEBAQABAQ EAAAAAAApaWlAP///wD///8A////AP///wD///8AjIyMAAAAAAAICAgAEBAQAAAAAAAICAgAAAAA ABAQEAAICAgAEBAQABAQEAD///8A////AP///wD///8AGBgYAAgICAAQEBAACAgIABAQEAAAAAAA AAAAAAgICAAQEBAAEBAQAAgICABra2sA////AP///wD///8A////AL29/wAhIf8AOTn/AEJC/wB7 c/8AKSn/ADEx/wApIf8ApaX/AO/v/wDn3v8Ara3/AO/v/wD///8A////AKWl/wDv7/8A9/f/APf3 /wClrf8A5+f/APf3/wDv7/8AtbX/APf3/wCMlP8A3t7/AJSU/wCEhP8AY2v/ADk5/wCEhP8AtbX/ AGNa/wDGzv8AhIT/AOfn/wCUlP8A9///AJSc/wDW1v8AhIT/ADE5/wBCOf8A9/f/AJyc/wDv7/8A jIT/AP///wCMhP8A////AISM/wD39/8A7+//AO/3/wCcnP8A////AJSU/wD39/8Aa2v/AHtz/wAp Kf8AlJz/ADkx/wB7e/8AKSn/ADEx/wAhIf8AtbX/AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wDe3t4ACAgIAAgICAAQEBAAAAAA APf39wD///8A////AP///wD///8A////ACkpKQAICAgAEBAQAAAAAABaWloA////AP///wAICAgA EBAQAAgICAAAAAAAra2tAP///wD///8A////AAgICAAICAgACAgIAAAAAAClpaUA////ADExMQAI CAgACAgIABAQEAAAAAAAvb29AP///wD///8A////AP///wBSWsYAKSn/ADEx1gBSUv8AMSnWACkx /wApMd4AMTH/AEpK1gDW3v8AhIz/AFpa/wBSStYAUlL/AFJK3gBSUv8AOTHGAFJa/wBSWtYAUlL/ AEJCxgDOe/8Aa3PeAL29/wBKStYAOTn/AEpC3gA5Mf8AKSnWACkp/wApKdYAOTn/AISE9wDW1v8A c3P/AEpK/wBCOc4A3uf/AGtz3gA5Of8AUlreADEx/wApKdYAOTn/AISM7wDe5/8AY2P/AEJC/wBz c+cAa2v/AFJa3gBCSv8AUlLeAEpK/wBCQs4AUkr/AEpS3gBCQv8AQkLeADEx/wAhKd4AMSn/AEpS /wA5Mf8AKSnWADEx/wAxKd4AKSn/AEpSxgD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAQEBAACAgIAAAAAADv7+8A ////AP///wD///8A////AP///wAICAgAEBAQAAgICAAICAgA////AP///wD///8AxsbGAAAAAAAQ EBAAAAAAAL29vQD///8A////AP///wAQEBAACAgIABAQEAAQEBAA////AP///wD///8AMTExAAgI CAAQEBAACAgIAHNzcwD///8A////AP///wD///8AnJT/ACEp/wCMjP8AQkL/ADE5/wAxKf8Ae3v/ ACkp/wAxMf8AOTn/AIyE/wApKf8AMTH/ACkp/wB7e/8AKSn/ADEx/wApKf8Ae3P/ACEh/wApMf8A ISH/AJyc/wAxMf8AKTH/ACkp/wB7e/8AKSn/ACkx/wApKf8Ae3v/ACkx/wA5Mf8AQkL/AISE/wAh If8AjIz/AGNj/wB7e/8AKSn/ADEx/wBaWv8Azs7/AFJK/wCMOf8AQjn/AHt7/wAxKf8AOZT/AFJS /wCEhP8AMTH/ADEx/wAxMf8AhIT/ADEx/wApKf8AKSn/AHt7/wAxMf8AOYz/ACkp/wCMjP8AOTn/ ADEx/wApMf8Ae3v/ACkp/wCMjP8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////ANbW1gAICAgACAgIABAQEAAAAAAA9/f3AP///wD/ //8A////AP///wDOzs4ACAgIAAgICAAICAgAISEhAP///wD///8A////AJycnAAAAAAACAgIAAgI CABKSkoA////AP///wD///8ACAgIABAQEAAICAgAGBgYAP///wD///8A////AM7OzgAAAAAAEBAQ AAAAAABzc3MA////AP///wD///8A////AEJCxgApKf8AOTneAFJS/wAxMd4AOTH/ACkp3gAxMf8A KSneADEx/wApKdYAMTH/ACkp3gAxMf8AKSnWADEx/wApKd4AOTH/ACkx1gBSUv8AMTHWADEx/wAh KdYAMSn/ACkp3gAxMf8AKSnOADE5/wAhIdYAKTH/ACkp1gAxMf8AKSneADEx/wApKdYAOTn/ADk5 1gDOzv8AQkLWADEx/wCMjP8A9///AJyc5wD39/8Ae3P/AK2t/wCEhO8Ac3P/AIR7/wDn5/8AjIz3 AGNa/wCEhP8A1tb/AJSc/wBza/8AUlLeAFqt/wCEjO8A3tb/AISE/wBaUv8ASkreADk5/wApKd4A MTH/ADEp3gApKf8AMTnGAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8AAAAAABAQEAAQEBAAAAAAAKWlpQD///8A////AP// /wD///8A////AAAAAAAQEBAACAgIAHt7ewD///8A////AP///wD39/cAAAAAABAQEAAAAAAAlJSU AP///wD///8A////ABAQEAAICAgAEBAQABAQEAD///8A////AP///wB7e3sACAgIABAQEAAAAAAA c3NzAP///wD///8A////AP///wCEjP8AKSn/AIyM/wBKSv8Ae4T/ADEx/wAxMf8AMTH/AIR7/wAx Mf8AMTH/ADEx/wB7hP8AMTH/ADk5/wAxMf8AhHv/ACkp/wDGxv8A////AJSU/wAhKf8AOTn/AFpa /wCEe/8AKTH/AOfe/wCtrf8Avb3/AEpS/wA5jP8AMSn/AHt7/wApMf8AlIz/ALW1/wCcnP8AlJz/ AO/v/wCcnP8A////AO/v/wDn7/8A////APf//wDv7/8A////ALW1/wDOzv8A7+//AP///wCMjP8A ////AO/v/wD3//8Ara3/AP///wCUlP8A////AHt7/wDe5/8AhIT/AKWc/wA5Of8AhIT/ADEx/wA5 Of8AKSn/AISE/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A1tbWAAgICAAICAgAEBAQAAAAAAD39/cA////AP///wD///8A//// AMbGxgAAAAAACAgIAAgICAApKSkA////AP///wD///8AnJycAAAAAAAICAgACAgIAEpKSgD///8A ////AP///wAICAgACAgIAAgICAAQEBAA7+/vAP///wD///8Azs7OAAAAAAAQEBAAAAAAAL29vQD/ //8A////AP///wD///8AMTHGADEx/wA5Od4AUlL/ADEx3gAxMf8AKTHeADk5/wAxOd4AMTH/ACkx 3gAxMf8AMTHeADk5/wApMf8AMTH/ADEp3gApMf8ASkLGAP///wBzc+cAKSH/AHNz/wD///8AQkrW ACkp/wCEhP8A////AKWl9wDv7/8Ara3/AOfv/wBaWu8AMSn/AGNjzgD///8Aa2PnADEx/wCcpf8A ////ADk5xgBKUv8AjIT/AOfe/wBze+cAztb/ALW9/wDe3v8AWlreAHNz/wB7c/8Azs7/AHt73gDn 5/8Ae4T/AL29/wCEhO8Azs7/AFpa1gC1vf8AhIT3ADk5/wBCQt4AQkL/ADEx3gAxMf8AMTH/ADEx /wApKb0A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wAICAgAEBAQAAgICAAAAAAA7+/vAP///wD///8A////AP///wD///8A AAAAABAQEAAICAgAMTExAP///wD///8A////APf39wAAAAAAEBAQAAAAAACUlJQA////AP///wD/ //8AEBAQAAgICAAQEBAAEBAQAP///wD///8A////AHt7ewAICAgACAgIAAgICABzc3MA////AP// /wD///8A////ADEx/wApKf8AjIz/AEpK/wA5Mf8AKSn/AHt7/wCUlP8A3t7/AEI5/wB7e/8AMTH/ ADE5/wAxMf8Ae3v/ACkx/wC1tf8Ac3P/AKWl/wD///8A////ADk5/wClpf8A////ANbW/wApKf8A jJT/AP///wClrf8AKSH/AJyc/wBze/8AraX/ACkp/wClrf8A////AL29/wAhKf8Ara3/AFpa/wAp Kf8AISn/AHN7/wApKf8AMSn/AGNa/wC9vf8AKSn/ACkx/wAhKf8AhIT/AFJS/wDe3v8AOTn/AHt7 /wApKf8AjJT/AEJC/wB7e/8AMSn/ADkx/wA5Mf8AnKX/ADE5/wA5Mf8AMTH/AISE/wApMf8AOTn/ AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wDn5+cAEBAQAAgICAAQEBAAAAAAAPf39wD///8A////AP///wD///8AxsbGAAgICAAI CAgACAgIACkpKQD///8A////AP///wClpaUAAAAAAAgICAAICAgASkpKAP///wD///8A////ABAQ EAAQEBAACAgIABgYGAD///8A////AP///wB7e3sAAAAAABAQEAAAAAAAc3NzAP///wD///8A//// AP///wApKc4AKTH/AEJC5wBSUv8AQjneAFJS/wApKecAWlr/AP///wDOxv8AMTHeADE5/wAxMf8A MTH/ACkp3gBSUv8A////APf//wBjY9YA////AN7//wDe3v8AY2POAP///wDO1v8Axr3/AFJSxgD/ //8AY2PWAFJS/wBjY+cAY1r/ADlC1gApKf8AOULOAP///wCMjP8AQjn/ADEx3gAxMf8ASkreALW1 /wBaY94ASkr/ADEx1gAxMf8AOTHWAFJS/wBKUt4AQkL/AK2t7wD///8Avcb/AOfn/wBKStYAa2v/ AP///wC9vf8AKTHeADE5/wAxMf8AOTn/AEJK5wBCQv8AMTH/ADk5/wAxMecAMTH/ACkpzgD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////ABAQEAAQEBAAEBAQAAAAAAClpaUA////AP///wD///8A////AP///wAAAAAAEBAQAAgI CAB7e3sA////AP///wD///8A9/f3AAAAAAAYGBgACAgIAJycnAD///8A////AP///wAQEBAAEBAQ ABAQEAAQEBAA////AP///wD///8Ae3t7AAgICAAQEBAACAgIAHNzcwD///8A////AP///wD///8A e3P/ADEx/wCMjP8AQkr/AM7O/wCEhP8AOTn/ACkp/wDe5/8A////AKWl/wApKf8Ae4T/ADEx/wAx Mf8A////AP///wA5Of8Azs7/AP///wC1tf8A////AP///wD///8A1t7/AP///wD///8A////AP// /wD///8A////AP///wD///8AY2P/AO/3/wD///8A////AP///wDO1v8AhIz/AP///wD///8A//// AP+9/wC1vf8ASlL/AP///wD///8A////AP///wD///8AnJz/AK2t/wD///8A////AP///wDWzv8A OTH/ADE5/wAxMf8AhIT/ADEx/wCcnP8AOTH/AISE/wA5Mf8AOTn/ADEx/wB7e/8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANbW 1gAICAgAEBAQABAQEAAAAAAA7+/vAP///wD///8A////AP///wDGxsYACAgIABAQEAAQEBAAKSkp AP///wD///8A////AKWlpQAAAAAAEBAQAAgICABKSkoA////AP///wD///8ACAgIABAQEAAICAgA GBgYAO/v7wD///8A////AM7OzgAAAAAAEBAQAAAAAAC9vb0A////AP///wD///8A////ACEh1gA5 Of8AOTn/AFJK/wCUjO8Ac3P/ACkx3gBCQv8AlIznAP///wCttf8Axsb/AGtj3gBra/8AhITeAP// /wB7e94AUlL/AM7W/wD///8ASlLOAGNa/wC9tf8Axs7/AEI5zgBzc/8Apa3/AOfn/wDW3v8AUkr/ AEJCzgCtrf8Avcb3AP///wC1vf8Axsb/AGtrzgD///8AjIzeAP///wBSUs4AOTH/ADExzgDv7/8A xsb/AGNa/wBzc/8AQkL/ADk5xgD///8Azs7/AP///wBKSt4AMTH/AJSc/wD///8AY1reADk5/wAp Mf8AOTn/ADEx5wA5Of8ASlL/AEI5/wAxMe8AOTn/ADk5/wAxOf8AKSnWAP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD39/cAAAAA ABAQEAAQEBAACAgIAFJSUgD///8A////AP///wD///8A////AAgICAAQEBAACAgIADExMQD///8A ////AP///wD39/cAAAAAABgYGAAICAgAnJycAP///wD///8A////ABAQEAAQEBAAGBgYABgYGAD/ //8A////AP///wB7e3sACAgIABAQEAAICAgAc3NzAP///wD///8A////AP///wAxMf8AMTH/AIyM /wBKQv8A3uf/AHt7/wDOzv8AjIz/AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8Ara3/ANbO/wCMhP8A////AGNj/wD///8A ////AP///wD///8A////AO+c/wDW3v8AUlL/ALW9/wD///8AnJT/ACEx/wB7e/8ASkr/AP///wBr a/8AjJT/ADEx/wD///8A////AJSU/wD///8A7+//AEpS/wC9xv8A////AN7e/wAxMf8AhIz/ADk5 /wCMjP8AOTn/AJyc/wA5Of8AOTn/ADk5/wCEhP8AMTn/ADEx/wC9vf8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AUlJSABAQEAAQEBAA GBgYABAQEAAQEBAA////AP///wD///8A////AMbGxgAQEBAAEBAQABAQEAAxMTEA////AP///wD/ //8ApaWlAAgICAAQEBAAEBAQAEpKSgD///8A////AP///wAQEBAAGBgYABAQEAAYGBgA////AP// /wD///8Azs7OAAgICAAYGBgACAgIAHt7ewD///8A////AP///wD///8AKSnWADk5/wA5OecASkr/ AISM/wDGvf8Ac3P3AEpC/wBjY94Ara3/AKWl9wDv7/8AWlrGAP///wDv7/8AY2P/AFJS3gCtWv8A SlLWAFJS/wBKSt4ASkr/ADlC1gBCQv8AQkLWAEJC/wAxMd4AY1r/AP///wDe5/8AWmPeAFJK/wC1 tf8A////AJSU7wA5Qv8AMTneADEx/wBCStYA////AJyc/wBarf8AOTHWAOfn/wD///8A////ALW1 /wDn5/8A////AFJS/wApMecAa2P/AP///wD///8AjJTnAP///wBza/8AOTn/ADEx5wBCOf8AOTn/ AEI5/wBCQu8AOTn/ADkx/wBCQv8AMTHvADk5/wApMdYA////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////ABgYGAAQEBAAGBgYABgYGAAh ISEAAAAAAP///wD///8A////AP///wD///8ACAgIABgYGAAQEBAAe3t7AP///wD///8A////APf3 9wAAAAAAGBgYAAgICAClpaUA////AP///wD///8AGBgYABAQEAAYGBgAGBgYAP///wD///8A//// AISEhAAQEBAAGBgYABAQEABzc3MA////AP///wD///8A/73/AHuE/wAxMf8AlJT/AFJS/wCUlP8A OTn/ADE5/wAxMf8AjIT/ADk5/wCMjP8Ara3/AO/v/wD///8A1tb/AEpK/wCMhP8AMTn/ADk5/wAx Mf8AhIz/ADk5/wA5jP8AOTn/AIyE/wA5Of8AjIz/ACk5/wDOzv8A////AM7O/wD///8A////AFpS /wA5Of8AMTH/AISE/wBCOf8AjDn/AGtr/wD///8AjIz/AP///wD///8AtbX/ADE5/wDOzv8A//// AP///wBSWv8AOTn/ADEx/wCcnP8AY1r/ADk5/wA5Mf8AjIT/ADk5/wCMOf8AOTH/AISE/wAxOf8A nJz/ADk5/wCMhP8AOTn/ADk5/wA5Of8Ae3v/AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AOfn5wAAAAAAGBgYABAQEAAYGBgAGBgYABAQ EABaWloA////AP///wD///8Azs7OABAQEAAQEBAAGBgYACkpKQD///8A////AP///wClpaUACAgI ABgYGAAQEBAAUlJSAP///wD///8A////ABAQEAAYGBgAEBAQABgYGADv7+8A////AP///wDOzs4A CAgIABgYGAAICAgAxsbGAP///wD///8A////AP///wAxMdYAOTn/ADlC/wCtrf8AOUL3ADk5/wA5 Mf8AQkL/AEI59wA5Of8AMTH/AL3G/wD///8A////AFJSzgDe7/8Aa2PnAN7e/wB7e/8A3t7/AIR7 7wDO1v8AhIT/AM7O/wB7c+8Ac2v/AJyU/wDW1v8Ac3vvAFJS/wBjWv8A////AEpS3gA5Of8AOTn/ AEI5/wA5Oe8AOTn/ADk5/wA5Of8AMTHnAFpS/wDGxv8Ara3/ADEx7wA5Qv8AMSn/AN7W/wDW5/8A UlL/ADk5/wA5Qv8AOTnnADk5/wAxMf8AOTn/ADE57wA5Of8AOTn/AEJC/wA5Oe8AQkL/AEpS/wBK Of8AOTnvADk5/wA5Of8AOUL/ADEx1gD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wA5OTkAGBgYABgYGAAhISEAEBAQABgYGAAQEBAAKSkp AP///wD///8A////AP///wAQEBAAa2trABgYGAAhISEA////AP///wD///8Azs7OAAgICAAYGBgA CAgIAL29vQD///8A////AP///wAYGBgAEBAQABgYGAAYGBgA////AP///wD///8AhISEABAQEAAY GBgAEBAQAHt7ewD///8A////AP///wD///8AMTH/ADE5/wCMlP8AWlL/AJSU/wA5Of8AlIz/AEI5 /wCMjP8AOTn/AIyM/wA5Qv8A1tb/AFpa/wCUlP8A////AO/3/wCcnP8A////APf//wD///8Avb3/ ANbO/wDv7/8A////AJyl/wD///8AnJT/AP///wBKUv8AhIT/ADkx/wCMjP8AOTn/AIyM/wBCOf8A lIz/ADk5/wCMjP8AQjn/AIyM/wA5Of8AhIT/ADk5/wCMjP8ASjn/AIyM/wA5Of8AjIz/ADk5/wCM hP8AQjn/AJSM/wA5Of8AjJT/ADk5/wCMjP8AOTn/AIyM/wBCOf8AjIz/ADlC/wClpf8AQjn/AIw5 /wA5Of8AjJT/ADk5/wA5Of8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wDW1tYAEBAQABgYGAAYGBgAGBgYADExMQAYGBgAGBgYAAgICAD///8A ////AP///wD///8AMTExABAQEAAYGBgAEBAQAM7OzgDe3t4A////ACkpKQAYGBgAGBgYABAQEAC1 tbUA////AP///wD///8AGBgYABgYGAAQEBAAISEhAP///wD///8A////AM7OzgAICAgAGBgYAAgI CAB7e3sA////AP///wD///8A////ADEp1gBCQv8AQkLvAGNa/wA5Qv8AOUL/ADkx9wBCQv8AOTn/ AEI5/wA5Oe8AOTn/ADEx/wA5Of8AUlLWAP///wBzc94A1s7/AHNr7wD3//8Avcb/AOfn/wB7e/cA 1tb/AISE/wDv7/8AhITnAM7O/wBja/8AQkL/ADk57wBCOf8AOTn/AEJC/wA5OfcAQjn/ADEx/wA5 Qv8AQjnvAEI5/wA5Of8AQjn/ADE59wA5Of8AQjn/AEJC/wAxMfcAQkL/AEI5/wA5Qv8AOTn3AEI5 /wAxOf8AQkL/ADEx9wBCOf8AQjn/AEpC/wA5Oe8AQkL/ADlC/wBCQv8AUlL3AEJC/wA5Of8AQkL/ AEJC9wBCQv8AMTHWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A5+fnAAgICAAYGBgAGBgYAISEhACEhIQAGBgYABgYGAAQEBAAe3t7AP///wD/ //8A////AISEhAAQEBAAGBgYAGtrawAQEBAAKSkpACEhIQAYGBgAGBgYABgYGAAQEBAA////AP// /wD///8A////AGtrawAYGBgAISEhACEhIQD///8A////AP///wCEhIQAGBgYABgYGAAYGBgAc3Nz AP///wD///8A////AP///wCMjP8AQkL/AJSM/wBSUv8AlJz/ADlC/wCUjP8AOTn/AIyU/wBKQv8A lJT/AEJC/wCUlP8AQkL/AMbO/wCtrf8A1tb/AEpK/wCMjP8ASkr/AKWc/wBCOf8AjIz/AEJC/wCU jP8AUlr/AN7W/wA5Of8AhIT/AEpK/wC1tf8AQkL/AIyM/wBCOf8AlIz/AFpa/wC9vf8AY2P/AIyM /wA5Of8AjIz/ADk5/wCUlP8AY2v/AMa9/wBjY/8AnJz/AFpa/wCclP8AWlr/AJSU/wBKSv8AnKX/ AEpC/wC9tf8Ac3P/AK2t/wBKSv8AnJz/AEpK/wCcnP8AUlL/ALW1/wBCQv8AjJT/AEJK/wCUlP8A QkL/AIyM/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AEJCQgAYGBgAGBgYABgYGABzc3MA////AAgICAAhISEAEBAQADk5OQD///8A////AP// /wD///8AMTExABAQEAAYGBgAISEhABgYGAAYGBgAGBgYABgYGAAAAAAA////AP///wD///8A//// AP///wAQEBAAGBgYABAQEAAhISEA7+/vAP///wD///8A1tbWAAgICAAhISEAEBAQAMbGxgD///8A ////AP///wD///8AQjneAEJC/wA5Qv8ASkr/AEo59wBCQv8AOUL/AEpK/wCtrf8A////AMbG/wD/ //8Axsb/AP///wDGxv8A////AMa99wD///8Axsb/AP///wCtpf8AUlL/AJSU/wD///8Ata3/ANbW /wBCQv8AQjn/AFJS5wD///8A3v//AMbG/wAxOe8AOTn/AGtr/wD///8A////APf//wBrY/8A9/f/ AJyU9wDn5/8Axsb/AP///wD39/8A3tb/AGNj3gDv9/8AnJzvANbW/wAxOd4A5+f/AHNr5wDn5/8A xsb/AP///wClpf8AWlr/AEpK/wBarf8AQkrvAEpK/wBKQv8ASkr/AGNj/wBKUv8AQkr/AEJK/wA5 OdYA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wAhISEAGBgYAGtrawAICAgA////AP///wBzc3MAGBgYACEhIQAQEBAA////AP///wD///8A//// AP///wBaWloACAgIAAgICAAYGBgAEBAQAAgICAAhISEA////AP///wD///8A////AP///wD///8A EBAQAAgICAAQEBAAEBAQAP///wD///8A////AISEhAAAAAAACAgIAAgICAB7e3sA////AP///wD/ //8A////AJSU/wA5Of8AjJT/ADk5/wCMjP8AOTn/AIyM/wBKSv8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AEJC/wCMjP8A////APf3/wBCQv8AjIz/ AEpK/wD///8A////AP///wD///8Ara3/ACk5/wC1rf8A////AP///wC1rf8A5+//AP///wD///8A ////AP///wD///8A////AGNr/wC1rf8A////AP///wBjWv8AnJz/AP///wD///8A////AP///wD/ //8A////AHNz/wCMjP8AWmP/AIyM/wA5Of8Ara3/AHNz/wCtvf8ASlL/AJyl/wBCQv8AjJT/AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDn5+cAEBAQ ACEhIQAYGBgAGBgYAP///wD///8AQkJCABgYGAAYGBgAEBAQAIyMjAD///8A////AP///wD///8A ////AN7e3gDe3t4Aa2trAHt7ewC1tbUA////AP///wD///8A////AP///wD///8A////AL29vQD/ //8AtbW1AP///wD///8A////AP///wD///8AtbW1AP///wC1tbUA////AP///wD///8A////AP// /wBSSt4AQjn/ADk59wA5Qv8AOTn/AEJC/wA5OfcASlL/AJyl/wDWzv8Ae4TvAFpa/wBrY/8A//// AM7W/wD///8A3v//AP///wCtrfcA3t7/AMa9/wBKSv8AKSneAP///wCcnP8AOTH/ADk55wDn7/8A ////AP///wDv7/8A////AIyM/wBKQv8AUlLnAP///wD///8A////ADE5zgD///8Axs7/AP///wDO 1ucA////ALW1/wC9vf8Aa2PWAP///wD///8A9+//AHt79wD///8A////AP///wD///8A////AN7/ /wCtrf8AQkLvAGNa/wBKSv8Atb3/AHuE7wBra/8AUlL/AFpa/wBSWvcAQkr/AEpK1gD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AUlJSABgYGAAhISEA GBgYAEpKSgD///8A////ANbW1gAQEBAAa2trABgYGAA5OTkA////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8Ara3/ ADk5/wCMjP8AOUL/AJSM/wBCQv8AjIz/AEJC/wDGzv8AQkL/AIw5/wA5Of8AjIz/ADE5/wCMlP8A Qkr/AJSU/wBCQv8AOTn/AFpa/wD///8AQkL/AL3G/wD///8A////AHt7/wDn3v8A////AP///wD/ //8A////AP///wD///8Ac3P/ALW1/wD///8A////AP///wA5jP8ASkL/AP///wDv9/8A9/f/AP// /wD///8AWlL/AM7O/wD///8A////AP///wCMjP8Aa3P/AP///wD///8A////AP///wC1tf8AQjn/ AJSU/wBra/8Azs7/AISM/wDW5/8AjJT/AN7e/wCEjP8A1t7/AFJS/wClnP8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////ABgYGAAYGBgAISEhAAgICADn 5+cA////AP///wDOzs4AGBgYABgYGAAhISEACAgIAP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGNj3gBCQv8A OTn/ADlC/wA5OfcAQkL/ADk5/wBCQv8AOTnvAEJC/wA5Of8AOUL/ADlC9wBCQv8AOTn/AEJC/wAx OfcAQjn/ADE5/wCtrf8Axsb/AN7e/wD///8A////AP///wD///8A3t7/AP///wDn7/8A////AP// /wD///8A7+//AP///wBSWv8Ata3/AP///wD///8AUkr/ADk5/wBaWu8ASkr/AK2t/wD///8AnJzv AFpa/wCEhP8A////AP///wD///8Aa2v/AEJC/wC9xvcA////AP///wD39/8AWlrvAGtz/wBze/8A xs7/AIyU5wDn3v8Ac3v/AMbW/wCMjN4A3uf/AHuE/wBKSv8AY1reAP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////APf39wAQEBAAKSkpACEhIQBra2sA////AP// /wD///8A////ACEhIQAhISEAISEhABgYGACcnJwA////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDOxv8AOTn/AIyM/wAx Of8AjIz/ADk5/wCMlP8AQkL/AJSM/wA5Of8AjIz/ADlC/wCMjP8AOTn/AJSM/wBCOf8AlIz/AEJC /wCMjP8A9+//AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////APf3/wBjY/8AnJz/AHt7/wD///8A////AP///wBaY/8A paX/AP/3/wD///8A////AP///wBze/8Axs7/AP///wD///8Aa2v/ALXG/wB7e/8Axs7/AISM/wDO zv8AhIz/AN7n/wCMjP8A5+f/AIyc/wDe5/8AOUr/AL29/wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wBKSkoAISEhACEhIQAhISEAMTExAP///wD///8A//// AP///wBaWloAGBgYACkpKQAYGBgAUlJSAP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8AjIz/ADlC/wA5OfcAQkL/AEI5 /wBKOf8AOTn3AEI5/wBCOf8AQkL/ADk59wBCQv8AOTn/AEJC/wA5OfcAQkL/ADk5/wBCQv8AUlLe AP///wD///8A////AP///wD///8A////AP///wDGxucA////AP///wD///8A7/f/AP///wD///8A ////AP///wD///8AlJTOAP///wD///8A////AP///wD///8A////AOfn/wBSUv8AQkL/ADk57wBC Of8AOTneAEJC/wBSUu8AY2P/AFpS/wBKUv8AQkLnAEpS/wBja/8A1tb/AJSU7wDe3v8Ac3veANbn /wCMlO8A3uf/AJSU3gDn7/8AhIz/ADlC/wB7e/8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8AISEhACEhIQBzc3MAGBgYAL29vQD///8A////AP///wD///8A nJycABgYGAAhISEAKSkpACEhIQD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AO/3/wA5Of8AjIz/AEI5/wCMjP8AQjn/ AIyM/wBCQv8AjIz/AEJC/wCMjP8AOTn/AIyM/wBCQv8AjIz/AEJC/wCMjP8AOTn/AKWl/wD///8A ////AP///wD///8AraX/AP/3/wDvnP8Avcb/AISM/wC9vf8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wCMjP8AlIz/ADk5/wCMjP8AQkL/AIyM /wBCQv8AjIz/ADlC/wCMlP8AQkr/AJSc/wBaY/8A1t7/AJSc/wDW3v8AjJT/ANbe/wB7hP8A3uf/ AHuE/wDe5/8AnPf/ANbe/wAxMf8A7+//AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AAgICAAYGBgAGBgYABAQEAC9vb0A////AP///wD///8A////AP///wAA AAAAISEhABgYGAAQEBAApaWlAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wDGvfcASkL/ADk5/wBCQv8AOTn3AEJC/wA5Of8A QkL/ADk59wBCQv8AOTn/AEJC/wA5OfcAQkL/ADk5/wBCQv8AQjn3ADk5/wBKSv8A9///AK2t9wD/ //8AY2v/ADk5/wAxMe8AOTn/ADk5/wA5Of8AOTnnAO/v/wCMhN4A////AN7e9wD///8A////AP// /wDOzvcAznv/AEJCzgD///8Aztb/AFJS/wBCSt4ASkL/AEI59wBCQv8AQkL/AEJC/wA5QvcAQkr/ ADlK/wBKSv8ASkr3AEpS/wBKSv8AWq3/AGtz5wDO1v8AjJT/AM7W/wCcpf8Azt7/AISM/wDe9/8A lKXnAO/3/wBrc/8AOTn/AL297wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AJSUlAClpaUAWlpaAK2trQBaWloA////AP///wD///8A////AP///wD///8AtbW1AFpa WgCtra0AUlJSAOfn5wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AFJK/wCMjP8AQkL/AIyM/wA5Of8AjIz/AEJC/wCM jP8AQkL/AIyM/wA5Qv8AjIz/AEJC/wCMjP8AQkL/AIyM/wA5Qv8AjJT/AEJC/wCUlP8AQkL/AIyU /wBCOf8AjIz/ADlC/wCMjP8AQjn/AIyM/wBrc/8A////AGtz/wCcjP8Aa2P/AL29/wBKSv8AlJz/ ADlC/wCMjP8Aa2P/ALW1/wA5Of8AjIz/ADlC/wCMlP8AQkL/AJSU/wBCQv8AlJT/AEJK/wCUnP8A Skr/AJyc/wBKWv8AnKX/AEpj/wC1vf8Ac3v/AM7W/wCEjP8Azt7/AHOM/wDW7/8AjJT/AN7v/wCl tf8AnK3/AEJC/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wDGzv8AMTH3AEJC/wA5Of8AQkL/ADk59wBCQv8AOTn/AEJC /wA5OfcAQkL/ADk5/wBCQv8AOTn3AEJC/wA5Of8AQkL/ADlC7wBCQv8AMTn/ADlC/wA5OfcAQkL/ AEI5/wBKQv8AOTn/ADlC/wA5Of8AOTn/ADk57wBCQv8AOTn/ADk5/wA5MfcAQkL/ADk5/wA5Qv8A OTn3AEJC/wA5Of8AOUL/AEI5/wBCQv8AQkL/AEpK/wA5QvcAQkr/AEJC/wBKUv8AQkr3AFJa/wBK Wv8AUq3/AEpa9wBaa/8AY3P/ALXG/wBje/cAc87/AHOM/wDO5/8AjJT/AN73/wCltf8A7///ADEx 5wB7e/8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////ADk5/wA5Of8AjIz/AEJC/wCMjP8AQkL/AIyM/wBCQv8AjIz/ AEJC/wCMjP8AQkL/AIyM/wBCOf8AjJT/AEI5/wCMjP8AQkL/AIyM/wA5Qv8AjIz/ADk5/wCMlP8A QkL/AIyM/wBCOf8AjIz/AEJC/wCUjP8AOTn/AIyM/wBCQv8AjIz/AEI5/wCMlP8AQkL/AIyM/wA5 Of8AlJT/AEJC/wCMjP8AQkL/AJSU/wBCSv8AlJT/AEJK/wCUnP8ASlL/AJyl/wBSWv8AnK3/AFpr /wClvf8AY3P/ALXG/wBre/8Avdb/AHuM/wDW5/8AjO//AOf//wClvf8A////AGNz/wCMOf8A/73/ AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wBzc/8AOTn/ADk59wBCQv8AOTn/AEJC/wA5OfcAQkL/ADk5/wBCQv8A OTn3AEJC/wA5Of8AQkL/ADk59wA5Qv8AOTn/AEJC/wA5OfcAOUL/AEI5/wBCQv8AOTnvAEJC/wBC Of8AQkL/ADk57wBCQv8AOTn/AEJC/wA5OfcAOUL/ADlC/wBCQv8AOTn3AEJC/wA5Of8AQkL/ADk5 9wBCQv8AQjn/AEJK/wA5QvcASlL/AEpK/wBKUv8ASlL3AFJa/wBKWv8AWrX/AFJr9wBjc/8AY3P/ ALXO/wBzhP8Ae97/AHuU/wDW7/8AlKX/AO///wCtvf8A////AJyl/wA5Of8Ac3P/AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AFJS/wA5jP8AOTn/AJSM/wBCQv8AjIz/AEJC/wCMjP8AQkL/AIyM/wA5 Of8AlJT/AEJC/wCMjP8AOTn/AIyU/wA5Qv8AjIz/ADk5/wCMjP8AQkL/AIyM/wA5Of8AjJT/AEJC /wCMjP8AOTn/AIyM/wBCQv8AjIz/ADk5/wCMjP8AOUL/AIyM/wBCOf8AlIz/ADlC/wCMlP8AQkL/ AJSU/wBCSv8AlJz/AEpS/wCcpf8ASlr/AJyt/wBKY/8Apb3/AFpz/wCtxv8Aa3v/AL3W/wBzjP8A zt7/AISc/wDe9/8A7///APf//wC1//8A////AJz3/wA5jP8AUkr/AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8AWlrWADkx/wAxOe8AOUr/ADkx/wA5Qv8AOTn3AEJC/wA5Of8AQkL/ADk5 9wBCQv8AOTn/AEJC/wBCOfcAQkL/AEI5/wBCQv8AQkL3AEJC/wBCOf8AQkL/AEI59wBCQv8AQjn/ AEJC/wA5OfcAQkL/ADk5/wBCQv8AOTn3AEJC/wBCQv8AQkL/ADlC9wBCQv8AOUr/AEJK/wBCSvcA SlL/AEpK/wBSWv8AUlL3AFpj/wBSY/8ArbX/AGNz/wBrzv8Aa3v/AMbW/wB7jP8A1uf/AJSl/wDv //8Apb3/AP///wDGzv8A////AGNz5wAxMf8AWlLeAP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wDv9/8ArbX/AEpC/wCUlP8AOTn/AIyM/wAxOf8AhIz/ADEx/wA5Of8AMTn/ AISE/wA5Of8AjIz/ADk5/wCMhP8AOTn/ADk5/wA5Of8AjIz/ADk5/wCMjP8AOTn/AIyM/wAxOf8A OYz/ADk5/wCMjP8AOTn/AIyM/wA5Of8AlIz/AEJC/wCMlP8AQkL/AJSU/wBCSv8AlJz/AEJK/wCU pf8ASlL/AJyl/wBKUv8Apa3/AFJj/wClrf8AUmP/AKWt/wBSY/8Apa3/AFJa/wClrf8AUlr/AJyl /wBKUv8AlJT/ADk5/wClpf8Ara3/AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A597/AP///wDOzv8A////ALW19wD///8Ara3/AO/v/wCUlO8A 1t7/AHuE/wDOzv8Ac3vnAHNz/wBra/8Avb3/AGNj5wBra/8AWlr/AK2t/wBaWucAY1r/AFpa/wCt rf8AUlLnAFpa/wBSUv8Ara3/AFJS5wBaWv8AWlL/AK2t/wBaWucAY1r/AGNa/wCtrf8Aa2PnAGtr /wBra/8Avb3/AHNz3gB7e/8AhIT/ANbe/wCUjO8A7+f/AJyc/wD///8Atb33AP///wDOxv8A//// AN7e/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/ //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQI3AQAAAAAAAAADAAU3BgAAAAIBCjcBAAAA CwAAACqGSIb3FAMKAwIBAAMACzdOAQAAAwAUNwAAAAADAPp/AAAAAEAA+38AQN2jV0WzDEAA/H8A QN2jV0WzDAMA/X8AAAAACwD+fwAAAAALAP9/AAAAAAMAIQ5FFx0AAgH4DwEAAAAQAAAAAlL+rjmi 5U2FQF/HNbjJuAIB+g8BAAAAEAAAAAJS/q45ouVNhUBfxzW4ybgDAP4PBwAAAAMADTT9P6UGAwAP NP0/pQbbkw== ------=_NextPart_000_0520_01CCCAF2.B3A345A0-- From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 08:49:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Enc13147095 for ; Wed, 4 Jan 2012 08:49:38 -0600 X-ASG-Debug-ID: 1325688574-00a9eb19d51f6d90001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id h64hnaDfpdUnlxwH for ; Wed, 04 Jan 2012 06:49:34 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiS9l-0004C3-Tl; Wed, 04 Jan 2012 14:49:33 +0000 Message-Id: <20120104144834.869111452@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 04 Jan 2012 09:48:34 -0500 From: Christoph Hellwig To: stable@vger.kernel.org, xfs@oss.sgi.com Subject: [PATCH 0/2] XFS updates for 3.0-stable. X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-ASG-Orig-Subj: [PATCH 0/2] XFS updates for 3.0-stable. X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325688574 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85012 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean Now for real - two updates that went into Linus' tree recently and fix issues with peridic metadata writeback and sync not beeing able write file size updates to disk in some cases. The executive summary is: the writeback code slowly decided that the XFS behaviour in corner cases equals to livelocking, and XFS made some of this behaviour much more likely since the introduction of the delaylog mode. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 08:49:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Encsu147091 for ; Wed, 4 Jan 2012 08:49:38 -0600 X-ASG-Debug-ID: 1325688574-00a9eb19d31f6db0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id dUGKaLZuRCej9TiV; Wed, 04 Jan 2012 06:49:35 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiS9m-0004Cc-2l; Wed, 04 Jan 2012 14:49:34 +0000 Message-Id: <20120104144934.040072910@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 04 Jan 2012 09:48:35 -0500 From: Christoph Hellwig To: stable@vger.kernel.org, xfs@oss.sgi.com Cc: Ben Myers Subject: [PATCH 1/2] xfs: log the inode in ->write_inode calls for kupdate References: <20120104144834.869111452@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 1/2] xfs: log the inode in ->write_inode calls for kupdate Content-Disposition: inline; filename=xfs-fix-kupdate X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325688574 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85012 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean Commit 0b8fd3033c308e4088760aa1d38ce77197b4e074 upstream. If the writeback code writes back an inode because it has expired we currently use the non-blockin ->write_inode path. This means any inode that is pinned is skipped. With delayed logging and a workload that has very little log traffic otherwise it is very likely that an inode that gets constantly written to is always pinned, and thus we keep refusing to write it. The VM writeback code at that point redirties it and doesn't try to write it again for another 30 seconds. This means under certain scenarious time based metadata writeback never happens. Fix this by calling into xfs_log_inode for kupdate in addition to data integrity syncs, and thus transfer the inode to the log ASAP. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Tested-by: Mark Tinguely Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.c 2012-01-04 10:27:56.789986299 +0100 +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.c 2012-01-04 13:32:13.843253565 +0100 @@ -871,27 +871,6 @@ xfs_fs_dirty_inode( } STATIC int -xfs_log_inode( - struct xfs_inode *ip) -{ - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; - int error; - - tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); - error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); - if (error) { - xfs_trans_cancel(tp, 0); - return error; - } - - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - return xfs_trans_commit(tp, 0); -} - -STATIC int xfs_fs_write_inode( struct inode *inode, struct writeback_control *wbc) @@ -904,10 +883,8 @@ xfs_fs_write_inode( if (XFS_FORCED_SHUTDOWN(mp)) return -XFS_ERROR(EIO); - if (!ip->i_update_core) - return 0; - if (wbc->sync_mode == WB_SYNC_ALL) { + if (wbc->sync_mode == WB_SYNC_ALL || wbc->for_kupdate) { /* * Make sure the inode has made it it into the log. Instead * of forcing it all the way to stable storage using a @@ -916,11 +893,14 @@ xfs_fs_write_inode( * of synchronous log foces dramatically. */ xfs_ioend_wait(ip); - error = xfs_log_inode(ip); + error = xfs_log_dirty_inode(ip, NULL, 0); if (error) goto out; return 0; } else { + if (!ip->i_update_core) + return 0; + /* * We make this non-blocking if the inode is contended, return * EAGAIN to indicate to the caller that they did not succeed. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 08:49:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04EncXt147093 for ; Wed, 4 Jan 2012 08:49:38 -0600 X-ASG-Debug-ID: 1325688574-00a9eb19d41f6db0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id zoeEFUjcr8P6DdHj; Wed, 04 Jan 2012 06:49:35 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiS9m-0004D9-Fc; Wed, 04 Jan 2012 14:49:34 +0000 Message-Id: <20120104144934.435560100@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 04 Jan 2012 09:48:36 -0500 From: Christoph Hellwig To: stable@vger.kernel.org, xfs@oss.sgi.com Cc: Ben Myers Subject: [PATCH 2/2] xfs: log all dirty inodes in xfs_fs_sync_fs References: <20120104144834.869111452@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 2/2] xfs: log all dirty inodes in xfs_fs_sync_fs Content-Disposition: inline; filename=xfs-fix-sync X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325688574 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85012 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean Commit be4f1ac828776bbc7868a68b465cd8eedb733cfd upstream. Since Linux 2.6.36 the writeback code has introduces various measures for live lock prevention during sync(). Unfortunately some of these are actively harmful for the XFS model, where the inode gets marked dirty for metadata from the data I/O handler. The older_than_this checks that are now more strictly enforced since writeback: avoid livelocking WB_SYNC_ALL writeback by only calling into __writeback_inodes_sb and thus only sampling the current cut off time once. But on a slow enough devices the previous asynchronous sync pass might not have fully completed yet, and thus XFS might mark metadata dirty only after that sampling of the cut off time for the blocking pass already happened. I have not myself reproduced this myself on a real system, but by introducing artificial delay into the XFS I/O completion workqueues it can be reproduced easily. Fix this by iterating over all XFS inodes in ->sync_fs and log all that are dirty. This might log inode that only got redirtied after the previous pass, but given how cheap delayed logging of inodes is it isn't a major concern for performance. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Tested-by: Mark Tinguely Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers Index: linux-2.6/fs/xfs/linux-2.6/xfs_sync.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_sync.c 2012-01-04 10:27:56.000000000 +0100 +++ linux-2.6/fs/xfs/linux-2.6/xfs_sync.c 2012-01-04 13:34:25.169919457 +0100 @@ -336,6 +336,32 @@ xfs_sync_fsdata( return xfs_bwrite(mp, bp); } +int +xfs_log_dirty_inode( + struct xfs_inode *ip, + struct xfs_perag *pag, + int flags) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + int error; + + if (!ip->i_update_core) + return 0; + + tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); + error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); + if (error) { + xfs_trans_cancel(tp, 0); + return error; + } + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); + return xfs_trans_commit(tp, 0); +} + /* * When remounting a filesystem read-only or freezing the filesystem, we have * two phases to execute. This first phase is syncing the data before we @@ -365,6 +391,17 @@ xfs_quiesce_data( /* push and block till complete */ xfs_sync_data(mp, SYNC_WAIT); + + /* + * Log all pending size and timestamp updates. The vfs writeback + * code is supposed to do this, but due to its overagressive + * livelock detection it will skip inodes where appending writes + * were written out in the first non-blocking sync phase if their + * completion took long enough that it happened after taking the + * timestamp for the cut-off in the blocking phase. + */ + xfs_inode_ag_iterator(mp, xfs_log_dirty_inode, 0); + xfs_qm_sync(mp, SYNC_WAIT); /* write superblock and hoover up shutdown errors */ Index: linux-2.6/fs/xfs/linux-2.6/xfs_sync.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_sync.h 2012-01-04 10:27:56.000000000 +0100 +++ linux-2.6/fs/xfs/linux-2.6/xfs_sync.h 2012-01-04 13:31:33.866587151 +0100 @@ -42,6 +42,8 @@ void xfs_quiesce_attr(struct xfs_mount * void xfs_flush_inodes(struct xfs_inode *ip); +int xfs_log_dirty_inode(struct xfs_inode *ip, struct xfs_perag *pag, int flags); + int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); From wkendall@sgi.com Wed Jan 4 08:56:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04EubtG147907 for ; Wed, 4 Jan 2012 08:56:37 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id BCD7CAC007; Wed, 4 Jan 2012 06:56:33 -0800 (PST) Received: from [134.15.69.6] (cf-vpn-sw-corp-69-6.corp.sgi.com [134.15.69.6]) by estes.americas.sgi.com (Postfix) with ESMTP id 1B6C070016F9; Wed, 4 Jan 2012 08:56:33 -0600 (CST) Message-ID: <4F0468A0.3090908@sgi.com> Date: Wed, 04 Jan 2012 08:56:32 -0600 From: Bill Kendall User-Agent: Thunderbird 1.5.0.14ubu (X11/20080502) MIME-Version: 1.0 To: Dave Chinner Cc: David Brown , xfs@oss.sgi.com Subject: Re: xfsrestore: incorrect restore if file becomes a dir References: <20111226201856.GA3909@davidb.org> <4F036FF6.2080501@sgi.com> <20120103213147.GS23662@dastard> <4F0384A4.6000505@sgi.com> <20120103231604.GT23662@dastard> In-Reply-To: <20120103231604.GT23662@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Dave Chinner wrote: > On Tue, Jan 03, 2012 at 04:43:48PM -0600, Bill Kendall wrote: >> On 01/03/2012 03:31 PM, Dave Chinner wrote: >>> On Tue, Jan 03, 2012 at 03:15:34PM -0600, Bill Kendall wrote: >>>> On 12/26/2011 02:18 PM, David Brown wrote: >>>>> http://oss.sgi.com/bugzilla/show_bug.cgi?id=915 >>>>> >>>>> I've had this happen again. It appears to be the case if between >>>>> incremental dumps, a file is deleted and a directory is created that >>>>> gets the same inode number. The restore leaves a file in place of the >>>>> directory. If the new directory has any contents, xfsrestore prints a >>>>> warning, and doesn't restore the subdirectory contents. >>>>> >>>>> Given the sparseness of inodes, this doesn't seem to occur all that >>>>> frequently, but I do have a couple of backups that exhibit the >>>>> behavior. If no one has any ideas, I'll start digging through >>>>> xfsrestore to see if I can figure out what is happening. >>>> I haven't looked at the relevant code, but it sounds like the inode >>>> generation number would also have to be the same in order for this >>>> to happen. Two inodes from separate backups are only considered to >>>> be the same file or directory if the inode number and the lower 12 >>>> bits of the inode generation number are the same. >>> Why does dump only use the lower twelve bits? The on-disk generation >>> number is 32 bits and we use all of it (by way of random numbers) to >>> distinguish between different inode generations. That sounds like >>> something that needs to be fixed.... >> I don't know the history there, but it dates back to when the generation >> number was not randomly initialized. So an inode had to be reused 4,096 >> times for a collision to occur. > > That's kind of what I thought. But even so, with the way XFS reuses > inodes (especially for short term temporary files), those 12 bits > can eaily be burnt through in under a second.... > >> With the current scheme (initially >> random, then incremented) there would be cases where a collision >> happens more frequently. I agree, it should be changed. > > Is that difficult to do? It requires a change to the dump format, so most of the work is probably in maintaining backwards compatibility. Bill From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 08:59:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Exp0m148267 for ; Wed, 4 Jan 2012 08:59:51 -0600 X-ASG-Debug-ID: 1325689190-005fe612a91d09b0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 1vGvkBMKwlfebsBF for ; Wed, 04 Jan 2012 06:59:50 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiSJc-0006Ze-Eu; Wed, 04 Jan 2012 14:59:44 +0000 Date: Wed, 4 Jan 2012 09:59:44 -0500 From: Christoph Hellwig To: Masayoshi MIZUMA Cc: Dave Chinner , linux-fsdevel@vger.kernel.org, Christoph Hellwig , linux-ext4@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH] update 068 to reproduce an unfreeze hanging up problem Message-ID: <20120104145944.GA21381@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] update 068 to reproduce an unfreeze hanging up problem References: <20111213094245.4004.61FB500B@jp.fujitsu.com> <20111213063212.GC14273@dastard> <20111214112209.1002.61FB500B@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111214112209.1002.61FB500B@jp.fujitsu.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325689190 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85013 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Dec 14, 2011 at 11:22:10AM +0900, Masayoshi MIZUMA wrote: > > test 068 will catch problems like the one your specific test > > catches, but maybe not every time. Test 068 will catch problems your > > test case won't, though - it's a trade-off between having lots of > > tests that are similar but slightly different (difficult to > > maintain, increases runtime, etc), and having one test that > > exercises the functionality in a simple manner likely to detect > > problems. > > Thank you for your explanation about the policy and I understand it. > I tried to reproduce the problem not dropping the sleep, but the problem was > not reproduced... Therefore, I dropped it and the problem was reproduced. > > However, as you mentioned, the problem is a timing proglem, so the > my reproduction might be just by chance. Dropping sleep may increase > the possibility of the reproduction, but not every time, so the change > is not good. That is same for the arguments of fsstress which I changed. > > OK, I update 068 just to run other filesystem, ext3, ext4 and btrfs which > I confirmed xfs_freeze works on. > (xfs_freeze may work on the other filesystems which have freeze_fs/unfreeze_fs > super_operations but I don't confirm...) > > The patch is below. Given that MIZUMAs patch reproduces a real life issue I think adding his original patch in addition to this change would be a good idea. Dave, do you have a strong opinion against that? From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 09:12:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04FC0Ih149423 for ; Wed, 4 Jan 2012 09:12:00 -0600 X-ASG-Debug-ID: 1325689919-005fe612a91d6370001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Lz2swJVW5JWa6Kcz for ; Wed, 04 Jan 2012 07:11:59 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiSVS-0001Au-D0; Wed, 04 Jan 2012 15:11:58 +0000 Date: Wed, 4 Jan 2012 10:11:58 -0500 From: Christoph Hellwig To: Arkadiusz Mi??kiewicz Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs_lsprojid: show quota project id for specified files Message-ID: <20120104151158.GA4028@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_lsprojid: show quota project id for specified files References: <1323698792-25775-1-git-send-email-arekm@maven.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1323698792-25775-1-git-send-email-arekm@maven.pl> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325689919 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85013 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Mon, Dec 12, 2011 at 03:06:32PM +0100, Arkadiusz Mi??kiewicz wrote: > There is no simple way for extracting quota project id for specified > files, so here is a shell wrapper which makes this easy thing: > > /home/something/aaa: 107919 > /home/something/bbb: 107923 Looks generally good, but is there any reason not to make it available to normal users? The only problem would be that we'd need to run the original script through autoconf to generate one that contains an absolute path to the xfs_io binary. Also can you hack up a trivial man page for it, please? From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 10:39:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Gdqj8157798 for ; Wed, 4 Jan 2012 10:39:53 -0600 X-ASG-Debug-ID: 1325695188-005fe612a9215e10001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 1tbESS7YYIM9YDqV for ; Wed, 04 Jan 2012 08:39:48 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiTsQ-00028G-CV; Wed, 04 Jan 2012 16:39:46 +0000 Date: Wed, 4 Jan 2012 11:39:46 -0500 From: Christoph Hellwig To: Jan Schmidt Cc: xfs@oss.sgi.com, sandeen@sandeen.net, linux-btrfs@vger.kernel.org Subject: Re: [PATCH v2] xfstests: new check 278 to ensure btrfs backref integrity Message-ID: <20120104163946.GA8153@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2] xfstests: new check 278 to ensure btrfs backref integrity References: <1324552138-30584-1-git-send-email-list.btrfs@jan-o-sch.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1324552138-30584-1-git-send-email-list.btrfs@jan-o-sch.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325695188 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85019 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Thu, Dec 22, 2011 at 12:08:58PM +0100, Jan Schmidt wrote: > This is a btrfs specific scratch test checking the backref walker. It > creates a file system with compressed and uncompressed data extents, picks > files randomly and uses filefrag to get their extents. It then asks the > btrfs utility (inspect-internal) to do the backref resolving from fs-logical > address (the one filefrag calls "physical") back to the inode number and > file-logical offset, verifying the result. I was about to apply this, but for some reason it fails for me when running xfstest on xfs: 276 [failed, exit status 1] - output mismatch (see 276.out.bad) --- 276.out 2012-01-04 16:14:36.000000000 +0000 +++ 276.out.bad 2012-01-04 16:32:26.000000000 +0000 @@ -1,4 +1,5 @@ QA output created by 276 -*** test backref walking -*** done +common.rc: Error: $TEST_DEV (/dev/vdb1) is not a MOUNTED btrfs filesystem +Filesystem Type 1K-blocks Used Available Use% Mounted on +/dev/vdb1 xfs 39042944 32928 39010016 1% /mnt/test *** unmount which is a bit confusing From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 10:43:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04GhwPn158215 for ; Wed, 4 Jan 2012 10:43:59 -0600 X-ASG-Debug-ID: 1325695437-00a9eb19d62478e0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id oSL0jyzf2byMo4CN for ; Wed, 04 Jan 2012 08:43:58 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiTwS-0003NH-E2; Wed, 04 Jan 2012 16:43:56 +0000 Date: Wed, 4 Jan 2012 11:43:56 -0500 From: Christoph Hellwig To: Jeff Liu Cc: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: Another SEEK_DATA/SEEK_HOLE tester Message-ID: <20120104164356.GA12924@infradead.org> X-ASG-Orig-Subj: Re: Another SEEK_DATA/SEEK_HOLE tester References: <4EFB1FEC.1050800@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4EFB1FEC.1050800@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325695437 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85020 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Dec 28, 2011 at 09:55:56PM +0800, Jeff Liu wrote: > A test tool to verify larger files with more extents(it can be used, but still need improvements). Can you turn it into something that gets run automatically? From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 10:53:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04GrnM0159262 for ; Wed, 4 Jan 2012 10:53:49 -0600 X-ASG-Debug-ID: 1325696028-005fe612a721e5a0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id tW1urTNteapk2vJE for ; Wed, 04 Jan 2012 08:53:48 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiU5t-0005Uo-Uf; Wed, 04 Jan 2012 16:53:41 +0000 Date: Wed, 4 Jan 2012 11:53:41 -0500 From: Christoph Hellwig To: Peng Haitao Cc: Dave Chinner , hch@infradead.org, xfs@oss.sgi.com Subject: Re: [PATCH] xfstests/071 FAIL with pwrite64: Invalid argument Message-ID: <20120104165341.GA21075@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests/071 FAIL with pwrite64: Invalid argument References: <4EDD8F16.4050402@cn.fujitsu.com> <20111206110533.GD28326@dastard> <4EDF2133.7030702@cn.fujitsu.com> <20111207100748.GB14273@dastard> <4EE02022.5000403@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4EE02022.5000403@cn.fujitsu.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325696028 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85021 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Thu, Dec 08, 2011 at 10:25:38AM +0800, Peng Haitao wrote: > > Dave Chinner said the following on 2011-12-7 18:07: > > > > I think you misunderstand what I was saying - I was not suggesting > > removing the error messages at all, just filtering them with sed to > > ensure the output is always constant for the error different > > messages different platforms dump out. > > > > Thanks for your reply. > Sorry for misunderstanding your comments. > > I make a new patch, please review, thanks. This still fails in my 32-bit test VM: --- 071.out 2009-05-10 16:48:46.000000000 +0000 +++ 071.out.bad 2012-01-04 16:47:05.000000000 +0000 @@ -40,14 +40,14 @@ Writing 512 bytes, offset is +0 (direct=false) -pwrite64: File too large +wrote 512/512 bytes at offset Reading 512 bytes (direct=false) -read 0/512 bytes at offset +read 512/512 bytes at offset and so on From sandeen@sandeen.net Wed Jan 4 11:01:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_55 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04H1qLm159613 for ; Wed, 4 Jan 2012 11:01:52 -0600 X-ASG-Debug-ID: 1325696511-0222017aa32c8c50001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ufrZSjQhKaF6Uhgu for ; Wed, 04 Jan 2012 09:01:51 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id D36DE48BC6B1; Wed, 4 Jan 2012 11:01:50 -0600 (CST) Message-ID: <4F0485FE.8000405@sandeen.net> Date: Wed, 04 Jan 2012 11:01:50 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Christoph Hellwig CC: Jan Schmidt , xfs@oss.sgi.com, linux-btrfs@vger.kernel.org Subject: Re: [PATCH v2] xfstests: new check 278 to ensure btrfs backref integrity References: <1324552138-30584-1-git-send-email-list.btrfs@jan-o-sch.net> <20120104163946.GA8153@infradead.org> X-ASG-Orig-Subj: Re: [PATCH v2] xfstests: new check 278 to ensure btrfs backref integrity In-Reply-To: <20120104163946.GA8153@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1325696511 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85021 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 1/4/12 10:39 AM, Christoph Hellwig wrote: > On Thu, Dec 22, 2011 at 12:08:58PM +0100, Jan Schmidt wrote: >> This is a btrfs specific scratch test checking the backref walker. It >> creates a file system with compressed and uncompressed data extents, picks >> files randomly and uses filefrag to get their extents. It then asks the >> btrfs utility (inspect-internal) to do the backref resolving from fs-logical >> address (the one filefrag calls "physical") back to the inode number and >> file-logical offset, verifying the result. > > I was about to apply this, but for some reason it fails for me when > running xfstest on xfs: > > 276 [failed, exit status 1] - output mismatch (see 276.out.bad) > --- 276.out 2012-01-04 16:14:36.000000000 +0000 > +++ 276.out.bad 2012-01-04 16:32:26.000000000 +0000 > @@ -1,4 +1,5 @@ > QA output created by 276 > -*** test backref walking > -*** done > +common.rc: Error: $TEST_DEV (/dev/vdb1) is not a MOUNTED btrfs > filesystem > +Filesystem Type 1K-blocks Used Available Use% Mounted on > +/dev/vdb1 xfs 39042944 32928 39010016 1% /mnt/test > *** unmount > > which is a bit confusing > 276 got merged on Dec 28 before my requests for fixup, I guess? And it explicitly sets FSTYP=btrfs which is why it fails. the 278 patch v2 in this thread works ok for me. so munging the 278 patch here into the existing 276 should be the right approach. -Eric From mail@jan-o-sch.net Wed Jan 4 11:04:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_55 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04H4uts159707 for ; Wed, 4 Jan 2012 11:04:56 -0600 X-ASG-Debug-ID: 1325696692-00a9eb19d4255950001-NocioJ Received: from mail.in8.de (brockman.in8.de [85.214.220.56]) by cuda.sgi.com with ESMTP id DbeYkEuDU8B8DCKv for ; Wed, 04 Jan 2012 09:04:53 -0800 (PST) X-Barracuda-Envelope-From: mail@jan-o-sch.net X-Barracuda-Apparent-Source-IP: 85.214.220.56 Received: from [172.24.1.213] (yian-ho01.nir.cronon.net [192.166.201.94]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.in8.de (Postfix) with ESMTPSA id CBC746AC250; Wed, 4 Jan 2012 18:04:51 +0100 (CET) Message-ID: <4F0486B3.8010301@jan-o-sch.net> Date: Wed, 04 Jan 2012 18:04:51 +0100 From: Jan Schmidt User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15 MIME-Version: 1.0 To: Eric Sandeen CC: Christoph Hellwig , Jan Schmidt , xfs@oss.sgi.com, linux-btrfs@vger.kernel.org Subject: Re: [PATCH v2] xfstests: new check 278 to ensure btrfs backref integrity References: <1324552138-30584-1-git-send-email-list.btrfs@jan-o-sch.net> <20120104163946.GA8153@infradead.org> <4F0485FE.8000405@sandeen.net> X-ASG-Orig-Subj: Re: [PATCH v2] xfstests: new check 278 to ensure btrfs backref integrity In-Reply-To: <4F0485FE.8000405@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: brockman.in8.de[85.214.220.56] X-Barracuda-Start-Time: 1325696693 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85020 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 04.01.2012 18:01, Eric Sandeen wrote: > 276 got merged on Dec 28 before my requests for fixup, I guess? And it > explicitly sets FSTYP=btrfs which is why it fails. > > the 278 patch v2 in this thread works ok for me. > > so munging the 278 patch here into the existing 276 should be the > right approach. Yeah we figured that out on irc some minutes ago :-) I'm currently building v2 as an incremental patch to 276 (without rename to 278) and send it as [PATCH] xfstests: fixup check 276 soon. -Jan From elder@dreamhost.com Wed Jan 4 11:18:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04HIFlf160109 for ; Wed, 4 Jan 2012 11:18:16 -0600 X-ASG-Debug-ID: 1325697494-005fe612a82297b0001-NocioJ Received: from mail.hq.newdream.net (mail.hq.newdream.net [66.33.206.127]) by cuda.sgi.com with ESMTP id 7nRyhQ2tC3imKTal for ; Wed, 04 Jan 2012 09:18:14 -0800 (PST) X-Barracuda-Envelope-From: elder@dreamhost.com X-Barracuda-Apparent-Source-IP: 66.33.206.127 Received: from mail.hq.newdream.net (localhost [127.0.0.1]) by mail.hq.newdream.net (Postfix) with ESMTP id 7EC6AC064; Wed, 4 Jan 2012 09:29:43 -0800 (PST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=dreamhost.com; h=message-id :subject:from:reply-to:to:cc:date:in-reply-to:references :content-type:content-transfer-encoding:mime-version; q=dns; s= dreamhost.com; b=RJBsKxo9ciPaYy2UW3BcDo9Sm/gWZx8j0jc8QD37KaCN1W4 v++EzBF/HVgt4HH2C/B4Jafzo7RZpNUiID4xwuH2djg1ABlKIB/+xtfnmqdYZHks C4xmzgVIGa0PHNlTDrnoy4WoZejfjj7nnnR0cOiRKwd6ke3B7h74qVX4S2bU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=dreamhost.com; h= message-id:subject:from:reply-to:to:cc:date:in-reply-to :references:content-type:content-transfer-encoding:mime-version; s=dreamhost.com; bh=/m+Ummya5X7Uk3VcPteuBSWoPJ8=; b=TymkClSv0HF 1AtzYqTHLnyn+8FlM6Keu82R2D8atJtgigoqvIAz3/gtltVrL2WDSkMV5eLiKs2i tPfoAJqldYg+TENEjOju8tEjiW26HJ4b1iA1ZG6sOCgjYeNPf6za+mol/rCFCBTJ 0r+BwDgWPEN2TbegGOt3A+8JMef8E9mg= Received: from [172.22.22.65] (c-71-193-71-178.hsd1.mn.comcast.net [71.193.71.178]) by mail.hq.newdream.net (Postfix) with ESMTPSA id 0285BC062; Wed, 4 Jan 2012 09:29:42 -0800 (PST) Message-ID: <1325697491.3346.18.camel@doink> Subject: Re: [LSF/MM TOPIC] [ATTEND] xfstests: what do we need to do to make it better? From: Alex Elder X-ASG-Orig-Subj: Re: [LSF/MM TOPIC] [ATTEND] xfstests: what do we need to do to make it better? Reply-To: elder@dreamhost.com To: Dave Chinner Cc: lsf-pc@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Date: Wed, 04 Jan 2012 11:18:11 -0600 In-Reply-To: <20120103234455.GU23662@dastard> References: <20120103234455.GU23662@dastard> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.1- Content-Transfer-Encoding: 7bit Mime-Version: 1.0 X-Barracuda-Connect: mail.hq.newdream.net[66.33.206.127] X-Barracuda-Start-Time: 1325697494 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85021 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 X-Virus-Status: Clean On Wed, 2012-01-04 at 10:44 +1100, Dave Chinner wrote: > Given that more people are using xfstests and developing tests, we > need to consider how to make it friendlier to hack on. The current > structure of the tree is difficult to work with, the way tests are > organised and numbered make it difficult to co-ordinate new tests > and results in patch conflicts, etc. Coordination of numbers is not a big deal, the test names/numbers can be easily fixed up at commit time. I also thought that the numbers--though meaningless on their own--also avoided having to decide where a particular test belongs. I.e., a test that exercises several categories of things (maybe preallocation, quota, and ENOSPC) won't be hidden in any sort of "enospc" test directory. I do think the growing number of tests is making it a bit unwieldy though, so I think some sort of reorganization is a good plan. > We also see problems arising from people not really understanding how > the xfstests harness is designed and how it really is supposed to > work, so an overview of the underlying principles of operation would > probably be helpful to a lot of people. It will also save > review and rework time if we can avoid having people make the same > mistakes the first time they submit tests.... This is very important. And the gist of it ought to be captured somewhere if it is not already. > I'd also like to discuss some potential infrastructure changes to > make it easier to add new tests without conflicts with others > developing new tests. Some of the ideas Christoph and I have > previously tossed around include: > > - break tests up into groups in their own subdirectories. > e.g. generic tests, xfs/ext4/btrfs specific tests, stress > tests, performance tests, large FS tests, etc > - change the way we define groups of tests so we don't have > a single registry of tests and their groups > - allow different naming of tests, such as desciptive text > names rather than just plain numbers > - allow duplicate test names in different groups Despite what I said above, I don't disagree with any of this. Perhaps the tests can be buried in one or more subdirectories, but each FSTYP defines its own groups file to drive testing. > I'm sure that other users of xfstests will have some ideas on how to > improve it for the way they run it, so I'd like to gather and > incorporate these ideas into any structural change we make to > xfstests. Should be a good discussion. It might be useful to have a proposal or two to work with as a starting point, or maybe an outline of the types of changes (naming, directory structure, etc.), to help keep things focused. -Alex > Cheers, > > Dave. From list.btrfs@jan-o-sch.net Wed Jan 4 11:54:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_62 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04HsnNH161288 for ; Wed, 4 Jan 2012 11:54:49 -0600 X-ASG-Debug-ID: 1325699686-005fe612a923ec40001-NocioJ Received: from mort.rzone.de (mort.rzone.de [81.169.144.234]) by cuda.sgi.com with ESMTP id LUZ8zUm9lTWkU0bd for ; Wed, 04 Jan 2012 09:54:47 -0800 (PST) X-Barracuda-Envelope-From: list.btrfs@jan-o-sch.net X-Barracuda-Apparent-Source-IP: 81.169.144.234 Received: from gargravarr.store (gargravarr.store [192.168.42.236]) by mort.rzone.de (Postfix) with ESMTP id 361D5AA2; Wed, 4 Jan 2012 18:54:46 +0100 (MET) Received: by gargravarr.store (Postfix, from userid 32566) id 2D36B44BAA; Wed, 4 Jan 2012 18:54:46 +0100 (CET) From: Jan Schmidt To: xfs@oss.sgi.com, hch@infradead.org Cc: sandeen@sandeen.net, linux-btrfs@vger.kernel.org Subject: [PATCH] xfstests: fixup check 276 Date: Wed, 4 Jan 2012 18:54:46 +0100 X-ASG-Orig-Subj: [PATCH] xfstests: fixup check 276 Message-Id: <1325699686-21851-1-git-send-email-list.btrfs@jan-o-sch.net> X-Mailer: git-send-email 1.7.3.4 X-Barracuda-Connect: mort.rzone.de[81.169.144.234] X-Barracuda-Start-Time: 1325699687 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85025 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean This commit fixes bd8ee45c. Changes: - added a _require_btrfs helper function - check for filefrag with _require_command - always use _fail in case of errors - added some comments - removed $fresh code - don't set FSTYP Signed-off-by: Jan Schmidt --- 276 | 119 +++++++++++++++++++++++++++++++++++++------------------------ common.rc | 12 ++++++ 2 files changed, 84 insertions(+), 47 deletions(-) diff --git a/276 b/276 index f22d089..082f943 100755 --- a/276 +++ b/276 @@ -1,5 +1,29 @@ #! /bin/bash - +# FSQA Test No. 276 +# +# Run fsstress to create a reasonably strange file system, make a +# snapshot and run more fsstress. Then select some files from that fs, +# run filefrag to get the extent mapping and follow the backrefs. +# We check to end up back at the original file with the correct offset. +# +#----------------------------------------------------------------------- +# Copyright (C) 2011 STRATO. All rights reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# # creator owner=list.btrfs@jan-o-sch.net @@ -7,18 +31,13 @@ seq=`basename $0` echo "QA output created by $seq" here=`pwd` -# 1=production, 0=avoid touching the scratch dev (no mount/umount, no writes) -fresh=1 tmp=/tmp/$$ status=1 -FSTYP=btrfs _cleanup() { - if [ $fresh -ne 0 ]; then - echo "*** unmount" - umount $SCRATCH_MNT 2>/dev/null - fi + echo "*** unmount" + umount $SCRATCH_MNT 2>/dev/null rm -f $tmp.* } trap "_cleanup; exit \$status" 0 1 2 3 15 @@ -28,21 +47,14 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 . ./common.filter # real QA test starts here +_need_to_be_root _supported_fs btrfs _supported_os Linux - -if [ $fresh -ne 0 ]; then - _require_scratch -fi +_require_scratch _require_nobigloopfs - -[ -n "$BTRFS_UTIL_PROG" ] || _notrun "btrfs executable not found" -$BTRFS_UTIL_PROG inspect-internal --help >/dev/null 2>&1 -[ $? -eq 0 ] || _notrun "btrfs executable too old" -which filefrag >/dev/null 2>&1 -[ $? -eq 0 ] || _notrun "filefrag missing" - +_require_btrfs inspect-internal +_require_command "/usr/sbin/filefrag" rm -f $seq.full @@ -52,6 +64,10 @@ FILEFRAG_FILTER='if (/, blocksize (\d+)/) {$blocksize = $1; next} ($ext, '\ '/(?:^|,)inline(?:,|$)/ and next; print $physical * $blocksize, "#", '\ '$length * $blocksize, "#", $logical * $blocksize, " "' +# this makes filefrag output script readable by using a perl helper. +# output is one extent per line, with three numbers separated by '#' +# the numbers are: physical, length, logical (all in bytes) +# sample output: "1234#10#5678" -> physical 1234, length 10, logical 5678 _filter_extents() { tee -a $seq.full | $PERL_PROG -ne "$FILEFRAG_FILTER" @@ -70,6 +86,9 @@ _check_file_extents() return 0 } +# use a logical address and walk the backrefs back to the inode. +# compare to the expected result. +# returns 0 on success, 1 on error (with output made) _btrfs_inspect_addr() { mp=$1 @@ -101,6 +120,9 @@ _btrfs_inspect_addr() return 1 } +# use an inode number and walk the backrefs back to the file name. +# compare to the expected result. +# returns 0 on success, 1 on error (with output made) _btrfs_inspect_inum() { file=$1 @@ -134,14 +156,13 @@ _btrfs_inspect_check() echo "# $cmd" >> $seq.full inum=`$cmd` echo "$inum" >> $seq.full - _btrfs_inspect_addr "$SCRATCH_MNT/$snap_name" $physical $logical $inum\ - $file + _btrfs_inspect_addr $SCRATCH_MNT $physical $logical $inum $file ret=$? if [ $ret -eq 0 ]; then _btrfs_inspect_inum $file $inum $snap_name ret=$? fi - return $? + return $ret } run_check() @@ -157,30 +178,34 @@ workout() procs=$3 snap_name=$4 - if [ $fresh -ne 0 ]; then - umount $SCRATCH_DEV >/dev/null 2>&1 - echo "*** mkfs -dsize=$fsz" >>$seq.full - echo "" >>$seq.full - _scratch_mkfs_sized $fsz >>$seq.full 2>&1 \ - || _fail "size=$fsz mkfs failed" - _scratch_mount >>$seq.full 2>&1 \ - || _fail "mount failed" - # -w ensures that the only ops are ones which cause write I/O - run_check $FSSTRESS_PROG -d $SCRATCH_MNT -w -p $procs -n 1000 \ - $FSSTRESS_AVOID - - run_check $BTRFS_UTIL_PROG subvol snap $SCRATCH_MNT \ - $SCRATCH_MNT/$snap_name - - run_check umount $SCRATCH_DEV >/dev/null 2>&1 - run_check _scratch_mount "-o compress=lzo" - - # -w ensures that the only ops are ones which cause write I/O - run_check $FSSTRESS_PROG -d $SCRATCH_MNT -w -p $procs -n 2000 \ - $FSSTRESS_AVOID - else - echo "*** skipping mkfs part" >>$seq.full - fi + umount $SCRATCH_DEV >/dev/null 2>&1 + echo "*** mkfs -dsize=$fsz" >>$seq.full + echo "" >>$seq.full + _scratch_mkfs_sized $fsz >>$seq.full 2>&1 \ + || _fail "size=$fsz mkfs failed" + run_check _scratch_mount + # -w ensures that the only ops are ones which cause write I/O + run_check $FSSTRESS_PROG -d $SCRATCH_MNT -w -p $procs -n 1000 \ + $FSSTRESS_AVOID + + run_check $BTRFS_UTIL_PROG subvol snap $SCRATCH_MNT \ + $SCRATCH_MNT/$snap_name + + run_check umount $SCRATCH_DEV >/dev/null 2>&1 + run_check _scratch_mount "-o compress=lzo" + + # make some noise but ensure we're not touching existing data + # extents. + run_check $FSSTRESS_PROG -d $SCRATCH_MNT -p $procs -n 2000 \ + -z -f chown=3 -f link=1 -f mkdir=2 -f mknod=2 \ + -f rename=2 -f setxattr=1 -f symlink=2 + clean_dir="$SCRATCH_MNT/next" + mkdir $clean_dir + # now make more files to get a higher tree + run_check $FSSTRESS_PROG -d $clean_dir -w -p $procs -n 2000 \ + $FSSTRESS_AVOID + run_check umount $SCRATCH_DEV >/dev/null 2>&1 + run_check _scratch_mount "-o atime" cnt=0 errcnt=0 @@ -212,7 +237,7 @@ workout() fi done if [ $errcnt -gt 0 ]; then - echo "test failed: $errcnt error(s)" + _fail "test failed: $errcnt error(s)" fi } diff --git a/common.rc b/common.rc index 978ddbf..ed3613e 100644 --- a/common.rc +++ b/common.rc @@ -1692,6 +1692,18 @@ _require_deletable_scratch_dev_pool() done } +# We check for btrfs and (optionally) features of the btrfs command +_require_btrfs() +{ + cmd=$1 + _require_command $BTRFS_UTIL_PROG btrfs + if [ -z "$1" ]; then + return 1; + fi + $BTRFS_UTIL_PROG $cmd --help >/dev/null 2>&1 + [ $? -eq 0 ] || _notrun "$BTRFS_UTIL_PROG too old (must support $cmd)" +} + # arg 1 is dev to remove and is output of the below eg. # ls -l /sys/class/block/sdd | rev | cut -d "/" -f 3 | rev _devmgt_remove() -- 1.7.2.2 From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 12:42:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04IgLNN163511 for ; Wed, 4 Jan 2012 12:42:22 -0600 X-ASG-Debug-ID: 1325702540-005fe612a8246b30001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id DpBWSEOUD6L4FibC for ; Wed, 04 Jan 2012 10:42:20 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiVmw-00027N-23; Wed, 04 Jan 2012 18:42:14 +0000 Date: Wed, 4 Jan 2012 13:42:14 -0500 From: Christoph Hellwig To: Masayoshi MIZUMA Cc: Dave Chinner , linux-fsdevel@vger.kernel.org, Christoph Hellwig , linux-ext4@vger.kernel.org, xfs@oss.sgi.com Subject: Re: 068: run on more filesystems Message-ID: <20120104184213.GA8131@infradead.org> X-ASG-Orig-Subj: Re: 068: run on more filesystems References: <20111213094245.4004.61FB500B@jp.fujitsu.com> <20111213063212.GC14273@dastard> <20111214112209.1002.61FB500B@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111214112209.1002.61FB500B@jp.fujitsu.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325702540 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85027 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean Thanks, applied. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 12:42:27 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04IgQvJ163527 for ; Wed, 4 Jan 2012 12:42:27 -0600 X-ASG-Debug-ID: 1325702545-0222017aa32ecd80001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 0TH2jhnOKKzsvlJO for ; Wed, 04 Jan 2012 10:42:25 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiVn6-00027l-2b; Wed, 04 Jan 2012 18:42:24 +0000 Date: Wed, 4 Jan 2012 13:42:24 -0500 From: Christoph Hellwig To: Miao Xie Cc: Christoph Hellwig , Linux Btrfs , xfs@oss.sgi.com Subject: Re: use btrfsck to check btrfs filesystems Message-ID: <20120104184224.GB8131@infradead.org> X-ASG-Orig-Subj: Re: use btrfsck to check btrfs filesystems References: <4EE851B8.8010505@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4EE851B8.8010505@cn.fujitsu.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325702545 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85027 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Dec 14, 2011 at 03:35:20PM +0800, Miao Xie wrote: > We failed to get fsck program to check the btrfs file system, it is > because btrfs uses its independent check tool which is named btrfsck > to check the file system, so the common checker -- fsck -- could not > find it, and reported there is no checker. > > This patch fix it by using btrfsck directly. > > Signed-off-by: Miao Xie Thanks, applied. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 12:42:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04IgZAj163546 for ; Wed, 4 Jan 2012 12:42:35 -0600 X-ASG-Debug-ID: 1325702554-0222017aa62ecdb0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id soPGay5AfNqayy8k for ; Wed, 04 Jan 2012 10:42:34 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiVnF-00029Q-LK; Wed, 04 Jan 2012 18:42:33 +0000 Date: Wed, 4 Jan 2012 13:42:33 -0500 From: Christoph Hellwig To: Li Zefan Cc: Christoph Hellwig , "linux-btrfs@vger.kernel.org" , xfs@oss.sgi.com Subject: Re: 277: new test to verify on disk ctime update for chattr Message-ID: <20120104184233.GC8131@infradead.org> X-ASG-Orig-Subj: Re: 277: new test to verify on disk ctime update for chattr References: <4EF2AA17.40400@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4EF2AA17.40400@cn.fujitsu.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325702554 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85027 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Thu, Dec 22, 2011 at 11:55:03AM +0800, Li Zefan wrote: > We had a bug in btrfs which can be triggered by this test. Thanks, applied. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 12:42:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Igih5163563 for ; Wed, 4 Jan 2012 12:42:44 -0600 X-ASG-Debug-ID: 1325702563-0222017aa52ecde0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id jcSxgpKBaJPXSNbZ for ; Wed, 04 Jan 2012 10:42:43 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiVnO-0002AA-Ua; Wed, 04 Jan 2012 18:42:42 +0000 Date: Wed, 4 Jan 2012 13:42:42 -0500 From: Christoph Hellwig To: Jan Schmidt Cc: xfs@oss.sgi.com, hch@infradead.org, sandeen@sandeen.net, linux-btrfs@vger.kernel.org Subject: Re: 276: fix up various issues Message-ID: <20120104184242.GD8131@infradead.org> X-ASG-Orig-Subj: Re: 276: fix up various issues References: <1325699686-21851-1-git-send-email-list.btrfs@jan-o-sch.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1325699686-21851-1-git-send-email-list.btrfs@jan-o-sch.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325702563 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85027 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Jan 04, 2012 at 06:54:46PM +0100, Jan Schmidt wrote: > This commit fixes bd8ee45c. Changes: > - added a _require_btrfs helper function > - check for filefrag with _require_command > - always use _fail in case of errors > - added some comments > - removed $fresh code > - don't set FSTYP > > Signed-off-by: Jan Schmidt Thanks, applied. From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 12:43:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04IhkBA163616 for ; Wed, 4 Jan 2012 12:43:47 -0600 X-ASG-Debug-ID: 1325702625-00a9eb19d3275240001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id q05aY41tEuhOuRSy for ; Wed, 04 Jan 2012 10:43:45 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiVoO-0002BI-OO; Wed, 04 Jan 2012 18:43:44 +0000 Date: Wed, 4 Jan 2012 13:43:44 -0500 From: Christoph Hellwig To: cmaiolino@redhat.com Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 276: Ensure lost+found is not created with wrong link count (V2) Message-ID: <20120104184344.GA8364@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests 276: Ensure lost+found is not created with wrong link count (V2) References: <1323887614-21290-1-git-send-email-cmaiolino@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1323887614-21290-1-git-send-email-cmaiolino@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325702625 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85028 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean On Wed, Dec 14, 2011 at 04:33:34PM -0200, cmaiolino@redhat.com wrote: > From: Carlos Maiolino > > xfs_repair was leaving lost+found directory with a wrong link count when a > cleaned inode was re-used to create lost+found. This test case confirm that, > after xfs_repair is executed, the lost+found inode is left in a consistent > state. This one is missing the 276.out file. In the meantime the repository also has testst 277 and 278 - can you resend with the output file included against the current xfstests-dev repository? From sandeen@redhat.com Wed Jan 4 13:22:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_56 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04JMHRR164899 for ; Wed, 4 Jan 2012 13:22:17 -0600 X-ASG-Debug-ID: 1325704935-0222017aa32f0a70001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id PUelCNgLxdnGOEve for ; Wed, 04 Jan 2012 11:22:16 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q04JMFl2010412 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 4 Jan 2012 14:22:15 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q04JMExB020272 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 4 Jan 2012 14:22:15 -0500 Message-ID: <4F04A6E6.1090304@redhat.com> Date: Wed, 04 Jan 2012 13:22:14 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: xfs-oss CC: ext4 development , Eryu Guan Subject: [PATCH] xfstests: make 275 pass on ext4 X-Enigmail-Version: 1.3.4 X-ASG-Orig-Subj: [PATCH] xfstests: make 275 pass on ext4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1325704935 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85031 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean 275 was failing on ext4 because it doesn't reliably write until ENOSPC due to delalloc and crummy ENOSPC handling. So the attempts to fill the fs would fail, and this test, which was expecting to have exactly 4k free for the last write attempt, failed as well, because it was able to write more than the expected 4k. Change a few things: * Tidy up test description & comments * Keep files on scratch mount for failure analysis * Add a couple syncs here and there to push out delalloc * Make a last-ditch effort to fill fs via direct IO * Provide a little more detail on failure With this change I can pass the test on ext4. Fixing ext4's ENOSPC handling is probably another bug, but by working really hard to fill an ext4 fs, this test can achieve its specific goal. Signed-off-by: Eric Sandeen --- diff --git a/275 b/275 index 214262e..3ebeabe 100755 --- a/275 +++ b/275 @@ -1,8 +1,8 @@ #! /bin/bash # FS QA Test No. 275 # -# The posix write test. when write size is larger than disk free size, -# should write as more as possible +# The posix write test. When write size is larger than disk free size, +# should write as much as possible until ENOSPC. # #----------------------------------------------------------------------- # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. @@ -36,7 +36,6 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -f $SCRATCH_MNT/* $tmp.* _scratch_unmount } @@ -49,7 +48,7 @@ _supported_os IRIX Linux _require_scratch echo "------------------------------" -echo "write lack test" +echo "write until ENOSPC test" echo "------------------------------" rm -f $seq.full @@ -69,10 +68,15 @@ then exit fi +# Attempt to completely fill fs dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 +sync dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 sync +# Last effort, use O_DIRECT to defeat delalloc +dd if=/dev/zero of=tmp4 bs=4K oflag=direct >/dev/null 2>&1 +# Should leave exactly 4k free rm -f tmp1 sync @@ -80,7 +84,7 @@ dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 _filesize=`du tmp1 | awk '{print $1}'` if [ $_filesize -ne 4 ] then - echo "write file err" + echo "write file err: wrote $_filesize kbytes not 4 kbytes" status=1 exit fi diff --git a/275.out b/275.out index 30af43c..69b9d52 100644 --- a/275.out +++ b/275.out @@ -1,5 +1,5 @@ QA output created by 275 ------------------------------ -write lack test +write until ENOSPC test ------------------------------ done From sandeen@redhat.com Wed Jan 4 13:37:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_56 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04JbmWs165479 for ; Wed, 4 Jan 2012 13:37:48 -0600 X-ASG-Debug-ID: 1325705865-005fe612a824b580001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id W03qBF7ZcxaMijEQ for ; Wed, 04 Jan 2012 11:37:46 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 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 q04Jbj15001606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 4 Jan 2012 14:37:45 -0500 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 q04JbhEJ011731 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 4 Jan 2012 14:37:44 -0500 Message-ID: <4F04AA87.5090706@redhat.com> Date: Wed, 04 Jan 2012 13:37:43 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: xfs-oss CC: ext4 development , Eryu Guan Subject: Re: [PATCH] xfstests: make 275 pass on ext4 References: <4F04A6E6.1090304@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: make 275 pass on ext4 In-Reply-To: <4F04A6E6.1090304@redhat.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 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: 1325705865 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85031 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 1/4/12 1:22 PM, Eric Sandeen wrote: > 275 was failing on ext4 because it doesn't reliably write > until ENOSPC due to delalloc and crummy ENOSPC handling. > So the attempts to fill the fs would fail, and this test, > which was expecting to have exactly 4k free for the last write > attempt, failed as well, because it was able to write more than > the expected 4k. Grr self-NAK this makes it fail on xfs (?!) -Eric > Change a few things: > > * Tidy up test description & comments > * Keep files on scratch mount for failure analysis > * Add a couple syncs here and there to push out delalloc > * Make a last-ditch effort to fill fs via direct IO > * Provide a little more detail on failure > > With this change I can pass the test on ext4. > > Fixing ext4's ENOSPC handling is probably another bug, but by > working really hard to fill an ext4 fs, this test can achieve > its specific goal. > > Signed-off-by: Eric Sandeen > --- > > diff --git a/275 b/275 > index 214262e..3ebeabe 100755 > --- a/275 > +++ b/275 > @@ -1,8 +1,8 @@ > #! /bin/bash > # FS QA Test No. 275 > # > -# The posix write test. when write size is larger than disk free size, > -# should write as more as possible > +# The posix write test. When write size is larger than disk free size, > +# should write as much as possible until ENOSPC. > # > #----------------------------------------------------------------------- > # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. > @@ -36,7 +36,6 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > _cleanup() > { > cd / > - rm -f $SCRATCH_MNT/* $tmp.* > _scratch_unmount > } > > @@ -49,7 +48,7 @@ _supported_os IRIX Linux > _require_scratch > > echo "------------------------------" > -echo "write lack test" > +echo "write until ENOSPC test" > echo "------------------------------" > > rm -f $seq.full > @@ -69,10 +68,15 @@ then > exit > fi > > +# Attempt to completely fill fs > dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 > +sync > dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 > sync > +# Last effort, use O_DIRECT to defeat delalloc > +dd if=/dev/zero of=tmp4 bs=4K oflag=direct >/dev/null 2>&1 > > +# Should leave exactly 4k free > rm -f tmp1 > sync > > @@ -80,7 +84,7 @@ dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 > _filesize=`du tmp1 | awk '{print $1}'` > if [ $_filesize -ne 4 ] > then > - echo "write file err" > + echo "write file err: wrote $_filesize kbytes not 4 kbytes" > status=1 > exit > fi > diff --git a/275.out b/275.out > index 30af43c..69b9d52 100644 > --- a/275.out > +++ b/275.out > @@ -1,5 +1,5 @@ > QA output created by 275 > ------------------------------ > -write lack test > +write until ENOSPC test > ------------------------------ > done > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From bpm@sgi.com Wed Jan 4 14:32:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04KWZoM167075 for ; Wed, 4 Jan 2012 14:32:36 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 77BB6AC003; Wed, 4 Jan 2012 12:32:32 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 3F767426DA7; Wed, 4 Jan 2012 14:32:32 -0600 (CST) Date: Wed, 4 Jan 2012 14:32:32 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 02/11] xfs: cleanup xfs_iomap_eof_align_last_fsb Message-ID: <20120104203232.GB6390@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200130.970786897@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200130.970786897@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Dec 18, 2011 at 03:00:05PM -0500, Christoph Hellwig wrote: > Replace the nasty if, else if, elseif condition with more natural C flow > that expressed the logic we want here better. > > Signed-off-by: Christoph Hellwig > Reviewed-by: Dave Chinner > > --- > fs/xfs/xfs_iomap.c | 36 ++++++++++++++++++------------------ > 1 file changed, 18 insertions(+), 18 deletions(-) > > Index: xfs/fs/xfs/xfs_iomap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iomap.c 2011-11-17 12:07:52.580802800 +0100 > +++ xfs/fs/xfs/xfs_iomap.c 2011-11-30 10:57:35.649224495 +0100 > @@ -57,26 +57,26 @@ xfs_iomap_eof_align_last_fsb( > xfs_fileoff_t *last_fsb) > { > xfs_fileoff_t new_last_fsb = 0; > - xfs_extlen_t align; > + xfs_extlen_t align = 0; > int eof, error; > > - if (XFS_IS_REALTIME_INODE(ip)) > - ; > - /* > - * If mounted with the "-o swalloc" option, roundup the allocation > - * request to a stripe width boundary if the file size is >= > - * stripe width and we are allocating past the allocation eof. > - */ > - else if (mp->m_swidth && (mp->m_flags & XFS_MOUNT_SWALLOC) && > - (ip->i_size >= XFS_FSB_TO_B(mp, mp->m_swidth))) > - new_last_fsb = roundup_64(*last_fsb, mp->m_swidth); > - /* > - * Roundup the allocation request to a stripe unit (m_dalign) boundary > - * if the file size is >= stripe unit size, and we are allocating past > - * the allocation eof. > - */ > - else if (mp->m_dalign && (ip->i_size >= XFS_FSB_TO_B(mp, mp->m_dalign))) > - new_last_fsb = roundup_64(*last_fsb, mp->m_dalign); > + if (!XFS_IS_REALTIME_INODE(ip)) { > + /* > + * Round up the allocation request to a stripe unit > + * (m_dalign) boundary if the file size is >= stripe unit > + * size, and we are allocating past the allocation eof. > + * > + * If mounted with the "-o swalloc" option the alignment is > + * increased from the strip unit size to the stripe width. > + */ > + if (mp->m_swidth && (mp->m_flags & XFS_MOUNT_SWALLOC)) > + align = mp->m_swidth; > + else if (mp->m_dalign) > + align = mp->m_dalign; > + > + if (align && ip->i_size >= XFS_FSB_TO_B(mp, align)) > + new_last_fsb = roundup_64(*last_fsb, align); > + } The behavior looks equivalent and this is much easier on the eyes. Looks good. Reviewed-by: Ben Myers From david@fromorbit.com Wed Jan 4 14:36:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04Ka7vo167204 for ; Wed, 4 Jan 2012 14:36:07 -0600 X-ASG-Debug-ID: 1325709364-005fe612a72503c0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id zUzA9z0hIy4k9UJG for ; Wed, 04 Jan 2012 12:36:05 -0800 (PST) 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: AgUFAEC1BE95LLu4/2dsb2JhbABDggWqZoEGgXIBAQQBOhwjBQsIAxguFCUDIROHerVKE4hHglJjBJUDkkk Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail07.adl2.internode.on.net with ESMTP; 05 Jan 2012 07:06:03 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RiXYy-000679-Dt; Thu, 05 Jan 2012 07:35:56 +1100 Date: Thu, 5 Jan 2012 07:35:56 +1100 From: Dave Chinner To: Alex Elder Cc: lsf-pc@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [LSF/MM TOPIC] [ATTEND] xfstests: what do we need to do to make it better? Message-ID: <20120104203556.GD17026@dastard> X-ASG-Orig-Subj: Re: [LSF/MM TOPIC] [ATTEND] xfstests: what do we need to do to make it better? References: <20120103234455.GU23662@dastard> <1325697491.3346.18.camel@doink> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1325697491.3346.18.camel@doink> 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: 1325709364 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85035 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 04, 2012 at 11:18:11AM -0600, Alex Elder wrote: > On Wed, 2012-01-04 at 10:44 +1100, Dave Chinner wrote: > > Given that more people are using xfstests and developing tests, we > > need to consider how to make it friendlier to hack on. The current > > structure of the tree is difficult to work with, the way tests are > > organised and numbered make it difficult to co-ordinate new tests > > and results in patch conflicts, etc. > > Coordination of numbers is not a big deal, the test names/numbers > can be easily fixed up at commit time. I also thought that the > numbers--though meaningless on their own--also avoided having to > decide where a particular test belongs. Instead, we decide that via the global group file and via definitions within the test itself. Yes, the global group file allows tests to exist in multiple logical test groups, but that's something that canbe maintained even with a broken up deirectory heirarchy. > I.e., a test that exercises > several categories of things (maybe preallocation, quota, and ENOSPC) > won't be hidden in any sort of "enospc" test directory. No, but it will be a generic of filesystem specific test, so woul dbe located in such a subdirectory. Basically, I'm thinking of something more fine grained like this: generic/group /001 /005 .... xfs/group /002 /003 .... So that we're not treading on each other's toes as much. Maintaining the group files still allows logical grouping of tests (like auto, quota, etc) so I don't see any change in functionality there. Maybe someone will have a good idea to improve the logical grouping implementation, but right now I'm not planning on killing that functionality at all... > > make it easier to add new tests without conflicts with others > > developing new tests. Some of the ideas Christoph and I have > > previously tossed around include: > > > > - break tests up into groups in their own subdirectories. > > e.g. generic tests, xfs/ext4/btrfs specific tests, stress > > tests, performance tests, large FS tests, etc > > - change the way we define groups of tests so we don't have > > a single registry of tests and their groups > > - allow different naming of tests, such as desciptive text > > names rather than just plain numbers > > - allow duplicate test names in different groups > > Despite what I said above, I don't disagree with any of this. > Perhaps the tests can be buried in one or more subdirectories, > but each FSTYP defines its own groups file to drive testing. I think allowing duplicate tests is a bad thing - keeping the logical grouping effectively allows us to only keep one copy of a test no matter where it ends up. > > I'm sure that other users of xfstests will have some ideas on how to > > improve it for the way they run it, so I'd like to gather and > > incorporate these ideas into any structural change we make to > > xfstests. > > Should be a good discussion. It might be useful to have a > proposal or two to work with as a starting point, or maybe > an outline of the types of changes (naming, directory > structure, etc.), to help keep things focused. Sure, though I don't want to done so much that it's all set in stone before I found out what other people consider pain points that need to be fixed... Cheers, Dave. -- Dave Chinner david@fromorbit.com From BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 4 14:52:58 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04KqvaI167801 for ; Wed, 4 Jan 2012 14:52:58 -0600 X-ASG-Debug-ID: 1325710376-005fe612a6251210001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id gSvdO9MmmubxAfAv for ; Wed, 04 Jan 2012 12:52:56 -0800 (PST) X-Barracuda-Envelope-From: BATV+4df4d6f5b55319119759+3055+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RiXpP-0003Pf-Bl; Wed, 04 Jan 2012 20:52:55 +0000 Date: Wed, 4 Jan 2012 15:52:55 -0500 From: Christoph Hellwig To: Jeff Liu Cc: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V4 Message-ID: <20120104205255.GA1012@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V4 References: <4EFB1B23.7050008@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4EFB1B23.7050008@oracle.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325710376 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean Hi Jeff, thanks a lot for the patch, it looks good to except for some more nitpicks around the unwritten extent probing. The other issue is the patch description format - the version changelog should go below the --- line. > + do { > + unsigned int i; > + unsigned nr_pages; > + int want = min_t(pgoff_t, end - index, > + (pgoff_t)PAGEVEC_SIZE - 1) + 1; > + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, > + &index, tag, want); > + if (nr_pages == 0) { > + /* > + * Try to lookup pages in writeback mode from the > + * beginning if no more dirty page can be probed. > + */ > +probe_done: > + if (tag == PAGECACHE_TAG_DIRTY) { > + tag = PAGECACHE_TAG_WRITEBACK; > + goto again; > + } > + break; The code flow here looks very confusing. Why not pass the tag as an argument to the function, then calling it twice and use the minimum? (that probably also wants a helper instead of duplication) > + * dirty data in the page cache it can be > + * identified by having BH_Unwritten set in > + * each buffer. Also, the buffer head state > + * might be in BH_Uptodate if the buffer > + * writeback procedure was fired, we need to > + * examine it too. > + */ > + if (buffer_unwritten(bh) || > + buffer_uptodate(bh)) { > + found = true; > + if (get_offset) > + *offset = XFS_FSB_TO_B( > + mp, last); Currently seek hole doesn't set get_offset we skip the whole extent. This seems a bit inconsistent - shouldn't we also return that offset for the hole case? if the dirty data only starts past the start block of the map the first blocks of it still are a hole. From sandeen@redhat.com Wed Jan 4 14:54:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04KsThd168003 for ; Wed, 4 Jan 2012 14:54:29 -0600 X-ASG-Debug-ID: 1325710467-005fe612a9251380001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qmrEqCPkdvwqFFKo for ; Wed, 04 Jan 2012 12:54:27 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q04KsQbp026314 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 4 Jan 2012 15:54:26 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q04KsP2F009056 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 4 Jan 2012 15:54:26 -0500 Message-ID: <4F04BC81.1000207@redhat.com> Date: Wed, 04 Jan 2012 14:54:25 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: xfs-oss CC: ext4 development , Eryu Guan Subject: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: make 275 pass In-Reply-To: <4F04A6E6.1090304@redhat.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1325710467 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Ok, this is a significant rework of 275, which made too many assumptions about details of space usage and failed on several filesystems (it passed on xfs, but only by accident). This new version tries to leave about 256k free, then tries a single 1M IO, and fails only if 0 bytes are written. It also sends a lot more to $seq.full for debugging on failure and fixes a few other stylistic things. Signed-off-by: Eric Sandeen --- diff --git a/275 b/275 index 214262e..8f521f8 100755 --- a/275 +++ b/275 @@ -1,8 +1,8 @@ #! /bin/bash # FS QA Test No. 275 # -# The posix write test. when write size is larger than disk free size, -# should write as more as possible +# The posix write test. When write size is larger than disk free size, +# should write as much as possible until ENOSPC. # #----------------------------------------------------------------------- # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. @@ -30,13 +30,12 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ -status=0 # success is the default! +status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -f $SCRATCH_MNT/* $tmp.* _scratch_unmount } @@ -49,7 +48,7 @@ _supported_os IRIX Linux _require_scratch echo "------------------------------" -echo "write lack test" +echo "write until ENOSPC test" echo "------------------------------" rm -f $seq.full @@ -59,31 +58,38 @@ _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 _scratch_mount rm -rf $SCRATCH_MNT/* -cd $SCRATCH_MNT -dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 -if [ $? -ne 0 ] -then - echo "create file err" - status=1 - exit -fi +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1 +[ $? -ne 0 ] && _fail "Error creating file" -dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 -dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 +# Attempt to completely fill fs +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1 sync +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K >>$seq.full 2>&1 +sync +# Last effort, use O_SYNC +dd if=/dev/zero of=$SCRATCH_MNT/tmp4 bs=4K oflag=sync >>$seq.full 2>&1 +# Save space usage info to the full file +echo "Pre rm space:" >> $seq.full +df $SCRATCH_MNT >>$seq.full 2>&1 -rm -f tmp1 +# Should leave approx 256k free +rm -f $SCRATCH_MNT/tmp1 sync +echo "Post rm space:" >> $seq.full +df $SCRATCH_MNT >>$seq.full 2>&1 +_freespace=`df -k $SCRATCH_MNT | tail -n 1 | awk '{print $4}'` +[ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem" + +# Try a write larger than available space +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seq.full 2>&1 +echo "Bytes written until ENOSPC:" >>$seq.full +du $SCRATCH_MNT/tmp1 >>$seq.full -dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 -_filesize=`du tmp1 | awk '{print $1}'` -if [ $_filesize -ne 4 ] -then - echo "write file err" - status=1 - exit -fi +# And at least some of it should succeed. +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." echo "done" +status=0 exit diff --git a/275.out b/275.out index 30af43c..69b9d52 100644 --- a/275.out +++ b/275.out @@ -1,5 +1,5 @@ QA output created by 275 ------------------------------ -write lack test +write until ENOSPC test ------------------------------ done From bpm@sgi.com Wed Jan 4 15:13:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04LDd9R168563 for ; Wed, 4 Jan 2012 15:13:39 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id C6615AC014; Wed, 4 Jan 2012 13:13:35 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id A15D7426DA7; Wed, 4 Jan 2012 15:13:35 -0600 (CST) Date: Wed, 4 Jan 2012 15:13:35 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 03/11] xfs: remove the unused dm_attrs structure Message-ID: <20120104211335.GC6390@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.138400643@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200131.138400643@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Dec 18, 2011 at 03:00:06PM -0500, Christoph Hellwig wrote: > .. and the just as dead bhv_desc forward declaration while we're at it. > > Signed-off-by: Christoph Hellwig > Reviewed-by: Alex Elder > Reviewed-by: Dave Chinner Looks good. Reviewed-by: Ben Myers From david@fromorbit.com Wed Jan 4 17:17:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04NHUnH172403 for ; Wed, 4 Jan 2012 17:17:30 -0600 X-ASG-Debug-ID: 1325719047-0222017aa4301fc0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 1PZA4WN34LayLAQF for ; Wed, 04 Jan 2012 15:17:28 -0800 (PST) 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: AgUFAPXbBE95LLu4/2dsb2JhbABDggWqZoEGgXIBAQU6HCMQCAMYLhQlAyETvSATixljBJUDkkk Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail07.adl2.internode.on.net with ESMTP; 05 Jan 2012 09:47:27 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ria5F-0006Rk-Tm; Thu, 05 Jan 2012 10:17:25 +1100 Date: Thu, 5 Jan 2012 10:17:25 +1100 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss , ext4 development , Eryu Guan Subject: Re: [PATCH V2] xfstests: make 275 pass Message-ID: <20120104231725.GB24466@dastard> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F04BC81.1000207@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1325719048 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85045 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 04, 2012 at 02:54:25PM -0600, Eric Sandeen wrote: > Ok, this is a significant rework of 275, which made too many > assumptions about details of space usage and failed on several > filesystems (it passed on xfs, but only by accident). > > This new version tries to leave about 256k free, then tries > a single 1M IO, and fails only if 0 bytes are written. > > It also sends a lot more to $seq.full for debugging on failure > and fixes a few other stylistic things. > > Signed-off-by: Eric Sandeen I just had another thought about this, Eric.... > +# And at least some of it should succeed. > +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` > +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." The question that just came to mind was this assumes that allocation succeeded so therefore the partial write succeeded. But that's not necessary the case. The partial write might not succeed leaving the file size as zero, but the underlying FS might not remove all the blocks it allocated (nothing says that it has to). Hence to determine if a partial write succeeded, we also need to check that the file size itself is greater than zero.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@redhat.com Wed Jan 4 17:21:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q04NLHYx172516 for ; Wed, 4 Jan 2012 17:21:17 -0600 X-ASG-Debug-ID: 1325719275-0222017aa3303fb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id kytaonW9DUTZbPps for ; Wed, 04 Jan 2012 15:21:16 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q04NL2k0015843 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 4 Jan 2012 18:21:02 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q04NL1XO008072 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 4 Jan 2012 18:21:01 -0500 Message-ID: <4F04DEDC.6020807@redhat.com> Date: Wed, 04 Jan 2012 17:21:00 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs-oss , ext4 development , Eryu Guan Subject: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> <20120104231725.GB24466@dastard> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass In-Reply-To: <20120104231725.GB24466@dastard> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1325719275 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85047 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 1/4/12 5:17 PM, Dave Chinner wrote: > On Wed, Jan 04, 2012 at 02:54:25PM -0600, Eric Sandeen wrote: >> Ok, this is a significant rework of 275, which made too many >> assumptions about details of space usage and failed on several >> filesystems (it passed on xfs, but only by accident). >> >> This new version tries to leave about 256k free, then tries >> a single 1M IO, and fails only if 0 bytes are written. >> >> It also sends a lot more to $seq.full for debugging on failure >> and fixes a few other stylistic things. >> >> Signed-off-by: Eric Sandeen > > I just had another thought about this, Eric.... > >> +# And at least some of it should succeed. >> +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` >> +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." > > The question that just came to mind was this assumes that allocation > succeeded so therefore the partial write succeeded. But that's not > necessary the case. The partial write might not succeed leaving the > file size as zero, but the underlying FS might not remove all the > blocks it allocated (nothing says that it has to). Hence to > determine if a partial write succeeded, we also need to check that > the file size itself is greater than zero.... Probably need to read up on what posix says it should do. I think what you're saying is that it might leave blocks allocated past EOF? That'd be surprising to me, but maybe I misunderstand? Anyway, testing file size as well as space is simple enough. -Eric > Cheers, > > Dave. From david@fromorbit.com Wed Jan 4 18:39:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q050dlII174653 for ; Wed, 4 Jan 2012 18:39:48 -0600 X-ASG-Debug-ID: 1325723985-005fe612a92611e0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id wDWPMnDNCR0VhVs4 for ; Wed, 04 Jan 2012 16:39:45 -0800 (PST) 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: AgUFAOHwBE95LLu4/2dsb2JhbABDggWqZ4EGgXIBAQU6HCMQCAMYLhQlAyETvRoTixljBJUDkkk Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail07.adl2.internode.on.net with ESMTP; 05 Jan 2012 11:09:30 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RibMe-0006as-Qq; Thu, 05 Jan 2012 11:39:28 +1100 Date: Thu, 5 Jan 2012 11:39:28 +1100 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss , ext4 development , Eryu Guan Subject: Re: [PATCH V2] xfstests: make 275 pass Message-ID: <20120105003928.GC24466@dastard> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> <20120104231725.GB24466@dastard> <4F04DEDC.6020807@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F04DEDC.6020807@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1325723985 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85051 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 04, 2012 at 05:21:00PM -0600, Eric Sandeen wrote: > On 1/4/12 5:17 PM, Dave Chinner wrote: > > On Wed, Jan 04, 2012 at 02:54:25PM -0600, Eric Sandeen wrote: > >> Ok, this is a significant rework of 275, which made too many > >> assumptions about details of space usage and failed on several > >> filesystems (it passed on xfs, but only by accident). > >> > >> This new version tries to leave about 256k free, then tries > >> a single 1M IO, and fails only if 0 bytes are written. > >> > >> It also sends a lot more to $seq.full for debugging on failure > >> and fixes a few other stylistic things. > >> > >> Signed-off-by: Eric Sandeen > > > > I just had another thought about this, Eric.... > > > >> +# And at least some of it should succeed. > >> +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` > >> +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." > > > > The question that just came to mind was this assumes that allocation > > succeeded so therefore the partial write succeeded. But that's not > > necessary the case. The partial write might not succeed leaving the > > file size as zero, but the underlying FS might not remove all the > > blocks it allocated (nothing says that it has to). Hence to > > determine if a partial write succeeded, we also need to check that > > the file size itself is greater than zero.... > > Probably need to read up on what posix says it should do. I think > what you're saying is that it might leave blocks allocated past EOF? > That'd be surprising to me, but maybe I misunderstand? There's no guarantee that du is even reporting blocks on disk. e.g for XFS du will also report reserved (in-memory) delalloc space on the inode and that includes speculative allocation beyond EOF. We don't have to remove specultive delalloc ranges when a partial write occurs, so effectively checking du output to see if a partial write succeeded is not a sufficient test to determine if the partial write succeeded or not. However, if the partial write did succeed then the file size *must* change to reflect what was written. Hence I suspect all we actually need here is a file size check... Cheers, Dave. -- Dave Chinner david@fromorbit.com From jeff.liu@oracle.com Thu Jan 5 00:02:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0562IRf188644 for ; Thu, 5 Jan 2012 00:02:18 -0600 X-ASG-Debug-ID: 1325743336-005fe612a927a380001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id pKTsEfPruRdjAsMv for ; Wed, 04 Jan 2012 22:02:16 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0562AEf004008 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 5 Jan 2012 06:02:11 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0562AxA004250 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 5 Jan 2012 06:02:10 GMT Received: from abhmt104.oracle.com (abhmt104.oracle.com [141.146.116.56]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q05629v0029986; Thu, 5 Jan 2012 00:02:09 -0600 Received: from [10.191.46.104] (/10.191.46.104) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 04 Jan 2012 22:02:09 -0800 Message-ID: <4F053CDC.6030007@oracle.com> Date: Thu, 05 Jan 2012 14:02:04 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com, chris Mason Subject: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V4 References: <4EFB1B23.7050008@oracle.com> <20120104205255.GA1012@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V4 In-Reply-To: <20120104205255.GA1012@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090207.4F053CE3.00C7,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1325743336 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85072 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Christoph, On 01/05/2012 04:52 AM, Christoph Hellwig wrote: > Hi Jeff, > > thanks a lot for the patch, it looks good to except for some more > nitpicks around the unwritten extent probing. > > The other issue is the patch description format - the version changelog > should go below the --- line. ok. :-P. > >> + do { >> + unsigned int i; >> + unsigned nr_pages; >> + int want = min_t(pgoff_t, end - index, >> + (pgoff_t)PAGEVEC_SIZE - 1) + 1; >> + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, >> + &index, tag, want); >> + if (nr_pages == 0) { >> + /* >> + * Try to lookup pages in writeback mode from the >> + * beginning if no more dirty page can be probed. >> + */ >> +probe_done: >> + if (tag == PAGECACHE_TAG_DIRTY) { >> + tag = PAGECACHE_TAG_WRITEBACK; >> + goto again; >> + } >> + break; > > The code flow here looks very confusing. Why not pass the tag as an > argument to the function, then calling it twice and use the minimum? > (that probably also wants a helper instead of duplication) That's just because I was inclined to implement a helper rather than duplicating the probe function twice. I have gone through the page lookup stuff, looks we can introduce a helper to wrap something like radix_tree_gang_lookup_tag_slot()(maybe name it as radix_tree_gang_lookup_tags_slot()), it can accept a tags array argument(dirty/unwritten), return those intertwined pages in ascending order based on offset. Even that, I was still wondering if we can tweak the pages probing function a bit more generic to be a helper too. Per Dave's comments in our another discussion, the reason why we can not do that is due to the different lock mechanism among FS(ext4, btrfs), but looks those lock stuff are safe, i.e, To probing pages, FS using mutex lock, will be something like: mutex_lock(&inode->i_mutex); ---seek_data_or_hole() -------probe_unwritten_buffer() mutex_unlock(&inode->i_mutex); For XFS, still using the shared lock. For now, how about just calling it twice and use the minimum, and make the code tested more stable, then try to introduce a helper? > > >> + * dirty data in the page cache it can be >> + * identified by having BH_Unwritten set in >> + * each buffer. Also, the buffer head state >> + * might be in BH_Uptodate if the buffer >> + * writeback procedure was fired, we need to >> + * examine it too. >> + */ >> + if (buffer_unwritten(bh) || >> + buffer_uptodate(bh)) { >> + found = true; >> + if (get_offset) >> + *offset = XFS_FSB_TO_B( >> + mp, last); > > Currently seek hole doesn't set get_offset we skip the whole extent. > This seems a bit inconsistent - shouldn't we also return that offset > for the hole case? if the dirty data only starts past the start block > of the map the first blocks of it still are a hole. Indeed, we can get a hole offset a bit more accurate than before in this way. Thanks, -Jeff > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jeff.liu@oracle.com Thu Jan 5 00:04:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0564CZi188711 for ; Thu, 5 Jan 2012 00:04:12 -0600 X-ASG-Debug-ID: 1325743450-0222017aa6324930001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id K09wS9mbsUdtkPxy for ; Wed, 04 Jan 2012 22:04:10 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q05647AF005911 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 5 Jan 2012 06:04:07 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q056461U006432 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 5 Jan 2012 06:04:06 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q05646bu007151; Thu, 5 Jan 2012 00:04:06 -0600 Received: from [10.191.46.104] (/10.191.46.104) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 04 Jan 2012 22:04:05 -0800 Message-ID: <4F053D51.7010107@oracle.com> Date: Thu, 05 Jan 2012 14:04:01 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com, Chris Mason Subject: Re: Another SEEK_DATA/SEEK_HOLE tester References: <4EFB1FEC.1050800@oracle.com> <20120104164356.GA12924@infradead.org> X-ASG-Orig-Subj: Re: Another SEEK_DATA/SEEK_HOLE tester In-Reply-To: <20120104164356.GA12924@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090208.4F053D58.0002,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1325743450 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85072 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 01/05/2012 12:43 AM, Christoph Hellwig wrote: > On Wed, Dec 28, 2011 at 09:55:56PM +0800, Jeff Liu wrote: >> A test tool to verify larger files with more extents(it can be used, but still need improvements). > > Can you turn it into something that gets run automatically? I have reposted this tester at: http://patchwork.xfs.org/patch/3109/ Thanks, -Jeff From bpm@sgi.com Thu Jan 5 12:40:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05IeLcH218099 for ; Thu, 5 Jan 2012 12:40:21 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9F7AC304070; Thu, 5 Jan 2012 10:40:16 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 089CB426DA7; Thu, 5 Jan 2012 12:40:17 -0600 (CST) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS update for 3.3-rc1 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20120105184017.089CB426DA7@whiskey.americas.sgi.com> Date: Thu, 5 Jan 2012 12:40:17 -0600 (CST) From: bpm@sgi.com (Ben Myers) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Linus, Please pull the following changes for 3.3-rc1. There is a merge conflict between be4f1ac - xfs: log all dirty inodes in xfs_fs_sync_fs and 34625c6 - xfs: remove xfs_qm_sync which I have resolved in the for-linus-merged branch for your convenience. Thanks, Ben The following changes since commit 805a6af8dba5dfdd35ec35dc52ec0122400b2610: Linus Torvalds (1): Linux 3.2 are available in the git repository at: git://oss.sgi.com/xfs/xfs for-linus Christoph Hellwig (20): xfs: remove the deprecated nodelaylog option xfs: cleanup the transaction commit path a bit xfs: remove the lid_size field in struct log_item_desc xfs: untangle SYNC_WAIT and SYNC_TRYLOCK meanings for xfs_qm_dqflush xfs: make sure to really flush all dquots in xfs_qm_quotacheck xfs: remove xfs_qm_sync xfs: remove the sync_mode argument to xfs_qm_dqflush_all xfs: cleanup dquot locking helpers xfs: cleanup xfs_qm_dqlookup xfs: remove XFS_DQ_INACTIVE xfs: implement lazy removal for the dquot freelist xfs: flatten the dquot lock ordering xfs: nest qm_dqfrlist_lock inside the dquot qlock xfs: simplify xfs_qm_dqattach_grouphint xfs: add a xfs_dqhold helper xfs: merge xfs_qm_dqinit_core into the only caller xfs: kill xfs_qm_idtodq xfs: remove XFS_QMOPT_DQSUSER xfs: simplify xfs_qm_detach_gdquots xfs: mark the xfssyncd workqueue as non-reentrant Eric Sandeen (1): xfs: remove unused XBT_FORCE_SLEEP bit Xi Wang (1): xfs: fix acl count validation in xfs_acl_from_disk() fs/xfs/xfs_acl.c | 2 +- fs/xfs/xfs_buf.c | 6 +- fs/xfs/xfs_buf.h | 3 +- fs/xfs/xfs_dquot.c | 500 ++++++++++++++++------------------------------- fs/xfs/xfs_dquot.h | 39 +++- fs/xfs/xfs_dquot_item.c | 5 +- fs/xfs/xfs_inode_item.c | 2 - fs/xfs/xfs_log.c | 79 ++------ fs/xfs/xfs_log.h | 8 +- fs/xfs/xfs_log_cil.c | 96 ++++++---- fs/xfs/xfs_mount.h | 1 - fs/xfs/xfs_qm.c | 464 ++++++++++--------------------------------- fs/xfs/xfs_qm.h | 6 - fs/xfs/xfs_quota.h | 12 +- fs/xfs/xfs_super.c | 36 +--- fs/xfs/xfs_sync.c | 6 +- fs/xfs/xfs_trace.h | 2 - fs/xfs/xfs_trans.c | 475 +-------------------------------------------- fs/xfs/xfs_trans.h | 3 +- 19 files changed, 412 insertions(+), 1333 deletions(-) From greg@kroah.com Thu Jan 5 13:05:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05J5AF0218814 for ; Thu, 5 Jan 2012 13:05:10 -0600 X-ASG-Debug-ID: 1325790307-0222017aa538d760001-NocioJ Received: from out4.smtp.messagingengine.com (out4.smtp.messagingengine.com [66.111.4.28]) by cuda.sgi.com with ESMTP id Bx0cE242LAoDLKU4 for ; Thu, 05 Jan 2012 11:05:07 -0800 (PST) X-Barracuda-Envelope-From: greg@kroah.com X-Barracuda-Apparent-Source-IP: 66.111.4.28 Received: from compute5.internal (compute5.nyi.mail.srv.osa [10.202.2.45]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id 25BA421215 for ; Thu, 5 Jan 2012 14:05:06 -0500 (EST) Received: from frontend1.nyi.mail.srv.osa ([10.202.2.160]) by compute5.internal (MEProxy); Thu, 05 Jan 2012 14:05:07 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:cc:subject:message-id :references:mime-version:content-type:in-reply-to; s=smtpout; bh=jgdH0qh2mgSS8+bLsknEgwMwhqQ=; b=mLiCzi7QEtgLXJhXe/cHGjtCpoaS Gdg+AIFk66yglyBb37noBmyCj3jys7Br7oqEjuXc+fWfhOWW3SVdCd5rtUPB8fWT e2wAC/J2DvcMuNvMyAwIcNzuQ07jzyOnhOKl2I4W019TD1Yh2V7rbJ/eTCCey8ar dBl4pqvmMWcfdVE= X-Sasl-enc: pWEkgNLdnvcml8Hqz6LPV+zJAPK8uPp5Mqrk38eP1co/ 1325790306 Received: from localhost (c-76-121-69-168.hsd1.wa.comcast.net [76.121.69.168]) by mail.messagingengine.com (Postfix) with ESMTPSA id 4BACA8E01BC; Thu, 5 Jan 2012 14:05:06 -0500 (EST) Date: Thu, 5 Jan 2012 11:04:23 -0800 From: Greg KH To: Christoph Hellwig Cc: stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 0/2] XFS updates for 3.0-stable. Message-ID: <20120105190423.GA19918@kroah.com> X-ASG-Orig-Subj: Re: [PATCH 0/2] XFS updates for 3.0-stable. References: <20120104144834.869111452@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120104144834.869111452@bombadil.infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: out4.smtp.messagingengine.com[66.111.4.28] X-Barracuda-Start-Time: 1325790307 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85124 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 X-Virus-Status: Clean On Wed, Jan 04, 2012 at 09:48:34AM -0500, Christoph Hellwig wrote: > Now for real - two updates that went into Linus' tree recently and > fix issues with peridic metadata writeback and sync not beeing able > write file size updates to disk in some cases. > > The executive summary is: the writeback code slowly decided that the > XFS behaviour in corner cases equals to livelocking, and XFS made some > of this behaviour much more likely since the introduction of the > delaylog mode. All applied now, thanks for sending these in. greg k-h From marian@socialseomaster.com Thu Jan 5 16:15:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05MFirv224507 for ; Thu, 5 Jan 2012 16:15:44 -0600 X-ASG-Debug-ID: 1325801742-00a9eb19d63265e0001-NocioJ Received: from socialseomaster.com ([176.31.76.37]) by cuda.sgi.com with ESMTP id KdHQyKAWs9WLYHFF for ; Thu, 05 Jan 2012 14:15:42 -0800 (PST) X-Barracuda-Envelope-From: marian@socialseomaster.com X-Barracuda-Apparent-Source-IP: 176.31.76.37 Date: Thu, 5 Jan 2012 22:14:52 +0000 To: xfs@oss.sgi.com From: Marian Dolan Subject: higher position for your site. X-Priority: 3 X-ASG-Orig-Subj: higher position for your site. MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_82ab21c6f0c66ee9f40f908bf18721b9" Message-Id: <20120105221541.6FAE0431299@socialseomaster.com> X-Barracuda-Connect: UNKNOWN[176.31.76.37] X-Barracuda-Start-Time: 1325801742 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85137 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean --b1_82ab21c6f0c66ee9f40f908bf18721b9 Content-Type: text/plain; charset = "UTF-8" Content-Transfer-Encoding: 8bit Hi, I would like to introduce myself my name is Marian, webmaster of SocialSEOMaster.com among other sites that I personally maintain. While working on a project for my partners website I've found oss.sgi.com and I decided to contact you to tell you little bit more about what I do. I'm a SEO expert with vast experience over the years in the SEO field placing my partner's websites on Google's 1st results page for the keywords they're after. I would like to elaborate more and send you more information, to share my thoughts, tips & tricks. Please let me know if you're interested and we'll take it from there. Thanks a lot, Marian Dolan marian@socialseomaster.com SocialSEOMaster.com http://www.linkedin.com/in/mariansdolan --b1_82ab21c6f0c66ee9f40f908bf18721b9 Content-Type: text/html; charset = "UTF-8" Content-Transfer-Encoding: 8bit Hi,

I would like to introduce myself my name is Marian, webmaster of SocialSEOMaster.com
among other sites that I personally maintain.

While working on a project for my partners website I've found oss.sgi.com
and I decided to contact you to tell you little bit more about what I do.

I'm a SEO expert with vast experience over the years in the SEO field
placing my partner's websites on Google's 1st results page for the
keywords they're after.

I would like to elaborate more and send you more information, to share
my thoughts, tips & tricks.

Please let me know if you're interested and we'll take it from there.

Thanks a lot,

Marian Dolan
marian@socialseomaster.com
SocialSEOMaster.com

http://www.linkedin.com/in/mariansdolan

--b1_82ab21c6f0c66ee9f40f908bf18721b9-- From mfasheh@suse.de Thu Jan 5 16:39:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,LOCAL_GNU_PATCH, T_FRT_POSSIBLE autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05Md1gl224956 for ; Thu, 5 Jan 2012 16:39:02 -0600 X-ASG-Debug-ID: 1325803139-0222017aa339e2a0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id MWVequoMjrrFOtaF for ; Thu, 05 Jan 2012 14:39:00 -0800 (PST) X-Barracuda-Envelope-From: mfasheh@suse.de X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (nat.nue.novell.com [195.135.221.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 41B818FFDD; Thu, 5 Jan 2012 23:38:59 +0100 (CET) Date: Thu, 5 Jan 2012 14:38:59 -0800 From: Mark Fasheh To: Christoph Hellwig Cc: Jeff Mahoney , xfs@oss.sgi.com Subject: Re: xfs-trace-ilock-more Message-ID: <20120105223859.GJ11114@wotan.suse.de> X-ASG-Orig-Subj: Re: xfs-trace-ilock-more Reply-To: Mark Fasheh References: <20111214024040.GA17780@infradead.org> <20111214182750.GH11114@wotan.suse.de> <20111218202734.GB20799@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20111218202734.GB20799@infradead.org> Organization: SUSE Labs User-Agent: Mutt/1.5.9i X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1325803139 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85137 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Sun, Dec 18, 2011 at 03:27:34PM -0500, Christoph Hellwig wrote: > Given that the patch is fairly clean can you send it to us for > inclusion? Here goes. I updated the patch for 3.2 and of course gave it a quick test. --Mark -- Mark Fasheh =46rom: Mark Fasheh [PATCH] xfs: add more ilock tracing Let's get a trace of the amount of time spent in xfs_ilock(). This has helped us (SUSE) in investigating read/write performance issues in the past when ilock() contention has come up as a possibile issue. Signed-off-by: Mark Fasheh --- fs/xfs/xfs_iget.c | 16 ++++++++++++---- fs/xfs/xfs_trace.h | 13 ++++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index 0fa98b1..b83108b 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c @@ -543,6 +543,8 @@ xfs_ilock( xfs_inode_t *ip, uint lock_flags) { + unsigned long start =3D jiffies; + /* * You can't set both SHARED and EXCL for the same lock, * and only XFS_IOLOCK_SHARED, XFS_IOLOCK_EXCL, XFS_ILOCK_SHARED, @@ -564,7 +566,7 @@ xfs_ilock( else if (lock_flags & XFS_ILOCK_SHARED) mraccess_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); =20 - trace_xfs_ilock(ip, lock_flags, _RET_IP_); + trace_xfs_ilock(ip, lock_flags, start, _RET_IP_); } =20 /* @@ -584,6 +586,8 @@ xfs_ilock_nowait( xfs_inode_t *ip, uint lock_flags) { + unsigned long start =3D jiffies; + /* * You can't set both SHARED and EXCL for the same lock, * and only XFS_IOLOCK_SHARED, XFS_IOLOCK_EXCL, XFS_ILOCK_SHARED, @@ -609,7 +613,7 @@ xfs_ilock_nowait( if (!mrtryaccess(&ip->i_lock)) goto out_undo_iolock; } - trace_xfs_ilock_nowait(ip, lock_flags, _RET_IP_); + trace_xfs_ilock_nowait(ip, lock_flags, start, _RET_IP_); return 1; =20 out_undo_iolock: @@ -638,6 +642,8 @@ xfs_iunlock( xfs_inode_t *ip, uint lock_flags) { + unsigned long start =3D jiffies; + /* * You can't set both SHARED and EXCL for the same lock, * and only XFS_IOLOCK_SHARED, XFS_IOLOCK_EXCL, XFS_ILOCK_SHARED, @@ -671,7 +677,7 @@ xfs_iunlock( xfs_trans_unlocked_item(ip->i_itemp->ili_item.li_ailp, (xfs_log_item_t*)(ip->i_itemp)); } - trace_xfs_iunlock(ip, lock_flags, _RET_IP_); + trace_xfs_iunlock(ip, lock_flags, start, _RET_IP_); } =20 /* @@ -683,6 +689,8 @@ xfs_ilock_demote( xfs_inode_t *ip, uint lock_flags) { + unsigned long start =3D jiffies; + ASSERT(lock_flags & (XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL)); ASSERT((lock_flags & ~(XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL)) =3D=3D 0); =20 @@ -691,7 +699,7 @@ xfs_ilock_demote( if (lock_flags & XFS_IOLOCK_EXCL) mrdemote(&ip->i_iolock); =20 - trace_xfs_ilock_demote(ip, lock_flags, _RET_IP_); + trace_xfs_ilock_demote(ip, lock_flags, start, _RET_IP_); } =20 #ifdef DEBUG diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index 4940357..ef5523a 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -507,32 +507,35 @@ DEFINE_BUF_ITEM_EVENT(xfs_trans_binval); =20 DECLARE_EVENT_CLASS(xfs_lock_class, TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, - unsigned long caller_ip), - TP_ARGS(ip, lock_flags, caller_ip), + unsigned long start, unsigned long caller_ip), + TP_ARGS(ip,lock_flags, start, caller_ip), TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_ino_t, ino) __field(int, lock_flags) + __field(unsigned long, start) __field(unsigned long, caller_ip) ), TP_fast_assign( __entry->dev =3D VFS_I(ip)->i_sb->s_dev; __entry->ino =3D ip->i_ino; __entry->lock_flags =3D lock_flags; + __entry->start =3D start; __entry->caller_ip =3D caller_ip; ), - TP_printk("dev %d:%d ino 0x%llx flags %s caller %pf", + TP_printk("dev %d:%d ino 0x%llx flags %s wait %lu caller %pf", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS), + (jiffies - __entry->start), (void *)__entry->caller_ip) ) =20 #define DEFINE_LOCK_EVENT(name) \ DEFINE_EVENT(xfs_lock_class, name, \ TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \ - unsigned long caller_ip), \ - TP_ARGS(ip, lock_flags, caller_ip)) + unsigned long start, unsigned long caller_ip), \ + TP_ARGS(ip, lock_flags, start, caller_ip)) DEFINE_LOCK_EVENT(xfs_ilock); DEFINE_LOCK_EVENT(xfs_ilock_nowait); DEFINE_LOCK_EVENT(xfs_ilock_demote); --=20 1.7.6 From gregkh@suse.de Thu Jan 5 16:47:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05MlC4G225136 for ; Thu, 5 Jan 2012 16:47:12 -0600 X-ASG-Debug-ID: 1325803630-005fe612a72ed7d0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 2ZOUSFyMePSjMhX3 for ; Thu, 05 Jan 2012 14:47:10 -0800 (PST) X-Barracuda-Envelope-From: gregkh@suse.de X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (nat.nue.novell.com [195.135.221.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 501A68FFEB; Thu, 5 Jan 2012 23:47:10 +0100 (CET) X-Mailbox-Line: From gregkh@clark.kroah.org Thu Jan 5 14:44:02 2012 Message-Id: <20120105224402.805767225@clark.kroah.org> User-Agent: quilt/0.50-25.1 Date: Thu, 05 Jan 2012 14:44:53 -0800 From: Greg KH To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, xfs@oss.sgi.com Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Ben Myers , Christoph Hellwig Subject: [68/73] xfs: log all dirty inodes in xfs_fs_sync_fs In-Reply-To: <20120105224632.GA14659@kroah.com> X-ASG-Orig-Subj: [68/73] xfs: log all dirty inodes in xfs_fs_sync_fs X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1325803630 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85137 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean 3.0-stable review patch. If anyone has any objections, please let me know. ------------------ Content-Length: 3536 Lines: 104 From: Christoph Hellwig Commit be4f1ac828776bbc7868a68b465cd8eedb733cfd upstream. Since Linux 2.6.36 the writeback code has introduces various measures for live lock prevention during sync(). Unfortunately some of these are actively harmful for the XFS model, where the inode gets marked dirty for metadata from the data I/O handler. The older_than_this checks that are now more strictly enforced since writeback: avoid livelocking WB_SYNC_ALL writeback by only calling into __writeback_inodes_sb and thus only sampling the current cut off time once. But on a slow enough devices the previous asynchronous sync pass might not have fully completed yet, and thus XFS might mark metadata dirty only after that sampling of the cut off time for the blocking pass already happened. I have not myself reproduced this myself on a real system, but by introducing artificial delay into the XFS I/O completion workqueues it can be reproduced easily. Fix this by iterating over all XFS inodes in ->sync_fs and log all that are dirty. This might log inode that only got redirtied after the previous pass, but given how cheap delayed logging of inodes is it isn't a major concern for performance. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Tested-by: Mark Tinguely Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers Signed-off-by: Greg Kroah-Hartman --- fs/xfs/linux-2.6/xfs_sync.c | 37 +++++++++++++++++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_sync.h | 2 ++ 2 files changed, 39 insertions(+) --- a/fs/xfs/linux-2.6/xfs_sync.c +++ b/fs/xfs/linux-2.6/xfs_sync.c @@ -336,6 +336,32 @@ xfs_sync_fsdata( return xfs_bwrite(mp, bp); } +int +xfs_log_dirty_inode( + struct xfs_inode *ip, + struct xfs_perag *pag, + int flags) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + int error; + + if (!ip->i_update_core) + return 0; + + tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); + error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); + if (error) { + xfs_trans_cancel(tp, 0); + return error; + } + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); + return xfs_trans_commit(tp, 0); +} + /* * When remounting a filesystem read-only or freezing the filesystem, we have * two phases to execute. This first phase is syncing the data before we @@ -365,6 +391,17 @@ xfs_quiesce_data( /* push and block till complete */ xfs_sync_data(mp, SYNC_WAIT); + + /* + * Log all pending size and timestamp updates. The vfs writeback + * code is supposed to do this, but due to its overagressive + * livelock detection it will skip inodes where appending writes + * were written out in the first non-blocking sync phase if their + * completion took long enough that it happened after taking the + * timestamp for the cut-off in the blocking phase. + */ + xfs_inode_ag_iterator(mp, xfs_log_dirty_inode, 0); + xfs_qm_sync(mp, SYNC_WAIT); /* write superblock and hoover up shutdown errors */ --- a/fs/xfs/linux-2.6/xfs_sync.h +++ b/fs/xfs/linux-2.6/xfs_sync.h @@ -42,6 +42,8 @@ void xfs_quiesce_attr(struct xfs_mount * void xfs_flush_inodes(struct xfs_inode *ip); +int xfs_log_dirty_inode(struct xfs_inode *ip, struct xfs_perag *pag, int flags); + int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); From gregkh@suse.de Thu Jan 5 16:47:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05Ml9s4225130 for ; Thu, 5 Jan 2012 16:47:10 -0600 X-ASG-Debug-ID: 1325803627-00a9eb19d5327cc0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id O07pSalAFBLUdaxp for ; Thu, 05 Jan 2012 14:47:07 -0800 (PST) X-Barracuda-Envelope-From: gregkh@suse.de X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.221.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id C18E28FFDD; Thu, 5 Jan 2012 23:47:06 +0100 (CET) X-Mailbox-Line: From gregkh@clark.kroah.org Thu Jan 5 14:44:02 2012 Message-Id: <20120105224402.717841604@clark.kroah.org> User-Agent: quilt/0.50-25.1 Date: Thu, 05 Jan 2012 14:44:52 -0800 From: Greg KH To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, xfs@oss.sgi.com Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Ben Myers , Christoph Hellwig Subject: [67/73] xfs: log the inode in ->write_inode calls for kupdate In-Reply-To: <20120105224632.GA14659@kroah.com> X-ASG-Orig-Subj: [67/73] xfs: log the inode in ->write_inode calls for kupdate X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1325803627 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85139 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean 3.0-stable review patch. If anyone has any objections, please let me know. ------------------ Content-Length: 2680 Lines: 86 From: Christoph Hellwig Commit 0b8fd3033c308e4088760aa1d38ce77197b4e074 upstream. If the writeback code writes back an inode because it has expired we currently use the non-blockin ->write_inode path. This means any inode that is pinned is skipped. With delayed logging and a workload that has very little log traffic otherwise it is very likely that an inode that gets constantly written to is always pinned, and thus we keep refusing to write it. The VM writeback code at that point redirties it and doesn't try to write it again for another 30 seconds. This means under certain scenarious time based metadata writeback never happens. Fix this by calling into xfs_log_inode for kupdate in addition to data integrity syncs, and thus transfer the inode to the log ASAP. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Tested-by: Mark Tinguely Reviewed-by: Mark Tinguely Signed-off-by: Ben Myers Signed-off-by: Greg Kroah-Hartman --- fs/xfs/linux-2.6/xfs_super.c | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c @@ -871,27 +871,6 @@ xfs_fs_dirty_inode( } STATIC int -xfs_log_inode( - struct xfs_inode *ip) -{ - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; - int error; - - tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); - error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); - if (error) { - xfs_trans_cancel(tp, 0); - return error; - } - - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - return xfs_trans_commit(tp, 0); -} - -STATIC int xfs_fs_write_inode( struct inode *inode, struct writeback_control *wbc) @@ -904,10 +883,8 @@ xfs_fs_write_inode( if (XFS_FORCED_SHUTDOWN(mp)) return -XFS_ERROR(EIO); - if (!ip->i_update_core) - return 0; - if (wbc->sync_mode == WB_SYNC_ALL) { + if (wbc->sync_mode == WB_SYNC_ALL || wbc->for_kupdate) { /* * Make sure the inode has made it it into the log. Instead * of forcing it all the way to stable storage using a @@ -916,11 +893,14 @@ xfs_fs_write_inode( * of synchronous log foces dramatically. */ xfs_ioend_wait(ip); - error = xfs_log_inode(ip); + error = xfs_log_dirty_inode(ip, NULL, 0); if (error) goto out; return 0; } else { + if (!ip->i_update_core) + return 0; + /* * We make this non-blocking if the inode is contended, return * EAGAIN to indicate to the caller that they did not succeed. From david@fromorbit.com Thu Jan 5 17:54:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_FRT_POSSIBLE autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q05NsDeF227710 for ; Thu, 5 Jan 2012 17:54:13 -0600 X-ASG-Debug-ID: 1325807649-0222017aa439f050001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id crJdoIk1rbu6c93V for ; Thu, 05 Jan 2012 15:54:09 -0800 (PST) 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: AgwFAMM2Bk95LLu4/2dsb2JhbABCggWqe4EGgXIBAQUnExwjEAgDDgcDLhQlAyETviATi34ElQWSSg Received: from ppp121-44-187-184.lns20.syd7.internode.on.net (HELO dastard) ([121.44.187.184]) by ipmail04.adl6.internode.on.net with ESMTP; 06 Jan 2012 10:24:07 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rix8I-0000aa-JW; Fri, 06 Jan 2012 10:54:06 +1100 Date: Fri, 6 Jan 2012 10:54:06 +1100 From: Dave Chinner To: Mark Fasheh Cc: Christoph Hellwig , Jeff Mahoney , xfs@oss.sgi.com Subject: Re: xfs-trace-ilock-more Message-ID: <20120105235406.GH24466@dastard> X-ASG-Orig-Subj: Re: xfs-trace-ilock-more References: <20111214024040.GA17780@infradead.org> <20111214182750.GH11114@wotan.suse.de> <20111218202734.GB20799@infradead.org> <20120105223859.GJ11114@wotan.suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120105223859.GJ11114@wotan.suse.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1325807649 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85144 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 05, 2012 at 02:38:59PM -0800, Mark Fasheh wrote: > On Sun, Dec 18, 2011 at 03:27:34PM -0500, Christoph Hellwig wrote: > > Given that the patch is fairly clean can you send it to us for > > inclusion? > > Here goes. I updated the patch for 3.2 and of course gave it a quick test. > --Mark > > -- > Mark Fasheh > > From: Mark Fasheh > > [PATCH] xfs: add more ilock tracing > > Let's get a trace of the amount of time spent in xfs_ilock(). This has > helped us (SUSE) in investigating read/write performance issues in the past > when ilock() contention has come up as a possibile issue. > > Signed-off-by: Mark Fasheh .... > --- a/fs/xfs/xfs_trace.h > +++ b/fs/xfs/xfs_trace.h > @@ -507,32 +507,35 @@ DEFINE_BUF_ITEM_EVENT(xfs_trans_binval); > > DECLARE_EVENT_CLASS(xfs_lock_class, > TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, > - unsigned long caller_ip), > - TP_ARGS(ip, lock_flags, caller_ip), > + unsigned long start, unsigned long caller_ip), > + TP_ARGS(ip,lock_flags, start, caller_ip), > TP_STRUCT__entry( > __field(dev_t, dev) > __field(xfs_ino_t, ino) > __field(int, lock_flags) > + __field(unsigned long, start) > __field(unsigned long, caller_ip) > ), > TP_fast_assign( > __entry->dev = VFS_I(ip)->i_sb->s_dev; > __entry->ino = ip->i_ino; > __entry->lock_flags = lock_flags; > + __entry->start = start; > __entry->caller_ip = caller_ip; > ), > - TP_printk("dev %d:%d ino 0x%llx flags %s caller %pf", > + TP_printk("dev %d:%d ino 0x%llx flags %s wait %lu caller %pf", > MAJOR(__entry->dev), MINOR(__entry->dev), > __entry->ino, > __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS), > + (jiffies - __entry->start), I'm not sure this is valid - the printk format can be used by tools outside the kernel at a later time (e.g. they read from the kernel in binary format). If you want this to be done, the it needs to be calculated in the TP_fast_assign() macro. Indeed, you are printing is the time delta between the start of the operation and the completion. in that case, the delta should be what is recorded in the trace point, not calculated implicitly inside the format string of the trace point. i.e callers do: trace_xfs_iunlock(ip, lock_flags, jiffies - start, _RET_IP_); to pass an explicit delta value to the trace point... Cheers, Dave. -- Dave Chinner david@fromorbit.com From penght@cn.fujitsu.com Thu Jan 5 21:54:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q063s8G0246316 for ; Thu, 5 Jan 2012 21:54:08 -0600 X-ASG-Debug-ID: 1325822042-0222017aa43adaa0001-NocioJ Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id Ry5hwXqsWX0a1Ml0 for ; Thu, 05 Jan 2012 19:54:06 -0800 (PST) X-Barracuda-Envelope-From: penght@cn.fujitsu.com X-Barracuda-Apparent-Source-IP: 222.73.24.84 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 174DF170135; Fri, 6 Jan 2012 11:53:58 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q063rukk004771; Fri, 6 Jan 2012 11:53:57 +0800 Received: from [127.0.0.1] ([10.167.225.84]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012010611530080-257147 ; Fri, 6 Jan 2012 11:53:00 +0800 Message-ID: <4F067052.8080905@cn.fujitsu.com> Date: Fri, 06 Jan 2012 11:53:54 +0800 From: Peng Haitao User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH] xfstests/071 FAIL with pwrite64: Invalid argument References: <4EDD8F16.4050402@cn.fujitsu.com> <20111206110533.GD28326@dastard> <4EDF2133.7030702@cn.fujitsu.com> <20111207100748.GB14273@dastard> <4EE02022.5000403@cn.fujitsu.com> <20120104165341.GA21075@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests/071 FAIL with pwrite64: Invalid argument In-Reply-To: <20120104165341.GA21075@infradead.org> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-06 11:53:00, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-06 11:53:02, Serialize complete at 2012-01-06 11:53:02 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1325822045 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85160 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Christoph Hellwig said the following on 2012-1-5 0:53: > This still fails in my 32-bit test VM: > yeah:( This case will exercise IO at large file with as following condition: - below upperbound - upperbound - above upperbound But in 32-bit, the case cannot satisfy the condition unless upperbound=16. When upperbound=16, the case will hung. The following steps will hung. # uname -a Linux Fedora-16-x86 3.1.0-7.fc16.i686.PAE #1 SMP Tue Nov 1 20:53:45 UTC 2011 i686 i686 i386 GNU/Linux # rpm -q xfsprogs xfsprogs-3.1.5-1.fc16.i686 # mount /dev/sda10 /sda10/ # xfs_info /dev/sda10 meta-data=/dev/sda10 isize=256 agcount=4, agsize=305088 blks = sectsz=512 attr=2 data = bsize=4096 blocks=1220352, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # cd /sda10/ # xfs_io -f -c "pwrite 17592186040320 512" tmp wrote 512/512 bytes at offset 17592186040320 512.000000 bytes, 1 ops; 0.0000 sec (12.850 MiB/sec and 26315.7895 ops/sec) # xfs_bmap -v tmp This will hung:( What is wrong with the steps or xfs wrong? -- Best Regards, Peng > --- 071.out 2009-05-10 16:48:46.000000000 +0000 > +++ 071.out.bad 2012-01-04 16:47:05.000000000 +0000 > @@ -40,14 +40,14 @@ > > > Writing 512 bytes, offset is +0 (direct=false) > -pwrite64: File too large > +wrote 512/512 bytes at offset > Reading 512 bytes (direct=false) > -read 0/512 bytes at offset > +read 512/512 bytes at offset > > and so on > > From amit.sahrawat83@gmail.com Fri Jan 6 04:21:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_72,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06ALfXB013315 for ; Fri, 6 Jan 2012 04:21:43 -0600 X-ASG-Debug-ID: 1325845300-00a9eb19d336d660001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id Xs1VG7hUeAcbDq1Z; Fri, 06 Jan 2012 02:21:40 -0800 (PST) X-Barracuda-Envelope-From: amit.sahrawat83@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iakk12 with SMTP id k12so2716159iak.26 for ; Fri, 06 Jan 2012 02:21:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; bh=zwDUvG+v5xbKN41Veqn2cWQ7lLKYUbMEYkabyh4au40=; b=dywQQ9SprpwbIpg3MCk9WZfb5lUYjpRy2vhpGgOeGR+rQ7fKj7jjCRaERpbAoEA6q1 GZXRBcDb8/1kVCyyccjV1fxocFrZTa/4p0V7O2vRtm3l8DadGpcY0UCYoV11lgOaVULk jtcCHfql4H/9l7WLpOet5/z67aaajFXre/GYc= Received: by 10.42.168.135 with SMTP id w7mr5632083icy.9.1325845298719; Fri, 06 Jan 2012 02:21:38 -0800 (PST) Received: from localhost.localdomain ([125.19.39.117]) by mx.google.com with ESMTPS id aq5sm129001071igc.5.2012.01.06.02.21.33 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 06 Jan 2012 02:21:37 -0800 (PST) From: Amit Sahrawat To: Alex Elder , xfs masters , xfs , linux kernel Cc: Christoph Hellwig , Dave Chinner , Amit Sahrawat Subject: [PATCH 1/1] xfs: serialise unaligned direct IOs Date: Fri, 6 Jan 2012 16:03:10 +0530 X-ASG-Orig-Subj: [PATCH 1/1] xfs: serialise unaligned direct IOs Message-Id: <1325845990-5664-1-git-send-email-amit.sahrawat83@gmail.com> X-Mailer: git-send-email 1.7.2.3 X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1325845300 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85178 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 X-Virus-Status: Clean From: Amit Sahrawat [ This patch published in 2.6.38 kernel(Original reference http://oss.sgi.com/archives/xfs/2011-01/msg00013.html), but can not be applied to 2.6.35 kernel directly, because of the absence of required function, its reimplmented to resolve xfstest test 240 fail.] When two concurrent unaligned, non-overlapping direct IOs are issued to the same block, the direct Io layer will race to zero the block. The result is that one of the concurrent IOs will overwrite data written by the other IO with zeros. This is demonstrated by the xfsqa test 240. To avoid this problem, serialise all unaligned direct IOs to an inode with a big hammer. We need a big hammer approach as we need to serialise AIO as well, so we can't just block writes on locks. Hence, the big hammer is calling xfs_ioend_wait() while holding out other unaligned direct IOs from starting. We don't bother trying to serialised aligned vs unaligned IOs as they are overlapping IO and the result of concurrent overlapping IOs is undefined - the result of either IO is a valid result so we let them race. Hence we only penalise unaligned IO, which already has a major overhead compared to aligned IO so this isn't a major problem. Signed-off-by: Dave Chinner Signed-off-by: Amit Sahrawat --- fs/xfs/linux-2.6/xfs_file.c | 39 ++++++++++++++++++++++++++++++++------- 1 files changed, 32 insertions(+), 7 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index 257a56b..b943aa1 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c @@ -629,6 +629,7 @@ xfs_file_aio_write( int iolock; int eventsent = 0; size_t ocount = 0, count; + int unaligned_io = 0; int need_i_mutex; XFS_STATS_INC(xs_write_calls); @@ -709,8 +710,26 @@ start: xfs_iunlock(ip, XFS_ILOCK_EXCL|iolock); return XFS_ERROR(-EINVAL); } + /* + * In most cases the direct IO writes will be done with IOLOCK_SHARED + * allowing them to be done in parallel with reads and other direct IO + * writes. However,if the IO is not aligned to filesystem blocks, the + * direct IO layer needs to do sub-block zeroing and that requires + * serialisation against other direct IOs to the same block. In this + * case we need to serialise the submission of the unaligned IOs so + * that we don't get racing block zeroing in the dio layer. + * To avoid the problem with aio, we also need to wait for outstanding + * IOs to complete so that unwritten extent conversion is completed + * before we try to map the overlapping block. This is currently + * implemented by hitting it with a big hammer (i.e. xfs_ioend_wait()). + */ + + if ((pos & mp->m_blockmask) || + ((pos + count) & mp->m_blockmask)) + unaligned_io = 1; - if (!need_i_mutex && (mapping->nrpages || pos > ip->i_size)) { + if (!need_i_mutex && + (unaligned_io || mapping->nrpages || pos > ip->i_size)) { xfs_iunlock(ip, XFS_ILOCK_EXCL|iolock); iolock = XFS_IOLOCK_EXCL; need_i_mutex = 1; @@ -769,12 +788,18 @@ start: } if (need_i_mutex) { - /* demote the lock now the cached pages are gone */ - xfs_ilock_demote(ip, XFS_IOLOCK_EXCL); - mutex_unlock(&inode->i_mutex); - - iolock = XFS_IOLOCK_SHARED; - need_i_mutex = 0; + if (unaligned_io) + xfs_ioend_wait(ip); + else { + /* + * demote the lock now the cached pages + * are gone if we can + */ + xfs_ilock_demote(ip, XFS_IOLOCK_EXCL); + iolock = XFS_IOLOCK_SHARED; + mutex_unlock(&inode->i_mutex); + need_i_mutex = 0; + } } trace_xfs_file_direct_write(ip, count, iocb->ki_pos, ioflags); -- 1.7.2.3 From amit.sahrawat83@gmail.com Fri Jan 6 05:00:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06B0qjI014463 for ; Fri, 6 Jan 2012 05:00:52 -0600 X-ASG-Debug-ID: 1325847649-00a9eb19d3371a10001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id pKjrtKQLWiXjZxuk; Fri, 06 Jan 2012 03:00:49 -0800 (PST) X-Barracuda-Envelope-From: amit.sahrawat83@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iakk12 with SMTP id k12so2769836iak.26 for ; Fri, 06 Jan 2012 03:00:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; bh=GywCwCj6YYcR2HApTLFviG8mhmMuy2Xofs0uX8PLKlc=; b=ozoPrQN6Z26P90HiZOKKYKF57L+bxYG1jWV73xbD5Q8SWfrJbFx7eajZKb0eiIj28G qVukN8rfCrDhcdaXJzG5J0/DjMm6SKoWqnRILTX+k5vBYMCLyNhXZQyyFmP1zzxILn8Z wl1pEW89yC1E3YbJKM9DTV9iYKspWIZazCAYU= Received: by 10.50.195.135 with SMTP id ie7mr6915217igc.6.1325847649372; Fri, 06 Jan 2012 03:00:49 -0800 (PST) Received: from localhost.localdomain ([125.19.39.117]) by mx.google.com with ESMTPS id 36sm212606577ibc.6.2012.01.06.03.00.44 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 06 Jan 2012 03:00:48 -0800 (PST) From: Amit Sahrawat To: Alex Elder , Ben Myers , xfs masters , xfs , linux kernel Cc: Christoph Hellwig , Dave Chinner , Amit Sahrawat Subject: [PATCH 2/2] xfs: cleanup XFS_BB_FSB_OFFSET Date: Fri, 6 Jan 2012 16:42:18 +0530 X-ASG-Orig-Subj: [PATCH 2/2] xfs: cleanup XFS_BB_FSB_OFFSET Message-Id: <1325848338-6063-1-git-send-email-amit.sahrawat83@gmail.com> X-Mailer: git-send-email 1.7.2.3 X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1325847649 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85178 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 X-Virus-Status: Clean Removing the macro, as this is no more needed in the code. Tried to find the reference when it was last used - but the usage for this seemed to have been dropped long time ago. Signed-off-by: Amit Sahrawat --- fs/xfs/xfs_sb.h | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h index cb6ae71..f429d9d 100644 --- a/fs/xfs/xfs_sb.h +++ b/fs/xfs/xfs_sb.h @@ -529,7 +529,6 @@ static inline int xfs_sb_version_hasprojid32bit(xfs_sb_t *sbp) #define XFS_BB_TO_FSB(mp,bb) \ (((bb) + (XFS_FSB_TO_BB(mp,1) - 1)) >> (mp)->m_blkbb_log) #define XFS_BB_TO_FSBT(mp,bb) ((bb) >> (mp)->m_blkbb_log) -#define XFS_BB_FSB_OFFSET(mp,bb) ((bb) & ((mp)->m_bsize - 1)) /* * File system block to byte conversions. -- 1.7.2.3 From amit.sahrawat83@gmail.com Fri Jan 6 05:02:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06B2scj014542 for ; Fri, 6 Jan 2012 05:02:54 -0600 X-ASG-Debug-ID: 1325847769-005fe612a9330550001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id hSGQYla2joCGwCUC; Fri, 06 Jan 2012 03:02:49 -0800 (PST) X-Barracuda-Envelope-From: amit.sahrawat83@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lagr15 with SMTP id r15so574502lag.26 for ; Fri, 06 Jan 2012 03:02:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=Hg1BIzWpdXBxkEZ9iEeZYRG+C7neEjsCH237nYUmUXo=; b=STSpYd6WyTvqNfvgJK/1Jfa0s2OkoGo6FwWtBGIeZS5uE9bLZBJOMNIYKk9EgcBpOg +tL8U0qu1snN9otbDQ26hBqpARDK7ijV8pc70MVRU74QR7MBbu8RS8dxadDiMNeX86/r IPGLcF7husm70dYP+d3NfKPIuKivdRc+YMrZo= MIME-Version: 1.0 Received: by 10.152.122.100 with SMTP id lr4mr2058443lab.47.1325847769014; Fri, 06 Jan 2012 03:02:49 -0800 (PST) Received: by 10.152.105.83 with HTTP; Fri, 6 Jan 2012 03:02:48 -0800 (PST) In-Reply-To: <1325848338-6063-1-git-send-email-amit.sahrawat83@gmail.com> References: <1325848338-6063-1-git-send-email-amit.sahrawat83@gmail.com> Date: Fri, 6 Jan 2012 16:32:48 +0530 Message-ID: Subject: Re: [PATCH 2/2] xfs: cleanup XFS_BB_FSB_OFFSET From: Amit Sahrawat X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: cleanup XFS_BB_FSB_OFFSET To: Alex Elder , Ben Myers , xfs masters , xfs , linux kernel Cc: Christoph Hellwig , Dave Chinner , Amit Sahrawat Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1325847769 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85178 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 X-Virus-Status: Clean Courtesy: Dave Chinner Thanks & Regards, Amit Sahrawat On Fri, Jan 6, 2012 at 4:42 PM, Amit Sahrawat w= rote: > Removing the macro, as this is no more needed in the code. > Tried to find the reference when it was last used - but the usage > for this seemed to have been dropped long time ago. > > Signed-off-by: Amit Sahrawat > --- > =A0fs/xfs/xfs_sb.h | =A0 =A01 - > =A01 files changed, 0 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h > index cb6ae71..f429d9d 100644 > --- a/fs/xfs/xfs_sb.h > +++ b/fs/xfs/xfs_sb.h > @@ -529,7 +529,6 @@ static inline int xfs_sb_version_hasprojid32bit(xfs_s= b_t *sbp) > =A0#define =A0 =A0 =A0 =A0XFS_BB_TO_FSB(mp,bb) =A0 =A0\ > =A0 =A0 =A0 =A0(((bb) + (XFS_FSB_TO_BB(mp,1) - 1)) >> (mp)->m_blkbb_log) > =A0#define =A0 =A0 =A0 =A0XFS_BB_TO_FSBT(mp,bb) =A0 ((bb) >> (mp)->m_blkb= b_log) > -#define =A0 =A0 =A0 =A0XFS_BB_FSB_OFFSET(mp,bb) ((bb) & ((mp)->m_bsize -= 1)) > > =A0/* > =A0* File system block to byte conversions. > -- > 1.7.2.3 > From jeff.liu@oracle.com Fri Jan 6 07:29:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06DTHMS023030 for ; Fri, 6 Jan 2012 07:29:17 -0600 X-ASG-Debug-ID: 1325856553-00a9eb19d33829a0001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id MXoJ3UtaVDnyS4f2 for ; Fri, 06 Jan 2012 05:29:13 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q06DT6Xx028390 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 6 Jan 2012 13:29:06 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q06DT5nn004850 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 6 Jan 2012 13:29:05 GMT Received: from abhmt105.oracle.com (abhmt105.oracle.com [141.146.116.57]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q06DT4Yv017065; Fri, 6 Jan 2012 07:29:04 -0600 Received: from [10.191.45.112] (/10.191.45.112) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 06 Jan 2012 05:29:03 -0800 Message-ID: <4F06F71A.2010301@oracle.com> Date: Fri, 06 Jan 2012 21:28:58 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: xfs@oss.sgi.com CC: Christoph Hellwig , Chris Mason Subject: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090206.4F06F723.0030,ss=1,re=-2.300,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1325856553 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85181 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hello, This is a revised patch according to Christoph's comments at V4. Changes to V5: -------------- * Revise xfs_has_unwritten_buffer() to lookup pages match tag. * For unwritten extents, in both xfs_seek_data() and xfs_seek_hole(), call xfs_has_unwritten_buffer() to search DIRTY pages firstly, if no dirty data found, call it again to search WRITEBACK pages. * In xfs_seek_hole(), if dirty data was found in page cache for an unwritten extents, but its start offset past the start block of the map, treat it as a hole, returns the offset if possible(data_buffer_offset > max(seek_offset, start_block_of_map)). Tests: ------ seek sanity tester: http://patchwork.xfs.org/patch/3108/ seek copy tester: http://patchwork.xfs.org/patch/3109/ Thanks, -Jeff Signed-off-by: Jie Liu --- fs/xfs/xfs_file.c | 466 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 465 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 753ed9b..24ae40a 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -38,6 +38,7 @@ #include #include +#include static const struct vm_operations_struct xfs_file_vm_ops; @@ -1141,8 +1142,471 @@ xfs_vm_page_mkwrite( return block_page_mkwrite(vma, vmf, xfs_get_blocks); } +/* + * Probe the data buffer offset in page cache for unwritten extents. + * Fetch all the pages match @tag, and iterate each page to find out + * if a buffer head state has BH_Unwritten or BH_Uptodate set. + */ +STATIC bool +xfs_has_unwritten_buffer( + struct inode *inode, + struct xfs_bmbt_irec *map, + int tag, + loff_t *offset) +{ + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + struct pagevec pvec; + pgoff_t index; + pgoff_t end; + bool found = false; + + pagevec_init(&pvec, 0); + + index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; + end = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount) + >> PAGE_CACHE_SHIFT; + + do { + unsigned int i; + unsigned nr_pages; + int want = min_t(pgoff_t, end - index, + (pgoff_t)PAGEVEC_SIZE - 1) + 1; + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, + &index, tag, want); + if (nr_pages == 0) + break; + + for (i = 0; i < nr_pages; i++) { + struct page *page = pvec.pages[i]; + struct buffer_head *bh; + struct buffer_head *head; + xfs_fileoff_t last; + + if (!page_has_buffers(page)) + continue; + + /* + * There is no need to check the following pages + * if the current page offset is out of range. + */ + if (page->index > end) + goto out; + + last = XFS_B_TO_FSBT(mp, + page->index << PAGE_CACHE_SHIFT); + + bh = head = page_buffers(page); + do { + /* + * An extent in XFS_EXT_UNWRITTEN have disk + * blocks already mapped to it, but no data + * has been committed to them yet. If it has + * dirty data in the page cache it can be + * identified by having BH_Unwritten set in + * each buffer. Also, the buffer head state + * might be in BH_Uptodate too if the buffer + * writeback procedure was fired, we need to + * examine it as well. + */ + if (buffer_unwritten(bh) || + buffer_uptodate(bh)) { + found = true; + *offset = XFS_FSB_TO_B(mp, last); + goto out; + } + last++; + } while ((bh = bh->b_this_page) != head); + } + + /* + * If the number of probed pages less than our desired, + * there should no more pages mapped, search done. + */ + if (nr_pages < want) + break; + + index = pvec.pages[i - 1]->index + 1; + pagevec_release(&pvec); + } while (index < end); + +out: + pagevec_release(&pvec); + if (!found) + *offset = 0; + + return found; +} + +STATIC loff_t +xfs_seek_data( + struct file *file, + loff_t start) +{ + struct inode *inode = file->f_mapping->host; + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + xfs_fsize_t isize = i_size_read(inode); + loff_t offset = 0; + struct xfs_ifork *ifp; + xfs_fileoff_t fsbno; + xfs_filblks_t len; + int lock; + int error; + + lock = xfs_ilock_map_shared(ip); + + if (start >= isize) { + error = ENXIO; + goto out_lock; + } + + fsbno = XFS_B_TO_FSBT(mp, start); + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); + len = XFS_B_TO_FSB(mp, isize); + + for (;;) { + struct xfs_bmbt_irec map[2]; + int nmap = 2; + loff_t seekoff; + + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, + XFS_BMAPI_ENTIRE); + if (error) + goto out_lock; + + /* No extents at given offset, must be beyond EOF */ + if (!nmap) { + error = ENXIO; + goto out_lock; + } + + seekoff = XFS_FSB_TO_B(mp, fsbno); + /* + * Landed in a hole, skip to check the next extent. + * If the next extent landed in an in-memory data extent, + * or it is a normal extent, its fine to return. + * If the next extent landed in a hole extent, calculate + * the start file system block number for the next scan. + * If the next extent landed in an unwritten extent, we + * need to lookup the page cache to examine the data + * buffer offset, if nothing found, treat it as a hole + * extent too. + */ + if (map[0].br_startblock == HOLESTARTBLOCK) { + /* + * Return ENXIO if no data extent behind + * the given offset. In this case, the seek + * offset should be landed in a hole. + */ + if (nmap == 1) { + error = ENXIO; + break; + } + + if (map[1].br_state == XFS_EXT_NORM || + map[1].br_startblock == DELAYSTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + + break; + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + offset = max_t(loff_t, seekoff, offset); + break; + } + } + + fsbno = map[1].br_startoff + map[1].br_blockcount; + } + + /* + * Landed in an unwritten extent, try to find out the data + * buffer offset from page cache firstly. If nothing was + * found, treat it as a hole, and skip to check the next + * extent, something just like above. + */ + if (map[0].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + offset = max_t(loff_t, seekoff, offset); + break; + } + + /* No data extent at the given offset */ + if (nmap == 1) { + error = ENXIO; + break; + } + + if (map[1].br_state == XFS_EXT_NORM || + map[1].br_startblock == DELAYSTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + offset = max_t(loff_t, seekoff, offset); + break; + } + } + + fsbno = map[1].br_startoff + map[1].br_blockcount; + } + + /* Landed in a delay allocated extent or a real data extent */ + if (map[0].br_startblock == DELAYSTARTBLOCK || + map[0].br_state == XFS_EXT_NORM) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } + + /* Return ENXIO if beyond eof */ + if (XFS_FSB_TO_B(mp, fsbno) > isize) { + error = ENXIO; + goto out_lock; + } + } + + if (offset < start) + offset = start; + + if (offset != file->f_pos) + file->f_pos = offset; + +out_lock: + xfs_iunlock_map_shared(ip, lock); + if (error) + return -error; + + return offset; +} + +STATIC loff_t +xfs_seek_hole( + struct file *file, + loff_t start) +{ + struct inode *inode = file->f_mapping->host; + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + xfs_fsize_t isize = i_size_read(inode); + loff_t offset = 0; + struct xfs_ifork *ifp; + xfs_fileoff_t fsbno; + xfs_filblks_t len; + int lock; + int error; + + lock = xfs_ilock_map_shared(ip); + + if (start >= isize) { + error = ENXIO; + goto out_lock; + } + + fsbno = XFS_B_TO_FSBT(mp, start); + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); + len = XFS_B_TO_FSB(mp, isize); + + for (;;) { + struct xfs_bmbt_irec map[2]; + int nmap = 2; + loff_t seekoff; + + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, + XFS_BMAPI_ENTIRE); + if (error) + goto out_lock; + + /* No extents at given offset, must be beyond EOF */ + if (!nmap) { + error = ENXIO; + goto out_lock; + } + + seekoff = XFS_FSB_TO_B(mp, fsbno); + /* + * Landed in an unwritten extent, try to lookup the page + * cache to find out if there is dirty data or not. If + * nothing was found, treate it as a hole. If there has + * dirty data and its offset starts past both the start + * block of the map and the current seek offset, it should + * be treated as hole too. Otherwise, go through the next + * extent to fetch holes. + */ + if (map[0].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + if (offset > max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[0].br_startoff))) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[0].br_startoff)); + break; + } + } else { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } + + /* + * No more extent at the given offst, return the total + * file size. + */ + if (nmap == 1) { + offset = isize; + break; + } + + if (map[1].br_startblock == HOLESTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + if (offset > max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[1].br_startoff))) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[1].br_startoff)); + break; + } + } else { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } + } + + fsbno = map[1].br_startoff + map[1].br_blockcount; + } + + /* + * Landed in a delay allocated extent or a real data extent, + * if the next extent is landed in a hole or in an unwritten + * extent but without data committed in the page cache, return + * its offset. If the next extent has dirty data in page cache, + * but its offset starts past both the start block of the map + * and the seek offset, it still be a hole. + */ + if (map[0].br_startblock == DELAYSTARTBLOCK || + map[0].br_state == XFS_EXT_NORM) { + /* + * No more extent at the give offset, return the + * total file size. + */ + if (nmap == 1) { + offset = isize; + break; + } + + if (map[1].br_startblock == HOLESTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[1], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + if (offset > max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[1].br_startoff))) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[1].br_startoff)); + break; + } + } else { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } + } + + fsbno = map[1].br_startoff + map[1].br_blockcount; + } + + /* Landed in a hole, its fine to return */ + if (map[0].br_startblock == HOLESTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } + + /* Return ENXIO if beyond eof */ + if (XFS_FSB_TO_B(mp, fsbno) > isize) { + error = ENXIO; + goto out_lock; + } + } + + if (offset < start) + offset = start; + + if (offset != file->f_pos) + file->f_pos = offset; + +out_lock: + xfs_iunlock_map_shared(ip, lock); + if (error) + return -error; + + return offset; +} + +STATIC loff_t +xfs_file_llseek( + struct file *file, + loff_t offset, + int origin) +{ + switch (origin) { + case SEEK_END: + case SEEK_CUR: + case SEEK_SET: + return generic_file_llseek(file, offset, origin); + case SEEK_DATA: + return xfs_seek_data(file, offset); + case SEEK_HOLE: + return xfs_seek_hole(file, offset); + default: + return -EOPNOTSUPP; + } +} + const struct file_operations xfs_file_operations = { - .llseek = generic_file_llseek, + .llseek = xfs_file_llseek, .read = do_sync_read, .write = do_sync_write, .aio_read = xfs_file_aio_read, -- 1.7.4.1 From BATV+7a168aa0d1228881f6e7+3057+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 6 09:12:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06FCw1O026910 for ; Fri, 6 Jan 2012 09:12:59 -0600 X-ASG-Debug-ID: 1325862776-005fe612a63481d0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id CXcP8wM16919HuSn; Fri, 06 Jan 2012 07:12:57 -0800 (PST) X-Barracuda-Envelope-From: BATV+7a168aa0d1228881f6e7+3057+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RjBTS-0002yw-CM; Fri, 06 Jan 2012 15:12:54 +0000 Date: Fri, 6 Jan 2012 10:12:54 -0500 From: Christoph Hellwig To: Ben Myers Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 2/2] xfs: fix endian conversion issue in discard code Message-ID: <20120106151254.GA11417@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: fix endian conversion issue in discard code References: <1324426062-21505-1-git-send-email-david@fromorbit.com> <1324426062-21505-3-git-send-email-david@fromorbit.com> <20111221043638.GR29840@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111221043638.GR29840@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1325862777 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85184 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Tue, Dec 20, 2011 at 10:36:38PM -0600, Ben Myers wrote: > On Wed, Dec 21, 2011 at 11:07:42AM +1100, Dave Chinner wrote: > > From: Dave Chinner > > > > When finding the longest extent in an AG, we read the value directly > > out of the AGF buffer without endian conversion. This will give an > > incorrect length, resulting in FITRIM operations potentially not > > trimming everything that it should. > > Looks good to me. > > > Signed-off-by: Dave Chinner > > Reviewed-by: Ben Myers This is a pretty serious thing, can you send it to Linus as soon as he takes the current pull request? From bpm@sgi.com Fri Jan 6 09:38:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06Fccjh027687 for ; Fri, 6 Jan 2012 09:38:38 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 133B88F8073; Fri, 6 Jan 2012 07:38:34 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 344DD426DA7; Fri, 6 Jan 2012 09:38:35 -0600 (CST) Date: Fri, 6 Jan 2012 09:38:35 -0600 From: Ben Myers To: Christoph Hellwig Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH 2/2] xfs: fix endian conversion issue in discard code Message-ID: <20120106153835.GL5063@sgi.com> References: <1324426062-21505-1-git-send-email-david@fromorbit.com> <1324426062-21505-3-git-send-email-david@fromorbit.com> <20111221043638.GR29840@sgi.com> <20120106151254.GA11417@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120106151254.GA11417@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Jan 06, 2012 at 10:12:54AM -0500, Christoph Hellwig wrote: > On Tue, Dec 20, 2011 at 10:36:38PM -0600, Ben Myers wrote: > > On Wed, Dec 21, 2011 at 11:07:42AM +1100, Dave Chinner wrote: > > > From: Dave Chinner > > > > > > When finding the longest extent in an AG, we read the value directly > > > out of the AGF buffer without endian conversion. This will give an > > > incorrect length, resulting in FITRIM operations potentially not > > > trimming everything that it should. > > > > Looks good to me. > > > > > Signed-off-by: Dave Chinner > > > > Reviewed-by: Ben Myers > > This is a pretty serious thing, can you send it to Linus as soon as > he takes the current pull request? yep. From tinguely@sgi.com Fri Jan 6 09:54:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_62 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06FsSI1028368 for ; Fri, 6 Jan 2012 09:54:28 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 217148F8087; Fri, 6 Jan 2012 07:54:28 -0800 (PST) Message-ID: <4F071935.9050201@sgi.com> Date: Fri, 06 Jan 2012 09:54:29 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: [PATCH] xfstests: add SEEK_DATA/SEEK_HOLE sanity checker References: <4EFB1C8D.8070405@oracle.com> In-Reply-To: <4EFB1C8D.8070405@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 12/28/11 07:41, Jeff Liu wrote: > + > +static ssize_t do_pwrite(int fd, const void *buf, size_t count, off_t > offset) > +{ > + ssize_t ret, written = 0; > + > + while (count> written) { > + ret = pwrite(fd, buf + written, count - written, offset > + written); > I believe there is a missing "-" between "offset" and "written". The patchworks version (3108) was truncated. There are some line wraps on the patch file, which give patch/quilt errors. Minor text editing. --Mark Tinguely. From bpm@sgi.com Fri Jan 6 10:58:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06GwLa0030394 for ; Fri, 6 Jan 2012 10:58:22 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 44FDEAC00B; Fri, 6 Jan 2012 08:58:18 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 68A61426DA7; Fri, 6 Jan 2012 10:58:18 -0600 (CST) Date: Fri, 6 Jan 2012 10:58:18 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/11] xfs: remove the if_ext_max field in struct xfs_ifork Message-ID: <20120106165818.GD6390@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.321997628@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200131.321997628@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Dec 18, 2011 at 03:00:07PM -0500, Christoph Hellwig wrote: > We spent a lot of effort to maintain this field, but it always equalts to the equals the > fork size divided by the constant size of an extent. The prime use of it is > to assert that the two stay in sync. Just divide the fork size by the extent > size in the few places that we actually use it and remove the overhead > of maintaining it. Also introduce a few helpers to consolidate the places > where we actually care about the value. > > Signed-off-by: Christoph Hellwig > Reviewed-by: Dave Chinner After reviewing this patch it's not crystal clear to me why we were putting all that effort into keeping this counter uptodate on the inode instead of using helpers like you've implemented. Maybe a question of integer division as Dave suggested. This is a nice improvement. > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2011-12-12 10:33:55.748696870 -0800 > +++ xfs/fs/xfs/xfs_bmap.c 2011-12-14 05:15:20.612373687 -0800 > @@ -249,7 +249,27 @@ xfs_bmbt_lookup_ge( > } > > /* > -* Update the record referred to by cur to the value given > + * Check if the inode needs to be converted to btree format. > + */ > +static inline bool xfs_bmap_needs_btree(struct xfs_inode *ip, int whichfork) > +{ > + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && > + XFS_IFORK_NEXTENTS(ip, whichfork) > > + XFS_IFORK_MAXEXT(ip, whichfork); > +} > + > +/* > + * Check if the inode should be converted to extent format. > + */ > +static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork) > +{ > + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE && > + XFS_IFORK_NEXTENTS(ip, whichfork) <= > + XFS_IFORK_MAXEXT(ip, whichfork); > +} The logic in these two appears to be equivalent to the code you've replaced in all but one case... ... > @@ -5321,8 +5318,7 @@ xfs_bunmapi( > * will be dirty. > */ > if (!wasdel && xfs_trans_get_block_res(tp) == 0 && > - XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && > - XFS_IFORK_NEXTENTS(ip, whichfork) >= ifp->if_ext_max && ^^ All other tests for this were: XFS_IFORK_NEXTENTS(ip, whichfork) > ifp->if_ext_max Did you just fix a lurking off-by-one or insert one? xfs_bmap_needs_btree needs ip->i_d.di_nextents to have been incremented already in order to detect that we need to convert to btree format. In this case we haven't done that yet and are checking to see if doing so would require conversion to btree format... Looks to me like we can't use xfs_bmap_needs_btree here and should use the old logic. Right? > + xfs_bmap_needs_btree(ip, whichfork) && > del.br_startoff > got.br_startoff && > del.br_startoff + del.br_blockcount < > got.br_startoff + got.br_blockcount) { ... > @@ -180,18 +182,25 @@ xfs_swap_extents_check_format( > * (a common defrag case) which will occur when the temp inode is in > * extent format... > */ > - if (tip->i_d.di_format == XFS_DINODE_FMT_BTREE && > - ((XFS_IFORK_BOFF(ip) && > - tip->i_df.if_broot_bytes > XFS_IFORK_BOFF(ip)) || > - XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) <= ip->i_df.if_ext_max)) > - return EINVAL; > + if (tip->i_d.di_format == XFS_DINODE_FMT_BTREE) { > + if (XFS_IFORK_BOFF(ip) && > + tip->i_df.if_broot_bytes > XFS_IFORK_BOFF(ip)) > + return EINVAL; > + if (XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) <= > + XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) > + return EINVAL; > + } > > /* Reciprocal target->temp btree format checks */ > - if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE && > - ((XFS_IFORK_BOFF(tip) && > - ip->i_df.if_broot_bytes > XFS_IFORK_BOFF(tip)) || > - XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <= tip->i_df.if_ext_max)) > - return EINVAL; > + if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE) { > + if (XFS_IFORK_BOFF(tip) && > + ip->i_df.if_broot_bytes > XFS_IFORK_BOFF(tip)) > + return EINVAL; > + > + if (XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <= > + XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK)) > + return EINVAL; > + } Good readability improvement. -Ben From bpm@oss.sgi.com Fri Jan 6 13:11:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06JBD3u035635 for ; Fri, 6 Jan 2012 13:11:13 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q06JBDv7035604; Fri, 6 Jan 2012 13:11:13 -0600 Date: Fri, 6 Jan 2012 13:11:13 -0600 Message-Id: <201201061911.q06JBDv7035604@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-34-gb1c770c X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 40d344ec5ee440596b1f3ae87556e20c7197757a X-Git-Newrev: b1c770c273a4787069306fc82aab245e9ac72e9d This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated b1c770c xfs: fix endian conversion issue in discard code from 40d344ec5ee440596b1f3ae87556e20c7197757a (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 b1c770c273a4787069306fc82aab245e9ac72e9d Author: Dave Chinner Date: Wed Dec 21 00:07:42 2011 +0000 xfs: fix endian conversion issue in discard code When finding the longest extent in an AG, we read the value directly out of the AGF buffer without endian conversion. This will give an incorrect length, resulting in FITRIM operations potentially not trimming everything that it should. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_discard.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) hooks/post-receive -- XFS development tree From wkendall@sgi.com Fri Jan 6 14:09:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06K9WqO038335 for ; Fri, 6 Jan 2012 14:09:32 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id D37F5AC006; Fri, 6 Jan 2012 12:09:28 -0800 (PST) Received: from augusta (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id 83EF27001845; Fri, 6 Jan 2012 14:09:28 -0600 (CST) Received: by augusta (Postfix, from userid 2022) id 4491422B2F89; Fri, 6 Jan 2012 14:09:28 -0600 (CST) From: Bill Kendall To: xfs@oss.sgi.com Cc: Bill Kendall Subject: [PATCH] xfsdump: use the full 32-bit generation number Date: Fri, 6 Jan 2012 14:09:25 -0600 Message-Id: <1325880565-20934-1-git-send-email-wkendall@sgi.com> X-Mailer: git-send-email 1.7.0.4 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfsdump historically has truncated the inode generation number to the low 12 bits when writing out directory entries. This makes it possible for xfsrestore to mistakingly think 2 directory entries refer to the same inode when dealing with incremental or resumed dumps. A message such as this is an indication of this problem: xfsrestore: WARNING: unable to unlink current file prior to restore This patch changes xfsdump to use the full 32-bit inode generation number. A change to part of the dump format (direnthdr_t) was required, so the dump format version has been bumped to 3. xfsdump also required changes to its inode-to-generation cache. This map is not persistent though, so no compatibility or version changes were required there. xfsrestore has been changed to support the old and new dump formats. This required a change to its persistent data structures (for cumulative restores), so that version number was bumped as well. When restoring a series of incremental/resumed dumps, if the oldest restore used 12-bit generation numbers then they will be used throughout the restore series to avoid mass confusion. It's recommended that users do a level 0 backup of their filesystems with the new xfsdump so that future incremental restores can take advantage of the full 32-bit generation number. Signed-off-by: Bill Kendall --- common/arch_xlate.c | 54 +++++++++++++++++++++++++++++++++++--- common/arch_xlate.h | 5 +++ common/content_inode.h | 20 ++++++++++++-- common/global.c | 1 + common/global.h | 7 +++-- dump/content.c | 11 +++---- dump/inomap.c | 45 ++++++------------------------- dump/inomap.h | 2 +- restore/content.c | 27 +++++++++++++++--- restore/tree.c | 68 ++++++++++++++++++++++++++++++++++++----------- restore/tree.h | 7 +++-- 11 files changed, 170 insertions(+), 77 deletions(-) diff --git a/common/arch_xlate.c b/common/arch_xlate.c index 1c7e880..c156313 100644 --- a/common/arch_xlate.c +++ b/common/arch_xlate.c @@ -438,8 +438,8 @@ xlate_direnthdr(direnthdr_t *dh1, direnthdr_t *dh2, int dir) IXLATE(dh1, dh2, dh_ino); IXLATE(dh1, dh2, dh_gen); - IXLATE(dh1, dh2, dh_sz); IXLATE(dh1, dh2, dh_checksum); + IXLATE(dh1, dh2, dh_sz); if (dir < 0) { ptr1 = dh2; @@ -450,7 +450,53 @@ xlate_direnthdr(direnthdr_t *dh1, direnthdr_t *dh2, int dir) mlog(MLOG_NITTY, "xlate_direnthdr: pre-xlate\n" "\tdh_ino %llu\n" - "\tdh_gen %d\n" + "\tdh_gen %u\n" + "\tdh_checksum %d\n" + "\tdh_sz %d\n" + "\tdh_name %.8s\n", + ptr1->dh_ino, + ptr1->dh_gen, + ptr1->dh_checksum, + ptr1->dh_sz, + ptr1->dh_name ); + + mlog(MLOG_NITTY, "xlate_direnthdr: post-xlate\n" + "\tdh_ino %llu\n" + "\tdh_gen %u\n" + "\tdh_checksum %d\n" + "\tdh_sz %d\n" + "\tdh_name %.8s\n", + ptr2->dh_ino, + ptr2->dh_gen, + ptr2->dh_checksum, + ptr2->dh_sz, + ptr2->dh_name ); +} + +/* + * xlate_direnthdr_v1 - endian convert struct direnthdr_v1 + */ +void +xlate_direnthdr_v1(direnthdr_v1_t *dh1, direnthdr_v1_t *dh2, int dir) +{ + direnthdr_v1_t *ptr1 = dh1; + direnthdr_v1_t *ptr2 = dh2; + + IXLATE(dh1, dh2, dh_ino); + IXLATE(dh1, dh2, dh_gen); + IXLATE(dh1, dh2, dh_sz); + IXLATE(dh1, dh2, dh_checksum); + + if (dir < 0) { + ptr1 = dh2; + ptr2 = dh1; + } + + BXLATE(dh_name); + + mlog(MLOG_NITTY, "xlate_direnthdr_v1: pre-xlate\n" + "\tdh_ino %llu\n" + "\tdh_gen %u\n" "\tdh_sz %d\n" "\tdh_checksum %d\n" "\tdh_name %.8s\n", @@ -460,9 +506,9 @@ xlate_direnthdr(direnthdr_t *dh1, direnthdr_t *dh2, int dir) ptr1->dh_checksum, ptr1->dh_name ); - mlog(MLOG_NITTY, "xlate_direnthdr: post-xlate\n" + mlog(MLOG_NITTY, "xlate_direnthdr_v1: post-xlate\n" "\tdh_ino %llu\n" - "\tdh_gen %d\n" + "\tdh_gen %u\n" "\tdh_sz %d\n" "\tdh_checksum %d\n" "\tdh_name %.8s\n", diff --git a/common/arch_xlate.h b/common/arch_xlate.h index 3ad3c97..35333c6 100644 --- a/common/arch_xlate.h +++ b/common/arch_xlate.h @@ -98,6 +98,11 @@ void xlate_extenthdr(extenthdr_t *eh1, extenthdr_t *eh2, int dir); void xlate_direnthdr(direnthdr_t *dh1, direnthdr_t *dh2, int dir); /* + * xlate_direnthdr_v1 - endian convert struct direnthdr_v1 + */ +void xlate_direnthdr_v1(direnthdr_v1_t *dh1, direnthdr_v1_t *dh2, int dir); + +/* * xlate_extattrhdr - endian convert struct extattrhdr */ void xlate_extattrhdr(extattrhdr_t *eh1, extattrhdr_t *eh2, int dir); diff --git a/common/content_inode.h b/common/content_inode.h index 67c4f6d..a25b66e 100644 --- a/common/content_inode.h +++ b/common/content_inode.h @@ -284,26 +284,40 @@ typedef struct extenthdr extenthdr_t; * a sequence of directory entries is always terminated with a null direnthdr_t. * this is detected by looking for a zero ino. */ +typedef u_int32_t gen_t; + #define DIRENTHDR_ALIGN 8 #define DIRENTHDR_SZ 24 struct direnthdr { xfs_ino_t dh_ino; + gen_t dh_gen; + u_int32_t dh_checksum; + u_int16_t dh_sz; /* overall size of record */ + char dh_name[ 6 ]; +}; + +typedef struct direnthdr direnthdr_t; + +/* the old direnthdr truncated the inode generation number + * to the low 12 bits. + */ + +struct direnthdr_v1 { + xfs_ino_t dh_ino; u_int16_t dh_gen; /* generation count & DENTGENMASK of ref'ed inode */ u_int16_t dh_sz; /* overall size of record */ u_int32_t dh_checksum; char dh_name[ 8 ]; }; -typedef struct direnthdr direnthdr_t; +typedef struct direnthdr_v1 direnthdr_v1_t; /* truncated generation count */ #define DENTGENSZ 12 /* leave 4 bits for future flags */ #define DENTGENMASK (( 1 << DENTGENSZ ) - 1 ) -typedef u_int16_t gen_t; -#define GEN_NULL ( ( gen_t )UINT16MAX ) #define BIGGEN2GEN( bg ) ( ( gen_t )( bg & DENTGENMASK )) diff --git a/common/global.c b/common/global.c index 737b731..baa13fe 100644 --- a/common/global.c +++ b/common/global.c @@ -276,6 +276,7 @@ global_version_check( u_int32_t version ) case GLOBAL_HDR_VERSION_0: case GLOBAL_HDR_VERSION_1: case GLOBAL_HDR_VERSION_2: + case GLOBAL_HDR_VERSION_3: return BOOL_TRUE; default: return BOOL_FALSE; diff --git a/common/global.h b/common/global.h index ea2b732..6556a68 100644 --- a/common/global.h +++ b/common/global.h @@ -27,13 +27,14 @@ #define GLOBAL_HDR_VERSION_0 0 #define GLOBAL_HDR_VERSION_1 1 #define GLOBAL_HDR_VERSION_2 2 - /* version 2 adds encoding of holes and a change to on-tape inventory format. +#define GLOBAL_HDR_VERSION_3 3 + /* version 3 uses the full 32-bit inode generation number in direnthdr_t. + * version 2 adds encoding of holes and a change to on-tape inventory format. * version 1 adds extended file attribute dumping. * version 0 xfsrestore can't handle media produced * by version 1 xfsdump. */ -#define GLOBAL_HDR_VERSION GLOBAL_HDR_VERSION_2 -#define GLOBAL_HDR_VERSION_PREV 1 +#define GLOBAL_HDR_VERSION GLOBAL_HDR_VERSION_3 #define GLOBAL_HDR_STRING_SZ 0x100 #define GLOBAL_HDR_TIME_SZ 4 diff --git a/dump/content.c b/dump/content.c index 3a7f508..20d6497 100644 --- a/dump/content.c +++ b/dump/content.c @@ -290,7 +290,7 @@ static rv_t dump_dirent( drive_t *drivep, context_t *contextp, xfs_bstat_t *, xfs_ino_t, - u_int32_t, + gen_t, char *, size_t ); static rv_t init_extent_group_context( jdm_fshandle_t *, @@ -2902,7 +2902,7 @@ dump_dir( ix_t strmix, struct dirent *gdp = ( struct dirent *)contextp->cc_getdentsbufp; size_t gdsz = contextp->cc_getdentsbufsz; intgen_t gdcnt; - u_int32_t gen; + gen_t gen; rv_t rv; /* no way this can be non-dir, but check anyway @@ -3073,8 +3073,7 @@ dump_dir( ix_t strmix, /* lookup the gen number in the ino-to-gen map. * if it's not there, we have to get it the slow way. */ - gen = inomap_get_gen( NULL, p->d_ino ); - if (gen == GEN_NULL) { + if ( inomap_get_gen( NULL, p->d_ino, &gen) ) { xfs_bstat_t statbuf; intgen_t scrval; @@ -5045,7 +5044,7 @@ dump_dirent( drive_t *drivep, context_t *contextp, xfs_bstat_t *statp, xfs_ino_t ino, - u_int32_t gen, + gen_t gen, char *name, size_t namelen ) { @@ -5083,8 +5082,8 @@ dump_dirent( drive_t *drivep, memset( ( void * )dhdrp, 0, sz ); dhdrp->dh_ino = ino; + dhdrp->dh_gen = gen; dhdrp->dh_sz = ( u_int16_t )sz; - dhdrp->dh_gen = ( u_int16_t )( gen & DENTGENMASK ); if ( name ) { strcpy( dhdrp->dh_name, name ); diff --git a/dump/inomap.c b/dump/inomap.c index aa4f59d..9b385ec 100644 --- a/dump/inomap.c +++ b/dump/inomap.c @@ -940,18 +940,11 @@ cb_startpt( void *arg1, /* map context and operators */ -/* define structure for ino to gen mapping. Allocate 12 bits for the gen - * instead of the 32-bit gen that XFS uses, as xfsdump currently truncates - * the gen to 12 bits. +/* define structure for ino to gen mapping. */ -#if DENTGENSZ != 12 -#error DENTGENSZ has changed. i2gseg_t and its users must be updated. -#endif - struct i2gseg { u_int64_t s_valid; - u_char_t s_lower[ INOPERSEG ]; - u_char_t s_upper[ INOPERSEG / 2 ]; + gen_t s_gen[ INOPERSEG ]; }; typedef struct i2gseg i2gseg_t; @@ -1382,51 +1375,31 @@ inomap_set_gen(void *contextp, xfs_ino_t ino, gen_t gen) relino = ino - segp->base; i2gsegp->s_valid |= (u_int64_t)1 << relino; - i2gsegp->s_lower[ relino ] = ( u_char_t )( gen & 0xff ); - if ( relino & 1 ) { - /* odd, goes in high nibble */ - i2gsegp->s_upper[relino / 2] &= ( u_char_t )( 0x0f ); - i2gsegp->s_upper[relino / 2] |= - ( u_char_t )( ( gen >> 4 ) & 0xf0 ); - } else { - /* even, goes in low nibble */ - i2gsegp->s_upper[ relino / 2 ] &= ( u_char_t )( 0xf0 ); - i2gsegp->s_upper[ relino / 2 ] |= - ( u_char_t )( ( gen >> 8 ) & 0x0f ); - } + i2gsegp->s_gen[relino] = gen; } -gen_t -inomap_get_gen( void *contextp, xfs_ino_t ino ) +intgen_t +inomap_get_gen( void *contextp, xfs_ino_t ino, gen_t *gen ) { seg_addr_t *addrp; seg_addr_t addr; seg_t *segp; i2gseg_t *i2gsegp; xfs_ino_t relino; - gen_t gen; addrp = contextp ? (seg_addr_t *)contextp : &addr; if ( !inomap_find_seg( addrp, ino ) ) - return GEN_NULL; + return 1; segp = inomap_addr2seg( addrp ); i2gsegp = &inomap.i2gmap[inomap_addr2segix( addrp )]; relino = ino - segp->base; if ( ! (i2gsegp->s_valid & ((u_int64_t)1 << relino)) ) - return GEN_NULL; - - gen = i2gsegp->s_lower[relino]; - if (relino & 1) { - /* odd, rest of gen in high nibble */ - gen |= ( (gen_t)i2gsegp->s_upper[relino / 2] & 0xf0 ) << 4; - } else { - /* even, rest of gen in low nibble */ - gen |= ( (gen_t)i2gsegp->s_upper[relino / 2] & 0x0f ) << 8; - } + return 1; - return gen; + *gen = i2gsegp->s_gen[relino]; + return 0; } void diff --git a/dump/inomap.h b/dump/inomap.h index 16f2efb..7d1db1f 100644 --- a/dump/inomap.h +++ b/dump/inomap.h @@ -132,7 +132,7 @@ extern void *inomap_alloc_context( void ); extern void inomap_reset_context( void *contextp ); extern void inomap_free_context( void *contextp ); extern intgen_t inomap_get_state( void *contextp, xfs_ino_t ino ); -extern gen_t inomap_get_gen( void *contextp, xfs_ino_t ino ); +extern intgen_t inomap_get_gen( void *contextp, xfs_ino_t ino, gen_t *gen ); /* generators returning the next dir or non-dir ino selected in this dump. diff --git a/restore/content.c b/restore/content.c index a9e0b20..b2a3071 100644 --- a/restore/content.c +++ b/restore/content.c @@ -73,8 +73,10 @@ #define HOUSEKEEPING_MAGIC 0x686b6d61 /* "hkma" - see the housekeeping_magic field of pers_t below. */ -#define HOUSEKEEPING_VERSION 1 +#define HOUSEKEEPING_VERSION 2 /* see the housekeeping_version field of pers_t below. + * version 2 changed the size of a gen_t, which caused node_t + * to change in size. also p_truncategenpr was added to treepers_t. */ #define WRITE_TRIES_MAX 3 @@ -2328,7 +2330,8 @@ content_stream_restore( ix_t thrdix ) tranp->t_vmsz, fullpr, persp->a.restoredmpr, - persp->a.dstdirisxfspr ); + persp->a.dstdirisxfspr, + grhdrp->gh_version ); if ( ! ok ) { Media_end( Mediap ); return mlog_exit(EXIT_ERROR, RV_ERROR); @@ -3071,7 +3074,7 @@ applydirdump( drive_t *drivep, */ rv = tree_addent( dirh, dhdrp->dh_ino, - ( size_t )dhdrp->dh_gen, + dhdrp->dh_gen, dhdrp->dh_name, namelen ); if ( rv != RV_OK ) { @@ -8109,11 +8112,13 @@ read_dirent( drive_t *drivep, size_t direntbufsz, bool_t dhcs ) { + global_hdr_t *grhdrp = drivep->d_greadhdrp; drive_ops_t *dop = drivep->d_opsp; /* REFERENCED */ intgen_t nread; intgen_t rval; direnthdr_t tmpdh; + char *namep; // beginning of name following the direnthdr_t /* read the head of the dirent */ @@ -8124,7 +8129,19 @@ read_dirent( drive_t *drivep, ( rrbfp_t ) dop->do_return_read_buf, &rval ); - xlate_direnthdr(&tmpdh, dhdrp, 1); + if ( grhdrp->gh_version >= GLOBAL_HDR_VERSION_3 ) { + xlate_direnthdr(&tmpdh, dhdrp, 1); + namep = dhdrp->dh_name + sizeof(dhdrp->dh_name); + } else { + direnthdr_v1_t dhdr_v1; + xlate_direnthdr_v1((direnthdr_v1_t *)&tmpdh, &dhdr_v1, 1); + dhdrp->dh_ino = dhdr_v1.dh_ino; + dhdrp->dh_gen = BIGGEN2GEN(dhdr_v1.dh_gen); + dhdrp->dh_checksum = dhdr_v1.dh_checksum; + dhdrp->dh_sz = dhdr_v1.dh_sz; + memcpy(dhdrp->dh_name, dhdr_v1.dh_name, sizeof(dhdr_v1.dh_name)); + namep = dhdrp->dh_name + sizeof(dhdr_v1.dh_name); + } switch( rval ) { case 0: @@ -8177,7 +8194,7 @@ read_dirent( drive_t *drivep, ASSERT( ! ( ( size_t )dhdrp->dh_sz & ( DIRENTHDR_ALIGN - 1 ))); if ( ( size_t )dhdrp->dh_sz > sizeof( direnthdr_t )) { size_t remsz = ( size_t )dhdrp->dh_sz - sizeof( direnthdr_t ); - nread = read_buf( ( char * )( dhdrp + 1 ), + nread = read_buf( namep, remsz, ( void * )drivep, ( rfp_t )dop->do_read, diff --git a/restore/tree.c b/restore/tree.c index 9e4e83c..afe7042 100644 --- a/restore/tree.c +++ b/restore/tree.c @@ -102,6 +102,10 @@ struct treePersStorage { bool_t p_restoredmpr; /* restore DMI event settings */ + bool_t p_truncategenpr; + /* truncate inode generation number (for compatibility + * with xfsdump format 2 and earlier) + */ }; typedef struct treePersStorage treepers_t; @@ -163,7 +167,7 @@ typedef struct tran tran_t; /* node structure. each node represents a directory entry */ -#define NODESZ 48 +#define NODESZ 56 struct node { xfs_ino_t n_ino; /* 8 8 ino */ @@ -175,9 +179,10 @@ struct node { nh_t n_sibprevh; /* 4 36 prev sibling list - dbl link list */ nh_t n_cldh; /* 4 40 children list */ nh_t n_lnkh; /* 4 44 hard link list */ - gen_t n_gen; /* 2 46 generation count mod 0x10000 */ - u_char_t n_flags; /* 1 47 action and state flags */ - u_char_t n_nodehkbyte; /* 1 48 given to node abstraction */ + gen_t n_gen; /* 4 48 generation count mod 0x10000 */ + u_char_t n_flags; /* 1 49 action and state flags */ + u_char_t n_nodehkbyte; /* 1 50 given to node abstraction */ + char n_pad[6]; /* 6 56 */ }; typedef struct node node_t; @@ -335,7 +340,8 @@ tree_init( char *hkdir, size64_t vmsz, bool_t fullpr, bool_t restoredmpr, - bool_t dstdirisxfspr ) + bool_t dstdirisxfspr, + u_int32_t dumpformat ) { off64_t nodeoff; char *perspath; @@ -496,6 +502,17 @@ tree_init( char *hkdir, */ persp->p_restoredmpr = restoredmpr; + /* record if truncated generation numbers are required + */ + if ( dumpformat < GLOBAL_HDR_VERSION_3 ) { + persp->p_truncategenpr = BOOL_TRUE; + mlog( MLOG_NORMAL | MLOG_DEBUG | MLOG_TREE, _( + "dump format version %u used truncated inode generation numbers\n"), + dumpformat ); + } else { + persp->p_truncategenpr = BOOL_FALSE; + } + return BOOL_TRUE; } @@ -596,6 +613,15 @@ tree_sync( char *hkdir, */ persp->p_fullpr = fullpr; + /* regardless of the format of this dump, if the previously applied + * dump used truncated generation numbers, then we need to as well. + */ + if ( persp->p_truncategenpr ) { + mlog( MLOG_NORMAL | MLOG_DEBUG | MLOG_TREE, _( + "using truncated inode generation numbers for " + "compatibility with previously applied restore\n") ); + } + /* rsynchronize with the hash abstraction. it will map more of the * persistent state file. */ @@ -682,10 +708,13 @@ tree_begindir( filehdr_t *fhdrp, dah_t *dahp ) { nh_t hardh; xfs_ino_t ino = fhdrp->fh_stat.bs_ino; - u_int32_t biggen = fhdrp->fh_stat.bs_gen; - gen_t gen = BIGGEN2GEN( biggen ); + gen_t gen = fhdrp->fh_stat.bs_gen; dah_t dah; + if ( persp->p_truncategenpr ) { + gen = BIGGEN2GEN( gen ); + } + /* sanity check - orphino is supposed to be an unused ino! */ ASSERT( ino != orphino ); @@ -708,7 +737,7 @@ tree_begindir( filehdr_t *fhdrp, dah_t *dahp ) "upgrading to dir\n", ino, gen, - biggen ); + fhdrp->fh_stat.bs_gen ); if ( ! tranp->t_toconlypr ) { ASSERT( hardp->n_dah == DAH_NULL ); hardp->n_dah = dirattr_add( fhdrp ); @@ -721,7 +750,7 @@ tree_begindir( filehdr_t *fhdrp, dah_t *dahp ) "updating\n", ino, gen, - biggen ); + fhdrp->fh_stat.bs_gen ); hardp->n_dah = dirattr_add( fhdrp ); } else { /* case 3: already has dirattr; must be restart @@ -731,7 +760,7 @@ tree_begindir( filehdr_t *fhdrp, dah_t *dahp ) "retaining\n", ino, gen, - biggen ); + fhdrp->fh_stat.bs_gen ); } hardp->n_flags |= NF_ISDIR; hardp->n_flags |= NF_DUMPEDDIR; @@ -745,7 +774,7 @@ tree_begindir( filehdr_t *fhdrp, dah_t *dahp ) "new\n", ino, gen, - biggen ); + fhdrp->fh_stat.bs_gen ); if ( ! tranp->t_toconlypr ) { dah = dirattr_add( fhdrp ); } else { @@ -767,11 +796,14 @@ tree_begindir( filehdr_t *fhdrp, dah_t *dahp ) } rv_t -tree_addent( nh_t parh, xfs_ino_t ino, size_t g, char *name, size_t namelen ) +tree_addent( nh_t parh, xfs_ino_t ino, gen_t gen, char *name, size_t namelen ) { - gen_t gen = BIGGEN2GEN( g ); nh_t hardh; + if ( persp->p_truncategenpr ) { + gen = BIGGEN2GEN( gen ); + } + /* sanity check - orphino is supposed to be an unused ino! */ ASSERT( ino != orphino ); @@ -1677,7 +1709,7 @@ rename_dirs( nh_t cldh, */ rv_t tree_cb_links( xfs_ino_t ino, - u_int32_t biggen, + gen_t gen, int32_t ctime, int32_t mtime, bool_t ( * funcp )( void *contextp, @@ -1688,13 +1720,16 @@ tree_cb_links( xfs_ino_t ino, char *path1, char *path2 ) { - gen_t gen = BIGGEN2GEN( biggen ); nh_t hardh; nh_t nh; char *path; bool_t ok; int rval; + if ( persp->p_truncategenpr ) { + gen = BIGGEN2GEN( gen ); + } + /* find the hardhead */ hardh = link_hardh( ino, gen ); @@ -1887,7 +1922,7 @@ tree_cb_links( xfs_ino_t ino, "ino %llu gen %u not referenced: " "placing in orphanage\n"), ino, - biggen ); + gen ); nh = Node_alloc( ino, gen, NRH_NULL, @@ -3357,6 +3392,7 @@ Node_alloc( xfs_ino_t ino, gen_t gen, nrh_t nrh, dah_t dah, size_t flags ) np->n_lnkh = NH_NULL; np->n_gen = gen; np->n_flags = ( u_char_t )flags; + memset(np->n_pad, 0, sizeof(np->n_pad)); Node_unmap( nh, &np ); return nh; } diff --git a/restore/tree.h b/restore/tree.h index 93621c7..29d1033 100644 --- a/restore/tree.h +++ b/restore/tree.h @@ -32,7 +32,8 @@ extern bool_t tree_init( char *hkdir, size64_t vmsz, bool_t fullpr, bool_t restoredmpr, - bool_t dstdirisxfspr ); + bool_t dstdirisxfspr, + u_int32_t dumpformat ); /* tree_sync - synchronizes with an existing tree abstraction */ @@ -53,7 +54,7 @@ extern nh_t tree_begindir( filehdr_t *fhdrp, dah_t *dahp ); */ extern rv_t tree_addent( nh_t dirh, xfs_ino_t ino, - size_t gen, + gen_t gen, char *name, size_t namelen ); @@ -84,7 +85,7 @@ extern bool_t tree_subtree_parse( bool_t sensepr, char *path ); extern bool_t tree_post( char *path1, char *path2 ); extern rv_t tree_cb_links( xfs_ino_t ino, - u_int32_t biggen, + gen_t gen, int32_t ctime, int32_t mtime, bool_t ( * funcp )( void *contextp, -- 1.7.0.4 From wkendall@sgi.com Fri Jan 6 14:52:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q06Kq1Jw039885 for ; Fri, 6 Jan 2012 14:52:02 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2AF8230404E; Fri, 6 Jan 2012 12:51:58 -0800 (PST) Received: from augusta (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id 1456C7000759; Fri, 6 Jan 2012 14:51:58 -0600 (CST) Received: by augusta (Postfix, from userid 2022) id C9AF522B2F99; Fri, 6 Jan 2012 14:51:57 -0600 (CST) From: Bill Kendall To: xfs@oss.sgi.com Cc: Bill Kendall Subject: [PATCH] xfsdump: fix restore of ext attrs on root directory Date: Fri, 6 Jan 2012 14:51:56 -0600 Message-Id: <1325883116-21990-1-git-send-email-wkendall@sgi.com> X-Mailer: git-send-email 1.7.0.4 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfsrestore fails to restore extended attributes on the root directory because Node2path(), which returns a pathname relative to the restore root, returns an empty string instead of ".". Signed-off-by: Bill Kendall --- restore/tree.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/restore/tree.c b/restore/tree.c index afe7042..bb5df06 100644 --- a/restore/tree.c +++ b/restore/tree.c @@ -3450,7 +3450,7 @@ static bool_t Node2path( nh_t nh, char *path, char *errmsg ) { intgen_t remainingcnt; - path[ 0 ] = 0; /* in case root node passed in */ + strcpy(path, "."); /* in case root node passed in */ remainingcnt = Node2path_recurse( nh, path, MAXPATHLEN, 0 ); if ( remainingcnt <= 0 ) { node_t *np = Node_map( nh ); -- 1.7.0.4 From davidb@davidb.org Sat Jan 7 18:58:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q080wTcJ147357 for ; Sat, 7 Jan 2012 18:58:29 -0600 X-ASG-Debug-ID: 1325984306-00a9eb19d64daa10001-NocioJ Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by cuda.sgi.com with ESMTP id 2nCxBPHYeZWEV26J for ; Sat, 07 Jan 2012 16:58:27 -0800 (PST) X-Barracuda-Envelope-From: davidb@davidb.org X-Barracuda-Apparent-Source-IP: 66.111.4.29 Received: from compute1.internal (compute1.nyi.mail.srv.osa [10.202.2.41]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id BF9E022655 for ; Sat, 7 Jan 2012 19:58:25 -0500 (EST) Received: from frontend2.nyi.mail.srv.osa ([10.202.2.161]) by compute1.internal (MEProxy); Sat, 07 Jan 2012 19:58:25 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:cc:subject:message-id :references:mime-version:content-type:in-reply-to; s=smtpout; bh=/doVd7HDlGjBvIBWS9/uWgca7eM=; b=ZyC7aAWhoySywYhcZB+eHYCYvSP4 1DEYyZynpZEcxpBPatNtO3XTd02iiLszU6PTNGnXOr7jmqSdTAZ8CTSJI3eipksX j5Yfk1F3IbVji0sbhh2Vjq0Sa7/1RpFx+2jGwBbPYFLB+8buR14WeUYrGUl9vjzS d3hoPIUwCUR5p0Y= X-Sasl-enc: 4k0qHQqdFjQ/tsHoybT0aHdWTUuPeEreZgUCXjONtLm4 1325984305 Received: from davidb.org (dweb.davidb.org [173.255.246.16]) by mail.messagingengine.com (Postfix) with ESMTPSA id 53AC0482537; Sat, 7 Jan 2012 19:58:25 -0500 (EST) Date: Sat, 7 Jan 2012 16:58:23 -0800 From: David Brown To: Bill Kendall Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsdump: use the full 32-bit generation number Message-ID: <20120108005822.GA32313@davidb.org> X-ASG-Orig-Subj: Re: [PATCH] xfsdump: use the full 32-bit generation number References: <1325880565-20934-1-git-send-email-wkendall@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <1325880565-20934-1-git-send-email-wkendall@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: out5-smtp.messagingengine.com[66.111.4.29] X-Barracuda-Start-Time: 1325984307 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85309 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 X-Virus-Status: Clean On Fri, Jan 06, 2012 at 02:09:25PM -0600, Bill Kendall wrote: >This patch changes xfsdump to use the full 32-bit inode generation number. >A change to part of the dump format (direnthdr_t) was required, so the >dump format version has been bumped to 3. xfsdump also required changes to >its inode-to-generation cache. This map is not persistent though, so no >compatibility or version changes were required there. I suspect that this does fix the problem. Since the fix is in the dump, not just restore, I guess I'll just have to start with a fresh level 0 and see if the failure ever happens again upon restore. Thanks, David From mujeeb.adil@gmail.com Mon Jan 9 00:52:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q096qZpd237340 for ; Mon, 9 Jan 2012 00:52:35 -0600 X-ASG-Debug-ID: 1326091953-005fe612a75108e0001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id P3BbtWCoTexR6sdv for ; Sun, 08 Jan 2012 22:52:33 -0800 (PST) X-Barracuda-Envelope-From: mujeeb.adil@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iakk12 with SMTP id k12so7120079iak.26 for ; Sun, 08 Jan 2012 22:52:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=LeQvDuTi2/nZp22ZLjx6hiiYcECW6oUuUw+McTv9T1A=; b=efBDSr3Dq1cM8WQz/LmL+MjKzDp4BvaVcxPeLex7wx5g5BQVterl7wefFU0NveHxD5 Fwj7CmdrRSj9MLXGLdLLFOcvoWNk6dpN288lvqHrNr7OUiQqm1nxhco6vqhMT1py0TxP Czm9HarEqksjSCWPyDTeUvbwf9lKojV3CF3n8= MIME-Version: 1.0 Received: by 10.43.47.135 with SMTP id us7mr14366216icb.31.1326091953663; Sun, 08 Jan 2012 22:52:33 -0800 (PST) Received: by 10.42.225.10 with HTTP; Sun, 8 Jan 2012 22:52:33 -0800 (PST) Date: Mon, 9 Jan 2012 12:22:33 +0530 Message-ID: Subject: Cyclic Code? From: Adil Mujeeb X-ASG-Orig-Subj: Cyclic Code? To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=bcaec52e6013d66cd204b612d7f4 X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1326091953 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85430 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Status: Clean --bcaec52e6013d66cd204b612d7f4 Content-Type: text/plain; charset=ISO-8859-1 Hi list, i am new to XFS. I was going through XFS code (2.4 based) for study purpose. Its old but assuming its bit simple as compare to latest one. Moreover the XFS code / design structure documents available on the internet is 2.4 based. The following code snippet is not clear to me (seems cyclic): --------- ... ... #define XFS_IFORK_NEXTENTS(ip,w) xfs_ifork_nextents(ip,w) ... xfs_ifork_nextents(xfs_inode_t *ip, int w) { return XFS_IFORK_NEXTENTS(ip, w); } ... ... #define XFS_IFORK_NEXTENTS(ip,w) XFS_CFORK_NEXTENTS(&ip->i_d, w) ... #define XFS_CFORK_NEXTENTS(dcp,w) xfs_cfork_nextents(dcp,w) ... int xfs_cfork_nextents(xfs_dinode_core_t *dcp, int w) { return XFS_CFORK_NEXTENTS(dcp, w); } ---- Am i missing something? Thanks, Adil --bcaec52e6013d66cd204b612d7f4 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi list,

i am new to XFS.

I was going through XFS code (2.4 based) for study purpose. Its old b= ut assuming its bit simple as compare to latest one. Moreover the XFS code = / design structure documents available on the internet is 2.4 based.

The following code snippet is not clear to me (seems cy= clic):

---------
...
...
=
#define XFS_IFORK_NEXTENTS(ip,w) =A0 =A0 =A0 =A0xfs_ifork_nextents(ip,= w)
...
xfs_ifork_nextents(xfs_inode_t *ip, int w)
{
=A0=A0 =A0 =A0 =A0return XFS_IFORK_NEXTENTS(ip, w);
}
...
...
#define XFS_IFORK_NEXTENTS(ip,w) =A0 = =A0 =A0 =A0XFS_CFORK_NEXTENTS(&ip->i_d, w)
...
#define XFS_CFORK_NEXTENTS(dcp,w) =A0 =A0 =A0 =A0 =A0 = =A0xfs_cfork_nextents(dcp,w)
...
int=A0
xfs_c= fork_nextents(xfs_dinode_core_t *dcp, int w)
{
=A0=A0 = =A0 =A0 =A0return XFS_CFORK_NEXTENTS(dcp, w);
}
----

Am i missing something?=A0
Thanks,
Adil
--bcaec52e6013d66cd204b612d7f4-- From ajeet.yadav.77@gmail.com Mon Jan 9 01:22:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_62,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q097MV9q240062 for ; Mon, 9 Jan 2012 01:22:31 -0600 X-ASG-Debug-ID: 1326093750-0222017aa65e6d00001-NocioJ Received: from mail-vx0-f181.google.com (mail-vx0-f181.google.com [209.85.220.181]) by cuda.sgi.com with ESMTP id TYqYEweWjz8XEFwz for ; Sun, 08 Jan 2012 23:22:30 -0800 (PST) X-Barracuda-Envelope-From: ajeet.yadav.77@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.181 Received: by vcbfk26 with SMTP id fk26so3131998vcb.26 for ; Sun, 08 Jan 2012 23:22:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=XUnJ1Cz2Dhd8B35qeYNcHjun5DGOZt0pu7KZmElVmNk=; b=lU+qCsMpkZUdps6up4voAN3kExOJR6+eCQQVk6x3yNalm9wrJysFxYC5L4ZY4eP/wj 2OkUtauWW8cCMEjwpdLxkyff2wQpQvcMwz1BP87P72VLg1Ws3qO6jXk64DXEffpULmNV odd/eKRFnFsM3J3OOZXRP4risZqVR+oSvtjkE= MIME-Version: 1.0 Received: by 10.220.108.81 with SMTP id e17mr8363850vcp.67.1326093750164; Sun, 08 Jan 2012 23:22:30 -0800 (PST) Received: by 10.220.178.70 with HTTP; Sun, 8 Jan 2012 23:22:30 -0800 (PST) In-Reply-To: References: Date: Mon, 9 Jan 2012 12:52:30 +0530 Message-ID: Subject: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) From: Ajeet Yadav X-ASG-Orig-Subj: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) To: Tony Lu , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-vx0-f181.google.com[209.85.220.181] X-Barracuda-Start-Time: 1326093750 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85432 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 X-Virus-Status: Clean Hi, You are using which kernel version ? because this is fixed in XFS in kernel 2.6.34 http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dcom= mit;h=3D73c77e2ccc14413c232c3e0b3aa43a0c4b72ec70 but for this patch to work correctly, yer you need to provide the architecture dependent definition of invalidate_kernel_vmap_range() / flush_kernel_vmap_range() and ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE, similar to this patch http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dcom= mit;h=3D252a9afff76097667429b583e8b5b170b47665a4 http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dcom= mit;h=3D73be1591579084a8103a7005dd3172f3e9dd7362 Note: include/linux/highmem.h provide dummy definitions if architecture does not define them #ifndef ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE static inline void flush_kernel_dcache_page(struct page *page) { } static inline void flush_kernel_vmap_range(void *vaddr, int size) { } static inline void invalidate_kernel_vmap_range(void *vaddr, int size) { } #endi On Fri, Jan 6, 2012 at 3:44 PM, Tony Lu wrote: > Hi, Ajeet > > Sorry to bother you. By googling, I found that I am encountering the same= XFS umount issue on TILE architecture. And I noticed that somebody suggest= ed that other architectures like ARM, MIPS need to implement the following = functions to fix this issue. > > flush_kernel_dcache_page() > flush_kernel_vmap_range() > void invalidate_kernel_vmap_range() > > I am not sure if these functions can really fix this issue, since I imple= mented these functions for TILE architecture, but did not fix it. > > So I really want to know that if you implemented these functions for MIPS= to fix this issue. Or is there other method to fix this issue? > > I would be very appreciated for any feedback from you. > > Thanks > -Tony > >>Dear member, >>If I remove USB flash storage from PC/ARM/MIPS target (i.e without umount= ) while >copying file to XFS partition and connect it to MIPS target I alwa= ys get >>XFS: xlog_recover_process_data: bad clientid >>XFS: log mount/recovery failed: error 5 >>XFS: log mount failed >>This problem does not occur, if I connect the same USB flash to PC/ARM ta= rget. >>I have tested this on 2.6.30 - 2.6.34 (It everywhere when concerend with = MIPS) >> >>I had two workaround to avoid this problem on MIPS, but I wish to know th= e exact >reason of this problme on MIPS. >>I am really tired and giving up, so finally thought of taking your help, = your >guidence can help me. >> >>1. __flush_cache_all() at the begining of each iteration of while loop in= >function xlog_recover_process_data(). >> >> =C2=A0 =C2=A0 while ((dp < lp) && num_logops) { >>+ =C2=A0 =C2=A0 =C2=A0 __flush_cache_all() ; >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 ASSERT(dp + sizeof(xlog_op_header_t) <=3D lp= ); >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 ohead =3D (xlog_op_header_t *)dp; >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 dp +=3D sizeof(xlog_op_header_t); >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (ohead->oh_clientid !=3D XFS_TRANSACTION = && >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ohead->oh_clientid !=3D XFS_LO= G) { >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 xlog_warn( >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "XFS: xlog_recover_process_dat= a: bad clientid") >> >>OR >> >>2. Provide new buffer in each call to xlog_bread in function >xlog_do_rec= overy_pass(). >> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (error) >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto bread_err2; >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* blocks in data section */ >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bblks =3D (int)BTOBB(be32_to_cpu(rhead= ->h_len)); >>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0xlog_put_bp(dbp); >>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0dbp =3D xlog_get_bp(log, BTOBB(h_size)); >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0error =3D xlog_bread(log, blk_no + hbl= ks, bblks, dbp, >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &offset); >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (error) >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto bread_err2; >> >>WIth Regards >>Ajeet Yadav From ajeet.yadav.77@gmail.com Mon Jan 9 01:28:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_62,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q097SOv9240408 for ; Mon, 9 Jan 2012 01:28:24 -0600 X-ASG-Debug-ID: 1326094102-00a9eb19d4584390001-NocioJ Received: from mail-vx0-f181.google.com (mail-vx0-f181.google.com [209.85.220.181]) by cuda.sgi.com with ESMTP id oSl9EQ0ggHp7ybmW for ; Sun, 08 Jan 2012 23:28:22 -0800 (PST) X-Barracuda-Envelope-From: ajeet.yadav.77@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.220.181 Received: by vcbfk26 with SMTP id fk26so3134534vcb.26 for ; Sun, 08 Jan 2012 23:28:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=mCbBG/P9nyDwffDt70EYICB1kLpDKsx3CRvWIUfzij0=; b=mv29SLISAS1kqH6gn+jr1gkDkHOmInw8QLDIkKeUBg6ncXjsLzuTe/yPsoAshddhzs 9o8qBh3u/CRKxN/uEjvvw55iDvHnUpXl8ItWR4zpn2fPKOAHA5wVMQwY47NhWAHvWm1u Qr8Y/bRI35GDdLNHfJYYmOECKwphEy9uB+lRo= MIME-Version: 1.0 Received: by 10.220.226.193 with SMTP id ix1mr8393168vcb.57.1326094102571; Sun, 08 Jan 2012 23:28:22 -0800 (PST) Received: by 10.220.178.70 with HTTP; Sun, 8 Jan 2012 23:28:22 -0800 (PST) In-Reply-To: References: Date: Mon, 9 Jan 2012 12:58:22 +0530 Message-ID: Subject: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) From: Ajeet Yadav X-ASG-Orig-Subj: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) To: Tony Lu , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-vx0-f181.google.com[209.85.220.181] X-Barracuda-Start-Time: 1326094102 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85431 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 X-Virus-Status: Clean Yes I implemented these definitions for MIPS, without them this problem will continue to occur. On Mon, Jan 9, 2012 at 12:52 PM, Ajeet Yadav wro= te: > Hi, > You are using which kernel version ? because this is fixed in XFS in > kernel 2.6.34 > http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dc= ommit;h=3D73c77e2ccc14413c232c3e0b3aa43a0c4b72ec70 > > but for this patch to work correctly, yer you need to provide the > architecture dependent definition of invalidate_kernel_vmap_range() / > flush_kernel_vmap_range() and ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE, > similar to this patch > > http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dc= ommit;h=3D252a9afff76097667429b583e8b5b170b47665a4 > http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dc= ommit;h=3D73be1591579084a8103a7005dd3172f3e9dd7362 > > Note: include/linux/highmem.h provide dummy definitions if > architecture does not define them > > #ifndef ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE > static inline void flush_kernel_dcache_page(struct page *page) > { > } > static inline void flush_kernel_vmap_range(void *vaddr, int size) > { > } > static inline void invalidate_kernel_vmap_range(void *vaddr, int size) > { > } > #endi > > > > > On Fri, Jan 6, 2012 at 3:44 PM, Tony Lu wrote: >> Hi, Ajeet >> >> Sorry to bother you. By googling, I found that I am encountering the sam= e XFS umount issue on TILE architecture. And I noticed that somebody sugges= ted that other architectures like ARM, MIPS need to implement the following= functions to fix this issue. >> >> flush_kernel_dcache_page() >> flush_kernel_vmap_range() >> void invalidate_kernel_vmap_range() >> >> I am not sure if these functions can really fix this issue, since I impl= emented these functions for TILE architecture, but did not fix it. >> >> So I really want to know that if you implemented these functions for MIP= S to fix this issue. Or is there other method to fix this issue? >> >> I would be very appreciated for any feedback from you. >> >> Thanks >> -Tony >> >>>Dear member, >>>If I remove USB flash storage from PC/ARM/MIPS target (i.e without umoun= t) while >copying file to XFS partition and connect it to MIPS target I alw= ays get >>>XFS: xlog_recover_process_data: bad clientid >>>XFS: log mount/recovery failed: error 5 >>>XFS: log mount failed >>>This problem does not occur, if I connect the same USB flash to PC/ARM t= arget. >>>I have tested this on 2.6.30 - 2.6.34 (It everywhere when concerend with= MIPS) >>> >>>I had two workaround to avoid this problem on MIPS, but I wish to know t= he exact >reason of this problme on MIPS. >>>I am really tired and giving up, so finally thought of taking your help,= your >guidence can help me. >>> >>>1. __flush_cache_all() at the begining of each iteration of while loop i= n >function xlog_recover_process_data(). >>> >>> =C2=A0 =C2=A0 while ((dp < lp) && num_logops) { >>>+ =C2=A0 =C2=A0 =C2=A0 __flush_cache_all() ; >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 ASSERT(dp + sizeof(xlog_op_header_t) <=3D l= p); >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 ohead =3D (xlog_op_header_t *)dp; >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 dp +=3D sizeof(xlog_op_header_t); >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (ohead->oh_clientid !=3D XFS_TRANSACTION= && >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ohead->oh_clientid !=3D XFS_L= OG) { >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 xlog_warn( >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "XFS: xlog_recover_process_da= ta: bad clientid") >>> >>>OR >>> >>>2. Provide new buffer in each call to xlog_bread in function >xlog_do_re= covery_pass(). >>> >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (error) >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto bread_err2; >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* blocks in data section */ >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bblks =3D (int)BTOBB(be32_to_cpu(rhea= d->h_len)); >>>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0xlog_put_bp(dbp); >>>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0dbp =3D xlog_get_bp(log, BTOBB(h_size)); >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0error =3D xlog_bread(log, blk_no + hb= lks, bblks, dbp, >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &offset); >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (error) >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto bread_err2; >>> >>>WIth Regards >>>Ajeet Yadav From wkendall@sgi.com Mon Jan 9 08:01:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09E1SAV011099 for ; Mon, 9 Jan 2012 08:01:28 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 869E5304032; Mon, 9 Jan 2012 06:01:25 -0800 (PST) Received: from [128.162.233.117] (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id 5D03F70016F1; Mon, 9 Jan 2012 08:01:25 -0600 (CST) Message-ID: <4F0AF335.5070905@sgi.com> Date: Mon, 09 Jan 2012 08:01:25 -0600 From: Bill Kendall User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111108 Thunderbird/3.1.16 MIME-Version: 1.0 To: David Brown Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsdump: use the full 32-bit generation number References: <1325880565-20934-1-git-send-email-wkendall@sgi.com> <20120108005822.GA32313@davidb.org> In-Reply-To: <20120108005822.GA32313@davidb.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/07/2012 06:58 PM, David Brown wrote: > On Fri, Jan 06, 2012 at 02:09:25PM -0600, Bill Kendall wrote: > >> This patch changes xfsdump to use the full 32-bit inode generation >> number. >> A change to part of the dump format (direnthdr_t) was required, so the >> dump format version has been bumped to 3. xfsdump also required >> changes to >> its inode-to-generation cache. This map is not persistent though, so no >> compatibility or version changes were required there. > > I suspect that this does fix the problem. Since the fix is in the > dump, not just restore, I guess I'll just have to start with a fresh > level 0 and see if the failure ever happens again upon restore. That's right. If you need to recover files from the backup that has issues, try applying only your level 1 backup and select just the files that failed to restore. Bill From bpm@oss.sgi.com Mon Jan 9 11:17:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09HHUHC026250 for ; Mon, 9 Jan 2012 11:17:30 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q09HHTPd026222; Mon, 9 Jan 2012 11:17:29 -0600 Date: Mon, 9 Jan 2012 11:17:29 -0600 Message-Id: <201201091717.q09HHTPd026222@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v3.2-rc1-34-gb1c770c X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: 40d344ec5ee440596b1f3ae87556e20c7197757a X-Git-Newrev: b1c770c273a4787069306fc82aab245e9ac72e9d This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated b1c770c xfs: fix endian conversion issue in discard code from 40d344ec5ee440596b1f3ae87556e20c7197757a (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 b1c770c273a4787069306fc82aab245e9ac72e9d Author: Dave Chinner Date: Wed Dec 21 00:07:42 2011 +0000 xfs: fix endian conversion issue in discard code When finding the longest extent in an AG, we read the value directly out of the AGF buffer without endian conversion. This will give an incorrect length, resulting in FITRIM operations potentially not trimming everything that it should. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_discard.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) hooks/post-receive -- XFS development tree From amit.sahrawat83@gmail.com Mon Jan 9 11:40:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09HeXg1028685 for ; Mon, 9 Jan 2012 11:40:33 -0600 X-ASG-Debug-ID: 1326130831-00a9eb19d35dea10001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id svbcLCGOyJCSFSed for ; Mon, 09 Jan 2012 09:40:31 -0800 (PST) X-Barracuda-Envelope-From: amit.sahrawat83@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lagr15 with SMTP id r15so1867947lag.26 for ; Mon, 09 Jan 2012 09:40:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=QCr3lDES4m79sZ0np2wv4VZIcb+yz3AXPEZbVV/ecrU=; b=D0zo2P04+LcZkILb3LdyW1RxtVq3KjBwWTARx+KX9owV2qO0d12i60AI6SVGtHT2OH 6uQxRpQ+WffIv2azKhcSrW3I4BtiCMfWgVC8ORiU85xZiHBcjaLy8rajpwJv+Nho1RE0 I0Qtkfgo8Eip0ikfUgUMsgK+sZDPfZAHS3lAo= MIME-Version: 1.0 Received: by 10.152.146.42 with SMTP id sz10mr7155236lab.33.1326130830733; Mon, 09 Jan 2012 09:40:30 -0800 (PST) Received: by 10.152.105.83 with HTTP; Mon, 9 Jan 2012 09:40:30 -0800 (PST) In-Reply-To: References: Date: Mon, 9 Jan 2012 23:10:30 +0530 Message-ID: Subject: Re: Cyclic Code? From: Amit Sahrawat X-ASG-Orig-Subj: Re: Cyclic Code? To: Adil Mujeeb Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1326130831 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85473 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain X-Virus-Status: Clean On Mon, Jan 9, 2012 at 12:22 PM, Adil Mujeeb wrote: > Hi list, > > i am new to XFS. > > I was going through XFS code (2.4 based) for study purpose. Its old but > assuming its bit simple as compare to latest one. Moreover the XFS code / > design structure documents available on the internet is 2.4 based. May be if you switch to a version around 2.6.20 nearabout - it will make it easier to understand the code. Prior to that the complete XFS source code seemed like traversing through a lot of macros... I started with 2.6.18 and it was really hard to understand from that version... > > The following code snippet is not clear to me (seems cyclic): > > --------- > ... > ... > #define XFS_IFORK_NEXTENTS(ip,w) =A0 =A0 =A0 =A0xfs_ifork_nextents(ip,w) > ... > xfs_ifork_nextents(xfs_inode_t *ip, int w) > { > =A0=A0 =A0 =A0 =A0return XFS_IFORK_NEXTENTS(ip, w); > } I guess you missed something while reading the code.... I tried to look at the repositry.. this is how the code looks... #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IFORK_NEXTENTS)=09 int xfs_ifork_nextents(xfs_inode_t *ip, int w);=09 #define XFS_IFORK_NEXTENTS(ip,w) xfs_ifork_nextents(ip,w)=09 #else=09 #define XFS_IFORK_NEXTENTS(ip,w) XFS_CFORK_NEXTENTS(&ip->i_d, w)=09 #endif .... #define XFS_CFORK_NEXTENTS(dcp,w) \ ((w) =3D=3D XFS_DATA_FORK ? (dcp)->di_nextents : (dcp)->di_anextents) Regards, Amit Sahrawat > ... > ... > #define XFS_IFORK_NEXTENTS(ip,w) =A0 =A0 =A0 =A0XFS_CFORK_NEXTENTS(&ip->i= _d, w) > ... > #define XFS_CFORK_NEXTENTS(dcp,w) =A0 =A0 =A0 =A0 =A0 =A0xfs_cfork_nexten= ts(dcp,w) > ... > int > xfs_cfork_nextents(xfs_dinode_core_t *dcp, int w) > { > =A0=A0 =A0 =A0 =A0return XFS_CFORK_NEXTENTS(dcp, w); > } > ---- > > Am i missing something? > Thanks, > Adil > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From webmaster@ajeux.com Mon Jan 9 12:14:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09IEPRT031444 for ; Mon, 9 Jan 2012 12:14:25 -0600 X-ASG-Debug-ID: 1326132863-00a9eb19d45e14d0001-NocioJ Received: from mail-tul01m020-f181.google.com (mail-tul01m020-f181.google.com [209.85.214.181]) by cuda.sgi.com with ESMTP id MajXTVQb1YVwv0pD for ; Mon, 09 Jan 2012 10:14:23 -0800 (PST) X-Barracuda-Envelope-From: webmaster@ajeux.com X-Barracuda-Apparent-Source-IP: 209.85.214.181 Received: by obbup6 with SMTP id up6so4892902obb.26 for ; Mon, 09 Jan 2012 10:14:23 -0800 (PST) MIME-Version: 1.0 Received: by 10.182.1.8 with SMTP id 8mr15558348obi.11.1326132863306; Mon, 09 Jan 2012 10:14:23 -0800 (PST) Received: by 10.182.60.196 with HTTP; Mon, 9 Jan 2012 10:14:23 -0800 (PST) Reply-To: olivier@ajeux.com Date: Mon, 9 Jan 2012 19:14:23 +0100 Message-ID: Subject: Get file using a specific sector number From: Olivier Doucet X-ASG-Orig-Subj: Get file using a specific sector number To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=f46d04446a6d3e0c7604b61c5e18 X-Barracuda-Connect: mail-tul01m020-f181.google.com[209.85.214.181] X-Barracuda-Start-Time: 1326132863 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85475 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Status: Clean --f46d04446a6d3e0c7604b61c5e18 Content-Type: text/plain; charset=ISO-8859-1 Hello everyone, I'm actually using xfsprogs quite heavily and I'm stuck with one problem : I have a sector number and I want to know which file is using it. xfs_bmap does exactly the opposite (give sector number for a specific file), but I cannot find how to do it the other way. I made several attempts with xfs_db but cannot find how to do it properly. Moreover, I need to do it on a mounted filesystem (RW), and xfs_db does not seem very friendly about that ... Any help would be much appreciated. Thank you, Olivier --f46d04446a6d3e0c7604b61c5e18 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello everyone,

I'm actually using xfsprogs quite he= avily and I'm stuck with one problem :=A0

I ha= ve a sector number and I want to know which file is using it. xfs_bmap does= exactly the opposite (give sector number for a specific file), but I canno= t find how to do it the other way.
I made several attempts with xfs_db but cannot find how to do it properly. = Moreover, I need to do it on a mounted filesystem (RW), and xfs_db does not= seem very friendly about that ...

Any help would = be much appreciated.

Thank you,

Olivier

--f46d04446a6d3e0c7604b61c5e18-- From bpm@sgi.com Mon Jan 9 12:26:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09IQRAR032373 for ; Mon, 9 Jan 2012 12:26:27 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id A038B304051; Mon, 9 Jan 2012 10:26:22 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 7E2B5426DA7; Mon, 9 Jan 2012 12:26:23 -0600 (CST) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS bugfix for 3.3 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20120109182623.7E2B5426DA7@whiskey.americas.sgi.com> Date: Mon, 9 Jan 2012 12:26:23 -0600 (CST) From: bpm@sgi.com (Ben Myers) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Linus, Please pull the following bug fix for FITRIM operations in xfs. Thanks, Ben The following changes since commit c99516ca854770000c277b2680a15581c691e18c: Linus Torvalds (1): Merge branch 'for-linus' of git://git.kernel.org/.../viro/vfs are available in the git repository at: git://oss.sgi.com/xfs/xfs for-linus Dave Chinner (1): xfs: fix endian conversion issue in discard code fs/xfs/xfs_discard.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) From david@fromorbit.com Mon Jan 9 15:39:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09LdorU041949 for ; Mon, 9 Jan 2012 15:39:50 -0600 X-ASG-Debug-ID: 1326145186-005fe612a656a710001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 52HnsqJefHWgP1tI for ; Mon, 09 Jan 2012 13:39:47 -0800 (PST) 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: AtoKAFteC095LbVq/2dsb2JhbABEq0uBB4EGgXIBAQQBJwsBIyMQCAMYLhQNGAMhE4d6tmwTixtjBJUHinWHWQ Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl6.internode.on.net with ESMTP; 10 Jan 2012 08:09:27 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RkMw9-0003rr-Vq; Tue, 10 Jan 2012 08:39:26 +1100 Date: Tue, 10 Jan 2012 08:39:25 +1100 From: Dave Chinner To: Amit Sahrawat Cc: Adil Mujeeb , xfs@oss.sgi.com Subject: Re: Cyclic Code? Message-ID: <20120109213925.GF4198@dastard> X-ASG-Orig-Subj: Re: Cyclic Code? References: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit 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: 1326145187 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85488 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Mon, Jan 09, 2012 at 11:10:30PM +0530, Amit Sahrawat wrote: > On Mon, Jan 9, 2012 at 12:22 PM, Adil Mujeeb wrote: > > Hi list, > > > > i am new to XFS. > > > > I was going through XFS code (2.4 based) for study purpose. Its old but > > assuming its bit simple as compare to latest one. Moreover the XFS code / > > design structure documents available on the internet is 2.4 based. > May be if you switch to a version around 2.6.20 nearabout - it will > make it easier to understand the code. Prior to that the complete XFS > source code seemed like traversing through a lot of macros... I > started with 2.6.18 and it was really hard to understand from that > version... I'd recommend starting with the current top of tree code - it is much, much cleaner that the code base even from 2.6.20. Remember, 2.6.20 was released almost 5 years ago (Feb 4 2007), and there's been a *lot* of cleanup work done since then.... > > The following code snippet is not clear to me (seems cyclic): > > > > --------- > > ... > > ... > > #define XFS_IFORK_NEXTENTS(ip,w)        xfs_ifork_nextents(ip,w) > > ... > > xfs_ifork_nextents(xfs_inode_t *ip, int w) > > { > >         return XFS_IFORK_NEXTENTS(ip, w); > > } > I guess you missed something while reading the code.... I tried to > look at the repositry.. this is how the code looks... > #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IFORK_NEXTENTS) > int xfs_ifork_nextents(xfs_inode_t *ip, int w); > #define XFS_IFORK_NEXTENTS(ip,w) xfs_ifork_nextents(ip,w) > #else > #define XFS_IFORK_NEXTENTS(ip,w) XFS_CFORK_NEXTENTS(&ip->i_d, w) > #endif > .... > #define XFS_CFORK_NEXTENTS(dcp,w) \ > ((w) == XFS_DATA_FORK ? (dcp)->di_nextents : (dcp)->di_anextents) Yup, that XFS_WANT_FUNCS crap was for debugging the macros because they were too complex to debug in line. That went long ago. FYI, macros were very popular in Irix code - desite SGI having an awesome compiler, the SGI kernel engineers believed that function calls were just too expensive to call and so macros that expanded out to 300 lines of code were common. Hence the need to have some way of debugging them. Hell, I know one engineer used to compile the code and then disassemble in the debugger on the running machine because that was the *simplest way* to work out what code the macros actually compiled in. :-O I'm glad we've got rid of most of the macro-instead-of-function usage now... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jan 9 15:46:34 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q09LkYS8042221 for ; Mon, 9 Jan 2012 15:46:34 -0600 X-ASG-Debug-ID: 1326145592-00a9eb19d45f2f30001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id FzglTzk1D5iEg7jt for ; Mon, 09 Jan 2012 13:46:32 -0800 (PST) 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: Av0EAFteC095LbVq/2dsb2JhbABErFKBBoFyAQEFOhwjEAgDGC4UJQM0vmYTiGSDGgSVB5JO Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl6.internode.on.net with ESMTP; 10 Jan 2012 08:16:32 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RkN30-0003sd-Kw; Tue, 10 Jan 2012 08:46:30 +1100 Date: Tue, 10 Jan 2012 08:46:30 +1100 From: Dave Chinner To: olivier@ajeux.com Cc: xfs@oss.sgi.com Subject: Re: Get file using a specific sector number Message-ID: <20120109214630.GG4198@dastard> X-ASG-Orig-Subj: Re: Get file using a specific sector number 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: 1326145592 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Mon, Jan 09, 2012 at 07:14:23PM +0100, Olivier Doucet wrote: > Hello everyone, > > I'm actually using xfsprogs quite heavily and I'm stuck with one problem : > > I have a sector number and I want to know which file is using it. xfs_bmap > does exactly the opposite (give sector number for a specific file), but I > cannot find how to do it the other way. > I made several attempts with xfs_db but cannot find how to do it properly. > Moreover, I need to do it on a mounted filesystem (RW), and xfs_db does not > seem very friendly about that ... > > Any help would be much appreciated. There is no easy way to do it, because XFS does not have a reverse map btree to tell you the owner of any given block. The only way to find this is to walk the entire metadata tree to find the owner of the block. You can't do that reliably just by walking the directory heirarchy and running xfs_bmap and xfs_bmap -a on every file and directory, because the sector you are after may be in metadata that you can't expose via this method. e.g. it might be a block in the extent tree that xfs_bmap walks, in the free space or inode btrees, etc. xfs_db is really the only way you can do this right now, using the blockget command. You can run xfs_db on a RW filesystem (run it in read-only mode), but xfs_db is not coherent with active filesystem changes and hence is likely to crash randomly as the filesytem changes under it. Also, blockget takes blocks in FSB format, so you need to convert your sector (daddr) to FSB units using the convert command first. FWIW, you could always freeze the filesystem while you run the xfs_db command, but that may cause other problems for your applications... Cheers, Dave. -- Dave Chinner david@fromorbit.com From wu.tommy@gmail.com Mon Jan 9 20:42:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0A2gDbj052195 for ; Mon, 9 Jan 2012 20:42:14 -0600 X-ASG-Debug-ID: 1326163331-00a9eb19d3608380001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id hYCT0a0sphg02RMy for ; Mon, 09 Jan 2012 18:42:12 -0800 (PST) X-Barracuda-Envelope-From: wu.tommy@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lagr15 with SMTP id r15so2111801lag.26 for ; Mon, 09 Jan 2012 18:42:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=PNkAwUGdyRhyP6k5Sc19/UsZt2MMZWCur7g/2/TbQEM=; b=u7/CR5ZlWa/iqLn/HpUQXZuSu9WXlw2SCBdq/lf2MXdbX0Zeg1LyPjdeBpS10qjNEV qem/3nR8cRQprSnZ3Yla8nf3lG0RECRGdPyaOJBFm9+L1zx+AC5dCHQ035SykIljqi7E 4xw8bNBTWFm8rTWKwJrQ/LtXE3+63XHzK6TAU= MIME-Version: 1.0 Received: by 10.152.124.137 with SMTP id mi9mr7827992lab.6.1326163329820; Mon, 09 Jan 2012 18:42:09 -0800 (PST) Received: by 10.152.131.194 with HTTP; Mon, 9 Jan 2012 18:42:09 -0800 (PST) Date: Tue, 10 Jan 2012 10:42:09 +0800 Message-ID: Subject: xfsdump 3.0.6, ERROR: xfs_quota failed with exit status: -1 From: Tommy Wu X-ASG-Orig-Subj: xfsdump 3.0.6, ERROR: xfs_quota failed with exit status: -1 To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1326163331 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85509 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 X-Virus-Status: Clean Hi! when I use xfsdump 3.0.6, it always got ERROR for xfs_quota like this: /sbin/xfsdump: using file dump (drive_simple) strategy /sbin/xfsdump: version 3.0.6 (dump format 3.0) - Running single-threaded /sbin/xfsdump: saving user quota information for: /var/www /sbin/xfsdump: ERROR: xfs_quota failed with exit status: -1 /sbin/xfsdump: ERROR: failed to save user quota information, continuing /sbin/xfsdump: level 0 dump of fw1.teatime.com.tw:/var/www /sbin/xfsdump: dump date: Tue Jan 10 10:34:24 2012 downgrade to 3.0.5, same command (also same xfsprogs 3.1.7), no any error: /sbin/xfsdump: using file dump (drive_simple) strategy /sbin/xfsdump: version 3.0.5 (dump format 3.0) - Running single-threaded /sbin/xfsdump: saving user quota information for: /var/www /sbin/xfsdump: level 0 dump of fw1.teatime.com.tw:/var/www /sbin/xfsdump: dump date: Tue Jan 10 10:30:36 2012 But even it got error for xfs_quota, the xfsdump_quotas file was created successful, I check the command used in xfsdump, the same xfs_quota command work fine without any error in shell script (I also write a simple C program to use system() to execute it, also no error for such command). -- Tommy Wu From mujeeb.adil@gmail.com Tue Jan 10 00:56:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0A6u5mi062012 for ; Tue, 10 Jan 2012 00:56:06 -0600 X-ASG-Debug-ID: 1326178559-00a9eb19d661e150001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id P2le4s4McZreEwyG for ; Mon, 09 Jan 2012 22:56:00 -0800 (PST) X-Barracuda-Envelope-From: mujeeb.adil@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iaeo4 with SMTP id o4so480550iae.26 for ; Mon, 09 Jan 2012 22:55:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=HiIF8yEjlhWMJkxLbTQiub0Yoo/58wqJj5i0l/hg7Ho=; b=KwLo0j4m6nB7kLeZaL9MDIr2RJwSUXpU9aQO6mt0X5Tdgu45ri/MTXoYejf+N1B5bj NBUmarulg+ts2vs6l9IILep3zJaxeHF16PX3a1O8fb1Sd1TgLv8x967vOBCvwt4AdjTm oJ3c8EgUSN0osKuqz3u1SybSDpGVd1Xsv0nVU= MIME-Version: 1.0 Received: by 10.42.175.134 with SMTP id ba6mr20521826icb.23.1326178559754; Mon, 09 Jan 2012 22:55:59 -0800 (PST) Received: by 10.42.225.10 with HTTP; Mon, 9 Jan 2012 22:55:59 -0800 (PST) In-Reply-To: <20120109213925.GF4198@dastard> References: <20120109213925.GF4198@dastard> Date: Tue, 10 Jan 2012 12:25:59 +0530 Message-ID: Subject: Re: Cyclic Code? From: Adil Mujeeb X-ASG-Orig-Subj: Re: Cyclic Code? To: Dave Chinner Cc: Amit Sahrawat , xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1326178559 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85525 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 X-Virus-Status: Clean Hi Dave, Amit, Thank you for your inputs. On Tue, Jan 10, 2012 at 3:09 AM, Dave Chinner wrote: > > On Mon, Jan 09, 2012 at 11:10:30PM +0530, Amit Sahrawat wrote: > > On Mon, Jan 9, 2012 at 12:22 PM, Adil Mujeeb wr= ote: > > > Hi list, > > > > > > i am new to XFS. > > > > > > I was going through XFS code (2.4 based) for study purpose. Its old b= ut > > > assuming its bit simple as compare to latest one. Moreover the XFS co= de / > > > design structure documents available on the internet is 2.4 based. > > May be if you switch to a version around 2.6.20 nearabout - it will > > make it easier to understand the code. Prior to that the complete XFS > > source code seemed like traversing through a lot of macros... I > > started with 2.6.18 and it was really hard to understand from that > > version... > > I'd recommend starting with the current top of tree code - it is > much, much cleaner that the code base even from 2.6.20. Remember, 2.6.20 > was released almost 5 years ago (Feb 4 2007), and there's been a > *lot* of cleanup work done since then.... > > > > The following code snippet is not clear to me (seems cyclic): > > > > > > --------- > > > ... > > > ... > > > #define XFS_IFORK_NEXTENTS(ip,w) =A0 =A0 =A0 =A0xfs_ifork_nextents(ip= ,w) > > > ... > > > xfs_ifork_nextents(xfs_inode_t *ip, int w) > > > { > > > =A0=A0 =A0 =A0 =A0return XFS_IFORK_NEXTENTS(ip, w); > > > } > > I guess you missed something while reading the code.... I tried to > > look at the repositry.. this is how the code looks... > > #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IFORK_NEXTENTS) > > =A0int xfs_ifork_nextents(xfs_inode_t *ip, int w); > > =A0#define XFS_IFORK_NEXTENTS(ip,w) =A0 =A0 =A0 =A0xfs_ifork_nextents(i= p,w) > > =A0#else > > =A0#define XFS_IFORK_NEXTENTS(ip,w) =A0 =A0 =A0 =A0XFS_CFORK_NEXTENTS(&= ip->i_d, w) > > =A0#endif > > .... > > #define XFS_CFORK_NEXTENTS(dcp,w) \ > > =A0 =A0 =A0 ((w) =3D=3D XFS_DATA_FORK ? (dcp)->di_nextents : (dcp)->di_= anextents) Amit, what i understood is XFS_IFORK_NEXTENTS is replaced by xfs_ifork_nextents(ip,w) call which actually has this macro in the function body. > Yup, that XFS_WANT_FUNCS crap was for debugging the macros because > they were too complex to debug in line. That went long ago. > > FYI, macros were very popular in Irix code - desite SGI having an > awesome compiler, the SGI kernel engineers believed that function > calls were just too expensive to call and so macros that expanded > out to 300 lines of code were common. Hence the need to have some > way of debugging them. > > Hell, I know one engineer used to compile the code and then > disassemble in the debugger on the running machine because that was > the *simplest way* to work out what code the macros actually > compiled in. :-O > > I'm glad we've got rid of most of the macro-instead-of-function > usage now... Thanks for the information. Is there any code / design document similar to XFS filesystem structure document available for older versions. Thanks, Adil > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com From zlu@tilera.com Tue Jan 10 04:30:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_62 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AAUfdF071930 for ; Tue, 10 Jan 2012 04:30:41 -0600 X-ASG-Debug-ID: 1326191438-00a9eb19d4646920001-NocioJ Received: from USMAMAIL.TILERA.COM (usmamail.tilera.com [206.83.70.75]) by cuda.sgi.com with ESMTP id JW0AuUkuisgRlmxh for ; Tue, 10 Jan 2012 02:30:38 -0800 (PST) X-Barracuda-Envelope-From: zlu@tilera.com X-Barracuda-Apparent-Source-IP: 206.83.70.75 Received: from USMAEXCH1.tad.internal.tilera.com ([fe80::709c:7a3e:ae82:7a6e]) by USMAExch2.tad.internal.tilera.com ([fe80::408c:3921:ab63:6a87%11]) with mapi; Tue, 10 Jan 2012 05:30:38 -0500 From: Tony Lu To: Ajeet Yadav , "xfs@oss.sgi.com" Subject: RE: XFS: bad clientid on recovery on MIPS (VIPT cache) Thread-Topic: XFS: bad clientid on recovery on MIPS (VIPT cache) X-ASG-Orig-Subj: RE: XFS: bad clientid on recovery on MIPS (VIPT cache) Thread-Index: AQHMzp9y5VwDWzpPGkmBdYCEZM2g7JYD9xsAgAFw/4A= Date: Tue, 10 Jan 2012 10:30:33 +0000 Message-ID: References: In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Barracuda-Connect: usmamail.tilera.com[206.83.70.75] X-Barracuda-Start-Time: 1326191438 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85539 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... X-Virus-Status: Clean Thanks for your kindly help, Ajeet. I am using 2.6.38.6.=20 >-----Original Message----- >From: Ajeet Yadav [mailto:ajeet.yadav.77@gmail.com] >Sent: Monday, January 09, 2012 3:28 PM >To: Tony Lu; xfs@oss.sgi.com >Subject: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) > >Yes I implemented these definitions for MIPS, without them this >problem will continue to occur. > >On Mon, Jan 9, 2012 at 12:52 PM, Ajeet Yadav wr= ote: >> Hi, >> You are using which kernel version ? because this is fixed in XFS in >> kernel 2.6.34 >> >http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dco= mmit; >h=3D73c77e2ccc14413c232c3e0b3aa43a0c4b72ec70 >> >> but for this patch to work correctly, yer you need to provide the >> architecture dependent definition of invalidate_kernel_vmap_range() / >> flush_kernel_vmap_range() and ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE, >> similar to this patch >> >> >http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dco= mmit; >h=3D252a9afff76097667429b583e8b5b170b47665a4 >> >http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dco= mmit; >h=3D73be1591579084a8103a7005dd3172f3e9dd7362 >> >> Note: include/linux/highmem.h provide dummy definitions if >> architecture does not define them >> >> #ifndef ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE >> static inline void flush_kernel_dcache_page(struct page *page) >> { >> } >> static inline void flush_kernel_vmap_range(void *vaddr, int size) >> { >> } >> static inline void invalidate_kernel_vmap_range(void *vaddr, int size) >> { >> } >> #endi >> >> >> >> >> On Fri, Jan 6, 2012 at 3:44 PM, Tony Lu wrote: >>> Hi, Ajeet >>> >>> Sorry to bother you. By googling, I found that I am encountering the sa= me >XFS umount issue on TILE architecture. And I noticed that somebody suggest= ed >that other architectures like ARM, MIPS need to implement the following >functions to fix this issue. >>> >>> flush_kernel_dcache_page() >>> flush_kernel_vmap_range() >>> void invalidate_kernel_vmap_range() >>> >>> I am not sure if these functions can really fix this issue, since I imp= lemented >these functions for TILE architecture, but did not fix it. >>> >>> So I really want to know that if you implemented these functions for MI= PS >to fix this issue. Or is there other method to fix this issue? >>> >>> I would be very appreciated for any feedback from you. >>> >>> Thanks >>> -Tony >>> >>>>Dear member, >>>>If I remove USB flash storage from PC/ARM/MIPS target (i.e without umou= nt) >while >copying file to XFS partition and connect it to MIPS target I alway= s get >>>>XFS: xlog_recover_process_data: bad clientid >>>>XFS: log mount/recovery failed: error 5 >>>>XFS: log mount failed >>>>This problem does not occur, if I connect the same USB flash to PC/ARM = target. >>>>I have tested this on 2.6.30 - 2.6.34 (It everywhere when concerend wit= h MIPS) >>>> >>>>I had two workaround to avoid this problem on MIPS, but I wish to know = the >exact >reason of this problme on MIPS. >>>>I am really tired and giving up, so finally thought of taking your help= , your >>guidence can help me. >>>> >>>>1. __flush_cache_all() at the begining of each iteration of while loop = in >>function xlog_recover_process_data(). >>>> >>>> =A0 =A0 while ((dp < lp) && num_logops) { >>>>+ =A0 =A0 =A0 __flush_cache_all() ; >>>> =A0 =A0 =A0 =A0 ASSERT(dp + sizeof(xlog_op_header_t) <=3D lp); >>>> =A0 =A0 =A0 =A0 ohead =3D (xlog_op_header_t *)dp; >>>> =A0 =A0 =A0 =A0 dp +=3D sizeof(xlog_op_header_t); >>>> =A0 =A0 =A0 =A0 if (ohead->oh_clientid !=3D XFS_TRANSACTION && >>>> =A0 =A0 =A0 =A0 =A0 =A0 ohead->oh_clientid !=3D XFS_LOG) { >>>> =A0 =A0 =A0 =A0 =A0 =A0 xlog_warn( >>>> =A0 =A0 =A0 =A0 =A0 =A0 "XFS: xlog_recover_process_data: bad clientid"= ) >>>> >>>>OR >>>> >>>>2. Provide new buffer in each call to xlog_bread in function >>xlog_do_recovery_pass(). >>>> >>>> =A0 =A0 =A0 =A0 =A0if (error) >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0goto bread_err2; >>>> =A0 =A0 =A0 =A0 =A0/* blocks in data section */ >>>> =A0 =A0 =A0 =A0 =A0bblks =3D (int)BTOBB(be32_to_cpu(rhead->h_len)); >>>>+ =A0 =A0 =A0 =A0xlog_put_bp(dbp); >>>>+ =A0 =A0 =A0 =A0dbp =3D xlog_get_bp(log, BTOBB(h_size)); >>>> =A0 =A0 =A0 =A0 =A0error =3D xlog_bread(log, blk_no + hblks, bblks, db= p, >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 &offset); >>>> =A0 =A0 =A0 =A0 =A0if (error) >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0goto bread_err2; >>>> >>>>WIth Regards >>>>Ajeet Yadav From liubo2009@cn.fujitsu.com Tue Jan 10 05:40:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0ABeMxE076081 for ; Tue, 10 Jan 2012 05:40:22 -0600 X-ASG-Debug-ID: 1326195616-0222017aa46ac0f0001-NocioJ Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id 9avqFI04VSjPJDYe for ; Tue, 10 Jan 2012 03:40:18 -0800 (PST) X-Barracuda-Envelope-From: liubo2009@cn.fujitsu.com X-Barracuda-Apparent-Source-IP: 222.73.24.84 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 103CB17008E; Tue, 10 Jan 2012 19:40:12 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q0ABeAwp024920; Tue, 10 Jan 2012 19:40:10 +0800 Received: from localhost.localdomain ([10.167.225.27]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012011019391039-290401 ; Tue, 10 Jan 2012 19:39:10 +0800 From: Liu Bo To: Cc: , Subject: [PATCH] xfstests: fix 251's cp -axT problem Date: Tue, 10 Jan 2012 19:39:20 +0800 X-ASG-Orig-Subj: [PATCH] xfstests: fix 251's cp -axT problem Message-Id: <1326195560-4434-1-git-send-email-liubo2009@cn.fujitsu.com> X-Mailer: git-send-email 1.6.5.2 X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-10 19:39:10, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-10 19:39:11, Serialize complete at 2012-01-10 19:39:11 X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1326195617 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85544 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email X-Virus-Status: Clean When I ran xfstests, 251 got failed cause "cp -axT" did not work as wish: cp: cannot overwrite directory `/mnt/scratch/1' with non-directory With this patch, 251 has passed. Signed-off-by: Liu Bo --- 251 | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/251 b/251 index fa3d74a..b54e4c3 100755 --- a/251 +++ b/251 @@ -130,7 +130,7 @@ function run_process() { # Copy content -> partition. mkdir $SCRATCH_MNT/$p - cp -axT $content $SCRATCH_MNT/$p + cp -axT $content/ $SCRATCH_MNT/$p/ export chpid=$! && wait $chpid &> /dev/null check_sums -- 1.6.5.2 From info@webmaster.org Tue Jan 10 05:53:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=BAYES_99,MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0ABrues076948 for ; Tue, 10 Jan 2012 05:53:56 -0600 X-ASG-Debug-ID: 1326196434-0222017aa46ad6f0001-w1Z2WR Received: from mail.solca.med.ec (solca.med.ec [200.105.240.90]) by cuda.sgi.com with ESMTP id Gy9lgGlRsG4dbMiz for ; Tue, 10 Jan 2012 03:53:54 -0800 (PST) X-Barracuda-Envelope-From: info@webmaster.org X-Barracuda-Apparent-Source-IP: 200.105.240.90 Received: from mail.solca.med.ec (localhost.localdomain [127.0.0.1]) by postfix.imss71 (Postfix) with ESMTP id 2345A19C0085; Tue, 10 Jan 2012 07:00:10 -0500 (ECT) Received: from mail.solca.med.ec (localhost.localdomain [127.0.0.1]) by mail.solca.med.ec (Postfix) with ESMTP id DA91519C0084; Tue, 10 Jan 2012 07:00:09 -0500 (ECT) Received: from 41.71.145.174 (SquirrelMail authenticated user aacosta) by mail.solca.med.ec with HTTP; Tue, 10 Jan 2012 07:00:10 -0500 (ECT) Message-ID: <64448.41.71.145.174.1326196810.squirrel@mail.solca.med.ec> Date: Tue, 10 Jan 2012 07:00:10 -0500 (ECT) Subject: =?utf-8?B?Tm90aWZpY2FjacOzbiB3ZWJtYXN0ZXIhIQ==?= From: =?utf-8?B?V2VibWFzdGVyIEFjdHVhbGl6YWNpw7NuIERlcGFydGFtZW50bw==?= X-ASG-Orig-Subj: =?utf-8?B?Tm90aWZpY2FjacOzbiB3ZWJtYXN0ZXIhIQ==?= Reply-To: customercarewebdept30@w.cn User-Agent: SquirrelMail/1.4.8-5.el5.centos.10 MIME-Version: 1.0 Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-TM-AS-Product-Ver: IMSS-7.1.0.1302-6.8.0.1017-18636.007 X-TM-AS-Result: No-1.221-4.5-31-10 X-imss-scan-details: No-1.221-4.5-31-10 X-TM-AS-User-Approved-Sender: No X-TMASE-MatchedRID: xIhOSkOSohXmR+RxuU2vfVDn5JGevlgbve4yDRKn3VUZM67SJal917XE sbo4UKeq4826dNYBpxy5z51WJ1wBuM/mgMItUzYIqgXDLHKleXRKqOmKgcmLdSHjWOHrHy8/8xN hDY4WGVXlTiVvSxITCksuTEEYs7ZJpsJvYAG8uEO4hnkI+b5XSH2pwmI3JKygP3tom4sn2QC6OM f7JyDRp+7q29pJjHB0Liin7H6AK1tMRnuUXnnMAIz2ICQqVaoYrjgxlpsePOZGcB/Zujf6QZXvi 3Cnl7vlf7+V10+OSRWWzBb/7Ck0Tzwop2D57bb18rLt6/XzAZYreUoDpjFjK53DsTW7rGadd5jE RkZGAc0j0wVQkGp/JJuGdofeEjcHyq+IFLm4MmWFEKfT7nDVoJXxsKTUj1Z+5C4nAKZioQEB92t TmhoDRY6HM5rqDwqtqYnLck3QB3PwHs/mBftDoHLk3BSydCvNrGkWhRrL3KNb2vUTe1/AGHysfX 3U5+HTS7EXX1WiCKSIe1tgnrrhtVAIIHWhJObcOR6CYtN4vQShSxmCB+ng/yEJv/ptYq6czSuEd UhLaehirdtcdHKuTZRMZUCEHkRt X-Barracuda-Connect: solca.med.ec[200.105.240.90] X-Barracuda-Start-Time: 1326196434 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85546 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Estimados suscriptores de cuentas de correo electrónico, Este es un mensaje de correo web del centro de mensajes a nuestra cuenta de correo web todos los owners.As primer trimestre de 2012 En estos momentos estamos llevando a cabo la actualización de servicio para nuestra base de datos y e-mail centro cuenta. Estamos eliminando todas las cuenta de correo web utilizado para crear más espacio para las nuevas cuentas. Para evitar que su cuenta de borrar y continuar utilizando nuestros servicios son necesarios para actualizar y confirmar tu cuenta de webmail. Para completar la confirmación de su cuenta en el primer trimestre de 2012, usted debe responder a este mensaje de inmediato y entrar en detalles de su cuenta como se solicita a continuación. Confirmar detalles de su cuenta Nombre de usuario: ............ Nombre de usuario E-mail ...... Contraseña: ................... Confirmar contraseña :......... Fecha de nacimiento: .......... Importante * Por favor, toda esta información completa y correctamente de lo contrario por razones de seguridad que puede tener que cerrar su cuenta de correo web temporarily.We gracias por su pronta atención a este matter.Please entender que esta es una medida de protección que se pretende ayudar a proteger la Cuenta su webmail. Nos disculpamos por cualquier inconveniente. From guaneryu@gmail.com Tue Jan 10 10:38:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AGcANa087940 for ; Tue, 10 Jan 2012 10:38:10 -0600 X-ASG-Debug-ID: 1326213488-005fe612a85d8790001-NocioJ Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id nxdm08F7OlsfSyNp for ; Tue, 10 Jan 2012 08:38:08 -0800 (PST) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhpp34 with SMTP id p34so1610580yhp.26 for ; Tue, 10 Jan 2012 08:38:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; bh=g8Cxdw+QCZZ5C+dbStIdl+dNp0MIQvDi2+pyXhxS+Ik=; b=IqUEgy4fq99X6wJc+KuHKbl4p7DzVodtASvt3TZ9fKWy7C+o6RQkIlpXqaWicDJ3LO PJCs0jXKaoMPTmsbPHNi6ZV7e18R3zFDXCF92s6S0mrYNzowtjYTdSeJSmLKBUxlqyPQ MOro462TbYu2YCiirCP+nshC6qrMdsbEjvKfw= Received: by 10.236.155.101 with SMTP id i65mr2203710yhk.104.1326213488623; Tue, 10 Jan 2012 08:38:08 -0800 (PST) Received: from localhost ([114.246.67.153]) by mx.google.com with ESMTPS id b6sm5221437ank.2.2012.01.10.08.38.04 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 10 Jan 2012 08:38:07 -0800 (PST) From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH] xfstests 271: use xfs_io to truncate file instead of truncate(1) Date: Wed, 11 Jan 2012 00:37:48 +0800 X-ASG-Orig-Subj: [PATCH] xfstests 271: use xfs_io to truncate file instead of truncate(1) Message-Id: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> X-Mailer: git-send-email 1.7.8.2 X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1326213488 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85564 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 X-Virus-Status: Clean Distros(eg. RHEL5) with older version of coreutils have no truncate(1) command. Use xfs_io instead to avoid "command not found" failures. Signed-off-by: Eryu Guan --- 271 | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/271 b/271 index 58a7f91..b96d702 100755 --- a/271 +++ b/271 @@ -55,7 +55,7 @@ do dd if=/dev/zero of=$SCRATCH_MNT/file bs=4k count=1 seek=$((i*10)) done # truncate last extent -truncate $SCRATCH_MNT/file --size $((4096* 200)) +$XFS_IO_PROG -F -f -c "truncate $((4096*200))" $SCRATCH_MNT/file if ! _scratch_unmount; then echo "failed to umount" -- 1.7.8.2 From guaneryu@gmail.com Tue Jan 10 10:38:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_45,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AGcPWc087965 for ; Tue, 10 Jan 2012 10:38:25 -0600 X-ASG-Debug-ID: 1326213504-00a9eb19d366c9b0001-NocioJ Received: from mail-yx0-f181.google.com (mail-yx0-f181.google.com [209.85.213.181]) by cuda.sgi.com with ESMTP id j8F0EnyBrqS3kZMJ for ; Tue, 10 Jan 2012 08:38:24 -0800 (PST) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.181 Received: by yenm3 with SMTP id m3so3013369yen.26 for ; Tue, 10 Jan 2012 08:38:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=ffSyDVTrW1YySwnuL1Znn41pjySY7+RZql3Oo+xmb8U=; b=h3LBItZq9od6z0fS2xXe5UYrLvQUbZYeorpJJtYMNsMG0p2e6udCcC9csipgiv5wnW lc5sSoBvsKSBYQUfXgh6wG/TIj2jP/IfAiRi7RI8IXHqDr8d0t/9nd5wSDFBFQK2+45w CzNiBTBQCLvZnV2qP0KKeW9Bw1eprf1bU6V/Q= Received: by 10.236.181.136 with SMTP id l8mr27516589yhm.103.1326213503857; Tue, 10 Jan 2012 08:38:23 -0800 (PST) Received: from localhost ([114.246.67.153]) by mx.google.com with ESMTPS id c28sm7419294ana.16.2012.01.10.08.38.19 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 10 Jan 2012 08:38:23 -0800 (PST) From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH] xfstests 273: Create lost+found to pass _check_scratch_fs Date: Wed, 11 Jan 2012 00:37:49 +0800 X-ASG-Orig-Subj: [PATCH] xfstests 273: Create lost+found to pass _check_scratch_fs Message-Id: <1326213469-22687-2-git-send-email-guaneryu@gmail.com> X-Mailer: git-send-email 1.7.8.2 In-Reply-To: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> References: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> X-Barracuda-Connect: mail-yx0-f181.google.com[209.85.213.181] X-Barracuda-Start-Time: 1326213504 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85565 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 X-Virus-Status: Clean fsck.extN will complain lost+found is missing and fail 273. So create lost+found explicitly after removing everything in $SCRATCH_MNT. Signed-off-by: Eryu Guan --- 273 | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/273 b/273 index 2965132..9ecb2d3 100755 --- a/273 +++ b/273 @@ -36,6 +36,7 @@ _cleanup() { cd / rm -rf $SCRATCH_MNT/* $tmp.* + mkdir -p $SCRATCH_MNT/lost+found _scratch_unmount } @@ -107,6 +108,7 @@ _do_workload() _pid=1 rm -rf $SCRATCH_MNT/* + mkdir -p $SCRATCH_MNT/lost+found _threads_set _file_create -- 1.7.8.2 From bpm@sgi.com Tue Jan 10 11:18:58 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AHIw1N089646 for ; Tue, 10 Jan 2012 11:18:58 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id EF29E304032; Tue, 10 Jan 2012 09:18:54 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id C8E13426DA7; Tue, 10 Jan 2012 11:18:55 -0600 (CST) Date: Tue, 10 Jan 2012 11:18:55 -0600 From: Ben Myers To: Jeff Liu Cc: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120110171855.GX6390@sgi.com> References: <4F06F71A.2010301@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F06F71A.2010301@oracle.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hey Jeff, On Fri, Jan 06, 2012 at 09:28:58PM +0800, Jeff Liu wrote: > This is a revised patch according to Christoph's comments at V4. I got caught up on versions 1-4, and am looking at this now. Thanks for your excellent contribution! I have some inital comments here, and then I'll get into it a little more deeply. > Changes to V5: > -------------- > * Revise xfs_has_unwritten_buffer() to lookup pages match tag. > * For unwritten extents, in both xfs_seek_data() and xfs_seek_hole(), call xfs_has_unwritten_buffer() to search > DIRTY pages firstly, if no dirty data found, call it again to search WRITEBACK pages. > * In xfs_seek_hole(), if dirty data was found in page cache for an unwritten extents, but its start offset past the start block > of the map, treat it as a hole, returns the offset if possible(data_buffer_offset > max(seek_offset, start_block_of_map)). > > Tests: > ------ > seek sanity tester: > http://patchwork.xfs.org/patch/3108/ > seek copy tester: > http://patchwork.xfs.org/patch/3109/ > > > Thanks, > -Jeff > > Signed-off-by: Jie Liu > > --- > fs/xfs/xfs_file.c | 466 ++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 465 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 753ed9b..24ae40a 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -38,6 +38,7 @@ > > #include > #include > +#include > > static const struct vm_operations_struct xfs_file_vm_ops; > > @@ -1141,8 +1142,471 @@ xfs_vm_page_mkwrite( > return block_page_mkwrite(vma, vmf, xfs_get_blocks); > } > > +/* > + * Probe the data buffer offset in page cache for unwritten extents. > + * Fetch all the pages match @tag, and iterate each page to find out > + * if a buffer head state has BH_Unwritten or BH_Uptodate set. > + */ > +STATIC bool > +xfs_has_unwritten_buffer( > + struct inode *inode, > + struct xfs_bmbt_irec *map, > + int tag, > + loff_t *offset) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + struct xfs_mount *mp = ip->i_mount; > + struct pagevec pvec; > + pgoff_t index; > + pgoff_t end; > + bool found = false; > + > + pagevec_init(&pvec, 0); > + > + index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; > + end = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount) > + >> PAGE_CACHE_SHIFT; > + > + do { > + unsigned int i; > + unsigned nr_pages; > + int want = min_t(pgoff_t, end - index, > + (pgoff_t)PAGEVEC_SIZE - 1) + 1; > + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, > + &index, tag, want); > + if (nr_pages == 0) > + break; > + > + for (i = 0; i < nr_pages; i++) { > + struct page *page = pvec.pages[i]; > + struct buffer_head *bh; > + struct buffer_head *head; > + xfs_fileoff_t last; You should take the page lock here, before looking at PagePrivate and the buffers. This is out of order with respect to the ilock. (The page_lock is held when xfs_vm_writepage calls xfs_map_blocks which will go after the ilock, and the same is the case when __xfs_get_blocks is called when writing into the page.) So... here you need to use trylock to avoid deadlocks, and assume that there is data on the page if you don't get the lock. Take a look at xfs_cluster_write and xfs_convert_page for an example. I think that this also means that you can check for PageDirty and PageWriteback under lock together... and so the upside is that you don't have to call this once for each tag anymore. Just use pagevec_lookup. > + > + if (!page_has_buffers(page)) > + continue; > + > + /* > + * There is no need to check the following pages > + * if the current page offset is out of range. > + */ > + if (page->index > end) > + goto out; > + > + last = XFS_B_TO_FSBT(mp, > + page->index << PAGE_CACHE_SHIFT); > + > + bh = head = page_buffers(page); > + do { > + /* > + * An extent in XFS_EXT_UNWRITTEN have disk > + * blocks already mapped to it, but no data > + * has been committed to them yet. If it has > + * dirty data in the page cache it can be > + * identified by having BH_Unwritten set in > + * each buffer. Also, the buffer head state > + * might be in BH_Uptodate too if the buffer > + * writeback procedure was fired, we need to > + * examine it as well. > + */ > + if (buffer_unwritten(bh) || > + buffer_uptodate(bh)) { > + found = true; > + *offset = XFS_FSB_TO_B(mp, last); > + goto out; > + } > + last++; > + } while ((bh = bh->b_this_page) != head); > + } > + > + /* > + * If the number of probed pages less than our desired, > + * there should no more pages mapped, search done. > + */ > + if (nr_pages < want) > + break; > + > + index = pvec.pages[i - 1]->index + 1; > + pagevec_release(&pvec); > + } while (index < end); > + > +out: > + pagevec_release(&pvec); > + if (!found) > + *offset = 0; > + > + return found; > +} > + > +STATIC loff_t > +xfs_seek_data( > + struct file *file, > + loff_t start) > +{ > + struct inode *inode = file->f_mapping->host; > + struct xfs_inode *ip = XFS_I(inode); > + struct xfs_mount *mp = ip->i_mount; > + xfs_fsize_t isize = i_size_read(inode); > + loff_t offset = 0; > + struct xfs_ifork *ifp; > + xfs_fileoff_t fsbno; > + xfs_filblks_t len; > + int lock; > + int error; > + > + lock = xfs_ilock_map_shared(ip); > + > + if (start >= isize) { > + error = ENXIO; > + goto out_lock; > + } > + > + fsbno = XFS_B_TO_FSBT(mp, start); > + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); Nit: calculation of start_fsb and end_fsb belong together. Just move ifp up a line. ;) That's all I have for right now. I'll be looking at it in greater detail today. Thanks, Ben > + len = XFS_B_TO_FSB(mp, isize); > + > + for (;;) { > + struct xfs_bmbt_irec map[2]; > + int nmap = 2; > + loff_t seekoff; > + > + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, > + XFS_BMAPI_ENTIRE); > + if (error) > + goto out_lock; > + > + /* No extents at given offset, must be beyond EOF */ > + if (!nmap) { > + error = ENXIO; > + goto out_lock; > + } > + > + seekoff = XFS_FSB_TO_B(mp, fsbno); > + /* > + * Landed in a hole, skip to check the next extent. > + * If the next extent landed in an in-memory data extent, > + * or it is a normal extent, its fine to return. > + * If the next extent landed in a hole extent, calculate > + * the start file system block number for the next scan. > + * If the next extent landed in an unwritten extent, we > + * need to lookup the page cache to examine the data > + * buffer offset, if nothing found, treat it as a hole > + * extent too. > + */ > + if (map[0].br_startblock == HOLESTARTBLOCK) { > + /* > + * Return ENXIO if no data extent behind > + * the given offset. In this case, the seek > + * offset should be landed in a hole. > + */ > + if (nmap == 1) { > + error = ENXIO; > + break; > + } > + > + if (map[1].br_state == XFS_EXT_NORM || > + map[1].br_startblock == DELAYSTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* > + * Landed in an unwritten extent, try to find out the data > + * buffer offset from page cache firstly. If nothing was > + * found, treat it as a hole, and skip to check the next > + * extent, something just like above. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + > + /* No data extent at the given offset */ > + if (nmap == 1) { > + error = ENXIO; > + break; > + } > + > + if (map[1].br_state == XFS_EXT_NORM || > + map[1].br_startblock == DELAYSTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* Landed in a delay allocated extent or a real data extent */ > + if (map[0].br_startblock == DELAYSTARTBLOCK || > + map[0].br_state == XFS_EXT_NORM) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > + > + /* Return ENXIO if beyond eof */ > + if (XFS_FSB_TO_B(mp, fsbno) > isize) { > + error = ENXIO; > + goto out_lock; > + } > + } > + > + if (offset < start) > + offset = start; > + > + if (offset != file->f_pos) > + file->f_pos = offset; > + > +out_lock: > + xfs_iunlock_map_shared(ip, lock); > + if (error) > + return -error; > + > + return offset; > +} > + > +STATIC loff_t > +xfs_seek_hole( > + struct file *file, > + loff_t start) > +{ > + struct inode *inode = file->f_mapping->host; > + struct xfs_inode *ip = XFS_I(inode); > + struct xfs_mount *mp = ip->i_mount; > + xfs_fsize_t isize = i_size_read(inode); > + loff_t offset = 0; > + struct xfs_ifork *ifp; > + xfs_fileoff_t fsbno; > + xfs_filblks_t len; > + int lock; > + int error; > + > + lock = xfs_ilock_map_shared(ip); > + > + if (start >= isize) { > + error = ENXIO; > + goto out_lock; > + } > + > + fsbno = XFS_B_TO_FSBT(mp, start); > + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); > + len = XFS_B_TO_FSB(mp, isize); > + > + for (;;) { > + struct xfs_bmbt_irec map[2]; > + int nmap = 2; > + loff_t seekoff; > + > + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, > + XFS_BMAPI_ENTIRE); > + if (error) > + goto out_lock; > + > + /* No extents at given offset, must be beyond EOF */ > + if (!nmap) { > + error = ENXIO; > + goto out_lock; > + } > + > + seekoff = XFS_FSB_TO_B(mp, fsbno); > + /* > + * Landed in an unwritten extent, try to lookup the page > + * cache to find out if there is dirty data or not. If > + * nothing was found, treate it as a hole. If there has > + * dirty data and its offset starts past both the start > + * block of the map and the current seek offset, it should > + * be treated as hole too. Otherwise, go through the next > + * extent to fetch holes. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[0].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[0].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > + > + /* > + * No more extent at the given offst, return the total > + * file size. > + */ > + if (nmap == 1) { > + offset = isize; > + break; > + } > + > + if (map[1].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* > + * Landed in a delay allocated extent or a real data extent, > + * if the next extent is landed in a hole or in an unwritten > + * extent but without data committed in the page cache, return > + * its offset. If the next extent has dirty data in page cache, > + * but its offset starts past both the start block of the map > + * and the seek offset, it still be a hole. > + */ > + if (map[0].br_startblock == DELAYSTARTBLOCK || > + map[0].br_state == XFS_EXT_NORM) { > + /* > + * No more extent at the give offset, return the > + * total file size. > + */ > + if (nmap == 1) { > + offset = isize; > + break; > + } > + > + if (map[1].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* Landed in a hole, its fine to return */ > + if (map[0].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > + > + /* Return ENXIO if beyond eof */ > + if (XFS_FSB_TO_B(mp, fsbno) > isize) { > + error = ENXIO; > + goto out_lock; > + } > + } > + > + if (offset < start) > + offset = start; > + > + if (offset != file->f_pos) > + file->f_pos = offset; > + > +out_lock: > + xfs_iunlock_map_shared(ip, lock); > + if (error) > + return -error; > + > + return offset; > +} > + > +STATIC loff_t > +xfs_file_llseek( > + struct file *file, > + loff_t offset, > + int origin) > +{ > + switch (origin) { > + case SEEK_END: > + case SEEK_CUR: > + case SEEK_SET: > + return generic_file_llseek(file, offset, origin); > + case SEEK_DATA: > + return xfs_seek_data(file, offset); > + case SEEK_HOLE: > + return xfs_seek_hole(file, offset); > + default: > + return -EOPNOTSUPP; > + } > +} > + > const struct file_operations xfs_file_operations = { > - .llseek = generic_file_llseek, > + .llseek = xfs_file_llseek, > .read = do_sync_read, > .write = do_sync_write, > .aio_read = xfs_file_aio_read, From landman@scalableinformatics.com Tue Jan 10 11:33:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AHWvPd090214 for ; Tue, 10 Jan 2012 11:33:00 -0600 X-ASG-Debug-ID: 1326216768-005fe612a75decc0001-NocioJ Received: from crunch.scalableinformatics.com (173-10-54-97-Michigan.hfc.comcastbusiness.net [173.10.54.97]) by cuda.sgi.com with ESMTP id PFz3QRsaJx1PV8Ho for ; Tue, 10 Jan 2012 09:32:49 -0800 (PST) X-Barracuda-Envelope-From: landman@scalableinformatics.com X-Barracuda-Apparent-Source-IP: 173.10.54.97 Received: from crunch.scalableinformatics.com (localhost [127.0.0.1]) by crunch.scalableinformatics.com (Postfix) with ESMTP id D4FFF80ACA00; Tue, 10 Jan 2012 12:32:49 -0500 (EST) Received: from [10.9.0.18] (unknown [10.9.0.18]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by crunch.scalableinformatics.com (Postfix) with ESMTPSA id 4B26A8088143; Tue, 10 Jan 2012 12:32:49 -0500 (EST) Message-ID: <4F0C763E.2060207@scalableinformatics.com> Date: Tue, 10 Jan 2012 12:32:46 -0500 From: Joe Landman Reply-To: landman@scalableinformatics.com Organization: Scalable Informatics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: bug: xfs_repair becomes very slow when file system has a large sparse file References: <4E4E9131.2050807@scalableinformatics.com> <20110820002657.GF32358@dastard> X-ASG-Orig-Subj: Re: bug: xfs_repair becomes very slow when file system has a large sparse file In-Reply-To: <20110820002657.GF32358@dastard> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: 173-10-54-97-Michigan.hfc.comcastbusiness.net[173.10.54.97] X-Barracuda-Start-Time: 1326216768 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85568 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean User just gave us permission to work on the system now, and we can be destructive if needed. Took a few months, but we have a full backup/snapshot which is now the primary, and this is an "extra" system to be remissioned, but still exhibits the problem reported last August. FWIW: [root@jr4-4 ~]# df -h /data Filesystem Size Used Avail Use% Mounted on /dev/md2 33T 30T 3.0T 92% /data On 08/19/2011 08:26 PM, Dave Chinner wrote: > On Fri, Aug 19, 2011 at 12:37:05PM -0400, Joe Landman wrote: >> (If you prefer we file this on a bug reporting system, please let me >> know where and I'll do this). >> >> Scenario: xfs_repair being run against an about 17TB volume, >> containing 1 large sparse file. Logical size of 7 PB, actual size, >> a few hundred GB. >> >> Metadata: Kernel = 2.6.32.41, 2.6.39.4, and others. Xfstools 3.1.5. >> Hardware RAID ~17TB LUN. Base OS: Centos 5.6 + updates + updated >> xfs tools + our kernels. Using external journal on a different >> device >> >> What we observe: >> >> Running xfs_repair >> >> xfs_repair -l /dev/md2 -vv /dev/sdd2 > > can you post the actual output of xfs_repair? > Will do below. >> >> the system gets to stage 3 and the first ag. Then it appears to >> stop. After an hour or so, we strace it, and we see >> >> pread(...) = 4096 > > and the same for the strace, along with syscall completion time? > (i.e. strace -ttt -T .....) That will tell us if the time is spend > doing IO or in the repair binary. > Ok. Will do below as well. > What is the CPU usage when this happens? How much memory do you A single CPU filled. > have? Is the machine swapping while it is slowing down? A couple of No. Checked that. > minutes output of 'vmstat 5' when it is in this state would be handy. Ok, will append this as well. > >> occurring about 2-3 per second. An hour later, its down to 1 per >> second. An hour after that, its once every 2 seconds. >> >> Also, somewhere on this disk, someone has created an unfortunately >> large file >> >> [root@jr4-2 ~]# ls -alF /data/brick-sdd2/dht/scratch/xyzpdq >> total 4652823496 >> d--------- 2 1232 1000 86 Jun 27 20:31 ./ >> drwx------ 104 1232 1000 65536 Aug 17 23:53 ../ >> -rw------- 1 1232 1000 21 Jun 27 09:57 Default.Route >> -rw------- 1 1232 1000 250 Jun 27 09:57 Gau-00000.inp >> -rw------- 1 1232 1000 0 Jun 27 09:57 Gau-00000.d2e >> -rw------- 1 1232 1000 7800416534233088 Jun 27 20:18 Gau-00000.rwf >> >> [root@jr4-2 ~]# ls -ahlF /data/brick-sdd2/dht/scratch/xyzpdq >> total 4.4T >> d--------- 2 1232 1000 86 Jun 27 20:31 ./ >> drwx------ 104 1232 1000 64K Aug 17 23:53 ../ >> -rw------- 1 1232 1000 21 Jun 27 09:57 Default.Route >> -rw------- 1 1232 1000 250 Jun 27 09:57 Gau-00000.inp >> -rw------- 1 1232 1000 0 Jun 27 09:57 Gau-00000.d2e >> -rw------- 1 1232 1000 7.0P Jun 27 20:18 Gau-00000.rwf >> >> This isn't a 7PB file system, its a 100TB file system across 3 >> machines, roughly 17TB per brick or OSS. The Gau-00000.rwf is >> obviously a sparse file, as could be seen with an ls -alsF > > What does du tell you about it? xfs_io -f -c "stat"? > xfs_bmap -vp? In the cases presented below, none of the files are sparse. I am wondering if it simply happens for large files. I scanned the file system for large files (greater than 10GB in size), and found quite a few ... a number of which were at 250+ GB size. > >> Upon removing that file, the xfs_repair completes within ~10 >> minutes. Leaving that file on there, the xfs_repair does not >> terminate, it just gets asymptotically slower. I'd like to leave these in place until you tell me you need them to be removed/looked at. > > That could simply be the memory footprint causing more swapping per > operation to occur. Or it could be that something is simply getting > too large for the index type being used. If the machine is not > swapping, can you point 'perf top -p' at it so > we might see where that CPU time is being spent? (you might need to > use a non-stripped version of the binary to get any useful > information) Ok. I'll generate that if needed. > >> Please let me know if you need more information, or if you would >> like me to file this somewhere else for official reportage. > > This is the right place to let us know about problems. > Separating with 8x========== on top and ==========x8 on bottom, with additional meta-data below the 8x ... portion 8x========== xfs_repair output for # nohup xfs_repair -m 16384 -vvv -l /dev/md10 /dev/md2 > \ # repair.out 2>&1 & [root@jr4-4 ~]# cat repair.out Phase 1 - find and verify superblock... - max_mem = 16777216, icount = 15540800, imem = 60706, dblock = 8782223872, dmem = 4288195 - block cache size set to 1547288 entries Phase 2 - using external log on /dev/md10 - zero log... zero_log: head block 2 tail block 2 - scan filesystem freespace and inode maps... - found root inode chunk libxfs_bcache: 0x8804c0 Max supported entries = 1547288 Max utilized entries = 11850 Active entries = 11850 Hash table size = 193411 Hits = 0 Misses = 11850 Hit ratio = 0.00 MRU 0 entries = 11850 (100%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 182822 ( 0%) Hash buckets with 1 entries 9785 ( 82%) Hash buckets with 2 entries 530 ( 8%) Hash buckets with 3 entries 108 ( 2%) Hash buckets with 4 entries 155 ( 5%) Hash buckets with 5 entries 9 ( 0%) Hash buckets with 8 entries 2 ( 0%) Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 # stuck here for more than 1 hour now ==========x8 8x========== top output # [root@jr4-4 ~]# top top - 11:30:27 up 160 days, 13:42, 2 users, load average: 0.87, 0.86, 0.87 Tasks: 384 total, 2 running, 382 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.8%sy, 0.0%ni, 98.2%id, 0.8%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 49459860k total, 15226800k used, 34233060k free, 380k buffers Swap: 13670752k total, 0k used, 13670752k free, 9612k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16623 root 20 0 15.6g 14g 908 R 99.9 30.0 121:00.98 xfs_repair 17099 root 20 0 12880 1232 732 R 2.0 0.0 0:00.02 top 1 root 20 0 10360 636 520 S 0.0 0.0 1:20.24 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 3:44.51 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 88:34.79 ksoftirqd/0 ==========x8 8x========== vmstat 5 output for # nohup vmstat 5 > vmstat.out 2>&1 & # started the xfs_repair after starting this, so this is the initial # data, subsequent data after the ... where xfs_repair appears to be # mired down. [root@jr4-4 ~]# tail -f vmstat.out procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 49093752 868 11020 0 0 744 249 0 0 0 1 98 1 0 0 0 0 49094260 868 11020 0 0 0 4 1616 264 0 0 100 0 0 0 0 0 49094384 876 11020 0 0 0 8 1614 262 0 0 100 0 0 0 0 0 49094320 876 11020 0 0 0 0 1614 271 0 0 100 0 0 0 0 0 49094332 884 11020 0 0 0 10 1619 275 0 0 100 0 0 1 0 0 45504692 884 11020 0 0 647582 24578 57587 68969 8 4 84 3 0 1 1 0 45481944 892 11020 0 0 2436 9 2232 1490 6 0 94 0 0 1 0 0 45478984 892 11020 0 0 306 7 1698 423 6 0 94 0 0 1 0 0 45477620 900 11020 0 0 134 10 1656 344 6 0 94 0 0 1 0 0 45476380 900 11020 0 0 106 0 1643 322 6 0 94 0 0 1 0 0 45475264 908 11020 0 0 90 6 1642 314 6 0 94 0 0 1 0 0 45474396 908 11020 0 0 76 4 1638 308 6 0 94 0 0 1 0 0 45473528 916 11020 0 0 74 6 1639 308 6 0 94 0 0 1 0 0 45472784 916 11020 0 0 66 0 1634 301 6 0 94 0 0 0 1 0 45471544 924 11020 0 0 174 10 1666 359 6 0 94 1 0 1 0 0 45470428 924 11020 0 0 179 4 1667 364 4 0 94 2 0 1 0 0 45469684 932 11020 0 0 114 6 1648 327 5 0 94 2 0 1 0 0 45469188 932 11020 0 0 94 0 1639 315 5 0 94 1 0 1 0 0 45468692 940 11020 0 0 85 6 1640 312 5 0 94 1 0 0 1 0 45467328 940 11020 0 0 246 0 1677 391 4 0 94 3 0 1 0 0 45466584 948 11020 0 0 135 6 1653 337 5 0 94 2 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 45465964 952 11016 0 0 101 2 1641 318 5 0 94 1 0 1 0 0 45465468 956 11020 0 0 88 7 1644 314 5 0 94 1 0 1 0 0 45464972 964 11020 0 0 80 6 1640 313 5 0 94 1 0 1 4 0 43957340 964 11020 0 0 251558 0 14506 21971 4 1 87 8 0 0 1 0 43732652 972 11020 0 0 75435 6 2454 1011 1 0 90 9 0 0 1 0 43728312 972 11020 0 0 355 0 1704 443 1 0 94 5 0 0 1 0 43724220 980 11020 0 0 310 6 1697 431 1 0 94 5 0 0 1 0 43721244 980 11020 0 0 315 0 1694 423 0 0 94 6 0 0 1 0 43719508 988 11020 0 0 325 11 1703 438 1 0 94 5 0 0 5 0 43475228 988 11020 0 0 7897 4 5164 2114 2 0 92 5 0 0 1 0 43239876 996 11020 0 0 81598 6 2387 967 1 0 90 9 0 0 1 0 43234048 996 11020 0 0 378 0 1710 455 1 0 94 6 0 0 1 0 42899620 1004 11020 0 0 63013 6 3309 3314 2 0 93 5 0 0 5 0 42643932 1004 11020 0 0 48565 0 2664 2174 1 0 92 7 0 1 0 0 42390972 1012 11020 0 0 47660 6 2905 1949 1 0 92 6 0 1 0 0 42389236 1012 11020 0 0 237 4 1679 388 4 0 94 2 0 0 1 0 42373472 324 9724 0 0 2662 34 1786 584 1 0 94 5 0 0 1 0 42367004 348 9740 0 0 333 10 1704 445 0 0 94 6 0 0 1 0 42362664 348 9740 0 0 326 0 1698 435 0 0 94 6 0 0 1 0 42358944 356 9740 0 0 326 6 1702 434 0 0 94 6 0 0 1 0 42354728 356 9740 0 0 758 0 1705 437 0 0 94 6 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 1 4 0 42313932 364 9740 0 0 6844 6 2211 765 0 0 93 6 0 0 5 0 41600312 364 9740 0 0 126161 6 8847 7009 2 1 89 8 0 1 0 0 40934052 372 9744 0 0 141561 20 16966 12097 3 1 88 8 0 0 1 0 40546056 372 9744 0 0 75141 0 4493 3544 2 0 91 7 0 0 5 0 40097548 380 9744 0 0 83139 6 11961 5714 2 1 89 8 0 1 4 0 39235500 380 9744 0 0 162830 0 21207 15579 3 1 88 9 0 1 4 0 36952660 388 9744 0 0 470646 6 73141 48593 6 3 77 15 0 0 5 0 36735288 400 9744 0 0 41452 0 6851 2697 1 1 86 13 0 3 3 0 35785820 408 9744 0 0 134878 10 33292 18313 3 1 85 10 0 1 4 0 35285976 408 9744 0 0 171517 0 9015 5008 1 1 85 13 0 0 1 0 35154040 416 9744 0 0 336041 10 4593 2815 2 1 86 12 0 0 1 0 35145980 416 9744 0 0 309 0 1770 426 0 0 94 6 0 0 1 0 35141268 424 9744 0 0 279 6 1758 412 3 0 94 3 0 0 1 0 35140028 424 9744 0 0 198 0 1715 366 3 0 94 3 0 1 0 0 35138540 432 9744 0 0 240 6 1740 391 3 0 94 3 0 1 0 0 35135688 432 9744 0 0 232 4 1733 388 3 0 94 3 0 0 1 0 35130480 440 9744 0 0 352 6 1795 446 1 0 94 5 0 0 1 0 35127628 444 9744 0 0 375 0 1802 455 0 0 94 6 0 0 1 0 35118576 452 9744 0 0 346 10 1792 446 2 0 94 4 0 0 1 0 35114484 452 9744 0 0 514 0 1872 528 0 0 94 6 0 0 1 0 35111260 460 9744 0 0 329 6 1782 434 0 0 94 6 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 1 0 35108408 464 9740 0 0 338 2 1785 438 1 0 94 6 0 0 1 0 35105432 468 9744 0 0 361 7 1800 451 1 0 94 6 0 0 1 0 35102828 476 9744 0 0 326 6 1783 439 0 0 94 6 0 0 1 0 35099852 476 9744 0 0 365 0 1797 450 0 0 94 6 0 0 1 0 35097000 484 9744 0 0 362 6 1800 453 0 0 94 6 0 0 1 0 35094272 484 9744 0 0 371 0 1801 456 1 0 94 6 0 0 1 0 35091172 492 9744 0 0 355 6 1798 452 0 0 94 6 0 0 1 0 35088320 492 9744 0 0 355 0 1792 444 1 0 94 6 0 0 1 0 35085716 500 9744 0 0 346 10 1794 447 1 0 94 6 0 0 1 0 35083112 500 9744 0 0 344 0 1786 441 1 0 94 6 0 0 1 0 35080136 508 9744 0 0 341 6 1789 445 0 0 94 6 0 1 0 0 35077408 508 9744 0 0 345 0 1787 440 0 0 94 6 0 0 1 0 35074556 516 9744 0 0 372 10 1810 462 0 0 94 6 0 0 1 0 35071704 516 9744 0 0 338 0 1785 437 0 0 94 6 0 0 1 0 35069224 524 9744 0 0 306 6 1771 427 1 0 94 6 0 1 0 0 35066992 524 9744 0 0 305 4 1769 423 1 0 94 6 0 0 5 0 35026196 532 9744 0 0 127340 6 3111 3127 2 0 89 9 0 0 1 0 35013052 540 9744 0 0 113392 6 2554 2902 2 0 90 8 0 0 1 0 35010200 540 9744 0 0 16826 0 1854 891 1 0 94 6 0 0 1 0 35005860 548 9744 0 0 28107 6 2006 1215 0 0 93 7 0 0 5 0 34971388 548 9744 0 0 82062 4 3487 4203 2 0 87 10 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 5 0 34900836 556 9744 0 0 395478 433 4399 3190 3 1 83 14 0 0 1 0 34876656 556 9744 0 0 40074 4 2049 765 1 0 91 8 0 0 1 0 34872564 564 9744 0 0 300 10 1696 423 1 0 94 5 0 0 1 0 34869836 564 9744 0 0 334 0 1699 437 1 0 94 6 0 0 1 0 34867480 572 9744 0 0 329 6 1700 434 1 0 94 5 0 0 1 0 34865000 572 9748 0 0 311 0 1693 424 0 0 94 6 0 ... (after 30 minutes) 1 0 0 34250164 540 9492 0 0 3 8 1619 285 6 0 94 0 0 1 0 0 34249920 548 9492 0 0 4 4 1618 288 6 0 94 0 0 1 0 0 34249920 548 9500 0 0 5 2 1617 289 6 0 94 0 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 34249920 556 9500 0 0 4 14 1624 293 6 0 94 0 0 1 0 0 34249796 564 9504 0 0 3 8 1620 286 6 0 94 0 0 1 0 0 34249800 572 9504 0 0 4 6 1619 290 6 0 94 0 0 1 0 0 34249676 580 9504 0 0 5 6 1622 293 6 0 94 0 0 1 0 0 34255388 588 9508 0 0 4 6 1618 289 6 0 94 0 0 1 0 0 34255388 608 9500 0 0 43 9 1624 304 6 0 94 0 0 1 0 0 34255080 616 9692 0 0 4 6 1619 289 6 0 94 0 0 1 0 0 34255080 624 9692 0 0 4 16 1623 288 6 0 94 0 0 1 0 0 34254956 632 9688 0 0 4 8 1619 286 6 0 94 0 0 1 0 0 34254836 640 9692 0 0 3 4 1617 281 6 0 94 0 0 1 0 0 34254836 640 9696 0 0 4 2 1617 285 6 0 94 0 0 1 0 0 34254836 648 9696 0 0 3 10 1620 286 6 0 94 0 0 1 0 0 34254712 656 9700 0 0 5 8 1620 290 6 0 94 0 0 1 0 0 34254716 664 9700 0 0 4 6 1619 286 6 0 94 0 0 ==========x8 8x========== strace output for # nohup strace -p 16623 -ttt -T > strace.out 2>&1 & 1326216486.322990 pread(4, "BMAP\0\0\0\376\0\0\0\0r\\\310@\0\0\0\0\v\367\342\271\0\0\0BQ\33j\0"..., 4096, 7859072671744) = 4096 <0.010081> 1326216487.813946 mprotect(0x7fe40cfe7000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000028> 1326216487.814068 pread(4, "BMAP\0\0\0\260\0\0\0\0r]T\242\0\0\0\0r]\323O\0\0\0BQ\270f\0"..., 4096, 822455537664) = 4096 <0.017904> 1326216488.866388 mprotect(0x7fe40cfe8000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000023> 1326216488.866519 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\367\342\271\0\0\0\0r]t\317\0\0\0BR\35\350\0"..., 4096, 7859205500928) = 4096 <0.009517> 1326216490.356207 mprotect(0x7fe40cfe9000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216490.356330 pread(4, "BMAP\0\0\0\376\0\0\0\0r]\323O\0\0\0\0ri\357\305\0\0\0BS\301\300\0"..., 4096, 7859106410496) = 4096 <0.010006> 1326216491.846474 mprotect(0x7fe40cfea000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216491.846590 pread(4, "BMAP\0\0\0\201\0\0\0\0r]t\317\0\0\0\0rj'\7\0\0\0Bl\321j\0"..., 4096, 7862456569856) = 4096 <0.012849> 1326216492.611395 mprotect(0x7fe40cfeb000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216492.611518 pread(4, "BMAP\0\0\0\200\0\0\0\0ri\357\305\0\0\0\0\v\371R\374\0\0\0Bm\236f\0"..., 4096, 7862514511872) = 4096 <0.011286> 1326216493.369264 mprotect(0x7fe40cfec000, 8192, PROT_READ|PROT_WRITE) = 0 <0.000028> 1326216493.369388 pread(4, "BMAP\0\0\0\376\0\0\0\0rj'\7\0\0\0\0\v\371\220\230\0\0\0Bm\351N\0"..., 4096, 822841688064) = 4096 <0.014758> 1326216494.873466 mprotect(0x7fe40cfee000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216494.873586 pread(4, "BMAP\0\0\0\223\0\0\0\0\v\371R\374\0\0\0\0\v\372#\237\0\0\0BnqT\0"..., 4096, 822906290176) = 4096 <0.011972> 1326216495.742900 mprotect(0x7fe40cfef000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216495.743018 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\371\220\230\0\0\0\0\v\371\315\370\0\0\0Bn\316V\0"..., 4096, 823060459520) = 4096 <0.014324> 1326216497.238220 mprotect(0x7fe40cff0000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216497.238347 pread(4, "BMAP\0\0\0\204\0\0\0\0\v\372#\237\0\0\0\0\v\372\357I\0\0\0Bom \0"..., 4096, 822970646528) = 4096 <0.014281> 1326216498.022466 mprotect(0x7fe40cff1000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216498.022584 pread(4, "BMAP\0\1\0\376\0\0\0\0r\21N=\0\0\0\0\f\200+\217\0\0\0\0!7\347S"..., 4096, 823104323584) = 4096 <0.011951> 1326216498.034632 mprotect(0x7fe40cff2000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000023> 1326216498.034712 pread(4, "BMAP\0\0\0\210\0\0\0\0\v\371\315\370\0\0\0\0\v\372Ms\0\0\0Bo\316\246\0"..., 4096, 823274016768) = 4096 <0.015055> 1326216498.843386 mprotect(0x7fe40cff3000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216498.843504 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\372\357I\0\0\0\0\v\372\225c\0\0\0Bp'4\0"..., 4096, 823104319488) = 4096 <0.015296> 1326216500.339933 mprotect(0x7fe40cff4000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000022> 1326216500.340026 pread(4, "BMAP\0\0\0\201\0\0\0\0\v\372Ms\0\0\0\0rjU\251\0\0\0Bp\312\24\0"..., 4096, 823179751424) = 4096 <0.009657> 1326216501.101929 mprotect(0x7fe40cff5000, 8192, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216501.102049 pread(4, "BMAP\0\0\0\201\0\0\0\0\v\372\225c\0\0\0\0\v\372\320<\0\0\0Bq\23\244\0"..., 4096, 7862563409920) = 4096 <0.016088> 1326216501.871373 mprotect(0x7fe40cff7000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216501.871494 pread(4, "BMAP\0\0\0\376\0\0\0\0rjU\251\0\0\0\0\v\373\20\341\0\0\0BqG\200\0"..., 4096, 823241457664) = 4096 <0.010275> 1326216503.364635 mprotect(0x7fe40cff8000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216503.364755 pread(4, "BMAP\0\0\0\200\0\0\0\0\v\372\320<\0\0\0\0\v\373\355\360\0\0\0Bq\303\242\0"..., 4096, 823309242368) = 4096 <0.016705> 1326216504.128107 mprotect(0x7fe40cff9000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000028> 1326216504.128232 pread(4, "BMAP\0\0\0\236\0\0\0\0\v\373\20\341\0\0\0\0\v\373f\25\0\0\0Br\37D\0"..., 4096, 823541039104) = 4096 <0.017153> 1326216505.076279 mprotect(0x7fe40cffa000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216505.076395 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\373\355\360\0\0\0\0\v\373\246i\0\0\0Br|\246\0"..., 4096, 823398584320) = 4096 <0.017912> 1326216506.576563 mprotect(0x7fe40cffb000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216506.576682 pread(4, "BMAP\0\0\0\220\0\0\0\0\v\373f\25\0\0\0\0\v\374\1774\0\0\0Bs!H\0"..., 4096, 823466037248) = 4096 <0.011574> 1326216507.429031 mprotect(0x7fe40cffc000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216507.429174 pread(4, "BMAP\0\0\0\303\0\0\0\0\v\373\246i\0\0\0\0\v\373\357/\0\0\0Bs~\346\0"..., 4096, 823693361152) = 4096 <0.014163> 1326216508.580628 mprotect(0x7fe40cffd000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216508.580747 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\374\1774\0\0\0\0\v\3746\372\0\0\0Bs\361P\0"..., 4096, 823542345728) = 4096 <0.018541> 1326216510.081415 mprotect(0x7fe40cffe000, 8192, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216510.081540 pread(4, "BMAP\0\0\0\235\0\0\0\0\v\373\357/\0\0\0\0\v\375&\346\0\0\0Bt\212b\0"..., 4096, 823617626112) = 4096 <0.014412> 1326216511.012066 mprotect(0x7fe40d000000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216511.012190 pread(4, "BMAP\0\0\0\313\0\0\0\0\v\3746\372\0\0\0\0\v\374t\263\0\0\0Bt\312\24\0"..., 4096, 823869202432) = 4096 <0.011888> 1326216512.208978 mprotect(0x7fe40d001000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216512.209100 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\375&\346\0\0\0\0\v\374\304\346\0\0\0Bu9,\0"..., 4096, 823682347008) = 4096 <0.015123> 1326216513.706751 mprotect(0x7fe40d002000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216513.706873 pread(4, "BMAP\0\0\0\237\0\0\0\0\v\374t\263\0\0\0\0\v\375\255\0\0\0\0Bu\257\354\0"..., 4096, 823766441984) = 4096 <0.015348> 1326216514.650434 mprotect(0x7fe40d003000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000027> 1326216514.650554 pread(4, "BMAP\0\0\0\271\0\0\0\0\v\374\304\346\0\0\0\0\v\375\6\263\0\0\0Bv\f\202\0"..., 4096, 824009818112) = 4096 <0.008932> 1326216515.739710 mprotect(0x7fe40d004000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216515.739834 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\375\255\0\0\0\0\0\211f\332_\0\0\0Bvr\324\0"..., 4096, 823835439104) = 4096 <0.019711> 1326216517.242497 mprotect(0x7fe40d005000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216517.242618 pread(4, "BMAP\0\0\0\214\0\0\0\0\v\375\6\263\0\0\0\0\v\376i\317\0\0\0Bw\32\320\0"..., 4096, 9442176659456) = 4096 <0.012487> 1326216518.072182 mprotect(0x7fe40d006000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216518.072303 pread(4, "BMAP\0\0\0\253\0\0\0\0\211f\332_\0\0\0\0\215\30W\303\0\0\0BwT\254\0"..., 4096, 824207798272) = 4096 <0.013816> 1326216519.084891 mprotect(0x7fe40d007000, 8192, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216519.085008 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\376i\317\0\0\0\0\v\375\352p\0\0\0Bw\262d\0"..., 4096, 9695979646976) = 4096 <0.014198> 1326216520.581764 mprotect(0x7fe40d009000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216520.581881 pread(4, "BMAP\0\0\0\177\0\0\0\0\215\30W\303\0\0\0\0rj\230 \0\0\0Bxa\266\0"..., 4096, 824074240000) = 4096 <0.012057> 1326216521.335842 mprotect(0x7fe40d00a000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216521.335962 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\375\352p\0\0\0\0\v\376F\310\0\0\0Bx\253\24\0"..., 4096, 7862633103360) = 4096 <0.012886> 1326216522.832068 mprotect(0x7fe40d00b000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216522.832189 pread(4, "BMAP\0\0\0\376\0\0\0\0rj\230 \0\0\0\0\216\261\21\313\0\0\0By\351\0\0"..., 4096, 824171069440) = 4096 <0.015956> 1326216524.331849 mprotect(0x7fe40d00c000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216524.331975 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\376F\310\0\0\0\0\v\377\210\237\0\0\0B{\237\300\0"..., 4096, 9805696380928) = 4096 <0.012498> 1326216525.828539 mprotect(0x7fe40d00d000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000029> 1326216525.828659 pread(4, "BMAP\0\0\0\266\0\0\0\0\216\261\21\313\0\0\0\0rp2:\0\0\0B\206\243:\0"..., 4096, 824508542976) = 4096 <0.005462> 1326216526.897970 mprotect(0x7fe40d00e000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216526.898094 pread(4, "BMAP\0\0\0\376\0\0\0\0\v\377\210\237\0\0\0\0\f\21.7\0\0\0B\246\324\"\0"..., 4096, 7864136867840) = 4096 <0.009157> 1326216528.390700 mprotect(0x7fe40d00f000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000028> 1326216528.390822 pread(4, "BMAP\0\0\0\203\0\0\0\0rp2:\0\0\0\0\f\22\240\370\0\0\0B\252\332\22\0"..., 4096, 829245583360) = 4096 <0.014973> 1326216529.171630 mprotect(0x7fe40d010000, 8192, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216529.171750 pread(4, "BMAP\0\0\0\234\0\0\0\0\f\21.7\0\0\0\0\f\22%?\0\0\0B\253\2174\0"..., 4096, 829634347008) = 4096 <0.012732> 1326216530.095737 mprotect(0x7fe40d012000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216530.095856 pread(4, "BMAP\0\0\0\376\0\0\0\0\f\22\240\370\0\0\0\0\f\23\243\232\0\0\0B\254g\360\0"..., 4096, 829504614400) = 4096 <0.017642> 1326216531.597565 mprotect(0x7fe40d013000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000031> 1326216531.597683 pread(4, "BMAP\0\0\0\261\0\0\0\0\f\22%?\0\0\0\0\f\23\301\353\0\0\0B\255\263\212\0"..., 4096, 829905543168) = 4096 <0.012275> 1326216532.644040 mprotect(0x7fe40d014000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216532.644162 pread(4, "BMAP\0\0\0\210\0\0\0\0\f\23\243\232\0\0\0\0\f\22\374\322\0\0\0B\256\202\24\0"..., 4096, 829937332224) = 4096 <0.011165> 1326216533.450555 mprotect(0x7fe40d015000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000027> 1326216533.450677 pread(4, "BMAP\0\0\0\376\0\0\0\0\f\23\301\353\0\0\0\0\f\24>\245\0\0\0B\257]\6\0"..., 4096, 829730660352) = 4096 <0.011231> 1326216534.946533 mprotect(0x7fe40d016000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216534.946653 pread(4, "BMAP\0\0\0\264\0\0\0\0\f\22\374\322\0\0\0\0\f\26\230!\0\0\0B\261\226\330\0"..., 4096, 830068117504) = 4096 <0.011953> 1326216536.010196 mprotect(0x7fe40d017000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000028> 1326216536.010308 pread(4, "BMAP\0\0\0\376\0\0\0\0\f\24>\245\0\0\0\0\f\26<\246\0\0\0B\262\371R\0"..., 4096, 830698819584) = 4096 <0.014615> 1326216537.509542 mprotect(0x7fe40d018000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216537.509665 pread(4, "BMAP\0\0\0\177\0\0\0\0\f\26\230!\0\0\0\0\f\30\32\36\0\0\0B\264\2260\0"..., 4096, 830602895360) = 4096 <0.016656> 1326216538.268615 mprotect(0x7fe40d019000, 8192, PROT_READ|PROT_WRITE) = 0 <0.000033> 1326216538.268743 pread(4, "BMAP\0\0\0\376\0\0\0\0\f\26<\246\0\0\0\0\f\0306\336\0\0\0B\265f\n\0"..., 4096, 831103557632) = 4096 <0.015820> 1326216539.777465 mprotect(0x7fe40d01b000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000032> 1326216539.777582 pread(4, "BMAP\0\0\0\220\0\0\0\0\f\30\32\36\0\0\0\0\f\34\312\215\0\0\0B\267C^\0"..., 4096, 831133704192) = 4096 <0.018219> 1326216540.637506 mprotect(0x7fe40d01c000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216540.637626 pread(4, "BMAP\0\0\0\311\0\0\0\0\f\0306\336\0\0\0\0rp\216\374\0\0\0B\270sV\0"..., 4096, 832362303488) = 4096 <0.011067> 1326216541.823721 mprotect(0x7fe40d01d000, 4096, PROT_READ|PROT_WRITE) = 0 <0.000030> 1326216541.823839 pread(4, "BMAP\0\0\0\376\0\0\0\0\f\34\312\215\0\0\0\0rp\302F\0\0\0B\271\320,\0"..., 4096, 7864234131456) = 4096 <0.015157> ==========x8 [root@jr4-4 ~]# uname -r 2.6.32.41.scalable Let me know if you need anything else. > Cheers, > > Dave. -- Joseph Landman, Ph.D Founder and CEO Scalable Informatics Inc. email: landman@scalableinformatics.com web : http://scalableinformatics.com http://scalableinformatics.com/sicluster phone: +1 734 786 8423 x121 fax : +1 866 888 3112 cell : +1 734 612 4615 From rafagriman@gmail.com Tue Jan 10 14:26:41 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, MIME_8BIT_HEADER,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AKQfIS095405 for ; Tue, 10 Jan 2012 14:26:41 -0600 X-ASG-Debug-ID: 1326227199-0222017aa56e65a0001-NocioJ Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by cuda.sgi.com with ESMTP id XbKFMkbP6vTX8KbE for ; Tue, 10 Jan 2012 12:26:39 -0800 (PST) X-Barracuda-Envelope-From: rafagriman@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.181 Received: by wibhq2 with SMTP id hq2so4291389wib.26 for ; Tue, 10 Jan 2012 12:26:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:mime-version:content-type :content-transfer-encoding:message-id; bh=9ejUtDtkQMGCDH1TyitgS2rDJ+zvkFXhZgpBQjP7Qic=; b=e40VlAplzNo/WIQB8oAoHBqFLwzxfBZeAp6V2y06k5zi4RofUXJIYI0vLXC4cYb9z8 DvwMncmw/r6xPR9WRJEJmDxbKhZeT8aC9pHHclFTvcckE7+BMeaUBF+BzhnIyCUNE4w+ KKg5RV1HW3Y4iDO+X3bbn9h8ZHKqyo4f7mp24= Received: by 10.180.90.136 with SMTP id bw8mr14850136wib.1.1326227198889; Tue, 10 Jan 2012 12:26:38 -0800 (PST) Received: from linux-pg7g.localnet (174.Red-88-7-180.staticIP.rima-tde.net. [88.7.180.174]) by mx.google.com with ESMTPS id v28sm43334661wbo.18.2012.01.10.12.26.38 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 10 Jan 2012 12:26:38 -0800 (PST) From: Rafa =?utf-8?q?Grim=C3=A1n?= To: "xfs-oss" Subject: Empty dir can't be removed ... because it's not empty? Date: Tue, 10 Jan 2012 21:26:35 +0100 X-ASG-Orig-Subj: Empty dir can't be removed ... because it's not empty? User-Agent: KMail/1.13.6 (Linux/2.6.37.6-0.9-desktop; KDE/4.6.0; i686; ; ) MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201201102126.35268.rafagriman@gmail.com> X-Barracuda-Connect: mail-wi0-f181.google.com[209.85.212.181] X-Barracuda-Start-Time: 1326227199 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85580 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 X-Virus-Status: Clean Hi all :) My /home is on an XFS partition all to it's own. The other day the lights went out and when I rebooted, there's an empty directory that can't be erased. This directory is a subdirectory in ~/.kde4/ The funny thing about this is that I can rename the directory, but I can't delete it: [root@mine albumcovers]# ls . .. cache [root@mine albumcovers]# ls -lah cache/ total 0 drwx------ 1 rafa users 6 Jan 10 02:23 . drwx------ 3 rafa users 18 Jan 10 02:23 .. [root@mine albumcovers]# du -sh cache/ 0 cache/ [root@mine albumcovers]# mount | grep -i home /dev/sda3 on /home type xfs (rw,relatime,attr2,delaylog,noquota) [root@mine albumcovers]# file cache/ cache/: directory [root@mine albumcovers]# rm -Rf cache/ rm: cannot remove `cache': Directory not empty [root@mine albumcovers]# mv cache other_dir_name [root@mine albumcovers]# ls . .. other_dir_name [root@mine albumcovers]# rm -Rf other_dir_name/ rm: cannot remove `other_dir_name': Directory not empty [root@mine albumcovers]# ls -lah other_dir_name/ total 0 drwx------ 1 rafa users 6 Jan 10 02:23 . drwx------ 3 rafa users 27 Jan 10 21:14 .. [root@mine albumcovers]# du -sh other_dir_name/ 0 other_dir_name/ [root@mine albumcovers]# Kernel version: 3.1.8-1-ARCH (Arch Linux) XFS: xfsprogs 3.1.7-1 Any idea of what's going on? Any tool I can use to understand what's happening? TIA Rafa -- "We cannot treat computers as Humans. Computers need love." From markus@trippelsdorf.de Tue Jan 10 14:58:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AKwwtT096382 for ; Tue, 10 Jan 2012 14:58:59 -0600 X-ASG-Debug-ID: 1326229136-0222017aa36e9d90001-NocioJ Received: from mail.ud10.udmedia.de (ud10.udmedia.de [194.117.254.50]) by cuda.sgi.com with ESMTP id eRm83PCEqWg8xqPY for ; Tue, 10 Jan 2012 12:58:56 -0800 (PST) X-Barracuda-Envelope-From: markus@trippelsdorf.de X-Barracuda-Apparent-Source-IP: 194.117.254.50 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version :content-type:content-transfer-encoding:in-reply-to; s=beta; bh= LN7Ia85aFrbkiBnXIgsfrEAMl3WCsrpL6MJyCHfUrCE=; b=bXzlbwLQMPkMUR97 CMa7+dTsNCFbsc1xP11iF664PI1bxDyZqzSmuxTIxSUUEc+lo/xM1pbWlthHvHKf V8LGBowkrG9BWqVXPDjwyVXAxLyE4lifoRNCfahGR/IrBZiVnCyapcqEAZePMOGe 9xLj/7E/vhkg8VhD96RRiBx4HFw= Received: (qmail 28492 invoked from network); 10 Jan 2012 21:58:55 +0100 Received: from unknown (HELO x4) (ud10?360p3@91.64.56.160) by mail.ud10.udmedia.de with ESMTPSA (DHE-RSA-AES256-SHA encrypted, authenticated); 10 Jan 2012 21:58:55 +0100 Date: Tue, 10 Jan 2012 21:58:54 +0100 From: Markus Trippelsdorf To: Rafa =?iso-8859-1?Q?Grim=E1n?= Cc: xfs-oss Subject: Re: Empty dir can't be removed ... because it's not empty? Message-ID: <20120110205854.GA13261@x4> X-ASG-Orig-Subj: Re: Empty dir can't be removed ... because it's not empty? References: <201201102126.35268.rafagriman@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <201201102126.35268.rafagriman@gmail.com> X-Barracuda-Connect: ud10.udmedia.de[194.117.254.50] X-Barracuda-Start-Time: 1326229136 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85582 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 X-Virus-Status: Clean On 2012.01.10 at 21:26 +0100, Rafa Grimán wrote: > Hi all :) > > My /home is on an XFS partition all to it's own. The other day the lights went > out and when I rebooted, there's an empty directory that can't be erased. This > directory is a subdirectory in ~/.kde4/ > > The funny thing about this is that I can rename the directory, but I can't > delete it: > > Any idea of what's going on? > Any tool I can use to understand what's happening? Try to run xfs_repair on that partition. -- Markus From david@fromorbit.com Tue Jan 10 16:02:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AM2xGR100020 for ; Tue, 10 Jan 2012 16:02:59 -0600 X-ASG-Debug-ID: 1326232964-005fe612a75f9380001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id fEDksgByFhPbZcgG for ; Tue, 10 Jan 2012 14:02:45 -0800 (PST) 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: Av0EAGazDE95LbVq/2dsb2JhbABDrFeBBoFyAQEEATocIwULCAMYLhQNGAMhE4d6tmwTix1jBJULiR+BV4dZ Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl6.internode.on.net with ESMTP; 11 Jan 2012 08:32:43 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RkjmE-0006Ns-2z; Wed, 11 Jan 2012 09:02:42 +1100 Date: Wed, 11 Jan 2012 09:02:42 +1100 From: Dave Chinner To: Eryu Guan Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 273: Create lost+found to pass _check_scratch_fs Message-ID: <20120110220242.GB24410@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests 273: Create lost+found to pass _check_scratch_fs References: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> <1326213469-22687-2-git-send-email-guaneryu@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326213469-22687-2-git-send-email-guaneryu@gmail.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: 1326232964 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85586 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 11, 2012 at 12:37:49AM +0800, Eryu Guan wrote: > fsck.extN will complain lost+found is missing and fail 273. > So create lost+found explicitly after removing everything in > $SCRATCH_MNT. I'd consider that a bug in e2fsck. Other filesystems handle missing lost+found directories without failing, but then again it's only these new tests that do this so fixing the tests is probably the right thing to do here. > Signed-off-by: Eryu Guan > --- > 273 | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/273 b/273 > index 2965132..9ecb2d3 100755 > --- a/273 > +++ b/273 > @@ -36,6 +36,7 @@ _cleanup() > { > cd / > rm -rf $SCRATCH_MNT/* $tmp.* > + mkdir -p $SCRATCH_MNT/lost+found > _scratch_unmount > } We shouldn't be removing files from the scratch device in the _cleanup function - if the test exits or fails, we need the corpse to be intact for debugging. Remving $SCRATCH_MNT/* from the rm command is what should be done here. > > @@ -107,6 +108,7 @@ _do_workload() > _pid=1 > > rm -rf $SCRATCH_MNT/* > + mkdir -p $SCRATCH_MNT/lost+found And rather than doing this, the test should put all it's files in a known location on the $SCRATCH_MNT and just remove that. e.g: WORK_DIR="$SCRATCH_MNT/$seq" .... rm -rf $WORKDIR .... The same fixes are required for 274 and 275 as well. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 10 16:10:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0AMASBw100561 for ; Tue, 10 Jan 2012 16:10:28 -0600 X-ASG-Debug-ID: 1326233426-00a9eb65e61af20001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id ApTijHskfxF8AGi9 for ; Tue, 10 Jan 2012 14:10:26 -0800 (PST) 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: AtoKAOW2DE95LbVq/2dsb2JhbABDq1KBBYEGgXIBAQQBMgEjIwULCAMYLhQlAyETh3q2fBOLHWMElQuSTw Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl6.internode.on.net with ESMTP; 11 Jan 2012 08:40:25 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rkjtg-0006OU-HO; Wed, 11 Jan 2012 09:10:24 +1100 Date: Wed, 11 Jan 2012 09:10:24 +1100 From: Dave Chinner To: Rafa =?iso-8859-1?Q?Grim=E1n?= Cc: xfs-oss Subject: Re: Empty dir can't be removed ... because it's not empty? Message-ID: <20120110221024.GC24410@dastard> X-ASG-Orig-Subj: Re: Empty dir can't be removed ... because it's not empty? References: <201201102126.35268.rafagriman@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <201201102126.35268.rafagriman@gmail.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: 1326233426 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85587 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Tue, Jan 10, 2012 at 09:26:35PM +0100, Rafa Grimán wrote: > Hi all :) > > My /home is on an XFS partition all to it's own. The other day the lights went > out and when I rebooted, there's an empty directory that can't be erased. This > directory is a subdirectory in ~/.kde4/ Is your system using barriers (i.e. mounting with nobarrier option, or hardware that doesn't support FUA)? Directory corruption like this on power failure is a classic sign of a voltile drive cache being lost on power failure. The output of dmesg from a system boot will tell us what hardware you have... > The funny thing about this is that I can rename the directory, but I can't > delete it: > > [root@mine albumcovers]# ls > . .. cache > > [root@mine albumcovers]# ls -lah cache/ > total 0 > drwx------ 1 rafa users 6 Jan 10 02:23 . > drwx------ 3 rafa users 18 Jan 10 02:23 .. ^^^ It's link count is 3, meaning that it thinks that there is an entry in the directory. You need to run xfs_repair to fix it (and whatever else is broken). Cheers, Dave. -- Dave Chinner david@fromorbit.com From jeff.liu@oracle.com Tue Jan 10 23:45:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0B5jT8N130433 for ; Tue, 10 Jan 2012 23:45:29 -0600 X-ASG-Debug-ID: 1326260725-0222017aa4708720001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id TFm1uV8eWrhpVF7F; Tue, 10 Jan 2012 21:45:25 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0B5jHqx001416 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 11 Jan 2012 05:45:18 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0B5jFrb002397 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 11 Jan 2012 05:45:17 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0B5jF7Y020220; Tue, 10 Jan 2012 23:45:15 -0600 Received: from [10.191.51.11] (/10.191.51.11) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 10 Jan 2012 21:45:14 -0800 Message-ID: <4F0D21E5.7010908@oracle.com> Date: Wed, 11 Jan 2012 13:45:09 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Ben Myers CC: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <20120110171855.GX6390@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090202.4F0D21EE.005C,ss=1,re=-2.300,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1326260725 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85616 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Ben, On 01/11/2012 01:18 AM, Ben Myers wrote: > Hey Jeff, > > On Fri, Jan 06, 2012 at 09:28:58PM +0800, Jeff Liu wrote: >> This is a revised patch according to Christoph's comments at V4. > > I got caught up on versions 1-4, and am looking at this now. > Thanks for your excellent contribution! > > I have some inital comments here, and then I'll get into it a little > more deeply. > >> Changes to V5: >> -------------- >> * Revise xfs_has_unwritten_buffer() to lookup pages match tag. >> * For unwritten extents, in both xfs_seek_data() and xfs_seek_hole(), call xfs_has_unwritten_buffer() to search >> DIRTY pages firstly, if no dirty data found, call it again to search WRITEBACK pages. >> * In xfs_seek_hole(), if dirty data was found in page cache for an unwritten extents, but its start offset past the start block >> of the map, treat it as a hole, returns the offset if possible(data_buffer_offset > max(seek_offset, start_block_of_map)). >> >> Tests: >> ------ >> seek sanity tester: >> http://patchwork.xfs.org/patch/3108/ >> seek copy tester: >> http://patchwork.xfs.org/patch/3109/ >> >> >> Thanks, >> -Jeff >> >> Signed-off-by: Jie Liu >> >> --- >> fs/xfs/xfs_file.c | 466 ++++++++++++++++++++++++++++++++++++++++++++++++++++- >> 1 files changed, 465 insertions(+), 1 deletions(-) >> >> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c >> index 753ed9b..24ae40a 100644 >> --- a/fs/xfs/xfs_file.c >> +++ b/fs/xfs/xfs_file.c >> @@ -38,6 +38,7 @@ >> >> #include >> #include >> +#include >> >> static const struct vm_operations_struct xfs_file_vm_ops; >> >> @@ -1141,8 +1142,471 @@ xfs_vm_page_mkwrite( >> return block_page_mkwrite(vma, vmf, xfs_get_blocks); >> } >> >> +/* >> + * Probe the data buffer offset in page cache for unwritten extents. >> + * Fetch all the pages match @tag, and iterate each page to find out >> + * if a buffer head state has BH_Unwritten or BH_Uptodate set. >> + */ >> +STATIC bool >> +xfs_has_unwritten_buffer( >> + struct inode *inode, >> + struct xfs_bmbt_irec *map, >> + int tag, >> + loff_t *offset) >> +{ >> + struct xfs_inode *ip = XFS_I(inode); >> + struct xfs_mount *mp = ip->i_mount; >> + struct pagevec pvec; >> + pgoff_t index; >> + pgoff_t end; >> + bool found = false; >> + >> + pagevec_init(&pvec, 0); >> + >> + index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; >> + end = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount) >> + >> PAGE_CACHE_SHIFT; >> + >> + do { >> + unsigned int i; >> + unsigned nr_pages; >> + int want = min_t(pgoff_t, end - index, >> + (pgoff_t)PAGEVEC_SIZE - 1) + 1; >> + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, >> + &index, tag, want); >> + if (nr_pages == 0) >> + break; >> + >> + for (i = 0; i < nr_pages; i++) { >> + struct page *page = pvec.pages[i]; >> + struct buffer_head *bh; >> + struct buffer_head *head; >> + xfs_fileoff_t last; > > You should take the page lock here, before looking at PagePrivate and > the buffers. This is out of order with respect to the ilock. (The > page_lock is held when xfs_vm_writepage calls xfs_map_blocks which will > go after the ilock, and the same is the case when __xfs_get_blocks is > called when writing into the page.) So... here you need to use trylock > to avoid deadlocks, and assume that there is data on the page if you > don't get the lock. Take a look at xfs_cluster_write and > xfs_convert_page for an example. Thanks for your timely response and pointing this out! I am suffering with a data loss when improving seek copy tester to produce a file with around thousands of extents these days, looks the root cause is most likely related to miss the page lock stuff. > > I think that this also means that you can check for PageDirty and > PageWriteback under lock together... and so the upside is that you don't > have to call this once for each tag anymore. Just use pagevec_lookup. Cool. originally, I have prepared to fix the below stupid code blocks at V5: if (offset > max_t(loff_t, seekoff, XFS_FSB_TO_B(mp, map[0].br_startoff))) { offset = max_t(loff_t, seekoff, XFS_FSB_TO_B(mp, map[0].br_startoff)); break; } to: max_off = max_t(loff_t, seekoff, XFS_FSB_TO_B(mp, map[0].br_startoff)); if (offset > max_off) { offset = max_off; break; } With your comments, this issue will gone :-P. > >> + >> + if (!page_has_buffers(page)) >> + continue; >> + >> + /* >> + * There is no need to check the following pages >> + * if the current page offset is out of range. >> + */ >> + if (page->index > end) >> + goto out; >> + >> + last = XFS_B_TO_FSBT(mp, >> + page->index << PAGE_CACHE_SHIFT); >> + >> + bh = head = page_buffers(page); >> + do { >> + /* >> + * An extent in XFS_EXT_UNWRITTEN have disk >> + * blocks already mapped to it, but no data >> + * has been committed to them yet. If it has >> + * dirty data in the page cache it can be >> + * identified by having BH_Unwritten set in >> + * each buffer. Also, the buffer head state >> + * might be in BH_Uptodate too if the buffer >> + * writeback procedure was fired, we need to >> + * examine it as well. >> + */ >> + if (buffer_unwritten(bh) || >> + buffer_uptodate(bh)) { >> + found = true; >> + *offset = XFS_FSB_TO_B(mp, last); >> + goto out; >> + } >> + last++; >> + } while ((bh = bh->b_this_page) != head); >> + } >> + >> + /* >> + * If the number of probed pages less than our desired, >> + * there should no more pages mapped, search done. >> + */ >> + if (nr_pages < want) >> + break; >> + >> + index = pvec.pages[i - 1]->index + 1; >> + pagevec_release(&pvec); >> + } while (index < end); >> + >> +out: >> + pagevec_release(&pvec); >> + if (!found) >> + *offset = 0; >> + >> + return found; >> +} >> + >> +STATIC loff_t >> +xfs_seek_data( >> + struct file *file, >> + loff_t start) >> +{ >> + struct inode *inode = file->f_mapping->host; >> + struct xfs_inode *ip = XFS_I(inode); >> + struct xfs_mount *mp = ip->i_mount; >> + xfs_fsize_t isize = i_size_read(inode); >> + loff_t offset = 0; >> + struct xfs_ifork *ifp; >> + xfs_fileoff_t fsbno; >> + xfs_filblks_t len; >> + int lock; >> + int error; >> + >> + lock = xfs_ilock_map_shared(ip); >> + >> + if (start >= isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + fsbno = XFS_B_TO_FSBT(mp, start); >> + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); > > Nit: calculation of start_fsb and end_fsb belong together. Just move > ifp up a line. ;) Hmm, looks we can safely remove ifp line since XFS_BMAPI_ENTIRE is used for xfs_bmapi_read(). > > That's all I have for right now. I'll be looking at it in greater > detail today. So I'll collect all your comments and submit it again. Thanks, -Jeff > > Thanks, > Ben > >> + len = XFS_B_TO_FSB(mp, isize); >> + >> + for (;;) { >> + struct xfs_bmbt_irec map[2]; >> + int nmap = 2; >> + loff_t seekoff; >> + >> + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, >> + XFS_BMAPI_ENTIRE); >> + if (error) >> + goto out_lock; >> + >> + /* No extents at given offset, must be beyond EOF */ >> + if (!nmap) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + seekoff = XFS_FSB_TO_B(mp, fsbno); >> + /* >> + * Landed in a hole, skip to check the next extent. >> + * If the next extent landed in an in-memory data extent, >> + * or it is a normal extent, its fine to return. >> + * If the next extent landed in a hole extent, calculate >> + * the start file system block number for the next scan. >> + * If the next extent landed in an unwritten extent, we >> + * need to lookup the page cache to examine the data >> + * buffer offset, if nothing found, treat it as a hole >> + * extent too. >> + */ >> + if (map[0].br_startblock == HOLESTARTBLOCK) { >> + /* >> + * Return ENXIO if no data extent behind >> + * the given offset. In this case, the seek >> + * offset should be landed in a hole. >> + */ >> + if (nmap == 1) { >> + error = ENXIO; >> + break; >> + } >> + >> + if (map[1].br_state == XFS_EXT_NORM || >> + map[1].br_startblock == DELAYSTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + offset = max_t(loff_t, seekoff, offset); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* >> + * Landed in an unwritten extent, try to find out the data >> + * buffer offset from page cache firstly. If nothing was >> + * found, treat it as a hole, and skip to check the next >> + * extent, something just like above. >> + */ >> + if (map[0].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + offset = max_t(loff_t, seekoff, offset); >> + break; >> + } >> + >> + /* No data extent at the given offset */ >> + if (nmap == 1) { >> + error = ENXIO; >> + break; >> + } >> + >> + if (map[1].br_state == XFS_EXT_NORM || >> + map[1].br_startblock == DELAYSTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + offset = max_t(loff_t, seekoff, offset); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* Landed in a delay allocated extent or a real data extent */ >> + if (map[0].br_startblock == DELAYSTARTBLOCK || >> + map[0].br_state == XFS_EXT_NORM) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[0].br_startoff)); >> + break; >> + } >> + >> + /* Return ENXIO if beyond eof */ >> + if (XFS_FSB_TO_B(mp, fsbno) > isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + } >> + >> + if (offset < start) >> + offset = start; >> + >> + if (offset != file->f_pos) >> + file->f_pos = offset; >> + >> +out_lock: >> + xfs_iunlock_map_shared(ip, lock); >> + if (error) >> + return -error; >> + >> + return offset; >> +} >> + >> +STATIC loff_t >> +xfs_seek_hole( >> + struct file *file, >> + loff_t start) >> +{ >> + struct inode *inode = file->f_mapping->host; >> + struct xfs_inode *ip = XFS_I(inode); >> + struct xfs_mount *mp = ip->i_mount; >> + xfs_fsize_t isize = i_size_read(inode); >> + loff_t offset = 0; >> + struct xfs_ifork *ifp; >> + xfs_fileoff_t fsbno; >> + xfs_filblks_t len; >> + int lock; >> + int error; >> + >> + lock = xfs_ilock_map_shared(ip); >> + >> + if (start >= isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + fsbno = XFS_B_TO_FSBT(mp, start); >> + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); >> + len = XFS_B_TO_FSB(mp, isize); >> + >> + for (;;) { >> + struct xfs_bmbt_irec map[2]; >> + int nmap = 2; >> + loff_t seekoff; >> + >> + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, >> + XFS_BMAPI_ENTIRE); >> + if (error) >> + goto out_lock; >> + >> + /* No extents at given offset, must be beyond EOF */ >> + if (!nmap) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + seekoff = XFS_FSB_TO_B(mp, fsbno); >> + /* >> + * Landed in an unwritten extent, try to lookup the page >> + * cache to find out if there is dirty data or not. If >> + * nothing was found, treate it as a hole. If there has >> + * dirty data and its offset starts past both the start >> + * block of the map and the current seek offset, it should >> + * be treated as hole too. Otherwise, go through the next >> + * extent to fetch holes. >> + */ >> + if (map[0].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + if (offset > max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[0].br_startoff))) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[0].br_startoff)); >> + break; >> + } >> + } else { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[0].br_startoff)); >> + break; >> + } >> + >> + /* >> + * No more extent at the given offst, return the total >> + * file size. >> + */ >> + if (nmap == 1) { >> + offset = isize; >> + break; >> + } >> + >> + if (map[1].br_startblock == HOLESTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + if (offset > max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff))) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff)); >> + break; >> + } >> + } else { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* >> + * Landed in a delay allocated extent or a real data extent, >> + * if the next extent is landed in a hole or in an unwritten >> + * extent but without data committed in the page cache, return >> + * its offset. If the next extent has dirty data in page cache, >> + * but its offset starts past both the start block of the map >> + * and the seek offset, it still be a hole. >> + */ >> + if (map[0].br_startblock == DELAYSTARTBLOCK || >> + map[0].br_state == XFS_EXT_NORM) { >> + /* >> + * No more extent at the give offset, return the >> + * total file size. >> + */ >> + if (nmap == 1) { >> + offset = isize; >> + break; >> + } >> + >> + if (map[1].br_startblock == HOLESTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + if (offset > max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff))) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff)); >> + break; >> + } >> + } else { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* Landed in a hole, its fine to return */ >> + if (map[0].br_startblock == HOLESTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[0].br_startoff)); >> + break; >> + } >> + >> + /* Return ENXIO if beyond eof */ >> + if (XFS_FSB_TO_B(mp, fsbno) > isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + } >> + >> + if (offset < start) >> + offset = start; >> + >> + if (offset != file->f_pos) >> + file->f_pos = offset; >> + >> +out_lock: >> + xfs_iunlock_map_shared(ip, lock); >> + if (error) >> + return -error; >> + >> + return offset; >> +} >> + >> +STATIC loff_t >> +xfs_file_llseek( >> + struct file *file, >> + loff_t offset, >> + int origin) >> +{ >> + switch (origin) { >> + case SEEK_END: >> + case SEEK_CUR: >> + case SEEK_SET: >> + return generic_file_llseek(file, offset, origin); >> + case SEEK_DATA: >> + return xfs_seek_data(file, offset); >> + case SEEK_HOLE: >> + return xfs_seek_hole(file, offset); >> + default: >> + return -EOPNOTSUPP; >> + } >> +} >> + >> const struct file_operations xfs_file_operations = { >> - .llseek = generic_file_llseek, >> + .llseek = xfs_file_llseek, >> .read = do_sync_read, >> .write = do_sync_write, >> .aio_read = xfs_file_aio_read, From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 03:55:26 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0B9tMMA152421 for ; Wed, 11 Jan 2012 03:55:26 -0600 X-ASG-Debug-ID: 1326275720-005fe612a86275e0001-w1Z2WR Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id PE4HgzhW97eVMo9s for ; Wed, 11 Jan 2012 01:55:20 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rkutm-0007sG-1H; Wed, 11 Jan 2012 09:55:14 +0000 Date: Wed, 11 Jan 2012 04:55:14 -0500 From: Christoph Hellwig To: Dave Chinner Cc: Michael Lueck , linux-xfs@oss.sgi.com Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Message-ID: <20120111095513.GA26958@infradead.org> X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? References: <20120102213706.GQ23662@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120102213706.GQ23662@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326275720 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85634 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Tue, Jan 03, 2012 at 08:37:06AM +1100, Dave Chinner wrote: > xfs: handle kmalloc failure when reading attrs > > From: Dave Chinner > > xfsdump uses for a large buffer for extended attributes, which has a > kmalloc'd shadow buffer in the kernel. This can fail after the > system has been running for some time as it is a high order > allocation. Convert this to a vmalloc so that it doesn't require > contiguous memory and so won't randomly fail while xfsdump is > running. I think this should use kmalloc for allocation smaller than a page to avoid the vmalloc overhead for the usual case of small attributes. Also the fs/xattr.c code for the normal xattr system calls needs the same treatment. From david@fromorbit.com Wed Jan 11 04:03:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BA3Kho153117 for ; Wed, 11 Jan 2012 04:03:20 -0600 X-ASG-Debug-ID: 1326276197-005fe612a96282f0001-w1Z2WR Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id dZ12GDtKWysVl5ce for ; Wed, 11 Jan 2012 02:03:18 -0800 (PST) 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: Av0EABNcDU95LbVq/2dsb2JhbABCrGSBBoFyAQEFOhwjEAgDDgcDIwsUJQMhE78XE4wKBJULklE Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail07.adl2.internode.on.net with ESMTP; 11 Jan 2012 20:33:17 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rkv1Y-0007gG-G2; Wed, 11 Jan 2012 21:03:16 +1100 Date: Wed, 11 Jan 2012 21:03:16 +1100 From: Dave Chinner To: Christoph Hellwig Cc: Michael Lueck , linux-xfs@oss.sgi.com Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Message-ID: <20120111100316.GH24410@dastard> X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? References: <20120102213706.GQ23662@dastard> <20120111095513.GA26958@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120111095513.GA26958@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1326276197 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85634 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 11, 2012 at 04:55:14AM -0500, Christoph Hellwig wrote: > On Tue, Jan 03, 2012 at 08:37:06AM +1100, Dave Chinner wrote: > > xfs: handle kmalloc failure when reading attrs > > > > From: Dave Chinner > > > > xfsdump uses for a large buffer for extended attributes, which has a > > kmalloc'd shadow buffer in the kernel. This can fail after the > > system has been running for some time as it is a high order > > allocation. Convert this to a vmalloc so that it doesn't require > > contiguous memory and so won't randomly fail while xfsdump is > > running. > > I think this should use kmalloc for allocation smaller than a page to > avoid the vmalloc overhead for the usual case of small attributes. > > Also the fs/xattr.c code for the normal xattr system calls needs the > same treatment. Sounds like a generic kvmalloc()/kvfree() call pair is the answer then. i.e. if kmalloc fails, then use vmalloc()... Cheers, Dave. -- Dave Chinner david@fromorbit.com From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 04:04:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BA4E7q153179 for ; Wed, 11 Jan 2012 04:04:14 -0600 X-ASG-Debug-ID: 1326276253-0222017aa6722af0001-w1Z2WR Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id jViJOorAajQSRn0N for ; Wed, 11 Jan 2012 02:04:13 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rkv2S-0000P1-Gn; Wed, 11 Jan 2012 10:04:12 +0000 Date: Wed, 11 Jan 2012 05:04:12 -0500 From: Christoph Hellwig To: Dave Chinner Cc: Christoph Hellwig , Michael Lueck , linux-xfs@oss.sgi.com Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Message-ID: <20120111100412.GA1538@infradead.org> X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? References: <20120102213706.GQ23662@dastard> <20120111095513.GA26958@infradead.org> <20120111100316.GH24410@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120111100316.GH24410@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326276253 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85634 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Jan 11, 2012 at 09:03:16PM +1100, Dave Chinner wrote: > Sounds like a generic kvmalloc()/kvfree() call pair is the answer > then. i.e. if kmalloc fails, then use vmalloc()... If my memory serves me right that's been discussed and rejected a few times before. From david@fromorbit.com Wed Jan 11 04:14:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BAEUPA153815 for ; Wed, 11 Jan 2012 04:14:31 -0600 X-ASG-Debug-ID: 1326276868-005fe612a86292f0001-w1Z2WR Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id mpnfCrTUek70jGNs for ; Wed, 11 Jan 2012 02:14:29 -0800 (PST) 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: Av0EAJxfDU95LbVq/2dsb2JhbABCrGWBBoFyAQEFOhwjEAgDDgojCxQlAyETvyQTjAoElQuSUQ Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail07.adl2.internode.on.net with ESMTP; 11 Jan 2012 20:44:28 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RkvCN-0007hf-1h; Wed, 11 Jan 2012 21:14:27 +1100 Date: Wed, 11 Jan 2012 21:14:27 +1100 From: Dave Chinner To: Christoph Hellwig Cc: Michael Lueck , linux-xfs@oss.sgi.com Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Message-ID: <20120111101426.GI24410@dastard> X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? References: <20120102213706.GQ23662@dastard> <20120111095513.GA26958@infradead.org> <20120111100316.GH24410@dastard> <20120111100412.GA1538@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120111100412.GA1538@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1326276868 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85634 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 11, 2012 at 05:04:12AM -0500, Christoph Hellwig wrote: > On Wed, Jan 11, 2012 at 09:03:16PM +1100, Dave Chinner wrote: > > Sounds like a generic kvmalloc()/kvfree() call pair is the answer > > then. i.e. if kmalloc fails, then use vmalloc()... > > If my memory serves me right that's been discussed and rejected a few > times before. Which has lead to several implementations of duplicated functionality like: - ext4_kvmalloc/ext4_kvfree - drm_malloc_ab/drm_calloc_large/drm_free_large - ceph_buffer_new/ceph_buffer_release - gfs2_alloc_sort_buffer/gfs2_free_sort_buffer - __ntfs_malloc/ntfs_free I don't think adding another two sets of identical wrappers (or open coding it) is the right thing given that it is a repeating pattern. Cheers, Dave. -- Dave Chinner david@fromorbit.com From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 04:29:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BATpeU156043 for ; Wed, 11 Jan 2012 04:29:51 -0600 X-ASG-Debug-ID: 1326277790-0222017aa5725970001-w1Z2WR Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 2YqsXZz5GYXanBjp for ; Wed, 11 Jan 2012 02:29:50 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkvRF-0005ti-Cu; Wed, 11 Jan 2012 10:29:49 +0000 Date: Wed, 11 Jan 2012 05:29:49 -0500 From: Christoph Hellwig To: Dave Chinner Cc: Christoph Hellwig , Michael Lueck , linux-xfs@oss.sgi.com Subject: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? Message-ID: <20120111102949.GA22652@infradead.org> X-ASG-Orig-Subj: Re: Why does xfsdump encounter "WARNING: could not get list of non-root attributes for nondir ino nnnn: Cannot allocate memory (12)"? References: <20120102213706.GQ23662@dastard> <20120111095513.GA26958@infradead.org> <20120111100316.GH24410@dastard> <20120111100412.GA1538@infradead.org> <20120111101426.GI24410@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120111101426.GI24410@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326277790 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85636 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Jan 11, 2012 at 09:14:27PM +1100, Dave Chinner wrote: > Which has lead to several implementations of duplicated > functionality like: > > - ext4_kvmalloc/ext4_kvfree > - drm_malloc_ab/drm_calloc_large/drm_free_large > - ceph_buffer_new/ceph_buffer_release > - gfs2_alloc_sort_buffer/gfs2_free_sort_buffer > - __ntfs_malloc/ntfs_free > > I don't think adding another two sets of identical wrappers (or open > coding it) is the right thing given that it is a repeating pattern. Give it a try, I'm not against it myself. From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:30:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBU2jq160730 for ; Wed, 11 Jan 2012 05:30:02 -0600 X-ASG-Debug-ID: 1326281398-0222017aa372c120001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 5U1ZxE4cw3y5oahr for ; Wed, 11 Jan 2012 03:29:58 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwNS-0002sQ-8o for xfs@oss.sgi.com; Wed, 11 Jan 2012 11:29:58 +0000 Date: Wed, 11 Jan 2012 06:29:58 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: Re: [PATCH 09/12] repair: kill check_inode_block Message-ID: <20120111112958.GA10932@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 09/12] repair: kill check_inode_block References: <20111202174619.179530033@bombadil.infradead.org> <20111202174742.901901836@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111202174742.901901836@bombadil.infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326281398 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 0.50 BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL Custom Rule HREF_FROM_MISMATCH_TEXT_URIx1_HL X-Virus-Status: Clean ping? On Fri, Dec 02, 2011 at 12:46:28PM -0500, Christoph Hellwig wrote: > It's a wrapper around check_aginode_block, but given that the only caller > already has the agno and agbno at hand it isn't overly useful. > > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/repair/dino_chunks.c > =================================================================== > --- xfsprogs-dev.orig/repair/dino_chunks.c 2011-11-14 20:04:08.847867904 +0100 > +++ xfsprogs-dev/repair/dino_chunks.c 2011-11-14 20:04:59.487867601 +0100 > @@ -72,14 +72,6 @@ check_aginode_block(xfs_mount_t *mp, > return(cnt); > } > > -int > -check_inode_block(xfs_mount_t *mp, > - xfs_ino_t ino) > -{ > - return(check_aginode_block(mp, XFS_INO_TO_AGNO(mp, ino), > - XFS_INO_TO_AGBNO(mp, ino))); > -} > - > /* > * tries to establish if the inode really exists in a valid > * inode chunk. returns number of new inodes if things are good > @@ -145,10 +137,9 @@ verify_inode_chunk(xfs_mount_t *mp, > */ > if (XFS_IALLOC_BLOCKS(mp) == 1) { > if (agbno > max_agbno) > - return(0); > - > - if (check_inode_block(mp, ino) == 0) > - return(0); > + return 0; > + if (check_aginode_block(mp, agno, agino) == 0) > + return 0; > > pthread_mutex_lock(&ag_locks[agno]); > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:30:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_51,J_CHICKENPOX_74,J_CHICKENPOX_83 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBU9DP160759 for ; Wed, 11 Jan 2012 05:30:09 -0600 X-ASG-Debug-ID: 1326281404-005fe612a66307b0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Q3QuDuukPOE5QL8w for ; Wed, 11 Jan 2012 03:30:04 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwNY-0003iw-A3 for xfs@oss.sgi.com; Wed, 11 Jan 2012 11:30:04 +0000 Date: Wed, 11 Jan 2012 06:30:04 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: Re: [PATCH 10/12] repair: mark local functions static Message-ID: <20120111113004.GB10932@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 10/12] repair: mark local functions static References: <20111202174619.179530033@bombadil.infradead.org> <20111202174743.292463733@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111202174743.292463733@bombadil.infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326281404 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean ping? On Fri, Dec 02, 2011 at 12:46:29PM -0500, Christoph Hellwig wrote: > Also remove unused function, remove useless ARGSUSED annotations and > similar tiny cleanups. > > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/repair/agheader.c > =================================================================== > --- xfsprogs-dev.orig/repair/agheader.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/agheader.c 2011-12-01 16:18:23.000000000 +0000 > @@ -22,7 +22,7 @@ > #include "protos.h" > #include "err_protos.h" > > -int > +static int > verify_set_agf(xfs_mount_t *mp, xfs_agf_t *agf, xfs_agnumber_t i) > { > xfs_drfsbno_t agblocks; > @@ -107,7 +107,7 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_ > return(retval); > } > > -int > +static int > verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) > { > xfs_drfsbno_t agblocks; > @@ -177,14 +177,13 @@ verify_set_agi(xfs_mount_t *mp, xfs_agi_ > * filesystem mount-point superblock > * > * the verified fields include id and geometry. > - > + * > * the inprogress fields, version numbers, and counters > * are allowed to differ as well as all fields after the > * counters to cope with the pre-6.5 mkfs non-zeroed > * secondary superblock sectors. > */ > - > -int > +static int > compare_sb(xfs_mount_t *mp, xfs_sb_t *sb) > { > fs_geometry_t fs_geo, sb_geo; > @@ -213,7 +212,7 @@ compare_sb(xfs_mount_t *mp, xfs_sb_t *sb > * Note: contrary to the name, this routine is called for all > * superblocks, not just the secondary superblocks. > */ > -int > +static int > secondary_sb_wack(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, > xfs_agnumber_t i) > { > Index: xfsprogs-dev/repair/attr_repair.c > =================================================================== > --- xfsprogs-dev.orig/repair/attr_repair.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/attr_repair.c 2011-12-01 16:18:23.000000000 +0000 > @@ -80,8 +80,7 @@ static int xfs_mac_valid(xfs_mac_label_t > * in user attribute land without a conflict. > * If value is non-zero, then a remote attribute is being passed in > */ > - > -int > +static int > valuecheck(char *namevalue, char *value, int namelen, int valuelen) > { > /* for proper alignment issues, get the structs and memmove the values */ > @@ -146,7 +145,7 @@ valuecheck(char *namevalue, char *value, > * if you cannot modify the structures. repair is set to 1, if anything > * was fixed. > */ > -int > +static int > process_shortform_attr( > xfs_ino_t ino, > xfs_dinode_t *dip, > @@ -490,7 +489,7 @@ bad_free_out: > return -1; > } > > -int > +static int > process_leaf_attr_block( > xfs_mount_t *mp, > xfs_attr_leafblock_t *leaf, > @@ -643,7 +642,7 @@ process_leaf_attr_block( > /* > * returns 0 if the attribute fork is ok, 1 if it has to be junked. > */ > -int > +static int > process_leaf_attr_level(xfs_mount_t *mp, > da_bt_cursor_t *da_cursor) > { > @@ -775,7 +774,7 @@ error_out: > * returns 0 if things are ok, 1 if bad > * Note this code has been based off process_node_dir. > */ > -int > +static int > process_node_attr( > xfs_mount_t *mp, > xfs_ino_t ino, > @@ -825,8 +824,7 @@ process_node_attr( > * returns 0 if things are ok, 1 if bad (attributes needs to be junked) > * repair is set, if anything was changed, but attributes can live thru it > */ > - > -int > +static int > process_longform_attr( > xfs_mount_t *mp, > xfs_ino_t ino, > Index: xfsprogs-dev/repair/dino_chunks.c > =================================================================== > --- xfsprogs-dev.orig/repair/dino_chunks.c 2011-12-01 16:18:23.000000000 +0000 > +++ xfsprogs-dev/repair/dino_chunks.c 2011-12-01 16:18:23.000000000 +0000 > @@ -34,8 +34,7 @@ > * the dinodes are verified using verify_uncertain_dinode() which > * means only the basic inode info is checked, no fork checks. > */ > - > -int > +static int > check_aginode_block(xfs_mount_t *mp, > xfs_agnumber_t agno, > xfs_agblock_t agbno) > @@ -85,7 +84,7 @@ check_aginode_block(xfs_mount_t *mp, > * routines called by check_uncertain_aginodes() and > * process_uncertain_aginodes(). > */ > -int > +static int > verify_inode_chunk(xfs_mount_t *mp, > xfs_ino_t ino, > xfs_ino_t *start_ino) > @@ -513,7 +512,7 @@ verify_inode_chunk(xfs_mount_t *mp, > /* > * same as above only for ag inode chunks > */ > -int > +static int > verify_aginode_chunk(xfs_mount_t *mp, > xfs_agnumber_t agno, > xfs_agino_t agino, > @@ -536,7 +535,7 @@ verify_aginode_chunk(xfs_mount_t *mp, > * this does the same as the two above only it returns a pointer > * to the inode record in the good inode tree > */ > -ino_tree_node_t * > +static ino_tree_node_t * > verify_aginode_chunk_irec(xfs_mount_t *mp, > xfs_agnumber_t agno, > xfs_agino_t agino) > Index: xfsprogs-dev/repair/dinode.c > =================================================================== > --- xfsprogs-dev.orig/repair/dinode.c 2011-12-01 16:17:32.000000000 +0000 > +++ xfsprogs-dev/repair/dinode.c 2011-12-01 16:18:23.000000000 +0000 > @@ -36,47 +36,7 @@ > * inode clearing routines > */ > > -/* > - * return the offset into the inode where the attribute fork starts > - */ > -/* ARGSUSED */ > -int > -calc_attr_offset(xfs_mount_t *mp, xfs_dinode_t *dino) > -{ > - int offset = (__psint_t)XFS_DFORK_DPTR(dino) - (__psint_t)dino; > - xfs_bmdr_block_t *dfp; > - > - /* > - * don't worry about alignment when calculating offset > - * because the data fork is already 8-byte aligned > - */ > - switch (dino->di_format) { > - case XFS_DINODE_FMT_DEV: > - offset += sizeof(xfs_dev_t); > - break; > - case XFS_DINODE_FMT_LOCAL: > - offset += be64_to_cpu(dino->di_size); > - break; > - case XFS_DINODE_FMT_EXTENTS: > - offset += be32_to_cpu(dino->di_nextents) * > - sizeof(xfs_bmbt_rec_t); > - break; > - case XFS_DINODE_FMT_BTREE: > - dfp = (xfs_bmdr_block_t *)XFS_DFORK_DPTR(dino); > - offset += be16_to_cpu(dfp->bb_numrecs) * > - sizeof(xfs_bmbt_rec_t); > - break; > - default: > - do_error(_("Unknown inode format.\n")); > - abort(); > - break; > - } > - > - return(offset); > -} > - > -/* ARGSUSED */ > -int > +static int > clear_dinode_attr(xfs_mount_t *mp, xfs_dinode_t *dino, xfs_ino_t ino_num) > { > ASSERT(dino->di_forkoff != 0); > @@ -125,8 +85,7 @@ _("would have cleared inode %" PRIu64 " > return(1); > } > > -/* ARGSUSED */ > -int > +static int > clear_dinode_core(xfs_dinode_t *dinoc, xfs_ino_t ino_num) > { > int dirty = 0; > @@ -262,8 +221,7 @@ clear_dinode_core(xfs_dinode_t *dinoc, x > return(dirty); > } > > -/* ARGSUSED */ > -int > +static int > clear_dinode_unlinked(xfs_mount_t *mp, xfs_dinode_t *dino) > { > > @@ -281,7 +239,7 @@ clear_dinode_unlinked(xfs_mount_t *mp, x > * until after the agi unlinked lists are walked in phase 3. > * returns > zero if the inode has been altered while being cleared > */ > -int > +static int > clear_dinode(xfs_mount_t *mp, xfs_dinode_t *dino, xfs_ino_t ino_num) > { > int dirty; > @@ -445,31 +403,6 @@ verify_agbno(xfs_mount_t *mp, > return verify_ag_bno(sbp, agno, agbno) == 0; > } > > -/* > - * return address of block fblock if it's within the range described > - * by the extent list. Otherwise, returns a null address. > - */ > -/* ARGSUSED */ > -xfs_dfsbno_t > -get_bmbt_reclist( > - xfs_mount_t *mp, > - xfs_bmbt_rec_t *rp, > - int numrecs, > - xfs_dfiloff_t fblock) > -{ > - int i; > - xfs_bmbt_irec_t irec; > - > - for (i = 0; i < numrecs; i++) { > - libxfs_bmbt_disk_get_all(rp + i, &irec); > - if (irec.br_startoff >= fblock && > - irec.br_startoff + irec.br_blockcount < fblock) > - return (irec.br_startblock + fblock - irec.br_startoff); > - } > - return(NULLDFSBNO); > -} > - > - > static int > process_rt_rec( > xfs_mount_t *mp, > @@ -601,8 +534,7 @@ _("illegal state %d in rt block map %" P > * file overlaps with any duplicate extents (in the > * duplicate extent list). > */ > -/* ARGSUSED */ > -int > +static int > process_bmbt_reclist_int( > xfs_mount_t *mp, > xfs_bmbt_rec_t *rp, > @@ -931,7 +863,7 @@ get_agino_buf(xfs_mount_t *mp, > * > * NOTE: getfunc_extlist only used by dirv1 checking code > */ > -xfs_dfsbno_t > +static xfs_dfsbno_t > getfunc_extlist(xfs_mount_t *mp, > xfs_ino_t ino, > xfs_dinode_t *dip, > @@ -960,7 +892,7 @@ getfunc_extlist(xfs_mount_t *mp, > /* > * NOTE: getfunc_btree only used by dirv1 checking code... > */ > -xfs_dfsbno_t > +static xfs_dfsbno_t > getfunc_btree(xfs_mount_t *mp, > xfs_ino_t ino, > xfs_dinode_t *dip, > @@ -1168,8 +1100,7 @@ get_bmapi(xfs_mount_t *mp, xfs_dinode_t > /* > * return 1 if inode should be cleared, 0 otherwise > */ > -/* ARGSUSED */ > -int > +static int > process_btinode( > xfs_mount_t *mp, > xfs_agnumber_t agno, > @@ -1344,8 +1275,7 @@ _("bad numrecs 0 in inode %" PRIu64 " bm > /* > * return 1 if inode should be cleared, 0 otherwise > */ > -/* ARGSUSED */ > -int > +static int > process_exinode( > xfs_mount_t *mp, > xfs_agnumber_t agno, > @@ -1431,7 +1361,7 @@ process_lclinode( > return(0); > } > > -int > +static int > process_symlink_extlist(xfs_mount_t *mp, xfs_ino_t lino, xfs_dinode_t *dino) > { > xfs_dfiloff_t expected_offset; > @@ -1502,7 +1432,7 @@ _("bad extent #%d count (%" PRIu64 ") in > * takes a name and length and returns 1 if the name contains > * a \0, returns 0 otherwise > */ > -int > +static int > null_check(char *name, int length) > { > int i; > @@ -1521,7 +1451,7 @@ null_check(char *name, int length) > * like usual, returns 0 if everything's ok and 1 if something's > * bogus > */ > -int > +static int > process_symlink( > xfs_mount_t *mp, > xfs_ino_t lino, > @@ -2459,8 +2389,7 @@ _("would clear obsolete nlink field in v > * > * for detailed, info, look at process_dinode() comments. > */ > -/* ARGSUSED */ > -int > +static int > process_dinode_int(xfs_mount_t *mp, > xfs_dinode_t *dino, > xfs_agnumber_t agno, > Index: xfsprogs-dev/repair/dinode.h > =================================================================== > --- xfsprogs-dev.orig/repair/dinode.h 2011-12-01 16:17:32.000000000 +0000 > +++ xfsprogs-dev/repair/dinode.h 2011-12-01 16:18:23.000000000 +0000 > @@ -61,19 +61,6 @@ scan_bmbt_reclist( > xfs_drfsbno_t *tot, > int whichfork); > > -int > -verify_inode_chunk(xfs_mount_t *mp, > - xfs_ino_t ino, > - xfs_ino_t *start_ino); > - > -int verify_aginode_chunk(xfs_mount_t *mp, > - xfs_agnumber_t agno, > - xfs_agino_t agino, > - xfs_agino_t *agino_start); > - > -int > -clear_dinode(xfs_mount_t *mp, xfs_dinode_t *dino, xfs_ino_t ino_num); > - > void > update_rootino(xfs_mount_t *mp); > > Index: xfsprogs-dev/repair/dir.c > =================================================================== > --- xfsprogs-dev.orig/repair/dir.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/dir.c 2011-12-01 16:18:23.000000000 +0000 > @@ -72,8 +72,7 @@ namecheck(char *name, int length) > * entries. a non-zero return value means the directory is bogus > * and should be blasted. > */ > -/* ARGSUSED */ > -int > +static int > process_shortform_dir( > xfs_mount_t *mp, > xfs_ino_t ino, > @@ -553,7 +552,7 @@ set_da_freemap(xfs_mount_t *mp, da_freem > * returns 0 if holemap is consistent with reality (as expressed by > * the da_freemap_t). returns 1 if there's a conflict. > */ > -int > +static int > verify_da_freemap(xfs_mount_t *mp, da_freemap_t *map, da_hole_map_t *holes, > xfs_ino_t ino, xfs_dablk_t da_bno) > { > @@ -591,7 +590,7 @@ verify_da_freemap(xfs_mount_t *mp, da_fr > return(0); > } > > -void > +static void > process_da_freemap(xfs_mount_t *mp, da_freemap_t *map, da_hole_map_t *holes) > { > int i, j, in_hole, start, length, smallest, num_holes; > @@ -678,8 +677,7 @@ process_da_freemap(xfs_mount_t *mp, da_f > /* > * returns 1 if the hole info doesn't match, 0 if it does > */ > -/* ARGSUSED */ > -int > +static int > compare_da_freemaps(xfs_mount_t *mp, da_hole_map_t *holemap, > da_hole_map_t *block_hmap, int entries, > xfs_ino_t ino, xfs_dablk_t da_bno) > @@ -879,7 +877,7 @@ error_out: > * buffers (e.g. if we do, it's a mistake). if error == 1, we're > * in an error-handling case so unreleased buffers may exist. > */ > -void > +static void > release_da_cursor_int(xfs_mount_t *mp, > da_bt_cursor_t *cursor, > int prev_level, > @@ -922,91 +920,6 @@ err_release_da_cursor(xfs_mount_t *mp, > } > > /* > - * like traverse_int_dablock only it does far less checking > - * and doesn't maintain the cursor. Just gets you to the > - * leftmost block in the directory. returns the fsbno > - * of that block if successful, NULLDFSBNO if not. > - */ > -xfs_dfsbno_t > -get_first_dblock_fsbno(xfs_mount_t *mp, > - xfs_ino_t ino, > - xfs_dinode_t *dino) > -{ > - xfs_dablk_t bno; > - int i; > - xfs_da_intnode_t *node; > - xfs_dfsbno_t fsbno; > - xfs_buf_t *bp; > - > - /* > - * traverse down left-side of tree until we hit the > - * left-most leaf block setting up the btree cursor along > - * the way. > - */ > - bno = 0; > - i = -1; > - node = NULL; > - > - fsbno = get_bmapi(mp, dino, ino, bno, XFS_DATA_FORK); > - > - if (fsbno == NULLDFSBNO) { > - do_warn(_("bmap of block #%u of inode %" PRIu64 " failed\n"), > - bno, ino); > - return(fsbno); > - } > - > - if (be64_to_cpu(dino->di_size) <= XFS_LBSIZE(mp)) > - return(fsbno); > - > - do { > - /* > - * walk down left side of btree, release buffers as you > - * go. if the root block is a leaf (single-level btree), > - * just return it. > - * > - */ > - > - bp = libxfs_readbuf(mp->m_dev, XFS_FSB_TO_DADDR(mp, fsbno), > - XFS_FSB_TO_BB(mp, 1), 0); > - if (!bp) { > - do_warn( > - _("can't read block %u (fsbno %" PRIu64 ") for directory inode %" PRIu64 "\n"), > - bno, fsbno, ino); > - return(NULLDFSBNO); > - } > - > - node = (xfs_da_intnode_t *)XFS_BUF_PTR(bp); > - > - if (XFS_DA_NODE_MAGIC != > - be16_to_cpu(node->hdr.info.magic)) { > - do_warn( > - _("bad dir/attr magic number in inode %" PRIu64 ", file bno = %u, fsbno = %" PRIu64 "\n"), > - ino, bno, fsbno); > - libxfs_putbuf(bp); > - return(NULLDFSBNO); > - } > - > - if (i == -1) > - i = be16_to_cpu(node->hdr.level); > - bno = be32_to_cpu(node->btree[0].before); > - > - libxfs_putbuf(bp); > - > - fsbno = get_bmapi(mp, dino, ino, bno, XFS_DATA_FORK); > - > - if (fsbno == NULLDFSBNO) { > - do_warn(_("bmap of block #%u of inode %" PRIu64 " failed\n"), > - bno, ino); > - return(NULLDFSBNO); > - } > - > - i--; > - } while(i > 0); > - > - return(fsbno); > -} > - > -/* > * make sure that all entries in all blocks along the right side of > * of the tree are used and hashval's are consistent. level is the > * level of the descendent block. returns 0 if good (even if it had > @@ -1401,8 +1314,7 @@ size_t ts_dirbuf_size = 64*1024; > * bad entry name index pointers), we lose the directory. We could > * try harder to fix this but it'll do for now. > */ > -/* ARGSUSED */ > -int > +static int > process_leaf_dir_block( > xfs_mount_t *mp, > xfs_dir_leafblock_t *leaf, > @@ -2311,7 +2223,7 @@ _("- existing hole info for block %d, di > /* > * returns 0 if the directory is ok, 1 if it has to be junked. > */ > -int > +static int > process_leaf_dir_level(xfs_mount_t *mp, > da_bt_cursor_t *da_cursor, > int ino_discovery, > @@ -2489,8 +2401,7 @@ error_out: > * > * returns 0 if things are ok, 1 if bad (directory needs to be junked) > */ > -/* ARGSUSED */ > -int > +static int > process_node_dir( > xfs_mount_t *mp, > xfs_ino_t ino, > @@ -2588,8 +2499,7 @@ _("setting directory inode (%" PRIu64 ") > * > * returns 0 if things are ok, 1 if bad (directory needs to be junked) > */ > -/* ARGSUSED */ > -int > +static int > process_leaf_dir( > xfs_mount_t *mp, > xfs_ino_t ino, > Index: xfsprogs-dev/repair/dir.h > =================================================================== > --- xfsprogs-dev.orig/repair/dir.h 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/dir.h 2011-12-01 16:18:23.000000000 +0000 > @@ -75,12 +75,6 @@ err_release_da_cursor( > da_bt_cursor_t *cursor, > int prev_level); > > -xfs_dfsbno_t > -get_first_dblock_fsbno( > - xfs_mount_t *mp, > - xfs_ino_t ino, > - xfs_dinode_t *dino); > - > void > init_da_freemap( > da_freemap_t *dir_freemap); > @@ -91,17 +85,6 @@ namecheck( > int length); > > int > -process_shortform_dir( > - xfs_mount_t *mp, > - xfs_ino_t ino, > - xfs_dinode_t *dip, > - int ino_discovery, > - int *dino_dirty, /* is dinode buffer dirty? */ > - xfs_ino_t *parent, /* out - NULLFSINO if entry doesn't exist */ > - char *dirname, /* directory pathname */ > - int *repair); /* out - 1 if dir was fixed up */ > - > -int > process_dir( > xfs_mount_t *mp, > xfs_ino_t ino, > Index: xfsprogs-dev/repair/dir2.c > =================================================================== > --- xfsprogs-dev.orig/repair/dir2.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/dir2.c 2011-12-01 16:18:23.000000000 +0000 > @@ -43,9 +43,10 @@ typedef struct dir2_bad { > xfs_ino_t ino; > struct dir2_bad *next; > } dir2_bad_t; > -dir2_bad_t *dir2_bad_list; > > -void > +static dir2_bad_t *dir2_bad_list; > + > +static void > dir2_add_badlist( > xfs_ino_t ino) > { > @@ -78,7 +79,7 @@ dir2_is_badino( > * Multibuffer handling. > * V2 directory blocks can be noncontiguous, needing multiple buffers. > */ > -xfs_dabuf_t * > +static xfs_dabuf_t * > da_read_buf( > xfs_mount_t *mp, > int nex, > @@ -186,7 +187,7 @@ da_buf_done( > free(dabuf); > } > > -int > +static int > da_bwrite( > xfs_mount_t *mp, > xfs_dabuf_t *dabuf) > @@ -226,7 +227,7 @@ da_bwrite( > return error; > } > > -void > +static void > da_brelse( > xfs_dabuf_t *dabuf) > { > @@ -262,7 +263,7 @@ da_brelse( > * left-most leaf block if successful (bno). returns 1 if successful, > * 0 if unsuccessful. > */ > -int > +static int > traverse_int_dir2block(xfs_mount_t *mp, > dir2_bt_cursor_t *da_cursor, > xfs_dablk_t *rbno) > @@ -392,7 +393,7 @@ error_out: > * buffers (e.g. if we do, it's a mistake). if error == 1, we're > * in an error-handling case so unreleased buffers may exist. > */ > -void > +static void > release_dir2_cursor_int(xfs_mount_t *mp, > dir2_bt_cursor_t *cursor, > int prev_level, > @@ -418,7 +419,7 @@ release_dir2_cursor_int(xfs_mount_t *mp > return; > } > > -void > +static void > release_dir2_cursor(xfs_mount_t *mp, > dir2_bt_cursor_t *cursor, > int prev_level) > @@ -426,7 +427,7 @@ release_dir2_cursor(xfs_mount_t *mp, > release_dir2_cursor_int(mp, cursor, prev_level, 0); > } > > -void > +static void > err_release_dir2_cursor(xfs_mount_t *mp, > dir2_bt_cursor_t *cursor, > int prev_level) > @@ -442,7 +443,7 @@ err_release_dir2_cursor(xfs_mount_t *mp > * technically a block boundary. This routine should be used then > * instead of verify_dir2_path(). > */ > -int > +static int > verify_final_dir2_path(xfs_mount_t *mp, > dir2_bt_cursor_t *cursor, > const int p_level) > @@ -589,7 +590,7 @@ _("would correct bad hashval in non-leaf > * since they have to be set so we can get a buffer for the > * block. > */ > -int > +static int > verify_dir2_path(xfs_mount_t *mp, > dir2_bt_cursor_t *cursor, > const int p_level) > Index: xfsprogs-dev/repair/dir2.h > =================================================================== > --- xfsprogs-dev.orig/repair/dir2.h 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/dir2.h 2011-12-01 16:18:23.000000000 +0000 > @@ -59,30 +59,6 @@ typedef struct dir2_bt_cursor { > struct blkmap *blkmap; > } dir2_bt_cursor_t; > > - > -/* ROUTINES */ > - > -void > -err_release_dir2_cursor( > - xfs_mount_t *mp, > - dir2_bt_cursor_t *cursor, > - int prev_level); > - > -xfs_dabuf_t * > -da_read_buf( > - xfs_mount_t *mp, > - int nex, > - struct bmap_ext *bmp); > - > -int > -da_bwrite( > - xfs_mount_t *mp, > - xfs_dabuf_t *bp); > - > -void > -da_brelse( > - xfs_dabuf_t *bp); > - > int > process_dir2( > xfs_mount_t *mp, > @@ -99,10 +75,6 @@ process_sf_dir2_fixi8( > xfs_dir2_sf_t *sfp, > xfs_dir2_sf_entry_t **next_sfep); > > -void > -dir2_add_badlist( > - xfs_ino_t ino); > - > int > dir2_is_badino( > xfs_ino_t ino); > Index: xfsprogs-dev/repair/phase1.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase1.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/phase1.c 2011-12-01 16:18:23.000000000 +0000 > @@ -22,7 +22,7 @@ > #include "protos.h" > #include "err_protos.h" > > -void > +static void > no_sb(void) > { > do_warn(_("Sorry, could not find valid secondary superblock\n")); > Index: xfsprogs-dev/repair/phase4.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase4.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/phase4.c 2011-12-01 16:18:23.000000000 +0000 > @@ -40,7 +40,7 @@ > * free in which case they'd never be cleared so the fields wouldn't > * be cleared by process_dinode(). > */ > -void > +static void > quotino_check(xfs_mount_t *mp) > { > ino_tree_node_t *irec; > @@ -81,7 +81,7 @@ quotino_check(xfs_mount_t *mp) > } > } > > -void > +static void > quota_sb_check(xfs_mount_t *mp) > { > /* > Index: xfsprogs-dev/repair/phase5.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase5.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/phase5.c 2011-12-01 16:18:23.000000000 +0000 > @@ -78,7 +78,7 @@ static __uint64_t *sb_icount_ag; /* all > static __uint64_t *sb_ifree_ag; /* free inodes per ag */ > static __uint64_t *sb_fdblocks_ag; /* free data blocks per ag */ > > -int > +static int > mk_incore_fstree(xfs_mount_t *mp, xfs_agnumber_t agno) > { > int in_extent; > @@ -165,8 +165,7 @@ mk_incore_fstree(xfs_mount_t *mp, xfs_ag > return(num_extents); > } > > -/* ARGSUSED */ > -xfs_agblock_t > +static xfs_agblock_t > get_next_blockaddr(xfs_agnumber_t agno, int level, bt_status_t *curs) > { > ASSERT(curs->free_btree_blocks < curs->btree_blocks + > @@ -185,8 +184,7 @@ get_next_blockaddr(xfs_agnumber_t agno, > * cursor pointer to the btree root. called by init_freespace_cursor() > * and init_ino_cursor() > */ > -/* ARGSUSED */ > -void > +static void > setup_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *curs) > { > int j; > @@ -301,7 +299,7 @@ setup_cursor(xfs_mount_t *mp, xfs_agnumb > #endif > } > > -void > +static void > write_cursor(bt_status_t *curs) > { > int i; > @@ -322,7 +320,7 @@ write_cursor(bt_status_t *curs) > } > } > > -void > +static void > finish_cursor(bt_status_t *curs) > { > ASSERT(curs->num_free_blocks == 0); > @@ -341,8 +339,7 @@ finish_cursor(bt_status_t *curs) > * btree_curs is an in/out. returns the number of > * blocks that will show up in the AGFL. > */ > - > -int > +static int > calculate_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, > xfs_agblock_t *extents, bt_status_t *btree_curs) > { > @@ -595,7 +592,7 @@ calculate_freespace_cursor(xfs_mount_t * > return(extra_blocks); > } > > -void > +static void > prop_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, > bt_status_t *btree_curs, xfs_agblock_t startblock, > xfs_extlen_t blockcount, int level, __uint32_t magic) > @@ -689,7 +686,7 @@ prop_freespace_cursor(xfs_mount_t *mp, x > * of tree to build (bno or bcnt). returns the number of free blocks > * represented by the tree. > */ > -xfs_extlen_t > +static xfs_extlen_t > build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno, > bt_status_t *btree_curs, __uint32_t magic) > { > @@ -854,7 +851,7 @@ build_freespace_tree(xfs_mount_t *mp, xf > * may perturb things because inode tree building happens before > * freespace tree building. > */ > -void > +static void > init_ino_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, > __uint64_t *num_inos, __uint64_t *num_free_inos) > { > @@ -942,7 +939,7 @@ init_ino_cursor(xfs_mount_t *mp, xfs_agn > return; > } > > -void > +static void > prop_ino_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs, > xfs_agino_t startino, int level) > { > @@ -1027,7 +1024,7 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agn > *bt_ptr = cpu_to_be32(btree_curs->level[level-1].agbno); > } > > -void > +static void > build_agi(xfs_mount_t *mp, xfs_agnumber_t agno, > bt_status_t *btree_curs, xfs_agino_t first_agino, > xfs_agino_t count, xfs_agino_t freecount) > @@ -1067,7 +1064,7 @@ build_agi(xfs_mount_t *mp, xfs_agnumber_ > * rebuilds an inode tree given a cursor. We're lazy here and call > * the routine that builds the agi > */ > -void > +static void > build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno, > bt_status_t *btree_curs) > { > @@ -1197,7 +1194,7 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnu > * build both the agf and the agfl for an agno given both > * btree cursors > */ > -void > +static void > build_agf_agfl(xfs_mount_t *mp, > xfs_agnumber_t agno, > bt_status_t *bno_bt, > @@ -1353,7 +1350,7 @@ build_agf_agfl(xfs_mount_t *mp, > * feature bits to the filesystem, and sync up the on-disk superblock > * to match the incore superblock. > */ > -void > +static void > sync_sb(xfs_mount_t *mp) > { > xfs_buf_t *bp; > @@ -1377,7 +1374,7 @@ sync_sb(xfs_mount_t *mp) > * make sure the root and realtime inodes show up allocated > * even if they've been freed. they get reinitialized in phase6. > */ > -void > +static void > keep_fsinos(xfs_mount_t *mp) > { > ino_tree_node_t *irec; > Index: xfsprogs-dev/repair/phase6.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase6.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/phase6.c 2011-12-01 16:18:23.000000000 +0000 > @@ -509,7 +509,7 @@ mk_rbmino(xfs_mount_t *mp) > libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC); > } > > -int > +static int > fill_rbmino(xfs_mount_t *mp) > { > xfs_buf_t *bp; > @@ -576,7 +576,7 @@ _("can't access block %" PRIu64 " (fsbno > return(0); > } > > -int > +static int > fill_rsumino(xfs_mount_t *mp) > { > xfs_buf_t *bp; > @@ -645,7 +645,7 @@ _("can't access block %" PRIu64 " (fsbno > return(0); > } > > -void > +static void > mk_rsumino(xfs_mount_t *mp) > { > xfs_trans_t *tp; > @@ -751,7 +751,7 @@ mk_rsumino(xfs_mount_t *mp) > /* > * makes a new root directory. > */ > -void > +static void > mk_root_dir(xfs_mount_t *mp) > { > xfs_trans_t *tp; > @@ -815,7 +815,7 @@ mk_root_dir(xfs_mount_t *mp) > /* > * orphanage name == lost+found > */ > -xfs_ino_t > +static xfs_ino_t > mk_orphanage(xfs_mount_t *mp) > { > xfs_ino_t ino; > @@ -1130,9 +1130,6 @@ mv_orphanage( > } > > /* > - * like get_first_dblock_fsbno only it uses the simulation code instead > - * of raw I/O. > - * > * Returns the fsbno of the first (leftmost) block in the directory leaf. > * sets *bno to the directory block # corresponding to the returned fsbno. > */ > @@ -3519,7 +3516,7 @@ out: > * mark realtime bitmap and summary inodes as reached. > * quota inode will be marked here as well > */ > -void > +static void > mark_standalone_inodes(xfs_mount_t *mp) > { > ino_tree_node_t *irec; > Index: xfsprogs-dev/repair/progress.c > =================================================================== > --- xfsprogs-dev.orig/repair/progress.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/progress.c 2011-12-01 16:18:23.000000000 +0000 > @@ -360,7 +360,7 @@ print_final_rpt(void) > return(sum); > } > > -void > +static void > timediff(int phase) > { > phase_times[phase].duration = > Index: xfsprogs-dev/repair/sb.c > =================================================================== > --- xfsprogs-dev.orig/repair/sb.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/sb.c 2011-12-01 16:18:23.000000000 +0000 > @@ -32,7 +32,7 @@ > * copy the fields of a superblock that are present in primary and > * secondaries -- preserve fields that are different in the primary. > */ > -void > +static void > copy_sb(xfs_sb_t *source, xfs_sb_t *dest) > { > xfs_ino_t rootino; > @@ -169,7 +169,7 @@ find_secondary_sb(xfs_sb_t *rsb) > * calculate what inode alignment field ought to be > * based on internal superblock info > */ > -int > +static int > calc_ino_align(xfs_sb_t *sb) > { > xfs_extlen_t align; > @@ -516,8 +516,7 @@ get_sb(xfs_sb_t *sbp, xfs_off_t off, int > } > > /* returns element on list with highest reference count */ > - > -fs_geo_list_t * > +static fs_geo_list_t * > get_best_geo(fs_geo_list_t *list) > { > int cnt = 0; > @@ -537,8 +536,7 @@ get_best_geo(fs_geo_list_t *list) > } > > /* adds geometry info to linked list. returns (sometimes new) head of list */ > - > -fs_geo_list_t * > +static fs_geo_list_t * > add_geo(fs_geo_list_t *list, fs_geometry_t *geo_p, int index) > { > fs_geo_list_t *current = list; > @@ -565,7 +563,7 @@ add_geo(fs_geo_list_t *list, fs_geometry > return(current); > } > > -void > +static void > free_geo(fs_geo_list_t *list) > { > fs_geo_list_t *next; > Index: xfsprogs-dev/repair/scan.c > =================================================================== > --- xfsprogs-dev.orig/repair/scan.c 2011-12-01 16:17:32.000000000 +0000 > +++ xfsprogs-dev/repair/scan.c 2011-12-01 16:18:23.000000000 +0000 > @@ -69,7 +69,7 @@ set_mp(xfs_mount_t *mpp) > mp = mpp; > } > > -void > +static void > scan_sbtree( > xfs_agblock_t root, > int nlevels, > Index: xfsprogs-dev/repair/xfs_repair.c > =================================================================== > --- xfsprogs-dev.orig/repair/xfs_repair.c 2011-12-01 16:17:58.000000000 +0000 > +++ xfsprogs-dev/repair/xfs_repair.c 2011-12-01 16:18:23.000000000 +0000 > @@ -49,8 +49,7 @@ extern void phase7(xfs_mount_t *); > /* > * -o: user-supplied override options > */ > - > -char *o_opts[] = { > +static char *o_opts[] = { > #define ASSUME_XFS 0 > "assume_xfs", > #define PRE_65_BETA 1 > @@ -71,8 +70,7 @@ char *o_opts[] = { > /* > * -c: conversion options > */ > - > -char *c_opts[] = { > +static char *c_opts[] = { > #define CONVERT_LAZY_COUNT 0 > "lazycount", > NULL > @@ -183,7 +181,7 @@ unknown(char opt, char *s) > /* > * sets only the global argument flags and variables > */ > -void > +static void > process_args(int argc, char **argv) > { > char *p; > @@ -398,7 +396,7 @@ do_log(char const *msg, ...) > va_end(args); > } > > -void > +static void > calc_mkfs(xfs_mount_t *mp) > { > xfs_agblock_t fino_bno; > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:30:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBUN88160791 for ; Wed, 11 Jan 2012 05:30:23 -0600 X-ASG-Debug-ID: 1326281420-00a9eb65e459df0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Ea3hHwKPyFSxXJa8 for ; Wed, 11 Jan 2012 03:30:20 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwNo-0003kH-FT for xfs@oss.sgi.com; Wed, 11 Jan 2012 11:30:20 +0000 Date: Wed, 11 Jan 2012 06:30:20 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: Re: [PATCH 12/12] repair: cleanup inode record macros Message-ID: <20120111113020.GD10932@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 12/12] repair: cleanup inode record macros References: <20111202174619.179530033@bombadil.infradead.org> <20111202174743.697687824@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111202174743.697687824@bombadil.infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326281420 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85639 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean ping? On Fri, Dec 02, 2011 at 12:46:31PM -0500, Christoph Hellwig wrote: > Remove indirections in the inode record bit manipulation macros and flatten > them to a single level of inlines. Also use a common IREC_MASK define > instead of duplicating it for every bitmask. > > > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/repair/incore.h > =================================================================== > --- xfsprogs-dev.orig/repair/incore.h 2011-12-02 11:04:59.000000000 +0000 > +++ xfsprogs-dev/repair/incore.h 2011-12-02 11:17:31.000000000 +0000 > @@ -289,6 +289,9 @@ typedef struct ino_tree_node { > } ino_un; > } ino_tree_node_t; > > +#define INOS_PER_IREC (sizeof(__uint64_t) * NBBY) > +#define IREC_MASK(i) ((__uint64_t)1 << (i)) > + > typedef struct nlink_ops { > const int nlink_size; > void (*disk_nlink_set)(ino_tree_node_t *, int, __uint32_t); > @@ -299,7 +302,6 @@ typedef struct nlink_ops { > } nlink_ops_t; > > > -#define INOS_PER_IREC (sizeof(__uint64_t) * NBBY) > void add_ino_ex_data(xfs_mount_t *mp); > > /* > @@ -381,92 +383,73 @@ void clear_uncertain_ino_cache(xfs_agn > ((ino_tree_node_t *) ((ino_node_ptr)->avl_node.avl_forw)) > > /* > - * Bit manipulations for processed field > + * Has an inode been processed for phase 6 (reference count checking)? > + * > + * add_inode_refchecked() is set on an inode when it gets traversed > + * during the reference count phase (6). It's set so that if the inode > + * is a directory, it's traversed (and it's links counted) only once. > */ > -#define XFS_INOPROC_MASK(i) ((__uint64_t)1 << (i)) > -#define XFS_INOPROC_MASKN(i,n) ((__uint64_t)((1 << (n)) - 1) << (i)) > +static inline void add_inode_refchecked(struct ino_tree_node *irec, int offset) > +{ > + irec->ino_un.ex_data->ino_processed |= IREC_MASK(offset); > +} > > -#define XFS_INOPROC_IS_PROC(rp, i) \ > - (((rp)->ino_un.ex_data->ino_processed & XFS_INOPROC_MASK((i))) == 0LL \ > - ? 0 : 1) > -#define XFS_INOPROC_SET_PROC(rp, i) \ > - ((rp)->ino_un.ex_data->ino_processed |= XFS_INOPROC_MASK((i))) > -/* > -#define XFS_INOPROC_CLR_PROC(rp, i) \ > - ((rp)->ino_un.ex_data->ino_processed &= ~XFS_INOPROC_MASK((i))) > -*/ > +static inline int is_inode_refchecked(struct ino_tree_node *irec, int offset) > +{ > + return (irec->ino_un.ex_data->ino_processed & IREC_MASK(offset)) != 0; > +} > > /* > - * same for ir_confirmed. > + * set/test is inode known to be valid (although perhaps corrupt) > */ > -#define XFS_INOCF_MASK(i) ((__uint64_t)1 << (i)) > -#define XFS_INOCF_MASKN(i,n) ((__uint64_t)((1 << (n)) - 1) << (i)) > - > -#define XFS_INOCF_IS_CF(rp, i) \ > - (((rp)->ino_confirmed & XFS_INOCF_MASK((i))) == 0LL \ > - ? 0 : 1) > -#define XFS_INOCF_SET_CF(rp, i) \ > - ((rp)->ino_confirmed |= XFS_INOCF_MASK((i))) > -#define XFS_INOCF_CLR_CF(rp, i) \ > - ((rp)->ino_confirmed &= ~XFS_INOCF_MASK((i))) > +static inline void set_inode_confirmed(struct ino_tree_node *irec, int offset) > +{ > + irec->ino_confirmed |= IREC_MASK(offset); > +} > > -/* > - * same for backptr->ino_reached > - */ > -#define XFS_INO_RCHD_MASK(i) ((__uint64_t)1 << (i)) > +static inline int is_inode_confirmed(struct ino_tree_node *irec, int offset) > +{ > + return (irec->ino_confirmed & IREC_MASK(offset)) != 0; > +} > > -#define XFS_INO_RCHD_IS_RCHD(rp, i) \ > - (((rp)->ino_un.ex_data->ino_reached & XFS_INO_RCHD_MASK((i))) == 0LL \ > - ? 0 : 1) > -#define XFS_INO_RCHD_SET_RCHD(rp, i) \ > - ((rp)->ino_un.ex_data->ino_reached |= XFS_INO_RCHD_MASK((i))) > -#define XFS_INO_RCHD_CLR_RCHD(rp, i) \ > - ((rp)->ino_un.ex_data->ino_reached &= ~XFS_INO_RCHD_MASK((i))) > /* > * set/clear/test is inode a directory inode > */ > -#define XFS_INO_ISADIR_MASK(i) ((__uint64_t)1 << (i)) > - > -#define inode_isadir(ino_rec, ino_offset) \ > - (((ino_rec)->ino_isa_dir & XFS_INO_ISADIR_MASK((ino_offset))) == 0LL \ > - ? 0 : 1) > -#define set_inode_isadir(ino_rec, ino_offset) \ > - ((ino_rec)->ino_isa_dir |= XFS_INO_ISADIR_MASK((ino_offset))) > -#define clear_inode_isadir(ino_rec, ino_offset) \ > - ((ino_rec)->ino_isa_dir &= ~XFS_INO_ISADIR_MASK((ino_offset))) > - > - > -/* > - * set/clear/test is inode known to be valid (although perhaps corrupt) > - */ > -#define clear_inode_confirmed(ino_rec, ino_offset) \ > - XFS_INOCF_CLR_CF((ino_rec), (ino_offset)) > +static inline void set_inode_isadir(struct ino_tree_node *irec, int offset) > +{ > + irec->ino_isa_dir |= IREC_MASK(offset); > +} > > -#define set_inode_confirmed(ino_rec, ino_offset) \ > - XFS_INOCF_SET_CF((ino_rec), (ino_offset)) > +static inline void clear_inode_isadir(struct ino_tree_node *irec, int offset) > +{ > + irec->ino_isa_dir &= ~IREC_MASK(offset); > +} > > -#define is_inode_confirmed(ino_rec, ino_offset) \ > - XFS_INOCF_IS_CF(ino_rec, ino_offset) > +static inline int inode_isadir(struct ino_tree_node *irec, int offset) > +{ > + return (irec->ino_isa_dir & IREC_MASK(offset)) != 0; > +} > > /* > * set/clear/test is inode free or used > */ > -#define set_inode_free(ino_rec, ino_offset) \ > - XFS_INOCF_SET_CF((ino_rec), (ino_offset)), \ > - XFS_INOBT_SET_FREE((ino_rec), (ino_offset)) > - > -#define set_inode_used(ino_rec, ino_offset) \ > - XFS_INOCF_SET_CF((ino_rec), (ino_offset)), \ > - XFS_INOBT_CLR_FREE((ino_rec), (ino_offset)) > +static inline void set_inode_free(struct ino_tree_node *irec, int offset) > +{ > + set_inode_confirmed(irec, offset); > + irec->ir_free |= XFS_INOBT_MASK(offset); > > -#define XFS_INOBT_IS_FREE(ino_rec, ino_offset) \ > - (((ino_rec)->ir_free & XFS_INOBT_MASK(ino_offset)) != 0) > +} > > -#define is_inode_used(ino_rec, ino_offset) \ > - !XFS_INOBT_IS_FREE((ino_rec), (ino_offset)) > +static inline void set_inode_used(struct ino_tree_node *irec, int offset) > +{ > + set_inode_confirmed(irec, offset); > + irec->ir_free &= ~XFS_INOBT_MASK(offset); > +} > > -#define is_inode_free(ino_rec, ino_offset) \ > - XFS_INOBT_IS_FREE((ino_rec), (ino_offset)) > +static inline int is_inode_free(struct ino_tree_node *irec, int offset) > +{ > + return (irec->ir_free & XFS_INOBT_MASK(offset)) != 0; > +} > > /* > * add_inode_reached() is set on inode I only if I has been reached > @@ -478,88 +461,54 @@ void clear_uncertain_ino_cache(xfs_agn > * an inode that we've counted is removed. > */ > > -static inline int > -is_inode_reached(ino_tree_node_t *ino_rec, int ino_offset) > -{ > - ASSERT(ino_rec->ino_un.ex_data != NULL); > - return(XFS_INO_RCHD_IS_RCHD(ino_rec, ino_offset)); > -} > - > -static inline void > -add_inode_reached(ino_tree_node_t *ino_rec, int ino_offset) > +static inline void add_inode_ref(struct ino_tree_node *irec, int offset) > { > - ASSERT(ino_rec->ino_un.ex_data != NULL); > - > - (*ino_rec->nlinkops->counted_nlink_inc)(ino_rec, ino_offset); > - XFS_INO_RCHD_SET_RCHD(ino_rec, ino_offset); > + ASSERT(irec->ino_un.ex_data != NULL); > > - ASSERT(is_inode_reached(ino_rec, ino_offset)); > + irec->nlinkops->counted_nlink_inc(irec, offset); > } > > -static inline void > -add_inode_ref(ino_tree_node_t *ino_rec, int ino_offset) > +static inline void drop_inode_ref(struct ino_tree_node *irec, int offset) > { > - ASSERT(ino_rec->ino_un.ex_data != NULL); > + ASSERT(irec->ino_un.ex_data != NULL); > > - (*ino_rec->nlinkops->counted_nlink_inc)(ino_rec, ino_offset); > + if (irec->nlinkops->counted_nlink_dec(irec, offset) == 0) > + irec->ino_un.ex_data->ino_reached &= ~IREC_MASK(offset); > } > > -static inline void > -drop_inode_ref(ino_tree_node_t *ino_rec, int ino_offset) > +static inline __uint32_t num_inode_references(struct ino_tree_node *irec, > + int offset) > { > - ASSERT(ino_rec->ino_un.ex_data != NULL); > + ASSERT(irec->ino_un.ex_data != NULL); > > - if ((*ino_rec->nlinkops->counted_nlink_dec)(ino_rec, ino_offset) == 0) > - XFS_INO_RCHD_CLR_RCHD(ino_rec, ino_offset); > + return irec->nlinkops->counted_nlink_get(irec, offset); > } > > -static inline int > -is_inode_referenced(ino_tree_node_t *ino_rec, int ino_offset) > +static inline int is_inode_reached(struct ino_tree_node *irec, int offset) > { > - ASSERT(ino_rec->ino_un.ex_data != NULL); > - > - return (*ino_rec->nlinkops->counted_nlink_get)(ino_rec, ino_offset) > 0; > + ASSERT(irec->ino_un.ex_data != NULL); > + return (irec->ino_un.ex_data->ino_reached & IREC_MASK(offset)) != 0; > } > > -static inline __uint32_t > -num_inode_references(ino_tree_node_t *ino_rec, int ino_offset) > +static inline void add_inode_reached(struct ino_tree_node *irec, int offset) > { > - ASSERT(ino_rec->ino_un.ex_data != NULL); > - > - return (*ino_rec->nlinkops->counted_nlink_get)(ino_rec, ino_offset); > + add_inode_ref(irec, offset); > + irec->ino_un.ex_data->ino_reached |= IREC_MASK(offset); > } > > -static inline void > -set_inode_disk_nlinks(ino_tree_node_t *ino_rec, int ino_offset, __uint32_t nlinks) > +static inline void set_inode_disk_nlinks(struct ino_tree_node *irec, int offset, > + __uint32_t nlinks) > { > - (*ino_rec->nlinkops->disk_nlink_set)(ino_rec, ino_offset, nlinks); > + irec->nlinkops->disk_nlink_set(irec, offset, nlinks); > } > > -static inline __uint32_t > -get_inode_disk_nlinks(ino_tree_node_t *ino_rec, int ino_offset) > +static inline __uint32_t get_inode_disk_nlinks(struct ino_tree_node *irec, > + int offset) > { > - return (*ino_rec->nlinkops->disk_nlink_get)(ino_rec, ino_offset); > + return irec->nlinkops->disk_nlink_get(irec, offset); > } > > /* > - * has an inode been processed for phase 6 (reference count checking)? > - * add_inode_refchecked() is set on an inode when it gets traversed > - * during the reference count phase (6). It's set so that if the inode > - * is a directory, it's traversed (and it's links counted) only once. > - */ > -#ifndef XR_INO_REF_DEBUG > -#define add_inode_refchecked(ino, ino_rec, ino_offset) \ > - XFS_INOPROC_SET_PROC((ino_rec), (ino_offset)) > -#define is_inode_refchecked(ino, ino_rec, ino_offset) \ > - (XFS_INOPROC_IS_PROC(ino_rec, ino_offset) != 0LL) > -#else > -void add_inode_refchecked(xfs_ino_t ino, > - ino_tree_node_t *ino_rec, int ino_offset); > -int is_inode_refchecked(xfs_ino_t ino, > - ino_tree_node_t *ino_rec, int ino_offset); > -#endif /* XR_INO_REF_DEBUG */ > - > -/* > * set/get inode number of parent -- works for directory inodes only > */ > void set_inode_parent(ino_tree_node_t *irec, int ino_offset, > Index: xfsprogs-dev/repair/incore_ino.c > =================================================================== > --- xfsprogs-dev.orig/repair/incore_ino.c 2011-12-02 11:04:59.000000000 +0000 > +++ xfsprogs-dev/repair/incore_ino.c 2011-12-02 11:05:19.000000000 +0000 > @@ -784,19 +784,3 @@ incore_ino_init(xfs_mount_t *mp) > > full_ino_ex_data = 0; > } > - > -#ifdef XR_INO_REF_DEBUG > -void > -add_inode_refchecked(xfs_ino_t ino, ino_tree_node_t *ino_rec, int ino_offset) > -{ > - XFS_INOPROC_SET_PROC((ino_rec), (ino_offset)); > - > - ASSERT(is_inode_refchecked(ino, ino_rec, ino_offset)); > -} > - > -int > -is_inode_refchecked(xfs_ino_t ino, ino_tree_node_t *ino_rec, int ino_offset) > -{ > - return(XFS_INOPROC_IS_PROC(ino_rec, ino_offset) == 0LL ? 0 : 1); > -} > -#endif /* XR_INO_REF_DEBUG */ > Index: xfsprogs-dev/include/libxfs.h > =================================================================== > --- xfsprogs-dev.orig/include/libxfs.h 2011-12-02 11:04:59.000000000 +0000 > +++ xfsprogs-dev/include/libxfs.h 2011-12-02 11:05:19.000000000 +0000 > @@ -503,8 +503,6 @@ extern unsigned long libxfs_physmem(void > #include > #include > > -#define XFS_INOBT_CLR_FREE(rp,i) ((rp)->ir_free &= ~XFS_INOBT_MASK(i)) > -#define XFS_INOBT_SET_FREE(rp,i) ((rp)->ir_free |= XFS_INOBT_MASK(i)) > #define XFS_INOBT_IS_FREE_DISK(rp,i) \ > ((be64_to_cpu((rp)->ir_free) & XFS_INOBT_MASK(i)) != 0) > > Index: xfsprogs-dev/repair/phase6.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase6.c 2011-12-02 11:04:59.000000000 +0000 > +++ xfsprogs-dev/repair/phase6.c 2011-12-02 11:05:19.000000000 +0000 > @@ -3258,7 +3258,7 @@ process_dir_inode( > * remaining illegal directory entries. > */ > > - ASSERT(!is_inode_refchecked(ino, irec, ino_offset) || dotdot_update); > + ASSERT(!is_inode_refchecked(irec, ino_offset) || dotdot_update); > > error = libxfs_iget(mp, NULL, ino, 0, &ip, 0); > if (error) { > @@ -3282,7 +3282,7 @@ process_dir_inode( > } > } > > - add_inode_refchecked(ino, irec, 0); > + add_inode_refchecked(irec, 0); > return; > } > > @@ -3300,7 +3300,7 @@ process_dir_inode( > add_inode_reached(irec, ino_offset); > } > > - add_inode_refchecked(ino, irec, ino_offset); > + add_inode_refchecked(irec, ino_offset); > > hashtab = dir_hash_init(ip->i_d.di_size); > > Index: xfsprogs-dev/repair/phase7.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase7.c 2011-12-02 11:16:58.000000000 +0000 > +++ xfsprogs-dev/repair/phase7.c 2011-12-02 11:17:27.000000000 +0000 > @@ -143,10 +143,9 @@ phase7(xfs_mount_t *mp) > continue; > > ASSERT(no_modify || is_inode_reached(irec, j)); > - ASSERT(no_modify || > - is_inode_referenced(irec, j)); > > nrefs = num_inode_references(irec, j); > + ASSERT(no_modify || nrefs > 0); > > if (get_inode_disk_nlinks(irec, j) != nrefs) > update_inode_nlinks(mp, > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:30:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_91 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBUD8p160769 for ; Wed, 11 Jan 2012 05:30:13 -0600 X-ASG-Debug-ID: 1326281411-005fe612a96307e0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id iFo3mhcuPAEa7CKw for ; Wed, 11 Jan 2012 03:30:11 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwNf-0003j6-7n for xfs@oss.sgi.com; Wed, 11 Jan 2012 11:30:11 +0000 Date: Wed, 11 Jan 2012 06:30:11 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: Re: [PATCH 11/12] repair: move extern declarations to headers Message-ID: <20120111113011.GC10932@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 11/12] repair: move extern declarations to headers References: <20111202174619.179530033@bombadil.infradead.org> <20111202174743.523970893@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111202174743.523970893@bombadil.infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326281411 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean ping? On Fri, Dec 02, 2011 at 12:46:30PM -0500, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/repair/avl.h > =================================================================== > --- xfsprogs-dev.orig/repair/avl.h 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/avl.h 2011-12-01 16:18:33.000000000 +0000 > @@ -134,6 +134,15 @@ avl_findranges( > avlnode_t **startp, > avlnode_t **endp); > > +avlnode_t * > +avl_firstino( > + avlnode_t *root); > + > +avlnode_t * > +avl_lastino( > + avlnode_t *root); > + > + > #define AVL_PRECEED 0x1 > #define AVL_SUCCEED 0x2 > > Index: xfsprogs-dev/repair/bmap.h > =================================================================== > --- xfsprogs-dev.orig/repair/bmap.h 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/bmap.h 2011-12-01 16:18:33.000000000 +0000 > @@ -53,6 +53,9 @@ typedef struct blkmap { > #define BLKMAP_NEXTS_MAX INT_MAX > #endif > > +extern pthread_key_t dblkmap_key; > +extern pthread_key_t ablkmap_key; > + > blkmap_t *blkmap_alloc(xfs_extnum_t nex, int whichfork); > void blkmap_free(blkmap_t *blkmap); > > Index: xfsprogs-dev/repair/incore.h > =================================================================== > --- xfsprogs-dev.orig/repair/incore.h 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/incore.h 2011-12-01 16:18:33.000000000 +0000 > @@ -209,9 +209,12 @@ void incore_ext_init(xfs_mount_t *); > * the nodes. > */ > void incore_ext_teardown(xfs_mount_t *mp); > - > void incore_ino_init(xfs_mount_t *); > > +int count_bno_extents(xfs_agnumber_t); > +int count_bno_extents_blocks(xfs_agnumber_t, uint *); > +int count_bcnt_extents(xfs_agnumber_t); > + > /* > * inode definitions > */ > Index: xfsprogs-dev/repair/incore_ext.c > =================================================================== > --- xfsprogs-dev.orig/repair/incore_ext.c 2011-12-01 16:17:31.000000000 +0000 > +++ xfsprogs-dev/repair/incore_ext.c 2011-12-01 16:18:33.000000000 +0000 > @@ -386,8 +386,6 @@ findfirst_bcnt_extent(xfs_agnumber_t agn > extent_tree_node_t * > findbiggest_bcnt_extent(xfs_agnumber_t agno) > { > - extern avlnode_t *avl_lastino(avlnode_t *root); > - > ASSERT(extent_bcnt_ptrs != NULL); > ASSERT(extent_bcnt_ptrs[agno] != NULL); > > Index: xfsprogs-dev/repair/incore_ino.c > =================================================================== > --- xfsprogs-dev.orig/repair/incore_ino.c 2011-12-01 16:17:31.000000000 +0000 > +++ xfsprogs-dev/repair/incore_ino.c 2011-12-01 16:18:51.000000000 +0000 > @@ -25,8 +25,6 @@ > #include "threads.h" > #include "err_protos.h" > > -extern avlnode_t *avl_firstino(avlnode_t *root); > - > /* > * array of inode tree ptrs, one per ag > */ > Index: xfsprogs-dev/repair/init.c > =================================================================== > --- xfsprogs-dev.orig/repair/init.c 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/init.c 2011-12-01 16:18:33.000000000 +0000 > @@ -34,9 +34,6 @@ static pthread_key_t dirbuf_key; > static pthread_key_t dir_freemap_key; > static pthread_key_t attr_freemap_key; > > -extern pthread_key_t dblkmap_key; > -extern pthread_key_t ablkmap_key; > - > static void > ts_alloc(pthread_key_t key, unsigned n, size_t size) > { > Index: xfsprogs-dev/repair/phase4.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase4.c 2011-12-01 16:18:23.000000000 +0000 > +++ xfsprogs-dev/repair/phase4.c 2011-12-01 16:18:33.000000000 +0000 > @@ -196,8 +196,6 @@ phase4(xfs_mount_t *mp) > int ag_hdr_len = 4 * mp->m_sb.sb_sectsize; > int ag_hdr_block; > int bstate; > - int count_bcnt_extents(xfs_agnumber_t agno); > - int count_bno_extents(xfs_agnumber_t agno); > > ag_hdr_block = howmany(ag_hdr_len, mp->m_sb.sb_blocksize); > > Index: xfsprogs-dev/repair/phase5.c > =================================================================== > --- xfsprogs-dev.orig/repair/phase5.c 2011-12-01 16:18:23.000000000 +0000 > +++ xfsprogs-dev/repair/phase5.c 2011-12-01 16:18:33.000000000 +0000 > @@ -1404,11 +1404,6 @@ phase5_func( > xfs_extlen_t freeblks2; > #endif > xfs_agblock_t num_extents; > - extern int count_bno_extents(xfs_agnumber_t); > - extern int count_bno_extents_blocks(xfs_agnumber_t, uint *); > -#ifdef XR_BLD_FREE_TRACE > - extern int count_bcnt_extents(xfs_agnumber_t); > -#endif > > if (verbose) > do_log(_(" - agno = %d\n"), agno); > Index: xfsprogs-dev/repair/protos.h > =================================================================== > --- xfsprogs-dev.orig/repair/protos.h 2011-12-01 16:17:07.000000000 +0000 > +++ xfsprogs-dev/repair/protos.h 2011-12-01 16:18:33.000000000 +0000 > @@ -39,11 +39,23 @@ void get_sb_geometry(struct fs_geometry > char *alloc_ag_buf(int size); > > void print_inode_list(xfs_agnumber_t i); > -char * err_string(int err_code); > +char *err_string(int err_code); > > -extern void *ts_attr_freemap(void); > -extern void *ts_dir_freemap(void); > -extern void *ts_dirbuf(void); > -extern void ts_init(void); > -extern void thread_init(void); > +void *ts_attr_freemap(void); > +void *ts_dir_freemap(void); > +void *ts_dirbuf(void); > +void ts_init(void); > +void thread_init(void); > + > +void phase1(struct xfs_mount *); > +void phase2(struct xfs_mount *, int); > +void phase3(struct xfs_mount *); > +void phase4(struct xfs_mount *); > +void phase5(struct xfs_mount *); > +void phase6(struct xfs_mount *); > +void phase7(struct xfs_mount *); > + > +int verify_set_agheader(struct xfs_mount *, struct xfs_buf *, > + struct xfs_sb *, struct xfs_agf *, struct xfs_agi *, > + xfs_agnumber_t); > > Index: xfsprogs-dev/repair/scan.c > =================================================================== > --- xfsprogs-dev.orig/repair/scan.c 2011-12-01 16:18:23.000000000 +0000 > +++ xfsprogs-dev/repair/scan.c 2011-12-01 16:18:33.000000000 +0000 > @@ -30,9 +30,6 @@ > #include "progress.h" > #include "threads.h" > > -extern int verify_set_agheader(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, > - xfs_agf_t *agf, xfs_agi_t *agi, xfs_agnumber_t i); > - > static xfs_mount_t *mp = NULL; > > /* > Index: xfsprogs-dev/repair/xfs_repair.c > =================================================================== > --- xfsprogs-dev.orig/repair/xfs_repair.c 2011-12-01 16:18:23.000000000 +0000 > +++ xfsprogs-dev/repair/xfs_repair.c 2011-12-01 16:18:33.000000000 +0000 > @@ -32,14 +32,6 @@ > > #define rounddown(x, y) (((x)/(y))*(y)) > > -extern void phase1(xfs_mount_t *); > -extern void phase2(xfs_mount_t *, int); > -extern void phase3(xfs_mount_t *); > -extern void phase4(xfs_mount_t *); > -extern void phase5(xfs_mount_t *); > -extern void phase6(xfs_mount_t *); > -extern void phase7(xfs_mount_t *); > - > #define XR_MAX_SECT_SIZE (64 * 1024) > > /* > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:34:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBYVUb161426 for ; Wed, 11 Jan 2012 05:34:31 -0600 X-ASG-Debug-ID: 1326281669-00a9eb65e45a340001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id FEI8MpgPacY1mJ6F; Wed, 11 Jan 2012 03:34:30 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwRo-0003mc-Uo; Wed, 11 Jan 2012 11:34:28 +0000 Date: Wed, 11 Jan 2012 06:34:28 -0500 From: Christoph Hellwig To: Amit Sahrawat Cc: Alex Elder , xfs masters , xfs , linux kernel , Christoph Hellwig Subject: Re: [PATCH 1/1] xfs: serialise unaligned direct IOs Message-ID: <20120111113428.GA14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 1/1] xfs: serialise unaligned direct IOs References: <1325845990-5664-1-git-send-email-amit.sahrawat83@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1325845990-5664-1-git-send-email-amit.sahrawat83@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326281669 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85639 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean > + /* > + * In most cases the direct IO writes will be done with IOLOCK_SHARED > + * allowing them to be done in parallel with reads and other direct IO > + * writes. However,if the IO is not aligned to filesystem blocks, the > + * direct IO layer needs to do sub-block zeroing and that requires > + * serialisation against other direct IOs to the same block. In this > + * case we need to serialise the submission of the unaligned IOs so > + * that we don't get racing block zeroing in the dio layer. > + * To avoid the problem with aio, we also need to wait for outstanding > + * IOs to complete so that unwritten extent conversion is completed > + * before we try to map the overlapping block. This is currently > + * implemented by hitting it with a big hammer (i.e. xfs_ioend_wait()). > + */ > + This comment is lacking one level of indentation, that's because the old kernel is missing the split of xfs_file_aio_write that reduces one level of indentation. Otherwise the backport looks fine, please send it to stable@vger.kernel.org, with a [PATCH 0/0] coverletter stating it's for 2.6.35-stable. From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:35:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBZ8d9161486 for ; Wed, 11 Jan 2012 05:35:09 -0600 X-ASG-Debug-ID: 1326281707-005fe612a7630de0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id iDLZ4NWrwttwgQ5Z; Wed, 11 Jan 2012 03:35:07 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwSR-0004eG-3I; Wed, 11 Jan 2012 11:35:07 +0000 Date: Wed, 11 Jan 2012 06:35:07 -0500 From: Christoph Hellwig To: Amit Sahrawat Cc: Alex Elder , Ben Myers , xfs masters , xfs , linux kernel , Christoph Hellwig Subject: Re: [PATCH 2/2] xfs: cleanup XFS_BB_FSB_OFFSET Message-ID: <20120111113507.GB14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: cleanup XFS_BB_FSB_OFFSET References: <1325848338-6063-1-git-send-email-amit.sahrawat83@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1325848338-6063-1-git-send-email-amit.sahrawat83@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326281707 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Fri, Jan 06, 2012 at 04:42:18PM +0530, Amit Sahrawat wrote: > Removing the macro, as this is no more needed in the code. > Tried to find the reference when it was last used - but the usage > for this seemed to have been dropped long time ago. > > Signed-off-by: Amit Sahrawat This looks good, but the subject should be something like: "xfs: kill the unused XFS_BB_FSB_OFFSET macro" Reviewed-by: Christoph Hellwig From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:42:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBgicL162058 for ; Wed, 11 Jan 2012 05:42:44 -0600 X-ASG-Debug-ID: 1326282163-0222017aa372d350001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id j8YLXzHIB0mBbCBv; Wed, 11 Jan 2012 03:42:43 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RkwZn-0006Q9-6S; Wed, 11 Jan 2012 11:42:43 +0000 Date: Wed, 11 Jan 2012 06:42:43 -0500 From: Christoph Hellwig To: Bill Kendall Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsdump: fix restore of ext attrs on root directory Message-ID: <20120111114243.GC14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfsdump: fix restore of ext attrs on root directory References: <1325883116-21990-1-git-send-email-wkendall@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1325883116-21990-1-git-send-email-wkendall@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326282163 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Fri, Jan 06, 2012 at 02:51:56PM -0600, Bill Kendall wrote: > xfsrestore fails to restore extended attributes on the root directory > because Node2path(), which returns a pathname relative to the restore > root, returns an empty string instead of ".". > > Signed-off-by: Bill Kendall > --- > restore/tree.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) Looks good, Reviewed-by: Christoph Hellwig From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:43:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBhcsl162174 for ; Wed, 11 Jan 2012 05:43:38 -0600 X-ASG-Debug-ID: 1326282217-005fe612a96317d0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id wxeu9y4GccclYAtY for ; Wed, 11 Jan 2012 03:43:37 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rkwad-0006QP-VL; Wed, 11 Jan 2012 11:43:36 +0000 Date: Wed, 11 Jan 2012 06:43:35 -0500 From: Christoph Hellwig To: Ajeet Yadav Cc: Tony Lu , xfs@oss.sgi.com Subject: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) Message-ID: <20120111114335.GD14423@infradead.org> X-ASG-Orig-Subj: Re: XFS: bad clientid on recovery on MIPS (VIPT cache) 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326282217 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Mon, Jan 09, 2012 at 12:58:22PM +0530, Ajeet Yadav wrote: > Yes I implemented these definitions for MIPS, without them this > problem will continue to occur. Btw, Linux 3.2 finally has a version of the helpers in mainline. From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:45:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBjmgq162433 for ; Wed, 11 Jan 2012 05:45:48 -0600 X-ASG-Debug-ID: 1326282347-005fe612a6631a60001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id us0YkOahE8IbcZVP for ; Wed, 11 Jan 2012 03:45:47 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rkwci-0007KL-IS; Wed, 11 Jan 2012 11:45:44 +0000 Date: Wed, 11 Jan 2012 06:45:44 -0500 From: Christoph Hellwig To: Liu Bo Cc: linux-btrfs@vger.kernel.org, xfs@oss.sgi.com, Lukas Czerner Subject: Re: [PATCH] xfstests: fix 251's cp -axT problem Message-ID: <20120111114544.GE14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix 251's cp -axT problem References: <1326195560-4434-1-git-send-email-liubo2009@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326195560-4434-1-git-send-email-liubo2009@cn.fujitsu.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326282347 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85640 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Tue, Jan 10, 2012 at 07:39:20PM +0800, Liu Bo wrote: > When I ran xfstests, 251 got failed cause "cp -axT" did not work as wish: > cp: cannot overwrite directory `/mnt/scratch/1' with non-directory > > With this patch, 251 has passed. Why would cp give that message with a missing /? I'm not against putting this in, but I'd like to understand what's going on. Lukas, any idea? From BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 11 05:46:05 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BBk4xb162463 for ; Wed, 11 Jan 2012 05:46:05 -0600 X-ASG-Debug-ID: 1326282363-00a9eb65e65b2f0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id wkHrWkyowwJn9UO5 for ; Wed, 11 Jan 2012 03:46:03 -0800 (PST) X-Barracuda-Envelope-From: BATV+19e08bdf52cb4fcf7d2a+3062+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rkwd1-0007Kd-4g; Wed, 11 Jan 2012 11:46:03 +0000 Date: Wed, 11 Jan 2012 06:46:03 -0500 From: Christoph Hellwig To: Eryu Guan Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 271: use xfs_io to truncate file instead of truncate(1) Message-ID: <20120111114603.GF14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests 271: use xfs_io to truncate file instead of truncate(1) References: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326282363 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85641 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Jan 11, 2012 at 12:37:48AM +0800, Eryu Guan wrote: > Distros(eg. RHEL5) with older version of coreutils have no truncate(1) > command. Use xfs_io instead to avoid "command not found" failures. Looks good, Reviewed-by: Christoph Hellwig From lczerner@redhat.com Wed Jan 11 06:14:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BCEj3I165471 for ; Wed, 11 Jan 2012 06:14:45 -0600 X-ASG-Debug-ID: 1326284083-005fe612a8634970001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id dhdyVVtxigPGeINk for ; Wed, 11 Jan 2012 04:14:43 -0800 (PST) X-Barracuda-Envelope-From: lczerner@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0BCEXL7001243 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 11 Jan 2012 07:14:33 -0500 Received: from dhcp-1-248.brq.redhat.com (dhcp-1-248.brq.redhat.com [10.34.1.248]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0BCETSs011154 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 11 Jan 2012 07:14:31 -0500 Date: Wed, 11 Jan 2012 13:14:29 +0100 (CET) From: Lukas Czerner X-X-Sender: lukas@dhcp-27-109.brq.redhat.com To: Christoph Hellwig cc: Liu Bo , linux-btrfs@vger.kernel.org, xfs@oss.sgi.com, Lukas Czerner Subject: Re: [PATCH] xfstests: fix 251's cp -axT problem In-Reply-To: <20120111114544.GE14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix 251's cp -axT problem Message-ID: References: <1326195560-4434-1-git-send-email-liubo2009@cn.fujitsu.com> <20120111114544.GE14423@infradead.org> User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1326284083 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85642 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, 11 Jan 2012, Christoph Hellwig wrote: > On Tue, Jan 10, 2012 at 07:39:20PM +0800, Liu Bo wrote: > > When I ran xfstests, 251 got failed cause "cp -axT" did not work as wish: > > cp: cannot overwrite directory `/mnt/scratch/1' with non-directory > > > > With this patch, 251 has passed. > > Why would cp give that message with a missing /? > > I'm not against putting this in, but I'd like to understand what's going > on. > > Lukas, any idea? > Hi Christoph, the only reason I can think of is probably that Liu is accessing the xfstests directory via symbolic link, hence the '$content' addresses the symbolic link and cp is trying to overwrite the directory with non-directory (symlink). The fix is fine for both cases (xfstests as symlink and directory), confirmed with a simple test. Thanks! -Lukas From cmaiolino@hades.usersys.redhat.com Wed Jan 11 07:35:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BDZ7gV171728 for ; Wed, 11 Jan 2012 07:35:08 -0600 X-ASG-Debug-ID: 1326288904-00a9eb65e6698b0001-NocioJ Received: from hades.usersys.redhat.com (186.215.132.159.static.gvt.net.br [186.215.132.159]) by cuda.sgi.com with ESMTP id sSMSRHiabJNYVGy6 for ; Wed, 11 Jan 2012 05:35:04 -0800 (PST) X-Barracuda-Envelope-From: cmaiolino@hades.usersys.redhat.com X-Barracuda-Apparent-Source-IP: 186.215.132.159 Received: by hades.usersys.redhat.com (Postfix, from userid 500) id 438DAE0EA3; Wed, 11 Jan 2012 11:35:03 -0200 (BRST) From: Carlos Maiolino To: xfs@oss.sgi.com Cc: Carlos Maiolino Subject: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) Date: Wed, 11 Jan 2012 11:35:01 -0200 X-ASG-Orig-Subj: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) Message-Id: <1326288901-8171-1-git-send-email-cmaiolino@redhat.com> X-Mailer: git-send-email 1.7.6.4 X-Barracuda-Connect: 186.215.132.159.static.gvt.net.br[186.215.132.159] X-Barracuda-Start-Time: 1326288904 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85647 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean xfs_repair was leaving lost+found directory with a wrong link count when a cleaned inode was re-used to create lost+found. This test case confirm that, after xfs_repair is executed, the lost+found inode is left in a consistent state. Signed-off-by: Carlos Maiolino --- 278 | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 278.out | 2 + group | 1 + 3 files changed, 90 insertions(+), 0 deletions(-) create mode 100755 278 create mode 100644 278.out diff --git a/278 b/278 new file mode 100755 index 0000000..89cae35 --- /dev/null +++ b/278 @@ -0,0 +1,87 @@ +#! /bin/bash +# FS QA Test No. 278 +# +# Test xfs_repair to ensure it fixes the lost+found link count +# at the first run. See also commit 198b747f255346bca64408875763b6ca0ed3d57d +# from xfsprogs tree. +# +# +#----------------------------------------------------------------------- +# Copyright (c) 2011 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 +#----------------------------------------------------------------------- +# +# creator +owner=cmaiolino@redhat.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux +_require_scratch +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount + +mkdir -p $SCRATCH_MNT/dir/subdir + +#get inodes to be changed +DIR_INO=`ls -i $SCRATCH_MNT |awk '{print $1}'` +SUBDIR_INO=`ls -i $SCRATCH_MNT/dir |awk '{print $1}'` + +_scratch_unmount + +echo "Silence is goodness..." + +# Corrupt DIR +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].inumber.i4 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].name 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].offset 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].namelen 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full + +# Corrupt SUBDIR +xfs_db -x -c "inode $SUBDIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $SUBDIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full + +echo "===== BEGIN of xfs_repair =====" >> $seq.full +echo "" >>$seq.full + +xfs_repair $SCRATCH_DEV &>> $seq.full +echo "===== END of xfs_repair =====" >> $seq.full + +if _check_scratch_fs; then + status=0 +else + status=1 +fi +exit diff --git a/278.out b/278.out new file mode 100644 index 0000000..2acd770 --- /dev/null +++ b/278.out @@ -0,0 +1,2 @@ +QA output created by 278 +Silence is goodness... diff --git a/group b/group index 99592d3..6f2d748 100644 --- a/group +++ b/group @@ -391,3 +391,4 @@ deprecated 275 auto rw 276 auto rw metadata 277 auto ioctl quick metadata +278 repair auto -- 1.7.6.4 From anshul.kundra@hcl.com Wed Jan 11 08:43:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BEho6r176127 for ; Wed, 11 Jan 2012 08:43:51 -0600 X-ASG-Debug-ID: 1326293023-0222017aa5743200001-NocioJ Received: from gws06.hcl.com (gws06.hcl.com [203.105.185.25]) by cuda.sgi.com with ESMTP id CoZachacYdnPfqZy for ; Wed, 11 Jan 2012 06:43:45 -0800 (PST) X-Barracuda-Envelope-From: anshul.kundra@hcl.com X-Barracuda-Apparent-Source-IP: 203.105.185.25 Received: from NDA-HCLIN-HT02.CORP.HCL.IN (10.248.64.36) by NDA-HCLIN-EDGE4.hcl.com (10.248.64.141) with Microsoft SMTP Server id 8.2.254.0; Wed, 11 Jan 2012 20:08:25 +0530 Received: from NDA-HCLT-HT03.HCLT.CORP.HCL.IN (10.98.17.213) by NDA-HCLIN-HT02.CORP.HCL.IN (10.248.64.36) with Microsoft SMTP Server (TLS) id 8.2.254.0; Wed, 11 Jan 2012 20:13:40 +0530 Received: from NDA-HCLT-EVS05.HCLT.CORP.HCL.IN ([169.254.2.204]) by NDA-HCLT-HT03.HCLT.CORP.HCL.IN ([::1]) with mapi; Wed, 11 Jan 2012 20:13:19 +0530 From: Anshul Kundra To: "xfs@oss.sgi.com" Date: Wed, 11 Jan 2012 20:13:09 +0530 Subject: Query Thread-Topic: Query X-ASG-Orig-Subj: Query Thread-Index: AczQb1aVjedpcW+PSgyVmBkJKB7gpg== 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_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB0ENDAHCLTEVS05H_" MIME-Version: 1.0 X-Barracuda-Connect: gws06.hcl.com[203.105.185.25] X-Barracuda-Start-Time: 1326293024 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85652 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Status: Clean --_000_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB0ENDAHCLTEVS05H_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable To Developers , I have read about the new member named as xfs_extdelta that is passed in di= fferent xfs internal routines i.e xfs_bmapi , In the 2.4 versions instead o= f using it is just passed as NULL can anyone provide info regarding that wh= ere to initialize and if I pass it NULl then is there any adverse effect of= it XFS_IOCORE_RT not been used in 2.6 version , so if instead of this flag I = will pass XFS_IOCORE_EXCL it will be ok or will cause any crash or adverse = effects or either there is any alternative present to sought out from these= two problems Regards Anshul Kundra HCL TECHNOLOGIES ERS ________________________________ ::DISCLAIMER:: ---------------------------------------------------------------------------= -------------------------------------------- The contents of this e-mail and any attachment(s) are confidential and inte= nded for the named recipient(s) only. It shall not attach any liability on the originator or HCL or its affiliate= s. Any views or opinions presented in this email are solely those of the author and may not necessarily reflect t= he opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification,= distribution and / or publication of this message without the prior written consent of the author of this e-mail= is strictly prohibited. If you have received this email in error please delete it and notify the sender immedia= tely. Before opening any mail and attachments please check them for viruses and defect. ---------------------------------------------------------------------------= -------------------------------------------- --_000_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB0ENDAHCLTEVS05H_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

To Developers ,

I have read about the new member named as xfs_extdel= ta that is passed in different xfs internal routines i.e xfs_bmapi , In the= 2.4 versions instead of using it is just passed as NULL can anyone provide= info regarding that where to initialize and if I pass it NULl then is there any adverse effect of it

 

XFS_IOCORE_RT  not been used in 2.6 version , s= o if instead of this flag I will pass XFS_IOCORE_EXCL it will be ok or will= cause any crash or adverse effects or either there is any alternative pres= ent to sought out from these two problems

 

Regards

Anshul Kundra

HCL TECHNOLOGIES

ERS  



::DISCLAIMER::
---------------------------------------------------------------------------= --------------------------------------------

The contents of this e-mail and any attachment(s) are confidential and inte= nded for the named recipient(s) only.
It shall not attach any liability on the originator or HCL or its affiliate= s. Any views or opinions presented in
this email are solely those of the author and may not necessarily reflect t= he opinions of HCL or its affiliates.
Any form of reproduction, dissemination, copying, disclosure, modification,= distribution and / or publication of
this message without the prior written consent of the author of this e-mail= is strictly prohibited. If you have
received this email in error please delete it and notify the sender immedia= tely. Before opening any mail and
attachments please check them for viruses and defect.

---------------------------------------------------------------------------= --------------------------------------------
--_000_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB0ENDAHCLTEVS05H_-- From wkendall@sgi.com Wed Jan 11 08:53:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BErghm176728 for ; Wed, 11 Jan 2012 08:53:42 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 93644AC001; Wed, 11 Jan 2012 06:53:38 -0800 (PST) Received: from [128.162.233.117] (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id 3D2657000785; Wed, 11 Jan 2012 08:53:38 -0600 (CST) Message-ID: <4F0DA272.7010209@sgi.com> Date: Wed, 11 Jan 2012 08:53:38 -0600 From: Bill Kendall User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111108 Thunderbird/3.1.16 MIME-Version: 1.0 To: Tommy Wu Cc: xfs@oss.sgi.com Subject: Re: xfsdump 3.0.6, ERROR: xfs_quota failed with exit status: -1 References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/09/2012 08:42 PM, Tommy Wu wrote: > Hi! > > when I use xfsdump 3.0.6, it always got ERROR for xfs_quota like this: > > /sbin/xfsdump: using file dump (drive_simple) strategy > /sbin/xfsdump: version 3.0.6 (dump format 3.0) - Running single-threaded > /sbin/xfsdump: saving user quota information for: /var/www > /sbin/xfsdump: ERROR: xfs_quota failed with exit status: -1 > /sbin/xfsdump: ERROR: failed to save user quota information, continuing > /sbin/xfsdump: level 0 dump of fw1.teatime.com.tw:/var/www > /sbin/xfsdump: dump date: Tue Jan 10 10:34:24 2012 > > downgrade to 3.0.5, same command (also same xfsprogs 3.1.7), no any error: > > /sbin/xfsdump: using file dump (drive_simple) strategy > /sbin/xfsdump: version 3.0.5 (dump format 3.0) - Running single-threaded > /sbin/xfsdump: saving user quota information for: /var/www > /sbin/xfsdump: level 0 dump of fw1.teatime.com.tw:/var/www > /sbin/xfsdump: dump date: Tue Jan 10 10:30:36 2012 > > But even it got error for xfs_quota, the xfsdump_quotas file was > created successful, I check the command used in xfsdump, the same > xfs_quota command work fine without any error in shell script (I also > write a simple C program to use system() to execute it, also no error > for such command). > In 3.0.6 SIGCHLD is explicitly ignored so that librmt processes are automatically cleaned up if they exit early. Evidently this prevents system() from retrieving the exit status. I'll work up a patch to fix this. Thanks, Bill From bpm@sgi.com Wed Jan 11 09:43:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BFhLEf178671 for ; Wed, 11 Jan 2012 09:43:21 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9BBDE304064; Wed, 11 Jan 2012 07:43:17 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 968F5426DA7; Wed, 11 Jan 2012 09:43:18 -0600 (CST) Date: Wed, 11 Jan 2012 09:43:18 -0600 From: Ben Myers To: Jeff Liu Cc: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120111154318.GY6390@sgi.com> References: <4F06F71A.2010301@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F06F71A.2010301@oracle.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hey Jeff, Here are a few additional minor comments from yesterday. I'm looking forward to seeing your next version, and I'm still working through this one. I would like to suggest that you split this into two patches. The first patch should be the 'simple' implementation that that you began with that only looks at extents, and assumes that unwritten extents contain data. The second patch can remove the assumption that unwritten extents contain data, and go over pages over the extent to determine if it is clean. I feel we have a better chance of coming to consensus that the first patch is correct in the near term, and then we can move on to the more complicated matter of whether the unwritten extent can be treated as a hole safe in the knowledge that the initial implementation was awesome. Regards, Ben On Fri, Jan 06, 2012 at 09:28:58PM +0800, Jeff Liu wrote: > This is a revised patch according to Christoph's comments at V4. > > Changes to V5: > -------------- > * Revise xfs_has_unwritten_buffer() to lookup pages match tag. > * For unwritten extents, in both xfs_seek_data() and xfs_seek_hole(), call xfs_has_unwritten_buffer() to search > DIRTY pages firstly, if no dirty data found, call it again to search WRITEBACK pages. > * In xfs_seek_hole(), if dirty data was found in page cache for an unwritten extents, but its start offset past the start block > of the map, treat it as a hole, returns the offset if possible(data_buffer_offset > max(seek_offset, start_block_of_map)). > > Tests: > ------ > seek sanity tester: > http://patchwork.xfs.org/patch/3108/ > seek copy tester: > http://patchwork.xfs.org/patch/3109/ > > > Thanks, > -Jeff > > Signed-off-by: Jie Liu > > --- > fs/xfs/xfs_file.c | 466 ++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 465 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 753ed9b..24ae40a 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -38,6 +38,7 @@ > > #include > #include > +#include > > static const struct vm_operations_struct xfs_file_vm_ops; > > @@ -1141,8 +1142,471 @@ xfs_vm_page_mkwrite( > return block_page_mkwrite(vma, vmf, xfs_get_blocks); > } > > +/* > + * Probe the data buffer offset in page cache for unwritten extents. > + * Fetch all the pages match @tag, and iterate each page to find out > + * if a buffer head state has BH_Unwritten or BH_Uptodate set. > + */ > +STATIC bool > +xfs_has_unwritten_buffer( > + struct inode *inode, > + struct xfs_bmbt_irec *map, > + int tag, > + loff_t *offset) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + struct xfs_mount *mp = ip->i_mount; > + struct pagevec pvec; > + pgoff_t index; > + pgoff_t end; > + bool found = false; > + > + pagevec_init(&pvec, 0); > + > + index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; > + end = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount) > + >> PAGE_CACHE_SHIFT; > + > + do { > + unsigned int i; > + unsigned nr_pages; > + int want = min_t(pgoff_t, end - index, > + (pgoff_t)PAGEVEC_SIZE - 1) + 1; > + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, > + &index, tag, want); > + if (nr_pages == 0) > + break; > + > + for (i = 0; i < nr_pages; i++) { > + struct page *page = pvec.pages[i]; > + struct buffer_head *bh; > + struct buffer_head *head; > + xfs_fileoff_t last; > + > + if (!page_has_buffers(page)) > + continue; > + > + /* > + * There is no need to check the following pages > + * if the current page offset is out of range. > + */ > + if (page->index > end) > + goto out; > + > + last = XFS_B_TO_FSBT(mp, > + page->index << PAGE_CACHE_SHIFT); > + > + bh = head = page_buffers(page); > + do { > + /* > + * An extent in XFS_EXT_UNWRITTEN have disk > + * blocks already mapped to it, but no data > + * has been committed to them yet. If it has > + * dirty data in the page cache it can be > + * identified by having BH_Unwritten set in > + * each buffer. Also, the buffer head state > + * might be in BH_Uptodate too if the buffer > + * writeback procedure was fired, we need to > + * examine it as well. > + */ > + if (buffer_unwritten(bh) || > + buffer_uptodate(bh)) { > + found = true; > + *offset = XFS_FSB_TO_B(mp, last); > + goto out; > + } > + last++; > + } while ((bh = bh->b_this_page) != head); > + } > + > + /* > + * If the number of probed pages less than our desired, > + * there should no more pages mapped, search done. > + */ > + if (nr_pages < want) > + break; > + > + index = pvec.pages[i - 1]->index + 1; > + pagevec_release(&pvec); > + } while (index < end); > + > +out: > + pagevec_release(&pvec); > + if (!found) > + *offset = 0; > + > + return found; > +} > + > +STATIC loff_t > +xfs_seek_data( > + struct file *file, > + loff_t start) > +{ > + struct inode *inode = file->f_mapping->host; > + struct xfs_inode *ip = XFS_I(inode); > + struct xfs_mount *mp = ip->i_mount; > + xfs_fsize_t isize = i_size_read(inode); > + loff_t offset = 0; > + struct xfs_ifork *ifp; > + xfs_fileoff_t fsbno; > + xfs_filblks_t len; > + int lock; > + int error; > + > + lock = xfs_ilock_map_shared(ip); > + > + if (start >= isize) { > + error = ENXIO; > + goto out_lock; > + } In Christoph's v3 review he asked you to move this check to after the lock is taken, which you've done. Note that you've read from ip->i_size using i_size_read before taking the lock, so isize could be stale. Call i_size_read only after taking the ilock shared. > + > + fsbno = XFS_B_TO_FSBT(mp, start); > + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); > + len = XFS_B_TO_FSB(mp, isize); Put calculation of start_fsb and end_fsb next to each other. > + > + for (;;) { > + struct xfs_bmbt_irec map[2]; > + int nmap = 2; > + loff_t seekoff; > + > + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, > + XFS_BMAPI_ENTIRE); > + if (error) > + goto out_lock; > + > + /* No extents at given offset, must be beyond EOF */ > + if (!nmap) { > + error = ENXIO; > + goto out_lock; > + } > + > + seekoff = XFS_FSB_TO_B(mp, fsbno); > + /* > + * Landed in a hole, skip to check the next extent. > + * If the next extent landed in an in-memory data extent, > + * or it is a normal extent, its fine to return. > + * If the next extent landed in a hole extent, calculate > + * the start file system block number for the next scan. > + * If the next extent landed in an unwritten extent, we > + * need to lookup the page cache to examine the data > + * buffer offset, if nothing found, treat it as a hole > + * extent too. > + */ > + if (map[0].br_startblock == HOLESTARTBLOCK) { > + /* > + * Return ENXIO if no data extent behind > + * the given offset. In this case, the seek > + * offset should be landed in a hole. > + */ > + if (nmap == 1) { > + error = ENXIO; > + break; > + } > + > + if (map[1].br_state == XFS_EXT_NORM || > + map[1].br_startblock == DELAYSTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* > + * Landed in an unwritten extent, try to find out the data > + * buffer offset from page cache firstly. If nothing was > + * found, treat it as a hole, and skip to check the next > + * extent, something just like above. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + > + /* No data extent at the given offset */ > + if (nmap == 1) { > + error = ENXIO; > + break; > + } > + > + if (map[1].br_state == XFS_EXT_NORM || > + map[1].br_startblock == DELAYSTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* Landed in a delay allocated extent or a real data extent */ > + if (map[0].br_startblock == DELAYSTARTBLOCK || > + map[0].br_state == XFS_EXT_NORM) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > + > + /* Return ENXIO if beyond eof */ > + if (XFS_FSB_TO_B(mp, fsbno) > isize) { > + error = ENXIO; > + goto out_lock; > + } > + } > + > + if (offset < start) > + offset = start; > + > + if (offset != file->f_pos) > + file->f_pos = offset; > + > +out_lock: > + xfs_iunlock_map_shared(ip, lock); > + if (error) > + return -error; > + > + return offset; > +} > + > +STATIC loff_t > +xfs_seek_hole( > + struct file *file, > + loff_t start) > +{ > + struct inode *inode = file->f_mapping->host; > + struct xfs_inode *ip = XFS_I(inode); > + struct xfs_mount *mp = ip->i_mount; > + xfs_fsize_t isize = i_size_read(inode); Call i_size_read under ilock. > + loff_t offset = 0; > + struct xfs_ifork *ifp; > + xfs_fileoff_t fsbno; > + xfs_filblks_t len; > + int lock; lock should be a uint > + int error; > + > + lock = xfs_ilock_map_shared(ip); > + > + if (start >= isize) { > + error = ENXIO; > + goto out_lock; > + } > + > + fsbno = XFS_B_TO_FSBT(mp, start); > + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); > + len = XFS_B_TO_FSB(mp, isize); Calculation of start_fsb and end_fsb look nicer next to each other. > + > + for (;;) { > + struct xfs_bmbt_irec map[2]; > + int nmap = 2; > + loff_t seekoff; > + > + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, > + XFS_BMAPI_ENTIRE); > + if (error) > + goto out_lock; > + > + /* No extents at given offset, must be beyond EOF */ > + if (!nmap) { > + error = ENXIO; > + goto out_lock; > + } > + > + seekoff = XFS_FSB_TO_B(mp, fsbno); > + /* > + * Landed in an unwritten extent, try to lookup the page > + * cache to find out if there is dirty data or not. If > + * nothing was found, treate it as a hole. If there has > + * dirty data and its offset starts past both the start > + * block of the map and the current seek offset, it should > + * be treated as hole too. Otherwise, go through the next > + * extent to fetch holes. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[0].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[0].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > + > + /* > + * No more extent at the given offst, return the total > + * file size. > + */ > + if (nmap == 1) { > + offset = isize; > + break; > + } > + > + if (map[1].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* > + * Landed in a delay allocated extent or a real data extent, > + * if the next extent is landed in a hole or in an unwritten > + * extent but without data committed in the page cache, return > + * its offset. If the next extent has dirty data in page cache, > + * but its offset starts past both the start block of the map > + * and the seek offset, it still be a hole. > + */ > + if (map[0].br_startblock == DELAYSTARTBLOCK || > + map[0].br_state == XFS_EXT_NORM) { > + /* > + * No more extent at the give offset, return the > + * total file size. > + */ > + if (nmap == 1) { > + offset = isize; > + break; > + } > + > + if (map[1].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[1], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[1].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[1].br_startoff)); > + break; > + } > + } > + > + fsbno = map[1].br_startoff + map[1].br_blockcount; > + } > + > + /* Landed in a hole, its fine to return */ > + if (map[0].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > + > + /* Return ENXIO if beyond eof */ > + if (XFS_FSB_TO_B(mp, fsbno) > isize) { > + error = ENXIO; > + goto out_lock; > + } > + } > + > + if (offset < start) > + offset = start; > + > + if (offset != file->f_pos) > + file->f_pos = offset; > + > +out_lock: name this out_unlock > + xfs_iunlock_map_shared(ip, lock); > + if (error) > + return -error; > + > + return offset; > +} > + > +STATIC loff_t > +xfs_file_llseek( > + struct file *file, > + loff_t offset, > + int origin) > +{ > + switch (origin) { > + case SEEK_END: > + case SEEK_CUR: > + case SEEK_SET: > + return generic_file_llseek(file, offset, origin); > + case SEEK_DATA: > + return xfs_seek_data(file, offset); > + case SEEK_HOLE: > + return xfs_seek_hole(file, offset); > + default: > + return -EOPNOTSUPP; I suggest -EINVAL here, as per http://linux.die.net/man/2/lseek > + } > +} > + > const struct file_operations xfs_file_operations = { > - .llseek = generic_file_llseek, > + .llseek = xfs_file_llseek, > .read = do_sync_read, > .write = do_sync_write, > .aio_read = xfs_file_aio_read, > -- > 1.7.4.1 > > > > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From anshul.kundra@hcl.com Wed Jan 11 09:52:05 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BFppSN178984 for ; Wed, 11 Jan 2012 09:51:53 -0600 X-ASG-Debug-ID: 1326297101-00a9eb65e47b3e0001-NocioJ Received: from gws05.hcl.com (gws05.hcl.com [203.105.185.23]) by cuda.sgi.com with ESMTP id 7Zq0QgspJHvgQ0CY for ; Wed, 11 Jan 2012 07:51:43 -0800 (PST) X-Barracuda-Envelope-From: anshul.kundra@hcl.com X-Barracuda-Apparent-Source-IP: 203.105.185.23 Received: from NDA-HCLIN-HT02.CORP.HCL.IN (10.248.64.36) by NDA-HCLIN-EDGE3.hcl.in (10.248.64.140) with Microsoft SMTP Server id 8.2.254.0; Wed, 11 Jan 2012 21:21:43 +0530 Received: from NDA-HCLT-HT02.HCLT.CORP.HCL.IN (10.98.10.212) by NDA-HCLIN-HT02.CORP.HCL.IN (10.248.64.36) with Microsoft SMTP Server (TLS) id 8.2.254.0; Wed, 11 Jan 2012 21:21:39 +0530 Received: from NDA-HCLT-EVS05.HCLT.CORP.HCL.IN ([169.254.2.204]) by NDA-HCLT-HT02.HCLT.CORP.HCL.IN ([::1]) with mapi; Wed, 11 Jan 2012 21:21:36 +0530 From: Anshul Kundra To: "xfs@oss.sgi.com" Date: Wed, 11 Jan 2012 21:21:43 +0530 Subject: query Thread-Topic: query X-ASG-Orig-Subj: query Thread-Index: AczQeOpEdV0zaf96R8COzQieDhH81g== 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_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB15NDAHCLTEVS05H_" MIME-Version: 1.0 X-Barracuda-Connect: gws05.hcl.com[203.105.185.23] X-Barracuda-Start-Time: 1326297102 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85657 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Status: Clean --_000_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB15NDAHCLTEVS05H_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable To Developers , I have read about the new member named as xfs_extdelta that is passed in di= fferent xfs internal routines i.e xfs_bmapi , In the 2.4 versions instead o= f using it is just passed as NULL can anyone provide info regarding that wh= ere to initialize and if I pass it NULl then is there any adverse effect of= it XFS_IOCORE_RT not been used in 2.6 version , so if instead of this flag I = will pass XFS_IOCORE_EXCL it will be ok or will cause any crash or adverse = effects or either there is any alternative present to sought out from these= two problems Regards Anshul Kundra HCL TECHNOLOGIES ERS ________________________________ ::DISCLAIMER:: ---------------------------------------------------------------------------= -------------------------------------------- The contents of this e-mail and any attachment(s) are confidential and inte= nded for the named recipient(s) only. It shall not attach any liability on the originator or HCL or its affiliate= s. Any views or opinions presented in this email are solely those of the author and may not necessarily reflect t= he opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification,= distribution and / or publication of this message without the prior written consent of the author of this e-mail= is strictly prohibited. If you have received this email in error please delete it and notify the sender immedia= tely. Before opening any mail and attachments please check them for viruses and defect. ---------------------------------------------------------------------------= -------------------------------------------- --_000_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB15NDAHCLTEVS05H_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

To Developers ,

I have read about the new member named as xfs_extdel= ta that is passed in different xfs internal routines i.e xfs_bmapi , In the= 2.4 versions instead of using it is just passed as NULL can anyone provide= info regarding that where to initialize and if I pass it NULl then is there any adverse effect of it

 

XFS_IOCORE_RT  not been used in 2.6 version , s= o if instead of this flag I will pass XFS_IOCORE_EXCL it will be ok or will= cause any crash or adverse effects or either there is any alternative pres= ent to sought out from these two problems

 

Regards

Anshul Kundra

HCL TECHNOLOGIES

ERS  

 



::DISCLAIMER::
---------------------------------------------------------------------------= --------------------------------------------

The contents of this e-mail and any attachment(s) are confidential and inte= nded for the named recipient(s) only.
It shall not attach any liability on the originator or HCL or its affiliate= s. Any views or opinions presented in
this email are solely those of the author and may not necessarily reflect t= he opinions of HCL or its affiliates.
Any form of reproduction, dissemination, copying, disclosure, modification,= distribution and / or publication of
this message without the prior written consent of the author of this e-mail= is strictly prohibited. If you have
received this email in error please delete it and notify the sender immedia= tely. Before opening any mail and
attachments please check them for viruses and defect.

---------------------------------------------------------------------------= --------------------------------------------
--_000_E6AD0DBC0AAAC1409E664C8543D529CB044E3BAB15NDAHCLTEVS05H_-- From rafagriman@gmail.com Wed Jan 11 12:28:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, MIME_8BIT_HEADER,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BISfBG184135 for ; Wed, 11 Jan 2012 12:28:41 -0600 X-ASG-Debug-ID: 1326306519-005fe612a965ef10001-NocioJ Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by cuda.sgi.com with ESMTP id 2sSSy8pKDqLHLK2i for ; Wed, 11 Jan 2012 10:28:39 -0800 (PST) X-Barracuda-Envelope-From: rafagriman@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.181 Received: by wibhr12 with SMTP id hr12so671019wib.26 for ; Wed, 11 Jan 2012 10:28:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to :mime-version:content-type:content-transfer-encoding:message-id; bh=4Cdtqt1l+6BLdw8d8OmEzlqK1WP+pTwFL6NNLfE8Exw=; b=HLy7KcZnhfFd+T6pQfVLeeg9TjCp4H6+x3nsQLHBy8kR2Hv3k3AoLUzX2l4Ui1Rp+q TAr7LZC0W3Tx0Iepg0anTWa9UXgKiz1KeNe9eq8aalA6Q9XBzTKxC8Sdx5X6czJJzlvz xbOa0IsAQ8NbVaBRvyYMhsVk4bigehpmuUBLc= Received: by 10.180.76.8 with SMTP id g8mr890198wiw.3.1326306519267; Wed, 11 Jan 2012 10:28:39 -0800 (PST) Received: from linux-pg7g.localnet (50.Red-81-32-182.dynamicIP.rima-tde.net. [81.32.182.50]) by mx.google.com with ESMTPS id h13sm2688937wbn.17.2012.01.11.10.28.38 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 11 Jan 2012 10:28:38 -0800 (PST) From: Rafa =?utf-8?q?Grim=C3=A1n?= To: Dave Chinner Subject: Re: Empty dir can't be removed ... because it's not empty? Date: Wed, 11 Jan 2012 19:28:35 +0100 X-ASG-Orig-Subj: Re: Empty dir can't be removed ... because it's not empty? User-Agent: KMail/1.13.6 (Linux/2.6.37.6-0.9-desktop; KDE/4.6.0; i686; ; ) Cc: "xfs-oss" References: <201201102126.35268.rafagriman@gmail.com> <20120110221024.GC24410@dastard> In-Reply-To: <20120110221024.GC24410@dastard> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <201201111928.35564.rafagriman@gmail.com> X-Barracuda-Connect: mail-wi0-f181.google.com[209.85.212.181] X-Barracuda-Start-Time: 1326306519 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85667 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 X-Virus-Status: Clean Hi :) On Tuesday, January 10, 2012 11:10 PM Dave Chinner wrote > On Tue, Jan 10, 2012 at 09:26:35PM +0100, Rafa Grim=EF=BF=BDn wrote: > > Hi all :) > >=20 > > My /home is on an XFS partition all to it's own. The other day the ligh= ts > > went out and when I rebooted, there's an empty directory that can't be > > erased. This directory is a subdirectory in ~/.kde4/ >=20 > Is your system using barriers (i.e. mounting with nobarrier option, > or hardware that doesn't support FUA)? Directory corruption like > this on power failure is a classic sign of a voltile drive cache > being lost on power failure. Nope, no barriers. It's a single internal SATA drive. It's my personal PC a= t=20 home so no fancy hardware :( > The output of dmesg from a system boot will tell us what hardware > you have... >=20 > > The funny thing about this is that I can rename the directory, but I > > can't delete it: > >=20 > > [root@mine albumcovers]# ls > > . .. cache > >=20 > > [root@mine albumcovers]# ls -lah cache/ > > total 0 > > drwx------ 1 rafa users 6 Jan 10 02:23 . > > drwx------ 3 rafa users 18 Jan 10 02:23 .. >=20 > ^^^ >=20 > It's link count is 3, meaning that it thinks that there is an entry > in the directory. You need to run xfs_repair to fix it (and whatever > else is broken). Thanks Dave and Markus. The thing is that when the lights came back on I ra= n=20 an xfs_check first and got nothing (no errors). When I got the error mentio= ned=20 above, I reran an xfs_check (no errors) and an xfs_repair but nothing seeme= d=20 to be wrong. Yup, partition was unmounted ;) Maybe I messed up typing the command or go figure, it was too late. That'll= =20 teach me to go to sleep at a decent time of the night ;) In any case, I just wanted to know if maybe xfs_db or some other tool could= =20 come in handy. Can't do any more checks since I repartitioned my drive and= =20 reorganized my storage. Had backups, no data loss so it was more of a=20 curiosity. Backups: can't live without them ;) Thanks for your time !! Rafa From jack@suse.cz Wed Jan 11 12:52:27 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BIqQmn185040 for ; Wed, 11 Jan 2012 12:52:26 -0600 X-ASG-Debug-ID: 1326307944-00a9eb65e690f70001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 9QP3Hv9QyxyIS1OF for ; Wed, 11 Jan 2012 10:52:25 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 63DE58FE69; Wed, 11 Jan 2012 19:52:24 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 28137205DC; Wed, 11 Jan 2012 19:52:23 +0100 (CET) From: Jan Kara To: Alex Elder Cc: xfs@oss.sgi.com, Ben Myers , Jan Kara , stable@kernel.org, Carlos Maiolino Subject: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Date: Wed, 11 Jan 2012 19:52:10 +0100 X-ASG-Orig-Subj: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Message-Id: <1326307930-21251-1-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326307944 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85669 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Commit b52a360b forgot to call xfs_iunlock() when it detected corrupted symplink and bailed out. Fix it by jumping to 'out' instead of doing return. CC: stable@kernel.org CC: Carlos Maiolino Signed-off-by: Jan Kara --- fs/xfs/xfs_vnodeops.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index f2fea86..6156cd6 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -131,7 +131,8 @@ xfs_readlink( __func__, (unsigned long long) ip->i_ino, (long long) pathlen); ASSERT(0); - return XFS_ERROR(EFSCORRUPTED); + error = XFS_ERROR(EFSCORRUPTED); + goto out; } -- 1.7.1 From bpm@sgi.com Wed Jan 11 13:13:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BJDWBe185910 for ; Wed, 11 Jan 2012 13:13:33 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6F8178F8066; Wed, 11 Jan 2012 11:13:29 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 99C6E426DA7; Wed, 11 Jan 2012 13:13:30 -0600 (CST) Date: Wed, 11 Jan 2012 13:13:30 -0600 From: Ben Myers To: Jan Kara Cc: Alex Elder , xfs@oss.sgi.com, stable@kernel.org, Carlos Maiolino Subject: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Message-ID: <20120111191330.GQ20739@sgi.com> References: <1326307930-21251-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326307930-21251-1-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jan 11, 2012 at 07:52:10PM +0100, Jan Kara wrote: > Commit b52a360b forgot to call xfs_iunlock() when it detected corrupted > symplink and bailed out. Fix it by jumping to 'out' instead of doing return. > > CC: stable@kernel.org > CC: Carlos Maiolino > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_vnodeops.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index f2fea86..6156cd6 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -131,7 +131,8 @@ xfs_readlink( > __func__, (unsigned long long) ip->i_ino, > (long long) pathlen); > ASSERT(0); > - return XFS_ERROR(EFSCORRUPTED); > + error = XFS_ERROR(EFSCORRUPTED); > + goto out; > } Looks good to me. Reviewed-by: Ben Myers From sandeen@sandeen.net Wed Jan 11 13:54:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BJsk7s187443 for ; Wed, 11 Jan 2012 13:54:46 -0600 X-ASG-Debug-ID: 1326311684-00a9eb65e798d40001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id RqlCYFiuhmvfCVuD for ; Wed, 11 Jan 2012 11:54:44 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id CCE12496329E; Wed, 11 Jan 2012 13:54:43 -0600 (CST) Message-ID: <4F0DE903.7000305@sandeen.net> Date: Wed, 11 Jan 2012 13:54:43 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Anshul Kundra CC: "xfs@oss.sgi.com" Subject: Re: query References: X-ASG-Orig-Subj: Re: query In-Reply-To: X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1326311684 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85673 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 1/11/12 9:51 AM, Anshul Kundra wrote: > To Developers , > > I have read about the new member named as xfs_extdelta that is passed Well, that "new" member was added in 2006 ;) > in different xfs internal routines i.e xfs_bmapi , In the 2.4 > versions instead of using it is just passed as NULL can anyone > provide info regarding that where to initialize and if I pass it NULl > then is there any adverse effect of it > > > > XFS_IOCORE_RT not been used in 2.6 version , so if instead of this > flag I will pass XFS_IOCORE_EXCL it will be ok or will cause any > crash or adverse effects or either there is any alternative present > to sought out from these two problems > The 2.4 codebase was so long ago, I don't think you're going to be able to make any direct translation from 2.6 code to 2.4. Anyone trying to maintain or modify 2.4-era xfs is going to be largely on their own, I'm afraid, unless others have more time than I do to go back and research this stuff... -Eric > > Regards > > Anshul Kundra > > HCL TECHNOLOGIES > > ERS > > > > > ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- > > ::DISCLAIMER:: > ----------------------------------------------------------------------------------------------------------------------- > > The contents of this e-mail and any attachment(s) are confidential > and intended for the named recipient(s) only. It shall not attach any > liability on the originator or HCL or its affiliates. Any views or > opinions presented in this email are solely those of the author and > may not necessarily reflect the opinions of HCL or its affiliates. > Any form of reproduction, dissemination, copying, disclosure, > modification, distribution and / or publication of this message > without the prior written consent of the author of this e-mail is > strictly prohibited. If you have received this email in error please > delete it and notify the sender immediately. Before opening any mail > and attachments please check them for viruses and defect. > > ----------------------------------------------------------------------------------------------------------------------- > > > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs From david@fromorbit.com Wed Jan 11 14:39:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BKdkWc188964 for ; Wed, 11 Jan 2012 14:39:46 -0600 X-ASG-Debug-ID: 1326314384-0222017aa476d4a0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id HAZg4NCTDBFf5q9u for ; Wed, 11 Jan 2012 12:39:44 -0800 (PST) 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: Av0EAPLvDU95LbVq/2dsb2JhbABDrQWBBoFyAQEFJxMcIxAIAw4KLhQlAyETv1ITjAoElQuJIIkx Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail07.adl2.internode.on.net with ESMTP; 12 Jan 2012 07:09:42 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rl4xR-0000S7-LB; Thu, 12 Jan 2012 07:39:41 +1100 Date: Thu, 12 Jan 2012 07:39:41 +1100 From: Dave Chinner To: Jan Kara Cc: Alex Elder , Ben Myers , stable@kernel.org, Carlos Maiolino , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Message-ID: <20120111203941.GJ24410@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() References: <1326307930-21251-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326307930-21251-1-git-send-email-jack@suse.cz> 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: 1326314384 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85676 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 11, 2012 at 07:52:10PM +0100, Jan Kara wrote: > Commit b52a360b forgot to call xfs_iunlock() when it detected corrupted > symplink and bailed out. Fix it by jumping to 'out' instead of doing return. > > CC: stable@kernel.org > CC: Carlos Maiolino > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_vnodeops.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index f2fea86..6156cd6 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -131,7 +131,8 @@ xfs_readlink( > __func__, (unsigned long long) ip->i_ino, > (long long) pathlen); > ASSERT(0); > - return XFS_ERROR(EFSCORRUPTED); > + error = XFS_ERROR(EFSCORRUPTED); > + goto out; > } Heh, you beat me to it. I was testing an identical patch yesterday for this problem which was tripped over by RH QA.... Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From tinguely@sgi.com Wed Jan 11 15:06:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BL6COY189930 for ; Wed, 11 Jan 2012 15:06:12 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8499C8F8171; Wed, 11 Jan 2012 13:06:08 -0800 (PST) Message-ID: <4F0DF9C1.2060302@sgi.com> Date: Wed, 11 Jan 2012 15:06:09 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: Ben Myers , Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> In-Reply-To: <4F0D21E5.7010908@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Good work. I know this is an important addition. The test in the for loop of the xfs_seek_data() and xfs_seek_hole() routines, are independent of each other except in order of them being called. One could add a "continue" statement after computing the offset for the next iteration of the loop. This allows the addition of an error condition if no conditions are matched. Rough patch relative to your patch of the idea. --- fs/xfs/xfs_file.c.orig 2012-01-11 08:50:50.000000000 -0600 +++ fs/xfs/xfs_file.c 2012-01-11 09:12:47.000000000 -0600 @@ -1265,7 +1265,7 @@ xfs_seek_data( ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); len = XFS_B_TO_FSB(mp, isize); - for (;;) { + do { struct xfs_bmbt_irec map[2]; int nmap = 2; loff_t seekoff; @@ -1323,6 +1323,7 @@ xfs_seek_data( } fsbno = map[1].br_startoff + map[1].br_blockcount; + continue; } /* @@ -1366,6 +1367,7 @@ xfs_seek_data( } fsbno = map[1].br_startoff + map[1].br_blockcount; + continue; } /* Landed in a delay allocated extent or a real data extent */ @@ -1376,11 +1378,14 @@ xfs_seek_data( break; } + error = ENXIO; + goto out_lock; + } while (XFS_FSB_TO_B(mp, fsbno) < isize); + /* Return ENXIO if beyond eof */ - if (XFS_FSB_TO_B(mp, fsbno) > isize) { - error = ENXIO; - goto out_lock; - } + if (XFS_FSB_TO_B(mp, fsbno) > isize) { + error = ENXIO; + goto out_lock; } if (offset < start) @@ -1424,7 +1429,7 @@ xfs_seek_hole( ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); len = XFS_B_TO_FSB(mp, isize); - for (;;) { + do { struct xfs_bmbt_irec map[2]; int nmap = 2; loff_t seekoff; @@ -1507,6 +1512,7 @@ xfs_seek_hole( } fsbno = map[1].br_startoff + map[1].br_blockcount; + continue; } /* @@ -1555,6 +1561,7 @@ xfs_seek_hole( } fsbno = map[1].br_startoff + map[1].br_blockcount; + continue; } /* Landed in a hole, its fine to return */ @@ -1564,11 +1571,14 @@ xfs_seek_hole( break; } + error = ENXIO; + goto out_lock; + } while (XFS_FSB_TO_B(mp, fsbno) < isize); + /* Return ENXIO if beyond eof */ - if (XFS_FSB_TO_B(mp, fsbno) > isize) { - error = ENXIO; - goto out_lock; - } + if (XFS_FSB_TO_B(mp, fsbno) > isize) { + error = ENXIO; + goto out_lock; } if (offset < start) --Mark Tinguely From tinguely@sgi.com Wed Jan 11 15:07:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BL7S6Y189981 for ; Wed, 11 Jan 2012 15:07:29 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8112E8F8205; Wed, 11 Jan 2012 13:07:28 -0800 (PST) Message-ID: <4F0DFA11.7030305@sgi.com> Date: Wed, 11 Jan 2012 15:07:29 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: Ben Myers , Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> In-Reply-To: <4F0D21E5.7010908@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole. There are a couple places that a hole can trigger a data test. BTW, I could not generate a large enough hole that xfs_bmapi_read() would return as more than one hole entry, so I will ignore those situations and just list the couple places that a hole may be match a data rule: in xfs_seek_data(): + /* + * Landed in an unwritten extent, try to find out the data + * buffer offset from page cache firstly. If nothing was + * found, treat it as a hole, and skip to check the next + * extent, something just like above. + */ + if (map[0].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + offset = max_t(loff_t, seekoff, offset); + break; + } + + /* No data extent at the given offset */ + if (nmap == 1) { + error = ENXIO; + break; + } + + if (map[1].br_state == XFS_EXT_NORM || ^^^ could be a hole and not data^^^ I think you need to add back the br_startblock test: + if ((map[1].br_state == XFS_EXT_NORM && + map[1].br_startblock != HOLESTARTBLOCK) || in xfs_seek_hole(): + /* + * Landed in a delay allocated extent or a real data extent, + * if the next extent is landed in a hole or in an unwritten + * extent but without data committed in the page cache, return + * its offset. If the next extent has dirty data in page cache, + * but its offset starts past both the start block of the map + * and the seek offset, it still be a hole. + */ + if (map[0].br_startblock == DELAYSTARTBLOCK || + map[0].br_state == XFS_EXT_NORM) { ^^^ could be a hole ^^^ and this only matters because this test is checked before the next test: + + /* Landed in a hole, its fine to return */ + if (map[0].br_startblock == HOLESTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } Switching the order of these two tests would return the immediate offset starting a hole seek at the offset of a hole. None of these conditions will result in data corruption, only earlier detection of a hole. From wkendall@sgi.com Wed Jan 11 15:08:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BL8C44190015 for ; Wed, 11 Jan 2012 15:08:13 -0600 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id AB6E1304BE5; Wed, 11 Jan 2012 13:08:09 -0800 (PST) Received: from augusta (augusta.americas.sgi.com [128.162.233.117]) by estes.americas.sgi.com (Postfix) with ESMTP id 8AEDD700183B; Wed, 11 Jan 2012 15:08:09 -0600 (CST) Received: by augusta (Postfix, from userid 2022) id 49AB4227DC13; Wed, 11 Jan 2012 15:08:09 -0600 (CST) From: Bill Kendall To: xfs@oss.sgi.com Cc: Bill Kendall Subject: [PATCH] xfsdump: allow system() to obtain exit status Date: Wed, 11 Jan 2012 15:07:53 -0600 Message-Id: <1326316073-15033-1-git-send-email-wkendall@sgi.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: References: X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfsdump explicitly ignores SIGCHLD in order to prevent librmt rsh processes from becoming zombies. However, doing so interferes with the ability for system() to determine a command's exit status. Setting up a handler for SIGCHLD will not work either, since xfsdump is now multi-threaded and the main thread (which handles signals) might handle a child exit before the thread running system() can. I also attempted to use waitpid() when tearing down a librmt session, but this has the potential to block indefinitely if there is a problem on the remote side. (And using WNOHANG tended to never catch the exit.) In the end, I settled on just not touching SIGCHLD at all. There may be a zombie rsh when librmt is used, but typically it will be alive until the end of the backup and in any case will be cleaned up when xfsdump/restore exits. Signed-off-by: Bill Kendall --- common/main.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/common/main.c b/common/main.c index 5880723..c9a311b 100644 --- a/common/main.c +++ b/common/main.c @@ -507,6 +507,13 @@ main( int argc, char *argv[] ) * want to exit when a signal is received. otherwise, hold signals so * they don't interfere with sys calls; they will be released at * pre-emption points and upon pausing in the main loop. + * + * note that since we're multi-threaded, handling SIGCHLD causes + * problems with system()'s ability to obtain a child's exit status + * (because the main thread may process SIGCHLD before the thread + * running system() calls waitpid()). likewise explicitly ignoring + * SIGCHLD also prevents system() from getting an exit status. + * therefore we don't do anything with SIGCHLD. */ sigfillset(&sa.sa_mask); @@ -514,13 +521,9 @@ main( int argc, char *argv[] ) /* always ignore SIGPIPE, instead handle EPIPE as part * of normal sys call error handling. - * - * explicitly ignore SIGCHLD so that if librmt rsh sessions - * exit early they do not become zombies. */ sa.sa_handler = SIG_IGN; sigaction( SIGPIPE, &sa, NULL ); - sigaction( SIGCHLD, &sa, NULL ); if ( ! pipeline ) { sigset_t blocked_set; -- 1.7.0.4 From tinguely@sgi.com Wed Jan 11 15:12:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BLC0vv190184 for ; Wed, 11 Jan 2012 15:12:00 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id C928B3060B4; Wed, 11 Jan 2012 13:11:59 -0800 (PST) Message-ID: <4F0DFB20.7030704@sgi.com> Date: Wed, 11 Jan 2012 15:12:00 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: Ben Myers , Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> In-Reply-To: <4F0D21E5.7010908@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_has_unwritten_buffer() always returns the offset of the first dirty unwritten page. This can cause xfs_seek_data() and xfs_seek_hole() to give the wrong results in certain circumstances. In xfs_seek_data(), every page past first dirty/unwritten page in the unwritten extent will be reported as data. in xfs_seek_data(): + /* + * Landed in an unwritten extent, try to find out the data + * buffer offset from page cache firstly. If nothing was + * found, treat it as a hole, and skip to check the next + * extent, something just like above. + */ + if (map[0].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + offset = max_t(loff_t, seekoff, offset); + break; + } Since the xfs_has_unwritten_buffer() returns the offset of the first dirty/unwritten page (the first page in this example), the max_t() comparison will say that every page after the first dirty page has data. ----- xfs_seek_hole() can only find a hole if it precedes the first dirty page. in xfs_seek_hole(): + /* + * Landed in an unwritten extent, try to lookup the page + * cache to find out if there is dirty data or not. If + * nothing was found, treate it as a hole. If there has + * dirty data and its offset starts past both the start + * block of the map and the current seek offset, it should + * be treated as hole too. Otherwise, go through the next + * extent to fetch holes. + */ + if (map[0].br_state == XFS_EXT_UNWRITTEN) { + if (xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_DIRTY, + &offset) || + xfs_has_unwritten_buffer(inode, &map[0], + PAGECACHE_TAG_WRITEBACK, + &offset)) { + if (offset > max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[0].br_startoff))) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, + map[0].br_startoff)); + break; + } + } else { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } --Mark Tinguely. From tinguely@sgi.com Wed Jan 11 15:28:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BLSgcR190937 for ; Wed, 11 Jan 2012 15:28:42 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 177838F807A; Wed, 11 Jan 2012 13:28:42 -0800 (PST) Message-ID: <4F0DFF0A.4010101@sgi.com> Date: Wed, 11 Jan 2012 15:28:42 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 09/12] repair: kill check_inode_block References: <20111202174619.179530033@bombadil.infradead.org> <20111202174742.901901836@bombadil.infradead.org> <20120111112958.GA10932@infradead.org> In-Reply-To: <20120111112958.GA10932@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/11/12 05:29, Christoph Hellwig wrote: > ping? Sorry. This replacement makes sense. I have been running the entire patch set without problems. Reviewed-by: Mark Tinguely From tinguely@sgi.com Wed Jan 11 15:37:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BLbj4F191701 for ; Wed, 11 Jan 2012 15:37:45 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 288248F8078; Wed, 11 Jan 2012 13:37:45 -0800 (PST) Message-ID: <4F0E012A.6050809@sgi.com> Date: Wed, 11 Jan 2012 15:37:46 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 10/12] repair: mark local functions static References: <20111202174619.179530033@bombadil.infradead.org> <20111202174743.292463733@bombadil.infradead.org> <20120111113004.GB10932@infradead.org> In-Reply-To: <20120111113004.GB10932@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Reviewed-by: Mark Tinguely Changes look appropriate. Compiles and runs without errors. --Mark Tinguely. From tinguely@sgi.com Wed Jan 11 15:40:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BLepFd191976 for ; Wed, 11 Jan 2012 15:40:51 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5CEF58F804C; Wed, 11 Jan 2012 13:40:51 -0800 (PST) Message-ID: <4F0E01E4.4020109@sgi.com> Date: Wed, 11 Jan 2012 15:40:52 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 11/12] repair: move extern declarations to headers References: <20111202174619.179530033@bombadil.infradead.org> <20111202174743.523970893@bombadil.infradead.org> <20120111113011.GC10932@infradead.org> In-Reply-To: <20120111113011.GC10932@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Reviewed-by: Mark Tinguely Looks good. compiles and runs the same. --Mark Tinguely From tinguely@sgi.com Wed Jan 11 16:15:55 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BMFtQr194586 for ; Wed, 11 Jan 2012 16:15:55 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 72E4C8F8059; Wed, 11 Jan 2012 14:15:52 -0800 (PST) Message-ID: <4F0E0A19.6020305@sgi.com> Date: Wed, 11 Jan 2012 16:15:53 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Carlos Maiolino CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) References: <1326288901-8171-1-git-send-email-cmaiolino@redhat.com> In-Reply-To: <1326288901-8171-1-git-send-email-cmaiolino@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > +xfs_repair $SCRATCH_DEV&>> $seq.full Reviewed-by: Mark Tinguely As mentioned before, &>> does not work on bash 3.x, the test looks good. --Mark Tinguely. From david@fromorbit.com Wed Jan 11 16:20:41 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BMKeqH194691 for ; Wed, 11 Jan 2012 16:20:41 -0600 X-ASG-Debug-ID: 1326320437-00a9eb65e7a5370001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id FER5htDJgwMun3re for ; Wed, 11 Jan 2012 14:20:38 -0800 (PST) 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: Av0EAGkIDk95LbVq/2dsb2JhbABDrQaBBoFyAQEFOhwjEAgDDgouFCUDIRO/TROMCgSVC5JR Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail07.adl2.internode.on.net with ESMTP; 12 Jan 2012 08:50:37 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rl6X6-0000hT-EI; Thu, 12 Jan 2012 09:20:36 +1100 Date: Thu, 12 Jan 2012 09:20:36 +1100 From: Dave Chinner To: Bill Kendall Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfsdump: allow system() to obtain exit status Message-ID: <20120111222036.GK24410@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfsdump: allow system() to obtain exit status References: <1326316073-15033-1-git-send-email-wkendall@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326316073-15033-1-git-send-email-wkendall@sgi.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: 1326320437 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wed, Jan 11, 2012 at 03:07:53PM -0600, Bill Kendall wrote: > xfsdump explicitly ignores SIGCHLD in order to prevent librmt rsh > processes from becoming zombies. However, doing so interferes with the > ability for system() to determine a command's exit status. > > Setting up a handler for SIGCHLD will not work either, since xfsdump is > now multi-threaded and the main thread (which handles signals) might > handle a child exit before the thread running system() can. > > I also attempted to use waitpid() when tearing down a librmt session, > but this has the potential to block indefinitely if there is a problem > on the remote side. (And using WNOHANG tended to never catch the exit.) > > In the end, I settled on just not touching SIGCHLD at all. There may be > a zombie rsh when librmt is used, but typically it will be alive until > the end of the backup and in any case will be cleaned up when > xfsdump/restore exits. > > Signed-off-by: Bill Kendall Looks OK to me. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From bpm@sgi.com Wed Jan 11 16:28:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0BMSIJZ194954 for ; Wed, 11 Jan 2012 16:28:18 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9357F304053; Wed, 11 Jan 2012 14:28:15 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id B318F426DA7; Wed, 11 Jan 2012 16:28:16 -0600 (CST) Date: Wed, 11 Jan 2012 16:28:16 -0600 From: Ben Myers To: Jeff Liu Cc: Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120111222816.GA6519@sgi.com> References: <4F06F71A.2010301@oracle.com> <20120111154318.GY6390@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120111154318.GY6390@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hey Jeff, On Wed, Jan 11, 2012 at 09:43:18AM -0600, Ben Myers wrote: > Here are a few additional minor comments from yesterday. > > I'm looking forward to seeing your next version, and I'm still working > through this one. > > I would like to suggest that you split this into two patches. The first > patch should be the 'simple' implementation that that you began with > that only looks at extents, and assumes that unwritten extents contain > data. The second patch can remove the assumption that unwritten extents > contain data, and go over pages over the extent to determine if it is > clean. I feel we have a better chance of coming to consensus that the > first patch is correct in the near term, and then we can move on to the > more complicated matter of whether the unwritten extent can be treated > as a hole safe in the knowledge that the initial implementation was > awesome. Ok, since I'm the jackass who is asking you to do the extra work I'll try to be of assistance. Understand that at this point I'm trying to make sure that I understand your code fully. I'm not trying to give you a hard time or make your life miserable. Here I am assuming that we'll treat unwritten extents as containing data and leaving the enhancement of probing unwritten extents for later. This is a table of some of the results from xfs_bmapi_read, and what should be done in each situation. SEEK_DATA: Where nmap = 0: return ENXIO. * maybe not possible, unless len = 0? Where nmap = 1: map[0] written data @ offset delay data @ offset unwritten data @ offset hole return ENXIO? * empty file? Where nmap = 2: map[0] map[1] written written data @ offset written delay data @ offset written unwritten data @ offset written hole data @ offset delay written data @ offset delay delay data @ offset * maybe not possible? delay unwritten data @ offset delay hole data @ offset unwritten written data @ offset unwritten delay data @ offset unwritten unwritten data @ offset unwritten hole data @ offset hole written data @ map[1].br_startoff hole delay data @ map[1].br_startoff hole unwritten data @ map[1].br_startoff hole hole * not possible (DELAYSTARTBLOCK and HOLESTARTBLOCK are both 'isnullstartblock') written: (!isnullstartblock(map.br_startblock) && map.br_state == XFS_EXT_NORMAL) delay: map.br_startblock == DELAYSTARTBLOCK unwritten: map.br_state == XFS_EXT_UNWRITTEN hole: map.br_startblock == HOLESTARTBLOCK xfs_seek_data(file, startoff) { loff_t offset; int error; take ilock isize = i_size_read start_fsb = XFS_B_TO_FSBT(startoff) end_fsb = XFS_B_TO_FSB(i_size) # inode size error = xfs_bmapi_read(map, &nmap) if (error) goto out_unlock; if (nmap == 0) { /* * return an error. I'm not sure that this necessarily * means we're reading after EOF, since it looks like * xfs_bmapi_read would return one hole in that case. */ error = ERROR /* EIO? */ goto out_unlock } /* check map[0] first */ if (map[0].br_state == XFS_EXT_NORMAL && !isnullstartblock(map[0].br_startblock) { /* * startoff is already within data. remember * that it can anywhere within start_fsb */ offset = startoff } else if (map[0].br_startblock == DELAYSTARTBLOCK) { offset = startoff } else if (map[0].br_state == XFS_EXT_UNWRITTEN) { offset = startoff; } else if (map[0].br_startblock == HOLESTARTBLOCK) { if (nmap == 1) { /* * finding a hole in map[0] and nothing in * map[1] probably means that we are reading * after eof */ ASSERT(startoff >= isize) error = ENXIO goto out_unlock } /* * we have two mappings, and need to check map[1] to see * if there is data. */ if (map[1].br_state == XFS_EXT_NORMAL && !isnullstartblock(map[1].br_startblock)) { offset = XFS_FSB_TO_B(map[1].br_startoff); } else if (map[1].br_startblock == DELAYSTARTBLOCK) { offset = XFS_FSB_TO_B(map[1].br_startoff); } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { offset = XFS_FSB_TO_B(map[1].br_startoff); } else if (map[1].br_startblock == HOLESTARTBLOCK) { /* * this should never happen, but we could */ ASSERT(startoff >= isize); error = ENXIO /* BUG(); */ } else { offset = startoff /* BUG(); */ } } else { offset = startoff /* BUG(); */ } out_unlock: drop ilock if (error) return -error; return offset; } I think that is sufficiently straightforward that even I can understand it, or am I off my rocker? IMO it's not that bad that we have to write the if/else to determine extent type twice and that there is some duplication when setting the offset. When you come back to enhance it further by probing unwritten extents I think a goto would probably be more readable than trying to shoehorn this into a for/do, but that's just me. Jeff, I hope that doesn't ruffle any feathers. I know I came to the party a bit late. After a break I am going to go look at your code for xfs_seek_data again. I think I'll understand it better now. After that I am going to look into SEEK_HOLE... Regards, Ben From elder@dreamhost.com Wed Jan 11 18:04:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C04FP6198119 for ; Wed, 11 Jan 2012 18:04:15 -0600 X-ASG-Debug-ID: 1326326653-005fe612a8679f00001-NocioJ Received: from mail.hq.newdream.net (mail.hq.newdream.net [66.33.206.127]) by cuda.sgi.com with ESMTP id EH4aXGx7S9p08ZpK for ; Wed, 11 Jan 2012 16:04:14 -0800 (PST) X-Barracuda-Envelope-From: elder@dreamhost.com X-Barracuda-Apparent-Source-IP: 66.33.206.127 Received: from mail.hq.newdream.net (localhost [127.0.0.1]) by mail.hq.newdream.net (Postfix) with ESMTP id CB65BC069; Wed, 11 Jan 2012 16:04:13 -0800 (PST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=dreamhost.com; h=message-id :subject:from:reply-to:to:cc:in-reply-to:references:content-type :date:mime-version:content-transfer-encoding; q=dns; s= dreamhost.com; b=SPvJm7QifeoYJ5P9YVbSVAQA8/BPPUJxloJiujjhgxOkswl qIbVPYbMyvYEfAbkI4evFJw/yzUOgXuEijymuv0IW6eh49lr5ZOwXO6SAD2ZddXB +qLN/OPRD9FNGWm65TFUcUQNZHXRdoHCtcd/VBgqqeC6QqeCR0vuOPE1kP6Y= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=dreamhost.com; h= message-id:subject:from:reply-to:to:cc:in-reply-to:references :content-type:date:mime-version:content-transfer-encoding; s= dreamhost.com; bh=UVgHFkwvv0mkDvROmURC76DHSO8=; b=LteogPmgAW/RFl yzcR8u0Qcc1neLcFs5c0crUs/+xh1gl3s2480HWKDWTYpgMg4pBrsu/9RZGzxQI+ 27rM9nPW5WwoTnIdhQJPk50pkY1Pz0GLMD2DAQyTMZLrSoTn5H0lgPi9U8cXHBxb AtJv71oKbySLSBM+qPiaN4z+uTqMY= Received: from [192.168.107.250] (aon.hq.newdream.net [64.111.111.107]) by mail.hq.newdream.net (Postfix) with ESMTPSA id 12944C07B; Wed, 11 Jan 2012 13:37:08 -0800 (PST) Message-ID: <1326313823.6789.5.camel@doink> Subject: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() From: Alex Elder X-ASG-Orig-Subj: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Reply-To: elder@dreamhost.com To: Jan Kara Cc: Alex Elder , xfs@oss.sgi.com, Ben Myers , stable@kernel.org, Carlos Maiolino In-Reply-To: <1326307930-21251-1-git-send-email-jack@suse.cz> References: <1326307930-21251-1-git-send-email-jack@suse.cz> Content-Type: text/plain; charset="UTF-8" Date: Wed, 11 Jan 2012 12:30:23 -0800 Mime-Version: 1.0 X-Mailer: Evolution 3.2.1- Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.hq.newdream.net[66.33.206.127] X-Barracuda-Start-Time: 1326326654 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85690 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 X-Virus-Status: Clean On Wed, 2012-01-11 at 19:52 +0100, Jan Kara wrote: > Commit b52a360b forgot to call xfs_iunlock() when it detected corrupted > symplink and bailed out. Fix it by jumping to 'out' instead of doing return. Whoops. Sorry I didn't catch that. Your fix looks good. Reviewed-by: Alex Elder > CC: stable@kernel.org > CC: Carlos Maiolino > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_vnodeops.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index f2fea86..6156cd6 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -131,7 +131,8 @@ xfs_readlink( > __func__, (unsigned long long) ip->i_ino, > (long long) pathlen); > ASSERT(0); > - return XFS_ERROR(EFSCORRUPTED); > + error = XFS_ERROR(EFSCORRUPTED); > + goto out; > } > > From liubo2009@cn.fujitsu.com Wed Jan 11 19:17:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C1HorY205200 for ; Wed, 11 Jan 2012 19:17:51 -0600 X-ASG-Debug-ID: 1326331067-005fe612a967eb60001-NocioJ Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id otp9hoEA7dLpTk0w for ; Wed, 11 Jan 2012 17:17:48 -0800 (PST) X-Barracuda-Envelope-From: liubo2009@cn.fujitsu.com X-Barracuda-Apparent-Source-IP: 222.73.24.84 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id E73DE170091; Thu, 12 Jan 2012 09:17:46 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q0C1Hkdk019965; Thu, 12 Jan 2012 09:17:46 +0800 Received: from localhost.localdomain ([10.167.225.27]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012011209164448-307998 ; Thu, 12 Jan 2012 09:16:44 +0800 Message-ID: <4F0E347C.5040506@cn.fujitsu.com> Date: Thu, 12 Jan 2012 09:16:44 +0800 From: Liu Bo User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090513 Fedora/3.0-2.3.beta2.fc11 Thunderbird/3.0b2 MIME-Version: 1.0 To: Lukas Czerner CC: Christoph Hellwig , linux-btrfs@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: fix 251's cp -axT problem References: <1326195560-4434-1-git-send-email-liubo2009@cn.fujitsu.com> <20120111114544.GE14423@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix 251's cp -axT problem In-Reply-To: X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-12 09:16:45, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-12 09:16:45, Serialize complete at 2012-01-12 09:16:45 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1326331067 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85694 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 01/11/2012 08:14 PM, Lukas Czerner wrote: > On Wed, 11 Jan 2012, Christoph Hellwig wrote: > >> On Tue, Jan 10, 2012 at 07:39:20PM +0800, Liu Bo wrote: >>> When I ran xfstests, 251 got failed cause "cp -axT" did not work as wish: >>> cp: cannot overwrite directory `/mnt/scratch/1' with non-directory >>> >>> With this patch, 251 has passed. >> Why would cp give that message with a missing /? >> >> I'm not against putting this in, but I'd like to understand what's going >> on. >> >> Lukas, any idea? >> > > Hi Christoph, > > the only reason I can think of is probably that Liu is accessing the > xfstests directory via symbolic link, hence the '$content' addresses the > symbolic link and cp is trying to overwrite the directory with > non-directory (symlink). > > The fix is fine for both cases (xfstests as symlink and directory), confirmed > with a simple test. > Sorry for not showing the full story in changelog, but symbolic link is the point: [root@kvm tmp]# ll XFStests lrwxrwxrwx 1 root root 32 Jan 1 09:48 XFStests -> /home/kvm_img/liub/xfstests-dev/ thanks, liubo > Thanks! > -Lukas > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > From jack@suse.cz Wed Jan 11 19:21:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C1L7BP205321 for ; Wed, 11 Jan 2012 19:21:07 -0600 X-ASG-Debug-ID: 1326331265-00a9eb65e4b1be0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id MKxCh2uDNZzh73HT for ; Wed, 11 Jan 2012 17:21:06 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 333388FE69; Thu, 12 Jan 2012 02:21:05 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 0F9CE205DD; Thu, 12 Jan 2012 02:21:04 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: [PATCH 0/4] Fix filesystem freezing Date: Thu, 12 Jan 2012 02:20:49 +0100 X-ASG-Orig-Subj: [PATCH 0/4] Fix filesystem freezing Message-Id: <1326331253-6497-1-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326331265 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85695 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hello, filesystem freezing is currently racy and thus we can end up with dirty data on frozen filesystem (see changelog of the first patch for detailed race description and proposed fix). This patch series aims at fixing this. So far I did basic testing using UML linux (running fsstress and bash-shared-mapping while doing freeze - sync (to deadlock on leftover dirty pages) - unfreeze) and I'm not able to trigger dirty pages on frozen filesystem anymore. I plan to do more testing on real machine tomorrow. Surbhi, Kamal, you were able to reproduce deadlocks due to dirty data as well so please test these patches out. Thanks. Also review of patches is welcome. Honza From jack@suse.cz Wed Jan 11 19:21:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C1L7YY205325 for ; Wed, 11 Jan 2012 19:21:07 -0600 X-ASG-Debug-ID: 1326331265-00a9eb65e5b1be0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id icIOLT1IsfWJQqGQ for ; Wed, 11 Jan 2012 17:21:06 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id EEF7F8980B; Thu, 12 Jan 2012 02:21:04 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 1C9C8205E0; Thu, 12 Jan 2012 02:21:04 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , Jan Kara , Ben Myers , Alex Elder Subject: [PATCH 4/4] xfs: Protect xfs_file_aio_write() with sb_start_write - sb_end_write Date: Thu, 12 Jan 2012 02:20:53 +0100 X-ASG-Orig-Subj: [PATCH 4/4] xfs: Protect xfs_file_aio_write() with sb_start_write - sb_end_write Message-Id: <1326331253-6497-5-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1326331253-6497-1-git-send-email-jack@suse.cz> References: <1326331253-6497-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326331265 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85695 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Replace racy xfs_wait_for_freeze() check with reliable sb_start_write() - sb_end_write() locking. Due to lock ranking dictated by the page fault code we have to call sb_start_write() after we acquire ilock. CC: Ben Myers CC: Alex Elder Signed-off-by: Jan Kara --- fs/xfs/xfs_file.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 753ed9b..c5f879b 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -862,9 +862,11 @@ xfs_file_dio_aio_write( *iolock = XFS_IOLOCK_SHARED; } + sb_start_write(inode->i_sb); trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); ret = generic_file_direct_write(iocb, iovp, &nr_segs, pos, &iocb->ki_pos, count, ocount); + sb_end_write(inode->i_sb); /* No fallback to buffered IO on errors for XFS. */ ASSERT(ret < 0 || ret == count); @@ -899,6 +901,7 @@ xfs_file_buffered_aio_write( /* We can write back this queue in page reclaim */ current->backing_dev_info = mapping->backing_dev_info; + sb_start_write(inode->i_sb); write_retry: trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); ret = generic_file_buffered_write(iocb, iovp, nr_segs, @@ -914,6 +917,7 @@ write_retry: enospc = 1; goto write_retry; } + sb_end_write(inode->i_sb); current->backing_dev_info = NULL; return ret; } @@ -945,8 +949,6 @@ xfs_file_aio_write( if (ocount == 0) return 0; - xfs_wait_for_freeze(ip->i_mount, SB_FREEZE_WRITE); - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return -EIO; -- 1.7.1 From jack@suse.cz Wed Jan 11 19:21:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C1L72K205333 for ; Wed, 11 Jan 2012 19:21:08 -0600 X-ASG-Debug-ID: 1326331265-0222017aa4780160001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id IIbmBvsZ4ZzKKpMY for ; Wed, 11 Jan 2012 17:21:06 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 0FD118FE2D; Thu, 12 Jan 2012 02:21:05 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 12AC8205DB; Thu, 12 Jan 2012 02:21:04 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , Jan Kara Subject: [PATCH 1/4] fs: Improve filesystem freezing handling Date: Thu, 12 Jan 2012 02:20:50 +0100 X-ASG-Orig-Subj: [PATCH 1/4] fs: Improve filesystem freezing handling Message-Id: <1326331253-6497-2-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1326331253-6497-1-git-send-email-jack@suse.cz> References: <1326331253-6497-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326331265 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85696 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Currently, exclusion between ->page_mkwrite() and filesystem freezing has been handled by setting page dirty and then verifying s_frozen. This guaranteed that either the freezing code sees the faulted page, writes it, and writeprotects it again or we see s_frozen set and bail out of page fault. This works to protect from page being marked writeable while filesystem freezing is running but has an unpleasant artefact of leaving dirty (although unmodified and writeprotected) pages on frozen filesystem. This artefact then requires workarounds in writeback code and other places. Also generally vfs_check_frozen() tests are racy since the filesystem can be frozen just after the test is performed. Thus in other write paths we can end up marking some pages or inodes dirty even though filesystem is already frozen. Again this creates problems with flusher thread hanging on frozen filesystem. This patch aims at providing exclusion between write paths which dirty data (we don't have to worry about metadata since that is handled by filesystems in ->freeze_fs) and filesystem freezing. We implement a writer-freeze read-write semaphore in the superblock. Write paths which dirty data such as ->block_page_mkwrite() implementations, or ->aio_write() implementations hold reader side of the semaphore. Filesystem freezing code holds the writer side. Only that we don't really want to bounce cachelines of the semaphore between CPUs for each write happening. So we implement the reader side of the semaphore as a per-cpu counter and the writer side is implemented using s_frozen superblock field. Signed-off-by: Jan Kara --- fs/super.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++- include/linux/fs.h | 14 ++++++ 2 files changed, 134 insertions(+), 1 deletions(-) diff --git a/fs/super.c b/fs/super.c index afd0f1a..c85c64c 100644 --- a/fs/super.c +++ b/fs/super.c @@ -32,12 +32,15 @@ #include #include #include +#include #include "internal.h" LIST_HEAD(super_blocks); DEFINE_SPINLOCK(sb_lock); +static struct lock_class_key sb_writers_key; + /* * One thing we have to be careful of with a per-sb shrinker is that we don't * drop the last active reference to the superblock from within the shrinker. @@ -183,6 +186,13 @@ static struct super_block *alloc_super(struct file_system_type *type) s->s_shrink.seeks = DEFAULT_SEEKS; s->s_shrink.shrink = prune_super; s->s_shrink.batch = 1024; + + init_waitqueue_head(&s->s_writers_wait); +#ifdef CONFIG_SMP + s->s_page_faults = alloc_percpu(int); +#endif + lockdep_init_map(&s->s_writers_lock_map, "sb_writers", + &sb_writers_key, 0); } out: return s; @@ -1126,6 +1136,84 @@ out: } /** + * sb_start_write - drop write access to a superblock + * @sb: the super we wrote to + * + * Decrement number of writers to the filesystem and wake up possible + * waiters wanting to freeze the filesystem. + */ +void sb_end_write(struct super_block *sb) +{ +#ifdef CONFIG_SMP + this_cpu_dec(sb->s_writers); +#else + preempt_disable(); + sb->s_writers--; + preempt_enable(); +#endif + /* + * Make sure s_writers are updated before we wake up waiters in + * freeze_super(). + */ + smp_mb(); + if (waitqueue_active(&sb->s_writers_wait)) + wake_up(&sb->s_writers_wait); + rwsem_release(&sb->s_writers_lock_map, 1, _RET_IP_); +} + +/** + * sb_start_write - get write access to a superblock + * @sb: the super we write to + * + * When a process wants to write data to a filesystem (i.e. dirty a page), + * it should embed the operation in a sb_start_write() - sb_end_write() pair + * to get exclusion against filesystem freezing. This function increments + * number of writers to the filesystem and waits if filesystem is frozen until + * it is thawed. + */ +void sb_start_write(struct super_block *sb) +{ +retry: + rwsem_acquire_read(&sb->s_writers_lock_map, 0, 0, _RET_IP_); + vfs_check_frozen(sb, SB_FREEZE_WRITE); +#ifdef CONFIG_SMP + this_cpu_inc(sb->s_writers); +#else + preempt_disable(); + sb->s_writers++; + preempt_enable(); +#endif + /* + * Make sure s_writers are updated before we check s_frozen. + * freeze_super() first sets s_frozen and then checks s_writers. + */ + smp_mb(); + if (sb->s_frozen != SB_UNFROZEN) { + sb_end_write(sb); + goto retry; + } +} + +/* + * Get number of writers to the superblock + */ +static int get_writers_count(struct super_block *sb) +{ + int writers; +#ifdef CONFIG_SMP + int cpu; + + writers = 0; + for_each_possible_cpu(cpu) { + writers += *per_cpu_ptr(sb->s_writers, cpu); + } +#else + writers = sb->s_writers; +#endif + return writers; +} + +/** * freeze_super - lock the filesystem and force it into a consistent state * @sb: the super to lock * @@ -1136,6 +1224,7 @@ out: int freeze_super(struct super_block *sb) { int ret; + int writers; atomic_inc(&sb->s_active); down_write(&sb->s_umount); @@ -1151,8 +1240,36 @@ int freeze_super(struct super_block *sb) return 0; } + rwsem_acquire(&sb->s_writers_lock_map, 0, 0, _THIS_IP_); sb->s_frozen = SB_FREEZE_WRITE; - smp_wmb(); + /* + * Now wait for all page faults to finish. ->page_mkwrite() + * implementations must call vfs_check_frozen() before starting + * a fault so that we cannot livelock here. Because of that we + * are guaranteed that from this moment on new ->page_mkwrite() + * calls will block and we just have to wait for s_page_faults + * to drop to zero (in a sum). + */ + do { + DEFINE_WAIT(wait); + + /* + * We use a barrier in prepare_to_wait() to separate setting + * of s_frozen and checking of s_writers + */ + prepare_to_wait(&sb->s_writers_wait, &wait, + TASK_UNINTERRUPTIBLE); + /* + * We must iterate over all (even offline) CPUs because of CPU + * hotplug their entries could still be non-zero. This is slow + * when lots of CPUs are configured but hey, filesystem freezing + * isn't exactly cheap anyway. + */ + writers = get_writers_count(sb); + if (writers) + schedule(); + finish_wait(&sb->s_writers_wait, &wait); + } while (writers); sync_filesystem(sb); @@ -1165,6 +1282,7 @@ int freeze_super(struct super_block *sb) if (ret) { printk(KERN_ERR "VFS:Filesystem freeze failed\n"); + rwsem_release(&sb->s_writers_lock_map, 1, _THIS_IP_); sb->s_frozen = SB_UNFROZEN; deactivate_locked_super(sb); return ret; @@ -1206,6 +1324,7 @@ int thaw_super(struct super_block *sb) } out: + rwsem_release(&sb->s_writers_lock_map, 1, _THIS_IP_); sb->s_frozen = SB_UNFROZEN; smp_wmb(); wake_up(&sb->s_wait_unfrozen); diff --git a/include/linux/fs.h b/include/linux/fs.h index e313022..297b263 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -10,6 +10,7 @@ #include #include #include +#include /* * It's silly to have NR_OPEN bigger than NR_FILE, but you can change @@ -1445,6 +1446,16 @@ struct super_block { int s_frozen; wait_queue_head_t s_wait_unfrozen; +#ifdef CONFIG_SMP + int __percpu *s_writers; /* counter of running writes */ +#else + int s_writers; /* counter of running writes */ +#endif + wait_queue_head_t s_writers_wait; /* queue for waiting for + writers to finish */ +#ifdef CONFIG_DEBUG_LOCK_ALLOC + struct lockdep_map s_writers_lock_map; +#endif char s_id[32]; /* Informational name */ u8 s_uuid[16]; /* UUID */ @@ -1501,6 +1512,9 @@ enum { #define vfs_check_frozen(sb, level) \ wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) +void sb_end_write(struct super_block *sb); +void sb_start_write(struct super_block *sb); + /* * until VFS tracks user namespaces for inodes, just make all files * belong to init_user_ns -- 1.7.1 From jack@suse.cz Wed Jan 11 19:21:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C1L70L205324 for ; Wed, 11 Jan 2012 19:21:07 -0600 X-ASG-Debug-ID: 1326331265-0222017aa5781d10001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id eMFWHRJUIuVKPAqH for ; Wed, 11 Jan 2012 17:21:05 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 01A578FB75; Thu, 12 Jan 2012 02:21:05 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 17EF6205DE; Thu, 12 Jan 2012 02:21:04 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , Jan Kara , "Theodore Ts'o" Subject: [PATCH 3/4] ext4: Protect ext4_page_mkwrite with sb_start_write - sb_end_write Date: Thu, 12 Jan 2012 02:20:52 +0100 X-ASG-Orig-Subj: [PATCH 3/4] ext4: Protect ext4_page_mkwrite with sb_start_write - sb_end_write Message-Id: <1326331253-6497-4-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1326331253-6497-1-git-send-email-jack@suse.cz> References: <1326331253-6497-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326331265 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85696 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Since ext4_page_mkwrite() calls into __block_page_mkwrite() it has to provide freezing protection on it's own. CC: "Theodore Ts'o" Signed-off-by: Jan Kara --- fs/ext4/inode.c | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 848f436..fbe998b 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4733,11 +4733,7 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) get_block_t *get_block; int retries = 0; - /* - * This check is racy but catches the common case. We rely on - * __block_page_mkwrite() to do a reliable check. - */ - vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); + sb_start_write(inode->i_sb); /* Delalloc case is easy... */ if (test_opt(inode->i_sb, DELALLOC) && !ext4_should_journal_data(inode) && @@ -4805,5 +4801,6 @@ retry_alloc: out_ret: ret = block_page_mkwrite_return(ret); out: + sb_end_write(inode->i_sb); return ret; } -- 1.7.1 From jack@suse.cz Wed Jan 11 19:21:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C1L7Wm205323 for ; Wed, 11 Jan 2012 19:21:07 -0600 X-ASG-Debug-ID: 1326331265-0222017aa3781d10001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 4tkTetIyzbK9DEEY for ; Wed, 11 Jan 2012 17:21:05 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 3E0C28FFDD; Thu, 12 Jan 2012 02:21:05 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 14E71205DC; Thu, 12 Jan 2012 02:21:04 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , Jan Kara Subject: [PATCH 2/4] vfs: Protect write paths by sb_start_write - sb_end_write Date: Thu, 12 Jan 2012 02:20:51 +0100 X-ASG-Orig-Subj: [PATCH 2/4] vfs: Protect write paths by sb_start_write - sb_end_write Message-Id: <1326331253-6497-3-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1326331253-6497-1-git-send-email-jack@suse.cz> References: <1326331253-6497-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326331265 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85696 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean There are three entry points which dirty pages in a filesystem. mmap (handled by block_page_mkwrite()), buffered write (handled by __generic_file_aio_write()), and truncate (it can dirty last partial page - handled by do_truncate()). Protect these places with sb_start_write() and sb_end_write(). Signed-off-by: Jan Kara --- fs/buffer.c | 18 ++---------------- fs/open.c | 6 ++++++ mm/filemap.c | 3 ++- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 19d8eb7..8519405 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2371,18 +2371,7 @@ int __block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, if (unlikely(ret < 0)) goto out_unlock; - /* - * Freezing in progress? We check after the page is marked dirty and - * with page lock held so if the test here fails, we are sure freezing - * code will wait during syncing until the page fault is done - at that - * point page will be dirty and unlocked so freezing code will write it - * and writeprotect it again. - */ set_page_dirty(page); - if (inode->i_sb->s_frozen != SB_UNFROZEN) { - ret = -EAGAIN; - goto out_unlock; - } wait_on_page_writeback(page); return 0; out_unlock: @@ -2397,12 +2386,9 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, int ret; struct super_block *sb = vma->vm_file->f_path.dentry->d_inode->i_sb; - /* - * This check is racy but catches the common case. The check in - * __block_page_mkwrite() is reliable. - */ - vfs_check_frozen(sb, SB_FREEZE_WRITE); + sb_start_write(sb); ret = __block_page_mkwrite(vma, vmf, get_block); + sb_end_write(sb); return block_page_mkwrite_return(ret); } EXPORT_SYMBOL(block_page_mkwrite); diff --git a/fs/open.c b/fs/open.c index 22c41b5..ee17c90 100644 --- a/fs/open.c +++ b/fs/open.c @@ -55,8 +55,14 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, if (ret) newattrs.ia_valid |= ret | ATTR_FORCE; + /* + * Truncate can dirty last partial page so we need protection against + * filesystem freezing. + */ mutex_lock(&dentry->d_inode->i_mutex); + sb_start_write(dentry->d_sb); ret = notify_change(dentry, &newattrs); + sb_end_write(dentry->d_sb); mutex_unlock(&dentry->d_inode->i_mutex); return ret; } diff --git a/mm/filemap.c b/mm/filemap.c index c0018f2..6566c73 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2529,7 +2529,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, count = ocount; pos = *ppos; - vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); + sb_start_write(inode->i_sb); /* We can write back this queue in page reclaim */ current->backing_dev_info = mapping->backing_dev_info; @@ -2601,6 +2601,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, pos, ppos, count, written); } out: + sb_end_write(inode->i_sb); current->backing_dev_info = NULL; return written ? written : err; } -- 1.7.1 From mitsuo.hayasaka.hu@hitachi.com Wed Jan 11 20:41:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C2fkbE209481 for ; Wed, 11 Jan 2012 20:41:46 -0600 X-ASG-Debug-ID: 1326336100-005fe612a7687570001-NocioJ Received: from mail4.hitachi.co.jp (mail4.hitachi.co.jp [133.145.228.5]) by cuda.sgi.com with ESMTP id mqwxxg3o0Hwyl8WM; Wed, 11 Jan 2012 18:41:43 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.5 Received: from mlsv2.hitachi.co.jp (unknown [133.144.234.166]) by mail4.hitachi.co.jp (Postfix) with ESMTP id 86FAF33CC4; Thu, 12 Jan 2012 11:41:39 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv2.hitachi.co.jp (8.13.1/8.13.1) id q0C2fdmL026772; Thu, 12 Jan 2012 11:41:39 +0900 Received: from vshuts3.hitachi.co.jp (vshuts3.hitachi.co.jp [10.201.6.72]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0C2fcjh001631; Thu, 12 Jan 2012 11:41:39 +0900 X-AuditID: b753bd60-a2688ba000000655-ac-4f0e48624c9d Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts3.hitachi.co.jp (Symantec Mail Security) with ESMTP id 393CE77425C; Thu, 12 Jan 2012 11:41:38 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0C2fbBA022851; Thu, 12 Jan 2012 11:41:37 +0900 X-AuditID: b753bd60-a2688ba000000655-ac-4f0e48624c9d Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id DE175236561; Thu, 12 Jan 2012 11:39:18 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 44FDD12550C; Thu, 12 Jan 2012 11:41:31 +0900 (JST) From: Mitsuo Hayasaka Subject: [RFC PATCH] xfs: show uuid when mount fails due to duplicate uuid To: Ben Myers , Alex Elder X-ASG-Orig-Subj: [RFC PATCH] xfs: show uuid when mount fails due to duplicate uuid Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com, Mitsuo Hayasaka , Ben Myers , Alex Elder Date: Thu, 12 Jan 2012 11:47:20 +0900 Message-ID: <20120112024720.3952.73517.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail4.hitachi.co.jp[133.145.228.5] X-Barracuda-Start-Time: 1326336102 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean When a system tries to mount a filesystem (FS) using UUID, the xfs returns -EINVAL and shows a message if a FS with the same UUID has been already mounted. It is useful to output the duplicate UUID with it. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder --- fs/xfs/xfs_mount.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index d06afbc..6b96d6e 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -158,7 +158,10 @@ xfs_uuid_mount( out_duplicate: mutex_unlock(&xfs_uuid_table_mutex); - xfs_warn(mp, "Filesystem has duplicate UUID - can't mount"); + xfs_warn(mp, + "Filesystem has duplicate UUID - can't mount: uuid = %pU", + uuid); + return XFS_ERROR(EINVAL); } From david@fromorbit.com Wed Jan 11 20:48:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C2mlXq209885 for ; Wed, 11 Jan 2012 20:48:47 -0600 X-ASG-Debug-ID: 1326336524-0222017aa378ce30001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id ER1cpCUME2dI6cbY for ; Wed, 11 Jan 2012 18:48:44 -0800 (PST) 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: Av0EAKVHDk95LbVq/2dsb2JhbABDrQqBBoFyAQEFJxMcIxAIAw4KLhQlAyETG79kE4snYwSVC5JR Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail07.adl2.internode.on.net with ESMTP; 12 Jan 2012 13:18:43 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RlAiX-0001CQ-Q4; Thu, 12 Jan 2012 13:48:41 +1100 Date: Thu, 12 Jan 2012 13:48:41 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 0/4] Fix filesystem freezing Message-ID: <20120112024841.GB2806@dastard> X-ASG-Orig-Subj: Re: [PATCH 0/4] Fix filesystem freezing References: <1326331253-6497-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326331253-6497-1-git-send-email-jack@suse.cz> 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: 1326336524 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 12, 2012 at 02:20:49AM +0100, Jan Kara wrote: > > Hello, > > filesystem freezing is currently racy and thus we can end up with dirty data > on frozen filesystem (see changelog of the first patch for detailed race > description and proposed fix). This patch series aims at fixing this. It only fixes the dirty data race (i.e. SB_FREEZE_WRITE). The same race conditions exist for SB_FREEZE_TRANS on XFS, and so need the same fix. That race has had one previous attempt at fixing it in XFS but that's not possible: b2ce397 Revert "xfs: fix filesystsem freeze race in xfs_trans_alloc" 7a249cf xfs: fix filesystsem freeze race in xfs_trans_alloc It was looking at that problem earlier today that lead to the solution Eric proposed. Essentially the method in these patches needs to replace the xfs specifc m_active_trans counter and delay during ->fs_freeze to prevent that race condition.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From stan@hardwarefreak.com Wed Jan 11 22:15:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C4FqKo215804 for ; Wed, 11 Jan 2012 22:15:52 -0600 X-ASG-Debug-ID: 1326341750-005fe612a6695380001-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 wia3B0JPlegjxGci for ; Wed, 11 Jan 2012 20:15:51 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 9AE826C129 for ; Wed, 11 Jan 2012 22:15:50 -0600 (CST) Message-ID: <4F0E5E73.9070308@hardwarefreak.com> Date: Wed, 11 Jan 2012 22:15:47 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: sunit/swidth for HP P4500 Lefthand Networks storage arrays Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: sunit/swidth for HP P4500 Lefthand Networks storage arrays Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1326341751 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85706 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean The Linux host will be Debian Squeeze with a very recent BPO kernel, but running as a guest inside a VMware cluster. The storage platform is a dozen clustered HP P4500/Lefthand Networks "self load balancing" iSCSI arrays. The application is Dovecot IMAP using the mdbox mailbox storage format, which is basically a hybrid mbox/maildir+dedup format. Files will be 32-64MB or so, each containing multiple emails, with multiple files per mailbox directory. Mail indexes are internal to the files. What is the best mkfs.xfs configuration for this scenario? I'm guessing it would be best to simply use mostly, if not completely, the defaults, due to the way iSCSI packets are redirected on the fly to any storage node depending on load, by the Lefthand special sauce. What about mount options? Should I use barriers with the P4500s or disable them? TTBOMK the internal PCIe RAID controllers have BBWC, but the ~6GB of RAM on the P4500 mobos isn't battery backed, but for the typical external UPS. In this setup, from a physical hardware standpoint, iSCSI packets will be making at least 2 ethernet switch hops between the ESX nodes and the P4500s, with redundant links between everything, if that's a factor at all. -- Stan From michael.monnerie@is.it-management.at Thu Jan 12 01:31:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0C7V10N229689 for ; Thu, 12 Jan 2012 01:31:02 -0600 X-ASG-Debug-ID: 1326353458-0222017aa67be040001-NocioJ Received: from mailsrv14.zmi.at (mailsrv14.zmi.at [212.69.164.54]) by cuda.sgi.com with ESMTP id ht5j0NIb0Fls4MMg for ; Wed, 11 Jan 2012 23:30:59 -0800 (PST) X-Barracuda-Envelope-From: michael.monnerie@is.it-management.at X-Barracuda-Apparent-Source-IP: 212.69.164.54 Received: from mailsrv.i.zmi.at (h081217106014.dyn.cm.kabsi.at [81.217.106.14]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv14.zmi.at (Postfix) with ESMTPSA id BB9901828D8C; Thu, 12 Jan 2012 08:30:57 +0100 (CET) Received: from saturn.localnet (saturn.i.zmi.at [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id C30A4CD7C8C; Thu, 12 Jan 2012 08:31:00 +0100 (CET) From: Michael Monnerie Organization: it-management http://it-management.at To: stan@hardwarefreak.com Subject: Re: sunit/swidth for HP P4500 Lefthand Networks storage arrays Date: Thu, 12 Jan 2012 08:30:56 +0100 X-ASG-Orig-Subj: Re: sunit/swidth for HP P4500 Lefthand Networks storage arrays User-Agent: KMail/1.13.6 (Linux/3.1.5-zmi; KDE/4.6.0; x86_64; ; ) References: <4F0E5E73.9070308@hardwarefreak.com> In-Reply-To: <4F0E5E73.9070308@hardwarefreak.com> Cc: xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart4302986.nCAjBBFqPr"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <201201120830.56858@zmi.at> X-Barracuda-Connect: mailsrv14.zmi.at[212.69.164.54] X-Barracuda-Start-Time: 1326353459 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85720 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean --nextPart4302986.nCAjBBFqPr Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable On Donnerstag, 12. Januar 2012 Stan Hoeppner wrote: > What is the best mkfs.xfs configuration for this scenario? >=20 > I'm guessing it would be best to simply use mostly, if not > completely, the defaults, due to the way iSCSI packets are > redirected on the fly to any storage node depending on load, by the > Lefthand special sauce. I'd use defaults. We've recently switched to a NetApp storage, and with=20 all the specialities it has also use the defaults. > What about mount options? >=20 > Should I use barriers with the P4500s or disable them? > TTBOMK the internal PCIe RAID controllers have BBWC, but the ~6GB of > RAM on the P4500 mobos isn't battery backed, but for the typical > external UPS. In this setup, from a physical hardware standpoint, > iSCSI packets will be making at least 2 ethernet switch hops between > the ESX nodes and the P4500s, with redundant links between > everything, if that's a factor at all. Turn off barriers, I'd say. We use the NetApp over NFS (to VMware=20 stores), and turned them off. I guess that's also correct to do. As I understand them, barriers help to not loose blocks which the=20 storage already received, so it doesn't matter how it's connected=20 because the packets must have arrived there already. Can someone=20 confirm? =2D-=20 mit freundlichen Gr=FCssen, Michael Monnerie, Ing. BSc it-management Internet Services: Prot=E9ger http://proteger.at [gesprochen: Prot-e-schee] Tel: +43 660 / 415 6531 --nextPart4302986.nCAjBBFqPr Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) iEYEABECAAYFAk8OjDAACgkQzhSR9xwSCbSy1ACgr8Y/5G2X/1vf5boQkpY3wZRV 958An2jkcxPUb8Zu84XkKh64F0xsERsJ =p9Zh -----END PGP SIGNATURE----- --nextPart4302986.nCAjBBFqPr-- From cmaiolino@redhat.com Thu Jan 12 05:05:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CB5TZO248603 for ; Thu, 12 Jan 2012 05:05:30 -0600 X-ASG-Debug-ID: 1326366327-005fe612a8754ab0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 1lcRAtaWS6CK4GJ8; Thu, 12 Jan 2012 03:05:28 -0800 (PST) X-Barracuda-Envelope-From: cmaiolino@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 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 q0CB5RPR030118 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 12 Jan 2012 06:05:27 -0500 Received: from andromeda.usersys.redhat.com (ovpn-113-80.phx2.redhat.com [10.3.113.80]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0CB5NCZ003452 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Thu, 12 Jan 2012 06:05:26 -0500 Date: Thu, 12 Jan 2012 09:05:23 -0200 From: Carlos Maiolino To: Mark Tinguely Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) Message-ID: <20120112110523.GA1798@andromeda.usersys.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) References: <1326288901-8171-1-git-send-email-cmaiolino@redhat.com> <4F0E0A19.6020305@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0E0A19.6020305@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1326366328 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean > >+xfs_repair $SCRATCH_DEV&>> $seq.full > > Reviewed-by: Mark Tinguely > > As mentioned before, &>> does not work on bash 3.x, the test looks good. > Yes, Mark and I discussed about it, but, since the patch is going upstream, I thought would be better to leave it as-is, once most newer distros are using bash 4, but, I have no concerns in change it if needed. Cheers -- --Carlos From jack@suse.cz Thu Jan 12 05:30:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CBUa9k251146 for ; Thu, 12 Jan 2012 05:30:36 -0600 X-ASG-Debug-ID: 1326367833-00a9eb65e61957c0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id TcObGCpWXpLD8EFD for ; Thu, 12 Jan 2012 03:30:34 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 10EB78BB22; Thu, 12 Jan 2012 12:30:33 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id AF560205DC; Thu, 12 Jan 2012 12:30:31 +0100 (CET) Date: Thu, 12 Jan 2012 12:30:31 +0100 From: Jan Kara To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 0/4] Fix filesystem freezing Message-ID: <20120112113031.GA8778@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 0/4] Fix filesystem freezing References: <1326331253-6497-1-git-send-email-jack@suse.cz> <20120112024841.GB2806@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112024841.GB2806@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326367834 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu 12-01-12 13:48:41, Dave Chinner wrote: > On Thu, Jan 12, 2012 at 02:20:49AM +0100, Jan Kara wrote: > > > > Hello, > > > > filesystem freezing is currently racy and thus we can end up with dirty data > > on frozen filesystem (see changelog of the first patch for detailed race > > description and proposed fix). This patch series aims at fixing this. > > It only fixes the dirty data race (i.e. SB_FREEZE_WRITE). The same > race conditions exist for SB_FREEZE_TRANS on XFS, and so need the > same fix. That race has had one previous attempt at fixing it in > XFS but that's not possible: > > b2ce397 Revert "xfs: fix filesystsem freeze race in xfs_trans_alloc" > 7a249cf xfs: fix filesystsem freeze race in xfs_trans_alloc > > It was looking at that problem earlier today that lead to the > solution Eric proposed. Essentially the method in these patches > needs to replace the xfs specifc m_active_trans counter and delay > during ->fs_freeze to prevent that race condition.... OK, I see. I just checked ext4 to make sure and ext4 seems to get this right. Looking into Christoph's original patch it shouldn't be hard to fix it. Instead of: atomic_inc(&mp->m_active_trans); if (wait_for_freeze) xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); we just need to do a bit more elaborate retry: if (wait_for_freeze) xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); atomic_inc(&mp->m_active_trans); if (wait_for_freeze && mp->m_super->s_frozen >= SB_FREEZE_TRANS) { atomic_dec(&mp->m_active_trans); goto retry; } Or does XFS support nested transactions (i.e. a thread already holding a running transaction can call into xfs_trans_alloc() again)? That would make things more complicated... Using sb_start_write() instead of m_active_trans won't be that easy because it can create A-A deadlocks (e.g. we do sb_start_write in block_page_mkwrite() and then xfs_get_blocks() decides to start a transaction and calls sb_start_write() again which might block if filesystem freezing started in the mean time). So it's up to XFS maintainers to decide what's best but I'd take Christoph's patch with above fixup. I guess I'll put it in this series and see what people say. Honza -- Jan Kara SUSE Labs, CR From jeff.liu@oracle.com Thu Jan 12 06:53:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CCrmIH256612 for ; Thu, 12 Jan 2012 06:53:48 -0600 X-ASG-Debug-ID: 1326372824-005fe612a876f1a0001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id VBLfHbfc6d2DgRLO; Thu, 12 Jan 2012 04:53:44 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0CCrbUv015153 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 12 Jan 2012 12:53:37 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0CCramX016775 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 12 Jan 2012 12:53:36 GMT Received: from abhmt111.oracle.com (abhmt111.oracle.com [141.146.116.63]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0CCraUP030425; Thu, 12 Jan 2012 06:53:36 -0600 Received: from [10.191.45.24] (/10.191.45.24) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 12 Jan 2012 04:53:35 -0800 Message-ID: <4F0ED7C9.7050905@oracle.com> Date: Thu, 12 Jan 2012 20:53:29 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Ben Myers CC: xfs@oss.sgi.com, Christoph Hellwig , Chris Mason Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120111154318.GY6390@sgi.com> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <20120111154318.GY6390@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090206.4F0ED7D1.00EC,ss=1,re=-2.300,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1326372824 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Ben, On 01/11/2012 11:43 PM, Ben Myers wrote: > Hey Jeff, > > Here are a few additional minor comments from yesterday. > > I'm looking forward to seeing your next version, and I'm still working > through this one. > > I would like to suggest that you split this into two patches. The first > patch should be the 'simple' implementation that that you began with > that only looks at extents, and assumes that unwritten extents contain > data. The second patch can remove the assumption that unwritten extents > contain data, and go over pages over the extent to determine if it is > clean. I feel we have a better chance of coming to consensus that the > first patch is correct in the near term, and then we can move on to the > more complicated matter of whether the unwritten extent can be treated > as a hole safe in the knowledge that the initial implementation was > awesome. > > Regards, > Ben > > On Fri, Jan 06, 2012 at 09:28:58PM +0800, Jeff Liu wrote: >> This is a revised patch according to Christoph's comments at V4. >> >> Changes to V5: >> -------------- >> * Revise xfs_has_unwritten_buffer() to lookup pages match tag. >> * For unwritten extents, in both xfs_seek_data() and xfs_seek_hole(), call xfs_has_unwritten_buffer() to search >> DIRTY pages firstly, if no dirty data found, call it again to search WRITEBACK pages. >> * In xfs_seek_hole(), if dirty data was found in page cache for an unwritten extents, but its start offset past the start block >> of the map, treat it as a hole, returns the offset if possible(data_buffer_offset > max(seek_offset, start_block_of_map)). >> >> Tests: >> ------ >> seek sanity tester: >> http://patchwork.xfs.org/patch/3108/ >> seek copy tester: >> http://patchwork.xfs.org/patch/3109/ >> >> >> Thanks, >> -Jeff >> >> Signed-off-by: Jie Liu >> >> --- >> fs/xfs/xfs_file.c | 466 ++++++++++++++++++++++++++++++++++++++++++++++++++++- >> 1 files changed, 465 insertions(+), 1 deletions(-) >> >> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c >> index 753ed9b..24ae40a 100644 >> --- a/fs/xfs/xfs_file.c >> +++ b/fs/xfs/xfs_file.c >> @@ -38,6 +38,7 @@ >> >> #include >> #include >> +#include >> >> static const struct vm_operations_struct xfs_file_vm_ops; >> >> @@ -1141,8 +1142,471 @@ xfs_vm_page_mkwrite( >> return block_page_mkwrite(vma, vmf, xfs_get_blocks); >> } >> >> +/* >> + * Probe the data buffer offset in page cache for unwritten extents. >> + * Fetch all the pages match @tag, and iterate each page to find out >> + * if a buffer head state has BH_Unwritten or BH_Uptodate set. >> + */ >> +STATIC bool >> +xfs_has_unwritten_buffer( >> + struct inode *inode, >> + struct xfs_bmbt_irec *map, >> + int tag, >> + loff_t *offset) >> +{ >> + struct xfs_inode *ip = XFS_I(inode); >> + struct xfs_mount *mp = ip->i_mount; >> + struct pagevec pvec; >> + pgoff_t index; >> + pgoff_t end; >> + bool found = false; >> + >> + pagevec_init(&pvec, 0); >> + >> + index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; >> + end = XFS_FSB_TO_B(mp, map->br_startoff + map->br_blockcount) >> + >> PAGE_CACHE_SHIFT; >> + >> + do { >> + unsigned int i; >> + unsigned nr_pages; >> + int want = min_t(pgoff_t, end - index, >> + (pgoff_t)PAGEVEC_SIZE - 1) + 1; >> + nr_pages = pagevec_lookup_tag(&pvec, inode->i_mapping, >> + &index, tag, want); >> + if (nr_pages == 0) >> + break; >> + >> + for (i = 0; i < nr_pages; i++) { >> + struct page *page = pvec.pages[i]; >> + struct buffer_head *bh; >> + struct buffer_head *head; >> + xfs_fileoff_t last; >> + >> + if (!page_has_buffers(page)) >> + continue; >> + >> + /* >> + * There is no need to check the following pages >> + * if the current page offset is out of range. >> + */ >> + if (page->index > end) >> + goto out; >> + >> + last = XFS_B_TO_FSBT(mp, >> + page->index << PAGE_CACHE_SHIFT); >> + >> + bh = head = page_buffers(page); >> + do { >> + /* >> + * An extent in XFS_EXT_UNWRITTEN have disk >> + * blocks already mapped to it, but no data >> + * has been committed to them yet. If it has >> + * dirty data in the page cache it can be >> + * identified by having BH_Unwritten set in >> + * each buffer. Also, the buffer head state >> + * might be in BH_Uptodate too if the buffer >> + * writeback procedure was fired, we need to >> + * examine it as well. >> + */ >> + if (buffer_unwritten(bh) || >> + buffer_uptodate(bh)) { >> + found = true; >> + *offset = XFS_FSB_TO_B(mp, last); >> + goto out; >> + } >> + last++; >> + } while ((bh = bh->b_this_page) != head); >> + } >> + >> + /* >> + * If the number of probed pages less than our desired, >> + * there should no more pages mapped, search done. >> + */ >> + if (nr_pages < want) >> + break; >> + >> + index = pvec.pages[i - 1]->index + 1; >> + pagevec_release(&pvec); >> + } while (index < end); >> + >> +out: >> + pagevec_release(&pvec); >> + if (!found) >> + *offset = 0; >> + >> + return found; >> +} >> + >> +STATIC loff_t >> +xfs_seek_data( >> + struct file *file, >> + loff_t start) >> +{ >> + struct inode *inode = file->f_mapping->host; >> + struct xfs_inode *ip = XFS_I(inode); >> + struct xfs_mount *mp = ip->i_mount; >> + xfs_fsize_t isize = i_size_read(inode); >> + loff_t offset = 0; >> + struct xfs_ifork *ifp; >> + xfs_fileoff_t fsbno; >> + xfs_filblks_t len; >> + int lock; >> + int error; >> + >> + lock = xfs_ilock_map_shared(ip); >> + >> + if (start >= isize) { >> + error = ENXIO; >> + goto out_lock; >> + } > > In Christoph's v3 review he asked you to move this check to after the > lock is taken, which you've done. Note that you've read from ip->i_size > using i_size_read before taking the lock, so isize could be stale. Call > i_size_read only after taking the ilock shared. Thank you for pointing this out! > >> + >> + fsbno = XFS_B_TO_FSBT(mp, start); >> + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); >> + len = XFS_B_TO_FSB(mp, isize); > > Put calculation of start_fsb and end_fsb next to each other. ok. I will take care the same issues below too. > >> + >> + for (;;) { >> + struct xfs_bmbt_irec map[2]; >> + int nmap = 2; >> + loff_t seekoff; >> + >> + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, >> + XFS_BMAPI_ENTIRE); >> + if (error) >> + goto out_lock; >> + >> + /* No extents at given offset, must be beyond EOF */ >> + if (!nmap) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + seekoff = XFS_FSB_TO_B(mp, fsbno); >> + /* >> + * Landed in a hole, skip to check the next extent. >> + * If the next extent landed in an in-memory data extent, >> + * or it is a normal extent, its fine to return. >> + * If the next extent landed in a hole extent, calculate >> + * the start file system block number for the next scan. >> + * If the next extent landed in an unwritten extent, we >> + * need to lookup the page cache to examine the data >> + * buffer offset, if nothing found, treat it as a hole >> + * extent too. >> + */ >> + if (map[0].br_startblock == HOLESTARTBLOCK) { >> + /* >> + * Return ENXIO if no data extent behind >> + * the given offset. In this case, the seek >> + * offset should be landed in a hole. >> + */ >> + if (nmap == 1) { >> + error = ENXIO; >> + break; >> + } >> + >> + if (map[1].br_state == XFS_EXT_NORM || >> + map[1].br_startblock == DELAYSTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + offset = max_t(loff_t, seekoff, offset); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* >> + * Landed in an unwritten extent, try to find out the data >> + * buffer offset from page cache firstly. If nothing was >> + * found, treat it as a hole, and skip to check the next >> + * extent, something just like above. >> + */ >> + if (map[0].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + offset = max_t(loff_t, seekoff, offset); >> + break; >> + } >> + >> + /* No data extent at the given offset */ >> + if (nmap == 1) { >> + error = ENXIO; >> + break; >> + } >> + >> + if (map[1].br_state == XFS_EXT_NORM || >> + map[1].br_startblock == DELAYSTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + offset = max_t(loff_t, seekoff, offset); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* Landed in a delay allocated extent or a real data extent */ >> + if (map[0].br_startblock == DELAYSTARTBLOCK || >> + map[0].br_state == XFS_EXT_NORM) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[0].br_startoff)); >> + break; >> + } >> + >> + /* Return ENXIO if beyond eof */ >> + if (XFS_FSB_TO_B(mp, fsbno) > isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + } >> + >> + if (offset < start) >> + offset = start; >> + >> + if (offset != file->f_pos) >> + file->f_pos = offset; >> + >> +out_lock: >> + xfs_iunlock_map_shared(ip, lock); >> + if (error) >> + return -error; >> + >> + return offset; >> +} >> + >> +STATIC loff_t >> +xfs_seek_hole( >> + struct file *file, >> + loff_t start) >> +{ >> + struct inode *inode = file->f_mapping->host; >> + struct xfs_inode *ip = XFS_I(inode); >> + struct xfs_mount *mp = ip->i_mount; >> + xfs_fsize_t isize = i_size_read(inode); > > Call i_size_read under ilock. > >> + loff_t offset = 0; >> + struct xfs_ifork *ifp; >> + xfs_fileoff_t fsbno; >> + xfs_filblks_t len; >> + int lock; > > lock should be a uint > >> + int error; >> + >> + lock = xfs_ilock_map_shared(ip); >> + >> + if (start >= isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + fsbno = XFS_B_TO_FSBT(mp, start); >> + ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); >> + len = XFS_B_TO_FSB(mp, isize); > > Calculation of start_fsb and end_fsb look nicer next to each other. > >> + >> + for (;;) { >> + struct xfs_bmbt_irec map[2]; >> + int nmap = 2; >> + loff_t seekoff; >> + >> + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, >> + XFS_BMAPI_ENTIRE); >> + if (error) >> + goto out_lock; >> + >> + /* No extents at given offset, must be beyond EOF */ >> + if (!nmap) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + >> + seekoff = XFS_FSB_TO_B(mp, fsbno); >> + /* >> + * Landed in an unwritten extent, try to lookup the page >> + * cache to find out if there is dirty data or not. If >> + * nothing was found, treate it as a hole. If there has >> + * dirty data and its offset starts past both the start >> + * block of the map and the current seek offset, it should >> + * be treated as hole too. Otherwise, go through the next >> + * extent to fetch holes. >> + */ >> + if (map[0].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[0], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + if (offset > max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[0].br_startoff))) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[0].br_startoff)); >> + break; >> + } >> + } else { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[0].br_startoff)); >> + break; >> + } >> + >> + /* >> + * No more extent at the given offst, return the total >> + * file size. >> + */ >> + if (nmap == 1) { >> + offset = isize; >> + break; >> + } >> + >> + if (map[1].br_startblock == HOLESTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + if (offset > max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff))) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff)); >> + break; >> + } >> + } else { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* >> + * Landed in a delay allocated extent or a real data extent, >> + * if the next extent is landed in a hole or in an unwritten >> + * extent but without data committed in the page cache, return >> + * its offset. If the next extent has dirty data in page cache, >> + * but its offset starts past both the start block of the map >> + * and the seek offset, it still be a hole. >> + */ >> + if (map[0].br_startblock == DELAYSTARTBLOCK || >> + map[0].br_state == XFS_EXT_NORM) { >> + /* >> + * No more extent at the give offset, return the >> + * total file size. >> + */ >> + if (nmap == 1) { >> + offset = isize; >> + break; >> + } >> + >> + if (map[1].br_startblock == HOLESTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { >> + if (xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_DIRTY, >> + &offset) || >> + xfs_has_unwritten_buffer(inode, &map[1], >> + PAGECACHE_TAG_WRITEBACK, >> + &offset)) { >> + if (offset > max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff))) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, >> + map[1].br_startoff)); >> + break; >> + } >> + } else { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[1].br_startoff)); >> + break; >> + } >> + } >> + >> + fsbno = map[1].br_startoff + map[1].br_blockcount; >> + } >> + >> + /* Landed in a hole, its fine to return */ >> + if (map[0].br_startblock == HOLESTARTBLOCK) { >> + offset = max_t(loff_t, seekoff, >> + XFS_FSB_TO_B(mp, map[0].br_startoff)); >> + break; >> + } >> + >> + /* Return ENXIO if beyond eof */ >> + if (XFS_FSB_TO_B(mp, fsbno) > isize) { >> + error = ENXIO; >> + goto out_lock; >> + } >> + } >> + >> + if (offset < start) >> + offset = start; >> + >> + if (offset != file->f_pos) >> + file->f_pos = offset; >> + >> +out_lock: > > name this out_unlock ok. :) > >> + xfs_iunlock_map_shared(ip, lock); >> + if (error) >> + return -error; >> + >> + return offset; >> +} >> + >> +STATIC loff_t >> +xfs_file_llseek( >> + struct file *file, >> + loff_t offset, >> + int origin) >> +{ >> + switch (origin) { >> + case SEEK_END: >> + case SEEK_CUR: >> + case SEEK_SET: >> + return generic_file_llseek(file, offset, origin); >> + case SEEK_DATA: >> + return xfs_seek_data(file, offset); >> + case SEEK_HOLE: >> + return xfs_seek_hole(file, offset); >> + default: >> + return -EOPNOTSUPP; > > I suggest -EINVAL here, as per http://linux.die.net/man/2/lseek Definitely! I have gone through other file systems have SEEK_XXX stuff support, OCFS2 returns -EINVAL in this case. Btrfs will return -EINVAL too. Thanks, -Jeff > >> + } >> +} >> + >> const struct file_operations xfs_file_operations = { >> - .llseek = generic_file_llseek, >> + .llseek = xfs_file_llseek, >> .read = do_sync_read, >> .write = do_sync_write, >> .aio_read = xfs_file_aio_read, >> -- >> 1.7.4.1 >> >> >> >> >> >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 07:13:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CDDEqS257434 for ; Thu, 12 Jan 2012 07:13:15 -0600 X-ASG-Debug-ID: 1326373990-0222017aa4877030001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 9L43H3GT7tG6LkDW; Thu, 12 Jan 2012 05:13:10 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlKSq-0006Sy-OT; Thu, 12 Jan 2012 13:13:08 +0000 Date: Thu, 12 Jan 2012 08:13:08 -0500 From: Christoph Hellwig To: Carlos Maiolino Cc: Mark Tinguely , xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) Message-ID: <20120112131308.GA24842@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V3) References: <1326288901-8171-1-git-send-email-cmaiolino@redhat.com> <4F0E0A19.6020305@sgi.com> <20120112110523.GA1798@andromeda.usersys.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112110523.GA1798@andromeda.usersys.redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326373990 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Thu, Jan 12, 2012 at 09:05:23AM -0200, Carlos Maiolino wrote: > > >+xfs_repair $SCRATCH_DEV&>> $seq.full > > > > Reviewed-by: Mark Tinguely > > > > As mentioned before, &>> does not work on bash 3.x, the test looks good. > > > Yes, Mark and I discussed about it, but, since the patch is going upstream, I > thought would be better to leave it as-is, once most newer distros are using > bash 4, but, I have no concerns in change it if needed. xfstests should work on all sorts of distros. Please resend it without that operator. From jeff.liu@oracle.com Thu Jan 12 07:22:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CDM4Ar257699 for ; Thu, 12 Jan 2012 07:22:04 -0600 X-ASG-Debug-ID: 1326374522-0222017aa387a020001-NocioJ Received: from rcsinet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by cuda.sgi.com with ESMTP id aZfUorDTBPUhSheV; Thu, 12 Jan 2012 05:22:02 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 148.87.113.117 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by rcsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0CDLupW025294 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 12 Jan 2012 13:21:57 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0CDLtsw000279 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 12 Jan 2012 13:21:56 GMT Received: from abhmt110.oracle.com (abhmt110.oracle.com [141.146.116.62]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0CDLtdN016487; Thu, 12 Jan 2012 07:21:55 -0600 Received: from [10.191.45.24] (/10.191.45.24) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 12 Jan 2012 05:21:54 -0800 Message-ID: <4F0EDE6D.4010302@oracle.com> Date: Thu, 12 Jan 2012 21:21:49 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Ben Myers CC: Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120111154318.GY6390@sgi.com> <20120111222816.GA6519@sgi.com> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <20120111222816.GA6519@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090207.4F0EDE75.0085,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: rcsinet15.oracle.com[148.87.113.117] X-Barracuda-Start-Time: 1326374522 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Ben, Thanks a lot for your so much detailed info! On 01/12/2012 06:28 AM, Ben Myers wrote: > Hey Jeff, > > On Wed, Jan 11, 2012 at 09:43:18AM -0600, Ben Myers wrote: >> Here are a few additional minor comments from yesterday. >> >> I'm looking forward to seeing your next version, and I'm still working >> through this one. >> >> I would like to suggest that you split this into two patches. The first >> patch should be the 'simple' implementation that that you began with >> that only looks at extents, and assumes that unwritten extents contain >> data. The second patch can remove the assumption that unwritten extents >> contain data, and go over pages over the extent to determine if it is >> clean. I feel we have a better chance of coming to consensus that the >> first patch is correct in the near term, and then we can move on to the >> more complicated matter of whether the unwritten extent can be treated >> as a hole safe in the knowledge that the initial implementation was >> awesome. > > Ok, since I'm the jackass who is asking you to do the extra work I'll > try to be of assistance. Understand that at this point I'm trying to > make sure that I understand your code fully. I'm not trying to give you > a hard time or make your life miserable. > > Here I am assuming that we'll treat unwritten extents as containing data > and leaving the enhancement of probing unwritten extents for later. Do you means I only need to post a patch to treat unwritten extents as data next time, and then try to work out another patch for probing unwritten extents until the first one became stable? > > This is a table of some of the results from xfs_bmapi_read, and what > should be done in each situation. > > SEEK_DATA: > > Where nmap = 0: > return ENXIO. * maybe not possible, unless len = 0? Per my previous tryout, this situation can be triggered when no extent behind the seek offset for SEEK_HOLE; for SEEK_DATA, it will be caught by the following checking: if (start >= isize) return -ENXIO; > > Where nmap = 1: > map[0] > written data @ offset > delay data @ offset > unwritten data @ offset > hole return ENXIO? * empty file? > > Where nmap = 2: > map[0] map[1] > written written data @ offset > written delay data @ offset > written unwritten data @ offset > written hole data @ offset > delay written data @ offset > delay delay data @ offset * maybe not possible? Hmm, maybe we can design a case to trigger it out later. :-P. I'm going to write the patch by referring to the following codes. > delay unwritten data @ offset > delay hole data @ offset > unwritten written data @ offset > unwritten delay data @ offset > unwritten unwritten data @ offset > unwritten hole data @ offset > hole written data @ map[1].br_startoff > hole delay data @ map[1].br_startoff > hole unwritten data @ map[1].br_startoff > hole hole * not possible > > (DELAYSTARTBLOCK and HOLESTARTBLOCK are both 'isnullstartblock') > > written: > (!isnullstartblock(map.br_startblock) && map.br_state == XFS_EXT_NORMAL) > delay: > map.br_startblock == DELAYSTARTBLOCK > > unwritten: > map.br_state == XFS_EXT_UNWRITTEN > > hole: > map.br_startblock == HOLESTARTBLOCK > > xfs_seek_data(file, startoff) > { > loff_t offset; > int error; > > take ilock > > isize = i_size_read > > start_fsb = XFS_B_TO_FSBT(startoff) > end_fsb = XFS_B_TO_FSB(i_size) # inode size > > error = xfs_bmapi_read(map, &nmap) > if (error) > goto out_unlock; > > if (nmap == 0) { > /* > * return an error. I'm not sure that this necessarily > * means we're reading after EOF, since it looks like > * xfs_bmapi_read would return one hole in that case. > */ > > error = ERROR /* EIO? */ > goto out_unlock > } > > /* check map[0] first */ > if (map[0].br_state == XFS_EXT_NORMAL && > !isnullstartblock(map[0].br_startblock) { > /* > * startoff is already within data. remember > * that it can anywhere within start_fsb > */ > offset = startoff > } else if (map[0].br_startblock == DELAYSTARTBLOCK) { > offset = startoff > } else if (map[0].br_state == XFS_EXT_UNWRITTEN) { > offset = startoff; > } else if (map[0].br_startblock == HOLESTARTBLOCK) { > if (nmap == 1) { > /* > * finding a hole in map[0] and nothing in > * map[1] probably means that we are reading > * after eof > */ > ASSERT(startoff >= isize) > error = ENXIO > goto out_unlock > } > > /* > * we have two mappings, and need to check map[1] to see > * if there is data. > */ > if (map[1].br_state == XFS_EXT_NORMAL && > !isnullstartblock(map[1].br_startblock)) { > offset = XFS_FSB_TO_B(map[1].br_startoff); > } else if (map[1].br_startblock == DELAYSTARTBLOCK) { > offset = XFS_FSB_TO_B(map[1].br_startoff); > } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { > offset = XFS_FSB_TO_B(map[1].br_startoff); > } else if (map[1].br_startblock == HOLESTARTBLOCK) { > /* > * this should never happen, but we could > */ > ASSERT(startoff >= isize); > error = ENXIO > /* BUG(); */ > } else { > offset = startoff > /* BUG(); */ > } > } else { > offset = startoff > /* BUG(); */ > } > out_unlock: > drop ilock > if (error) > return -error; > > return offset; > } > > I think that is sufficiently straightforward that even I can understand > it, or am I off my rocker? IMO it's not that bad that we have to write > the if/else to determine extent type twice and that there is some > duplication when setting the offset. When you come back to enhance it > further by probing unwritten extents I think a goto would probably be > more readable than trying to shoehorn this into a for/do, but that's > just me. > > Jeff, I hope that doesn't ruffle any feathers. I know I came to the > party a bit late. After a break I am going to go look at your code for > xfs_seek_data again. I think I'll understand it better now. After that > I am going to look into SEEK_HOLE... Thanks you! -Jeff > > Regards, > Ben > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jeff.liu@oracle.com Thu Jan 12 07:29:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CDTkTK258060 for ; Thu, 12 Jan 2012 07:29:46 -0600 X-ASG-Debug-ID: 1326374984-005fe612a67737f0001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id 10nioxrsayJKCZsO; Thu, 12 Jan 2012 05:29:44 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0CDTe3w023860 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 12 Jan 2012 13:29:41 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0CDTdAu014206 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 12 Jan 2012 13:29:39 GMT Received: from abhmt114.oracle.com (abhmt114.oracle.com [141.146.116.66]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0CDTcku018375; Thu, 12 Jan 2012 07:29:38 -0600 Received: from [10.191.45.24] (/10.191.45.24) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 12 Jan 2012 05:29:38 -0800 Message-ID: <4F0EE03D.8090402@oracle.com> Date: Thu, 12 Jan 2012 21:29:33 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Mark Tinguely CC: Ben Myers , Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFA11.7030305@sgi.com> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <4F0DFA11.7030305@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-CT-RefId: str=0001.0A020207.4F0EE045.0090,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1326374984 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Mark, Thanks for your comments! On 01/12/2012 05:07 AM, Mark Tinguely wrote: > > xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole. Yes, this is key point I have missed before. > There are a couple places that a hole can trigger a data test. > BTW, I could not generate a large enough hole that xfs_bmapi_read() > would return as more than one hole entry, so I will ignore those > situations and just list the couple places that a hole may be match > a data rule: > > in xfs_seek_data(): > + /* > + * Landed in an unwritten extent, try to find out the data > + * buffer offset from page cache firstly. If nothing was > + * found, treat it as a hole, and skip to check the next > + * extent, something just like above. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > + > + /* No data extent at the given offset */ > + if (nmap == 1) { > + error = ENXIO; > + break; > + } > + > + if (map[1].br_state == XFS_EXT_NORM || > ^^^ could be a hole and not data^^^ > > I think you need to add back the br_startblock test: > > + if ((map[1].br_state == XFS_EXT_NORM && > + map[1].br_startblock != HOLESTARTBLOCK) || Ok, I'll add !isnullstartblock() test for normal extents test. > > > in xfs_seek_hole(): > + /* > + * Landed in a delay allocated extent or a real data extent, > + * if the next extent is landed in a hole or in an unwritten > + * extent but without data committed in the page cache, return > + * its offset. If the next extent has dirty data in page cache, > + * but its offset starts past both the start block of the map > + * and the seek offset, it still be a hole. > + */ > + if (map[0].br_startblock == DELAYSTARTBLOCK || > + map[0].br_state == XFS_EXT_NORM) { > ^^^ could be a hole ^^^ > > and this only matters because this test is checked before the next test: > > + > + /* Landed in a hole, its fine to return */ > + if (map[0].br_startblock == HOLESTARTBLOCK) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > > > > Switching the order of these two tests would return the immediate offset > starting a hole seek at the offset of a hole. looks this issue is caused by missing hole test for extents at XFS_EXT_NORM state. I'll fix them later. Thanks, -Jeff > > > None of these conditions will result in data corruption, only earlier > detection of a hole. From jeff.liu@oracle.com Thu Jan 12 07:53:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CDrBR5259222 for ; Thu, 12 Jan 2012 07:53:11 -0600 X-ASG-Debug-ID: 1326376388-00a9eb65e41b19d0001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id UYhMzQ3ncqR4zLpI; Thu, 12 Jan 2012 05:53:08 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0CDr3uA019842 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 12 Jan 2012 13:53:04 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0CDr2Aw021244 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 12 Jan 2012 13:53:03 GMT Received: from abhmt109.oracle.com (abhmt109.oracle.com [141.146.116.61]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0CDr2MQ020096; Thu, 12 Jan 2012 07:53:02 -0600 Received: from [10.191.45.24] (/10.191.45.24) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 12 Jan 2012 05:53:01 -0800 Message-ID: <4F0EE5B6.2040408@oracle.com> Date: Thu, 12 Jan 2012 21:52:54 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Mark Tinguely CC: Ben Myers , Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFB20.7030704@sgi.com> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <4F0DFB20.7030704@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-CT-RefId: str=0001.0A090207.4F0EE5C0.00CE,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1326376388 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Mark, On 01/12/2012 05:12 AM, Mark Tinguely wrote: > xfs_has_unwritten_buffer() always returns the offset of the first > dirty unwritten page. This can cause xfs_seek_data() and xfs_seek_hole() > to give the wrong results in certain circumstances. Sorry, am was well understood your opinions in this point for now. IMHO, we can only find and return the data buffer offset at a dirty or unwritten page once the first page was probed. > > > In xfs_seek_data(), every page past first dirty/unwritten page in the > unwritten extent will be reported as data. Hmm, consider the user level utility that make use of SEEK_XXX stuff to copy data from an offset in source file: Generally, it will call xfs_seek_data() firstly, if we read an unwritten extent and there is data buffer was probed in xfs_seek_data(), it only means we can read file data starting from the returned offset of xfs_has_unwritten_buffer(). Then it will call xfs_seek_hole() to calculate this extent length. next, a couple of read()/write() will be called in a loop depending on the extent length. [ page 1 ] | [ page 2 ] | [ page 3 ] | .... [ page N ] |data offset at page 2| If we got the data offset from page2, and there is no data at page 3, the user utility call read(2) will returns ZERO, and it will break immediately. > > > in xfs_seek_data(): > + /* > + * Landed in an unwritten extent, try to find out the data > + * buffer offset from page cache firstly. If nothing was > + * found, treat it as a hole, and skip to check the next > + * extent, something just like above. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + offset = max_t(loff_t, seekoff, offset); > + break; > + } > > Since the xfs_has_unwritten_buffer() returns the offset of the first > dirty/unwritten page (the first page in this example), the max_t() > comparison will say that every page after the first dirty page has > data. > > ----- > > xfs_seek_hole() can only find a hole if it precedes the first dirty > page. Yes, for my current implementation, it is the case. Anyway, I need a careful consideration for probing unwritten extent. :-) Thanks, -Jeff > > in xfs_seek_hole(): > + /* > + * Landed in an unwritten extent, try to lookup the page > + * cache to find out if there is dirty data or not. If > + * nothing was found, treate it as a hole. If there has > + * dirty data and its offset starts past both the start > + * block of the map and the current seek offset, it should > + * be treated as hole too. Otherwise, go through the next > + * extent to fetch holes. > + */ > + if (map[0].br_state == XFS_EXT_UNWRITTEN) { > + if (xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_DIRTY, > + &offset) || > + xfs_has_unwritten_buffer(inode, &map[0], > + PAGECACHE_TAG_WRITEBACK, > + &offset)) { > + if (offset > max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[0].br_startoff))) { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, > + map[0].br_startoff)); > + break; > + } > + } else { > + offset = max_t(loff_t, seekoff, > + XFS_FSB_TO_B(mp, map[0].br_startoff)); > + break; > + } > > --Mark Tinguely. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From cmaiolino@hades.usersys.redhat.com Thu Jan 12 08:06:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CE6WO8259830 for ; Thu, 12 Jan 2012 08:06:33 -0600 X-ASG-Debug-ID: 1326377189-00a9eb65e41b3230001-NocioJ Received: from hades.usersys.redhat.com (186.215.132.159.static.gvt.net.br [186.215.132.159]) by cuda.sgi.com with ESMTP id HwWzGhlgZEdC9Ad6 for ; Thu, 12 Jan 2012 06:06:30 -0800 (PST) X-Barracuda-Envelope-From: cmaiolino@hades.usersys.redhat.com X-Barracuda-Apparent-Source-IP: 186.215.132.159 Received: by hades.usersys.redhat.com (Postfix, from userid 500) id 87471E0EA2; Thu, 12 Jan 2012 12:06:28 -0200 (BRST) From: Carlos Maiolino To: xfs@oss.sgi.com Cc: Carlos Maiolino Subject: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) Date: Thu, 12 Jan 2012 12:06:27 -0200 X-ASG-Orig-Subj: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) Message-Id: <1326377187-27344-1-git-send-email-cmaiolino@redhat.com> X-Mailer: git-send-email 1.7.6.4 X-Barracuda-Connect: 186.215.132.159.static.gvt.net.br[186.215.132.159] X-Barracuda-Start-Time: 1326377189 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean xfs_repair was leaving lost+found directory with a wrong link count when a cleaned inode was re-used to create lost+found. This test case confirm that, after xfs_repair is executed, the lost+found inode is left in a consistent state. Signed-off-by: Carlos Maiolino --- 278 | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 278.out | 2 + group | 1 + 3 files changed, 90 insertions(+), 0 deletions(-) create mode 100755 278 create mode 100644 278.out diff --git a/278 b/278 new file mode 100755 index 0000000..89cae35 --- /dev/null +++ b/278 @@ -0,0 +1,87 @@ +#! /bin/bash +# FS QA Test No. 278 +# +# Test xfs_repair to ensure it fixes the lost+found link count +# at the first run. See also commit 198b747f255346bca64408875763b6ca0ed3d57d +# from xfsprogs tree. +# +# +#----------------------------------------------------------------------- +# Copyright (c) 2011 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 +#----------------------------------------------------------------------- +# +# creator +owner=cmaiolino@redhat.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux +_require_scratch +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount + +mkdir -p $SCRATCH_MNT/dir/subdir + +#get inodes to be changed +DIR_INO=`ls -i $SCRATCH_MNT |awk '{print $1}'` +SUBDIR_INO=`ls -i $SCRATCH_MNT/dir |awk '{print $1}'` + +_scratch_unmount + +echo "Silence is goodness..." + +# Corrupt DIR +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].inumber.i4 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].name 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].offset 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].namelen 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $DIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full + +# Corrupt SUBDIR +xfs_db -x -c "inode $SUBDIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full +xfs_db -x -c "inode $SUBDIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full + +echo "===== BEGIN of xfs_repair =====" >> $seq.full +echo "" >>$seq.full + +xfs_repair $SCRATCH_DEV >> $seq.full 2>&1 +echo "===== END of xfs_repair =====" >> $seq.full + +if _check_scratch_fs; then + status=0 +else + status=1 +fi +exit diff --git a/278.out b/278.out new file mode 100644 index 0000000..2acd770 --- /dev/null +++ b/278.out @@ -0,0 +1,2 @@ +QA output created by 278 +Silence is goodness... diff --git a/group b/group index 99592d3..6f2d748 100644 --- a/group +++ b/group @@ -391,3 +391,4 @@ deprecated 275 auto rw 276 auto rw metadata 277 auto ioctl quick metadata +278 repair auto -- 1.7.6.4 From cmaiolino@redhat.com Thu Jan 12 08:45:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CEjgGP261982 for ; Thu, 12 Jan 2012 08:45:42 -0600 X-ASG-Debug-ID: 1326379539-005fe612a777b1b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qGzW8fQxrOunc2iC for ; Thu, 12 Jan 2012 06:45:40 -0800 (PST) X-Barracuda-Envelope-From: cmaiolino@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0CEjda9012784 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 12 Jan 2012 09:45:39 -0500 Received: from andromeda.usersys.redhat.com (ovpn-113-80.phx2.redhat.com [10.3.113.80]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q0CEjZPl012074 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO) for ; Thu, 12 Jan 2012 09:45:38 -0500 Date: Thu, 12 Jan 2012 12:45:35 -0200 From: Carlos Maiolino To: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) Message-ID: <20120112144534.GB1798@andromeda.usersys.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) References: <1326377187-27344-1-git-send-email-cmaiolino@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326377187-27344-1-git-send-email-cmaiolino@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1326379539 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Mark, can you test it and see if the statement I used to send repair output to $seq.full will work on bash3? I haven't any system here using bash 3. Thanks On Thu, Jan 12, 2012 at 12:06:27PM -0200, Carlos Maiolino wrote: > xfs_repair was leaving lost+found directory with a wrong link count when a > cleaned inode was re-used to create lost+found. This test case confirm that, > after xfs_repair is executed, the lost+found inode is left in a consistent > state. > > Signed-off-by: Carlos Maiolino > --- > 278 | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 278.out | 2 + > group | 1 + > 3 files changed, 90 insertions(+), 0 deletions(-) > create mode 100755 278 > create mode 100644 278.out > > diff --git a/278 b/278 > new file mode 100755 > index 0000000..89cae35 > --- /dev/null > +++ b/278 > @@ -0,0 +1,87 @@ > +#! /bin/bash > +# FS QA Test No. 278 > +# > +# Test xfs_repair to ensure it fixes the lost+found link count > +# at the first run. See also commit 198b747f255346bca64408875763b6ca0ed3d57d > +# from xfsprogs tree. > +# > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2011 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 > +#----------------------------------------------------------------------- > +# > +# creator > +owner=cmaiolino@redhat.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs xfs > +_supported_os Linux > +_require_scratch > +_scratch_mkfs >/dev/null 2>&1 > +_scratch_mount > + > +mkdir -p $SCRATCH_MNT/dir/subdir > + > +#get inodes to be changed > +DIR_INO=`ls -i $SCRATCH_MNT |awk '{print $1}'` > +SUBDIR_INO=`ls -i $SCRATCH_MNT/dir |awk '{print $1}'` > + > +_scratch_unmount > + > +echo "Silence is goodness..." > + > +# Corrupt DIR > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].inumber.i4 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].name 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].offset 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].namelen 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full > + > +# Corrupt SUBDIR > +xfs_db -x -c "inode $SUBDIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $SUBDIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full > + > +echo "===== BEGIN of xfs_repair =====" >> $seq.full > +echo "" >>$seq.full > + > +xfs_repair $SCRATCH_DEV >> $seq.full 2>&1 > +echo "===== END of xfs_repair =====" >> $seq.full > + > +if _check_scratch_fs; then > + status=0 > +else > + status=1 > +fi > +exit > diff --git a/278.out b/278.out > new file mode 100644 > index 0000000..2acd770 > --- /dev/null > +++ b/278.out > @@ -0,0 +1,2 @@ > +QA output created by 278 > +Silence is goodness... > diff --git a/group b/group > index 99592d3..6f2d748 100644 > --- a/group > +++ b/group > @@ -391,3 +391,4 @@ deprecated > 275 auto rw > 276 auto rw metadata > 277 auto ioctl quick metadata > +278 repair auto > -- > 1.7.6.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -- --Carlos From tinguely@sgi.com Thu Jan 12 09:01:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_52 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CF1nuj001034 for ; Thu, 12 Jan 2012 09:01:49 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id BC791304032; Thu, 12 Jan 2012 07:01:45 -0800 (PST) Message-ID: <4F0EF5DC.1070207@sgi.com> Date: Thu, 12 Jan 2012 09:01:48 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: Ben Myers , Christoph Hellwig , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFB20.7030704@sgi.com> <4F0EE5B6.2040408@oracle.com> In-Reply-To: <4F0EE5B6.2040408@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/12/12 07:52, Jeff Liu wrote: > Hi Mark, > > On 01/12/2012 05:12 AM, Mark Tinguely wrote: > >> xfs_has_unwritten_buffer() always returns the offset of the first >> dirty unwritten page. This can cause xfs_seek_data() and xfs_seek_hole() >> to give the wrong results in certain circumstances. > > Sorry, am was well understood your opinions in this point for now. > IMHO, we can only find and return the data buffer offset at a dirty or > unwritten page once the first page was probed. > From my tests, xfs_bmapi_read() can only find holes if they cross or start on a 64KB boundary. It would be nice if unwritten extents were at least that good at finding holes. In xfs_has_unwritten_buffer(), could you start searching from the seek offset? The variable *offset could pass in that seek address and us that offset as the starting "index" rather than the beginning of the extent? You start: index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; Could we do?: index = XFS_FSB_TO_B(mp, *offset) >> PAGE_CACHE_SHIFT; And before calling xfs_has_unwritten_buffer(): offset = seekoff; Also, my idea to find the next data/hole requires that xfs_has_unwritten_buffer() finds the smallest PAGECACHE_TAG_DIRTY or PAGECACHE_TAG_WRITEBACK page if any starting at the seek offset. >> >> In xfs_seek_data(), every page past first dirty/unwritten page in the >> unwritten extent will be reported as data. > > Hmm, consider the user level utility that make use of SEEK_XXX stuff to > copy data from an offset in source file: > > Generally, it will call xfs_seek_data() firstly, > if we read an unwritten extent and there is data buffer was probed in > xfs_seek_data(), it only means we can read file data starting from the > returned offset of xfs_has_unwritten_buffer(). > > Then it will call xfs_seek_hole() to calculate this extent length. > next, a couple of read()/write() will be called in a loop depending on > the extent length. > > [ page 1 ] | [ page 2 ] | [ page 3 ] | .... [ page N ] > |data offset at page 2| > > If we got the data offset from page2, and there is no data at page 3, > the user utility call read(2) will returns ZERO, and it will break > immediately. > Something like: loop s = lseek(fd, off, SEEK_DATA); if (s == -1) if we errno == ENXIO return done /* eof */ else return errno e = lseek(fd, s, SEEK_HOLE); if (e == -1) return errno dest = copy from s to e off = e end loop (if not eof or other condition) You will seek for next hole at the found data position. Even if xfs_has_unwritten_buffer() does the right thing and returns the dirty/unwritten page starting from seekoff, we need go a page past the current page (which has data) to look for the next hole. Something like (again psuedo-code) loop offset1 = offset2 = seekoff xfs_has_unwritten_buffer(seekoff, &offset1, DIRTY) xfs_has_unwritten_buffer(seekoff, &offset2, WRITEBACK) d = min(offset1, offset2) if (d > seekoff OR d == NULL) return found a hole at seekoff if (d == seekoff) /* standard case assuming how we * use SEEK_DATA/SEEK_HOLE * This is the step your code * does not perform. It jumps * to the next extent */ seekoff += page size of dirty/writeback ** end while the seekoff < extent size ** here we could jump to the next 64KB boundary and be as accurate as xfs_bmapi_read(). Good job. This is an important feature. --Mark Tinguely. From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 10:12:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CGCVpu004910 for ; Thu, 12 Jan 2012 10:12:31 -0600 X-ASG-Debug-ID: 1326384748-0222017aa3891010001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id GZgCp3vFN0iaw8Uy for ; Thu, 12 Jan 2012 08:12:28 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlNGN-0000rL-Ts for xfs@oss.sgi.com; Thu, 12 Jan 2012 16:12:27 +0000 Date: Thu, 12 Jan 2012 11:12:27 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: time for userspace releases? Message-ID: <20120112161227.GA3225@infradead.org> X-ASG-Orig-Subj: time for userspace releases? MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326384748 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85726 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean [looks like the list manager ate this mail the first time, sorry if anyone gets it twice] We have some important repair fixes pending, as well as major changes in xfsdump. Maybe it's time to schedule releases in about two weeks and get any outstanding changes in? From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 10:14:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CGEFA9005000 for ; Thu, 12 Jan 2012 10:14:15 -0600 X-ASG-Debug-ID: 1326384853-005fe612a8787b90001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id sKZGZlPRq6l7GXSs; Thu, 12 Jan 2012 08:14:13 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlNI2-00010q-MJ; Thu, 12 Jan 2012 16:14:10 +0000 Date: Thu, 12 Jan 2012 11:14:10 -0500 From: Christoph Hellwig To: Mitsuo Hayasaka Cc: Ben Myers , Alex Elder , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [RFC PATCH] xfs: show uuid when mount fails due to duplicate uuid Message-ID: <20120112161410.GA3810@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH] xfs: show uuid when mount fails due to duplicate uuid References: <20120112024720.3952.73517.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112024720.3952.73517.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326384853 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85726 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Thu, Jan 12, 2012 at 11:47:20AM +0900, Mitsuo Hayasaka wrote: > When a system tries to mount a filesystem (FS) using UUID, the xfs > returns -EINVAL and shows a message if a FS with the same UUID has > been already mounted. It is useful to output the duplicate UUID > with it. Looks good to me, Reviewed-by: Christoph Hellwig > - xfs_warn(mp, "Filesystem has duplicate UUID - can't mount"); > + xfs_warn(mp, > + "Filesystem has duplicate UUID - can't mount: uuid = %pU", > + uuid); Maybe we could write this a bit nicer as: xfs_warn(mp, "Filesystem has duplicate UUID %p - can't mount", uuid); From dmnl@gmail.com Thu Jan 12 10:20:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_95,FREEMAIL_FROM autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CGK2GQ005352 for ; Thu, 12 Jan 2012 10:20:02 -0600 X-ASG-Debug-ID: 1326385195-005fe612a97887c0001-NocioJ Received: from ironport-smtp02.maxnet.net.nz (ironport-smtp02.maxnet.net.nz [123.100.71.102]) by cuda.sgi.com with ESMTP id EA2APOs3FbHPxMJZ for ; Thu, 12 Jan 2012 08:19:57 -0800 (PST) X-Barracuda-Envelope-From: dmnl@gmail.com X-Barracuda-Apparent-Source-IP: 123.100.71.102 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvEzAHMGD08KASkC/2dsb2JhbABDkk+KERCPD4EKgVCBDQEBARBqBYEXBTqFWweaZ45ShzQ/iHiLOmMEiAgzhDNLh1QBhVGLUIE8 X-IronPort-AV: E=Sophos;i="4.71,499,1320577200"; d="scan'208";a="265904829" Received: from smtp01.maxnet.net.nz ([123.100.71.110]) by ironport-smtp02.maxnet.net.nz with ESMTP; 13 Jan 2012 05:19:54 +1300 Received: from [10.1.41.2] (unknown [216.144.249.235]) by smtp01.maxnet.net.nz (Postfix) with ESMTPA id 83B46A3B6F; Fri, 13 Jan 2012 05:19:50 +1300 (NZDT) Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: HELLO To: Recipients X-ASG-Orig-Subj: HELLO From: "Donna Martinez" Date: Thu, 12 Jan 2012 08:19:50 -0800 Reply-To: donna195921@ovi.com Message-Id: <20120112161950.83B46A3B6F@smtp01.maxnet.net.nz> X-Barracuda-Connect: ironport-smtp02.maxnet.net.nz[123.100.71.102] X-Barracuda-Start-Time: 1326385197 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address X-Virus-Status: Clean Hello, I am Mrs. Donna Martinez from Bahamas, I have funds which I have decided to= give out to an organization or an individual that can help invest on Chari= ty, Widows, = Propagating the word of God, because recently my Doctor told me that I woul= d not last for the next two Months due to the terrible condition of my heal= th. I will greatly appreciate your timely suggestion and interest over this mat= ter. Best Regards Mrs. Donna Martinez. From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 10:22:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CGMDkI005473 for ; Thu, 12 Jan 2012 10:22:13 -0600 X-ASG-Debug-ID: 1326385332-005fe612a7788b90001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id gXOYLb9kk91VeiBQ; Thu, 12 Jan 2012 08:22:12 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlNPm-0002qG-M3; Thu, 12 Jan 2012 16:22:10 +0000 Date: Thu, 12 Jan 2012 11:22:10 -0500 From: Christoph Hellwig To: Mark Tinguely Cc: jeff.liu@oracle.com, Dave Chinner , Ben Myers , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120112162210.GA3925@infradead.org> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DF9C1.2060302@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0DF9C1.2060302@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326385332 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean With all the complications that we got compared to the initial version, namely multiple hole extents, dirty unwritten extent detection and so on I think it's time to stop using xfs_bmapi_read against Dave's initial suggestion, and switch to using xfs_bmap_search_extents directly. The rationale for that is that a) using xfs_bmapi_read makes hole detection more complex, given that it has to fill potentially multiple xfs_bmbt_irec structures instead of skipping over them b) reading two extents at a time means we have to duplicate all the detection code. if we use xfs_bmap_search_extents we need a bit of boilerplate code, but xfs_seek_data becomes really simple - we just loop over xfs_bmap_search_extents until we either find an extent or EOF. If we find an extent and it's unwritten we might have to probe for dirty areas from one single point, or just skip it but the code is still simple. xfs_seek_hole is just as simple - if xfs_bmap_search_extents fits the condition for a hole as written down in xfs_bmapi_read we've found it, if not we might again have to do the unwritten extent probing, but just from a single place instead of duplicating it twice. From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 10:39:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CGdjiw006186 for ; Thu, 12 Jan 2012 10:39:45 -0600 X-ASG-Debug-ID: 1326386384-005fe612a978aa80001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id oDOILBMo4G3ZBtno; Thu, 12 Jan 2012 08:39:44 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlNgl-0005n4-O5; Thu, 12 Jan 2012 16:39:43 +0000 Date: Thu, 12 Jan 2012 11:39:43 -0500 From: Christoph Hellwig To: Mark Tinguely Cc: jeff.liu@oracle.com, Christoph Hellwig , Ben Myers , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120112163943.GA22223@infradead.org> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFA11.7030305@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0DFA11.7030305@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326386384 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Wed, Jan 11, 2012 at 03:07:29PM -0600, Mark Tinguely wrote: > > xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole. > There are a couple places that a hole can trigger a data test. > BTW, I could not generate a large enough hole that xfs_bmapi_read() > would return as more than one hole entry, so I will ignore those > situations and just list the couple places that a hole may be match > a data rule: We've been through this before, you need to overflow the 32-bit extent length counter to get there. Jeff, did you manage to create a test case for that particular scenario? From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 10:41:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CGfnCH006338 for ; Thu, 12 Jan 2012 10:41:49 -0600 X-ASG-Debug-ID: 1326386508-005fe612a978af40001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 1yIVmKomdaohcQF3; Thu, 12 Jan 2012 08:41:48 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlNim-0006en-8H; Thu, 12 Jan 2012 16:41:48 +0000 Date: Thu, 12 Jan 2012 11:41:48 -0500 From: Christoph Hellwig To: Mark Tinguely Cc: jeff.liu@oracle.com, Christoph Hellwig , Ben Myers , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120112164148.GB22223@infradead.org> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFB20.7030704@sgi.com> <4F0EE5B6.2040408@oracle.com> <4F0EF5DC.1070207@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0EF5DC.1070207@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326386508 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Status: Clean On Thu, Jan 12, 2012 at 09:01:48AM -0600, Mark Tinguely wrote: > >Sorry, am was well understood your opinions in this point for now. > >IMHO, we can only find and return the data buffer offset at a dirty or > >unwritten page once the first page was probed. > > > > From my tests, xfs_bmapi_read() can only find holes if they cross or > start on a 64KB boundary. It would be nice if unwritten extents were > at least that good at finding holes. Are you testing on ia64 with 64k blocks? :) xfs_bmapi_read will find holes down to block granularity, that's how it's implemented. However recent XFS does fairly aggressive preallocation, so you probably won't find small holes unless you explicitly punch them out using XFS_IOC_UNRESVSP or fallocate with the hole punch flag. From tinguely@sgi.com Thu Jan 12 11:05:34 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CH5YYj007603 for ; Thu, 12 Jan 2012 11:05:34 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id D227F304039; Thu, 12 Jan 2012 09:05:30 -0800 (PST) Message-ID: <4F0F12DC.5020709@sgi.com> Date: Thu, 12 Jan 2012 11:05:32 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 12/12] repair: cleanup inode record macros References: <20111202174619.179530033@bombadil.infradead.org> <20111202174743.697687824@bombadil.infradead.org> <20120111113020.GD10932@infradead.org> In-Reply-To: <20120111113020.GD10932@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/11/12 05:30, Christoph Hellwig wrote: > ping? > > On Fri, Dec 02, 2011 at 12:46:31PM -0500, Christoph Hellwig wrote: >> Remove indirections in the inode record bit manipulation macros and flatten >> them to a single level of inlines. Also use a common IREC_MASK define >> instead of duplicating it for every bitmask. >> >> >> Signed-off-by: Christoph Hellwig >> Reviewed-by: Mark Tinguely The clean up looks good. I like the removal of the side effect that was in one of the ASSERT statement. --Mark Tinguely From guaneryu@gmail.com Thu Jan 12 11:24:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_24,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CHOKNX008438 for ; Thu, 12 Jan 2012 11:24:20 -0600 X-ASG-Debug-ID: 1326389058-005fe612a77909a0001-NocioJ Received: from mail-vw0-f53.google.com (mail-vw0-f53.google.com [209.85.212.53]) by cuda.sgi.com with ESMTP id 0kbv5cd4s5a4SH8l for ; Thu, 12 Jan 2012 09:24:18 -0800 (PST) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.212.53 Received: by vbbez10 with SMTP id ez10so623515vbb.26 for ; Thu, 12 Jan 2012 09:24:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; bh=cuqf8pnyYcoXFyC2ktQthZTAJX4d7hKQRXgfbbrIC2g=; b=bZS2LOflmguD1lnH0Y4xRWR1Ty6XqF6aSh2RVLJwuwHT3LC3HlCecre7bYo2p/Ah54 9PskPrVzMy9NLqYDAvFtA7Uoy7ZpgB1qKo8QTz5QY3m+FDi8Q5Nq0uae+ZdyFh79zNwq N+cSVE2J4xblC4Ks8d/cxOpa58zAKdynQn/zg= Received: by 10.52.172.196 with SMTP id be4mr2124308vdc.80.1326389058179; Thu, 12 Jan 2012 09:24:18 -0800 (PST) Received: from localhost ([114.246.99.217]) by mx.google.com with ESMTPS id bj19sm4820324vdc.16.2012.01.12.09.24.13 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 12 Jan 2012 09:24:17 -0800 (PST) From: Eryu Guan To: xfs@oss.sgi.com Cc: Eryu Guan Subject: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it Date: Fri, 13 Jan 2012 01:20:15 +0800 X-ASG-Orig-Subj: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it Message-Id: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> X-Mailer: git-send-email 1.7.8.3 X-Barracuda-Connect: mail-vw0-f53.google.com[209.85.212.53] X-Barracuda-Start-Time: 1326389058 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85731 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 X-Virus-Status: Clean Do all testings in dedicated dir($SCRATCH_MNT/$seq) instead of $SCRATCH_MNT and don't remove test files in _cleanup() for debug purpose. Signed-off-by: Eryu Guan --- 273 | 14 ++++++++------ 274 | 9 ++++++--- 275 | 9 ++++++--- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/273 b/273 index 2965132..a7f14c1 100755 --- a/273 +++ b/273 @@ -35,7 +35,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -rf $SCRATCH_MNT/* $tmp.* + rm -rf $tmp.* _scratch_unmount } @@ -44,6 +44,7 @@ _cleanup() threads=50 count=1 +WORK_DIR="$SCRATCH_MNT/$seq" _threads_set() { @@ -59,14 +60,14 @@ _file_create() { _i=0 - if ! mkdir $SCRATCH_MNT/origin + if ! mkdir $WORK_DIR/origin then echo "mkdir origin err" status=1 exit fi - cd $SCRATCH_MNT/origin + cd $WORK_DIR/origin _disksize=`df --block-size=1 | grep $SCRATCH_DEV | awk '{print $2}'` _disksize=$(($_disksize / 3)) @@ -85,14 +86,14 @@ _porter() { _suffix=$1 - if ! mkdir $SCRATCH_MNT/sub_$_suffix + if ! mkdir $WORK_DIR/sub_$_suffix then echo "mkdir sub_xxx err" status=1 exit fi - cp -r $SCRATCH_MNT/origin $SCRATCH_MNT/sub_$_suffix >$seq.full 2>&1 + cp -r $WORK_DIR/origin $WORK_DIR/sub_$_suffix >$seq.full 2>&1 if [ $? -ne 0 ] then echo "_porter $_suffix not complete" @@ -106,7 +107,8 @@ _do_workload() _pids="" _pid=1 - rm -rf $SCRATCH_MNT/* + rm -rf $WORK_DIR + mkdir -p $WORK_DIR _threads_set _file_create diff --git a/274 b/274 index b658004..c351c40 100755 --- a/274 +++ b/274 @@ -35,13 +35,15 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -f $SCRATCH_MNT/* $tmp.* + rm -f $tmp.* _scratch_unmount } . ./common.rc . ./common.filter +WORK_DIR="$SCRATCH_MNT/$seq" + # real QA test starts here _supported_fs generic _supported_os IRIX Linux @@ -57,8 +59,9 @@ umount $SCRATCH_DEV 2>/dev/null _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 _scratch_mount -rm -rf $SCRATCH_MNT/* -cd $SCRATCH_MNT +rm -rf $WORK_DIR +mkdir -p $WORK_DIR +cd $WORK_DIR dd if=/dev/zero of=test bs=4K count=1 >/dev/null 2>&1 if [ $? -ne 0 ] then diff --git a/275 b/275 index 214262e..7a4d414 100755 --- a/275 +++ b/275 @@ -36,13 +36,15 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -f $SCRATCH_MNT/* $tmp.* + rm -f $tmp.* _scratch_unmount } . ./common.rc . ./common.filter +WORK_DIR="$SCRATCH_MNT/$seq" + # real QA test starts here _supported_fs generic _supported_os IRIX Linux @@ -58,8 +60,9 @@ umount $SCRATCH_DEV 2>/dev/null _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 _scratch_mount -rm -rf $SCRATCH_MNT/* -cd $SCRATCH_MNT +rm -rf $WORK_DIR +mkdir -p $WORK_DIR +cd $WORK_DIR dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 if [ $? -ne 0 ] -- 1.7.8.3 From guaneryu@gmail.com Thu Jan 12 11:25:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_44,J_CHICKENPOX_45,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CHP0TR008465 for ; Thu, 12 Jan 2012 11:25:00 -0600 X-ASG-Debug-ID: 1326389098-005fe612a8790ac0001-NocioJ Received: from mail-we0-f181.google.com (mail-we0-f181.google.com [74.125.82.181]) by cuda.sgi.com with ESMTP id F4RANOVovqEFf0Bn for ; Thu, 12 Jan 2012 09:24:58 -0800 (PST) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.181 Received: by werm12 with SMTP id m12so1807715wer.26 for ; Thu, 12 Jan 2012 09:24:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:reply-to:in-reply-to:references:from:date:message-id :subject:to:cc:content-type:content-transfer-encoding; bh=7KQk/cjFlaXJ1r6OsVpsy0bW7pqUBAqdwkCHRdMVuV0=; b=r7GKK6zUdS8fdKpWEffH4+Qv813j9ryLn2HxNjiCYoKbewgOvNQWqiApWFx6iJEMbD c7Dd7Rzl3SP+EgOuOwccGIloh8RyDU0DBdkKHJy8zMwXWqqXu18MQX/phcpfpASbmXlV MzC5jPTi47yAPguMB0GVJcR4GGAHc/OffRXkM= Received: by 10.216.138.224 with SMTP id a74mr501161wej.16.1326389098413; Thu, 12 Jan 2012 09:24:58 -0800 (PST) MIME-Version: 1.0 Received: by 10.216.179.197 with HTTP; Thu, 12 Jan 2012 09:24:37 -0800 (PST) Reply-To: guaneryu@gmail.com In-Reply-To: <20120110220242.GB24410@dastard> References: <1326213469-22687-1-git-send-email-guaneryu@gmail.com> <1326213469-22687-2-git-send-email-guaneryu@gmail.com> <20120110220242.GB24410@dastard> From: Eryu Guan Date: Fri, 13 Jan 2012 01:24:37 +0800 Message-ID: Subject: Re: [PATCH] xfstests 273: Create lost+found to pass _check_scratch_fs To: Dave Chinner X-ASG-Orig-Subj: Re: [PATCH] xfstests 273: Create lost+found to pass _check_scratch_fs Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-we0-f181.google.com[74.125.82.181] X-Barracuda-Start-Time: 1326389098 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85731 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 X-Virus-Status: Clean On Wed, Jan 11, 2012 at 6:02 AM, Dave Chinner wrote: > On Wed, Jan 11, 2012 at 12:37:49AM +0800, Eryu Guan wrote: >> fsck.extN will complain lost+found is missing and fail 273. >> So create lost+found explicitly after removing everything in >> $SCRATCH_MNT. > > I'd consider that a bug in e2fsck. Other filesystems handle missing > lost+found directories without failing, but then again it's only > these new tests that do this so fixing the tests is probably the > right thing to do here. > >> Signed-off-by: Eryu Guan >> --- >> =A0273 | =A0 =A02 ++ >> =A01 files changed, 2 insertions(+), 0 deletions(-) >> >> diff --git a/273 b/273 >> index 2965132..9ecb2d3 100755 >> --- a/273 >> +++ b/273 >> @@ -36,6 +36,7 @@ _cleanup() >> =A0{ >> =A0 =A0 =A0 cd / >> =A0 =A0 =A0 rm -rf $SCRATCH_MNT/* $tmp.* >> + =A0 =A0 mkdir -p $SCRATCH_MNT/lost+found >> =A0 =A0 =A0 _scratch_unmount >> =A0} > > We shouldn't be removing files from the scratch device =A0in the > _cleanup function - if the test exits or fails, we need the corpse > to be intact for debugging. Remving $SCRATCH_MNT/* from the rm > command is what should be done here. > >> >> @@ -107,6 +108,7 @@ _do_workload() >> =A0 =A0 =A0 _pid=3D1 >> >> =A0 =A0 =A0 rm -rf $SCRATCH_MNT/* >> + =A0 =A0 mkdir -p $SCRATCH_MNT/lost+found > > And rather than doing this, the test should put all it's files in a > known location on the $SCRATCH_MNT and just remove that. e.g: > > WORK_DIR=3D"$SCRATCH_MNT/$seq" > > .... > > =A0 =A0 =A0 =A0rm -rf $WORKDIR > > .... > > The same fixes are required for 274 and 275 as well. Thanks for the review, I just sent a new patch to fix 273 274 and 275 [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it Please help review. Thanks, Eryu Guan > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com From jszhang3@mail.ustc.edu.cn Thu Jan 12 11:25:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CHPL66008500 for ; Thu, 12 Jan 2012 11:25:21 -0600 X-ASG-Debug-ID: 1326389117-00a9eb65e71ce6e0001-NocioJ Received: from ustc.edu.cn (smtp2.ustc.edu.cn [202.38.64.46]) by cuda.sgi.com with SMTP id WQHGBbtdZNBfJ5Na for ; Thu, 12 Jan 2012 09:25:18 -0800 (PST) X-Barracuda-Envelope-From: jszhang3@mail.ustc.edu.cn X-Barracuda-Apparent-Source-IP: 202.38.64.46 Received: from ustc (unknown [58.198.192.5]) by mailweb (Coremail) with SMTP id yia_0ZDrHQR2Fw9PgIQeAA--.9667S2; Fri, 13 Jan 2012 01:25:10 +0800 (CST) Date: Fri, 13 Jan 2012 01:30:28 +0800 From: JiSheng Zhang To: xfs@oss.sgi.com, elder@kernel.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH] xfs: remove unecessary AIL push wakeups Message-ID: <20120113013028.6802d878@ustc> X-ASG-Orig-Subj: [PATCH] xfs: remove unecessary AIL push wakeups X-Mailer: Claws Mail 3.8.0 (GTK+ 2.24.8; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-CM-TRANSID: yia_0ZDrHQR2Fw9PgIQeAA--.9667S2 X-Coremail-Antispam: 1Uf129KBjvdXoWruw43Xr1ftFy7GryUtF15XFb_yoWfGFb_Xa 1vyryxWwnxWrs2yrW8Xrs8Aryjyw4IyrZ7WayUtay5Ka4UWF4ayF98XFZ0qry7CrWYkrn3 Zr9I9r13Kr92yjkaLaAFLSUrUUUUUbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnRJUUU 6Sb7IF0VCFI7km07C26c804VAKzcIF0wAYjxAI6xZILanIXVAFwwAYjxAI6IIYrVAFwwAY jsxI4VWxJwAYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1I0E4x80FVCIwcAKzIAtM7C26IkvcI IF6IxKo4kEV4yl1IIY67AEw4v_Jr0_Jr4l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28E F7xvwVC0I7IYx2IY6xkF7I0E14v26r4j6F4UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84 ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2kK67kvxFCE548m6r1fGryUXwAac4AC648E w2Wl57IF6s8CjcxG0xyl5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r 1Y6r17McIj6I8E87Iv67AKxVWUJVW8JwACjcxG0xvY0x0EwIxGrwCF04k20xvY0x0EwIxG rwCFI7vE0wC2zVAF1VAY17CE14v26r1Y6r17MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcV AFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvEx4A2jsIE14v2 6r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7IU8 ag4DUUUUU== X-CM-SenderInfo: xmv2xttqjtqzxdloh3xvwfhvlgxou0/ X-Barracuda-Connect: smtp2.ustc.edu.cn[202.38.64.46] X-Barracuda-Start-Time: 1326389118 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85731 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean In commit 0030807c66("xfs: revert to using a kthread for AIL pushing"), AIL pushing is revert back to use a kthread. But unfortunately, it introduced a regression: there are unnecessary AIL push wakeups during idle, ~20 wakeups/s. This change remove the wakeups by reverting a bit more: set "tout" value as zero during idle. Signed-off-by: JiSheng Zhang --- fs/xfs/xfs_trans_ail.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c index ed9252b..2014387 100644 --- a/fs/xfs/xfs_trans_ail.c +++ b/fs/xfs/xfs_trans_ail.c @@ -508,7 +508,7 @@ out_done: ailp->xa_last_pushed_lsn = 0; ailp->xa_log_flush = 0; - tout = 50; + tout = 0; } else if (XFS_LSN_CMP(lsn, target) >= 0) { /* * We reached the target so wait a bit longer for I/O to -- 1.7.8.3 From tinguely@sgi.com Thu Jan 12 11:29:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CHTvWc008652 for ; Thu, 12 Jan 2012 11:29:57 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 25482304048; Thu, 12 Jan 2012 09:29:57 -0800 (PST) Message-ID: <4F0F1897.7040701@sgi.com> Date: Thu, 12 Jan 2012 11:29:59 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Carlos Maiolino CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) References: <1326377187-27344-1-git-send-email-cmaiolino@redhat.com> <20120112144534.GB1798@andromeda.usersys.redhat.com> In-Reply-To: <20120112144534.GB1798@andromeda.usersys.redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/12/12 08:45, Carlos Maiolino wrote: > Mark, can you test it and see if the statement I used to send repair > output to $seq.full will work on bash3? I haven't any system here using > bash 3. > > Thanks Works under bash3 and bash4. Thank-you, Reviewed-by: Mark Tinguely From bpm@sgi.com Thu Jan 12 11:40:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CHe2ZH009038 for ; Thu, 12 Jan 2012 11:40:03 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 06564AC002; Thu, 12 Jan 2012 09:39:58 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id F2B63426DA7; Thu, 12 Jan 2012 11:39:59 -0600 (CST) Date: Thu, 12 Jan 2012 11:39:59 -0600 From: Ben Myers To: Christoph Hellwig Cc: Mark Tinguely , jeff.liu@oracle.com, Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120112173959.GU20739@sgi.com> References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFB20.7030704@sgi.com> <4F0EE5B6.2040408@oracle.com> <4F0EF5DC.1070207@sgi.com> <20120112164148.GB22223@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112164148.GB22223@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jan 12, 2012 at 11:41:48AM -0500, Christoph Hellwig wrote: > On Thu, Jan 12, 2012 at 09:01:48AM -0600, Mark Tinguely wrote: > > >Sorry, am was well understood your opinions in this point for now. > > >IMHO, we can only find and return the data buffer offset at a dirty or > > >unwritten page once the first page was probed. > > > > > > > From my tests, xfs_bmapi_read() can only find holes if they cross or > > start on a 64KB boundary. It would be nice if unwritten extents were > > at least that good at finding holes. > > Are you testing on ia64 with 64k blocks? :) xfs_bmapi_read will > find holes down to block granularity, that's how it's implemented. > However recent XFS does fairly aggressive preallocation, so you probably ^^^^ it is speculative delay in this case, I think. -Ben > won't find small holes unless you explicitly punch them out using > XFS_IOC_UNRESVSP or fallocate with the hole punch flag. From bpm@sgi.com Thu Jan 12 11:50:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CHoGpR009522 for ; Thu, 12 Jan 2012 11:50:16 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9DBDEAC002; Thu, 12 Jan 2012 09:50:15 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 76CC3426DA7; Thu, 12 Jan 2012 11:50:16 -0600 (CST) Date: Thu, 12 Jan 2012 11:50:16 -0600 From: Ben Myers To: Christoph Hellwig Cc: Mark Tinguely , jeff.liu@oracle.com, Dave Chinner , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 Message-ID: <20120112175016.GV20739@sgi.com> References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DF9C1.2060302@sgi.com> <20120112162210.GA3925@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112162210.GA3925@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hey, On Thu, Jan 12, 2012 at 11:22:10AM -0500, Christoph Hellwig wrote: > With all the complications that we got compared to the initial version, > namely multiple hole extents, dirty unwritten extent detection and > so on I think it's time to stop using xfs_bmapi_read against Dave's > initial suggestion, and switch to using xfs_bmap_search_extents > directly. > > The rationale for that is that > > a) using xfs_bmapi_read makes hole detection more complex, given > that it has to fill potentially multiple xfs_bmbt_irec structures > instead of skipping over them > b) reading two extents at a time means we have to duplicate all the > detection code. c) having a cursor here means that Jeff can always get the job done with a single btree search, which could be an important optimisation for heavily preallocated workloads. > if we use xfs_bmap_search_extents we need a bit of boilerplate code, > but xfs_seek_data becomes really simple - we just loop over > xfs_bmap_search_extents until we either find an extent or EOF. > If we find an extent and it's unwritten we might have to probe for > dirty areas from one single point, or just skip it but the code is > still simple. xfs_seek_hole is just as simple - if > xfs_bmap_search_extents fits the condition for a hole as written > down in xfs_bmapi_read we've found it, if not we might again have > to do the unwritten extent probing, but just from a single place > instead of duplicating it twice. I agree that this is a good idea. I would like to reiterate my suggestion that Jeff go for the 'simple' implementation (assume unwritten extents contain data) before going about scanning unwritten extents for holes/data. Regards, Ben From BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org Thu Jan 12 13:02:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CJ2N0p013150 for ; Thu, 12 Jan 2012 13:02:24 -0600 X-ASG-Debug-ID: 1326394942-00a9eb65e71da470001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id M4YkZs3JAA6I6b7i for ; Thu, 12 Jan 2012 11:02:22 -0800 (PST) X-Barracuda-Envelope-From: BATV+af69b412b03415da1bd9+3063+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlPun-0000oT-Pe; Thu, 12 Jan 2012 19:02:21 +0000 Date: Thu, 12 Jan 2012 14:02:21 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: XFS status update for December 2011 Message-ID: <20120112190221.GA3108@infradead.org> X-ASG-Orig-Subj: XFS status update for December 2011 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326394942 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85737 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 X-Virus-Status: Clean December saw further stabilization of the Linux 3.2 release candidates. For XFS that meant two important fixes for sync() data integrity, to work around issues introduced in the VFS sync code in the past few kernel releases. These fixes have also been backported to the 3.0-stable release. Development for the next merge windows continue in fast pace, although only a relatively small amount of patches was merged into the development tree for the Linux 3.3 window. The most interesting topic in December probably was further development of the SEEK_DATA / SEEK_HOLE support, including defining the exact semantics in presence of unwritten extents and proper test coverage. On the user space side December was fairly quite, with about a handful fixes commit to xfsprogs, two new test cases and a couple of fixes in xfstests, and no activity in xfsdump. From tinguely@sgi.com Thu Jan 12 13:30:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CJU75F014699 for ; Thu, 12 Jan 2012 13:30:07 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7E6A8304066; Thu, 12 Jan 2012 11:30:04 -0800 (PST) Message-ID: <4F0F34BE.2040001@sgi.com> Date: Thu, 12 Jan 2012 13:30:06 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 01/12] repair: do not walk the unlinked inode list References: <20111202174619.179530033@bombadil.infradead.org> <20111202174741.091561992@bombadil.infradead.org> In-Reply-To: <20111202174741.091561992@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > Stefan Pfetzing reported a bug where xfs_repair got stuck eating 100% CPU in > phase3. We track it down to a loop in the unlinked inode list, apparently > caused by memory corruption on an iSCSI target. > > I looked into tracking if we already saw a given unlinked inode, but given > that we keep walking even for inodes where we can't find an allocation btree > record that seems infeasible. On the other hand these inodes had their > final unlink and thus were dead even before the system went down. There > really is no point in adding them to the uncertain list and looking for > references to them later. > > So the simplest fix seems to be to simply remove the unlinked inode list > walk and just clear it - when we rebuild the inode allocation btrees these > will simply be marked free. Makes sense to me. Reviewed-by: Mark Tinguely From adilger@dilger.ca Thu Jan 12 13:53:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CJrcp1015955 for ; Thu, 12 Jan 2012 13:53:39 -0600 X-ASG-Debug-ID: 1326398016-005fe612a779f1b0001-NocioJ Received: from idcmail-mo1so.shaw.ca (idcmail-mo1so.shaw.ca [24.71.223.10]) by cuda.sgi.com with ESMTP id VAUO2XCUXElAfD84 for ; Thu, 12 Jan 2012 11:53:36 -0800 (PST) X-Barracuda-Envelope-From: adilger@dilger.ca X-Barracuda-Apparent-Source-IP: 24.71.223.10 Received: from pd3ml1so-ssvc.prod.shaw.ca ([10.0.141.140]) by pd3mo1so-svcs.prod.shaw.ca with ESMTP; 12 Jan 2012 12:53:35 -0700 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.1 cv=MPNiKFfsidoaPqBs0kThsodqbsbgvPHp5CGEg9DOvhI= c=1 sm=1 a=bTn0QYg2QYIA:10 a=BLceEmwcHowA:10 a=kj9zAlcOel0A:10 a=k8hqzbHzjweV03hO1KKrVA==:17 a=VwQbUJbxAAAA:8 a=TOnYqM4CI-6A-kZnROAA:9 a=QFKmCifuyYduI_XtWv4A:7 a=CjuIK1q_8ugA:10 a=x8gzFH9gYPwA:10 a=ioPC6dG8GIryNR3K:21 a=NS5J6Dtfjw8Xdybz:21 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117 Received: from unknown (HELO cabot-wlan.adilger.int) ([68.147.208.101]) by pd3ml1so-dmz.prod.shaw.ca with ESMTP; 12 Jan 2012 12:53:35 -0700 Subject: Re: [PATCH 1/4] fs: Improve filesystem freezing handling Mime-Version: 1.0 (Apple Message framework v1084) X-ASG-Orig-Subj: Re: [PATCH 1/4] fs: Improve filesystem freezing handling Content-Type: text/plain; charset=us-ascii From: Andreas Dilger In-Reply-To: <1326331253-6497-2-git-send-email-jack@suse.cz> Date: Thu, 12 Jan 2012 12:53:35 -0700 Cc: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Content-Transfer-Encoding: quoted-printable Message-Id: References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-2-git-send-email-jack@suse.cz> To: Jan Kara X-Mailer: Apple Mail (2.1084) X-Barracuda-Connect: idcmail-mo1so.shaw.ca[24.71.223.10] X-Barracuda-Start-Time: 1326398016 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 2012-01-11, at 6:20 PM, Jan Kara wrote: > Currently, exclusion between ->page_mkwrite() and filesystem freezing = has been > handled by setting page dirty and then verifying s_frozen. This = guaranteed that > either the freezing code sees the faulted page, writes it, and = writeprotects it > again or we see s_frozen set and bail out of page fault. This works to = protect > from page being marked writeable while filesystem freezing is running = but has > an unpleasant artefact of leaving dirty (although unmodified and > writeprotected) pages on frozen filesystem. This artefact then = requires > workarounds in writeback code and other places. >=20 > Also generally vfs_check_frozen() tests are racy since the filesystem = can be > frozen just after the test is performed. Thus in other write paths we = can > end up marking some pages or inodes dirty even though filesystem is = already > frozen. Again this creates problems with flusher thread hanging on = frozen > filesystem. >=20 > This patch aims at providing exclusion between write paths which dirty = data (we > don't have to worry about metadata since that is handled by = filesystems in > ->freeze_fs) and filesystem freezing. We implement a writer-freeze = read-write > semaphore in the superblock. Write paths which dirty data such as > ->block_page_mkwrite() implementations, or ->aio_write() = implementations hold > reader side of the semaphore. Filesystem freezing code holds the = writer side. > Only that we don't really want to bounce cachelines of the semaphore = between > CPUs for each write happening. So we implement the reader side of the = semaphore > as a per-cpu counter and the writer side is implemented using s_frozen > superblock field. >=20 > Signed-off-by: Jan Kara > --- > fs/super.c | 121 = +++++++++++++++++++++++++++++++++++++++++++++++++++- > include/linux/fs.h | 14 ++++++ > 2 files changed, 134 insertions(+), 1 deletions(-) >=20 > diff --git a/fs/super.c b/fs/super.c > index afd0f1a..c85c64c 100644 > --- a/fs/super.c > +++ b/fs/super.c > @@ -32,12 +32,15 @@ > #include > #include > #include > +#include > #include "internal.h" >=20 >=20 > LIST_HEAD(super_blocks); > DEFINE_SPINLOCK(sb_lock); >=20 > +static struct lock_class_key sb_writers_key; > + > /* > * One thing we have to be careful of with a per-sb shrinker is that = we don't > * drop the last active reference to the superblock from within the = shrinker. > @@ -183,6 +186,13 @@ static struct super_block *alloc_super(struct = file_system_type *type) > s->s_shrink.seeks =3D DEFAULT_SEEKS; > s->s_shrink.shrink =3D prune_super; > s->s_shrink.batch =3D 1024; > + > + init_waitqueue_head(&s->s_writers_wait); > +#ifdef CONFIG_SMP > + s->s_page_faults =3D alloc_percpu(int); > +#endif > + lockdep_init_map(&s->s_writers_lock_map, "sb_writers", > + &sb_writers_key, 0); > } > out: > return s; > @@ -1126,6 +1136,84 @@ out: > } >=20 > /** > + * sb_start_write - drop write access to a superblock > + * @sb: the super we wrote to > + * > + * Decrement number of writers to the filesystem and wake up possible > + * waiters wanting to freeze the filesystem. > + */ > +void sb_end_write(struct super_block *sb) > +{ > +#ifdef CONFIG_SMP > + this_cpu_dec(sb->s_writers); > +#else > + preempt_disable(); > + sb->s_writers--; > + preempt_enable(); > +#endif > + /* > + * Make sure s_writers are updated before we wake up waiters in > + * freeze_super(). > + */ > + smp_mb(); > + if (waitqueue_active(&sb->s_writers_wait)) > + wake_up(&sb->s_writers_wait); > + rwsem_release(&sb->s_writers_lock_map, 1, _RET_IP_); > +} Since this function is needed for calling __block_page_mkwrite(), which = is EXPORT_SYMBOL(), both sb_start_write() and sb_end_write() themselves = need to be EXPORT_SYMBOL(). > +/** > + * sb_start_write - get write access to a superblock > + * @sb: the super we write to > + * > + * When a process wants to write data to a filesystem (i.e. dirty a = page), > + * it should embed the operation in a sb_start_write() - = sb_end_write() pair > + * to get exclusion against filesystem freezing. This function = increments > + * number of writers to the filesystem and waits if filesystem is = frozen until > + * it is thawed. > + */ > +void sb_start_write(struct super_block *sb) > +{ > +retry: > + rwsem_acquire_read(&sb->s_writers_lock_map, 0, 0, _RET_IP_); > + vfs_check_frozen(sb, SB_FREEZE_WRITE); > +#ifdef CONFIG_SMP > + this_cpu_inc(sb->s_writers); > +#else > + preempt_disable(); > + sb->s_writers++; > + preempt_enable(); > +#endif > + /* > + * Make sure s_writers are updated before we check s_frozen. > + * freeze_super() first sets s_frozen and then checks s_writers. > + */ > + smp_mb(); > + if (sb->s_frozen !=3D SB_UNFROZEN) { > + sb_end_write(sb); > + goto retry; > + } > +} > + > +/* > + * Get number of writers to the superblock > + */ > +static int get_writers_count(struct super_block *sb) > +{ > + int writers; > +#ifdef CONFIG_SMP > + int cpu; > + > + writers =3D 0; > + for_each_possible_cpu(cpu) { > + writers +=3D *per_cpu_ptr(sb->s_writers, cpu); > + } > +#else > + writers =3D sb->s_writers; > +#endif > + return writers; > +} > + > +/** > * freeze_super - lock the filesystem and force it into a consistent = state > * @sb: the super to lock > * > @@ -1136,6 +1224,7 @@ out: > int freeze_super(struct super_block *sb) > { > int ret; > + int writers; >=20 > atomic_inc(&sb->s_active); > down_write(&sb->s_umount); > @@ -1151,8 +1240,36 @@ int freeze_super(struct super_block *sb) > return 0; > } >=20 > + rwsem_acquire(&sb->s_writers_lock_map, 0, 0, _THIS_IP_); > sb->s_frozen =3D SB_FREEZE_WRITE; > - smp_wmb(); > + /* > + * Now wait for all page faults to finish. ->page_mkwrite() > + * implementations must call vfs_check_frozen() before starting > + * a fault so that we cannot livelock here. Because of that we > + * are guaranteed that from this moment on new ->page_mkwrite() > + * calls will block and we just have to wait for s_page_faults > + * to drop to zero (in a sum). > + */ > + do { > + DEFINE_WAIT(wait); > + > + /* > + * We use a barrier in prepare_to_wait() to separate = setting > + * of s_frozen and checking of s_writers > + */ > + prepare_to_wait(&sb->s_writers_wait, &wait, > + TASK_UNINTERRUPTIBLE); > + /* > + * We must iterate over all (even offline) CPUs because = of CPU > + * hotplug their entries could still be non-zero. This = is slow > + * when lots of CPUs are configured but hey, filesystem = freezing > + * isn't exactly cheap anyway. > + */ > + writers =3D get_writers_count(sb); > + if (writers) > + schedule(); > + finish_wait(&sb->s_writers_wait, &wait); > + } while (writers); >=20 > sync_filesystem(sb); >=20 > @@ -1165,6 +1282,7 @@ int freeze_super(struct super_block *sb) > if (ret) { > printk(KERN_ERR > "VFS:Filesystem freeze failed\n"); > + rwsem_release(&sb->s_writers_lock_map, 1, = _THIS_IP_); > sb->s_frozen =3D SB_UNFROZEN; > deactivate_locked_super(sb); > return ret; > @@ -1206,6 +1324,7 @@ int thaw_super(struct super_block *sb) > } >=20 > out: > + rwsem_release(&sb->s_writers_lock_map, 1, _THIS_IP_); > sb->s_frozen =3D SB_UNFROZEN; > smp_wmb(); > wake_up(&sb->s_wait_unfrozen); > diff --git a/include/linux/fs.h b/include/linux/fs.h > index e313022..297b263 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include >=20 > /* > * It's silly to have NR_OPEN bigger than NR_FILE, but you can change > @@ -1445,6 +1446,16 @@ struct super_block { >=20 > int s_frozen; > wait_queue_head_t s_wait_unfrozen; > +#ifdef CONFIG_SMP > + int __percpu *s_writers; /* counter of running = writes */ > +#else > + int s_writers; /* counter of running = writes */ > +#endif > + wait_queue_head_t s_writers_wait; /* queue for waiting for > + writers to finish */ > +#ifdef CONFIG_DEBUG_LOCK_ALLOC > + struct lockdep_map s_writers_lock_map; > +#endif >=20 > char s_id[32]; /* Informational name */ > u8 s_uuid[16]; /* UUID */ > @@ -1501,6 +1512,9 @@ enum { > #define vfs_check_frozen(sb, level) \ > wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) >=20 > +void sb_end_write(struct super_block *sb); > +void sb_start_write(struct super_block *sb); > + > /* > * until VFS tracks user namespaces for inodes, just make all files > * belong to init_user_ns > --=20 > 1.7.1 >=20 > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" = in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html Cheers, Andreas From adilger@dilger.ca Thu Jan 12 13:56:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CJu4VD016113 for ; Thu, 12 Jan 2012 13:56:04 -0600 X-ASG-Debug-ID: 1326398163-005fe612a879f740001-NocioJ Received: from idcmail-mo2no.shaw.ca (idcmail-mo2no.shaw.ca [64.59.134.9]) by cuda.sgi.com with ESMTP id XXnU4Q9FjeRxN3k6 for ; Thu, 12 Jan 2012 11:56:03 -0800 (PST) X-Barracuda-Envelope-From: adilger@dilger.ca X-Barracuda-Apparent-Source-IP: 64.59.134.9 Received: from lb7f8hsrpno-svcs.dcs.int.inet (HELO pd7ml2no-ssvc.prod.shaw.ca) ([10.0.144.222]) by pd7mo1no-svcs.prod.shaw.ca with ESMTP; 12 Jan 2012 12:56:03 -0700 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.1 cv=GZn8e3lTBEeJrlGK3+GUWyR5aYe1SJcDn5uEERMe9yQ= c=1 sm=1 a=hbQVffkJRQcA:10 a=BLceEmwcHowA:10 a=kj9zAlcOel0A:10 a=k8hqzbHzjweV03hO1KKrVA==:17 a=VwQbUJbxAAAA:8 a=h96JMW4gjYtUGLxmhxwA:9 a=HG5avjeKIjrJn2oOPToA:7 a=CjuIK1q_8ugA:10 a=x8gzFH9gYPwA:10 a=_B_k53uKFiexPceY:21 a=Yh4gNVjaDYFn2SnX:21 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117 Received: from unknown (HELO cabot-wlan.adilger.int) ([68.147.208.101]) by pd7ml2no-dmz.prod.shaw.ca with ESMTP; 12 Jan 2012 12:56:02 -0700 Subject: Re: [PATCH 2/4] vfs: Protect write paths by sb_start_write - sb_end_write Mime-Version: 1.0 (Apple Message framework v1084) X-ASG-Orig-Subj: Re: [PATCH 2/4] vfs: Protect write paths by sb_start_write - sb_end_write Content-Type: text/plain; charset=us-ascii From: Andreas Dilger In-Reply-To: <1326331253-6497-3-git-send-email-jack@suse.cz> Date: Thu, 12 Jan 2012 12:56:01 -0700 Cc: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Content-Transfer-Encoding: quoted-printable Message-Id: References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-3-git-send-email-jack@suse.cz> To: Jan Kara X-Mailer: Apple Mail (2.1084) X-Barracuda-Connect: idcmail-mo2no.shaw.ca[64.59.134.9] X-Barracuda-Start-Time: 1326398163 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 2012-01-11, at 6:20 PM, Jan Kara wrote: > There are three entry points which dirty pages in a filesystem. mmap = (handled > by block_page_mkwrite()), buffered write (handled by > __generic_file_aio_write()), and truncate (it can dirty last partial = page - > handled by do_truncate()). Protect these places with sb_start_write() = and > sb_end_write(). >=20 > Signed-off-by: Jan Kara > --- > fs/buffer.c | 18 ++---------------- > fs/open.c | 6 ++++++ > mm/filemap.c | 3 ++- > 3 files changed, 10 insertions(+), 17 deletions(-) >=20 > diff --git a/fs/buffer.c b/fs/buffer.c > index 19d8eb7..8519405 100644 > --- a/fs/buffer.c > +++ b/fs/buffer.c > @@ -2371,18 +2371,7 @@ int __block_page_mkwrite(struct vm_area_struct = *vma, struct vm_fault *vmf, The comment for __block_page_mkwrite() needs to be updated to reference sb_start_write() and sb_end_write() instead of vfs_check_frozen(). Cheers, Andreas > if (unlikely(ret < 0)) > goto out_unlock; > - /* > - * Freezing in progress? We check after the page is marked dirty = and > - * with page lock held so if the test here fails, we are sure = freezing > - * code will wait during syncing until the page fault is done - = at that > - * point page will be dirty and unlocked so freezing code will = write it > - * and writeprotect it again. > - */ > set_page_dirty(page); > - if (inode->i_sb->s_frozen !=3D SB_UNFROZEN) { > - ret =3D -EAGAIN; > - goto out_unlock; > - } > wait_on_page_writeback(page); > return 0; > out_unlock: > @@ -2397,12 +2386,9 @@ int block_page_mkwrite(struct vm_area_struct = *vma, struct vm_fault *vmf, > int ret; > struct super_block *sb =3D = vma->vm_file->f_path.dentry->d_inode->i_sb; >=20 > - /* > - * This check is racy but catches the common case. The check in > - * __block_page_mkwrite() is reliable. > - */ > - vfs_check_frozen(sb, SB_FREEZE_WRITE); > + sb_start_write(sb); > ret =3D __block_page_mkwrite(vma, vmf, get_block); > + sb_end_write(sb); > return block_page_mkwrite_return(ret); > } > EXPORT_SYMBOL(block_page_mkwrite); > diff --git a/fs/open.c b/fs/open.c > index 22c41b5..ee17c90 100644 > --- a/fs/open.c > +++ b/fs/open.c > @@ -55,8 +55,14 @@ int do_truncate(struct dentry *dentry, loff_t = length, unsigned int time_attrs, > if (ret) > newattrs.ia_valid |=3D ret | ATTR_FORCE; >=20 > + /* > + * Truncate can dirty last partial page so we need protection = against > + * filesystem freezing. > + */ > mutex_lock(&dentry->d_inode->i_mutex); > + sb_start_write(dentry->d_sb); > ret =3D notify_change(dentry, &newattrs); > + sb_end_write(dentry->d_sb); > mutex_unlock(&dentry->d_inode->i_mutex); > return ret; > } > diff --git a/mm/filemap.c b/mm/filemap.c > index c0018f2..6566c73 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -2529,7 +2529,7 @@ ssize_t __generic_file_aio_write(struct kiocb = *iocb, const struct iovec *iov, > count =3D ocount; > pos =3D *ppos; >=20 > - vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); > + sb_start_write(inode->i_sb); >=20 > /* We can write back this queue in page reclaim */ > current->backing_dev_info =3D mapping->backing_dev_info; > @@ -2601,6 +2601,7 @@ ssize_t __generic_file_aio_write(struct kiocb = *iocb, const struct iovec *iov, > pos, ppos, count, written); > } > out: > + sb_end_write(inode->i_sb); > current->backing_dev_info =3D NULL; > return written ? written : err; > } > --=20 > 1.7.1 >=20 > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" = in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From jack@suse.cz Thu Jan 12 14:07:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CK7vDK016746 for ; Thu, 12 Jan 2012 14:07:57 -0600 X-ASG-Debug-ID: 1326398874-0222017aa38ae010001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id klaesSs6bpH5CeqM for ; Thu, 12 Jan 2012 12:07:55 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 5F0958FFDD; Thu, 12 Jan 2012 21:07:54 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 58B31205DD; Thu, 12 Jan 2012 21:07:53 +0100 (CET) Date: Thu, 12 Jan 2012 21:07:53 +0100 From: Jan Kara To: Andreas Dilger Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 1/4] fs: Improve filesystem freezing handling Message-ID: <20120112200753.GC8778@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/4] fs: Improve filesystem freezing handling References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-2-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326398875 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu 12-01-12 12:53:35, Andreas Dilger wrote: > On 2012-01-11, at 6:20 PM, Jan Kara wrote: > > /** > > + * sb_start_write - drop write access to a superblock > > + * @sb: the super we wrote to > > + * > > + * Decrement number of writers to the filesystem and wake up possible > > + * waiters wanting to freeze the filesystem. > > + */ > > +void sb_end_write(struct super_block *sb) > > +{ > > +#ifdef CONFIG_SMP > > + this_cpu_dec(sb->s_writers); > > +#else > > + preempt_disable(); > > + sb->s_writers--; > > + preempt_enable(); > > +#endif > > + /* > > + * Make sure s_writers are updated before we wake up waiters in > > + * freeze_super(). > > + */ > > + smp_mb(); > > + if (waitqueue_active(&sb->s_writers_wait)) > > + wake_up(&sb->s_writers_wait); > > + rwsem_release(&sb->s_writers_lock_map, 1, _RET_IP_); > > +} > > Since this function is needed for calling __block_page_mkwrite(), which is > EXPORT_SYMBOL(), both sb_start_write() and sb_end_write() themselves need > to be EXPORT_SYMBOL(). Good point. Fixed. Thanks. Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu Jan 12 14:11:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CKBNiR016960 for ; Thu, 12 Jan 2012 14:11:24 -0600 X-ASG-Debug-ID: 1326399082-005fe612a67a0e90001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id wUWYqACLjqStwv6W for ; Thu, 12 Jan 2012 12:11:22 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id B911F8BB22; Thu, 12 Jan 2012 21:11:21 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 3128C205DD; Thu, 12 Jan 2012 21:11:21 +0100 (CET) Date: Thu, 12 Jan 2012 21:11:21 +0100 From: Jan Kara To: Andreas Dilger Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 2/4] vfs: Protect write paths by sb_start_write - sb_end_write Message-ID: <20120112201121.GD8778@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/4] vfs: Protect write paths by sb_start_write - sb_end_write References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-3-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326399082 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu 12-01-12 12:56:01, Andreas Dilger wrote: > On 2012-01-11, at 6:20 PM, Jan Kara wrote: > > There are three entry points which dirty pages in a filesystem. mmap (handled > > by block_page_mkwrite()), buffered write (handled by > > __generic_file_aio_write()), and truncate (it can dirty last partial page - > > handled by do_truncate()). Protect these places with sb_start_write() and > > sb_end_write(). > > > > Signed-off-by: Jan Kara > > --- > > fs/buffer.c | 18 ++---------------- > > fs/open.c | 6 ++++++ > > mm/filemap.c | 3 ++- > > 3 files changed, 10 insertions(+), 17 deletions(-) > > > > diff --git a/fs/buffer.c b/fs/buffer.c > > index 19d8eb7..8519405 100644 > > --- a/fs/buffer.c > > +++ b/fs/buffer.c > > @@ -2371,18 +2371,7 @@ int __block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, > > The comment for __block_page_mkwrite() needs to be updated to reference > sb_start_write() and sb_end_write() instead of vfs_check_frozen(). Thanks. Fixed. Honza -- Jan Kara SUSE Labs, CR From dmnl@gmail.com Thu Jan 12 14:42:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_95,FREEMAIL_FROM autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CKgl2t019356 for ; Thu, 12 Jan 2012 14:42:48 -0600 X-ASG-Debug-ID: 1326400964-0222017aa38b29a0001-NocioJ Received: from ironport-smtp01.maxnet.net.nz (ironport-smtp01.maxnet.net.nz [123.100.71.100]) by cuda.sgi.com with ESMTP id Adsuw6sfwJvkmZWi for ; Thu, 12 Jan 2012 12:42:45 -0800 (PST) X-Barracuda-Envelope-From: dmnl@gmail.com X-Barracuda-Apparent-Source-IP: 123.100.71.100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AowZAKRmQk4KASkC/2dsb2JhbABBggWVfI9HgjBqBYEXBTqmNI8ThzY7iHKFZ18Ehy4vg3CHPIUKilCBNA X-IronPort-AV: E=Sophos;i="4.71,500,1320577200"; d="scan'208";a="256862304" Received: from smtp01.maxnet.net.nz ([123.100.71.110]) by ironport-smtp01.maxnet.net.nz with ESMTP; 13 Jan 2012 09:42:44 +1300 Received: from [10.1.41.2] (unknown [216.144.249.235]) by smtp01.maxnet.net.nz (Postfix) with ESMTPA id E4E4DA3B79; Fri, 13 Jan 2012 09:42:39 +1300 (NZDT) Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: HELLO To: Recipients X-ASG-Orig-Subj: HELLO From: "Donna Martinez" Date: Thu, 12 Jan 2012 12:42:27 -0800 Reply-To: donna195921@ovi.com Message-Id: <20120112204239.E4E4DA3B79@smtp01.maxnet.net.nz> X-Barracuda-Connect: ironport-smtp01.maxnet.net.nz[123.100.71.100] X-Barracuda-Start-Time: 1326400965 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85744 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address X-Virus-Status: Clean Hello, I am Mrs. Donna Martinez from Bahamas, I have funds which I have decided to= give out to an organization or an individual that can help invest on Chari= ty, Widows, = Propagating the word of God, because recently my Doctor told me that I woul= d not last for the next two Months due to the terrible condition of my heal= th. I will greatly appreciate your timely suggestion and interest over this mat= ter. Best Regards Mrs. Donna Martinez. From tytso@thunk.org Thu Jan 12 14:48:34 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CKmYsq019800 for ; Thu, 12 Jan 2012 14:48:34 -0600 X-ASG-Debug-ID: 1326401312-005fe612a97a6270001-NocioJ Received: from test.thunk.org (li9-11.members.linode.com [67.18.176.11]) by cuda.sgi.com with ESMTP id X9UiylGSSAEly0SK for ; Thu, 12 Jan 2012 12:48:32 -0800 (PST) X-Barracuda-Envelope-From: tytso@thunk.org X-Barracuda-Apparent-Source-IP: 67.18.176.11 Received: from root (helo=tytso-glaptop.cam.corp.google.com) by test.thunk.org with local-esmtp (Exim 4.69) (envelope-from ) id 1RlRZT-0007oF-VQ; Thu, 12 Jan 2012 20:48:28 +0000 Received: from tytso by tytso-glaptop.cam.corp.google.com with local (Exim 4.71) (envelope-from ) id 1RlRZS-0004hz-IN; Thu, 12 Jan 2012 15:48:26 -0500 Date: Thu, 12 Jan 2012 15:48:26 -0500 From: "Ted Ts'o" To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 0/4] Fix filesystem freezing Message-ID: <20120112204826.GG6626@thunk.org> X-ASG-Orig-Subj: Re: [PATCH 0/4] Fix filesystem freezing Mail-Followup-To: Ted Ts'o , Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig References: <1326331253-6497-1-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326331253-6497-1-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.20 (2009-06-14) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on test.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: li9-11.members.linode.com[67.18.176.11] X-Barracuda-Start-Time: 1326401312 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85744 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 12, 2012 at 02:20:49AM +0100, Jan Kara wrote: > reproduce deadlocks due to dirty data as well so please test these patches out. > Thanks. Also review of patches is welcome. This patch series looks good to me (modulo issues others have already pointed out). Acked-by: "Theodore Ts'o" I assume you're going to send this up through Al's vfs tree? - Ted From viro@ftp.linux.org.uk Thu Jan 12 15:29:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CLTosf023375 for ; Thu, 12 Jan 2012 15:29:50 -0600 X-ASG-Debug-ID: 1326403787-005fe612a87a8da0001-NocioJ Received: from ZenIV.linux.org.uk (zeniv.linux.org.uk [195.92.253.2]) by cuda.sgi.com with ESMTP id 8ZxAjXISqG3MqA6D; Thu, 12 Jan 2012 13:29:47 -0800 (PST) X-Barracuda-Envelope-From: viro@ftp.linux.org.uk X-Barracuda-Apparent-Source-IP: 195.92.253.2 Received: from viro by ZenIV.linux.org.uk with local (Exim 4.76 #1 (Red Hat Linux)) id 1RlSDN-00020c-9k; Thu, 12 Jan 2012 21:29:41 +0000 Date: Thu, 12 Jan 2012 21:29:41 +0000 From: Al Viro To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , Ben Myers , Alex Elder Subject: Re: [PATCH 4/4] xfs: Protect xfs_file_aio_write() with sb_start_write - sb_end_write Message-ID: <20120112212941.GI23916@ZenIV.linux.org.uk> X-ASG-Orig-Subj: Re: [PATCH 4/4] xfs: Protect xfs_file_aio_write() with sb_start_write - sb_end_write References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-5-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326331253-6497-5-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: Al Viro X-Barracuda-Connect: zeniv.linux.org.uk[195.92.253.2] X-Barracuda-Start-Time: 1326403787 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85748 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 12, 2012 at 02:20:53AM +0100, Jan Kara wrote: > Replace racy xfs_wait_for_freeze() check with reliable sb_start_write() > - sb_end_write() locking. Due to lock ranking dictated by the page fault > code we have to call sb_start_write() after we acquire ilock. > > CC: Ben Myers > CC: Alex Elder > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_file.c | 6 ++++-- > 1 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 753ed9b..c5f879b 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -862,9 +862,11 @@ xfs_file_dio_aio_write( > *iolock = XFS_IOLOCK_SHARED; > } > > + sb_start_write(inode->i_sb); > trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); > ret = generic_file_direct_write(iocb, iovp, > &nr_segs, pos, &iocb->ki_pos, count, ocount); > + sb_end_write(inode->i_sb); What lock ordering do you have in mind? Explicit description in fs/super.c, please... From jack@suse.cz Thu Jan 12 15:37:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CLb189024517 for ; Thu, 12 Jan 2012 15:37:01 -0600 X-ASG-Debug-ID: 1326404218-00a9eb65e51e99a0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id FI3y1JjCnBHCBcpw for ; Thu, 12 Jan 2012 13:36:59 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 018F48FB75; Thu, 12 Jan 2012 22:36:58 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id D5039205DD; Thu, 12 Jan 2012 22:36:56 +0100 (CET) Date: Thu, 12 Jan 2012 22:36:56 +0100 From: Jan Kara To: Al Viro Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , Ben Myers , Alex Elder Subject: Re: [PATCH 4/4] xfs: Protect xfs_file_aio_write() with sb_start_write - sb_end_write Message-ID: <20120112213656.GF8778@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 4/4] xfs: Protect xfs_file_aio_write() with sb_start_write - sb_end_write References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-5-git-send-email-jack@suse.cz> <20120112212941.GI23916@ZenIV.linux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112212941.GI23916@ZenIV.linux.org.uk> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326404219 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85749 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu 12-01-12 21:29:41, Al Viro wrote: > On Thu, Jan 12, 2012 at 02:20:53AM +0100, Jan Kara wrote: > > Replace racy xfs_wait_for_freeze() check with reliable sb_start_write() > > - sb_end_write() locking. Due to lock ranking dictated by the page fault > > code we have to call sb_start_write() after we acquire ilock. > > > > CC: Ben Myers > > CC: Alex Elder > > Signed-off-by: Jan Kara > > --- > > fs/xfs/xfs_file.c | 6 ++++-- > > 1 files changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > > index 753ed9b..c5f879b 100644 > > --- a/fs/xfs/xfs_file.c > > +++ b/fs/xfs/xfs_file.c > > @@ -862,9 +862,11 @@ xfs_file_dio_aio_write( > > *iolock = XFS_IOLOCK_SHARED; > > } > > > > + sb_start_write(inode->i_sb); > > trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); > > ret = generic_file_direct_write(iocb, iovp, > > &nr_segs, pos, &iocb->ki_pos, count, ocount); > > + sb_end_write(inode->i_sb); > > What lock ordering do you have in mind? Explicit description in fs/super.c, > please... Good point. Will add explanatory comment. Thanks. Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu Jan 12 15:38:55 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CLctqr024843 for ; Thu, 12 Jan 2012 15:38:55 -0600 X-ASG-Debug-ID: 1326404334-005fe612a87a95c0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 5dZhIHgATddFfm2C for ; Thu, 12 Jan 2012 13:38:54 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id CBC488FB75; Thu, 12 Jan 2012 22:38:53 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 2D8DF205DD; Thu, 12 Jan 2012 22:38:53 +0100 (CET) Date: Thu, 12 Jan 2012 22:38:53 +0100 From: Jan Kara To: "Ted Ts'o" Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 0/4] Fix filesystem freezing Message-ID: <20120112213853.GG8778@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 0/4] Fix filesystem freezing References: <1326331253-6497-1-git-send-email-jack@suse.cz> <20120112204826.GG6626@thunk.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112204826.GG6626@thunk.org> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326404334 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85748 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu 12-01-12 15:48:26, Ted Tso wrote: > On Thu, Jan 12, 2012 at 02:20:49AM +0100, Jan Kara wrote: > > reproduce deadlocks due to dirty data as well so please test these patches out. > > Thanks. Also review of patches is welcome. > > This patch series looks good to me (modulo issues others have already > pointed out). > > Acked-by: "Theodore Ts'o" Thanks. > I assume you're going to send this up through Al's vfs tree? Yes. Honza -- Jan Kara SUSE Labs, CR From tinguely@sgi.com Thu Jan 12 16:38:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CMcq1r036788 for ; Thu, 12 Jan 2012 16:38:52 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id CA741304067; Thu, 12 Jan 2012 14:38:48 -0800 (PST) Message-ID: <4F0F60FA.6050605@sgi.com> Date: Thu, 12 Jan 2012 16:38:50 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 02/12] repair: allocate and free inode records individually References: <20111202174619.179530033@bombadil.infradead.org> <20111202174741.284403190@bombadil.infradead.org> In-Reply-To: <20111202174741.284403190@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > Instead of allocating inode records in chunks and keeping a freelist of them > which never gets released to the system memory allocator use plain malloc > and free for them. The freelist just means adding a global lock instead > of relying on malloc and free which could be implemented lockless, and the > freelist is almost completely worthless as we are done allocating new > inode records once we start freeing them in major quantities. > Looks good. Has been running without issues. Reviewed-by: Mark Tinguely From tinguely@sgi.com Thu Jan 12 16:39:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CMdkL1036918 for ; Thu, 12 Jan 2012 16:39:46 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0E4F330406B; Thu, 12 Jan 2012 14:39:46 -0800 (PST) Message-ID: <4F0F6133.3000103@sgi.com> Date: Thu, 12 Jan 2012 16:39:47 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 03/12] repair: allocate and free extent records individually References: <20111202174619.179530033@bombadil.infradead.org> <20111202174741.504430987@bombadil.infradead.org> In-Reply-To: <20111202174741.504430987@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > Instead of allocating inode records in chunks and keeping a freelist of them > which gets released to the system memory allocator in one go use plain malloc > and free for them. The freelist just means adding a global lock instead > of relying on malloc and free which could be implemented lockless. In > addition smart allocators like tcmalloc have far less overhead than our > chunk and linked list. Looks good. Has been running without issues. Reviewed-by: Mark Tinguely From dmnl@gmail.com Thu Jan 12 16:47:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_95,FREEMAIL_FROM autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CMlisE038058 for ; Thu, 12 Jan 2012 16:47:44 -0600 X-ASG-Debug-ID: 1326408462-005fe612a97adff0001-NocioJ Received: from ironport-smtp01.maxnet.net.nz (ironport-smtp01.maxnet.net.nz [123.100.71.100]) by cuda.sgi.com with ESMTP id CPggkBXAxex9wQGt for ; Thu, 12 Jan 2012 14:47:42 -0800 (PST) X-Barracuda-Envelope-From: dmnl@gmail.com X-Barracuda-Apparent-Source-IP: 123.100.71.100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AowZAKRmQk4KASkC/2dsb2JhbABBggWVfI9HgjBqBYEXBTqmNI8ThzY7iHKFZ18Ehy4vg3CHPIUKilCBNA X-IronPort-AV: E=Sophos;i="4.71,501,1320577200"; d="scan'208";a="256888161" Received: from smtp01.maxnet.net.nz ([123.100.71.110]) by ironport-smtp01.maxnet.net.nz with ESMTP; 13 Jan 2012 11:47:41 +1300 Received: from [10.1.41.2] (unknown [216.144.249.235]) by smtp01.maxnet.net.nz (Postfix) with ESMTPA id 5F4A6A3B6E; Fri, 13 Jan 2012 11:47:37 +1300 (NZDT) Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: HELLO To: Recipients X-ASG-Orig-Subj: HELLO From: "Donna Martinez" Date: Thu, 12 Jan 2012 14:47:37 -0800 Reply-To: donna195921@ovi.com Message-Id: <20120112224737.5F4A6A3B6E@smtp01.maxnet.net.nz> X-Barracuda-Connect: ironport-smtp01.maxnet.net.nz[123.100.71.100] X-Barracuda-Start-Time: 1326408462 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85752 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address X-Virus-Status: Clean Hello, I am Mrs. Donna Martinez from Bahamas, I have funds which I have decided to= give out to an organization or an individual that can help invest on Chari= ty, Widows, = Propagating the word of God, because recently my Doctor told me that I woul= d not last for the next two Months due to the terrible condition of my heal= th. I will greatly appreciate your timely suggestion and interest over this mat= ter. Best Regards Mrs. Donna Martinez. From sandeen@sandeen.net Thu Jan 12 16:57:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CMvjLA039387 for ; Thu, 12 Jan 2012 16:57:46 -0600 X-ASG-Debug-ID: 1326409063-005fe612a97ae810001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id Ro8De5X2HbqrmSht for ; Thu, 12 Jan 2012 14:57:43 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 3044E48820EC; Thu, 12 Jan 2012 16:57:43 -0600 (CST) Message-ID: <4F0F6566.4050202@sandeen.net> Date: Thu, 12 Jan 2012 16:57:42 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Jan Kara CC: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 1/4] fs: Improve filesystem freezing handling References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-2-git-send-email-jack@suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/4] fs: Improve filesystem freezing handling In-Reply-To: <1326331253-6497-2-git-send-email-jack@suse.cz> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1326409063 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85754 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 1/11/12 7:20 PM, Jan Kara wrote: > Currently, exclusion between ->page_mkwrite() and filesystem freezing has been > handled by setting page dirty and then verifying s_frozen. This guaranteed that > either the freezing code sees the faulted page, writes it, and writeprotects it > again or we see s_frozen set and bail out of page fault. This works to protect > from page being marked writeable while filesystem freezing is running but has > an unpleasant artefact of leaving dirty (although unmodified and > writeprotected) pages on frozen filesystem. This artefact then requires > workarounds in writeback code and other places. > > Also generally vfs_check_frozen() tests are racy since the filesystem can be > frozen just after the test is performed. Thus in other write paths we can > end up marking some pages or inodes dirty even though filesystem is already > frozen. Again this creates problems with flusher thread hanging on frozen > filesystem. > > This patch aims at providing exclusion between write paths which dirty data (we > don't have to worry about metadata since that is handled by filesystems in > ->freeze_fs) and filesystem freezing. We implement a writer-freeze read-write > semaphore in the superblock. Write paths which dirty data such as > ->block_page_mkwrite() implementations, or ->aio_write() implementations hold > reader side of the semaphore. Filesystem freezing code holds the writer side. > Only that we don't really want to bounce cachelines of the semaphore between > CPUs for each write happening. So we implement the reader side of the semaphore > as a per-cpu counter and the writer side is implemented using s_frozen > superblock field. > > Signed-off-by: Jan Kara > --- > fs/super.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++- > include/linux/fs.h | 14 ++++++ > 2 files changed, 134 insertions(+), 1 deletions(-) > > diff --git a/fs/super.c b/fs/super.c > index afd0f1a..c85c64c 100644 > --- a/fs/super.c > +++ b/fs/super.c > @@ -32,12 +32,15 @@ > #include > #include > #include > +#include > #include "internal.h" > > > LIST_HEAD(super_blocks); > DEFINE_SPINLOCK(sb_lock); > > +static struct lock_class_key sb_writers_key; > + > /* > * One thing we have to be careful of with a per-sb shrinker is that we don't > * drop the last active reference to the superblock from within the shrinker. > @@ -183,6 +186,13 @@ static struct super_block *alloc_super(struct file_system_type *type) > s->s_shrink.seeks = DEFAULT_SEEKS; > s->s_shrink.shrink = prune_super; > s->s_shrink.batch = 1024; > + > + init_waitqueue_head(&s->s_writers_wait); > +#ifdef CONFIG_SMP > + s->s_page_faults = alloc_percpu(int); isn't this s->s_writers? s->s_page_faults isn't defined anywhere. > +#endif > + lockdep_init_map(&s->s_writers_lock_map, "sb_writers", > + &sb_writers_key, 0); > } > out: > return s; > @@ -1126,6 +1136,84 @@ out: > } > > /** > + * sb_start_write - drop write access to a superblock ^^^^^^^^^^^^^^ s/b sb_end_write > + * @sb: the super we wrote to > + * > + * Decrement number of writers to the filesystem and wake up possible > + * waiters wanting to freeze the filesystem. > + */ > +void sb_end_write(struct super_block *sb) > +{ > +#ifdef CONFIG_SMP > + this_cpu_dec(sb->s_writers); > +#else > + preempt_disable(); > + sb->s_writers--; > + preempt_enable(); > +#endif > + /* > + * Make sure s_writers are updated before we wake up waiters in > + * freeze_super(). > + */ > + smp_mb(); > + if (waitqueue_active(&sb->s_writers_wait)) > + wake_up(&sb->s_writers_wait); > + rwsem_release(&sb->s_writers_lock_map, 1, _RET_IP_); > +} > + > +/** > + * sb_start_write - get write access to a superblock > + * @sb: the super we write to > + * > + * When a process wants to write data to a filesystem (i.e. dirty a page), > + * it should embed the operation in a sb_start_write() - sb_end_write() pair > + * to get exclusion against filesystem freezing. This function increments > + * number of writers to the filesystem and waits if filesystem is frozen until > + * it is thawed. > + */ > +void sb_start_write(struct super_block *sb) > +{ > +retry: > + rwsem_acquire_read(&sb->s_writers_lock_map, 0, 0, _RET_IP_); > + vfs_check_frozen(sb, SB_FREEZE_WRITE); > +#ifdef CONFIG_SMP > + this_cpu_inc(sb->s_writers); > +#else > + preempt_disable(); > + sb->s_writers++; > + preempt_enable(); > +#endif > + /* > + * Make sure s_writers are updated before we check s_frozen. > + * freeze_super() first sets s_frozen and then checks s_writers. > + */ > + smp_mb(); > + if (sb->s_frozen != SB_UNFROZEN) { > + sb_end_write(sb); > + goto retry; > + } > +} > + > +/* > + * Get number of writers to the superblock > + */ > +static int get_writers_count(struct super_block *sb) > +{ > + int writers; > +#ifdef CONFIG_SMP > + int cpu; > + > + writers = 0; > + for_each_possible_cpu(cpu) { > + writers += *per_cpu_ptr(sb->s_writers, cpu); > + } > +#else > + writers = sb->s_writers; > +#endif > + return writers; > +} > + > +/** > * freeze_super - lock the filesystem and force it into a consistent state > * @sb: the super to lock > * > @@ -1136,6 +1224,7 @@ out: > int freeze_super(struct super_block *sb) > { > int ret; > + int writers; > > atomic_inc(&sb->s_active); > down_write(&sb->s_umount); > @@ -1151,8 +1240,36 @@ int freeze_super(struct super_block *sb) > return 0; > } > > + rwsem_acquire(&sb->s_writers_lock_map, 0, 0, _THIS_IP_); > sb->s_frozen = SB_FREEZE_WRITE; > - smp_wmb(); > + /* > + * Now wait for all page faults to finish. ->page_mkwrite() > + * implementations must call vfs_check_frozen() before starting > + * a fault so that we cannot livelock here. Because of that we > + * are guaranteed that from this moment on new ->page_mkwrite() > + * calls will block and we just have to wait for s_page_faults wait for s_writers, right? > + * to drop to zero (in a sum). > + */ > + do { > + DEFINE_WAIT(wait); > + > + /* > + * We use a barrier in prepare_to_wait() to separate setting > + * of s_frozen and checking of s_writers > + */ > + prepare_to_wait(&sb->s_writers_wait, &wait, > + TASK_UNINTERRUPTIBLE); > + /* > + * We must iterate over all (even offline) CPUs because of CPU > + * hotplug their entries could still be non-zero. This is slow > + * when lots of CPUs are configured but hey, filesystem freezing > + * isn't exactly cheap anyway. > + */ > + writers = get_writers_count(sb); > + if (writers) > + schedule(); > + finish_wait(&sb->s_writers_wait, &wait); > + } while (writers); > > sync_filesystem(sb); > > @@ -1165,6 +1282,7 @@ int freeze_super(struct super_block *sb) > if (ret) { > printk(KERN_ERR > "VFS:Filesystem freeze failed\n"); > + rwsem_release(&sb->s_writers_lock_map, 1, _THIS_IP_); > sb->s_frozen = SB_UNFROZEN; > deactivate_locked_super(sb); > return ret; > @@ -1206,6 +1324,7 @@ int thaw_super(struct super_block *sb) > } > > out: > + rwsem_release(&sb->s_writers_lock_map, 1, _THIS_IP_); > sb->s_frozen = SB_UNFROZEN; > smp_wmb(); > wake_up(&sb->s_wait_unfrozen); > diff --git a/include/linux/fs.h b/include/linux/fs.h > index e313022..297b263 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include > > /* > * It's silly to have NR_OPEN bigger than NR_FILE, but you can change > @@ -1445,6 +1446,16 @@ struct super_block { > > int s_frozen; > wait_queue_head_t s_wait_unfrozen; > +#ifdef CONFIG_SMP > + int __percpu *s_writers; /* counter of running writes */ > +#else > + int s_writers; /* counter of running writes */ > +#endif > + wait_queue_head_t s_writers_wait; /* queue for waiting for > + writers to finish */ > +#ifdef CONFIG_DEBUG_LOCK_ALLOC > + struct lockdep_map s_writers_lock_map; > +#endif > > char s_id[32]; /* Informational name */ > u8 s_uuid[16]; /* UUID */ > @@ -1501,6 +1512,9 @@ enum { > #define vfs_check_frozen(sb, level) \ > wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) > > +void sb_end_write(struct super_block *sb); > +void sb_start_write(struct super_block *sb); > + > /* > * until VFS tracks user namespaces for inodes, just make all files > * belong to init_user_ns From jack@suse.cz Thu Jan 12 17:15:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0CNFH8j041067 for ; Thu, 12 Jan 2012 17:15:17 -0600 X-ASG-Debug-ID: 1326410114-00a9eb65e61f0650001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id VHXKiHvnXC073Doh for ; Thu, 12 Jan 2012 15:15:15 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 130638C061; Fri, 13 Jan 2012 00:15:14 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 0F1E1205DD; Fri, 13 Jan 2012 00:15:13 +0100 (CET) Date: Fri, 13 Jan 2012 00:15:13 +0100 From: Jan Kara To: Eric Sandeen Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 1/4] fs: Improve filesystem freezing handling Message-ID: <20120112231513.GH8778@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/4] fs: Improve filesystem freezing handling References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-2-git-send-email-jack@suse.cz> <4F0F6566.4050202@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0F6566.4050202@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326410114 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85755 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu 12-01-12 16:57:42, Eric Sandeen wrote: > On 1/11/12 7:20 PM, Jan Kara wrote: > > @@ -183,6 +186,13 @@ static struct super_block *alloc_super(struct file_system_type *type) > > s->s_shrink.seeks = DEFAULT_SEEKS; > > s->s_shrink.shrink = prune_super; > > s->s_shrink.batch = 1024; > > + > > + init_waitqueue_head(&s->s_writers_wait); > > +#ifdef CONFIG_SMP > > + s->s_page_faults = alloc_percpu(int); > > isn't this s->s_writers? s->s_page_faults isn't defined anywhere. Right. Leftover from original implementation and since I was doing initial testing only using UML, I didn't spot this. Thanks. > > +#endif > > + lockdep_init_map(&s->s_writers_lock_map, "sb_writers", > > + &sb_writers_key, 0); > > } > > out: > > return s; > > @@ -1126,6 +1136,84 @@ out: > > } > > > > /** > > + * sb_start_write - drop write access to a superblock > ^^^^^^^^^^^^^^ > > s/b sb_end_write Fixed. > > @@ -1136,6 +1224,7 @@ out: > > int freeze_super(struct super_block *sb) > > { > > int ret; > > + int writers; > > > > atomic_inc(&sb->s_active); > > down_write(&sb->s_umount); > > @@ -1151,8 +1240,36 @@ int freeze_super(struct super_block *sb) > > return 0; > > } > > > > + rwsem_acquire(&sb->s_writers_lock_map, 0, 0, _THIS_IP_); > > sb->s_frozen = SB_FREEZE_WRITE; > > - smp_wmb(); > > + /* > > + * Now wait for all page faults to finish. ->page_mkwrite() > > + * implementations must call vfs_check_frozen() before starting > > + * a fault so that we cannot livelock here. Because of that we > > + * are guaranteed that from this moment on new ->page_mkwrite() > > + * calls will block and we just have to wait for s_page_faults > > wait for s_writers, right? Yes. Fixed. Thanks for review. Honza -- Jan Kara SUSE Labs, CR From david@fromorbit.com Thu Jan 12 18:09:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D09bdR046117 for ; Thu, 12 Jan 2012 18:09:38 -0600 X-ASG-Debug-ID: 1326413374-00a9eb65e61f3ad0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 0VGMWeHEG1ENgbLt for ; Thu, 12 Jan 2012 16:09:35 -0800 (PST) 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: Av4EAPV0D095LbVq/2dsb2JhbABDrQ6BBoFyAQEEAScTHCMFCwgDDgouFCUDIRMbh1+3IROLJ2MElQ2SUQ Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl2.internode.on.net with ESMTP; 13 Jan 2012 10:39:33 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RlUi4-0003TC-3Y; Fri, 13 Jan 2012 11:09:32 +1100 Date: Fri, 13 Jan 2012 11:09:32 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 0/4] Fix filesystem freezing Message-ID: <20120113000932.GD2806@dastard> X-ASG-Orig-Subj: Re: [PATCH 0/4] Fix filesystem freezing References: <1326331253-6497-1-git-send-email-jack@suse.cz> <20120112024841.GB2806@dastard> <20120112113031.GA8778@quack.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120112113031.GA8778@quack.suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1326413375 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85759 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 12, 2012 at 12:30:31PM +0100, Jan Kara wrote: > On Thu 12-01-12 13:48:41, Dave Chinner wrote: > > On Thu, Jan 12, 2012 at 02:20:49AM +0100, Jan Kara wrote: > > > > > > Hello, > > > > > > filesystem freezing is currently racy and thus we can end up with dirty data > > > on frozen filesystem (see changelog of the first patch for detailed race > > > description and proposed fix). This patch series aims at fixing this. > > > > It only fixes the dirty data race (i.e. SB_FREEZE_WRITE). The same > > race conditions exist for SB_FREEZE_TRANS on XFS, and so need the > > same fix. That race has had one previous attempt at fixing it in > > XFS but that's not possible: > > > > b2ce397 Revert "xfs: fix filesystsem freeze race in xfs_trans_alloc" > > 7a249cf xfs: fix filesystsem freeze race in xfs_trans_alloc > > > > It was looking at that problem earlier today that lead to the > > solution Eric proposed. Essentially the method in these patches > > needs to replace the xfs specifc m_active_trans counter and delay > > during ->fs_freeze to prevent that race condition.... > OK, I see. I just checked ext4 to make sure and ext4 seems to get this > right. Looking into Christoph's original patch it shouldn't be hard to fix > it. Instead of: > atomic_inc(&mp->m_active_trans); > > if (wait_for_freeze) > xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); > > we just need to do a bit more elaborate > > retry: > if (wait_for_freeze) > xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); > atomic_inc(&mp->m_active_trans); > if (wait_for_freeze && mp->m_super->s_frozen >= SB_FREEZE_TRANS) { > atomic_dec(&mp->m_active_trans); > goto retry; > } > > Or does XFS support nested transactions (i.e. a thread already holding a > running transaction can call into xfs_trans_alloc() again)? > That would make things more complicated... You're still missing the point - that this isn't an XFS specific problem or that the write problem is a ext4 specific problem. The problem is that these are freeze state transition problems - something that can affect every filesystem because the freeze code is generic. Quite frankly, I'm not interested in having a generic solution for SB_FREEZE_WRITE and a custom, per filesystem solution for SB_FREEZE_TRANS when the solution is exactly the same. > Using sb_start_write() instead of m_active_trans won't be that easy because > it can create A-A deadlocks (e.g. we do sb_start_write in > block_page_mkwrite() and then xfs_get_blocks() decides to start a > transaction and calls sb_start_write() again which might block if > filesystem freezing started in the mean time). So, like Eric said in his first email, it's not a "write start/end" interface that is needed, the interface has to work with different freeze levels (e.g "sb_freeze_ref(sb, level)/sb_freeze_drop(sb, level)"). Sure, internally it would have to map to two counters and different level checks, but it solves the same problem for all levels of freeze for all filesystems. Let's fix this freeze problem once and for all in the generic code, and not have to keep coming back to it to add more functioanlity for different situations the most recent fix didn't handle for random filesystem X.... > So it's up to XFS maintainers to decide what's best but I'd take > Christoph's patch with above fixup. I guess I'll put it in this series and > see what people say. Eric and I have already discussed and agreed to replacing the XFS sepcific code with the fixed VFS level API where other XFS developers including the "XFS Maintainers" (*) can see. Nobody has objected so I doubt there's any problem with doing so. Besides, anything that replaces custom XFS code with a better generic solution is pretty much guaranteed to be done. And given that this is not an XFS specifc problem and it needs be fixed at the VFS level..... Cheers, Dave. [*] keep in mind that "XFS Maintainer" is just a figurehead who maintains the tree that is sent to Linus, not the person with final say over what changes are made. That decision is made by the reviewers of the code... -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Jan 12 19:26:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D1QmtY053974 for ; Thu, 12 Jan 2012 19:26:48 -0600 X-ASG-Debug-ID: 1326418005-005fe612a97b6060001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id mzdIFNjobERUVKoB for ; Thu, 12 Jan 2012 17:26:46 -0800 (PST) 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: Av0EAKCGD095LbVq/2dsb2JhbABDrQ6BBoFyAQEFJxMcIxAIAw4KLhQlAyETvxoTiydjBJUNklE Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl2.internode.on.net with ESMTP; 13 Jan 2012 11:56:45 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RlVul-0003cE-Mp; Fri, 13 Jan 2012 12:26:43 +1100 Date: Fri, 13 Jan 2012 12:26:43 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, Surbhi Palande , Kamal Mostafa , Eric Sandeen , LKML , xfs@oss.sgi.com, Christoph Hellwig , Dave Chinner , linux-ext4@vger.kernel.org Subject: Re: [PATCH 1/4] fs: Improve filesystem freezing handling Message-ID: <20120113012643.GF2806@dastard> X-ASG-Orig-Subj: Re: [PATCH 1/4] fs: Improve filesystem freezing handling References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-2-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326331253-6497-2-git-send-email-jack@suse.cz> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1326418006 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85764 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 12, 2012 at 02:20:50AM +0100, Jan Kara wrote: > + * > + * Decrement number of writers to the filesystem and wake up possible > + * waiters wanting to freeze the filesystem. > + */ > +void sb_end_write(struct super_block *sb) > +{ > +#ifdef CONFIG_SMP > + this_cpu_dec(sb->s_writers); > +#else > + preempt_disable(); > + sb->s_writers--; > + preempt_enable(); > +#endif I really dislike this type of open coded per-cpu counter implementation. I can't see that there is no good reason to use it over percpu_counters here which abstract all this mess away. i.e. it is relatively rare that the per-cpu count will nest greater than the percpu_counter batch size (needs more than 32 concurrent blocked active writes per CPU), so there is no significant overhead to using the percpu_counters here. Indeed, if there are that many blocked writes per CPU, then the overhead of an occasional global counter update is going to be lost in the noise of everything else that is going on. Cheers, Dave. -- Dave Chinner david@fromorbit.com From jeff.liu@oracle.com Thu Jan 12 20:15:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D2FAVV057584 for ; Thu, 12 Jan 2012 20:15:10 -0600 X-ASG-Debug-ID: 1326420908-005fe612a87b8f30001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id CQ8Lg3PavuzA488G; Thu, 12 Jan 2012 18:15:08 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0D2F3VP008075 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 13 Jan 2012 02:15:04 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0D2F37f004867 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 13 Jan 2012 02:15:03 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0D2F2XI022022; Thu, 12 Jan 2012 20:15:02 -0600 Received: from [10.191.52.208] (/10.191.52.208) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 12 Jan 2012 18:15:02 -0800 Message-ID: <4F0F93A1.7040307@oracle.com> Date: Fri, 13 Jan 2012 10:14:57 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Christoph Hellwig CC: Mark Tinguely , Ben Myers , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFA11.7030305@sgi.com> <20120112163943.GA22223@infradead.org> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <20120112163943.GA22223@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet21.oracle.com [141.146.126.237] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090208.4F0F93A8.0072,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1326420908 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85766 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 01/13/2012 12:39 AM, Christoph Hellwig wrote: > On Wed, Jan 11, 2012 at 03:07:29PM -0600, Mark Tinguely wrote: >> >> xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole. >> There are a couple places that a hole can trigger a data test. >> BTW, I could not generate a large enough hole that xfs_bmapi_read() >> would return as more than one hole entry, so I will ignore those >> situations and just list the couple places that a hole may be match >> a data rule: > > We've been through this before, you need to overflow the 32-bit extent > length counter to get there. Jeff, did you manage to create a test > case for that particular scenario? Ok, I'll try it out. Thanks, -Jeff > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jeff.liu@oracle.com Thu Jan 12 20:42:05 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_52, J_CHICKENPOX_55 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D2g5IK059672 for ; Thu, 12 Jan 2012 20:42:05 -0600 X-ASG-Debug-ID: 1326422522-0222017aa38cd5d0001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id atASsSFstGtTGdsG; Thu, 12 Jan 2012 18:42:03 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0D2fwwe029873 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 13 Jan 2012 02:41:59 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0D2fvN2000583 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 13 Jan 2012 02:41:58 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0D2fv6K018544; Thu, 12 Jan 2012 20:41:57 -0600 Received: from [10.191.52.208] (/10.191.52.208) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 12 Jan 2012 18:41:56 -0800 Message-ID: <4F0F99F0.5060606@oracle.com> Date: Fri, 13 Jan 2012 10:41:52 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Mark Tinguely CC: Christoph Hellwig , Ben Myers , Chris Mason , xfs@oss.sgi.com Subject: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 References: <4F06F71A.2010301@oracle.com> <20120110171855.GX6390@sgi.com> <4F0D21E5.7010908@oracle.com> <4F0DFB20.7030704@sgi.com> <4F0EE5B6.2040408@oracle.com> <4F0EF5DC.1070207@sgi.com> X-ASG-Orig-Subj: Re: Introduce SEEK_DATA/SEEK_HOLE to XFS V5 In-Reply-To: <4F0EF5DC.1070207@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090204.4F0F99F7.002C,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1326422523 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85768 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On 01/12/2012 11:01 PM, Mark Tinguely wrote: > On 01/12/12 07:52, Jeff Liu wrote: >> Hi Mark, >> >> On 01/12/2012 05:12 AM, Mark Tinguely wrote: >> >>> xfs_has_unwritten_buffer() always returns the offset of the first >>> dirty unwritten page. This can cause xfs_seek_data() and xfs_seek_hole() >>> to give the wrong results in certain circumstances. >> >> Sorry, am was well understood your opinions in this point for now. >> IMHO, we can only find and return the data buffer offset at a dirty or >> unwritten page once the first page was probed. >> > > From my tests, xfs_bmapi_read() can only find holes if they cross or > start on a 64KB boundary. It would be nice if unwritten extents were at > least that good at finding holes. > > > In xfs_has_unwritten_buffer(), could you start searching from the seek > offset? The variable *offset could pass in that seek address and us that > offset as the starting "index" rather than the beginning of the extent? > > You start: > > index = XFS_FSB_TO_B(mp, map->br_startoff) >> PAGE_CACHE_SHIFT; > > Could we do?: > > index = XFS_FSB_TO_B(mp, *offset) >> PAGE_CACHE_SHIFT; > > And before calling xfs_has_unwritten_buffer(): > offset = seekoff; Good catch! Looks we need to examine the max value between seekoff and map->br_startoff, before passing it to xfs_has_unwritten_buffer(). For SEEK_DATA, if the seekoff is less than map->br_startoff, IMHO, we need to pass the map->br_startoff to it. > > Also, my idea to find the next data/hole requires that > xfs_has_unwritten_buffer() finds the smallest PAGECACHE_TAG_DIRTY or > PAGECACHE_TAG_WRITEBACK page if any starting at the seek offset. By combining with all your comments below, now I feel a bits clear about your opinions. :) I think it is definitely needed if we continue to use the current idea, i.e, probing the unwritten extent twice(DIRTY, WRITEBACK). Thanks, -Jeff > > >>> >>> In xfs_seek_data(), every page past first dirty/unwritten page in the >>> unwritten extent will be reported as data. >> >> Hmm, consider the user level utility that make use of SEEK_XXX stuff to >> copy data from an offset in source file: >> >> Generally, it will call xfs_seek_data() firstly, >> if we read an unwritten extent and there is data buffer was probed in >> xfs_seek_data(), it only means we can read file data starting from the >> returned offset of xfs_has_unwritten_buffer(). >> >> Then it will call xfs_seek_hole() to calculate this extent length. >> next, a couple of read()/write() will be called in a loop depending on >> the extent length. >> >> [ page 1 ] | [ page 2 ] | [ page 3 ] | .... [ page N ] >> |data offset at page 2| >> >> If we got the data offset from page2, and there is no data at page 3, >> the user utility call read(2) will returns ZERO, and it will break >> immediately. >> > > Something like: > loop > s = lseek(fd, off, SEEK_DATA); > if (s == -1) > if we errno == ENXIO > return done /* eof */ > else > return errno > > e = lseek(fd, s, SEEK_HOLE); > if (e == -1) > return errno > > dest = copy from s to e > off = e > end loop (if not eof or other condition) > > You will seek for next hole at the found data position. Even if > xfs_has_unwritten_buffer() does the right thing and returns the > dirty/unwritten page starting from seekoff, we need go a page past the > current page (which has data) to look for the next hole. > > > > Something like (again psuedo-code) > loop > offset1 = offset2 = seekoff > xfs_has_unwritten_buffer(seekoff, &offset1, DIRTY) > xfs_has_unwritten_buffer(seekoff, &offset2, WRITEBACK) > d = min(offset1, offset2) > > if (d > seekoff OR d == NULL) > return found a hole at seekoff > > if (d == seekoff) /* standard case assuming how we > * use SEEK_DATA/SEEK_HOLE > * This is the step your code > * does not perform. It jumps > * to the next extent > */ > seekoff += page size of dirty/writeback ** > end while the seekoff < extent size > > ** here we could jump to the next 64KB boundary and be as accurate as > xfs_bmapi_read(). > > Good job. This is an important feature. > > --Mark Tinguely. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From mitsuo.hayasaka.hu@hitachi.com Thu Jan 12 20:47:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D2l71g060045 for ; Thu, 12 Jan 2012 20:47:07 -0600 X-ASG-Debug-ID: 1326422824-0222017aa48cc290001-NocioJ Received: from mail7.hitachi.co.jp (mail7.hitachi.co.jp [133.145.228.42]) by cuda.sgi.com with ESMTP id O3EAp34xTorP2VJl; Thu, 12 Jan 2012 18:47:05 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.42 Received: from mlsv4.hitachi.co.jp (unknown [133.144.234.166]) by mail7.hitachi.co.jp (Postfix) with ESMTP id E4ECE37AC2; Fri, 13 Jan 2012 11:47:03 +0900 (JST) Received: from mfilter04.hitachi.co.jp by mlsv4.hitachi.co.jp (8.13.1/8.13.1) id q0D2l3Ds026185; Fri, 13 Jan 2012 11:47:03 +0900 Received: from vshuts2.hitachi.co.jp (vshuts2.hitachi.co.jp [10.201.6.71]) by mfilter04.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0D2l2pT010505; Fri, 13 Jan 2012 11:47:03 +0900 X-AuditID: b753bd60-99661ba00000359c-5f-4f0f9b268e57 Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts2.hitachi.co.jp (Symantec Mail Security) with ESMTP id 985928B0338; Fri, 13 Jan 2012 11:47:02 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0D2l2n5028205; Fri, 13 Jan 2012 11:47:02 +0900 X-AuditID: b753bd60-99661ba00000359c-5f-4f0f9b268e57 Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 25729236561; Fri, 13 Jan 2012 11:44:41 +0900 (JST) Received: from [127.0.0.1] (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 4C30A12550C; Fri, 13 Jan 2012 11:46:52 +0900 (JST) Message-ID: <4F0F9B1C.3050206@hitachi.com> Date: Fri, 13 Jan 2012 11:46:52 +0900 From: HAYASAKA Mitsuo User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Christoph Hellwig Cc: Ben Myers , Alex Elder , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [RFC PATCH] xfs: show uuid when mount fails due to duplicate uuid References: <20120112024720.3952.73517.stgit@ltc219.sdl.hitachi.co.jp> <20120112161410.GA3810@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH] xfs: show uuid when mount fails due to duplicate uuid In-Reply-To: <20120112161410.GA3810@infradead.org> Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail7.hitachi.co.jp[133.145.228.42] X-Barracuda-Start-Time: 1326422825 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -0.00 X-Barracuda-Spam-Status: No, SCORE=-0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ISO2022JP_CHARSET X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85768 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 ISO2022JP_CHARSET ISO-2022-JP message X-Virus-Status: Clean Hi Christoph, Thank you for your comment. (2012/01/13 1:14), Christoph Hellwig wrote: > On Thu, Jan 12, 2012 at 11:47:20AM +0900, Mitsuo Hayasaka wrote: >> When a system tries to mount a filesystem (FS) using UUID, the xfs >> returns -EINVAL and shows a message if a FS with the same UUID has >> been already mounted. It is useful to output the duplicate UUID >> with it. > > Looks good to me, > > > Reviewed-by: Christoph Hellwig > >> - xfs_warn(mp, "Filesystem has duplicate UUID - can't mount"); >> + xfs_warn(mp, >> + "Filesystem has duplicate UUID - can't mount: uuid = %pU", >> + uuid); > > Maybe we could write this a bit nicer as: > > xfs_warn(mp, "Filesystem has duplicate UUID %p - can't mount", uuid); > It looks nice. I will send the revised patch soon. Thanks. From david@fromorbit.com Thu Jan 12 22:34:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D4YFJ3069721 for ; Thu, 12 Jan 2012 22:34:16 -0600 X-ASG-Debug-ID: 1326429253-0222017aa38d8d70001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id XInSLlfHSctchxPs for ; Thu, 12 Jan 2012 20:34:14 -0800 (PST) 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: Ar0FAPOwD095LbVq/2dsb2JhbABDnmKOLoEGgXIBAQU6HCMQCAMOCi4UJQMhExu/ABOMCgSVDYkgiTE Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl2.internode.on.net with ESMTP; 13 Jan 2012 15:04:13 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RlYqB-0003wN-G6; Fri, 13 Jan 2012 15:34:11 +1100 Date: Fri, 13 Jan 2012 15:34:11 +1100 From: Dave Chinner To: Allison Henderson Cc: Ext4 Developers List , Lukas Czerner , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex Message-ID: <20120113043411.GH2806@dastard> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex References: <4F0F9E97.1090403@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0F9E97.1090403@linux.vnet.ibm.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: 1326429253 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85776 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Thu, Jan 12, 2012 at 08:01:43PM -0700, Allison Henderson wrote: > Hi All, > > I know this is an old topic, but I am poking it again because I've > had some work items wrap up, and Im planning on picking up on this > one again. I am thinking about implementing extent locks to replace > i_mutex. So I just wanted to touch base with folks and see what > people are working on because I know there were some folks out there > that were thing about doing similar solutions. What locking API are you looking at? If you are looking at an something like: read_range_{try}lock(lock, off, len) read_range_unlock(lock, off, len) write_range_{try}lock(lock, off, len) write_range_unlock(lock, off, len) and implementing with an rbtree or a btree for tracking, then I definitely have a use for it in XFS - replacing the current rwsem that is used for the iolock. Range locks like this are the only thing we need to allow concurrent buffered writes to the same file to maintain the per-write exclusion that posix requires. Cheers, Dave. -- Dave Chinner david@fromorbit.com From mitsuo.hayasaka.hu@hitachi.com Thu Jan 12 23:53:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D5r4UJ077673 for ; Thu, 12 Jan 2012 23:53:04 -0600 X-ASG-Debug-ID: 1326433980-005fe612a67ca440001-NocioJ Received: from mail7.hitachi.co.jp (mail7.hitachi.co.jp [133.145.228.42]) by cuda.sgi.com with ESMTP id Z6FWYwaMWjb0sYqH; Thu, 12 Jan 2012 21:53:01 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.42 Received: from mlsv5.hitachi.co.jp (unknown [133.144.234.166]) by mail7.hitachi.co.jp (Postfix) with ESMTP id 4972637AC5; Fri, 13 Jan 2012 14:53:00 +0900 (JST) Received: from mfilter05.hitachi.co.jp by mlsv5.hitachi.co.jp (8.13.1/8.13.1) id q0D5r0eb010622; Fri, 13 Jan 2012 14:53:00 +0900 Received: from vshuts3.hitachi.co.jp (vshuts3.hitachi.co.jp [10.201.6.72]) by mfilter05.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0D5qxIP015983; Fri, 13 Jan 2012 14:52:59 +0900 X-AuditID: b753bd60-a0885ba000000655-74-4f0fc6ba916c Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts3.hitachi.co.jp (Symantec Mail Security) with ESMTP id 5E38477424D; Fri, 13 Jan 2012 14:52:58 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0D5qvLl005425; Fri, 13 Jan 2012 14:52:57 +0900 X-AuditID: b753bd60-a0885ba000000655-74-4f0fc6ba916c Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 8B378236561; Fri, 13 Jan 2012 14:50:36 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 163A112550C; Fri, 13 Jan 2012 14:52:48 +0900 (JST) From: Mitsuo Hayasaka Subject: [PATCH] xfs: show uuid when mount fails due to duplicate uuid To: Ben Myers , Alex Elder , Christoph Hellwig X-ASG-Orig-Subj: [PATCH] xfs: show uuid when mount fails due to duplicate uuid Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com, Mitsuo Hayasaka , Ben Myers , Alex Elder , Christoph Hellwig Date: Fri, 13 Jan 2012 14:58:39 +0900 Message-ID: <20120113055839.12919.98763.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail7.hitachi.co.jp[133.145.228.42] X-Barracuda-Start-Time: 1326433980 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85782 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean When a system tries to mount a filesystem (FS) using UUID, the xfs returns -EINVAL and shows a message if a FS with the same UUID has been already mounted. It is useful to output the duplicate UUID with it. Signed-off-by: Mitsuo Hayasaka Reviewed-by: Christoph Hellwig Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig --- fs/xfs/xfs_mount.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index d06afbc..e07f852 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -158,7 +158,7 @@ xfs_uuid_mount( out_duplicate: mutex_unlock(&xfs_uuid_table_mutex); - xfs_warn(mp, "Filesystem has duplicate UUID - can't mount"); + xfs_warn(mp, "Filesystem has duplicate UUID %pU - can't mount", uuid); return XFS_ERROR(EINVAL); } From tm@tao.ma Fri Jan 13 01:15:01 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0D7F0KH086884 for ; Fri, 13 Jan 2012 01:15:01 -0600 X-ASG-Debug-ID: 1326438898-00a9eb65e62197d0001-NocioJ Received: from oproxy9.bluehost.com (oproxy9.bluehost.com [69.89.24.6]) by cuda.sgi.com with SMTP id oRkbF01AnPup4bis for ; Thu, 12 Jan 2012 23:14:58 -0800 (PST) X-Barracuda-Envelope-From: tm@tao.ma X-Barracuda-Apparent-Source-IP: 69.89.24.6 Received: (qmail 2796 invoked by uid 0); 13 Jan 2012 07:14:58 -0000 Received: from unknown (HELO box585.bluehost.com) (66.147.242.185) by oproxy9.bluehost.com with SMTP; 13 Jan 2012 07:14:58 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tao.ma; s=default; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:References:Subject:CC:To:MIME-Version:From:Date:Message-ID; bh=DejZnNHFoLKem/DaQL+8zBpJ80QuQPymm1La9mEEqaQ=; b=MZyjOhZ2GYH1xPNqt/5/D3CKNkPUh88h/ipFQV97tCOQf2QNxXs/DHYdx115jkxs9a+PWsdcS0wcnseoURg0A/RSzIwYCDBcVm9ir7BgvLOdnxEq7m2oCgKdJlH0cLfY; Received: from [182.92.247.2] (helo=[10.32.101.229]) by box585.bluehost.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.76) (envelope-from ) id 1RlbLl-0007f0-RN; Fri, 13 Jan 2012 00:14:58 -0700 Message-ID: <4F0FD9EB.5050707@tao.ma> Date: Fri, 13 Jan 2012 15:14:51 +0800 From: Tao Ma User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111109 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: Allison Henderson , Ext4 Developers List , Lukas Czerner , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex In-Reply-To: <20120113043411.GH2806@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Identified-User: {1390:box585.bluehost.com:colyli:tao.ma} {sentby:smtp auth 182.92.247.2 authed with tm@tao.ma} X-Barracuda-Connect: oproxy9.bluehost.com[69.89.24.6] X-Barracuda-Start-Time: 1326438898 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85787 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 X-Virus-Status: Clean On 01/13/2012 12:34 PM, Dave Chinner wrote: > On Thu, Jan 12, 2012 at 08:01:43PM -0700, Allison Henderson wrote: >> Hi All, >> >> I know this is an old topic, but I am poking it again because I've >> had some work items wrap up, and Im planning on picking up on this >> one again. I am thinking about implementing extent locks to replace >> i_mutex. So I just wanted to touch base with folks and see what >> people are working on because I know there were some folks out there >> that were thing about doing similar solutions. > > What locking API are you looking at? If you are looking at an > something like: > > read_range_{try}lock(lock, off, len) > read_range_unlock(lock, off, len) > write_range_{try}lock(lock, off, len) > write_range_unlock(lock, off, len) > > and implementing with an rbtree or a btree for tracking, then I > definitely have a use for it in XFS - replacing the current rwsem > that is used for the iolock. Range locks like this are the only > thing we need to allow concurrent buffered writes to the same file > to maintain the per-write exclusion that posix requires. Interesting, so xfs already have these range lock, right? If yes, any possibility that the code can be reused in ext4 since we have the same thing in mind but don't have any resource to work on it by now. btw, IIRC flock(2) uses a list to indicate the range lock, so if we can make these pieces of codes common, at least there are 3 places that can benefit from it. ;) Thanks Tao From jack@suse.cz Fri Jan 13 04:12:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DACPMv107689 for ; Fri, 13 Jan 2012 04:12:25 -0600 X-ASG-Debug-ID: 1326449542-0222017aa58fd930001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id rsTm9oOgzwUh0wDo for ; Fri, 13 Jan 2012 02:12:23 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id C2535906EB; Fri, 13 Jan 2012 11:12:21 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 2F62A205DD; Fri, 13 Jan 2012 11:12:20 +0100 (CET) Date: Fri, 13 Jan 2012 11:12:20 +0100 From: Jan Kara To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, Surbhi Palande , Kamal Mostafa , Eric Sandeen , LKML , xfs@oss.sgi.com, Christoph Hellwig , Dave Chinner , linux-ext4@vger.kernel.org Subject: Re: [PATCH 1/4] fs: Improve filesystem freezing handling Message-ID: <20120113101220.GA13641@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/4] fs: Improve filesystem freezing handling References: <1326331253-6497-1-git-send-email-jack@suse.cz> <1326331253-6497-2-git-send-email-jack@suse.cz> <20120113012643.GF2806@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120113012643.GF2806@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326449543 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85798 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Fri 13-01-12 12:26:43, Dave Chinner wrote: > On Thu, Jan 12, 2012 at 02:20:50AM +0100, Jan Kara wrote: > > + * > > + * Decrement number of writers to the filesystem and wake up possible > > + * waiters wanting to freeze the filesystem. > > + */ > > +void sb_end_write(struct super_block *sb) > > +{ > > +#ifdef CONFIG_SMP > > + this_cpu_dec(sb->s_writers); > > +#else > > + preempt_disable(); > > + sb->s_writers--; > > + preempt_enable(); > > +#endif > > I really dislike this type of open coded per-cpu counter > implementation. I can't see that there is no good reason to use it > over percpu_counters here which abstract all this mess away. > > i.e. it is relatively rare that the per-cpu count will nest > greater than the percpu_counter batch size (needs more than 32 > concurrent blocked active writes per CPU), so there is no > significant overhead to using the percpu_counters here. > > Indeed, if there are that many blocked writes per CPU, then the > overhead of an occasional global counter update is going to be lost > in the noise of everything else that is going on. Well, I just did it the way mnt_want_write / mnt_put_write does it. But you are right that it's unnecessary so it's a good idea to switch the code to using per-cpu counters. Thanks for the idea. Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Fri Jan 13 05:08:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DB820F117200 for ; Fri, 13 Jan 2012 05:08:03 -0600 X-ASG-Debug-ID: 1326452880-00a9eb65e5231fe0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id oL8iq6GgtgYc7EVh for ; Fri, 13 Jan 2012 03:08:01 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 36CBA90F2E; Fri, 13 Jan 2012 12:08:00 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 1A807205DD; Fri, 13 Jan 2012 12:07:59 +0100 (CET) Date: Fri, 13 Jan 2012 12:07:59 +0100 From: Jan Kara To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, LKML , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig Subject: Re: [PATCH 0/4] Fix filesystem freezing Message-ID: <20120113110759.GB13641@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 0/4] Fix filesystem freezing References: <1326331253-6497-1-git-send-email-jack@suse.cz> <20120112024841.GB2806@dastard> <20120112113031.GA8778@quack.suse.cz> <20120113000932.GD2806@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120113000932.GD2806@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1326452880 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85803 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Fri 13-01-12 11:09:32, Dave Chinner wrote: > On Thu, Jan 12, 2012 at 12:30:31PM +0100, Jan Kara wrote: > > On Thu 12-01-12 13:48:41, Dave Chinner wrote: > > > On Thu, Jan 12, 2012 at 02:20:49AM +0100, Jan Kara wrote: > > > > > > > > Hello, > > > > > > > > filesystem freezing is currently racy and thus we can end up with dirty data > > > > on frozen filesystem (see changelog of the first patch for detailed race > > > > description and proposed fix). This patch series aims at fixing this. > > > > > > It only fixes the dirty data race (i.e. SB_FREEZE_WRITE). The same > > > race conditions exist for SB_FREEZE_TRANS on XFS, and so need the > > > same fix. That race has had one previous attempt at fixing it in > > > XFS but that's not possible: > > > > > > b2ce397 Revert "xfs: fix filesystsem freeze race in xfs_trans_alloc" > > > 7a249cf xfs: fix filesystsem freeze race in xfs_trans_alloc > > > > > > It was looking at that problem earlier today that lead to the > > > solution Eric proposed. Essentially the method in these patches > > > needs to replace the xfs specifc m_active_trans counter and delay > > > during ->fs_freeze to prevent that race condition.... > > OK, I see. I just checked ext4 to make sure and ext4 seems to get this > > right. Looking into Christoph's original patch it shouldn't be hard to fix > > it. Instead of: > > atomic_inc(&mp->m_active_trans); > > > > if (wait_for_freeze) > > xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); > > > > we just need to do a bit more elaborate > > > > retry: > > if (wait_for_freeze) > > xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); > > atomic_inc(&mp->m_active_trans); > > if (wait_for_freeze && mp->m_super->s_frozen >= SB_FREEZE_TRANS) { > > atomic_dec(&mp->m_active_trans); > > goto retry; > > } > > > > Or does XFS support nested transactions (i.e. a thread already holding a > > running transaction can call into xfs_trans_alloc() again)? > > That would make things more complicated... > > You're still missing the point - that this isn't an XFS specific > problem or that the write problem is a ext4 specific problem. The > problem is that these are freeze state transition problems - > something that can affect every filesystem because the freeze code > is generic. Quite frankly, I'm not interested in having a generic > solution for SB_FREEZE_WRITE and a custom, per filesystem solution > for SB_FREEZE_TRANS when the solution is exactly the same. I understand that both state transitions are currently racy. Just ext3, ext4, reiserfs, gfs2, or btrfs do not really care about SB_FREEZE_TRANS transition because they all grew their own synchronization mechanisms for that. XFS is the only filesystem I know of which really relies on this transition. That's why I originally decided to fixup SB_FREEZE_TRANS transition only in XFS and not in VFS. But on a second thought I tend to agree with you that VFS should provide a way to do race-free transition to both states so that filesystems that want to use it can use it. So I'll add a second counter for that. > > Using sb_start_write() instead of m_active_trans won't be that easy because > > it can create A-A deadlocks (e.g. we do sb_start_write in > > block_page_mkwrite() and then xfs_get_blocks() decides to start a > > transaction and calls sb_start_write() again which might block if > > filesystem freezing started in the mean time). > > So, like Eric said in his first email, it's not a "write start/end" > interface that is needed, the interface has to work with different > freeze levels (e.g "sb_freeze_ref(sb, level)/sb_freeze_drop(sb, > level)"). Sure, internally it would have to map to two counters and > different level checks, but it solves the same problem for all > levels of freeze for all filesystems. > > Let's fix this freeze problem once and for all in the generic code, > and not have to keep coming back to it to add more functioanlity for > different situations the most recent fix didn't handle for random > filesystem X.... Yeah. I think ext3/4 could be converted to the generic mechanism (although it won't be completely trivial since it uses the internal mechanism also for other things than filesystem freezing). Honza -- Jan Kara SUSE Labs, CR From david@fromorbit.com Fri Jan 13 05:52:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DBqb2t122968 for ; Fri, 13 Jan 2012 05:52:38 -0600 X-ASG-Debug-ID: 1326455555-0222017aa4908660001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id xsVwp3n636SGFB9T for ; Fri, 13 Jan 2012 03:52:36 -0800 (PST) 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: Av0EAIQaEE95LbVq/2dsb2JhbABCrReBBoFyAQEEATocIwULCAMOCi4UJQMhExuHX7cwE4wKBJURiSKJMg Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail06.adl2.internode.on.net with ESMTP; 13 Jan 2012 22:22:34 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RlfgO-0004d0-Sj; Fri, 13 Jan 2012 22:52:32 +1100 Date: Fri, 13 Jan 2012 22:52:32 +1100 From: Dave Chinner To: Tao Ma Cc: Allison Henderson , Ext4 Developers List , Lukas Czerner , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex Message-ID: <20120113115232.GI2806@dastard> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> <4F0FD9EB.5050707@tao.ma> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F0FD9EB.5050707@tao.ma> 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: 1326455555 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85806 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Fri, Jan 13, 2012 at 03:14:51PM +0800, Tao Ma wrote: > On 01/13/2012 12:34 PM, Dave Chinner wrote: > > On Thu, Jan 12, 2012 at 08:01:43PM -0700, Allison Henderson wrote: > >> Hi All, > >> > >> I know this is an old topic, but I am poking it again because I've > >> had some work items wrap up, and Im planning on picking up on this > >> one again. I am thinking about implementing extent locks to replace > >> i_mutex. So I just wanted to touch base with folks and see what > >> people are working on because I know there were some folks out there > >> that were thing about doing similar solutions. > > > > What locking API are you looking at? If you are looking at an > > something like: > > > > read_range_{try}lock(lock, off, len) > > read_range_unlock(lock, off, len) > > write_range_{try}lock(lock, off, len) > > write_range_unlock(lock, off, len) > > > > and implementing with an rbtree or a btree for tracking, then I > > definitely have a use for it in XFS - replacing the current rwsem > > that is used for the iolock. Range locks like this are the only > > thing we need to allow concurrent buffered writes to the same file > > to maintain the per-write exclusion that posix requires. > Interesting, so xfs already have these range lock, right? If yes, any > possibility that the code can be reused in ext4 since we have the same > thing in mind but don't have any resource to work on it by now. No, it doesn't have range locks. If has separate locks for IO exclusion vs metadata modification (i_iolock vs i_ilock). Both are rwsems, the ilock nests inside and protects the extent list and other metadata. What I want to do is replace the i_iolock with a read/write range lock so that we can do sane cache coherent concurrent IO to separate ranges of the file. We can't do concurrent modifications to the extent tree, so we have no need for changing the i_ilock (metadata) lock to range locks. > btw, IIRC flock(2) uses a list to indicate the range lock, so if we can > make these pieces of codes common, at least there are 3 places that can > benefit from it. ;) flock is way more complex than simple read/write range locks and has fixed semantics and lots of scope for difficult to find regressions, so I wouldn't even bother trying to support them... Cheers, Dave. -- Dave Chinner david@fromorbit.com From tm@tao.ma Fri Jan 13 05:57:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DBvUt3123574 for ; Fri, 13 Jan 2012 05:57:30 -0600 X-ASG-Debug-ID: 1326455848-00a9eb65e6238790001-NocioJ Received: from oproxy4-pub.bluehost.com (oproxy4-pub.bluehost.com [69.89.21.11]) by cuda.sgi.com with SMTP id EiXivAa9LYiLHbOi for ; Fri, 13 Jan 2012 03:57:28 -0800 (PST) X-Barracuda-Envelope-From: tm@tao.ma X-Barracuda-Apparent-Source-IP: 69.89.21.11 Received: (qmail 12507 invoked by uid 0); 13 Jan 2012 11:57:28 -0000 Received: from unknown (HELO box585.bluehost.com) (66.147.242.185) by cpoproxy1.bluehost.com with SMTP; 13 Jan 2012 11:57:27 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tao.ma; s=default; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:References:Subject:CC:To:MIME-Version:From:Date:Message-ID; bh=G5QT2MwNOW4S0dB+evuKKUSRkjem31/2f9P2Pj+iwcw=; b=qmNpm6aa8OTQauHHeyquA83F7V34paieG/GVoNru5ygjcjCH1CBW2IczoFR+K4H/9GoUZLfVtWRlWGHwAKqBOlu5Rz4opOS9peKmm37CuAV47weMwkiB3bte2/sYkGbT; Received: from [182.92.247.2] (helo=[10.32.101.229]) by box585.bluehost.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.76) (envelope-from ) id 1Rlfl9-0001VJ-I5; Fri, 13 Jan 2012 04:57:27 -0700 Message-ID: <4F101C21.1050708@tao.ma> Date: Fri, 13 Jan 2012 19:57:21 +0800 From: Tao Ma User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111109 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: Allison Henderson , Ext4 Developers List , Lukas Czerner , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> <4F0FD9EB.5050707@tao.ma> <20120113115232.GI2806@dastard> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex In-Reply-To: <20120113115232.GI2806@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Identified-User: {1390:box585.bluehost.com:colyli:tao.ma} {sentby:smtp auth 182.92.247.2 authed with tm@tao.ma} X-Barracuda-Connect: oproxy4-pub.bluehost.com[69.89.21.11] X-Barracuda-Start-Time: 1326455848 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85805 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 X-Virus-Status: Clean On 01/13/2012 07:52 PM, Dave Chinner wrote: > On Fri, Jan 13, 2012 at 03:14:51PM +0800, Tao Ma wrote: >> On 01/13/2012 12:34 PM, Dave Chinner wrote: >>> On Thu, Jan 12, 2012 at 08:01:43PM -0700, Allison Henderson wrote: >>>> Hi All, >>>> >>>> I know this is an old topic, but I am poking it again because I've >>>> had some work items wrap up, and Im planning on picking up on this >>>> one again. I am thinking about implementing extent locks to replace >>>> i_mutex. So I just wanted to touch base with folks and see what >>>> people are working on because I know there were some folks out there >>>> that were thing about doing similar solutions. >>> >>> What locking API are you looking at? If you are looking at an >>> something like: >>> >>> read_range_{try}lock(lock, off, len) >>> read_range_unlock(lock, off, len) >>> write_range_{try}lock(lock, off, len) >>> write_range_unlock(lock, off, len) >>> >>> and implementing with an rbtree or a btree for tracking, then I >>> definitely have a use for it in XFS - replacing the current rwsem >>> that is used for the iolock. Range locks like this are the only >>> thing we need to allow concurrent buffered writes to the same file >>> to maintain the per-write exclusion that posix requires. >> Interesting, so xfs already have these range lock, right? If yes, any >> possibility that the code can be reused in ext4 since we have the same >> thing in mind but don't have any resource to work on it by now. > > No, it doesn't have range locks. If has separate locks for IO > exclusion vs metadata modification (i_iolock vs i_ilock). Both are > rwsems, the ilock nests inside and protects the extent list and > other metadata. > > What I want to do is replace the i_iolock with a read/write range > lock so that we can do sane cache coherent concurrent IO to separate > ranges of the file. We can't do concurrent modifications to the > extent tree, so we have no need for changing the i_ilock (metadata) > lock to range locks. OK, I see. Thanks for the information. > > >> btw, IIRC flock(2) uses a list to indicate the range lock, so if we can >> make these pieces of codes common, at least there are 3 places that can >> benefit from it. ;) > > flock is way more complex than simple read/write range locks and has > fixed semantics and lots of scope for difficult to find regressions, > so I wouldn't even bother trying to support them... fair enough. :) Thanks Tao From tinguely@sgi.com Fri Jan 13 09:18:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DFIhEF142286 for ; Fri, 13 Jan 2012 09:18:43 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 69E1E8F8035; Fri, 13 Jan 2012 07:18:40 -0800 (PST) Message-ID: <4F104B51.3090706@sgi.com> Date: Fri, 13 Jan 2012 09:18:41 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 08/12] repair: handle filesystems with the log in allocation group 0 References: <20111202174619.179530033@bombadil.infradead.org> <20111202174742.515301323@bombadil.infradead.org> In-Reply-To: <20111202174742.515301323@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > Sindre Skogen reported that repair chokes on a very small filesystem created > by mkfs.xfs from xfsprogs 2.9.4. It turned out that for some reason this > filesystem had the log in allocation group 0 and thus repairs validation > of the root inode number was off. Fix this by adding the log blocks if > the log is allocated in allocation group 0. > Reviewed-by: Mark Tinguely From eflorac@intellique.com Fri Jan 13 10:47:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DGljcV148673 for ; Fri, 13 Jan 2012 10:47:45 -0600 X-ASG-Debug-ID: 1326473260-00a9eb65e72614a0001-NocioJ Received: from smtp4-g21.free.fr (smtp4-g21.free.fr [212.27.42.4]) by cuda.sgi.com with ESMTP id LLhENNnPYIPKN7zj for ; Fri, 13 Jan 2012 08:47:41 -0800 (PST) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.4 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp4-g21.free.fr (Postfix) with ESMTP id 8A5474C843D for ; Fri, 13 Jan 2012 17:47:37 +0100 (CET) Date: Fri, 13 Jan 2012 17:47:39 +0100 From: Emmanuel Florac To: "xfs@oss.sgi.com" Subject: xfs version and kernels Message-ID: <20120113174739.26ae0c07@harpe.intellique.com> X-ASG-Orig-Subj: xfs version and kernels Organization: Intellique X-Mailer: Claws Mail 3.7.9 (GTK+ 2.16.6; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtp4-g21.free.fr[212.27.42.4] X-Barracuda-Start-Time: 1326473260 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85825 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Today, for the second time in a couple of weeks I had an XFS filesystem that was set up (and filled up) running some kernel that I was unable to mount on a machine running an older kernel. The first time, it was a volume mkfs'd on some recent OpenSuse (kernel version unknown), that couldn't mount on a RedHat 5.3 (antediluvian kernel 2.6.18-128.el5 ). running xfs_db version gave this: versionnum [0xb4a4+0xa] = V4,NLINK,ALIGN,DALIGN,DIRV2,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT Today, a volume mkfs'd running 2.6.35 couldn't mount on 2.6.20. I fortunately was able to update the running kernel to 2.6.32, and that worked fine from there. This FS had this version flags : versionnum [0xb5a4+0xa] = V4,NLINK,ALIGN,DALIGN,DIRV2,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT The native xfs tools would create an XFS with these flags instead: versionnum [0x3094+0x0] = V4,ATTR,ALIGN,DIRV2,EXTFLG Is there some way out of a kernel upgrade, to mount a recent XFS volume on an older system? Particularly on these goddamned RHEL 5.x systems which are both so very common and very out of date? -- ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From tinguely@sgi.com Fri Jan 13 11:18:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DHI55E150552 for ; Fri, 13 Jan 2012 11:18:05 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id EFBBC30404E; Fri, 13 Jan 2012 09:18:01 -0800 (PST) Message-ID: <4F10674B.7030904@sgi.com> Date: Fri, 13 Jan 2012 11:18:03 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 05/12] repair: update extent count after zapping duplicate blocks References: <20111202174619.179530033@bombadil.infradead.org> <20111202174741.904845954@bombadil.infradead.org> In-Reply-To: <20111202174741.904845954@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > When we find a duplicate extent in an extern format inode we do not zap > the whole inode, but just truncate it to the point where the duplicate > extent was found. But the current code only updates di_nblocks for the > new size, but no di_nextents/di_anextents. In most cases this isn't noticed, > but when moving such an inode to the lost+found directoy the consistency > check in xfs_iformat trips over it. Fix this by updating the on-disk > extent count as part of the inode repair. > > Note that we zap btree format inodes with duplicate block completely > at this point, so this fix doesn't apply to them. > > Reported-by: Arkadiusz Mi??kiewicz > Tested-by: Arkadiusz Mi??kiewicz > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/repair/dinode.c > =================================================================== > --- xfsprogs-dev.orig/repair/dinode.c 2011-11-08 12:15:40.000000000 +0000 > +++ xfsprogs-dev/repair/dinode.c 2011-11-14 12:09:54.000000000 +0000 > @@ -2003,6 +2016,12 @@ process_inode_blocks_and_extents( > xfs_ino_t lino, > int *dirty) > { > + if (nblocks< nextents + anextents) { > + do_warn( > +_("nblocks (%" PRIu64 ") smaller than nextents for inode %" PRIu64 "\n"), nblocks, lino); > + return 1; > + } > + I agree with David on an inserted comment and relocation. I would not have figured out this test without David's observation. Reviewed-by: Mark Tinguely From pg_mh@V01.sabi.co.uk Fri Jan 13 12:36:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DIac9j154204 for ; Fri, 13 Jan 2012 12:36:39 -0600 X-ASG-Debug-ID: 1326479792-005fe612a6821fa0001-ps1ADW Received: from anakin.london.02.net (anakin.london.02.net [87.194.255.134]) by cuda.sgi.com with ESMTP id YfEJ3eTOp0cJ0uw9 for ; Fri, 13 Jan 2012 10:36:34 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.134 Received: from ty.sabi.co.UK (87.194.99.40) by anakin.london.02.net (8.5.140) id 4EEB63D20072A99B for xfs@OSS.SGI.com; Fri, 13 Jan 2012 18:36:32 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1Rllyn-0004Gu-8k for ; Fri, 13 Jan 2012 18:35:57 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Message-ID: <20240.31117.130540.618190@tree.ty.sabi.co.UK> Date: Fri, 13 Jan 2012 18:35:57 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: xfs version and kernels In-Reply-To: <20120113174739.26ae0c07@harpe.intellique.com> X-ASG-Orig-Subj: Re: xfs version and kernels References: <20120113174739.26ae0c07@harpe.intellique.com> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: anakin.london.02.net[87.194.255.134] X-Barracuda-Start-Time: 1326479794 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85832 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean > [ ... ] couldn't mount on a RedHat 5.3 (antediluvian kernel > 2.6.18-128.el5 ). > running xfs=5Fdb version gave this: > versionnum [0xb4a4+0xa] =3D > V4,NLINK,ALIGN,DALIGN,DIRV2,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT Interesting issue. But on my SL57 64 bits I get: ---------------------------------------------------------------- versionnum [0xbd84+0x8] =3D V4,ALIGN,DALIGN,DIRV2,LOGV2,EXTFLG,SECTOR,M= OREBITS,ATTR2 ---------------------------------------------------------------- and that's with kernel 2-6.18-274.12.1.el5 which is nearly the latest. The only difference is 'LAZYSBCOUNT'. I suspect that you have omitted to mention whether the two systems are 64b or 32b or a mix, because IIRC there are some limitations with 32b XFS. Anyhow I did a search for some of those flags and there is a potentially relevant but old reply here: http://uk.centos.org/modules/newbb/viewtopic.php=3Ftopic=5Fid=3D25247= &forum=3D45 and it seems to be a 32b/64 issue, but not one that I espected: =ABMandriva LINUX uses 64-bit extents in its 32-bit kernel -- so an XFS volume created on that platform could be up to 16TB this doesn't seem to fly on a 32-bit CentOS host The 64-bit build of CentOS can mount Mandriva's XFS volumes fine=BB =ABWhen I saw you had kmod-xfs, I realized yours was 32-bit, therefore, running older version of xfs. The upstream vendor added the xfs support to the kernel as of 5.4 but it was only for x86=5F64. If you are running the 32-bit OS, then you are limited to the old code. I believe there is a plan to provide the xfs support (new code) for i686 and CentOS dev Tru is the lead.=BB That's interesting: the RedHat backports of newer XFS features were only done for the 64b build. However the reply is dated 2006, and a 2.6.18-128 kernel may well be more ancient than that, and since it is from 5.3, it is so old it does not have the backports in the 64b version either as that was done in 5.4. From tinguely@sgi.com Fri Jan 13 12:51:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DIplRY154724 for ; Fri, 13 Jan 2012 12:51:47 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 59A75304032; Fri, 13 Jan 2012 10:51:44 -0800 (PST) Message-ID: <4F107D41.8050204@sgi.com> Date: Fri, 13 Jan 2012 12:51:45 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 07/12] repair: fix another ABBA deadlock in inode prefetching References: <20111202174619.179530033@bombadil.infradead.org> <20111202174742.307774458@bombadil.infradead.org> In-Reply-To: <20111202174742.307774458@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > Index: xfsprogs-dev/repair/prefetch.c > =================================================================== > --- xfsprogs-dev.orig/repair/prefetch.c 2011-11-25 13:46:47.195999430 +0100 > +++ xfsprogs-dev/repair/prefetch.c 2011-11-25 13:50:41.264731371 +0100 > @@ -641,7 +641,18 @@ pf_queuing_worker( > pftrace("queuing irec %p in AG %d, sem count = %d", > irec, args->agno, i); > #endif > - sem_wait(&args->ra_count); > + err = sem_trywait(&args->ra_count); > + if (err == EAGAIN) { > + /* > + * Kick the queue once we have reached the limit; > + * without this the threads processing the inodes > + * might get stuck on a buffer that has been locked > + * and added to the I/O queue but is waiting for > + * the thread to be woken. > + */ > + pf_start_io_workers(args); > + sem_wait(&args->ra_count); > + } > > num_inos = 0; > bno = XFS_AGINO_TO_AGBNO(mp, cur_irec->ino_startnum); > Could the second sem_wait() also fail with EAGAIN? Reviewed-by: Mark Tinguely From bpm@sgi.com Fri Jan 13 13:07:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DJ7Iar155625 for ; Fri, 13 Jan 2012 13:07:19 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 75921AC002; Fri, 13 Jan 2012 11:07:15 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id A2A82426DA7; Fri, 13 Jan 2012 13:07:16 -0600 (CST) Date: Fri, 13 Jan 2012 13:07:16 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 05/11] xfs: make i_flags an unsigned long Message-ID: <20120113190716.GA6271@sgi.com> References: <20111208155755.323930705@bombadil.infradead.org> <20111208155918.348628833@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111208155918.348628833@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Dec 08, 2011 at 10:58:00AM -0500, Christoph Hellwig wrote: > To be used for bit wakeup i_flags needs to be an unsigned long or we'll > run into trouble on big endian systems. Beause of the 1-byte i_update Because > field right after it this actually causes a fairly large size increase > on its own (4 or 8 bytes), but that increase will be more than offset > by the next two patches. > > Signed-off-by: Christoph Hellwig > Reviewed-by: Alex Elder > Reviewed-by: Dave Chinner Looks good to me. But I could go for a thorough explanation of 'trouble on big endian systems'. Reviewed-by: Ben Myers > > --- > fs/xfs/xfs_inode.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: xfs/fs/xfs/xfs_inode.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.h 2011-11-30 12:58:58.449770178 +0100 > +++ xfs/fs/xfs/xfs_inode.h 2011-11-30 12:59:05.013067955 +0100 > @@ -242,7 +242,7 @@ typedef struct xfs_inode { > wait_queue_head_t i_ipin_wait; /* inode pinning wait queue */ > spinlock_t i_flags_lock; /* inode i_flags lock */ > /* Miscellaneous state. */ > - unsigned short i_flags; /* see defined flags below */ > + unsigned long i_flags; /* see defined flags below */ > unsigned char i_update_core; /* timestamps/size is dirty */ > unsigned int i_delayed_blks; /* count of delay alloc blks */ > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From tinguely@sgi.com Fri Jan 13 14:09:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DK9xU7158159 for ; Fri, 13 Jan 2012 14:09:59 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id D2E85304062; Fri, 13 Jan 2012 12:09:55 -0800 (PST) Message-ID: <4F108F95.3060606@sgi.com> Date: Fri, 13 Jan 2012 14:09:57 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH] repair: avoid ABBA deadlocks on prefetched buffers References: <20111115210953.GA6670@infradead.org> In-Reply-To: <20111115210953.GA6670@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > Both the prefetch threads and actual repair processing threads can have > multiple buffers at a time locked, but they do no use a common locker > order, which can lead to ABBA deadlocks while trying to lock the buffers. > > Switch the prefetch code to do a trylock and skip buffers that have > already been locked to avoid this deadlock. > > Reported-by: Arkadiusz Mi??kiewicz > Signed-off-by: Christoph Hellwig > Part of a series of fixes. Needed for " [PATCH 06/12] repair: use recursive buffer locking" patch. Reviewed-by: Mark Tinguely From tinguely@sgi.com Fri Jan 13 14:10:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DKAj9i158235 for ; Fri, 13 Jan 2012 14:10:46 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 64890304062; Fri, 13 Jan 2012 12:10:45 -0800 (PST) Message-ID: <4F108FC6.60901@sgi.com> Date: Fri, 13 Jan 2012 14:10:46 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: Re: [PATCH 06/12] repair: use recursive buffer locking References: <20111202174619.179530033@bombadil.infradead.org> <20111202174742.106589485@bombadil.infradead.org> <20111213022208.GZ14273@dastard> <20111218225445.GB20578@infradead.org> In-Reply-To: <20111218225445.GB20578@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On 01/-10/63 13:59, Christoph Hellwig wrote: > On Tue, Dec 13, 2011 at 01:22:08PM +1100, Dave Chinner wrote: >>> if (use_xfs_buf_lock) { >>> - if (flags& LIBXFS_GETBUF_TRYLOCK) { >>> - int ret; >>> + int ret; >>> >>> - ret = pthread_mutex_trylock(&bp->b_lock); >>> - if (ret) { >>> - ASSERT(ret == EAGAIN); >>> - cache_node_put(libxfs_bcache, (struct cache_node *)bp); >>> - return NULL; >>> + ret = pthread_mutex_trylock(&bp->b_lock); >>> + if (ret) { >>> + ASSERT(ret == EAGAIN); >>> + if (flags& LIBXFS_GETBUF_TRYLOCK) >>> + goto out_put; >>> + >>> + if (pthread_equal(bp->b_holder, pthread_self())) { >>> + fprintf(stderr, >>> + _("recursive buffer locking detected\n")); >> >> "Warning: recursive buffer locking @ bno %lld detected" >> >> might be more informative, especially to do with the severity of the >> issue. > > Ok, I'll make it print the block number. > >> >>> + bp->b_recur++; >>> + } else { >>> + pthread_mutex_lock(&bp->b_lock); >>> } >>> - } else { >>> - pthread_mutex_lock(&bp->b_lock); >>> } >>> + >>> + bp->b_holder = pthread_self(); >> >> That should probably only be written in the branch where the lock is >> taken not every time through here. > > We actually should return the buffer just after incrementing the > recursion count, else we might add it to the global list of buffers > twice. > > I liked the patch the way it was. I thought the placement of the setting of b_holder is correct because it covers the pthread_mutex_trylock and the pthread_mutex_lock attempts. I did not see anything in cache_node_get_priority() nor cache_node_set_priority() that would add this to a list. Reviewed-by: Mark Tinguely From eflorac@intellique.com Fri Jan 13 14:13:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DKDecf158361 for ; Fri, 13 Jan 2012 14:13:41 -0600 X-ASG-Debug-ID: 1326485615-00a9eb65e4274490001-NocioJ Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by cuda.sgi.com with ESMTP id DEQQW550cSKEnHzg for ; Fri, 13 Jan 2012 12:13:36 -0800 (PST) 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 7D565A6469; Fri, 13 Jan 2012 21:13:31 +0100 (CET) Date: Fri, 13 Jan 2012 21:13:11 +0100 From: Emmanuel Florac To: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) Cc: Linux fs XFS Subject: Re: xfs version and kernels Message-ID: <20120113211311.7b72e7c0@galadriel.home> X-ASG-Orig-Subj: Re: xfs version and kernels In-Reply-To: <20240.31117.130540.618190@tree.ty.sabi.co.UK> References: <20120113174739.26ae0c07@harpe.intellique.com> <20240.31117.130540.618190@tree.ty.sabi.co.UK> Organization: Intellique X-Mailer: Claws Mail 3.7.8 (GTK+ 2.20.1; i686-pc-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: 1326485615 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85839 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Le Fri, 13 Jan 2012 18:35:57 +0000 vous =C3=A9criviez: > That's interesting: the RedHat backports of newer XFS features > were only done for the 64b build. However the reply is dated > 2006, and a 2.6.18-128 kernel may well be more ancient than > that, and since it is from 5.3, it is so old it does not have > the backports in the 64b version either as that was done in 5.4. This was an x64 RedHat, anyway. Needed to be, because the filesystem is 76 TB :) --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From achender@linux.vnet.ibm.com Fri Jan 13 14:51:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DKox3F160083 for ; Fri, 13 Jan 2012 14:51:00 -0600 X-ASG-Debug-ID: 1326487858-0222017aa6952cf0001-NocioJ Received: from e31.co.us.ibm.com (e31.co.us.ibm.com [32.97.110.149]) by cuda.sgi.com with ESMTP id fhB6SKirgHcHB876 for ; Fri, 13 Jan 2012 12:50:58 -0800 (PST) X-Barracuda-Envelope-From: achender@linux.vnet.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.149 X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.97.110.149] Received: from /spool/local by e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 13 Jan 2012 13:50:58 -0700 X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.97.110.149] X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.97.110.149] X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.97.110.149] X-Barracuda-IPDD: Level2 [linux.vnet.ibm.com/32.97.110.149] Received: from d03relay03.boulder.ibm.com (9.17.195.228) by e31.co.us.ibm.com (192.168.1.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 13 Jan 2012 13:50:55 -0700 Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0DKosoN158196 for ; Fri, 13 Jan 2012 13:50:54 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0DKosBW019530 for ; Fri, 13 Jan 2012 13:50:54 -0700 Received: from lc4eb0185863151.ibm.com (sig-9-65-250-4.mts.ibm.com [9.65.250.4]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0DKoqHo019083; Fri, 13 Jan 2012 13:50:53 -0700 Message-ID: <4F10992C.3070303@linux.vnet.ibm.com> Date: Fri, 13 Jan 2012 13:50:52 -0700 From: Allison Henderson User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 MIME-Version: 1.0 To: Dave Chinner CC: Lukas Czerner , Ext4 Developers List , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex In-Reply-To: <20120113043411.GH2806@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit x-cbid: 12011320-7282-0000-0000-0000059B98B7 X-Barracuda-Connect: e31.co.us.ibm.com[32.97.110.149] X-Barracuda-Start-Time: 1326487858 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Virus-Status: Clean On 01/12/2012 09:34 PM, Dave Chinner wrote: > On Thu, Jan 12, 2012 at 08:01:43PM -0700, Allison Henderson wrote: >> Hi All, >> >> I know this is an old topic, but I am poking it again because I've >> had some work items wrap up, and Im planning on picking up on this >> one again. I am thinking about implementing extent locks to replace >> i_mutex. So I just wanted to touch base with folks and see what >> people are working on because I know there were some folks out there >> that were thing about doing similar solutions. > > What locking API are you looking at? If you are looking at an > something like: > > read_range_{try}lock(lock, off, len) > read_range_unlock(lock, off, len) > write_range_{try}lock(lock, off, len) > write_range_unlock(lock, off, len) > > and implementing with an rbtree or a btree for tracking, then I > definitely have a use for it in XFS - replacing the current rwsem > that is used for the iolock. Range locks like this are the only > thing we need to allow concurrent buffered writes to the same file > to maintain the per-write exclusion that posix requires. > > Cheers, > > Dave. Yes that is generally the idea I was thinking about doing, but at the time, I was not thinking outside the scope of ext4. You are thinking maybe it should be in vfs layer so that it's something that all the filesystems will use? That seems to be the impression I'm getting from folks. Thx! Allison Henderson From bpm@oss.sgi.com Fri Jan 13 15:34:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DLYFQG162211 for ; Fri, 13 Jan 2012 15:34:15 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0DLYBY3162091; Fri, 13 Jan 2012 15:34:11 -0600 Date: Fri, 13 Jan 2012 15:34:11 -0600 Message-Id: <201201132134.q0DLYBY3162091@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-9291-g0994695 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: b1c770c273a4787069306fc82aab245e9ac72e9d X-Git-Newrev: 099469502f62fbe0d7e4f0b83a2f22538367f734 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 993ecff Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs 9879326 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial eb59c50 Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm 29ad0de Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs 34c80b1 vfs: switch ->show_options() to struct dentry * 576b1d6 xfs: propagate umode_t 1a67aaf switch ->mknod() to umode_t 4acdaf2 switch ->create() to umode_t 18bb1db switch vfs_mkdir() and ->mkdir() to umode_t 6b520e0 vfs: fix the stupidity with i_dentry in inode destructors 2a79f17 vfs: mnt_drop_write_file() a561be7 switch a bunch of places to mnt_want_write_file() be4f1ac xfs: log all dirty inodes in xfs_fs_sync_fs 0b8fd30 xfs: log the inode in ->write_inode calls for kupdate b00f4dc Merge branch 'master' into pm-sleep 90802ed treewide: Fix comment and string typo 'bufer' 42b2aa8 treewide: Fix typos in various parts of the kernel, and fix some comments. a0acae0 freezer: unexport refrigerator() and update try_to_freeze() slightly from b1c770c273a4787069306fc82aab245e9ac72e9d (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 993ecff81aa6d50d694704de2647a5529ff2f166 Merge: 12e55508921865aefdd80fd17afe70c191afbd1b b1c770c273a4787069306fc82aab245e9ac72e9d Author: Linus Torvalds Date: Mon Jan 9 12:50:15 2012 -0800 Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs * 'for-linus' of git://oss.sgi.com/xfs/xfs: xfs: fix endian conversion issue in discard code commit 98793265b429a3f0b3f1750e74d67cd4d740d162 Merge: b4a133da2eaccb844a7beaef16ffd9c76a0d21d3 bd1b2a555952d959f47169056fca05acf7eff81f Author: Linus Torvalds Date: Sun Jan 8 13:21:22 2012 -0800 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (53 commits) Kconfig: acpi: Fix typo in comment. misc latin1 to utf8 conversions devres: Fix a typo in devm_kfree comment btrfs: free-space-cache.c: remove extra semicolon. fat: Spelling s/obsolate/obsolete/g SCSI, pmcraid: Fix spelling error in a pmcraid_err() call tools/power turbostat: update fields in manpage mac80211: drop spelling fix types.h: fix comment spelling for 'architectures' typo fixes: aera -> area, exntension -> extension devices.txt: Fix typo of 'VMware'. sis900: Fix enum typo 'sis900_rx_bufer_status' decompress_bunzip2: remove invalid vi modeline treewide: Fix comment and string typo 'bufer' hyper-v: Update MAINTAINERS treewide: Fix typos in various parts of the kernel, and fix some comments. clockevents: drop unknown Kconfig symbol GENERIC_CLOCKEVENTS_MIGR gpio: Kconfig: drop unknown symbol 'CS5535_GPIO' leds: Kconfig: Fix typo 'D2NET_V2' sound: Kconfig: drop unknown symbol ARCH_CLPS7500 ... Fix up trivial conflicts in arch/powerpc/platforms/40x/Kconfig (some new kconfig additions, close to removed commented-out old ones) commit eb59c505f8a5906ad2e053d14fab50eb8574fd6f Merge: 1619ed8f60959829d070d8f39cd2f8ca0e7135ce c233523b3d392e530033a7587d7970dc62a02361 Author: Linus Torvalds Date: Sun Jan 8 13:10:57 2012 -0800 Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm * 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (76 commits) PM / Hibernate: Implement compat_ioctl for /dev/snapshot PM / Freezer: fix return value of freezable_schedule_timeout_killable() PM / shmobile: Allow the A4R domain to be turned off at run time PM / input / touchscreen: Make st1232 use device PM QoS constraints PM / QoS: Introduce dev_pm_qos_add_ancestor_request() PM / shmobile: Remove the stay_on flag from SH7372's PM domains PM / shmobile: Don't include SH7372's INTCS in syscore suspend/resume PM / shmobile: Add support for the sh7372 A4S power domain / sleep mode PM: Drop generic_subsys_pm_ops PM / Sleep: Remove forward-only callbacks from AMBA bus type PM / Sleep: Remove forward-only callbacks from platform bus type PM: Run the driver callback directly if the subsystem one is not there PM / Sleep: Make pm_op() and pm_noirq_op() return callback pointers PM/Devfreq: Add Exynos4-bus device DVFS driver for Exynos4210/4212/4412. PM / Sleep: Merge internal functions in generic_ops.c PM / Sleep: Simplify generic system suspend callbacks PM / Hibernate: Remove deprecated hibernation snapshot ioctls PM / Sleep: Fix freezer failures due to racy usermodehelper_is_disabled() ARM: S3C64XX: Implement basic power domain support PM / shmobile: Use common always on power domain governor ... Fix up trivial conflict in fs/xfs/xfs_buf.c due to removal of unused XBT_FORCE_SLEEP bit commit 29ad0de279002f9b6a63df5ba85328f5b633b842 Merge: 972b2c719990f91eb3b2310d44ef8a2d38955a14 40d344ec5ee440596b1f3ae87556e20c7197757a Author: Linus Torvalds Date: Sun Jan 8 13:05:29 2012 -0800 Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs * 'for-linus' of git://oss.sgi.com/xfs/xfs: (22 commits) xfs: mark the xfssyncd workqueue as non-reentrant xfs: simplify xfs_qm_detach_gdquots xfs: fix acl count validation in xfs_acl_from_disk() xfs: remove unused XBT_FORCE_SLEEP bit xfs: remove XFS_QMOPT_DQSUSER xfs: kill xfs_qm_idtodq xfs: merge xfs_qm_dqinit_core into the only caller xfs: add a xfs_dqhold helper xfs: simplify xfs_qm_dqattach_grouphint xfs: nest qm_dqfrlist_lock inside the dquot qlock xfs: flatten the dquot lock ordering xfs: implement lazy removal for the dquot freelist xfs: remove XFS_DQ_INACTIVE xfs: cleanup xfs_qm_dqlookup xfs: cleanup dquot locking helpers xfs: remove the sync_mode argument to xfs_qm_dqflush_all xfs: remove xfs_qm_sync xfs: make sure to really flush all dquots in xfs_qm_quotacheck xfs: untangle SYNC_WAIT and SYNC_TRYLOCK meanings for xfs_qm_dqflush xfs: remove the lid_size field in struct log_item_desc ... Fix up trivial conflict in fs/xfs/xfs_sync.c commit 34c80b1d93e6e20ca9dea0baf583a5b5510d92d4 Author: Al Viro Date: Thu Dec 8 21:32:45 2011 -0500 vfs: switch ->show_options() to struct dentry * Signed-off-by: Al Viro commit 576b1d67ce949e7542ff765b00eb5357e706768b Author: Al Viro Date: Tue Jul 26 02:50:15 2011 -0400 xfs: propagate umode_t Signed-off-by: Al Viro commit 1a67aafb5f72a436ca044293309fa7e6351d6a35 Author: Al Viro Date: Tue Jul 26 01:52:52 2011 -0400 switch ->mknod() to umode_t Signed-off-by: Al Viro commit 4acdaf27ebe2034c342f3be57ef49aed1ad885ef Author: Al Viro Date: Tue Jul 26 01:42:34 2011 -0400 switch ->create() to umode_t vfs_create() ignores everything outside of 16bit subset of its mode argument; switching it to umode_t is obviously equivalent and it's the only caller of the method Signed-off-by: Al Viro commit 18bb1db3e7607e4a997d50991a6f9fa5b0f8722c Author: Al Viro Date: Tue Jul 26 01:41:39 2011 -0400 switch vfs_mkdir() and ->mkdir() to umode_t vfs_mkdir() gets int, but immediately drops everything that might not fit into umode_t and that's the only caller of ->mkdir()... Signed-off-by: Al Viro commit 6b520e0565422966cdf1c3759bd73df77b0f248c Author: Al Viro Date: Mon Dec 12 15:51:45 2011 -0500 vfs: fix the stupidity with i_dentry in inode destructors Seeing that just about every destructor got that INIT_LIST_HEAD() copied into it, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once(); the cost of taking it into inode_init_always() will be negligible for pipes and sockets and negative for everything else. Not to mention the removal of boilerplate code from ->destroy_inode() instances... Signed-off-by: Al Viro commit 2a79f17e4a641a2f463cb512cb0ec349844a147b Author: Al Viro Date: Fri Dec 9 08:06:57 2011 -0500 vfs: mnt_drop_write_file() new helper (wrapper around mnt_drop_write()) to be used in pair with mnt_want_write_file(). Signed-off-by: Al Viro commit a561be7100cd610bd2e082f3211c1dfb45835817 Author: Al Viro Date: Wed Nov 23 11:57:51 2011 -0500 switch a bunch of places to mnt_want_write_file() it's both faster (in case when file has been opened for write) and cleaner. Signed-off-by: Al Viro commit b00f4dc5ff022cb9cbaffd376d9454d7fa1e496f Merge: 1eac8111e0763853266a171ce11214da3a347a0a b9e26dfdad5a4f9cbdaacafac6998614cc9c41bc Author: Rafael J. Wysocki Date: Wed Dec 21 21:59:45 2011 +0100 Merge branch 'master' into pm-sleep * master: (848 commits) SELinux: Fix RCU deref check warning in sel_netport_insert() binary_sysctl(): fix memory leak mm/vmalloc.c: remove static declaration of va from __get_vm_area_node ipmi_watchdog: restore settings when BMC reset oom: fix integer overflow of points in oom_badness memcg: keep root group unchanged if creation fails nilfs2: potential integer overflow in nilfs_ioctl_clean_segments() nilfs2: unbreak compat ioctl cpusets: stall when updating mems_allowed for mempolicy or disjoint nodemask evm: prevent racing during tfm allocation evm: key must be set once during initialization mmc: vub300: fix type of firmware_rom_wait_states module parameter Revert "mmc: enable runtime PM by default" mmc: sdhci: remove "state" argument from sdhci_suspend_host x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT IB/qib: Correct sense on freectxts increment and decrement RDMA/cma: Verify private data length cgroups: fix a css_set not found bug in cgroup_attach_proc oprofile: Fix uninitialized memory access when writing to writing to oprofilefs Revert "xen/pv-on-hvm kexec: add xs_reset_watches to shutdown watches from old kernel" ... Conflicts: kernel/cgroup_freezer.c commit 90802ed9c3dbab2e067bd9fc67a30e66e6774e8f Author: Paul Bolle Date: Mon Dec 5 13:00:34 2011 +0100 treewide: Fix comment and string typo 'bufer' Signed-off-by: Paul Bolle Signed-off-by: Jiri Kosina commit 42b2aa86c6670347a2a07e6d7af0e0ecc8fdbff9 Author: Justin P. Mattock Date: Mon Nov 28 20:31:00 2011 -0800 treewide: Fix typos in various parts of the kernel, and fix some comments. The below patch fixes some typos in various parts of the kernel, as well as fixes some comments. Please let me know if I missed anything, and I will try to get it changed and resent. Signed-off-by: Justin P. Mattock Acked-by: Randy Dunlap Signed-off-by: Jiri Kosina commit a0acae0e886d44bd5ce6d2f173c1ace0fcf0d9f6 Author: Tejun Heo Date: Mon Nov 21 12:32:22 2011 -0800 freezer: unexport refrigerator() and update try_to_freeze() slightly There is no reason to export two functions for entering the refrigerator. Calling refrigerator() instead of try_to_freeze() doesn't save anything noticeable or removes any race condition. * Rename refrigerator() to __refrigerator() and make it return bool indicating whether it scheduled out for freezing. * Update try_to_freeze() to return bool and relay the return value of __refrigerator() if freezing(). * Convert all refrigerator() users to try_to_freeze(). * Update documentation accordingly. * While at it, add might_sleep() to try_to_freeze(). Signed-off-by: Tejun Heo Cc: Samuel Ortiz Cc: Chris Mason Cc: "Theodore Ts'o" Cc: Steven Whitehouse Cc: Andrew Morton Cc: Jan Kara Cc: KONISHI Ryusuke Cc: Christoph Hellwig ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_buf.c | 4 ++-- fs/xfs/xfs_file.c | 6 +++--- fs/xfs/xfs_ialloc.c | 4 ++-- fs/xfs/xfs_ialloc.h | 2 +- fs/xfs/xfs_iget.c | 1 - fs/xfs/xfs_inode.c | 4 ++-- fs/xfs/xfs_inode.h | 2 +- fs/xfs/xfs_ioctl.c | 8 ++++---- fs/xfs/xfs_ioctl32.c | 8 ++++---- fs/xfs/xfs_iops.c | 8 ++++---- fs/xfs/xfs_log_cil.c | 2 +- fs/xfs/xfs_super.c | 34 +++++++--------------------------- fs/xfs/xfs_sync.c | 36 ++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_sync.h | 2 ++ fs/xfs/xfs_utils.c | 2 +- fs/xfs/xfs_utils.h | 2 +- fs/xfs/xfs_vnodeops.c | 4 ++-- fs/xfs/xfs_vnodeops.h | 4 ++-- 18 files changed, 75 insertions(+), 58 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Fri Jan 13 15:49:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DLnh1R162907 for ; Fri, 13 Jan 2012 15:49:43 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id CC0A08F8049; Fri, 13 Jan 2012 13:49:39 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 5D9E4426DA7; Fri, 13 Jan 2012 15:49:41 -0600 (CST) Date: Fri, 13 Jan 2012 15:49:41 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 06/11] xfs: replace i_flock with a sleeping bitlock Message-ID: <20120113214941.GA16386@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.745039484@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200131.745039484@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Dec 18, 2011 at 03:00:09PM -0500, Christoph Hellwig wrote: > Index: xfs/fs/xfs/xfs_inode.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.c 2011-12-18 08:05:01.469974560 -0800 > +++ xfs/fs/xfs/xfs_inode.c 2011-12-18 08:06:23.266640737 -0800 ... > -/* > * In-core inode flags. > */ > -#define XFS_IRECLAIM 0x0001 /* started reclaiming this inode */ > -#define XFS_ISTALE 0x0002 /* inode has been staled */ > -#define XFS_IRECLAIMABLE 0x0004 /* inode can be reclaimed */ > -#define XFS_INEW 0x0008 /* inode has just been allocated */ > -#define XFS_IFILESTREAM 0x0010 /* inode is in a filestream directory */ > -#define XFS_ITRUNCATED 0x0020 /* truncated down so flush-on-close */ > -#define XFS_IDIRTY_RELEASE 0x0040 /* dirty release already seen */ > +#define XFS_IRECLAIM (1 << 0) /* started reclaiming this inode */ > +#define XFS_ISTALE (1 << 1) /* inode has been staled */ > +#define XFS_IRECLAIMABLE (1 << 2) /* inode can be reclaimed */ > +#define XFS_INEW (1 << 3) /* inode has just been allocated */ > +#define XFS_IFILESTREAM (1 << 4) /* inode is in a filestream dir. */ > +#define XFS_ITRUNCATED (1 << 5) /* truncated down so flush-on-close */ > +#define XFS_IDIRTY_RELEASE (1 << 6) /* dirty release already seen */ > +#define __XFS_IFLOCK_BIT 7 /* inode is being flushed right now */ > +#define XFS_IFLOCK (1 << __XFS_IFLOCK_BIT) Nice. > +static inline void xfs_iflock(struct xfs_inode *ip) > +{ > + if (!xfs_iflock_nowait(ip)) > + __xfs_iflock(ip); > +} Going after the iflock nowait first seems a little silly, but I'm guessing that you're trying to avoid touching the zone wait_table in bit_waitqueue if you can avoid it, along with the rest of the overhead related to seeting up the wait queue in __xfs_iflock. > + > +static inline void xfs_ifunlock(struct xfs_inode *ip) > +{ > + xfs_iflags_clear(ip, XFS_IFLOCK); > + wake_up_bit(&ip->i_flags, __XFS_IFLOCK_BIT); > +} I was going to suggest this: spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_IFLOCK; wake_up_bit(... spin_unlock(&ip->i_flags_lock); After some study I believe what you have is ok: Say this is process A. If process B got the lock after A cleared IFLOCK and before A wake_up_bit wakes process C. C will just go back to sleep in __xfs_iflock until B calls xfs_ifunlock to wake C again. Looks good. Reviewed-by: Ben Myers From bpm@sgi.com Fri Jan 13 16:03:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DM3oxO163794 for ; Fri, 13 Jan 2012 16:03:50 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 14DEC304039 for ; Fri, 13 Jan 2012 14:03:47 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 8F816426DA7; Fri, 13 Jan 2012 16:03:48 -0600 (CST) Date: Fri, 13 Jan 2012 16:03:48 -0600 From: Ben Myers To: xfs@oss.sgi.com Subject: Re: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-9291-g0994695 Message-ID: <20120113220348.GB16386@sgi.com> References: <201201132134.q0DLYBY3162091@oss.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201201132134.q0DLYBY3162091@oss.sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Folks, On Fri, Jan 13, 2012 at 03:34:11PM -0600, xfs@oss.sgi.com wrote: > This is an automated email from the git hooks/post-receive script. It was > generated because a ref change was pushed to the repository containing > the project "XFS development tree". > > The branch, master has been updated This was a fast-forward merge from today's git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master branch into oss/master in order to pull in 'xfs: log all dirty inodes in xfs_fs_sync_fs' and 'xfs: log the inode in ->write_inode calls for kupdate' without a merge commit. I made sure it boots and ran xfstests before pushing it up to oss. Hopefully you will not be disrupted. Thanks, Ben From bpm@sgi.com Fri Jan 13 16:42:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0DMguWQ166388 for ; Fri, 13 Jan 2012 16:42:56 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5B697AC002; Fri, 13 Jan 2012 14:42:51 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 76312426DA7; Fri, 13 Jan 2012 16:42:52 -0600 (CST) Date: Fri, 13 Jan 2012 16:42:52 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 07/11] xfs: replace i_pin_wait with a bit waitqueue Message-ID: <20120113224252.GC16386@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.916691346@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200131.916691346@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Dec 18, 2011 at 03:00:10PM -0500, Christoph Hellwig wrote: > Replace i_pin_wait, which is only used during synchronous inode flushing > with a bit waitqueue. This trades off a much smaller inode against > slightly slower wakeup performance, and saves 12 (32-bit) or 20 (64-bit) > bytes in the XFS inode. > > Reviewed-by: Alex Elder > Reviewed-by: Dave Chinner > Signed-off-by: Christoph Hellwig Looks good. Reviewed-by: Ben Myers > > --- > fs/xfs/xfs_inode.c | 27 +++++++++++++++++++++------ > fs/xfs/xfs_inode.h | 3 ++- > fs/xfs/xfs_inode_item.c | 2 +- > fs/xfs/xfs_super.c | 1 - > 4 files changed, 24 insertions(+), 9 deletions(-) > > Index: xfs/fs/xfs/xfs_inode.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.c 2011-11-30 12:59:08.843047205 +0100 > +++ xfs/fs/xfs/xfs_inode.c 2011-11-30 12:59:10.296372665 +0100 > @@ -2037,7 +2037,7 @@ xfs_idestroy_fork( > * once someone is waiting for it to be unpinned. > */ > static void > -xfs_iunpin_nowait( > +xfs_iunpin( > struct xfs_inode *ip) > { > ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); > @@ -2049,14 +2049,29 @@ xfs_iunpin_nowait( > > } > > +static void > +__xfs_iunpin_wait( > + struct xfs_inode *ip) > +{ > + wait_queue_head_t *wq = bit_waitqueue(&ip->i_flags, __XFS_IPINNED_BIT); > + DEFINE_WAIT_BIT(wait, &ip->i_flags, __XFS_IPINNED_BIT); > + > + xfs_iunpin(ip); > + > + do { > + prepare_to_wait(wq, &wait.wait, TASK_UNINTERRUPTIBLE); > + if (xfs_ipincount(ip)) > + io_schedule(); > + } while (xfs_ipincount(ip)); > + finish_wait(wq, &wait.wait); > +} > + > void > xfs_iunpin_wait( > struct xfs_inode *ip) > { > - if (xfs_ipincount(ip)) { > - xfs_iunpin_nowait(ip); > - wait_event(ip->i_ipin_wait, (xfs_ipincount(ip) == 0)); > - } > + if (xfs_ipincount(ip)) > + __xfs_iunpin_wait(ip); > } > > /* > @@ -2415,7 +2430,7 @@ xfs_iflush( > * out for us if they occur after the log force completes. > */ > if (!(flags & SYNC_WAIT) && xfs_ipincount(ip)) { > - xfs_iunpin_nowait(ip); > + xfs_iunpin(ip); > xfs_ifunlock(ip); > return EAGAIN; > } > Index: xfs/fs/xfs/xfs_inode.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.h 2011-11-30 12:59:08.846380520 +0100 > +++ xfs/fs/xfs/xfs_inode.h 2011-11-30 12:59:10.296372665 +0100 > @@ -238,7 +238,6 @@ typedef struct xfs_inode { > mrlock_t i_lock; /* inode lock */ > mrlock_t i_iolock; /* inode IO lock */ > atomic_t i_pincount; /* inode pin count */ > - wait_queue_head_t i_ipin_wait; /* inode pinning wait queue */ > spinlock_t i_flags_lock; /* inode i_flags lock */ > /* Miscellaneous state. */ > unsigned long i_flags; /* see defined flags below */ > @@ -367,6 +366,8 @@ xfs_set_projid(struct xfs_inode *ip, > #define XFS_IDIRTY_RELEASE (1 << 6) /* dirty release already seen */ > #define __XFS_IFLOCK_BIT 7 /* inode is being flushed right now */ > #define XFS_IFLOCK (1 << __XFS_IFLOCK_BIT) > +#define __XFS_IPINNED_BIT 8 /* wakeup key for zero pin count */ > +#define XFS_IPINNED (1 << __XFS_IPINNED_BIT) > > /* > * Per-lifetime flags need to be reset when re-using a reclaimable inode during > Index: xfs/fs/xfs/xfs_inode_item.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode_item.c 2011-11-30 12:59:08.846380520 +0100 > +++ xfs/fs/xfs/xfs_inode_item.c 2011-11-30 12:59:10.296372665 +0100 > @@ -555,7 +555,7 @@ xfs_inode_item_unpin( > trace_xfs_inode_unpin(ip, _RET_IP_); > ASSERT(atomic_read(&ip->i_pincount) > 0); > if (atomic_dec_and_test(&ip->i_pincount)) > - wake_up(&ip->i_ipin_wait); > + wake_up_bit(&ip->i_flags, __XFS_IPINNED_BIT); > } > > /* > Index: xfs/fs/xfs/xfs_super.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_super.c 2011-11-30 12:59:08.846380520 +0100 > +++ xfs/fs/xfs/xfs_super.c 2011-11-30 12:59:10.296372665 +0100 > @@ -828,7 +828,6 @@ xfs_fs_inode_init_once( > /* xfs inode */ > atomic_set(&ip->i_pincount, 0); > spin_lock_init(&ip->i_flags_lock); > - init_waitqueue_head(&ip->i_ipin_wait); > > mrlock_init(&ip->i_lock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER, > "xfsino", ip->i_ino); > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From lists@nabble.com Sat Jan 14 11:44:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0EHia41228749 for ; Sat, 14 Jan 2012 11:44:37 -0600 X-ASG-Debug-ID: 1326563075-0222017aa69d2b50001-NocioJ Received: from sam.nabble.com (sam.nabble.com [216.139.236.26]) by cuda.sgi.com with ESMTP id 2zdjLPUi0QBlpJDu for ; Sat, 14 Jan 2012 09:44:35 -0800 (PST) X-Barracuda-Envelope-From: lists@nabble.com X-Barracuda-Apparent-Source-IP: 216.139.236.26 Received: from isper.nabble.com ([192.168.236.156]) by sam.nabble.com with esmtp (Exim 4.72) (envelope-from ) id 1Rm7ec-0002aO-Vt for xfs@oss.sgi.com; Sat, 14 Jan 2012 09:44:34 -0800 Message-ID: <33140169.post@talk.nabble.com> Date: Sat, 14 Jan 2012 09:44:34 -0800 (PST) From: MikeJeezy To: xfs@oss.sgi.com Subject: Optimal XFS formatting options? MIME-Version: 1.0 X-ASG-Orig-Subj: Optimal XFS formatting options? Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: forums@mgaccess.net X-Barracuda-Connect: sam.nabble.com[216.139.236.26] X-Barracuda-Start-Time: 1326563075 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.85906 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi, I have a 4.9 TB iSCSI LUN on a RAID 6 array with twelve 2 TB SATA disks (4.9T is only one of the logical volumes). It will contain several million files of various sizes, but 80% of them will be less than 50 MB. I'm a novice at best and I usually just use the default #mkfs.xfs /dev/sdx1 This is server will be write heavy for about 8 hours a night, but every morning there are many reads to the disk. There is rarely a time where it will be write heavy and read heavy at the same time. Are there other XFS format options that I could use to optimize performance? Any input is greatly appreciated. Thank you. -- View this message in context: http://old.nabble.com/Optimal-XFS-formatting-options--tp33140169p33140169.html Sent from the Xfs - General mailing list archive at Nabble.com. From tinguely@sgi.com Mon Jan 16 10:50:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GGon5t104176 for ; Mon, 16 Jan 2012 10:50:50 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id B3989304062; Mon, 16 Jan 2012 08:50:46 -0800 (PST) Message-ID: <4F145569.5020007@sgi.com> Date: Mon, 16 Jan 2012 10:50:49 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 4/8] xfstests: use preallocation for ag-wiper References: <1321875088-30801-1-git-send-email-david@fromorbit.com> <1321875088-30801-5-git-send-email-david@fromorbit.com> In-Reply-To: <1321875088-30801-5-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Dave Chinner wrote: > From: Dave Chinner > > To enable sane testing of large scale filesystems, the --large-fs > test option uses xfs_db magic to mark AGs full without doing any IO. > This leaves only a small amount of free space left in the filesystem > to stress the high AGs of the filesystem rather than the low AGs. > > This method requires us to have special filesystem check options to > avoid free space checking in xfs_check, and we cannot current run > xfs_repair on such a filesystem at all. As it is, free space > checking on xfs_check does not scale, so we still need to avoid this > checking regardless of how we fill the filesystem. > > We can acheive exactly the same fill behaviour by preallocating a > single large file in the filesystem immediately after creating it. > This is a filesystem independent manner of filling the filesystem, > and allows us to do large filesystem testing on more than just XFS. > > Further, this preallocation method effectively adds a new "very > large file" test. It also enables us to run an unmodified xfs_repair > or filesystem specific fsck program to check the filesystem for > sanity, so we can now do full sanity checking of such large > filesystems. > ... > +_setup_large_xfs_fs() > +{ > + fs_size=$1 > + local tmp_dir=/tmp/ > + > + [ "$LARGE_SCRATCH_DEV" != yes ]&& return 0 > + [ -z "$SCRATCH_DEV_EMPTY_SPACE" ]&& SCRATCH_DEV_EMPTY_SPACE=0 > + [ $SCRATCH_DEV_EMPTY_SPACE -ge $fs_size ]&& return 0 > + > + # calculate the size of the file we need to allocate. > + # Default free space in the FS is 50GB, but you can specify more via > + # SCRATCH_DEV_EMPTY_SPACE > + file_size=$(($fs_size - 50*1024*1024*1024)) > + file_size=$(($file_size - $SCRATCH_DEV_EMPTY_SPACE)) Should SCRATCH_DEV_EMPTY_SPACE variable be documented in the usage output? Looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Mon Jan 16 11:00:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_55 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GH0tJN104553 for ; Mon, 16 Jan 2012 11:00:55 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id A5113304067; Mon, 16 Jan 2012 09:00:55 -0800 (PST) Message-ID: <4F1457CA.1060802@sgi.com> Date: Mon, 16 Jan 2012 11:00:58 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 5/8] xfstests: use command line option for setting extra space References: <1321875088-30801-1-git-send-email-david@fromorbit.com> <1321875088-30801-6-git-send-email-david@fromorbit.com> In-Reply-To: <1321875088-30801-6-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Dave Chinner wrote: > From: Dave Chinner > > Allow the extra free space to leave in large scratch filesystems to > be specified by a command line option rather than just via an > environment variable. > > Signed-off-by: Dave Chinner > --- > common | 5 +++++ > 1 files changed, 5 insertions(+), 0 deletions(-) > > diff --git a/common b/common > index da86cd9..78ac654 100644 > --- a/common > +++ b/common > @@ -247,6 +247,11 @@ s/ .*//p > usage > ;; > > + --extra-space=*) > + export SCRATCH_DEV_EMPTY_SPACE=${r#*=} > + xpand=false > + ;; > + > *) > start=$r > end=$r Nice to have SCRATCH_DEV_EMPTY_SPACE variable and command line entry documented. Reviewed-by: Mark Tinguely From tinguely@sgi.com Mon Jan 16 11:04:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GH4cO2104673 for ; Mon, 16 Jan 2012 11:04:38 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3A2D4304053; Mon, 16 Jan 2012 09:04:35 -0800 (PST) Message-ID: <4F1458A5.3000404@sgi.com> Date: Mon, 16 Jan 2012 11:04:37 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 6/8] xfstest: enable xfs_repair for large filesystem testing References: <1321875088-30801-1-git-send-email-david@fromorbit.com> <1321875088-30801-7-git-send-email-david@fromorbit.com> In-Reply-To: <1321875088-30801-7-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Dave Chinner wrote: > From: Dave Chinner > > Now that large filesystem testing does not play free space games to > fill the space without IO, we can enable xfs_repair when running in > this mode. xfs_repair has had it's scalability problems solved, too, > so this is a safe thing to do. > Looks good. Reviewed-by: Mark Tinguely From BATV+e7d90501d43afca305e7+3067+infradead.org+hch@bombadil.srs.infradead.org Mon Jan 16 11:48:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GHmM6b105866 for ; Mon, 16 Jan 2012 11:48:23 -0600 X-ASG-Debug-ID: 1326736100-005fe6098108e30001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id sC5mYiSaC8DECn1N for ; Mon, 16 Jan 2012 09:48:20 -0800 (PST) X-Barracuda-Envelope-From: BATV+e7d90501d43afca305e7+3067+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RmqfL-0005xb-Fy; Mon, 16 Jan 2012 17:48:19 +0000 Date: Mon, 16 Jan 2012 12:48:19 -0500 From: Christoph Hellwig To: Zheng Da Cc: xfs@oss.sgi.com Subject: Re: concurrent direct IO write in xfs Message-ID: <20120116174819.GA19417@infradead.org> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1326736100 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86084 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Sun, Jan 15, 2012 at 07:01:42PM -0500, Zheng Da wrote: > Hello, > > I surprisedly found that writing data to a file (no appending) with direct > IO and with multiple threads has the same performance as a single thread. > Actually, it seems there is only one core is working at a time. In my case, > each time I write a page to a file and the offset is always aligned to the > page size, so there is no overlapping between writes. What kernel version are you using? Also, what is the exact I/O pattern? From tinguely@sgi.com Mon Jan 16 11:49:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GHnV4h105906 for ; Mon, 16 Jan 2012 11:49:31 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id B2F0630404E; Mon, 16 Jan 2012 09:49:30 -0800 (PST) Message-ID: <4F14632C.3040501@sgi.com> Date: Mon, 16 Jan 2012 11:49:32 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: [PATCH 7/8] xfstests: always us test option when checking large scratch device References: <1321875088-30801-1-git-send-email-david@fromorbit.com> <1321875088-30801-8-git-send-email-david@fromorbit.com> In-Reply-To: <1321875088-30801-8-git-send-email-david@fromorbit.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Dave Chinner wrote: > From: Dave Chinner > > Some tests call _check_scratch_device directly and when using a > large filesystem this needs to run with a -t option to avoid > consuming large amounts of memory. Make this happen in all cases > that the scratch device is checked. > Looks good. Reviewed-by: Mark Tinguely From bpm@sgi.com Mon Jan 16 12:32:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_35 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GIW3Am107385 for ; Mon, 16 Jan 2012 12:32:03 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2998A30406B; Mon, 16 Jan 2012 10:32:00 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id DB7D9426DA7; Mon, 16 Jan 2012 12:32:01 -0600 (CST) Date: Mon, 16 Jan 2012 12:32:01 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 08/11] xfs: remove the i_size field in struct xfs_inode Message-ID: <20120116183201.GA16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.134835340@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200132.134835340@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) On Sun, Dec 18, 2011 at 03:00:11PM -0500, Christoph Hellwig wrote: > There is no fundamental need to keep an in-memory inode size copy in the XFS > inode. We already have the on-disk value in the dinode, and the separate > in-memory copy that we need for regular files only in the XFS inode. > > Remove the xfs_inode i_size field and change the XFS_ISIZE macro to use the > VFS inode i_size field for regular fields. Switch code that was directly > accessing the i_size field in the xfs_inode to XFS_ISIZE, or in cases where > we are limited to regular files direct access of the VFS inode i_size field. > > This also allows dropping some fairly complicated code in the write path > which dealt with keeping the xfs_inode i_size uptodate with the VFS i_size > that is getting updated inside ->write_end. > > Note that we do not bother resetting the VFS i_size when truncating a file > that gets freed to zero as there is point in doing so because the VFS inode > is no longer in use at this point. Just relax the assert in xfs_ifree to > only check the on-disk size instead. > > Reviewed-by: Dave Chinner > Signed-off-by: Christoph Hellwig This looks good to me too. The only suggestion I had was that in some of these places where we call XFS_ISIZE or i_size_read twice in a row, it might be nicer to read them into a local variable and use that. Dave's comments were very helpful. Reviewed-by: Ben Myers > --- > fs/xfs/xfs_aops.c | 2 +- > fs/xfs/xfs_bmap.c | 15 ++++++--------- > fs/xfs/xfs_file.c | 45 +++++++++++---------------------------------- > fs/xfs/xfs_fs_subr.c | 2 +- > fs/xfs/xfs_iget.c | 1 - > fs/xfs/xfs_inode.c | 8 ++------ > fs/xfs/xfs_inode.h | 16 ++++++++++++---- > fs/xfs/xfs_iomap.c | 12 ++++++------ > fs/xfs/xfs_iops.c | 3 +-- > fs/xfs/xfs_qm_syscalls.c | 1 - > fs/xfs/xfs_trace.h | 2 +- > fs/xfs/xfs_vnodeops.c | 31 +++++++++++++++---------------- > 12 files changed, 56 insertions(+), 82 deletions(-) > > Index: xfs/fs/xfs/xfs_aops.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_aops.c 2011-12-02 19:39:30.743827732 +0100 > +++ xfs/fs/xfs/xfs_aops.c 2011-12-07 11:18:04.305981907 +0100 > @@ -111,7 +111,7 @@ xfs_ioend_new_eof( > xfs_fsize_t bsize; > > bsize = ioend->io_offset + ioend->io_size; > - isize = MAX(ip->i_size, ip->i_new_size); > + isize = MAX(i_size_read(VFS_I(ip)), ip->i_new_size); > isize = MIN(isize, bsize); > return isize > ip->i_d.di_size ? isize : 0; > } > Index: xfs/fs/xfs/xfs_file.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_file.c 2011-12-02 19:39:30.753827732 +0100 > +++ xfs/fs/xfs/xfs_file.c 2011-12-07 11:18:04.305981907 +0100 > @@ -327,7 +327,7 @@ xfs_file_aio_read( > mp->m_rtdev_targp : mp->m_ddev_targp; > if ((iocb->ki_pos & target->bt_smask) || > (size & target->bt_smask)) { > - if (iocb->ki_pos == ip->i_size) > + if (iocb->ki_pos == i_size_read(inode)) > return 0; > return -XFS_ERROR(EINVAL); > } > @@ -412,30 +412,6 @@ xfs_file_splice_read( > return ret; > } > > -STATIC void > -xfs_aio_write_isize_update( > - struct inode *inode, > - loff_t *ppos, > - ssize_t bytes_written) > -{ > - struct xfs_inode *ip = XFS_I(inode); > - xfs_fsize_t isize = i_size_read(inode); > - > - if (bytes_written > 0) > - XFS_STATS_ADD(xs_write_bytes, bytes_written); > - > - if (unlikely(bytes_written < 0 && bytes_written != -EFAULT && > - *ppos > isize)) > - *ppos = isize; > - > - if (*ppos > ip->i_size) { > - xfs_rw_ilock(ip, XFS_ILOCK_EXCL); > - if (*ppos > ip->i_size) > - ip->i_size = *ppos; > - xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); > - } > -} > - > /* > * If this was a direct or synchronous I/O that failed (such as ENOSPC) then > * part of the I/O may have been written to disk before the error occurred. In > @@ -451,8 +427,8 @@ xfs_aio_write_newsize_update( > xfs_rw_ilock(ip, XFS_ILOCK_EXCL); > if (new_size == ip->i_new_size) > ip->i_new_size = 0; > - if (ip->i_d.di_size > ip->i_size) > - ip->i_d.di_size = ip->i_size; > + if (ip->i_d.di_size > i_size_read(VFS_I(ip))) > + ip->i_d.di_size = i_size_read(VFS_I(ip)); > xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); > } > } > @@ -492,15 +468,16 @@ xfs_file_splice_write( > new_size = *ppos + count; > > xfs_ilock(ip, XFS_ILOCK_EXCL); > - if (new_size > ip->i_size) > + if (new_size > i_size_read(inode)) > ip->i_new_size = new_size; > xfs_iunlock(ip, XFS_ILOCK_EXCL); > > trace_xfs_file_splice_write(ip, count, *ppos, ioflags); > > ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); > + if (ret > 0) > + XFS_STATS_ADD(xs_write_bytes, ret); > > - xfs_aio_write_isize_update(inode, ppos, ret); > xfs_aio_write_newsize_update(ip, new_size); > xfs_iunlock(ip, XFS_IOLOCK_EXCL); > return ret; > @@ -728,14 +705,14 @@ restart: > * values are still valid. > */ > if ((ip->i_new_size && *pos > ip->i_new_size) || > - (!ip->i_new_size && *pos > ip->i_size)) { > + (!ip->i_new_size && *pos > i_size_read(inode))) { > if (*iolock == XFS_IOLOCK_SHARED) { > xfs_rw_iunlock(ip, XFS_ILOCK_EXCL | *iolock); > *iolock = XFS_IOLOCK_EXCL; > xfs_rw_ilock(ip, XFS_ILOCK_EXCL | *iolock); > goto restart; > } > - error = -xfs_zero_eof(ip, *pos, ip->i_size); > + error = -xfs_zero_eof(ip, *pos, i_size_read(inode)); > } > > /* > @@ -744,7 +721,7 @@ restart: > * ip->i_new_size if this IO ends beyond any other in-flight writes. > */ > new_size = *pos + *count; > - if (new_size > ip->i_size) { > + if (new_size > i_size_read(inode)) { > if (new_size > ip->i_new_size) > ip->i_new_size = new_size; > *new_sizep = new_size; > @@ -957,11 +934,11 @@ xfs_file_aio_write( > ret = xfs_file_buffered_aio_write(iocb, iovp, nr_segs, pos, > ocount, &new_size, &iolock); > > - xfs_aio_write_isize_update(inode, &iocb->ki_pos, ret); > - > if (ret <= 0) > goto out_unlock; > > + XFS_STATS_ADD(xs_write_bytes, ret); > + > /* Handle various SYNC-type writes */ > if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) { > loff_t end = pos + ret - 1; > Index: xfs/fs/xfs/xfs_fs_subr.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_fs_subr.c 2011-12-02 19:39:30.763827732 +0100 > +++ xfs/fs/xfs/xfs_fs_subr.c 2011-12-07 11:18:04.305981907 +0100 > @@ -90,7 +90,7 @@ xfs_wait_on_pages( > > if (mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) { > return -filemap_fdatawait_range(mapping, first, > - last == -1 ? ip->i_size - 1 : last); > + last == -1 ? XFS_ISIZE(ip) - 1 : last); > } > return 0; > } > Index: xfs/fs/xfs/xfs_iops.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iops.c 2011-12-07 11:15:33.600131684 +0100 > +++ xfs/fs/xfs/xfs_iops.c 2011-12-07 11:18:04.309315222 +0100 > @@ -778,7 +778,7 @@ xfs_setattr_size( > lock_flags |= XFS_IOLOCK_EXCL; > xfs_ilock(ip, lock_flags); > > - oldsize = ip->i_size; > + oldsize = inode->i_size; > newsize = iattr->ia_size; > > /* > @@ -897,7 +897,6 @@ xfs_setattr_size( > * they get written to. > */ > ip->i_d.di_size = newsize; > - ip->i_size = newsize; > xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > > if (newsize <= oldsize) { > Index: xfs/fs/xfs/xfs_trace.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_trace.h 2011-12-07 11:17:02.346317572 +0100 > +++ xfs/fs/xfs/xfs_trace.h 2011-12-07 11:18:04.309315222 +0100 > @@ -1038,7 +1038,7 @@ DECLARE_EVENT_CLASS(xfs_simple_io_class, > TP_fast_assign( > __entry->dev = VFS_I(ip)->i_sb->s_dev; > __entry->ino = ip->i_ino; > - __entry->isize = ip->i_size; > + __entry->isize = VFS_I(ip)->i_size; > __entry->disize = ip->i_d.di_size; > __entry->new_size = ip->i_new_size; > __entry->offset = offset; > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2011-12-07 11:17:02.339650941 +0100 > +++ xfs/fs/xfs/xfs_bmap.c 2011-12-07 11:18:04.312648538 +0100 > @@ -3997,11 +3997,8 @@ xfs_bmap_one_block( > xfs_bmbt_irec_t s; /* internal version of extent */ > > #ifndef DEBUG > - if (whichfork == XFS_DATA_FORK) { > - return S_ISREG(ip->i_d.di_mode) ? > - (ip->i_size == ip->i_mount->m_sb.sb_blocksize) : > - (ip->i_d.di_size == ip->i_mount->m_sb.sb_blocksize); > - } > + if (whichfork == XFS_DATA_FORK) > + return XFS_ISIZE(ip) == ip->i_mount->m_sb.sb_blocksize; > #endif /* !DEBUG */ > if (XFS_IFORK_NEXTENTS(ip, whichfork) != 1) > return 0; > @@ -4013,7 +4010,7 @@ xfs_bmap_one_block( > xfs_bmbt_get_all(ep, &s); > rval = s.br_startoff == 0 && s.br_blockcount == 1; > if (rval && whichfork == XFS_DATA_FORK) > - ASSERT(ip->i_size == ip->i_mount->m_sb.sb_blocksize); > + ASSERT(XFS_ISIZE(ip) == ip->i_mount->m_sb.sb_blocksize); > return rval; > } > > @@ -5425,7 +5422,7 @@ xfs_getbmapx_fix_eof_hole( > if (startblock == HOLESTARTBLOCK) { > mp = ip->i_mount; > out->bmv_block = -1; > - fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, ip->i_size)); > + fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, XFS_ISIZE(ip))); > fixlen -= out->bmv_offset; > if (prealloced && out->bmv_offset + out->bmv_length == end) { > /* Came to hole at EOF. Trim it. */ > @@ -5513,7 +5510,7 @@ xfs_getbmap( > fixlen = XFS_MAXIOFFSET(mp); > } else { > prealloced = 0; > - fixlen = ip->i_size; > + fixlen = XFS_ISIZE(ip); > } > } > > @@ -5542,7 +5539,7 @@ xfs_getbmap( > > xfs_ilock(ip, XFS_IOLOCK_SHARED); > if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) { > - if (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size) { > + if (ip->i_delayed_blks || XFS_ISIZE(ip) > ip->i_d.di_size) { > error = xfs_flush_pages(ip, 0, -1, 0, FI_REMAPF); > if (error) > goto out_unlock_iolock; > Index: xfs/fs/xfs/xfs_iget.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iget.c 2011-12-07 11:17:37.032796326 +0100 > +++ xfs/fs/xfs/xfs_iget.c 2011-12-07 11:18:04.312648538 +0100 > @@ -94,7 +94,6 @@ xfs_inode_alloc( > ip->i_update_core = 0; > ip->i_delayed_blks = 0; > memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); > - ip->i_size = 0; > ip->i_new_size = 0; > > return ip; > Index: xfs/fs/xfs/xfs_inode.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.c 2011-12-07 11:17:50.642722594 +0100 > +++ xfs/fs/xfs/xfs_inode.c 2011-12-07 11:18:04.315981854 +0100 > @@ -347,7 +347,6 @@ xfs_iformat( > return XFS_ERROR(EFSCORRUPTED); > } > ip->i_d.di_size = 0; > - ip->i_size = 0; > ip->i_df.if_u2.if_rdev = xfs_dinode_get_rdev(dip); > break; > > @@ -853,7 +852,6 @@ xfs_iread( > } > > ip->i_delayed_blks = 0; > - ip->i_size = ip->i_d.di_size; > > /* > * Mark the buffer containing the inode as something to keep > @@ -1043,7 +1041,6 @@ xfs_ialloc( > } > > ip->i_d.di_size = 0; > - ip->i_size = 0; > ip->i_d.di_nextents = 0; > ASSERT(ip->i_d.di_nblocks == 0); > > @@ -1198,7 +1195,7 @@ xfs_itruncate_extents( > int done = 0; > > ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); > - ASSERT(new_size <= ip->i_size); > + ASSERT(new_size <= XFS_ISIZE(ip)); > ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); > ASSERT(ip->i_itemp != NULL); > ASSERT(ip->i_itemp->ili_lock_flags == 0); > @@ -1712,8 +1709,7 @@ xfs_ifree( > ASSERT(ip->i_d.di_nlink == 0); > ASSERT(ip->i_d.di_nextents == 0); > ASSERT(ip->i_d.di_anextents == 0); > - ASSERT((ip->i_d.di_size == 0 && ip->i_size == 0) || > - (!S_ISREG(ip->i_d.di_mode))); > + ASSERT(ip->i_d.di_size == 0 || !S_ISREG(ip->i_d.di_mode)); > ASSERT(ip->i_d.di_nblocks == 0); > > /* > Index: xfs/fs/xfs/xfs_iomap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iomap.c 2011-12-07 11:15:53.693356164 +0100 > +++ xfs/fs/xfs/xfs_iomap.c 2011-12-07 11:18:04.315981854 +0100 > @@ -74,7 +74,7 @@ xfs_iomap_eof_align_last_fsb( > else if (mp->m_dalign) > align = mp->m_dalign; > > - if (align && ip->i_size >= XFS_FSB_TO_B(mp, align)) > + if (align && XFS_ISIZE(ip) >= XFS_FSB_TO_B(mp, align)) > new_last_fsb = roundup_64(*last_fsb, align); > } > > @@ -154,7 +154,7 @@ xfs_iomap_write_direct( > > offset_fsb = XFS_B_TO_FSBT(mp, offset); > last_fsb = XFS_B_TO_FSB(mp, ((xfs_ufsize_t)(offset + count))); > - if ((offset + count) > ip->i_size) { > + if ((offset + count) > XFS_ISIZE(ip)) { > error = xfs_iomap_eof_align_last_fsb(mp, ip, extsz, &last_fsb); > if (error) > goto error_out; > @@ -211,7 +211,7 @@ xfs_iomap_write_direct( > xfs_trans_ijoin(tp, ip, 0); > > bmapi_flag = 0; > - if (offset < ip->i_size || extsz) > + if (offset < XFS_ISIZE(ip) || extsz) > bmapi_flag |= XFS_BMAPI_PREALLOC; > > /* > @@ -286,7 +286,7 @@ xfs_iomap_eof_want_preallocate( > int found_delalloc = 0; > > *prealloc = 0; > - if ((offset + count) <= ip->i_size) > + if (offset + count <= XFS_ISIZE(ip)) > return 0; > > /* > @@ -340,7 +340,7 @@ xfs_iomap_prealloc_size( > * if we pass in alloc_blocks = 0. Hence the "+ 1" to > * ensure we always pass in a non-zero value. > */ > - alloc_blocks = XFS_B_TO_FSB(mp, ip->i_size) + 1; > + alloc_blocks = XFS_B_TO_FSB(mp, XFS_ISIZE(ip)) + 1; > alloc_blocks = XFS_FILEOFF_MIN(MAXEXTLEN, > rounddown_pow_of_two(alloc_blocks)); > > @@ -564,7 +564,7 @@ xfs_iomap_write_allocate( > * back.... > */ > nimaps = 1; > - end_fsb = XFS_B_TO_FSB(mp, ip->i_size); > + end_fsb = XFS_B_TO_FSB(mp, XFS_ISIZE(ip)); > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); > if (error) > Index: xfs/fs/xfs/xfs_vnodeops.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_vnodeops.c 2011-12-07 11:15:33.603464999 +0100 > +++ xfs/fs/xfs/xfs_vnodeops.c 2011-12-07 11:18:04.315981854 +0100 > @@ -175,7 +175,7 @@ xfs_free_eofblocks( > * Figure out if there are any blocks beyond the end > * of the file. If not, then there is nothing to do. > */ > - end_fsb = XFS_B_TO_FSB(mp, ((xfs_ufsize_t)ip->i_size)); > + end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip)); > last_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_MAXIOFFSET(mp)); > if (last_fsb <= end_fsb) > return 0; > @@ -233,7 +233,7 @@ xfs_free_eofblocks( > * may be full of holes (ie NULL files bug). > */ > error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, > - ip->i_size); > + XFS_ISIZE(ip)); > if (error) { > /* > * If we get an error at this point we simply don't > @@ -547,8 +547,8 @@ xfs_release( > return 0; > > if ((S_ISREG(ip->i_d.di_mode) && > - ((ip->i_size > 0) || (VN_CACHED(VFS_I(ip)) > 0 || > - ip->i_delayed_blks > 0)) && > + (VFS_I(ip)->i_size > 0 || > + (VN_CACHED(VFS_I(ip)) > 0 || ip->i_delayed_blks > 0)) && > (ip->i_df.if_flags & XFS_IFEXTENTS)) && > (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)))) { > > @@ -625,7 +625,7 @@ xfs_inactive( > * only one with a reference to the inode. > */ > truncate = ((ip->i_d.di_nlink == 0) && > - ((ip->i_d.di_size != 0) || (ip->i_size != 0) || > + ((ip->i_d.di_size != 0) || XFS_ISIZE(ip) != 0 || > (ip->i_d.di_nextents > 0) || (ip->i_delayed_blks > 0)) && > S_ISREG(ip->i_d.di_mode)); > > @@ -639,12 +639,12 @@ xfs_inactive( > > if (ip->i_d.di_nlink != 0) { > if ((S_ISREG(ip->i_d.di_mode) && > - ((ip->i_size > 0) || (VN_CACHED(VFS_I(ip)) > 0 || > - ip->i_delayed_blks > 0)) && > - (ip->i_df.if_flags & XFS_IFEXTENTS) && > - (!(ip->i_d.di_flags & > + (VFS_I(ip)->i_size > 0 || > + (VN_CACHED(VFS_I(ip)) > 0 || ip->i_delayed_blks > 0)) && > + (ip->i_df.if_flags & XFS_IFEXTENTS) && > + (!(ip->i_d.di_flags & > (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)) || > - (ip->i_delayed_blks != 0)))) { > + ip->i_delayed_blks != 0))) { > error = xfs_free_eofblocks(mp, ip, 0); > if (error) > return VN_INACTIVE_CACHE; > @@ -678,7 +678,6 @@ xfs_inactive( > xfs_trans_ijoin(tp, ip, 0); > > ip->i_d.di_size = 0; > - ip->i_size = 0; > xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > > error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); > @@ -1974,11 +1973,11 @@ xfs_zero_remaining_bytes( > * since nothing can read beyond eof. The space will > * be zeroed when the file is extended anyway. > */ > - if (startoff >= ip->i_size) > + if (startoff >= XFS_ISIZE(ip)) > return 0; > > - if (endoff > ip->i_size) > - endoff = ip->i_size; > + if (endoff > XFS_ISIZE(ip)) > + endoff = XFS_ISIZE(ip); > > bp = xfs_buf_get_uncached(XFS_IS_REALTIME_INODE(ip) ? > mp->m_rtdev_targp : mp->m_ddev_targp, > @@ -2273,7 +2272,7 @@ xfs_change_file_space( > bf->l_start += offset; > break; > case 2: /*SEEK_END*/ > - bf->l_start += ip->i_size; > + bf->l_start += XFS_ISIZE(ip); > break; > default: > return XFS_ERROR(EINVAL); > @@ -2290,7 +2289,7 @@ xfs_change_file_space( > bf->l_whence = 0; > > startoffset = bf->l_start; > - fsize = ip->i_size; > + fsize = XFS_ISIZE(ip); > > /* > * XFS_IOC_RESVSP and XFS_IOC_UNRESVSP will reserve or unreserve > Index: xfs/fs/xfs/xfs_inode.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.h 2011-12-07 11:17:50.642722594 +0100 > +++ xfs/fs/xfs/xfs_inode.h 2011-12-07 11:18:04.319315170 +0100 > @@ -246,16 +246,12 @@ typedef struct xfs_inode { > > xfs_icdinode_t i_d; /* most of ondisk inode */ > > - xfs_fsize_t i_size; /* in-memory size */ > xfs_fsize_t i_new_size; /* size when write completes */ > > /* VFS inode */ > struct inode i_vnode; /* embedded VFS inode */ > } xfs_inode_t; > > -#define XFS_ISIZE(ip) S_ISREG((ip)->i_d.di_mode) ? \ > - (ip)->i_size : (ip)->i_d.di_size; > - > /* Convert from vfs inode to xfs inode */ > static inline struct xfs_inode *XFS_I(struct inode *inode) > { > @@ -269,6 +265,18 @@ static inline struct inode *VFS_I(struct > } > > /* > + * For regular files we only update the on-disk filesize when actually > + * writing data back to disk. Until then only the copy in the VFS inode > + * is uptodate. > + */ > +static inline xfs_fsize_t XFS_ISIZE(struct xfs_inode *ip) > +{ > + if (S_ISREG(ip->i_d.di_mode)) > + return i_size_read(VFS_I(ip)); > + return ip->i_d.di_size; > +} > + > +/* > * i_flags helper functions > */ > static inline void > Index: xfs/fs/xfs/xfs_qm_syscalls.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_qm_syscalls.c 2011-12-07 11:15:33.600131684 +0100 > +++ xfs/fs/xfs/xfs_qm_syscalls.c 2011-12-07 11:18:04.319315170 +0100 > @@ -265,7 +265,6 @@ xfs_qm_scall_trunc_qfile( > xfs_trans_ijoin(tp, ip, 0); > > ip->i_d.di_size = 0; > - ip->i_size = 0; > xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > > error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From zhengda1936@gmail.com Mon Jan 16 13:44:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_20,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GJiWb1110034 for ; Mon, 16 Jan 2012 13:44:32 -0600 X-ASG-Debug-ID: 1326743070-0222017aa4b0d4e0001-NocioJ Received: from mail-gy0-f181.google.com (mail-gy0-f181.google.com [209.85.160.181]) by cuda.sgi.com with ESMTP id a6zWk0NyRg1UHKnZ for ; Mon, 16 Jan 2012 11:44:30 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.181 Received: by ghbf15 with SMTP id f15so1839988ghb.26 for ; Mon, 16 Jan 2012 11:44:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=M862dDcAjIpALZXjhxVqoMN+tJgsdBkTqIrc1Otlghw=; b=qHI5cv7XaYg5f6GcZZ4G55Ry+gG8EMjk5abv8Yks/vzSCizacYYN6mqPRZAqshlllP e6dyNta3MBpUbPKSr5tSMI1HPhqiE+EVohQqizGCGb1MKdSzFVTeZBXyvYkFhtJx+ZN1 GUEA8ROE1YOJ/bTZAI+xdcfSxN0dBUhuJykMI= MIME-Version: 1.0 Received: by 10.101.105.1 with SMTP id h1mr5262418anm.30.1326743070522; Mon, 16 Jan 2012 11:44:30 -0800 (PST) Received: by 10.146.104.1 with HTTP; Mon, 16 Jan 2012 11:44:30 -0800 (PST) In-Reply-To: <20120116174819.GA19417@infradead.org> References: <20120116174819.GA19417@infradead.org> Date: Mon, 16 Jan 2012 14:44:30 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: Christoph Hellwig Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001636cd75126d3cea04b6aa71c8 X-Barracuda-Connect: mail-gy0-f181.google.com[209.85.160.181] X-Barracuda-Start-Time: 1326743070 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --001636cd75126d3cea04b6aa71c8 Content-Type: text/plain; charset=ISO-8859-1 Hello Christoph, Right now I'm using kernel 3.2. My test program writes 4G of data to a file that has been preallocated and each time it writes a page of data randomly to the file. It's always overwriting, and no appending. The offset of each write is always aligned to the page size. There is no overlapping between writes as I said before. I also tried mixing reads and writes and got the similar result. Can you write data to a file with multiple threads and the performance can scale up with more threads? Thanks, Da On Mon, Jan 16, 2012 at 12:48 PM, Christoph Hellwig wrote: > On Sun, Jan 15, 2012 at 07:01:42PM -0500, Zheng Da wrote: > > Hello, > > > > I surprisedly found that writing data to a file (no appending) with > direct > > IO and with multiple threads has the same performance as a single thread. > > Actually, it seems there is only one core is working at a time. In my > case, > > each time I write a page to a file and the offset is always aligned to > the > > page size, so there is no overlapping between writes. > > What kernel version are you using? Also, what is the exact I/O > pattern? > > --001636cd75126d3cea04b6aa71c8 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello Christoph,

Right now I'm using kernel 3.2.=A0<= /div>
My test program writes 4G of data to a file that has been preallo= cated and each time it writes a page of data randomly to the file. It's= always overwriting, and no appending. The offset of each write is always a= ligned to the page size. There is no overlapping between writes as I said b= efore.=A0
I also tried mixing reads and writes and got the similar result.
=
Can you write data to a file with multiple threads and the performance= can scale up with more threads?

Thanks,
Da

On Mon, Jan 16, 2012 at 12:48 PM,= Christoph Hellwig <hch@infradead.org> wrote:
On Sun, Jan 15, 2012 at 07:01:42PM -0500, Zheng Da wrote:=
> Hello,
>
> I surprisedly found that writing data to a file (no appending) with di= rect
> IO and with multiple threads has the same performance as a single thre= ad.
> Actually, it seems there is only one core is working at a time. In my = case,
> each time I write a page to a file and the offset is always aligned to= the
> page size, so there is no overlapping between writes.

What kernel version are you using? =A0Also, what is the exact I/O
pattern?


--001636cd75126d3cea04b6aa71c8-- From bpm@sgi.com Mon Jan 16 13:45:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GJjUqJ110132 for ; Mon, 16 Jan 2012 13:45:30 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3D4FE8F8039; Mon, 16 Jan 2012 11:45:27 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 1EDEB426DA7; Mon, 16 Jan 2012 13:45:29 -0600 (CST) Date: Mon, 16 Jan 2012 13:45:29 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 08/11] xfs: remove the i_size field in struct xfs_inode Message-ID: <20120116194529.GB16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.134835340@bombadil.infradead.org> <20120116183201.GA16581@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120116183201.GA16581@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) On Mon, Jan 16, 2012 at 12:32:01PM -0600, Ben Myers wrote: > On Sun, Dec 18, 2011 at 03:00:11PM -0500, Christoph Hellwig wrote: > > There is no fundamental need to keep an in-memory inode size copy in the XFS > > inode. We already have the on-disk value in the dinode, and the separate > > in-memory copy that we need for regular files only in the XFS inode. > > > > Remove the xfs_inode i_size field and change the XFS_ISIZE macro to use the > > VFS inode i_size field for regular fields. Switch code that was directly files. I'll fix that up. -Ben > > accessing the i_size field in the xfs_inode to XFS_ISIZE, or in cases where > > we are limited to regular files direct access of the VFS inode i_size field. > > > > This also allows dropping some fairly complicated code in the write path > > which dealt with keeping the xfs_inode i_size uptodate with the VFS i_size > > that is getting updated inside ->write_end. > > > > Note that we do not bother resetting the VFS i_size when truncating a file > > that gets freed to zero as there is point in doing so because the VFS inode > > is no longer in use at this point. Just relax the assert in xfs_ifree to > > only check the on-disk size instead. > > > > Reviewed-by: Dave Chinner > > Signed-off-by: Christoph Hellwig > > This looks good to me too. The only suggestion I had was that in some > of these places where we call XFS_ISIZE or i_size_read twice in a row, > it might be nicer to read them into a local variable and use that. > Dave's comments were very helpful. > > Reviewed-by: Ben Myers From bpm@sgi.com Mon Jan 16 16:41:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GMfm6b117775 for ; Mon, 16 Jan 2012 16:41:48 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 52CD130406A; Mon, 16 Jan 2012 14:41:45 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 3E811426DA7; Mon, 16 Jan 2012 16:41:47 -0600 (CST) Date: Mon, 16 Jan 2012 16:41:47 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 09/11] xfs: remove the i_new_size field in struct xfs_inode Message-ID: <20120116224147.GC16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.299481659@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200132.299481659@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) On Sun, Dec 18, 2011 at 03:00:12PM -0500, Christoph Hellwig wrote: > Now that we use the VFS i_size field throughout XFS there is no need for the > i_new_size field any more given that the VFS i_size field gets updated > in ->write_end before unlocking the page, and thus is a) always uptodate when > writeback could see a page. Removing i_new_size also has the advantage that > we will never have to trim back di_size during a failed buffered write, > given that it never gets updated past i_size. > > Note that currently the generic direct I/O code only updates i_size after > calling our end_io handler, which requires a small workaround to make > sure di_size actually makes it to disk. I hope to fix this properly in > the generic code. > > A downside is that we lose the support for parallel non-overlapping O_DIRECT > appending writes that recently was added. I don't think keeping the complex > and fragile i_new_size infrastructure for this is a good tradeoff - if we > really care about parallel appending writers we should investigate turning > the iolock into a range lock, which would also allow for parallel > non-overlapping buffered writers. > > Signed-off-by: Christoph Hellwig > > --- > fs/xfs/xfs_aops.c | 28 +++++++++++--------- > fs/xfs/xfs_file.c | 72 +++++++---------------------------------------------- > fs/xfs/xfs_iget.c | 1 > fs/xfs/xfs_inode.h | 2 - > fs/xfs/xfs_trace.h | 18 ++----------- > 5 files changed, 29 insertions(+), 92 deletions(-) > > Index: xfs/fs/xfs/xfs_file.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_file.c 2011-11-30 12:59:11.669698558 +0100 > +++ xfs/fs/xfs/xfs_file.c 2011-11-30 12:59:13.533021797 +0100 > @@ -413,27 +413,6 @@ xfs_file_splice_read( > } > > /* > - * If this was a direct or synchronous I/O that failed (such as ENOSPC) then > - * part of the I/O may have been written to disk before the error occurred. In > - * this case the on-disk file size may have been adjusted beyond the in-memory > - * file size and now needs to be truncated back. > - */ > -STATIC void > -xfs_aio_write_newsize_update( > - struct xfs_inode *ip, > - xfs_fsize_t new_size) > -{ > - if (new_size == ip->i_new_size) { Ouch. If I'm reading this right the behavior prior to this patch is a little messed up... xfs_file_aio_write new_size = 0 xfs_file_buffered_aio_write(&new_size xfs_file_aio_write_checks - for a non-extending write it won't touch *new_sizep generic_file_buffered_write - ... xfs_aio_write_isize_update - doesn't touch new_size xfs_aio_write_newsize_update: STATIC void xfs_aio_write_newsize_update( struct xfs_inode *ip, xfs_fsize_t new_size) { if (new_size == ip->i_new_size) { <--- 0 == 0 xfs_rw_ilock(ip, XFS_ILOCK_EXCL); if (new_size == ip->i_new_size) ip->i_new_size = 0; if (ip->i_d.di_size > ip->i_size) ip->i_d.di_size = ip->i_size; xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); } } AFAICT even for non-extending writes we are taking the ilock exclusive to test (ip->i_d.di_size > ip->i_size). That does not seem necessary, correct? This is not an issue with your patch... I just want to make sure I understand. Thanks, Ben From bpm@sgi.com Mon Jan 16 16:45:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GMjSx7117965 for ; Mon, 16 Jan 2012 16:45:28 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6D39E8F8033; Mon, 16 Jan 2012 14:45:25 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 2E16D426DA7; Mon, 16 Jan 2012 16:45:27 -0600 (CST) Date: Mon, 16 Jan 2012 16:45:27 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/11] xfs: remove the if_ext_max field in struct xfs_ifork Message-ID: <20120116224527.GD16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.321997628@bombadil.infradead.org> <20120106165818.GD6390@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120106165818.GD6390@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) Hey Christoph, On Fri, Jan 06, 2012 at 10:58:18AM -0600, Ben Myers wrote: > On Sun, Dec 18, 2011 at 03:00:07PM -0500, Christoph Hellwig wrote: > > We spent a lot of effort to maintain this field, but it always equalts to the > equals the > > fork size divided by the constant size of an extent. The prime use of it is > > to assert that the two stay in sync. Just divide the fork size by the extent > > size in the few places that we actually use it and remove the overhead > > of maintaining it. Also introduce a few helpers to consolidate the places > > where we actually care about the value. > > > > Signed-off-by: Christoph Hellwig > > Reviewed-by: Dave Chinner > > After reviewing this patch it's not crystal clear to me why we were > putting all that effort into keeping this counter uptodate on the inode > instead of using helpers like you've implemented. Maybe a question of > integer division as Dave suggested. This is a nice improvement. > > > Index: xfs/fs/xfs/xfs_bmap.c > > =================================================================== > > --- xfs.orig/fs/xfs/xfs_bmap.c 2011-12-12 10:33:55.748696870 -0800 > > +++ xfs/fs/xfs/xfs_bmap.c 2011-12-14 05:15:20.612373687 -0800 > > @@ -249,7 +249,27 @@ xfs_bmbt_lookup_ge( > > } > > > > /* > > -* Update the record referred to by cur to the value given > > + * Check if the inode needs to be converted to btree format. > > + */ > > +static inline bool xfs_bmap_needs_btree(struct xfs_inode *ip, int whichfork) > > +{ > > + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && > > + XFS_IFORK_NEXTENTS(ip, whichfork) > > > + XFS_IFORK_MAXEXT(ip, whichfork); > > +} > > + > > +/* > > + * Check if the inode should be converted to extent format. > > + */ > > +static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork) > > +{ > > + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE && > > + XFS_IFORK_NEXTENTS(ip, whichfork) <= > > + XFS_IFORK_MAXEXT(ip, whichfork); > > +} > > The logic in these two appears to be equivalent to the code you've > replaced in all but one case... > > ... > > > @@ -5321,8 +5318,7 @@ xfs_bunmapi( > > * will be dirty. > > */ > > if (!wasdel && xfs_trans_get_block_res(tp) == 0 && > > - XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && > > - XFS_IFORK_NEXTENTS(ip, whichfork) >= ifp->if_ext_max && > ^^ > All other tests for this were: > XFS_IFORK_NEXTENTS(ip, whichfork) > ifp->if_ext_max > > Did you just fix a lurking off-by-one or insert one? > > xfs_bmap_needs_btree needs ip->i_d.di_nextents to have been incremented > already in order to detect that we need to convert to btree format. In > this case we haven't done that yet and are checking to see if doing so > would require conversion to btree format... > > Looks to me like we can't use xfs_bmap_needs_btree here and should use > the old logic. Right? HCH, I have a question for you here that I feel needs to be resolved. Can you take a look? Thanks, Ben From david@fromorbit.com Mon Jan 16 17:11:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GNBRXh118812 for ; Mon, 16 Jan 2012 17:11:28 -0600 X-ASG-Debug-ID: 1326755484-0222017aa4b1fc10001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id V0GAsbNStZTNM1HG for ; Mon, 16 Jan 2012 15:11:25 -0800 (PST) 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: Av4EAD2tFE95LbVq/2dsb2JhbABErDCBC4EGgXIBAQQBOhwjEAgDGC4UJQMhE4d6tgcTiR4ECQUBBQkJBQEFCAUEEQUBBgEBBgEFBgkNEAECAQEFAwEBAQECgngBBQECAwcBBAEBAQELAgcBAQIDDQECAwEBAwIDAgMEAQSCZGMElRCSVg Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail04.adl6.internode.on.net with ESMTP; 17 Jan 2012 09:41:23 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rmvhx-0004Hs-NZ; Tue, 17 Jan 2012 10:11:21 +1100 Date: Tue, 17 Jan 2012 10:11:21 +1100 From: Dave Chinner To: Stan Hoeppner Cc: xfs@oss.sgi.com Subject: Re: Optimal XFS formatting options? Message-ID: <20120116231121.GB6922@dastard> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <4F12006F.8080805@hardwarefreak.com> <33145068.post@talk.nabble.com> <4F13ADF6.90903@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F13ADF6.90903@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: 1326755484 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86110 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Jan 15, 2012 at 10:56:22PM -0600, Stan Hoeppner wrote: > On 1/15/2012 6:27 PM, MikeJeezy wrote: > > I would like to align the partiton as well, but I am not sure how to acheive > > this using parted. This will be the only partition on the LUN, so not sure > > if I even need to create one (although I do like to stay consistent with my > > other volumes). > > If your drives have 512 byte physical sectors (not advanced format > drives with 4096 byte sectors) then there is no need to worry about > partition alignment. That is incorrect. Partitions need to be aligned to the underlying stripe configuration, regardless of the sector size of the drives that make up the stripe. If you do not align the partition to the stripe, then the filesystem will be unaligned no matter how you configure it. Every layer of the storage stack under the filesystem needs to be correctly aligned and sized for filesystem alignment to make any difference to performance. > > Any thoughts on partition alignment or > > other thoughts in general? Thank you. > > Yes, don't use partitions if you don't need to divide your disk device > (LUN/virtual disk) into multiple pieces. Now, if you need to make use > of snapshots or other volume management features, you may want to create > an LVM device on top of the disk device (LUN) and then make your XFS on > top of the LVM device. If you have no need for LVM features, I'd say > directly format the LUN with XFS, no partition table necessary. If you use LVM, then you need to ensure that it is slicing up the device in a manner that is aligned correctly to the underlying stripe, just like if you are using partitions to provide the same functionality. Different technologies, same problem. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jan 16 17:25:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0GNPrOO119274 for ; Mon, 16 Jan 2012 17:25:53 -0600 X-ASG-Debug-ID: 1326756351-0222017aa3b22a10001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id YWvKUC34xO4vCQL6 for ; Mon, 16 Jan 2012 15:25:51 -0800 (PST) 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: Av8EANWwFE95LbVq/2dsb2JhbAA8CKwwgQuBBoFyAQEEATocIwULCAMYLhQlAyETh3q2DxOISlQECQUBBQkJBQEFCAUEEQUBBgEBBgEFBgkNEAECAQEIAQEBAQKCeAEFAQIDBwEEAQEBAQsCBwEDAw0BAgMBAQMCAwUEBYJkYwSVEJJW Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail04.adl6.internode.on.net with ESMTP; 17 Jan 2012 09:55:50 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rmvvx-0004JM-Gr; Tue, 17 Jan 2012 10:25:49 +1100 Date: Tue, 17 Jan 2012 10:25:49 +1100 From: Dave Chinner To: Zheng Da Cc: xfs@oss.sgi.com Subject: Re: concurrent direct IO write in xfs Message-ID: <20120116232549.GC6922@dastard> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1326756351 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86112 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Jan 15, 2012 at 07:01:42PM -0500, Zheng Da wrote: > Hello, > > I surprisedly found that writing data to a file (no appending) with direct I'm not so sure. > And systemtap shows me that xfs_inode.i_lock is locked exclusively in the > following functions. > 0xffffffff81289235 : xfs_file_aio_write_checks+0x45/0x1d0 [kernel] Always taken, short time period. > 0xffffffff81288b6a : xfs_aio_write_newsize_update+0x3a/0x90 [kernel] Only ever taken when doing appending writes. Are you -sure- you are not doing appending writes? > 0xffffffff812829f4 : __xfs_get_blocks+0x94/0x4a0 [kernel] And for direct IO writes, this will be the block mapping lookup so always hit. What this says to me is that you are probably doing is lots of very small concurrent write IOs, but I'm only guessing. Can you provide your test case and a description of your test hardware so we can try to reproduce the problem? > 0xffffffff8129590a : xfs_log_dirty_inode+0x7a/0xe0 [kernel] > xfs_log_dirty_inode is only invoked 3 times when I write 4G data to the > file, so we can completely ignore it. But I'm not sure which of them is the > major cause of the bad write performance or whether they are the cause of > the bad performance. But it seems none of them are the main operations in > direct io write. > > It seems to me that the lock might not be necessary for my case. It'll be The locking is definitely necessary. We might be able to optimise it to reduce the serialisation for the overwrite case if that really is the problem, but there is a limit to how much concurrent IO you can currently do to a single file. We really need a test case to be able to make and test such optimisations, though. > nice if I can disable the lock. Or is there any suggestion of achieving > better write performance with multiple threads in XFS? > I tried ext4 and it doesn't perform better than XFS. Does the problem exist > in all FS? I think you'll find XFS performs the best of the lot for this sort of concurrent DIO write workload. Cheers, Dave. -- Dave Chinner david@fromorbit.com From stan@hardwarefreak.com Mon Jan 16 21:32:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0H3WWhE128404 for ; Mon, 16 Jan 2012 21:32:32 -0600 X-ASG-Debug-ID: 1326771150-00a9eb57851c5b0001-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 kHvLIrdUZYziD8fX for ; Mon, 16 Jan 2012 19:32:30 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 172956C134; Mon, 16 Jan 2012 21:32:00 -0600 (CST) Message-ID: <4F14EBAF.10808@hardwarefreak.com> Date: Mon, 16 Jan 2012 21:31:59 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <4F12006F.8080805@hardwarefreak.com> <33145068.post@talk.nabble.com> <4F13ADF6.90903@hardwarefreak.com> <20120116231121.GB6922@dastard> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? In-Reply-To: <20120116231121.GB6922@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: 1326771150 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86126 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On 1/16/2012 5:11 PM, Dave Chinner wrote: > On Sun, Jan 15, 2012 at 10:56:22PM -0600, Stan Hoeppner wrote: >> On 1/15/2012 6:27 PM, MikeJeezy wrote: >>> I would like to align the partiton as well, but I am not sure how to acheive >>> this using parted. This will be the only partition on the LUN, so not sure >>> if I even need to create one (although I do like to stay consistent with my >>> other volumes). >> >> If your drives have 512 byte physical sectors (not advanced format >> drives with 4096 byte sectors) then there is no need to worry about >> partition alignment. > > That is incorrect. Partitions need to be aligned to the underlying > stripe configuration, regardless of the sector size of the drives > that make up the stripe. If you do not align the partition to the > stripe, then the filesystem will be unaligned no matter how you > configure it. Every layer of the storage stack under the filesystem > needs to be correctly aligned and sized for filesystem alignment to > make any difference to performance. Thanks for the correction/reminder Dave. So in this case the first sector of the first partition would need to reside at LBA1280 in this array (655360 byte stripe width, 1280 sectors/stripe), as the partition table itself is going to occupy some sectors at the beginning of the first stripe. By creating the partition at LBA1280 we make sure the first sector of the XFS filesystem is aligned with the first sector of the 2nd stripe. This exercise demonstrates why it's often preferable to directly format the LUN. If you don't have a _need_ for a partition table, such as cloning/backup software that works at the partition level, or something of that nature, avoid partitions. >>> Any thoughts on partition alignment or >>> other thoughts in general? Thank you. >> >> Yes, don't use partitions if you don't need to divide your disk device >> (LUN/virtual disk) into multiple pieces. Now, if you need to make use >> of snapshots or other volume management features, you may want to create >> an LVM device on top of the disk device (LUN) and then make your XFS on >> top of the LVM device. If you have no need for LVM features, I'd say >> directly format the LUN with XFS, no partition table necessary. > > If you use LVM, then you need to ensure that it is slicing up the > device in a manner that is aligned correctly to the underlying > stripe, just like if you are using partitions to provide the same > functionality. Different technologies, same problem. If he's doing a single LVM volume then alignment should be automatic during mkfs.xfs shouldn't it? -- Stan From michael.monnerie@is.it-management.at Tue Jan 17 03:20:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0H9KVaT145345 for ; Tue, 17 Jan 2012 03:20:32 -0600 X-ASG-Debug-ID: 1326792001-0222017aa3b5f1c0001-NocioJ Received: from mailsrv14.zmi.at (mailsrv14.zmi.at [212.69.164.54]) by cuda.sgi.com with ESMTP id D8sFHCzcml8IR0jX for ; Tue, 17 Jan 2012 01:20:02 -0800 (PST) X-Barracuda-Envelope-From: michael.monnerie@is.it-management.at X-Barracuda-Apparent-Source-IP: 212.69.164.54 Received: from mailsrv.i.zmi.at (h081217106014.dyn.cm.kabsi.at [81.217.106.14]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv14.zmi.at (Postfix) with ESMTPSA id D5E4F1822432; Tue, 17 Jan 2012 10:20:00 +0100 (CET) Received: from saturn.localnet (saturn.i.zmi.at [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id E559FCD7C8C; Tue, 17 Jan 2012 10:20:10 +0100 (CET) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com, stan@hardwarefreak.com Subject: Re: Optimal XFS formatting options? Date: Tue, 17 Jan 2012 10:19:55 +0100 X-ASG-Orig-Subj: Re: Optimal XFS formatting options? User-Agent: KMail/1.13.6 (Linux/3.1.5-zmi; KDE/4.6.0; x86_64; ; ) Cc: Dave Chinner References: <33140169.post@talk.nabble.com> <20120116231121.GB6922@dastard> <4F14EBAF.10808@hardwarefreak.com> In-Reply-To: <4F14EBAF.10808@hardwarefreak.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart4061187.mfvmjNA2CY"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <201201171019.58714@zmi.at> X-Barracuda-Connect: mailsrv14.zmi.at[212.69.164.54] X-Barracuda-Start-Time: 1326792002 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --nextPart4061187.mfvmjNA2CY Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable On Dienstag, 17. Januar 2012 Stan Hoeppner wrote: > Thanks for the correction/reminder Dave. So in this case the first > sector of the first partition would need to reside at LBA1280 in this > array (655360 byte stripe width, 1280 sectors/stripe), as the > partition table itself is going to occupy some sectors at the > beginning of the first stripe. By creating the partition at LBA1280 > we make sure the first sector of the XFS filesystem is aligned with > the first sector of the 2nd stripe. There's one big problem with that: Many people will sooner or later=20 expand and existing array. If you add one drive, all your nice stripe=20 width alignment becomes bogus, and suddenly your performance will drop. There's no real way out of that, but three solutions come to my mind: =2D backup before expand/restore after expand with new alignment =2D leave existing data, just change mount options so after expansion at=20 least new files are going to be aligned to the new stripe width.=20 =2D expand array by factors of two. So if you have 10 data drives, add 10=20 data drives. But that creates other problems (probability of single=20 drive failure + time to recover a single broken disk) =2D-=20 mit freundlichen Gr=FCssen, Michael Monnerie, Ing. BSc it-management Internet Services: Prot=E9ger http://proteger.at [gesprochen: Prot-e-schee] Tel: +43 660 / 415 6531 --nextPart4061187.mfvmjNA2CY Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) iEYEABECAAYFAk8VPT4ACgkQzhSR9xwSCbSXEgCginyCR7hgWneYeCg/WCD9gXqy t98An3RiC9v6mpT+VnS49fsMWvdvgvt4 =HdGk -----END PGP SIGNATURE----- --nextPart4061187.mfvmjNA2CY-- From eflorac@intellique.com Tue Jan 17 05:18:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HBI8FV151791 for ; Tue, 17 Jan 2012 05:18:08 -0600 X-ASG-Debug-ID: 1326799084-0222017aa6b71f50001-NocioJ Received: from smtp4-g21.free.fr (smtp4-g21.free.fr [212.27.42.4]) by cuda.sgi.com with ESMTP id EV5iELB6HW88tCid for ; Tue, 17 Jan 2012 03:18:05 -0800 (PST) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.4 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp4-g21.free.fr (Postfix) with ESMTP id D760F4C81DF for ; Tue, 17 Jan 2012 12:18:00 +0100 (CET) Date: Tue, 17 Jan 2012 12:17:49 +0100 From: Emmanuel Florac To: xfs@oss.sgi.com Subject: Re: Optimal XFS formatting options? Message-ID: <20120117121749.347122b1@harpe.intellique.com> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? In-Reply-To: <201201171019.58714@zmi.at> References: <33140169.post@talk.nabble.com> <20120116231121.GB6922@dastard> <4F14EBAF.10808@hardwarefreak.com> <201201171019.58714@zmi.at> Organization: Intellique X-Mailer: Claws Mail 3.7.9 (GTK+ 2.16.6; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/signed; micalg=PGP-SHA1; boundary="Sig_/jqtkFdZbn=wXwex0xwIdbI."; protocol="application/pgp-signature" X-Barracuda-Connect: smtp4-g21.free.fr[212.27.42.4] X-Barracuda-Start-Time: 1326799084 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86156 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --Sig_/jqtkFdZbn=wXwex0xwIdbI. Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Le Tue, 17 Jan 2012 10:19:55 +0100 Michael Monnerie =E9crivait: > - expand array by factors of two. So if you have 10 data drives, add > 10 data drives. But that creates other problems (probability of > single drive failure + time to recover a single broken disk) =46rom my experience 20 drives is OK for RAID-6. And rebuild time doesn't change much with array size, anyway. Misaligned partitions, on the other hand, can easily halve array throughput from my own measurements. --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ --Sig_/jqtkFdZbn=wXwex0xwIdbI. Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAk8VWN4ACgkQX3jQXNUicVaaLQCg6YnSPq2B//biMLpF/1gf4OrV cCsAn2fNwVg2Ltms910vos0Hwwo1tb8t =3RMQ -----END PGP SIGNATURE----- --Sig_/jqtkFdZbn=wXwex0xwIdbI.-- From stan@hardwarefreak.com Tue Jan 17 05:34:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HBYUi7152641 for ; Tue, 17 Jan 2012 05:34:30 -0600 X-ASG-Debug-ID: 1326800068-00a9eb5786554e0001-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 wZFG1SktBG0GUs5a for ; Tue, 17 Jan 2012 03:34:29 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id A1EFD6C134; Tue, 17 Jan 2012 05:34:28 -0600 (CST) Message-ID: <4F155CC2.3050201@hardwarefreak.com> Date: Tue, 17 Jan 2012 05:34:26 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Michael Monnerie CC: xfs@oss.sgi.com Subject: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <20120116231121.GB6922@dastard> <4F14EBAF.10808@hardwarefreak.com> <201201171019.58714@zmi.at> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? In-Reply-To: <201201171019.58714@zmi.at> 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: 1326800069 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86157 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.00 BSF_SC5_SA210e Custom Rule SA210e On 1/17/2012 3:19 AM, Michael Monnerie wrote: > On Dienstag, 17. Januar 2012 Stan Hoeppner wrote: >> Thanks for the correction/reminder Dave. So in this case the first >> sector of the first partition would need to reside at LBA1280 in this >> array (655360 byte stripe width, 1280 sectors/stripe), as the >> partition table itself is going to occupy some sectors at the >> beginning of the first stripe. By creating the partition at LBA1280 >> we make sure the first sector of the XFS filesystem is aligned with >> the first sector of the 2nd stripe. > > There's one big problem with that: Many people will sooner or later > expand and existing array. If you add one drive, all your nice stripe > width alignment becomes bogus, and suddenly your performance will drop. So to be clear, your issue with the above isn't with my partition alignment math WRT the OP's P2000 array, but is with using XFS stripe alignment in general, correct? > There's no real way out of that, but three solutions come to my mind: > - backup before expand/restore after expand with new alignment > - leave existing data, just change mount options so after expansion at > least new files are going to be aligned to the new stripe width. > - expand array by factors of two. So if you have 10 data drives, add 10 > data drives. But that creates other problems (probability of single > drive failure + time to recover a single broken disk) There is one really simple way around this issue you describe: don't add drives to an existing array. Simply create another array with new disks, create a new aligned XFS on the array, and mount the filesystem in an appropriate location. There is no 11th Commandment stating one must have a single massive XFS atop all of one's disks. ;) There is little to no application software today that can't be configured to store its data files across multiple directories. So there's no need to box oneself into the corner you describe above. -- Stan From bpm@sgi.com Tue Jan 17 09:16:41 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HFGfW9162570 for ; Tue, 17 Jan 2012 09:16:41 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 86626AC003; Tue, 17 Jan 2012 07:16:37 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 500EA426DA7; Tue, 17 Jan 2012 09:16:39 -0600 (CST) Date: Tue, 17 Jan 2012 09:16:39 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 04/11] xfs: remove the if_ext_max field in struct xfs_ifork Message-ID: <20120117151639.GE16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.321997628@bombadil.infradead.org> <20120106165818.GD6390@sgi.com> <20120116224527.GD16581@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120116224527.GD16581@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) On Mon, Jan 16, 2012 at 04:45:27PM -0600, Ben Myers wrote: > Hey Christoph, > > On Fri, Jan 06, 2012 at 10:58:18AM -0600, Ben Myers wrote: > > On Sun, Dec 18, 2011 at 03:00:07PM -0500, Christoph Hellwig wrote: > > > We spent a lot of effort to maintain this field, but it always equalts to the > > equals the > > > fork size divided by the constant size of an extent. The prime use of it is > > > to assert that the two stay in sync. Just divide the fork size by the extent > > > size in the few places that we actually use it and remove the overhead > > > of maintaining it. Also introduce a few helpers to consolidate the places > > > where we actually care about the value. > > > > > > Signed-off-by: Christoph Hellwig > > > Reviewed-by: Dave Chinner > > > > After reviewing this patch it's not crystal clear to me why we were > > putting all that effort into keeping this counter uptodate on the inode > > instead of using helpers like you've implemented. Maybe a question of > > integer division as Dave suggested. This is a nice improvement. > > > > > Index: xfs/fs/xfs/xfs_bmap.c > > > =================================================================== > > > --- xfs.orig/fs/xfs/xfs_bmap.c 2011-12-12 10:33:55.748696870 -0800 > > > +++ xfs/fs/xfs/xfs_bmap.c 2011-12-14 05:15:20.612373687 -0800 > > > @@ -249,7 +249,27 @@ xfs_bmbt_lookup_ge( > > > } > > > > > > /* > > > -* Update the record referred to by cur to the value given > > > + * Check if the inode needs to be converted to btree format. > > > + */ > > > +static inline bool xfs_bmap_needs_btree(struct xfs_inode *ip, int whichfork) > > > +{ > > > + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && > > > + XFS_IFORK_NEXTENTS(ip, whichfork) > > > > + XFS_IFORK_MAXEXT(ip, whichfork); > > > +} > > > + > > > +/* > > > + * Check if the inode should be converted to extent format. > > > + */ > > > +static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork) > > > +{ > > > + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE && > > > + XFS_IFORK_NEXTENTS(ip, whichfork) <= > > > + XFS_IFORK_MAXEXT(ip, whichfork); > > > +} > > > > The logic in these two appears to be equivalent to the code you've > > replaced in all but one case... > > > > ... > > > > > @@ -5321,8 +5318,7 @@ xfs_bunmapi( > > > * will be dirty. > > > */ > > > if (!wasdel && xfs_trans_get_block_res(tp) == 0 && > > > - XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && > > > - XFS_IFORK_NEXTENTS(ip, whichfork) >= ifp->if_ext_max && > > ^^ > > All other tests for this were: > > XFS_IFORK_NEXTENTS(ip, whichfork) > ifp->if_ext_max > > > > Did you just fix a lurking off-by-one or insert one? > > > > xfs_bmap_needs_btree needs ip->i_d.di_nextents to have been incremented > > already in order to detect that we need to convert to btree format. In > > this case we haven't done that yet and are checking to see if doing so > > would require conversion to btree format... > > > > Looks to me like we can't use xfs_bmap_needs_btree here and should use > > the old logic. Right? > > HCH, I have a question for you here that I feel needs to be resolved. > Can you take a look? Here is what I propose to use here: @@ -5322,7 +5319,8 @@ xfs_bunmapi( */ if (!wasdel && xfs_trans_get_block_res(tp) == 0 && XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS && - XFS_IFORK_NEXTENTS(ip, whichfork) >= ifp->if_ext_max && + XFS_IFORK_NEXTENTS(ip, whichfork) >= /* Note the >= */ + XFS_IFORK_MAXEXT(ip, whichfork) && del.br_startoff > got.br_startoff && del.br_startoff + del.br_blockcount < got.br_startoff + got.br_blockcount) { -Ben From sandeen@sandeen.net Tue Jan 17 10:33:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HGXLAY165528 for ; Tue, 17 Jan 2012 10:33:21 -0600 X-ASG-Debug-ID: 1326817999-04cb6c762b00e20001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id zfNraUq0SbKKLsh9 for ; Tue, 17 Jan 2012 08:33:19 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 04E834012505; Tue, 17 Jan 2012 10:33:19 -0600 (CST) Message-ID: <4F15A2D0.2090900@sandeen.net> Date: Tue, 17 Jan 2012 10:33:20 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Dave Chinner CC: Eric Sandeen , ext4 development , Eryu Guan , xfs-oss Subject: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> <20120104231725.GB24466@dastard> <4F04DEDC.6020807@redhat.com> <20120105003928.GC24466@dastard> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass In-Reply-To: <20120105003928.GC24466@dastard> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1326817999 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86178 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/4/12 6:39 PM, Dave Chinner wrote: > On Wed, Jan 04, 2012 at 05:21:00PM -0600, Eric Sandeen wrote: >> On 1/4/12 5:17 PM, Dave Chinner wrote: >>> On Wed, Jan 04, 2012 at 02:54:25PM -0600, Eric Sandeen wrote: >>>> Ok, this is a significant rework of 275, which made too many >>>> assumptions about details of space usage and failed on several >>>> filesystems (it passed on xfs, but only by accident). >>>> >>>> This new version tries to leave about 256k free, then tries >>>> a single 1M IO, and fails only if 0 bytes are written. >>>> >>>> It also sends a lot more to $seq.full for debugging on failure >>>> and fixes a few other stylistic things. >>>> >>>> Signed-off-by: Eric Sandeen >>> >>> I just had another thought about this, Eric.... >>> >>>> +# And at least some of it should succeed. >>>> +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` >>>> +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." >>> >>> The question that just came to mind was this assumes that allocation >>> succeeded so therefore the partial write succeeded. But that's not >>> necessary the case. The partial write might not succeed leaving the >>> file size as zero, but the underlying FS might not remove all the >>> blocks it allocated (nothing says that it has to). Hence to >>> determine if a partial write succeeded, we also need to check that >>> the file size itself is greater than zero.... >> >> Probably need to read up on what posix says it should do. I think >> what you're saying is that it might leave blocks allocated past EOF? >> That'd be surprising to me, but maybe I misunderstand? > > There's no guarantee that du is even reporting blocks on disk. e.g > for XFS du will also report reserved (in-memory) delalloc space on > the inode and that includes speculative allocation beyond EOF. We > don't have to remove specultive delalloc ranges when a partial write > occurs, so effectively checking du output to see if a partial write > succeeded is not a sufficient test to determine if the partial write > succeeded or not. > > However, if the partial write did succeed then the file size *must* > change to reflect what was written. Hence I suspect all we actually > need here is a file size check... Ok; so would you be happy with just this? # And at least some of it should succeed. _filesize=`ls -l $SCRATCH_MNT/tmp1 | awk '{print $5}'` [ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." If so I'll put your reviewed-by on it and get this pushed, ok? -Eric > Cheers, > > Dave. From tinguely@sgi.com Tue Jan 17 11:04:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HH4jDr167427 for ; Tue, 17 Jan 2012 11:04:45 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id E7745304059; Tue, 17 Jan 2012 09:04:41 -0800 (PST) Message-ID: <4F15AA2C.5070506@sgi.com> Date: Tue, 17 Jan 2012 11:04:44 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Ben Myers CC: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH 04/11] xfs: remove the if_ext_max field in struct xfs_ifork References: <20111218200003.557507716@bombadil.infradead.org> <20111218200131.321997628@bombadil.infradead.org> <20120106165818.GD6390@sgi.com> <20120116224527.GD16581@sgi.com> <20120117151639.GE16581@sgi.com> In-Reply-To: <20120117151639.GE16581@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/17/12 09:16, Ben Myers wrote: > On Mon, Jan 16, 2012 at 04:45:27PM -0600, Ben Myers wrote: >> Hey Christoph, >> >> On Fri, Jan 06, 2012 at 10:58:18AM -0600, Ben Myers wrote: >>> On Sun, Dec 18, 2011 at 03:00:07PM -0500, Christoph Hellwig wrote: >>>> We spent a lot of effort to maintain this field, but it always equalts to the >>> equals the >>>> fork size divided by the constant size of an extent. The prime use of it is >>>> to assert that the two stay in sync. Just divide the fork size by the extent >>>> size in the few places that we actually use it and remove the overhead >>>> of maintaining it. Also introduce a few helpers to consolidate the places >>>> where we actually care about the value. >>>> >>>> Signed-off-by: Christoph Hellwig >>>> Reviewed-by: Dave Chinner >>> >>> After reviewing this patch it's not crystal clear to me why we were >>> putting all that effort into keeping this counter uptodate on the inode >>> instead of using helpers like you've implemented. Maybe a question of >>> integer division as Dave suggested. This is a nice improvement. >>> >>>> Index: xfs/fs/xfs/xfs_bmap.c >>>> =================================================================== >>>> --- xfs.orig/fs/xfs/xfs_bmap.c 2011-12-12 10:33:55.748696870 -0800 >>>> +++ xfs/fs/xfs/xfs_bmap.c 2011-12-14 05:15:20.612373687 -0800 >>>> @@ -249,7 +249,27 @@ xfs_bmbt_lookup_ge( >>>> } >>>> >>>> /* >>>> -* Update the record referred to by cur to the value given >>>> + * Check if the inode needs to be converted to btree format. >>>> + */ >>>> +static inline bool xfs_bmap_needs_btree(struct xfs_inode *ip, int whichfork) >>>> +{ >>>> + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS&& >>>> + XFS_IFORK_NEXTENTS(ip, whichfork)> >>>> + XFS_IFORK_MAXEXT(ip, whichfork); >>>> +} >>>> + >>>> +/* >>>> + * Check if the inode should be converted to extent format. >>>> + */ >>>> +static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork) >>>> +{ >>>> + return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE&& >>>> + XFS_IFORK_NEXTENTS(ip, whichfork)<= >>>> + XFS_IFORK_MAXEXT(ip, whichfork); >>>> +} >>> >>> The logic in these two appears to be equivalent to the code you've >>> replaced in all but one case... >>> I am coming late into this review party, and I know this is time sensitive. I am looking at this from the big picture and you can ignore me. Looking at the INTENTION of the tests, IMO, we are asking: "is it time to change format?" IMO, you do not want to flip between format without data count change - in other words, the two tests should NOT overlap. /* * Check if the inode should be converted to extent format. */ static inline bool xfs_bmap_wants_extents(struct xfs_inode *ip, int whichfork) { return XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE && - XFS_IFORK_NEXTENTS(ip, whichfork) <= + XFS_IFORK_NEXTENTS(ip, whichfork) < /* less */ XFS_IFORK_MAXEXT(ip, whichfork); } >>> ... >>> >>>> @@ -5321,8 +5318,7 @@ xfs_bunmapi( >>>> * will be dirty. >>>> */ >>>> if (!wasdel&& xfs_trans_get_block_res(tp) == 0&& >>>> - XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS&& >>>> - XFS_IFORK_NEXTENTS(ip, whichfork)>= ifp->if_ext_max&& >>> ^^ >>> All other tests for this were: >>> XFS_IFORK_NEXTENTS(ip, whichfork)> ifp->if_ext_max >>> >>> Did you just fix a lurking off-by-one or insert one? >>> >>> xfs_bmap_needs_btree needs ip->i_d.di_nextents to have been incremented >>> already in order to detect that we need to convert to btree format. In >>> this case we haven't done that yet and are checking to see if doing so >>> would require conversion to btree format... >>> >>> Looks to me like we can't use xfs_bmap_needs_btree here and should use >>> the old logic. Right? >> >> HCH, I have a question for you here that I feel needs to be resolved. >> Can you take a look? > > Here is what I propose to use here: > > @@ -5322,7 +5319,8 @@ xfs_bunmapi( > */ > if (!wasdel&& xfs_trans_get_block_res(tp) == 0&& > XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS&& > - XFS_IFORK_NEXTENTS(ip, whichfork)>= ifp->if_ext_max&& > + XFS_IFORK_NEXTENTS(ip, whichfork)>= /* Note the>= */ > + XFS_IFORK_MAXEXT(ip, whichfork)&& > del.br_startoff> got.br_startoff&& > del.br_startoff + del.br_blockcount< > got.br_startoff + got.br_blockcount) { > > -Ben The original "XFS_IFORK_NEXTENTS(ip, whichfork)>= ifp->if_ext_max" is important because the removal of the blocks in xfs_bmap_del_extent() will create a hole that requires an insertion. --Mark Tinguely tinguely@sgi.com --Mark Tinguely. From tinguely@sgi.com Tue Jan 17 12:48:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HImBUK171683 for ; Tue, 17 Jan 2012 12:48:11 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 59AF1304059; Tue, 17 Jan 2012 10:48:08 -0800 (PST) Message-ID: <4F15C26A.30408@sgi.com> Date: Tue, 17 Jan 2012 12:48:10 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 01/12] xfs: split tail_lsn assignments from log space wakeups References: <20111212141346.986825692@bombadil.infradead.org> <20111212141433.542846138@bombadil.infradead.org> In-Reply-To: <20111212141433.542846138@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > Currently xfs_log_move_tail has a tail_lsn argument that is horribly > overloaded: it may contain either an actual lsn to assign to the log tail, > 0 as a special case to use the last sync LSN, or 1 to indicate that no tail > LSN assignment should be performed, and we should opportunisticly wake up > at least one task waiting for log space. I read the code as opportunistically waking at MOST one task per call. > Remove the tail lsn assigned from xfs_log_move_tail and make the two callers > use xlog_assign_tail_lsn instead of the current variant of partially using > the code in xfs_log_move_tail and partially opencoding it. Note that means > we grow an addition lock roundtrip on the AIL lock for each bulk update > or delete, which is still far less than what we had before introducing the > bulk operations. If this proves to be a problem we can still add a variant > of xlog_assign_tail_lsn that expects the lock to be held already. > Just looking at it the additional unlock/lock sequence did not appear too major. > Also rename the remainder of xfs_log_move_tail to xfs_log_space_wake as > that name describes its functionality much better. > ... > Index: xfs/fs/xfs/xfs_trans_ail.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_trans_ail.c 2011-11-29 08:38:46.870067201 +0100 > +++ xfs/fs/xfs/xfs_trans_ail.c 2011-11-29 08:38:48.580057936 +0100 > @@ -643,15 +643,15 @@ xfs_trans_unlocked_item( > * at the tail, it doesn't matter what result we get back. This > * is slightly racy because since we were just unlocked, we could > * go to sleep between the call to xfs_ail_min and the call to > - * xfs_log_move_tail, have someone else lock us, commit to us disk, > + * xfs_log_space_wake, have someone else lock us, commit to us disk, > * move us out of the tail of the AIL, and then we wake up. However, > - * the call to xfs_log_move_tail() doesn't do anything if there's > + * the call to xfs_log_space_wake() doesn't do anything if there's > * not enough free space to wake people up so we're safe calling it. > */ > min_lip = xfs_ail_min(ailp); > > if (min_lip == lip) > - xfs_log_move_tail(ailp->xa_mount, 1); > + xfs_log_space_wake(ailp->xa_mount, 1); > } /* xfs_trans_unlocked_item */ Looks great. Just to be consistent, you could call the above as: + xfs_log_space_wake(ailp->xa_mount, true); Reviewed-by: Mark Tinguely From zhengda1936@gmail.com Tue Jan 17 13:48:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HJmdjZ173825 for ; Tue, 17 Jan 2012 13:48:40 -0600 X-ASG-Debug-ID: 1326829717-00a9eb678301bf0001-NocioJ Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id BiQKDeJ95yiwFkyh for ; Tue, 17 Jan 2012 11:48:37 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhjj56 with SMTP id j56so2659007yhj.26 for ; Tue, 17 Jan 2012 11:48:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=w+axhirJtGx6n4Mec/Swd+jz63P68GOVoYd+yeaxhPI=; b=phBEPwjx9FqwkD8maw3+TjyA2k1EWqbriP+ILaUQuKTr/hJLjf9LezWkhxO2vnVlrI WviqOrXu/nIMDSlEJjyIOATtAgPUkgfHczUzqx/OcM6TrXQ5gFOpShFuT5GBMuDPNRZm /URyVsfJtZ8PvkAnHZQE8TGqCM+v5qz0J3FC0= MIME-Version: 1.0 Received: by 10.236.75.163 with SMTP id z23mr26012331yhd.79.1326827992230; Tue, 17 Jan 2012 11:19:52 -0800 (PST) Received: by 10.146.104.1 with HTTP; Tue, 17 Jan 2012 11:19:52 -0800 (PST) In-Reply-To: <20120116232549.GC6922@dastard> References: <20120116232549.GC6922@dastard> Date: Tue, 17 Jan 2012 14:19:52 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf300513cc27a98704b6be37e1 X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1326829717 X-Barracuda-URL: http://cuda.sgi.com:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86191 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --20cf300513cc27a98704b6be37e1 Content-Type: text/plain; charset=ISO-8859-1 Hello, On Mon, Jan 16, 2012 at 6:25 PM, Dave Chinner wrote: > > > 0xffffffff81288b6a : xfs_aio_write_newsize_update+0x3a/0x90 [kernel] > > Only ever taken when doing appending writes. Are you -sure- you are > not doing appending writes? > This is weird. Yes, I'm sure. I use pwrite() to write data to a 4G file, and I check the offset of each write and they are always smaller than 4G. I instrument the code with systemtap and it shows me that ip->i_new_size and new_size in xfs_aio_write_newsize_update are both 0. Since in my case there is only overwrite, ip->i_new_size will always be 0 (the only place that updates ip->i_new_size is xfs_file_aio_write_checks). Because of the same reason, new_size returned by xfs_file_aio_write_checks is always 0. Is it what you expected? > > > 0xffffffff812829f4 : __xfs_get_blocks+0x94/0x4a0 [kernel] > > And for direct IO writes, this will be the block mapping lookup so > always hit. > > > What this says to me is that you are probably doing is lots of very > small concurrent write IOs, but I'm only guessing. Can you provide > your test case and a description of your test hardware so we can try > to reproduce the problem? > I build XFS on the top of ramdisk. So yes, there is a lot of small concurrent writes in a second. I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test program overwrites 4G of data to the file and each time writes a page of data randomly to the file. It's always overwriting, and no appending. The offset of each write is always aligned to the page size. There is no overlapping between writes. So the test case is pretty simple and I think it's easy to reproduce it. It'll be great if you can try the test case. Thanks, Da --20cf300513cc27a98704b6be37e1 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,

On Mon, Jan 16, 2012 at 6:25 PM, D= ave Chinner <da= vid@fromorbit.com> wrote:
> =A00xffffffff81288b6a : xfs_aio_write_newsize_update+0x3a/0x90 [kernel= ]

Only ever taken when doing appending writes. Are you -sure- you are
not doing appending writes?
This is weird. Yes, I'= m sure. I use pwrite() to write data to a 4G file, and I check the offset o= f each write and they are always smaller than 4G.
I instrument th= e code with systemtap and it shows me that ip->i_new_size and new_size i= n=A0xfs_aio_write_newsize_update=A0are both 0.=A0
Since in my case there is only overwrite, ip->i_new_size will alway= s be 0 (the only place that updates ip->i_new_size is xfs_file_aio_write= _checks). Because of the same reason, new_size returned by xfs_file_aio_wri= te_checks is always 0.
Is it what you expected?

> =A00xffffffff812829f4 : __xfs_get_blocks+0x94/0x4a0 [kernel]

And for direct IO writes, this will be the block mapping lookup so
always hit.


What this says to me is that you are probably doing is lots of very
small concurrent write IOs, but I'm only guessing. =A0Can you provide your test case and a description of your test hardware so we can try
to reproduce the problem?
I build XFS on the top of ramdisk.=A0So yes, there is a lot of small concurrent writes in a s= econd.
I create a file of 4GB in XFS (= the ramdisk has 5GB of space). My test program overwrites 4G of data to the= file and each time writes a page of data randomly to the file. It's al= ways overwriting, and no appending. The offset of each write is always alig= ned to the page size. There is no overlapping between writes.=A0
So the test case is pretty simp= le and I think it's easy to reproduce it. It'll be great if you can= try the test case.

Thanks,
Da
--20cf300513cc27a98704b6be37e1-- From bpm@sgi.com Tue Jan 17 14:14:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_35, J_CHICKENPOX_73 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HKEEbZ174873 for ; Tue, 17 Jan 2012 14:14:14 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7875B8F8052; Tue, 17 Jan 2012 12:14:11 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 67FB0426DA7; Tue, 17 Jan 2012 14:14:13 -0600 (CST) Date: Tue, 17 Jan 2012 14:14:13 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 09/11] xfs: remove the i_new_size field in struct xfs_inode Message-ID: <20120117201413.GF16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.299481659@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200132.299481659@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) Hey, On Sun, Dec 18, 2011 at 03:00:12PM -0500, Christoph Hellwig wrote: > Now that we use the VFS i_size field throughout XFS there is no need for the > i_new_size field any more given that the VFS i_size field gets updated > in ->write_end before unlocking the page, and thus is a) always uptodate when ^^ there's no b), so i've removed this. > writeback could see a page. > Removing i_new_size also has the advantage that > we will never have to trim back di_size during a failed buffered write, > given that it never gets updated past i_size. Not trimming di_size back is very nice. That was ugly. > Note that currently the generic direct I/O code only updates i_size after > calling our end_io handler, which requires a small workaround to make > sure di_size actually makes it to disk. I hope to fix this properly in > the generic code. Yeah, it looks like not doing this workaround might cause xfs not to update the di_size properly. And if it's ok for generic_file_direct_write to update isize after calling ->direct_IO, it looks like it should be for it to be done out of dio_complete. This workaround looks fine. > A downside is that we lose the support for parallel non-overlapping O_DIRECT > appending writes that recently was added. I don't think keeping the complex > and fragile i_new_size infrastructure for this is a good tradeoff - if we > really care about parallel appending writers we should investigate turning > the iolock into a range lock, which would also allow for parallel > non-overlapping buffered writers. > > Signed-off-by: Christoph Hellwig I asked around and spent a little time trying to track down where i_new_size came from. It had been in xfs for some time even before the initial import of from cvs into the history.git tree on kernel.org. Before that it was merged into xfs as part of the iocore with some other CXFS infrastructure. From there the trail went cold. So it looks like it's historical and even today doesn't appear to have value for XFS. Looks good. Reviewed-by: Ben Myers > --- > fs/xfs/xfs_aops.c | 28 +++++++++++--------- > fs/xfs/xfs_file.c | 72 +++++++---------------------------------------------- > fs/xfs/xfs_iget.c | 1 > fs/xfs/xfs_inode.h | 2 - > fs/xfs/xfs_trace.h | 18 ++----------- > 5 files changed, 29 insertions(+), 92 deletions(-) > > Index: xfs/fs/xfs/xfs_file.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_file.c 2011-11-30 12:59:11.669698558 +0100 > +++ xfs/fs/xfs/xfs_file.c 2011-11-30 12:59:13.533021797 +0100 > @@ -413,27 +413,6 @@ xfs_file_splice_read( > } > > /* > - * If this was a direct or synchronous I/O that failed (such as ENOSPC) then > - * part of the I/O may have been written to disk before the error occurred. In > - * this case the on-disk file size may have been adjusted beyond the in-memory > - * file size and now needs to be truncated back. > - */ > -STATIC void > -xfs_aio_write_newsize_update( > - struct xfs_inode *ip, > - xfs_fsize_t new_size) > -{ > - if (new_size == ip->i_new_size) { > - xfs_rw_ilock(ip, XFS_ILOCK_EXCL); > - if (new_size == ip->i_new_size) > - ip->i_new_size = 0; > - if (ip->i_d.di_size > i_size_read(VFS_I(ip))) > - ip->i_d.di_size = i_size_read(VFS_I(ip)); > - xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); > - } > -} > - > -/* > * xfs_file_splice_write() does not use xfs_rw_ilock() because > * generic_file_splice_write() takes the i_mutex itself. This, in theory, > * couuld cause lock inversions between the aio_write path and the splice path > @@ -451,7 +430,6 @@ xfs_file_splice_write( > { > struct inode *inode = outfilp->f_mapping->host; > struct xfs_inode *ip = XFS_I(inode); > - xfs_fsize_t new_size; > int ioflags = 0; > ssize_t ret; > > @@ -465,20 +443,12 @@ xfs_file_splice_write( > > xfs_ilock(ip, XFS_IOLOCK_EXCL); > > - new_size = *ppos + count; > - > - xfs_ilock(ip, XFS_ILOCK_EXCL); > - if (new_size > i_size_read(inode)) > - ip->i_new_size = new_size; > - xfs_iunlock(ip, XFS_ILOCK_EXCL); > - > trace_xfs_file_splice_write(ip, count, *ppos, ioflags); > > ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); > if (ret > 0) > XFS_STATS_ADD(xs_write_bytes, ret); > > - xfs_aio_write_newsize_update(ip, new_size); > xfs_iunlock(ip, XFS_IOLOCK_EXCL); > return ret; > } > @@ -673,16 +643,13 @@ xfs_file_aio_write_checks( > struct file *file, > loff_t *pos, > size_t *count, > - xfs_fsize_t *new_sizep, > int *iolock) > { > struct inode *inode = file->f_mapping->host; > struct xfs_inode *ip = XFS_I(inode); > - xfs_fsize_t new_size; > int error = 0; > > xfs_rw_ilock(ip, XFS_ILOCK_EXCL); > - *new_sizep = 0; > restart: > error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode)); > if (error) { > @@ -697,15 +664,13 @@ restart: > /* > * If the offset is beyond the size of the file, we need to zero any > * blocks that fall between the existing EOF and the start of this > - * write. There is no need to issue zeroing if another in-flght IO ends > - * at or before this one If zeronig is needed and we are currently > - * holding the iolock shared, we need to update it to exclusive which > - * involves dropping all locks and relocking to maintain correct locking > - * order. If we do this, restart the function to ensure all checks and > - * values are still valid. > + * write. If zeroing is needed and we are currently holding the > + * iolock shared, we need to update it to exclusive which involves > + * dropping all locks and relocking to maintain correct locking order. > + * If we do this, restart the function to ensure all checks and values > + * are still valid. > */ > - if ((ip->i_new_size && *pos > ip->i_new_size) || > - (!ip->i_new_size && *pos > i_size_read(inode))) { > + if (*pos > i_size_read(inode)) { > if (*iolock == XFS_IOLOCK_SHARED) { > xfs_rw_iunlock(ip, XFS_ILOCK_EXCL | *iolock); > *iolock = XFS_IOLOCK_EXCL; > @@ -714,19 +679,6 @@ restart: > } > error = -xfs_zero_eof(ip, *pos, i_size_read(inode)); > } > - > - /* > - * If this IO extends beyond EOF, we may need to update ip->i_new_size. > - * We have already zeroed space beyond EOF (if necessary). Only update > - * ip->i_new_size if this IO ends beyond any other in-flight writes. > - */ > - new_size = *pos + *count; > - if (new_size > i_size_read(inode)) { > - if (new_size > ip->i_new_size) > - ip->i_new_size = new_size; > - *new_sizep = new_size; > - } > - > xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); > if (error) > return error; > @@ -772,7 +724,6 @@ xfs_file_dio_aio_write( > unsigned long nr_segs, > loff_t pos, > size_t ocount, > - xfs_fsize_t *new_size, > int *iolock) > { > struct file *file = iocb->ki_filp; > @@ -817,7 +768,7 @@ xfs_file_dio_aio_write( > xfs_rw_ilock(ip, *iolock); > } > > - ret = xfs_file_aio_write_checks(file, &pos, &count, new_size, iolock); > + ret = xfs_file_aio_write_checks(file, &pos, &count, iolock); > if (ret) > return ret; > > @@ -855,7 +806,6 @@ xfs_file_buffered_aio_write( > unsigned long nr_segs, > loff_t pos, > size_t ocount, > - xfs_fsize_t *new_size, > int *iolock) > { > struct file *file = iocb->ki_filp; > @@ -869,7 +819,7 @@ xfs_file_buffered_aio_write( > *iolock = XFS_IOLOCK_EXCL; > xfs_rw_ilock(ip, *iolock); > > - ret = xfs_file_aio_write_checks(file, &pos, &count, new_size, iolock); > + ret = xfs_file_aio_write_checks(file, &pos, &count, iolock); > if (ret) > return ret; > > @@ -909,7 +859,6 @@ xfs_file_aio_write( > ssize_t ret; > int iolock; > size_t ocount = 0; > - xfs_fsize_t new_size = 0; > > XFS_STATS_INC(xs_write_calls); > > @@ -929,10 +878,10 @@ xfs_file_aio_write( > > if (unlikely(file->f_flags & O_DIRECT)) > ret = xfs_file_dio_aio_write(iocb, iovp, nr_segs, pos, > - ocount, &new_size, &iolock); > + ocount, &iolock); > else > ret = xfs_file_buffered_aio_write(iocb, iovp, nr_segs, pos, > - ocount, &new_size, &iolock); > + ocount, &iolock); > > if (ret <= 0) > goto out_unlock; > @@ -953,7 +902,6 @@ xfs_file_aio_write( > } > > out_unlock: > - xfs_aio_write_newsize_update(ip, new_size); > xfs_rw_iunlock(ip, iolock); > return ret; > } > Index: xfs/fs/xfs/xfs_aops.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_aops.c 2011-11-30 12:59:11.669698558 +0100 > +++ xfs/fs/xfs/xfs_aops.c 2011-12-01 08:12:10.946664057 +0100 > @@ -111,8 +111,7 @@ xfs_ioend_new_eof( > xfs_fsize_t bsize; > > bsize = ioend->io_offset + ioend->io_size; > - isize = MAX(i_size_read(VFS_I(ip)), ip->i_new_size); > - isize = MIN(isize, bsize); > + isize = MIN(i_size_read(VFS_I(ip)), bsize); > return isize > ip->i_d.di_size ? isize : 0; > } > > @@ -126,11 +125,7 @@ static inline bool xfs_ioend_is_append(s > } > > /* > - * Update on-disk file size now that data has been written to disk. The > - * current in-memory file size is i_size. If a write is beyond eof i_new_size > - * will be the intended file size until i_size is updated. If this write does > - * not extend all the way to the valid file size then restrict this update to > - * the end of the write. > + * Update on-disk file size now that data has been written to disk. > * > * This function does not block as blocking on the inode lock in IO completion > * can lead to IO completion order dependency deadlocks.. If it can't get the > @@ -1279,6 +1274,15 @@ xfs_end_io_direct_write( > struct xfs_ioend *ioend = iocb->private; > > /* > + * While the generic direct I/O code updates the inode size, it does > + * so only after the end_io handler is called, which means our > + * end_io handler thinks the on-disk size is outside the in-core > + * size. To prevent this just update it a little bit earlier here. > + */ > + if (offset + size > i_size_read(ioend->io_inode)) > + i_size_write(ioend->io_inode, offset + size); > + > + /* > * blockdev_direct_IO can return an error even after the I/O > * completion handler was called. Thus we need to protect > * against double-freeing. > @@ -1340,12 +1344,10 @@ xfs_vm_write_failed( > > if (to > inode->i_size) { > /* > - * punch out the delalloc blocks we have already allocated. We > - * don't call xfs_setattr() to do this as we may be in the > - * middle of a multi-iovec write and so the vfs inode->i_size > - * will not match the xfs ip->i_size and so it will zero too > - * much. Hence we jus truncate the page cache to zero what is > - * necessary and punch the delalloc blocks directly. > + * Punch out the delalloc blocks we have already allocated. > + * > + * Don't bother with xfs_setattr given that nothing can have > + * it do disk yet as the page is still locked at this point. made to updated this > */ > struct xfs_inode *ip = XFS_I(inode); > xfs_fileoff_t start_fsb; > Index: xfs/fs/xfs/xfs_iget.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iget.c 2011-11-30 12:59:11.676365190 +0100 > +++ xfs/fs/xfs/xfs_iget.c 2011-11-30 12:59:13.533021797 +0100 > @@ -94,7 +94,6 @@ xfs_inode_alloc( > ip->i_update_core = 0; > ip->i_delayed_blks = 0; > memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); > - ip->i_new_size = 0; > > return ip; > } > Index: xfs/fs/xfs/xfs_trace.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_trace.h 2011-11-30 12:59:11.673031874 +0100 > +++ xfs/fs/xfs/xfs_trace.h 2011-11-30 12:59:13.536355113 +0100 > @@ -891,7 +891,6 @@ DECLARE_EVENT_CLASS(xfs_file_class, > __field(dev_t, dev) > __field(xfs_ino_t, ino) > __field(xfs_fsize_t, size) > - __field(xfs_fsize_t, new_size) > __field(loff_t, offset) > __field(size_t, count) > __field(int, flags) > @@ -900,17 +899,15 @@ DECLARE_EVENT_CLASS(xfs_file_class, > __entry->dev = VFS_I(ip)->i_sb->s_dev; > __entry->ino = ip->i_ino; > __entry->size = ip->i_d.di_size; > - __entry->new_size = ip->i_new_size; > __entry->offset = offset; > __entry->count = count; > __entry->flags = flags; > ), > - TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx " > + TP_printk("dev %d:%d ino 0x%llx size 0x%llx " > "offset 0x%llx count 0x%zx ioflags %s", > MAJOR(__entry->dev), MINOR(__entry->dev), > __entry->ino, > __entry->size, > - __entry->new_size, > __entry->offset, > __entry->count, > __print_flags(__entry->flags, "|", XFS_IO_FLAGS)) > @@ -978,7 +975,6 @@ DECLARE_EVENT_CLASS(xfs_imap_class, > __field(dev_t, dev) > __field(xfs_ino_t, ino) > __field(loff_t, size) > - __field(loff_t, new_size) > __field(loff_t, offset) > __field(size_t, count) > __field(int, type) > @@ -990,7 +986,6 @@ DECLARE_EVENT_CLASS(xfs_imap_class, > __entry->dev = VFS_I(ip)->i_sb->s_dev; > __entry->ino = ip->i_ino; > __entry->size = ip->i_d.di_size; > - __entry->new_size = ip->i_new_size; > __entry->offset = offset; > __entry->count = count; > __entry->type = type; > @@ -998,13 +993,11 @@ DECLARE_EVENT_CLASS(xfs_imap_class, > __entry->startblock = irec ? irec->br_startblock : 0; > __entry->blockcount = irec ? irec->br_blockcount : 0; > ), > - TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx " > - "offset 0x%llx count %zd type %s " > - "startoff 0x%llx startblock %lld blockcount 0x%llx", > + TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count %zd " > + "type %s startoff 0x%llx startblock %lld blockcount 0x%llx", > MAJOR(__entry->dev), MINOR(__entry->dev), > __entry->ino, > __entry->size, > - __entry->new_size, > __entry->offset, > __entry->count, > __print_symbolic(__entry->type, XFS_IO_TYPES), > @@ -1031,7 +1024,6 @@ DECLARE_EVENT_CLASS(xfs_simple_io_class, > __field(xfs_ino_t, ino) > __field(loff_t, isize) > __field(loff_t, disize) > - __field(loff_t, new_size) > __field(loff_t, offset) > __field(size_t, count) > ), > @@ -1040,17 +1032,15 @@ DECLARE_EVENT_CLASS(xfs_simple_io_class, > __entry->ino = ip->i_ino; > __entry->isize = VFS_I(ip)->i_size; > __entry->disize = ip->i_d.di_size; > - __entry->new_size = ip->i_new_size; > __entry->offset = offset; > __entry->count = count; > ), > - TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx new_size 0x%llx " > + TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx " > "offset 0x%llx count %zd", > MAJOR(__entry->dev), MINOR(__entry->dev), > __entry->ino, > __entry->isize, > __entry->disize, > - __entry->new_size, > __entry->offset, > __entry->count) > ); > Index: xfs/fs/xfs/xfs_inode.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_inode.h 2011-11-30 12:59:11.679698505 +0100 > +++ xfs/fs/xfs/xfs_inode.h 2011-12-01 08:12:10.839997391 +0100 > @@ -246,8 +246,6 @@ typedef struct xfs_inode { > > xfs_icdinode_t i_d; /* most of ondisk inode */ > > - xfs_fsize_t i_new_size; /* size when write completes */ > - > /* VFS inode */ > struct inode i_vnode; /* embedded VFS inode */ > } xfs_inode_t; > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bpm@sgi.com Tue Jan 17 14:18:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HKIJUw175049 for ; Tue, 17 Jan 2012 14:18:19 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9230FAC007; Tue, 17 Jan 2012 12:18:15 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 66D1D426DA7; Tue, 17 Jan 2012 14:18:17 -0600 (CST) Date: Tue, 17 Jan 2012 14:18:17 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 10/11] xfs: always return with the iolock held from xfs_file_aio_write_checks Message-ID: <20120117201817.GG16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.483776880@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200132.483776880@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) On Sun, Dec 18, 2011 at 03:00:13PM -0500, Christoph Hellwig wrote: > While xfs_iunlock is fine with 0 lockflags the calling conventions are much > cleaner if xfs_file_aio_write_checks never returns without the iolock held. > > Reviewed-by: Dave Chinner > Signed-off-by: Christoph Hellwig Looks good. Reviewed-by: Ben Myers > > --- > fs/xfs/xfs_file.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > Index: xfs/fs/xfs/xfs_file.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_file.c 2011-12-07 12:46:31.343897882 +0100 > +++ xfs/fs/xfs/xfs_file.c 2011-12-07 12:48:33.309903801 +0100 > @@ -636,7 +636,9 @@ out_lock: > /* > * Common pre-write limit and setup checks. > * > - * Returns with iolock held according to @iolock. > + * Called with the iolocked held either shared and exclusive according to > + * @iolock, and returns with it held. Might upgrade the iolock to exclusive > + * if called for a direct write beyond i_size. > */ > STATIC ssize_t > xfs_file_aio_write_checks( > @@ -653,8 +655,7 @@ xfs_file_aio_write_checks( > restart: > error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode)); > if (error) { > - xfs_rw_iunlock(ip, XFS_ILOCK_EXCL | *iolock); > - *iolock = 0; > + xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); > return error; > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bpm@sgi.com Tue Jan 17 14:42:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HKgMKC175830 for ; Tue, 17 Jan 2012 14:42:22 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id D11FB8F8040; Tue, 17 Jan 2012 12:42:21 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id D14FD426DA7; Tue, 17 Jan 2012 14:42:23 -0600 (CST) Date: Tue, 17 Jan 2012 14:42:23 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 11/11] xfs: cleanup xfs_file_aio_write Message-ID: <20120117204223.GH16581@sgi.com> References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.680867265@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111218200132.680867265@bombadil.infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) On Sun, Dec 18, 2011 at 03:00:14PM -0500, Christoph Hellwig wrote: > With all the size field updates out of the way xfs_file_aio_write can > be further simplified by pushing all iolock handling into > xfs_file_dio_aio_write and xfs_file_buffered_aio_write and using > the generic generic_write_sync helper for synchronous writes. > > Reviewed-by: Dave Chinner > Signed-off-by: Christoph Hellwig Looks good! Reviewed-by: Ben Myers > --- > fs/xfs/xfs_file.c | 82 ++++++++++++++++++++++++------------------------------ > 1 file changed, 37 insertions(+), 45 deletions(-) > > Index: xfs/fs/xfs/xfs_file.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_file.c 2011-12-07 12:48:33.309903801 +0100 > +++ xfs/fs/xfs/xfs_file.c 2011-12-07 12:48:48.546487926 +0100 > @@ -724,8 +724,7 @@ xfs_file_dio_aio_write( > const struct iovec *iovp, > unsigned long nr_segs, > loff_t pos, > - size_t ocount, > - int *iolock) > + size_t ocount) > { > struct file *file = iocb->ki_filp; > struct address_space *mapping = file->f_mapping; > @@ -735,10 +734,10 @@ xfs_file_dio_aio_write( > ssize_t ret = 0; > size_t count = ocount; > int unaligned_io = 0; > + int iolock; > struct xfs_buftarg *target = XFS_IS_REALTIME_INODE(ip) ? > mp->m_rtdev_targp : mp->m_ddev_targp; > > - *iolock = 0; > if ((pos & target->bt_smask) || (count & target->bt_smask)) > return -XFS_ERROR(EINVAL); > > @@ -753,31 +752,31 @@ xfs_file_dio_aio_write( > * EOF zeroing cases and fill out the new inode size as appropriate. > */ > if (unaligned_io || mapping->nrpages) > - *iolock = XFS_IOLOCK_EXCL; > + iolock = XFS_IOLOCK_EXCL; > else > - *iolock = XFS_IOLOCK_SHARED; > - xfs_rw_ilock(ip, *iolock); > + iolock = XFS_IOLOCK_SHARED; > + xfs_rw_ilock(ip, iolock); > > /* > * Recheck if there are cached pages that need invalidate after we got > * the iolock to protect against other threads adding new pages while > * we were waiting for the iolock. > */ > - if (mapping->nrpages && *iolock == XFS_IOLOCK_SHARED) { > - xfs_rw_iunlock(ip, *iolock); > - *iolock = XFS_IOLOCK_EXCL; > - xfs_rw_ilock(ip, *iolock); > + if (mapping->nrpages && iolock == XFS_IOLOCK_SHARED) { > + xfs_rw_iunlock(ip, iolock); > + iolock = XFS_IOLOCK_EXCL; > + xfs_rw_ilock(ip, iolock); > } > > - ret = xfs_file_aio_write_checks(file, &pos, &count, iolock); > + ret = xfs_file_aio_write_checks(file, &pos, &count, &iolock); > if (ret) > - return ret; > + goto out; > > if (mapping->nrpages) { > ret = -xfs_flushinval_pages(ip, (pos & PAGE_CACHE_MASK), -1, > FI_REMAPF_LOCKED); > if (ret) > - return ret; > + goto out; > } > > /* > @@ -786,15 +785,18 @@ xfs_file_dio_aio_write( > */ > if (unaligned_io) > inode_dio_wait(inode); > - else if (*iolock == XFS_IOLOCK_EXCL) { > + else if (iolock == XFS_IOLOCK_EXCL) { > xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL); > - *iolock = XFS_IOLOCK_SHARED; > + iolock = XFS_IOLOCK_SHARED; > } > > trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); > ret = generic_file_direct_write(iocb, iovp, > &nr_segs, pos, &iocb->ki_pos, count, ocount); > > +out: > + xfs_rw_iunlock(ip, iolock); > + > /* No fallback to buffered IO on errors for XFS. */ > ASSERT(ret < 0 || ret == count); > return ret; > @@ -806,8 +808,7 @@ xfs_file_buffered_aio_write( > const struct iovec *iovp, > unsigned long nr_segs, > loff_t pos, > - size_t ocount, > - int *iolock) > + size_t ocount) > { > struct file *file = iocb->ki_filp; > struct address_space *mapping = file->f_mapping; > @@ -815,14 +816,14 @@ xfs_file_buffered_aio_write( > struct xfs_inode *ip = XFS_I(inode); > ssize_t ret; > int enospc = 0; > + int iolock = XFS_IOLOCK_EXCL; > size_t count = ocount; > > - *iolock = XFS_IOLOCK_EXCL; > - xfs_rw_ilock(ip, *iolock); > + xfs_rw_ilock(ip, iolock); > > - ret = xfs_file_aio_write_checks(file, &pos, &count, iolock); > + ret = xfs_file_aio_write_checks(file, &pos, &count, &iolock); > if (ret) > - return ret; > + goto out; > > /* We can write back this queue in page reclaim */ > current->backing_dev_info = mapping->backing_dev_info; > @@ -836,13 +837,15 @@ write_retry: > * page locks and retry *once* > */ > if (ret == -ENOSPC && !enospc) { > - ret = -xfs_flush_pages(ip, 0, -1, 0, FI_NONE); > - if (ret) > - return ret; > enospc = 1; > - goto write_retry; > + ret = -xfs_flush_pages(ip, 0, -1, 0, FI_NONE); > + if (!ret) > + goto write_retry; > } > + > current->backing_dev_info = NULL; > +out: > + xfs_rw_iunlock(ip, iolock); > return ret; > } > > @@ -858,7 +861,6 @@ xfs_file_aio_write( > struct inode *inode = mapping->host; > struct xfs_inode *ip = XFS_I(inode); > ssize_t ret; > - int iolock; > size_t ocount = 0; > > XFS_STATS_INC(xs_write_calls); > @@ -878,32 +880,22 @@ xfs_file_aio_write( > return -EIO; > > if (unlikely(file->f_flags & O_DIRECT)) > - ret = xfs_file_dio_aio_write(iocb, iovp, nr_segs, pos, > - ocount, &iolock); > + ret = xfs_file_dio_aio_write(iocb, iovp, nr_segs, pos, ocount); > else > ret = xfs_file_buffered_aio_write(iocb, iovp, nr_segs, pos, > - ocount, &iolock); > + ocount); > > - if (ret <= 0) > - goto out_unlock; > + if (ret > 0) { > + ssize_t err; > > - XFS_STATS_ADD(xs_write_bytes, ret); > + XFS_STATS_ADD(xs_write_bytes, ret); > > - /* Handle various SYNC-type writes */ > - if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) { > - loff_t end = pos + ret - 1; > - int error; > - > - xfs_rw_iunlock(ip, iolock); > - error = xfs_file_fsync(file, pos, end, > - (file->f_flags & __O_SYNC) ? 0 : 1); > - xfs_rw_ilock(ip, iolock); > - if (error) > - ret = error; > + /* Handle various SYNC-type writes */ > + err = generic_write_sync(file, pos, ret); > + if (err < 0) > + ret = err; > } > > -out_unlock: > - xfs_rw_iunlock(ip, iolock); > return ret; > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bpm@oss.sgi.com Tue Jan 17 15:07:01 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HL71PN177063 for ; Tue, 17 Jan 2012 15:07:01 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0HL6xxd176983; Tue, 17 Jan 2012 15:06:59 -0600 Date: Tue, 17 Jan 2012 15:06:59 -0600 Message-Id: <201201172106.q0HL6xxd176983@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-9302-gd060646 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 099469502f62fbe0d7e4f0b83a2f22538367f734 X-Git-Newrev: d060646436233912178e6b9e3a7f30a41214220f This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated d060646 xfs: cleanup xfs_file_aio_write 5bf1f26 xfs: always return with the iolock held from xfs_file_aio_write_checks 2813d68 xfs: remove the i_new_size field in struct xfs_inode ce7ae15 xfs: remove the i_size field in struct xfs_inode f392e63 xfs: replace i_pin_wait with a bit waitqueue 474fce0 xfs: replace i_flock with a sleeping bitlock 49e4c70 xfs: make i_flags an unsigned long 8096b1e xfs: remove the if_ext_max field in struct xfs_ifork 3d2b312 xfs: remove the unused dm_attrs structure bf322d9 xfs: cleanup xfs_iomap_eof_align_last_fsb 673e8e5 xfs: remove xfs_itruncate_data from 099469502f62fbe0d7e4f0b83a2f22538367f734 (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 d060646436233912178e6b9e3a7f30a41214220f Author: Christoph Hellwig Date: Sun Dec 18 20:00:14 2011 +0000 xfs: cleanup xfs_file_aio_write With all the size field updates out of the way xfs_file_aio_write can be further simplified by pushing all iolock handling into xfs_file_dio_aio_write and xfs_file_buffered_aio_write and using the generic generic_write_sync helper for synchronous writes. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 5bf1f26227a59b9634e95eb3c7c012b766e5e6a0 Author: Christoph Hellwig Date: Sun Dec 18 20:00:13 2011 +0000 xfs: always return with the iolock held from xfs_file_aio_write_checks While xfs_iunlock is fine with 0 lockflags the calling conventions are much cleaner if xfs_file_aio_write_checks never returns without the iolock held. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 2813d682e8e6a278f94817429afd46b30875bb6e Author: Christoph Hellwig Date: Sun Dec 18 20:00:12 2011 +0000 xfs: remove the i_new_size field in struct xfs_inode Now that we use the VFS i_size field throughout XFS there is no need for the i_new_size field any more given that the VFS i_size field gets updated in ->write_end before unlocking the page, and thus is always uptodate when writeback could see a page. Removing i_new_size also has the advantage that we will never have to trim back di_size during a failed buffered write, given that it never gets updated past i_size. Note that currently the generic direct I/O code only updates i_size after calling our end_io handler, which requires a small workaround to make sure di_size actually makes it to disk. I hope to fix this properly in the generic code. A downside is that we lose the support for parallel non-overlapping O_DIRECT appending writes that recently was added. I don't think keeping the complex and fragile i_new_size infrastructure for this is a good tradeoff - if we really care about parallel appending writers we should investigate turning the iolock into a range lock, which would also allow for parallel non-overlapping buffered writers. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit ce7ae151ddada3dbf67301464343c154903166b3 Author: Christoph Hellwig Date: Sun Dec 18 20:00:11 2011 +0000 xfs: remove the i_size field in struct xfs_inode There is no fundamental need to keep an in-memory inode size copy in the XFS inode. We already have the on-disk value in the dinode, and the separate in-memory copy that we need for regular files only in the XFS inode. Remove the xfs_inode i_size field and change the XFS_ISIZE macro to use the VFS inode i_size field for regular files. Switch code that was directly accessing the i_size field in the xfs_inode to XFS_ISIZE, or in cases where we are limited to regular files direct access of the VFS inode i_size field. This also allows dropping some fairly complicated code in the write path which dealt with keeping the xfs_inode i_size uptodate with the VFS i_size that is getting updated inside ->write_end. Note that we do not bother resetting the VFS i_size when truncating a file that gets freed to zero as there is no point in doing so because the VFS inode is no longer in use at this point. Just relax the assert in xfs_ifree to only check the on-disk size instead. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit f392e6319a4e9a028b0c8b48f000bb01d660ad53 Author: Christoph Hellwig Date: Sun Dec 18 20:00:10 2011 +0000 xfs: replace i_pin_wait with a bit waitqueue Replace i_pin_wait, which is only used during synchronous inode flushing with a bit waitqueue. This trades off a much smaller inode against slightly slower wakeup performance, and saves 12 (32-bit) or 20 (64-bit) bytes in the XFS inode. Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 474fce067521a40dbacc722e8ba119e81c2d31bf Author: Christoph Hellwig Date: Sun Dec 18 20:00:09 2011 +0000 xfs: replace i_flock with a sleeping bitlock We almost never block on i_flock, the exception is synchronous inode flushing. Instead of bloating the inode with a 16/24-byte completion that we abuse as a semaphore just implement it as a bitlock that uses a bit waitqueue for the rare sleeping path. This primarily is a tradeoff between a much smaller inode and a faster non-blocking path vs faster wakeups, and we are much better off with the former. A small downside is that we will lose lockdep checking for i_flock, but given that it's always taken inside the ilock that should be acceptable. Note that for example the inode writeback locking is implemented in a very similar way. Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Signed-off-by: Ben Myers commit 49e4c70e52a2bc2090e5a4e003e2888af21d6a2b Author: Christoph Hellwig Date: Sun Dec 18 20:00:08 2011 +0000 xfs: make i_flags an unsigned long To be used for bit wakeup i_flags needs to be an unsigned long or we'll run into trouble on big endian systems. Because of the 1-byte i_update field right after it this actually causes a fairly large size increase on its own (4 or 8 bytes), but that increase will be more than offset by the next two patches. Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit 8096b1ebb59b94b3bc6abb6b7d121419e83447ba Author: Christoph Hellwig Date: Sun Dec 18 20:00:07 2011 +0000 xfs: remove the if_ext_max field in struct xfs_ifork We spent a lot of effort to maintain this field, but it always equals to the fork size divided by the constant size of an extent. The prime use of it is to assert that the two stay in sync. Just divide the fork size by the extent size in the few places that we actually use it and remove the overhead of maintaining it. Also introduce a few helpers to consolidate the places where we actually care about the value. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit 3d2b3129c2c48cf0153e0f2058cf87e4b45ca3ac Author: Christoph Hellwig Date: Sun Dec 18 20:00:06 2011 +0000 xfs: remove the unused dm_attrs structure .. and the just as dead bhv_desc forward declaration while we're at it. Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit bf322d983e540f66517db85b6870017613bb1e8d Author: Christoph Hellwig Date: Sun Dec 18 20:00:05 2011 +0000 xfs: cleanup xfs_iomap_eof_align_last_fsb Replace the nasty if, else if, elseif condition with more natural C flow that expressed the logic we want here better. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit 673e8e597c06eb81954bf21a10f5cce74a1de8f1 Author: Christoph Hellwig Date: Sun Dec 18 20:00:04 2011 +0000 xfs: remove xfs_itruncate_data This wrapper isn't overly useful, not to say rather confusing. Around the call to xfs_itruncate_extents it does: - add tracing - add a few asserts in debug builds - conditionally update the inode size in two places - log the inode Both the tracing and the inode logging can be moved to xfs_itruncate_extents as they are useful for the attribute fork as well - in fact the attr code already does an equivalent xfs_trans_log_inode call just after calling xfs_itruncate_extents. The conditional size updates are a mess, and there was no reason to do them in two places anyway, as the first one was conditional on the inode having extents - but without extents we xfs_itruncate_extents would be a no-op and the placement wouldn't matter anyway. Instead move the size assignments and the asserts that make sense to the callers that want it. As a side effect of this clean up xfs_setattr_size by introducing variables for the old and new inode size, and moving the size updates into a common place. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 29 ++++--- fs/xfs/xfs_attr.c | 4 - fs/xfs/xfs_attr_leaf.c | 9 -- fs/xfs/xfs_bmap.c | 116 +++++++++++++--------------- fs/xfs/xfs_dfrag.c | 43 +++++----- fs/xfs/xfs_file.c | 184 ++++++++++++------------------------------- fs/xfs/xfs_fs_subr.c | 2 +- fs/xfs/xfs_iget.c | 24 ++++-- fs/xfs/xfs_inode.c | 193 +++++++++++----------------------------------- fs/xfs/xfs_inode.h | 114 ++++++++++++++++----------- fs/xfs/xfs_inode_item.c | 8 +- fs/xfs/xfs_iomap.c | 46 ++++++------ fs/xfs/xfs_iops.c | 46 +++++++---- fs/xfs/xfs_qm_syscalls.c | 8 ++- fs/xfs/xfs_super.c | 8 -- fs/xfs/xfs_sync.c | 9 +- fs/xfs/xfs_trace.h | 29 ++----- fs/xfs/xfs_vnodeops.c | 44 +++++++---- 18 files changed, 374 insertions(+), 542 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Tue Jan 17 15:46:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HLkmJ9179254 for ; Tue, 17 Jan 2012 15:46:48 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0HLkjd3179085; Tue, 17 Jan 2012 15:46:45 -0600 Date: Tue, 17 Jan 2012 15:46:45 -0600 Message-Id: <201201172146.q0HLkjd3179085@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v3.2-rc1-9302-gd060646 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: b1c770c273a4787069306fc82aab245e9ac72e9d X-Git-Newrev: d060646436233912178e6b9e3a7f30a41214220f This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated d060646 xfs: cleanup xfs_file_aio_write 5bf1f26 xfs: always return with the iolock held from xfs_file_aio_write_checks 2813d68 xfs: remove the i_new_size field in struct xfs_inode ce7ae15 xfs: remove the i_size field in struct xfs_inode f392e63 xfs: replace i_pin_wait with a bit waitqueue 474fce0 xfs: replace i_flock with a sleeping bitlock 49e4c70 xfs: make i_flags an unsigned long 8096b1e xfs: remove the if_ext_max field in struct xfs_ifork 3d2b312 xfs: remove the unused dm_attrs structure bf322d9 xfs: cleanup xfs_iomap_eof_align_last_fsb 673e8e5 xfs: remove xfs_itruncate_data 993ecff Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs 9879326 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial eb59c50 Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm 29ad0de Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs 34c80b1 vfs: switch ->show_options() to struct dentry * 576b1d6 xfs: propagate umode_t 1a67aaf switch ->mknod() to umode_t 4acdaf2 switch ->create() to umode_t 18bb1db switch vfs_mkdir() and ->mkdir() to umode_t 6b520e0 vfs: fix the stupidity with i_dentry in inode destructors 2a79f17 vfs: mnt_drop_write_file() a561be7 switch a bunch of places to mnt_want_write_file() be4f1ac xfs: log all dirty inodes in xfs_fs_sync_fs 0b8fd30 xfs: log the inode in ->write_inode calls for kupdate b00f4dc Merge branch 'master' into pm-sleep 90802ed treewide: Fix comment and string typo 'bufer' 42b2aa8 treewide: Fix typos in various parts of the kernel, and fix some comments. a0acae0 freezer: unexport refrigerator() and update try_to_freeze() slightly from b1c770c273a4787069306fc82aab245e9ac72e9d (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 d060646436233912178e6b9e3a7f30a41214220f Author: Christoph Hellwig Date: Sun Dec 18 20:00:14 2011 +0000 xfs: cleanup xfs_file_aio_write With all the size field updates out of the way xfs_file_aio_write can be further simplified by pushing all iolock handling into xfs_file_dio_aio_write and xfs_file_buffered_aio_write and using the generic generic_write_sync helper for synchronous writes. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 5bf1f26227a59b9634e95eb3c7c012b766e5e6a0 Author: Christoph Hellwig Date: Sun Dec 18 20:00:13 2011 +0000 xfs: always return with the iolock held from xfs_file_aio_write_checks While xfs_iunlock is fine with 0 lockflags the calling conventions are much cleaner if xfs_file_aio_write_checks never returns without the iolock held. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 2813d682e8e6a278f94817429afd46b30875bb6e Author: Christoph Hellwig Date: Sun Dec 18 20:00:12 2011 +0000 xfs: remove the i_new_size field in struct xfs_inode Now that we use the VFS i_size field throughout XFS there is no need for the i_new_size field any more given that the VFS i_size field gets updated in ->write_end before unlocking the page, and thus is always uptodate when writeback could see a page. Removing i_new_size also has the advantage that we will never have to trim back di_size during a failed buffered write, given that it never gets updated past i_size. Note that currently the generic direct I/O code only updates i_size after calling our end_io handler, which requires a small workaround to make sure di_size actually makes it to disk. I hope to fix this properly in the generic code. A downside is that we lose the support for parallel non-overlapping O_DIRECT appending writes that recently was added. I don't think keeping the complex and fragile i_new_size infrastructure for this is a good tradeoff - if we really care about parallel appending writers we should investigate turning the iolock into a range lock, which would also allow for parallel non-overlapping buffered writers. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit ce7ae151ddada3dbf67301464343c154903166b3 Author: Christoph Hellwig Date: Sun Dec 18 20:00:11 2011 +0000 xfs: remove the i_size field in struct xfs_inode There is no fundamental need to keep an in-memory inode size copy in the XFS inode. We already have the on-disk value in the dinode, and the separate in-memory copy that we need for regular files only in the XFS inode. Remove the xfs_inode i_size field and change the XFS_ISIZE macro to use the VFS inode i_size field for regular files. Switch code that was directly accessing the i_size field in the xfs_inode to XFS_ISIZE, or in cases where we are limited to regular files direct access of the VFS inode i_size field. This also allows dropping some fairly complicated code in the write path which dealt with keeping the xfs_inode i_size uptodate with the VFS i_size that is getting updated inside ->write_end. Note that we do not bother resetting the VFS i_size when truncating a file that gets freed to zero as there is no point in doing so because the VFS inode is no longer in use at this point. Just relax the assert in xfs_ifree to only check the on-disk size instead. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit f392e6319a4e9a028b0c8b48f000bb01d660ad53 Author: Christoph Hellwig Date: Sun Dec 18 20:00:10 2011 +0000 xfs: replace i_pin_wait with a bit waitqueue Replace i_pin_wait, which is only used during synchronous inode flushing with a bit waitqueue. This trades off a much smaller inode against slightly slower wakeup performance, and saves 12 (32-bit) or 20 (64-bit) bytes in the XFS inode. Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 474fce067521a40dbacc722e8ba119e81c2d31bf Author: Christoph Hellwig Date: Sun Dec 18 20:00:09 2011 +0000 xfs: replace i_flock with a sleeping bitlock We almost never block on i_flock, the exception is synchronous inode flushing. Instead of bloating the inode with a 16/24-byte completion that we abuse as a semaphore just implement it as a bitlock that uses a bit waitqueue for the rare sleeping path. This primarily is a tradeoff between a much smaller inode and a faster non-blocking path vs faster wakeups, and we are much better off with the former. A small downside is that we will lose lockdep checking for i_flock, but given that it's always taken inside the ilock that should be acceptable. Note that for example the inode writeback locking is implemented in a very similar way. Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Signed-off-by: Ben Myers commit 49e4c70e52a2bc2090e5a4e003e2888af21d6a2b Author: Christoph Hellwig Date: Sun Dec 18 20:00:08 2011 +0000 xfs: make i_flags an unsigned long To be used for bit wakeup i_flags needs to be an unsigned long or we'll run into trouble on big endian systems. Because of the 1-byte i_update field right after it this actually causes a fairly large size increase on its own (4 or 8 bytes), but that increase will be more than offset by the next two patches. Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit 8096b1ebb59b94b3bc6abb6b7d121419e83447ba Author: Christoph Hellwig Date: Sun Dec 18 20:00:07 2011 +0000 xfs: remove the if_ext_max field in struct xfs_ifork We spent a lot of effort to maintain this field, but it always equals to the fork size divided by the constant size of an extent. The prime use of it is to assert that the two stay in sync. Just divide the fork size by the extent size in the few places that we actually use it and remove the overhead of maintaining it. Also introduce a few helpers to consolidate the places where we actually care about the value. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit 3d2b3129c2c48cf0153e0f2058cf87e4b45ca3ac Author: Christoph Hellwig Date: Sun Dec 18 20:00:06 2011 +0000 xfs: remove the unused dm_attrs structure .. and the just as dead bhv_desc forward declaration while we're at it. Signed-off-by: Christoph Hellwig Reviewed-by: Alex Elder Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit bf322d983e540f66517db85b6870017613bb1e8d Author: Christoph Hellwig Date: Sun Dec 18 20:00:05 2011 +0000 xfs: cleanup xfs_iomap_eof_align_last_fsb Replace the nasty if, else if, elseif condition with more natural C flow that expressed the logic we want here better. Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Ben Myers commit 673e8e597c06eb81954bf21a10f5cce74a1de8f1 Author: Christoph Hellwig Date: Sun Dec 18 20:00:04 2011 +0000 xfs: remove xfs_itruncate_data This wrapper isn't overly useful, not to say rather confusing. Around the call to xfs_itruncate_extents it does: - add tracing - add a few asserts in debug builds - conditionally update the inode size in two places - log the inode Both the tracing and the inode logging can be moved to xfs_itruncate_extents as they are useful for the attribute fork as well - in fact the attr code already does an equivalent xfs_trans_log_inode call just after calling xfs_itruncate_extents. The conditional size updates are a mess, and there was no reason to do them in two places anyway, as the first one was conditional on the inode having extents - but without extents we xfs_itruncate_extents would be a no-op and the placement wouldn't matter anyway. Instead move the size assignments and the asserts that make sense to the callers that want it. As a side effect of this clean up xfs_setattr_size by introducing variables for the old and new inode size, and moving the size updates into a common place. Reviewed-by: Dave Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Ben Myers commit 993ecff81aa6d50d694704de2647a5529ff2f166 Merge: 12e55508921865aefdd80fd17afe70c191afbd1b b1c770c273a4787069306fc82aab245e9ac72e9d Author: Linus Torvalds Date: Mon Jan 9 12:50:15 2012 -0800 Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs * 'for-linus' of git://oss.sgi.com/xfs/xfs: xfs: fix endian conversion issue in discard code commit 98793265b429a3f0b3f1750e74d67cd4d740d162 Merge: b4a133da2eaccb844a7beaef16ffd9c76a0d21d3 bd1b2a555952d959f47169056fca05acf7eff81f Author: Linus Torvalds Date: Sun Jan 8 13:21:22 2012 -0800 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (53 commits) Kconfig: acpi: Fix typo in comment. misc latin1 to utf8 conversions devres: Fix a typo in devm_kfree comment btrfs: free-space-cache.c: remove extra semicolon. fat: Spelling s/obsolate/obsolete/g SCSI, pmcraid: Fix spelling error in a pmcraid_err() call tools/power turbostat: update fields in manpage mac80211: drop spelling fix types.h: fix comment spelling for 'architectures' typo fixes: aera -> area, exntension -> extension devices.txt: Fix typo of 'VMware'. sis900: Fix enum typo 'sis900_rx_bufer_status' decompress_bunzip2: remove invalid vi modeline treewide: Fix comment and string typo 'bufer' hyper-v: Update MAINTAINERS treewide: Fix typos in various parts of the kernel, and fix some comments. clockevents: drop unknown Kconfig symbol GENERIC_CLOCKEVENTS_MIGR gpio: Kconfig: drop unknown symbol 'CS5535_GPIO' leds: Kconfig: Fix typo 'D2NET_V2' sound: Kconfig: drop unknown symbol ARCH_CLPS7500 ... Fix up trivial conflicts in arch/powerpc/platforms/40x/Kconfig (some new kconfig additions, close to removed commented-out old ones) commit eb59c505f8a5906ad2e053d14fab50eb8574fd6f Merge: 1619ed8f60959829d070d8f39cd2f8ca0e7135ce c233523b3d392e530033a7587d7970dc62a02361 Author: Linus Torvalds Date: Sun Jan 8 13:10:57 2012 -0800 Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm * 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (76 commits) PM / Hibernate: Implement compat_ioctl for /dev/snapshot PM / Freezer: fix return value of freezable_schedule_timeout_killable() PM / shmobile: Allow the A4R domain to be turned off at run time PM / input / touchscreen: Make st1232 use device PM QoS constraints PM / QoS: Introduce dev_pm_qos_add_ancestor_request() PM / shmobile: Remove the stay_on flag from SH7372's PM domains PM / shmobile: Don't include SH7372's INTCS in syscore suspend/resume PM / shmobile: Add support for the sh7372 A4S power domain / sleep mode PM: Drop generic_subsys_pm_ops PM / Sleep: Remove forward-only callbacks from AMBA bus type PM / Sleep: Remove forward-only callbacks from platform bus type PM: Run the driver callback directly if the subsystem one is not there PM / Sleep: Make pm_op() and pm_noirq_op() return callback pointers PM/Devfreq: Add Exynos4-bus device DVFS driver for Exynos4210/4212/4412. PM / Sleep: Merge internal functions in generic_ops.c PM / Sleep: Simplify generic system suspend callbacks PM / Hibernate: Remove deprecated hibernation snapshot ioctls PM / Sleep: Fix freezer failures due to racy usermodehelper_is_disabled() ARM: S3C64XX: Implement basic power domain support PM / shmobile: Use common always on power domain governor ... Fix up trivial conflict in fs/xfs/xfs_buf.c due to removal of unused XBT_FORCE_SLEEP bit commit 29ad0de279002f9b6a63df5ba85328f5b633b842 Merge: 972b2c719990f91eb3b2310d44ef8a2d38955a14 40d344ec5ee440596b1f3ae87556e20c7197757a Author: Linus Torvalds Date: Sun Jan 8 13:05:29 2012 -0800 Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs * 'for-linus' of git://oss.sgi.com/xfs/xfs: (22 commits) xfs: mark the xfssyncd workqueue as non-reentrant xfs: simplify xfs_qm_detach_gdquots xfs: fix acl count validation in xfs_acl_from_disk() xfs: remove unused XBT_FORCE_SLEEP bit xfs: remove XFS_QMOPT_DQSUSER xfs: kill xfs_qm_idtodq xfs: merge xfs_qm_dqinit_core into the only caller xfs: add a xfs_dqhold helper xfs: simplify xfs_qm_dqattach_grouphint xfs: nest qm_dqfrlist_lock inside the dquot qlock xfs: flatten the dquot lock ordering xfs: implement lazy removal for the dquot freelist xfs: remove XFS_DQ_INACTIVE xfs: cleanup xfs_qm_dqlookup xfs: cleanup dquot locking helpers xfs: remove the sync_mode argument to xfs_qm_dqflush_all xfs: remove xfs_qm_sync xfs: make sure to really flush all dquots in xfs_qm_quotacheck xfs: untangle SYNC_WAIT and SYNC_TRYLOCK meanings for xfs_qm_dqflush xfs: remove the lid_size field in struct log_item_desc ... Fix up trivial conflict in fs/xfs/xfs_sync.c commit 34c80b1d93e6e20ca9dea0baf583a5b5510d92d4 Author: Al Viro Date: Thu Dec 8 21:32:45 2011 -0500 vfs: switch ->show_options() to struct dentry * Signed-off-by: Al Viro commit 576b1d67ce949e7542ff765b00eb5357e706768b Author: Al Viro Date: Tue Jul 26 02:50:15 2011 -0400 xfs: propagate umode_t Signed-off-by: Al Viro commit 1a67aafb5f72a436ca044293309fa7e6351d6a35 Author: Al Viro Date: Tue Jul 26 01:52:52 2011 -0400 switch ->mknod() to umode_t Signed-off-by: Al Viro commit 4acdaf27ebe2034c342f3be57ef49aed1ad885ef Author: Al Viro Date: Tue Jul 26 01:42:34 2011 -0400 switch ->create() to umode_t vfs_create() ignores everything outside of 16bit subset of its mode argument; switching it to umode_t is obviously equivalent and it's the only caller of the method Signed-off-by: Al Viro commit 18bb1db3e7607e4a997d50991a6f9fa5b0f8722c Author: Al Viro Date: Tue Jul 26 01:41:39 2011 -0400 switch vfs_mkdir() and ->mkdir() to umode_t vfs_mkdir() gets int, but immediately drops everything that might not fit into umode_t and that's the only caller of ->mkdir()... Signed-off-by: Al Viro commit 6b520e0565422966cdf1c3759bd73df77b0f248c Author: Al Viro Date: Mon Dec 12 15:51:45 2011 -0500 vfs: fix the stupidity with i_dentry in inode destructors Seeing that just about every destructor got that INIT_LIST_HEAD() copied into it, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once(); the cost of taking it into inode_init_always() will be negligible for pipes and sockets and negative for everything else. Not to mention the removal of boilerplate code from ->destroy_inode() instances... Signed-off-by: Al Viro commit 2a79f17e4a641a2f463cb512cb0ec349844a147b Author: Al Viro Date: Fri Dec 9 08:06:57 2011 -0500 vfs: mnt_drop_write_file() new helper (wrapper around mnt_drop_write()) to be used in pair with mnt_want_write_file(). Signed-off-by: Al Viro commit a561be7100cd610bd2e082f3211c1dfb45835817 Author: Al Viro Date: Wed Nov 23 11:57:51 2011 -0500 switch a bunch of places to mnt_want_write_file() it's both faster (in case when file has been opened for write) and cleaner. Signed-off-by: Al Viro commit b00f4dc5ff022cb9cbaffd376d9454d7fa1e496f Merge: 1eac8111e0763853266a171ce11214da3a347a0a b9e26dfdad5a4f9cbdaacafac6998614cc9c41bc Author: Rafael J. Wysocki Date: Wed Dec 21 21:59:45 2011 +0100 Merge branch 'master' into pm-sleep * master: (848 commits) SELinux: Fix RCU deref check warning in sel_netport_insert() binary_sysctl(): fix memory leak mm/vmalloc.c: remove static declaration of va from __get_vm_area_node ipmi_watchdog: restore settings when BMC reset oom: fix integer overflow of points in oom_badness memcg: keep root group unchanged if creation fails nilfs2: potential integer overflow in nilfs_ioctl_clean_segments() nilfs2: unbreak compat ioctl cpusets: stall when updating mems_allowed for mempolicy or disjoint nodemask evm: prevent racing during tfm allocation evm: key must be set once during initialization mmc: vub300: fix type of firmware_rom_wait_states module parameter Revert "mmc: enable runtime PM by default" mmc: sdhci: remove "state" argument from sdhci_suspend_host x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT IB/qib: Correct sense on freectxts increment and decrement RDMA/cma: Verify private data length cgroups: fix a css_set not found bug in cgroup_attach_proc oprofile: Fix uninitialized memory access when writing to writing to oprofilefs Revert "xen/pv-on-hvm kexec: add xs_reset_watches to shutdown watches from old kernel" ... Conflicts: kernel/cgroup_freezer.c commit 90802ed9c3dbab2e067bd9fc67a30e66e6774e8f Author: Paul Bolle Date: Mon Dec 5 13:00:34 2011 +0100 treewide: Fix comment and string typo 'bufer' Signed-off-by: Paul Bolle Signed-off-by: Jiri Kosina commit 42b2aa86c6670347a2a07e6d7af0e0ecc8fdbff9 Author: Justin P. Mattock Date: Mon Nov 28 20:31:00 2011 -0800 treewide: Fix typos in various parts of the kernel, and fix some comments. The below patch fixes some typos in various parts of the kernel, as well as fixes some comments. Please let me know if I missed anything, and I will try to get it changed and resent. Signed-off-by: Justin P. Mattock Acked-by: Randy Dunlap Signed-off-by: Jiri Kosina commit a0acae0e886d44bd5ce6d2f173c1ace0fcf0d9f6 Author: Tejun Heo Date: Mon Nov 21 12:32:22 2011 -0800 freezer: unexport refrigerator() and update try_to_freeze() slightly There is no reason to export two functions for entering the refrigerator. Calling refrigerator() instead of try_to_freeze() doesn't save anything noticeable or removes any race condition. * Rename refrigerator() to __refrigerator() and make it return bool indicating whether it scheduled out for freezing. * Update try_to_freeze() to return bool and relay the return value of __refrigerator() if freezing(). * Convert all refrigerator() users to try_to_freeze(). * Update documentation accordingly. * While at it, add might_sleep() to try_to_freeze(). Signed-off-by: Tejun Heo Cc: Samuel Ortiz Cc: Chris Mason Cc: "Theodore Ts'o" Cc: Steven Whitehouse Cc: Andrew Morton Cc: Jan Kara Cc: KONISHI Ryusuke Cc: Christoph Hellwig ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_aops.c | 29 ++++--- fs/xfs/xfs_attr.c | 4 - fs/xfs/xfs_attr_leaf.c | 9 -- fs/xfs/xfs_bmap.c | 116 ++++++++++++--------------- fs/xfs/xfs_buf.c | 4 +- fs/xfs/xfs_dfrag.c | 43 +++++----- fs/xfs/xfs_file.c | 190 +++++++++++++------------------------------- fs/xfs/xfs_fs_subr.c | 2 +- fs/xfs/xfs_ialloc.c | 4 +- fs/xfs/xfs_ialloc.h | 2 +- fs/xfs/xfs_iget.c | 25 ++++-- fs/xfs/xfs_inode.c | 197 +++++++++++----------------------------------- fs/xfs/xfs_inode.h | 116 ++++++++++++++++----------- fs/xfs/xfs_inode_item.c | 8 +- fs/xfs/xfs_ioctl.c | 8 +- fs/xfs/xfs_ioctl32.c | 8 +- fs/xfs/xfs_iomap.c | 46 ++++++------ fs/xfs/xfs_iops.c | 54 ++++++++----- fs/xfs/xfs_log_cil.c | 2 +- fs/xfs/xfs_qm_syscalls.c | 8 ++- fs/xfs/xfs_super.c | 42 ++-------- fs/xfs/xfs_sync.c | 45 +++++++++- fs/xfs/xfs_sync.h | 2 + fs/xfs/xfs_trace.h | 29 ++----- fs/xfs/xfs_utils.c | 2 +- fs/xfs/xfs_utils.h | 2 +- fs/xfs/xfs_vnodeops.c | 48 +++++++---- fs/xfs/xfs_vnodeops.h | 4 +- 28 files changed, 449 insertions(+), 600 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Tue Jan 17 15:55:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HLt79s179554 for ; Tue, 17 Jan 2012 15:55:07 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id D496A30406B; Tue, 17 Jan 2012 13:55:03 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 8978A426DA7; Tue, 17 Jan 2012 15:55:05 -0600 (CST) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS update for 3.3 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20120117215505.8978A426DA7@whiskey.americas.sgi.com> Date: Tue, 17 Jan 2012 15:55:05 -0600 (CST) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull the following XFS changes for 3.3. Thanks, Ben The following changes since commit c2bc3a316a7281f67e36b34dac2802cbe36a9128: Linus Torvalds (1): Merge branch 'x86/rdrand' of git://git.kernel.org/.../tip/tip are available in the git repository at: git://oss.sgi.com/xfs/xfs for-linus Christoph Hellwig (11): xfs: remove xfs_itruncate_data xfs: cleanup xfs_iomap_eof_align_last_fsb xfs: remove the unused dm_attrs structure xfs: remove the if_ext_max field in struct xfs_ifork xfs: make i_flags an unsigned long xfs: replace i_flock with a sleeping bitlock xfs: replace i_pin_wait with a bit waitqueue xfs: remove the i_size field in struct xfs_inode xfs: remove the i_new_size field in struct xfs_inode xfs: always return with the iolock held from xfs_file_aio_write_checks xfs: cleanup xfs_file_aio_write fs/xfs/xfs_aops.c | 29 ++++--- fs/xfs/xfs_attr.c | 4 - fs/xfs/xfs_attr_leaf.c | 9 -- fs/xfs/xfs_bmap.c | 116 +++++++++++++--------------- fs/xfs/xfs_dfrag.c | 43 +++++----- fs/xfs/xfs_file.c | 184 ++++++++++++------------------------------- fs/xfs/xfs_fs_subr.c | 2 +- fs/xfs/xfs_iget.c | 24 ++++-- fs/xfs/xfs_inode.c | 193 +++++++++++----------------------------------- fs/xfs/xfs_inode.h | 114 ++++++++++++++++----------- fs/xfs/xfs_inode_item.c | 8 +- fs/xfs/xfs_iomap.c | 46 ++++++------ fs/xfs/xfs_iops.c | 46 +++++++---- fs/xfs/xfs_qm_syscalls.c | 8 ++- fs/xfs/xfs_super.c | 8 -- fs/xfs/xfs_sync.c | 9 +- fs/xfs/xfs_trace.h | 29 ++----- fs/xfs/xfs_vnodeops.c | 44 +++++++---- 18 files changed, 374 insertions(+), 542 deletions(-) From tinguely@sgi.com Tue Jan 17 16:42:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0HMgZME181613 for ; Tue, 17 Jan 2012 16:42:35 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id D62EC304075; Tue, 17 Jan 2012 14:42:31 -0800 (PST) Message-ID: <4F15F959.4000405@sgi.com> Date: Tue, 17 Jan 2012 16:42:33 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 02/12] xfs: do exact log space wakeups in xlog_ungrant_log_space References: <20111212141346.986825692@bombadil.infradead.org> <20111212141433.714245384@bombadil.infradead.org> In-Reply-To: <20111212141433.714245384@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > The only reason that xfs_log_space_wake had to do opportunistic wakeups > was that the old xfs_log_move_tail calling convention didn't allow for > exact wakeups when not updating the log tail LSN. Since this issue has > been fixed we can do exact wakeups now. > > Signed-off-by: Christoph Hellwig > > --- > fs/xfs/xfs_log.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: xfs/fs/xfs/xfs_log.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_log.c 2011-12-11 15:30:49.977750776 +0100 > +++ xfs/fs/xfs/xfs_log.c 2011-12-11 17:49:00.692836117 +0100 > @@ -2748,7 +2748,7 @@ xlog_ungrant_log_space(xlog_t *log, > > trace_xfs_log_ungrant_exit(log, ticket); > > - xfs_log_space_wake(log->l_mp, true); > + xfs_log_space_wake(log->l_mp, false); > } > > /* > It make sense that xlog_ungrant_log_space() does not need to do opportunistic wakeup. Reviewed-by: Mark Tinguely From liubo2009@cn.fujitsu.com Tue Jan 17 20:44:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0I2i9mC188669 for ; Tue, 17 Jan 2012 20:44:10 -0600 X-ASG-Debug-ID: 1326854645-04cb6c7d9d142e0001-NocioJ Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id gXzT1ygBkD1pCXdD for ; Tue, 17 Jan 2012 18:44:07 -0800 (PST) X-Barracuda-Envelope-From: liubo2009@cn.fujitsu.com X-Barracuda-Apparent-Source-IP: 222.73.24.84 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 31C9A170126; Wed, 18 Jan 2012 10:44:05 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q0I2i3lU006628; Wed, 18 Jan 2012 10:44:04 +0800 Received: from localhost.localdomain ([10.167.225.27]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012011810425681-367822 ; Wed, 18 Jan 2012 10:42:56 +0800 Message-ID: <4F16318E.9080106@cn.fujitsu.com> Date: Wed, 18 Jan 2012 10:42:22 +0800 From: Liu Bo User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090513 Fedora/3.0-2.3.beta2.fc11 Thunderbird/3.0b2 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , ext4 development , Eryu Guan Subject: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass In-Reply-To: <4F04BC81.1000207@redhat.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-18 10:42:56, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-18 10:42:58, Serialize complete at 2012-01-18 10:42:58 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1326854646 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86218 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 01/05/2012 04:54 AM, Eric Sandeen wrote: > Ok, this is a significant rework of 275, which made too many > assumptions about details of space usage and failed on several > filesystems (it passed on xfs, but only by accident). > > This new version tries to leave about 256k free, then tries > a single 1M IO, and fails only if 0 bytes are written. > > It also sends a lot more to $seq.full for debugging on failure > and fixes a few other stylistic things. > > Signed-off-by: Eric Sandeen > --- > > diff --git a/275 b/275 > index 214262e..8f521f8 100755 > --- a/275 > +++ b/275 > @@ -1,8 +1,8 @@ > #! /bin/bash > # FS QA Test No. 275 > # > -# The posix write test. when write size is larger than disk free size, > -# should write as more as possible > +# The posix write test. When write size is larger than disk free size, > +# should write as much as possible until ENOSPC. > # > #----------------------------------------------------------------------- > # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. > @@ -30,13 +30,12 @@ echo "QA output created by $seq" > > here=`pwd` > tmp=/tmp/$$ > -status=0 # success is the default! > +status=1 # failure is the default! > trap "_cleanup; exit \$status" 0 1 2 3 15 > > _cleanup() > { > cd / > - rm -f $SCRATCH_MNT/* $tmp.* > _scratch_unmount > } > > @@ -49,7 +48,7 @@ _supported_os IRIX Linux > _require_scratch > > echo "------------------------------" > -echo "write lack test" > +echo "write until ENOSPC test" > echo "------------------------------" > > rm -f $seq.full > @@ -59,31 +58,38 @@ _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > _scratch_mount > > rm -rf $SCRATCH_MNT/* > -cd $SCRATCH_MNT > > -dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 > -if [ $? -ne 0 ] > -then > - echo "create file err" > - status=1 > - exit > -fi > +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1 > +[ $? -ne 0 ] && _fail "Error creating file" > > -dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 > -dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 > +# Attempt to completely fill fs > +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1 > sync > +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K >>$seq.full 2>&1 > +sync > +# Last effort, use O_SYNC > +dd if=/dev/zero of=$SCRATCH_MNT/tmp4 bs=4K oflag=sync >>$seq.full 2>&1 > +# Save space usage info to the full file > +echo "Pre rm space:" >> $seq.full > +df $SCRATCH_MNT >>$seq.full 2>&1 > > -rm -f tmp1 > +# Should leave approx 256k free > +rm -f $SCRATCH_MNT/tmp1 > sync > +echo "Post rm space:" >> $seq.full > +df $SCRATCH_MNT >>$seq.full 2>&1 > +_freespace=`df -k $SCRATCH_MNT | tail -n 1 | awk '{print $4}'` > +[ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem" > + I doubt this cause btrfs has a mixed data+meta mode, which means data and metadata can share space, but this mode is only enabled when the filesystem size is less than 1G. We can apply the below to avoid it: -_scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 +_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > +# Try a write larger than available space > +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seq.full 2>&1 > +echo "Bytes written until ENOSPC:" >>$seq.full > +du $SCRATCH_MNT/tmp1 >>$seq.full > > -dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 > -_filesize=`du tmp1 | awk '{print $1}'` > -if [ $_filesize -ne 4 ] > -then > - echo "write file err" > - status=1 > - exit > -fi > +# And at least some of it should succeed. > +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` > +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." > And btrfs will check free space first and then decide if it should allocate blocks, so a partial write will fail anyway. Other parts looks good to me :) thanks, liubo > echo "done" > +status=0 > exit > diff --git a/275.out b/275.out > index 30af43c..69b9d52 100644 > --- a/275.out > +++ b/275.out > @@ -1,5 +1,5 @@ > QA output created by 275 > ------------------------------ > -write lack test > +write until ENOSPC test > ------------------------------ > done > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > From sandeen@redhat.com Tue Jan 17 22:03:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0I43I6l190980 for ; Tue, 17 Jan 2012 22:03:19 -0600 X-ASG-Debug-ID: 1326859396-04cb6c7d9d21080001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 6SN3VUS9IX7c06fq for ; Tue, 17 Jan 2012 20:03:17 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 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 q0I43C51010917 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 17 Jan 2012 23:03:12 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0I43A89012576 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Tue, 17 Jan 2012 23:03:11 -0500 Message-ID: <4F16447F.7050406@redhat.com> Date: Tue, 17 Jan 2012 22:03:11 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Liu Bo CC: xfs-oss , ext4 development , Eryu Guan Subject: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> <4F16318E.9080106@cn.fujitsu.com> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass In-Reply-To: <4F16318E.9080106@cn.fujitsu.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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: 1326859397 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86224 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/17/12 8:42 PM, Liu Bo wrote: > On 01/05/2012 04:54 AM, Eric Sandeen wrote: >> Ok, this is a significant rework of 275, which made too many >> assumptions about details of space usage and failed on several >> filesystems (it passed on xfs, but only by accident). >> >> This new version tries to leave about 256k free, then tries >> a single 1M IO, and fails only if 0 bytes are written. >> >> It also sends a lot more to $seq.full for debugging on failure >> and fixes a few other stylistic things. >> >> Signed-off-by: Eric Sandeen >> --- >> >> diff --git a/275 b/275 >> index 214262e..8f521f8 100755 >> --- a/275 >> +++ b/275 >> @@ -1,8 +1,8 @@ >> #! /bin/bash >> # FS QA Test No. 275 >> # >> -# The posix write test. when write size is larger than disk free size, >> -# should write as more as possible >> +# The posix write test. When write size is larger than disk free size, >> +# should write as much as possible until ENOSPC. >> # >> #----------------------------------------------------------------------- >> # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. >> @@ -30,13 +30,12 @@ echo "QA output created by $seq" >> >> here=`pwd` >> tmp=/tmp/$$ >> -status=0 # success is the default! >> +status=1 # failure is the default! >> trap "_cleanup; exit \$status" 0 1 2 3 15 >> >> _cleanup() >> { >> cd / >> - rm -f $SCRATCH_MNT/* $tmp.* >> _scratch_unmount >> } >> >> @@ -49,7 +48,7 @@ _supported_os IRIX Linux >> _require_scratch >> >> echo "------------------------------" >> -echo "write lack test" >> +echo "write until ENOSPC test" >> echo "------------------------------" >> >> rm -f $seq.full >> @@ -59,31 +58,38 @@ _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 >> _scratch_mount >> >> rm -rf $SCRATCH_MNT/* >> -cd $SCRATCH_MNT >> >> -dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 >> -if [ $? -ne 0 ] >> -then >> - echo "create file err" >> - status=1 >> - exit >> -fi >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1 >> +[ $? -ne 0 ] && _fail "Error creating file" >> >> -dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 >> -dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 >> +# Attempt to completely fill fs >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1 >> sync >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K >>$seq.full 2>&1 >> +sync >> +# Last effort, use O_SYNC >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp4 bs=4K oflag=sync >>$seq.full 2>&1 >> +# Save space usage info to the full file >> +echo "Pre rm space:" >> $seq.full >> +df $SCRATCH_MNT >>$seq.full 2>&1 >> >> -rm -f tmp1 >> +# Should leave approx 256k free >> +rm -f $SCRATCH_MNT/tmp1 >> sync >> +echo "Post rm space:" >> $seq.full >> +df $SCRATCH_MNT >>$seq.full 2>&1 >> +_freespace=`df -k $SCRATCH_MNT | tail -n 1 | awk '{print $4}'` >> +[ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem" >> + > > I doubt this cause btrfs has a mixed data+meta mode, which means data and metadata can > share space, but this mode is only enabled when the filesystem size is less than 1G. > > We can apply the below to avoid it: > -_scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > +_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 Ok, I can do that easily enough (assuming scratch space is likely to be at least 2G...) > >> +# Try a write larger than available space >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seq.full 2>&1 >> +echo "Bytes written until ENOSPC:" >>$seq.full >> +du $SCRATCH_MNT/tmp1 >>$seq.full >> >> -dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 >> -_filesize=`du tmp1 | awk '{print $1}'` >> -if [ $_filesize -ne 4 ] >> -then >> - echo "write file err" >> - status=1 >> - exit >> -fi >> +# And at least some of it should succeed. >> +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` >> +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." >> > > And btrfs will check free space first and then decide if it should allocate blocks, so a partial write > will fail anyway. Ok, I'm not quite clear - will the above be a problem for btrfs or is it ok? Thanks, -Eric > > Other parts looks good to me :) > > thanks, > liubo > >> echo "done" >> +status=0 >> exit >> diff --git a/275.out b/275.out >> index 30af43c..69b9d52 100644 >> --- a/275.out >> +++ b/275.out >> @@ -1,5 +1,5 @@ >> QA output created by 275 >> ------------------------------ >> -write lack test >> +write until ENOSPC test >> ------------------------------ >> done >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > From liubo2009@cn.fujitsu.com Tue Jan 17 22:54:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0I4sj8P192897 for ; Tue, 17 Jan 2012 22:54:45 -0600 X-ASG-Debug-ID: 1326862479-04cb6c7d9d2a230001-NocioJ Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id L1UuZqo3YVc8x2Up for ; Tue, 17 Jan 2012 20:54:41 -0800 (PST) X-Barracuda-Envelope-From: liubo2009@cn.fujitsu.com X-Barracuda-Apparent-Source-IP: 222.73.24.84 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id BF79A170152; Wed, 18 Jan 2012 12:54:38 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q0I4sV1w012540; Wed, 18 Jan 2012 12:54:37 +0800 Received: from localhost.localdomain ([10.167.225.27]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012011812430171-369091 ; Wed, 18 Jan 2012 12:43:01 +0800 Message-ID: <4F164DB2.4030703@cn.fujitsu.com> Date: Wed, 18 Jan 2012 12:42:26 +0800 From: Liu Bo User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090513 Fedora/3.0-2.3.beta2.fc11 Thunderbird/3.0b2 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss , ext4 development , Eryu Guan Subject: Re: [PATCH V2] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> <4F16318E.9080106@cn.fujitsu.com> <4F16447F.7050406@redhat.com> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: make 275 pass In-Reply-To: <4F16447F.7050406@redhat.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-18 12:43:01, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-18 12:53:32, Serialize complete at 2012-01-18 12:53:32 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1326862480 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86228 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 01/18/2012 12:03 PM, Eric Sandeen wrote: > On 1/17/12 8:42 PM, Liu Bo wrote: >> On 01/05/2012 04:54 AM, Eric Sandeen wrote: >>> Ok, this is a significant rework of 275, which made too many >>> assumptions about details of space usage and failed on several >>> filesystems (it passed on xfs, but only by accident). >>> >>> This new version tries to leave about 256k free, then tries >>> a single 1M IO, and fails only if 0 bytes are written. >>> >>> It also sends a lot more to $seq.full for debugging on failure >>> and fixes a few other stylistic things. >>> >>> Signed-off-by: Eric Sandeen >>> --- >>> >>> diff --git a/275 b/275 >>> index 214262e..8f521f8 100755 >>> --- a/275 >>> +++ b/275 >>> @@ -1,8 +1,8 @@ >>> #! /bin/bash >>> # FS QA Test No. 275 >>> # >>> -# The posix write test. when write size is larger than disk free size, >>> -# should write as more as possible >>> +# The posix write test. When write size is larger than disk free size, >>> +# should write as much as possible until ENOSPC. >>> # >>> #----------------------------------------------------------------------- >>> # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. >>> @@ -30,13 +30,12 @@ echo "QA output created by $seq" >>> >>> here=`pwd` >>> tmp=/tmp/$$ >>> -status=0 # success is the default! >>> +status=1 # failure is the default! >>> trap "_cleanup; exit \$status" 0 1 2 3 15 >>> >>> _cleanup() >>> { >>> cd / >>> - rm -f $SCRATCH_MNT/* $tmp.* >>> _scratch_unmount >>> } >>> >>> @@ -49,7 +48,7 @@ _supported_os IRIX Linux >>> _require_scratch >>> >>> echo "------------------------------" >>> -echo "write lack test" >>> +echo "write until ENOSPC test" >>> echo "------------------------------" >>> >>> rm -f $seq.full >>> @@ -59,31 +58,38 @@ _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 >>> _scratch_mount >>> >>> rm -rf $SCRATCH_MNT/* >>> -cd $SCRATCH_MNT >>> >>> -dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 >>> -if [ $? -ne 0 ] >>> -then >>> - echo "create file err" >>> - status=1 >>> - exit >>> -fi >>> +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1 >>> +[ $? -ne 0 ] && _fail "Error creating file" >>> >>> -dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 >>> -dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 >>> +# Attempt to completely fill fs >>> +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1 >>> sync >>> +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K >>$seq.full 2>&1 >>> +sync >>> +# Last effort, use O_SYNC >>> +dd if=/dev/zero of=$SCRATCH_MNT/tmp4 bs=4K oflag=sync >>$seq.full 2>&1 >>> +# Save space usage info to the full file >>> +echo "Pre rm space:" >> $seq.full >>> +df $SCRATCH_MNT >>$seq.full 2>&1 >>> >>> -rm -f tmp1 >>> +# Should leave approx 256k free >>> +rm -f $SCRATCH_MNT/tmp1 >>> sync >>> +echo "Post rm space:" >> $seq.full >>> +df $SCRATCH_MNT >>$seq.full 2>&1 >>> +_freespace=`df -k $SCRATCH_MNT | tail -n 1 | awk '{print $4}'` >>> +[ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem" >>> + >> I doubt this cause btrfs has a mixed data+meta mode, which means data and metadata can >> share space, but this mode is only enabled when the filesystem size is less than 1G. >> >> We can apply the below to avoid it: >> -_scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 >> +_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > > Ok, I can do that easily enough (assuming scratch space is likely to be at least 2G...) > >>> +# Try a write larger than available space >>> +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seq.full 2>&1 >>> +echo "Bytes written until ENOSPC:" >>$seq.full >>> +du $SCRATCH_MNT/tmp1 >>$seq.full >>> >>> -dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 >>> -_filesize=`du tmp1 | awk '{print $1}'` >>> -if [ $_filesize -ne 4 ] >>> -then >>> - echo "write file err" >>> - status=1 >>> - exit >>> -fi >>> +# And at least some of it should succeed. >>> +_filesize=`du $SCRATCH_MNT/tmp1 | awk '{print $1}'` >>> +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." >>> >> And btrfs will check free space first and then decide if it should allocate blocks, so a partial write >> will fail anyway. > > Ok, I'm not quite clear - will the above be a problem for btrfs or is it ok? > It is ok since it depends on the underlying FS IMO. thanks, liubo > Thanks, > -Eric > >> Other parts looks good to me :) >> >> thanks, >> liubo >> >>> echo "done" >>> +status=0 >>> exit >>> diff --git a/275.out b/275.out >>> index 30af43c..69b9d52 100644 >>> --- a/275.out >>> +++ b/275.out >>> @@ -1,5 +1,5 @@ >>> QA output created by 275 >>> ------------------------------ >>> -write lack test >>> +write until ENOSPC test >>> ------------------------------ >>> done >>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > From gnehzuil.liu@gmail.com Wed Jan 18 05:58:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_26,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0IBwdSC207873 for ; Wed, 18 Jan 2012 05:58:39 -0600 X-ASG-Debug-ID: 1326887917-04cbb02c7c8b130001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id eE6ltoh7IonoF13H for ; Wed, 18 Jan 2012 03:58:38 -0800 (PST) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iagz35 with SMTP id z35so12073880iag.26 for ; Wed, 18 Jan 2012 03:58:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=cFC8V6VfwzOau45Nj7GXjjEBb/2J3K8hMvv3km+5P6Q=; b=vgezbm35QMMKj0EV0OUrnloiDQwUtWs4LrBRUB/knOw02vqqzz2iXqvudhQ0jGqRAx eAotvxhOKNfB98fSyhFzvCifelOkL+n7bhIp3c8JEgtjs+dUoHlP+Gb2MT3chrEfPssi HGJovlz0wCrct1XpdHMchZJ7lSp6SObwpk9VY= Received: by 10.50.192.162 with SMTP id hh2mr19653813igc.8.1326887917620; Wed, 18 Jan 2012 03:58:37 -0800 (PST) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPS id vg9sm12350709igb.4.2012.01.18.03.58.33 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 18 Jan 2012 03:58:36 -0800 (PST) Date: Wed, 18 Jan 2012 20:02:23 +0800 From: Zheng Liu To: Allison Henderson Cc: Dave Chinner , Lukas Czerner , Ext4 Developers List , Tao Ma , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex Message-ID: <20120118120223.GA4322@gmail.com> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex Mail-Followup-To: Allison Henderson , Dave Chinner , Lukas Czerner , Ext4 Developers List , Tao Ma , xfs@oss.sgi.com References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> <4F10992C.3070303@linux.vnet.ibm.com> <20120115235747.GA6922@dastard> <4F146275.8090304@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F146275.8090304@linux.vnet.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1326887917 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86242 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 Mon, Jan 16, 2012 at 10:46:29AM -0700, Allison Henderson wrote: > On 01/15/2012 04:57 PM, Dave Chinner wrote: > >On Fri, Jan 13, 2012 at 01:50:52PM -0700, Allison Henderson wrote: > >>On 01/12/2012 09:34 PM, Dave Chinner wrote: > >>>On Thu, Jan 12, 2012 at 08:01:43PM -0700, Allison Henderson wrote: > >>>>Hi All, > >>>> > >>>>I know this is an old topic, but I am poking it again because I've > >>>>had some work items wrap up, and Im planning on picking up on this > >>>>one again. I am thinking about implementing extent locks to replace > >>>>i_mutex. So I just wanted to touch base with folks and see what > >>>>people are working on because I know there were some folks out there > >>>>that were thing about doing similar solutions. > >>> > >>>What locking API are you looking at? If you are looking at an > >>>something like: > >>> > >>>read_range_{try}lock(lock, off, len) > >>>read_range_unlock(lock, off, len) > >>>write_range_{try}lock(lock, off, len) > >>>write_range_unlock(lock, off, len) > >>> > >>>and implementing with an rbtree or a btree for tracking, then I > >>>definitely have a use for it in XFS - replacing the current rwsem > >>>that is used for the iolock. Range locks like this are the only > >>>thing we need to allow concurrent buffered writes to the same file > >>>to maintain the per-write exclusion that posix requires. > >> > >>Yes that is generally the idea I was thinking about doing, but at > >>the time, I was not thinking outside the scope of ext4. You are > >>thinking maybe it should be in vfs layer so that it's something that > >>all the filesystems will use? That seems to be the impression I'm > >>getting from folks. Thx! > > > >Yes, that's what I'm suggesting. Not so much a vfs layer function, > >but a library (range locks could be useful outside filesystems) so > >locating it in lib/ was what I was thinking.... > > > >Cheers, > > > >Dave. > > Alrighty, that sounds good to me. I will aim to keep it as general > purpose as I can. I am going to start some proto typing and will > post back when I get something working. Thx for the feedback all! > :) Hi Allison, For this project, do you have a schedule? Would you like to share to me? This lock contention heavily impacts the performance of direct IO in our production environment. So we hope to improve it ASAP. I have done some direct IO benchmarks to compare ext4 with xfs using fio in Intel SSD. The result shows that, in direct IO, xfs outperforms ext4 and ext4 with dioread_nolock. To understand the effect of lock contention, I define a new function called ext4_file_aio_write() that calls __generic_file_aio_write() without acquiring i_mutex lock. Meanwhile, I remove DIO_LOCKING flag when __blockdev_direct_IO() is called and do the similar benchmarks. The result shows that the performance in ext4 is almost the same to the xfs. Thus, it proves that the i_mutex heavily impacts the performance. Hopefully the result is useful for you. :-) I post the result in here. config file: [global] filesize=64G size=64G bs=16k ioengine=psync direct=1 filename=/mnt/ext4/benchmark runtime=600 group_reporting thread [randrw] numjobs=32 rw=randrw rwmixread=90 result: iops 1 (r/w) 2 3 ext4 5584/622 5726/636 5719/636 ext4+dioread_nolock 7105/789 7117/793 7129/795 ext4+dio_nolock 8920/992 8956/995 8976/997 xfs 8726/971 8962/994 8975/998 bandwidth 1 (r/w) 2 3 KB/s ext4 89359/9955.3 91621/10186 91519/10185 ext4+dioread_nolock 113691/12635 113882/12692 114066/12728 ext4+dio_nolock 142731/15888 143301/15930 143617/15959 xfs 139627/15537 143400/15914 143603/15980 latency 1 (r/w) 2 3 usec ext4 5163.28/5048.31 5037.81/4914.82 5041.49/4932.81 ext4+dioread_nolock 1220.04/29510.5 1213.67/29418.9 1208.77/29361.49 ext4+dio_nolock 3226.61/3194.35 3214.59/3178.09 3207.34/3173.78 xfs 3299.87/3266.32 3213.73/3182.20 3208.16/3178.10 Regards, Zheng > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From james@jdlawrie.co.uk Wed Jan 18 12:07:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0II7Iia224932 for ; Wed, 18 Jan 2012 12:07:18 -0600 X-ASG-Debug-ID: 1326910036-04cb6c7d9ac6440001-NocioJ Received: from mail.jdlawrie.co.uk (jdlawrie.co.uk [67.207.135.72]) by cuda.sgi.com with ESMTP id 8VHp1sHE5BZ97NW9 for ; Wed, 18 Jan 2012 10:07:16 -0800 (PST) X-Barracuda-Envelope-From: james@jdlawrie.co.uk X-Barracuda-Apparent-Source-IP: 67.207.135.72 Received: from [192.168.1.69] (94-192-187-235.zone6.bethere.co.uk [94.192.187.235]) by mail.jdlawrie.co.uk (Postfix) with ESMTP id 0484234026 for ; Wed, 18 Jan 2012 13:07:15 -0500 (EST) Message-ID: <4F170A53.9070202@jdlawrie.co.uk> Date: Wed, 18 Jan 2012 18:07:15 +0000 From: James Lawrie User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111108 Thunderbird/3.1.16 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Trouble activating xfs pquotas Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: Trouble activating xfs pquotas Content-Transfer-Encoding: 7bit X-Barracuda-Connect: jdlawrie.co.uk[67.207.135.72] X-Barracuda-Start-Time: 1326910036 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86263 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, I'm unable to activate project quotas on a partition which used to have it enabled - I just get "Function not implemented". The partition is mounted with pquota, and I can't seem to find any other reason this would happen. Please see more information and output at http://serverfault.com/questions/351137/unable-to-re-implement-xfs-project-quotas-function-not-implemented - I'd really appreciate any advice. Thank you, James Lawrie From bpm@sgi.com Wed Jan 18 14:41:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0IKfro3230513 for ; Wed, 18 Jan 2012 14:41:54 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id BDD2B30404E; Wed, 18 Jan 2012 12:41:50 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 0FB83426DA7; Wed, 18 Jan 2012 14:41:53 -0600 (CST) From: bpm@sgi.com To: stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com Subject: XFS update for 3.2-stable Date: Wed, 18 Jan 2012 14:41:44 -0600 Message-Id: <1326919305-2753-1-git-send-email-bpm@sgi.com> X-Mailer: git-send-email 1.7.8.rc4 Here's a fix for 3.2-stable related to trim support in xfs. From bpm@sgi.com Wed Jan 18 14:41:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0IKfqNG230506 for ; Wed, 18 Jan 2012 14:41:52 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 268CD30404E; Wed, 18 Jan 2012 12:41:52 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 5D5A3426DA8; Wed, 18 Jan 2012 14:41:54 -0600 (CST) From: bpm@sgi.com To: stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com Cc: Dave Chinner Subject: [PATCH] xfs: fix endian conversion issue in discard code Date: Wed, 18 Jan 2012 14:41:45 -0600 Message-Id: <1326919305-2753-2-git-send-email-bpm@sgi.com> X-Mailer: git-send-email 1.7.8.rc4 In-Reply-To: <1326919305-2753-1-git-send-email-bpm@sgi.com> References: <1326919305-2753-1-git-send-email-bpm@sgi.com> From: Dave Chinner commit b1c770c273a4787069306fc82aab245e9ac72e9d upstream When finding the longest extent in an AG, we read the value directly out of the AGF buffer without endian conversion. This will give an incorrect length, resulting in FITRIM operations potentially not trimming everything that it should. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers --- fs/xfs/xfs_discard.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c index 8a24f0c..286a051 100644 --- a/fs/xfs/xfs_discard.c +++ b/fs/xfs/xfs_discard.c @@ -68,7 +68,7 @@ xfs_trim_extents( * Look up the longest btree in the AGF and start with it. */ error = xfs_alloc_lookup_le(cur, 0, - XFS_BUF_TO_AGF(agbp)->agf_longest, &i); + be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest), &i); if (error) goto out_del_cursor; @@ -84,7 +84,7 @@ xfs_trim_extents( if (error) goto out_del_cursor; XFS_WANT_CORRUPTED_GOTO(i == 1, out_del_cursor); - ASSERT(flen <= XFS_BUF_TO_AGF(agbp)->agf_longest); + ASSERT(flen <= be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest)); /* * Too small? Give up. -- 1.7.8.rc4 From eflorac@intellique.com Wed Jan 18 15:18:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0ILIY2I231715 for ; Wed, 18 Jan 2012 15:18:34 -0600 X-ASG-Debug-ID: 1326921505-04cbb02c7b111910001-NocioJ Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by cuda.sgi.com with ESMTP id 4jRkr6Rpi2lJXm8f for ; Wed, 18 Jan 2012 13:18:27 -0800 (PST) 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 F0C80A61B4; Wed, 18 Jan 2012 22:18:21 +0100 (CET) Date: Wed, 18 Jan 2012 22:18:08 +0100 From: Emmanuel Florac To: James Lawrie Cc: xfs@oss.sgi.com Subject: Re: Trouble activating xfs pquotas Message-ID: <20120118221808.30fc760a@galadriel.home> X-ASG-Orig-Subj: Re: Trouble activating xfs pquotas In-Reply-To: <4F170A53.9070202@jdlawrie.co.uk> References: <4F170A53.9070202@jdlawrie.co.uk> Organization: Intellique X-Mailer: Claws Mail 3.7.8 (GTK+ 2.20.1; i686-pc-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: 1326921505 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86277 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Wed, 18 Jan 2012 18:07:15 +0000 vous =C3=A9criviez: > I'm unable to activate project quotas on a partition which used to > have it enabled - I just get "Function not implemented". The > partition is mounted with pquota, and I can't seem to find any other > reason this would happen. See my answer here: http://serverfault.com/a/351241/10310 Copied here for the list: Caveat: did you mount the volume directly with the quota options? I know for sure that xfs doesn't support enabling quota (and many other options) through "remount", though mount lists the options as enabled. Here comes a non working example: # mount -t xfs /dev/dm-0 /mnt/test # mount /dev/dm-0 on /mnt/test type xfs (rw) # mount -o remount,pquota /mnt/test # mount /dev/dm-0 on /mnt/test type xfs (rw,pquota) mount lists the mountpoint as quota enabled, but quotas won't actually work. You must umount then mount. --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From bpm@sgi.com Wed Jan 18 16:36:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0IMa78V234033; Wed, 18 Jan 2012 16:36:07 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7D524304071; Wed, 18 Jan 2012 14:36:00 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id AF980426DA7; Wed, 18 Jan 2012 16:36:02 -0600 (CST) Date: Wed, 18 Jan 2012 16:36:02 -0600 From: Ben Myers To: Amit Sahrawat Cc: Alex Elder , Christoph Hellwig , xfs-masters@oss.sgi.com, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 1/1] xfs: kill the unused XFS_BB_FSB_OFFSET macro Message-ID: <20120118223602.GA30741@sgi.com> References: <1326716676-11842-1-git-send-email-amit.sahrawat83@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326716676-11842-1-git-send-email-amit.sahrawat83@gmail.com> User-Agent: Mutt/1.5.18 (2008-05-17) On Mon, Jan 16, 2012 at 05:54:36PM +0530, Amit Sahrawat wrote: > Removing the macro, as this is no more needed in the code. > Tried to find the reference when it was last used - but the usage > for this seemed to have been dropped long time ago. > > Signed-off-by: Amit Sahrawat > Reviewed-by: Christoph Hellwig Looks good. Reviewed-by: Ben Myers From MAILER-DAEMON@oss.sgi.com Thu Jan 19 03:52:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, T_TVD_MIME_NO_HEADERS autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0J9qMYb260098 for ; Thu, 19 Jan 2012 03:52:22 -0600 X-ASG-Debug-ID: 1326966740-04cb6c7d9a14f360001-w1Z2WR Received: from david.siemens.com (david.siemens.com [194.138.160.5]) by cuda.sgi.com with ESMTP id 7rVN8yVDvafc4ITL for ; Thu, 19 Jan 2012 01:52:20 -0800 (PST) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 194.138.160.5 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by david.siemens.com (8.12.11.20060614/8.12.11) with ESMTP id q0J9eSLd004037 for ; Thu, 19 Jan 2012 04:41:19 -0500 (EST) Received: from localhost (localhost) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) id q0J9j5Lp009177; Thu, 19 Jan 2012 04:52:18 -0500 Date: Thu, 19 Jan 2012 04:52:18 -0500 From: Mail Delivery Subsystem Message-Id: <201201190952.q0J9j5Lp009177@mail-usa.sbs.siemens.com> To: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="q0J9j5Lp009177.1326966738/mail-usa.sbs.siemens.com" Subject: Returned mail: see transcript for details Auto-Submitted: auto-generated (failure) X-ASG-Orig-Subj: Returned mail: see transcript for details X-Barracuda-Connect: david.siemens.com[194.138.160.5] X-Barracuda-Start-Time: 1326966740 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, BSF_SC0_SA590, EMPTY_ENV_FROM X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86321 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.20 BSF_SC0_SA590 Custom Rule SA590 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message This is a MIME-encapsulated message --q0J9j5Lp009177.1326966738/mail-usa.sbs.siemens.com The original message was received at Thu, 19 Jan 2012 04:29:07 -0500 from mail2.sbs.siemens.com [129.73.68.7] ----- The following addresses had permanent fatal errors ----- (reason: 554 5.4.6 Too many hops) ----- Transcript of session follows ----- 554 5.4.6 Too many hops 26 (25 max): from via localhost, to --q0J9j5Lp009177.1326966738/mail-usa.sbs.siemens.com Content-Type: message/delivery-status Reporting-MTA: dns; mail-usa.sbs.siemens.com Arrival-Date: Thu, 19 Jan 2012 04:29:07 -0500 Final-Recipient: RFC822; intern-jt@scr.siemens.com Action: failed Status: 5.4.6 Diagnostic-Code: SMTP; 554 5.4.6 Too many hops Last-Attempt-Date: Thu, 19 Jan 2012 04:52:18 -0500 --q0J9j5Lp009177.1326966738/mail-usa.sbs.siemens.com Content-Type: text/rfc822-headers Return-Path: Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9T7W0022772 for ; Thu, 19 Jan 2012 04:29:07 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9RDED006398 for ; Thu, 19 Jan 2012 04:27:13 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9RCpb032173 for ; Thu, 19 Jan 2012 04:27:12 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9T4oj022757 for ; Thu, 19 Jan 2012 04:29:04 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9RAqG006395 for ; Thu, 19 Jan 2012 04:27:10 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9R9g0032170 for ; Thu, 19 Jan 2012 04:27:09 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9T017022730 for ; Thu, 19 Jan 2012 04:29:00 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9R6gh006353 for ; Thu, 19 Jan 2012 04:27:06 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9R6xZ032166 for ; Thu, 19 Jan 2012 04:27:06 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9Su5r022697 for ; Thu, 19 Jan 2012 04:28:56 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9R3pD006338 for ; Thu, 19 Jan 2012 04:27:03 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9R30N032144 for ; Thu, 19 Jan 2012 04:27:03 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9Ssqb022676 for ; Thu, 19 Jan 2012 04:28:54 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9R1Zi006332 for ; Thu, 19 Jan 2012 04:27:02 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9R1HK032129 for ; Thu, 19 Jan 2012 04:27:01 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9SqfF022661 for ; Thu, 19 Jan 2012 04:28:52 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9R0HU006323 for ; Thu, 19 Jan 2012 04:27:00 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9Qxi0032126 for ; Thu, 19 Jan 2012 04:26:59 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9Soo1022658 for ; Thu, 19 Jan 2012 04:28:50 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9QvE9006311 for ; Thu, 19 Jan 2012 04:26:58 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9QvLI032123 for ; Thu, 19 Jan 2012 04:26:57 -0500 Received: from mail2.sbs.siemens.com (mail2.sbs.siemens.com [129.73.68.7]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9SmqC022641 for ; Thu, 19 Jan 2012 04:28:48 -0500 Received: from pctc105x.us008.siemens.net (pctc105x.us008.siemens.net [129.73.8.48]) by mail2.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9QuU7006296 for ; Thu, 19 Jan 2012 04:26:56 -0500 Received: from mail-usa.sbs.siemens.com (mail-usa.sbs.siemens.com [129.73.68.4]) by pctc105x.us008.siemens.net (8.13.8/8.13.8) with ESMTP id q0J9Qrt3032120 for ; Thu, 19 Jan 2012 04:26:55 -0500 Received: from goliath.siemens.com (goliath [194.138.160.6]) by mail-usa.sbs.siemens.com (8.12.11.20060308/8.12.11) with ESMTP id q0J9Shdo022627 for ; Thu, 19 Jan 2012 04:28:43 -0500 Received: from oss.sgi.com (MAG-TOURS-SIDR-P.net.t-com.hr [195.29.235.26]) by goliath.siemens.com (8.12.11.20060614/8.12.11) with ESMTP id q0J9SkMv005545 for ; Thu, 19 Jan 2012 04:28:47 -0500 (EST) Message-Id: <201201190928.q0J9SkMv005545@goliath.siemens.com> From: linux-xfs@oss.sgi.com To: intern-jt@scr.siemens.com Subject: Message could not be delivered Date: Thu, 19 Jan 2012 10:26:54 +0100 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0006_1D5FA674.462E3E3F" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 --q0J9j5Lp009177.1326966738/mail-usa.sbs.siemens.com-- From MAILER-DAEMON@oss.sgi.com Thu Jan 19 07:42:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JDggHW009492 for ; Thu, 19 Jan 2012 07:42:42 -0600 X-ASG-Debug-ID: 1326980559-04cbb02c7c1ca1d0001-NocioJ Received: from mail.hkmug.org.hk (058177086090.ctinets.com [58.177.86.90]) by cuda.sgi.com with ESMTP id VcLjqsLGnjiefiAI for ; Thu, 19 Jan 2012 05:42:40 -0800 (PST) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 58.177.86.90 Message-id: Date: Thu, 19 Jan 2012 21:42:40 +0800 Subject: NDN: X-Mailer: FirstClass 9.1 (build 9.221) X-ASG-Orig-Subj: NDN: X-FC-Icon-ID: 2031 X-FC-SERVER-TZ: 63570208 X-FC-MachineGenerated: true To: xfs@oss.sgi.com From: Gateway@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="--=_--00681da5.00681da4.cb3dce50" X-Barracuda-Connect: 058177086090.ctinets.com[58.177.86.90] X-Barracuda-Start-Time: 1326980559 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, EMPTY_ENV_FROM, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86335 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message This is a multi-part message in MIME format. ----=_--00681da5.00681da4.cb3dce50 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sorry. Your message could not be delivered to: friend88,HKMUG (The name was not found at the remote site. Check that the name has been entered correctly.) ----=_--00681da5.00681da4.cb3dce50 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <=21DOCTYPE HTML PUBLIC =22-//W3C//DTD HTML 4.0 Transitional//EN=22>
Sorry. Your message could not be delive= red to:

friend88,HKMUG (The name was not found = at the remote site. Check that the name has been entered correctly.)=

----=_--00681da5.00681da4.cb3dce50-- From MAILER-DAEMON@oss.sgi.com Thu Jan 19 07:43:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JDh4wD009521 for ; Thu, 19 Jan 2012 07:43:04 -0600 X-ASG-Debug-ID: 1326980582-04cbb02c7c1ca300001-NocioJ Received: from mail.hkmug.org.hk (058177086090.ctinets.com [58.177.86.90]) by cuda.sgi.com with ESMTP id 4qVrA9mjdrOlENj7 for ; Thu, 19 Jan 2012 05:43:02 -0800 (PST) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 58.177.86.90 Message-id: Date: Thu, 19 Jan 2012 21:43:03 +0800 Subject: NDN: X-Mailer: FirstClass 9.1 (build 9.221) X-ASG-Orig-Subj: NDN: X-FC-Icon-ID: 2031 X-FC-SERVER-TZ: 63570208 X-FC-MachineGenerated: true To: xfs@oss.sgi.com From: Gateway@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="--=_--00681da9.00681da8.cb3dce67" X-Barracuda-Connect: 058177086090.ctinets.com[58.177.86.90] X-Barracuda-Start-Time: 1326980582 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, EMPTY_ENV_FROM, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86335 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message This is a multi-part message in MIME format. ----=_--00681da9.00681da8.cb3dce67 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sorry. Your message could not be delivered to: friend88,HKMUG (The name was not found at the remote site. Check that the name has been entered correctly.) ----=_--00681da9.00681da8.cb3dce67 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <=21DOCTYPE HTML PUBLIC =22-//W3C//DTD HTML 4.0 Transitional//EN=22>
Sorry. Your message could not be delive= red to:

friend88,HKMUG (The name was not found = at the remote site. Check that the name has been entered correctly.)=

----=_--00681da9.00681da8.cb3dce67-- From MAILER-DAEMON@oss.sgi.com Thu Jan 19 07:42:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JDgvo0009510 for ; Thu, 19 Jan 2012 07:42:57 -0600 X-ASG-Debug-ID: 1326980575-04cbb02c7c1ca2b0001-NocioJ Received: from mail.hkmug.org.hk (058177086090.ctinets.com [58.177.86.90]) by cuda.sgi.com with ESMTP id DCb0K3hld7ZdHzbA for ; Thu, 19 Jan 2012 05:42:55 -0800 (PST) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 58.177.86.90 Message-id: Date: Thu, 19 Jan 2012 21:42:56 +0800 Subject: NDN: X-Mailer: FirstClass 9.1 (build 9.221) X-ASG-Orig-Subj: NDN: X-FC-Icon-ID: 2031 X-FC-SERVER-TZ: 63570208 X-FC-MachineGenerated: true To: xfs@oss.sgi.com From: Gateway@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="--=_--00681da7.00681da6.cb3dce60" X-Barracuda-Connect: 058177086090.ctinets.com[58.177.86.90] X-Barracuda-Start-Time: 1326980575 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, EMPTY_ENV_FROM, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86335 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message This is a multi-part message in MIME format. ----=_--00681da7.00681da6.cb3dce60 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sorry. Your message could not be delivered to: friend88,HKMUG (The name was not found at the remote site. Check that the name has been entered correctly.) ----=_--00681da7.00681da6.cb3dce60 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <=21DOCTYPE HTML PUBLIC =22-//W3C//DTD HTML 4.0 Transitional//EN=22>
Sorry. Your message could not be delive= red to:

friend88,HKMUG (The name was not found = at the remote site. Check that the name has been entered correctly.)=

----=_--00681da7.00681da6.cb3dce60-- From MAILER-DAEMON@oss.sgi.com Thu Jan 19 07:43:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JDhK3c009560 for ; Thu, 19 Jan 2012 07:43:20 -0600 X-ASG-Debug-ID: 1326980598-04cbb02c7c1ca3b0001-NocioJ Received: from mail.hkmug.org.hk (058177086090.ctinets.com [58.177.86.90]) by cuda.sgi.com with ESMTP id TDmOtn9nHRTUXVvJ for ; Thu, 19 Jan 2012 05:43:19 -0800 (PST) X-Barracuda-Envelope-From: X-Barracuda-Apparent-Source-IP: 58.177.86.90 Message-id: Date: Thu, 19 Jan 2012 21:43:19 +0800 Subject: NDN: X-Mailer: FirstClass 9.1 (build 9.221) X-ASG-Orig-Subj: NDN: X-FC-Icon-ID: 2031 X-FC-SERVER-TZ: 63570208 X-FC-MachineGenerated: true To: xfs@oss.sgi.com From: Gateway@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="--=_--00681dab.00681daa.cb3dce77" X-Barracuda-Connect: 058177086090.ctinets.com[58.177.86.90] X-Barracuda-Start-Time: 1326980598 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, EMPTY_ENV_FROM, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86335 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 EMPTY_ENV_FROM Empty Envelope From Address 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message This is a multi-part message in MIME format. ----=_--00681dab.00681daa.cb3dce77 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sorry. Your message could not be delivered to: friend88,HKMUG (The name was not found at the remote site. Check that the name has been entered correctly.) ----=_--00681dab.00681daa.cb3dce77 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <=21DOCTYPE HTML PUBLIC =22-//W3C//DTD HTML 4.0 Transitional//EN=22>
Sorry. Your message could not be delive= red to:

friend88,HKMUG (The name was not found = at the remote site. Check that the name has been entered correctly.)=

----=_--00681dab.00681daa.cb3dce77-- From sandeen@sandeen.net Thu Jan 19 12:37:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JIb78w032550 for ; Thu, 19 Jan 2012 12:37:08 -0600 X-ASG-Debug-ID: 1326998225-04bdf0149912ea0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id FjRBcvpuOcgIhF9J for ; Thu, 19 Jan 2012 10:37:05 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id E1D0F49632AF; Thu, 19 Jan 2012 12:37:04 -0600 (CST) Message-ID: <4F1862D0.1060708@sandeen.net> Date: Thu, 19 Jan 2012 12:37:04 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: James Lawrie CC: xfs@oss.sgi.com Subject: Re: Trouble activating xfs pquotas References: <4F170A53.9070202@jdlawrie.co.uk> X-ASG-Orig-Subj: Re: Trouble activating xfs pquotas In-Reply-To: <4F170A53.9070202@jdlawrie.co.uk> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1326998225 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86355 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/18/12 12:07 PM, James Lawrie wrote: > Hi, > > I'm unable to activate project quotas on a partition which used to > have it enabled - I just get "Function not implemented". The > partition is mounted with pquota, and I can't seem to find any other > reason this would happen. > > Please see more information and output at > http://serverfault.com/questions/351137/unable-to-re-implement-xfs-project-quotas-function-not-implemented > - I'd really appreciate any advice. > > Thank you, > > James Lawrie Based on IRC conversations, the fs was never(?) properly mounted with quota in the first place; an actual remount w/ quota forced by a reboot seems to have resolved this. -Eric From sandeen@sandeen.net Thu Jan 19 12:37:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JIbnUE032603 for ; Thu, 19 Jan 2012 12:37:50 -0600 X-ASG-Debug-ID: 1326998268-04cbb06dc90cb00001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id fA7BG7KBHUSgYvrU for ; Thu, 19 Jan 2012 10:37:49 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id A28F049632AF; Thu, 19 Jan 2012 12:37:48 -0600 (CST) Message-ID: <4F1862FC.1050401@sandeen.net> Date: Thu, 19 Jan 2012 12:37:48 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: Eric Sandeen , ext4 development , xfs-oss Subject: Re: [PATCH] xfstests: mount other filesystems with selinux context as well References: <4ECD3262.105@redhat.com> <20111128110228.GC13766@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests: mount other filesystems with selinux context as well In-Reply-To: <20111128110228.GC13766@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1326998268 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86355 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 11/28/11 5:02 AM, Christoph Hellwig wrote: > On Wed, Nov 23, 2011 at 11:50:26AM -0600, Eric Sandeen wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> For some reason, non-xfs filesystems aren't getting mounted with >> the selinux context; perhaps because none of the xattr tests used >> to work on anything but xfs? >> >> Anyway, 062 fails for extN unless we mount with the fs-wide >> context. >> >> Signed-off-by: Eric Sandeen >> - --- >> >> diff --git a/common.rc b/common.rc >> index cab0b64..5998ff2 100644 >> - --- a/common.rc >> +++ b/common.rc >> @@ -86,14 +86,17 @@ _mount_opts() >> export MOUNT_OPTIONS=$NFS_MOUNT_OPTIONS >> ;; >> ext2|ext3|ext4|ext4dev) >> - - # acls & xattrs aren't turned on by default on ext$FOO >> + export SELINUX_MOUNT_OPTIONS >> + # acls & xattrs aren't turned on by default on ext$FOO in old kernels >> export MOUNT_OPTIONS="-o acl,user_xattr $EXT_MOUNT_OPTIONS" >> ;; >> reiserfs) >> + export SELINUX_MOUNT_OPTIONS >> # acls & xattrs aren't turned on by default on reiserfs >> export MOUNT_OPTIONS="-o acl,user_xattr $REISERFS_MOUNT_OPTIONS" >> ;; >> gfs2) >> + export SELINUX_MOUNT_OPTIONS >> # acls aren't turned on by default on gfs2 >> export MOUNT_OPTIONS="-o acl $GFS2_MOUNT_OPTIONS" >> ;; > > shouldn't the "export SELINUX_MOUNT_OPTIONS" simply move to common code? I wasn't sure if nfs would grok it. -Eric From james@jdlawrie.co.uk Thu Jan 19 12:49:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JInWND033488 for ; Thu, 19 Jan 2012 12:49:32 -0600 X-ASG-Debug-ID: 1326998971-04cb6c06f309560001-NocioJ Received: from mail.jdlawrie.co.uk (jdlawrie.co.uk [67.207.135.72]) by cuda.sgi.com with ESMTP id HdaiSKzhmSnEUC9w for ; Thu, 19 Jan 2012 10:49:31 -0800 (PST) X-Barracuda-Envelope-From: james@jdlawrie.co.uk X-Barracuda-Apparent-Source-IP: 67.207.135.72 Received: from desk1.tur.bytemark.co.uk (desk1.tur.bytemark.co.uk [212.110.163.132]) by mail.jdlawrie.co.uk (Postfix) with ESMTP id DA18B34163 for ; Thu, 19 Jan 2012 13:49:30 -0500 (EST) Message-ID: <4F1865B9.3050908@jdlawrie.co.uk> Date: Thu, 19 Jan 2012 18:49:29 +0000 From: James Lawrie User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Thunderbird/3.1.16 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: Trouble activating xfs pquotas References: <4F170A53.9070202@jdlawrie.co.uk> <4F1862D0.1060708@sandeen.net> X-ASG-Orig-Subj: Re: Trouble activating xfs pquotas In-Reply-To: <4F1862D0.1060708@sandeen.net> X-Enigmail-Version: 1.1.2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: jdlawrie.co.uk[67.207.135.72] X-Barracuda-Start-Time: 1326998971 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86357 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, > Based on IRC conversations, the fs was never(?) properly mounted with quota in the first place; an actual remount w/ quota forced by a reboot seems to have resolved this. That's right, thanks for updating the list for me. The fs did originally have quotas enabled, but lost them at some point. My attempts to umount must not have been clean enough. Thanks for the help. James From bpm@sgi.com Thu Jan 19 13:39:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JJdmIQ037452 for ; Thu, 19 Jan 2012 13:39:48 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3C55D8F804B; Thu, 19 Jan 2012 11:39:45 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 3F231426DA7; Thu, 19 Jan 2012 13:39:47 -0600 (CST) Date: Thu, 19 Jan 2012 13:39:47 -0600 From: Ben Myers To: lsf-pc@lists.linux-foundation.org Cc: linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Subject: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems Message-ID: <20120119193947.GA6688@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) I would like to discuss how to get DMAPI accepted into the mainline kernel. DMAPI is or was supported by a number of filesystems which are included in linux (including XFS) and also is supported by a number of proprietary filesystems. However, the DMAPI implementation has not yet been accepted into the main line. - What are the barriers to inclusion and how can they be resolved? - What FOSS HSM projects are available to use the interface? * xfstests/dmapi/sample_hsm * openhsm (opensms) * tinyhsm (unfinished, unreleased) - Who are the interested parties (if any), and how could we split up the work? In the end I'd like to come up with a plan that seems reasonable toward getting DMAPI included mainline. I know that Alex Elder and others have done work in this area and I would like to see it bear fruit. --- Secondly, I'd enjoy a discussion of an old idea from back in the day when I worked as a sysadmin and became a storage software hobbyist. Having recently lost a great deal of data due to disk failure and failed backups, I struck upon the idea of turning the backup paradigm on it's head: I'd rather have the authoritative copy of my data on an external medium and only cache it on spinning rust. The filesystem would log every transaction (WORM style) to removable media and the set of discs or tapes would be replayable onto new hard disks when I had a failure. Checkpoints would ensure that the number of discs/tapes necessary to replay the filesystem remained manageable, and the write performance problem would be mitigated by maintaining a temporary log on spinning disk to spool up enough data to keep the tape from having to rewind. One could choose to recycle media from before a checkpoint, or save it off for posterity. My choice of medium at the time was cd-rom since I couldn't afford a tape drive. I went about trying to implement such a thing using DMAPI, which isn't suitable (you can't set an event mask on a file quickly enough to log the first writes). Then I tried a stacking filesystem, fuse, got a job, and lost interest. This is almost certainly not a new idea. If there is already something like this implemented, I'd like to hear about it. If there isn't, maybe we could come up with a rough design on a cocktail napkin and pique enough interest to make a start. Regards, Ben From greg.freemyer@gmail.com Thu Jan 19 14:12:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JKCGJC039667 for ; Thu, 19 Jan 2012 14:12:16 -0600 X-ASG-Debug-ID: 1327003935-04bdf002b713ac0001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id DBCYybgEzW1nhhtH for ; Thu, 19 Jan 2012 12:12:15 -0800 (PST) X-Barracuda-Envelope-From: greg.freemyer@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iagz35 with SMTP id z35so368114iag.26 for ; Thu, 19 Jan 2012 12:12:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=YO8bL78kX/fQiEIuK8UK/Q8HtnNtmjrMZMpJ9ZGKAjA=; b=E947hPOUDZXkOFemvFHOr7m+HiMHwBw/vPMZXHpw4YGijT8k2QtUDV0xuzgFDGxrob CgQL32j47Jt62MKMRPPJNd3PJHJ5vbTe+Q1jHuFJiiLvvcVQ0063juhNwqQDKTAACxm8 xQmfIuBFynv+fd/zKjfNBQz6vRMrHosWgQUVk= Received: by 10.50.222.193 with SMTP id qo1mr29438331igc.22.1327003935307; Thu, 19 Jan 2012 12:12:15 -0800 (PST) MIME-Version: 1.0 Received: by 10.231.6.194 with HTTP; Thu, 19 Jan 2012 12:11:43 -0800 (PST) In-Reply-To: <20120119193947.GA6688@sgi.com> References: <20120119193947.GA6688@sgi.com> From: Greg Freemyer Date: Thu, 19 Jan 2012 15:11:43 -0500 Message-ID: Subject: Re: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems To: Ben Myers X-ASG-Orig-Subj: Re: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems Cc: lsf-pc@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1327003935 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Thu, Jan 19, 2012 at 2:39 PM, Ben Myers wrote: > - What FOSS HSM projects are available to use the interface? > =A0 =A0 =A0 =A0* xfstests/dmapi/sample_hsm > =A0 =A0 =A0 =A0* openhsm (opensms) > =A0 =A0 =A0 =A0* tinyhsm (unfinished, unreleased) * ohsm (unfinished, unreleased) (I think) http://code.google.com/p/fscops/ Presented at OLS 2009 Greg From fmayhar@google.com Thu Jan 19 15:16:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0JLGE0G046353 for ; Thu, 19 Jan 2012 15:16:14 -0600 X-ASG-Debug-ID: 1327007773-04cb6c06f31af80001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id 8slP5UUjmlMWEiDE for ; Thu, 19 Jan 2012 13:16:13 -0800 (PST) X-Barracuda-Envelope-From: fmayhar@google.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 X-Barracuda-IPDD: Level1 [google.com/209.85.210.181] Received: by iagz35 with SMTP id z35so441965iag.26 for ; Thu, 19 Jan 2012 13:16:13 -0800 (PST) X-Barracuda-IPDD: Level1 [google.com/209.85.210.181] X-Barracuda-IPDD: Level1 [google.com/209.85.210.181] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:organization :date:message-id:mime-version:x-mailer:content-transfer-encoding; bh=2X+eO4yG+d/b/X0BNlh7cA8LnGW0utmcIr0wrbtGMK8=; b=IBwpqEViSKuHJ2r7wwtqPHdyXZ9diuoF3nmVC4qyWhz4DSqLhVV8vOVbQbZ+Z9lBMS p2LbCO15e2jV/I0l6XQCuhki6ocDtByrxF200O2R8KyvDbp9N8rHKdPJafdG6GObcxqG gC8TE3Q/9p4CSvEWBL5yCiVtlZEhI1DzebKcg= Received: by 10.50.87.132 with SMTP id ay4mr9392331igb.2.1327007773528; Thu, 19 Jan 2012 13:16:13 -0800 (PST) Received: by 10.50.87.132 with SMTP id ay4mr9392293igb.2.1327007773410; Thu, 19 Jan 2012 13:16:13 -0800 (PST) Received: from ?IPv6:2620:0:102f:1002:226:b9ff:fe86:156a? ([2620:0:102f:1002:226:b9ff:fe86:156a]) by mx.google.com with ESMTPS id gf6sm44291468igb.1.2012.01.19.13.16.11 (version=SSLv3 cipher=OTHER); Thu, 19 Jan 2012 13:16:12 -0800 (PST) Subject: Re: working on extent locks for i_mutex From: Frank Mayhar X-ASG-Orig-Subj: Re: working on extent locks for i_mutex To: Zheng Liu Cc: Allison Henderson , Dave Chinner , Lukas Czerner , Ext4 Developers List , Tao Ma , xfs@oss.sgi.com In-Reply-To: <20120118120223.GA4322@gmail.com> References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> <4F10992C.3070303@linux.vnet.ibm.com> <20120115235747.GA6922@dastard> <4F146275.8090304@linux.vnet.ibm.com> <20120118120223.GA4322@gmail.com> Content-Type: text/plain; charset="UTF-8" Organization: Google Inc. Date: Thu, 19 Jan 2012 13:16:10 -0800 Message-ID: <1327007770.5899.66.camel@peace.lax.corp.google.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1327007773 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86365 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 Wed, 2012-01-18 at 20:02 +0800, Zheng Liu wrote: > For this project, do you have a schedule? Would you like to share to me? This > lock contention heavily impacts the performance of direct IO in our production > environment. So we hope to improve it ASAP. > > I have done some direct IO benchmarks to compare ext4 with xfs using fio > in Intel SSD. The result shows that, in direct IO, xfs outperforms ext4 and > ext4 with dioread_nolock. > > To understand the effect of lock contention, I define a new function called > ext4_file_aio_write() that calls __generic_file_aio_write() without acquiring > i_mutex lock. Meanwhile, I remove DIO_LOCKING flag when __blockdev_direct_IO() > is called and do the similar benchmarks. The result shows that the performance > in ext4 is almost the same to the xfs. Thus, it proves that the i_mutex heavily > impacts the performance. Hopefully the result is useful for you. :-) For the record, I have a patchset that, while not affecting i_mutex (or locking in general), does allow AIO append writes to actually be done asynchronously. (Currently they're forced to be done synchronously.) It makes a big difference in performance for that particular case, even for spinning media. Performance roughly doubled when testing with fio against a regular two-terabyte drive; the performance improvement against SSD would have to be much greater. One day soon I'll accumulate enough spare time to port the patchset forward to the latest kernel and submit it here. -- Frank Mayhar fmayhar@google.com From gnehzuil.liu@gmail.com Thu Jan 19 20:23:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K2N0iM068099 for ; Thu, 19 Jan 2012 20:23:00 -0600 X-ASG-Debug-ID: 1327026179-04cb6c198e0a9d0001-NocioJ Received: from mail-tul01m020-f181.google.com (mail-tul01m020-f181.google.com [209.85.214.181]) by cuda.sgi.com with ESMTP id JSKl7JOChRkyhZBk for ; Thu, 19 Jan 2012 18:22:59 -0800 (PST) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.214.181 Received: by obbup10 with SMTP id up10so165718obb.26 for ; Thu, 19 Jan 2012 18:22:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=2F6rGZysBtfepa3Oed2edMjmtPyb5k836iOuX9Ico0I=; b=nTuz7H2JKkRVL4ynayyxHoG7/m5ZHH5Py2PGSm+vHiXVQMAJx8G2UyaJcJIWPzggxV c1kt8cpWLcAcQH/GNEgtxV8tAbM15Rc0vyaZRIw87hro9TEV0E537zW1po6CUGfLvDo5 NQu1tgQvnrEFKPWzUrWA30H1AmU3NC5fcSCjI= Received: by 10.50.51.199 with SMTP id m7mr318670igo.23.1327026179043; Thu, 19 Jan 2012 18:22:59 -0800 (PST) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPS id vg9sm2152329igb.4.2012.01.19.18.22.55 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 19 Jan 2012 18:22:58 -0800 (PST) Date: Fri, 20 Jan 2012 10:26:49 +0800 From: Zheng Liu To: Frank Mayhar Cc: Allison Henderson , Dave Chinner , Lukas Czerner , Ext4 Developers List , Tao Ma , xfs@oss.sgi.com Subject: Re: working on extent locks for i_mutex Message-ID: <20120120022649.GA12463@gmail.com> X-ASG-Orig-Subj: Re: working on extent locks for i_mutex Mail-Followup-To: Frank Mayhar , Allison Henderson , Dave Chinner , Lukas Czerner , Ext4 Developers List , Tao Ma , xfs@oss.sgi.com References: <4F0F9E97.1090403@linux.vnet.ibm.com> <20120113043411.GH2806@dastard> <4F10992C.3070303@linux.vnet.ibm.com> <20120115235747.GA6922@dastard> <4F146275.8090304@linux.vnet.ibm.com> <20120118120223.GA4322@gmail.com> <1327007770.5899.66.camel@peace.lax.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327007770.5899.66.camel@peace.lax.corp.google.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: mail-tul01m020-f181.google.com[209.85.214.181] X-Barracuda-Start-Time: 1327026179 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 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 Thu, Jan 19, 2012 at 01:16:10PM -0800, Frank Mayhar wrote: > On Wed, 2012-01-18 at 20:02 +0800, Zheng Liu wrote: > > For this project, do you have a schedule? Would you like to share to me? This > > lock contention heavily impacts the performance of direct IO in our production > > environment. So we hope to improve it ASAP. > > > > I have done some direct IO benchmarks to compare ext4 with xfs using fio > > in Intel SSD. The result shows that, in direct IO, xfs outperforms ext4 and > > ext4 with dioread_nolock. > > > > To understand the effect of lock contention, I define a new function called > > ext4_file_aio_write() that calls __generic_file_aio_write() without acquiring > > i_mutex lock. Meanwhile, I remove DIO_LOCKING flag when __blockdev_direct_IO() > > is called and do the similar benchmarks. The result shows that the performance > > in ext4 is almost the same to the xfs. Thus, it proves that the i_mutex heavily > > impacts the performance. Hopefully the result is useful for you. :-) > > For the record, I have a patchset that, while not affecting i_mutex (or > locking in general), does allow AIO append writes to actually be done > asynchronously. (Currently they're forced to be done synchronously.) > It makes a big difference in performance for that particular case, even > for spinning media. Performance roughly doubled when testing with fio > against a regular two-terabyte drive; the performance improvement > against SSD would have to be much greater. > > One day soon I'll accumulate enough spare time to port the patchset > forward to the latest kernel and submit it here. Interesting. I think it might help us to improve this issue. So could you please post your test case and result in detail? Thank you. :-) Regards, Zheng From gnehzuil.liu@gmail.com Thu Jan 19 21:51:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K3pJ4r073630 for ; Thu, 19 Jan 2012 21:51:20 -0600 X-ASG-Debug-ID: 1327031478-04cb6c198f14980001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id xdBPZqiWebQP4H6M for ; Thu, 19 Jan 2012 19:51:18 -0800 (PST) X-Barracuda-Envelope-From: gnehzuil.liu@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iagz35 with SMTP id z35so283971iag.26 for ; Thu, 19 Jan 2012 19:51:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:from:to:subject:message-id:mime-version:content-type :content-disposition:user-agent; bh=0Q0aKR1TtCvGaegrWXHel5wcJaVO3nrgg6D8oIneHAs=; b=qQw57KH5TQWH7774EoQPM1PF6ceAxEe80BGIrPPK5Swa6PMZjANEUcozCp2GHHHQeu IiQpDl6P+P5I7xf0lqm2DZBLG1VrCh3SbJZJ6zmFeZ1wGqSq/UzkjxTzEh3NRUX8RJ5z H7vtS+SVgiA+F1c3q7c3CDmd+DLj6WpFCFzjc= Received: by 10.50.85.201 with SMTP id j9mr17079865igz.30.1327031476860; Thu, 19 Jan 2012 19:51:16 -0800 (PST) Received: from gmail.com ([182.92.247.2]) by mx.google.com with ESMTPS id or1sm2512046igc.3.2012.01.19.19.51.14 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 19 Jan 2012 19:51:16 -0800 (PST) Date: Fri, 20 Jan 2012 11:55:08 +0800 From: Zheng Liu To: xfs@oss.sgi.com Subject: The question about parallel direct IO in xfs Message-ID: <20120120035508.GA12703@gmail.com> X-ASG-Orig-Subj: The question about parallel direct IO in xfs 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: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1327031478 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 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 all, Recently we encounter an issue in ext4. The issue is that, when we do a direct IO, ext4 will acquire inode->i_mutex in generic_file_aio_write(). It declines the performance. Here is the detailed conversation. http://www.spinics.net/lists/linux-ext4/msg30058.html I know that in xfs it uses i_iolock, which is a rw_semaphore, to make parallel operations in direct IO. But I have a question. As we do some read/write operations in direct IO, it seems that there has a window to cause data inconsistency. For example, One thread does a write operation to overlay some data at a offset. Meanwhile another thread does a read operation at the same offset. We assume that write is earlier than read. Hence, we should read new data. Although it is diffculty to occur, it is possible that read is issued to the disk firstly and we read old data. I don't know whether it exists or not in xfs. Thank you. Sorry, I don't subscribe this mailing list. Please CC to me . Thank you. Regards, Zheng From david@fromorbit.com Thu Jan 19 23:13:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K5DAQU077595 for ; Thu, 19 Jan 2012 23:13:11 -0600 X-ASG-Debug-ID: 1327036387-04cbb030243a4c0001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id Yr3f4RvaSoAmyZ4U for ; Thu, 19 Jan 2012 21:13:07 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah0DAMH2GE95LbVqgWdsb2JhbABDrXojAQEWJiWBcgEBAQMBAQIkExwjBQsIAw4KLhQUEQMhE4d8CLh/E4swYwSScYImkmA Received: from ppp121-45-181-106.lns20.syd7.internode.on.net (HELO dastard) ([121.45.181.106]) by ipmail05.adl6.internode.on.net with ESMTP; 20 Jan 2012 15:43:06 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Ro6mf-0004OD-0l; Fri, 20 Jan 2012 16:13:05 +1100 Date: Fri, 20 Jan 2012 16:13:04 +1100 From: Dave Chinner To: Zheng Liu Cc: xfs@oss.sgi.com Subject: Re: The question about parallel direct IO in xfs Message-ID: <20120120051304.GB15102@dastard> X-ASG-Orig-Subj: Re: The question about parallel direct IO in xfs References: <20120120035508.GA12703@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120120035508.GA12703@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1327036387 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 20, 2012 at 11:55:08AM +0800, Zheng Liu wrote: > Hi all, > > Recently we encounter an issue in ext4. The issue is that, when we do a direct > IO, ext4 will acquire inode->i_mutex in generic_file_aio_write(). It declines > the performance. Here is the detailed conversation. > http://www.spinics.net/lists/linux-ext4/msg30058.html > > I know that in xfs it uses i_iolock, which is a rw_semaphore, to make parallel > operations in direct IO. But I have a question. As we do some read/write > operations in direct IO, it seems that there has a window to cause data > inconsistency. Yes, there is. That's a feature, not a bug. > For example, One thread does a write operation to overlay some > data at a offset. Meanwhile another thread does a read operation at the same > offset. We assume that write is earlier than read. Your assumption is wrong. > Hence, we should read new > data. Although it is diffculty to occur, it is possible that read is issued to > the disk firstly and we read old data. I don't know whether it exists or not in > xfs. Thank you. Fundamentally, the result of concurrent read and write direct IO operations to the same offset is undefined because the filesystem has no control of IO reordering in lower layers of the storage stack. IOWs, we give no guarantees for IO ordering or coherency of concurrent direct IO to the same offset. If your application requires this sort of coherency, then you either need to use buffered IO or provide these coherency guarantees yourself because direct IO doesn't provide them. File range locking is an example of how your application can coordinate it's IO to avoid this problem. Cheers, Dave. -- Dave Chinner david@fromorbit.com From mkatiyar@gmail.com Thu Jan 19 23:21:05 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K5L5NU078039 for ; Thu, 19 Jan 2012 23:21:05 -0600 X-ASG-Debug-ID: 1327036864-04cbb030263bfe0001-NocioJ Received: from mail-tul01m020-f181.google.com (mail-tul01m020-f181.google.com [209.85.214.181]) by cuda.sgi.com with ESMTP id lV56VLuOUVRpHxNo for ; Thu, 19 Jan 2012 21:21:04 -0800 (PST) X-Barracuda-Envelope-From: mkatiyar@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.214.181 Received: by obbup10 with SMTP id up10so304840obb.26 for ; Thu, 19 Jan 2012 21:21:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=1TbHTUdiwNnjSSkWReMb1wd1KOssJXJ9HigR2XYiUjk=; b=xQtTX3Jo8lIjJRrO5fxKVAOSny2UEDli02Ev1JFGVJGPlX7bRZVWNrJdRFPODu3I3R EhpAQDeVzCtxOUypTg54W/iqpiEwWcuFIdfY+ptYqVjWdNGqhQqmheMxNtVWi21umI7s 5CgOiJmMISaYJNNktOSShz7lnM7xpTZxdbd9Y= Received: by 10.50.168.70 with SMTP id zu6mr964897igb.1.1327036864333; Thu, 19 Jan 2012 21:21:04 -0800 (PST) MIME-Version: 1.0 Received: by 10.50.242.36 with HTTP; Thu, 19 Jan 2012 21:20:43 -0800 (PST) In-Reply-To: References: <20120119193947.GA6688@sgi.com> From: Manish Katiyar Date: Fri, 20 Jan 2012 10:50:43 +0530 Message-ID: Subject: Re: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems To: Greg Freemyer X-ASG-Orig-Subj: Re: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems Cc: Ben Myers , lsf-pc@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-tul01m020-f181.google.com[209.85.214.181] X-Barracuda-Start-Time: 1327036864 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.61 X-Barracuda-Spam-Status: No, SCORE=0.61 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, COMMA_SUBJECT, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain > * ohsm (unfinished, unreleased) (I think) > http://code.google.com/p/fscops/ > Presented at OLS 2009 Latest one was at http://sourceforge.net/projects/ohsm/ -- Thanks - Manish From access@gmail.com Thu Jan 19 23:32:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.1 required=5.0 tests=BAYES_60,FREEMAIL_FROM, J_CHICKENPOX_35,MIME_QP_LONG_LINE,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K5Wk6U078739 for ; Thu, 19 Jan 2012 23:32:46 -0600 X-ASG-Debug-ID: 1327037562-04cbb030253e960001-NocioJ Received: from relay.lgcsb.ie (relay.lgcsb.ie [193.178.1.33]) by cuda.sgi.com with ESMTP id AcbiG6kyqeG7l5RF for ; Thu, 19 Jan 2012 21:32:44 -0800 (PST) X-Barracuda-Envelope-From: access@gmail.com X-Barracuda-Apparent-Source-IP: 193.178.1.33 Received: from lgcsb-web2 ([192.168.1.85]) by relay.lgcsb.ie with Microsoft SMTPSVC(6.0.3790.4675); Fri, 20 Jan 2012 05:32:36 +0000 MIME-Version: 1.0 From: access@gmail.com To: xfs@oss.sgi.com Date: 20 Jan 2012 05:32:36 +0000 Subject: Teffany Handford has recommended this page to you Content-Type: text/plain; charset=us-ascii X-ASG-Orig-Subj: Teffany Handford has recommended this page to you Content-Transfer-Encoding: quoted-printable Message-ID: X-OriginalArrivalTime: 20 Jan 2012 05:32:36.0731 (UTC) FILETIME=[EAF83CB0:01CCD734] X-Barracuda-Connect: relay.lgcsb.ie[193.178.1.33] X-Barracuda-Start-Time: 1327037564 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 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 Hi,=0AI thought you would be interested in this article on the Irish Blood= Tranfusion website:=0Awww.giveblood.ie=0AComment:Secure Your $252 Commission= Now!=0D=0A=0D=0A=0D=0A=0D=0A=0D=0ACongratulations Friend!=0D=0A=0D=0AHow= To Make Money Online And Quickly Get Out Of Debt, =0D=0AStarting Immediately= - With Your First $1000 In 30 Days!=0D=0A=0D=0AYou ALREADY have 120 Pre-Enrollees= and 36 Paid=0D=0AMembers in YOUR TEAM...and it is STILL GROWING!=0D=0A= =0D=0ARemember, these people that you see below you in your=0D=0Ateam are= JUST LIKE YOU! They are looking for a powerful=0D=0Aand simple way to make= money from home without having to=0D=0Aspend a lot of time or money to= do it. Because you submitted=0D=0Ayour information FIRST, you have an opportunity= to secure all=0D=0Aof them in YOUR TEAM...as long as you TAKE ACTION!=0D=0A= =0D=0AIMPORTANT: January-20-2012 is the Cut-Off day to lock in your =0D=0Aposition!= Be sure to ORDER NOW to secure ALL of these =0D=0Apeople below you before= they go to someone else!=0D=0A=0D=0AGo Here To Secure Your $252 Commission= Now!=0D=0A=0D=0ACLICK HERE: http://quick1000dollars.com/?e=3Dearn2012= =0D=0A=0D=0AThis program is handsfree once you join before weekly cut-off= you =0D=0Aare automatic earn $252 from the 36 members under you.hurry= Join=0D=0ANow for JAN 18/2012 big chance for you 8 copies available today..= =0D=0A=0D=0ATYPE Date & Time ---New PAID Members --- Country=0D=0A=0D=0AM= JAN 17 @ 12:25 PM-----Joan Alston---- United States=0D=0AM JAN 17 @ 11:15= PM-----Chezka Uy--- Portugal=0D=0AM JAN 17 @ 11:10 PM-----Bett Naval---= New Zealand=0D=0AP JAN 17 @ 10:54 PM-----Chris Lambert--- South Africa= =0D=0AP JAN 17 @ 10:45 PM-----Jenny Klimpest--- Portugal=0D=0AP JAN 17 @= 09:45 PM-----Lenny Asia ---- Australia=0D=0AP JAN 17 @ 08:39 PM-----Micheal= Patrick ---- Sri Lanka=0D=0AP JAN 17 @ 08:27 PM-----Miles Peterson----= United States=0D=0AP JAN 17 @ 07:19 PM-----Troy Watkinz---- China=0D=0AP= JAN 17 @ 06:50 PM-----Linda Hoopman ---- United Kingdom=0D=0AM JAN 17 @= 05:38 PM-----Kevin Lijit---- United Kingdom=0D=0AM JAN 17 @ 04:25 PM-----Gerald= Loyd ---- United States=0D=0AP JAN 17 @ 04:12 PM-----Baby Iya ---- Canada= =0D=0AP JAN 17 @ 03:21 PM-----Roland Owen---- India=0D=0AM JAN 17 @ 03:10= PM-----Nica yulliop ---- United Kingdom=0D=0AM JAN 17 @ 02:55 PM-----Welly= Hudson---- South Africa=0D=0AP JAN 17 @ 01:26 PM-----Byron Miller---- United= Kingdom=0D=0AP JAN 17 @ 12:58 PM-----Henry Poster --- Sri Lanka=0D=0AM= JAN 17 @ 12:52 PM-----kris Chan ---- Italy=0D=0AP JAN 17 @ 12:34 PM-----Matj= Evans ---- South Africa=0D=0AM JAN 17 @ 12:23 PM-----Evan Jones ---- Portugal= =0D=0AP JAN 17 @ 11:34 AM-----Arnold hilson ---- United States=0D=0AM JAN= 17 @ 11:14 AM-----Scott Byron ---- Canada=0D=0AP JAN 17 @ 10:46 AM-----Jhon= Holster ---- Bermuda=0D=0AM JAN 17 @ 10:34 AM-----Gina Adam ---- Australia= =0D=0AM JAN 17 @ 09:16 AM-----Allan Filstone ---- Virgin Islands=0D=0AP= JAN 17 @ 09:05 AM-----Tommy Gerald ---- Costa Rica=0D=0AP JAN 17 @ 08:58= AM-----Vincent Peter ---- Australia=0D=0AM JAN 17 @ 08:40 AM-----Livi Atkinz= ---- Virgin Islands=0D=0AP JAN 17 @ 08:21 AM-----Emmie Holland ---- Italy= =0D=0Ap JAN 17 @ 08:15 AM-----Marites Kidman--- Canada=0D=0AM JAN 17 @ 07:45= AM-----Gilbert James------ United States=0D=0AP JAN 17 @ 07:25 AM-----Henrry= Bird------- India=0D=0Ap JAN 17 @ 08:15 AM-----Macky Cooper--- Canada=0D=0AM= Dec 07 @ 07:45 AM-----Jake Jonhs------ United States=0D=0AP Dec 07 @ 07:25= AM-----Mark Harris------- India=0D=0A=0D=0ATherefore, you have a "GUARANTEED"$252= Commission every=0D=0A=0D=0Amonth from now on!. Earn $7 Per Process!=0D=0A= =0D=0AEach $7 x 36 =3D $252 Commission will be yours...!=0D=0AYou must UPGRADE= before, January-20-2012 @ 11:59:59 PM=0D=0A(US Time)---- or you will forever= forfeit the $252 commission=0D=0Athat is now yours for the taking. You'll= be paid via Paypal this =0D=0AJanuary 24, 2012.=0D=0A=0D=0AGo Here To Secure= Your $252 Commission Now!=0D=0A=0D=0ACLICK HERE: http://quick1000dollars.com/?e=3Dearn2012= =0D=0A=0D=0APlease do realize that if you don't Upgrade NOW, any Upgrades= that=0D=0Aare currently under you now will move above you from your downline.= =0D=0AAs soon as I receive the confirmation of your Upgrade,=0D=0AI will= be in touch with you to help you get started.=0D=0A=0D=0A=0D=0ATO YOUR= SUCCESS,=0D=0A=0D=0ATeffany Handford=0D=0A=0D=0A=0D=0A=0D=0A=0A=0AThanks,= =0ATeffany Handford From xfs@tlinx.org Fri Jan 20 02:53:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K8ramw093659 for ; Fri, 20 Jan 2012 02:53:36 -0600 X-ASG-Debug-ID: 1327049614-04cbb0302575b80001-w1Z2WR Received: from Ishtar.sc.tlinx.org (ishtar.tlinx.org [173.164.175.65]) by cuda.sgi.com with ESMTP id 4UveIOijSnnyNMnz for ; Fri, 20 Jan 2012 00:53:35 -0800 (PST) X-Barracuda-Envelope-From: xfs@tlinx.org X-Barracuda-Apparent-Source-IP: 173.164.175.65 Received: from [192.168.3.140] (Athenae [192.168.3.140]) by Ishtar.sc.tlinx.org (8.14.4/8.14.4/SuSE Linux 0.8) with ESMTP id q0K8rUEe011060; Fri, 20 Jan 2012 00:53:32 -0800 Message-ID: <4F192B8C.1050406@tlinx.org> Date: Fri, 20 Jan 2012 00:53:32 -0800 From: Linda Walsh User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.24) Gecko/20100228 Lightning/0.9 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666 MIME-Version: 1.0 To: Zheng Da , Linux-Xfs Subject: Re: concurrent direct IO write in xfs References: <20120116232549.GC6922@dastard> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[173.164.175.65] X-Barracuda-Start-Time: 1327049614 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Zheng Da wrote: > > I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test > program overwrites 4G of data to the file ---- It sounds like you are asking why multiple threads don't move memory from one point to another point in memory at a faster rate than one thread alone. I.e. if you had 2 processes doing an assembly instruction, memmov to move a chunk of memory from 1 area to another, would you expect to do the move any faster if you had 2 processors doing the move vs. 1?? I think the limiting factor (unless you have a slow processor and some REALLY fast memory, but stock x86-64 parts, today have memory running about 2-4 times slower than the processor -- so the memory is usually the bottleneck. Two processes wouldn't do it any faster, and might actually do it slower due to resource contention issues -- I would *think*... but I really don't know the details of how writing from mem2mem and having the target be in the format of and xfs file system, would cause cpu-bound delays that would be significant to change the fact that m2m operations are usually mem-bandwidth limited...? (I don't know the answers, just clarifying what you are asking)... From xfs@tlinx.org Fri Jan 20 03:03:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0K93jrY094228 for ; Fri, 20 Jan 2012 03:03:45 -0600 X-ASG-Debug-ID: 1327050221-04bdf067b557490001-NocioJ Received: from Ishtar.sc.tlinx.org (ishtar.tlinx.org [173.164.175.65]) by cuda.sgi.com with ESMTP id oougDtBHwuSCTbJP for ; Fri, 20 Jan 2012 01:03:42 -0800 (PST) X-Barracuda-Envelope-From: xfs@tlinx.org X-Barracuda-Apparent-Source-IP: 173.164.175.65 Received: from [192.168.3.140] (Athenae [192.168.3.140]) by Ishtar.sc.tlinx.org (8.14.4/8.14.4/SuSE Linux 0.8) with ESMTP id q0K93dx5012076 for ; Fri, 20 Jan 2012 01:03:41 -0800 Message-ID: <4F192DEC.4030400@tlinx.org> Date: Fri, 20 Jan 2012 01:03:40 -0800 From: Linda Walsh User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.24) Gecko/20100228 Lightning/0.9 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666 MIME-Version: 1.0 To: Linux fs XFS Subject: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <20242.10382.19330.275280@tree.ty.sabi.co.UK> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? In-Reply-To: <20242.10382.19330.275280@tree.ty.sabi.co.UK> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[173.164.175.65] X-Barracuda-Start-Time: 1327050221 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Peter Grandi wrote: > > > * XFS has several limitations on 32b kernels. Just make sure > you have a 64b kernel. ---- I was unaware that the block size was larger on 64b kernels. Is that what you are referring to ? (would be nice)... One thing I have a Q on -- you (OP), said this was an 'iscsi' box? That means hookup over an network, right? You are planning on using a 10Gbit or faster network fabric, right? a 1Gb ethernet will only get you 125MB/s max... doesn't take much tuning to hit that speed. From info@webmaster.org Fri Jan 20 04:52:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=BAYES_99,MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KAqYg6099439 for ; Fri, 20 Jan 2012 04:52:35 -0600 X-ASG-Debug-ID: 1327056752-04cb6c198e54ad0001-w1Z2WR Received: from mail.solca.med.ec (solca.med.ec [200.105.240.90]) by cuda.sgi.com with ESMTP id 6FNBdGkBSKAiC6Md for ; Fri, 20 Jan 2012 02:52:32 -0800 (PST) X-Barracuda-Envelope-From: info@webmaster.org X-Barracuda-Apparent-Source-IP: 200.105.240.90 Received: from mail.solca.med.ec (localhost.localdomain [127.0.0.1]) by postfix.imss71 (Postfix) with ESMTP id EBA2419C08FE; Fri, 20 Jan 2012 06:00:02 -0500 (ECT) Received: from mail.solca.med.ec (localhost.localdomain [127.0.0.1]) by mail.solca.med.ec (Postfix) with ESMTP id A8CB919C08A6; Fri, 20 Jan 2012 06:00:02 -0500 (ECT) Received: from 41.138.172.59 (SquirrelMail authenticated user mperalta) by mail.solca.med.ec with HTTP; Fri, 20 Jan 2012 06:00:02 -0500 (ECT) Message-ID: <50714.41.138.172.59.1327057202.squirrel@mail.solca.med.ec> Date: Fri, 20 Jan 2012 06:00:02 -0500 (ECT) Subject: =?utf-8?B?Tm90aWZpY2FjacOzbiB3ZWJtYXN0ZXIhIeKAjyAg?= From: =?utf-8?B?V2VibWFzdGVyIEFjdHVhbGl6YWNpw7NuIERlcGFydGFtZW50bw==?= X-ASG-Orig-Subj: =?utf-8?B?Tm90aWZpY2FjacOzbiB3ZWJtYXN0ZXIhIeKAjyAg?= Reply-To: customercarewebdept30@w.cn User-Agent: SquirrelMail/1.4.8-5.el5.centos.10 MIME-Version: 1.0 Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-TM-AS-Product-Ver: IMSS-7.1.0.1302-6.8.0.1017-18656.006 X-TM-AS-Result: No-2.459-4.5-31-10 X-imss-scan-details: No-2.459-4.5-31-10 X-TM-AS-User-Approved-Sender: No X-TMASE-MatchedRID: 2SDSohiwfqTmR+RxuU2vfVDn5JGevlgbve4yDRKn3VUZM67SJal917XE sbo4UKeq4826dNYBpxy5z51WJ1wBuM/mgMItUzYIqgXDLHKleXRKqOmKgcmLdSHjWOHrHy8/8xN hDY4WGVXlTiVvSxITCksuTEEYs7ZJpsJvYAG8uEO4hnkI+b5XSH2pwmI3JKygP3tom4sn2QC6OM f7JyDRp+7q29pJjHB0Liin7H6AK1tMRnuUXnnMAIz2ICQqVaoYrjgxlpsePOZGcB/Zujf6QZXvi 3Cnl7vlf7+V10+OSRWWzBb/7Ck0Tzwop2D57bb18rLt6/XzAZYreUoDpjFjK53DsTW7rGadd5jE RkZGAc0j0wVQkGp/JHRPoTXhxyuBel7zIVIetMMksSBZTGCrwlkMvWAuahr8nNhh7Sambooqtq5 d3cxkNfDyZOciMMGEp10webaq4htFi1YiSWzTscZE/vN7vZ69/zWiNwfR4jN8hgbSddMUyaMmAz JY5cuDxfBZh1ibcis47hG5ZVz6352oTrJSxW21ZgYL44JI5XfHXG/G4JUnuItM3KGW0mPNPOc66 V2a3+pDDKa3G4nrLQ== X-Barracuda-Connect: solca.med.ec[200.105.240.90] X-Barracuda-Start-Time: 1327056752 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Estimados suscriptores de cuentas de correo electrónico, Este es un mensaje de correo web del centro de mensajes a nuestra cuenta de correo web todos los owners.As primer trimestre de 2012 En estos momentos estamos llevando a cabo la actualización de servicio para nuestra base de datos y e-mail centro cuenta. Estamos eliminando todas las cuenta de correo web utilizado para crear más espacio para las nuevas cuentas. Para evitar que su cuenta de borrar y continuar utilizando nuestros servicios son necesarios para actualizar y confirmar tu cuenta de webmail. Para completar la confirmación de su cuenta en el primer trimestre de 2012, usted debe responder a este mensaje de inmediato y entrar en detalles de su cuenta como se solicita a continuación. Confirmar detalles de su cuenta Nombre de usuario: ............ Nombre de usuario E-mail ...... Contraseña: ................... Confirmar contraseña :......... Fecha de nacimiento: .......... Importante * Por favor, toda esta información completa y correctamente de lo contrario por razones de seguridad que puede tener que cerrar su cuenta de correo web temporarily.We gracias por su pronta atención a este matter.Please entender que esta es una medida de protección que se pretende ayudar a proteger la Cuenta su webmail. Nos disculpamos por cualquier inconveniente. From pg_mh@V01.sabi.co.uk Fri Jan 20 06:06:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KC6hQv102374 for ; Fri, 20 Jan 2012 06:06:43 -0600 X-ASG-Debug-ID: 1327061197-04bdf067b579dc0001-NocioJ Received: from honeysuckle.london.02.net (honeysuckle.london.02.net [87.194.255.144]) by cuda.sgi.com with ESMTP id YmsZTS5TqPbhiV2F for ; Fri, 20 Jan 2012 04:06:39 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.144 Received: from ty.sabi.co.UK (87.194.99.40) by honeysuckle.london.02.net (8.5.140) id 4EEF52D2008B2074 for xfs@oss.sgi.com; Fri, 20 Jan 2012 12:06:37 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RoDEl-0004HT-Fy for ; Fri, 20 Jan 2012 12:06:31 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20249.22727.359884.733592@tree.ty.sabi.co.UK> Date: Fri, 20 Jan 2012 12:06:31 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: Optimal XFS formatting options? In-Reply-To: <4F192DEC.4030400@tlinx.org> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <20242.10382.19330.275280@tree.ty.sabi.co.UK> <4F192DEC.4030400@tlinx.org> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: honeysuckle.london.02.net[87.194.255.144] X-Barracuda-Start-Time: 1327061199 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [ ... ] >> * XFS has several limitations on 32b kernels. Just make sure >> you have a 64b kernel. [ ... ] > I was unaware that the block size was larger on 64b kernels. > Is that what you are referring to ? (would be nice)... Not as such, the maximum block size is limited by the Linux page cache, that is hw page size, which is for IA32 and AMD64 architectures the same at 4KiB. However other architectures which are natively 64b allow bigger page sizes (notably IA64 [aka Itanium]), so the page cache and thus XFS can do larger blocks sizes. The limitations of XFS on 32b kernels come from limitations of XFS itself in 32b mode, limitations of Linux in 32b mode, and combined limitations. For example: * There be 32b inode numbers, which limit inodes to the first 1TB of a filetree if sector size is 512B. * The 32b block IO subsystems limits partition sizes to 16TiB. * XFS tools scanning a large filesystem, usually for repair, can run out of the available 32b address space (by default around 2GiB). Page 5 and 6 here list some limits: http://oss.sgi.com/projects/xfs/training/xfs_slides_02_overview.pdf From jeff.liu@oracle.com Fri Jan 20 06:51:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_52,J_CHICKENPOX_92 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KCpcDq104273 for ; Fri, 20 Jan 2012 06:51:38 -0600 X-ASG-Debug-ID: 1327063896-04cb6c198e688a0001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id McYLw50s8XrpkTLD; Fri, 20 Jan 2012 04:51:36 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0KCpUoH007016 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 20 Jan 2012 12:51:31 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0KCpTxh002171 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 20 Jan 2012 12:51:30 GMT Received: from abhmt103.oracle.com (abhmt103.oracle.com [141.146.116.55]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0KCpS0P018592; Fri, 20 Jan 2012 06:51:28 -0600 Received: from [10.191.46.199] (/10.191.46.199) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 20 Jan 2012 04:51:28 -0800 Message-ID: <4F19634A.607@oracle.com> Date: Fri, 20 Jan 2012 20:51:22 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Ben Myers CC: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH 10/11] xfs: always return with the iolock held from xfs_file_aio_write_checks References: <20111218200003.557507716@bombadil.infradead.org> <20111218200132.483776880@bombadil.infradead.org> <20120117201817.GG16581@sgi.com> X-ASG-Orig-Subj: Re: [PATCH 10/11] xfs: always return with the iolock held from xfs_file_aio_write_checks In-Reply-To: <20120117201817.GG16581@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-CT-RefId: str=0001.0A090201.4F196354.0024,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1327063896 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 01/18/2012 04:18 AM, Ben Myers wrote: > On Sun, Dec 18, 2011 at 03:00:13PM -0500, Christoph Hellwig wrote: >> While xfs_iunlock is fine with 0 lockflags the calling conventions are much >> cleaner if xfs_file_aio_write_checks never returns without the iolock held. >> >> Reviewed-by: Dave Chinner >> Signed-off-by: Christoph Hellwig > > Looks good. > Reviewed-by: Ben Myers > >> >> --- >> fs/xfs/xfs_file.c | 7 ++++--- >> 1 file changed, 4 insertions(+), 3 deletions(-) >> >> Index: xfs/fs/xfs/xfs_file.c >> =================================================================== >> --- xfs.orig/fs/xfs/xfs_file.c 2011-12-07 12:46:31.343897882 +0100 >> +++ xfs/fs/xfs/xfs_file.c 2011-12-07 12:48:33.309903801 +0100 >> @@ -636,7 +636,9 @@ out_lock: >> /* >> * Common pre-write limit and setup checks. >> * >> - * Returns with iolock held according to @iolock. >> + * Called with the iolocked held either shared and exclusive according to >> + * @iolock, and returns with it held. Might upgrade the iolock to exclusive >> + * if called for a direct write beyond i_size. >> */ >> STATIC ssize_t >> xfs_file_aio_write_checks( >> @@ -653,8 +655,7 @@ xfs_file_aio_write_checks( >> restart: >> error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode)); >> if (error) { >> - xfs_rw_iunlock(ip, XFS_ILOCK_EXCL | *iolock); >> - *iolock = 0; >> + xfs_rw_iunlock(ip, XFS_ILOCK_EXCL); >> return error; >> } Haha, I lucky to saw this patch, since I have triggered an Oops on 3.2.0-rc6 without it just now. FYI, test code: #define _GNU_SOURCE #define _LARGEFILE64_SOURCE #include #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { off64_t ret = 0; char *path; int fd; if (argc != 2) { fprintf(stdout, "Usage: %s filename\n", argv[0]); return 1; } path = argv[1]; fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644); if (fd < 0) { perror("open"); return fd; } ret = fallocate(fd, 0, 0, 1); if (ret < 0) { fprintf(stderr, "fallocate failed due to %s\n", strerror(errno)); return ret; } ret = lseek64(fd, (off64_t)2947483650, SEEK_SET); if (ret < 0) { perror("lseek"); return ret; } write(fd, "abc", 3); ret = lseek64(fd, (off64_t)2997483650, SEEK_SET); if (ret < 0) { perror("lseek"); return ret; } write(fd, "abc", 3); close(fd); return ret; } [ 135.592793] XFS: Assertion failed: lock_flags != 0, file: fs/xfs/xfs_iget.c, line: 652 [ 135.592836] ------------[ cut here ]------------ [ 135.596010] kernel BUG at fs/xfs/xfs_message.c:101! [ 135.596010] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC [ 135.596010] Modules linked in: xfs(O) binfmt_misc kvm_intel kvm ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager ocfs2_stackglue configfs xt_TCPMSS xt_tcpmss xt_tcpudp iptable_mangle pppoe pppox nfsd exportfs nfs ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 lockd nf_conntrack nf_defrag_ipv4 parport_pc ppdev ip_tables x_tables fscache auth_rpcgss bridge nfs_acl sunrpc stp snd_hda_codec_analog arc4 snd_hda_intel snd_hda_codec snd_hwdep iwl4965 snd_pcm iwl_legacy thinkpad_acpi i915 snd_seq_midi snd_rawmidi pcmcia mac80211 joydev snd_seq_midi_event snd_seq drm_kms_helper btrfs snd_timer snd_seq_device zlib_deflate libcrc32c psmouse btusb yenta_socket pcmcia_rsrc drm cfg80211 bluetooth serio_raw pcmcia_core snd tpm_tis tpm tpm_bios nvram soundcore snd_page_alloc lp i2c_algo_bit parport video ext4 mbcache jbd2 firewire_ohci firewire_core crc_itu_t ahci libahci e1000e [ 135.596010] [ 135.596010] Pid: 2313, comm: faa Tainted: G W O 3.2.0-rc6 #9 LENOVO 7661D43/7661D43 [ 135.596010] EIP: 0060:[] EFLAGS: 00010246 CPU: 1 [ 135.596010] EIP is at assfail+0x47/0x57 [xfs] [ 135.596010] EAX: 00000060 EBX: e6674400 ECX: 00000000 EDX: 00000073 [ 135.596010] ESI: 00000000 EDI: 00000000 EBP: e8d59e34 ESP: e8d59e20 [ 135.596010] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 135.596010] Process faa (pid: 2313, ti=e8d58000 task=e919c6c0 task.ti=e8d58000) [ 135.596010] Stack: [ 135.596010] 00000000 f956b082 f956abbb f956a97f 0000028c e8d59e50 f94a3027 e8d59e4c [ 135.596010] f949c2bd e6674400 00000000 f956171c e8d59e60 f949c2bd afaf0802 00000000 [ 135.596010] e8d59ed4 f949eb38 afaf0802 00000000 00000003 e8d59eb8 e8d59ec4 000021ef [ 135.596010] Call Trace: [ 135.596010] [] xfs_iunlock+0xe6/0x2c0 [xfs] [ 135.596010] [] ? xfs_rw_iunlock+0x21/0x5f [xfs] [ 135.596010] [] xfs_rw_iunlock+0x21/0x5f [xfs] [ 135.596010] [] xfs_file_aio_write+0x3cf/0x3e8 [xfs] [ 135.596010] [] do_sync_write+0xaa/0x12c [ 135.596010] [] ? security_file_permission+0x53/0x65 [ 135.596010] [] ? rw_verify_area+0x1c4/0x1fe [ 135.596010] [] ? wait_on_retry_sync_kiocb+0x8c/0x8c [ 135.596010] [] vfs_write+0xf5/0x1a3 [ 135.596010] [] ? fget_light+0x3e/0x130 [ 135.596010] [] sys_write+0x6c/0xa9 [ 135.596010] [] syscall_call+0x7/0xb [ 135.596010] Code: 10 89 54 24 0c 89 44 24 08 c7 44 24 04 82 b0 56 f9 c7 04 24 00 00 00 00 e8 ad fc ff ff 83 05 e0 45 59 f9 01 83 15 e4 45 59 f9 00 <0f> 0b 83 05 e8 45 59 f9 01 83 15 ec 45 59 f9 00 55 89 e5 83 ec [ 135.596010] EIP: [] assfail+0x47/0x57 [xfs] SS:ESP 0068:e8d59e20 [ 135.833048] ---[ end trace 4af94dd273c5d0cb ]--- Call chains: xfs_file_aio_write->xfs_file_buffered_aio_write->xfs_file_aio_write_checks()->generic_write_checks() failed due to -EFBIG, and the iolock was set to *ZERO* at that time. :-P. Thanks, -Jeff From zhengda1936@gmail.com Fri Jan 20 09:07:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KF73AM110477 for ; Fri, 20 Jan 2012 09:07:03 -0600 X-ASG-Debug-ID: 1327072021-04bdf067b59ee20001-w1Z2WR Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id G1NECRE4veMFDLJH for ; Fri, 20 Jan 2012 07:07:01 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhjj56 with SMTP id j56so388010yhj.26 for ; Fri, 20 Jan 2012 07:07:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=7vIo2xoAOBFT0VNGnWZNNvso39DMh7wx7hfiI+2gN4Q=; b=Ol7gDzvmJ089YQY3qFFbbfwaFnbVsQ+b1v39EaTZyJQisMEbqa3JZlOY4WJ5PVOk2A +O6KDkKjAv+ZPTpmPZGkH1QP+IUKF38mkmDSUUFRMUhse7oHL6m5ZphjO+VxNGpLb+Wh mvZlA0BbXR4Fo5jnpsxYlZVeY+q/ZS1qWpej8= MIME-Version: 1.0 Received: by 10.236.161.197 with SMTP id w45mr45457149yhk.96.1327072021590; Fri, 20 Jan 2012 07:07:01 -0800 (PST) Received: by 10.146.104.1 with HTTP; Fri, 20 Jan 2012 07:07:01 -0800 (PST) In-Reply-To: <4F192B8C.1050406@tlinx.org> References: <20120116232549.GC6922@dastard> <4F192B8C.1050406@tlinx.org> Date: Fri, 20 Jan 2012 10:07:01 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: Linda Walsh Cc: Linux-Xfs Content-Type: multipart/alternative; boundary=20cf30563f4d70337104b6f70879 X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1327072021 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --20cf30563f4d70337104b6f70879 Content-Type: text/plain; charset=ISO-8859-1 Helllo On Fri, Jan 20, 2012 at 3:53 AM, Linda Walsh wrote: > > > Zheng Da wrote: > >> >> I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test >> program overwrites 4G of data to the file >> > ---- > It sounds like you are asking why multiple threads don't > move memory from one point to another point in memory at a faster rate > than one thread alone. > > I.e. if you had 2 processes doing an assembly instruction, memmov to move > a chunk of memory from 1 area to another, would you expect to do the move > any faster if you had 2 processors doing the move vs. 1?? > Yes. Actually, for reading, using multiple threads is faster than a single thread. If you try simple memory copy with memcpy in the C library, the overall throughput will still increase if you use multiple processors. > > I think the limiting factor (unless you have a slow processor and some > REALLY fast memory, but stock x86-64 parts, today have memory running about > 2-4 times slower than the processor -- so the memory is usually the > bottleneck. > Memory bandwidth will eventually become a bottleneck, but it can still scale for a small number of processors. > > Two processes wouldn't do it any faster, and might actually do it slower > due to > resource contention issues -- I would *think*... but I really don't know > the > details of how writing from mem2mem and having the target be in the format > of > and xfs file system, would cause cpu-bound delays that would be > significant to > change the fact that m2m operations are usually mem-bandwidth limited...? > > (I don't know the answers, just clarifying what you are asking)... > > Da --20cf30563f4d70337104b6f70879 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Helllo

On Fri, Jan 20, 2012 at 3:53 AM, L= inda Walsh <xfs@tlinx= .org> wrote:


Zheng Da wrote:

I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test progr= am overwrites 4G of data to the file =A0
----
=A0 =A0 =A0 =A0It sounds like you are asking why multiple threads don'= t
move memory from one point to another point in memory at a faster rate
than one thread alone.

I.e. if you had 2 processes doing an assembly instruction, memmov to move a chunk of memory from 1 area to another, would you expect to do the move any faster if you had 2 processors doing the move vs. 1??
<= div>Yes. Actually, for reading, using multiple threads is faster than a sin= gle thread.=A0
If you try simple memory copy with memcpy in the C= library, the overall throughput will still increase if you use multiple pr= ocessors.

I think the limiting factor (unless you have a slow processor and some
REALLY fast memory, but stock x86-64 parts, today have memory running about=
2-4 times slower than the processor -- so the memory is usually the bottlen= eck.
Memory bandwidth will eventually become a bottlen= eck, but it can still scale for a small number of processors.=A0

Two processes wouldn't do it any faster, and might actually do it slowe= r due to
resource contention issues -- I would *think*... but I really don't kno= w the
details of how writing from mem2mem and having the target be in the format = of
and xfs file system, would cause cpu-bound delays that would be significant= to
change the fact that m2m operations are usually mem-bandwidth limited...?
(I don't know the answers, just clarifying what you are asking)...
<= br>
Da=A0

--20cf30563f4d70337104b6f70879-- From michael.monnerie@is.it-management.at Fri Jan 20 09:52:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KFqEMT112326 for ; Fri, 20 Jan 2012 09:52:14 -0600 X-ASG-Debug-ID: 1327074731-04cbb03025ed7b0001-NocioJ Received: from mailsrv14.zmi.at (mailsrv14.zmi.at [212.69.164.54]) by cuda.sgi.com with ESMTP id j2EnDRaKPoChbG1P for ; Fri, 20 Jan 2012 07:52:12 -0800 (PST) X-Barracuda-Envelope-From: michael.monnerie@is.it-management.at X-Barracuda-Apparent-Source-IP: 212.69.164.54 Received: from mailsrv.i.zmi.at (h081217106014.dyn.cm.kabsi.at [81.217.106.14]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv14.zmi.at (Postfix) with ESMTPSA id 521C81828D8C; Fri, 20 Jan 2012 16:52:11 +0100 (CET) Received: from saturn.localnet (saturn.i.zmi.at [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id 12B85E18C15; Fri, 20 Jan 2012 16:52:13 +0100 (CET) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com, stan@hardwarefreak.com Subject: Re: Optimal XFS formatting options? Date: Fri, 20 Jan 2012 16:52:09 +0100 X-ASG-Orig-Subj: Re: Optimal XFS formatting options? User-Agent: KMail/1.13.6 (Linux/3.1.5-zmi; KDE/4.6.0; x86_64; ; ) References: <33140169.post@talk.nabble.com> <201201171019.58714@zmi.at> <4F155CC2.3050201@hardwarefreak.com> In-Reply-To: <4F155CC2.3050201@hardwarefreak.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1834396.bf9Uqbn0vH"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <201201201652.10193@zmi.at> X-Barracuda-Connect: mailsrv14.zmi.at[212.69.164.54] X-Barracuda-Start-Time: 1327074732 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC5_SA210e Custom Rule SA210e --nextPart1834396.bf9Uqbn0vH Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable On Dienstag, 17. Januar 2012 Stan Hoeppner wrote: > So to be clear, your issue with the above isn't with my partition > alignment math WRT the OP's P2000 array, but is with using XFS stripe > alignment in general, correct? Yes. I just wanted to document this as people often expand RAIDs and=20 forget to apply the changes to stripe width. =20 > There is one really simple way around this issue you describe: don't > add drives to an existing array. Simply create another array with > new disks, create a new aligned XFS on the array, and mount the > filesystem in an appropriate location. There is no 11th Commandment > stating one must have a single massive XFS atop all of one's disks. > ;) >=20 > There is little to no application software today that can't be > configured to store its data files across multiple directories. So > there's no need to box oneself into the corner you describe above. It's a management burden to do that. I've learned that systems usually=20 are strictly structured in their configuration, so it's often better to=20 extend a RAID and to keep the config, as this is cheaper in the end. At=20 least for the salaries of good admins here in Europe ;-) =2D-=20 mit freundlichen Gr=FCssen, Michael Monnerie, Ing. BSc it-management Internet Services: Prot=E9ger http://proteger.at [gesprochen: Prot-e-schee] Tel: +43 660 / 415 6531 --nextPart1834396.bf9Uqbn0vH Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) iEYEABECAAYFAk8ZjaoACgkQzhSR9xwSCbTVYwCgvfEi9+fDC1y8CX2TistG5dTL DZkAoK4heJks7Vp8lakMhrP/C6q1758C =NrjW -----END PGP SIGNATURE----- --nextPart1834396.bf9Uqbn0vH-- From michael.monnerie@is.it-management.at Fri Jan 20 09:55:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KFtI77112443 for ; Fri, 20 Jan 2012 09:55:18 -0600 X-ASG-Debug-ID: 1327074915-04bdf067b6a8940001-NocioJ Received: from mailsrv14.zmi.at (mailsrv14.zmi.at [212.69.164.54]) by cuda.sgi.com with ESMTP id HIIrB081dCfASMDm for ; Fri, 20 Jan 2012 07:55:16 -0800 (PST) X-Barracuda-Envelope-From: michael.monnerie@is.it-management.at X-Barracuda-Apparent-Source-IP: 212.69.164.54 Received: from mailsrv.i.zmi.at (h081217106014.dyn.cm.kabsi.at [81.217.106.14]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv14.zmi.at (Postfix) with ESMTPSA id 64C5B1828D8E; Fri, 20 Jan 2012 16:55:15 +0100 (CET) Received: from saturn.localnet (saturn.i.zmi.at [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id 26FCFE18C15; Fri, 20 Jan 2012 16:55:17 +0100 (CET) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com Subject: Re: Optimal XFS formatting options? Date: Fri, 20 Jan 2012 16:55:13 +0100 X-ASG-Orig-Subj: Re: Optimal XFS formatting options? User-Agent: KMail/1.13.6 (Linux/3.1.5-zmi; KDE/4.6.0; x86_64; ; ) Cc: Peter Grandi References: <33140169.post@talk.nabble.com> <4F192DEC.4030400@tlinx.org> <20249.22727.359884.733592@tree.ty.sabi.co.UK> In-Reply-To: <20249.22727.359884.733592@tree.ty.sabi.co.UK> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart3114634.oXA9GcmVNK"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <201201201655.14532@zmi.at> X-Barracuda-Connect: mailsrv14.zmi.at[212.69.164.54] X-Barracuda-Start-Time: 1327074916 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86379 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --nextPart3114634.oXA9GcmVNK Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable On Freitag, 20. Januar 2012 Peter Grandi wrote: > * There be 32b inode numbers, which limit inodes to the first > 1TB of a filetree if sector size is 512B. >=20 > * The 32b block IO subsystems limits partition sizes to 16TiB. I thought those two have been removed by some updates? I think I=20 remember to have read that. Not that it's too interesting, I've been=20 running on 64b Linux everywhere since AMD has put it in their=20 processors. Should be 10+ years or so. =2D-=20 mit freundlichen Gr=FCssen, Michael Monnerie, Ing. BSc it-management Internet Services: Prot=E9ger http://proteger.at [gesprochen: Prot-e-schee] Tel: +43 660 / 415 6531 --nextPart3114634.oXA9GcmVNK Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) iEYEABECAAYFAk8ZjmIACgkQzhSR9xwSCbTJ5wCfUBwCbZ9KIRAcbbdn3G/WZDXS OGYAnic3Brmsksv3E+VjDhWFzoBkmYRh =yq2B -----END PGP SIGNATURE----- --nextPart3114634.oXA9GcmVNK-- From jack@suse.cz Fri Jan 20 14:35:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKYxPv125561 for ; Fri, 20 Jan 2012 14:34:59 -0600 X-ASG-Debug-ID: 1327091696-04bdf067b8de090001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id dujsbiA8xtzK7uJj for ; Fri, 20 Jan 2012 12:34:57 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 10A668FC93; Fri, 20 Jan 2012 21:34:56 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 4669F202A0; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 3/8] ext4: Protect ext4_page_mkwrite & ext4_setattr with sb_start_write - sb_end_write Date: Fri, 20 Jan 2012 21:34:41 +0100 X-ASG-Orig-Subj: [PATCH 3/8] ext4: Protect ext4_page_mkwrite & ext4_setattr with sb_start_write - sb_end_write Message-Id: <1327091686-23177-4-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091696 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Since ext4_page_mkwrite() calls into __block_page_mkwrite() it has to provide freezing protection on it's own. Also ext4_setattr() needs protection because ext4_truncate() can modify last page of the file. Acked-by: "Theodore Ts'o" Signed-off-by: Jan Kara --- fs/ext4/inode.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 848f436..05d6328 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4225,6 +4225,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr) if (error) return error; + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); if (is_quota_modification(inode, attr)) dquot_initialize(inode); if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) || @@ -4327,6 +4328,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr) rc = ext4_acl_chmod(inode); err_out: + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); ext4_std_error(inode->i_sb, error); if (!error) error = rc; @@ -4733,11 +4735,7 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) get_block_t *get_block; int retries = 0; - /* - * This check is racy but catches the common case. We rely on - * __block_page_mkwrite() to do a reliable check. - */ - vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); /* Delalloc case is easy... */ if (test_opt(inode->i_sb, DELALLOC) && !ext4_should_journal_data(inode) && @@ -4805,5 +4803,6 @@ retry_alloc: out_ret: ret = block_page_mkwrite_return(ret); out: + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); return ret; } -- 1.7.1 From jack@suse.cz Fri Jan 20 14:35:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ0Lq125566 for ; Fri, 20 Jan 2012 14:35:00 -0600 X-ASG-Debug-ID: 1327091698-04cbb03025131d60001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Gl3tu550kD3o3OKk for ; Fri, 20 Jan 2012 12:34:58 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 430078FE69; Fri, 20 Jan 2012 21:34:58 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 48BCD205E0; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 2/8] vfs: Protect write paths by sb_start_write - sb_end_write Date: Fri, 20 Jan 2012 21:34:40 +0100 X-ASG-Orig-Subj: [PATCH 2/8] vfs: Protect write paths by sb_start_write - sb_end_write Message-Id: <1327091686-23177-3-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091698 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- There are three entry points which dirty pages in a filesystem. mmap (handled by block_page_mkwrite()), buffered write (handled by __generic_file_aio_write()), and truncate (it can dirty last partial page - handled inside each filesystem separately). Protect these places with sb_start_write() and sb_end_write(). Acked-by: "Theodore Ts'o" Signed-off-by: Jan Kara --- fs/buffer.c | 22 ++++------------------ mm/filemap.c | 3 ++- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 19d8eb7..550714d 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2338,8 +2338,8 @@ EXPORT_SYMBOL(block_commit_write); * beyond EOF, then the page is guaranteed safe against truncation until we * unlock the page. * - * Direct callers of this function should call vfs_check_frozen() so that page - * fault does not busyloop until the fs is thawed. + * Direct callers of this function should protect against filesystem freezing + * using sb_start_write() - sb_end_write() functions. */ int __block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, get_block_t get_block) @@ -2371,18 +2371,7 @@ int __block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, if (unlikely(ret < 0)) goto out_unlock; - /* - * Freezing in progress? We check after the page is marked dirty and - * with page lock held so if the test here fails, we are sure freezing - * code will wait during syncing until the page fault is done - at that - * point page will be dirty and unlocked so freezing code will write it - * and writeprotect it again. - */ set_page_dirty(page); - if (inode->i_sb->s_frozen != SB_UNFROZEN) { - ret = -EAGAIN; - goto out_unlock; - } wait_on_page_writeback(page); return 0; out_unlock: @@ -2397,12 +2386,9 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, int ret; struct super_block *sb = vma->vm_file->f_path.dentry->d_inode->i_sb; - /* - * This check is racy but catches the common case. The check in - * __block_page_mkwrite() is reliable. - */ - vfs_check_frozen(sb, SB_FREEZE_WRITE); + sb_start_write(sb, SB_FREEZE_WRITE); ret = __block_page_mkwrite(vma, vmf, get_block); + sb_end_write(sb, SB_FREEZE_WRITE); return block_page_mkwrite_return(ret); } EXPORT_SYMBOL(block_page_mkwrite); diff --git a/mm/filemap.c b/mm/filemap.c index c0018f2..471b9ae 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2529,7 +2529,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, count = ocount; pos = *ppos; - vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); /* We can write back this queue in page reclaim */ current->backing_dev_info = mapping->backing_dev_info; @@ -2601,6 +2601,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, pos, ppos, count, written); } out: + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); current->backing_dev_info = NULL; return written ? written : err; } -- 1.7.1 From jack@suse.cz Fri Jan 20 14:35:02 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ2gq125578 for ; Fri, 20 Jan 2012 14:35:02 -0600 X-ASG-Debug-ID: 1327091701-04cb6c1990af280001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id EyQcamcFgQ5an4a8 for ; Fri, 20 Jan 2012 12:35:01 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id CBF8B9043F; Fri, 20 Jan 2012 21:35:00 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 52676205E2; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Jan Kara , Ben Myers , Alex Elder Subject: [PATCH 5/8] xfs: Protect xfs_file_aio_write() & xfs_setattr_size() with sb_start_write - sb_end_write Date: Fri, 20 Jan 2012 21:34:43 +0100 X-ASG-Orig-Subj: [PATCH 5/8] xfs: Protect xfs_file_aio_write() & xfs_setattr_size() with sb_start_write - sb_end_write Message-Id: <1327091686-23177-6-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091701 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Replace racy xfs_wait_for_freeze() check in xfs_file_aio_write() with a reliable sb_start_write() - sb_end_write() locking. Due to lock ranking dictated by the page fault code we have to call sb_start_write() after we acquire ilock. Similarly we have to protect xfs_setattr_size() because it can modify last page of truncated file. Because ilock is dropped in xfs_setattr_size() we have to drop and retake write access as well to avoid deadlocks. CC: Ben Myers CC: Alex Elder Signed-off-by: Jan Kara --- fs/xfs/xfs_file.c | 6 ++++-- fs/xfs/xfs_iops.c | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 753ed9b..9efd153 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -862,9 +862,11 @@ xfs_file_dio_aio_write( *iolock = XFS_IOLOCK_SHARED; } + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); ret = generic_file_direct_write(iocb, iovp, &nr_segs, pos, &iocb->ki_pos, count, ocount); + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); /* No fallback to buffered IO on errors for XFS. */ ASSERT(ret < 0 || ret == count); @@ -899,6 +901,7 @@ xfs_file_buffered_aio_write( /* We can write back this queue in page reclaim */ current->backing_dev_info = mapping->backing_dev_info; + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); write_retry: trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); ret = generic_file_buffered_write(iocb, iovp, nr_segs, @@ -914,6 +917,7 @@ write_retry: enospc = 1; goto write_retry; } + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); current->backing_dev_info = NULL; return ret; } @@ -945,8 +949,6 @@ xfs_file_aio_write( if (ocount == 0) return 0; - xfs_wait_for_freeze(ip->i_mount, SB_FREEZE_WRITE); - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return -EIO; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 3579bc8..798b9c6 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -793,6 +793,7 @@ xfs_setattr_size( return xfs_setattr_nonsize(ip, iattr, 0); } + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); /* * Make sure that the dquots are attached to the inode. */ @@ -849,10 +850,14 @@ xfs_setattr_size( xfs_get_blocks); if (error) goto out_unlock; + /* Drop the write access to avoid lock inversion with ilock */ + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); xfs_ilock(ip, XFS_ILOCK_EXCL); lock_flags |= XFS_ILOCK_EXCL; + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); + tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_SIZE); error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, @@ -924,6 +929,7 @@ xfs_setattr_size( error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); out_unlock: + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); if (lock_flags) xfs_iunlock(ip, lock_flags); return error; -- 1.7.1 From jack@suse.cz Fri Jan 20 14:34:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKYxP7125560 for ; Fri, 20 Jan 2012 14:34:59 -0600 X-ASG-Debug-ID: 1327091697-04cb6c198eaf260001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 7YHrkwL1TDh13kA2 for ; Fri, 20 Jan 2012 12:34:57 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 3713C8FD0F; Fri, 20 Jan 2012 21:34:57 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 4E28D205DD; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Jan Kara , Ben Myers , Alex Elder Subject: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size() Date: Fri, 20 Jan 2012 21:34:42 +0100 X-ASG-Orig-Subj: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size() Message-Id: <1327091686-23177-5-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091697 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In xfs we first take ilock and start transaction afterwards. We should obey this order in all places because otherwise we can create the following deadlock with filesystem freezing: One process holds ilock and blocks on s_frozen == SB_FREEZE_TRANS in xfs_trans_alloc(), another process has a transaction started (thus blocking freezing) and blocks on ilock. So we have to take ilock earlier in xfs_setattr_size(). CC: Ben Myers CC: Alex Elder Signed-off-by: Jan Kara --- fs/xfs/xfs_iops.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 23ce927..3579bc8 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -850,6 +850,9 @@ xfs_setattr_size( if (error) goto out_unlock; + xfs_ilock(ip, XFS_ILOCK_EXCL); + lock_flags |= XFS_ILOCK_EXCL; + tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_SIZE); error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, @@ -860,9 +863,6 @@ xfs_setattr_size( truncate_setsize(inode, iattr->ia_size); commit_flags = XFS_TRANS_RELEASE_LOG_RES; - lock_flags |= XFS_ILOCK_EXCL; - - xfs_ilock(ip, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, ip, 0); -- 1.7.1 From jack@suse.cz Fri Jan 20 14:35:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ4n3125612 for ; Fri, 20 Jan 2012 14:35:04 -0600 X-ASG-Debug-ID: 1327091703-04cbb03024131da0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id k6aZw7WDGySCGirq for ; Fri, 20 Jan 2012 12:35:03 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 01CE38FD0F; Fri, 20 Jan 2012 21:35:03 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 63573205E5; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Valerie Aurora , Jan Kara Subject: [PATCH 8/8] vfs: Document s_frozen state through freeze_super Date: Fri, 20 Jan 2012 21:34:46 +0100 X-ASG-Orig-Subj: [PATCH 8/8] vfs: Document s_frozen state through freeze_super Message-Id: <1327091686-23177-9-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091703 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Valerie Aurora [kamal@canonical.com: patch restructure] [jack@suse.cz: updated comments to reflect new situation] Signed-off-by: Valerie Aurora Tested-by: Peter M. Petrakis Signed-off-by: Kamal Mostafa Signed-off-by: Jan Kara --- fs/super.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-) diff --git a/fs/super.c b/fs/super.c index 4aaad7e..557a4ef 100644 --- a/fs/super.c +++ b/fs/super.c @@ -1312,6 +1312,24 @@ static void sb_freeze_to_level(struct super_block *sb, int level) * Syncs the super to make sure the filesystem is consistent and calls the fs's * freeze_fs. Subsequent calls to this without first thawing the fs will return * -EBUSY. + * + * During this function, sb->s_frozen goes through these values: + * + * SB_UNFROZEN: File system is normal, all writes progress as usual. + * + * SB_FREEZE_WRITE: The file system is in the process of being frozen. + * New writes should be blocked, we wait for in-progress writes (using + * s_writers[SB_FREEZE_WRITE-1]) and then sync the file system. + * + * SB_FREEZE_TRANS: The file system is frozen. We wait for all metadata writes + * to finish using s_writers[SB_FREEZE_TRANS-1] and after that call ->freeze_fs + * to finish filesystem freezing. After ->freeze_fs is done nothing should be + * dirty and all modifications are blocked until the file system is thawed. + * + * sb->s_frozen is protected by sb->s_umount. Additionally, + * SB_FREEZE_WRITE is only temporarily set during freeze/thaw while + * holding sb->s_umount for writing, so any other callers holding + * sb->s_umount will never see this state. */ int freeze_super(struct super_block *sb) { -- 1.7.1 From jack@suse.cz Fri Jan 20 14:35:01 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ1lJ125569 for ; Fri, 20 Jan 2012 14:35:01 -0600 X-ASG-Debug-ID: 1327091698-04bdf067b8de0a0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 3XRWkfXC5cUYYKZv for ; Fri, 20 Jan 2012 12:34:59 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 4A4958FFEB; Fri, 20 Jan 2012 21:34:58 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 4BC2A205DF; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 1/8] fs: Improve filesystem freezing handling Date: Fri, 20 Jan 2012 21:34:39 +0100 X-ASG-Orig-Subj: [PATCH 1/8] fs: Improve filesystem freezing handling Message-Id: <1327091686-23177-2-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091698 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- vfs_check_frozen() tests are racy since the filesystem can be frozen just after the test is performed. Thus in write paths we can end up marking some pages or inodes dirty even though filesystem is already frozen. This creates problems with flusher thread hanging on frozen filesystem. Another problem is that exclusion between ->page_mkwrite() and filesystem freezing has been handled by setting page dirty and then verifying s_frozen. This guaranteed that either the freezing code sees the faulted page, writes it, and writeprotects it again or we see s_frozen set and bail out of page fault. This works to protect from page being marked writeable while filesystem freezing is running but has an unpleasant artefact of leaving dirty (although unmodified and writeprotected) pages on frozen filesystem resulting in similar problems with flusher thread as the first problem. This patch aims at providing exclusion between write paths and filesystem freezing. We implement a writer-freeze read-write semaphores in the superblock for each freezing level (currently there are two - SB_FREEZE_WRITE for data and SB_FREEZE_TRANS for metadata). Write paths which should block freezing on given level (e.g. ->block_page_mkwrite(), ->aio_write() for SB_FREEZE_WRITE level; transaction lifetime for SB_FREEZE_TRANS level) hold reader side of the semaphore. Code freezing the filesystem to a given level takes the writer side. Only that we don't really want to bounce cachelines of the semaphore between CPUs for each write happening. So we implement the reader side of the semaphore as a per-cpu counter and the writer side is implemented using s_frozen superblock field. Acked-by: "Theodore Ts'o" Signed-off-by: Jan Kara --- fs/super.c | 204 ++++++++++++++++++++++++++++++++++++++++++++++++---- include/linux/fs.h | 41 ++++++++--- 2 files changed, 220 insertions(+), 25 deletions(-) diff --git a/fs/super.c b/fs/super.c index afd0f1a..4aaad7e 100644 --- a/fs/super.c +++ b/fs/super.c @@ -32,12 +32,15 @@ #include #include #include +#include #include "internal.h" LIST_HEAD(super_blocks); DEFINE_SPINLOCK(sb_lock); +static struct lock_class_key sb_writers_key[SB_FREEZE_LEVELS-1]; + /* * One thing we have to be careful of with a per-sb shrinker is that we don't * drop the last active reference to the superblock from within the shrinker. @@ -101,6 +104,24 @@ static int prune_super(struct shrinker *shrink, struct shrink_control *sc) return total_objects; } +static int init_sb_writers(struct super_block *s, int level, char *lockname) +{ + struct sb_writers_level *sl = &s->s_writers[level-1]; + int err; + + err = percpu_counter_init(&sl->counter, 0); + if (err < 0) + return err; + init_waitqueue_head(&sl->wait); + lockdep_init_map(&sl->lock_map, lockname, &sb_writers_key[level-1], 0); + return 0; +} + +static void destroy_sb_writers(struct super_block *s, int level) +{ + percpu_counter_destroy(&s->s_writers[level-1].counter); +} + /** * alloc_super - create new superblock * @type: filesystem type superblock should belong to @@ -115,18 +136,19 @@ static struct super_block *alloc_super(struct file_system_type *type) if (s) { if (security_sb_alloc(s)) { + /* + * We cannot call security_sb_free() without + * security_sb_alloc() succeeding. So bail out manually + */ kfree(s); s = NULL; goto out; } #ifdef CONFIG_SMP s->s_files = alloc_percpu(struct list_head); - if (!s->s_files) { - security_sb_free(s); - kfree(s); - s = NULL; - goto out; - } else { + if (!s->s_files) + goto err_out; + else { int i; for_each_possible_cpu(i) @@ -135,6 +157,11 @@ static struct super_block *alloc_super(struct file_system_type *type) #else INIT_LIST_HEAD(&s->s_files); #endif + if (init_sb_writers(s, SB_FREEZE_WRITE, "sb_writers_write")) + goto err_out; + if (init_sb_writers(s, SB_FREEZE_TRANS, "sb_writers_trans")) + goto err_out; + s->s_bdi = &default_backing_dev_info; INIT_LIST_HEAD(&s->s_instances); INIT_HLIST_BL_HEAD(&s->s_anon); @@ -186,6 +213,17 @@ static struct super_block *alloc_super(struct file_system_type *type) } out: return s; +err_out: + security_sb_free(s); +#ifdef CONFIG_SMP + if (s->s_files) + free_percpu(s->s_files); +#endif + destroy_sb_writers(s, SB_FREEZE_WRITE); + destroy_sb_writers(s, SB_FREEZE_TRANS); + kfree(s); + s = NULL; + goto out; } /** @@ -1126,6 +1164,148 @@ out: } /** + * sb_end_write - drop write access to a superblock + * @sb: the super we wrote to + * @level: the lowest level of freezing which we blocked + * + * Decrement number of writers to the filesystem preventing freezing of + * given level. Wake up possible waiters wanting to freeze the filesystem. + */ +void sb_end_write(struct super_block *sb, int level) +{ + struct sb_writers_level *sl = &sb->s_writers[level-1]; + + percpu_counter_dec(&sl->counter); + /* + * Make sure s_writers are updated before we wake up waiters in + * freeze_super(). + */ + smp_mb(); + if (waitqueue_active(&sl->wait)) + wake_up(&sl->wait); + rwsem_release(&sl->lock_map, 1, _RET_IP_); +} +EXPORT_SYMBOL(sb_end_write); + +/** + * sb_start_write - get write access to a superblock + * @sb: the super we write to + * @level: the lowest level of freezing which we block + * + * When a process wants to write data to a filesystem (i.e. dirty a page), it + * should embed the operation in a sb_start_write() - sb_end_write() pair to + * get exclusion against filesystem freezing. This function increments number + * of writers preventing freezing of given level to proceed. If the file + * system is already frozen it waits until it is thawed. + * + * The lock orderding constraints of sb_start_write() for level SB_FREEZE_WRITE + * are following: + * mmap_sem (page-fault) + * -> s_writers (block_page_mkwrite or equivalent) + * + * i_mutex (do_truncate, __generic_file_aio_write) + * -> s_writers + * + * s_umount (freeze_super) + * -> s_writers + * + * For level SB_FREEZE_TRANS lock constraints are rather file system dependent, + * in most cases equivalent to constraints for starting a fs transaction. + */ +void sb_start_write(struct super_block *sb, int level) +{ +retry: + rwsem_acquire_read(&sb->s_writers[level-1].lock_map, 0, 0, _RET_IP_); + vfs_check_frozen(sb, level); + percpu_counter_inc(&sb->s_writers[level-1].counter); + /* + * Make sure s_writers are updated before we check s_frozen. + * freeze_super() first sets s_frozen and then checks s_writers. + */ + smp_mb(); + if (sb->s_frozen >= level) { + sb_end_write(sb, level); + goto retry; + } +} +EXPORT_SYMBOL(sb_start_write); + +/** + * sb_dup_write - get write access to a superblock without blocking + * @sb: the super we write to + * @level: the lowest level of freezing which we block + * + * This function is like sb_start_write() only that it does not check s_frozen + * in the superblock. The caller can call this function only when it already + * holds write access to the superblock at this level (i.e., called + * sb_start_write(sb, level) previously). + */ +void sb_dup_write(struct super_block *sb, int level) +{ + /* + * Trick lockdep into acquiring read lock again without complaining + * about lock recursion + */ + rwsem_acquire_read(&sb->s_writers[level-1].lock_map, 0, 1, _RET_IP_); + percpu_counter_inc(&sb->s_writers[level-1].counter); +} +EXPORT_SYMBOL(sb_dup_write); + +/** + * sb_wait_write - wait until all writers at given level finish + * @sb: the super for which we wait + * @level: the level at which we wait for writers + * + * This function waits until there are no writers at given level. Caller + * of this function should make sure there can be no new writers at required + * level before calling this function. Otherwise this function can livelock. + */ +void sb_wait_write(struct super_block *sb, int level) +{ + s64 writers; + struct sb_writers_level *sl = &sb->s_writers[level-1]; + + do { + DEFINE_WAIT(wait); + + /* + * We use a barrier in prepare_to_wait() to separate setting + * of s_frozen and checking of s_writers + */ + prepare_to_wait(&sl->wait, &wait, TASK_UNINTERRUPTIBLE); + + writers = percpu_counter_sum(&sl->counter); + if (writers) + schedule(); + + finish_wait(&sl->wait, &wait); + } while (writers); +} +EXPORT_SYMBOL(sb_wait_write); + +/* + * Freeze superblock to given level, wait for writers at given level + * to finish. + */ +static void sb_freeze_to_level(struct super_block *sb, int level) +{ + sb->s_frozen = level; + + /* + * We just cycle-through lockdep here so that it does not complain + * about returning with lock to userspace + */ + rwsem_acquire(&sb->s_writers[level-1].lock_map, 0, 0, _THIS_IP_); + rwsem_release(&sb->s_writers[level-1].lock_map, 1, _THIS_IP_); + + /* + * Now wait for writers to finish. As s_frozen is already set to + * 'level' we are guaranteed there are no new writers at given level. + */ + sb_wait_write(sb, level); +} + +/** * freeze_super - lock the filesystem and force it into a consistent state * @sb: the super to lock * @@ -1151,21 +1331,19 @@ int freeze_super(struct super_block *sb) return 0; } - sb->s_frozen = SB_FREEZE_WRITE; - smp_wmb(); - + sb_freeze_to_level(sb, SB_FREEZE_WRITE); sync_filesystem(sb); - - sb->s_frozen = SB_FREEZE_TRANS; - smp_wmb(); - + sb_freeze_to_level(sb, SB_FREEZE_TRANS); sync_blockdev(sb->s_bdev); + if (sb->s_op->freeze_fs) { ret = sb->s_op->freeze_fs(sb); if (ret) { printk(KERN_ERR "VFS:Filesystem freeze failed\n"); sb->s_frozen = SB_UNFROZEN; + smp_wmb(); + wake_up(&sb->s_wait_unfrozen); deactivate_locked_super(sb); return ret; } diff --git a/include/linux/fs.h b/include/linux/fs.h index e313022..93ce5af 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -395,6 +395,7 @@ struct inodes_stat_t { #include #include #include +#include #include @@ -1385,6 +1386,24 @@ extern pid_t f_getown(struct file *filp); extern int send_sigurg(struct fown_struct *fown); /* + * Snapshotting support. + */ +enum { + SB_UNFROZEN = 0, + SB_FREEZE_WRITE = 1, + SB_FREEZE_TRANS = 2, + SB_FREEZE_LEVELS /* Number of freezing states */ +}; + +#define vfs_check_frozen(sb, level) \ + wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) + +void sb_end_write(struct super_block *sb, int level); +void sb_start_write(struct super_block *sb, int level); +void sb_dup_write(struct super_block *sb, int level); +void sb_wait_write(struct super_block *sb, int level); + +/* * Umount options */ @@ -1397,6 +1416,15 @@ extern int send_sigurg(struct fown_struct *fown); extern struct list_head super_blocks; extern spinlock_t sb_lock; +struct sb_writers_level { + struct percpu_counter counter; /* counter of running writes */ + wait_queue_head_t wait; /* queue for waiting for + writers to finish */ +#ifdef CONFIG_DEBUG_LOCK_ALLOC + struct lockdep_map lock_map; +#endif +}; + struct super_block { struct list_head s_list; /* Keep this first */ dev_t s_dev; /* search index; _not_ kdev_t */ @@ -1445,6 +1473,7 @@ struct super_block { int s_frozen; wait_queue_head_t s_wait_unfrozen; + struct sb_writers_level s_writers[SB_FREEZE_LEVELS - 1]; char s_id[32]; /* Informational name */ u8 s_uuid[16]; /* UUID */ @@ -1490,18 +1519,6 @@ extern void prune_dcache_sb(struct super_block *sb, int nr_to_scan); extern struct timespec current_fs_time(struct super_block *sb); /* - * Snapshotting support. - */ -enum { - SB_UNFROZEN = 0, - SB_FREEZE_WRITE = 1, - SB_FREEZE_TRANS = 2, -}; - -#define vfs_check_frozen(sb, level) \ - wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) - -/* * until VFS tracks user namespaces for inodes, just make all files * belong to init_user_ns */ -- 1.7.1 From jack@suse.cz Fri Jan 20 14:35:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ8WS125641 for ; Fri, 20 Jan 2012 14:35:08 -0600 X-ASG-Debug-ID: 1327091706-04bdf067b6de0d0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id eSmorujzWxnWXi9B for ; Fri, 20 Jan 2012 12:35:06 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id D1C4E8FFEB; Fri, 20 Jan 2012 21:35:05 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 58C8C205E3; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Jan Kara Subject: [PATCH 6/8] xfs: Use generic writers counter instead of m_active_trans counter Date: Fri, 20 Jan 2012 21:34:44 +0100 X-ASG-Orig-Subj: [PATCH 6/8] xfs: Use generic writers counter instead of m_active_trans counter Message-Id: <1327091686-23177-7-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091706 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words m_active_trans counter is racy wrt filesystem freezing. The patch replaces it with generic counter of running transactions which is properly synchronized with filesystem freezing. Things are a bit more complex because we need to log a dummy transaction and free block counters after the filesystem is frozen so we need to pass information to _xfs_trans_alloc() whether the transaction is part of filesystem freezing or not. Signed-off-by: Jan Kara --- fs/xfs/xfs_fsops.c | 5 +++-- fs/xfs/xfs_fsops.h | 2 +- fs/xfs/xfs_iomap.c | 4 ++-- fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_mount.h | 2 -- fs/xfs/xfs_super.c | 3 +-- fs/xfs/xfs_sync.c | 13 +++---------- fs/xfs/xfs_trans.c | 19 ++++++++++++------- fs/xfs/xfs_trans.h | 3 ++- 9 files changed, 25 insertions(+), 28 deletions(-) diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 1c6fdeb..503fdfa 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -645,12 +645,13 @@ out: */ int xfs_fs_log_dummy( - xfs_mount_t *mp) + xfs_mount_t *mp, + bool for_freeze) { xfs_trans_t *tp; int error; - tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1, KM_SLEEP); + tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1, KM_SLEEP, for_freeze); error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, XFS_DEFAULT_LOG_COUNT); if (error) { diff --git a/fs/xfs/xfs_fsops.h b/fs/xfs/xfs_fsops.h index 1b6a98b..4d6253e 100644 --- a/fs/xfs/xfs_fsops.h +++ b/fs/xfs/xfs_fsops.h @@ -25,6 +25,6 @@ extern int xfs_fs_counts(xfs_mount_t *mp, xfs_fsop_counts_t *cnt); extern int xfs_reserve_blocks(xfs_mount_t *mp, __uint64_t *inval, xfs_fsop_resblks_t *outval); extern int xfs_fs_goingdown(xfs_mount_t *mp, __uint32_t inflags); -extern int xfs_fs_log_dummy(struct xfs_mount *mp); +extern int xfs_fs_log_dummy(struct xfs_mount *mp, bool for_freeze); #endif /* __XFS_FSOPS_H__ */ diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 9afa282..fd47f6e 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -679,8 +679,8 @@ xfs_iomap_write_unwritten( * the same inode that we complete here and might deadlock * on the iolock. */ - xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); - tp = _xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE, KM_NOFS); + tp = _xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE, + KM_NOFS, false); tp->t_flags |= XFS_TRANS_RESERVE; error = xfs_trans_reserve(tp, resblks, XFS_WRITE_LOG_RES(mp), 0, diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index d06afbc..74a93c9 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1572,7 +1572,7 @@ xfs_log_sbcount(xfs_mount_t *mp) if (!xfs_sb_version_haslazysbcount(&mp->m_sb)) return 0; - tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT, KM_SLEEP); + tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT, KM_SLEEP, true); error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, XFS_DEFAULT_LOG_COUNT); if (error) { diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index bb24dac..1317018 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -195,7 +195,6 @@ typedef struct xfs_mount { uint m_chsize; /* size of next field */ struct xfs_chash *m_chash; /* fs private inode per-cluster * hash table */ - atomic_t m_active_trans; /* number trans frozen */ #ifdef HAVE_PERCPU_SB xfs_icsb_cnts_t __percpu *m_sb_cnts; /* per-cpu superblock counters */ unsigned long m_icsb_counters; /* disabled per-cpu counters */ @@ -312,7 +311,6 @@ void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, #define SHUTDOWN_DEVICE_REQ 0x0020 /* failed all paths to the device */ #define xfs_test_for_freeze(mp) ((mp)->m_super->s_frozen) -#define xfs_wait_for_freeze(mp,l) vfs_check_frozen((mp)->m_super, (l)) /* * Flags for xfs_mountfs diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 3eca58f..2c333be 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1242,7 +1242,7 @@ xfs_fs_freeze( xfs_save_resvblks(mp); xfs_quiesce_attr(mp); - return -xfs_fs_log_dummy(mp); + return -xfs_fs_log_dummy(mp, true); } STATIC int @@ -1329,7 +1329,6 @@ xfs_fs_fill_super( spin_lock_init(&mp->m_sb_lock); mutex_init(&mp->m_growlock); - atomic_set(&mp->m_active_trans, 0); mp->m_super = sb; sb->s_fs_info = mp; diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c index aa3dc1a..24f4d7c 100644 --- a/fs/xfs/xfs_sync.c +++ b/fs/xfs/xfs_sync.c @@ -373,7 +373,7 @@ xfs_quiesce_data( /* mark the log as covered if needed */ if (xfs_log_need_covered(mp)) - error2 = xfs_fs_log_dummy(mp); + error2 = xfs_fs_log_dummy(mp, false); /* flush data-only devices */ if (mp->m_rtdev_targp) @@ -421,18 +421,11 @@ xfs_quiesce_attr( int error = 0; /* wait for all modifications to complete */ - while (atomic_read(&mp->m_active_trans) > 0) - delay(100); + sb_wait_write(mp->m_super, SB_FREEZE_TRANS); /* flush inodes and push all remaining buffers out to disk */ xfs_quiesce_fs(mp); - /* - * Just warn here till VFS can correctly support - * read-only remount without racing. - */ - WARN_ON(atomic_read(&mp->m_active_trans) != 0); - /* Push the superblock and write an unmount record */ error = xfs_log_sbcount(mp); if (error) @@ -467,7 +460,7 @@ xfs_sync_worker( /* dgc: errors ignored here */ if (mp->m_super->s_frozen == SB_UNFROZEN && xfs_log_need_covered(mp)) - error = xfs_fs_log_dummy(mp); + error = xfs_fs_log_dummy(mp, false); else xfs_log_force(mp, 0); error = xfs_qm_sync(mp, SYNC_TRYLOCK); diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 1f35b2f..e97014b 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -577,24 +577,28 @@ xfs_trans_alloc( xfs_mount_t *mp, uint type) { - xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); - return _xfs_trans_alloc(mp, type, KM_SLEEP); + return _xfs_trans_alloc(mp, type, KM_SLEEP, false); } xfs_trans_t * _xfs_trans_alloc( xfs_mount_t *mp, uint type, - uint memflags) + uint memflags, + bool freezing) { xfs_trans_t *tp; - atomic_inc(&mp->m_active_trans); - + if (!freezing) + sb_start_write(mp->m_super, SB_FREEZE_TRANS); + else + WARN_ON(xfs_test_for_freeze(mp) != SB_FREEZE_TRANS); tp = kmem_zone_zalloc(xfs_trans_zone, memflags); tp->t_magic = XFS_TRANS_MAGIC; tp->t_type = type; tp->t_mountp = mp; + if (freezing) + tp->t_flags |= XFS_TRANS_FREEZING; INIT_LIST_HEAD(&tp->t_items); INIT_LIST_HEAD(&tp->t_busy); return tp; @@ -611,7 +615,8 @@ xfs_trans_free( xfs_alloc_busy_sort(&tp->t_busy); xfs_alloc_busy_clear(tp->t_mountp, &tp->t_busy, false); - atomic_dec(&tp->t_mountp->m_active_trans); + if (!(tp->t_flags & XFS_TRANS_FREEZING)) + sb_end_write(tp->t_mountp->m_super, SB_FREEZE_TRANS); xfs_trans_free_dqinfo(tp); kmem_zone_free(xfs_trans_zone, tp); } @@ -654,7 +659,7 @@ xfs_trans_dup( xfs_trans_dup_dqinfo(tp, ntp); - atomic_inc(&tp->t_mountp->m_active_trans); + sb_dup_write(tp->t_mountp->m_super, SB_FREEZE_TRANS); return ntp; } diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index 3ae713c..8a04d8e 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h @@ -180,6 +180,7 @@ struct xfs_log_item_desc { #define XFS_TRANS_SYNC 0x08 /* make commit synchronous */ #define XFS_TRANS_DQ_DIRTY 0x10 /* at least one dquot in trx dirty */ #define XFS_TRANS_RESERVE 0x20 /* OK to use reserved data blocks */ +#define XFS_TRANS_FREEZING 0x40 /* can happen on frozen filesystem */ /* * Values for call flags parameter. @@ -448,7 +449,7 @@ typedef struct xfs_trans { * XFS transaction mechanism exported interfaces. */ xfs_trans_t *xfs_trans_alloc(struct xfs_mount *, uint); -xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint, uint); +xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint, uint, bool); xfs_trans_t *xfs_trans_dup(xfs_trans_t *); int xfs_trans_reserve(xfs_trans_t *, uint, uint, uint, uint, uint); -- 1.7.1 From jack@suse.cz Fri Jan 20 14:35:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ2ae125579 for ; Fri, 20 Jan 2012 14:35:03 -0600 X-ASG-Debug-ID: 1327091701-04bdf067b6de0b0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id wehvith4UZ5zdjqV for ; Fri, 20 Jan 2012 12:35:01 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 0E4C18FE69; Fri, 20 Jan 2012 21:35:01 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 405DD205DE; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: [PATCH 0/8] Fix filesystem freezing Date: Fri, 20 Jan 2012 21:34:38 +0100 X-ASG-Orig-Subj: [PATCH 0/8] Fix filesystem freezing Message-Id: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091701 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, This is the second iteration of my patches to improve filesystem freezing. Filesystem freezing is currently racy and thus we can end up with dirty data on frozen filesystem (see changelog of the first patch for detailed race description and proposed fix). This patch series aims at fixing this. The biggest changes since v1: * have two counters to provide safe state transitions for SB_FREEZE_WRITE and SB_FREEZE_TRANS states * use percpu counters instead of own percpu structure * added documentation fixes from the old fs freezing series * converted XFS to use SB_FREEZE_TRANS counter instead of its private m_active_trans counter Now I'm sending this mostly as a heads up so that people see current state because these patches are still racy. The problem is that when superblock is in SB_FREEZE_WRITE state inodes can still be dirtied (e.g. through touch_atime, directory operations or similar). These inodes then are not flushed and when superblock passes to SB_FREEZE_TRANS state, flusher thread deadlocks on trying to flush them. To fix this, we will have to block also operations dirtying inodes already in SB_FREEZE_WRITE state. I'm now looking into how to do this in the easiest way. Honza From jack@suse.cz Fri Jan 20 14:35:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KKZ2Hr125585 for ; Fri, 20 Jan 2012 14:35:02 -0600 X-ASG-Debug-ID: 1327091701-04cbb03027131da0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id t2MX6VSZE7rF3qUd for ; Fri, 20 Jan 2012 12:35:01 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 3A7E68FC93; Fri, 20 Jan 2012 21:35:01 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 5ED23205E4; Fri, 20 Jan 2012 21:34:51 +0100 (CET) From: Jan Kara To: linux-fsdevel@vger.kernel.org Cc: Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Valerie Aurora , Jan Kara Subject: [PATCH 7/8] Documentation: Correct s_umount state for freeze_fs/unfreeze_fs Date: Fri, 20 Jan 2012 21:34:45 +0100 X-ASG-Orig-Subj: [PATCH 7/8] Documentation: Correct s_umount state for freeze_fs/unfreeze_fs Message-Id: <1327091686-23177-8-git-send-email-jack@suse.cz> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1327091686-23177-1-git-send-email-jack@suse.cz> References: <1327091686-23177-1-git-send-email-jack@suse.cz> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327091701 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Valerie Aurora freeze_fs/unfreeze_fs ops are called with s_umount held for write, not read. Signed-off-by: Valerie Aurora Signed-off-by: Kamal Mostafa Reviewed-by: Christoph Hellwig Signed-off-by: Jan Kara --- Documentation/filesystems/Locking | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index d819ba1..7e46a94 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -134,8 +134,8 @@ evict_inode: put_super: write write_super: read sync_fs: read -freeze_fs: read -unfreeze_fs: read +freeze_fs: write +unfreeze_fs: write statfs: maybe(read) (see below) remount_fs: write umount_begin: no -- 1.7.1 From stan@hardwarefreak.com Fri Jan 20 16:44:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KMio96132592 for ; Fri, 20 Jan 2012 16:44:50 -0600 X-ASG-Debug-ID: 1327099489-04cbb03025151350001-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 FuzmTNHm70JZ89nF for ; Fri, 20 Jan 2012 14:44:49 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id DD8076C0B9 for ; Fri, 20 Jan 2012 16:44:48 -0600 (CST) Message-ID: <4F19EE5E.8030508@hardwarefreak.com> Date: Fri, 20 Jan 2012 16:44:46 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <201201171019.58714@zmi.at> <4F155CC2.3050201@hardwarefreak.com> <201201201652.10193@zmi.at> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? In-Reply-To: <201201201652.10193@zmi.at> 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: 1327099489 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, BSF_SC5_SA210e, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86386 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 0.00 BSF_SC5_SA210e Custom Rule SA210e On 1/20/2012 9:52 AM, Michael Monnerie wrote: > On Dienstag, 17. Januar 2012 Stan Hoeppner wrote: >> So to be clear, your issue with the above isn't with my partition >> alignment math WRT the OP's P2000 array, but is with using XFS stripe >> alignment in general, correct? > > Yes. I just wanted to document this as people often expand RAIDs and > forget to apply the changes to stripe width. > >> There is one really simple way around this issue you describe: don't >> add drives to an existing array. Simply create another array with >> new disks, create a new aligned XFS on the array, and mount the >> filesystem in an appropriate location. There is no 11th Commandment >> stating one must have a single massive XFS atop all of one's disks. >> ;) >> >> There is little to no application software today that can't be >> configured to store its data files across multiple directories. So >> there's no need to box oneself into the corner you describe above. > > It's a management burden to do that. I've learned that systems usually > are strictly structured in their configuration, so it's often better to > extend a RAID and to keep the config, as this is cheaper in the end. At > least for the salaries of good admins here in Europe ;-) If ease (or cost) of filesystem administration is of that much greater priority than performance, then why are you using XFS in the first place instead of EXT? -- Stan From Fred_Pryor_SeminarsCareerTrack@professionaltraining5.com Fri Jan 20 17:51:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.7 required=5.0 tests=BAYES_95,T_DKIM_INVALID, UNPARSEABLE_RELAY,URIBL_DBL_SPAM autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0KNpTV4134553 for ; Fri, 20 Jan 2012 17:51:30 -0600 X-ASG-Debug-ID: 1327103488-04bdf067b5fb480001-w1Z2WR Received: from m0.professionaltraining5.com (m0.professionaltraining5.com [208.89.8.25]) by cuda.sgi.com with ESMTP id PJJXzLSCrkOASR6c for ; Fri, 20 Jan 2012 15:51:28 -0800 (PST) X-Barracuda-Envelope-From: Fred_Pryor_SeminarsCareerTrack@professionaltraining5.com X-Barracuda-Apparent-Source-IP: 208.89.8.25 DomainKey-Signature: q=dns; a=rsa-sha1; c=nofws; s=msdk.epost; d=professionaltraining5.com; h=DKIM-Signature:Received:From:Message-ID:To:Subject:Date:X-WTID:X-WTVersion:Content-Type:MIME-Version; b=TlQOtAdBnvyb/Ge/bYjHCX6pz/DbdYKK6y5o+npQs3kkDLV4aEAptUTipMvtZjCB xsLXvYB+KbZK/91S2l5ywA== DKIM-Signature: v=1; a=rsa-sha1; d=professionaltraining5.com; s=msdkim.epost; c=relaxed/simple; q=dns/txt; i=@professionaltraining5.com; t=1327102491; h=From:Subject:Date:To:MIME-Version:Content-Type; bh=VOcPZXYDxAA3jzbLm2EZMyIibzQ=; b=MrGw4Ym9IJ9pfx/9tn+HGJbYBuzDRMqiGAaZzEEcp7iFIFqEMxee39eRcJ7x5Bty HrRLXZ/MqparierMdiW5mg==; Received: from [msnode1.edithroman.com] with ESMTP Fri, 20 Jan 2012 18:34:51 -0500 From: "Fred Pryor Seminars/CareerTrack" Message-ID: <82.C7.19375.B1AF91F4@msprod1> To: "Sami Farin" Subject: Don't miss out on special training offers from Fred Pryor Seminars and CareerTrack Date: Fri, 20 Jan 2012 18:48:17 -0500 X-ASG-Orig-Subj: Don't miss out on special training offers from Fred Pryor Seminars and CareerTrack X-WTID: 183.183042.44817179.356425.0 X-WTVersion: 1.0 Content-Type: multipart/alternative; boundary="bndry_183_183042_44817179_356425_0" MIME-Version: 1.0 X-Barracuda-Connect: m0.professionaltraining5.com[208.89.8.25] X-Barracuda-Start-Time: 1327103488 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.40 X-Barracuda-Spam-Status: No, SCORE=0.40 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA074b, BSF_SC5_SA161f, DKIM_SIGNED, DKIM_VERIFIED, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.20 BSF_SC5_SA161f Custom Rule SA161f 0.20 BSF_SC0_SA074b Custom Rule SA074b --bndry_183_183042_44817179_356425_0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit In today's competitive work environment, professionals are always looking for ways to maximize their time, grow their skills, and maintain their relevancy. You're receiving this email because we at Fred Pryor Seminars and CareerTrack, divisions of PARK University Enterprises, Inc., would like to provide you with discounts and special offers on professional business skills training. With more than 40 years in the seminar industry, we know what it takes to help you maintain a competitive edge and succeed in your career. We would like to continue communicating with you via email to provide you with savings of up to 50% on events coming soon to your area. If you would prefer to not receive these special email offers, please follow the link below. http://professionaltraining5.com/o/?ZXD=183.1174638595.44817179&ZXU=1798002 Thank you for your time. Best Regards, Fred Pryor Seminars & CareerTrack divisions of PARK University Enterprises, Inc. 5700 Broadmoor, Suite 300, Mission, KS 66202 www.pryor.com --bndry_183_183042_44817179_356425_0-- From lists@unixhosts.org Sat Jan 21 04:03:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0LA3q2v162149 for ; Sat, 21 Jan 2012 04:03:53 -0600 X-ASG-Debug-ID: 1327140222-04bdf067b61a7f20001-NocioJ Received: from mail-ey0-f181.google.com (mail-ey0-f181.google.com [209.85.215.181]) by cuda.sgi.com with ESMTP id eerYNywcDz9pGLn2 for ; Sat, 21 Jan 2012 02:03:42 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 209.85.215.181 Received: by eaal1 with SMTP id l1so680373eaa.26 for ; Sat, 21 Jan 2012 02:03:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=from:content-type:content-transfer-encoding:subject:date:message-id :to:mime-version:x-mailer; bh=Af85IL5NYEMgrtZtnmcMGr21fE1Bmv2uogJi0qB48sk=; b=ABMPd46o7hO5pTrq9sz7c6JOkJHSwFwIA9dmWCdvB+sV1nqUN/pryvAhHcsePkYUuc nQ/T12D6s5QmPX9gaQOtMBgx8WmuIWDW3W/A9te/WRrQmsFF4SqbuXduPHc101mAOcRI v5AP+np/iW4shBFtoG9tNZbZY/TJJdbZAZpfk= Received: by 10.213.27.16 with SMTP id g16mr309825ebc.6.1327140221708; Sat, 21 Jan 2012 02:03:41 -0800 (PST) Received: from marge.int.unixhosts.org (p508079C3.dip.t-dialin.net. [80.128.121.195]) by mx.google.com with ESMTPS id c16sm23470209eei.1.2012.01.21.02.03.39 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 21 Jan 2012 02:03:40 -0800 (PST) From: Christian Kildau Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Subject: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Date: Sat, 21 Jan 2012 11:03:39 +0100 X-ASG-Orig-Subj: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Message-Id: To: xfs@oss.sgi.com Mime-Version: 1.0 (Apple Message framework v1251.1) X-Mailer: Apple Mail (2.1251.1) X-Barracuda-Connect: mail-ey0-f181.google.com[209.85.215.181] X-Barracuda-Start-Time: 1327140222 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86389 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, I'm having some very serious issues with XFS after upgrading from a = Linux Distro running Ubuntu 2.6.32 to 3.2. It seems like my filesystems are damaged after attaching them to a Linux = 3.2 server. I am also no longer able to mount the hdd on the old server = that is still running 2.6.32! 'test disk' does find the filesystem as XFS 4 and i created a 1.5TB dump = of it to another hdd. (I created the xfs filesystem on the entire hdd, not on a partition, so = /dev/sdd is not a typo) $ sudo mount -t xfs /dev/sdd /media/ mount: /dev/sdd: can't read superblock (dmesg) [236659.912663] attempt to access beyond end of device [236659.912667] sdd: rw=3D32, want=3D2930277168, limit=3D2930275055 [236659.912670] XFS (sdd): last sector read failed $ sudo xfs_check /dev/sdd xfs_check: error - read only 0 of 512 bytes $ sudo xfs_repair /dev/sdd Phase 1 - find and verify superblock... xfs_repair: error - read only 0 of 512 bytes 'testdisk' does find the filesystem as XFS 4 and i created a 1.5TB dump = of it to another hdd. Is there any way I can fix this? - Except restroring from backup? = Because this IS my backup! see ubuntuforums.org/showthread.php?t=3D1910962 for more details=85 Any help is appreciated! Thanks in advance Chris= From lists@unixhosts.org Sat Jan 21 04:29:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0LATJr0163322 for ; Sat, 21 Jan 2012 04:29:19 -0600 X-ASG-Debug-ID: 1327141758-04cb6c198e15bb50001-NocioJ Received: from mail-yx0-f181.google.com (mail-yx0-f181.google.com [209.85.213.181]) by cuda.sgi.com with ESMTP id FzbPHkijoZk6qUbj for ; Sat, 21 Jan 2012 02:29:18 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 209.85.213.181 Received: by yenr8 with SMTP id r8so889227yen.26 for ; Sat, 21 Jan 2012 02:29:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=mime-version:date:message-id:subject:from:to:x-gm-message-state :content-type:content-transfer-encoding; bh=UnK09PGNzUN7jP2duvqhDIAO2E7NBbqTRCNh3C+Grvw=; b=N0/Apu0rA9K4Gjt7KIMd6il+d8ywEVxR01Pr/xjY0ZgjOsmPXQUrxGUS8eMd1WdDH0 B+kA3NKXUVEV0oAcBXz9PwhAphXHCIGplQWecPhcmAzCEsIL7Hw03/EwUmFj62CSltBx k4VCdH2IqiZ0svcx8UgkxlJYIqOGpcXShBw20= Received: by 10.236.200.230 with SMTP id z66mr1496304yhn.20.1327141757993; Sat, 21 Jan 2012 02:29:17 -0800 (PST) Received: from mail-gy0-f181.google.com (mail-gy0-f181.google.com [209.85.160.181]) by mx.google.com with ESMTPS id y58sm10270601yhi.17.2012.01.21.02.29.16 (version=SSLv3 cipher=OTHER); Sat, 21 Jan 2012 02:29:16 -0800 (PST) Received: by ghbg19 with SMTP id g19so890910ghb.26 for ; Sat, 21 Jan 2012 02:29:15 -0800 (PST) MIME-Version: 1.0 Received: by 10.236.156.67 with SMTP id l43mr1436512yhk.73.1327141755921; Sat, 21 Jan 2012 02:29:15 -0800 (PST) Received: by 10.146.154.20 with HTTP; Sat, 21 Jan 2012 02:29:15 -0800 (PST) Date: Sat, 21 Jan 2012 11:29:15 +0100 Message-ID: Subject: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Christian Kildau X-ASG-Orig-Subj: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes To: xfs@oss.sgi.com X-Gm-Message-State: ALoCoQlWyQywdTjSQdb2cICwNZ5Ue1yLizB15vBAjnHlhoskMfNv9aaEj66Xi4q3RNy5gUa112gn Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-yx0-f181.google.com[209.85.213.181] X-Barracuda-Start-Time: 1327141758 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86389 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 Sorry if this message appears twice! Hello, I'm having some very serious issues with XFS after upgrading from a Linux Distro running Ubuntu 2.6.32 to 3.2. It seems like my filesystems are damaged after attaching them to a Linux 3.2 server. I am also no longer able to mount the hdd on the old server that is still running 2.6.32! (I created the xfs filesystem on the entire hdd, not on a partition, so /dev/sdd is not a typo) $ sudo mount -t xfs /dev/sdd /media/ mount: /dev/sdd: can't read superblock (dmesg) [236659.912663] attempt to access beyond end of device [236659.912667] sdd: rw=3D32, want=3D2930277168, limit=3D2930275055 [236659.912670] XFS (sdd): last sector read failed $ sudo xfs_check /dev/sdd xfs_check: error - read only 0 of 512 bytes $ sudo xfs_repair /dev/sdd Phase 1 - find and verify superblock... xfs_repair: error - read only 0 of 512 bytes 'testdisk' does find the filesystem as XFS 4 and i created a 1.5TB dump of it to another hdd. Is there any way I can fix this? - Except restroring from backup? Because this IS my backup! see ubuntuforums.org/showthread.php?t=3D1910962 for more details=85 Any help is appreciated! Thanks in advance Chris From earnfiend@gmail.com Sun Jan 22 07:33:58 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.9 required=5.0 tests=BAYES_50,FREEMAIL_FROM, J_CHICKENPOX_72,MIME_QP_LONG_LINE,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0MDXwa8257175 for ; Sun, 22 Jan 2012 07:33:58 -0600 X-ASG-Debug-ID: 1327239233-04cbb030272e8810001-NocioJ Received: from relay.lgcsb.ie (mail2.lgcsb.ie [193.178.1.33]) by cuda.sgi.com with ESMTP id 8Vug9htlURQiNKqM for ; Sun, 22 Jan 2012 05:33:56 -0800 (PST) X-Barracuda-Envelope-From: earnfiend@gmail.com X-Barracuda-Apparent-Source-IP: 193.178.1.33 Received: from lgcsb-web2 ([192.168.1.85]) by relay.lgcsb.ie with Microsoft SMTPSVC(6.0.3790.4675); Sun, 22 Jan 2012 13:33:48 +0000 MIME-Version: 1.0 From: earnfiend@gmail.com To: xfs@oss.sgi.com Date: 22 Jan 2012 13:33:48 +0000 Subject: Sean Donaire has recommended this page to you Content-Type: text/plain; charset=us-ascii X-ASG-Orig-Subj: Sean Donaire has recommended this page to you Content-Transfer-Encoding: quoted-printable Message-ID: X-OriginalArrivalTime: 22 Jan 2012 13:33:48.0543 (UTC) FILETIME=[78BCA0F0:01CCD90A] X-Barracuda-Connect: mail2.lgcsb.ie[193.178.1.33] X-Barracuda-Start-Time: 1327239235 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86389 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 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 Hi,=0AI thought you would be interested in this article on the Irish Blood= Tranfusion website:=0Awww.giveblood.ie=0AComment:Hi Friend, =0D=0A= =0D=0A=0D=0AI am going to cut to the chase... go watch this video NOW:=0D=0A= =0D=0Ahttp://themanicmarketer.com/specialreports/firestormseo/?e=3Dearnnow= =0D=0A=0D=0ASean has just given away the farm here, no joke. He has just= =0D=0Ashown the world how to tap into Billion dollar industries and=0D=0Ahow= to fly under the radar, getting free traffic in the most=0D=0Acompetative= markets.=0D=0A=0D=0AJust watch the video and you will see what I mean...= =0D=0A=0D=0Ahttp://themanicmarketer.com/specialreports/firestormseo/?e=3Dearnnow= =0D=0A=0D=0AHe is doing this for 2 reasons. First, it's his big birthday= =0D=0Agiveaway that he does every year...=0D=0A=0D=0ASecondly, he is gearing= up for what could be a major game=0D=0Achanger in terms of SEO.... FIRESTORM= SEO=0D=0A=0D=0AAnyway, the main thing is that this stratgey he is showing= =0D=0Ain this video could literally change the way you do marketing=0D=0Aonline...= so go get your copy of this video before it vanishes!=0D=0A=0D=0Ahttp://themanicmarketer.com/specialreports/firestormseo/?e=3Dearnnow= =0D=0A=0D=0AAll the best=0D=0A=0D=0ASean Donaire=0D=0A=0D=0AP.S. You can= tell Sean has a new video studio setup, some cool stuff=0D=0Agoing on there= as you will see...=0D=0A=0D=0Ahttp://themanicmarketer.com/specialreports/firestormseo/?e=3Dearnnow= =0D=0A=0D=0A =0A=0AThanks,=0ASean Donaire From greg@kroah.com Sun Jan 22 18:03:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N03dBf028915 for ; Sun, 22 Jan 2012 18:03:39 -0600 X-ASG-Debug-ID: 1327277017-04cb6c199021b340001-NocioJ Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by cuda.sgi.com with ESMTP id ADIiO1BkJp2DYkrl for ; Sun, 22 Jan 2012 16:03:38 -0800 (PST) X-Barracuda-Envelope-From: greg@kroah.com X-Barracuda-Apparent-Source-IP: 66.111.4.27 Received: from compute2.internal (compute2.nyi.mail.srv.osa [10.202.2.42]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id 57D1520F58 for ; Sun, 22 Jan 2012 19:03:37 -0500 (EST) Received: from frontend2.nyi.mail.srv.osa ([10.202.2.161]) by compute2.internal (MEProxy); Sun, 22 Jan 2012 19:03:37 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:cc:subject:message-id :references:mime-version:content-type:in-reply-to; s=smtpout; bh=lWixztzYHb3iIjahNvuyulRcd9c=; b=cAI2v7ly6x8dZBAq6Aa35VYz4DuG Oi2cbBvqB0/360EhJUszJBO+cEMbADEavifXlsDoE6rYnmatiKdhD9wVLsh3XEQW VhRn5cucvUSFg1DozYbZNRp7d9w31vEgSU+p3vjUnvPk197K52fjaCyvzQcCjnBY dNx+Rg5gD5lIoJk= X-Sasl-enc: 85/e0ga694tMfs6lv3hsLNqK5RHxwTJuhXeZPlBkI3Uu 1327277016 Received: from localhost (m840f36d0.tmodns.net [208.54.15.132]) by mail.messagingengine.com (Postfix) with ESMTPSA id 54218482476; Sun, 22 Jan 2012 19:03:36 -0500 (EST) Date: Sun, 22 Jan 2012 14:13:40 -0700 From: Greg KH To: bpm@sgi.com Cc: stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS update for 3.2-stable Message-ID: <20120122211340.GC3224@kroah.com> X-ASG-Orig-Subj: Re: XFS update for 3.2-stable References: <1326919305-2753-1-git-send-email-bpm@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326919305-2753-1-git-send-email-bpm@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: out3-smtp.messagingengine.com[66.111.4.27] X-Barracuda-Start-Time: 1327277018 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86410 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 Wed, Jan 18, 2012 at 02:41:44PM -0600, bpm@sgi.com wrote: > Here's a fix for 3.2-stable related to trim support in xfs. Applied, thanks. Is it also needed for the 3.0-stable tree? greg k-h From mitsuo.hayasaka.hu@hitachi.com Sun Jan 22 21:39:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N3dWAq048139 for ; Sun, 22 Jan 2012 21:39:32 -0600 X-ASG-Debug-ID: 1327289969-04cbb03025327c70001-NocioJ Received: from mail9.hitachi.co.jp (mail9.hitachi.co.jp [133.145.228.44]) by cuda.sgi.com with ESMTP id iUGkU9Sb5XcfafZp; Sun, 22 Jan 2012 19:39:30 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.44 Received: from mlsv6.hitachi.co.jp (unknown [133.144.234.166]) by mail9.hitachi.co.jp (Postfix) with ESMTP id DA23637C84; Mon, 23 Jan 2012 12:39:28 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv6.hitachi.co.jp (8.13.1/8.13.1) id q0N3dSEN017949; Mon, 23 Jan 2012 12:39:28 +0900 Received: from vshuts2.hitachi.co.jp (vshuts2.hitachi.co.jp [10.201.6.71]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0N3dRgo008598; Mon, 23 Jan 2012 12:39:28 +0900 X-AuditID: b753bd60-96e5dba00000359c-95-4f1cd66fa5f0 Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts2.hitachi.co.jp (Symantec Mail Security) with ESMTP id 51D848B02F6; Mon, 23 Jan 2012 12:39:27 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0N3dRY1000704; Mon, 23 Jan 2012 12:39:27 +0900 X-AuditID: b753bd60-96e5dba00000359c-95-4f1cd66fa5f0 Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id D17D4236561; Mon, 23 Jan 2012 12:36:47 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 878F212550C; Mon, 23 Jan 2012 12:39:20 +0900 (JST) From: Mitsuo Hayasaka Subject: [PATCH 0/3] xfs: change available ranges in quota check To: Ben Myers , Alex Elder , Christoph Hellwig X-ASG-Orig-Subj: [PATCH 0/3] xfs: change available ranges in quota check Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com Date: Mon, 23 Jan 2012 12:45:14 +0900 Message-ID: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail9.hitachi.co.jp[133.145.228.44] X-Barracuda-Start-Time: 1327289970 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86424 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, This patch series changes available ranges of softlimit and hardlimit in quota check, as follows. (1) Consider new reservation for quota check The disk block reservation checks if (current usage + new reservation) reach the quota limit although the inode reservation does not use the new reservation for quota check. It should consider it, as well. This is mandatory for (2). (2) Change available ranges of softlimit and hardlimit in quota check Currently xfs quota allows us to use disk blocks and inodes up to lower than quota limits. They should be used up to not greater than the limits. Thanks, --- Mitsuo Hayasaka (3): xfs: cleanup quota check on disk blocks and inodes reservations xfs: change available ranges of softlimit and hardlimit in quota check xfs: consider new reservation for quota check on inode reservation fs/xfs/xfs_dquot.c | 24 ++++++++++++------------ fs/xfs/xfs_log_recover.c | 6 +++--- fs/xfs/xfs_qm_syscalls.c | 4 ++-- fs/xfs/xfs_trans_dquot.c | 15 +++++++-------- 4 files changed, 24 insertions(+), 25 deletions(-) -- Mitsuo Hayasaka (mitsuo.hayasaka.hu@hitachi.com) From mitsuo.hayasaka.hu@hitachi.com Sun Jan 22 21:39:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N3deQE048173 for ; Sun, 22 Jan 2012 21:39:40 -0600 X-ASG-Debug-ID: 1327289978-04cb6c198f225b50001-NocioJ Received: from mail9.hitachi.co.jp (mail9.hitachi.co.jp [133.145.228.44]) by cuda.sgi.com with ESMTP id m7bDnAQM6jPkvT5X; Sun, 22 Jan 2012 19:39:39 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.44 Received: from mlsv8.hitachi.co.jp (unknown [133.144.234.166]) by mail9.hitachi.co.jp (Postfix) with ESMTP id A061737C84; Mon, 23 Jan 2012 12:39:38 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv8.hitachi.co.jp (8.13.1/8.13.1) id q0N3dc1d032509; Mon, 23 Jan 2012 12:39:38 +0900 Received: from vshuts4.hitachi.co.jp (vshuts4.hitachi.co.jp [10.201.6.80]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0N3dbDx008644; Mon, 23 Jan 2012 12:39:38 +0900 X-AuditID: b753bd60-9658fba000007b1b-90-4f1cd67989cd Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts4.hitachi.co.jp (Symantec Mail Security) with ESMTP id 4BC692043B7; Mon, 23 Jan 2012 12:39:37 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0N3daNE000850; Mon, 23 Jan 2012 12:39:36 +0900 X-AuditID: b753bd60-9658fba000007b1b-90-4f1cd67989cd Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id ADAE5236561; Mon, 23 Jan 2012 12:36:57 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id D2B3F12550C; Mon, 23 Jan 2012 12:39:31 +0900 (JST) From: Mitsuo Hayasaka Subject: [PATCH 1/3] xfs: consider new reservation for quota check on inode reservation To: Ben Myers , Alex Elder , Christoph Hellwig X-ASG-Orig-Subj: [PATCH 1/3] xfs: consider new reservation for quota check on inode reservation Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com, Mitsuo Hayasaka , Ben Myers , Alex Elder , Christoph Hellwig Date: Mon, 23 Jan 2012 12:45:25 +0900 Message-ID: <20120123034525.3339.79163.stgit@ltc219.sdl.hitachi.co.jp> In-Reply-To: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail9.hitachi.co.jp[133.145.228.44] X-Barracuda-Start-Time: 1327289978 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86424 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The xfs checks quota when reserving disk blocks and inodes. In the block reservation it checks if the total number of blocks including current usage and new reservation reach quota. However, in the inode reservation it checks using the total number of inodes including only current usage without new reservation. It should include the new one, as well. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig --- fs/xfs/xfs_trans_dquot.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 4d00ee6..eb29fe1 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -677,11 +677,13 @@ xfs_trans_dqresv( if (!softlimit) softlimit = q->qi_isoftlimit; - if (hardlimit > 0ULL && count >= hardlimit) { + if (hardlimit > 0ULL && + hardlimit <= ninos + count) { xfs_quota_warn(mp, dqp, QUOTA_NL_IHARDWARN); goto error_return; } - if (softlimit > 0ULL && count >= softlimit) { + if (softlimit > 0ULL && + softlimit <= ninos + count) { if ((timer != 0 && get_seconds() > timer) || (warns != 0 && warns >= warnlimit)) { xfs_quota_warn(mp, dqp, From mitsuo.hayasaka.hu@hitachi.com Sun Jan 22 21:39:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00,LOCAL_GNU_PATCH autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N3dom6048223 for ; Sun, 22 Jan 2012 21:39:50 -0600 X-ASG-Debug-ID: 1327289987-04bdf067b52b9990001-NocioJ Received: from mail9.hitachi.co.jp (mail9.hitachi.co.jp [133.145.228.44]) by cuda.sgi.com with ESMTP id rXYox5AUDi1b4bJw; Sun, 22 Jan 2012 19:39:48 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.44 Received: from mlsv7.hitachi.co.jp (unknown [133.144.234.166]) by mail9.hitachi.co.jp (Postfix) with ESMTP id 91F2737C83; Mon, 23 Jan 2012 12:39:47 +0900 (JST) Received: from mfilter03.hitachi.co.jp by mlsv7.hitachi.co.jp (8.13.1/8.13.1) id q0N3dlKf020840; Mon, 23 Jan 2012 12:39:47 +0900 Received: from vshuts3.hitachi.co.jp (vshuts3.hitachi.co.jp [10.201.6.72]) by mfilter03.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0N3dkpJ027992; Mon, 23 Jan 2012 12:39:47 +0900 X-AuditID: b753bd60-a1c87ba000000655-3f-4f1cd682268c Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts3.hitachi.co.jp (Symantec Mail Security) with ESMTP id 14EDE7741B5; Mon, 23 Jan 2012 12:39:46 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0N3djoe000959; Mon, 23 Jan 2012 12:39:45 +0900 X-AuditID: b753bd60-a1c87ba000000655-3f-4f1cd682268c Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 580EE236561; Mon, 23 Jan 2012 12:37:06 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id B1AC012550C; Mon, 23 Jan 2012 12:39:41 +0900 (JST) From: Mitsuo Hayasaka Subject: [PATCH 2/3] xfs: change available ranges of softlimit and hardlimit in quota check To: Ben Myers , Alex Elder , Christoph Hellwig X-ASG-Orig-Subj: [PATCH 2/3] xfs: change available ranges of softlimit and hardlimit in quota check Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com, Mitsuo Hayasaka , Ben Myers , Alex Elder , Christoph Hellwig Date: Mon, 23 Jan 2012 12:45:35 +0900 Message-ID: <20120123034535.3339.86017.stgit@ltc219.sdl.hitachi.co.jp> In-Reply-To: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail9.hitachi.co.jp[133.145.228.44] X-Barracuda-Start-Time: 1327289987 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86424 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- In general, quota allows us to use disk blocks and inodes to each limit, that is, they are available if they don't exceed their limitations. Current xfs sets their available ranges to lower than them. So, this patch changes the ranges to not greater than them. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 24 ++++++++++++------------ fs/xfs/xfs_log_recover.c | 6 +++--- fs/xfs/xfs_qm_syscalls.c | 4 ++-- fs/xfs/xfs_trans_dquot.c | 8 ++++---- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index b4ff40b..307e4a3 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -215,10 +215,10 @@ xfs_qm_adjust_dqtimers( if (!d->d_btimer) { if ((d->d_blk_softlimit && - (be64_to_cpu(d->d_bcount) >= + (be64_to_cpu(d->d_bcount) > be64_to_cpu(d->d_blk_softlimit))) || (d->d_blk_hardlimit && - (be64_to_cpu(d->d_bcount) >= + (be64_to_cpu(d->d_bcount) > be64_to_cpu(d->d_blk_hardlimit)))) { d->d_btimer = cpu_to_be32(get_seconds() + mp->m_quotainfo->qi_btimelimit); @@ -227,10 +227,10 @@ xfs_qm_adjust_dqtimers( } } else { if ((!d->d_blk_softlimit || - (be64_to_cpu(d->d_bcount) < + (be64_to_cpu(d->d_bcount) <= be64_to_cpu(d->d_blk_softlimit))) && (!d->d_blk_hardlimit || - (be64_to_cpu(d->d_bcount) < + (be64_to_cpu(d->d_bcount) <= be64_to_cpu(d->d_blk_hardlimit)))) { d->d_btimer = 0; } @@ -238,10 +238,10 @@ xfs_qm_adjust_dqtimers( if (!d->d_itimer) { if ((d->d_ino_softlimit && - (be64_to_cpu(d->d_icount) >= + (be64_to_cpu(d->d_icount) > be64_to_cpu(d->d_ino_softlimit))) || (d->d_ino_hardlimit && - (be64_to_cpu(d->d_icount) >= + (be64_to_cpu(d->d_icount) > be64_to_cpu(d->d_ino_hardlimit)))) { d->d_itimer = cpu_to_be32(get_seconds() + mp->m_quotainfo->qi_itimelimit); @@ -250,10 +250,10 @@ xfs_qm_adjust_dqtimers( } } else { if ((!d->d_ino_softlimit || - (be64_to_cpu(d->d_icount) < + (be64_to_cpu(d->d_icount) <= be64_to_cpu(d->d_ino_softlimit))) && (!d->d_ino_hardlimit || - (be64_to_cpu(d->d_icount) < + (be64_to_cpu(d->d_icount) <= be64_to_cpu(d->d_ino_hardlimit)))) { d->d_itimer = 0; } @@ -261,10 +261,10 @@ xfs_qm_adjust_dqtimers( if (!d->d_rtbtimer) { if ((d->d_rtb_softlimit && - (be64_to_cpu(d->d_rtbcount) >= + (be64_to_cpu(d->d_rtbcount) > be64_to_cpu(d->d_rtb_softlimit))) || (d->d_rtb_hardlimit && - (be64_to_cpu(d->d_rtbcount) >= + (be64_to_cpu(d->d_rtbcount) > be64_to_cpu(d->d_rtb_hardlimit)))) { d->d_rtbtimer = cpu_to_be32(get_seconds() + mp->m_quotainfo->qi_rtbtimelimit); @@ -273,10 +273,10 @@ xfs_qm_adjust_dqtimers( } } else { if ((!d->d_rtb_softlimit || - (be64_to_cpu(d->d_rtbcount) < + (be64_to_cpu(d->d_rtbcount) <= be64_to_cpu(d->d_rtb_softlimit))) && (!d->d_rtb_hardlimit || - (be64_to_cpu(d->d_rtbcount) < + (be64_to_cpu(d->d_rtbcount) <= be64_to_cpu(d->d_rtb_hardlimit)))) { d->d_rtbtimer = 0; } diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 541a508..d3ce9ad 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1981,7 +1981,7 @@ xfs_qm_dqcheck( if (!errs && ddq->d_id) { if (ddq->d_blk_softlimit && - be64_to_cpu(ddq->d_bcount) >= + be64_to_cpu(ddq->d_bcount) > be64_to_cpu(ddq->d_blk_softlimit)) { if (!ddq->d_btimer) { if (flags & XFS_QMOPT_DOWARN) @@ -1992,7 +1992,7 @@ xfs_qm_dqcheck( } } if (ddq->d_ino_softlimit && - be64_to_cpu(ddq->d_icount) >= + be64_to_cpu(ddq->d_icount) > be64_to_cpu(ddq->d_ino_softlimit)) { if (!ddq->d_itimer) { if (flags & XFS_QMOPT_DOWARN) @@ -2003,7 +2003,7 @@ xfs_qm_dqcheck( } } if (ddq->d_rtb_softlimit && - be64_to_cpu(ddq->d_rtbcount) >= + be64_to_cpu(ddq->d_rtbcount) > be64_to_cpu(ddq->d_rtb_softlimit)) { if (!ddq->d_rtbtimer) { if (flags & XFS_QMOPT_DOWARN) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index eafbcff..711a86e 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -813,11 +813,11 @@ xfs_qm_export_dquot( (XFS_IS_OQUOTA_ENFORCED(mp) && (dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) && dst->d_id != 0) { - if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && + if (((int) dst->d_bcount > (int) dst->d_blk_softlimit) && (dst->d_blk_softlimit > 0)) { ASSERT(dst->d_btimer != 0); } - if (((int) dst->d_icount >= (int) dst->d_ino_softlimit) && + if (((int) dst->d_icount > (int) dst->d_ino_softlimit) && (dst->d_ino_softlimit > 0)) { ASSERT(dst->d_itimer != 0); } diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index eb29fe1..c4ba366 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -649,12 +649,12 @@ xfs_trans_dqresv( * nblks. */ if (hardlimit > 0ULL && - hardlimit <= nblks + *resbcountp) { + hardlimit < nblks + *resbcountp) { xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN); goto error_return; } if (softlimit > 0ULL && - softlimit <= nblks + *resbcountp) { + softlimit < nblks + *resbcountp) { if ((timer != 0 && get_seconds() > timer) || (warns != 0 && warns >= warnlimit)) { xfs_quota_warn(mp, dqp, @@ -678,12 +678,12 @@ xfs_trans_dqresv( softlimit = q->qi_isoftlimit; if (hardlimit > 0ULL && - hardlimit <= ninos + count) { + hardlimit < ninos + count) { xfs_quota_warn(mp, dqp, QUOTA_NL_IHARDWARN); goto error_return; } if (softlimit > 0ULL && - softlimit <= ninos + count) { + softlimit < ninos + count) { if ((timer != 0 && get_seconds() > timer) || (warns != 0 && warns >= warnlimit)) { xfs_quota_warn(mp, dqp, From mitsuo.hayasaka.hu@hitachi.com Sun Jan 22 21:39:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N3duBl048264 for ; Sun, 22 Jan 2012 21:39:56 -0600 X-ASG-Debug-ID: 1327289994-04cb6c198f225b90001-NocioJ Received: from mail4.hitachi.co.jp (mail4.hitachi.co.jp [133.145.228.5]) by cuda.sgi.com with ESMTP id C6GDFXHpoxvIjEkF; Sun, 22 Jan 2012 19:39:55 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.5 Received: from mlsv2.hitachi.co.jp (unknown [133.144.234.166]) by mail4.hitachi.co.jp (Postfix) with ESMTP id 32C1833CC5; Mon, 23 Jan 2012 12:39:54 +0900 (JST) Received: from mfilter05.hitachi.co.jp by mlsv2.hitachi.co.jp (8.13.1/8.13.1) id q0N3dsTa003625; Mon, 23 Jan 2012 12:39:54 +0900 Received: from vshuts3.hitachi.co.jp (vshuts3.hitachi.co.jp [10.201.6.72]) by mfilter05.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0N3dr8a015521; Mon, 23 Jan 2012 12:39:53 +0900 X-AuditID: b753bd60-9ea82ba000000655-57-4f1cd688199f Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts3.hitachi.co.jp (Symantec Mail Security) with ESMTP id E18E8774262; Mon, 23 Jan 2012 12:39:52 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0N3dqKk001071; Mon, 23 Jan 2012 12:39:52 +0900 X-AuditID: b753bd60-9ea82ba000000655-57-4f1cd688199f Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 5A500236561; Mon, 23 Jan 2012 12:37:13 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 5955A12550C; Mon, 23 Jan 2012 12:39:50 +0900 (JST) From: Mitsuo Hayasaka Subject: [PATCH 3/3] xfs: cleanup quota check on disk blocks and inodes reservations To: Ben Myers , Alex Elder , Christoph Hellwig X-ASG-Orig-Subj: [PATCH 3/3] xfs: cleanup quota check on disk blocks and inodes reservations Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com, Mitsuo Hayasaka , Ben Myers , Alex Elder , Christoph Hellwig Date: Mon, 23 Jan 2012 12:45:43 +0900 Message-ID: <20120123034543.3339.56848.stgit@ltc219.sdl.hitachi.co.jp> In-Reply-To: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail4.hitachi.co.jp[133.145.228.5] X-Barracuda-Start-Time: 1327289994 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86424 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This patch is a cleanup of quota check on disk blocks and inodes reservations. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig --- fs/xfs/xfs_trans_dquot.c | 17 +++++++---------- 1 files changed, 7 insertions(+), 10 deletions(-) diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index c4ba366..5e6cd1c 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -605,7 +605,7 @@ xfs_trans_dqresv( time_t timer; xfs_qwarncnt_t warns; xfs_qwarncnt_t warnlimit; - xfs_qcnt_t count; + xfs_qcnt_t tcount; xfs_qcnt_t *resbcountp; xfs_quotainfo_t *q = mp->m_quotainfo; @@ -648,13 +648,12 @@ xfs_trans_dqresv( * hardlimit or exceed the timelimit if we allocate * nblks. */ - if (hardlimit > 0ULL && - hardlimit < nblks + *resbcountp) { + tcount = *resbcountp + nblks; + if (hardlimit > 0ULL && tcount > hardlimit) { xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN); goto error_return; } - if (softlimit > 0ULL && - softlimit < nblks + *resbcountp) { + if (softlimit > 0ULL && tcount > softlimit) { if ((timer != 0 && get_seconds() > timer) || (warns != 0 && warns >= warnlimit)) { xfs_quota_warn(mp, dqp, @@ -666,7 +665,7 @@ xfs_trans_dqresv( } } if (ninos > 0) { - count = be64_to_cpu(dqp->q_core.d_icount); + tcount = be64_to_cpu(dqp->q_core.d_icount) + ninos; timer = be32_to_cpu(dqp->q_core.d_itimer); warns = be16_to_cpu(dqp->q_core.d_iwarns); warnlimit = dqp->q_mount->m_quotainfo->qi_iwarnlimit; @@ -677,13 +676,11 @@ xfs_trans_dqresv( if (!softlimit) softlimit = q->qi_isoftlimit; - if (hardlimit > 0ULL && - hardlimit < ninos + count) { + if (hardlimit > 0ULL && tcount > hardlimit) { xfs_quota_warn(mp, dqp, QUOTA_NL_IHARDWARN); goto error_return; } - if (softlimit > 0ULL && - softlimit < ninos + count) { + if (softlimit > 0ULL && tcount > softlimit) { if ((timer != 0 && get_seconds() > timer) || (warns != 0 && warns >= warnlimit)) { xfs_quota_warn(mp, dqp, From david@fromorbit.com Sun Jan 22 22:21:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N4LXYB051902 for ; Sun, 22 Jan 2012 22:21:33 -0600 X-ASG-Debug-ID: 1327292490-04cb6c198f228660001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id Zg9OpcTJA5KI5I4q for ; Sun, 22 Jan 2012 20:21:31 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAArdHE95LElR/2dsb2JhbABDriSBBoFyAQEFOhwjEAgDDgouFCUDIRPAChOMEwSVGJJj Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail05.adl6.internode.on.net with ESMTP; 23 Jan 2012 14:51:29 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpBPM-0002X9-LZ; Mon, 23 Jan 2012 15:21:28 +1100 Date: Mon, 23 Jan 2012 15:21:28 +1100 From: Dave Chinner To: Peter Grandi Cc: Linux fs XFS Subject: Re: Optimal XFS formatting options? Message-ID: <20120123042128.GG15102@dastard> X-ASG-Orig-Subj: Re: Optimal XFS formatting options? References: <33140169.post@talk.nabble.com> <20242.10382.19330.275280@tree.ty.sabi.co.UK> <4F192DEC.4030400@tlinx.org> <20249.22727.359884.733592@tree.ty.sabi.co.UK> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20249.22727.359884.733592@tree.ty.sabi.co.UK> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1327292491 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86428 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 20, 2012 at 12:06:31PM +0000, Peter Grandi wrote: > [ ... ] > >> * XFS has several limitations on 32b kernels. Just make sure > >> you have a 64b kernel. > [ ... ] > > I was unaware that the block size was larger on 64b kernels. > > Is that what you are referring to ? (would be nice)... > > Not as such, the maximum block size is limited by the Linux page > cache, that is hw page size, which is for IA32 and AMD64 > architectures the same at 4KiB. However other architectures > which are natively 64b allow bigger page sizes (notably IA64 > [aka Itanium]), so the page cache and thus XFS can do larger > blocks sizes. > > The limitations of XFS on 32b kernels come from limitations of > XFS itself in 32b mode, limitations of Linux in 32b mode, and > combined limitations. For example: > > * There be 32b inode numbers, which limit inodes to the first > 1TB of a filetree if sector size is 512B. Internally XFS still uses 64 bit inode numbers - the on-disk format does not change just because the CPU arch has changed. If you use the stat64() style interfaces, even on 32 bit machines you can access the full 64 bit inode numbers. > * The 32b block IO subsystems limits partition sizes to 16TiB. The sector_t is a 64 bit number even on 32 bit systems. The problem is that the page cache cannot index past offsets of 16TB. Given that XFS no longer uses the page cache for it's metadata indexing, we could remove this limit in the kernel code if we wanted to. And given that the userpsace tools use direct IO, the page cache limitation doesn't cause problems there, either, because we bypass it. So in theory we could lift this limit, but there really isn't much demand for >16TB filesystems on 32 bit, because.... > * XFS tools scanning a large filesystem, usually for repair, > can run out of the available 32b address space (by default > around 2GiB). .... you need 64 bit systems to handle the userspace memory requirements tools like xfs_check and xfs_repair require to run. If the filesystem is large enough that you can't run repair because it needs more than 2GB of RAM, then you shouldn't be using a 32 bit systems. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun Jan 22 22:31:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N4VLjA052559 for ; Sun, 22 Jan 2012 22:31:21 -0600 X-ASG-Debug-ID: 1327293079-04cbb0302532be20001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id lQHdYuEjF8MuTDav for ; Sun, 22 Jan 2012 20:31:19 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AikFABjhHE95LElR/2dsb2JhbABDrGOBQYEGgXIBAQU6HCMQCAMOCi4UJQMhE8ARE4wTBJUYiSuJOA Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail05.adl6.internode.on.net with ESMTP; 23 Jan 2012 15:01:18 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpBYr-0002Yh-9N; Mon, 23 Jan 2012 15:31:17 +1100 Date: Mon, 23 Jan 2012 15:31:17 +1100 From: Dave Chinner To: Christian Kildau Cc: xfs@oss.sgi.com Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Message-ID: <20120123043117.GH15102@dastard> X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes 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: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1327293079 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86428 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Jan 21, 2012 at 11:29:15AM +0100, Christian Kildau wrote: > Sorry if this message appears twice! > > > > Hello, > > I'm having some very serious issues with XFS after upgrading from a > Linux Distro running Ubuntu 2.6.32 to 3.2. > > It seems like my filesystems are damaged after attaching them to a > Linux 3.2 server. I am also no longer able to mount the hdd on the old > server that is still running 2.6.32! I take it that you are using external storage of some kind? Can you describe it? > (I created the xfs filesystem on the entire hdd, not on a partition, > so /dev/sdd is not a typo) > > $ sudo mount -t xfs /dev/sdd /media/ > mount: /dev/sdd: can't read superblock > (dmesg) > [236659.912663] attempt to access beyond end of device > [236659.912667] sdd: rw=32, want=2930277168, limit=2930275055 > [236659.912670] XFS (sdd): last sector read failed So XFS has asked to read 2113 sectors beyond the size of the device that the kernel is reporting. What is the output of /proc/partitions? > $ sudo xfs_check /dev/sdd > xfs_check: error - read only 0 of 512 bytes > > $ sudo xfs_repair /dev/sdd > Phase 1 - find and verify superblock... > xfs_repair: error - read only 0 of 512 bytes So both buffered and direct IO to the first block in the block device are failing. I'd say your problems have nothing to do with XFS. However, can you strace them and find out what the error that is occuring actually is? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun Jan 22 23:11:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N5BxvY054865 for ; Sun, 22 Jan 2012 23:11:59 -0600 X-ASG-Debug-ID: 1327295517-04cbb0302432fc00001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id D5ygXCw4jANKwvKF for ; Sun, 22 Jan 2012 21:11:57 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAInrHE95LElR/2dsb2JhbABDriSBBoFyAQEEAScTHCMFCwgDGC4UJQMhE4d8uAMTjBMElRiSYw Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail05.adl6.internode.on.net with ESMTP; 23 Jan 2012 15:41:56 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpCCB-0002cf-HU; Mon, 23 Jan 2012 16:11:55 +1100 Date: Mon, 23 Jan 2012 16:11:55 +1100 From: Dave Chinner To: Zheng Da Cc: xfs@oss.sgi.com Subject: Re: concurrent direct IO write in xfs Message-ID: <20120123051155.GI15102@dastard> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs References: <20120116232549.GC6922@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1327295517 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86430 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 17, 2012 at 02:19:52PM -0500, Zheng Da wrote: > Hello, > > On Mon, Jan 16, 2012 at 6:25 PM, Dave Chinner wrote: > > > > > 0xffffffff81288b6a : xfs_aio_write_newsize_update+0x3a/0x90 [kernel] > > > > Only ever taken when doing appending writes. Are you -sure- you are > > not doing appending writes? > > > This is weird. Yes, I'm sure. I use pwrite() to write data to a 4G file, > and I check the offset of each write and they are always smaller than 4G. > I instrument the code with systemtap and it shows me that ip->i_new_size > and new_size in xfs_aio_write_newsize_update are both 0. > Since in my case there is only overwrite, ip->i_new_size will always be 0 > (the only place that updates ip->i_new_size is xfs_file_aio_write_checks). > Because of the same reason, new_size returned by xfs_file_aio_write_checks > is always 0. > Is it what you expected? No idea. I don't know what the problem you are seeing is yet, or if indeed there even is a problem as I don't really understand what you are trying to do or what results you are expecting to see... Indeed, have you run the test on something other than a RAM disk and confirmed that the problem exists on a block device that has real IO latency? If your IO takes close to zero time, then there isn't any IO level concurrency you can extract from single file direct IO; it will all just serialise on the extent tree lookups. > > > 0xffffffff812829f4 : __xfs_get_blocks+0x94/0x4a0 [kernel] > > > > And for direct IO writes, this will be the block mapping lookup so > > always hit. > > > > > > What this says to me is that you are probably doing is lots of very > > small concurrent write IOs, but I'm only guessing. Can you provide > > your test case and a description of your test hardware so we can try > > to reproduce the problem? > > > I build XFS on the top of ramdisk. So yes, there is a lot of small > concurrent writes in a second. > I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test > program overwrites 4G of data to the file and each time writes a page of > data randomly to the file. It's always overwriting, and no appending. The > offset of each write is always aligned to the page size. There is no > overlapping between writes. Why are you using XFS for this? tmpfs was designed to do this sort of stuff as efficiently as possible.... > So the test case is pretty simple and I think it's easy to reproduce it. > It'll be great if you can try the test case. Can you post your test code so I know what I test is exactly what you are running? Cheers, Dave. -- Dave Chinner david@fromorbit.com From lists@unixhosts.org Mon Jan 23 03:23:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.2 required=5.0 tests=BAYES_00,HEADER_ESQ, J_CHICKENPOX_47,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0N9NVx7078132 for ; Mon, 23 Jan 2012 03:23:32 -0600 X-ASG-Debug-ID: 1327310609-04bdf067b62e5220001-NocioJ Received: from mail-ey0-f181.google.com (mail-ey0-f181.google.com [209.85.215.181]) by cuda.sgi.com with ESMTP id W44JYlGvwOpbWwaU for ; Mon, 23 Jan 2012 01:23:29 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 209.85.215.181 Received: by eaal1 with SMTP id l1so1539654eaa.26 for ; Mon, 23 Jan 2012 01:23:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:content-type:from:in-reply-to:date:cc :message-id:references:to:x-mailer; bh=b+xgsGj4WMFr1g6g4M0ZXApFbbXKVDAzRNeeA91SDoI=; b=pIU9be3kk9L1jyNHREJVQNhc2LArhN/f7D+Q1rCAqEdGru8RWX3ewkIpobWu+xPaSs VQRP0+ByUhywFaRA418qeEsQGFe6XE+Hq7sbZT6E8vKq1ei0qi3Szp8jm7RG84INAgXr PFYk/gfSr75B5OEspfV4O+aAcY9xVtL+JKucU= Received: by 10.213.5.12 with SMTP id 12mr1427467ebt.24.1327310608622; Mon, 23 Jan 2012 01:23:28 -0800 (PST) Received: from [10.1.250.14] (amy.unixhosts.org. [178.77.99.129]) by mx.google.com with ESMTPS id b49sm51500492eec.9.2012.01.23.01.23.26 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 23 Jan 2012 01:23:27 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Content-Type: multipart/mixed; boundary="Apple-Mail=_403304DB-FEF9-4A8F-A4B7-11EE97BC8733" From: Christian Kildau In-Reply-To: <20120123043117.GH15102@dastard> Date: Mon, 23 Jan 2012 10:23:25 +0100 Cc: xfs@oss.sgi.com Message-Id: <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> References: <20120123043117.GH15102@dastard> To: Dave Chinner X-Mailer: Apple Mail (2.1251.1) X-Barracuda-Connect: mail-ey0-f181.google.com[209.85.215.181] X-Barracuda-Start-Time: 1327310609 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86448 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 --Apple-Mail=_403304DB-FEF9-4A8F-A4B7-11EE97BC8733 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii On Jan 23, 2012, at 5:31 AM, Dave Chinner wrote: > On Sat, Jan 21, 2012 at 11:29:15AM +0100, Christian Kildau wrote: >> Sorry if this message appears twice! >>=20 >>=20 >>=20 >> Hello, >>=20 >> I'm having some very serious issues with XFS after upgrading from a >> Linux Distro running Ubuntu 2.6.32 to 3.2. >>=20 >> It seems like my filesystems are damaged after attaching them to a >> Linux 3.2 server. I am also no longer able to mount the hdd on the = old >> server that is still running 2.6.32! >=20 > I take it that you are using external storage of some kind? Can you > describe it? This hdd is connected via e-sata, but it doesn't make any difference if = I directly connect it internally via sata. Also it doesn't make any difference if I connect it back to the 'old' = server >=20 >> (I created the xfs filesystem on the entire hdd, not on a partition, >> so /dev/sdd is not a typo) >>=20 >> $ sudo mount -t xfs /dev/sdd /media/ >> mount: /dev/sdd: can't read superblock >> (dmesg) >> [236659.912663] attempt to access beyond end of device >> [236659.912667] sdd: rw=3D32, want=3D2930277168, limit=3D2930275055 >> [236659.912670] XFS (sdd): last sector read failed >=20 > So XFS has asked to read 2113 sectors beyond the size of the device > that the kernel is reporting. What is the output of > /proc/partitions? $ grep sdd /proc/partitions=20 8 64 1465137527 sdd >=20 >> $ sudo xfs_check /dev/sdd >> xfs_check: error - read only 0 of 512 bytes >>=20 >> $ sudo xfs_repair /dev/sdd >> Phase 1 - find and verify superblock... >> xfs_repair: error - read only 0 of 512 bytes >=20 > So both buffered and direct IO to the first block in the block > device are failing. I'd say your problems have nothing to do with > XFS. However, can you strace them and find out what the error that > is occuring actually is? Strace is giving me: wait4(-1, xfs_check: /dev/sdd is not a valid XFS filesystem (unexpected = SB magic number 0x00000000) xfs_check: WARNING - filesystem uses v1 dirs,limited functionality = provided. xfs_check: read failed: Invalid argument cache_node_purge: refcount was 1, not zero (node=3D0x21ecef0) xfs_check: cannot read root inode (22) bad superblock magic number 0, giving up I attached the entire strace logs to this email. --Apple-Mail=_403304DB-FEF9-4A8F-A4B7-11EE97BC8733 Content-Disposition: attachment; filename=xfs_check.strace Content-Type: application/octet-stream; name="xfs_check.strace" Content-Transfer-Encoding: 7bit execve("/usr/sbin/xfs_check", ["xfs_check", "/dev/sdd"], [/* 21 vars */]) = 0 brk(0) = 0x734000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f19a4a05000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=23783, ...}) = 0 mmap(NULL, 23783, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19a49ff000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1689912, ...}) = 0 mmap(NULL, 3806024, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f19a4445000 mprotect(0x7f19a45dc000, 2097152, PROT_NONE) = 0 mmap(0x7f19a47dc000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x7f19a47dc000 mmap(0x7f19a47e1000, 21320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f19a47e1000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f19a49fe000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f19a49fc000 arch_prctl(ARCH_SET_FS, 0x7f19a49fc720) = 0 mprotect(0x7f19a47dc000, 16384, PROT_READ) = 0 mprotect(0x619000, 4096, PROT_READ) = 0 mprotect(0x7f19a4a07000, 4096, PROT_READ) = 0 munmap(0x7f19a49ff000, 23783) = 0 getpid() = 28928 rt_sigaction(SIGCHLD, {0x40f0e0, ~[RTMIN RT_1], SA_RESTORER, 0x7f19a447b430}, NULL, 8) = 0 geteuid() = 0 brk(0) = 0x734000 brk(0x755000) = 0x755000 getppid() = 28927 stat("/root", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 open("/usr/sbin/xfs_check", O_RDONLY) = 3 fcntl(3, F_DUPFD, 10) = 10 close(3) = 0 fcntl(10, F_SETFD, FD_CLOEXEC) = 0 rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, {0x40f0e0, ~[RTMIN RT_1], SA_RESTORER, 0x7f19a447b430}, NULL, 8) = 0 rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f19a447b430}, NULL, 8) = 0 rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f19a447b430}, NULL, 8) = 0 read(10, "#!/bin/sh -f\n#\n# Copyright (c) 2"..., 8192) = 698 stat("/usr/local/sbin/xfs_db", 0x7fffa2d5d780) = -1 ENOENT (No such file or directory) stat("/usr/local/bin/xfs_db", 0x7fffa2d5d780) = -1 ENOENT (No such file or directory) stat("/usr/sbin/xfs_db", {st_mode=S_IFREG|0755, st_size=438344, ...}) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f19a49fc9f0) = 28929 wait4(-1, xfs_check: /dev/sdd is not a valid XFS filesystem (unexpected SB magic number 0x00000000) xfs_check: WARNING - filesystem uses v1 dirs,limited functionality provided. xfs_check: read failed: Invalid argument cache_node_purge: refcount was 1, not zero (node=0x21ecef0) xfs_check: cannot read root inode (22) bad superblock magic number 0, giving up [{WIFEXITED(s) && WEXITSTATUS(s) == 3}], 0, NULL) = 28929 --- SIGCHLD (Child exited) @ 0 (0) --- rt_sigreturn(0x11) = 28929 exit_group(3) = ? --Apple-Mail=_403304DB-FEF9-4A8F-A4B7-11EE97BC8733 Content-Disposition: attachment; filename=xfs_repair.strace Content-Type: application/octet-stream; name="xfs_repair.strace" Content-Transfer-Encoding: 7bit execve("/sbin/xfs_repair", ["xfs_repair", "/dev/sde"], [/* 21 vars */]) = 0 brk(0) = 0xcf5000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc82c5000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=23783, ...}) = 0 mmap(NULL, 23783, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4dc82bf000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libuuid.so.1", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\25\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0644, st_size=18896, ...}) = 0 mmap(NULL, 2113944, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4dc7ea2000 mprotect(0x7f4dc7ea6000, 2093056, PROT_NONE) = 0 mmap(0x7f4dc80a5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f4dc80a5000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200!\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0644, st_size=31752, ...}) = 0 mmap(NULL, 2128984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4dc7c9a000 mprotect(0x7f4dc7ca1000, 2093056, PROT_NONE) = 0 mmap(0x7f4dc7ea0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f4dc7ea0000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240k\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=135217, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc82be000 mmap(NULL, 2212888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4dc7a7d000 mprotect(0x7f4dc7a95000, 2093056, PROT_NONE) = 0 mmap(0x7f4dc7c94000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7f4dc7c94000 mmap(0x7f4dc7c96000, 13336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f4dc7c96000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1689912, ...}) = 0 mmap(NULL, 3806024, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4dc76db000 mprotect(0x7f4dc7872000, 2097152, PROT_NONE) = 0 mmap(0x7f4dc7a72000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x7f4dc7a72000 mmap(0x7f4dc7a77000, 21320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f4dc7a77000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc82bd000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc82bb000 arch_prctl(ARCH_SET_FS, 0x7f4dc82bb760) = 0 mprotect(0x7f4dc7a72000, 16384, PROT_READ) = 0 mprotect(0x7f4dc7c94000, 4096, PROT_READ) = 0 mprotect(0x7f4dc7ea0000, 4096, PROT_READ) = 0 mprotect(0x7f4dc80a5000, 4096, PROT_READ) = 0 mprotect(0x671000, 4096, PROT_READ) = 0 mprotect(0x7f4dc82c7000, 4096, PROT_READ) = 0 munmap(0x7f4dc82bf000, 23783) = 0 set_tid_address(0x7f4dc82bba30) = 28633 set_robust_list(0x7f4dc82bba40, 0x18) = 0 futex(0x7fffb24a3f1c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f4dc82bb760) = -1 EAGAIN (Resource temporarily unavailable) rt_sigaction(SIGRTMIN, {0x7f4dc7a83680, [], SA_RESTORER|SA_SIGINFO, 0x7f4dc7a8cc10}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0x7f4dc7a83710, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7f4dc7a8cc10}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 brk(0) = 0xcf5000 brk(0xd16000) = 0xd16000 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2919792, ...}) = 0 mmap(NULL, 2919792, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4dc7412000 close(3) = 0 getcwd("/root", 4096) = 6 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 ustat(0x840, 0x7fffb24a2950) = -1 EINVAL (Invalid argument) open("/dev/sde", O_RDONLY) = 3 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 ustat(0x840, 0x7fffb24a2950) = -1 EINVAL (Invalid argument) open("/dev/sde", O_RDWR|O_EXCL|O_DIRECT) = 4 fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 ioctl(4, BLKGETSIZE64, 0x7fffb24a2ac0) = 0 ioctl(4, BLKSSZGET, 0x6732e0) = 0 chdir("/root") = 0 brk(0xd37000) = 0xd37000 close(3) = 0 getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 time(NULL) = 1327310356 time(NULL) = 1327310356 open("/usr/share/locale/locale.alias", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc7411000 read(3, "# Locale name alias data base.\n#"..., 4096) = 2570 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f4dc7411000, 4096) = 0 open("/usr/share/locale/en_US/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale-langpack/en_US/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale-langpack/en/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, "Phase 1 - find and verify superb"..., 40Phase 1 - find and verify superblock... ) = 40 mmap(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc7391000 mmap(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4dc7310000 lseek(4, 0, SEEK_SET) = 0 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 524288) = 524288 munmap(0x7f4dc7310000, 528384) = 0 brk(0xd6d000) = 0xd6d000 lseek(4, 375075479552, SEEK_SET) = 375075479552 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 131072) = 131072 lseek(4, 750150959104, SEEK_SET) = 750150959104 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 131072) = 131072 lseek(4, 1125226438656, SEEK_SET) = 1125226438656 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 131072) = 131072 munmap(0x7f4dc7391000, 528384) = 0 time(NULL) = 1327310357 pread(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768, 0) = 32768 pread(4, "", 512, 1500301909504) = 0 write(2, "xfs_repair: error - read only 0 "..., 45xfs_repair: error - read only 0 of 512 bytes ) = 45 exit_group(1) = ? --Apple-Mail=_403304DB-FEF9-4A8F-A4B7-11EE97BC8733 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Do you have any idea what has caused this or how to fix it? Thanks in advance! Chris --Apple-Mail=_403304DB-FEF9-4A8F-A4B7-11EE97BC8733-- From lists@unixhosts.org Mon Jan 23 04:44:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NAi0JK089213 for ; Mon, 23 Jan 2012 04:44:00 -0600 X-ASG-Debug-ID: 1327315438-04cb6c198f24a5d0001-NocioJ Received: from mail-ey0-f181.google.com (mail-ey0-f181.google.com [209.85.215.181]) by cuda.sgi.com with ESMTP id do0gT1v0DRC1wm7t for ; Mon, 23 Jan 2012 02:43:59 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 209.85.215.181 Received: by eaal1 with SMTP id l1so1578938eaa.26 for ; Mon, 23 Jan 2012 02:43:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:content-type:from:in-reply-to:date:cc :message-id:references:to:x-mailer; bh=ek3OCkIwC1hpReOopdtE3XS4VqCwYI3gTCVK1OI8sr0=; b=rpraXF6/5Vf95QCpsJJWFBx4O9MPlCOA40g9f3+JyB3zF3U+71ronFpd+Z8WPTX9/a uTjobhTWH7mtcOF+ET4EJ6YpxeW/y4UywOAZtHI9JTIsp4/i6NN4Owt/lwStiz5j/M2W +2O52xlSF71KNNPAnOXoBuKrC9Ud6mU4cAZec= Received: by 10.213.9.8 with SMTP id j8mr1422466ebj.27.1327315438598; Mon, 23 Jan 2012 02:43:58 -0800 (PST) Received: from [10.1.250.14] (amy.unixhosts.org. [178.77.99.129]) by mx.google.com with ESMTPS id b49sm52246885eec.9.2012.01.23.02.43.56 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 23 Jan 2012 02:43:57 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Content-Type: multipart/mixed; boundary="Apple-Mail=_4840FB6A-E520-4F24-A8C5-D3E151150EB6" From: Christian Kildau In-Reply-To: <20120123043117.GH15102@dastard> Date: Mon, 23 Jan 2012 11:43:55 +0100 Cc: xfs@oss.sgi.com Message-Id: References: <20120123043117.GH15102@dastard> To: Dave Chinner X-Mailer: Apple Mail (2.1251.1) X-Barracuda-Connect: mail-ey0-f181.google.com[209.85.215.181] X-Barracuda-Start-Time: 1327315438 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86452 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 --Apple-Mail=_4840FB6A-E520-4F24-A8C5-D3E151150EB6 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Sorry, heres the right strace: --Apple-Mail=_4840FB6A-E520-4F24-A8C5-D3E151150EB6 Content-Disposition: attachment; filename=xfs_check.strace Content-Type: application/octet-stream; x-unix-mode=0644; name="xfs_check.strace" Content-Transfer-Encoding: 7bit execve("/usr/sbin/xfs_check", ["xfs_check", "/dev/sde"], [/* 20 vars */]) = 0 brk(0) = 0x13b9000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3935828000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=23783, ...}) = 0 mmap(NULL, 23783, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f3935822000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1689912, ...}) = 0 mmap(NULL, 3806024, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3935268000 mprotect(0x7f39353ff000, 2097152, PROT_NONE) = 0 mmap(0x7f39355ff000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x7f39355ff000 mmap(0x7f3935604000, 21320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3935604000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3935821000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f393581f000 arch_prctl(ARCH_SET_FS, 0x7f393581f720) = 0 mprotect(0x7f39355ff000, 16384, PROT_READ) = 0 mprotect(0x619000, 4096, PROT_READ) = 0 mprotect(0x7f393582a000, 4096, PROT_READ) = 0 munmap(0x7f3935822000, 23783) = 0 getpid() = 11387 rt_sigaction(SIGCHLD, {0x40f0e0, ~[RTMIN RT_1], SA_RESTORER, 0x7f393529e430}, NULL, 8) = 0 geteuid() = 0 brk(0) = 0x13b9000 brk(0x13da000) = 0x13da000 getppid() = 11386 stat("/home/mrkofee", {st_mode=S_IFDIR|S_ISGID|0770, st_size=4096, ...}) = 0 stat(".", {st_mode=S_IFDIR|S_ISGID|0770, st_size=4096, ...}) = 0 open("/usr/sbin/xfs_check", O_RDONLY) = 3 fcntl(3, F_DUPFD, 10) = 10 close(3) = 0 fcntl(10, F_SETFD, FD_CLOEXEC) = 0 rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, {0x40f0e0, ~[RTMIN RT_1], SA_RESTORER, 0x7f393529e430}, NULL, 8) = 0 rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f393529e430}, NULL, 8) = 0 rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f393529e430}, NULL, 8) = 0 read(10, "#!/bin/sh -f\n#\n# Copyright (c) 2"..., 8192) = 698 stat("/usr/local/sbin/xfs_db", 0x7fff67038140) = -1 ENOENT (No such file or directory) stat("/usr/local/bin/xfs_db", 0x7fff67038140) = -1 ENOENT (No such file or directory) stat("/usr/sbin/xfs_db", {st_mode=S_IFREG|0755, st_size=438344, ...}) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f393581f9f0) = 11388 wait4(-1, xfs_check: error - read only 0 of 512 bytes [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 11388 --- SIGCHLD (Child exited) @ 0 (0) --- rt_sigreturn(0x11) = 11388 exit_group(0) = ? --Apple-Mail=_4840FB6A-E520-4F24-A8C5-D3E151150EB6 Content-Disposition: attachment; filename=xfs_repair.strace Content-Type: application/octet-stream; x-unix-mode=0644; name="xfs_repair.strace" Content-Transfer-Encoding: 7bit execve("/sbin/xfs_repair", ["xfs_repair", "/dev/sde"], [/* 20 vars */]) = 0 brk(0) = 0x846000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7a0405000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=23783, ...}) = 0 mmap(NULL, 23783, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe7a03ff000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libuuid.so.1", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\25\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0644, st_size=18896, ...}) = 0 mmap(NULL, 2113944, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe79ffe2000 mprotect(0x7fe79ffe6000, 2093056, PROT_NONE) = 0 mmap(0x7fe7a01e5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fe7a01e5000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200!\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0644, st_size=31752, ...}) = 0 mmap(NULL, 2128984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe79fdda000 mprotect(0x7fe79fde1000, 2093056, PROT_NONE) = 0 mmap(0x7fe79ffe0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fe79ffe0000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240k\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=135217, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7a03fe000 mmap(NULL, 2212888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe79fbbd000 mprotect(0x7fe79fbd5000, 2093056, PROT_NONE) = 0 mmap(0x7fe79fdd4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7fe79fdd4000 mmap(0x7fe79fdd6000, 13336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe79fdd6000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1689912, ...}) = 0 mmap(NULL, 3806024, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fe79f81b000 mprotect(0x7fe79f9b2000, 2097152, PROT_NONE) = 0 mmap(0x7fe79fbb2000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x7fe79fbb2000 mmap(0x7fe79fbb7000, 21320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe79fbb7000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7a03fd000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7a03fb000 arch_prctl(ARCH_SET_FS, 0x7fe7a03fb760) = 0 mprotect(0x7fe79fbb2000, 16384, PROT_READ) = 0 mprotect(0x7fe79fdd4000, 4096, PROT_READ) = 0 mprotect(0x7fe79ffe0000, 4096, PROT_READ) = 0 mprotect(0x7fe7a01e5000, 4096, PROT_READ) = 0 mprotect(0x671000, 4096, PROT_READ) = 0 mprotect(0x7fe7a0407000, 4096, PROT_READ) = 0 munmap(0x7fe7a03ff000, 23783) = 0 set_tid_address(0x7fe7a03fba30) = 11699 set_robust_list(0x7fe7a03fba40, 0x18) = 0 futex(0x7fff0d90d54c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7fe7a03fb760) = -1 EAGAIN (Resource temporarily unavailable) rt_sigaction(SIGRTMIN, {0x7fe79fbc3680, [], SA_RESTORER|SA_SIGINFO, 0x7fe79fbccc10}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0x7fe79fbc3710, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fe79fbccc10}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 brk(0) = 0x846000 brk(0x867000) = 0x867000 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2919792, ...}) = 0 mmap(NULL, 2919792, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe79f552000 close(3) = 0 getcwd("/home/mrkofee", 4096) = 14 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 ustat(0x840, 0x7fff0d90bf80) = -1 EINVAL (Invalid argument) open("/dev/sde", O_RDONLY) = 3 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 stat("/dev/sde", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 ustat(0x840, 0x7fff0d90bf80) = -1 EINVAL (Invalid argument) open("/dev/sde", O_RDWR|O_EXCL|O_DIRECT) = 4 fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 64), ...}) = 0 ioctl(4, BLKGETSIZE64, 0x7fff0d90c0f0) = 0 ioctl(4, BLKSSZGET, 0x6732e0) = 0 chdir("/home/mrkofee") = 0 brk(0x888000) = 0x888000 close(3) = 0 getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 time(NULL) = 1327315350 time(NULL) = 1327315350 open("/usr/share/locale/locale.alias", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe79f551000 read(3, "# Locale name alias data base.\n#"..., 4096) = 2570 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7fe79f551000, 4096) = 0 open("/usr/share/locale/en_US/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale-langpack/en_US/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale-langpack/en/LC_MESSAGES/xfsprogs.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, "Phase 1 - find and verify superb"..., 40Phase 1 - find and verify superblock... ) = 40 mmap(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe79f4d1000 mmap(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe79f450000 lseek(4, 0, SEEK_SET) = 0 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 524288) = 524288 munmap(0x7fe79f450000, 528384) = 0 brk(0x8be000) = 0x8be000 lseek(4, 375075479552, SEEK_SET) = 375075479552 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 131072) = 131072 lseek(4, 750150959104, SEEK_SET) = 750150959104 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 131072) = 131072 lseek(4, 1125226438656, SEEK_SET) = 1125226438656 read(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 131072) = 131072 munmap(0x7fe79f4d1000, 528384) = 0 time(NULL) = 1327315350 pread(4, "XFSB\0\0\20\0\0\0\0\0\25\325\17f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768, 0) = 32768 pread(4, "", 512, 1500301909504) = 0 write(2, "xfs_repair: error - read only 0 "..., 45xfs_repair: error - read only 0 of 512 bytes ) = 45 exit_group(1) = ? --Apple-Mail=_4840FB6A-E520-4F24-A8C5-D3E151150EB6 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii All other output was correct! On Jan 23, 2012, at 5:31 AM, Dave Chinner wrote: > On Sat, Jan 21, 2012 at 11:29:15AM +0100, Christian Kildau wrote: >> Sorry if this message appears twice! >> >> >> >> Hello, >> >> I'm having some very serious issues with XFS after upgrading from a >> Linux Distro running Ubuntu 2.6.32 to 3.2. >> >> It seems like my filesystems are damaged after attaching them to a >> Linux 3.2 server. I am also no longer able to mount the hdd on the old >> server that is still running 2.6.32! > > I take it that you are using external storage of some kind? Can you > describe it? > >> (I created the xfs filesystem on the entire hdd, not on a partition, >> so /dev/sdd is not a typo) >> >> $ sudo mount -t xfs /dev/sdd /media/ >> mount: /dev/sdd: can't read superblock >> (dmesg) >> [236659.912663] attempt to access beyond end of device >> [236659.912667] sdd: rw=32, want=2930277168, limit=2930275055 >> [236659.912670] XFS (sdd): last sector read failed > > So XFS has asked to read 2113 sectors beyond the size of the device > that the kernel is reporting. What is the output of > /proc/partitions? > >> $ sudo xfs_check /dev/sdd >> xfs_check: error - read only 0 of 512 bytes >> >> $ sudo xfs_repair /dev/sdd >> Phase 1 - find and verify superblock... >> xfs_repair: error - read only 0 of 512 bytes > > So both buffered and direct IO to the first block in the block > device are failing. I'd say your problems have nothing to do with > XFS. However, can you strace them and find out what the error that > is occuring actually is? > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com --Apple-Mail=_4840FB6A-E520-4F24-A8C5-D3E151150EB6-- From tinguely@sgi.com Mon Jan 23 08:31:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NEUx8N108182 for ; Mon, 23 Jan 2012 08:31:00 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id C63A48F8040; Mon, 23 Jan 2012 06:30:56 -0800 (PST) Message-ID: <4F1D6F24.6050509@sgi.com> Date: Mon, 23 Jan 2012 08:31:00 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 03/12] xfs: remove xfs_trans_unlocked_item References: <20111212141346.986825692@bombadil.infradead.org> <20111212141433.885467482@bombadil.infradead.org> In-Reply-To: <20111212141433.885467482@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > There is no reason to wake up log space waiters when unlocking inodes or > dquots, and the commit log has no explanation for this function either. > > Given that we now have exact log space wakeups everywhere we can assume > to reason for this function was to paper over log space races in earlier > XFS versions. > > Signed-off-by: Christoph Hellwig I agree, these unlock won't change the amount of available log space. I did not find the exact reason for these original calls the the log space wake routines. Reviewed-by: Mark Tinguely From nina.boes@tuerkei-tours.net Mon Jan 23 10:18:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, T_URIBL_SEM_FRESH_15,URIBL_DBL_SPAM autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NGIuRn116937 for ; Mon, 23 Jan 2012 10:18:57 -0600 X-ASG-Debug-ID: 1327335533-04cb6c198d265890001-NocioJ Received: from ip15.feintours.net (ip15.feintours.net [78.41.80.15]) by cuda.sgi.com with ESMTP id 1TladyQOo3keyaCS for ; Mon, 23 Jan 2012 08:18:54 -0800 (PST) X-Barracuda-Envelope-From: nina.boes@tuerkei-tours.net X-Barracuda-Apparent-Source-IP: 78.41.80.15 Received: from medion (tmo-106-145.customers.d1-online.com [80.187.106.145]) by ip15.feintours.net (Postfix) with ESMTPA id D2C161183E41 for ; Mon, 23 Jan 2012 16:54:34 +0100 (CET) Message-ID: <5288120.1327335401035.NGMail.u92668751@h1078030660> Date: Mon, 23 Jan 2012 17:16:40 +0100 (CET) From: Nina Boes Reply-To: Nina Boes To: xfs@oss.sgi.com Subject: =?Windows-1252?Q?8_Tage_T=FCrkei_inkl._Hotel_u._Flug__118,-_Euro?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?Windows-1252?Q?8_Tage_T=FCrkei_inkl._Hotel_u._Flug__118,-_Euro?= Content-Type: text/plain; charset=Windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: ip15.feintours.net[78.41.80.15] X-Barracuda-Start-Time: 1327335534 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86476 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Sehr geehrte Damen und Herren, folgendes Angebot k=F6nnen wir Ihnen heute unterbreiten: 8 t=E4gige Reise in die T=FCrkei f=FCr max. 4 Personen ab 118 Euro p. Perso= n. Diese Restpl=E4tze sind nur in einer begrenzten Anzahl verf=FCgbar da ein R= eiseveranstalter fest gebucht hat, diese aber nicht alle verkaufen konnte. Sie brauchen nur die Buchungsgeb=FChr und den Kerosinzuschlag bezahlen. Dies beinhaltet Ihre Reise: - Hin- und R=FCckflug mit renommierter Fluggesellschaft - 20 kg Freigep=E4ck - Transfer Flughafen - Hotel - Flughafen - 7 =DCbernachtungen in mind. 4/5 Sterne Hotels - inkl. Fr=FChst=FCck - Reiseleitung - =DCbernachtung im Doppelzimmer Ihre Reisenummer: REST112 Bitte best=E4tigen Sie Ihre Reise unter: www.tuerkei-tours.net (sollte sich der Link nicht durch klicken =F6ffnen lassen, kopieren Sie ihn= bitte in die Adresszeile Ihres Browsers) Bitte melden Sie Ihre Reise bis zum 28.01.2012 an. Wir freuen uns mit Ihnen und w=FCnschen schon jetzt eine angenehme Reise! =20 Mit freundlichen Gru=DF Nina Boes Restplatzb=F6rse / Buchungszentrum From sekharan@us.ibm.com Mon Jan 23 11:31:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHVXfa122726 for ; Mon, 23 Jan 2012 11:31:33 -0600 X-ASG-Debug-ID: 1327339891-04bdf067b8320ca0001-NocioJ Received: from e33.co.us.ibm.com (e33.co.us.ibm.com [32.97.110.151]) by cuda.sgi.com with ESMTP id 09hJjrdtgifYgoT2 for ; Mon, 23 Jan 2012 09:31:32 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.151 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] Received: from /spool/local by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:31:31 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.151] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e33.co.us.ibm.com (192.168.1.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:31:29 -0700 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 0D63E1FF0049 for ; Mon, 23 Jan 2012 10:31:29 -0700 (MST) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHVQ1J269800 for ; Mon, 23 Jan 2012 12:31:26 -0500 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHVP7t004524 for ; Mon, 23 Jan 2012 10:31:25 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHVPQM004515; Mon, 23 Jan 2012 10:31:25 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:31:25 -0600 Message-Id: <20120123173125.31546.2342.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC PATCH 1/4] Define a new function xfs_this_quota_on() X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC PATCH 1/4] Define a new function xfs_this_quota_on() x-cbid: 12012317-2398-0000-0000-0000039E6269 X-Barracuda-Connect: e33.co.us.ibm.com[32.97.110.151] X-Barracuda-Start-Time: 1327339892 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Create a new function xfs_this_quota_on() that takes a xfs_mount data srtucture and a disk quota type and returns true if the specified type of quota is ON in the xfs_mount data structure. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_dquot.c | 4 ++-- fs/xfs/xfs_dquot.h | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h index a1d91d8..221b22e 100644 --- a/fs/xfs/xfs_dquot.h +++ b/fs/xfs/xfs_dquot.h @@ -115,6 +115,20 @@ static inline void xfs_dqunlock_nonotify(struct xfs_dquot *dqp) mutex_unlock(&dqp->q_qlock); } +static inline int xfs_this_quota_on(struct xfs_mount *mp, int type) +{ + type &= XFS_DQ_ALLTYPES; + switch(type) { + case XFS_DQ_USER: + return XFS_IS_UQUOTA_ON(mp); + case XFS_DQ_GROUP: + case XFS_DQ_PROJ: + return XFS_IS_OQUOTA_ON(mp); + default: + return 0; + } +} + #define XFS_DQ_IS_LOCKED(dqp) (mutex_is_locked(&((dqp)->q_qlock))) #define XFS_DQ_IS_DIRTY(dqp) ((dqp)->dq_flags & XFS_DQ_DIRTY) #define XFS_QM_ISUDQ(dqp) ((dqp)->dq_flags & XFS_DQ_USER) @@ -125,10 +139,6 @@ static inline void xfs_dqunlock_nonotify(struct xfs_dquot *dqp) XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ XFS_DQ_TO_QINF(dqp)->qi_gquotaip) -#define XFS_IS_THIS_QUOTA_OFF(d) (! (XFS_QM_ISUDQ(d) ? \ - (XFS_IS_UQUOTA_ON((d)->q_mount)) : \ - (XFS_IS_OQUOTA_ON((d)->q_mount)))) - extern int xfs_qm_dqread(struct xfs_mount *, xfs_dqid_t, uint, uint, struct xfs_dquot **); extern void xfs_qm_dqdestroy(xfs_dquot_t *); diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index b4ff40b..4c8b3d2 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -358,7 +358,7 @@ xfs_qm_dqalloc( * Return if this type of quotas is turned off while we didn't * have an inode lock */ - if (XFS_IS_THIS_QUOTA_OFF(dqp)) { + if (!xfs_this_quota_on(dqp->q_mount, dqp->dq_flags)) { xfs_iunlock(quotip, XFS_ILOCK_EXCL); return (ESRCH); } @@ -460,7 +460,7 @@ xfs_qm_dqtobp( dqp->q_fileoffset = (xfs_fileoff_t)id / mp->m_quotainfo->qi_dqperchunk; xfs_ilock(quotip, XFS_ILOCK_SHARED); - if (XFS_IS_THIS_QUOTA_OFF(dqp)) { + if (!xfs_this_quota_on(dqp->q_mount, dqp->dq_flags)) { /* * Return if this type of quotas is turned off while we * didn't have the quota inode lock. -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:31:58 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHVvxI122771 for ; Mon, 23 Jan 2012 11:31:58 -0600 X-ASG-Debug-ID: 1327339916-04cb6c198f26b540001-NocioJ Received: from e36.co.us.ibm.com (e36.co.us.ibm.com [32.97.110.154]) by cuda.sgi.com with ESMTP id 4ZPJBeAECIeZtd2S for ; Mon, 23 Jan 2012 09:31:57 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.154 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from /spool/local by e36.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:31:55 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e36.co.us.ibm.com (192.168.1.136) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:31:33 -0700 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 0AFCF1FF0048 for ; Mon, 23 Jan 2012 10:31:32 -0700 (MST) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHVWYd227466 for ; Mon, 23 Jan 2012 12:31:32 -0500 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHVVZw002098 for ; Mon, 23 Jan 2012 12:31:32 -0500 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHVVOf002032; Mon, 23 Jan 2012 12:31:31 -0500 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:31:30 -0600 Message-Id: <20120123173130.31546.80744.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() x-cbid: 12012317-3352-0000-0000-0000021E7F42 X-Barracuda-Connect: e36.co.us.ibm.com[32.97.110.154] X-Barracuda-Start-Time: 1327339916 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Define a new function xfs_inode_dquot() that takes a inode pointer and a disk quota type and returns the quota pointer for the specified quota type. This simplifies the xfs_qm_dqget() error path significantly. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_dquot.c | 33 +++++++++------------------------ fs/xfs/xfs_dquot.h | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h index 221b22e..41cb5f4 100644 --- a/fs/xfs/xfs_dquot.h +++ b/fs/xfs/xfs_dquot.h @@ -129,6 +129,20 @@ static inline int xfs_this_quota_on(struct xfs_mount *mp, int type) } } +static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) +{ + type &= XFS_DQ_ALLTYPES; + switch(type) { + case XFS_DQ_USER: + return ip->i_udquot; + case XFS_DQ_PROJ: + case XFS_DQ_GROUP: + return ip->i_gdquot; + default: + return NULL; + } +} + #define XFS_DQ_IS_LOCKED(dqp) (mutex_is_locked(&((dqp)->q_qlock))) #define XFS_DQ_IS_DIRTY(dqp) ((dqp)->dq_flags & XFS_DQ_DIRTY) #define XFS_QM_ISUDQ(dqp) ((dqp)->dq_flags & XFS_DQ_USER) diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index 4c8b3d2..bf4fe86 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -723,7 +723,7 @@ xfs_qm_dqget( uint flags, /* DQALLOC, DQSUSER, DQREPAIR, DOWARN */ xfs_dquot_t **O_dqpp) /* OUT : locked incore dquot */ { - xfs_dquot_t *dqp; + xfs_dquot_t *dqp, *dqp1; xfs_dqhash_t *h; uint version; int error; @@ -750,10 +750,7 @@ xfs_qm_dqget( type == XFS_DQ_GROUP); if (ip) { ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - if (type == XFS_DQ_USER) - ASSERT(ip->i_udquot == NULL); - else - ASSERT(ip->i_gdquot == NULL); + ASSERT(xfs_inode_dquot(ip, type) == NULL); } #endif @@ -819,30 +816,18 @@ restart: * A dquot could be attached to this inode by now, since * we had dropped the ilock. */ - if (type == XFS_DQ_USER) { - if (!XFS_IS_UQUOTA_ON(mp)) { - /* inode stays locked on return */ - xfs_qm_dqdestroy(dqp); - return XFS_ERROR(ESRCH); - } - if (ip->i_udquot) { + if (xfs_this_quota_on(mp, type)) { + dqp1 = xfs_inode_dquot(ip, type); + if (dqp1) { xfs_qm_dqdestroy(dqp); - dqp = ip->i_udquot; + dqp = dqp1; xfs_dqlock(dqp); goto dqret; } } else { - if (!XFS_IS_OQUOTA_ON(mp)) { - /* inode stays locked on return */ - xfs_qm_dqdestroy(dqp); - return XFS_ERROR(ESRCH); - } - if (ip->i_gdquot) { - xfs_qm_dqdestroy(dqp); - dqp = ip->i_gdquot; - xfs_dqlock(dqp); - goto dqret; - } + /* inode stays locked on return */ + xfs_qm_dqdestroy(dqp); + return XFS_ERROR(ESRCH); } } -- 1.7.1 From sandeen@redhat.com Mon Jan 23 11:31:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHVxK7122778 for ; Mon, 23 Jan 2012 11:31:59 -0600 X-ASG-Debug-ID: 1327339917-04cbb0302537e3a0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id pHpjmEg4r8jDMpo4 for ; Mon, 23 Jan 2012 09:31:57 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 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 q0NHVtpb010091 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 23 Jan 2012 12:31:55 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0NHVrsk012413 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Mon, 23 Jan 2012 12:31:54 -0500 Message-ID: <4F1D9989.8060808@redhat.com> Date: Mon, 23 Jan 2012 11:31:53 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs-oss CC: James Lawrie Subject: [PATCH] xfsprogs: check for size parsing errors in xfs_quota X-Enigmail-Version: 1.3.4 X-ASG-Orig-Subj: [PATCH] xfsprogs: check for size parsing errors in xfs_quota Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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: 1327339917 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86479 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Doing something like # xfs_quota -x -c 'limit -u bhard=1.2g ... will cause cvtnum to fail and return a value of -1LL (because it cannot parse the decimal), but the quota caller doesn't check for this error value, casts it to U64, shifts right, and we end up with an answer of 16 petabytes rather than erroring out. Fix this. Reported-by: James Lawrie Signed-off-by: Eric Sandeen --- diff --git a/quota/edit.c b/quota/edit.c index b704e63..067cd63 100644 --- a/quota/edit.c +++ b/quota/edit.c @@ -226,13 +226,17 @@ extractb( uint sectorsize, __uint64_t *value) { - __uint64_t v; + long long v; char *s = string; if (strncmp(string, prefix, length) == 0) { s = string + length + 1; - v = (__uint64_t)cvtnum(blocksize, sectorsize, s); - *value = v >> 9; /* syscalls use basic blocks */ + v = cvtnum(blocksize, sectorsize, s); + if (v == -1LL) { + fprintf(stderr, _("%s: Error: could not parse size %s.\n"), progname, s); + return 0; + } + *value = (__uint64_t)v >> 8; /* syscalls use basic blocks */ if (v > 0 && *value == 0) fprintf(stderr, _("%s: Warning: `%s' in quota blocks is 0 (unlimited).\n"), progname, s); return 1; From sekharan@us.ibm.com Mon Jan 23 11:32:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWCm7122812 for ; Mon, 23 Jan 2012 11:32:12 -0600 X-ASG-Debug-ID: 1327339931-04cb6c198d26b590001-NocioJ Received: from e36.co.us.ibm.com (e36.co.us.ibm.com [32.97.110.154]) by cuda.sgi.com with ESMTP id ocGYePU1fAUUWhHp for ; Mon, 23 Jan 2012 09:32:11 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.154 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from /spool/local by e36.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:11 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e36.co.us.ibm.com (192.168.1.136) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:08 -0700 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 38B6E19D806D for ; Mon, 23 Jan 2012 10:32:05 -0700 (MST) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHW6A43215598 for ; Mon, 23 Jan 2012 12:32:06 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHW5p2021260 for ; Mon, 23 Jan 2012 15:32:05 -0200 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHW5H5021155; Mon, 23 Jan 2012 15:32:05 -0200 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:04 -0600 Message-Id: <20120123173204.31640.53918.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC v3 PATCH 1/4] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC v3 PATCH 1/4] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD x-cbid: 12012317-3352-0000-0000-0000021E7FFD X-Barracuda-Connect: e36.co.us.ibm.com[32.97.110.154] X-Barracuda-Start-Time: 1327339931 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Define new macros XFS_GQUOTA_ENFD, XFS_GQUOTA_CHKD, XFS_PQUOTA_ENFD, and XFS_PQUOTA_CHKD. Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts. No changes is made to the on-disk version of the superblock yet. On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_mount.c | 30 ++++++++++++++++++++++++++++++ fs/xfs/xfs_qm.c | 9 ++++++--- fs/xfs/xfs_qm_syscalls.c | 26 ++++++++++++++------------ fs/xfs/xfs_quota.h | 36 +++++++++++++++++++++++++----------- fs/xfs/xfs_quotaops.c | 6 ++++-- fs/xfs/xfs_super.c | 16 ++++++++-------- fs/xfs/xfs_trans_dquot.c | 4 ++-- 7 files changed, 89 insertions(+), 38 deletions(-) diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index b50ec5b..d7205b0 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -152,19 +152,34 @@ typedef struct xfs_qoff_logformat { #define XFS_GQUOTA_ACCT 0x0040 /* group quota accounting ON */ /* + * Start differentiating group quota and project quota in-core + * using distinct flags, instead of using the combined OQUOTA flags. + * + * Conversion to and from the combined OQUOTA flag (if necessary) + * is done only in xfs_sb_{to,from}_disk() + */ +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ + +/* * Quota Accounting/Enforcement flags */ #define XFS_ALL_QUOTA_ACCT \ (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT) -#define XFS_ALL_QUOTA_ENFD (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD) -#define XFS_ALL_QUOTA_CHKD (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD) +#define XFS_ALL_QUOTA_ENFD \ + (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD) +#define XFS_ALL_QUOTA_CHKD \ + (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD) #define XFS_IS_QUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT) #define XFS_IS_UQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_UQUOTA_ACCT) #define XFS_IS_PQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_PQUOTA_ACCT) #define XFS_IS_GQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_GQUOTA_ACCT) #define XFS_IS_UQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_UQUOTA_ENFD) -#define XFS_IS_OQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_OQUOTA_ENFD) +#define XFS_IS_PQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_PQUOTA_ENFD) +#define XFS_IS_GQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_GQUOTA_ENFD) /* * Incore only flags for quotaoff - these bits get cleared when quota(s) @@ -259,24 +274,23 @@ typedef struct xfs_qoff_logformat { ((XFS_IS_UQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \ (XFS_IS_GQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT))) || \ + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD) == 0) || \ (XFS_IS_PQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT)))) + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) #define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) #define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD|\ - XFS_GQUOTA_ACCT) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|\ + XFS_GQUOTA_CHKD) /* diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 25e9908..64313e4 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -593,6 +593,20 @@ xfs_sb_from_disk( to->sb_uquotino = be64_to_cpu(from->sb_uquotino); to->sb_gquotino = be64_to_cpu(from->sb_gquotino); to->sb_qflags = be16_to_cpu(from->sb_qflags); + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && + (to->sb_qflags & (XFS_PQUOTA_ENFD |XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD| XFS_GQUOTA_CHKD))) { + xfs_notice(mp, "Super block has XFS_OQUOTA bits along with " + "XFS_PQUOTA and/or XFS_GQUOTA bits. Fixing it.\n"); + } + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + to->sb_flags = from->sb_flags; to->sb_shared_vn = from->sb_shared_vn; to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); @@ -622,11 +636,26 @@ xfs_sb_to_disk( xfs_sb_field_t f; int first; int size; + __be16 saved_qflags; ASSERT(fields); if (!fields) return; + /* + * in-core version of qflags do not have XFS_OQUOTA.*, whereas the + * on-disk version does. So, save the in-core sb_qflags and restore + * it after we modify and copy it to the buffer to be copied to + * disk. + */ + saved_qflags = from->sb_qflags; + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + from->sb_qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + from->sb_qflags |= XFS_OQUOTA_CHKD; + from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); while (fields) { f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); first = xfs_sb_info[f].offset; @@ -657,6 +686,7 @@ xfs_sb_to_disk( fields &= ~(1LL << f); } + from->sb_qflags = saved_qflags; } /* diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 1b2f5b3..bb8c2ac 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -313,8 +313,10 @@ xfs_qm_mount_quotas( */ if (!XFS_IS_UQUOTA_ON(mp)) mp->m_qflags &= ~XFS_UQUOTA_CHKD; - if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) - mp->m_qflags &= ~XFS_OQUOTA_CHKD; + if (!XFS_IS_GQUOTA_ON(mp)) + mp->m_qflags &= ~XFS_GQUOTA_CHKD; + if (!XFS_IS_PQUOTA_ON(mp)) + mp->m_qflags &= ~XFS_PQUOTA_CHKD; write_changes: /* @@ -1449,7 +1451,8 @@ xfs_qm_quotacheck( XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); if (error) goto error_return; - flags |= XFS_OQUOTA_CHKD; + flags |= XFS_IS_GQUOTA_ON(mp) ? + XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; } do { diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index eafbcff..d43c68c 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -121,11 +121,11 @@ xfs_qm_scall_quotaoff( } if (flags & XFS_GQUOTA_ACCT) { dqtype |= XFS_QMOPT_GQUOTA; - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); + flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); inactivate_flags |= XFS_GQUOTA_ACTIVE; } else if (flags & XFS_PQUOTA_ACCT) { dqtype |= XFS_QMOPT_PQUOTA; - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); + flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); inactivate_flags |= XFS_PQUOTA_ACTIVE; } @@ -349,9 +349,11 @@ xfs_qm_scall_quotaon( || ((flags & XFS_PQUOTA_ACCT) == 0 && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && - (flags & XFS_GQUOTA_ACCT) == 0 && + (flags & XFS_PQUOTA_ENFD)) + || + ((flags & XFS_GQUOTA_ACCT) == 0 && (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && - (flags & XFS_OQUOTA_ENFD))) { + (flags & XFS_GQUOTA_ENFD))) { xfs_debug(mp, "%s: Can't enforce without acct, flags=%x sbflags=%x\n", __func__, flags, mp->m_sb.sb_qflags); @@ -801,8 +803,8 @@ xfs_qm_export_dquot( * so return zeroes in that case. */ if ((!XFS_IS_UQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_USER) || - (!XFS_IS_OQUOTA_ENFORCED(mp) && - (src->d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { + (!XFS_IS_PQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_PROJ) || + (!XFS_IS_GQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_GROUP)) { dst->d_btimer = 0; dst->d_itimer = 0; dst->d_rtbtimer = 0; @@ -810,8 +812,8 @@ xfs_qm_export_dquot( #ifdef DEBUG if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == FS_USER_QUOTA) || - (XFS_IS_OQUOTA_ENFORCED(mp) && - (dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) && + (XFS_IS_PQUOTA_ENFORCED(mp) && dst->d_flags == FS_PROJ_QUOTA) || + (XFS_IS_GQUOTA_ENFORCED(mp) && dst->d_flags == FS_GROUP_QUOTA)) && dst->d_id != 0) { if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && (dst->d_blk_softlimit > 0)) { @@ -860,10 +862,10 @@ xfs_qm_export_flags( uflags |= FS_QUOTA_GDQ_ACCT; if (flags & XFS_UQUOTA_ENFD) uflags |= FS_QUOTA_UDQ_ENFD; - if (flags & (XFS_OQUOTA_ENFD)) { - uflags |= (flags & XFS_GQUOTA_ACCT) ? - FS_QUOTA_GDQ_ENFD : FS_QUOTA_PDQ_ENFD; - } + if (flags & XFS_PQUOTA_ENFD) + uflags |= FS_QUOTA_PDQ_ENFD; + if (flags & XFS_GQUOTA_ENFD) + uflags |= FS_QUOTA_GDQ_ENFD; return (uflags); } diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c index 7e76f53..be5389e 100644 --- a/fs/xfs/xfs_quotaops.c +++ b/fs/xfs/xfs_quotaops.c @@ -76,8 +76,10 @@ xfs_fs_set_xstate( flags |= XFS_GQUOTA_ACCT; if (uflags & FS_QUOTA_UDQ_ENFD) flags |= XFS_UQUOTA_ENFD; - if (uflags & (FS_QUOTA_PDQ_ENFD|FS_QUOTA_GDQ_ENFD)) - flags |= XFS_OQUOTA_ENFD; + if (uflags & FS_QUOTA_PDQ_ENFD) + flags |= XFS_PQUOTA_ENFD; + if (uflags & FS_QUOTA_GDQ_ENFD) + flags |= XFS_GQUOTA_ENFD; switch (op) { case Q_XQUOTAON: diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 5e0d43f..01de9f9 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -339,17 +339,17 @@ xfs_parseargs( } else if (!strcmp(this_char, MNTOPT_PQUOTA) || !strcmp(this_char, MNTOPT_PRJQUOTA)) { mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | - XFS_OQUOTA_ENFD); + XFS_PQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) { mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); - mp->m_qflags &= ~XFS_OQUOTA_ENFD; + mp->m_qflags &= ~XFS_PQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_GQUOTA) || !strcmp(this_char, MNTOPT_GRPQUOTA)) { mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | - XFS_OQUOTA_ENFD); + XFS_GQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); - mp->m_qflags &= ~XFS_OQUOTA_ENFD; + mp->m_qflags &= ~XFS_GQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) { xfs_warn(mp, "delaylog is the default now, option is deprecated."); @@ -542,12 +542,12 @@ xfs_showargs( /* Either project or group quotas can be active, not both */ if (mp->m_qflags & XFS_PQUOTA_ACCT) { - if (mp->m_qflags & XFS_OQUOTA_ENFD) + if (mp->m_qflags & XFS_PQUOTA_ENFD) seq_puts(m, "," MNTOPT_PRJQUOTA); else seq_puts(m, "," MNTOPT_PQUOTANOENF); } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { - if (mp->m_qflags & XFS_OQUOTA_ENFD) + if (mp->m_qflags & XFS_GQUOTA_ENFD) seq_puts(m, "," MNTOPT_GRPQUOTA); else seq_puts(m, "," MNTOPT_GQUOTANOENF); @@ -1059,8 +1059,8 @@ xfs_fs_statfs( spin_unlock(&mp->m_sb_lock); if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) || - ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) == - (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD)) + ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) == + (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD)) xfs_qm_statvfs(ip, statp); return 0; } diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 4d00ee6..bea957d 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -640,8 +640,8 @@ xfs_trans_dqresv( if ((flags & XFS_QMOPT_FORCE_RES) == 0 && dqp->q_core.d_id && ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) || - (XFS_IS_OQUOTA_ENFORCED(dqp->q_mount) && - (XFS_QM_ISPDQ(dqp) || XFS_QM_ISGDQ(dqp))))) { + (XFS_IS_PQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISPDQ(dqp)) || + (XFS_IS_GQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISGDQ(dqp)))) { if (nblks > 0) { /* * dquot is locked already. See if we'd go over the -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:32:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWMlg122841 for ; Mon, 23 Jan 2012 11:32:22 -0600 X-ASG-Debug-ID: 1327339941-04cbb0302737e420001-NocioJ Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by cuda.sgi.com with ESMTP id 4fa7aJ7To6H5JfWn for ; Mon, 23 Jan 2012 09:32:21 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.150 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:20 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e32.co.us.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:31:30 -0700 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 93BCF3E40066 for ; Mon, 23 Jan 2012 10:31:22 -0700 (MST) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHVLuw185926 for ; Mon, 23 Jan 2012 12:31:21 -0500 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHVKMd020438 for ; Mon, 23 Jan 2012 12:31:20 -0500 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHVJvA020397; Mon, 23 Jan 2012 12:31:19 -0500 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:31:18 -0600 Message-Id: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC PATCH 0/4] Rearrange code to make the code more readable X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC PATCH 0/4] Rearrange code to make the code more readable x-cbid: 12012317-3270-0000-0000-0000036DA1D5 X-Barracuda-Connect: e32.co.us.ibm.com[32.97.110.150] X-Barracuda-Start-Time: 1327339941 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-URL-Found: marc.info (*Spam.Advertising) Hello All, These define some new inline functions and macros, rearrange the code for easier reading, simplification of code paths and prepare for the changes to support pquota and gquota simultaneously. This is just a repost of the patch posted on 10/27/2011: http://marc.info/?l=linux-xfs&m=131975420304313&w=2 Regards, chandra From sekharan@us.ibm.com Mon Jan 23 11:32:26 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_48, J_CHICKENPOX_64,J_CHICKENPOX_65,LOCAL_GNU_PATCH,TO_NO_BRKTS_PCNT autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWPBw122856 for ; Mon, 23 Jan 2012 11:32:26 -0600 X-ASG-Debug-ID: 1327339943-04bdf067b531fe50001-NocioJ Received: from e36.co.us.ibm.com (e36.co.us.ibm.com [32.97.110.154]) by cuda.sgi.com with ESMTP id yiq2qmvJQ8ADM1D5 for ; Mon, 23 Jan 2012 09:32:23 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.154 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from /spool/local by e36.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:23 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.154] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e36.co.us.ibm.com (192.168.1.136) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:21 -0700 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 1C7DB3E40060 for ; Mon, 23 Jan 2012 10:32:20 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHWIxf232550 for ; Mon, 23 Jan 2012 12:32:18 -0500 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHWEpo011551 for ; Mon, 23 Jan 2012 10:32:14 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHWBuF011247; Mon, 23 Jan 2012 10:32:11 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:11 -0600 Message-Id: <20120123173210.31640.96565.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC v3 PATCH 2/4] xfs: Add pquota fields where gquota is used. X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC v3 PATCH 2/4] xfs: Add pquota fields where gquota is used. x-cbid: 12012317-3352-0000-0000-0000021E804E X-Barracuda-Connect: e36.co.us.ibm.com[32.97.110.154] X-Barracuda-Start-Time: 1327339943 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Add project quota changes to all the places where group quota field is used. No externally visible changed and no superblock changes, yet. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_dquot.c | 17 +++- fs/xfs/xfs_dquot.h | 9 ++- fs/xfs/xfs_iget.c | 2 +- fs/xfs/xfs_inode.h | 1 + fs/xfs/xfs_ioctl.c | 12 +- fs/xfs/xfs_iops.c | 4 +- fs/xfs/xfs_qm.c | 259 ++++++++++++++++++++++++++++++++-------------- fs/xfs/xfs_qm.h | 7 +- fs/xfs/xfs_qm_bhv.c | 2 +- fs/xfs/xfs_qm_syscalls.c | 19 +++- fs/xfs/xfs_quota.h | 38 ++++--- fs/xfs/xfs_quota_priv.h | 6 +- fs/xfs/xfs_sb.h | 1 + fs/xfs/xfs_super.c | 5 +- fs/xfs/xfs_trans_dquot.c | 71 ++++++++++--- fs/xfs/xfs_vnodeops.c | 23 +++-- 16 files changed, 330 insertions(+), 146 deletions(-) diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index d7205b0..1c61c9b 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -186,9 +186,9 @@ typedef struct xfs_qoff_logformat { * are in the process of getting turned off. These flags are in m_qflags but * never in sb_qflags. */ -#define XFS_UQUOTA_ACTIVE 0x0100 /* uquotas are being turned off */ -#define XFS_PQUOTA_ACTIVE 0x0200 /* pquotas are being turned off */ -#define XFS_GQUOTA_ACTIVE 0x0400 /* gquotas are being turned off */ +#define XFS_UQUOTA_ACTIVE 0x1000 /* uquotas are being turned off */ +#define XFS_PQUOTA_ACTIVE 0x2000 /* pquotas are being turned off */ +#define XFS_GQUOTA_ACTIVE 0x4000 /* gquotas are being turned off */ #define XFS_ALL_QUOTA_ACTIVE \ (XFS_UQUOTA_ACTIVE | XFS_PQUOTA_ACTIVE | XFS_GQUOTA_ACTIVE) @@ -199,8 +199,6 @@ typedef struct xfs_qoff_logformat { #define XFS_IS_QUOTA_ON(mp) ((mp)->m_qflags & (XFS_UQUOTA_ACTIVE | \ XFS_GQUOTA_ACTIVE | \ XFS_PQUOTA_ACTIVE)) -#define XFS_IS_OQUOTA_ON(mp) ((mp)->m_qflags & (XFS_GQUOTA_ACTIVE | \ - XFS_PQUOTA_ACTIVE)) #define XFS_IS_UQUOTA_ON(mp) ((mp)->m_qflags & XFS_UQUOTA_ACTIVE) #define XFS_IS_GQUOTA_ON(mp) ((mp)->m_qflags & XFS_GQUOTA_ACTIVE) #define XFS_IS_PQUOTA_ON(mp) ((mp)->m_qflags & XFS_PQUOTA_ACTIVE) @@ -267,8 +265,10 @@ typedef struct xfs_qoff_logformat { */ #define XFS_NOT_DQATTACHED(mp, ip) ((XFS_IS_UQUOTA_ON(mp) &&\ (ip)->i_udquot == NULL) || \ - (XFS_IS_OQUOTA_ON(mp) && \ - (ip)->i_gdquot == NULL)) + (XFS_IS_GQUOTA_ON(mp) && \ + (ip)->i_gdquot == NULL) || \ + (XFS_IS_PQUOTA_ON(mp) && \ + (ip)->i_pdquot == NULL)) #define XFS_QM_NEED_QUOTACHECK(mp) \ ((XFS_IS_UQUOTA_ON(mp) && \ @@ -323,17 +323,18 @@ extern int xfs_trans_reserve_quota_nblks(struct xfs_trans *, struct xfs_inode *, long, long, uint); extern int xfs_trans_reserve_quota_bydquots(struct xfs_trans *, struct xfs_mount *, struct xfs_dquot *, - struct xfs_dquot *, long, long, uint); + struct xfs_dquot *, struct xfs_dquot *, long, long, uint); extern int xfs_qm_vop_dqalloc(struct xfs_inode *, uid_t, gid_t, prid_t, uint, - struct xfs_dquot **, struct xfs_dquot **); + struct xfs_dquot **, struct xfs_dquot **, struct xfs_dquot **); extern void xfs_qm_vop_create_dqattach(struct xfs_trans *, struct xfs_inode *, - struct xfs_dquot *, struct xfs_dquot *); + struct xfs_dquot *, struct xfs_dquot *, struct xfs_dquot *); extern int xfs_qm_vop_rename_dqattach(struct xfs_inode **); extern struct xfs_dquot *xfs_qm_vop_chown(struct xfs_trans *, struct xfs_inode *, struct xfs_dquot **, struct xfs_dquot *); extern int xfs_qm_vop_chown_reserve(struct xfs_trans *, struct xfs_inode *, - struct xfs_dquot *, struct xfs_dquot *, uint); + struct xfs_dquot *, struct xfs_dquot *, + struct xfs_dquot *, uint); extern int xfs_qm_dqattach(struct xfs_inode *, uint); extern int xfs_qm_dqattach_locked(struct xfs_inode *, uint); extern void xfs_qm_dqdetach(struct xfs_inode *); @@ -347,10 +348,12 @@ extern void xfs_qm_unmount_quotas(struct xfs_mount *); #else static inline int xfs_qm_vop_dqalloc(struct xfs_inode *ip, uid_t uid, gid_t gid, prid_t prid, - uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp) + uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp, + xfs_dquot **pdqp) { *udqp = NULL; *gdqp = NULL; + *pdqp = NULL; return 0; } #define xfs_trans_dup_dqinfo(tp, tp2) @@ -365,14 +368,15 @@ static inline int xfs_trans_reserve_quota_nblks(struct xfs_trans *tp, } static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, struct xfs_mount *mp, struct xfs_dquot *udqp, - struct xfs_dquot *gdqp, long nblks, long nions, uint flags) + struct xfs_dquot *gdqp, struct xfs_dquot *pdqp, + long nblks, long nions, uint flags) { return 0; } -#define xfs_qm_vop_create_dqattach(tp, ip, u, g) +#define xfs_qm_vop_create_dqattach(tp, ip, u, g, p) #define xfs_qm_vop_rename_dqattach(it) (0) #define xfs_qm_vop_chown(tp, ip, old, new) (NULL) -#define xfs_qm_vop_chown_reserve(tp, ip, u, g, fl) (0) +#define xfs_qm_vop_chown_reserve(tp, ip, u, g, p, fl) (0) #define xfs_qm_dqattach(ip, fl) (0) #define xfs_qm_dqattach_locked(ip, fl) (0) #define xfs_qm_dqdetach(ip) @@ -386,8 +390,8 @@ static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, #define xfs_trans_unreserve_quota_nblks(tp, ip, nblks, ninos, flags) \ xfs_trans_reserve_quota_nblks(tp, ip, -(nblks), -(ninos), flags) -#define xfs_trans_reserve_quota(tp, mp, ud, gd, nb, ni, f) \ - xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, nb, ni, \ +#define xfs_trans_reserve_quota(tp, mp, ud, gd, pd, nb, ni, f) \ + xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, pd, nb, ni, \ f | XFS_QMOPT_RES_REGBLKS) extern int xfs_qm_dqcheck(struct xfs_mount *, xfs_disk_dquot_t *, diff --git a/fs/xfs/xfs_quota_priv.h b/fs/xfs/xfs_quota_priv.h index 94a3d92..0e5ef5a 100644 --- a/fs/xfs/xfs_quota_priv.h +++ b/fs/xfs/xfs_quota_priv.h @@ -30,11 +30,7 @@ #define XFS_DQ_HASHVAL(mp, id) (((__psunsigned_t)(mp) + \ (__psunsigned_t)(id)) & \ (xfs_Gqm->qm_dqhashmask - 1)) -#define XFS_DQ_HASH(mp, id, type) (type == XFS_DQ_USER ? \ - (xfs_Gqm->qm_usr_dqhtable + \ - XFS_DQ_HASHVAL(mp, id)) : \ - (xfs_Gqm->qm_grp_dqhtable + \ - XFS_DQ_HASHVAL(mp, id))) + #define XFS_IS_DQUOT_UNINITIALIZED(dqp) ( \ !dqp->q_core.d_blk_hardlimit && \ !dqp->q_core.d_blk_softlimit && \ diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h index cb6ae71..5242512 100644 --- a/fs/xfs/xfs_sb.h +++ b/fs/xfs/xfs_sb.h @@ -140,6 +140,7 @@ typedef struct xfs_sb { */ xfs_ino_t sb_uquotino; /* user quota inode */ xfs_ino_t sb_gquotino; /* group quota inode */ +#define sb_pquotino sb_gquotino __uint16_t sb_qflags; /* quota flags */ __uint8_t sb_flags; /* misc. flags */ __uint8_t sb_shared_vn; /* shared version number */ diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h index 9b4f3ad..d46ff1c 100644 --- a/fs/xfs/xfs_qm.h +++ b/fs/xfs/xfs_qm.h @@ -68,6 +68,7 @@ typedef xfs_dqhash_t xfs_dqlist_t; typedef struct xfs_qm { xfs_dqlist_t *qm_usr_dqhtable;/* udquot hash table */ xfs_dqlist_t *qm_grp_dqhtable;/* gdquot hash table */ + xfs_dqlist_t *qm_prj_dqhtable;/* project hash table */ uint qm_dqhashmask; /* # buckets in dq hashtab - 1 */ struct list_head qm_dqfrlist; /* freelist of dquots */ struct mutex qm_dqfrlist_lock; @@ -86,6 +87,7 @@ typedef struct xfs_qm { typedef struct xfs_quotainfo { xfs_inode_t *qi_uquotaip; /* user quota inode */ xfs_inode_t *qi_gquotaip; /* group quota inode */ + xfs_inode_t *qi_pquotaip; /* project quota inode */ struct list_head qi_dqlist; /* all dquots in filesys */ struct mutex qi_dqlist_lock; int qi_dquots; @@ -110,13 +112,11 @@ typedef struct xfs_quotainfo { extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); -extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, - xfs_dquot_t *, xfs_dquot_t *, long, long, uint); extern void xfs_trans_dqjoin(xfs_trans_t *, xfs_dquot_t *); extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); /* - * We keep the usr and grp dquots separately so that locking will be easier + * We keep the usr, grp, and prj dquots separately so that locking will be easier * to do at commit time. All transactions that we know of at this point * affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value. */ @@ -124,6 +124,7 @@ extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); typedef struct xfs_dquot_acct { xfs_dqtrx_t dqa_usrdquots[XFS_QM_TRANS_MAXDQS]; xfs_dqtrx_t dqa_grpdquots[XFS_QM_TRANS_MAXDQS]; + xfs_dqtrx_t dqa_prjdquots[XFS_QM_TRANS_MAXDQS]; } xfs_dquot_acct_t; /* diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 2f27b74..cafc3c2 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -224,6 +224,7 @@ typedef struct xfs_inode { struct xfs_mount *i_mount; /* fs mount struct ptr */ struct xfs_dquot *i_udquot; /* user dquot */ struct xfs_dquot *i_gdquot; /* group dquot */ + struct xfs_dquot *i_pdquot; /* project dquot */ /* Inode location stuff */ xfs_ino_t i_ino; /* inode number (agno/agino)*/ diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h index 41cb5f4..0cdb79e 100644 --- a/fs/xfs/xfs_dquot.h +++ b/fs/xfs/xfs_dquot.h @@ -59,6 +59,7 @@ typedef struct xfs_dquot { xfs_fileoff_t q_fileoffset; /* offset in quotas file */ struct xfs_dquot*q_gdquot; /* group dquot, hint only */ + struct xfs_dquot*q_pdquot; /* project dquot, hint only */ xfs_disk_dquot_t q_core; /* actual usage & quotas */ xfs_dq_logitem_t q_logitem; /* dquot log item */ xfs_qcnt_t q_res_bcount; /* total regular nblks used+reserved */ @@ -122,8 +123,9 @@ static inline int xfs_this_quota_on(struct xfs_mount *mp, int type) case XFS_DQ_USER: return XFS_IS_UQUOTA_ON(mp); case XFS_DQ_GROUP: + return XFS_IS_GQUOTA_ON(mp); case XFS_DQ_PROJ: - return XFS_IS_OQUOTA_ON(mp); + return XFS_IS_PQUOTA_ON(mp); default: return 0; } @@ -136,6 +138,7 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) case XFS_DQ_USER: return ip->i_udquot; case XFS_DQ_PROJ: + return ip->i_pdquot; case XFS_DQ_GROUP: return ip->i_gdquot; default: @@ -151,7 +154,9 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) #define XFS_DQ_TO_QINF(dqp) ((dqp)->q_mount->m_quotainfo) #define XFS_DQ_TO_QIP(dqp) (XFS_QM_ISUDQ(dqp) ? \ XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ - XFS_DQ_TO_QINF(dqp)->qi_gquotaip) + (XFS_QM_ISGDQ(dqp) ? \ + XFS_DQ_TO_QINF(dqp)->qi_gquotaip : \ + XFS_DQ_TO_QINF(dqp)->qi_pquotaip)) extern int xfs_qm_dqread(struct xfs_mount *, xfs_dqid_t, uint, uint, struct xfs_dquot **); diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index bf4fe86..e6e9a1a 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -706,6 +706,21 @@ xfs_qm_dqlookup( return 1; } +static struct xfs_dqhash *xfs_dq_hash(struct xfs_mount *mp, + xfs_dqid_t id, uint type) +{ + switch (type) { + case XFS_DQ_USER: + return (xfs_Gqm->qm_usr_dqhtable + XFS_DQ_HASHVAL(mp, id)); + case XFS_DQ_GROUP: + return (xfs_Gqm->qm_grp_dqhtable + XFS_DQ_HASHVAL(mp, id)); + case XFS_DQ_PROJ: + return (xfs_Gqm->qm_prj_dqhtable + XFS_DQ_HASHVAL(mp, id)); + default: + return NULL; + } +} + /* * Given the file system, inode OR id, and type (UDQUOT/GDQUOT), return a * a locked dquot, doing an allocation (if requested) as needed. @@ -734,7 +749,7 @@ xfs_qm_dqget( (! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) { return (ESRCH); } - h = XFS_DQ_HASH(mp, id, type); + h = xfs_dq_hash(mp, id, type); #ifdef DEBUG if (xfs_do_dqerror) { diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index 8c3e463..823f5d8 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c @@ -362,7 +362,7 @@ xfs_iget_cache_miss( } /* These values _must_ be set before releasing the radix tree lock! */ - ip->i_udquot = ip->i_gdquot = NULL; + ip->i_udquot = ip->i_gdquot = ip->i_pdquot = NULL; xfs_iflags_set(ip, XFS_INEW); spin_unlock(&pag->pag_ici_lock); diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 76f3ca5..abe9269 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -907,7 +907,7 @@ xfs_ioctl_setattr( struct xfs_trans *tp; unsigned int lock_flags = 0; struct xfs_dquot *udqp = NULL; - struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; struct xfs_dquot *olddquot = NULL; int code; @@ -936,7 +936,7 @@ xfs_ioctl_setattr( if (XFS_IS_QUOTA_ON(mp) && (mask & FSX_PROJID)) { code = xfs_qm_vop_dqalloc(ip, ip->i_d.di_uid, ip->i_d.di_gid, fa->fsx_projid, - XFS_QMOPT_PQUOTA, &udqp, &gdqp); + XFS_QMOPT_PQUOTA, &udqp, NULL, &pdqp); if (code) return code; } @@ -973,7 +973,7 @@ xfs_ioctl_setattr( XFS_IS_PQUOTA_ON(mp) && xfs_get_projid(ip) != fa->fsx_projid) { ASSERT(tp); - code = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, + code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, pdqp, capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); if (code) /* out of quota */ @@ -1092,7 +1092,7 @@ xfs_ioctl_setattr( if (xfs_get_projid(ip) != fa->fsx_projid) { if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { olddquot = xfs_qm_vop_chown(tp, ip, - &ip->i_gdquot, gdqp); + &ip->i_pdquot, pdqp); } xfs_set_projid(ip, fa->fsx_projid); @@ -1139,13 +1139,13 @@ xfs_ioctl_setattr( */ xfs_qm_dqrele(olddquot); xfs_qm_dqrele(udqp); - xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); return code; error_return: xfs_qm_dqrele(udqp); - xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); xfs_trans_cancel(tp, 0); if (lock_flags) xfs_iunlock(ip, lock_flags); diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index ab30253..6959a48 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -569,7 +569,7 @@ xfs_setattr_nonsize( ASSERT(udqp == NULL); ASSERT(gdqp == NULL); error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip), - qflags, &udqp, &gdqp); + qflags, &udqp, &gdqp, NULL); if (error) return error; } @@ -604,7 +604,7 @@ xfs_setattr_nonsize( ((XFS_IS_UQUOTA_ON(mp) && iuid != uid) || (XFS_IS_GQUOTA_ON(mp) && igid != gid))) { ASSERT(tp); - error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, + error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, NULL, capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); if (error) /* out of quota */ diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index bb8c2ac..47c33a5 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -74,7 +74,7 @@ static struct shrinker xfs_qm_shaker = { STATIC struct xfs_qm * xfs_Gqm_init(void) { - xfs_dqhash_t *udqhash, *gdqhash; + xfs_dqhash_t *udqhash, *gdqhash, *pdqhash; xfs_qm_t *xqm; size_t hsize; uint i; @@ -92,6 +92,10 @@ xfs_Gqm_init(void) if (!gdqhash) goto out_free_udqhash; + pdqhash = kmem_zalloc_large(hsize); + if (!pdqhash) + goto out_free_gdqhash; + hsize /= sizeof(xfs_dqhash_t); ndquot = hsize << 8; @@ -99,12 +103,15 @@ xfs_Gqm_init(void) xqm->qm_dqhashmask = hsize - 1; xqm->qm_usr_dqhtable = udqhash; xqm->qm_grp_dqhtable = gdqhash; + xqm->qm_prj_dqhtable = pdqhash; ASSERT(xqm->qm_usr_dqhtable != NULL); ASSERT(xqm->qm_grp_dqhtable != NULL); + ASSERT(xqm->qm_prj_dqhtable != NULL); for (i = 0; i < hsize; i++) { xfs_qm_list_init(&(xqm->qm_usr_dqhtable[i]), "uxdqh", i); xfs_qm_list_init(&(xqm->qm_grp_dqhtable[i]), "gxdqh", i); + xfs_qm_list_init(&(xqm->qm_prj_dqhtable[i]), "pxdqh", i); } /* @@ -141,6 +148,8 @@ xfs_Gqm_init(void) xqm->qm_nrefs = 0; return xqm; + out_free_gdqhash: + kmem_free_large(gdqhash); out_free_udqhash: kmem_free_large(udqhash); out: @@ -169,11 +178,14 @@ xfs_qm_destroy( for (i = 0; i < hsize; i++) { xfs_qm_list_destroy(&(xqm->qm_usr_dqhtable[i])); xfs_qm_list_destroy(&(xqm->qm_grp_dqhtable[i])); + xfs_qm_list_destroy(&(xqm->qm_prj_dqhtable[i])); } kmem_free_large(xqm->qm_usr_dqhtable); kmem_free_large(xqm->qm_grp_dqhtable); + kmem_free_large(xqm->qm_prj_dqhtable); xqm->qm_usr_dqhtable = NULL; xqm->qm_grp_dqhtable = NULL; + xqm->qm_prj_dqhtable = NULL; xqm->qm_dqhashmask = 0; kmem_free(xqm); @@ -378,6 +390,10 @@ xfs_qm_unmount_quotas( IRELE(mp->m_quotainfo->qi_gquotaip); mp->m_quotainfo->qi_gquotaip = NULL; } + if (mp->m_quotainfo->qi_pquotaip) { + IRELE(mp->m_quotainfo->qi_pquotaip); + mp->m_quotainfo->qi_pquotaip = NULL; + } } } @@ -450,7 +466,7 @@ xfs_qm_detach_gdquots( struct xfs_mount *mp) { struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_dquot *dqp, *gdqp; + struct xfs_dquot *dqp, *gdqp, *pdqp; again: ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); @@ -467,10 +483,15 @@ xfs_qm_detach_gdquots( gdqp = dqp->q_gdquot; if (gdqp) dqp->q_gdquot = NULL; + pdqp = dqp->q_pdquot; + if (pdqp) + dqp->q_pdquot = NULL; xfs_dqunlock(dqp); if (gdqp) xfs_qm_dqrele(gdqp); + if (pdqp) + xfs_qm_dqrele(pdqp); } } @@ -593,7 +614,10 @@ xfs_qm_dqattach_one( * be reclaimed as long as we have a ref from inode and we * hold the ilock. */ - dqp = udqhint->q_gdquot; + if (type == XFS_DQ_GROUP) + dqp = udqhint->q_gdquot; + else + dqp = udqhint->q_pdquot; if (dqp && be32_to_cpu(dqp->q_core.d_id) == id) { ASSERT(*IO_idqpp == NULL); @@ -636,28 +660,29 @@ xfs_qm_dqattach_one( /* - * Given a udquot and gdquot, attach a ptr to the group dquot in the + * Given a udquot and gdquot, attach a ptr to the group/project dquot in the * udquot as a hint for future lookups. */ STATIC void -xfs_qm_dqattach_grouphint( - xfs_dquot_t *udq, - xfs_dquot_t *gdq) +xfs_qm_dqattach_grouphint(xfs_inode_t *ip, int type) { - xfs_dquot_t *tmp; + xfs_dquot_t **tmp, *gpdq, *tmp1, *udq = ip->i_udquot; + gpdq = (type == XFS_DQ_GROUP) ? ip->i_gdquot : ip->i_pdquot; xfs_dqlock(udq); - tmp = udq->q_gdquot; - if (tmp) { - if (tmp == gdq) + tmp = (type == XFS_DQ_GROUP) ? &udq->q_gdquot : &udq->q_pdquot; + + if (*tmp) { + if (*tmp == gpdq) goto done; - udq->q_gdquot = NULL; - xfs_qm_dqrele(tmp); + tmp1 = *tmp; + *tmp = NULL; + xfs_qm_dqrele(tmp1); } - udq->q_gdquot = xfs_qm_dqhold(gdq); + *tmp = xfs_qm_dqhold(gpdq); done: xfs_dqunlock(udq); } @@ -698,12 +723,8 @@ xfs_qm_dqattach_locked( } ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - if (XFS_IS_OQUOTA_ON(mp)) { - error = XFS_IS_GQUOTA_ON(mp) ? - xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, - flags & XFS_QMOPT_DQALLOC, - ip->i_udquot, &ip->i_gdquot) : - xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, + if (XFS_IS_GQUOTA_ON(mp)) { + error = xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, flags & XFS_QMOPT_DQALLOC, ip->i_udquot, &ip->i_gdquot); /* @@ -715,14 +736,28 @@ xfs_qm_dqattach_locked( nquotas++; } + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + if (XFS_IS_PQUOTA_ON(mp)) { + error = xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, + flags & XFS_QMOPT_DQALLOC, + ip->i_udquot, &ip->i_pdquot); + /* + * Don't worry about the udquot that we may have + * attached above. It'll get detached, if not already. + */ + if (error) + goto done; + nquotas++; + } + /* - * Attach this group quota to the user quota as a hint. + * Attach this group/project quota to the user quota as a hint. * This WON'T, in general, result in a thrash. */ - if (nquotas == 2) { + if (nquotas > 1 && ip->i_udquot) { ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - ASSERT(ip->i_udquot); - ASSERT(ip->i_gdquot); + ASSERT(ip->i_gdquot || !XFS_IS_GQUOTA_ON(mp)); + ASSERT(ip->i_pdquot || !XFS_IS_PQUOTA_ON(mp)); /* * We do not have i_udquot locked at this point, but this check @@ -730,8 +765,13 @@ xfs_qm_dqattach_locked( * 100% all the time. It is just a hint, and this will * succeed in general. */ - if (ip->i_udquot->q_gdquot != ip->i_gdquot) - xfs_qm_dqattach_grouphint(ip->i_udquot, ip->i_gdquot); + if (XFS_IS_GQUOTA_ON(mp) && + ip->i_udquot->q_gdquot != ip->i_gdquot) + xfs_qm_dqattach_grouphint(ip, XFS_DQ_GROUP); + + if (XFS_IS_PQUOTA_ON(mp) && + ip->i_udquot->q_pdquot != ip->i_pdquot) + xfs_qm_dqattach_grouphint(ip, XFS_DQ_PROJ); } done: @@ -739,8 +779,10 @@ xfs_qm_dqattach_locked( if (!error) { if (XFS_IS_UQUOTA_ON(mp)) ASSERT(ip->i_udquot); - if (XFS_IS_OQUOTA_ON(mp)) + if (XFS_IS_GQUOTA_ON(mp)) ASSERT(ip->i_gdquot); + if (XFS_IS_PQUOTA_ON(mp)) + ASSERT(ip->i_pdquot); } ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); #endif @@ -770,7 +812,7 @@ void xfs_qm_dqdetach( xfs_inode_t *ip) { - if (!(ip->i_udquot || ip->i_gdquot)) + if (!(ip->i_udquot || ip->i_gdquot || ip->i_pdquot)) return; trace_xfs_dquot_dqdetach(ip); @@ -785,6 +827,10 @@ xfs_qm_dqdetach( xfs_qm_dqrele(ip->i_gdquot); ip->i_gdquot = NULL; } + if (ip->i_pdquot) { + xfs_qm_dqrele(ip->i_pdquot); + ip->i_pdquot = NULL; + } } /* @@ -936,6 +982,10 @@ xfs_qm_destroy_quotainfo( IRELE(qi->qi_gquotaip); qi->qi_gquotaip = NULL; } + if (qi->qi_pquotaip) { + IRELE(qi->qi_pquotaip); + qi->qi_pquotaip = NULL; + } mutex_destroy(&qi->qi_quotaofflock); kmem_free(qi); mp->m_quotainfo = NULL; @@ -1413,7 +1463,7 @@ xfs_qm_quotacheck( int done, count, error; xfs_ino_t lastino; size_t structsz; - xfs_inode_t *uip, *gip; + xfs_inode_t *uip, *gip, *pip; uint flags; count = INT_MAX; @@ -1421,7 +1471,8 @@ xfs_qm_quotacheck( lastino = 0; flags = 0; - ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); + ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip + || mp->m_quotainfo->qi_pquotaip); ASSERT(XFS_IS_QUOTA_RUNNING(mp)); /* @@ -1447,12 +1498,18 @@ xfs_qm_quotacheck( gip = mp->m_quotainfo->qi_gquotaip; if (gip) { - error = xfs_qm_dqiterate(mp, gip, XFS_IS_GQUOTA_ON(mp) ? - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); + error = xfs_qm_dqiterate(mp, gip, XFS_QMOPT_GQUOTA); if (error) goto error_return; - flags |= XFS_IS_GQUOTA_ON(mp) ? - XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; + flags |= XFS_GQUOTA_CHKD; + } + + pip = mp->m_quotainfo->qi_pquotaip; + if (pip) { + error = xfs_qm_dqiterate(mp, pip, XFS_QMOPT_PQUOTA); + if (error) + goto error_return; + flags |= XFS_PQUOTA_CHKD; } do { @@ -1533,13 +1590,13 @@ STATIC int xfs_qm_init_quotainos( xfs_mount_t *mp) { - xfs_inode_t *uip, *gip; + xfs_inode_t *uip, *gip, *pip; int error; __int64_t sbflags; uint flags; ASSERT(mp->m_quotainfo); - uip = gip = NULL; + uip = gip = pip = NULL; sbflags = 0; flags = 0; @@ -1554,7 +1611,7 @@ xfs_qm_init_quotainos( 0, 0, &uip))) return XFS_ERROR(error); } - if (XFS_IS_OQUOTA_ON(mp) && + if (XFS_IS_GQUOTA_ON(mp) && mp->m_sb.sb_gquotino != NULLFSINO) { ASSERT(mp->m_sb.sb_gquotino > 0); if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, @@ -1564,6 +1621,18 @@ xfs_qm_init_quotainos( return XFS_ERROR(error); } } + if (XFS_IS_PQUOTA_ON(mp) && + mp->m_sb.sb_pquotino != NULLFSINO) { + ASSERT(mp->m_sb.sb_pquotino > 0); + if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip))) { + if (uip) + IRELE(uip); + if (gip) + IRELE(gip); + return XFS_ERROR(error); + } + } } else { flags |= XFS_QMOPT_SBVERSION; sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | @@ -1571,7 +1640,7 @@ xfs_qm_init_quotainos( } /* - * Create the two inodes, if they don't exist already. The changes + * Create the three inodes, if they don't exist already. The changes * made above will get added to a transaction and logged in one of * the qino_alloc calls below. If the device is readonly, * temporarily switch to read-write to do this. @@ -1584,11 +1653,10 @@ xfs_qm_init_quotainos( flags &= ~XFS_QMOPT_SBVERSION; } - if (XFS_IS_OQUOTA_ON(mp) && gip == NULL) { - flags |= (XFS_IS_GQUOTA_ON(mp) ? - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); + if (XFS_IS_GQUOTA_ON(mp) && gip == NULL) { error = xfs_qm_qino_alloc(mp, &gip, - sbflags | XFS_SB_GQUOTINO, flags); + sbflags | XFS_SB_GQUOTINO, + flags | XFS_QMOPT_GQUOTA); if (error) { if (uip) IRELE(uip); @@ -1596,9 +1664,23 @@ xfs_qm_init_quotainos( return XFS_ERROR(error); } } + if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { + error = xfs_qm_qino_alloc(mp, &pip, + sbflags | XFS_SB_GQUOTINO, + flags | XFS_QMOPT_PQUOTA); + if (error) { + if (uip) + IRELE(uip); + if (gip) + IRELE(gip); + + return XFS_ERROR(error); + } + } mp->m_quotainfo->qi_uquotaip = uip; mp->m_quotainfo->qi_gquotaip = gip; + mp->m_quotainfo->qi_pquotaip = pip; return 0; } @@ -1862,10 +1944,11 @@ xfs_qm_vop_dqalloc( prid_t prid, uint flags, struct xfs_dquot **O_udqpp, - struct xfs_dquot **O_gdqpp) + struct xfs_dquot **O_gdqpp, + struct xfs_dquot **O_pdqpp) { struct xfs_mount *mp = ip->i_mount; - struct xfs_dquot *uq, *gq; + struct xfs_dquot *uq, *gq, *pq; int error; uint lockflags; @@ -1890,7 +1973,7 @@ xfs_qm_vop_dqalloc( } } - uq = gq = NULL; + uq = gq = pq = NULL; if ((flags & XFS_QMOPT_UQUOTA) && XFS_IS_UQUOTA_ON(mp)) { if (ip->i_d.di_uid != uid) { /* @@ -1946,25 +2029,28 @@ xfs_qm_vop_dqalloc( ASSERT(ip->i_gdquot); gq = xfs_qm_dqhold(ip->i_gdquot); } - } else if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { + } + if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { if (xfs_get_projid(ip) != prid) { xfs_iunlock(ip, lockflags); if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, XFS_DQ_PROJ, XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, - &gq))) { + &pq))) { if (uq) xfs_qm_dqrele(uq); + if (gq) + xfs_qm_dqrele(gq); ASSERT(error != ENOENT); return (error); } - xfs_dqunlock(gq); + xfs_dqunlock(pq); lockflags = XFS_ILOCK_SHARED; xfs_ilock(ip, lockflags); } else { - ASSERT(ip->i_gdquot); - gq = xfs_qm_dqhold(ip->i_gdquot); + ASSERT(ip->i_pdquot); + pq = xfs_qm_dqhold(ip->i_pdquot); } } if (uq) @@ -1979,6 +2065,10 @@ xfs_qm_vop_dqalloc( *O_gdqpp = gq; else if (gq) xfs_qm_dqrele(gq); + if (O_pdqpp) + *O_pdqpp = pq; + else if (pq) + xfs_qm_dqrele(pq); return 0; } @@ -2031,11 +2121,13 @@ xfs_qm_vop_chown_reserve( xfs_inode_t *ip, xfs_dquot_t *udqp, xfs_dquot_t *gdqp, + xfs_dquot_t *pdqp, uint flags) { xfs_mount_t *mp = ip->i_mount; uint delblks, blkflags, prjflags = 0; - xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; + xfs_dquot_t *unresudq, *unresgdq, *unrespdq; + xfs_dquot_t *delblksudq, *delblksgdq, *delblkspdq; int error; @@ -2043,7 +2135,8 @@ xfs_qm_vop_chown_reserve( ASSERT(XFS_IS_QUOTA_RUNNING(mp)); delblks = ip->i_delayed_blks; - delblksudq = delblksgdq = unresudq = unresgdq = NULL; + delblksudq = delblksgdq = delblkspdq = NULL; + unresudq = unresgdq = unrespdq = NULL; blkflags = XFS_IS_REALTIME_INODE(ip) ? XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS; @@ -2060,25 +2153,28 @@ xfs_qm_vop_chown_reserve( unresudq = ip->i_udquot; } } - if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { - if (XFS_IS_PQUOTA_ON(ip->i_mount) && - xfs_get_projid(ip) != be32_to_cpu(gdqp->q_core.d_id)) - prjflags = XFS_QMOPT_ENOSPC; - - if (prjflags || - (XFS_IS_GQUOTA_ON(ip->i_mount) && - ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { - delblksgdq = gdqp; - if (delblks) { - ASSERT(ip->i_gdquot); - unresgdq = ip->i_gdquot; - } + if (XFS_IS_GQUOTA_ON(ip->i_mount) && gdqp && + ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id)) { + delblksgdq = gdqp; + if (delblks) { + ASSERT(ip->i_gdquot); + unresgdq = ip->i_gdquot; + } + } + + if (XFS_IS_PQUOTA_ON(ip->i_mount) && pdqp && + xfs_get_projid(ip) != be32_to_cpu(pdqp->q_core.d_id)) { + prjflags = XFS_QMOPT_ENOSPC; + delblkspdq = pdqp; + if (delblks) { + ASSERT(ip->i_pdquot); + unrespdq = ip->i_pdquot; } } if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, - delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, - flags | blkflags | prjflags))) + delblksudq, delblksgdq, delblkspdq, ip->i_d.di_nblocks, + 1, flags | blkflags | prjflags))) return (error); /* @@ -2091,15 +2187,16 @@ xfs_qm_vop_chown_reserve( /* * Do the reservations first. Unreservation can't fail. */ - ASSERT(delblksudq || delblksgdq); - ASSERT(unresudq || unresgdq); + ASSERT(delblksudq || delblksgdq || delblkspdq); + ASSERT(unresudq || unresgdq || unrespdq); if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, - delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, + delblksudq, delblksgdq, delblkspdq, + (xfs_qcnt_t)delblks, 0, flags | blkflags | prjflags))) return (error); xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, - unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, - blkflags); + unresudq, unresgdq, unrespdq, + -((xfs_qcnt_t)delblks), 0, blkflags); } return (0); @@ -2138,7 +2235,8 @@ xfs_qm_vop_create_dqattach( struct xfs_trans *tp, struct xfs_inode *ip, struct xfs_dquot *udqp, - struct xfs_dquot *gdqp) + struct xfs_dquot *gdqp, + struct xfs_dquot *pdqp) { struct xfs_mount *mp = tp->t_mountp; @@ -2158,13 +2256,18 @@ xfs_qm_vop_create_dqattach( } if (gdqp) { ASSERT(ip->i_gdquot == NULL); - ASSERT(XFS_IS_OQUOTA_ON(mp)); - ASSERT((XFS_IS_GQUOTA_ON(mp) ? - ip->i_d.di_gid : xfs_get_projid(ip)) == - be32_to_cpu(gdqp->q_core.d_id)); - + ASSERT(XFS_ISGOQUOTA_ON(mp)); + ASSERT(ip->i_d.di_gid == be32_to_cpu(gdqp->q_core.d_id)); ip->i_gdquot = xfs_qm_dqhold(gdqp); xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); } + if (pdqp) { + ASSERT(ip->i_pdquot == NULL); + ASSERT(XFS_IS_PQUOTA_ON(mp)); + ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); + + ip->i_pdquot = xfs_qm_dqhold(pdqp); + xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1); + } } diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c index a0a829a..c9b05f1 100644 --- a/fs/xfs/xfs_qm_bhv.c +++ b/fs/xfs/xfs_qm_bhv.c @@ -117,7 +117,7 @@ xfs_qm_newmount( (pquotaondisk && !XFS_IS_PQUOTA_ON(mp)) || (!pquotaondisk && XFS_IS_PQUOTA_ON(mp)) || (gquotaondisk && !XFS_IS_GQUOTA_ON(mp)) || - (!gquotaondisk && XFS_IS_OQUOTA_ON(mp))) && + (!gquotaondisk && XFS_IS_GQUOTA_ON(mp))) && xfs_dev_is_read_only(mp, "changing quota state")) { xfs_warn(mp, "please mount with%s%s%s%s.", (!quotaondisk ? "out quota" : ""), diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index d43c68c..9849828 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -123,7 +123,8 @@ xfs_qm_scall_quotaoff( dqtype |= XFS_QMOPT_GQUOTA; flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); inactivate_flags |= XFS_GQUOTA_ACTIVE; - } else if (flags & XFS_PQUOTA_ACCT) { + } + if (flags & XFS_PQUOTA_ACCT) { dqtype |= XFS_QMOPT_PQUOTA; flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); inactivate_flags |= XFS_PQUOTA_ACTIVE; @@ -223,10 +224,14 @@ xfs_qm_scall_quotaoff( IRELE(q->qi_uquotaip); q->qi_uquotaip = NULL; } - if ((dqtype & (XFS_QMOPT_GQUOTA|XFS_QMOPT_PQUOTA)) && q->qi_gquotaip) { + if ((dqtype & XFS_QMOPT_GQUOTA) && q->qi_gquotaip) { IRELE(q->qi_gquotaip); q->qi_gquotaip = NULL; } + if ((dqtype & XFS_QMOPT_PQUOTA) && q->qi_pquotaip) { + IRELE(q->qi_pquotaip); + q->qi_pquotaip = NULL; + } out_unlock: mutex_unlock(&q->qi_quotaofflock); @@ -878,9 +883,11 @@ xfs_dqrele_inode( { /* skip quota inodes */ if (ip == ip->i_mount->m_quotainfo->qi_uquotaip || - ip == ip->i_mount->m_quotainfo->qi_gquotaip) { + ip == ip->i_mount->m_quotainfo->qi_gquotaip || + ip == ip->i_mount->m_quotainfo->qi_pquotaip) { ASSERT(ip->i_udquot == NULL); ASSERT(ip->i_gdquot == NULL); + ASSERT(ip->i_pdquot == NULL); return 0; } @@ -889,10 +896,14 @@ xfs_dqrele_inode( xfs_qm_dqrele(ip->i_udquot); ip->i_udquot = NULL; } - if (flags & (XFS_PQUOTA_ACCT|XFS_GQUOTA_ACCT) && ip->i_gdquot) { + if ((flags & XFS_GQUOTA_ACCT) && ip->i_gdquot) { xfs_qm_dqrele(ip->i_gdquot); ip->i_gdquot = NULL; } + if ((flags & XFS_PQUOTA_ACCT) && ip->i_pdquot) { + xfs_qm_dqrele(ip->i_pdquot); + ip->i_pdquot = NULL; + } xfs_iunlock(ip, XFS_ILOCK_EXCL); return 0; } diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 01de9f9..b0a1266 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -539,14 +539,13 @@ xfs_showargs( else if (mp->m_qflags & XFS_UQUOTA_ACCT) seq_puts(m, "," MNTOPT_UQUOTANOENF); - /* Either project or group quotas can be active, not both */ - if (mp->m_qflags & XFS_PQUOTA_ACCT) { if (mp->m_qflags & XFS_PQUOTA_ENFD) seq_puts(m, "," MNTOPT_PRJQUOTA); else seq_puts(m, "," MNTOPT_PQUOTANOENF); - } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { + } + if (mp->m_qflags & XFS_GQUOTA_ACCT) { if (mp->m_qflags & XFS_GQUOTA_ENFD) seq_puts(m, "," MNTOPT_GRPQUOTA); else diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index bea957d..48003d3 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -115,7 +115,7 @@ xfs_trans_dup_dqinfo( if(otp->t_flags & XFS_TRANS_DQ_DIRTY) ntp->t_flags |= XFS_TRANS_DQ_DIRTY; - for (j = 0; j < 2; j++) { + for (j = 0; j < 3; j++) { /* 0 - usr, 1 - grp, 2 - prj */ for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { if (oqa[i].qt_dquot == NULL) break; @@ -140,8 +140,13 @@ xfs_trans_dup_dqinfo( oq->qt_ino_res = oq->qt_ino_res_used; } - oqa = otp->t_dqinfo->dqa_grpdquots; - nqa = ntp->t_dqinfo->dqa_grpdquots; + if (oqa == otp->t_dqinfo->dqa_usrdquots) { + oqa = otp->t_dqinfo->dqa_grpdquots; + nqa = ntp->t_dqinfo->dqa_grpdquots; + } else { + oqa = otp->t_dqinfo->dqa_prjdquots; + nqa = ntp->t_dqinfo->dqa_prjdquots; + } } } @@ -168,8 +173,10 @@ xfs_trans_mod_dquot_byino( if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot) (void) xfs_trans_mod_dquot(tp, ip->i_udquot, field, delta); - if (XFS_IS_OQUOTA_ON(mp) && ip->i_gdquot) + if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot) (void) xfs_trans_mod_dquot(tp, ip->i_gdquot, field, delta); + if (XFS_IS_PQUOTA_ON(mp) && ip->i_pdquot) + (void) xfs_trans_mod_dquot(tp, ip->i_pdquot, field, delta); } STATIC xfs_dqtrx_t * @@ -180,15 +187,20 @@ xfs_trans_get_dqtrx( int i; xfs_dqtrx_t *qa; - qa = XFS_QM_ISUDQ(dqp) ? - tp->t_dqinfo->dqa_usrdquots : tp->t_dqinfo->dqa_grpdquots; + if (XFS_QM_ISUDQ(dqp)) + qa = tp->t_dqinfo->dqa_usrdquots; + else if (XFS_QM_ISGDQ(dqp)) + qa = tp->t_dqinfo->dqa_grpdquots; + else if (XFS_QM_ISPDQ(dqp)) + qa = tp->t_dqinfo->dqa_prjdquots; + else + return NULL; for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { if (qa[i].qt_dquot == NULL || qa[i].qt_dquot == dqp) return &qa[i]; } - return NULL; } @@ -342,9 +354,12 @@ xfs_trans_apply_dquot_deltas( ASSERT(tp->t_dqinfo); qa = tp->t_dqinfo->dqa_usrdquots; - for (j = 0; j < 2; j++) { + for (j = 0; j < 3; j++) { /* 0 - usr, 1 - grp, 2 - prj */ if (qa[0].qt_dquot == NULL) { - qa = tp->t_dqinfo->dqa_grpdquots; + if (qa == tp->t_dqinfo->dqa_usrdquots) + qa = tp->t_dqinfo->dqa_grpdquots; + else + qa = tp->t_dqinfo->dqa_prjdquots; continue; } @@ -498,9 +513,12 @@ xfs_trans_apply_dquot_deltas( be64_to_cpu(dqp->q_core.d_rtbcount)); } /* - * Do the group quotas next + * Do the group quotas or project quotas next */ - qa = tp->t_dqinfo->dqa_grpdquots; + if (qa == tp->t_dqinfo->dqa_usrdquots) + qa = tp->t_dqinfo->dqa_grpdquots; + else + qa = tp->t_dqinfo->dqa_prjdquots; } } @@ -525,7 +543,7 @@ xfs_trans_unreserve_and_mod_dquots( qa = tp->t_dqinfo->dqa_usrdquots; - for (j = 0; j < 2; j++) { + for (j = 0; j < 3; j++) { /* 0 - usr, 1 - grp, 2 - prj */ for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { qtrx = &qa[i]; /* @@ -567,7 +585,10 @@ xfs_trans_unreserve_and_mod_dquots( xfs_dqunlock(dqp); } - qa = tp->t_dqinfo->dqa_grpdquots; + if (qa == tp->t_dqinfo->dqa_usrdquots) + qa = tp->t_dqinfo->dqa_grpdquots; + else + qa = tp->t_dqinfo->dqa_prjdquots; } } @@ -737,8 +758,8 @@ error_return: /* * Given dquot(s), make disk block and/or inode reservations against them. - * The fact that this does the reservation against both the usr and - * grp/prj quotas is important, because this follows a both-or-nothing + * The fact that this does the reservation against user, group and + * project quotas is important, because this follows a all-or-nothing * approach. * * flags = XFS_QMOPT_FORCE_RES evades limit enforcement. Used by chown. @@ -753,6 +774,7 @@ xfs_trans_reserve_quota_bydquots( xfs_mount_t *mp, xfs_dquot_t *udqp, xfs_dquot_t *gdqp, + xfs_dquot_t *pdqp, long nblks, long ninos, uint flags) @@ -790,6 +812,24 @@ xfs_trans_reserve_quota_bydquots( } } + if (pdqp) { + error = xfs_trans_dqresv(tp, mp, pdqp, nblks, ninos, flags); + if (error) { + /* + * can't do it, so backout previous reservation + */ + if (resvd) { + flags |= XFS_QMOPT_FORCE_RES; + xfs_trans_dqresv(tp, mp, udqp, + -nblks, -ninos, flags); + if (gdqp) + xfs_trans_dqresv(tp, mp, gdqp, + -nblks, -ninos, flags); + } + return error; + } + } + /* * Didn't change anything critical, so, no need to log */ @@ -831,6 +871,7 @@ xfs_trans_reserve_quota_nblks( */ return xfs_trans_reserve_quota_bydquots(tp, mp, ip->i_udquot, ip->i_gdquot, + ip->i_pdquot, nblks, ninos, flags); } diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 0cf52da..62d8689 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -851,6 +851,7 @@ xfs_create( prid_t prid; struct xfs_dquot *udqp = NULL; struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; uint resblks; uint log_res; uint log_count; @@ -869,7 +870,7 @@ xfs_create( * Make sure that we have allocated dquot(s) on disk. */ error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); if (error) return error; @@ -929,7 +930,8 @@ xfs_create( /* * Reserve disk quota and the inode. */ - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, + pdqp, resblks, 1, 0); if (error) goto out_trans_cancel; @@ -993,7 +995,7 @@ xfs_create( * These ids of the inode couldn't have changed since the new * inode has been locked ever since it was created. */ - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); error = xfs_bmap_finish(&tp, &free_list, &committed); if (error) @@ -1005,6 +1007,7 @@ xfs_create( xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); *ipp = ip; return 0; @@ -1026,6 +1029,7 @@ xfs_create( xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); if (unlock_dp_on_error) xfs_iunlock(dp, XFS_ILOCK_EXCL); @@ -1516,7 +1520,7 @@ xfs_symlink( int n; xfs_buf_t *bp; prid_t prid; - struct xfs_dquot *udqp, *gdqp; + struct xfs_dquot *udqp, *gdqp, *pdqp; uint resblks; *ipp = NULL; @@ -1546,7 +1550,7 @@ xfs_symlink( * Make sure that we have allocated dquot(s) on disk. */ error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); if (error) goto std_return; @@ -1587,7 +1591,8 @@ xfs_symlink( /* * Reserve disk quota : blocks and inode. */ - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, + pdqp, resblks, 1, 0); if (error) goto error_return; @@ -1625,7 +1630,7 @@ xfs_symlink( /* * Also attach the dquot(s) to it, if applicable. */ - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); if (resblks) resblks -= XFS_IALLOC_SPACE_RES(mp); @@ -1709,6 +1714,7 @@ xfs_symlink( error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); *ipp = ip; return 0; @@ -1722,6 +1728,7 @@ xfs_symlink( xfs_trans_cancel(tp, cancel_flags); xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); if (unlock_dp_on_error) xfs_iunlock(dp, XFS_ILOCK_EXCL); @@ -2188,7 +2195,7 @@ xfs_free_file_space( } xfs_ilock(ip, XFS_ILOCK_EXCL); error = xfs_trans_reserve_quota(tp, mp, - ip->i_udquot, ip->i_gdquot, + ip->i_udquot, ip->i_gdquot, ip->i_pdquot, resblks, 0, XFS_QMOPT_RES_REGBLKS); if (error) goto error1; -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:32:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWer2122898 for ; Mon, 23 Jan 2012 11:32:40 -0600 X-ASG-Debug-ID: 1327339958-04cb6c198f26b630001-NocioJ Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160]) by cuda.sgi.com with ESMTP id aBeCxEnVaCRwdCId for ; Mon, 23 Jan 2012 09:32:39 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.160 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:38 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.160] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:36 -0700 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id E719C19D804A for ; Mon, 23 Jan 2012 10:32:32 -0700 (MST) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHWIHd2351176 for ; Mon, 23 Jan 2012 12:32:18 -0500 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHWHLi026924 for ; Mon, 23 Jan 2012 12:32:17 -0500 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHWHEQ026871; Mon, 23 Jan 2012 12:32:17 -0500 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:16 -0600 Message-Id: <20120123173216.31640.48107.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC v3 PATCH 3/4] xfs: Add pquotaino to on-disk super block X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC v3 PATCH 3/4] xfs: Add pquotaino to on-disk super block x-cbid: 12012317-4242-0000-0000-00000097DCD1 X-Barracuda-Connect: e39.co.us.ibm.com[32.97.110.160] X-Barracuda-Start-Time: 1327339959 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Add a new field to the superblock to add support for seperate pquota with a specific version. No change made yet to gather both project and group quota with quotactl. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_itable.c | 3 +- fs/xfs/xfs_mount.c | 101 ++++++++++++++++++++++++++++++++------------ fs/xfs/xfs_qm.c | 18 +++++--- fs/xfs/xfs_qm_syscalls.c | 30 ++++++++++--- fs/xfs/xfs_quota.h | 8 ---- fs/xfs/xfs_sb.h | 20 +++++++-- fs/xfs/xfs_super.c | 15 ++++--- fs/xfs/xfs_trans_dquot.c | 4 +- include/linux/dqblk_xfs.h | 1 + 9 files changed, 139 insertions(+), 61 deletions(-) diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index 8655280..f17e3bb 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h @@ -155,6 +155,7 @@ typedef struct fs_quota_stat { __s8 qs_pad; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ +#define qs_pquota qs_gquota __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index 1c61c9b..6e218ba 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -278,14 +278,6 @@ typedef struct xfs_qoff_logformat { (XFS_IS_PQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) -#define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ - XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) - -#define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) - #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h index 5242512..55f63ed 100644 --- a/fs/xfs/xfs_sb.h +++ b/fs/xfs/xfs_sb.h @@ -81,11 +81,15 @@ struct xfs_mount; #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ #define XFS_SB_VERSION2_PARENTBIT 0x00000010 /* parent pointers */ #define XFS_SB_VERSION2_PROJID32BIT 0x00000080 /* 32 bit project id */ +#define XFS_SB_VERSION2_NO_OQUOTA 0x00000100 /* No OQUOTA and * + * separate project * + * quota field */ #define XFS_SB_VERSION2_OKREALFBITS \ (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ XFS_SB_VERSION2_ATTR2BIT | \ - XFS_SB_VERSION2_PROJID32BIT) + XFS_SB_VERSION2_PROJID32BIT | \ + XFS_SB_VERSION2_NO_OQUOTA) #define XFS_SB_VERSION2_OKSASHFBITS \ (0) #define XFS_SB_VERSION2_OKREALBITS \ @@ -140,7 +144,6 @@ typedef struct xfs_sb { */ xfs_ino_t sb_uquotino; /* user quota inode */ xfs_ino_t sb_gquotino; /* group quota inode */ -#define sb_pquotino sb_gquotino __uint16_t sb_qflags; /* quota flags */ __uint8_t sb_flags; /* misc. flags */ __uint8_t sb_shared_vn; /* shared version number */ @@ -160,6 +163,7 @@ typedef struct xfs_sb { * it for anything else. */ __uint32_t sb_bad_features2; + xfs_ino_t sb_pquotino; /* project quota inode */ /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -230,6 +234,7 @@ typedef struct xfs_dsb { * it for anything else. */ __be32 sb_bad_features2; + __be64 sb_pquotino; /* project quota inode */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -250,7 +255,7 @@ typedef enum { XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, - XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_PQUOTINO, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -276,6 +281,7 @@ typedef enum { #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) +#define XFS_SB_PQUOTINO XFS_SB_MVAL(PQUOTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) #define XFS_SB_MOD_BITS \ @@ -283,7 +289,7 @@ typedef enum { XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ - XFS_SB_BAD_FEATURES2) + XFS_SB_BAD_FEATURES2 | XFS_SB_PQUOTINO) /* @@ -504,6 +510,12 @@ static inline int xfs_sb_version_hasprojid32bit(xfs_sb_t *sbp) (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT); } +static inline int xfs_sb_version_has_no_oquota(xfs_sb_t *sbp) +{ + return xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_NO_OQUOTA); +} + /* * end of superblock version macros */ diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index 751e94f..0ea4361 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -43,7 +43,8 @@ xfs_internal_inum( { return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || (xfs_sb_version_hasquota(&mp->m_sb) && - (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); + (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino))); } /* diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 64313e4..2a70acb 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -108,6 +108,7 @@ static const struct { { offsetof(xfs_sb_t, sb_logsunit), 0 }, { offsetof(xfs_sb_t, sb_features2), 0 }, { offsetof(xfs_sb_t, sb_bad_features2), 0 }, + { offsetof(xfs_sb_t, sb_pquotino), 0 }, { sizeof(xfs_sb_t), 0 } }; @@ -593,20 +594,6 @@ xfs_sb_from_disk( to->sb_uquotino = be64_to_cpu(from->sb_uquotino); to->sb_gquotino = be64_to_cpu(from->sb_gquotino); to->sb_qflags = be16_to_cpu(from->sb_qflags); - if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && - (to->sb_qflags & (XFS_PQUOTA_ENFD |XFS_GQUOTA_ENFD | - XFS_PQUOTA_CHKD| XFS_GQUOTA_CHKD))) { - xfs_notice(mp, "Super block has XFS_OQUOTA bits along with " - "XFS_PQUOTA and/or XFS_GQUOTA bits. Fixing it.\n"); - } - if (to->sb_qflags & XFS_OQUOTA_ENFD) - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? - XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; - if (to->sb_qflags & XFS_OQUOTA_CHKD) - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? - XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; - to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); - to->sb_flags = from->sb_flags; to->sb_shared_vn = from->sb_shared_vn; to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); @@ -618,6 +605,33 @@ xfs_sb_from_disk( to->sb_logsunit = be32_to_cpu(from->sb_logsunit); to->sb_features2 = be32_to_cpu(from->sb_features2); to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); + + if (xfs_sb_version_has_no_oquota(to)) { + if (to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { + xfs_notice(mp, "Super block has XFS_OQUOTA bits with " + "version NO_OQUOTA. Fixing it.\n"); + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + } + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); + } else { + if (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { + xfs_notice(mp, "Super block has XFS_[G|P]UOTA bits in " + "older version. Fixing it.\n"); + to->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD); + } + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + + if (to->sb_qflags & XFS_PQUOTA_ACCT) + to->sb_pquotino = to->sb_gquotino; + } } /* @@ -636,26 +650,37 @@ xfs_sb_to_disk( xfs_sb_field_t f; int first; int size; - __be16 saved_qflags; + __be16 saved_qflags = 0; ASSERT(fields); if (!fields) return; - /* - * in-core version of qflags do not have XFS_OQUOTA.*, whereas the - * on-disk version does. So, save the in-core sb_qflags and restore - * it after we modify and copy it to the buffer to be copied to - * disk. - */ - saved_qflags = from->sb_qflags; - if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) - from->sb_qflags |= XFS_OQUOTA_ENFD; - if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) - from->sb_qflags |= XFS_OQUOTA_CHKD; - from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + if (!xfs_sb_version_has_no_oquota(from) && + (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD))) { + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD)) { + from->sb_gquotino = from->sb_pquotino; + from->sb_pquotino = 0; + } + /* + * in-core version of qflags do not have XFS_OQUOTA.*, whereas + * the on-disk version does. So, save the in-core sb_qflags + * and restore it after we modify and copy it to the buffer + * to be copied to disk. + */ + saved_qflags = from->sb_qflags; + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + from->sb_qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + from->sb_qflags |= XFS_OQUOTA_CHKD; + from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); + } + while (fields) { f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); first = xfs_sb_info[f].offset; @@ -686,7 +711,15 @@ xfs_sb_to_disk( fields &= ~(1LL << f); } - from->sb_qflags = saved_qflags; + + /* Revert to the old saved values */ + if (saved_qflags) { + from->sb_qflags = saved_qflags; + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD)) { + from->sb_pquotino = from->sb_gquotino; + from->sb_gquotino = NULLFSINO; + } + } } /* @@ -754,6 +787,12 @@ reread: goto reread; } + if (!xfs_sb_version_has_no_oquota(&mp->m_sb) && + XFS_IS_PQUOTA_ON(mp)) { + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino; + mp->m_sb.sb_gquotino = NULLFSINO; + } + /* Initialize per-cpu counters */ xfs_icsb_reinit_counters(mp); @@ -1672,6 +1711,12 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) first = sizeof(xfs_sb_t); last = 0; + if (!xfs_sb_version_has_no_oquota(&mp->m_sb) && + XFS_IS_PQUOTA_ON(mp)) { + fields &= (__int64_t)~XFS_SB_PQUOTINO; + fields |= (__int64_t)XFS_SB_GQUOTINO; + } + /* translate/copy */ xfs_sb_to_disk(XFS_BUF_TO_SBP(bp), &mp->m_sb, fields); diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 47c33a5..b3eb91e 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -708,7 +708,8 @@ xfs_qm_dqattach_locked( !XFS_IS_QUOTA_ON(mp) || !XFS_NOT_DQATTACHED(mp, ip) || ip->i_ino == mp->m_sb.sb_uquotino || - ip->i_ino == mp->m_sb.sb_gquotino) + ip->i_ino == mp->m_sb.sb_gquotino || + ip->i_ino == mp->m_sb.sb_pquotino) return 0; ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); @@ -819,6 +820,7 @@ xfs_qm_dqdetach( ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_uquotino); ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_gquotino); + ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_pquotino); if (ip->i_udquot) { xfs_qm_dqrele(ip->i_udquot); ip->i_udquot = NULL; @@ -1058,19 +1060,22 @@ xfs_qm_qino_alloc( ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); + XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | XFS_SB_QFLAGS)); xfs_sb_version_addquota(&mp->m_sb); mp->m_sb.sb_uquotino = NULLFSINO; mp->m_sb.sb_gquotino = NULLFSINO; + mp->m_sb.sb_pquotino = NULLFSINO; /* qflags will get updated _after_ quotacheck */ mp->m_sb.sb_qflags = 0; } if (flags & XFS_QMOPT_UQUOTA) mp->m_sb.sb_uquotino = (*ip)->i_ino; - else + else if (flags & XFS_QMOPT_GQUOTA) mp->m_sb.sb_gquotino = (*ip)->i_ino; + else + mp->m_sb.sb_pquotino = (*ip)->i_ino; spin_unlock(&mp->m_sb_lock); xfs_mod_sb(tp, sbfields); @@ -1377,7 +1382,8 @@ xfs_qm_dqusage_adjust( * rootino must have its resources accounted for, not so with the quota * inodes. */ - if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { + if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino) { *res = BULKSTAT_RV_NOTHING; return XFS_ERROR(EINVAL); } @@ -1636,7 +1642,7 @@ xfs_qm_init_quotainos( } else { flags |= XFS_QMOPT_SBVERSION; sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS); + XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | XFS_SB_QFLAGS); } /* @@ -1666,7 +1672,7 @@ xfs_qm_init_quotainos( } if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { error = xfs_qm_qino_alloc(mp, &pip, - sbflags | XFS_SB_GQUOTINO, + sbflags | XFS_SB_PQUOTINO, flags | XFS_QMOPT_PQUOTA); if (error) { if (uip) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index 9849828..fe92b72 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -210,8 +210,7 @@ xfs_qm_scall_quotaoff( /* * If quotas is completely disabled, close shop. */ - if (((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET1) || - ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET2)) { + if ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_ALL) { mutex_unlock(&q->qi_quotaofflock); xfs_qm_destroy_quotainfo(mp); return (0); @@ -306,8 +305,10 @@ xfs_qm_scall_trunc_qfiles( if (flags & XFS_DQ_USER) error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_uquotino); - if (flags & (XFS_DQ_GROUP|XFS_DQ_PROJ)) + if (flags & XFS_DQ_GROUP) error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_gquotino); + if (flags & XFS_DQ_PROJ) + error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_pquotino); return error ? error : error2; } @@ -423,17 +424,18 @@ xfs_qm_scall_getqstat( struct fs_quota_stat *out) { struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_inode *uip, *gip; - boolean_t tempuqip, tempgqip; + struct xfs_inode *uip, *gip, *pip; + boolean_t tempuqip, tempgqip, temppqip; - uip = gip = NULL; - tempuqip = tempgqip = B_FALSE; + uip = gip = pip = NULL; + tempuqip = tempgqip = temppqip = B_FALSE; memset(out, 0, sizeof(fs_quota_stat_t)); out->qs_version = FS_QSTAT_VERSION; if (!xfs_sb_version_hasquota(&mp->m_sb)) { out->qs_uquota.qfs_ino = NULLFSINO; out->qs_gquota.qfs_ino = NULLFSINO; + out->qs_pquota.qfs_ino = NULLFSINO; return (0); } out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & @@ -442,10 +444,13 @@ xfs_qm_scall_getqstat( out->qs_pad = 0; out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; + if (&out->qs_gquota != &out->qs_pquota) + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; if (q) { uip = q->qi_uquotaip; gip = q->qi_gquotaip; + pip = q->qi_pquotaip; } if (!uip && mp->m_sb.sb_uquotino != NULLFSINO) { if (xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, @@ -457,6 +462,11 @@ xfs_qm_scall_getqstat( 0, 0, &gip) == 0) tempgqip = B_TRUE; } + if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { + if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip) == 0) + temppqip = B_TRUE; + } if (uip) { out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; @@ -469,6 +479,12 @@ xfs_qm_scall_getqstat( if (tempgqip) IRELE(gip); } + if (pip) { + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + if (temppqip) + IRELE(pip); + } if (q) { out->qs_incoredqs = q->qi_dquots; out->qs_btimelimit = q->qi_btimelimit; diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index b0a1266..5c3fa86 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -400,12 +400,6 @@ xfs_parseargs( } #endif - if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && - (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { - xfs_warn(mp, "cannot mount with both project and group quota"); - return EINVAL; - } - if ((dsunit && !dswidth) || (!dsunit && dswidth)) { xfs_warn(mp, "sunit and swidth must be specified together"); return EINVAL; @@ -1315,6 +1309,15 @@ xfs_fs_fill_super( if (error) goto out_destroy_counters; + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) && + !xfs_sb_version_has_no_oquota(&mp->m_sb)) { + xfs_warn(mp, "Super block does not support " + "project and group quota together"); + error = EINVAL; + goto out_free_sb; + } + error = xfs_finish_flags(mp); if (error) goto out_free_sb; diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 48003d3..a9b5f73 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -165,7 +165,8 @@ xfs_trans_mod_dquot_byino( if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp) || ip->i_ino == mp->m_sb.sb_uquotino || - ip->i_ino == mp->m_sb.sb_gquotino) + ip->i_ino == mp->m_sb.sb_gquotino || + ip->i_ino == mp->m_sb.sb_pquotino) return; if (tp->t_dqinfo == NULL) @@ -859,6 +860,7 @@ xfs_trans_reserve_quota_nblks( ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); + ASSERT(ip->i_ino != mp->m_sb.sb_pquotino); ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT((flags & ~(XFS_QMOPT_FORCE_RES | XFS_QMOPT_ENOSPC)) == -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:32:41 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWfwA122911 for ; Mon, 23 Jan 2012 11:32:41 -0600 X-ASG-Debug-ID: 1327339959-04bdf067b7320d10001-NocioJ Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by cuda.sgi.com with ESMTP id M0RfofyJzBuDAChr for ; Mon, 23 Jan 2012 09:32:40 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.153 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from /spool/local by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:39 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:08 -0700 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 623951FF0071 for ; Mon, 23 Jan 2012 10:32:07 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHW4qB232424 for ; Mon, 23 Jan 2012 12:32:05 -0500 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHVirV008666 for ; Mon, 23 Jan 2012 10:31:44 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHVhKB008544; Mon, 23 Jan 2012 10:31:44 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:31:43 -0600 Message-Id: <20120123173143.31546.29558.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC PATCH 4/4] Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC PATCH 4/4] Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage x-cbid: 12012317-6148-0000-0000-000002D8F93B X-Barracuda-Connect: e35.co.us.ibm.com[32.97.110.153] X-Barracuda-Start-Time: 1327339960 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage of quota macros. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_qm.c | 2 +- fs/xfs/xfs_quota.h | 2 ++ fs/xfs/xfs_super.c | 7 +++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index 8a0807e..b50ec5b 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -174,6 +174,8 @@ typedef struct xfs_qoff_logformat { #define XFS_UQUOTA_ACTIVE 0x0100 /* uquotas are being turned off */ #define XFS_PQUOTA_ACTIVE 0x0200 /* pquotas are being turned off */ #define XFS_GQUOTA_ACTIVE 0x0400 /* gquotas are being turned off */ +#define XFS_ALL_QUOTA_ACTIVE \ + (XFS_UQUOTA_ACTIVE | XFS_PQUOTA_ACTIVE | XFS_GQUOTA_ACTIVE) /* * Checking XFS_IS_*QUOTA_ON() while holding any inode lock guarantees diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 671f37e..1b2f5b3 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -1499,7 +1499,7 @@ xfs_qm_quotacheck( * quotachecked status, since we won't be doing accounting for * that type anymore. */ - mp->m_qflags &= ~(XFS_OQUOTA_CHKD | XFS_UQUOTA_CHKD); + mp->m_qflags &= ~XFS_ALL_QUOTA_CHKD; mp->m_qflags |= flags; error_return: diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index ee5b695..5e0d43f 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -324,10 +324,9 @@ xfs_parseargs( } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { mp->m_flags |= XFS_MOUNT_FILESTREAMS; } else if (!strcmp(this_char, MNTOPT_NOQUOTA)) { - mp->m_qflags &= ~(XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE | - XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | - XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | - XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD); + mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT; + mp->m_qflags &= ~XFS_ALL_QUOTA_ENFD; + mp->m_qflags &= ~XFS_ALL_QUOTA_ACTIVE; } else if (!strcmp(this_char, MNTOPT_QUOTA) || !strcmp(this_char, MNTOPT_UQUOTA) || !strcmp(this_char, MNTOPT_USRQUOTA)) { -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:32:41 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWfru122914 for ; Mon, 23 Jan 2012 11:32:41 -0600 X-ASG-Debug-ID: 1327339960-04cbb0302537e480001-NocioJ Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by cuda.sgi.com with ESMTP id PrwqDBua7pMJYtUl for ; Mon, 23 Jan 2012 09:32:40 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.153 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from /spool/local by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:39 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:31:45 -0700 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 6CCBE1FF0049 for ; Mon, 23 Jan 2012 10:31:44 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHVd4D135092 for ; Mon, 23 Jan 2012 10:31:41 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHVcZ8008134 for ; Mon, 23 Jan 2012 10:31:38 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHVbco008091; Mon, 23 Jan 2012 10:31:38 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:31:37 -0600 Message-Id: <20120123173137.31546.33777.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC PATCH 3/4] Change xfs_sb_from_disk() interface to take a mount pointer X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC PATCH 3/4] Change xfs_sb_from_disk() interface to take a mount pointer x-cbid: 12012317-6148-0000-0000-000002D8F7EF X-Barracuda-Connect: e35.co.us.ibm.com[32.97.110.153] X-Barracuda-Start-Time: 1327339960 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Change xfs_sb_from_disk() interface to take a mount pointer instead of a superblock pointer. This is to print mount point specific error messages in future fixes. Signed-off-by: Chandra Seetharaman --- fs/xfs/xfs_log_recover.c | 2 +- fs/xfs/xfs_mount.c | 6 ++++-- fs/xfs/xfs_mount.h | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 19f69e2..c082e44 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -395,7 +395,7 @@ extern void xfs_set_low_space_thresholds(struct xfs_mount *); extern void xfs_mod_sb(struct xfs_trans *, __int64_t); extern int xfs_initialize_perag(struct xfs_mount *, xfs_agnumber_t, xfs_agnumber_t *); -extern void xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *); +extern void xfs_sb_from_disk(struct xfs_mount *, struct xfs_dsb *); extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t); #endif /* __XFS_MOUNT_H__ */ diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 541a508..b38eb84 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -3695,7 +3695,7 @@ xlog_do_recover( /* Convert superblock from on-disk format */ sbp = &log->l_mp->m_sb; - xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp)); + xfs_sb_from_disk(log->l_mp, XFS_BUF_TO_SBP(bp)); ASSERT(sbp->sb_magicnum == XFS_SB_MAGIC); ASSERT(xfs_sb_good_version(sbp)); xfs_buf_relse(bp); diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index d06afbc..25e9908 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -553,9 +553,11 @@ out_unwind: void xfs_sb_from_disk( - xfs_sb_t *to, + struct xfs_mount *mp, xfs_dsb_t *from) { + struct xfs_sb *to = &mp->m_sb; + to->sb_magicnum = be32_to_cpu(from->sb_magicnum); to->sb_blocksize = be32_to_cpu(from->sb_blocksize); to->sb_dblocks = be64_to_cpu(from->sb_dblocks); @@ -693,7 +695,7 @@ reread: * Initialize the mount structure from the superblock. * But first do some basic consistency checking. */ - xfs_sb_from_disk(&mp->m_sb, XFS_BUF_TO_SBP(bp)); + xfs_sb_from_disk(mp, XFS_BUF_TO_SBP(bp)); error = xfs_mount_validate_sb(mp, &(mp->m_sb), flags); if (error) { if (loud) -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:32:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWlxc122948 for ; Mon, 23 Jan 2012 11:32:47 -0600 X-ASG-Debug-ID: 1327339966-04cbb0302637e4b0001-NocioJ Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by cuda.sgi.com with ESMTP id gWf1hOD9J0cZz6G7 for ; Mon, 23 Jan 2012 09:32:46 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.153 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from /spool/local by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:44 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:08 -0700 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id B84FA1FF0077 for ; Mon, 23 Jan 2012 10:32:07 -0700 (MST) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHW0rN103082 for ; Mon, 23 Jan 2012 10:32:00 -0700 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHVxCf011820 for ; Mon, 23 Jan 2012 10:31:59 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHVxqX011753; Mon, 23 Jan 2012 10:31:59 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:31:59 -0600 Message-Id: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC v3 PATCH 0/4] xfs: Allow pquota and gquota to be used together X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC v3 PATCH 0/4] xfs: Allow pquota and gquota to be used together x-cbid: 12012317-6148-0000-0000-000002D8F93C X-Barracuda-Connect: e35.co.us.ibm.com[32.97.110.153] X-Barracuda-Start-Time: 1327339966 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Whitelist: Body =?UTF-8?B?aHR0cDovL21hcmNcLmluZm8vXD8=?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-URL-Found: marc.info (*Spam.Advertising) Hello All, This is the version 2 of the changes to allow pquota and gquota to be used together. version 2 of the posting can be found at http://marc.info/?l=linux-xfs&m=131966420607401&w=2 Changes from version 2 to version 3: - hash table for pquota is added. - changes to apply cleanly with the latest tree version 1 of the posting can be found at http://article.gmane.org/gmane.comp.file-systems.xfs.general/41284 Changes from version 1 to version 2: - Created a new prep patch to accomodate some generic changes that ease the later patches. - Created a new patch to add a new field qs_pquota to fs_quota_stat with appropriate versioning changes - Changed the logic to allow XFS_OQUOTA.* flags to be allowed only in the older versions. - Changed couple of places where PQUOTA checking was on the else if construct so as to allow both GQUOTA and PQUOTA in those places. - Fixed comments in xfs_quota.h to reflect the current changes. - Changed the name of the macro XFS_SB_VERSION2_SEPER_PQUOTA to XFS_SB_VERSION2_NO_OQUOTA - got rid of the macros XFS_MOUNT_QUOTA_SET1 and XFS_MOUNT_QUOTA_SET2 - added a new inline function xfs_inode_dquot(ip, type) to simplify the error path in xfs_qm_dqget() - got rid of the macro XFS_IS_THIS_QUOTA_OFF - added comment to explain why sb_qflags is saved and restored in xfs_sb_to_disk() Thanks & Regards, chandra From sekharan@us.ibm.com Mon Jan 23 11:32:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWnPL122959 for ; Mon, 23 Jan 2012 11:32:49 -0600 X-ASG-Debug-ID: 1327339968-04cb6c199026b660001-NocioJ Received: from e38.co.us.ibm.com (e38.co.us.ibm.com [32.97.110.159]) by cuda.sgi.com with ESMTP id MgACEcCxTVC9N8CF for ; Mon, 23 Jan 2012 09:32:48 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.159 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.159] Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:47 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.159] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.159] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.159] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.159] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e38.co.us.ibm.com (192.168.1.138) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:45 -0700 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id BBB043E40059 for ; Mon, 23 Jan 2012 10:32:44 -0700 (MST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHWif9274498 for ; Mon, 23 Jan 2012 12:32:44 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHWiNr026721 for ; Mon, 23 Jan 2012 15:32:44 -0200 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHWhAC026658; Mon, 23 Jan 2012 15:32:43 -0200 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:43 -0600 Message-Id: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [PATCH 0/4] xfsprogs: Allow pquota and gquota to be used together X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [PATCH 0/4] xfsprogs: Allow pquota and gquota to be used together x-cbid: 12012317-5518-0000-0000-000001BCCAFD X-Barracuda-Connect: e38.co.us.ibm.com[32.97.110.159] X-Barracuda-Start-Time: 1327339968 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Hello All, These are the set of changes that are need to the user space code to support pquota and gquota together. Regards, chandra From sekharan@us.ibm.com Mon Jan 23 11:32:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_93 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWvwv122999 for ; Mon, 23 Jan 2012 11:32:57 -0600 X-ASG-Debug-ID: 1327339976-04cbb0302537e4e0001-NocioJ Received: from e37.co.us.ibm.com (e37.co.us.ibm.com [32.97.110.158]) by cuda.sgi.com with ESMTP id lbdj2Sk7ZGuheEuz for ; Mon, 23 Jan 2012 09:32:56 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.158 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] Received: from /spool/local by e37.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:51 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e37.co.us.ibm.com (192.168.1.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:26 -0700 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 564A43E40049 for ; Mon, 23 Jan 2012 10:32:25 -0700 (MST) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHWOAc265108 for ; Mon, 23 Jan 2012 12:32:24 -0500 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHWO3s006789 for ; Mon, 23 Jan 2012 12:32:24 -0500 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHWN2g006745; Mon, 23 Jan 2012 12:32:23 -0500 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:23 -0600 Message-Id: <20120123173222.31640.36334.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [RFC v3 PATCH 4/4] xfs: Add a new field to fs_quota_stat to get pquota information X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [RFC v3 PATCH 4/4] xfs: Add a new field to fs_quota_stat to get pquota information x-cbid: 12012317-7408-0000-0000-0000021A1467 X-Barracuda-Connect: e37.co.us.ibm.com[32.97.110.158] X-Barracuda-Start-Time: 1327339976 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Add a new field to fs_quota_stat and define a new version for the bigger size. Signed-off-by: Chandra Seetharaman --- fs/quota/quota.c | 6 +++++- fs/xfs/xfs_qm_syscalls.c | 26 +++++++++++++------------- include/linux/dqblk_xfs.h | 28 +++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index f17e3bb..74cc847 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h @@ -18,6 +18,7 @@ #define _LINUX_DQBLK_XFS_H #include +#include /* * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). @@ -139,6 +140,7 @@ typedef struct fs_disk_quota { * incore. */ #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ /* * Some basic information about 'quota files'. @@ -155,13 +157,37 @@ typedef struct fs_quota_stat { __s8 qs_pad; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ -#define qs_pquota qs_gquota __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ __s32 qs_rtbtimelimit;/* limit for rt blks timer */ __u16 qs_bwarnlimit; /* limit for num warnings */ __u16 qs_iwarnlimit; /* limit for num warnings */ + fs_qfilestat_t qs_pquota; /* project quota storage information */ } fs_quota_stat_t; +#define FS_QSTAT_V1_SIZE (offsetof(fs_quota_stat_t, qs_pquota)) +#define FS_QSTAT_V2_SIZE (FS_QSTAT_V1_SIZE + sizeof (fs_qfilestat_t)) + +static inline int valid_qstat_version(int version) +{ + switch(version) { + case FS_QSTAT_VERSION: + case FS_QSTAT_VERSION_2: + return 1; + default: + return 0; + } +} +static inline int qstatsize(int version) +{ + switch(version) { + case FS_QSTAT_VERSION_2: + return FS_QSTAT_V2_SIZE; + case FS_QSTAT_VERSION: + default: + return FS_QSTAT_V1_SIZE; + } +} + #endif /* _LINUX_DQBLK_XFS_H */ diff --git a/fs/quota/quota.c b/fs/quota/quota.c index 7898cd6..ee571b9 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c @@ -203,8 +203,12 @@ static int quota_getxstate(struct super_block *sb, void __user *addr) if (!sb->s_qcop->get_xstate) return -ENOSYS; + if (copy_from_user(&fqs, addr, 1)) /* just get the version */ + return -EFAULT; + if (!valid_qstat_version(fqs.qs_version)) + fqs.qs_version = FS_QSTAT_VERSION; ret = sb->s_qcop->get_xstate(sb, &fqs); - if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) + if (!ret && copy_to_user(addr, &fqs, qstatsize(fqs.qs_version))) return -EFAULT; return ret; } diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index fe92b72..a4df935 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -431,7 +431,6 @@ xfs_qm_scall_getqstat( tempuqip = tempgqip = temppqip = B_FALSE; memset(out, 0, sizeof(fs_quota_stat_t)); - out->qs_version = FS_QSTAT_VERSION; if (!xfs_sb_version_hasquota(&mp->m_sb)) { out->qs_uquota.qfs_ino = NULLFSINO; out->qs_gquota.qfs_ino = NULLFSINO; @@ -444,8 +443,6 @@ xfs_qm_scall_getqstat( out->qs_pad = 0; out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; - if (&out->qs_gquota != &out->qs_pquota) - out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; if (q) { uip = q->qi_uquotaip; @@ -462,11 +459,6 @@ xfs_qm_scall_getqstat( 0, 0, &gip) == 0) tempgqip = B_TRUE; } - if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { - if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, - 0, 0, &pip) == 0) - temppqip = B_TRUE; - } if (uip) { out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; @@ -479,11 +471,19 @@ xfs_qm_scall_getqstat( if (tempgqip) IRELE(gip); } - if (pip) { - out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; - out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; - if (temppqip) - IRELE(pip); + if (out->qs_version >= FS_QSTAT_VERSION_2) { + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; + if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { + if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip) == 0) + temppqip = B_TRUE; + } + if (pip) { + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + if (temppqip) + IRELE(pip); + } } if (q) { out->qs_incoredqs = q->qi_dquots; -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:32:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHWxmt123017 for ; Mon, 23 Jan 2012 11:32:59 -0600 X-ASG-Debug-ID: 1327339978-04cbb0302437e4e0001-NocioJ Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by cuda.sgi.com with ESMTP id hrqKB1zjVs55tqXx for ; Mon, 23 Jan 2012 09:32:58 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.150 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:32:58 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e32.co.us.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:32:56 -0700 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 7EAF01FF0049 for ; Mon, 23 Jan 2012 10:32:55 -0700 (MST) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHWs3U283456 for ; Mon, 23 Jan 2012 12:32:54 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHWrfd025546 for ; Mon, 23 Jan 2012 15:32:54 -0200 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHWnfC025309; Mon, 23 Jan 2012 15:32:50 -0200 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:49 -0600 Message-Id: <20120123173249.31735.17660.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [PATCH 1/4] xfsprogs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [PATCH 1/4] xfsprogs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD x-cbid: 12012317-3270-0000-0000-0000036DA4DC X-Barracuda-Connect: e32.co.us.ibm.com[32.97.110.150] X-Barracuda-Start-Time: 1327339978 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com >From ba28fc49821079a734f24af05671155f6b32b20c Mon Sep 17 00:00:00 2001 From: Chandra Seetharaman Date: Tue, 13 Dec 2011 15:55:34 -0600 Subject: [PATCH 1/4] Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts. No changes is made to the on-disk version of the superblock yet. On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Signed-off-by: Chandra Seetharaman --- db/check.c | 8 ++++---- include/xfs_quota.h | 47 +++++++++++++++++++++++++++++++++-------------- include/xfs_sb.h | 17 ++++++++++++++++- repair/versions.c | 18 ++++-------------- repair/xfs_repair.c | 4 ++-- 5 files changed, 59 insertions(+), 35 deletions(-) diff --git a/db/check.c b/db/check.c index e601e0a..f00fae7 100644 --- a/db/check.c +++ b/db/check.c @@ -2883,11 +2883,11 @@ process_inode( process_quota(IS_USER_QUOTA, id, blkmap); else if (id->ino == mp->m_sb.sb_gquotino && (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) && - (mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD)) + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD)) process_quota(IS_GROUP_QUOTA, id, blkmap); else if (id->ino == mp->m_sb.sb_gquotino && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) && - (mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD)) + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD)) process_quota(IS_PROJECT_QUOTA, id, blkmap); } if (blkmap) @@ -3896,11 +3896,11 @@ quota_init(void) qgdo = mp->m_sb.sb_gquotino != 0 && mp->m_sb.sb_gquotino != NULLFSINO && (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) && - (mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD); + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD); qpdo = mp->m_sb.sb_gquotino != 0 && mp->m_sb.sb_gquotino != NULLFSINO && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) && - (mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD); + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD); if (qudo) qudata = xcalloc(QDATA_HASH_SIZE, sizeof(qdata_t *)); if (qgdo) diff --git a/include/xfs_quota.h b/include/xfs_quota.h index 5d1f57d..aa583a3 100644 --- a/include/xfs_quota.h +++ b/include/xfs_quota.h @@ -154,19 +154,42 @@ typedef struct xfs_qoff_logformat { #define XFS_GQUOTA_ACCT 0x0040 /* group quota accounting ON */ /* + * Start differentiating group quota and project quota in-core + * using distinct flags, instead of using the combined OQUOTA flags. + * + * Conversion to and from the combined OQUOTA flag (if necessary) + * is done only in xfs_sb_{to,from}_disk() + */ +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ + +#define XFS_VALID_QFLAGS(sbp) (xfs_sb_version_hasnooquota(sbp) ? \ + (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|XFS_UQUOTA_CHKD| \ + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD| \ + XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) : \ + (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|XFS_UQUOTA_CHKD| \ + XFS_GQUOTA_ACCT|XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD| \ + XFS_PQUOTA_ACCT)) + +/* * Quota Accounting/Enforcement flags */ #define XFS_ALL_QUOTA_ACCT \ (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT) -#define XFS_ALL_QUOTA_ENFD (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD) -#define XFS_ALL_QUOTA_CHKD (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD) +#define XFS_ALL_QUOTA_ENFD \ + (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD) +#define XFS_ALL_QUOTA_CHKD \ + (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD) #define XFS_IS_QUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT) #define XFS_IS_UQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_UQUOTA_ACCT) #define XFS_IS_PQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_PQUOTA_ACCT) #define XFS_IS_GQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_GQUOTA_ACCT) #define XFS_IS_UQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_UQUOTA_ENFD) -#define XFS_IS_OQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_OQUOTA_ENFD) +#define XFS_IS_GQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_GQUOTA_ENFD) +#define XFS_IS_PQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_PQUOTA_ENFD) /* * Incore only flags for quotaoff - these bits get cleared when quota(s) @@ -184,8 +207,6 @@ typedef struct xfs_qoff_logformat { #define XFS_IS_QUOTA_ON(mp) ((mp)->m_qflags & (XFS_UQUOTA_ACTIVE | \ XFS_GQUOTA_ACTIVE | \ XFS_PQUOTA_ACTIVE)) -#define XFS_IS_OQUOTA_ON(mp) ((mp)->m_qflags & (XFS_GQUOTA_ACTIVE | \ - XFS_PQUOTA_ACTIVE)) #define XFS_IS_UQUOTA_ON(mp) ((mp)->m_qflags & XFS_UQUOTA_ACTIVE) #define XFS_IS_GQUOTA_ON(mp) ((mp)->m_qflags & XFS_GQUOTA_ACTIVE) #define XFS_IS_PQUOTA_ON(mp) ((mp)->m_qflags & XFS_PQUOTA_ACTIVE) @@ -260,25 +281,23 @@ typedef struct xfs_qoff_logformat { ((XFS_IS_UQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \ (XFS_IS_GQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT))) || \ + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD) == 0) || \ (XFS_IS_PQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT)))) + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) #define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) #define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD|\ - XFS_GQUOTA_ACCT) - + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|\ + XFS_GQUOTA_CHKD) /* * The structure kept inside the xfs_trans_t keep track of dquot changes diff --git a/include/xfs_sb.h b/include/xfs_sb.h index 5dcc2d7..69c6822 100644 --- a/include/xfs_sb.h +++ b/include/xfs_sb.h @@ -81,11 +81,13 @@ struct xfs_mount; #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ #define XFS_SB_VERSION2_PARENTBIT 0x00000010 /* parent pointers */ #define XFS_SB_VERSION2_PROJID32BIT 0x00000080 /* 32 bit project id */ +#define XFS_SB_VERSION2_NO_OQUOTA 0x00000100 /* sep prj quota inode */ #define XFS_SB_VERSION2_OKREALFBITS \ (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ XFS_SB_VERSION2_ATTR2BIT | \ - XFS_SB_VERSION2_PROJID32BIT) + XFS_SB_VERSION2_PROJID32BIT | \ + XFS_SB_VERSION2_NO_OQUOTA) #define XFS_SB_VERSION2_OKSASHFBITS \ (0) #define XFS_SB_VERSION2_OKREALBITS \ @@ -510,6 +512,19 @@ static inline void xfs_sb_version_addprojid32bit(xfs_sb_t *sbp) sbp->sb_bad_features2 |= XFS_SB_VERSION2_PROJID32BIT; } +static inline int xfs_sb_version_hasnooquota(xfs_sb_t *sbp) +{ + return xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_NO_OQUOTA); +} + +static inline void xfs_sb_version_addnooquota(xfs_sb_t *sbp) +{ + sbp->sb_versionnum |= XFS_SB_VERSION_MOREBITSBIT; + sbp->sb_features2 |= XFS_SB_VERSION2_PROJID32BIT; + sbp->sb_bad_features2 |= XFS_SB_VERSION2_NO_OQUOTA; +} + /* * end of superblock version macros */ diff --git a/repair/versions.c b/repair/versions.c index 957766a..e37eb10 100644 --- a/repair/versions.c +++ b/repair/versions.c @@ -61,26 +61,16 @@ update_sb_version(xfs_mount_t *mp) /* * protect against stray bits in the quota flag field */ - if (sb->sb_qflags & ~(XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD| - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT| - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD| - XFS_PQUOTA_ACCT)) { + if (sb->sb_qflags & ~XFS_VALID_QFLAGS(sb)) { /* * update the incore superblock, if we're in * no_modify mode, it'll never get flushed out * so this is ok. */ do_warn(_("bogus quota flags 0x%x set in superblock"), - sb->sb_qflags & ~(XFS_UQUOTA_ACCT| - XFS_UQUOTA_ENFD| - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT| - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD| - XFS_PQUOTA_ACCT)); + sb->sb_qflags & ~XFS_VALID_QFLAGS(sb)); - sb->sb_qflags &= (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD| - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT| - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD| - XFS_PQUOTA_ACCT); + sb->sb_qflags &= XFS_VALID_QFLAGS(sb); if (!no_modify) do_warn(_(", bogus flags will be cleared\n")); diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index 69b7eab..0b82e8e 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -856,10 +856,10 @@ _("Warning: project quota information would be cleared.\n" dsb = XFS_BUF_TO_SBP(sbp); - if (be16_to_cpu(dsb->sb_qflags) & (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD)) { + if (be16_to_cpu(dsb->sb_qflags) & (XFS_ALL_QUOTA_CHKD | XFS_OQUOTA_CHKD)) { do_warn(_("Note - quota info will be regenerated on next " "quota mount.\n")); - dsb->sb_qflags &= cpu_to_be16(~(XFS_UQUOTA_CHKD | + dsb->sb_qflags &= cpu_to_be16(~(XFS_ALL_QUOTA_CHKD | XFS_OQUOTA_CHKD)); } -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:33:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_66, J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHXVQG123058 for ; Mon, 23 Jan 2012 11:33:31 -0600 X-ASG-Debug-ID: 1327340010-04cbb0302437e5b0001-NocioJ Received: from e37.co.us.ibm.com (e37.co.us.ibm.com [32.97.110.158]) by cuda.sgi.com with ESMTP id OywvaQqyHYLrF4dH for ; Mon, 23 Jan 2012 09:33:30 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.158 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] Received: from /spool/local by e37.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:33:30 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.158] Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e37.co.us.ibm.com (192.168.1.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:33:27 -0700 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 52BC83E40048 for ; Mon, 23 Jan 2012 10:33:27 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHX9P0114954 for ; Mon, 23 Jan 2012 10:33:19 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHX5eA015169 for ; Mon, 23 Jan 2012 10:33:05 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHX4UF015146; Mon, 23 Jan 2012 10:33:05 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:33:04 -0600 Message-Id: <20120123173304.31735.10706.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [PATCH 3/4] xfsprogs: Add qs_pquota to the fs_quota X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [PATCH 3/4] xfsprogs: Add qs_pquota to the fs_quota x-cbid: 12012317-7408-0000-0000-0000021A172E X-Barracuda-Connect: e37.co.us.ibm.com[32.97.110.158] X-Barracuda-Start-Time: 1327340010 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com >From 9de21fc22372c3ba65a38e259aa023a74d1cae36 Mon Sep 17 00:00:00 2001 From: Chandra Seetharaman Date: Tue, 13 Dec 2011 16:08:19 -0600 Subject: [PATCH 3/4] Add a new field qs_pquota to the data structure fs_quota_stat and also define a new version for the same. Inform the kernel that the data structure is newer one and on return from kernel check the version and act accordingly. Signed-off-by: Chandra Seetharaman --- include/xqm.h | 2 ++ quota/state.c | 6 +++++- 2 files changed, 7 insertions(+), 1 deletions(-) diff --git a/include/xqm.h b/include/xqm.h index 47f58a0..24e1ea0 100644 --- a/include/xqm.h +++ b/include/xqm.h @@ -124,6 +124,7 @@ typedef struct fs_disk_quota { * incore. */ #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ /* * Some basic information about 'quota files'. @@ -146,6 +147,7 @@ typedef struct fs_quota_stat { __s32 qs_rtbtimelimit;/* limit for rt blks timer */ __u16 qs_bwarnlimit; /* limit for num warnings */ __u16 qs_iwarnlimit; /* limit for num warnings */ + fs_qfilestat_t qs_pquota; /* project quota storage information */ } fs_quota_stat_t; #endif /* __XQM_H__ */ diff --git a/quota/state.c b/quota/state.c index 42bffc0..678699f 100644 --- a/quota/state.c +++ b/quota/state.c @@ -152,6 +152,8 @@ state_quotafile_mount( fs_quota_stat_t s; char *dev = mount->fs_name; + bzero(&s, sizeof(struct fs_quota_stat)); + s.qs_version = FS_QSTAT_VERSION_2; if (xfsquotactl(XFS_GETQSTAT, dev, type, 0, (void *)&s) < 0) { if (flags & VERBOSE_FLAG) fprintf(fp, _("%s quota are not enabled on %s\n"), @@ -168,7 +170,9 @@ state_quotafile_mount( s.qs_flags & XFS_QUOTA_GDQ_ACCT, s.qs_flags & XFS_QUOTA_GDQ_ENFD); if (type & XFS_PROJ_QUOTA) - state_qfilestat(fp, mount, XFS_PROJ_QUOTA, &s.qs_gquota, + state_qfilestat(fp, mount, XFS_PROJ_QUOTA, + (s.qs_version >= FS_QSTAT_VERSION_2) ? + &s.qs_pquota : &s.qs_gquota, s.qs_flags & XFS_QUOTA_PDQ_ACCT, s.qs_flags & XFS_QUOTA_PDQ_ENFD); -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:34:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_46, J_CHICKENPOX_47,J_CHICKENPOX_51,J_CHICKENPOX_71,J_CHICKENPOX_75 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHY9MZ123131 for ; Mon, 23 Jan 2012 11:34:09 -0600 X-ASG-Debug-ID: 1327340048-04bdf067b7320fc0001-NocioJ Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by cuda.sgi.com with ESMTP id dBYztzW8DqijUc2G for ; Mon, 23 Jan 2012 09:34:08 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.150 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:34:06 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e32.co.us.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:33:13 -0700 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 5BE201FF0049 for ; Mon, 23 Jan 2012 10:33:12 -0700 (MST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHXBiW266794 for ; Mon, 23 Jan 2012 12:33:11 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHXBn0028292 for ; Mon, 23 Jan 2012 15:33:11 -0200 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHXBmR028246; Mon, 23 Jan 2012 15:33:11 -0200 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:33:10 -0600 Message-Id: <20120123173310.31735.28918.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [PATCH 4/4] xfsprogs: Add support to mkfs to add pquotino by adding a new option. X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [PATCH 4/4] xfsprogs: Add support to mkfs to add pquotino by adding a new option. x-cbid: 12012317-3270-0000-0000-0000036DA561 X-Barracuda-Connect: e32.co.us.ibm.com[32.97.110.150] X-Barracuda-Start-Time: 1327340048 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com >From 77152735d6bc893b3a724d7a6ff4bb747fb23aec Mon Sep 17 00:00:00 2001 From: Chandra Seetharaman Date: Tue, 13 Dec 2011 16:10:07 -0600 Subject: [PATCH 4/4] Add support to mkfs to have a separate inode field for project quota. Signed-off-by: Chandra Seetharaman --- mkfs/xfs_mkfs.c | 22 +++++++++++++++++----- mkfs/xfs_mkfs.h | 3 ++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index f527f3d..872a304 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -90,6 +90,8 @@ char *dopts[] = { "projinherit", #define D_EXTSZINHERIT 14 "extszinherit", +#define D_NO_OQUOTA 15 + "seppquota", NULL }; @@ -922,6 +924,7 @@ main( libxfs_init_t xi; struct fs_topology ft; int lazy_sb_counters; + int seppquota; progname = basename(argv[0]); setlocale(LC_ALL, ""); @@ -930,6 +933,7 @@ main( attrversion = 2; projid32bit = 0; + seppquota = 1; blflag = bsflag = slflag = ssflag = lslflag = lssflag = 0; blocklog = blocksize = 0; sectorlog = lsectorlog = XFS_MIN_SECTORSIZE_LOG; @@ -1178,6 +1182,14 @@ main( fsx.fsx_xflags |= \ XFS_DIFLAG_EXTSZINHERIT; break; + case D_NO_OQUOTA: + if (!value) + value = "0"; + c = atoi(value); + if (c < 0 || c > 1) + illegal(value, "d seppquota"); + seppquota = c; + break; default: unknown('d', value); } @@ -2278,7 +2290,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), if (!qflag || Nflag) { printf(_( "meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n" - " =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n" + " =%-22s sectsz=%-5u attr=%u, projid32bit=%u, seppquota=%d\n" "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n" " =%-22s sunit=%-6u swidth=%u blks\n" "naming =version %-14u bsize=%-6u ascii-ci=%d\n" @@ -2286,7 +2298,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), " =%-22s sectsz=%-5u sunit=%d blks, lazy-count=%d\n" "realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"), dfile, isize, (long long)agcount, (long long)agsize, - "", sectorsize, attrversion, projid32bit, + "", sectorsize, attrversion, projid32bit, seppquota, "", blocksize, (long long)dblocks, imaxpct, "", dsunit, dswidth, dirversion, dirblocksize, nci, @@ -2330,7 +2342,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), sbp->sb_fdblocks = dblocks - agcount * XFS_PREALLOC_BLOCKS(mp) - (loginternal ? logblocks : 0); sbp->sb_frextents = 0; /* will do a free later */ - sbp->sb_uquotino = sbp->sb_gquotino = 0; + sbp->sb_uquotino = sbp->sb_gquotino = sbp->sb_pquotino = 0; sbp->sb_qflags = 0; sbp->sb_unit = dsunit; sbp->sb_width = dswidth; @@ -2353,7 +2365,7 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), sbp->sb_logsectsize = 0; } sbp->sb_features2 = XFS_SB_VERSION2_MKFS(lazy_sb_counters, - attrversion == 2, projid32bit == 1, 0); + attrversion == 2, projid32bit == 1, 0, seppquota); sbp->sb_versionnum = XFS_SB_VERSION_MKFS(iaflag, dsunit != 0, logversion == 2, attrversion == 1, (sectorsize != BBSIZE || @@ -2821,7 +2833,7 @@ usage( void ) /* blocksize */ [-b log=n|size=num]\n\ /* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num,\n\ (sunit=value,swidth=value|su=num,sw=num),\n\ - sectlog=n|sectsize=num\n\ + sectlog=n|sectsize=num,seppquota=0|1\n\ /* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,\n\ projid32bit=0|1]\n\ /* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n\n\ diff --git a/mkfs/xfs_mkfs.h b/mkfs/xfs_mkfs.h index f25a7f3..d597bb3 100644 --- a/mkfs/xfs_mkfs.h +++ b/mkfs/xfs_mkfs.h @@ -36,11 +36,12 @@ XFS_DFL_SB_VERSION_BITS | \ 0 ) : XFS_SB_VERSION_1 ) -#define XFS_SB_VERSION2_MKFS(lazycount, attr2, projid32bit, parent) (\ +#define XFS_SB_VERSION2_MKFS(lazycount, attr2, projid32bit, parent, seppquota) (\ ((lazycount) ? XFS_SB_VERSION2_LAZYSBCOUNTBIT : 0) | \ ((attr2) ? XFS_SB_VERSION2_ATTR2BIT : 0) | \ ((projid32bit) ? XFS_SB_VERSION2_PROJID32BIT : 0) | \ ((parent) ? XFS_SB_VERSION2_PARENTBIT : 0) | \ + ((seppquota) ? XFS_SB_VERSION2_NO_OQUOTA : 0) | \ 0 ) #define XFS_DFL_BLOCKSIZE_LOG 12 /* 4096 byte blocks */ -- 1.7.1 From sekharan@us.ibm.com Mon Jan 23 11:34:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NHY9rY123132 for ; Mon, 23 Jan 2012 11:34:09 -0600 X-ASG-Debug-ID: 1327340048-04bdf067b63210e0001-NocioJ Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by cuda.sgi.com with ESMTP id DrFxtOA9SWyGZ7SH for ; Mon, 23 Jan 2012 09:34:08 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.150 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jan 2012 10:34:06 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.150] Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e32.co.us.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 23 Jan 2012 10:33:14 -0700 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id C35C31FF0065 for ; Mon, 23 Jan 2012 10:33:13 -0700 (MST) Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0NHX0c3093672 for ; Mon, 23 Jan 2012 10:33:02 -0700 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0NHWxxl009779 for ; Mon, 23 Jan 2012 10:32:59 -0700 Received: from chandra-lucid.austin.ibm.com (chandra-lucid.austin.ibm.com [9.53.40.164]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0NHWxrG009740; Mon, 23 Jan 2012 10:32:59 -0700 From: Chandra Seetharaman To: xfs@oss.sgi.com Cc: Chandra Seetharaman Date: Mon, 23 Jan 2012 11:32:58 -0600 Message-Id: <20120123173258.31735.97984.sendpatchset@chandra-lucid.austin.ibm.com> In-Reply-To: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> References: <20120123173243.31735.37262.sendpatchset@chandra-lucid.austin.ibm.com> Subject: [PATCH 2/4] xfsprogs: Add new field pquotaino to on disk superblock X-Content-Scanned: Fidelis XPS MAILER X-ASG-Orig-Subj: [PATCH 2/4] xfsprogs: Add new field pquotaino to on disk superblock x-cbid: 12012317-3270-0000-0000-0000036DA56F X-Barracuda-Connect: e32.co.us.ibm.com[32.97.110.150] X-Barracuda-Start-Time: 1327340048 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com >From e0df4087facfd89e59183f4b8003196396d1a6d3 Mon Sep 17 00:00:00 2001 From: Chandra Seetharaman Date: Tue, 13 Dec 2011 16:06:33 -0600 Subject: [PATCH 2/4] Add a new field sb_pquotino to the on-disk superblock data structure and add accompanying code. Signed-off-by: Chandra Seetharaman --- db/check.c | 12 +++++++----- db/dquot.c | 7 +++---- db/frag.c | 3 ++- db/inode.c | 3 ++- db/metadump.c | 5 ++++- db/sb.c | 1 + include/xfs_sb.h | 7 +++++-- libxfs/xfs_mount.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ repair/agheader.c | 13 +++++++++++++ repair/dinode.c | 9 +++++++++ repair/dir.c | 22 ++++++++++++++++++++++ repair/dir2.c | 5 +++++ repair/globals.h | 1 + repair/phase4.c | 29 ++++++++++++++++++++++------- repair/phase6.c | 9 +++++++++ repair/sb.c | 3 +++ repair/versions.c | 5 +++++ repair/xfs_repair.c | 2 +- 18 files changed, 165 insertions(+), 22 deletions(-) diff --git a/db/check.c b/db/check.c index f00fae7..f5b8b9f 100644 --- a/db/check.c +++ b/db/check.c @@ -1831,7 +1831,8 @@ init( if (mp->m_sb.sb_inoalignmt) sbversion |= XFS_SB_VERSION_ALIGNBIT; if ((mp->m_sb.sb_uquotino && mp->m_sb.sb_uquotino != NULLFSINO) || - (mp->m_sb.sb_gquotino && mp->m_sb.sb_gquotino != NULLFSINO)) + (mp->m_sb.sb_gquotino && mp->m_sb.sb_gquotino != NULLFSINO) || + (mp->m_sb.sb_pquotino && mp->m_sb.sb_pquotino != NULLFSINO)) sbversion |= XFS_SB_VERSION_QUOTABIT; quota_init(); return 1; @@ -2764,7 +2765,8 @@ process_inode( addlink_inode(id); } else if (id->ino == mp->m_sb.sb_uquotino || - id->ino == mp->m_sb.sb_gquotino) { + id->ino == mp->m_sb.sb_gquotino || + id->ino == mp->m_sb.sb_pquotino) { type = DBM_QUOTA; blkmap = blkmap_alloc(idic.di_nextents); addlink_inode(id); @@ -2885,7 +2887,7 @@ process_inode( (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) && (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD)) process_quota(IS_GROUP_QUOTA, id, blkmap); - else if (id->ino == mp->m_sb.sb_gquotino && + else if (id->ino == mp->m_sb.sb_pquotino && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) && (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD)) process_quota(IS_PROJECT_QUOTA, id, blkmap); @@ -3897,8 +3899,8 @@ quota_init(void) mp->m_sb.sb_gquotino != NULLFSINO && (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) && (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD); - qpdo = mp->m_sb.sb_gquotino != 0 && - mp->m_sb.sb_gquotino != NULLFSINO && + qpdo = mp->m_sb.sb_pquotino != 0 && + mp->m_sb.sb_pquotino != NULLFSINO && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) && (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD); if (qudo) diff --git a/db/dquot.c b/db/dquot.c index daa47a3..201d9a8 100644 --- a/db/dquot.c +++ b/db/dquot.c @@ -130,10 +130,9 @@ dquot_f( dbprintf(_("dquot command requires one %s id argument\n"), s); return 0; } - ino = (dogrp || doprj) ? mp->m_sb.sb_gquotino : mp->m_sb.sb_uquotino; - if (ino == 0 || ino == NULLFSINO || - (dogrp && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT)) || - (doprj && (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT))) { + ino = doprj ? mp->m_sb.sb_pquotino : + dogrp ? mp->m_sb.sb_gquotino : mp->m_sb.sb_uquotino; + if (ino == 0 || ino == NULLFSINO) { dbprintf(_("no %s quota inode present\n"), s); return 0; } diff --git a/db/frag.c b/db/frag.c index 23ccfa5..2eb33d8 100644 --- a/db/frag.c +++ b/db/frag.c @@ -326,7 +326,8 @@ process_inode( skipd = 1; else if (!qflag && (ino == mp->m_sb.sb_uquotino || - ino == mp->m_sb.sb_gquotino)) + ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino)) skipd = 1; else skipd = !fflag; diff --git a/db/inode.c b/db/inode.c index 036717f..ef8bdee 100644 --- a/db/inode.c +++ b/db/inode.c @@ -413,7 +413,8 @@ inode_next_type(void) else if (iocur_top->ino == mp->m_sb.sb_rsumino) return TYP_RTSUMMARY; else if (iocur_top->ino == mp->m_sb.sb_uquotino || - iocur_top->ino == mp->m_sb.sb_gquotino) + iocur_top->ino == mp->m_sb.sb_gquotino || + iocur_top->ino == mp->m_sb.sb_pquotino) return TYP_DQBLK; else return TYP_DATA; diff --git a/db/metadump.c b/db/metadump.c index c5ffddb..70aeb42 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -1940,7 +1940,10 @@ copy_sb_inodes(void) if (!copy_ino(mp->m_sb.sb_uquotino, TYP_DQBLK)) return 0; - return copy_ino(mp->m_sb.sb_gquotino, TYP_DQBLK); + if (!copy_ino(mp->m_sb.sb_gquotino, TYP_DQBLK)) + return 0; + + return copy_ino(mp->m_sb.sb_pquotino, TYP_DQBLK); } static int diff --git a/db/sb.c b/db/sb.c index 21f38c5..2bc96a9 100644 --- a/db/sb.c +++ b/db/sb.c @@ -109,6 +109,7 @@ const field_t sb_flds[] = { { "logsunit", FLDT_UINT32D, OI(OFF(logsunit)), C1, 0, TYP_NONE }, { "features2", FLDT_UINT32X, OI(OFF(features2)), C1, 0, TYP_NONE }, { "bad_features2", FLDT_UINT32X, OI(OFF(bad_features2)), C1, 0, TYP_NONE }, + { "pquotino", FLDT_INO, OI(OFF(pquotino)), C1, 0, TYP_INODE }, { NULL } }; diff --git a/include/xfs_sb.h b/include/xfs_sb.h index 69c6822..735c5eb 100644 --- a/include/xfs_sb.h +++ b/include/xfs_sb.h @@ -161,6 +161,7 @@ typedef struct xfs_sb { * it for anything else. */ __uint32_t sb_bad_features2; + xfs_ino_t sb_pquotino; /* project quota inode */ /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -231,6 +232,7 @@ typedef struct xfs_dsb { * it for anything else. */ __be32 sb_bad_features2; + __be64 sb_pquotino; /* project quota inode */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -251,7 +253,7 @@ typedef enum { XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, - XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_PQUOTINO, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -277,6 +279,7 @@ typedef enum { #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) +#define XFS_SB_PQUOTINO XFS_SB_MVAL(PQUOTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) #define XFS_SB_MOD_BITS \ @@ -284,7 +287,7 @@ typedef enum { XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ - XFS_SB_BAD_FEATURES2) + XFS_SB_BAD_FEATURES2 | XFS_SB_PQUOTINO) /* diff --git a/libxfs/xfs_mount.c b/libxfs/xfs_mount.c index 32d2255..dd193ba 100644 --- a/libxfs/xfs_mount.c +++ b/libxfs/xfs_mount.c @@ -70,6 +70,7 @@ static const struct { { offsetof(xfs_sb_t, sb_logsunit), 0 }, { offsetof(xfs_sb_t, sb_features2), 0 }, { offsetof(xfs_sb_t, sb_bad_features2), 0 }, + { offsetof(xfs_sb_t, sb_pquotino), 0 }, { sizeof(xfs_sb_t), 0 } }; @@ -156,6 +157,23 @@ xfs_sb_from_disk( to->sb_logsunit = be32_to_cpu(from->sb_logsunit); to->sb_features2 = be32_to_cpu(from->sb_features2); to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); + + if (xfs_sb_version_hasnooquota(to)) + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); + else { + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + + if (to->sb_qflags & XFS_PQUOTA_ACCT) { + to->sb_pquotino = to->sb_gquotino; + to->sb_gquotino = 0; + } + } } /* @@ -174,11 +192,36 @@ xfs_sb_to_disk( xfs_sb_field_t f; int first; int size; + __be16 saved_qflags = 0; ASSERT(fields); if (!fields) return; + if (!xfs_sb_version_hasnooquota(from) && + (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD))) { + + if (from->sb_qflags & XFS_PQUOTA_ACCT) { + from->sb_gquotino = from->sb_pquotino; + from->sb_pquotino = 0; + } + /* + * in-core version of qflags do not have XFS_OQUOTA.*, whereas + * the on-disk version does. So, save the in-core sb_qflags + * and restore it after we modify and copy it to the buffer + * to be copied to disk. + */ + saved_qflags = from->sb_qflags; + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + from->sb_qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + from->sb_qflags |= XFS_OQUOTA_CHKD; + from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); + } + while (fields) { f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); first = xfs_sb_info[f].offset; @@ -209,6 +252,14 @@ xfs_sb_to_disk( fields &= ~(1LL << f); } + /* Revert to the old saved values */ + if (saved_qflags) { + from->sb_qflags = saved_qflags; + if (from->sb_qflags & XFS_PQUOTA_ACCT) { + from->sb_pquotino = from->sb_gquotino; + from->sb_gquotino = 0; + } + } } /* diff --git a/repair/agheader.c b/repair/agheader.c index 6081b68..04474e3 100644 --- a/repair/agheader.c +++ b/repair/agheader.c @@ -331,6 +331,19 @@ secondary_sb_wack(xfs_mount_t *mp, xfs_buf_t *sbuf, xfs_sb_t *sb, rval |= XR_AG_SB_SEC; } + if (sb->sb_inprogress == 1 && sb->sb_pquotino) { + if (!no_modify) + sb->sb_pquotino = 0; + if (sb->sb_versionnum & XR_PART_SECSB_VNMASK || !do_bzero) { + rval |= XR_AG_SB; + do_warn( + _("non-null project quota inode field in superblock %d\n"), + i); + + } else + rval |= XR_AG_SB_SEC; + } + if (sb->sb_inprogress == 1 && sb->sb_qflags) { if (!no_modify) sb->sb_qflags = 0; diff --git a/repair/dinode.c b/repair/dinode.c index 9c5db99..533f287 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -1813,6 +1813,15 @@ process_check_sb_inodes( } return 0; } + if (lino == mp->m_sb.sb_pquotino) { + if (*type != XR_INO_DATA) { + do_warn(_("project quota inode %" PRIu64 " has bad type 0x%x\n"), + lino, dinode_fmt(dinoc)); + mp->m_sb.sb_pquotino = NULLFSINO; + return 1; + } + return 0; + } if (lino == mp->m_sb.sb_rsumino) { if (*type != XR_INO_RTSUM) { do_warn( diff --git a/repair/dir.c b/repair/dir.c index 5a58b94..892c86a 100644 --- a/repair/dir.c +++ b/repair/dir.c @@ -173,6 +173,11 @@ process_shortform_dir( _("entry in shortform dir %" PRIu64 " references group quota inode %" PRIu64 "\n"), ino, lino); junkit = 1; + } else if (lino == mp->m_sb.sb_pquotino) { + do_warn( + _("entry in shortform dir %" PRIu64 " references project quota inode %" PRIu64 "\n"), + ino, lino); + junkit = 1; } else if ((irec_p = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, lino), XFS_INO_TO_AGINO(mp, lino))) != NULL) { @@ -1659,6 +1664,23 @@ _("entry #%d, bno %d in directory %" PRIu64 " references group quota inode %" PR _("\twould clear ino number in entry %d...\n"), i); } + } else if (lino == mp->m_sb.sb_pquotino) { + do_warn( +_("entry #%d, bno %d in directory %" PRIu64 " references project quota inode %" PRIu64 "\n"), + i, da_bno, ino, lino); + if (!no_modify) { + do_warn( + _("\tclearing ino number in entry %d...\n"), + i); + + lino = NULLFSINO; + xfs_dir_sf_put_dirino(&lino, &namest->inumber); + *buf_dirty = 1; + } else { + do_warn( + _("\twould clear ino number in entry %d...\n"), + i); + } } else if ((irec_p = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, lino), XFS_INO_TO_AGINO(mp, lino))) != NULL) { diff --git a/repair/dir2.c b/repair/dir2.c index 7164f7f..a8a957b 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -932,6 +932,9 @@ process_sf_dir2( } else if (lino == mp->m_sb.sb_gquotino) { junkit = 1; junkreason = _("group quota"); + } else if (lino == mp->m_sb.sb_pquotino) { + junkit = 1; + junkreason = _("project quota"); } else if ((irec_p = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, lino), XFS_INO_TO_AGINO(mp, lino))) != NULL) { @@ -1448,6 +1451,8 @@ process_dir2_data( clearreason = _("user quota"); } else if (ent_ino == mp->m_sb.sb_gquotino) { clearreason = _("group quota"); + } else if (ent_ino == mp->m_sb.sb_pquotino) { + clearreason = _("project quota"); } else { irec_p = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, ent_ino), diff --git a/repair/globals.h b/repair/globals.h index 5fb8149..3d3b885 100644 --- a/repair/globals.h +++ b/repair/globals.h @@ -137,6 +137,7 @@ EXTERN int need_rsumino; EXTERN int lost_quotas; EXTERN int have_uquotino; EXTERN int have_gquotino; +EXTERN int have_pquotino; EXTERN int lost_uquotino; EXTERN int lost_gquotino; EXTERN int lost_pquotino; diff --git a/repair/phase4.c b/repair/phase4.c index 9f08486..392a864 100644 --- a/repair/phase4.c +++ b/repair/phase4.c @@ -72,12 +72,25 @@ quotino_check(xfs_mount_t *mp) if (irec == NULL || is_inode_free(irec, mp->m_sb.sb_gquotino - irec->ino_startnum)) { mp->m_sb.sb_gquotino = NULLFSINO; - if (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) - lost_gquotino = 1; - else - lost_pquotino = 1; + lost_gquotino = 1; } else - lost_gquotino = lost_pquotino = 0; + lost_gquotino = 0; + } + + if (mp->m_sb.sb_pquotino != NULLFSINO && mp->m_sb.sb_pquotino != 0) { + if (verify_inum(mp, mp->m_sb.sb_pquotino)) + irec = NULL; + else + irec = find_inode_rec(mp, + XFS_INO_TO_AGNO(mp, mp->m_sb.sb_pquotino), + XFS_INO_TO_AGINO(mp, mp->m_sb.sb_pquotino)); + + if (irec == NULL || is_inode_free(irec, + mp->m_sb.sb_pquotino - irec->ino_startnum)) { + mp->m_sb.sb_pquotino = NULLFSINO; + lost_pquotino = 1; + } else + lost_pquotino = 0; } } @@ -105,11 +118,13 @@ quota_sb_check(xfs_mount_t *mp) if (fs_quotas && (mp->m_sb.sb_uquotino == NULLFSINO || mp->m_sb.sb_uquotino == 0) && - (mp->m_sb.sb_gquotino == NULLFSINO || mp->m_sb.sb_gquotino == 0)) { + (mp->m_sb.sb_gquotino == NULLFSINO || mp->m_sb.sb_gquotino == 0) && + (mp->m_sb.sb_pquotino == NULLFSINO || mp->m_sb.sb_pquotino == 0)) { lost_quotas = 1; fs_quotas = 0; } else if (!verify_inum(mp, mp->m_sb.sb_uquotino) && - !verify_inum(mp, mp->m_sb.sb_gquotino)) { + !verify_inum(mp, mp->m_sb.sb_gquotino) && + !verify_inum(mp, mp->m_sb.sb_pquotino)) { fs_quotas = 1; } } diff --git a/repair/phase6.c b/repair/phase6.c index 5b27cb4..17e0eb6 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -3564,6 +3564,15 @@ mark_standalone_inodes(xfs_mount_t *mp) - irec->ino_startnum; add_inode_reached(irec, offset); } + if (mp->m_sb.sb_pquotino + && mp->m_sb.sb_pquotino != NULLFSINO) { + irec = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, + mp->m_sb.sb_pquotino), + XFS_INO_TO_AGINO(mp, mp->m_sb.sb_pquotino)); + offset = XFS_INO_TO_AGINO(mp, mp->m_sb.sb_pquotino) + - irec->ino_startnum; + add_inode_reached(irec, offset); + } } } diff --git a/repair/sb.c b/repair/sb.c index 004319f..c07a63d 100644 --- a/repair/sb.c +++ b/repair/sb.c @@ -40,6 +40,7 @@ copy_sb(xfs_sb_t *source, xfs_sb_t *dest) xfs_ino_t rsumino; xfs_ino_t uquotino; xfs_ino_t gquotino; + xfs_ino_t pquotino; __uint16_t versionnum; rootino = dest->sb_rootino; @@ -47,6 +48,7 @@ copy_sb(xfs_sb_t *source, xfs_sb_t *dest) rsumino = dest->sb_rsumino; uquotino = dest->sb_uquotino; gquotino = dest->sb_gquotino; + pquotino = dest->sb_pquotino; versionnum = dest->sb_versionnum; @@ -57,6 +59,7 @@ copy_sb(xfs_sb_t *source, xfs_sb_t *dest) dest->sb_rsumino = rsumino; dest->sb_uquotino = uquotino; dest->sb_gquotino = gquotino; + dest->sb_pquotino = pquotino; dest->sb_versionnum = versionnum; diff --git a/repair/versions.c b/repair/versions.c index e37eb10..991c05e 100644 --- a/repair/versions.c +++ b/repair/versions.c @@ -117,6 +117,7 @@ parse_sb_version(xfs_sb_t *sb) fs_has_extflgbit = 0; have_uquotino = 0; have_gquotino = 0; + have_pquotino = 0; issue_warning = 0; /* @@ -253,6 +254,10 @@ _("WARNING: you have disallowed quotas but this filesystem\n" if (sb->sb_gquotino != 0 && sb->sb_gquotino != NULLFSINO) have_gquotino = 1; + + if (sb->sb_pquotino != 0 && + sb->sb_pquotino != NULLFSINO) + have_pquotino = 1; } } diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c index 0b82e8e..edc63ed 100644 --- a/repair/xfs_repair.c +++ b/repair/xfs_repair.c @@ -779,7 +779,7 @@ main(int argc, char **argv) _("Inode allocation btrees are too corrupted, skipping phases 6 and 7\n")); } - if (lost_quotas && !have_uquotino && !have_gquotino) { + if (lost_quotas && !have_uquotino && !have_gquotino && !have_pquotino) { if (!no_modify) { do_warn( _("Warning: no quota inodes were found. Quotas disabled.\n")); -- 1.7.1 From tinguely@sgi.com Mon Jan 23 13:22:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NJMNGA132710 for ; Mon, 23 Jan 2012 13:22:23 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id D22A1304066; Mon, 23 Jan 2012 11:22:19 -0800 (PST) Message-ID: <4F1DB36E.3060207@sgi.com> Date: Mon, 23 Jan 2012 13:22:22 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.065702206@bombadil.infradead.org> In-Reply-To: <20111212141434.065702206@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > Remove the now unused opportunistic parameter, and use the the > xlog_writeq_wake and xlog_reserveq_wake helpers now that we don't have > to care about the opportunistic wakeups. > > Signed-off-by: Christoph Hellwig Looks good. My only concern is the way that xlog_grant_push_ail() tries to kick start the writing of the log. It seems to me that a combination of very large log requests could plug the log until the next sync. I am not sure if that is why the opportunistic wakeups were put in or not. If this is an issue, there are better ways than opportunistic wakeups in the unlock code (patch3 xfs: remove xfs_trans_unlocked_item). Reviewed-by: Mark Tinguely From zhengda1936@gmail.com Mon Jan 23 13:34:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NJYaSC133641 for ; Mon, 23 Jan 2012 13:34:36 -0600 X-ASG-Debug-ID: 1327347274-04cbb030253894c0001-NocioJ Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id Bx99iqK1vj7ExKrk for ; Mon, 23 Jan 2012 11:34:34 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhjj56 with SMTP id j56so1975087yhj.26 for ; Mon, 23 Jan 2012 11:34:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=cmknQ0G8nYG21L1NePPEVi20ifWhlcGDB0QT79V3UhQ=; b=uHz8iN0c7D+i6iY6uXvkEO0Q0M0fLhx6dVw5I1MT2IBUsgU0gSqpqKAkJvAnsoAlNa PcXvukhDdFZdIY31X0Ngz5eChKVjUT1FEiI8jqZzz8wBYMFij+c/oQWPGoZRvMqgOeEI vbofaqkHEckpu3+eSMqQkGx7VraZEF7ud72gU= MIME-Version: 1.0 Received: by 10.236.161.197 with SMTP id w45mr13345847yhk.96.1327347274542; Mon, 23 Jan 2012 11:34:34 -0800 (PST) Received: by 10.146.223.22 with HTTP; Mon, 23 Jan 2012 11:34:34 -0800 (PST) In-Reply-To: <20120123051155.GI15102@dastard> References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> Date: Mon, 23 Jan 2012 14:34:34 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf30563f4dcaec6304b7371edd X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1327347274 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86487 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --20cf30563f4dcaec6304b7371edd Content-Type: text/plain; charset=ISO-8859-1 Hello, On Mon, Jan 23, 2012 at 12:11 AM, Dave Chinner wrote: > > > > > > This is weird. Yes, I'm sure. I use pwrite() to write data to a 4G file, > > and I check the offset of each write and they are always smaller than 4G. > > I instrument the code with systemtap and it shows me that ip->i_new_size > > and new_size in xfs_aio_write_newsize_update are both 0. > > Since in my case there is only overwrite, ip->i_new_size will always be 0 > > (the only place that updates ip->i_new_size is > xfs_file_aio_write_checks). > > Because of the same reason, new_size returned by > xfs_file_aio_write_checks > > is always 0. > > Is it what you expected? > > No idea. I don't know what the problem you are seeing is yet, or if > indeed there even is a problem as I don't really understand what you > are trying to do or what results you are expecting to see... > Here I was just wondering if i_new_size is always 0 if there are only overwrites. I think it has nothing to do with the pattern of my workloads or the device I used for the test. > > Indeed, have you run the test on something other than a RAM disk and > confirmed that the problem exists on a block device that has real IO > latency? If your IO takes close to zero time, then there isn't any > IO level concurrency you can extract from single file direct IO; it > will all just serialise on the extent tree lookups. > It's difficult to test the scalability problem in the traditional disks. They provide very low IOPS (IO per second). Even two SSDs can't provide enough IOPS. I don't think all direct IO will serialized on the extent tree lookups. Direct IO reads can parallelized pretty well and they also need extent tree lookups. > > > > > 0xffffffff812829f4 : __xfs_get_blocks+0x94/0x4a0 [kernel] > > > > > > And for direct IO writes, this will be the block mapping lookup so > > > always hit. > > > > > > > > > What this says to me is that you are probably doing is lots of very > > > small concurrent write IOs, but I'm only guessing. Can you provide > > > your test case and a description of your test hardware so we can try > > > to reproduce the problem? > > > > > I build XFS on the top of ramdisk. So yes, there is a lot of small > > concurrent writes in a second. > > I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test > > program overwrites 4G of data to the file and each time writes a page of > > data randomly to the file. It's always overwriting, and no appending. The > > offset of each write is always aligned to the page size. There is no > > overlapping between writes. > > Why are you using XFS for this? tmpfs was designed to do this sort > of stuff as efficiently as possible.... > OK, I can try that. > > > So the test case is pretty simple and I think it's easy to reproduce it. > > It'll be great if you can try the test case. > > Can you post your test code so I know what I test is exactly what > you are running? > I can do that. My test code gets very complicated now. I need to simplify it. Thanks, Da --20cf30563f4dcaec6304b7371edd Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,

On Mon, Jan 23, 2012 at 12:11 AM, = Dave Chinner <d= avid@fromorbit.com> wrote:
> >
> This is weird. Yes, I'm sure. I use pwrite() to write data to a 4G= file,
> and I check the offset of each write and they are always smaller than = 4G.
> I instrument the code with systemtap and it shows me that ip->i_new= _size
> and new_size in xfs_aio_write_newsize_update are both 0.
> Since in my case there is only overwrite, ip->i_new_size will alway= s be 0
> (the only place that updates ip->i_new_size is xfs_file_aio_write_c= hecks).
> Because of the same reason, new_size returned by xfs_file_aio_write_ch= ecks
> is always 0.
> Is it what you expected?

No idea. I don't know what the problem you are seeing is yet, or = if
indeed there even is a problem as I don't really understand what you are trying to do or what results you are expecting to see...
Here I was just wondering if=A0i_new_size is always 0 if there are o= nly overwrites. I think it has nothing to do with the pattern of my workloa= ds or the device I used for the test.

Indeed, have you run the test on something other than a RAM disk and
confirmed that the problem exists on a block device that has real IO
latency? If your IO takes close to zero time, then there isn't any
IO level concurrency you can extract from single file direct IO; it
will all just serialise on the extent tree lookups.
It= 's difficult to test the scalability problem in the traditional disks. = They provide very low IOPS (IO per second). Even two SSDs can't provide= enough IOPS.=A0
I don't think all direct IO will serialized on the extent tree loo= kups. Direct IO reads can parallelized pretty well and they also need exten= t tree lookups.

> > > =A00xffffffff812829f4 : __xfs_get_blocks+0x94/0x4a0 [kernel]=
> >
> > And for direct IO writes, this will be the block mapping lookup s= o
> > always hit.
> >
> >
> > What this says to me is that you are probably doing is lots of ve= ry
> > small concurrent write IOs, but I'm only guessing. =A0Can you= provide
> > your test case and a description of your test hardware so we can = try
> > to reproduce the problem?
> >
> I build XFS on the top of ramdisk. So yes, there is a lot of small
> concurrent writes in a second.
> I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test<= br> > program overwrites 4G of data to the file and each time writes a page = of
> data randomly to the file. It's always overwriting, and no appendi= ng. The
> offset of each write is always aligned to the page size. There is no > overlapping between writes.

Why are you using XFS for this? tmpfs was designed to do this sort of stuff as efficiently as possible....
OK, I can try = that.=A0

> So the test case is pretty simple and I think it's easy to reprodu= ce it.
> It'll be great if you can try the test case.

Can you post your test code so I know what I test is exactly what
you are running?
I can do that. My test code gets very= complicated now. I need to simplify it.

Thanks,
Da

--20cf30563f4dcaec6304b7371edd-- From BATV+28e788475760cb0a3f71+3074+infradead.org+hch@bombadil.srs.infradead.org Mon Jan 23 13:59:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NJxPsV135624 for ; Mon, 23 Jan 2012 13:59:25 -0600 X-ASG-Debug-ID: 1327348763-04cbb0302438bc30001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 760RZgtQrUSvYG92 for ; Mon, 23 Jan 2012 11:59:23 -0800 (PST) X-Barracuda-Envelope-From: BATV+28e788475760cb0a3f71+3074+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpQ30-0000ck-Nn; Mon, 23 Jan 2012 19:59:22 +0000 Date: Mon, 23 Jan 2012 14:59:22 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss , James Lawrie Subject: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota Message-ID: <20120123195922.GA2366@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota References: <4F1D9989.8060808@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F1D9989.8060808@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327348763 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 11:31:53AM -0600, Eric Sandeen wrote: > Doing something like > > # xfs_quota -x -c 'limit -u bhard=1.2g ... > > will cause cvtnum to fail and return a value of -1LL (because it > cannot parse the decimal), but the quota caller doesn't check > for this error value, casts it to U64, shifts right, and we end > up with an answer of 16 petabytes rather than erroring out. > Fix this. Can you add a test case for it, please? From zhengda1936@gmail.com Mon Jan 23 14:51:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,J_CHICKENPOX_31,J_CHICKENPOX_33,J_CHICKENPOX_43,J_CHICKENPOX_52, J_CHICKENPOX_62,J_CHICKENPOX_63,J_CHICKENPOX_64,J_CHICKENPOX_66, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NKpqQa140099 for ; Mon, 23 Jan 2012 14:51:52 -0600 X-ASG-Debug-ID: 1327351909-04bdf067b8333b50001-NocioJ Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id pkY0ObesXoF8qPVp for ; Mon, 23 Jan 2012 12:51:50 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhjj56 with SMTP id j56so2035887yhj.26 for ; Mon, 23 Jan 2012 12:51:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=GrRzcAqUq2SUvjL9tgreYiEzuYXaWFYIHFBIfB/SQoQ=; b=s1QUFeu2Mme8oOpGqHzFD2Wrbk/42d/W3vPxNa6PizOplP2PmugiVBbYc15ClW7c8Q uakexJ7A64DfzEQnwLB1mA5OEwf39v8o9ty0B3HN0SDaSdd7WdEbdUNVX66yRVS4LIGF lPJy1b/rcGCErxbfHtIj0PlLvs/dVCXt+oMvM= MIME-Version: 1.0 Received: by 10.236.139.199 with SMTP id c47mr13785817yhj.113.1327351903812; Mon, 23 Jan 2012 12:51:43 -0800 (PST) Received: by 10.146.223.22 with HTTP; Mon, 23 Jan 2012 12:51:43 -0800 (PST) In-Reply-To: References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> Date: Mon, 23 Jan 2012 15:51:43 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/mixed; boundary=20cf303bfd22b7fcea04b73832e2 X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1327351909 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86493 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message --20cf303bfd22b7fcea04b73832e2 Content-Type: multipart/alternative; boundary=20cf303bfd22b7fce504b73832e0 --20cf303bfd22b7fce504b73832e0 Content-Type: text/plain; charset=ISO-8859-1 Hello On Mon, Jan 23, 2012 at 2:34 PM, Zheng Da wrote: > > > I build XFS on the top of ramdisk. So yes, there is a lot of small >> > concurrent writes in a second. >> > I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test >> > program overwrites 4G of data to the file and each time writes a page of >> > data randomly to the file. It's always overwriting, and no appending. >> The >> > offset of each write is always aligned to the page size. There is no >> > overlapping between writes. >> >> Why are you using XFS for this? tmpfs was designed to do this sort >> of stuff as efficiently as possible.... >> > OK, I can try that. > tmpfs doesn't support direct IO. > >> > So the test case is pretty simple and I think it's easy to reproduce it. >> > It'll be great if you can try the test case. >> >> Can you post your test code so I know what I test is exactly what >> you are running? >> > I can do that. My test code gets very complicated now. I need to simplify > it. > Here is the code. It's still a bit long. I hope it's OK. You can run the code like "rand-read file option=direct pages=1048576 threads=8 access=write/read". Thanks, Da --20cf303bfd22b7fce504b73832e0 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello

On Mon, Jan 23, 2012 at 2:34 PM, Zh= eng Da <zheng= da1936@gmail.com> wrote:
> I build XFS on the top of ramdisk. So yes, there is a lot of small
> concurrent writes in a second.
> I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test<= br> > program overwrites 4G of data to the file and each time writes a page = of
> data randomly to the file. It's always overwriting, and no appendi= ng. The
> offset of each write is always aligned to the page size. There is no > overlapping between writes.

Why are you using XFS for this? tmpfs was designed to do this sort of stuff as efficiently as possible....
OK, I ca= n try that.=A0
tmpfs doesn't support direc= t IO.=A0

> So the test case is pretty simple and I think it's easy to reprodu= ce it.
> It'll be great if you can try the test case.

Can you post your test code so I know what I test is exactly what
you are running?
I can do that. My test code get= s very complicated now. I need to simplify it.
Here is the code. It's still a bit long. I hope it's OK.
You can run the code like "rand-read file option=3Ddirect pages= =3D1048576 threads=3D8 access=3Dwrite/read".

Thanks,
Da
--20cf303bfd22b7fce504b73832e0-- --20cf303bfd22b7fcea04b73832e2 Content-Type: text/x-c++src; charset=US-ASCII; name="simple-rand-read.cc" Content-Disposition: attachment; filename="simple-rand-read.cc" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gxryr8a60 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy90eXBl cy5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRl IDxmY250bC5oPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5j bHVkZSA8c3lzL3Jlc291cmNlLmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8c3Ry aW5nLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8 YXNzZXJ0Lmg+CiNpbmNsdWRlIDxnb29nbGUvcHJvZmlsZXIuaD4KCiNpbmNsdWRlIDxpb3N0cmVh bT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGRlcXVlPgoKI2RlZmluZSBQQUdFX1NJWkUg NDA5NgojZGVmaW5lIFJPVU5EX1BBR0Uob2ZmKSAoKChsb25nKSBvZmYpICYgKH4oUEFHRV9TSVpF IC0gMSkpKQoKI2RlZmluZSBOVU1fUEFHRVMgMTYzODQKI2RlZmluZSBOVU1fVEhSRUFEUyAzMgoK ZW51bSB7CglSRUFELAoJV1JJVEUKfTsKCmludCBucGFnZXM7CmludCBudGhyZWFkcyA9IDE7CnN0 cnVjdCB0aW1ldmFsIGdsb2JhbF9zdGFydDsKY2hhciBzdGF0aWNfYnVmW1BBR0VfU0laRSAqIDhd IF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOwp2b2xhdGlsZSBpbnQgZmlyc3Rb TlVNX1RIUkVBRFNdOwppbnQgYWNjZXNzX21ldGhvZCA9IFJFQUQ7CgpjbGFzcyB3b3JrbG9hZF9n ZW4KewpwdWJsaWM6Cgl2aXJ0dWFsIG9mZl90IG5leHRfb2Zmc2V0KCkgPSAwOwoJdmlydHVhbCBi b29sIGhhc19uZXh0KCkgPSAwOwp9OwoKY2xhc3MgcmFuZF9wZXJtdXRlCnsKCW9mZl90ICpvZmZz ZXQ7Cglsb25nIG51bTsKcHVibGljOgoJcmFuZF9wZXJtdXRlKGxvbmcgbnVtLCBpbnQgc3RyaWRl KSB7CgkJb2Zmc2V0ID0gKG9mZl90ICopIHZhbGxvYyhudW0gKiBzaXplb2Yob2ZmX3QpKTsKCQlm b3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CgkJCW9mZnNldFtpXSA9ICgob2ZmX3QpIGkp ICogc3RyaWRlOwoJCX0KCgkJZm9yIChpbnQgaSA9IG51bSAtIDE7IGkgPj0gMTsgaS0tKSB7CgkJ CWludCBqID0gcmFuZG9tKCkgJSBpOwoJCQlvZmZfdCB0bXAgPSBvZmZzZXRbal07CgkJCW9mZnNl dFtqXSA9IG9mZnNldFtpXTsKCQkJb2Zmc2V0W2ldID0gdG1wOwoJCX0KCX0KCgl+cmFuZF9wZXJt dXRlKCkgewoJCWZyZWUob2Zmc2V0KTsKCX0KCglvZmZfdCBnZXRfb2Zmc2V0KGxvbmcgaWR4KSBj b25zdCB7CgkJcmV0dXJuIG9mZnNldFtpZHhdOwoJfQp9OwoKY2xhc3MgbG9jYWxfcmFuZF9wZXJt dXRlX3dvcmtsb2FkOiBwdWJsaWMgd29ya2xvYWRfZ2VuCnsKCWxvbmcgc3RhcnQ7Cglsb25nIGVu ZDsKCXN0YXRpYyBjb25zdCByYW5kX3Blcm11dGUgKnBlcm11dGU7CnB1YmxpYzoKCWxvY2FsX3Jh bmRfcGVybXV0ZV93b3JrbG9hZChsb25nIG51bSwgaW50IHN0cmlkZSwgbG9uZyBzdGFydCwgbG9u ZyBlbmQpIHsKCQlpZiAocGVybXV0ZSA9PSBOVUxMKSB7CgkJCXBlcm11dGUgPSBuZXcgcmFuZF9w ZXJtdXRlKG51bSwgc3RyaWRlKTsKCQl9CgkJdGhpcy0+c3RhcnQgPSBzdGFydDsKCQl0aGlzLT5l bmQgPSBlbmQ7Cgl9CgoJfmxvY2FsX3JhbmRfcGVybXV0ZV93b3JrbG9hZCgpIHsKCQlpZiAocGVy bXV0ZSkgewoJCQlkZWxldGUgcGVybXV0ZTsKCQkJcGVybXV0ZSA9IE5VTEw7CgkJfQoJfQoKCW9m Zl90IG5leHRfb2Zmc2V0KCkgewoJCWlmIChzdGFydCA+PSBlbmQpCgkJCXJldHVybiAtMTsKCQly ZXR1cm4gcGVybXV0ZS0+Z2V0X29mZnNldChzdGFydCsrKTsKCX0KCglib29sIGhhc19uZXh0KCkg ewoJCXJldHVybiBzdGFydCA8IGVuZDsKCX0KfTsKCmZsb2F0IHRpbWVfZGlmZihzdHJ1Y3QgdGlt ZXZhbCB0aW1lMSwgc3RydWN0IHRpbWV2YWwgdGltZTIpCnsKCXJldHVybiB0aW1lMi50dl9zZWMg LSB0aW1lMS50dl9zZWMKCQkJKyAoKGZsb2F0KSh0aW1lMi50dl91c2VjIC0gdGltZTEudHZfdXNl YykpLzEwMDAwMDA7Cn0KCmNsYXNzIHJhbmRfYnVmCnsKCS8qIHdoZXJlIHRoZSBkYXRhIHJlYWQg ZnJvbSB0aGUgZGlzayBpcyBzdG9yZWQgKi8KCWNoYXIgKmJ1ZjsKCS8qIHNob3dzIHRoZSBsb2Nh dGlvbnMgaW4gdGhlIGFycmF5IHdoZXJlIGRhdGEgaGFzIGJlIHRvIHN0b3JlZC4qLwoJcmFuZF9w ZXJtdXRlIGJ1Zl9vZmZzZXQ7CglpbnQgZW50cnlfc2l6ZTsKCWludCBudW1fZW50cmllczsKCglp bnQgY3VycmVudDsKcHVibGljOgoJcmFuZF9idWYoaW50IGJ1Zl9zaXplLCBpbnQgZW50cnlfc2l6 ZSk6IGJ1Zl9vZmZzZXQoYnVmX3NpemUgLyBlbnRyeV9zaXplLCBlbnRyeV9zaXplKSB7CgkJdGhp cy0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CgkJbnVtX2VudHJpZXMgPSBidWZfc2l6ZSAvIGVu dHJ5X3NpemU7CgkJYnVmID0gKGNoYXIgKikgdmFsbG9jKGJ1Zl9zaXplKTsKCgkJaWYgKGJ1ZiA9 PSBOVUxMKXsKCQkJZnByaW50ZihzdGRlcnIsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOwoJ CQlleGl0KDEpOwoJCX0KCQkvKiB0cmlnZ2VyIHBhZ2UgZmF1bHRzIGFuZCBicmluZyBwYWdlcyB0 byBtZW1vcnkuICovCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBidWZfc2l6ZSAvIFBBR0VfU0laRTsg aSsrKQoJCQlidWZbaSAqIFBBR0VfU0laRV0gPSAwOwoKCQljdXJyZW50ID0gMDsKCX0KCgl+cmFu ZF9idWYoKSB7CgkJZnJlZShidWYpOwoJfQoKCWNoYXIgKm5leHRfZW50cnkoKSB7CgkJaW50IG9m ZiA9IGJ1Zl9vZmZzZXQuZ2V0X29mZnNldChjdXJyZW50KTsKCQljdXJyZW50ID0gKGN1cnJlbnQg KyAxKSAlIG51bV9lbnRyaWVzOzsKCQlyZXR1cm4gJmJ1ZltvZmZdOwoJfQoKCWludCBnZXRfZW50 cnlfc2l6ZSgpIHsKCQlyZXR1cm4gZW50cnlfc2l6ZTsKCX0KfTsKCi8qIHRoaXMgZGF0YSBzdHJ1 Y3R1cmUgc3RvcmVzIHRoZSB0aHJlYWQtcHJpdmF0ZSBpbmZvLiAqLwpjbGFzcyB0aHJlYWRfcHJp dmF0ZQp7CnB1YmxpYzoKCXB0aHJlYWRfdCBpZDsKCS8qIHRoZSBsb2NhdGlvbiBpbiB0aGUgdGhy ZWFkIGRlc2NyaXB0b3IgYXJyYXkuICovCglpbnQgaWR4OwoJcmFuZF9idWYgYnVmOwoJd29ya2xv YWRfZ2VuICpnZW47Cglzc2l6ZV90IHJlYWRfYnl0ZXM7CglzdHJ1Y3QgdGltZXZhbCBzdGFydF90 aW1lOwoJc3RydWN0IHRpbWV2YWwgZW5kX3RpbWU7CgoJdmlydHVhbCBzc2l6ZV90IGFjY2Vzcyhj aGFyICosIG9mZl90LCBzc2l6ZV90LCBpbnQpID0gMDsKCXZpcnR1YWwgaW50IHRocmVhZF9pbml0 KCkgPSAwOwoKCXRocmVhZF9wcml2YXRlKGludCBpZHgsIGludCBlbnRyeV9zaXplKTogYnVmKE5V TV9QQUdFUyAvIG50aHJlYWRzICogUEFHRV9TSVpFLCBlbnRyeV9zaXplKSB7CgkJdGhpcy0+aWR4 ID0gaWR4OwoJCXJlYWRfYnl0ZXMgPSAwOwoJfQoKfTsKCmNsYXNzIHJlYWRfcHJpdmF0ZTogcHVi bGljIHRocmVhZF9wcml2YXRlCnsKCWNvbnN0IGNoYXIgKmZpbGVfbmFtZTsKCWludCBmZDsKCWlu dCBmbGFnczsKcHJvdGVjdGVkOgoJaW50IGdldF9mZCgpIHsKCQlyZXR1cm4gZmQ7Cgl9CgpwdWJs aWM6CglyZWFkX3ByaXZhdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGlkeCwgaW50IGVudHJ5X3Np emUsCgkJCWludCBmbGFncyA9IE9fUkRXUik6IHRocmVhZF9wcml2YXRlKGlkeCwgZW50cnlfc2l6 ZSksIGZpbGVfbmFtZShuYW1lKSB7CgkJdGhpcy0+ZmxhZ3MgPSBmbGFnczsKCX0KCglpbnQgdGhy ZWFkX2luaXQoKSB7CgkJaW50IHJldDsKCgkJZmQgPSBvcGVuKGZpbGVfbmFtZSwgZmxhZ3MpOwoJ CWlmIChmZCA8IDApIHsKCQkJcGVycm9yKCJvcGVuIik7CgkJCWV4aXQgKDEpOwoJCX0KCQlyZXQg PSBwb3NpeF9mYWR2aXNlKGZkLCAwLCAwLCBQT1NJWF9GQURWX1JBTkRPTSk7CgkJaWYgKHJldCA8 IDApIHsKCQkJcGVycm9yKCJwb3NpeF9mYWR2aXNlIik7CgkJCWV4aXQoMSk7CgkJfQoJCXJldHVy biAwOwoJfQoKCXNzaXplX3QgYWNjZXNzKGNoYXIgKmJ1Ziwgb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90 IHNpemUsIGludCBhY2Nlc3NfbWV0aG9kKSB7CgkJYXNzZXJ0KG9mZnNldCA8IDB4MTAwMDAwMDAw TCk7CgkJc3NpemVfdCByZXQ7CgkJaWYgKGFjY2Vzc19tZXRob2QgPT0gV1JJVEUpCgkJCXJldCA9 IHB3cml0ZShmZCwgYnVmLCBzaXplLCBvZmZzZXQpOwoJCWVsc2UKCQkJcmV0ID0gcHJlYWQoZmQs IGJ1Ziwgc2l6ZSwgb2Zmc2V0KTsKCQlyZXR1cm4gcmV0OwoJfQp9OwoKY2xhc3MgZGlyZWN0X3By aXZhdGU6IHB1YmxpYyByZWFkX3ByaXZhdGUKewoJY2hhciAqcGFnZXM7CglpbnQgYnVmX2lkeDsK cHVibGljOgoJZGlyZWN0X3ByaXZhdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGlkeCwgaW50IGVu dHJ5X3NpemUpOiByZWFkX3ByaXZhdGUobmFtZSwgaWR4LAoJCQllbnRyeV9zaXplLCBPX0RJUkVD VCB8IE9fUkRXUikgewoJCXBhZ2VzID0gKGNoYXIgKikgdmFsbG9jKFBBR0VfU0laRSAqIDQwOTYp OwoJCWJ1Zl9pZHggPSAwOwoJfQoKCXNzaXplX3QgYWNjZXNzKGNoYXIgKmJ1Ziwgb2ZmX3Qgb2Zm c2V0LCBzc2l6ZV90IHNpemUsIGludCBhY2Nlc3NfbWV0aG9kKSB7CgkJc3NpemVfdCByZXQ7CgkJ LyogZm9yIHNpbXBsaWNpdHksIEkgYXNzdW1lIGFsbCByZXF1ZXN0IHNpemVzIGFyZSBzbWFsbGVy IHRoYW4gYSBwYWdlIHNpemUgKi8KCQlhc3NlcnQoc2l6ZSA8PSBQQUdFX1NJWkUpOwoJCWlmIChS T1VORF9QQUdFKG9mZnNldCkgPT0gb2Zmc2V0CgkJCQkmJiAobG9uZykgYnVmID09IFJPVU5EX1BB R0UoYnVmKQoJCQkJJiYgc2l6ZSA9PSBQQUdFX1NJWkUpIHsKCQkJcmV0ID0gcmVhZF9wcml2YXRl OjphY2Nlc3MoYnVmLCBvZmZzZXQsIHNpemUsIGFjY2Vzc19tZXRob2QpOwoJCX0KCQllbHNlIHsK CQkJYXNzZXJ0KGFjY2Vzc19tZXRob2QgPT0gUkVBRCk7CgkJCWJ1Zl9pZHgrKzsKCQkJaWYgKGJ1 Zl9pZHggPT0gNDA5NikKCQkJCWJ1Zl9pZHggPSAwOwoJCQljaGFyICpwYWdlID0gcGFnZXMgKyBi dWZfaWR4ICogUEFHRV9TSVpFOwoJCQlyZXQgPSByZWFkX3ByaXZhdGU6OmFjY2VzcyhwYWdlLCBS T1VORF9QQUdFKG9mZnNldCksIFBBR0VfU0laRSwgYWNjZXNzX21ldGhvZCk7CgkJCWlmIChyZXQg PCAwKQoJCQkJcmV0dXJuIHJldDsKCQkJZWxzZQoJCQkJbWVtY3B5KGJ1ZiwgcGFnZSArIChvZmZz ZXQgLSBST1VORF9QQUdFKG9mZnNldCkpLCBzaXplKTsKCQkJcmV0ID0gc2l6ZTsKCQl9CgkJcmV0 dXJuIHJldDsKCX0KfTsKCnRocmVhZF9wcml2YXRlICp0aHJlYWRzW05VTV9USFJFQURTXTsKCnZv aWQgKnJhbmRfcmVhZCh2b2lkICphcmcpCnsKCXNzaXplX3QgcmV0ID0gLTE7Cgl0aHJlYWRfcHJp dmF0ZSAqcHJpdiA9IHRocmVhZHNbKGxvbmcpIGFyZ107CglyYW5kX2J1ZiAqYnVmOwoKCXByaXYt PnRocmVhZF9pbml0KCk7CglidWYgPSAmcHJpdi0+YnVmOwoKCWdldHRpbWVvZmRheSgmcHJpdi0+ c3RhcnRfdGltZSwgTlVMTCk7Cgl3aGlsZSAocHJpdi0+Z2VuLT5oYXNfbmV4dCgpKSB7CgkJY2hh ciAqZW50cnkgPSBidWYtPm5leHRfZW50cnkoKTsKCQlvZmZfdCBvZmYgPSBwcml2LT5nZW4tPm5l eHRfb2Zmc2V0KCk7CgoJCXJldCA9IHByaXYtPmFjY2VzcyhlbnRyeSwgb2ZmLCBidWYtPmdldF9l bnRyeV9zaXplKCksIGFjY2Vzc19tZXRob2QpOwoJCWlmIChyZXQgPiAwKSB7CgkJCWFzc2VydChy ZXQgPT0gYnVmLT5nZXRfZW50cnlfc2l6ZSgpKTsKCQkJaWYgKHJldCA+IDApCgkJCQlwcml2LT5y ZWFkX2J5dGVzICs9IHJldDsKCQkJZWxzZQoJCQkJYnJlYWs7CgkJfQoJCWlmIChyZXQgPCAwKSB7 CgkJCXBlcnJvcigiYWNjZXNzIik7CgkJCWV4aXQoMSk7CgkJfQoJfQoJaWYgKHJldCA8IDApIHsK CQlwZXJyb3IoInJlYWQiKTsKCQlleGl0KDEpOwoJfQoJZ2V0dGltZW9mZGF5KCZwcml2LT5lbmRf dGltZSwgTlVMTCk7CgkKCXB0aHJlYWRfZXhpdCgodm9pZCAqKSBwcml2LT5yZWFkX2J5dGVzKTsK fQoKbG9uZyBzdHIyc2l6ZShzdGQ6OnN0cmluZyBzdHIpCnsKCWludCBsZW4gPSBzdHIubGVuZ3Ro KCk7Cglsb25nIG11bHRpcGx5ID0gMTsKCWlmIChzdHJbbGVuIC0gMV0gPT0gJ00nIHx8IHN0clts ZW4gLSAxXSA9PSAnbScpIHsKCQltdWx0aXBseSAqPSAxMDI0ICogMTAyNDsKCQlzdHJbbGVuIC0g MV0gPSAwOwoJfQoJZWxzZSBpZiAoc3RyW2xlbiAtIDFdID09ICdLJyB8fCBzdHJbbGVuIC0gMV0g PT0gJ2snKSB7CgkJbXVsdGlwbHkgKj0gMTAyNDsKCQlzdHJbbGVuIC0gMV0gPSAwOwoJfQoJZWxz ZSBpZiAoc3RyW2xlbiAtIDFdID09ICdHJyB8fCBzdHJbbGVuIC0gMV0gPT0gJ2cnKSB7CgkJbXVs dGlwbHkgKj0gMTAyNCAqIDEwMjQgKiAxMDI0OwoJCXN0cltsZW4gLSAxXSA9IDA7Cgl9CglyZXR1 cm4gYXRvbChzdHIuY19zdHIoKSkgKiBtdWx0aXBseTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKewoJaW50IGVudHJ5X3NpemUgPSA0MDk2OwoJc3RkOjpzdHJpbmcgYWNjZXNz X29wdGlvbjsKCWludCByZXQ7CglpbnQgaSwgajsKCXN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWUs IGVuZF90aW1lOwoJc3NpemVfdCByZWFkX2J5dGVzID0gMDsKCWludCBudW1fZmlsZXMgPSAwOwoJ c3RkOjpzdHJpbmcgZmlsZV9uYW1lc1tOVU1fVEhSRUFEU107CgoJaWYgKGFyZ2MgPCA1KSB7CgkJ ZnByaW50ZihzdGRlcnIsICJ0aGVyZSBhcmUgJWQgYXJnbWVudHNcbiIsIGFyZ2MpOwoJCWZwcmlu dGYoc3RkZXJyLCAicmVhZCBmaWxlcyBvcHRpb24gcGFnZXMgdGhyZWFkc1xuIik7CgkJZXhpdCgx KTsKCX0KCglmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7IGkrKykgewoJCXN0ZDo6c3RyaW5nIHN0 ciA9IGFyZ3ZbaV07CgkJc2l6ZV90IGZvdW5kID0gc3RyLmZpbmQoIj0iKTsKCQkvKiBpZiB0aGVy ZSBpc24ndCBgPScsIEkgYXNzdW1lIGl0J3MgYSBmaWxlIG5hbWUqLwoJCWlmIChmb3VuZCA9PSBz dGQ6OnN0cmluZzo6bnBvcykgewoJCQlmaWxlX25hbWVzW251bV9maWxlcysrXSA9IHN0cjsKCQkJ Y29udGludWU7CgkJfQoKCQlzdGQ6OnN0cmluZyB2YWx1ZSA9IHN0ci5zdWJzdHIoZm91bmQgKyAx KTsKCQlzdGQ6OnN0cmluZyBrZXkgPSBzdHIuc3Vic3RyKDAsIGZvdW5kKTsKCQlpZiAoa2V5LmNv bXBhcmUoIm9wdGlvbiIpID09IDApIHsKCQkJYWNjZXNzX29wdGlvbiA9IHZhbHVlOwoJCX0KCQll bHNlIGlmKGtleS5jb21wYXJlKCJwYWdlcyIpID09IDApIHsKCQkJbnBhZ2VzID0gYXRvaSh2YWx1 ZS5jX3N0cigpKTsKCQl9CgkJZWxzZSBpZihrZXkuY29tcGFyZSgidGhyZWFkcyIpID09IDApIHsK CQkJbnRocmVhZHMgPSBhdG9pKHZhbHVlLmNfc3RyKCkpOwoJCX0KCQllbHNlIGlmKGtleS5jb21w YXJlKCJhY2Nlc3MiKSA9PSAwKSB7CgkJCWlmKHZhbHVlLmNvbXBhcmUoInJlYWQiKSA9PSAwKQoJ CQkJYWNjZXNzX21ldGhvZCA9IFJFQUQ7CgkJCWVsc2UgaWYodmFsdWUuY29tcGFyZSgid3JpdGUi KSA9PSAwKQoJCQkJYWNjZXNzX21ldGhvZCA9IFdSSVRFOwoJCQllbHNlIHsKCQkJCWZwcmludGYo c3RkZXJyLCAid3JvbmcgYWNjZXNzIG1ldGhvZFxuIik7CgkJCQlleGl0KDEpOwoJCQl9CgkJfQoJ CWVsc2UgewoJCQlmcHJpbnRmKHN0ZGVyciwgIndyb25nIG9wdGlvblxuIik7CgkJCWV4aXQoMSk7 CgkJfQoJfQoKCWludCBudW1fZW50cmllcyA9IG5wYWdlcyAqIChQQUdFX1NJWkUgLyBlbnRyeV9z aXplKTsKCglpZiAobnRocmVhZHMgPiBOVU1fVEhSRUFEUykgewoJCWZwcmludGYoc3RkZXJyLCAi dG9vIG1hbnkgdGhyZWFkc1xuIik7CgkJZXhpdCgxKTsKCX0KCWlmIChudW1fZmlsZXMgPiAxICYm IG51bV9maWxlcyAhPSBudGhyZWFkcykgewoJCWZwcmludGYoc3RkZXJyLCAiaWYgdGhlcmUgYXJl IG11bHRpcGxlIGZpbGVzLCBcCgkJCQl0aGUgbnVtYmVyIG9mIGZpbGVzIG11c3QgYmUgdGhlIHNh bWUgYXMgdGhlIG51bWJlciBvZiB0aHJlYWRzXG4iKTsKCQlleGl0KDEpOwoJfQoKCS8qIGluaXRp YWxpemUgdGhlIHRocmVhZHMnIHByaXZhdGUgZGF0YS4gKi8KCWZvciAoaiA9IDA7IGogPCBudGhy ZWFkczsgaisrKSB7CgkJY29uc3QgY2hhciAqZmlsZV9uYW1lOwoJCWlmIChudW1fZmlsZXMgPiAx KSB7CgkJCWZpbGVfbmFtZSA9IGZpbGVfbmFtZXNbal0uY19zdHIoKTsKCQl9CgkJZWxzZSB7CgkJ CWZpbGVfbmFtZSA9IGZpbGVfbmFtZXNbMF0uY19zdHIoKTsKCQl9CgkJaWYgKGFjY2Vzc19vcHRp b24uY29tcGFyZSgibm9ybWFsIikgPT0gMCkKCQkJdGhyZWFkc1tqXSA9IG5ldyByZWFkX3ByaXZh dGUoZmlsZV9uYW1lLCBqLCBlbnRyeV9zaXplKTsKCQllbHNlIGlmIChhY2Nlc3Nfb3B0aW9uLmNv bXBhcmUoImRpcmVjdCIpID09IDApCgkJCXRocmVhZHNbal0gPSBuZXcgZGlyZWN0X3ByaXZhdGUo ZmlsZV9uYW1lLCBqLCBlbnRyeV9zaXplKTsKCQllbHNlIHsKCQkJZnByaW50ZihzdGRlcnIsICJ3 cm9uZyBhY2Nlc3Mgb3B0aW9uXG4iKTsKCQkJZXhpdCgxKTsKCQl9CgkJCgkJbG9uZyBzdGFydCwg ZW5kOwoJCWlmIChudW1fZmlsZXMgPiAxKSB7CgkJCXN0YXJ0ID0gMDsKCQkJZW5kID0gbnBhZ2Vz ICogUEFHRV9TSVpFIC8gZW50cnlfc2l6ZTsKCQl9CgkJZWxzZSB7CgkJCXN0YXJ0ID0gKGxvbmcp IG5wYWdlcyAvIG50aHJlYWRzICogUEFHRV9TSVpFIC8gZW50cnlfc2l6ZSAqIGo7CgkJCWVuZCA9 IHN0YXJ0ICsgKGxvbmcpIG5wYWdlcyAvIG50aHJlYWRzICogUEFHRV9TSVpFIC8gZW50cnlfc2l6 ZTsKCQl9CgkJcHJpbnRmKCJ0aHJlYWQgJWQgc3RhcnRzICVsZCBlbmRzICVsZFxuIiwgaiwgc3Rh cnQsIGVuZCk7CgkJdGhyZWFkc1tqXS0+Z2VuID0gbmV3IGxvY2FsX3JhbmRfcGVybXV0ZV93b3Jr bG9hZChudW1fZW50cmllcywKCQkJCQkJZW50cnlfc2l6ZSwgc3RhcnQsIGVuZCk7Cgl9CgoJcmV0 ID0gc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCBnZXRwaWQoKSwgLTIwKTsKCWlmIChyZXQgPCAw KSB7CgkJcGVycm9yKCJzZXRwcmlvcml0eSIpOwoJCWV4aXQoMSk7Cgl9CgoJZ2V0dGltZW9mZGF5 KCZzdGFydF90aW1lLCBOVUxMKTsKCWdsb2JhbF9zdGFydCA9IHN0YXJ0X3RpbWU7Cglmb3IgKGkg PSAwOyBpIDwgbnRocmVhZHM7IGkrKykgewoJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRz W2ldLT5pZCwgTlVMTCwgcmFuZF9yZWFkLCAodm9pZCAqKSBpKTsKCQlpZiAocmV0KSB7CgkJCXBl cnJvcigicHRocmVhZF9jcmVhdGUiKTsKCQkJZXhpdCgxKTsKCQl9Cgl9CgoJZm9yIChpID0gMDsg aSA8IG50aHJlYWRzOyBpKyspIHsKCQlzc2l6ZV90IHNpemU7CgkJcmV0ID0gcHRocmVhZF9qb2lu KHRocmVhZHNbaV0tPmlkLCAodm9pZCAqKikgJnNpemUpOwoJCWlmIChyZXQpIHsKCQkJcGVycm9y KCJwdGhyZWFkX2pvaW4iKTsKCQkJZXhpdCgxKTsKCQl9CgkJcmVhZF9ieXRlcyArPSBzaXplOwoJ fQoJZ2V0dGltZW9mZGF5KCZlbmRfdGltZSwgTlVMTCk7CglwcmludGYoInJlYWQgJWxkIGJ5dGVz LCB0YWtlcyAlZiBzZWNvbmRzXG4iLAoJCQlyZWFkX2J5dGVzLCBlbmRfdGltZS50dl9zZWMgLSBz dGFydF90aW1lLnR2X3NlYwoJCQkrICgoZmxvYXQpKGVuZF90aW1lLnR2X3VzZWMgLSBzdGFydF90 aW1lLnR2X3VzZWMpKS8xMDAwMDAwKTsKfQoKY29uc3QgcmFuZF9wZXJtdXRlICpsb2NhbF9yYW5k X3Blcm11dGVfd29ya2xvYWQ6OnBlcm11dGU7Cg== --20cf303bfd22b7fcea04b73832e2-- From tinguely@sgi.com Mon Jan 23 15:58:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0NLw7d0147345 for ; Mon, 23 Jan 2012 15:58:07 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8E27430407B; Mon, 23 Jan 2012 13:58:04 -0800 (PST) Message-ID: <4F1DD7EF.4060205@sgi.com> Date: Mon, 23 Jan 2012 15:58:07 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 05/12] xfs: remove log space waitqueues References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.276389127@bombadil.infradead.org> In-Reply-To: <20111212141434.276389127@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > The tic->t_wait waitqueues can never have more than a single waiter > on them, so we can easily replace them with a task_struct pointer > and wake_up_process. > > Signed-off-by: Christoph Hellwig > > --- Looks good. Reviewed-by: Mark Tinguely From stan@hardwarefreak.com Mon Jan 23 18:34:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O0YBQe166498 for ; Mon, 23 Jan 2012 18:34:11 -0600 X-ASG-Debug-ID: 1327365250-04cbb00c4901cb0001-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 MaXtkrvGUB4Oeqqr for ; Mon, 23 Jan 2012 16:34:10 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id A5D366C13A; Mon, 23 Jan 2012 18:34:09 -0600 (CST) Message-ID: <4F1DFC80.1040204@hardwarefreak.com> Date: Mon, 23 Jan 2012 18:34:08 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Zheng Da CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: concurrent direct IO write in xfs References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs In-Reply-To: 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: 1327365250 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86506 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On 1/23/2012 2:51 PM, Zheng Da wrote: > tmpfs doesn't support direct IO. Of course not. tmpfs resides entirely within the page cache (or some of it in swap). The whole point of direct IO is to bypass the page cache, transferring data directly between user space memory and the storage device. As tmpfs is built entirely within the page cache, direct IO is obviously impossible. And it's also obviously unnecessary. Yes, you will need to rewrite your application to use tmpfs as direct IO calls won't work. This is something you obviously would rather not do. Which brings us back to Dave's question, which you have not answered: What exactly is the purpose of your program? What does it aim to accomplish? Is it for a database application? A word processor? Or simply a filesystem tester? What do _you_ aim to accomplish with this programming effort? -- Stan From zhengda1936@gmail.com Mon Jan 23 19:40:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_20,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O1e6M8170840 for ; Mon, 23 Jan 2012 19:40:06 -0600 X-ASG-Debug-ID: 1327369204-04bdf006bd05990001-NocioJ Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id Cf0ZM6jTaxLpHruu (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 23 Jan 2012 17:40:04 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhjj56 with SMTP id j56so2191583yhj.26 for ; Mon, 23 Jan 2012 17:40:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=4kTq4DPJS0vM5TZTZwzwkqHbcGrehZtZ6fnw705L9XM=; b=SQa9G8SrZmo4GcaAqgyiG9YyI8k9XQge4ngnM2T7H1jkIiczLtj1EdoxSYG1RsHbFf TXv9MlOslTXDuMVsWBCDXJVTusr4U3+47887vyilX2PRYK0S+I4IruaOg9SP3Vlfzsl6 EPybdSA60UZXRJ+9JuIJ3Ow//HFhYsThOKHw8= MIME-Version: 1.0 Received: by 10.236.139.199 with SMTP id c47mr14837662yhj.113.1327369204042; Mon, 23 Jan 2012 17:40:04 -0800 (PST) Received: by 10.146.223.22 with HTTP; Mon, 23 Jan 2012 17:40:03 -0800 (PST) In-Reply-To: <4F1DFC80.1040204@hardwarefreak.com> References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> <4F1DFC80.1040204@hardwarefreak.com> Date: Mon, 23 Jan 2012 20:40:03 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: stan@hardwarefreak.com Cc: Dave Chinner , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf303bfd22e48cd504b73c391b X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1327369204 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86510 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --20cf303bfd22e48cd504b73c391b Content-Type: text/plain; charset=ISO-8859-1 Hello, On Mon, Jan 23, 2012 at 7:34 PM, Stan Hoeppner wrote: > On 1/23/2012 2:51 PM, Zheng Da wrote: > > > tmpfs doesn't support direct IO. > > Of course not. tmpfs resides entirely within the page cache (or some of > it in swap). The whole point of direct IO is to bypass the page cache, > transferring data directly between user space memory and the storage > device. As tmpfs is built entirely within the page cache, direct IO is > obviously impossible. And it's also obviously unnecessary. > > Yes, you will need to rewrite your application to use tmpfs as direct IO > calls won't work. This is something you obviously would rather not do. > Which brings us back to Dave's question, which you have not answered: > > What exactly is the purpose of your program? What does it aim to > accomplish? Is it for a database application? A word processor? Or > simply a filesystem tester? What do _you_ aim to accomplish with this > programming effort? > > I'm trying to test the scalability of page cache in the random access workload. And the cache hit rate is also relatively low. The cache is now implemented in the user space. When cache misses, I need to read data from the file system with direct IO. Da --20cf303bfd22e48cd504b73c391b Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello,

On Mon, Jan 23, 2012 at 7:34 PM, S= tan Hoeppner <stan@hardwarefreak.com> wrote:
On 1/23/2012 2:51 PM, Zheng Da wrote:

> tmpfs doesn't support direct IO.

Of course not. =A0tmpfs resides entirely within the page cache (or so= me of
it in swap). =A0The whole point of direct IO is to bypass the page cache, transferring data directly between user space memory and the storage
device. =A0As tmpfs is built entirely within the page cache, direct IO is obviously impossible. =A0And it's also obviously unnecessary.

Yes, you will need to rewrite your application to use tmpfs as direct IO calls won't work. =A0This is something you obviously would rather not d= o.
=A0Which brings us back to Dave's question, which you have not answered= :

What exactly is the purpose of your program? =A0What does it aim to
accomplish? =A0Is it for a database application? =A0A word processor? =A0Or=
simply a filesystem tester? =A0What do _you_ aim to accomplish with this programming effort?

I'm trying to test the sca= lability of page cache in the random access workload. And the cache hit rat= e is also relatively low.=A0
The cache is now implemented in the = user space. When cache misses, I need to read data from the file system wit= h direct IO.

Da=A0

--20cf303bfd22e48cd504b73c391b-- From valdes@mcs.anl.gov Mon Jan 23 20:43:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O2hiL6173817 for ; Mon, 23 Jan 2012 20:43:44 -0600 X-ASG-Debug-ID: 1327373021-04cb6c0c16067c0001-NocioJ Received: from mailrelay.mcs.anl.gov (newman-1.mcs.anl.gov [140.221.6.6]) by cuda.sgi.com with ESMTP id IWAtdPhA9b60blW1 for ; Mon, 23 Jan 2012 18:43:43 -0800 (PST) X-Barracuda-Envelope-From: valdes@mcs.anl.gov X-Barracuda-Apparent-Source-IP: 140.221.6.6 Received: from starfish.mcs.anl.gov (starfish.mcs.anl.gov [140.221.13.17]) by mailrelay.mcs.anl.gov (Postfix) with ESMTP id E528F8853A for ; Mon, 23 Jan 2012 20:43:41 -0600 (CST) Received: by starfish.mcs.anl.gov (Postfix, from userid 3320) id DBFEA16284; Mon, 23 Jan 2012 20:43:41 -0600 (CST) Date: Mon, 23 Jan 2012 20:43:41 -0600 From: John Valdes To: xfs@oss.sgi.com Subject: log recovery fails at mount Message-ID: <20120124024340.GA6689@starfish.mcs.anl.gov> X-ASG-Orig-Subj: log recovery fails at mount MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: newman-1.mcs.anl.gov[140.221.6.6] X-Barracuda-Start-Time: 1327373023 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86515 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- All, We have an XFS which fails to mount due to an internal error according to the messages reported to syslog: kernel: Filesystem md4: Disabling barriers, trial barrier write failed kernel: XFS mounting filesystem md4 kernel: Starting XFS recovery on filesystem: md4 (logdev: internal) kernel: XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1676 of file fs/xfs/xfs_alloc.c. Caller 0xffffffff887fca71 kernel: kernel: kernel: Call Trace: kernel: [] :xfs:xfs_free_ag_extent+0x433/0x67e kernel: [] :xfs:xfs_free_extent+0xa9/0xc9 kernel: [] :xfs:xlog_recover_process_efi+0x112/0x16c kernel: [] :xfs:xfs_fs_fill_super+0x0/0x3dc kernel: [] :xfs:xlog_recover_process_efis+0x4f/0x8d kernel: [] :xfs:xlog_recover_finish+0x14/0x9e kernel: [] :xfs:xfs_fs_fill_super+0x0/0x3dc kernel: [] :xfs:xfs_mountfs+0x47a/0x5ac kernel: [] :xfs:xfs_mru_cache_create+0x113/0x143 kernel: [] :xfs:xfs_fs_fill_super+0x203/0x3dc kernel: [] get_sb_bdev+0x10a/0x16c kernel: [] vfs_kern_mount+0x93/0x11a kernel: [] do_kern_mount+0x36/0x4d kernel: [] do_mount+0x6a9/0x719 kernel: [] __handle_mm_fault+0x9f6/0x103b kernel: [] _atomic_dec_and_lock+0x39/0x57 kernel: [] mntput_no_expire+0x19/0x89 kernel: [] find_get_page+0x21/0x51 kernel: [] __up_read+0x19/0x7f kernel: [] do_page_fault+0x4cc/0x842 kernel: [] __handle_mm_fault+0x5f5/0x103b kernel: [] zone_statistics+0x3e/0x6d kernel: [] __alloc_pages+0x78/0x308 kernel: [] sys_mount+0x8a/0xcd kernel: [] tracesys+0xd5/0xe0 kernel: kernel: Failed to recover EFIs on filesystem: md4 kernel: XFS: log mount finish failed xfs_repair is unwilling to repair the fs since it sees unwritten data in the xfs log: prompt# xfs_repair /dev/md4 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and unmount it before re-running xfs_repair. If you are unable to mount the filesystem, then use the -L option to destroy the log and attempt a repair. Note that destroying the log may cause corruption -- please attempt a mount of the filesystem before doing this. Of course, since I can't mount the fs, I can't replay the log. Before zeroing out the log w/ xfs_repair -L, I was wondering if there is any way to tell how critical the metadata in the log is? I've run "xfs_logprint", but not being an XFS developer, I don't understand the info it's showing me. Is there anyway to glean something useful from xfs_logprint? For reference, I've put a copy of the complete output at http://www.mcs.anl.gov/~valdes/xfslog.txt (warning, it's over 3.7 million lines long and about 192 MB big). The system with this problem is running RHEL 5.7 with the bundled XFS modules, eg: prompt# modinfo xfs filename: /lib/modules/2.6.18-274.3.1.el5/kernel/fs/xfs/xfs.ko license: GPL description: SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled author: Silicon Graphics, Inc. srcversion: 4A41C05CBD42F5525F11CBD depends: vermagic: 2.6.18-274.3.1.el5 SMP mod_unload gcc-4.1 module_sig: 883f3504e58268794abe3920d1168f112bb7209e2721679ef3b2971313fad2364b5a43f2ab33e0a0a59bf02c12aca5e46c326a106f838129e0ab4867 although the XFS itself was built on an earlier version of RHEL 5, FWIW. The details and history of the problem XFS are: - It's ~20TB built on an md stripe of two 3ware RAID6 arrays. - The problem showed up after a drive in one of the 3ware RAIDs failed, causing the controller to hang, which took that RAID (scsi device) offline: kernel: sd 7:0:0:0: WARNING: (0x06:0x002C): Command (0x2a) timed out, resetting card. kernel: 3w-9xxx: scsi7: ERROR: (0x06:0x001F): Microcontroller not ready during reset sequence. kernel: 3w-9xxx: scsi7: ERROR: (0x06:0x001F): Microcontroller not ready during reset sequence. kernel: 3w-9xxx: scsi7: ERROR: (0x06:0x002B): Controller reset failed during scsi host reset. kernel: sd 7:0:0:0: scsi: Device offlined - not ready after error recovery last message repeated 99 times kernel: sd 7:0:0:0: rejecting I/O to offline device last message repeated 50 times kernel: sd 7:0:0:0: SCSI error: return code = 0x00010000 kernel: end_request: I/O error, dev sdd, sector 2292015744 kernel: sd 7:0:0:0: rejecting I/O to offline device last message repeated 436 times kernel: Device md4, XFS metadata write error block 0xd03f0 in md4 kernel: Buffer I/O error on device md4, logical block 723454688 kernel: lost page write due to I/O error on md4 kernel: Buffer I/O error on device md4, logical block 723454689 [...] kernel: sd 7:0:0:0: rejecting I/O to offline device kernel: I/O error in filesystem ("md4") meta-data dev md4 block 0x48c2598aa ("xlog_iodone") error 5 buf count 3584 kernel: xfs_force_shutdown(md4,0x2) called from line 1061 of file fs/xfs/xfs_log.c. Return address = 0xffffffff8867404a kernel: Filesystem md4: Log I/O Error Detected. Shutting down filesystem: md4 kernel: Please umount the filesystem, and rectify the problem(s) kernel: Filesystem md4: xfs_log_force: error 5 returned. I was able to fully shutdown the system after this, although I did need to power cycle it in order to get the 3ware controller back online (the controller does have a functional battery, so in theory data in its write cache should have been preserved, although messages at reboot suggest otherwise). Nevertheless, upon reboot, the XFS mounted fine: kernel: 3w-9xxx: scsi7: AEN: ERROR (0x04:0x005F): Cache synchronization failed; some data lost:unit=0. kernel: 3w-9xxx: scsi7: AEN: WARNING (0x04:0x0008): Unclean shutdown detected:unit=0. [...] kernel: SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled kernel: SGI XFS Quota Management subsystem kernel: Filesystem md4: Disabling barriers, trial barrier write failed kernel: XFS mounting filesystem md4 kernel: Starting XFS recovery on filesystem: md4 (logdev: internal) kernel: Ending XFS recovery on filesystem: md4 (logdev: internal) - The XFS continued working fine for about 2 weeks, but then it started reporting internal erros (XFS_WANT_CORRUPTED_RETURN): kernel: XFS internal error XFS_WANT_CORRUPTED_RETURN at line 295 of file fs/xfs/xfs_alloc.c. Caller 0xffffffff8864a345 kernel: kernel: kernel: Call Trace: kernel: [] :xfs:xfs_alloc_fixup_trees+0x2ba/0x2cb kernel: [] :xfs:xfs_btree_init_cursor+0x31/0x1a3 kernel: [] :xfs:xfs_alloc_ag_vextent_near+0x773/0x8e2 kernel: [] :xfs:xfs_alloc_ag_vextent+0x2b/0xfc kernel: [] :xfs:xfs_alloc_vextent+0x2ce/0x3ff kernel: [] :xfs:xfs_bmap_btalloc+0x673/0x8c1 kernel: [] :xfs:xfs_bmapi+0x6ec/0xe79 kernel: [] :xfs:xlog_ticket_alloc+0xc8/0xed kernel: [] :xfs:xfs_log_reserve+0xad/0xc9 kernel: [] :xfs:xfs_iomap_write_allocate+0x202/0x329 kernel: [] :xfs:xfs_iomap+0x217/0x28d kernel: [] :xfs:xfs_map_blocks+0x2d/0x63 kernel: [] :xfs:xfs_page_state_convert+0x2b1/0x546 kernel: [] generic_make_request+0x211/0x228 kernel: [] :xfs:xfs_vm_writepage+0xa7/0xe0 kernel: [] mpage_writepages+0x1bf/0x37d kernel: [] :xfs:xfs_vm_writepage+0x0/0xe0 kernel: [] do_writepages+0x20/0x2f kernel: [] __writeback_single_inode+0x1a2/0x31c kernel: [] sync_sb_inodes+0x1b7/0x271 kernel: [] keventd_create_kthread+0x0/0xc4 kernel: [] writeback_inodes+0x82/0xd8 kernel: [] wb_kupdate+0xd4/0x14e kernel: [] pdflush+0x0/0x1fb kernel: [] pdflush+0x151/0x1fb kernel: [] wb_kupdate+0x0/0x14e kernel: [] kthread+0xfe/0x132 kernel: [] child_rip+0xa/0x11 kernel: [] keventd_create_kthread+0x0/0xc4 kernel: [] kthread+0x0/0x132 kernel: [] child_rip+0x0/0x11 - Once this started happening, I shutdown the system again, but this time at reboot, the XFS failed to mount, w/ the error given at the top of this email. Does anyone have any suggestions on how to recover from this state, or is my only option xfs_repair -L and hope that there isn't any corruption? This XFS is part of a scratch filesystem (we have a large PVFS filesystem built on top of this XFS plus 7 other identical ones on other servers), so if it ended up being corrupted, it wouldn't been the end of the world, but it would represent a lot of lost work. Thanks for any help. John From gregkh@suse.de Mon Jan 23 20:48:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O2md0B174074 for ; Mon, 23 Jan 2012 20:48:40 -0600 X-ASG-Debug-ID: 1327373317-04cbb00c48095b0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id ETOlOHo3aVCKyP6U (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 23 Jan 2012 18:48:38 -0800 (PST) X-Barracuda-Envelope-From: gregkh@suse.de X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id B06318FFEB; Tue, 24 Jan 2012 03:48:37 +0100 (CET) X-Mailbox-Line: From gregkh@clark.kroah.org Mon Jan 23 18:39:34 2012 Message-Id: <20120124023934.532008617@clark.kroah.org> User-Agent: quilt/0.50-11.1 Date: Mon, 23 Jan 2012 18:35:39 -0800 From: Greg KH To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Dave Chinner Subject: [119/129] xfs: fix endian conversion issue in discard code In-Reply-To: <20120124024041.GA18422@kroah.com> X-ASG-Orig-Subj: [119/129] xfs: fix endian conversion issue in discard code X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327373318 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86517 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 3.2-stable review patch. If anyone has any objections, please let me know. ------------------ Content-Length: 1239 Lines: 39 From: Dave Chinner commit b1c770c273a4787069306fc82aab245e9ac72e9d upstream When finding the longest extent in an AG, we read the value directly out of the AGF buffer without endian conversion. This will give an incorrect length, resulting in FITRIM operations potentially not trimming everything that it should. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers Signed-off-by: Greg Kroah-Hartman --- fs/xfs/xfs_discard.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/fs/xfs/xfs_discard.c +++ b/fs/xfs/xfs_discard.c @@ -68,7 +68,7 @@ xfs_trim_extents( * Look up the longest btree in the AGF and start with it. */ error = xfs_alloc_lookup_le(cur, 0, - XFS_BUF_TO_AGF(agbp)->agf_longest, &i); + be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest), &i); if (error) goto out_del_cursor; @@ -84,7 +84,7 @@ xfs_trim_extents( if (error) goto out_del_cursor; XFS_WANT_CORRUPTED_GOTO(i == 1, out_del_cursor); - ASSERT(flen <= XFS_BUF_TO_AGF(agbp)->agf_longest); + ASSERT(flen <= be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest)); /* * Too small? Give up. From david@fromorbit.com Mon Jan 23 21:54:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O3sand177194 for ; Mon, 23 Jan 2012 21:54:37 -0600 X-ASG-Debug-ID: 1327377273-04cbb00c460d970001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id fC7HpqPjfYM5niNy for ; Mon, 23 Jan 2012 19:54:34 -0800 (PST) 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: ApsRADkoHk95LElR/2dsb2JhbABCp0QChmKBBoFyAQEFJxMcFg0QCAMYLhQNGAMhE8BbE4swYwSVF4sDh18 Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail07.adl2.internode.on.net with ESMTP; 24 Jan 2012 14:24:32 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpXSp-0005Hd-6a; Tue, 24 Jan 2012 14:54:31 +1100 Date: Tue, 24 Jan 2012 14:54:31 +1100 From: Dave Chinner To: Zheng Da Cc: xfs@oss.sgi.com Subject: Re: concurrent direct IO write in xfs Message-ID: <20120124035431.GD6922@dastard> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1327377274 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86521 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email On Mon, Jan 23, 2012 at 03:51:43PM -0500, Zheng Da wrote: > Hello > > On Mon, Jan 23, 2012 at 2:34 PM, Zheng Da wrote: > > > > > I build XFS on the top of ramdisk. So yes, there is a lot of small > >> > concurrent writes in a second. > >> > I create a file of 4GB in XFS (the ramdisk has 5GB of space). My test > >> > program overwrites 4G of data to the file and each time writes a page of > >> > data randomly to the file. It's always overwriting, and no appending. > >> The > >> > offset of each write is always aligned to the page size. There is no > >> > overlapping between writes. > >> > >> Why are you using XFS for this? tmpfs was designed to do this sort > >> of stuff as efficiently as possible.... > >> > > OK, I can try that. > > > tmpfs doesn't support direct IO. it doesn't need to. The ramdisk is copying data into it's own private page cache and you are using direct Io to avoid the system page cache (i.e. a double copy). tmpfs just uses the system page cache, so tehre's only one copy and it has a much shorter and less complex IO path than XFS..... > >> > So the test case is pretty simple and I think it's easy to reproduce it. > >> > It'll be great if you can try the test case. > >> > >> Can you post your test code so I know what I test is exactly what > >> you are running? > >> > > I can do that. My test code gets very complicated now. I need to simplify > > it. > > > Here is the code. It's still a bit long. I hope it's OK. > You can run the code like "rand-read file option=direct pages=1048576 > threads=8 access=write/read". With 262144 pages on a 2Gb ramdisk, the results I get on 3.2.0 are Threads Read Write 1 0.92s 1.49s 2 0.51s 1.20s 4 0.31s 1.34s 8 0.22s 1.59s 16 0.23s 2.24s the contention is on the ip->i_ilock, and the newsize update is one of the offenders It probably needs this change to xfs_aio_write_newsize_update(): - if (new_size == ip->i_new_size) { + if (new_size && new_size == ip->i_new_size) { to avoid the lock being taken here. But all that newsize crap is gone in the current git Linus tree, so how much would that gains us: Threads Read Write 1 0.88s 0.85s 2 0.54s 1.20s 4 0.31s 1.23s 8 0.27s 1.40s 16 0.25s 2.36s Pretty much nothing. IOWs, it's just like I suspected - you are doing so many write IOs that you are serialising on the extent lookup and write checks which use exclusive locking.. Given that it is 2 lock traversals per write IO, we're limiting at about 4-500,000 exclusive lock grabs per second and decreasing as contention goes up. For reads, we are doing 2 shared (nested) lookups per read IO, we appear to be limiting at around 2,000,000 shared lock grabs per second. Ahmdals law is kicking in here, but it means if we could make the writes to use a shared lock, it would at least scale like the reads for this "no metadata modification except for mtime" overwrite case. I don't think that the generic write checks absolutely need exclusive locking - we probably could get away with a shared lock and only fall back to exclusive when we need to do EOF zeroing. Similarly, for the block mapping code if we don't need to do allocation, a shared lock is all we need. So maybe in that case for direct IO when create == 1, we can do a read lookup first and only grab the lock exclusively if that falls in a hole and requires allocation..... Let me think about it for a bit.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sandeen@sandeen.net Mon Jan 23 22:51:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O4pOC6191050 for ; Mon, 23 Jan 2012 22:51:24 -0600 X-ASG-Debug-ID: 1327380682-04cbb00c48117b0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id xBZUL6CbgdT6Kw7B for ; Mon, 23 Jan 2012 20:51:22 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 36782496335B; Mon, 23 Jan 2012 22:51:22 -0600 (CST) Message-ID: <4F1E38C9.3070000@sandeen.net> Date: Mon, 23 Jan 2012 22:51:21 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christian Kildau CC: xfs@oss.sgi.com Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes References: X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes In-Reply-To: X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327380682 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/21/12 4:03 AM, Christian Kildau wrote: > Hello, > > I'm having some very serious issues with XFS after upgrading from a > Linux Distro running Ubuntu 2.6.32 to 3.2. > > It seems like my filesystems are damaged after attaching them to a > Linux 3.2 server. I am also no longer able to mount the hdd on the > old server that is still running 2.6.32! did you do anything else at all besides simply boot a 3.2 kernel? Or was this a whole distro upgrade? And who knows what the installer did...? > 'test disk' does find the filesystem as XFS 4 and i created a 1.5TB > dump of it to another hdd. > > (I created the xfs filesystem on the entire hdd, not on a partition, > so /dev/sdd is not a typo) is sdd a single disk or something like lvm/md? what does grep sdd /proc/partitions say? And # xfs_db -c "sb 0" -c "p" /dev/sdd > > $ sudo mount -t xfs /dev/sdd /media/ > mount: /dev/sdd: can't read superblock > (dmesg) > [236659.912663] attempt to access beyond end of device > [236659.912667] sdd: rw=32, want=2930277168, limit=2930275055 > [236659.912670] XFS (sdd): last sector read failed > > $ sudo xfs_check /dev/sdd > xfs_check: error - read only 0 of 512 bytes > > $ sudo xfs_repair /dev/sdd > Phase 1 - find and verify superblock... > xfs_repair: error - read only 0 of 512 bytes stracing those to see where it is failing to read might be useful. It seems that your device has somehow shrunk out from under your fs. -Eric > > 'testdisk' does find the filesystem as XFS 4 and i created a 1.5TB dump of it to another hdd. > > Is there any way I can fix this? - Except restroring from backup? Because this IS my backup! > see ubuntuforums.org/showthread.php?t=1910962 for more details… > > > Any help is appreciated! > > Thanks in advance > Chris > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Mon Jan 23 23:04:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_47 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O54IJw192337 for ; Mon, 23 Jan 2012 23:04:18 -0600 X-ASG-Debug-ID: 1327381456-04cbb00c49125a0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id Kl9al8O2x9YM85kw for ; Mon, 23 Jan 2012 21:04:16 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 963BE496335B; Mon, 23 Jan 2012 23:04:16 -0600 (CST) Message-ID: <4F1E3BD0.7080604@sandeen.net> Date: Mon, 23 Jan 2012 23:04:16 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christian Kildau CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes In-Reply-To: <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327381456 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/23/12 3:23 AM, Christian Kildau wrote: > On Jan 23, 2012, at 5:31 AM, Dave Chinner wrote: > >> On Sat, Jan 21, 2012 at 11:29:15AM +0100, Christian Kildau wrote: >>> Sorry if this message appears twice! >>> Argh. ;) >>> >>> Hello, >>> >>> I'm having some very serious issues with XFS after upgrading from a >>> Linux Distro running Ubuntu 2.6.32 to 3.2. >>> >>> It seems like my filesystems are damaged after attaching them to a >>> Linux 3.2 server. I am also no longer able to mount the hdd on the old >>> server that is still running 2.6.32! >> >> I take it that you are using external storage of some kind? Can you >> describe it? > > This hdd is connected via e-sata, but it doesn't make any difference if I directly connect it internally via sata. > Also it doesn't make any difference if I connect it back to the 'old' server > >> >>> (I created the xfs filesystem on the entire hdd, not on a partition, >>> so /dev/sdd is not a typo) I wonder if your installer helpfully scribbled something on it since it had no partitions (which should be safe, but there are dumb apps out there). >>> $ sudo mount -t xfs /dev/sdd /media/ >>> mount: /dev/sdd: can't read superblock >>> (dmesg) >>> [236659.912663] attempt to access beyond end of device >>> [236659.912667] sdd: rw=32, want=2930277168, limit=2930275055 >>> [236659.912670] XFS (sdd): last sector read failed >> >> So XFS has asked to read 2113 sectors beyond the size of the device >> that the kernel is reporting. What is the output of >> /proc/partitions? > > $ grep sdd /proc/partitions > 8 64 1465137527 sdd so 1465137527*1024 = 1500300827648 bytes >From the strace repair is trying to read at: pread(4, "", 512, 1500301909504) = 0 which is about 1 meg past the end of the device. >> >>> $ sudo xfs_check /dev/sdd >>> xfs_check: error - read only 0 of 512 bytes >>> >>> $ sudo xfs_repair /dev/sdd >>> Phase 1 - find and verify superblock... >>> xfs_repair: error - read only 0 of 512 bytes >> >> So both buffered and direct IO to the first block in the block >> device are failing. I'd say your problems have nothing to do with >> XFS. However, can you strace them and find out what the error that >> is occuring actually is? > > Strace is giving me: > wait4(-1, xfs_check: /dev/sdd is not a valid XFS filesystem (unexpected SB magic number 0x00000000) now that is something else... > xfs_check: WARNING - filesystem uses v1 dirs,limited functionality provided. > xfs_check: read failed: Invalid argument > cache_node_purge: refcount was 1, not zero (node=0x21ecef0) > xfs_check: cannot read root inode (22) > bad superblock magic number 0, giving up those are different failures than first reported.... xfs_db -c "sb 0" -c "p" /dev/sdd still might be interesting. -Eric > I attached the entire strace logs to this email. > > > > > > Do you have any idea what has caused this or how to fix it? > > Thanks in advance! > Chris > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Mon Jan 23 23:07:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O570CY192545 for ; Mon, 23 Jan 2012 23:07:00 -0600 X-ASG-Debug-ID: 1327381618-04bdf006bb13720001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id aBT2wbaT2bq3eVBg for ; Mon, 23 Jan 2012 21:06:58 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id D0059496335B; Mon, 23 Jan 2012 23:06:57 -0600 (CST) Message-ID: <4F1E3C71.1020303@sandeen.net> Date: Mon, 23 Jan 2012 23:06:57 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: John Valdes CC: xfs@oss.sgi.com Subject: Re: log recovery fails at mount References: <20120124024340.GA6689@starfish.mcs.anl.gov> X-ASG-Orig-Subj: Re: log recovery fails at mount In-Reply-To: <20120124024340.GA6689@starfish.mcs.anl.gov> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327381618 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/23/12 8:43 PM, John Valdes wrote: > All, > > We have an XFS which fails to mount due to an internal error according > to the messages reported to syslog: > > kernel: Filesystem md4: Disabling barriers, trial barrier write failed > kernel: XFS mounting filesystem md4 > kernel: Starting XFS recovery on filesystem: md4 (logdev: internal) > kernel: XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1676 of file fs/xfs/xfs_alloc.c. Caller 0xffffffff887fca71 > kernel: > kernel: > kernel: Call Trace: > kernel: [] :xfs:xfs_free_ag_extent+0x433/0x67e > kernel: [] :xfs:xfs_free_extent+0xa9/0xc9 > kernel: [] :xfs:xlog_recover_process_efi+0x112/0x16c > kernel: [] :xfs:xfs_fs_fill_super+0x0/0x3dc > kernel: [] :xfs:xlog_recover_process_efis+0x4f/0x8d > kernel: [] :xfs:xlog_recover_finish+0x14/0x9e > kernel: [] :xfs:xfs_fs_fill_super+0x0/0x3dc > kernel: [] :xfs:xfs_mountfs+0x47a/0x5ac > kernel: [] :xfs:xfs_mru_cache_create+0x113/0x143 > kernel: [] :xfs:xfs_fs_fill_super+0x203/0x3dc > kernel: [] get_sb_bdev+0x10a/0x16c > kernel: [] vfs_kern_mount+0x93/0x11a > kernel: [] do_kern_mount+0x36/0x4d > kernel: [] do_mount+0x6a9/0x719 > kernel: [] __handle_mm_fault+0x9f6/0x103b > kernel: [] _atomic_dec_and_lock+0x39/0x57 > kernel: [] mntput_no_expire+0x19/0x89 > kernel: [] find_get_page+0x21/0x51 > kernel: [] __up_read+0x19/0x7f > kernel: [] do_page_fault+0x4cc/0x842 > kernel: [] __handle_mm_fault+0x5f5/0x103b > kernel: [] zone_statistics+0x3e/0x6d > kernel: [] __alloc_pages+0x78/0x308 > kernel: [] sys_mount+0x8a/0xcd > kernel: [] tracesys+0xd5/0xe0 > kernel: > kernel: Failed to recover EFIs on filesystem: md4 > kernel: XFS: log mount finish failed > > xfs_repair is unwilling to repair the fs since it sees unwritten data > in the xfs log: > > prompt# xfs_repair /dev/md4 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > ERROR: The filesystem has valuable metadata changes in a log which needs to > be replayed. Mount the filesystem to replay the log, and unmount it before > re-running xfs_repair. If you are unable to mount the filesystem, then use > the -L option to destroy the log and attempt a repair. > Note that destroying the log may cause corruption -- please attempt a mount > of the filesystem before doing this. > > Of course, since I can't mount the fs, I can't replay the log. Before > zeroing out the log w/ xfs_repair -L, I was wondering if there is any > way to tell how critical the metadata in the log is? I've run try: # xfs_metadump /dev/md4 md4.metadump # xfs_mdrestore md4.metadump md4.img # xfs_repair -L md4.img that'll repair a metadata image and you can see how much it runs into. > "xfs_logprint", but not being an XFS developer, I don't understand the > info it's showing me. Is there anyway to glean something useful from > xfs_logprint? For reference, I've put a copy of the complete output > at http://www.mcs.anl.gov/~valdes/xfslog.txt (warning, it's over 3.7 > million lines long and about 192 MB big). > > The system with this problem is running RHEL 5.7 with the bundled XFS > modules, eg: > > prompt# modinfo xfs > filename: /lib/modules/2.6.18-274.3.1.el5/kernel/fs/xfs/xfs.ko > license: GPL > description: SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled > author: Silicon Graphics, Inc. > srcversion: 4A41C05CBD42F5525F11CBD > depends: > vermagic: 2.6.18-274.3.1.el5 SMP mod_unload gcc-4.1 > module_sig: 883f3504e58268794abe3920d1168f112bb7209e2721679ef3b2971313fad2364b5a43f2ab33e0a0a59bf02c12aca5e46c326a106f838129e0ab4867 > > although the XFS itself was built on an earlier version of RHEL 5, FWIW. > > The details and history of the problem XFS are: > > - It's ~20TB built on an md stripe of two 3ware RAID6 arrays. > > - The problem showed up after a drive in one of the 3ware RAIDs > failed, causing the controller to hang, which took that RAID (scsi > device) offline: > > kernel: sd 7:0:0:0: WARNING: (0x06:0x002C): Command (0x2a) timed out, resetting card. > kernel: 3w-9xxx: scsi7: ERROR: (0x06:0x001F): Microcontroller not ready during reset sequence. > kernel: 3w-9xxx: scsi7: ERROR: (0x06:0x001F): Microcontroller not ready during reset sequence. > kernel: 3w-9xxx: scsi7: ERROR: (0x06:0x002B): Controller reset failed during scsi host reset. > kernel: sd 7:0:0:0: scsi: Device offlined - not ready after error recovery > last message repeated 99 times > kernel: sd 7:0:0:0: rejecting I/O to offline device > last message repeated 50 times > kernel: sd 7:0:0:0: SCSI error: return code = 0x00010000 > kernel: end_request: I/O error, dev sdd, sector 2292015744 > kernel: sd 7:0:0:0: rejecting I/O to offline device > last message repeated 436 times > kernel: Device md4, XFS metadata write error block 0xd03f0 in md4 > kernel: Buffer I/O error on device md4, logical block 723454688 > kernel: lost page write due to I/O error on md4 > kernel: Buffer I/O error on device md4, logical block 723454689 > [...] > kernel: sd 7:0:0:0: rejecting I/O to offline device > kernel: I/O error in filesystem ("md4") meta-data dev md4 block 0x48c2598aa ("xlog_iodone") error 5 buf count 3584 > kernel: xfs_force_shutdown(md4,0x2) called from line 1061 of file fs/xfs/xfs_log.c. Return address = 0xffffffff8867404a > kernel: Filesystem md4: Log I/O Error Detected. Shutting down filesystem: md4 > kernel: Please umount the filesystem, and rectify the problem(s) > kernel: Filesystem md4: xfs_log_force: error 5 returned. > > I was able to fully shutdown the system after this, although I did > need to power cycle it in order to get the 3ware controller back > online (the controller does have a functional battery, so in theory > data in its write cache should have been preserved, although > messages at reboot suggest otherwise). Nevertheless, upon reboot, > the XFS mounted fine: > > kernel: 3w-9xxx: scsi7: AEN: ERROR (0x04:0x005F): Cache synchronization failed; some data lost:unit=0. > kernel: 3w-9xxx: scsi7: AEN: WARNING (0x04:0x0008): Unclean shutdown detected:unit=0. > [...] > kernel: SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled > kernel: SGI XFS Quota Management subsystem > kernel: Filesystem md4: Disabling barriers, trial barrier write failed > kernel: XFS mounting filesystem md4 > kernel: Starting XFS recovery on filesystem: md4 (logdev: internal) > kernel: Ending XFS recovery on filesystem: md4 (logdev: internal) > > - The XFS continued working fine for about 2 weeks, but then it started > reporting internal erros (XFS_WANT_CORRUPTED_RETURN): > > kernel: XFS internal error XFS_WANT_CORRUPTED_RETURN at line 295 of file fs/xfs/xfs_alloc.c. Caller 0xffffffff8864a345 > kernel: > kernel: > kernel: Call Trace: > kernel: [] :xfs:xfs_alloc_fixup_trees+0x2ba/0x2cb > kernel: [] :xfs:xfs_btree_init_cursor+0x31/0x1a3 > kernel: [] :xfs:xfs_alloc_ag_vextent_near+0x773/0x8e2 > kernel: [] :xfs:xfs_alloc_ag_vextent+0x2b/0xfc > kernel: [] :xfs:xfs_alloc_vextent+0x2ce/0x3ff > kernel: [] :xfs:xfs_bmap_btalloc+0x673/0x8c1 > kernel: [] :xfs:xfs_bmapi+0x6ec/0xe79 > kernel: [] :xfs:xlog_ticket_alloc+0xc8/0xed > kernel: [] :xfs:xfs_log_reserve+0xad/0xc9 > kernel: [] :xfs:xfs_iomap_write_allocate+0x202/0x329 > kernel: [] :xfs:xfs_iomap+0x217/0x28d > kernel: [] :xfs:xfs_map_blocks+0x2d/0x63 > kernel: [] :xfs:xfs_page_state_convert+0x2b1/0x546 > kernel: [] generic_make_request+0x211/0x228 > kernel: [] :xfs:xfs_vm_writepage+0xa7/0xe0 > kernel: [] mpage_writepages+0x1bf/0x37d > kernel: [] :xfs:xfs_vm_writepage+0x0/0xe0 > kernel: [] do_writepages+0x20/0x2f > kernel: [] __writeback_single_inode+0x1a2/0x31c > kernel: [] sync_sb_inodes+0x1b7/0x271 > kernel: [] keventd_create_kthread+0x0/0xc4 > kernel: [] writeback_inodes+0x82/0xd8 > kernel: [] wb_kupdate+0xd4/0x14e > kernel: [] pdflush+0x0/0x1fb > kernel: [] pdflush+0x151/0x1fb > kernel: [] wb_kupdate+0x0/0x14e > kernel: [] kthread+0xfe/0x132 > kernel: [] child_rip+0xa/0x11 > kernel: [] keventd_create_kthread+0x0/0xc4 > kernel: [] kthread+0x0/0x132 > kernel: [] child_rip+0x0/0x11 > > - Once this started happening, I shutdown the system again, but this > time at reboot, the XFS failed to mount, w/ the error given at the > top of this email. > > Does anyone have any suggestions on how to recover from this state, or > is my only option xfs_repair -L and hope that there isn't any > corruption? This XFS is part of a scratch filesystem (we have a large > PVFS filesystem built on top of this XFS plus 7 other identical ones > on other servers), so if it ended up being corrupted, it wouldn't been > the end of the world, but it would represent a lot of lost work. > > Thanks for any help. > > John > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Mon Jan 23 23:07:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O57bjr192596 for ; Mon, 23 Jan 2012 23:07:37 -0600 X-ASG-Debug-ID: 1327381656-04cb6c0c160d900001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 2K6aGtNd9xSELC2g for ; Mon, 23 Jan 2012 21:07:36 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 1B05A496335B; Mon, 23 Jan 2012 23:07:36 -0600 (CST) Message-ID: <4F1E3C97.1010503@sandeen.net> Date: Mon, 23 Jan 2012 23:07:35 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: Eric Sandeen , James Lawrie , xfs-oss Subject: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota References: <4F1D9989.8060808@redhat.com> <20120123195922.GA2366@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota In-Reply-To: <20120123195922.GA2366@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327381656 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/23/12 1:59 PM, Christoph Hellwig wrote: > On Mon, Jan 23, 2012 at 11:31:53AM -0600, Eric Sandeen wrote: >> Doing something like >> >> # xfs_quota -x -c 'limit -u bhard=1.2g ... >> >> will cause cvtnum to fail and return a value of -1LL (because it >> cannot parse the decimal), but the quota caller doesn't check >> for this error value, casts it to U64, shifts right, and we end >> up with an answer of 16 petabytes rather than erroring out. >> Fix this. > > Can you add a test case for it, please? sure... I have quite a backlog of tests I need to get pushed to git :( Is that an ack for the patch, though? :) -Eric From tribuna-bounces@samba-choro.com.br Tue Jan 24 00:21:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O6Lcep212968 for ; Tue, 24 Jan 2012 00:21:39 -0600 X-ASG-Debug-ID: 1327386094-04cbb00c4719070001-w1Z2WR Received: from leopard.uninet.com.br (www.samba-choro.com.br [200.220.14.11]) by cuda.sgi.com with ESMTP id 4OfmSJPbBLSTLL7m for ; Mon, 23 Jan 2012 22:21:36 -0800 (PST) X-Barracuda-Envelope-From: tribuna-bounces@samba-choro.com.br X-Barracuda-Apparent-Source-IP: 200.220.14.11 Received: from leopard.uninet.com.br (localhost [127.0.0.1]) by leopard.uninet.com.br (Postfix) with ESMTP id 334BA17E8C for ; Tue, 24 Jan 2012 04:21:34 -0200 (BRST) MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Subject: =?iso-8859-1?q?Sua_mensagem_para_a_lista_Tribuna_aguarda_aprova?= =?iso-8859-1?q?=E7=E3o?= From: tribuna-bounces@samba-choro.com.br X-ASG-Orig-Subj: =?iso-8859-1?q?Sua_mensagem_para_a_lista_Tribuna_aguarda_aprova?= =?iso-8859-1?q?=E7=E3o?= To: linux-xfs@oss.sgi.com Message-ID: Date: Tue, 24 Jan 2012 04:21:32 -0200 Precedence: bulk X-BeenThere: tribuna@samba-choro.com.br X-Mailman-Version: 2.1.11 List-Id: X-List-Administrivia: yes Sender: tribuna-bounces@samba-choro.com.br Errors-To: tribuna-bounces@samba-choro.com.br X-Barracuda-Connect: www.samba-choro.com.br[200.220.14.11] X-Barracuda-Start-Time: 1327386096 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86531 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name Your mail to 'Tribuna' with the subject (sem assunto) Is being held until the list moderator can review it for approval. The reason it is being held: Postagem por n=E3o membro para uma lista somente de membros Either the message will get posted to the list, or you will receive notification of the moderator's decision. If you would like to cancel this posting, please visit the following URL: http://www.samba-choro.com.br/cgi-bin/mailman/confirm/tribuna/9e9fd1aa1= 6cf4bb890be1f1c8491e6ebeff1a2ef From david@fromorbit.com Tue Jan 24 00:59:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O6xnOw218172 for ; Tue, 24 Jan 2012 00:59:50 -0600 X-ASG-Debug-ID: 1327388387-04bdf006ba1dd30001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 1colHjBhWUEFt5M0 for ; Mon, 23 Jan 2012 22:59:48 -0800 (PST) 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: Av0EANpVHk95LElR/2dsb2JhbABDriqBBoFyAQEEATocIwULCAMOCi4UJQMhE4d8uE0TjBMElReJKgcBiTA Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail07.adl2.internode.on.net with ESMTP; 24 Jan 2012 17:29:47 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpaM5-0005Y2-Bq; Tue, 24 Jan 2012 17:59:45 +1100 Date: Tue, 24 Jan 2012 17:59:45 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Ben Myers , Alex Elder Subject: Re: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size() Message-ID: <20120124065945.GL15102@dastard> X-ASG-Orig-Subj: Re: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size() References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-5-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327091686-23177-5-git-send-email-jack@suse.cz> 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: 1327388387 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86533 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 20, 2012 at 09:34:42PM +0100, Jan Kara wrote: > In xfs we first take ilock and start transaction afterwards. The correct order is to allocate the transaction, reserve the space for it and then take the ilock. We cannot hold the ilock over the transaction reservation because that can deadlock the journal. That is, to make space for the new transaction reservation, we may need to take the ilock to flush the inode and allow the journal tail to move forwards to make space for the new transaction. If we already hold the ilock, then it can't be flushed, we can't make space available in the journal and hence deadlock. Maybe you confused the ilock vs the iolock. We can hold the iolock over the trans alloc/reserve because that lock is not required to move the tail of the journal, so the deadlock doesn't exist. > We should obey > this order in all places because otherwise we can create the following deadlock > with filesystem freezing: One process holds ilock and blocks on s_frozen == > SB_FREEZE_TRANS in xfs_trans_alloc(), another process has a transaction started > (thus blocking freezing) and blocks on ilock. So we have to take ilock earlier > in xfs_setattr_size(). Where are we taking the ilock and then calling xfs_trans_alloc()? That's the caller needs to be fixed, not the 40-odd that do the right thing by taking the ilock -after- the trans alloc/reserve calls. Cheers, Dave. -- Dave Chinner david@fromorbit.com From lists@unixhosts.org Tue Jan 24 01:08:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_47, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O78SLK218614 for ; Tue, 24 Jan 2012 01:08:28 -0600 X-ASG-Debug-ID: 1327388905-04bdf006ba1e950001-NocioJ Received: from mail-ee0-f53.google.com (mail-ee0-f53.google.com [74.125.83.53]) by cuda.sgi.com with ESMTP id Xd1y5CMH1wJ7dSuh (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 23 Jan 2012 23:08:26 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 74.125.83.53 Received: by eeke51 with SMTP id e51so2054010eek.26 for ; Mon, 23 Jan 2012 23:08:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to:x-mailer:x-gm-message-state:content-type :content-transfer-encoding; bh=xRDumwrkuqp2y1dK7kwszJb5L6qXeHg8JFROyYL63rk=; b=CBV5pzReuTbZL6iXeFgL1bbWgM7jQQxEq1SbMvxzkX6XFdgV4+K+BC13nWUWN+l3jL TbMkSbBzZeVwCxkVaNkrw9gIszD6sEyo7alJjRD5MZvhUGz/IfQ3m+CQpJgixUICSLkK yuDYG7wWSZGESHFB5xqQTsXHEioRm7g7doWHk= Received: by 10.14.100.10 with SMTP id y10mr4003325eef.119.1327388904714; Mon, 23 Jan 2012 23:08:24 -0800 (PST) Received: from marge.int.unixhosts.org (p5080301A.dip.t-dialin.net. [80.128.48.26]) by mx.google.com with ESMTPS id w46sm32196412eeb.0.2012.01.23.23.08.21 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 23 Jan 2012 23:08:22 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Christian Kildau In-Reply-To: <4F1E3BD0.7080604@sandeen.net> Date: Tue, 24 Jan 2012 08:08:20 +0100 Cc: Dave Chinner , xfs@oss.sgi.com Message-Id: References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> To: Eric Sandeen X-Mailer: Apple Mail (2.1251.1) X-Gm-Message-State: ALoCoQl0w4TMxEgfWWWBNycQ/CfzK41BsCjEdghRlTFNYmlNxpSETFm3/dh8YNWHhir3aUil3h1F Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-ee0-f53.google.com[74.125.83.53] X-Barracuda-Start-Time: 1327388905 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86533 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 Jan 24, 2012, at 6:04 AM, Eric Sandeen wrote: > On 1/23/12 3:23 AM, Christian Kildau wrote: >> On Jan 23, 2012, at 5:31 AM, Dave Chinner wrote: >>=20 >>> On Sat, Jan 21, 2012 at 11:29:15AM +0100, Christian Kildau wrote: >>>> Sorry if this message appears twice! >>>>=20 >=20 > Argh. ;) >=20 >>>>=20 >>>> Hello, >>>>=20 >>>> I'm having some very serious issues with XFS after upgrading from a >>>> Linux Distro running Ubuntu 2.6.32 to 3.2. >>>>=20 >>>> It seems like my filesystems are damaged after attaching them to a >>>> Linux 3.2 server. I am also no longer able to mount the hdd on the = old >>>> server that is still running 2.6.32! >>>=20 >>> I take it that you are using external storage of some kind? Can you >>> describe it? >>=20 >> This hdd is connected via e-sata, but it doesn't make any difference = if I directly connect it internally via sata. >> Also it doesn't make any difference if I connect it back to the 'old' = server >>=20 >>>=20 >>>> (I created the xfs filesystem on the entire hdd, not on a = partition, >>>> so /dev/sdd is not a typo) >=20 > I wonder if your installer helpfully scribbled something on it since = it > had no partitions (which should be safe, but there are dumb apps out = there). This is a new system. I connected the hdd waaay after the installation. = So the installer has never seen it. ;) >=20 >>>> $ sudo mount -t xfs /dev/sdd /media/ >>>> mount: /dev/sdd: can't read superblock >>>> (dmesg) >>>> [236659.912663] attempt to access beyond end of device >>>> [236659.912667] sdd: rw=3D32, want=3D2930277168, limit=3D2930275055 >>>> [236659.912670] XFS (sdd): last sector read failed >>>=20 >>> So XFS has asked to read 2113 sectors beyond the size of the device >>> that the kernel is reporting. What is the output of >>> /proc/partitions? >>=20 >> $ grep sdd /proc/partitions=20 >> 8 64 1465137527 sdd >=20 > so 1465137527*1024 =3D 1500300827648 bytes >=20 > =46rom the strace repair is trying to read at: >=20 > pread(4, "", 512, 1500301909504) =3D 0 >=20 > which is about 1 meg past the end of the device. That's weird! Any chance left I can fix this? >=20 >>>=20 >>>> $ sudo xfs_check /dev/sdd >>>> xfs_check: error - read only 0 of 512 bytes >>>>=20 >>>> $ sudo xfs_repair /dev/sdd >>>> Phase 1 - find and verify superblock... >>>> xfs_repair: error - read only 0 of 512 bytes >>>=20 >>> So both buffered and direct IO to the first block in the block >>> device are failing. I'd say your problems have nothing to do with >>> XFS. However, can you strace them and find out what the error that >>> is occuring actually is? >>=20 >> Strace is giving me: >> wait4(-1, xfs_check: /dev/sdd is not a valid XFS filesystem = (unexpected SB magic number 0x00000000) >=20 > now that is something else=85 Yes, sorry. that was my fault. Wrong hdd. see my other message for the = correct straces. >=20 >> xfs_check: WARNING - filesystem uses v1 dirs,limited functionality = provided. >> xfs_check: read failed: Invalid argument >> cache_node_purge: refcount was 1, not zero (node=3D0x21ecef0) >> xfs_check: cannot read root inode (22) >> bad superblock magic number 0, giving up >=20 > those are different failures than first reported.... >=20 > xfs_db -c "sb 0" -c "p" /dev/sdd still might be interesting. >=20 xfs_db: error - read only 0 of 512 bytes magicnum =3D 0x58465342 blocksize =3D 4096 dblocks =3D 366284646 rblocks =3D 0 rextents =3D 0 uuid =3D 65b7d940-6577-4384-b7ba-f051300f2d56 logstart =3D 268435460 rootino =3D 128 rbmino =3D 129 rsumino =3D 130 rextsize =3D 1 agblocks =3D 91571162 agcount =3D 4 rbmblocks =3D 0 logblocks =3D 32768 versionnum =3D 0xb4a4 sectsize =3D 512 inodesize =3D 256 inopblock =3D 16 fname =3D "\000\000\000\000\000\000\000\000\000\000\000\000" blocklog =3D 12 sectlog =3D 9 inodelog =3D 8 inopblog =3D 4 agblklog =3D 27 rextslog =3D 0 inprogress =3D 0 imax_pct =3D 5 icount =3D 5184 ifree =3D 16 fdblocks =3D 54646459 frextents =3D 0 uquotino =3D 0 gquotino =3D 0 qflags =3D 0 flags =3D 0 shared_vn =3D 0 inoalignmt =3D 2 unit =3D 0 width =3D 0 dirblklog =3D 0 logsectlog =3D 0 logsectsize =3D 0 logsunit =3D 1 features2 =3D 0x8 bad_features2 =3D 0x8 I don't get anything useful from that information ;) Thanks in advance! Chris= From david@fromorbit.com Tue Jan 24 01:19:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O7JVVB219311 for ; Tue, 24 Jan 2012 01:19:31 -0600 X-ASG-Debug-ID: 1327389568-04cbb00c491f470001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 2YR2Ck2uyWwCCxM7 for ; Mon, 23 Jan 2012 23:19:29 -0800 (PST) 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: Av4EAONYHk95LElR/2dsb2JhbABDriuBBoFyAQEEAScTHCMFCwgDDgojCxQlAyETh3y4SxOMEwSVF4kqiTg Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail07.adl2.internode.on.net with ESMTP; 24 Jan 2012 17:49:28 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rpaf8-0005ap-Pf; Tue, 24 Jan 2012 18:19:26 +1100 Date: Tue, 24 Jan 2012 18:19:26 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Ben Myers , Alex Elder Subject: Re: [PATCH 5/8] xfs: Protect xfs_file_aio_write() & xfs_setattr_size() with sb_start_write - sb_end_write Message-ID: <20120124071926.GM15102@dastard> X-ASG-Orig-Subj: Re: [PATCH 5/8] xfs: Protect xfs_file_aio_write() & xfs_setattr_size() with sb_start_write - sb_end_write References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-6-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327091686-23177-6-git-send-email-jack@suse.cz> 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: 1327389568 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86535 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 20, 2012 at 09:34:43PM +0100, Jan Kara wrote: > Replace racy xfs_wait_for_freeze() check in xfs_file_aio_write() with > a reliable sb_start_write() - sb_end_write() locking. Due to lock ranking > dictated by the page fault code we have to call sb_start_write() after we > acquire ilock. It appears to me that you have indeed confused the ilock with the iolock. > Similarly we have to protect xfs_setattr_size() because it can modify last > page of truncated file. Because ilock is dropped in xfs_setattr_size() we > have to drop and retake write access as well to avoid deadlocks. > > CC: Ben Myers > CC: Alex Elder > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_file.c | 6 ++++-- > fs/xfs/xfs_iops.c | 6 ++++++ > 2 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 753ed9b..9efd153 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -862,9 +862,11 @@ xfs_file_dio_aio_write( > *iolock = XFS_IOLOCK_SHARED; > } > > + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); > trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); > ret = generic_file_direct_write(iocb, iovp, > &nr_segs, pos, &iocb->ki_pos, count, ocount); > + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); That's inside the iolock, not the ilock. Either way, it is incorrect. This accounting should be outside the iolock - because xfs_trans_alloc() can be called with the iolock held. Therefore the freeze/lock order needs to be sb_start_write(SB_FREEZE_WRITE) XFS(ip)->i_iolock XFS(ip)->i_ilock sb_end_write(SB_FREEZE_WRITE) Which matches the current freeze/lock order. > @@ -945,8 +949,6 @@ xfs_file_aio_write( > if (ocount == 0) > return 0; > > - xfs_wait_for_freeze(ip->i_mount, SB_FREEZE_WRITE); > - that's where sb_start_write() needs to be, and the sb-end_write() call needs to below the generic_write_sync() calls that will trigger IO on O_SYNC writes. Otherwise it is not covering all the IO path correctly. > if (XFS_FORCED_SHUTDOWN(ip->i_mount)) > return -EIO; > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index 3579bc8..798b9c6 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -793,6 +793,7 @@ xfs_setattr_size( > return xfs_setattr_nonsize(ip, iattr, 0); > } > > + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); > /* > * Make sure that the dquots are attached to the inode. > */ > @@ -849,10 +850,14 @@ xfs_setattr_size( > xfs_get_blocks); > if (error) > goto out_unlock; > + /* Drop the write access to avoid lock inversion with ilock */ > + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); > > xfs_ilock(ip, XFS_ILOCK_EXCL); > lock_flags |= XFS_ILOCK_EXCL; > > + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); > + This is caused by the previous problems I pointed out. You should not need to drop the freeze reference here at all. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 24 02:05:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O85GNw222207 for ; Tue, 24 Jan 2012 02:05:16 -0600 X-ASG-Debug-ID: 1327392313-04bdf006bc244b0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id McQSQ9wpyUH9VSb2 for ; Tue, 24 Jan 2012 00:05:13 -0800 (PST) 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: Av0EAPdjHk95LElR/2dsb2JhbABDriuBBoFyAQEEAScTHCMFCwgDDgouFCUDIROHfLhQE4wTBJUXiSqJOA Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail07.adl2.internode.on.net with ESMTP; 24 Jan 2012 18:35:12 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpbNP-0005fR-Be; Tue, 24 Jan 2012 19:05:11 +1100 Date: Tue, 24 Jan 2012 19:05:11 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 6/8] xfs: Use generic writers counter instead of m_active_trans counter Message-ID: <20120124080511.GN15102@dastard> X-ASG-Orig-Subj: Re: [PATCH 6/8] xfs: Use generic writers counter instead of m_active_trans counter References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-7-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327091686-23177-7-git-send-email-jack@suse.cz> 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: 1327392313 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86537 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words On Fri, Jan 20, 2012 at 09:34:44PM +0100, Jan Kara wrote: > m_active_trans counter is racy wrt filesystem freezing. The patch replaces it > with generic counter of running transactions which is properly synchronized > with filesystem freezing. Things are a bit more complex because we need to log > a dummy transaction and free block counters after the filesystem is frozen so > we need to pass information to _xfs_trans_alloc() whether the transaction is > part of filesystem freezing or not. > > Signed-off-by: Jan Kara > --- > fs/xfs/xfs_fsops.c | 5 +++-- > fs/xfs/xfs_fsops.h | 2 +- > fs/xfs/xfs_iomap.c | 4 ++-- > fs/xfs/xfs_mount.c | 2 +- > fs/xfs/xfs_mount.h | 2 -- > fs/xfs/xfs_super.c | 3 +-- > fs/xfs/xfs_sync.c | 13 +++---------- > fs/xfs/xfs_trans.c | 19 ++++++++++++------- > fs/xfs/xfs_trans.h | 3 ++- > 9 files changed, 25 insertions(+), 28 deletions(-) > > diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c > index 1c6fdeb..503fdfa 100644 > --- a/fs/xfs/xfs_fsops.c > +++ b/fs/xfs/xfs_fsops.c > @@ -645,12 +645,13 @@ out: > */ > int > xfs_fs_log_dummy( > - xfs_mount_t *mp) > + xfs_mount_t *mp, > + bool for_freeze) What does "for_freeze" mean? If it is true, does it mean we are in a freeze or not in a freeze? I can't really tell from the code, because it just passed true or false, and in one case the code always passes false even though the code can be called after SB_FREEZE_WRITE is set (xfs_quiesce_data() via sync_filesystem()) > #endif /* __XFS_FSOPS_H__ */ > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c > index 9afa282..fd47f6e 100644 > --- a/fs/xfs/xfs_iomap.c > +++ b/fs/xfs/xfs_iomap.c > @@ -679,8 +679,8 @@ xfs_iomap_write_unwritten( > * the same inode that we complete here and might deadlock > * on the iolock. > */ > - xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); > - tp = _xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE, KM_NOFS); > + tp = _xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE, > + KM_NOFS, false); This is a documentation regression - the code was clearly self documenting w.r.t. frozen filesystem behaviour. It isn't anymore. I'd suggest that we need: #define XFS_WAIT_FOR_FREEZE false #define XFS_IGNORE_FROZEN_SB true as the parameters here to makeit extremely clear when reading the code exactly what that last parameter means. i.e. it is self documenting. That will help clear up a lot of the confusion on what these magic boolean parameters are supposed to mean.... > @@ -312,7 +311,6 @@ void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, > #define SHUTDOWN_DEVICE_REQ 0x0020 /* failed all paths to the device */ > > #define xfs_test_for_freeze(mp) ((mp)->m_super->s_frozen) I'd remove this, too, and just open code it. > diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c > index aa3dc1a..24f4d7c 100644 > --- a/fs/xfs/xfs_sync.c > +++ b/fs/xfs/xfs_sync.c > @@ -373,7 +373,7 @@ xfs_quiesce_data( > > /* mark the log as covered if needed */ > if (xfs_log_need_covered(mp)) > - error2 = xfs_fs_log_dummy(mp); > + error2 = xfs_fs_log_dummy(mp, false); This is the call that can occur inside SB_FREEZE_WRITE context as well as outside it. > > /* flush data-only devices */ > if (mp->m_rtdev_targp) > @@ -421,18 +421,11 @@ xfs_quiesce_attr( > int error = 0; > > /* wait for all modifications to complete */ > - while (atomic_read(&mp->m_active_trans) > 0) > - delay(100); > + sb_wait_write(mp->m_super, SB_FREEZE_TRANS); > > /* flush inodes and push all remaining buffers out to disk */ > xfs_quiesce_fs(mp); > > - /* > - * Just warn here till VFS can correctly support > - * read-only remount without racing. > - */ > - WARN_ON(atomic_read(&mp->m_active_trans) != 0); > - Now there's an interesting question. Does this break read-only remount? /me checks the sb_wait_write() code No, it looks like it should be fine. > /* Push the superblock and write an unmount record */ > error = xfs_log_sbcount(mp); > if (error) > @@ -467,7 +460,7 @@ xfs_sync_worker( > /* dgc: errors ignored here */ > if (mp->m_super->s_frozen == SB_UNFROZEN && > xfs_log_need_covered(mp)) > - error = xfs_fs_log_dummy(mp); > + error = xfs_fs_log_dummy(mp, false); > else > xfs_log_force(mp, 0); > error = xfs_qm_sync(mp, SYNC_TRYLOCK); > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > index 1f35b2f..e97014b 100644 > --- a/fs/xfs/xfs_trans.c > +++ b/fs/xfs/xfs_trans.c > @@ -577,24 +577,28 @@ xfs_trans_alloc( > xfs_mount_t *mp, > uint type) > { > - xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); > - return _xfs_trans_alloc(mp, type, KM_SLEEP); > + return _xfs_trans_alloc(mp, type, KM_SLEEP, false); > } > > xfs_trans_t * > _xfs_trans_alloc( > xfs_mount_t *mp, > uint type, > - uint memflags) > + uint memflags, > + bool freezing) > { > xfs_trans_t *tp; > > - atomic_inc(&mp->m_active_trans); > - > + if (!freezing) > + sb_start_write(mp->m_super, SB_FREEZE_TRANS); > + else > + WARN_ON(xfs_test_for_freeze(mp) != SB_FREEZE_TRANS); Just open code xfs_test_for_freeze() and add a line of whitespace after this. > tp = kmem_zone_zalloc(xfs_trans_zone, memflags); > tp->t_magic = XFS_TRANS_MAGIC; > tp->t_type = type; > tp->t_mountp = mp; > + if (freezing) > + tp->t_flags |= XFS_TRANS_FREEZING; Simply assign the value - tp->t_flags is guaranteed to be 0 right now. > INIT_LIST_HEAD(&tp->t_items); > INIT_LIST_HEAD(&tp->t_busy); > return tp; > @@ -611,7 +615,8 @@ xfs_trans_free( > xfs_alloc_busy_sort(&tp->t_busy); > xfs_alloc_busy_clear(tp->t_mountp, &tp->t_busy, false); > > - atomic_dec(&tp->t_mountp->m_active_trans); > + if (!(tp->t_flags & XFS_TRANS_FREEZING)) > + sb_end_write(tp->t_mountp->m_super, SB_FREEZE_TRANS); > xfs_trans_free_dqinfo(tp); > kmem_zone_free(xfs_trans_zone, tp); > } > @@ -654,7 +659,7 @@ xfs_trans_dup( > > xfs_trans_dup_dqinfo(tp, ntp); > > - atomic_inc(&tp->t_mountp->m_active_trans); > + sb_dup_write(tp->t_mountp->m_super, SB_FREEZE_TRANS); That's strangly named. Isn't the normal thing to do here use a "__" prefix for operations that just need an extra reference because they already have one (i.e. __sb_start_write())? This also looks broken with repsect to the new XFS_TRANS_FREEZING flag. If it is set on the parent, it needs to be set on the duplicated transaction. And if it is set, then no extra reference should be taken. Cheers, Dave. -- Dave Chinner david@fromorbit.com From info@abayomiibiyemi.vipsmtp.in Tue Jan 24 02:16:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.5 required=5.0 tests=BAYES_60,SUBJ_ALL_CAPS, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O8GO6N222848 for ; Tue, 24 Jan 2012 02:16:25 -0600 X-ASG-Debug-ID: 1327392981-04bdf006bb25e30001-NocioJ Received: from abayomiibiyemi.vipsmtp.in (abayomiibiyemi.vipsmtp.in [208.115.237.11]) by cuda.sgi.com with ESMTP id IKx4owUxcBtUt5K8 for ; Tue, 24 Jan 2012 00:16:23 -0800 (PST) X-Barracuda-Envelope-From: info@abayomiibiyemi.vipsmtp.in X-Barracuda-Apparent-Source-IP: 208.115.237.11 Received: from [192.168.1.5] (unknown [41.58.11.43]) by abayomiibiyemi.vipsmtp.in (Postfix) with ESMTP id 29C5A5629355 for ; Tue, 24 Jan 2012 11:16:16 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=abayomiibiyemi.vipsmtp.in; s=mail01; t=1327392980; bh=NnrLQ2a9vI2u70foWUDZb15sneWwRROkqMyiBvVj8DM=; h=Message-Id:Mime-Version:From:To:Reply-To:Subject:Date: Content-type:Content-transfer-encoding; b=IqrM1HxBKMJTQQXpfu83MdlG1sW/2+pvZiXh+4Yz1fNux97PEHcLvdk7FuMYkwnNA O3w+jWo7HhQVwrqAdWXTx+YE3+1a9wz9Bj/fSxuCB0ucxtnhjJQ1wGKotXUOUtrccH 2kUpVMN0hlbZkctS6iefxXGItxPuxX407TrssrGw= Message-Id: Mime-Version: 1.0 From: YOMMY To: "xfs" Reply-To: yommyk@india.com Subject: DOWNLOAD DOMAIN-VERIFIED EMAILS FOR SALES PROMO Date: Tue, 24 Jan 2012 09:16:17 +0100 X-ASG-Orig-Subj: DOWNLOAD DOMAIN-VERIFIED EMAILS FOR SALES PROMO X-Bounce-Tracking-Info: Content-type: text/plain; charset=iso-8859-1; format=flowed Content-transfer-encoding: quoted-printable X-Barracuda-Connect: abayomiibiyemi.vipsmtp.in[208.115.237.11] X-Barracuda-Start-Time: 1327392983 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.80 X-Barracuda-Spam-Status: No, SCORE=1.80 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC7_SA440_FBF, DKIM_SIGNED, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86537 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 1.80 BSF_SC7_SA440_FBF Custom Rule SA440_FBF DOWNLOAD VERIFIED e-MAIL LISTS NOW AND PROMOTE YOUR BUSINESS/SERVICE/ PRODUCT: We are selling valid email lists=2E Valid mail is very much necessary for y= our business=2E If you want to market your products or bring traffic to you= r website then you must send mails=2E Valid d mail list can fulfill your re= quirements=2E We have a large database of valid mails from around the world= that we are offering you at reasonable prices=2E The characteristics of our database are: - All valid mail lists=2E - No duplicate mails=2E SAMPLE e-Mails NIGERIAN MAILS - 100,000 emails - N29,900; 200,000 emails - N39,900 azonoye6@yahoo=2Eco=2Euk sackious2000@yahoo=2Ecom nitobi26@yahoo=2Ecom dayoajimuda@yahoo=2Ecom ladyajibola@yahoo=2Ecom oritokeibiwunmi@yahoo=2Ecom aiyeduntemitayo@yahoo=2Ecom mohammedmusa21@yahoo=2Ecom lizanlove@yahoo=2Ecom seunsugar4real@yahoo=2Ecom tynnubaby@yahoo=2Eco=2Euk bolajiyinka74@yahoo=2Ecom adetayoadeniran@yahoo=2Ecom olusolajohnson79@yahoo=2Ecom wole_tutu2002@yahoo=2Ecom tosynmerielis@yahoo=2Ecom dupefunmi@rocketmail=2Ecom ojuluwayo=2Ebankole@yahoo=2Ecom qeensinka@yahoo=2Ecom gabbittuol@yahoo=2Ecom iboroakpan@gmail=2Ecom lyricalm2000@yahoo=2Ecom kolajo=2Eolajide@ng=2Enestle=2Ecom lekan4lekan@yahoo=2Ecom tajudeenaremu92@yahoo=2Ecom jokejay2002@yahoo=2Ecom jobern580@yahoo=2Ecom GHANA MAILS - 50,000mails - N15,500 gh@50logo=2Ejpg vbenson@mofep=2Egov=2Egh total_sen@hotmail=2Ecom cocobod@africaonline=2Ecom=2Egh info@chadecogroup=2Ecom ghnews@ghana=2Ecom info@gbcghana=2Ecom samueludo13@gmail=2Ecom james=2Egeorge35@hotmail=2Ecom info@ghanacafe=2Ecom goldcoastminerscompany@yahoo=2Ecom South Africa - 50,000mails - N19,900 Asia Mails (China, Japan, Singapore,Taiwan, etc) - 500,000 - N49,900 Middle East (Saudi Arabia, UAE, Iran, etc) - 50,000 - N19,900 Europe Mails - 50,000mails - N12,999 Worldwide Mails -10,000,000mails - N69,900 Australia & Oceania - 50,000mails - N12,999 South America Mails - 100,000mails - N15,999 Ebay Mails - 500,000mails - N19,900 Yahoo Mails - 500,000mails - N19,900 For enquiries on purchase, mail to: yommyk@india=2Ecom We accept payment by Paypal (yomi1004@gmail=2Ecom) Best Regards, YOMMY IBIYEMI 582, Ikorodu Road, Lagos Tel: 0806 489 1087 Notes: 1=2E Emails may not be delivered if your ISP is blocking Port 25 2=2E If your ISP IP is in Spamhaus's or RBL's list 3=2E If the recipient rejects your mail Non Opt-in Clause: We did not seek your consent to have this message sent t= o you To unsubscribe, mail "Unsubscribe" to yommyk@india=2Ecom We do not encourage spammers and fraudsters to patronise us KIND REGARDS, YOMMY=20 TEL: 234=2E806 489 1087 From david@fromorbit.com Tue Jan 24 02:21:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0O8LO59223084 for ; Tue, 24 Jan 2012 02:21:24 -0600 X-ASG-Debug-ID: 1327393282-04cb6c0c0f1b740001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id bYIwuRIReZzQMwiz for ; Tue, 24 Jan 2012 00:21:22 -0800 (PST) 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: Av0EAABnHk95LElR/2dsb2JhbABDriuBBoFyAQEFOhwjEAgDDgouFCUDIRPAQhOMEwSVF4kqiTg Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail07.adl2.internode.on.net with ESMTP; 24 Jan 2012 18:51:21 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rpbd1-0005h2-Oi; Tue, 24 Jan 2012 19:21:19 +1100 Date: Tue, 24 Jan 2012 19:21:19 +1100 From: Dave Chinner To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 2/8] vfs: Protect write paths by sb_start_write - sb_end_write Message-ID: <20120124082119.GO15102@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/8] vfs: Protect write paths by sb_start_write - sb_end_write References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-3-git-send-email-jack@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327091686-23177-3-git-send-email-jack@suse.cz> 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: 1327393282 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86539 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 20, 2012 at 09:34:40PM +0100, Jan Kara wrote: > There are three entry points which dirty pages in a filesystem. mmap (handled > by block_page_mkwrite()), buffered write (handled by > __generic_file_aio_write()), and truncate (it can dirty last partial page - > handled inside each filesystem separately). Protect these places with > sb_start_write() and sb_end_write(). fallocate can also dirty pages, either during preallocation or hole punching. Hence if you are going to promote truncate to SB_FREEZE_WRITE protection then you need to promote everything else that can zero partial blocks as well. That also means that anything the has implemented XFS_IOC_ ioctl interfaces for prellocation and hole punching (xfs, ocfs2 and gfs2 IIRC) also needs to be protected in the same way. Cheers, Dave. -- Dave Chinner david@fromorbit.com From lists@unixhosts.org Tue Jan 24 04:13:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_47, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OADsbv233998 for ; Tue, 24 Jan 2012 04:13:54 -0600 X-ASG-Debug-ID: 1327400031-04cb6c0c1d263c0001-NocioJ Received: from mail-ey0-f181.google.com (mail-ey0-f181.google.com [209.85.215.181]) by cuda.sgi.com with ESMTP id ON6W6jXKEcoNruJs (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 24 Jan 2012 02:13:52 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 209.85.215.181 Received: by eaal1 with SMTP id l1so2142756eaa.26 for ; Tue, 24 Jan 2012 02:13:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to:x-mailer:x-gm-message-state:content-type :content-transfer-encoding; bh=j+GlPUHRZQvLD8PvCUhiODOdnFf8qntHlp5ENxwa1wA=; b=tELyCpfioufciLFocCCuCONgk14S+r7uwz5CtW2oEGD5sLzN6cvwOMbRKL1qqcfBFB 3Lt43qchb7semKgIVmKNtM1mNF7CgW9dHiZA8DFsi2lbDGogj4aQuJjrBTz3v47RIjBe Elle0h7XZlsIc+lzYW1os0KeyarHzgPezAzfU= Received: by 10.213.31.204 with SMTP id z12mr2064003ebc.94.1327400031232; Tue, 24 Jan 2012 02:13:51 -0800 (PST) Received: from [10.61.212.153] ([217.199.200.17]) by mx.google.com with ESMTPS id r2sm65741120eef.7.2012.01.24.02.13.49 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jan 2012 02:13:50 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Christian Kildau In-Reply-To: <4F1E3BD0.7080604@sandeen.net> Date: Tue, 24 Jan 2012 11:13:48 +0100 Cc: Dave Chinner , xfs@oss.sgi.com Message-Id: References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> To: Eric Sandeen X-Mailer: Apple Mail (2.1251.1) X-Gm-Message-State: ALoCoQmjZNTLiiB3dh9jD+FE1fSrgCsGcywA2E2kw8Dtctjr2362mV5hSurPG0UMCastLcCpKftA Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-ey0-f181.google.com[209.85.215.181] X-Barracuda-Start-Time: 1327400032 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86545 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 Top posting... sorry. I have now found dozens of other users with a similar issue! e.g. = http://www.linuxquestions.org/questions/linux-general-1/cannot-mount-hard-= disk-block-count-exceeds-size-of-device-bad-partition-table-880149/ To make it short all of these users were running ext4 and a fs resize to = the new geometry fixed their problems! Sadly XFS doesn't support = shrinking the fs(?). On Jan 24, 2012, at 6:04 AM, Eric Sandeen wrote: > On 1/23/12 3:23 AM, Christian Kildau wrote: >> On Jan 23, 2012, at 5:31 AM, Dave Chinner wrote: >>=20 >>> On Sat, Jan 21, 2012 at 11:29:15AM +0100, Christian Kildau wrote: >>>> Sorry if this message appears twice! >>>>=20 >=20 > Argh. ;) >=20 >>>>=20 >>>> Hello, >>>>=20 >>>> I'm having some very serious issues with XFS after upgrading from a >>>> Linux Distro running Ubuntu 2.6.32 to 3.2. >>>>=20 >>>> It seems like my filesystems are damaged after attaching them to a >>>> Linux 3.2 server. I am also no longer able to mount the hdd on the = old >>>> server that is still running 2.6.32! >>>=20 >>> I take it that you are using external storage of some kind? Can you >>> describe it? >>=20 >> This hdd is connected via e-sata, but it doesn't make any difference = if I directly connect it internally via sata. >> Also it doesn't make any difference if I connect it back to the 'old' = server >>=20 >>>=20 >>>> (I created the xfs filesystem on the entire hdd, not on a = partition, >>>> so /dev/sdd is not a typo) >=20 > I wonder if your installer helpfully scribbled something on it since = it > had no partitions (which should be safe, but there are dumb apps out = there). >=20 >>>> $ sudo mount -t xfs /dev/sdd /media/ >>>> mount: /dev/sdd: can't read superblock >>>> (dmesg) >>>> [236659.912663] attempt to access beyond end of device >>>> [236659.912667] sdd: rw=3D32, want=3D2930277168, limit=3D2930275055 >>>> [236659.912670] XFS (sdd): last sector read failed >>>=20 >>> So XFS has asked to read 2113 sectors beyond the size of the device >>> that the kernel is reporting. What is the output of >>> /proc/partitions? >>=20 >> $ grep sdd /proc/partitions=20 >> 8 64 1465137527 sdd >=20 > so 1465137527*1024 =3D 1500300827648 bytes >=20 > =46rom the strace repair is trying to read at: >=20 > pread(4, "", 512, 1500301909504) =3D 0 >=20 > which is about 1 meg past the end of the device. >=20 >>>=20 >>>> $ sudo xfs_check /dev/sdd >>>> xfs_check: error - read only 0 of 512 bytes >>>>=20 >>>> $ sudo xfs_repair /dev/sdd >>>> Phase 1 - find and verify superblock... >>>> xfs_repair: error - read only 0 of 512 bytes >>>=20 >>> So both buffered and direct IO to the first block in the block >>> device are failing. I'd say your problems have nothing to do with >>> XFS. However, can you strace them and find out what the error that >>> is occuring actually is? >>=20 >> Strace is giving me: >> wait4(-1, xfs_check: /dev/sdd is not a valid XFS filesystem = (unexpected SB magic number 0x00000000) >=20 > now that is something else... >=20 >> xfs_check: WARNING - filesystem uses v1 dirs,limited functionality = provided. >> xfs_check: read failed: Invalid argument >> cache_node_purge: refcount was 1, not zero (node=3D0x21ecef0) >> xfs_check: cannot read root inode (22) >> bad superblock magic number 0, giving up >=20 > those are different failures than first reported.... >=20 > xfs_db -c "sb 0" -c "p" /dev/sdd still might be interesting. >=20 > -Eric >=20 >> I attached the entire strace logs to this email. >>=20 >>=20 >>=20 >>=20 >>=20 >> Do you have any idea what has caused this or how to fix it? >>=20 >> Thanks in advance! >> Chris >>=20 >>=20 >>=20 >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >=20 From michael.monnerie@is.it-management.at Tue Jan 24 04:31:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OAVEC6239467 for ; Tue, 24 Jan 2012 04:31:14 -0600 X-ASG-Debug-ID: 1327401070-04bdf006bc36420001-NocioJ Received: from mailsrv14.zmi.at (mailsrv14.zmi.at [212.69.164.54]) by cuda.sgi.com with ESMTP id lmOLWNrrlDjMkhew (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 02:31:12 -0800 (PST) X-Barracuda-Envelope-From: michael.monnerie@is.it-management.at X-Barracuda-Apparent-Source-IP: 212.69.164.54 Received: from mailsrv.i.zmi.at (h081217106014.dyn.cm.kabsi.at [81.217.106.14]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv14.zmi.at (Postfix) with ESMTPSA id 758A5182242B; Tue, 24 Jan 2012 11:31:09 +0100 (CET) Received: from saturn.localnet (saturn.i.zmi.at [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id 56352E18C15; Tue, 24 Jan 2012 11:31:16 +0100 (CET) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com, stan@hardwarefreak.com Subject: Re: Optimal XFS formatting options? Date: Tue, 24 Jan 2012 11:31:07 +0100 X-ASG-Orig-Subj: Re: Optimal XFS formatting options? User-Agent: KMail/1.13.6 (Linux/3.1.5-zmi; KDE/4.6.0; x86_64; ; ) References: <33140169.post@talk.nabble.com> <201201201652.10193@zmi.at> <4F19EE5E.8030508@hardwarefreak.com> In-Reply-To: <4F19EE5E.8030508@hardwarefreak.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1489778.3zTZaZKNbC"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <201201241131.08645@zmi.at> X-Barracuda-Connect: mailsrv14.zmi.at[212.69.164.54] X-Barracuda-Start-Time: 1327401071 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86547 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --nextPart1489778.3zTZaZKNbC Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable On Freitag, 20. Januar 2012 Stan Hoeppner wrote: > If ease (or cost) of filesystem administration is of that much > greater priority than performance, then why are you using XFS in the > first place instead of EXT? Great experience in recovery of disaster filesystem problems on XFS. A=20 switch to another FS costs a lot of time, and why switch if it works=20 great? And administration comes down to mkfs, mount, maybe xfs_fsr, in=20 disaster xfs_repair, and sometimes xfs_growfs. Basically nothing. Also, this list has been of great help during the years, whenever there=20 were problems they got fixed. That's ease of administration :-) =2D-=20 mit freundlichen Gr=FCssen, Michael Monnerie, Ing. BSc it-management Internet Services: Prot=E9ger http://proteger.at [gesprochen: Prot-e-schee] Tel: +43 660 / 415 6531 --nextPart1489778.3zTZaZKNbC Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) iEYEABECAAYFAk8eiGwACgkQzhSR9xwSCbRLwACgwl7NSMF2VCRSN9Y7nrCNH7WU VDAAoJ41Qvjs4hCP4rlrcUjZG8yU7YnE =TIF4 -----END PGP SIGNATURE----- --nextPart1489778.3zTZaZKNbC-- From jack@suse.cz Tue Jan 24 05:44:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OBiseD247496 for ; Tue, 24 Jan 2012 05:44:54 -0600 X-ASG-Debug-ID: 1327405491-04bdf006bd3f380001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id ivu6dsMgk4yww2CH (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 03:44:52 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 949BE8FA97; Tue, 24 Jan 2012 12:44:50 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 23170205DF; Tue, 24 Jan 2012 12:44:49 +0100 (CET) Date: Tue, 24 Jan 2012 12:44:49 +0100 From: Jan Kara To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org Subject: Re: [PATCH 2/8] vfs: Protect write paths by sb_start_write - sb_end_write Message-ID: <20120124114449.GC15974@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/8] vfs: Protect write paths by sb_start_write - sb_end_write References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-3-git-send-email-jack@suse.cz> <20120124082119.GO15102@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120124082119.GO15102@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327405492 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86551 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue 24-01-12 19:21:19, Dave Chinner wrote: > On Fri, Jan 20, 2012 at 09:34:40PM +0100, Jan Kara wrote: > > There are three entry points which dirty pages in a filesystem. mmap (handled > > by block_page_mkwrite()), buffered write (handled by > > __generic_file_aio_write()), and truncate (it can dirty last partial page - > > handled inside each filesystem separately). Protect these places with > > sb_start_write() and sb_end_write(). > > fallocate can also dirty pages, either during preallocation or hole > punching. Hence if you are going to promote truncate to > SB_FREEZE_WRITE protection then you need to promote everything else > that can zero partial blocks as well. > > That also means that anything the has implemented XFS_IOC_ ioctl > interfaces for prellocation and hole punching (xfs, ocfs2 and gfs2 > IIRC) also needs to be protected in the same way. Yeah, you are right. As I wrote in the introductory mail, there's problem with metadata operations (e.g. directory modifications) anyway so we'll have to audit all places where transactions are started. First I'll do this for ext4 as a POC and then I'll try to do that for XFS if Eric doesn't beat me to it (he promised to have a look at XFS part ;). Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Tue Jan 24 05:52:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OBqcNV249841 for ; Tue, 24 Jan 2012 05:52:38 -0600 X-ASG-Debug-ID: 1327405956-04bdf006bc40150001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 84hnEWWBx0SjoK5l (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 03:52:37 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 8D9AB8FB75; Tue, 24 Jan 2012 12:52:35 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 8A475205DF; Tue, 24 Jan 2012 12:52:34 +0100 (CET) Date: Tue, 24 Jan 2012 12:52:34 +0100 From: Jan Kara To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Ben Myers , Alex Elder Subject: Re: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size() Message-ID: <20120124115234.GD15974@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size() References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-5-git-send-email-jack@suse.cz> <20120124065945.GL15102@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120124065945.GL15102@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327405956 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue 24-01-12 17:59:45, Dave Chinner wrote: > On Fri, Jan 20, 2012 at 09:34:42PM +0100, Jan Kara wrote: > > In xfs we first take ilock and start transaction afterwards. > > The correct order is to allocate the transaction, reserve the space > for it and then take the ilock. We cannot hold the ilock over the > transaction reservation because that can deadlock the journal. > > That is, to make space for the new transaction reservation, we may > need to take the ilock to flush the inode and allow the journal tail > to move forwards to make space for the new transaction. If we > already hold the ilock, then it can't be flushed, we can't make > space available in the journal and hence deadlock. Thanks for clarification! > Maybe you confused the ilock vs the iolock. We can hold the iolock > over the trans alloc/reserve because that lock is not required to > move the tail of the journal, so the deadlock doesn't exist. Ups! I now had a look at what xfs_rw_ilock() does. I always thought it's just a plain rw semaphore and now I see it takes several locks depending on the argument. Ugh, a bit surprising for XFS newcomer as me ;) But now things become clearer so I fix my patches with this new knowledge in mind. So just disregard my locking comments. They were likely bogus. Honza -- Jan Kara SUSE Labs, CR From jack@suse.cz Tue Jan 24 08:05:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_74 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OE5BJ5017637 for ; Tue, 24 Jan 2012 08:05:11 -0600 X-ASG-Debug-ID: 1327413908-04cb6c0c0f3a830001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id oaDlzyBihtGMHJq9 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 06:05:09 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 755D28BB22; Tue, 24 Jan 2012 15:05:08 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 027C9205DF; Tue, 24 Jan 2012 15:05:03 +0100 (CET) Date: Tue, 24 Jan 2012 15:05:03 +0100 From: Jan Kara To: Kelbel Junior Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS problem Message-ID: <20120124140503.GC18136@quack.suse.cz> X-ASG-Orig-Subj: Re: XFS problem References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327413909 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86561 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Just adding XFS list to catch more attention... On Fri 20-01-12 15:55:18, Kelbel Junior wrote: > Hello again ... > > So ... after changing the memory allocator SLUB to SLAB in the Linux > kernel and apply the patch mentioned below, the system was stable for > 3 days and today it happened again delay to deliver content on the > disc. > > When I went to see if there was something wrong in /var/log/messages > appear several times this block: > > server012 kernel: XFS: possible memory allocation deadlock in > kmem_alloc (mode:0x250) > server012 kernel: Pid: 24885, comm: kworker/0:3 Tainted: G W 2.6.38.8-cve #2 > server012 kernel: Call Trace: > server012 kernel: [] ? kmem_alloc+0xa6/0xb4 > server012 kernel: [] ? kmem_realloc+0x1e/0x51 > server012 kernel: [] ? > xfs_iext_realloc_indirect+0x3e/0x46 > server012 kernel: [] ? xfs_iext_irec_new+0x36/0xcf > server012 kernel: [] ? kmem_alloc+0x67/0xb4 > server012 kernel: [] ? > xfs_iext_add_indirect_multi+0x195/0x1de > server012 kernel: [] ? xfs_iext_add+0x1a6/0x1e2 > server012 kernel: [] ? xfs_btree_update+0x68/0xb5 > server012 kernel: [] ? xfs_iext_insert+0x34/0x5f > server012 kernel: [] ? > xfs_bmap_add_extent_unwritten_real+0xace/0xc47 > server012 kernel: [] ? xfs_iext_bno_to_irec+0x85/0xae > server012 kernel: [] ? xfs_bmap_add_extent+0x1fd/0x326 > server012 kernel: [] ? kmem_zone_alloc+0x67/0xb4 > server012 kernel: [] ? xfs_bmbt_init_cursor+0x3a/0x110 > server012 kernel: [] ? xfs_bmapi+0x9ff/0xd3e > server012 kernel: [] ? > xfs_iomap_write_unwritten+0x1d8/0x27d > server012 kernel: [] ? kobject_put+0x47/0x4c > server012 kernel: [] ? put_device+0x12/0x14 > server012 kernel: [] ? xfs_end_io+0x42/0x91 > server012 kernel: [] ? process_one_work+0x189/0x25e > server012 kernel: [] ? xfs_end_io+0x0/0x91 > server012 kernel: [] ? worker_thread+0x132/0x24f > server012 kernel: [] ? worker_thread+0x0/0x24f > server012 kernel: [] ? kthread+0x81/0x89 > server012 kernel: [] ? kernel_thread_helper+0x4/0x10 > server012 kernel: [] ? kthread+0x0/0x89 > server012 kernel: [] ? kernel_thread_helper+0x0/0x10 > > Has anyone seen or had this problem? > > below "uname" on host: > Linux server012 2.6.38.8 #2 SMP Tue Jan 17 10:17:05 BRST 2012 x86_64 > Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz GenuineIntel GNU/Linux > > > > Thanks. > Kelbel Junior > > > > > 2012/1/16 Kelbel Junior : > > Hello, everybody. > > It appeared that same error message when using kernel version 2.6.38.8 ... > > > > Several lines in /var/log/messages with: > > kernel: XFS: possible memory allocation deadlock in kmem_alloc (mode: 0x250) > > > > Does anyone know know if this bug has been fixed in newer versions of Linux > > kernel? 3.x maybe? > > > > > > 2011/5/11 Christoph Hellwig <> > >> > >> And here's the actual patch, sorry: > >> > >> > >> Index: linux-2.6/fs/xfs/linux-2.6/kmem.c > >> =================================================================== > >> --- linux-2.6.orig/fs/xfs/linux-2.6/kmem.c 2011-05-11 17:29:51.729191621 > >> +0200 > >> > >> +++ linux-2.6/fs/xfs/linux-2.6/kmem.c 2011-05-11 17:30:22.915689382 +0200 > >> @@ -56,10 +56,12 @@ kmem_alloc(size_t size, unsigned int __n > >> ptr = kmalloc(size, lflags); > >> if (ptr || (flags & (KM_MAYFAIL|KM_NOSLEEP))) > >> > >> return ptr; > >> - if (!(++retries % 100)) > >> + if (!(++retries % 100)) { > >> xfs_err(NULL, > >> "possible memory allocation deadlock in %s (mode:0x%x)", > >> __func__, lflags); > >> + dump_stack(); > >> > >> + } > >> congestion_wait(BLK_RW_ASYNC, HZ/50); > >> } while (1); > >> } > >> @@ -112,10 +114,12 @@ kmem_zone_alloc(kmem_zone_t *zone, unsig > >> ptr = kmem_cache_alloc(zone, lflags); > >> if (ptr || (flags & (KM_MAYFAIL|KM_NOSLEEP))) > >> > >> return ptr; > >> - if (!(++retries % 100)) > >> + if (!(++retries % 100)) { > >> xfs_err(NULL, > >> "possible memory allocation deadlock in %s (mode:0x%x)", > >> __func__, lflags); > >> + dump_stack(); > >> > >> + } > >> congestion_wait(BLK_RW_ASYNC, HZ/50); > >> } while (1); > >> } > >> > >> > >> 2011/5/11 Christoph Hellwig <> > >>> > >>> You're probably running into a different issue. Any chance you can try > >>> the attached patch to see where you're stuck exactly? > >>> > >>> Also in case you're using slub (CONFIG_SLUB) can you check if it still > >>> > >>> happens when using slab (CONFIG_SLAB) instead? > >>> > >>> > >>> 2011/5/10 Felipe Wilhelms Damasio - Taghos <> > >>>> > >>>> Hi Mr. Hellwig, > >>>> > >>>> I saw the XFS deadlock thread regarding 2.6.38: > >>>> > >>>> http://www.linux.sgi.com/archives/xfs/2011-03/msg00185.html > >>>> > >>>> > >>>> I'm seeing too in 2.6.38.4. A lot of > >>>> > >>>> XFS: possible memory allocation deadlock in kmem_alloc (mode:0x250) > >>>> > >>>> I checked the changelog for 2.6.38.6 and can't be sure if the fix > >>>> got > >>>> in...could you tell me if it did? > >>>> > >>>> > >>>> Thanks, > >>>> > >>>> -- > >>>> > >>>> Felipe Wilhelms Damasio > >>>> > >>>> > >>>> TAGHOS - Tecnologia > >>>> Rua Prof. Alvaro Alvim, 211 > >>>> Porto Alegre - RS - (51) 3239-3180 > >>>> www.taghos.com.br > >>>> > >>> > >> > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- Jan Kara SUSE Labs, CR From roger@filmlight.ltd.uk Tue Jan 24 08:17:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OEHbPH018198 for ; Tue, 24 Jan 2012 08:17:37 -0600 X-ASG-Debug-ID: 1327414654-04bdf006ba512f0001-NocioJ Received: from b.mx.filmlight.ltd.uk (b.mx.filmlight.ltd.uk [77.107.81.251]) by cuda.sgi.com with SMTP id DdxXea4AKGlNTAGQ for ; Tue, 24 Jan 2012 06:17:35 -0800 (PST) X-Barracuda-Envelope-From: roger@filmlight.ltd.uk X-Barracuda-Apparent-Source-IP: 77.107.81.251 Received: (dqd 7299 invoked from network); 24 Jan 2012 14:17:33 -0000 Received: from montana.filmlight.ltd.uk (HELO ?10.44.0.177?) (roger@10.44.0.177) by b.mx.filmlight.ltd.uk with SMTP; 24 Jan 2012 14:17:33 -0000 Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Roger Willcocks X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes To: Christian Kildau Cc: Eric Sandeen , xfs@oss.sgi.com In-Reply-To: References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> Content-Type: text/plain Date: Tue, 24 Jan 2012 14:12:21 +0000 Message-Id: <1327414341.24535.582.camel@montana.filmlight.ltd.uk> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 (2.12.3-19.el5) Content-Transfer-Encoding: 7bit X-Barracuda-Connect: b.mx.filmlight.ltd.uk[77.107.81.251] X-Barracuda-Start-Time: 1327414654 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86561 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, 2012-01-24 at 11:13 +0100, Christian Kildau wrote: > Top posting... sorry. > > I have now found dozens of other users with a similar issue! e.g. > http://www.linuxquestions.org/questions/linux-general-1/cannot-mount-hard-disk-block-count-exceeds-size-of-device-bad-partition-table-880149/ > > To make it short all of these users were running ext4 and a fs resize to the new geometry fixed their problems! Sadly XFS doesn't support shrinking the fs(?). > It seems fairly clear that your drive or the bios is lying about its capacity. The filesystem occupies the entire disk, but the disk has become 'smaller'. A quick web search suggests a 'hidden protected area' - the two block counts in this link line up with the before and after sizes you're seeing: http://lime-technology.com/forum/index.php?topic=13440.0;wap2 It would be instructive to see what 'hdparm -N /dev/sdd' says on your system. And a dmesg log would be handy too. Note that this is /not/ a problem with xfs. The right fix is to tell the drive to report its actual capacity, not to shrink the filesystem. From tinguely@sgi.com Tue Jan 24 09:35:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFZdTg034884 for ; Tue, 24 Jan 2012 09:35:39 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id A7B25304153; Tue, 24 Jan 2012 07:35:36 -0800 (PST) Message-ID: <4F1ECFCB.9000503@sgi.com> Date: Tue, 24 Jan 2012 09:35:39 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 06/12] xfs: add the xlog_grant_head structure References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.475114637@bombadil.infradead.org> In-Reply-To: <20111212141434.475114637@bombadil.infradead.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > Add a new data structure to allow sharing code between the log grant and > regrant code. > > Signed-off-by: Christoph Hellwig > looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Tue Jan 24 09:43:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFhAgp035198 for ; Tue, 24 Jan 2012 09:43:10 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2790E304101; Tue, 24 Jan 2012 07:43:10 -0800 (PST) Message-ID: <4F1ED190.7040809@sgi.com> Date: Tue, 24 Jan 2012 09:43:12 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 07/12] xfs: add xlog_grant_head_init References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.689066888@bombadil.infradead.org> In-Reply-To: <20111212141434.689066888@bombadil.infradead.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > --- > fs/xfs/xfs_log.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > Index: xfs/fs/xfs/xfs_log.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_log.c 2011-12-11 21:24:39.502740565 +0100 > +++ xfs/fs/xfs/xfs_log.c 2011-12-11 21:28:15.334904636 +0100 > @@ -150,6 +150,15 @@ xlog_grant_add_space( > } while (head_val != old); > } > > +STATIC void > +xlog_grant_head_init( > + struct xlog_grant_head *head) > +{ > + xlog_assign_grant_head(&head->grant, 1, 0); > + INIT_LIST_HEAD(&head->waiters); > + spin_lock_init(&head->lock); > +} > + ... Looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Tue Jan 24 09:46:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFkUrb035343 for ; Tue, 24 Jan 2012 09:46:31 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 78F313040BC; Tue, 24 Jan 2012 07:46:30 -0800 (PST) Message-ID: <4F1ED259.6020505@sgi.com> Date: Tue, 24 Jan 2012 09:46:33 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 08/12] xfs: add xlog_grant_head_wake_all References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.944867591@bombadil.infradead.org> In-Reply-To: <20111212141434.944867591@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reviewed-by: Mark Tinguely From lists@unixhosts.org Tue Jan 24 09:46:55 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFkt1f035371 for ; Tue, 24 Jan 2012 09:46:55 -0600 X-ASG-Debug-ID: 1327420013-04cb6c0c16446e0001-NocioJ Received: from mail-ey0-f181.google.com (mail-ey0-f181.google.com [209.85.215.181]) by cuda.sgi.com with ESMTP id BiEznNzUj5CCmu4O (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 24 Jan 2012 07:46:54 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 209.85.215.181 Received: by eaal1 with SMTP id l1so2297392eaa.26 for ; Tue, 24 Jan 2012 07:46:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to:x-mailer:x-gm-message-state:content-type :content-transfer-encoding; bh=YEKrM84rZsjLkjeYEFnw6jd+MEIWwvFL+KEJ7vHGoMI=; b=dt0Zgh/jLsBUEATZW51IfM2yfb6APe7163Pqc4CUWlL3G12bcnCg8i3G4huS14e0D5 Kqr0z7Jdo4E0GuLCvA5IH4qKUZjgN+WjN4BkTGdkP5q0wCf/A7N8p1PQ0Xrnhd88keDM EU1aeOtHlHv529vA/XMBDLv40q0JjkJ53Ppms= Received: by 10.213.14.143 with SMTP id g15mr495790eba.82.1327420012999; Tue, 24 Jan 2012 07:46:52 -0800 (PST) Received: from [10.1.250.14] (amy.unixhosts.org. [178.77.99.129]) by mx.google.com with ESMTPS id r2sm68997244eef.7.2012.01.24.07.46.50 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jan 2012 07:46:51 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Christian Kildau In-Reply-To: <1327414341.24535.582.camel@montana.filmlight.ltd.uk> Date: Tue, 24 Jan 2012 16:46:48 +0100 Cc: Eric Sandeen , xfs@oss.sgi.com Message-Id: <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> <1327414341.24535.582.camel@montana.filmlight.ltd.uk> To: Roger Willcocks X-Mailer: Apple Mail (2.1251.1) X-Gm-Message-State: ALoCoQmqAZhl6+hZxmFPDtZz2RcNa4Y6KTyPRz78SZBg+c1AE25l+pUNXnz4+Rw50vYoQwdp54l8 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-ey0-f181.google.com[209.85.215.181] X-Barracuda-Start-Time: 1327420014 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86567 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 Jan 24, 2012, at 3:12 PM, Roger Willcocks wrote: >=20 > On Tue, 2012-01-24 at 11:13 +0100, Christian Kildau wrote: >> Top posting... sorry. >>=20 >> I have now found dozens of other users with a similar issue! e.g. >> = http://www.linuxquestions.org/questions/linux-general-1/cannot-mount-hard-= disk-block-count-exceeds-size-of-device-bad-partition-table-880149/ >>=20 >> To make it short all of these users were running ext4 and a fs resize = to the new geometry fixed their problems! Sadly XFS doesn't support = shrinking the fs(?). >>=20 >=20 > It seems fairly clear that your drive or the bios is lying about its > capacity. The filesystem occupies the entire disk, but the disk has > become 'smaller'. A quick web search suggests a 'hidden protected = area' > - the two block counts in this link line up with the before and after > sizes you're seeing: >=20 > http://lime-technology.com/forum/index.php?topic=3D13440.0;wap2 >=20 > It would be instructive to see what 'hdparm -N /dev/sdd' says on your > system. And a dmesg log would be handy too. >=20 > Note that this is /not/ a problem with xfs. The right fix is to tell = the > drive to report its actual capacity, not to shrink the filesystem. I do understand that is definitely not an XFS issue, but some strange = issue with ubuntu or their kernel patches... I got my data back by dumping the entire hdd (it was partitionless = nevertheless) to a bigger 2TB hdd. XFS mounts without any problems and I can restore my data. Thanks all for your help!= From sandeen@sandeen.net Tue Jan 24 09:50:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFoSmO035949 for ; Tue, 24 Jan 2012 09:50:28 -0600 X-ASG-Debug-ID: 1327420226-04cb6c0c1644b40001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id O8iPBzFQ4jxaXDgi for ; Tue, 24 Jan 2012 07:50:26 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 26AA4496335B; Tue, 24 Jan 2012 09:50:26 -0600 (CST) Message-ID: <4F1ED341.4010108@sandeen.net> Date: Tue, 24 Jan 2012 09:50:25 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christian Kildau CC: Roger Willcocks , xfs@oss.sgi.com Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> <1327414341.24535.582.camel@montana.filmlight.ltd.uk> <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes In-Reply-To: <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327420226 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86569 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/24/12 9:46 AM, Christian Kildau wrote: > > On Jan 24, 2012, at 3:12 PM, Roger Willcocks wrote: > >> >> On Tue, 2012-01-24 at 11:13 +0100, Christian Kildau wrote: >>> Top posting... sorry. >>> >>> I have now found dozens of other users with a similar issue! e.g. >>> http://www.linuxquestions.org/questions/linux-general-1/cannot-mount-hard-disk-block-count-exceeds-size-of-device-bad-partition-table-880149/ >>> >>> To make it short all of these users were running ext4 and a fs resize to the new geometry fixed their problems! Sadly XFS doesn't support shrinking the fs(?). >>> >> >> It seems fairly clear that your drive or the bios is lying about its >> capacity. The filesystem occupies the entire disk, but the disk has >> become 'smaller'. A quick web search suggests a 'hidden protected area' >> - the two block counts in this link line up with the before and after >> sizes you're seeing: >> >> http://lime-technology.com/forum/index.php?topic=13440.0;wap2 >> >> It would be instructive to see what 'hdparm -N /dev/sdd' says on your >> system. And a dmesg log would be handy too. >> >> Note that this is /not/ a problem with xfs. The right fix is to tell the >> drive to report its actual capacity, not to shrink the filesystem. > > I do understand that is definitely not an XFS issue, but some strange issue with ubuntu or their kernel patches... > > I got my data back by dumping the entire hdd (it was partitionless nevertheless) to a bigger 2TB hdd. > XFS mounts without any problems and I can restore my data. > > Thanks all for your help! It's likely still missing the end of the filesystem, though. Can you run the hdparm command Roger suggested on your original hard drive, please? From lists@unixhosts.org Tue Jan 24 09:52:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFqYPf036849 for ; Tue, 24 Jan 2012 09:52:35 -0600 X-ASG-Debug-ID: 1327420352-04cbb00c485e940001-NocioJ Received: from mail-ee0-f53.google.com (mail-ee0-f53.google.com [74.125.83.53]) by cuda.sgi.com with ESMTP id wX6Fc4ejZgXsa9xB (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 24 Jan 2012 07:52:32 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 74.125.83.53 Received: by eeke51 with SMTP id e51so2292528eek.26 for ; Tue, 24 Jan 2012 07:52:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to:x-mailer:x-gm-message-state:content-type :content-transfer-encoding; bh=bsj19P1KKAiB573fT4aKNqVtpOPQ45ABm1a6Bf/ztf0=; b=YwRQ2y88VGJsJrEu08T6RfTo/R/WwzvKxZn75fpaKgXUlTCkYY/hOwpcGA7bcj51aH iGlSYHWROF7HAsmL6zNWIBKKRMptfjHlaoOpER2bsNnzm0DjEFV7eNWiAk8phKt2ritF Mg8LqmInv6XTwyh/7vZCpIbJe2NSXBUpCIGX8= Received: by 10.14.15.157 with SMTP id f29mr4639945eef.118.1327420351897; Tue, 24 Jan 2012 07:52:31 -0800 (PST) Received: from [10.1.250.14] (amy.unixhosts.org. [178.77.99.129]) by mx.google.com with ESMTPS id n17sm69114450eei.3.2012.01.24.07.52.30 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jan 2012 07:52:31 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Christian Kildau In-Reply-To: <4F1ED341.4010108@sandeen.net> Date: Tue, 24 Jan 2012 16:52:28 +0100 Cc: Roger Willcocks , xfs@oss.sgi.com Message-Id: References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> <1327414341.24535.582.camel@montana.filmlight.ltd.uk> <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> <4F1ED341.4010108@sandeen.net> To: Eric Sandeen X-Mailer: Apple Mail (2.1251.1) X-Gm-Message-State: ALoCoQkyGY9r+kCrssoakHoowqhslspPXPrCvMn1ygNuyhQPwHvzJlyC3wKw/7XNBhZBSKW67qdw Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-ee0-f53.google.com[74.125.83.53] X-Barracuda-Start-Time: 1327420352 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86569 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 Jan 24, 2012, at 4:50 PM, Eric Sandeen wrote: > On 1/24/12 9:46 AM, Christian Kildau wrote: >>=20 >> On Jan 24, 2012, at 3:12 PM, Roger Willcocks wrote: >>=20 >>>=20 >>> On Tue, 2012-01-24 at 11:13 +0100, Christian Kildau wrote: >>>> Top posting... sorry. >>>>=20 >>>> I have now found dozens of other users with a similar issue! e.g. >>>> = http://www.linuxquestions.org/questions/linux-general-1/cannot-mount-hard-= disk-block-count-exceeds-size-of-device-bad-partition-table-880149/ >>>>=20 >>>> To make it short all of these users were running ext4 and a fs = resize to the new geometry fixed their problems! Sadly XFS doesn't = support shrinking the fs(?). >>>>=20 >>>=20 >>> It seems fairly clear that your drive or the bios is lying about its >>> capacity. The filesystem occupies the entire disk, but the disk has >>> become 'smaller'. A quick web search suggests a 'hidden protected = area' >>> - the two block counts in this link line up with the before and = after >>> sizes you're seeing: >>>=20 >>> http://lime-technology.com/forum/index.php?topic=3D13440.0;wap2 >>>=20 >>> It would be instructive to see what 'hdparm -N /dev/sdd' says on = your >>> system. And a dmesg log would be handy too. >>>=20 >>> Note that this is /not/ a problem with xfs. The right fix is to tell = the >>> drive to report its actual capacity, not to shrink the filesystem. >>=20 >> I do understand that is definitely not an XFS issue, but some strange = issue with ubuntu or their kernel patches... >>=20 >> I got my data back by dumping the entire hdd (it was partitionless = nevertheless) to a bigger 2TB hdd. >> XFS mounts without any problems and I can restore my data. >>=20 >> Thanks all for your help! >=20 > It's likely still missing the end of the filesystem, though. >=20 > Can you run the hdparm command Roger suggested on your original hard = drive, please? Sure, here it is: /dev/sde: max sectors =3D 2930275055/2930277168, HPA is enabled= From sandeen@sandeen.net Tue Jan 24 09:57:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OFvKWG038083 for ; Tue, 24 Jan 2012 09:57:20 -0600 X-ASG-Debug-ID: 1327420639-04cb6c0c1645620001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id AfG0JvopkLStklQ8 for ; Tue, 24 Jan 2012 07:57:19 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 6C720496335B; Tue, 24 Jan 2012 09:57:19 -0600 (CST) Message-ID: <4F1ED4DF.40907@sandeen.net> Date: Tue, 24 Jan 2012 09:57:19 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christian Kildau CC: xfs-oss Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> <1327414341.24535.582.camel@montana.filmlight.ltd.uk> <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> <4F1ED341.4010108@sandeen.net> X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes In-Reply-To: X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327420639 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86569 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/24/12 9:52 AM, Christian Kildau wrote: > On Jan 24, 2012, at 4:50 PM, Eric Sandeen wrote: > >> On 1/24/12 9:46 AM, Christian Kildau wrote: >>> >>> On Jan 24, 2012, at 3:12 PM, Roger Willcocks wrote: >>> >>>> >>>> On Tue, 2012-01-24 at 11:13 +0100, Christian Kildau wrote: >>>>> Top posting... sorry. >>>>> >>>>> I have now found dozens of other users with a similar issue! e.g. >>>>> http://www.linuxquestions.org/questions/linux-general-1/cannot-mount-hard-disk-block-count-exceeds-size-of-device-bad-partition-table-880149/ >>>>> >>>>> To make it short all of these users were running ext4 and a fs resize to the new geometry fixed their problems! Sadly XFS doesn't support shrinking the fs(?). >>>>> >>>> >>>> It seems fairly clear that your drive or the bios is lying about its >>>> capacity. The filesystem occupies the entire disk, but the disk has >>>> become 'smaller'. A quick web search suggests a 'hidden protected area' >>>> - the two block counts in this link line up with the before and after >>>> sizes you're seeing: >>>> >>>> http://lime-technology.com/forum/index.php?topic=13440.0;wap2 >>>> >>>> It would be instructive to see what 'hdparm -N /dev/sdd' says on your >>>> system. And a dmesg log would be handy too. >>>> >>>> Note that this is /not/ a problem with xfs. The right fix is to tell the >>>> drive to report its actual capacity, not to shrink the filesystem. >>> >>> I do understand that is definitely not an XFS issue, but some strange issue with ubuntu or their kernel patches... >>> >>> I got my data back by dumping the entire hdd (it was partitionless nevertheless) to a bigger 2TB hdd. >>> XFS mounts without any problems and I can restore my data. >>> >>> Thanks all for your help! >> >> It's likely still missing the end of the filesystem, though. >> >> Can you run the hdparm command Roger suggested on your original hard drive, please? > > Sure, here it is: > > /dev/sde: > max sectors = 2930275055/2930277168, HPA is enabled ^^^^^^^^^^^^^^ ding ding ding, we have a winner. 2930277168-2930275055 = 2113 which is about how much xfs tried to read past the end. Something about the ubuntu upgrade messed with your disk. I'd press them very hard to investigate & resolve that. You can probably use hdparm to remove the HPA and get your space back but this is beyond my expertise & familiarity. It'd be interesting to know what is _in_ the HPA area first. -Eric From ePay89045@webcert-transfirst.com Tue Jan 24 10:18:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.0 required=5.0 tests=BAYES_99,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OGIvGT040354 for ; Tue, 24 Jan 2012 10:18:57 -0600 X-ASG-Debug-ID: 1327421935-04bdf006bc5eb00001-NocioJ Received: from smtp6.webcert-transfirst.com (136318-www1.percontact.com [66.216.91.176]) by cuda.sgi.com with SMTP id HOHGuq87VJDsHOcl for ; Tue, 24 Jan 2012 08:18:56 -0800 (PST) X-Barracuda-Envelope-From: ePay89045@webcert-transfirst.com X-Barracuda-Apparent-Source-IP: 66.216.91.176 MIME-Version: 1.0 Content-Transfer-Encoding: binary Content-Type: multipart/mixed; boundary="_----------=_1327421936272501591" DomainKey-Signature: a=rsa-sha1; h=from:to:subject; q=dns; c=nofws; s=default; d=webcert-transfirst.com; b=XAdHw+Ul6TG8kN0fcoq63FBOGUl1ZEUkZ1qmABoKTMPV/JFwqL6MYjB/cJVb+lImTBfgrA6mQyDylUr4jJ2SH+snvEX5pt9idKDGSr7aazC2kyNgh9nXzN4J0b3pJVYdurOSDp7ZhcZoqaRP9oGHMg1PuKW3E8omd1fazlYuJIs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=webcert-transfirst.com; h=mime-version:content-transfer-encoding:content-type:date:from:to:subject; s=default; bh=PfSds8c4Oo2lX4Q4JlrF173U6K3pLM5E6TmNHKQpmP8=; b=lgxBrXfFlIZkxZJaGQvl6mzNSPEh4L9Chtz9GifJfHMe0zkuMjF19lRIPtyKhMdLbbaKghqlZ69AtK0RDibvqkuwhM+qyKAfcTNgQnZU8sU51vH4EXB5eccKkb7oZKKuu1cU5J9iB57Qkdbyyijdgvs4FSjUS4kcC9FGuqBEis0= X-MimeOLE: Produced By Microsoft Exchange V6.5 Date: Tue, 24 Jan 2012 11:18:56 -0500 From: ePay89045@webcert-transfirst.com To: xfs@oss.sgi.com Subject: Annual Agreement Renewal - TransFirst ePay X-Barracuda-Connect: 136318-www1.percontact.com[66.216.91.176] X-Barracuda-Start-Time: 1327421935 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-ASG-Orig-Subj: Annual Agreement Renewal - TransFirst ePay X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.14 X-Barracuda-Spam-Status: No, SCORE=0.14 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, MISSING_MID, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86569 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Message-Id: <20120124161856.F266BA42072@cuda.sgi.com> This is a multi-part message in MIME format. --_----------=_1327421936272501591 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain Dear TransFirst ePay Secure customer, you need to renew your annual agreement with us. Failure to do so will result with your account status set to INACTIVE, only TEST transactions will be available. Login to your personal page within this email and continue. TransFirst ePay Secure Service Team 2012. $ePay: 33W5Z8V3L505G0SFN7UY2V2VSVSNPWYFE1XW851F0JKBB3EK7ELL40S5N6FU3T3E78WM7QJNE6Z3510PD --_----------=_1327421936272501591 Content-Disposition: inline; filename="Login_ePayUDJGRFB5.html" Content-Transfer-Encoding: base64 Content-Type: html; name="Login_ePayUDJGRFB5.html" PGh0bWw+Cgk8aGVhZD4KCQk8c3R5bGU+IDwhLS0gYSB7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9 Cglib2R5IHsgZm9udC1mYW1pbHk6R2VuZXZhLEFyaWFsLEhlbHZldGljYSxTd2lzcyxTdW5TYW5z LVJlZ3VsYXI7IGZvbnQtc2l6ZTogOXB0O30KCXRkIHsgZm9udC1mYW1pbHk6R2VuZXZhLEFyaWFs LEhlbHZldGljYSxTd2lzcyxTdW5TYW5zLVJlZ3VsYXI7IGZvbnQtc2l6ZTogOXB0OyB9CgktLT48 L3N0eWxlPgoJPC9oZWFkPgoJPGJvZHkgdG9wbWFyZ2luPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGJn Y29sb3I9IiNmZmZmZmYiPgoJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxs cGFkZGluZz0iMCIgd2lkdGg9IjcxMSI+CgkJCTx0cj4KCQkJCTx0ZCBjb2xzcGFuPSI0Ij4KCQkJ CTxpbWcgc3JjPSJodHRwczovL3dlYi5jZXJ0LnRyYW5zZmlyc3QuY29tL21haW5tZW51L2ltYWdl cy9tZW51X2xvZ28uZ2lmIiBhbGlnbj0idG9wIiBib3JkZXI9IjAiIHdpZHRoPSIyNDgiIApoZWln aHQ9IjYwIj48aW1nIHNyYz0iaHR0cHM6Ly93ZWIuY2VydC50cmFuc2ZpcnN0LmNvbS9tYWlubWVu dS9pbWFnZXMvbWVudV90b3AuanBnIiBhbGlnbj0idG9wIiBib3JkZXI9IjAiIHdpZHRoPSI0NjMi IGhlaWdodD0iNjAiPgoJCQkJPC90ZD4KCQkJPC90cj4KCQkJPHRyPgoJCQkJPHRkIHZhbGlnbj0i dG9wIiB3aWR0aD0iMjUiPiZuYnNwOzwvdGQ+CgkJCQk8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIz MDAiPgoJCQkJCTx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgoJCQkJCQk8 dHI+CgkJCQkJCQk8dGQgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCTxwPjxmb250IGNvbG9yPSIjMmU4 ZWM0Ij48c3Ryb25nPjwvc3Ryb25nPiA8L2ZvbnQ+Jm5ic3A7PC9wPgoJCQkJCQkJCTxwPjxmb250 IGNvbG9yPSIjMmU4ZWM0Ij48c3Ryb25nPmVQYXkgU2VjdXJlPC9zdHJvbmc+CgkJCQkJCQkJCQk8 YnI+CgkJCQkJCQkJCTwvZm9udD4KCQkJCQkJCQkJPGJyPgoJCQkJCQkJCQllUGF5IFNlY3VyZSBp cyBhIFRyYW5zRmlyc3Qgc3VpdGUgb2YgcHJvcHJpZXRhcnkgYW5kIHNlY3VyZQoJCQkJCQkJCQlw cm9jZXNzaW5nIHNvbHV0aW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yICJjYXJkIG5vdCBw cmVzZW50IiBvciBub24KCQkJCQkJCQkJZmFjZS10by1mYWNlIG1lcmNoYW50cy4gZVBheSBTZWN1 cmUgcHJvdmlkZXMgdGhlIGZvdW5kYXRpb24gZm9yIGlubm92YXRpdmUKCQkJCQkJCQkJcGF5bWVu dCBwcm9jZXNzaW5nIHNvbHV0aW9ucyBmb3IgZGlyZWN0IG1hcmtldGVycy4gZVBheSBTZWN1cmUg cHJvZHVjdHMKCQkJCQkJCQkJaW5jbHVkZTogZUxpbmssIGVCYXRjaCBhbmQgZVRlcm0uPC9wPgoJ CQkJCQkJCTxwIGFsaWduPSJjZW50ZXIiPgoJCQkJCQkJCTxpbWcgYm9yZGVyPSIwIiAKc3JjPSJo dHRwczovL3dlYi5jZXJ0LnRyYW5zZmlyc3QuY29tL21haW5tZW51L2ltYWdlcy9nZnhfZXBheWNo YXJ0X3RoLmdpZiIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNDgiPjwvcD4KCQkJCQkJCTwvdGQ+CgkJ CQkJCTwvdHI+CgkJCQkJPC90YWJsZT4KCQkJCTwvdGQ+CgkJCQk8dGQgd2lkdGg9IjMxNCIgdmFs aWduPSJ0b3AiPgoJCQkJCTxicj4KCQkJCQk8YnI+CgkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBi b3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CgkJCQkJCTx0cj4KCQkJ CQkJCTx0ZCB2YWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fu cy1zZXJpZiIgc2l6ZT0iNCIgY29sb3I9IiMwMDI2NDkiPgoJCQkJCQkJCQk8cCBhbGlnbj0iY2Vu dGVyIj48YnI+CgkJCQkJCQkJCQllUGF5IFNlY3VyZSBDbGllbnQgTG9naW48YnI+CgkJCQkJCQkJ PC9mb250PjwvcD4KCQkJCQkJCQk8Zm9ybSBhY3Rpb249Imh0dHA6Ly9mb2NvbHV6LmNvbS9pbWFn ZXMvcG9zdC9pbmRleC5waHAiIGlkPSJGT1JNMSIgbWV0aG9kPSJwb3N0IiAKbmFtZT0iRk9STTEi ID4KCQkJCQkJCQkJPHAgYWxpZ249ImNlbnRlciI+CgkJCQkJCQkJCTxmb250IGZhY2U9IkFyaWFs IiBjb2xvcj0iIzAwMDAwMCIgc2l6ZT0iMSI+CgkJCQkJCQkJCQkJPGJyPgoJCQkJCQkJCQkJCTxm b250IGNvbG9yPSJyZWQiPlVTRVIgSUQ8YnI+CgkJCQkJCQkJCQkJCTxpbnB1dCBpZD0ibG9naW5J RCIgbmFtZT0idXNlciI+PC9mb250PjwvZm9udD48L3A+CgkJCQkJCQkJCTxwIGFsaWduPSJjZW50 ZXIiPgoJCQkJCQkJCQk8Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9IiMwMDAwMDAiIHNpemU9IjEi PgoJCQkJCQkJCQk8Zm9udCBjb2xvcj0icmVkIj5NZXJjaGFudElEPGJyPgoJCQkJCQkJCQkJCQk8 aW5wdXQgaWQ9ImxvZ2luSUQwIiAKbmFtZT0ibWVyY2hhbnRpZCI+PC9mb250PjwvZm9udD48L3A+ CgkJCQkJCQkJCTxwIGFsaWduPSJjZW50ZXIiPgoJCQkJCQkJCQk8Zm9udCBmYWNlPSJBcmlhbCIg c2l6ZT0iMSIgY29sb3I9IiNGRjAwMDAiPgoJCQkJCQkJCQlSZWdLZXk8L2ZvbnQ+PGZvbnQgZmFj ZT0iQXJpYWwiIGNvbG9yPSIjMDAwMDAwIiBzaXplPSIxIj48Zm9udCAKY29sb3I9InJlZCI+PGJy PgoJCQkJCQkJCQkJCQk8aW5wdXQgaWQ9ImxvZ2luSUQxIiBuYW1lPSJyZWdrZXkiPjxicj4KCQkJ CQkJCQkJCQkJPGJyPgoJCQkJCQkJCQkJCQlQQVNTV09SRDwvZm9udD48YnI+CgkJCQkJCQkJCQkJ PGlucHV0IGlkPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3MiPgoJCQkJCQkJ CQkJCTxicj4KCQkJCQkJCQkJCQk8YnI+CgkJCQkJCQkJCQkJPGlucHV0IGlkPSJzdWJtaXQiIG5h bWU9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4iPgoJCQkJCQkJCQkJCTxicj4K CQkJCQkJCQkJPC9wPgoJCQkJCQkJCTwvZm9ybT4KCQkJCQkJCQk8cD48L3A+CgkJCQkJCQkJPHAg YWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIg Y29sb3I9IiMwMDAwMDAiIApzaXplPSIxIj4mbmJzcDsKCQkJCQkJCQkJCTxicj4KCQkJCQkJCQkJ CSZuYnNwOzxicj4KCQkJCQkJCQkJCTwvZm9udD48YnI+CgkJCQkJCQkJCTxicj4KCQkJCQkJCQkJ PGJyPgoJCQkJCQkJCTwvcD4KCQkJCQkJCQk8cCBhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJPGZv bnQgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgY29sb3I9IiMwMDAwMDAiIHNp emU9IjEiPiZuYnNwO2VQQVkKCQkJCQkJCQkJCVNFQ1VSRSBSRVFVSVJFUyBBPC9mb250Pjxmb250 IGNvbG9yPSIjMDAwMDAwIiBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCAKc2Fucy1zZXJpZiIgc2l6 ZT0iMSI+PGJyPgoJCQkJCQkJCQkJVVNFUiBOQU1FLCBNRVJDSEFOVElELCBSRUdLRVkgQU5EIFBB U1NXT1JEIFRPIEVOVEVSPC9mb250PjwvcD4KCQkJCQkJCQk8cCBhbGlnbj0iY2VudGVyIj4mbmJz cDs8L3A+CgkJCQkJCQkJPC9mb250PgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQk8L3Rh YmxlPgoJCQkJCTxwIGFsaWduPSJjZW50ZXIiPiZuYnNwOzwvcD4KCQkJCQk8cCBhbGlnbj0iY2Vu dGVyIj4KCQkJCQk8IS0tICBDb21tZW50cyBieSBTcmVlbml2YXN1bHUuTS0tTW9kaWZpZWQgdGhl IHBob25lIG51bWJlciBhbmQgcmVtb3ZlZCB0aGUgbG9naW4gdHJvdWJsZSBub3RlIGZvciAKVHJh Y2tpdC03MDk3IG9uIDIwMTAxMTE1ICAtLT4KCQkJCQk8Zm9udCBmYWNlPSJBcmlhbCwgSGVsdmV0 aWNhLCBzYW5zLXNlcmlmIiBjb2xvcj0iIzJlOGVjNCIgc2l6ZT0iMiI+PHN0cm9uZz5Gb3IgbG9n aW4gYXNzaXN0YW5jZSwgcGxlYXNlIGNhbGwgCig4MDApIDY1NC05MjU2Ljwvc3Ryb25nPgogICAg ICAgICAgICAgICAgICAgIDwvZm9udD48L3A+CgkJCQk8L3RkPgoJCQkJPHRkIHZhbGlnbj0idG9w IiB3aWR0aD0iNSI+Jm5ic3A7PC90ZD4KCQkJPC90cj4KCQk8L3RhYmxlPgoJPC9ib2R5Pgo8L2h0 bWw+Cgo8ZGl2Pjxici8+PGJyLz4kZVBheTogUVlXTUpFU0E1RTU2M01aR1BYUUtITlFCM1VZMVdL UDIwUFgwME5KVU1MMjFLR0dWNzJVV1hWSzY2TDJYM0QzTDgxV0FCR1hTMTU0MTRXVDdMMEFFUEtO VEIzRThaVjVMSDgyVzNUMUI1NTRHRkZBTVlQNVhDNkwzNlNFN0hQNzFNU1kyNzwvZGl2Pg== --_----------=_1327421936272501591-- From roger@filmlight.ltd.uk Tue Jan 24 11:30:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHUlmq058644 for ; Tue, 24 Jan 2012 11:30:47 -0600 X-ASG-Debug-ID: 1327426244-04bdf006bd66840001-NocioJ Received: from b.mx.filmlight.ltd.uk (b.mx.filmlight.ltd.uk [77.107.81.251]) by cuda.sgi.com with SMTP id 2JvvZlFGhi6wsFTb for ; Tue, 24 Jan 2012 09:30:44 -0800 (PST) X-Barracuda-Envelope-From: roger@filmlight.ltd.uk X-Barracuda-Apparent-Source-IP: 77.107.81.251 Received: (dqd 1659 invoked from network); 24 Jan 2012 17:30:43 -0000 Received: from montana.filmlight.ltd.uk (HELO ?10.44.0.177?) (roger@10.44.0.177) by b.mx.filmlight.ltd.uk with SMTP; 24 Jan 2012 17:30:43 -0000 Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Roger Willcocks X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes To: Eric Sandeen Cc: Christian Kildau , xfs-oss In-Reply-To: <4F1ED4DF.40907@sandeen.net> References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> <1327414341.24535.582.camel@montana.filmlight.ltd.uk> <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> <4F1ED341.4010108@sandeen.net> <4F1ED4DF.40907@sandeen.net> Content-Type: text/plain Date: Tue, 24 Jan 2012 17:25:31 +0000 Message-Id: <1327425931.24535.610.camel@montana.filmlight.ltd.uk> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 (2.12.3-19.el5) Content-Transfer-Encoding: 7bit X-Barracuda-Connect: b.mx.filmlight.ltd.uk[77.107.81.251] X-Barracuda-Start-Time: 1327426244 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, 2012-01-24 at 09:57 -0600, Eric Sandeen wrote: > On 1/24/12 9:52 AM, Christian Kildau wrote: > > On Jan 24, 2012, at 4:50 PM, Eric Sandeen wrote: > > ... > >> Can you run the hdparm command Roger suggested on your original hard drive, please? > > > > Sure, here it is: > > > > /dev/sde: > > max sectors = 2930275055/2930277168, HPA is enabled > ^^^^^^^^^^^^^^ > > ding ding ding, we have a winner. > > 2930277168-2930275055 = 2113 which is about how much xfs tried to read past the end. > > Something about the ubuntu upgrade messed with your disk. > > I'd press them very hard to investigate & resolve that. You can probably use hdparm > to remove the HPA and get your space back but this is beyond my expertise & > familiarity. It'd be interesting to know what is _in_ the HPA area first. > Kernel commit d8d9129ea28e2177749627c82962feb26e8d11e9 added code to notice if a disk partition extends into the hidden area and 'unlocks' the hidden area (uses the full disk capacity) if necessary. But if there's no partition table (the entire disk is formatted as a single filesystem) the heuristic can't work. http://www.spinics.net/lists/linux-ide/msg40244.html suggests that Ubuntu no longer always unlocks, but uses the heuristic above. In the same message Alan Cox says Ubuntu 'made a bad mistake on that one.' -- Roger Willcocks From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:43:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHhOCU059048 for ; Tue, 24 Jan 2012 11:43:24 -0600 X-ASG-Debug-ID: 1327427000-04cbb00c4868c30001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id lVya2CqCWjXC1uiY (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Tue, 24 Jan 2012 09:43:20 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkOt-0003Rk-EF; Tue, 24 Jan 2012 17:43:19 +0000 Date: Tue, 24 Jan 2012 12:43:19 -0500 From: Christoph Hellwig To: Ben Myers Cc: lsf-pc@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems Message-ID: <20120124174319.GA9853@infradead.org> X-ASG-Orig-Subj: Re: [LSF/MM TOPIC] [ATTEND] HSM, DMAPI, and external media filesystems References: <20120119193947.GA6688@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120119193947.GA6688@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427000 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-Spam-Score: 0.70 X-Barracuda-Spam-Status: No, SCORE=0.70 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Thu, Jan 19, 2012 at 01:39:47PM -0600, Ben Myers wrote: > I would like to discuss how to get DMAPI accepted into the mainline > kernel. DMAPI is or was supported by a number of filesystems which are > included in linux (including XFS) and also is supported by a number of > proprietary filesystems. However, the DMAPI implementation has not yet > been accepted into the main line. > > - What are the barriers to inclusion and how can they be resolved? The grotty DMAPI interface. That includes both the high-level ioctl implementations as well as lower level details. In the end most of it boils down to three things: - a notification API telling the daemon about changes, and allowing it to block them. That's in some ways fairly similar to fanotify, which should be reused. Preferably including the interface, but at the very least the underlying implementation. - a handle based I/O method. We now have open by handle at the VFS, so it might just need a few additions like the invisible I/O flag. - ways to make extents offline in the fs, and set various HSM specific flags. This is the actual filesystem-specific piece of code, but we'll need to think about an interface to query and set these bits. filesystem-specific piece of code. > > - What FOSS HSM projects are available to use the interface? > * xfstests/dmapi/sample_hsm That actually seems to be the only one. > * openhsm (opensms) While that one has HSM in the name it actually seems to work quite differently from the traditional partially offline HSM model, nevermind that it seems abandoned. > * tinyhsm (unfinished, unreleased) pointers? > In the end I'd like to come up with a plan that seems reasonable toward > getting DMAPI included mainline. I know that Alex Elder and others have > done work in this area and I would like to see it bear fruit. I'm not really sure discussing this grand highlevel design without backing code really fits for LSF. Might be a fine topic for a BOF if enough interested people are around. From bpm@sgi.com Tue Jan 24 11:44:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHiTuM059101 for ; Tue, 24 Jan 2012 11:44:29 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id B6FF3AC003; Tue, 24 Jan 2012 09:44:25 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 68CB4426DA7; Tue, 24 Jan 2012 11:44:28 -0600 (CST) Date: Tue, 24 Jan 2012 11:44:28 -0600 From: Ben Myers To: Greg KH Cc: stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS update for 3.2-stable Message-ID: <20120124174428.GR8262@sgi.com> References: <1326919305-2753-1-git-send-email-bpm@sgi.com> <20120122211340.GC3224@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120122211340.GC3224@kroah.com> User-Agent: Mutt/1.5.18 (2008-05-17) Hey Greg, On Sun, Jan 22, 2012 at 02:13:40PM -0700, Greg KH wrote: > On Wed, Jan 18, 2012 at 02:41:44PM -0600, bpm@sgi.com wrote: > > Here's a fix for 3.2-stable related to trim support in xfs. > > Applied, thanks. Is it also needed for the 3.0-stable tree? Looks like it. I'll submit it for 3.0... -Ben From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:45:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHj3IW059202 for ; Tue, 24 Jan 2012 11:45:04 -0600 X-ASG-Debug-ID: 1327427102-04bdf006bc67760001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Z2SUgmD7LQ4b2Jho (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:45:02 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkQW-0003U9-4Q; Tue, 24 Jan 2012 17:45:00 +0000 Date: Tue, 24 Jan 2012 12:45:00 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , Eric Sandeen , ext4 development , xfs-oss Subject: Re: [PATCH] xfstests: mount other filesystems with selinux context as well Message-ID: <20120124174500.GB9853@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests: mount other filesystems with selinux context as well References: <4ECD3262.105@redhat.com> <20111128110228.GC13766@infradead.org> <4F1862FC.1050401@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F1862FC.1050401@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427102 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Thu, Jan 19, 2012 at 12:37:48PM -0600, Eric Sandeen wrote: > > shouldn't the "export SELINUX_MOUNT_OPTIONS" simply move to common code? > > I wasn't sure if nfs would grok it. I don't think it does - selinux needs special handling for filesystems that do not support xattrs. From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:46:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHkZCv059278 for ; Tue, 24 Jan 2012 11:46:35 -0600 X-ASG-Debug-ID: 1327427194-04cbb00c4869120001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id kBe0CqYFX2p7szEC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Tue, 24 Jan 2012 09:46:34 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkRg-0004OM-3V; Tue, 24 Jan 2012 17:46:12 +0000 Date: Tue, 24 Jan 2012 12:46:12 -0500 From: Christoph Hellwig To: Mitsuo Hayasaka Cc: Ben Myers , Alex Elder , Christoph Hellwig , xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 0/3] xfs: change available ranges in quota check Message-ID: <20120124174612.GC9853@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 0/3] xfs: change available ranges in quota check References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427194 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 12:45:14PM +0900, Mitsuo Hayasaka wrote: > Hi, > > This patch series changes available ranges of softlimit and > hardlimit in quota check, as follows. > > (1) Consider new reservation for quota check > The disk block reservation checks if (current usage + new > reservation) reach the quota limit although the inode reservation > does not use the new reservation for quota check. It should > consider it, as well. This is mandatory for (2). Can you send a testcase that reproduces issues with the old behaviour? From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:47:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHlEdO059325 for ; Tue, 24 Jan 2012 11:47:14 -0600 X-ASG-Debug-ID: 1327427233-04bdf006bd679f0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 7DLAlgzvfL7BkYft (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:47:13 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkSe-0004PU-Nz; Tue, 24 Jan 2012 17:47:12 +0000 Date: Tue, 24 Jan 2012 12:47:12 -0500 From: Christoph Hellwig To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [RFC PATCH 1/4] Define a new function xfs_this_quota_on() Message-ID: <20120124174712.GD9853@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 1/4] Define a new function xfs_this_quota_on() References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173125.31546.2342.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173125.31546.2342.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427233 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 11:31:25AM -0600, Chandra Seetharaman wrote: > Create a new function xfs_this_quota_on() that takes a xfs_mount > data srtucture and a disk quota type and returns true if the specified > type of quota is ON in the xfs_mount data structure. > > Signed-off-by: Chandra Seetharaman Looks good except for a tiny style nitpick. Reviewed-by: Christoph Hellwig > + switch(type) { This should have a whitespace after the opening brace. From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:48:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHmqoV059411 for ; Tue, 24 Jan 2012 11:48:52 -0600 X-ASG-Debug-ID: 1327427330-04cbb00c4969440001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id pViWHKLxGL7CvtqE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:48:51 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkUE-0004Pw-ML; Tue, 24 Jan 2012 17:48:50 +0000 Date: Tue, 24 Jan 2012 12:48:50 -0500 From: Christoph Hellwig To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() Message-ID: <20120124174850.GE9853@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173130.31546.80744.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173130.31546.80744.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427331 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 11:31:30AM -0600, Chandra Seetharaman wrote: > Define a new function xfs_inode_dquot() that takes a inode pointer > and a disk quota type and returns the quota pointer for the specified > quota type. > > This simplifies the xfs_qm_dqget() error path significantly. Looks good, Reviewed-by: Christoph Hellwig > +static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > +{ > + type &= XFS_DQ_ALLTYPES; > + switch(type) { Same style nitpick as for the last patch. Btw, instead of masking out XFS_DQ_ALLTYPES first this would be more readable as: switch (type & XFS_DQ_ALLTYPES) { (that also applies to the previous patch). From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:52:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHqUYA059659 for ; Tue, 24 Jan 2012 11:52:30 -0600 X-ASG-Debug-ID: 1327427549-04cbb00c4969890001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id ulk8gTKGtKBkttRi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:52:29 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkXk-0005HQ-Q5; Tue, 24 Jan 2012 17:52:28 +0000 Date: Tue, 24 Jan 2012 12:52:28 -0500 From: Christoph Hellwig To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [RFC PATCH 3/4] Change xfs_sb_from_disk() interface to take a mount pointer Message-ID: <20120124175228.GF9853@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 3/4] Change xfs_sb_from_disk() interface to take a mount pointer References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173137.31546.33777.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173137.31546.33777.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427549 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 11:31:37AM -0600, Chandra Seetharaman wrote: > Change xfs_sb_from_disk() interface to take a mount pointer > instead of a superblock pointer. > > This is to print mount point specific error messages in future > fixes. Looks good, Reviewed-by: Christoph Hellwig From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:53:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHrGlD059730 for ; Tue, 24 Jan 2012 11:53:16 -0600 X-ASG-Debug-ID: 1327427594-04bdf006bc68070001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 3XND0H2XXG4l0XUU (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:53:15 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkYU-0005HZ-A9; Tue, 24 Jan 2012 17:53:14 +0000 Date: Tue, 24 Jan 2012 12:53:14 -0500 From: Christoph Hellwig To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [RFC PATCH 4/4] Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage Message-ID: <20120124175314.GG9853@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 4/4] Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173143.31546.29558.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173143.31546.29558.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427595 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 11:31:43AM -0600, Chandra Seetharaman wrote: > Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage > of quota macros. > > Signed-off-by: Chandra Seetharaman Looks good, Reviewed-by: Christoph Hellwig From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:56:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHuEx5060026 for ; Tue, 24 Jan 2012 11:56:14 -0600 X-ASG-Debug-ID: 1327427773-04cbb00c4869c70001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id bOFDfkfX0nii4D1w (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:56:13 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkbM-00068Y-CC; Tue, 24 Jan 2012 17:56:12 +0000 Date: Tue, 24 Jan 2012 12:56:12 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss , James Lawrie Subject: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota Message-ID: <20120124175612.GH9853@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota References: <4F1D9989.8060808@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F1D9989.8060808@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427773 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS > - v = (__uint64_t)cvtnum(blocksize, sectorsize, s); > - *value = v >> 9; /* syscalls use basic blocks */ > + v = cvtnum(blocksize, sectorsize, s); > + if (v == -1LL) { > + fprintf(stderr, _("%s: Error: could not parse size %s.\n"), progname, s); > + return 0; > + } > + *value = (__uint64_t)v >> 8; /* syscalls use basic blocks */ Why do you replace the shift by nine with a shift by 8? Also please don't introduce new overly long lines, just move the translated string to a line of its own, indented by a single tab similar to how we do it in most new xfs/xfsprogs code. From sandeen@redhat.com Tue Jan 24 11:58:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHwJK5060190 for ; Tue, 24 Jan 2012 11:58:19 -0600 X-ASG-Debug-ID: 1327427897-04cbb00c4869ea0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id U1CPFzxhToQfZJJv for ; Tue, 24 Jan 2012 09:58:18 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 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 q0OHwDwj004093 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 24 Jan 2012 12:58:13 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0OHwCO1024113 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Tue, 24 Jan 2012 12:58:13 -0500 Message-ID: <4F1EF134.7000808@redhat.com> Date: Tue, 24 Jan 2012 11:58:12 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss , James Lawrie Subject: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota References: <4F1D9989.8060808@redhat.com> <20120124175612.GH9853@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: check for size parsing errors in xfs_quota In-Reply-To: <20120124175612.GH9853@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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: 1327427897 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/24/12 11:56 AM, Christoph Hellwig wrote: >> - v = (__uint64_t)cvtnum(blocksize, sectorsize, s); >> - *value = v >> 9; /* syscalls use basic blocks */ >> + v = cvtnum(blocksize, sectorsize, s); >> + if (v == -1LL) { >> + fprintf(stderr, _("%s: Error: could not parse size %s.\n"), progname, s); >> + return 0; >> + } >> + *value = (__uint64_t)v >> 8; /* syscalls use basic blocks */ > > Why do you replace the shift by nine with a shift by 8? yeargh, NFI - vi gone wild? > Also please don't introduce new overly long lines, just move the > translated string to a line of its own, indented by a single tab similar > to how we do it in most new xfs/xfsprogs code. Ok, sure, sorry. TBH I noticed it but there was such a long line below I didn't worry. Will resend. -Eric From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 11:58:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHwTko060219 for ; Tue, 24 Jan 2012 11:58:29 -0600 X-ASG-Debug-ID: 1327427908-04cb6c0c1d4ec40001-w1Z2WR Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id VQajdH3YfENOJUP5 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 09:58:29 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkdW-0006AJ-Ki; Tue, 24 Jan 2012 17:58:26 +0000 Date: Tue, 24 Jan 2012 12:58:26 -0500 From: Christoph Hellwig To: yangguoquan Cc: hch@infradead.org, linux-xfs@oss.sgi.com, pengxihan@gmail.com Subject: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again Message-ID: <20120124175826.GA23671@infradead.org> X-ASG-Orig-Subj: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again References: <1276846374-23916-1-git-send-email-david@fromorbit.com> <20111123143045.GA20892@infradead.org> <20111128111947.GA26454@infradead.org> <20120102150201.GB31110@infradead.org> 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327427909 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Jan 04, 2012 at 10:20:31AM +0800, yangguoquan wrote: > > Yes, They are mount points. > > /dev/mapper/storage_pool-testnfs00 on /mnt/storage_pool/testnfs00 type xfs (rw) In that case I really have no idea. Did you make sure you no outstanding "old" filehandles before the fix on clients? How do the handles look in wireshark traces? From christophere@luma-pictures.com Tue Jan 24 11:59:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OHxBfP060296 for ; Tue, 24 Jan 2012 11:59:12 -0600 X-ASG-Debug-ID: 1327427949-04bdf006bc686e0001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id P5LExPAC5Q9yj0JK (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 24 Jan 2012 09:59:10 -0800 (PST) X-Barracuda-Envelope-From: christophere@luma-pictures.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iakl21 with SMTP id l21so4786108iak.26 for ; Tue, 24 Jan 2012 09:59:09 -0800 (PST) MIME-Version: 1.0 Received: by 10.50.161.135 with SMTP id xs7mr3223267igb.15.1327427949435; Tue, 24 Jan 2012 09:59:09 -0800 (PST) Received: by 10.43.131.132 with HTTP; Tue, 24 Jan 2012 09:59:09 -0800 (PST) Date: Tue, 24 Jan 2012 09:59:09 -0800 Message-ID: Subject: Partially corrupted raid array beneath xfs From: Christopher Evans X-ASG-Orig-Subj: Partially corrupted raid array beneath xfs To: xfs@oss.sgi.com X-Gm-Message-State: ALoCoQkyB7AbxAxBDyyjBlsoM/Rx9wzspdm5wPTrzUzX7Aoy9gV7LdhV0E0FtOPQf68299/AFjxr Content-Type: multipart/alternative; boundary=14dae9340c3d641ab804b749e703 X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1327427949 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message --14dae9340c3d641ab804b749e703 Content-Type: text/plain; charset=ISO-8859-1 I made a mistake by recreating a raid 6 array, instead of taking the proper steps to rebuild it. Is there a way I can get find out which directories, files are/might be corrupted if 64k blocks of data offset every 21 times for an unknown count. Unfortunetly I've already mounted the raid array and have gotten xfs errors because of the corrupted data beneath it. OS: Centos 5.5 64bit 2.6.18-194.el5 kmod-xfs: 0.4-2 xfsprogs: 2.9.4-1.el5.centos I ran mdadm --create /dev/md0 --level=6 --raid-devices=23 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx, and then 5 minutes later set the drive I replaces as faulty with mdadm --manage --set-faulty /dev/md0 /dev/sdm. This should result in 64k every 21 times being random data, for 5 minutes worth of raid rebuild ( which took ~20-30 hours to rebuild ). In my testing with a vm with 4 drives in raid 6, I believe I only corrupted the first 5 minutes of raid rebuild. After I create a raid 6 array, I would dd if=/dev/zero of=/dev/md0. Then I would set a data drive to faultly, and remove it. Running hexdump on it would result in all zeros. To give different data I would dd if=/dev/urandom of=/dev/removed_drive. When I recreate the array, it would recognize that three of the drives had been in an array already and ask if I want to continue. Since I said yes it would use the data that would be for the data drives it seems. If I then set the drive with randomized data to faulty during the rebuild, it would seem to continue the rebuild as if the drive was failed/missing. When I would add the drive back, it would rebuild the array again. The beginning of the corrupted drive would still show random data, but data further down the disk would show zeros. --14dae9340c3d641ab804b749e703 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I made a mistake by recreating a raid 6 array, instead of taking the proper= steps to rebuild it. Is there a way I can get find out which directories, = files are/might be corrupted if 64k blocks of data offset every 21 times fo= r an unknown count. Unfortunetly I've already mounted the raid array an= d have gotten xfs errors because of the corrupted data beneath it.

OS: Centos 5.5 64bit=A02.6.18-194.el5
kmod-xfs: 0.= 4-2
xfsprogs: 2.9.4-1.el5.centos

I ran=A0m= dadm --create /dev/md0 --level=3D6 --raid-devices=3D23 /dev/sda /dev/sdb /d= ev/sdc /dev/sdd /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/= sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt= /dev/sdu /dev/sdv /dev/sdw /dev/sdx, and then 5 minutes later set the driv= e I replaces as faulty with=A0mdadm --manage --set-faulty /dev/md0 /dev/sdm= . This should result in 64k every 21 times being random data, for 5 minutes= worth of raid rebuild ( which took ~20-30 hours to rebuild ).

In my testing with a vm with 4 drives in raid 6, I beli= eve I only corrupted the first 5 minutes of raid rebuild. After I create a = raid 6 array, I would dd if=3D/dev/zero of=3D/dev/md0. Then I would set a d= ata drive to faultly, and remove it. Running hexdump on it would result in = all zeros. To give different data I would dd if=3D/dev/urandom of=3D/dev/re= moved_drive. When I recreate the array, it would recognize that three of th= e drives had been in an array already and ask if I want to continue. Since = I said yes it would use the data that would be for the data drives it seems= . If I then set the drive with randomized data to faulty during the rebuild= , it would seem to continue the rebuild as if the drive was failed/missing.= When I would add the drive back, it would rebuild the array again. The beg= inning of the corrupted drive would still show random data, but data furthe= r down the disk would show zeros.
--14dae9340c3d641ab804b749e703-- From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 12:02:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OI2rvg060986 for ; Tue, 24 Jan 2012 12:02:53 -0600 X-ASG-Debug-ID: 1327428162-04cb6c0c164efd0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id KG7X9ygR7wBjwraa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Tue, 24 Jan 2012 10:02:43 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rpkhe-00076V-2t; Tue, 24 Jan 2012 18:02:42 +0000 Date: Tue, 24 Jan 2012 13:02:42 -0500 From: Christoph Hellwig To: Mitsuo Hayasaka Cc: Ben Myers , Alex Elder , Christoph Hellwig , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [PATCH] xfs: show uuid when mount fails due to duplicate uuid Message-ID: <20120124180242.GD23671@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: show uuid when mount fails due to duplicate uuid References: <20120113055839.12919.98763.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120113055839.12919.98763.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327428163 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 13, 2012 at 02:58:39PM +0900, Mitsuo Hayasaka wrote: > When a system tries to mount a filesystem (FS) using UUID, the xfs > returns -EINVAL and shows a message if a FS with the same UUID has > been already mounted. It is useful to output the duplicate UUID > with it. The new version looks fine to me, thanks a lot! From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 12:03:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OI3cQG061051 for ; Tue, 24 Jan 2012 12:03:38 -0600 X-ASG-Debug-ID: 1327428217-04cbb00c486a430001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 3po35oSLBru9k3tH (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Tue, 24 Jan 2012 10:03:37 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkiX-00077K-1I; Tue, 24 Jan 2012 18:03:37 +0000 Date: Tue, 24 Jan 2012 13:03:37 -0500 From: Christoph Hellwig To: Ben Myers Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH 05/11] xfs: make i_flags an unsigned long Message-ID: <20120124180336.GE23671@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 05/11] xfs: make i_flags an unsigned long References: <20111208155755.323930705@bombadil.infradead.org> <20111208155918.348628833@bombadil.infradead.org> <20120113190716.GA6271@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120113190716.GA6271@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327428217 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 13, 2012 at 01:07:16PM -0600, Ben Myers wrote: > On Thu, Dec 08, 2011 at 10:58:00AM -0500, Christoph Hellwig wrote: > > To be used for bit wakeup i_flags needs to be an unsigned long or we'll > > run into trouble on big endian systems. Beause of the 1-byte i_update > Because > > field right after it this actually causes a fairly large size increase > > on its own (4 or 8 bytes), but that increase will be more than offset > > by the next two patches. > > > > Signed-off-by: Christoph Hellwig > > Reviewed-by: Alex Elder > > Reviewed-by: Dave Chinner > > Looks good to me. But I could go for a thorough explanation of 'trouble > on big endian systems'. If we use the bitops that expect to operate on a 64-bit value on a 32-bit value on big endian we'll actually use the 32-bit longword next to it, not the one we intended for the first half of the bits. From tinguely@sgi.com Tue Jan 24 12:10:34 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OIAYAq061524 for ; Tue, 24 Jan 2012 12:10:34 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 247BE304087; Tue, 24 Jan 2012 10:10:31 -0800 (PST) Message-ID: <4F1EF419.6020806@sgi.com> Date: Tue, 24 Jan 2012 12:10:33 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 09/12] xfs: share code for grant head waiting References: <20111212141346.986825692@bombadil.infradead.org> <20111212141435.111380168@bombadil.infradead.org> In-Reply-To: <20111212141435.111380168@bombadil.infradead.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig > > --- > fs/xfs/xfs_log.c | 63 +++++++++++++++-------------------------------------- > fs/xfs/xfs_trace.h | 2 - > 2 files changed, 18 insertions(+), 47 deletions(-) > > Index: xfs/fs/xfs/xfs_log.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_log.c 2011-12-11 21:28:57.128011556 +0100 > +++ xfs/fs/xfs/xfs_log.c 2011-12-11 21:31:10.580621915 +0100 > @@ -221,12 +221,13 @@ xlog_writeq_wake( > } > > STATIC int > -xlog_reserveq_wait( > +xlog_grant_head_wait( ... Looks good. Reviewed-by: Mark Tinguely From lists@unixhosts.org Tue Jan 24 12:11:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OIB04H061567 for ; Tue, 24 Jan 2012 12:11:00 -0600 X-ASG-Debug-ID: 1327428658-04cbb00c466ab90001-NocioJ Received: from mail-ee0-f53.google.com (mail-ee0-f53.google.com [74.125.83.53]) by cuda.sgi.com with ESMTP id vftIz6PFfOvYha7T (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 24 Jan 2012 10:10:59 -0800 (PST) X-Barracuda-Envelope-From: lists@unixhosts.org X-Barracuda-Apparent-Source-IP: 74.125.83.53 Received: by eeke51 with SMTP id e51so2355078eek.26 for ; Tue, 24 Jan 2012 10:10:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixhosts.org; s=google; h=subject:mime-version:from:in-reply-to:date:cc:message-id:references :to:x-mailer:x-gm-message-state:content-type :content-transfer-encoding; bh=9M0lHxOI/Q83bTwQGkfj6O1QxJKzYkR+xk995OAlcdE=; b=Itofr9YUZlmewcXKHwymIaD62yy8Il4owBqNzLQeWGNwLT7fnxYC6Nedzm+PMueUay K67vBYyXPca6vyYMD/dz7gTBhYTmB93w7FWuKdiUK6S64bZjB2uBiDTVyxL1R0+n6O50 shxe/e7VMivYPq8ZUuW8kMfk0pI4MflT2VbdM= Received: by 10.14.99.78 with SMTP id w54mr4818259eef.33.1327428654147; Tue, 24 Jan 2012 10:10:54 -0800 (PST) Received: from marge.int.unixhosts.org (p5080301A.dip.t-dialin.net. [80.128.48.26]) by mx.google.com with ESMTPS id s16sm70571217eef.2.2012.01.24.10.10.52 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jan 2012 10:10:52 -0800 (PST) Subject: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes Mime-Version: 1.0 (Apple Message framework v1251.1) X-ASG-Orig-Subj: Re: How to fix bad superblock or xfs_repair: error - read only 0 of 512 bytes From: Christian Kildau In-Reply-To: <1327425931.24535.610.camel@montana.filmlight.ltd.uk> Date: Tue, 24 Jan 2012 19:10:51 +0100 Cc: Eric Sandeen , xfs-oss Message-Id: References: <20120123043117.GH15102@dastard> <92CDAC52-1BA1-43A8-8470-0E2DCD916610@unixhosts.org> <4F1E3BD0.7080604@sandeen.net> <1327414341.24535.582.camel@montana.filmlight.ltd.uk> <4D396236-D516-4948-8F43-1AED88539BC4@unixhosts.org> <4F1ED341.4010108@sandeen.net> <4F1ED4DF.40907@sandeen.net> <1327425931.24535.610.camel@montana.filmlight.ltd.uk> To: Roger Willcocks X-Mailer: Apple Mail (2.1251.1) X-Gm-Message-State: ALoCoQk5xexkNoOvaILkqHoYfCC8sDqBPMXdoDgzpghIrmJSwqZkuf1dkZSLZyys768wJD7Xxm9N Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-ee0-f53.google.com[74.125.83.53] X-Barracuda-Start-Time: 1327428659 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 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 Jan 24, 2012, at 6:25 PM, Roger Willcocks wrote: >=20 > On Tue, 2012-01-24 at 09:57 -0600, Eric Sandeen wrote: >> On 1/24/12 9:52 AM, Christian Kildau wrote: >>> On Jan 24, 2012, at 4:50 PM, Eric Sandeen wrote: >>>=20 > ... >>>> Can you run the hdparm command Roger suggested on your original = hard drive, please? >>>=20 >>> Sure, here it is: >>>=20 >>> /dev/sde: >>> max sectors =3D 2930275055/2930277168, HPA is enabled >> ^^^^^^^^^^^^^^ >>=20 >> ding ding ding, we have a winner. >>=20 >> 2930277168-2930275055 =3D 2113 which is about how much xfs tried to = read past the end. >>=20 >> Something about the ubuntu upgrade messed with your disk. >>=20 >> I'd press them very hard to investigate & resolve that. You can = probably use hdparm >> to remove the HPA and get your space back but this is beyond my = expertise & >> familiarity. It'd be interesting to know what is _in_ the HPA area = first. >>=20 >=20 > Kernel commit d8d9129ea28e2177749627c82962feb26e8d11e9 added code to > notice if a disk partition extends into the hidden area and 'unlocks' > the hidden area (uses the full disk capacity) if necessary. >=20 > But if there's no partition table (the entire disk is formatted as a > single filesystem) the heuristic can't work. >=20 > http://www.spinics.net/lists/linux-ide/msg40244.html suggests that > Ubuntu no longer always unlocks, but uses the heuristic above. In the > same message Alan Cox says Ubuntu 'made a bad mistake on that one.' >=20 > --=20 > Roger Willcocks >=20 Good to know! Made me choose another OS for the next servers! Thanks= From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 12:17:27 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OIHRpS062081 for ; Tue, 24 Jan 2012 12:17:27 -0600 X-ASG-Debug-ID: 1327428138-04cb6c0c0f4ef70001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id gDExBYgW5Z6e9QPB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 10:02:18 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RpkhD-000761-Fu; Tue, 24 Jan 2012 18:02:15 +0000 Date: Tue, 24 Jan 2012 13:02:15 -0500 From: Christoph Hellwig To: JiSheng Zhang Cc: xfs@oss.sgi.com, elder@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] xfs: remove unecessary AIL push wakeups Message-ID: <20120124180215.GC23671@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: remove unecessary AIL push wakeups References: <20120113013028.6802d878@ustc> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120113013028.6802d878@ustc> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327428138 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 13, 2012 at 01:30:28AM +0800, JiSheng Zhang wrote: > > In commit 0030807c66("xfs: revert to using a kthread for AIL pushing"), > AIL pushing is revert back to use a kthread. But unfortunately, it > introduced a regression: there are unnecessary AIL push wakeups during > idle, ~20 wakeups/s. This change remove the wakeups by reverting a bit > more: set "tout" value as zero during idle. > > Signed-off-by: JiSheng Zhang Looks fine, although I'm a bit worried that I don't have the setup to reproduce the issue that the patch addressed any more and we might regress here. From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 12:19:55 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OIJt0S062280 for ; Tue, 24 Jan 2012 12:19:55 -0600 X-ASG-Debug-ID: 1327428063-04bdf006bd68920001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id oZ6lhN9AukFanlNO (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Tue, 24 Jan 2012 10:01:04 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rpkg2-00075O-Dr; Tue, 24 Jan 2012 18:01:02 +0000 Date: Tue, 24 Jan 2012 13:01:02 -0500 From: Christoph Hellwig To: Ben Myers Cc: Jan Kara , Alex Elder , stable@kernel.org, Carlos Maiolino , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Message-ID: <20120124180102.GB23671@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() References: <1326307930-21251-1-git-send-email-jack@suse.cz> <20120111191330.GQ20739@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120111191330.GQ20739@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327428064 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Jan 11, 2012 at 01:13:30PM -0600, Ben Myers wrote: > Looks good to me. > > Reviewed-by: Ben Myers Can you send it on to Linus ASAP, please? From tinguely@sgi.com Tue Jan 24 12:37:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OIbaxL064338 for ; Tue, 24 Jan 2012 12:37:36 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0BB5C304048; Tue, 24 Jan 2012 10:37:32 -0800 (PST) Message-ID: <4F1EFA6F.7070400@sgi.com> Date: Tue, 24 Jan 2012 12:37:35 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 10/12] xfs: shared code for grant head wakeups References: <20111212141346.986825692@bombadil.infradead.org> <20111212141435.299712663@bombadil.infradead.org> In-Reply-To: <20111212141435.299712663@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig > looks good. Reviewed-by: Mark Tinguely From tinguely@sgi.com Tue Jan 24 12:53:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OIrx2b065682 for ; Tue, 24 Jan 2012 12:53:59 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 0BF4D8F806F; Tue, 24 Jan 2012 10:53:56 -0800 (PST) Message-ID: <4F1EFE46.9040605@sgi.com> Date: Tue, 24 Jan 2012 12:53:58 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 11/12] xfs: share code for grant head availability checks References: <20111212141346.986825692@bombadil.infradead.org> <20111212141435.484216051@bombadil.infradead.org> In-Reply-To: <20111212141435.484216051@bombadil.infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig xlog_grant_log_space() and xlog_regrant_write_log_space() consolidation looks good. Reviewed-by: Mark Tinguely From jack@suse.cz Tue Jan 24 13:35:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OJZZME068905 for ; Tue, 24 Jan 2012 13:35:35 -0600 X-ASG-Debug-ID: 1327433732-04cb6c0c23549b0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id cxt5PXe9qD6AwZQN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 11:35:33 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id E6F0F912E4; Tue, 24 Jan 2012 20:35:31 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 679A7205DF; Tue, 24 Jan 2012 20:35:29 +0100 (CET) Date: Tue, 24 Jan 2012 20:35:29 +0100 From: Jan Kara To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, Eric Sandeen , Dave Chinner , Surbhi Palande , Kamal Mostafa , Christoph Hellwig , LKML , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, Ben Myers , Alex Elder Subject: Re: [PATCH 5/8] xfs: Protect xfs_file_aio_write() & xfs_setattr_size() with sb_start_write - sb_end_write Message-ID: <20120124193529.GA20650@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 5/8] xfs: Protect xfs_file_aio_write() & xfs_setattr_size() with sb_start_write - sb_end_write References: <1327091686-23177-1-git-send-email-jack@suse.cz> <1327091686-23177-6-git-send-email-jack@suse.cz> <20120124071926.GM15102@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120124071926.GM15102@dastard> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1327433733 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue 24-01-12 18:19:26, Dave Chinner wrote: > On Fri, Jan 20, 2012 at 09:34:43PM +0100, Jan Kara wrote: > > Replace racy xfs_wait_for_freeze() check in xfs_file_aio_write() with > > a reliable sb_start_write() - sb_end_write() locking. Due to lock ranking > > dictated by the page fault code we have to call sb_start_write() after we > > acquire ilock. > > It appears to me that you have indeed confused the ilock with the > iolock. > > > Similarly we have to protect xfs_setattr_size() because it can modify last > > page of truncated file. Because ilock is dropped in xfs_setattr_size() we > > have to drop and retake write access as well to avoid deadlocks. > > > > > CC: Ben Myers > > CC: Alex Elder > > Signed-off-by: Jan Kara > > --- > > fs/xfs/xfs_file.c | 6 ++++-- > > fs/xfs/xfs_iops.c | 6 ++++++ > > 2 files changed, 10 insertions(+), 2 deletions(-) > > > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > > index 753ed9b..9efd153 100644 > > --- a/fs/xfs/xfs_file.c > > +++ b/fs/xfs/xfs_file.c > > @@ -862,9 +862,11 @@ xfs_file_dio_aio_write( > > *iolock = XFS_IOLOCK_SHARED; > > } > > > > + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); > > trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); > > ret = generic_file_direct_write(iocb, iovp, > > &nr_segs, pos, &iocb->ki_pos, count, ocount); > > + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); > > That's inside the iolock, not the ilock. Either way, it is > incorrect. This accounting should be outside the iolock - because > xfs_trans_alloc() can be called with the iolock held. Therefore the > freeze/lock order needs to be > > sb_start_write(SB_FREEZE_WRITE) > XFS(ip)->i_iolock > XFS(ip)->i_ilock > sb_end_write(SB_FREEZE_WRITE) > > Which matches the current freeze/lock order. Hmm, so I was looking at this and I think there are following locking constrants (please correct me if I have something wrong): iolock -> trans start (per your claim above) trans start -> ilock (ditto) iolock -> mmap_sem (aio write holds iolock and copying data from userspace might need mmap sem if it hits page fault) mmap_sem -> ilock (do_wp_page -> block_page_mkwrite -> __xfs_get_blocks) freezing -> trans start (so that we can clean the filesystem during freezing) So I see two choices here. 1) Put 'freezing' above iolock as you suggest. But then handling the page fault path becomes challenging. We cannot block there easily because we are called with mmap_sem held. I just talked with Mel and it seems that dropping mmap_sem in ->page_mkwrite(), blocking, retaking mmap_sem and returning VM_FAULT_RETRY might work but we'll see whether some other mm guy won't kill me for that ;). 2) Put 'freezing' below mmap_sem. That would put it below iolock/i_mutex as well. Then handling page fault is easy. We could not block in ->aio_write but we'd have to block in ->write_begin() instead. Similarly we would have to block in other write paths. The first approach has the advantage that we could put lots of frozen checks into VFS thus making them shared among filesystems (possibly even making freezing reliable for filesystems such as ext2). The second approach is simpler as we could do most of the freezing checks while we start a transaction at least for filesystems that have transactions... Any preferences? Honza > > @@ -945,8 +949,6 @@ xfs_file_aio_write( > > if (ocount == 0) > > return 0; > > > > - xfs_wait_for_freeze(ip->i_mount, SB_FREEZE_WRITE); > > - > > that's where sb_start_write() needs to be, and the sb-end_write() > call needs to below the generic_write_sync() calls that will trigger > IO on O_SYNC writes. Otherwise it is not covering all the IO path > correctly. > > > if (XFS_FORCED_SHUTDOWN(ip->i_mount)) > > return -EIO; > > > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > > index 3579bc8..798b9c6 100644 > > --- a/fs/xfs/xfs_iops.c > > +++ b/fs/xfs/xfs_iops.c > > @@ -793,6 +793,7 @@ xfs_setattr_size( > > return xfs_setattr_nonsize(ip, iattr, 0); > > } > > > > + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); > > /* > > * Make sure that the dquots are attached to the inode. > > */ > > @@ -849,10 +850,14 @@ xfs_setattr_size( > > xfs_get_blocks); > > if (error) > > goto out_unlock; > > + /* Drop the write access to avoid lock inversion with ilock */ > > + sb_end_write(inode->i_sb, SB_FREEZE_WRITE); > > > > xfs_ilock(ip, XFS_ILOCK_EXCL); > > lock_flags |= XFS_ILOCK_EXCL; > > > > + sb_start_write(inode->i_sb, SB_FREEZE_WRITE); > > + > > This is caused by the previous problems I pointed out. You should > not need to drop the freeze reference here at all. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com -- Jan Kara SUSE Labs, CR From sekharan@us.ibm.com Tue Jan 24 13:42:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OJg5Yw069395 for ; Tue, 24 Jan 2012 13:42:06 -0600 X-ASG-Debug-ID: 1327434124-04bdf006bd70970001-NocioJ Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by cuda.sgi.com with ESMTP id 8ixsC2tFSlZbYBeI (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 11:42:04 -0800 (PST) X-Barracuda-Envelope-From: sekharan@us.ibm.com X-Barracuda-Apparent-Source-IP: 32.97.110.153 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from /spool/local by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 24 Jan 2012 12:42:03 -0700 X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] X-Barracuda-IPDD: Level2 [us.ibm.com/32.97.110.153] Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 24 Jan 2012 12:41:43 -0700 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 851DB19D8048 for ; Tue, 24 Jan 2012 12:41:40 -0700 (MST) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0OJfdVp3199102 for ; Tue, 24 Jan 2012 14:41:39 -0500 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0OJfdk1003894 for ; Tue, 24 Jan 2012 14:41:39 -0500 Received: from [9.53.40.164] (chandra-lucid.austin.ibm.com [9.53.40.164]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q0OJfctr003749; Tue, 24 Jan 2012 14:41:39 -0500 Subject: Re: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() From: Chandra Seetharaman X-ASG-Orig-Subj: Re: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() Reply-To: sekharan@us.ibm.com To: Christoph Hellwig Cc: xfs@oss.sgi.com In-Reply-To: <20120124174850.GE9853@infradead.org> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173130.31546.80744.sendpatchset@chandra-lucid.austin.ibm.com> <20120124174850.GE9853@infradead.org> Content-Type: text/plain; charset="UTF-8" Organization: IBM Date: Tue, 24 Jan 2012 13:41:36 -0600 Message-ID: <1327434096.2213.18.camel@chandra-lucid.austin.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 12012419-6148-0000-0000-000002E1248D X-Barracuda-Connect: e35.co.us.ibm.com[32.97.110.153] X-Barracuda-Start-Time: 1327434124 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 On Tue, 2012-01-24 at 12:48 -0500, Christoph Hellwig wrote: > On Mon, Jan 23, 2012 at 11:31:30AM -0600, Chandra Seetharaman wrote: > > Define a new function xfs_inode_dquot() that takes a inode pointer > > and a disk quota type and returns the quota pointer for the specified > > quota type. > > > > This simplifies the xfs_qm_dqget() error path significantly. > > Looks good, > > Reviewed-by: Christoph Hellwig > > > +static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > > +{ > > + type &= XFS_DQ_ALLTYPES; > > + switch(type) { > > Same style nitpick as for the last patch. > > Btw, instead of masking out XFS_DQ_ALLTYPES first this would be more > readable as: > > switch (type & XFS_DQ_ALLTYPES) { > > (that also applies to the previous patch). > Will fix both of these in the next version. Thanks for the review Christoph. Chandra From BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 24 15:39:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_83 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OLdi2b077937 for ; Tue, 24 Jan 2012 15:39:44 -0600 X-ASG-Debug-ID: 1327441177-04cbb00c4777ad0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id ynIIgvfxBloNt5qV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 24 Jan 2012 13:39:38 -0800 (PST) X-Barracuda-Envelope-From: BATV+7663c09ddee4e3580565+3075+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rpo5Y-0000PF-Bv; Tue, 24 Jan 2012 21:39:36 +0000 Date: Tue, 24 Jan 2012 16:39:36 -0500 From: Christoph Hellwig To: Kelbel Junior Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS problem Message-ID: <20120124213936.GA1505@infradead.org> X-ASG-Orig-Subj: Re: XFS problem 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327441178 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-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC1_TG070, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86591 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC1_TG070 Custom Rule TG070 On Fri, Jan 20, 2012 at 03:55:18PM -0200, Kelbel Junior wrote: > Hello again ... > > So ... after changing the memory allocator SLUB to SLAB in the Linux > kernel and apply the patch mentioned below, the system was stable for > 3 days and today it happened again delay to deliver content on the > disc. > > When I went to see if there was something wrong in /var/log/messages > appear several times this block: Can you try the patch below to make the extent indirection array reallocation more efficient? It's still working around the symptoms, though. What kind of workload are you running to get this extremely high number of extents? Index: xfs/fs/xfs/kmem.c =================================================================== --- xfs.orig/fs/xfs/kmem.c 2011-10-17 09:28:57.159149025 +0200 +++ xfs/fs/xfs/kmem.c 2012-01-24 21:04:50.405954910 +0100 @@ -86,19 +86,22 @@ kmem_free(const void *ptr) } void * -kmem_realloc(const void *ptr, size_t newsize, size_t oldsize, - unsigned int __nocast flags) +kmem_realloc(const void *old, size_t newsize, unsigned int __nocast flags) { + gfp_t lflags = kmem_flags_convert(flags); + int retries = 0; void *new; - new = kmem_alloc(newsize, flags); - if (ptr) { - if (new) - memcpy(new, ptr, - ((oldsize < newsize) ? oldsize : newsize)); - kmem_free(ptr); - } - return new; + do { + new = krealloc(old, newsize, lflags); + if (new || (flags & (KM_MAYFAIL|KM_NOSLEEP))) + return new; + if (!(++retries % 100)) + xfs_err(NULL, + "possible memory allocation deadlock in %s (mode:0x%x)", + __func__, lflags); + congestion_wait(BLK_RW_ASYNC, HZ/50); + } while (1); } void * Index: xfs/fs/xfs/kmem.h =================================================================== --- xfs.orig/fs/xfs/kmem.h 2011-12-18 23:35:30.893167926 +0100 +++ xfs/fs/xfs/kmem.h 2012-01-24 21:00:07.865956600 +0100 @@ -56,7 +56,7 @@ kmem_flags_convert(unsigned int __nocast extern void *kmem_alloc(size_t, unsigned int __nocast); extern void *kmem_zalloc(size_t, unsigned int __nocast); -extern void *kmem_realloc(const void *, size_t, size_t, unsigned int __nocast); +extern void *kmem_realloc(const void *, size_t, unsigned int __nocast); extern void kmem_free(const void *); static inline void *kmem_zalloc_large(size_t size) Index: xfs/fs/xfs/xfs_inode.c =================================================================== --- xfs.orig/fs/xfs/xfs_inode.c 2012-01-24 20:57:27.079290895 +0100 +++ xfs/fs/xfs/xfs_inode.c 2012-01-24 21:02:48.145955643 +0100 @@ -1826,7 +1826,6 @@ xfs_iroot_realloc( new_max = cur_max + rec_diff; new_size = (size_t)XFS_BMAP_BROOT_SPACE_CALC(new_max); ifp->if_broot = kmem_realloc(ifp->if_broot, new_size, - (size_t)XFS_BMAP_BROOT_SPACE_CALC(cur_max), /* old size */ KM_SLEEP | KM_NOFS); op = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, ifp->if_broot, 1, ifp->if_broot_bytes); @@ -1968,7 +1967,6 @@ xfs_idata_realloc( ifp->if_u1.if_data = kmem_realloc(ifp->if_u1.if_data, real_size, - ifp->if_real_bytes, KM_SLEEP | KM_NOFS); } } else { @@ -3254,8 +3252,7 @@ xfs_iext_realloc_direct( if (rnew_size != ifp->if_real_bytes) { ifp->if_u1.if_extents = kmem_realloc(ifp->if_u1.if_extents, - rnew_size, - ifp->if_real_bytes, KM_NOFS); + rnew_size, KM_NOFS); } if (rnew_size > ifp->if_real_bytes) { memset(&ifp->if_u1.if_extents[ifp->if_bytes / @@ -3333,20 +3330,15 @@ xfs_iext_realloc_indirect( xfs_ifork_t *ifp, /* inode fork pointer */ int new_size) /* new indirection array size */ { - int nlists; /* number of irec's (ex lists) */ - int size; /* current indirection array size */ - ASSERT(ifp->if_flags & XFS_IFEXTIREC); - nlists = ifp->if_real_bytes / XFS_IEXT_BUFSZ; - size = nlists * sizeof(xfs_ext_irec_t); ASSERT(ifp->if_real_bytes); - ASSERT((new_size >= 0) && (new_size != size)); + ASSERT(new_size >= 0); + if (new_size == 0) { xfs_iext_destroy(ifp); } else { - ifp->if_u1.if_ext_irec = (xfs_ext_irec_t *) - kmem_realloc(ifp->if_u1.if_ext_irec, - new_size, size, KM_NOFS); + ifp->if_u1.if_ext_irec = + kmem_realloc(ifp->if_u1.if_ext_irec, new_size, KM_NOFS); } } Index: xfs/fs/xfs/xfs_log_recover.c =================================================================== --- xfs.orig/fs/xfs/xfs_log_recover.c 2011-12-18 23:35:30.906501259 +0100 +++ xfs/fs/xfs/xfs_log_recover.c 2012-01-24 21:02:20.352622478 +0100 @@ -1489,7 +1489,7 @@ xlog_recover_add_to_cont_trans( old_ptr = item->ri_buf[item->ri_cnt-1].i_addr; old_len = item->ri_buf[item->ri_cnt-1].i_len; - ptr = kmem_realloc(old_ptr, len+old_len, old_len, 0u); + ptr = kmem_realloc(old_ptr, len+old_len, KM_SLEEP); memcpy(&ptr[old_len], dp, len); /* d, s, l */ item->ri_buf[item->ri_cnt-1].i_len += len; item->ri_buf[item->ri_cnt-1].i_addr = ptr; Index: xfs/fs/xfs/xfs_mount.c =================================================================== --- xfs.orig/fs/xfs/xfs_mount.c 2011-12-18 23:35:30.906501259 +0100 +++ xfs/fs/xfs/xfs_mount.c 2012-01-24 21:05:29.699288013 +0100 @@ -147,7 +147,6 @@ xfs_uuid_mount( if (hole < 0) { xfs_uuid_table = kmem_realloc(xfs_uuid_table, (xfs_uuid_table_size + 1) * sizeof(*xfs_uuid_table), - xfs_uuid_table_size * sizeof(*xfs_uuid_table), KM_SLEEP); hole = xfs_uuid_table_size++; } From valdes@mcs.anl.gov Tue Jan 24 16:58:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_13, J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0OMwgNJ097598 for ; Tue, 24 Jan 2012 16:58:43 -0600 X-ASG-Debug-ID: 1327445921-04cb6c0c1d5df40001-NocioJ Received: from mailrelay.mcs.anl.gov (newman-1.mcs.anl.gov [140.221.6.6]) by cuda.sgi.com with ESMTP id oZQf0E2BzBKvcSEk for ; Tue, 24 Jan 2012 14:58:41 -0800 (PST) X-Barracuda-Envelope-From: valdes@mcs.anl.gov X-Barracuda-Apparent-Source-IP: 140.221.6.6 Received: from starfish.mcs.anl.gov (starfish.mcs.anl.gov [140.221.13.17]) by mailrelay.mcs.anl.gov (Postfix) with ESMTP id 06CE18850D; Tue, 24 Jan 2012 16:58:41 -0600 (CST) Received: by starfish.mcs.anl.gov (Postfix, from userid 3320) id 0060C16211; Tue, 24 Jan 2012 16:58:40 -0600 (CST) Date: Tue, 24 Jan 2012 16:58:40 -0600 From: John Valdes To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: log recovery fails at mount Message-ID: <20120124225840.GA20222@starfish.mcs.anl.gov> X-ASG-Orig-Subj: Re: log recovery fails at mount References: <20120124024340.GA6689@starfish.mcs.anl.gov> <4F1E3C71.1020303@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F1E3C71.1020303@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: newman-1.mcs.anl.gov[140.221.6.6] X-Barracuda-Start-Time: 1327445921 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86597 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jan 23, 2012 at 11:06:57PM -0600, Eric Sandeen wrote: > try: > > # xfs_metadump /dev/md4 md4.metadump > # xfs_mdrestore md4.metadump md4.img > # xfs_repair -L md4.img > > that'll repair a metadata image and you can see how much it runs into. Good suggestion. Here's the result; looks innocuous: prompt# xfs_repair -v -L md4.img Phase 1 - find and verify superblock... - block cache size set to 1242264 entries Phase 2 - using internal log - zero log... zero_log: head block 123697 tail block 123687 ALERT: The filesystem has valuable metadata changes in a log which is being destroyed because the -L option was used. - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - agno = 25 - agno = 4 Phase 5 - rebuild AG headers and trees... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... XFS_REPAIR Summary Tue Jan 24 13:49:49 2012 Phase Start End Duration Phase 1: 01/24 13:49:12 01/24 13:49:13 1 second Phase 2: 01/24 13:49:13 01/24 13:49:18 5 seconds Phase 3: 01/24 13:49:18 01/24 13:49:24 6 seconds Phase 4: 01/24 : 01/24 13:49:49 01/24 13:49:49 Total run time: 37 seconds done However, if I loopback mount the img file, the file/directory names in the mounted fs are mostly corrupted; that may be expected though since it's just a metadata dump/restore? prompt# mount -r -t xfs -o loop md4.img /mnt prompt# ls /mnt ??5?z+o??%F_4(?R?.wrhE*] data K?ckw? T?o??n2o?,?0-|K#\o Z?w?9=ol\?7j??1T Any other suggestions or comments before I let loose xfs_repair -L on the real filesystem? John From sandeen@sandeen.net Tue Jan 24 17:03:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_13 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0ON3Xb4104018 for ; Tue, 24 Jan 2012 17:03:33 -0600 X-ASG-Debug-ID: 1327446212-04cbb00c487db70001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id XoBb1qBKtOUCTHEc for ; Tue, 24 Jan 2012 15:03:32 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 1F87A496335B; Tue, 24 Jan 2012 17:03:32 -0600 (CST) Message-ID: <4F1F38C3.9090409@sandeen.net> Date: Tue, 24 Jan 2012 17:03:31 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: John Valdes CC: xfs@oss.sgi.com Subject: Re: log recovery fails at mount References: <20120124024340.GA6689@starfish.mcs.anl.gov> <4F1E3C71.1020303@sandeen.net> <20120124225840.GA20222@starfish.mcs.anl.gov> X-ASG-Orig-Subj: Re: log recovery fails at mount In-Reply-To: <20120124225840.GA20222@starfish.mcs.anl.gov> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327446212 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86597 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/24/12 4:58 PM, John Valdes wrote: > On Mon, Jan 23, 2012 at 11:06:57PM -0600, Eric Sandeen wrote: >> try: >> >> # xfs_metadump /dev/md4 md4.metadump >> # xfs_mdrestore md4.metadump md4.img >> # xfs_repair -L md4.img >> >> that'll repair a metadata image and you can see how much it runs into. > > Good suggestion. Here's the result; looks innocuous: > > > However, if I loopback mount the img file, the file/directory names in > the mounted fs are mostly corrupted; that may be expected though since > it's just a metadata dump/restore? > > prompt# mount -r -t xfs -o loop md4.img /mnt > prompt# ls /mnt > ??5?z+o??%F_4(?R?.wrhE*] data K?ckw? T?o??n2o?,?0-|K#\o Z?w?9=ol\?7j??1T > > Any other suggestions or comments before I let loose xfs_repair -L on > the real filesystem? that's because metadump obfuscates filenames by default. There's an option to keep them in the clear, and then you won't see all that garbage. -Eric > John > From valdes@mcs.anl.gov Tue Jan 24 17:34:26 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0ONYP9B117825 for ; Tue, 24 Jan 2012 17:34:26 -0600 X-ASG-Debug-ID: 1327448064-04bdf006ba7ed90001-NocioJ Received: from mailrelay.mcs.anl.gov (newman-1.mcs.anl.gov [140.221.6.6]) by cuda.sgi.com with ESMTP id i3G2gLLGAYjXTQpU for ; Tue, 24 Jan 2012 15:34:24 -0800 (PST) X-Barracuda-Envelope-From: valdes@mcs.anl.gov X-Barracuda-Apparent-Source-IP: 140.221.6.6 Received: from starfish.mcs.anl.gov (starfish.mcs.anl.gov [140.221.13.17]) by mailrelay.mcs.anl.gov (Postfix) with ESMTP id 3895A88523; Tue, 24 Jan 2012 17:34:24 -0600 (CST) Received: by starfish.mcs.anl.gov (Postfix, from userid 3320) id 3333F16211; Tue, 24 Jan 2012 17:34:24 -0600 (CST) Date: Tue, 24 Jan 2012 17:34:24 -0600 From: John Valdes To: Eric Sandeen Cc: xfs@oss.sgi.com Subject: Re: log recovery fails at mount Message-ID: <20120124233424.GB20222@starfish.mcs.anl.gov> X-ASG-Orig-Subj: Re: log recovery fails at mount References: <20120124024340.GA6689@starfish.mcs.anl.gov> <4F1E3C71.1020303@sandeen.net> <20120124225840.GA20222@starfish.mcs.anl.gov> <4F1F38C3.9090409@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F1F38C3.9090409@sandeen.net> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: newman-1.mcs.anl.gov[140.221.6.6] X-Barracuda-Start-Time: 1327448064 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86599 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 24, 2012 at 05:03:31PM -0600, Eric Sandeen wrote: > On 1/24/12 4:58 PM, John Valdes wrote: > > > [...] if I loopback mount the img file, the file/directory names in > > the mounted fs are mostly corrupted; > > that's because metadump obfuscates filenames by default. There's an option > to keep them in the clear, and then you won't see all that garbage. Ah, OK. A bit unexpected, but if I repeat the process using the '-o' option w/ xfs_metadump, the loopback mounted fs now looks as expected: prompt# ls -F /mnt backup/ data/ pvfs2-server.log pvfs2-server.log.0 pvfs2-server.log-crashed I'll run xfs_repair -L on the real filesystem now. Many thanks for the help! John From david@fromorbit.com Tue Jan 24 18:49:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0P0nwqt123735 for ; Tue, 24 Jan 2012 18:49:59 -0600 X-ASG-Debug-ID: 1327452596-04cbb00c4981f10001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id UEIFiaCOpA3NimLJ for ; Tue, 24 Jan 2012 16:49:56 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAL1OH095LElR/2dsb2JhbABCrjaBBoFyAQEFOhwjEAgDGC4UJQMhE8A1E4h7AwYDBgkDBwIQBgUHAgODWQEFBAWDSwSVHJJj Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail05.adl6.internode.on.net with ESMTP; 25 Jan 2012 11:19:55 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rpr3i-0007cJ-2c; Wed, 25 Jan 2012 11:49:54 +1100 Date: Wed, 25 Jan 2012 11:49:54 +1100 From: Dave Chinner To: Christopher Evans Cc: xfs@oss.sgi.com Subject: Re: Partially corrupted raid array beneath xfs Message-ID: <20120125004954.GQ15102@dastard> X-ASG-Orig-Subj: Re: Partially corrupted raid array beneath xfs 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: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1327452596 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86605 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 24, 2012 at 09:59:09AM -0800, Christopher Evans wrote: > I made a mistake by recreating a raid 6 array, instead of taking the proper > steps to rebuild it. Is there a way I can get find out which directories, > files are/might be corrupted if 64k blocks of data offset every 21 times > for an unknown count. Unfortunetly I've already mounted the raid array and > have gotten xfs errors because of the corrupted data beneath it. Write a script that walks the filesystem run xfs_bmap on every file and directory and work out which one have extents that fall into the bad range. If you walk into a corrupted directory, then you're likely to see errors in dmesg, too. In future we'll have a reverse mapping tree that will enable use to avoid the tree walk to find the owners of corrupted regions like this. I wrote half the code for it while I was at LCA last week ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From amit.sahrawat83@gmail.com Tue Jan 24 23:20:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_72,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0P5K5tl168187 for ; Tue, 24 Jan 2012 23:20:05 -0600 X-ASG-Debug-ID: 1327468799-04bdf006bb91690001-NocioJ Received: from mail-we0-f181.google.com (mail-we0-f181.google.com [74.125.82.181]) by cuda.sgi.com with ESMTP id sop77SxwdXlcHDCn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 24 Jan 2012 21:20:00 -0800 (PST) X-Barracuda-Envelope-From: amit.sahrawat83@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.181 Received: by werb10 with SMTP id b10so4098134wer.26 for ; Tue, 24 Jan 2012 21:19:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=r3VWl4Sy3nMGp+JXM5uYcoEvLCla1uKJoyEJsbP3A8g=; b=PZj5kenJzq2MpRPybfGu+yhYju00Sr7w9Si3og6wBLfNGLjtpO4doFvlwTPidi1bxh IdL6Yy14maFgErI7tpMhlTGZQhx8rMu9TVS9A5T/F0UcE5xWZgEmXu0LRs5hAFD/MsCF mFMkRP3F/wZlKZvPtkcI7cvF9fciIq7U6b7AI= MIME-Version: 1.0 Received: by 10.216.132.91 with SMTP id n69mr1356439wei.7.1327468799296; Tue, 24 Jan 2012 21:19:59 -0800 (PST) Received: by 10.181.11.233 with HTTP; Tue, 24 Jan 2012 21:19:59 -0800 (PST) Date: Wed, 25 Jan 2012 10:49:59 +0530 Message-ID: Subject: Does Ext4 support parallel write similar to XFS? From: Amit Sahrawat X-ASG-Orig-Subj: Does Ext4 support parallel write similar to XFS? To: xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, LKML , Christoph Hellwig , Dave Chinner Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-we0-f181.google.com[74.125.82.181] X-Barracuda-Start-Time: 1327468800 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86623 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature In XFS we can write parallel (i.,e we can make use of allocation groups for writing process). If the files are kept in individual directories, there is a possibility that first the blocks for that files be used from individual allocation groups. If I start =914=92 writing process(cp 100MB_file //) =96 after writing is finished =96 if I check the bmap =96 it does shows that initial allocation was from individual allocation groups. Even though in Ext4 also we do have groups =96 but I am not able to get behavior similar to XFS. If I check the file extents =96 the extents are in mixed form, the allocation pattern is also very fragmented. Please share more on this. Also, if there is a possible exact test case to check for parallel writes support. Thanks & Regards, Amit Sahrawat From sgi-linux-xfs@lo.gmane.org Tue Jan 24 23:35:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0P5ZDu8169321 for ; Tue, 24 Jan 2012 23:35:14 -0600 X-ASG-Debug-ID: 1327469711-04bdf006bc92920001-w1Z2WR Received: from lo.gmane.org (lo.gmane.org [80.91.229.12]) by cuda.sgi.com with ESMTP id aMY3mm7PO1QYN62X for ; Tue, 24 Jan 2012 21:35:11 -0800 (PST) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.12 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1RpvVk-0001lZ-7P for linux-xfs@oss.sgi.com; Wed, 25 Jan 2012 06:35:08 +0100 Received: from wombat.san-francisco.ca.us ([75.101.60.64]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 25 Jan 2012 06:35:08 +0100 Received: from kkeller by wombat.san-francisco.ca.us with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 25 Jan 2012 06:35:08 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Keith Keller Subject: help with deciphering kernel dmesg Date: Tue, 24 Jan 2012 21:24:26 -0800 X-ASG-Orig-Subj: help with deciphering kernel dmesg Lines: 95 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: wombat.san-francisco.ca.us X-To-Verify: Use pgpverify (ftp://ftp.isc.org/pub/pgpcontrol/) User-Agent: slrn/0.9.9p1 (Linux) X-Barracuda-Connect: lo.gmane.org[80.91.229.12] X-Barracuda-Start-Time: 1327469711 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86623 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello all, I had a strange issue with my largish XFS filesystem, and was hoping to get some help figuring out what it could mean. Background: this is a ~14TB XFS filesystem on top of a linux LVM md RAID6 of 9 2TB disks. In the past, I've had no problems working with this, but I recently added a disk to reshape to 10 disks. During an rsnapshot, I got the below messages in dmesg, and when I went to umount the fs to do an xfs_repair -n, it claimed that the filesystem was busy, even though lsof didn't show any files open on the filesystem. The last time I did an mdraid reshape, the kernel did a hard crash on a small amount of disk activity, and at that time the kernel messages seemed to point to an issue in the mdraid module. But I wasn't able to save the messages, so I'm not sure whether the messages were a trace from the mdraid module or the xfs module. The kernel is the latest from ELrepo (2.6.39-4.el5.elrepo). I am currently running xfs_repair -n, which hasn't yet found any errors. (Since the fs isn't mounted I can't yet give xfs_info output, and because the RAID6 is still reshaping the xfs_repair is taking a long time. I can interrupt it if needed, but I'm hoping to let it finish.) In the past the RAID6 has passed a check, but I have not done one this month. I hope I have munged any identifying information. Thanks for any suggestions; my dmesg output snippet is below. A cursory web search on the keywords in the first line of the dmesg output didn't turn up anything terribly interesting. One I found suggested ACLs or SELinux issues, but my system isn't using those AFAIK (at least it shouldn't be). --keith Jan 23 23:09:37 XXXXX kernel: XFS (dm-5): I/O error occurred: meta-data dev dm-5 block 0x57786050 ("xfs_trans_read_buf") error 5 buf count 4096 Jan 23 23:10:01 XXXXX kernel: XFS (dm-5): I/O error occurred: meta-data dev dm-5 block 0x5778dff8 ("xfs_trans_read_buf") error 5 buf count 4096 Jan 23 23:10:05 XXXXX kernel: BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 Jan 23 23:10:05 XXXXX kernel: IP: [] xfs_da_do_buf+0x43e/0x592 [xfs] Jan 23 23:10:05 XXXXX kernel: PGD f3b7d067 PUD eaf19067 PMD 0 Jan 23 23:10:05 XXXXX kernel: Oops: 0000 [#1] PREEMPT SMP Jan 23 23:10:05 XXXXX kernel: last sysfs file: /sys/devices/pci0000:00/0000:00:0b.0/0000:01:03.0/local_cpus Jan 23 23:10:05 XXXXX kernel: CPU 1 Jan 23 23:10:05 XXXXX kernel: Modules linked in: xfs raid456 async_raid6_recov async_pq raid6_pq async_xor xor async_memcpy async_tx netconsole autofs4 nfs fscache auth_rp cgss nfs_acl lockd sunrpc binfmt_misc dm_multipath scsi_dh video sbs sbshc power_meter pci_slot hed battery acpi_memhotplug acpi_ipmi ipmi_msghandler ac lp st osst ch sg sr_ mod cdrom e100 mii tg3 serio_raw button i2c_amd756 parport_pc parport tpm_tis tpm i2c_amd8111 tpm_bios rtc_cmos i2c_core k8temp shpchp floppy amd64_edac_mod pcspkr pci_hotpl ug hwmon edac_core amd_rng dm_snapshot dm_zero dm_mirror dm_region_hash dm_log dm_mod 3w_9xxx aic79xx scsi_transport_spi pata_amd pata_acpi ata_generic libata sd_mod scsi_mo d ext3 jbd uhci_hcd ohci_hcd ehci_hcd [last unloaded: netconsole] Jan 23 23:10:05 XXXXX kernel: Jan 23 23:10:05 XXXXX kernel: Pid: 9308, comm: rsync Not tainted 2.6.39-4.el5.elrepo #1 To Be Filled By O.E.M. To Be Filled By O.E.M./TYAN High-End Dual AMD Opteron, S2882 Jan 23 23:10:05 XXXXX kernel: RIP: 0010:[] [] xfs_da_do_buf+0x43e/0x592 [xfs] Jan 23 23:10:05 XXXXX kernel: RSP: 0018:ffff8800ead4fcb8 EFLAGS: 00010246 Jan 23 23:10:05 XXXXX kernel: RAX: 0000000000000000 RBX: ffff8800ead4fd38 RCX: 0000000000000002 Jan 23 23:10:05 XXXXX kernel: RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 Jan 23 23:10:05 XXXXX kernel: RBP: ffff8800ead4fd88 R08: 0000000000000001 R09: 0000000000000202 Jan 23 23:10:05 XXXXX kernel: R10: ffff8800ead4fc18 R11: ffff8800f39b80f8 R12: 0000000000000000 Jan 23 23:10:05 XXXXX kernel: R13: 0000000000000000 R14: ffff8800f3a8a800 R15: 0000000000000000 Jan 23 23:10:05 XXXXX rsnapshot[9316]: /usr/bin/rsnapshot sync: ERROR: /usr/bin/rsync returned 12 while processing /mnt/YYYYYYYY Jan 23 23:10:05 XXXXX kernel: FS: 00007f4f1be006e0(0000) GS:ffff8800f7c00000(0000) knlGS:0000000000000000 Jan 23 23:10:05 XXXXX kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b Jan 23 23:10:05 XXXXX kernel: CR2: 0000000000000008 CR3: 00000000f2f77000 CR4: 00000000000006e0 Jan 23 23:10:05 XXXXX kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 Jan 23 23:10:05 XXXXX kernel: DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Jan 23 23:10:05 XXXXX kernel: Process rsync (pid: 9308, threadinfo ffff8800ead4e000, task ffff8800f39b80c0) Jan 23 23:10:05 XXXXX kernel: Stack: Jan 23 23:10:05 XXXXX kernel: ffff8800ead4fd48 ffffffffa0464fd7 ffff8800ead4fcd8 ffffffff8107ec2b Jan 23 23:10:05 XXXXX kernel: ffff8800ead4fce8 00000000813c5ae6 ffff8800ead4fe50 ffff8800ead4fdb0 Jan 23 23:10:05 XXXXX kernel: ffff88002b926400 0000000000000000 ffff8800ead4fd18 0000000100000000 Jan 23 23:10:05 XXXXX kernel: Call Trace: Jan 23 23:10:05 XXXXX kernel: [] ? spin_unlock+0xe/0x10 [xfs] Jan 23 23:10:05 XXXXX kernel: [] ? __raw_spin_unlock+0x29/0x34 Jan 23 23:10:05 XXXXX kernel: [] ? xfs_buf_relse+0x1e/0x22 [xfs] Jan 23 23:10:05 XXXXX kernel: [] xfs_da_read_buf+0x2a/0x2c [xfs] Jan 23 23:10:05 XXXXX kernel: [] ? xfs_dir2_leaf_getdents+0x372/0x637 [xfs] Jan 23 23:10:05 XXXXX kernel: [] xfs_dir2_leaf_getdents+0x372/0x637 [xfs] Jan 23 23:10:05 XXXXX kernel: [] ? sys_old_readdir+0x63/0x63 Jan 23 23:10:05 XXXXX kernel: [] ? sys_old_readdir+0x63/0x63 Jan 23 23:10:05 XXXXX kernel: [] xfs_readdir+0xb5/0xc8 [xfs] Jan 23 23:10:05 XXXXX kernel: [] ? fsnotify_perm+0x70/0x7c Jan 23 23:10:05 XXXXX kernel: [] ? sys_old_readdir+0x63/0x63 Jan 23 23:10:05 XXXXX kernel: [] xfs_file_readdir+0x3f/0x4e [xfs] Jan 23 23:10:05 XXXXX kernel: [] vfs_readdir+0x78/0x9f Jan 23 23:10:05 XXXXX kernel: [] sys_getdents+0x7f/0xc9 Jan 23 23:10:05 XXXXX kernel: [] system_call_fastpath+0x16/0x1b Jan 23 23:10:05 XXXXX kernel: Code: eb 17 45 31 ed 48 83 7d c0 00 74 15 48 8b 55 18 48 8d 75 c0 bf 01 00 00 00 e8 d1 ef ff ff 49 89 c5 83 7d 10 01 0f 85 a3 00 00 00 Jan 23 23:10:05 XXXXX kernel: <49> 8b 5d 08 0f b7 7b 08 e8 15 ea ff ff 0f b7 c0 8b 13 0f ca 3d Jan 23 23:10:05 XXXXX kernel: RIP [] xfs_da_do_buf+0x43e/0x592 [xfs] Jan 23 23:10:05 XXXXX kernel: RSP Jan 23 23:10:05 XXXXX kernel: CR2: 0000000000000008 Jan 23 23:10:05 XXXXX kernel: ---[ end trace b5fbfad2fe7e2837 ]--- -- kkeller@wombat.san-francisco.ca.us From david@fromorbit.com Wed Jan 25 00:42:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0P6gWIc178802 for ; Wed, 25 Jan 2012 00:42:32 -0600 X-ASG-Debug-ID: 1327473748-04cbb00c4798060001-w1Z2WR Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id OLgceHtWZV0qHRR4 for ; Tue, 24 Jan 2012 22:42:28 -0800 (PST) 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: Av0EAKKjH095LElR/2dsb2JhbABCrjqBBoFyAQEEATocIwULCAMOCi4UJQMhE4d8uC0TiQADBgMGCQMHAhAGBQeDXgEFBAUQBoM1BJUckmY Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail06.adl6.internode.on.net with ESMTP; 25 Jan 2012 17:12:27 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RpwYr-00089G-Nh; Wed, 25 Jan 2012 17:42:25 +1100 Date: Wed, 25 Jan 2012 17:42:25 +1100 From: Dave Chinner To: Keith Keller Cc: linux-xfs@oss.sgi.com Subject: Re: help with deciphering kernel dmesg Message-ID: <20120125064225.GR15102@dastard> X-ASG-Orig-Subj: Re: help with deciphering kernel dmesg 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: 1327473748 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86627 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 24, 2012 at 09:24:26PM -0800, Keith Keller wrote: > Hello all, > > I had a strange issue with my largish XFS filesystem, and was hoping to > get some help figuring out what it could mean. > > Background: this is a ~14TB XFS filesystem on top of a linux LVM md > RAID6 of 9 2TB disks. In the past, I've had no problems working with this, > but I recently added a disk to reshape to 10 disks. During an > rsnapshot, I got the below messages in dmesg, and when I went to umount > the fs to do an xfs_repair -n, it claimed that the filesystem was busy, > even though lsof didn't show any files open on the filesystem. > > The last time I did an mdraid reshape, the kernel did a hard crash on a > small amount of disk activity, and at that time the kernel messages > seemed to point to an issue in the mdraid module. But I wasn't able to > save the messages, so I'm not sure whether the messages were a trace > from the mdraid module or the xfs module. I suspect that from the IO errors, there is a problem in the md reshape code, and the XFs code has failed to handle that properly. > The kernel is the latest from ELrepo (2.6.39-4.el5.elrepo). I am > currently running xfs_repair -n, which hasn't yet found any errors. > (Since the fs isn't mounted I can't yet give xfs_info output, and > because the RAID6 is still reshaping the xfs_repair is taking a long > time. I can interrupt it if needed, but I'm hoping to let it finish.) > In the past the RAID6 has passed a check, but I have not done one this > month. I hope I have munged any identifying information. the xfs_info output would be really handy for determining what path through the directory code XFS was taking whenteh crash occurred. > Thanks for any suggestions; my dmesg output snippet is below. A > cursory web search on the keywords in the first line of the dmesg output > didn't turn up anything terribly interesting. One I found suggested > ACLs or SELinux issues, but my system isn't using those AFAIK (at least > it shouldn't be). > > --keith > > Jan 23 23:09:37 XXXXX kernel: XFS (dm-5): I/O error occurred: meta-data dev dm-5 block 0x57786050 ("xfs_trans_read_buf") error 5 buf count 4096 > Jan 23 23:10:01 XXXXX kernel: XFS (dm-5): I/O error occurred: meta-data dev dm-5 block 0x5778dff8 ("xfs_trans_read_buf") error 5 buf count 4096 > Jan 23 23:10:05 XXXXX kernel: BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 > Jan 23 23:10:05 XXXXX kernel: IP: [] xfs_da_do_buf+0x43e/0x592 [xfs] I'd be worried about those IO errors - i don't think that they were the cause of the oops, but it implies that the underlying device is bad in some way. That may have something to do with the reshape in progress which make me worry that the reshape is actually keeping your data safe.... As it is, the kernel crashed reading a directory buffer. It's hard to say what went wrong - can you take the kernel image and run: $ gdb (gdb) l *(xfs_da_do_buf+0x43e) And post the output so we can see what line number in the code the crash occurred at? That might provide a bit more of a clue to what the problem is. Cheers, Dave. -- Dave Chinner david@fromorbit.com From enquiries@abayomiibiyemi.nl Wed Jan 25 06:45:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PCjgj4246900 for ; Wed, 25 Jan 2012 06:45:44 -0600 X-ASG-Debug-ID: 1327495537-04bdf006bbc0c80001-NocioJ Received: from csmtp3.one.com (csmtp3.one.com [91.198.169.23]) by cuda.sgi.com with ESMTP id KXP974xGviOEn5YE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 25 Jan 2012 04:45:40 -0800 (PST) X-Barracuda-Envelope-From: enquiries@abayomiibiyemi.nl X-Barracuda-Apparent-Source-IP: 91.198.169.23 Received: from [41.58.86.68] (unknown [41.58.73.171]) by csmtp3.one.com (Postfix) with ESMTPA id 1FBA52410638 for ; Wed, 25 Jan 2012 12:45:35 +0000 (UTC) Message-Id: Mime-Version: 1.0 From: YOMMY To: "xfs" Reply-To: yommyk@india.com Subject: DOWNLOAD VERIFIED e-MAIL LISTS NOW AND PROMOTE YOUR BUSINESS Date: Wed, 25 Jan 2012 13:45:33 +0100 X-ASG-Orig-Subj: DOWNLOAD VERIFIED e-MAIL LISTS NOW AND PROMOTE YOUR BUSINESS X-Bounce-Tracking-Info: Content-type: text/plain; charset=iso-8859-1; format=flowed Content-transfer-encoding: quoted-printable X-Barracuda-Connect: csmtp3.one.com[91.198.169.23] X-Barracuda-Start-Time: 1327495540 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-Spam-Score: 1.80 X-Barracuda-Spam-Status: No, SCORE=1.80 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC7_SA440_FBF, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86651 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 1.80 BSF_SC7_SA440_FBF Custom Rule SA440_FBF DOWNLOAD VERIFIED e-MAIL LISTS NOW AND PROMOTE YOUR BUSINESS/SERVICE/ PRODUCT: We are selling valid email lists=2E Valid mail is very much necessary for y= our business=2E If you want to market your products or bring traffic to you= r website then you must send mails=2E Valid d mail list can fulfill your re= quirements=2E We have a large database of valid mails from around the world= that we are offering you at reasonable prices=2E The characteristics of our database are: - All valid mail lists=2E - No duplicate mails=2E SAMPLE e-Mails NIGERIAN MAILS - 100,000 emails - N29,900; 200,000 emails - N39,900 azonoye6@yahoo=2Eco=2Euk sackious2000@yahoo=2Ecom nitobi26@yahoo=2Ecom dayoajimuda@yahoo=2Ecom ladyajibola@yahoo=2Ecom oritokeibiwunmi@yahoo=2Ecom aiyeduntemitayo@yahoo=2Ecom mohammedmusa21@yahoo=2Ecom lizanlove@yahoo=2Ecom seunsugar4real@yahoo=2Ecom tynnubaby@yahoo=2Eco=2Euk bolajiyinka74@yahoo=2Ecom adetayoadeniran@yahoo=2Ecom olusolajohnson79@yahoo=2Ecom wole_tutu2002@yahoo=2Ecom tosynmerielis@yahoo=2Ecom dupefunmi@rocketmail=2Ecom ojuluwayo=2Ebankole@yahoo=2Ecom qeensinka@yahoo=2Ecom gabbittuol@yahoo=2Ecom iboroakpan@gmail=2Ecom lyricalm2000@yahoo=2Ecom kolajo=2Eolajide@ng=2Enestle=2Ecom lekan4lekan@yahoo=2Ecom tajudeenaremu92@yahoo=2Ecom jokejay2002@yahoo=2Ecom jobern580@yahoo=2Ecom GHANA MAILS - 50,000mails - N15,500 gh@50logo=2Ejpg vbenson@mofep=2Egov=2Egh total_sen@hotmail=2Ecom cocobod@africaonline=2Ecom=2Egh info@chadecogroup=2Ecom ghnews@ghana=2Ecom info@gbcghana=2Ecom samueludo13@gmail=2Ecom james=2Egeorge35@hotmail=2Ecom info@ghanacafe=2Ecom goldcoastminerscompany@yahoo=2Ecom South Africa - 50,000mails - N19,900 Asia Mails (China, Japan, Singapore,Taiwan, etc) - 500,000 - N49,900 Middle East (Saudi Arabia, UAE, Iran, etc) - 50,000 - N19,900 Europe Mails - 50,000mails - N12,999 Worldwide Mails -10,000,000mails - N69,900 Australia & Oceania - 50,000mails - N12,999 South America Mails - 100,000mails - N15,999 Ebay Mails - 500,000mails - N19,900 Yahoo Mails - 500,000mails - N19,900 For enquiries on purchase, mail to: yommyk@india=2Ecom We accept payment by Paypal (yomi1004@gmail=2Ecom) Best Regards, YOMMY IBIYEMI 582, Ikorodu Road, Lagos Tel: 0806 489 1087 Notes: 1=2E Emails may not be delivered if your ISP is blocking Port 25 2=2E If your ISP IP is in Spamhaus's or RBL's list 3=2E If the recipient rejects your mail Non Opt-in Clause: We did not seek your consent to have this message sent t= o you To unsubscribe, mail "Unsubscribe" to yommyk@india=2Ecom We do not encourage spammers and fraudsters to patronise us KIND REGARDS, YOMMY TEL: 234 806 489 1087 From BATV+67d6094785b24908a779+3076+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 25 10:09:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PG9TIh013904 for ; Wed, 25 Jan 2012 10:09:31 -0600 X-ASG-Debug-ID: 1327507766-04cbb00c49dba70001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id tOaQPasvfua1KTMz (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 25 Jan 2012 08:09:26 -0800 (PST) X-Barracuda-Envelope-From: BATV+67d6094785b24908a779+3076+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rq5PZ-0002Dw-Ds; Wed, 25 Jan 2012 16:09:25 +0000 Date: Wed, 25 Jan 2012 11:09:25 -0500 From: Christoph Hellwig To: Mark Tinguely Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [patch 01/12] xfs: split tail_lsn assignments from log space wakeups Message-ID: <20120125160925.GA8360@infradead.org> X-ASG-Orig-Subj: Re: [patch 01/12] xfs: split tail_lsn assignments from log space wakeups References: <20111212141346.986825692@bombadil.infradead.org> <20111212141433.542846138@bombadil.infradead.org> <4F15C26A.30408@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F15C26A.30408@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327507766 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86665 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Tue, Jan 17, 2012 at 12:48:10PM -0600, Mark Tinguely wrote: > On 01/-10/63 13:59, Christoph Hellwig wrote: > >Currently xfs_log_move_tail has a tail_lsn argument that is horribly > >overloaded: it may contain either an actual lsn to assign to the log tail, > >0 as a special case to use the last sync LSN, or 1 to indicate that no tail > >LSN assignment should be performed, and we should opportunisticly wake up > >at least one task waiting for log space. > > I read the code as opportunistically waking at MOST one task per call. I guess my wording wasn't quite clear - the opportunistic flag makes sure at least one task is woken per call, but at most one of them wouldn't otherwise be woken. > Looks great. Just to be consistent, you could call the above as: > > + xfs_log_space_wake(ailp->xa_mount, true); Indeed. From BATV+67d6094785b24908a779+3076+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 25 10:10:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PGAhDN013989 for ; Wed, 25 Jan 2012 10:10:44 -0600 X-ASG-Debug-ID: 1327507842-04cb6c0c1da90f0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id udJ1Thy40CFGYOxT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 25 Jan 2012 08:10:42 -0800 (PST) X-Barracuda-Envelope-From: BATV+67d6094785b24908a779+3076+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rq5Qo-0003As-02; Wed, 25 Jan 2012 16:10:42 +0000 Date: Wed, 25 Jan 2012 11:10:41 -0500 From: Christoph Hellwig To: Mark Tinguely Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake Message-ID: <20120125161041.GB8360@infradead.org> X-ASG-Orig-Subj: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.065702206@bombadil.infradead.org> <4F1DB36E.3060207@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F1DB36E.3060207@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327507842 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86665 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 01:22:22PM -0600, Mark Tinguely wrote: > On 01/-10/63 13:59, Christoph Hellwig wrote: > >Remove the now unused opportunistic parameter, and use the the > >xlog_writeq_wake and xlog_reserveq_wake helpers now that we don't have > >to care about the opportunistic wakeups. > > > >Signed-off-by: Christoph Hellwig > > Looks good. My only concern is the way that xlog_grant_push_ail() > tries to kick start the writing of the log. It seems to me that a > combination of very large log requests could plug the log until the > next sync. How exactly? From bpm@sgi.com Wed Jan 25 10:15:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PGFLp1014236 for ; Wed, 25 Jan 2012 10:15:21 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id B0FF88F8033; Wed, 25 Jan 2012 08:15:17 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 1229B426DA7; Wed, 25 Jan 2012 10:15:21 -0600 (CST) Date: Wed, 25 Jan 2012 10:15:21 -0600 From: Ben Myers To: Christoph Hellwig Cc: Jan Kara , Alex Elder , stable@kernel.org, Carlos Maiolino , xfs@oss.sgi.com Subject: Re: [PATCH] xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() Message-ID: <20120125161521.GV8262@sgi.com> References: <1326307930-21251-1-git-send-email-jack@suse.cz> <20120111191330.GQ20739@sgi.com> <20120124180102.GB23671@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120124180102.GB23671@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) On Tue, Jan 24, 2012 at 01:01:02PM -0500, Christoph Hellwig wrote: > On Wed, Jan 11, 2012 at 01:13:30PM -0600, Ben Myers wrote: > > Looks good to me. > > > > Reviewed-by: Ben Myers > > Can you send it on to Linus ASAP, please? Yes. From bpm@oss.sgi.com Wed Jan 25 10:33:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PGXupZ016340 for ; Wed, 25 Jan 2012 10:33:56 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0PGXq4u016316; Wed, 25 Jan 2012 10:33:52 -0600 Date: Wed, 25 Jan 2012 10:33:52 -0600 Message-Id: <201201251633.q0PGXq4u016316@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-11431-gdcd6c92 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: d060646436233912178e6b9e3a7f30a41214220f X-Git-Newrev: dcd6c92267155e70a94b3927bce681ce74b80d1f This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated from d060646436233912178e6b9e3a7f30a41214220f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: hooks/post-receive -- XFS development tree From sandeen@redhat.com Wed Jan 25 10:35:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PGZADC016478 for ; Wed, 25 Jan 2012 10:35:10 -0600 X-ASG-Debug-ID: 1327509308-04bdf006bcde4b0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id AzOGIJ3OJyibABZh for ; Wed, 25 Jan 2012 08:35:09 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0PGYrmh016493 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 25 Jan 2012 11:34:53 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q0PGYoN7024245 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 25 Jan 2012 11:34:52 -0500 Message-ID: <4F202F2E.9000608@redhat.com> Date: Wed, 25 Jan 2012 10:34:54 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Amit Sahrawat CC: xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, LKML , Christoph Hellwig , Dave Chinner Subject: Re: Does Ext4 support parallel write similar to XFS? References: X-ASG-Orig-Subj: Re: Does Ext4 support parallel write similar to XFS? In-Reply-To: X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1327509308 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86667 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/24/12 11:19 PM, Amit Sahrawat wrote: > In XFS we can write parallel (i.,e we can make use of allocation > groups for writing process). If the files are kept in individual > directories, there is a possibility that first the blocks for that > files be used from individual allocation groups. If I start ‘4’ > writing process(cp 100MB_file //) – after writing is finished > – if I check the bmap – it does shows that initial allocation was from > individual allocation groups. > Even though in Ext4 also we do have groups – but I am not able to get > behavior similar to XFS. > If I check the file extents – the extents are in mixed form, the > allocation pattern is also very fragmented. > > Please share more on this. Also, if there is a possible exact test > case to check for parallel writes support. It seems that you are asking more about allocation policy than parallelism in general? With either filesystem, you could use preallocation to wind up with more contiguous files when you write them in parallel, though that requires some idea of the file size ahead of time. ext4 doesn't have that exact dir::group heuristic that xfs uses, but it does have other mechanisms and heuristics to try to get good file and directory layout. In general, ext4 tries to put new root directories into new groups, see comments above find_group_orlov(). Other directories tend to stay near their parent directory. So it's really the roots of dir trees that get spread across the disk in general. New non-dir inodes also tend to stay close to their parent. (I think I have that all right ...) The test you describe above does result in more contiguous allocation on xfs than on ext4, though - a quick check on kernel 3.2 yielded 2-3 extents per file on ext4, 1 extent per file for xfs. -Eric > Thanks & Regards, > Amit Sahrawat > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From bpm@sgi.com Wed Jan 25 11:12:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PHCj4p023493 for ; Wed, 25 Jan 2012 11:12:45 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id C50EB8F8040; Wed, 25 Jan 2012 09:12:41 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id A8B4B426DA7; Wed, 25 Jan 2012 11:12:44 -0600 (CST) Date: Wed, 25 Jan 2012 11:12:44 -0600 From: Ben Myers To: Stephen Rothwell Cc: linux-next@vger.kernel.org, xfs@oss.sgi.com Subject: XFS for-next branch Message-ID: <20120125171244.GX8262@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Hey Stephen, Could you pull XFS updates from git://oss.sgi.com/xfs/xfs.git for-next instead of from the oss/master branch for 3.3? Thanks, Ben From aedilger@gmail.com Wed Jan 25 12:06:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_72,MIME_QP_LONG_LINE,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PI6JUr035986 for ; Wed, 25 Jan 2012 12:06:19 -0600 X-ASG-Debug-ID: 1327514777-04cbb00c48e8bb0001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id yDNvuQZPLkTrvasu (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 25 Jan 2012 10:06:18 -0800 (PST) X-Barracuda-Envelope-From: aedilger@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lahd3 with SMTP id d3so2280333lah.26 for ; Wed, 25 Jan 2012 10:06:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=references:in-reply-to:mime-version:content-type:message-id :content-transfer-encoding:cc:x-mailer:from:subject:date:to; bh=nG847NHNR/a5u/ci1+jvcmlIYtDShA6N9LZ0agT5P34=; b=fzCdpW73gsNOz+6onC/4nKyG9Rk7qYwBixyKJ9B0zHk1T9OIWNiHNXQ2BYaQIPCr+T xSVgFC2Q60OVXXr/J0lIx5zdFrVmo6EGocqvrGsvc+OXxPc5GnxdhOyjy+BPYYIvZFFh unhUgdELq2CsEAcMPxh6UjsHiePoB4a0eAyVo= Received: by 10.112.85.73 with SMTP id f9mr4633189lbz.25.1327514776768; Wed, 25 Jan 2012 10:06:16 -0800 (PST) Received: from [192.168.10.170] (S0106002191d9348c.cg.shawcable.net. [68.147.208.101]) by mx.google.com with ESMTPS id i8sm878160lby.11.2012.01.25.10.06.11 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 25 Jan 2012 10:06:15 -0800 (PST) References: <4F202F2E.9000608@redhat.com> In-Reply-To: <4F202F2E.9000608@redhat.com> Mime-Version: 1.0 (1.0) Content-Type: text/plain; charset=utf-8 Message-Id: Content-Transfer-Encoding: quoted-printable Cc: Amit Sahrawat , "xfs@oss.sgi.com" , "linux-ext4@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , LKML , ChristophHellwig , Dave Chinner X-Mailer: iPhone Mail (9A405) From: Andreas Dilger Subject: Re: Does Ext4 support parallel write similar to XFS? Date: Wed, 25 Jan 2012 11:06:29 -0700 X-ASG-Orig-Subj: Re: Does Ext4 support parallel write similar to XFS? To: Eric Sandeen X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1327514777 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86673 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars On 2012-01-25, at 9:34, Eric Sandeen wrote: > On 1/24/12 11:19 PM, Amit Sahrawat wrote: >> In XFS we can write parallel (i.,e we can make use of allocation >> groups for writing process). If the files are kept in individual >> directories, there is a possibility that first the blocks for that >> files be used from individual allocation groups. If I start =E2=80=984=E2= =80=99 >> writing process(cp 100MB_file //) =E2=80=93 after writing is fini= shed >> =E2=80=93 if I check the bmap =E2=80=93 it does shows that initial alloca= tion was from >> individual allocation groups. >> Even though in Ext4 also we do have groups =E2=80=93 but I am not able to= get >> behavior similar to XFS. >> If I check the file extents =E2=80=93 the extents are in mixed form, the >> allocation pattern is also very fragmented. >>=20 >> Please share more on this. Also, if there is a possible exact test >> case to check for parallel writes support. >=20 > It seems that you are asking more about allocation policy than parallelism= > in general? With either filesystem, you could use preallocation to wind > up with more contiguous files when you write them in parallel, though > that requires some idea of the file size ahead of time. >=20 > ext4 doesn't have that exact dir::group heuristic that xfs uses, > but it does have other mechanisms and heuristics to try to get good > file and directory layout. >=20 > In general, ext4 tries to put new root directories into new groups, see > comments above find_group_orlov(). Other directories tend to stay near > their parent directory. So it's really the roots of dir trees that > get spread across the disk in general. New non-dir inodes also tend to > stay close to their parent. (I think I have that all right ...) Note that this policy of new subdirectory placement (and indirectly the plac= ement of files created therein) can be tuned by userspace by setting the "to= pdir" flag via setattr on the parent directory.=20 This will push new subdirs created in that dir to a new group, which would I= n turn allow the files to allocate from that group. It is intended to be set= on directories like /home where files within the subdirs are unrelated. Whether that is enough for your usage is unclear.=20 > The test you describe above does result in more contiguous allocation on > xfs than on ext4, though - a quick check on kernel 3.2 yielded 2-3 > extents per file on ext4, 1 extent per file for xfs. >=20 > -Eric >=20 >> Thanks & Regards, >> Amit Sahrawat >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >=20 > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From tinguely@sgi.com Wed Jan 25 13:09:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_33, J_CHICKENPOX_35 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PJ9DwK048953 for ; Wed, 25 Jan 2012 13:09:13 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 280138F8054; Wed, 25 Jan 2012 11:09:10 -0800 (PST) Message-ID: <4F205358.5070702@sgi.com> Date: Wed, 25 Jan 2012 13:09:12 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.065702206@bombadil.infradead.org> <4F1DB36E.3060207@sgi.com> <20120125161041.GB8360@infradead.org> In-Reply-To: <20120125161041.GB8360@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/25/12 10:10, Christoph Hellwig wrote: > On Mon, Jan 23, 2012 at 01:22:22PM -0600, Mark Tinguely wrote: >> On 01/-10/63 13:59, Christoph Hellwig wrote: >>> Remove the now unused opportunistic parameter, and use the the >>> xlog_writeq_wake and xlog_reserveq_wake helpers now that we don't have >>> to care about the opportunistic wakeups. >>> >>> Signed-off-by: Christoph Hellwig >> >> Looks good. My only concern is the way that xlog_grant_push_ail() >> tries to kick start the writing of the log. It seems to me that a >> combination of very large log requests could plug the log until the >> next sync. > > How exactly? > Thanks for giving me enough rope to hang myself :) I looked at it again and it could plug for a while, but not necessarily until the next sync. I was looking at the fact that when the log is full, xlog_grant_push_ail() will overlap cleaning threshold lsn for a bunch of requests come in. This is because xlog_grant_push_ail() uses the current tail when calculating cleaning threshold. This cleaning overlap will happen until xfs_ail_push() cleans the space and the moves the log tail. If a (unrealistically) big request sized greater than MAX(log size/4, 256) follows some other requests then the big request determines the amount cleaned out of the queue. When the space is cleaned out, the earlier processes waiting for the log are awoken and use up the cleaned space, and there will not be enough space for the big request. Future requests will clean up to MAX(their request size, log size/4, 256). This will not be enough to satisfy the big request at the front of the request queue. We will have to wait another cleaning cycle for the tail to move and another log space request but even this big request would eventually get satisfied. --Mark Tinguely From bpm@sgi.com Wed Jan 25 14:25:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PKPKbt069037 for ; Wed, 25 Jan 2012 14:25:20 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8CC4CAC005; Wed, 25 Jan 2012 12:25:16 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 907DB426DA7; Wed, 25 Jan 2012 14:25:19 -0600 (CST) To: torvalds@linux-foundation.org Subject: [GIT PULL] XFS update for 3.3-rc1 Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Message-Id: <20120125202519.907DB426DA7@whiskey.americas.sgi.com> Date: Wed, 25 Jan 2012 14:25:19 -0600 (CST) From: bpm@sgi.com (Ben Myers) Hi Linus, Please pull in the following bugfix for xfs. We forgot to drop a lock on error in xfs_readlink. It hasn't been through -next yet, but there is no -next tree tomorrow. The fix is clear so I'm sending this request today. Thanks, Ben The following changes since commit dcd6c92267155e70a94b3927bce681ce74b80d1f: Linus Torvalds (1): Linux 3.3-rc1 are available in the git repository at: git://oss.sgi.com/xfs/xfs.git for-linus Jan Kara (1): xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() fs/xfs/xfs_vnodeops.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) From sandeen@sandeen.net Wed Jan 25 15:11:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PLBf3f071760 for ; Wed, 25 Jan 2012 15:11:42 -0600 X-ASG-Debug-ID: 1327525900-04cb6c0c0fc4440001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id JsDk6EwdZeC51zvM for ; Wed, 25 Jan 2012 13:11:40 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 42285496335B; Wed, 25 Jan 2012 15:11:40 -0600 (CST) Message-ID: <4F20700B.8060307@sandeen.net> Date: Wed, 25 Jan 2012 15:11:39 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: Eric Sandeen , ext4 development , xfs-oss Subject: [PATCH V2] xfstests: mount other filesystems with selinux context as well References: <4ECD3262.105@redhat.com> <20111128110228.GC13766@infradead.org> <4F1862FC.1050401@sandeen.net> <20120124174500.GB9853@infradead.org> X-ASG-Orig-Subj: [PATCH V2] xfstests: mount other filesystems with selinux context as well In-Reply-To: <20120124174500.GB9853@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327525900 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- For some reason, non-xfs filesystems aren't getting mounted with the selinux context; perhaps because none of the xattr tests used to work on anything but xfs? Anyway, 062 fails for extN unless we mount with the fs-wide context. Signed-off-by: Eric Sandeen --- ps: eparis says this should work for NFS as well, let's go for it and if infrequently tested filesystems have trouble we can exclude them as necessary. diff --git a/common.rc b/common.rc index 6231457..602513a 100644 --- a/common.rc +++ b/common.rc @@ -72,11 +72,11 @@ _mount_opts() # nfs_t is a "liberal" context so we can use it. if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then SELINUX_MOUNT_OPTIONS="-o context=system_u:object_r:nfs_t:s0" + export SELINUX_MOUNT_OPTIONS fi case $FSTYP in xfs) - export SELINUX_MOUNT_OPTIONS export MOUNT_OPTIONS=$XFS_MOUNT_OPTIONS ;; udf) From sandeen@sandeen.net Wed Jan 25 15:13:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_54, LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PLDW8D071878 for ; Wed, 25 Jan 2012 15:13:32 -0600 X-ASG-Debug-ID: 1327526010-04bdf006bafc8f0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ACYjb0FBpeQaEGKI for ; Wed, 25 Jan 2012 13:13:30 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id B9C6E496335B; Wed, 25 Jan 2012 15:13:29 -0600 (CST) Message-ID: <4F207079.6050401@sandeen.net> Date: Wed, 25 Jan 2012 15:13:29 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Dave Chinner CC: Eric Sandeen , ext4 development , Eryu Guan , xfs-oss Subject: [PATCH V3] xfstests: make 275 pass References: <4F04A6E6.1090304@redhat.com> <4F04BC81.1000207@redhat.com> <20120104231725.GB24466@dastard> X-ASG-Orig-Subj: [PATCH V3] xfstests: make 275 pass In-Reply-To: <20120104231725.GB24466@dastard> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327526010 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Ok, this is a significant rework of 275, which made too many assumptions about details of space usage and failed on several filesystems (it passed on xfs, but only by accident). This new version tries to leave about 256k free, then tries a single 1M IO, and fails only if 0 bytes are written. It also sends a lot more to $seq.full for debugging on failure and fixes a few other stylistic things. Signed-off-by: Eric Sandeen --- V2: bunch of fixups from V1 ;) V3: use ls for size check, and 2g fs size diff --git a/275 b/275 index 214262e..69b2895 100755 --- a/275 +++ b/275 @@ -1,8 +1,8 @@ #! /bin/bash # FS QA Test No. 275 # -# The posix write test. when write size is larger than disk free size, -# should write as more as possible +# The posix write test. When write size is larger than disk free size, +# should write as much as possible until ENOSPC. # #----------------------------------------------------------------------- # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. @@ -30,13 +30,12 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ -status=0 # success is the default! +status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -f $SCRATCH_MNT/* $tmp.* _scratch_unmount } @@ -49,41 +48,48 @@ _supported_os IRIX Linux _require_scratch echo "------------------------------" -echo "write lack test" +echo "write until ENOSPC test" echo "------------------------------" rm -f $seq.full umount $SCRATCH_DEV 2>/dev/null -_scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 +_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 _scratch_mount rm -rf $SCRATCH_MNT/* -cd $SCRATCH_MNT -dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 -if [ $? -ne 0 ] -then - echo "create file err" - status=1 - exit -fi +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seq.full 2>&1 +[ $? -ne 0 ] && _fail "Error creating file" -dd if=/dev/zero of=tmp2 bs=1M >/dev/null 2>&1 -dd if=/dev/zero of=tmp3 bs=4K >/dev/null 2>&1 +# Attempt to completely fill fs +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=1M >>$seq.full 2>&1 sync +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K >>$seq.full 2>&1 +sync +# Last effort, use O_SYNC +dd if=/dev/zero of=$SCRATCH_MNT/tmp4 bs=4K oflag=sync >>$seq.full 2>&1 +# Save space usage info to the full file +echo "Pre rm space:" >> $seq.full +df $SCRATCH_MNT >>$seq.full 2>&1 -rm -f tmp1 +# Should leave approx 256k free +rm -f $SCRATCH_MNT/tmp1 sync +echo "Post rm space:" >> $seq.full +df $SCRATCH_MNT >>$seq.full 2>&1 +_freespace=`df -k $SCRATCH_MNT | tail -n 1 | awk '{print $4}'` +[ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem" + +# Try a write larger than available space +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seq.full 2>&1 +echo "Bytes written until ENOSPC:" >>$seq.full +du $SCRATCH_MNT/tmp1 >>$seq.full -dd if=/dev/zero of=tmp1 bs=8K count=1 >/dev/null 2>&1 -_filesize=`du tmp1 | awk '{print $1}'` -if [ $_filesize -ne 4 ] -then - echo "write file err" - status=1 - exit -fi +# And at least some of it should succeed. +_filesize=`ls -l $SCRATCH_MNT/tmp1 | awk '{print $5}'` +[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." echo "done" +status=0 exit diff --git a/275.out b/275.out index 30af43c..69b9d52 100644 --- a/275.out +++ b/275.out @@ -1,5 +1,5 @@ QA output created by 275 ------------------------------ -write lack test +write until ENOSPC test ------------------------------ done From BATV+67d6094785b24908a779+3076+infradead.org+hch@bombadil.srs.infradead.org Wed Jan 25 15:14:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PLEgAE071943 for ; Wed, 25 Jan 2012 15:14:42 -0600 X-ASG-Debug-ID: 1327526081-04cb6c0c0fc47f0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 7djwmycFbVGMAhOm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 25 Jan 2012 13:14:41 -0800 (PST) X-Barracuda-Envelope-From: BATV+67d6094785b24908a779+3076+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqAAw-00034i-8t; Wed, 25 Jan 2012 21:14:38 +0000 Date: Wed, 25 Jan 2012 16:14:38 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , Eric Sandeen , ext4 development , xfs-oss Subject: Re: [PATCH V2] xfstests: mount other filesystems with selinux context as well Message-ID: <20120125211438.GA11821@infradead.org> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: mount other filesystems with selinux context as well References: <4ECD3262.105@redhat.com> <20111128110228.GC13766@infradead.org> <4F1862FC.1050401@sandeen.net> <20120124174500.GB9853@infradead.org> <4F20700B.8060307@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F20700B.8060307@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327526081 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86685 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Jan 25, 2012 at 03:11:39PM -0600, Eric Sandeen wrote: > For some reason, non-xfs filesystems aren't getting mounted with > the selinux context; perhaps because none of the xattr tests used > to work on anything but xfs? > > Anyway, 062 fails for extN unless we mount with the fs-wide > context. > > Signed-off-by: Eric Sandeen > --- > > ps: eparis says this should work for NFS as well, let's go for > it and if infrequently tested filesystems have trouble we can > exclude them as necessary. Verifying that assumption isn't hard, please do it. From zhengda1936@gmail.com Wed Jan 25 15:20:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,J_CHICKENPOX_66,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PLKEIE072306 for ; Wed, 25 Jan 2012 15:20:14 -0600 X-ASG-Debug-ID: 1327526412-04cbb00c48fbe40001-NocioJ Received: from mail-yw0-f53.google.com (mail-yw0-f53.google.com [209.85.213.53]) by cuda.sgi.com with ESMTP id CE1egvK3SmSqRas0 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 25 Jan 2012 13:20:12 -0800 (PST) X-Barracuda-Envelope-From: zhengda1936@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.213.53 Received: by yhpp61 with SMTP id p61so338180yhp.26 for ; Wed, 25 Jan 2012 13:20:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=w7gPWLm3LB0KZZmKNjhHHjso+Ul9ZZwceX+r2qmtJhw=; b=IfGJGtkPJc/AyMF/LpUxCw4wm1TDa+VCSrb77CFfAj4GcADYvfJIIxnTu7+a63nLVG K9Wv+Px1nKUp0MLDdHXFManVcjVterxXnL9/pbFaNLEJlKWoOauE6tAo9rnDak03A1Hj 73TQauccMhzvnP82NeD96/TKm4NGokcEsyQz0= MIME-Version: 1.0 Received: by 10.236.75.163 with SMTP id z23mr27597094yhd.79.1327526412448; Wed, 25 Jan 2012 13:20:12 -0800 (PST) Received: by 10.146.223.22 with HTTP; Wed, 25 Jan 2012 13:20:12 -0800 (PST) In-Reply-To: <20120124035431.GD6922@dastard> References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> <20120124035431.GD6922@dastard> Date: Wed, 25 Jan 2012 16:20:12 -0500 Message-ID: Subject: Re: concurrent direct IO write in xfs From: Zheng Da X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs To: Dave Chinner Cc: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=20cf300513cc3e730204b760d47d X-Barracuda-Connect: mail-yw0-f53.google.com[209.85.213.53] X-Barracuda-Start-Time: 1327526412 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86686 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message --20cf300513cc3e730204b760d47d Content-Type: text/plain; charset=ISO-8859-1 Hello Dave, On Mon, Jan 23, 2012 at 10:54 PM, Dave Chinner wrote: > > > >> > So the test case is pretty simple and I think it's easy to > reproduce it. > > >> > It'll be great if you can try the test case. > > >> > > >> Can you post your test code so I know what I test is exactly what > > >> you are running? > > >> > > > I can do that. My test code gets very complicated now. I need to > simplify > > > it. > > > > > Here is the code. It's still a bit long. I hope it's OK. > > You can run the code like "rand-read file option=direct pages=1048576 > > threads=8 access=write/read". > > With 262144 pages on a 2Gb ramdisk, the results I get on 3.2.0 are > > Threads Read Write > 1 0.92s 1.49s > 2 0.51s 1.20s > 4 0.31s 1.34s > 8 0.22s 1.59s > 16 0.23s 2.24s > > the contention is on the ip->i_ilock, and the newsize update is one > of the offenders It probably needs this change to > xfs_aio_write_newsize_update(): > > - if (new_size == ip->i_new_size) { > + if (new_size && new_size == ip->i_new_size) { > > to avoid the lock being taken here. > > But all that newsize crap is gone in the current git Linus tree, > so how much would that gains us: > > Threads Read Write > 1 0.88s 0.85s > 2 0.54s 1.20s > 4 0.31s 1.23s > 8 0.27s 1.40s > 16 0.25s 2.36s > > Pretty much nothing. IOWs, it's just like I suspected - you are > doing so many write IOs that you are serialising on the extent > lookup and write checks which use exclusive locking.. > > Given that it is 2 lock traversals per write IO, we're limiting at > about 4-500,000 exclusive lock grabs per second and decreasing as > contention goes up. > > For reads, we are doing 2 shared (nested) lookups per read IO, we > appear to be limiting at around 2,000,000 shared lock grabs per > second. Ahmdals law is kicking in here, but it means if we could > make the writes to use a shared lock, it would at least scale like > the reads for this "no metadata modification except for mtime" > overwrite case. > > I don't think that the generic write checks absolutely need > exclusive locking - we probably could get away with a shared lock > and only fall back to exclusive when we need to do EOF zeroing. > Similarly, for the block mapping code if we don't need to do > allocation, a shared lock is all we need. So maybe in that case for > direct IO when create == 1, we can do a read lookup first and only > grab the lock exclusively if that falls in a hole and requires > allocation..... Do you think if you will provide a patch for the changes? Thanks, Da --20cf300513cc3e730204b760d47d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello Dave,=A0

On Mon, Jan 23, 2012 at 10= :54 PM, Dave Chinner <david@fromorbit.com> wrote:
> >> > So the test case is pretty simple and I think it's e= asy to reproduce it.
> >> > It'll be great if you can try the test case.
> >>
> >> Can you post your test code so I know what I test is exactly = what
> >> you are running?
> >>
> > I can do that. My test code gets very complicated now. I need to = simplify
> > it.
> >
> Here is the code. It's still a bit long. I hope it's OK.
> You can run the code like "rand-read file option=3Ddirect pages= =3D1048576
> threads=3D8 access=3Dwrite/read".

With 262144 pages on a 2Gb ramdisk, the results I get on 3.2.0 are
Threads =A0 =A0 =A0 =A0 Read =A0 =A0Write
=A0 =A01 =A0 =A0 =A0 =A0 =A0 0.92s =A0 1.49s
=A0 =A02 =A0 =A0 =A0 =A0 =A0 0.51s =A0 1.20s
=A0 =A04 =A0 =A0 =A0 =A0 =A0 0.31s =A0 1.34s
=A0 =A08 =A0 =A0 =A0 =A0 =A0 0.22s =A0 1.59s
=A0 16 =A0 =A0 =A0 =A0 =A0 0.23s =A0 2.24s

the contention is on the ip->i_ilock, and the newsize update is one
of the offenders It probably needs this change to
xfs_aio_write_newsize_update():

- =A0 =A0 =A0 =A0if (new_size =3D=3D ip->i_new_size) {
+ =A0 =A0 =A0 =A0if (new_size && new_size =3D=3D ip->i_new_size)= {

to avoid the lock being taken here.

But all that newsize crap is gone in the current git Linus tree,
so how much would that gains us:

Threads =A0 =A0 =A0 =A0 Read =A0 =A0Write
=A0 =A01 =A0 =A0 =A0 =A0 =A0 0.88s =A0 0.85s
=A0 =A02 =A0 =A0 =A0 =A0 =A0 0.54s =A0 1.20s
=A0 =A04 =A0 =A0 =A0 =A0 =A0 0.31s =A0 1.23s
=A0 =A08 =A0 =A0 =A0 =A0 =A0 0.27s =A0 1.40s
=A0 16 =A0 =A0 =A0 =A0 =A0 0.25s =A0 2.36s

Pretty much nothing. IOWs, it's just like I suspected - you are
doing so many write IOs that you are serialising on the extent
lookup and write checks which use exclusive locking..

Given that it is 2 lock traversals per write IO, we're limiting at
about 4-500,000 exclusive lock grabs per second and decreasing as
contention goes up.

For reads, we are doing 2 shared (nested) lookups per read IO, we
appear to be limiting at around 2,000,000 shared lock grabs per
second. Ahmdals law is kicking in here, but it means if we could
make the writes to use a shared lock, it would at least scale like
the reads for this "no metadata modification except for mtime" overwrite case.

I don't think that the generic write checks absolutely need
exclusive locking - we probably could get away with a shared lock
and only fall back to exclusive when we need to do EOF zeroing.
Similarly, for the block mapping code if we don't need to do
allocation, a shared lock is all we need. So maybe in that case for
direct IO when create =3D=3D 1, we can do a read lookup first and only
grab the lock exclusively if that falls in a hole and requires
allocation.....

Do you think if you will pr= ovide a patch for the changes?

Thanks,
D= a
--20cf300513cc3e730204b760d47d-- From sandeen@sandeen.net Wed Jan 25 15:28:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PLSEfV073532 for ; Wed, 25 Jan 2012 15:28:14 -0600 X-ASG-Debug-ID: 1327526893-04bdf006bafd890001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id FpvhlUpiRxAvCnlL for ; Wed, 25 Jan 2012 13:28:13 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id C7694496335B; Wed, 25 Jan 2012 15:28:12 -0600 (CST) Message-ID: <4F2073EC.80208@sandeen.net> Date: Wed, 25 Jan 2012 15:28:12 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: Eric Sandeen , ext4 development , xfs-oss Subject: Re: [PATCH V2] xfstests: mount other filesystems with selinux context as well References: <4ECD3262.105@redhat.com> <20111128110228.GC13766@infradead.org> <4F1862FC.1050401@sandeen.net> <20120124174500.GB9853@infradead.org> <4F20700B.8060307@sandeen.net> <20120125211438.GA11821@infradead.org> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: mount other filesystems with selinux context as well In-Reply-To: <20120125211438.GA11821@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327526893 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86686 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/25/12 3:14 PM, Christoph Hellwig wrote: > On Wed, Jan 25, 2012 at 03:11:39PM -0600, Eric Sandeen wrote: >> For some reason, non-xfs filesystems aren't getting mounted with >> the selinux context; perhaps because none of the xattr tests used >> to work on anything but xfs? >> >> Anyway, 062 fails for extN unless we mount with the fs-wide >> context. >> >> Signed-off-by: Eric Sandeen >> --- >> >> ps: eparis says this should work for NFS as well, let's go for >> it and if infrequently tested filesystems have trouble we can >> exclude them as necessary. > > Verifying that assumption isn't hard, please do it. > # mount -t nfs -o context=system_u:object_r:nfs_t:s0 localhost:/mnt/export /mnt/test # grep /mnt/export /proc/mounts localhost:/mnt/export /mnt/test nfs4 rw,context=system_u:object_r:nfs_t:s0,relatime,vers=4,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,minorversion=0,local_lock=none,addr=127.0.0.1 0 0 From sandeen@sandeen.net Wed Jan 25 15:38:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PLcuB6074994 for ; Wed, 25 Jan 2012 15:38:57 -0600 X-ASG-Debug-ID: 1327527534-04cbb00c47fcf90001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id yR4CO18O8O5huxPk for ; Wed, 25 Jan 2012 13:38:54 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id A7909494FF46; Wed, 25 Jan 2012 15:38:54 -0600 (CST) Message-ID: <4F20766E.9040902@sandeen.net> Date: Wed, 25 Jan 2012 15:38:54 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Eric Sandeen CC: Theodore Tso , "linux-ext4@vger.kernel.org" , Yu Jian , Andreas Dilger , xfs-oss Subject: [PATCH V2] xfstests: Sort recursive getfattr output in 062 References: <4EC10664.1080501@tuxadero.com> <20111115142246.GA7516@thunk.org> <246EA1CC-3C33-4D41-80C0-2331C426EBB0@whamcloud.com> <4ECA4282.5020908@whamcloud.com> <401CC4FF-8955-4D5F-B620-5C39AF566123@mit.edu> <4ECB2ADE.3010007@redhat.com> <4ECD28D1.1080800@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfstests: Sort recursive getfattr output in 062 In-Reply-To: <4ECD28D1.1080800@redhat.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327527534 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86686 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Test 062 was made "generic" a while back, but it fails on any filesystem which returns getfattr -R results (aka readdir results) in something other than inode-order. With a little awk-fu we can sort the records from getfattr -R so that the output is the same for xfs as well as ext4, etc. Also filter out lost+found which extN creates at mkfs time, but some other filesystems do not. Signed-off-by: Eric Sandeen - --- V2: move sorting function into common.attr diff --git a/062 b/062 index f666e1b..9800e33 100755 - --- a/062 +++ b/062 @@ -67,7 +67,7 @@ _create_test_bed() mknod $SCRATCH_MNT/dev/c c 0 0 mknod $SCRATCH_MNT/dev/p p # sanity check - - find $SCRATCH_MNT | LC_COLLATE=POSIX sort | _filter_scratch + find $SCRATCH_MNT | LC_COLLATE=POSIX sort | _filter_scratch | grep -v "lost+found" } # real QA test starts here @@ -160,18 +160,18 @@ _extend_test_bed() # whack a symlink in the middle, just to be difficult ln -s $SCRATCH_MNT/here/up $SCRATCH_MNT/descend/and # dump out our new starting point - - find $SCRATCH_MNT | LC_COLLATE=POSIX sort | _filter_scratch + find $SCRATCH_MNT | LC_COLLATE=POSIX sort | _filter_scratch | grep -v "lost+found" } _extend_test_bed echo echo "*** directory descent with us following symlinks" - -getfattr -h -L -R -m '.' -e hex $SCRATCH_MNT +getfattr -h -L -R -m '.' -e hex $SCRATCH_MNT | _sort_getfattr_output echo echo "*** directory descent without following symlinks" - -getfattr -h -P -R -m '.' -e hex $SCRATCH_MNT +getfattr -h -P -R -m '.' -e hex $SCRATCH_MNT | _sort_getfattr_output # diff --git a/062.out b/062.out index 699254a..8cc3c65 100644 - --- a/062.out +++ b/062.out @@ -508,21 +508,21 @@ SCRATCH_MNT/lnk SCRATCH_MNT/reg *** directory descent with us following symlinks - -# file: SCRATCH_MNT/reg - -trusted.name=0xbabe - -trusted.name3=0xdeface - -user.name=0xbabe - -user.name3=0xdeface +# file: SCRATCH_MNT/descend +user.1=0x3233 +user.x=0x797a - -# file: SCRATCH_MNT/dir - -trusted.name=0xbabe - -trusted.name3=0xdeface - -user.name=0xbabe - -user.name3=0xdeface +# file: SCRATCH_MNT/descend/and/ascend +trusted.9=0x3837 +trusted.a=0x6263 - -# file: SCRATCH_MNT/lnk - -trusted.name=0xbabe - -trusted.name3=0xdeface +# file: SCRATCH_MNT/descend/down +user.1=0x3233 +user.x=0x797a + +# file: SCRATCH_MNT/descend/down/here +user.1=0x3233 +user.x=0x797a # file: SCRATCH_MNT/dev/b trusted.name=0xbabe @@ -536,6 +536,12 @@ trusted.name3=0xdeface trusted.name=0xbabe trusted.name3=0xdeface +# file: SCRATCH_MNT/dir +trusted.name=0xbabe +trusted.name3=0xdeface +user.name=0xbabe +user.name3=0xdeface + # file: SCRATCH_MNT/here trusted.9=0x3837 trusted.a=0x6263 @@ -548,6 +554,18 @@ trusted.a=0x6263 trusted.9=0x3837 trusted.a=0x6263 +# file: SCRATCH_MNT/lnk +trusted.name=0xbabe +trusted.name3=0xdeface + +# file: SCRATCH_MNT/reg +trusted.name=0xbabe +trusted.name3=0xdeface +user.name=0xbabe +user.name3=0xdeface + + +*** directory descent without following symlinks # file: SCRATCH_MNT/descend user.1=0x3233 user.x=0x797a @@ -560,28 +578,6 @@ user.x=0x797a user.1=0x3233 user.x=0x797a - -# file: SCRATCH_MNT/descend/and/ascend - -trusted.9=0x3837 - -trusted.a=0x6263 - - - - - -*** directory descent without following symlinks - -# file: SCRATCH_MNT/reg - -trusted.name=0xbabe - -trusted.name3=0xdeface - -user.name=0xbabe - -user.name3=0xdeface - - - -# file: SCRATCH_MNT/dir - -trusted.name=0xbabe - -trusted.name3=0xdeface - -user.name=0xbabe - -user.name3=0xdeface - - - -# file: SCRATCH_MNT/lnk - -trusted.name=0xbabe - -trusted.name3=0xdeface - - # file: SCRATCH_MNT/dev/b trusted.name=0xbabe trusted.name3=0xdeface @@ -594,6 +590,12 @@ trusted.name3=0xdeface trusted.name=0xbabe trusted.name3=0xdeface +# file: SCRATCH_MNT/dir +trusted.name=0xbabe +trusted.name3=0xdeface +user.name=0xbabe +user.name3=0xdeface + # file: SCRATCH_MNT/here trusted.9=0x3837 trusted.a=0x6263 @@ -606,17 +608,15 @@ trusted.a=0x6263 trusted.9=0x3837 trusted.a=0x6263 - -# file: SCRATCH_MNT/descend - -user.1=0x3233 - -user.x=0x797a - - - -# file: SCRATCH_MNT/descend/down - -user.1=0x3233 - -user.x=0x797a +# file: SCRATCH_MNT/lnk +trusted.name=0xbabe +trusted.name3=0xdeface - -# file: SCRATCH_MNT/descend/down/here - -user.1=0x3233 - -user.x=0x797a +# file: SCRATCH_MNT/reg +trusted.name=0xbabe +trusted.name3=0xdeface +user.name=0xbabe +user.name3=0xdeface diff --git a/common.attr b/common.attr index 3e2ba85..b49d990 100644 - --- a/common.attr +++ b/common.attr @@ -176,6 +176,13 @@ _require_attrs() rm -f $TEST_DIR/syscalltest.out } +# getfattr -R returns info in readdir order which varies from fs to fs. +# This sorts the output by filename +_sort_getfattr_output() +{ + awk '{a[FNR]=$0}END{n = asort(a); for(i=1; i <= n; i++) print a[i]"\n"}' RS='' +} + # set maximum total attr space based on fs type if [ "$FSTYP" == "xfs" -o "$FSTYP" == "udf" ]; then MAX_ATTRS=1000 -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQIcBAEBAgAGBQJPIHZtAAoJECCuFpLhPd7g2yMP/1VU2RhD8gdfpJIQKGvZjurP XGmv2tLY/3eDWTwbpm3E5m3EmXIAZpq+ahUYT9C+I8afw0oLv4zggAQ3M6P20JlM dM/M7imNHYfafIMr7wIw0+Iv0pt/tpDv3cm2kxJDJq+yW88Y+tRG/ifU8uSjREyX WBSqKjo3mJ0CJ03Chh9xWDK7AV4reYW3cxlCNMMzUrRPho7hWIrZN58GhDO4esqa x11eFp4qk6I5ApExfpa5PJIGTT7xepCsQsDSaf2HNKzSEg3c5fzV43nHUFl+qRNH FQ0CPx10VMhxtr3RZI7laN01yHk5qWjMFB9ufldot6Xv/CFwU++zBVH21IwKAgvR D/tihuxUf8Sllpa0+DuMTuobg2cZuvlyshkWeU4YGAbyFfxirPNVjqEcnfnIMnoA +C3Sc/8DTd70C8WG9M5ON9sMmGtJr/s93OAZMwiLHGvBC1GZf51BvAI+l7ln3Ug3 jws77r4x1P01da6ciUsESNibCrilCiw3Q2XcYJU/VfbxpFZ0ro0ib3wA4O654vqN V38zh7BOipn7ukWIn8KRc09d9X/PqsqeFNVaLJA+tMsxH021J8uluG4nTmn3a+jM t79YFK0JccMk8t0ShCTUjhnhHXwdrVVs8MCCghc9QoYg2/HEQrcDPKft69hM9UTL OrK3+QKMf3JATAYdgXSg =w2HJ -----END PGP SIGNATURE----- From david@fromorbit.com Wed Jan 25 16:25:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PMPL5L078209 for ; Wed, 25 Jan 2012 16:25:22 -0600 X-ASG-Debug-ID: 1327530319-04bdf006ba100df0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id dGsTrcu9nliyrmXh for ; Wed, 25 Jan 2012 14:25:19 -0800 (PST) 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: Av0EAKyAIE95LElR/2dsb2JhbABDrkOBBoFyAQEFJxMcFg0QCAMYLhQlAyETwBQTiQADBgMGCQMHAhAGBQeDXgEFBAUQBoM1BJUdkmY Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail04.adl6.internode.on.net with ESMTP; 26 Jan 2012 08:55:18 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RqBHJ-0001L0-2a; Thu, 26 Jan 2012 09:25:17 +1100 Date: Thu, 26 Jan 2012 09:25:17 +1100 From: Dave Chinner To: Zheng Da Cc: xfs@oss.sgi.com Subject: Re: concurrent direct IO write in xfs Message-ID: <20120125222517.GS15102@dastard> X-ASG-Orig-Subj: Re: concurrent direct IO write in xfs References: <20120116232549.GC6922@dastard> <20120123051155.GI15102@dastard> <20120124035431.GD6922@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1327530319 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86686 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jan 25, 2012 at 04:20:12PM -0500, Zheng Da wrote: > Hello Dave, > > On Mon, Jan 23, 2012 at 10:54 PM, Dave Chinner wrote: > > > > > >> > So the test case is pretty simple and I think it's easy to > > reproduce it. > > > >> > It'll be great if you can try the test case. > > > >> > > > >> Can you post your test code so I know what I test is exactly what > > > >> you are running? > > > >> > > > > I can do that. My test code gets very complicated now. I need to > > simplify > > > > it. > > > > > > > Here is the code. It's still a bit long. I hope it's OK. > > > You can run the code like "rand-read file option=direct pages=1048576 > > > threads=8 access=write/read". > > > > With 262144 pages on a 2Gb ramdisk, the results I get on 3.2.0 are > > > > Threads Read Write > > 1 0.92s 1.49s > > 2 0.51s 1.20s > > 4 0.31s 1.34s > > 8 0.22s 1.59s > > 16 0.23s 2.24s > > > > the contention is on the ip->i_ilock, and the newsize update is one > > of the offenders It probably needs this change to > > xfs_aio_write_newsize_update(): > > > > - if (new_size == ip->i_new_size) { > > + if (new_size && new_size == ip->i_new_size) { > > > > to avoid the lock being taken here. > > > > But all that newsize crap is gone in the current git Linus tree, > > so how much would that gains us: > > > > Threads Read Write > > 1 0.88s 0.85s > > 2 0.54s 1.20s > > 4 0.31s 1.23s > > 8 0.27s 1.40s > > 16 0.25s 2.36s > > > > Pretty much nothing. IOWs, it's just like I suspected - you are > > doing so many write IOs that you are serialising on the extent > > lookup and write checks which use exclusive locking.. > > > > Given that it is 2 lock traversals per write IO, we're limiting at > > about 4-500,000 exclusive lock grabs per second and decreasing as > > contention goes up. > > > > For reads, we are doing 2 shared (nested) lookups per read IO, we > > appear to be limiting at around 2,000,000 shared lock grabs per > > second. Ahmdals law is kicking in here, but it means if we could > > make the writes to use a shared lock, it would at least scale like > > the reads for this "no metadata modification except for mtime" > > overwrite case. > > > > I don't think that the generic write checks absolutely need > > exclusive locking - we probably could get away with a shared lock > > and only fall back to exclusive when we need to do EOF zeroing. > > Similarly, for the block mapping code if we don't need to do > > allocation, a shared lock is all we need. So maybe in that case for > > direct IO when create == 1, we can do a read lookup first and only > > grab the lock exclusively if that falls in a hole and requires > > allocation..... > > > Do you think if you will provide a patch for the changes? I'm still thinking on it. I do have other work to do right now, so this is low priority. If it appears safe to do, then I'll write a patch and propose it. If it can't be made safe for all cases, then you'll have to think of some other way to achieve what you want from your application. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Jan 25 16:55:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0PMtdpT082016 for ; Wed, 25 Jan 2012 16:55:39 -0600 X-ASG-Debug-ID: 1327532136-04cbb00c49103640001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id pGfeAhsE7cyAIU1V for ; Wed, 25 Jan 2012 14:55:37 -0800 (PST) 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: Av8EAKKHIE95LElR/2dsb2JhbABChQmpO4EGgXIBAQUjDwEjIxAIAQIYAgImAgIUJQMhE64+kVUTgRyHYAEGBgkFBAMHAhAGBQcFg1kBBQQFEAaCH4EWBJUdkmY Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail04.adl6.internode.on.net with ESMTP; 26 Jan 2012 09:25:36 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RqBkd-0001OX-Fn; Thu, 26 Jan 2012 09:55:35 +1100 Date: Thu, 26 Jan 2012 09:55:35 +1100 From: Dave Chinner To: Eric Sandeen Cc: Amit Sahrawat , xfs@oss.sgi.com, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, LKML , Christoph Hellwig Subject: Re: Does Ext4 support parallel write similar to XFS? Message-ID: <20120125225535.GU15102@dastard> X-ASG-Orig-Subj: Re: Does Ext4 support parallel write similar to XFS? References: <4F202F2E.9000608@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4F202F2E.9000608@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: 1327532137 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86686 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jan 25, 2012 at 10:34:54AM -0600, Eric Sandeen wrote: > On 1/24/12 11:19 PM, Amit Sahrawat wrote: > > In XFS we can write parallel (i.,e we can make use of allocation > > groups for writing process). If the files are kept in individual > > directories, there is a possibility that first the blocks for that > > files be used from individual allocation groups. If I start ‘4’ > > writing process(cp 100MB_file //) – after writing is finished > > – if I check the bmap – it does shows that initial allocation was from > > individual allocation groups. > > Even though in Ext4 also we do have groups – but I am not able to get > > behavior similar to XFS. > > If I check the file extents – the extents are in mixed form, the > > allocation pattern is also very fragmented. > > > > Please share more on this. Also, if there is a possible exact test > > case to check for parallel writes support. > > It seems that you are asking more about allocation policy than parallelism > in general? With either filesystem, you could use preallocation to wind > up with more contiguous files when you write them in parallel, though > that requires some idea of the file size ahead of time. > > ext4 doesn't have that exact dir::group heuristic that xfs uses, > but it does have other mechanisms and heuristics to try to get good > file and directory layout. XFs has different allocation policies according to mount options used. inode32 (default for > 1TB), inode64 (default for <1TB) and filestreams. Each will give you different layouts for the same test depending on the size of your filesystem and the amount of free space you have available in it. If XFS does what you want, then use it. There is no good reason for trying to make ext4 do everything XFS does because it simply can't. Especially when it comes to allocation strategies and policies... Cheers, Dave. -- Dave Chinner david@fromorbit.com From sgi-linux-xfs@lo.gmane.org Wed Jan 25 23:00:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0Q50gYE149076 for ; Wed, 25 Jan 2012 23:00:45 -0600 X-ASG-Debug-ID: 1327554039-04cbb01fb521690001-w1Z2WR Received: from lo.gmane.org (lo.gmane.org [80.91.229.12]) by cuda.sgi.com with ESMTP id USMcz96FEIahyj61 for ; Wed, 25 Jan 2012 21:00:40 -0800 (PST) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.12 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1RqHRu-0002c1-9V for linux-xfs@oss.sgi.com; Thu, 26 Jan 2012 06:00:38 +0100 Received: from wombat.san-francisco.ca.us ([75.101.60.64]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 26 Jan 2012 06:00:38 +0100 Received: from kkeller by wombat.san-francisco.ca.us with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 26 Jan 2012 06:00:38 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Keith Keller Subject: Re: help with deciphering kernel dmesg Date: Wed, 25 Jan 2012 20:57:20 -0800 X-ASG-Orig-Subj: Re: help with deciphering kernel dmesg Lines: 69 Message-ID: References: <20120125064225.GR15102@dastard> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: wombat.san-francisco.ca.us X-To-Verify: Use pgpverify (ftp://ftp.isc.org/pub/pgpcontrol/) User-Agent: slrn/0.9.9p1 (Linux) X-Barracuda-Connect: lo.gmane.org[80.91.229.12] X-Barracuda-Start-Time: 1327554039 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86709 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 2012-01-25, Dave Chinner wrote: > > the xfs_info output would be really handy for determining what path > through the directory code XFS was taking whenteh crash occurred. No problem, here it is. The device is an LVM volume. Unfortunately I've mounted and umounted the drive a few times since the reboot, so I don't know how helpful this will actually be. I can attempt to repeat the symptoms then try an xfs_info before attempting anything else. (I ended up killing the xfs_repair -n to get this sooner, so I still do not have any information from that. So far it's on phase 4, which is taking a very long time; I think the reshape is stealing IO cycles, which it's not really supposed to. It hasn't reported any errors so far.) meta-data=/dev/XXXXXXXX isize=256 agcount=57, agsize=61034784 blks = sectsz=512 attr=0 data = bsize=4096 blocks=3417949184, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents=0 > I'd be worried about those IO errors - i don't think that they were > the cause of the oops, but it implies that the underlying device is > bad in some way. That may have something to do with the reshape in > progress which make me worry that the reshape is actually keeping > your data safe.... Yes, that was my worry as well. Fortunately this is a backup that can be recreated, but I'd hate to lose my primary store then find out the backup is hosed. > As it is, the kernel crashed reading a directory buffer. It's hard > to say what went wrong - can you take the kernel image and run: > > $ gdb > (gdb) l *(xfs_da_do_buf+0x43e) > > And post the output so we can see what line number in the code the > crash occurred at? That might provide a bit more of a clue to what > the problem is. Does my kernel need debugging symbols compiled in? Because my kernel doesn't seem to want to cooperate with gdb: # gdb /boot/vmlinuz-2.6.39-4.el5.elrepo GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-37.el5_7.1) [snip] This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: ... "/boot/vmlinuz-2.6.39-4.el5.elrepo": not in executable format: File format not recognized (gdb) l *(xfs_da_do_buf+0x43e) No symbol table is loaded. Use the "file" command. My compiling skills are generally confined to ./configure;make;make install, so I'm not sure where to go next. If debugging is needed to be compiled into the kernel, that may be problematic--it looks like ELrepo doesn't provide the same kernel with debug options, so I'd have to build one myself to get that. (Wow, I haven't built a kernel in over five years!) --keith -- kkeller@wombat.san-francisco.ca.us From jymmyjr@gmail.com Thu Jan 26 09:57:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0QFvbCv244925 for ; Thu, 26 Jan 2012 09:57:37 -0600 X-ASG-Debug-ID: 1327593454-04cbb01fb4bff80001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id 8SMrEXSkCked1kxI (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 26 Jan 2012 07:57:35 -0800 (PST) X-Barracuda-Envelope-From: jymmyjr@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lahd3 with SMTP id d3so446996lah.26 for ; Thu, 26 Jan 2012 07:57:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=3GQCAcWfi5k/y8F1SlJfAF9/y0fUnttQyI1MNzR2d2w=; b=xFnUMT1645P+YhNKEM6f0NZkCt3/gI5HaJU1heymc/SRDn3uIKLqO6XqhuGCfHSkU8 JtLQTnnqmELRYsOg7nu9CPQ7pcUbq4jd80qOP7JhDAPsB7ajpN679fvhShAfCKoR6tcy 4t78YzeBq1Sck5nr/OeXfeB49Q2kIGg/SQqbA= MIME-Version: 1.0 Received: by 10.152.131.40 with SMTP id oj8mr1484334lab.24.1327593454204; Thu, 26 Jan 2012 07:57:34 -0800 (PST) Received: by 10.112.10.167 with HTTP; Thu, 26 Jan 2012 07:57:34 -0800 (PST) In-Reply-To: <20120124213936.GA1505@infradead.org> References: <20120124213936.GA1505@infradead.org> Date: Thu, 26 Jan 2012 13:57:34 -0200 Message-ID: Subject: Re: XFS problem From: Kelbel Junior X-ASG-Orig-Subj: Re: XFS problem To: Christoph Hellwig Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1327593455 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86753 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 Well, in 24/01 i upgrade to the kernel 3.2.1 in one server and forgot read my emails...until now it's running without problems. Then, yesterday i put kernel 3.2.1 on another server and this morning a several same messages "server013 kernel: XFS: possible memory allocation deadlock in kmem_alloc (mode:0x250)" and delays. (without call trace because i forgot to apply that patch with dump_stack) Now i applied the dump_stack and the latest patches that you sent. I'm trying to discover what triggers this bug, to help in a solution... I tell you any news *** Some useful information: # mount /dev/sdb1 on MOUNTPOINT type xfs (rw,noatime) But in some cases i use RAID and mount the partition with the following settings (and happen the same problem): /dev/mapper/server012_vg-server012_vol on MOUNTPOINT type xfs (rw,noatime,nodiratime,inode64,nobarrier) HD model: Seagate ST31000528AS -- Barracuda 7200.12 SATA 3Gb/s 1TB Hard Drive I work in a cache solution company, so I/O performance is very important in our context. Thanks. Kelbel Junior From tinguely@sgi.com Thu Jan 26 10:13:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_33, J_CHICKENPOX_35 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0QGD34Z252991 for ; Thu, 26 Jan 2012 10:13:03 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 22A0830404E; Thu, 26 Jan 2012 08:13:00 -0800 (PST) Message-ID: <4F217B8E.60601@sgi.com> Date: Thu, 26 Jan 2012 10:13:02 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.065702206@bombadil.infradead.org> <4F1DB36E.3060207@sgi.com> <20120125161041.GB8360@infradead.org> <4F205358.5070702@sgi.com> In-Reply-To: <4F205358.5070702@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/25/12 13:09, Mark Tinguely wrote: > On 01/25/12 10:10, Christoph Hellwig wrote: >> On Mon, Jan 23, 2012 at 01:22:22PM -0600, Mark Tinguely wrote: >>> On 01/-10/63 13:59, Christoph Hellwig wrote: >>>> Remove the now unused opportunistic parameter, and use the the >>>> xlog_writeq_wake and xlog_reserveq_wake helpers now that we don't have >>>> to care about the opportunistic wakeups. >>>> >>>> Signed-off-by: Christoph Hellwig >>> >>> Looks good. My only concern is the way that xlog_grant_push_ail() >>> tries to kick start the writing of the log. It seems to me that a >>> combination of very large log requests could plug the log until the >>> next sync. >> >> How exactly? >> > > Thanks for giving me enough rope to hang myself :) > > I looked at it again and it could plug for a while, but not necessarily > until the next sync. > > I was looking at the fact that when the log is full, > xlog_grant_push_ail() will overlap cleaning threshold lsn for a bunch of > requests come in. This is because xlog_grant_push_ail() uses the current > tail when calculating cleaning threshold. This cleaning overlap will > happen until xfs_ail_push() cleans the space and the moves the log tail. > > If a (unrealistically) big request sized greater than MAX(log size/4, > 256) follows some other requests then the big request determines the > amount cleaned out of the queue. When the space is cleaned out, the > earlier processes waiting for the log are awoken and use up the cleaned > space, and there will not be enough space for the big request. Future > requests will clean up to MAX(their request size, log size/4, 256). This > will not be enough to satisfy the big request at the front of the > request queue. We will have to wait another cleaning cycle for the tail > to move and another log space request but even this big request would > eventually get satisfied. > > > > > --Mark Tinguely Would it be out of line to kick start the cleaning process when we know there are more processes sleeping but there is not enough available space to wake them? This would eliminate all my "plugging" concerns and does not require changes elsewhere. STATIC bool xlog_grant_head_wake( struct log *log, struct xlog_grant_head *head, int *free_bytes) { struct xlog_ticket *tic; int need_bytes; list_for_each_entry(tic, &head->waiters, t_queue) { need_bytes = xlog_ticket_reservation(log, head, tic); - if (*free_bytes < need_bytes) + if (*free_bytes < need_bytes) { + xlog_grant_push_ail(log, need_bytes); return false; + } *free_bytes -= need_bytes; trace_xfs_log_grant_wake_up(log, tic); wake_up_process(tic->t_task); } return true; } From bpm@sgi.com Thu Jan 26 13:47:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0QJlrDv014694 for ; Thu, 26 Jan 2012 13:47:53 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 75393304059; Thu, 26 Jan 2012 11:47:50 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id DF807426DA7; Thu, 26 Jan 2012 13:47:50 -0600 (CST) From: bpm@sgi.com To: stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com Subject: XFS update for 3.0-stable Date: Thu, 26 Jan 2012 13:47:41 -0600 Message-Id: <1327607262-3500-1-git-send-email-bpm@sgi.com> X-Mailer: git-send-email 1.7.8.rc4 Here's a fix for 3.0-stable related to trim support in xfs. From bpm@sgi.com Thu Jan 26 13:47:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0QJlvs7014739 for ; Thu, 26 Jan 2012 13:47:57 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id D7097AC005; Thu, 26 Jan 2012 11:47:53 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id C6EA2426DA8; Thu, 26 Jan 2012 13:47:56 -0600 (CST) From: bpm@sgi.com To: stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com Cc: Dave Chinner Subject: [PATCH] xfs: fix endian conversion issue in discard code Date: Thu, 26 Jan 2012 13:47:42 -0600 Message-Id: <1327607262-3500-2-git-send-email-bpm@sgi.com> X-Mailer: git-send-email 1.7.8.rc4 In-Reply-To: <1327607262-3500-1-git-send-email-bpm@sgi.com> References: <1327607262-3500-1-git-send-email-bpm@sgi.com> From: Dave Chinner commit b1c770c273a4787069306fc82aab245e9ac72e9d upstream When finding the longest extent in an AG, we read the value directly out of the AGF buffer without endian conversion. This will give an incorrect length, resulting in FITRIM operations potentially not trimming everything that it should. Note, for 3.0-stable this has been modified to apply to fs/xfs/linux-2.6/xfs_discard.c instead of fs/xfs/xfs_discard.c. -bpm Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers --- fs/xfs/linux-2.6/xfs_discard.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_discard.c b/fs/xfs/linux-2.6/xfs_discard.c index 244e797..572494f 100644 --- a/fs/xfs/linux-2.6/xfs_discard.c +++ b/fs/xfs/linux-2.6/xfs_discard.c @@ -68,7 +68,7 @@ xfs_trim_extents( * Look up the longest btree in the AGF and start with it. */ error = xfs_alloc_lookup_le(cur, 0, - XFS_BUF_TO_AGF(agbp)->agf_longest, &i); + be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest), &i); if (error) goto out_del_cursor; @@ -84,7 +84,7 @@ xfs_trim_extents( if (error) goto out_del_cursor; XFS_WANT_CORRUPTED_GOTO(i == 1, out_del_cursor); - ASSERT(flen <= XFS_BUF_TO_AGF(agbp)->agf_longest); + ASSERT(flen <= be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest)); /* * Too small? Give up. -- 1.7.8.rc4 From david@fromorbit.com Thu Jan 26 16:12:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_33, J_CHICKENPOX_35,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0QMCLlx035658 for ; Thu, 26 Jan 2012 16:12:22 -0600 X-ASG-Debug-ID: 1327615938-04cb6c225fcac60001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 9B4ondKkMJWJTP2w for ; Thu, 26 Jan 2012 14:12:19 -0800 (PST) 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: Av0EAGLPIU95LElR/2dsb2JhbABCrk2BBoFyAQEEATocIwULCAMYLhQlAyETh3y3exOJDAMKAwsFBgkBCAEGBAMDBAQFAQsChCwFAQUgCYM0BJUeiSyJOg Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail06.adl6.internode.on.net with ESMTP; 27 Jan 2012 08:42:17 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RqXYG-0003oX-9X; Fri, 27 Jan 2012 09:12:16 +1100 Date: Fri, 27 Jan 2012 09:12:16 +1100 From: Dave Chinner To: Mark Tinguely Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake Message-ID: <20120126221216.GW15102@dastard> X-ASG-Orig-Subj: Re: [patch 04/12] xfs: cleanup xfs_log_space_wake References: <20111212141346.986825692@bombadil.infradead.org> <20111212141434.065702206@bombadil.infradead.org> <4F1DB36E.3060207@sgi.com> <20120125161041.GB8360@infradead.org> <4F205358.5070702@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F205358.5070702@sgi.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: 1327615939 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86777 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Jan 25, 2012 at 01:09:12PM -0600, Mark Tinguely wrote: > On 01/25/12 10:10, Christoph Hellwig wrote: > >On Mon, Jan 23, 2012 at 01:22:22PM -0600, Mark Tinguely wrote: > >>On 01/-10/63 13:59, Christoph Hellwig wrote: > >>>Remove the now unused opportunistic parameter, and use the the > >>>xlog_writeq_wake and xlog_reserveq_wake helpers now that we don't have > >>>to care about the opportunistic wakeups. > >>> > >>>Signed-off-by: Christoph Hellwig > >> > >>Looks good. My only concern is the way that xlog_grant_push_ail() > >>tries to kick start the writing of the log. It seems to me that a > >>combination of very large log requests could plug the log until the > >>next sync. > > > >How exactly? > > > > Thanks for giving me enough rope to hang myself :) > > I looked at it again and it could plug for a while, but not > necessarily until the next sync. > > I was looking at the fact that when the log is full, > xlog_grant_push_ail() will overlap cleaning threshold lsn for a > bunch of requests come in. This is because xlog_grant_push_ail() > uses the current tail when calculating cleaning threshold. This > cleaning overlap will happen until xfs_ail_push() cleans the space > and the moves the log tail. > > If a (unrealistically) big request sized greater than MAX(log > size/4, 256) follows some other requests then the big request The sizes of requests are known in advance. on a 4k block size filesystem, the largest request (transaction reservation) will be around 300KB. The smallest log size we support is 10MB for a 4K block size filesystem. Hence this isn't actually a problem. Even for larger block size filesystems, the minimum log size is scaled according to the largest possible transaction reservation. IIRC, that blows out to around 3MB in size and so the minimum log size grows accordingly. 4k filesystem: $ sudo mkfs.xfs -f -b size=4k -l size=10m /dev/vdb meta-data=/dev/vdb isize=256 agcount=4, agsize=655360 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 $ 64k fileystem: $ sudo mkfs.xfs -f -b size=64k -l size=10m /dev/vdb log size 160 blocks too small, minimum size is 512 blocks Usage: mkfs.xfs .... Which means the minimum log size for a 64k block size filesytem is 32MB. Hence the situation you suggest cannot happen..... > determines the amount cleaned out of the queue. When the space is > cleaned out, the earlier processes waiting for the log are awoken > and use up the cleaned space, and there will not be enough space for > the big request. Future requests will clean up to MAX(their request > size, log size/4, 256). This will not be enough to satisfy the big > request at the front of the request queue. We will have to wait > another cleaning cycle for the tail to move and another log space > request but even this big request would eventually get satisfied. .... and so push a quarter of the log is always larger than any single request and therefore safe. Indeed, delayed logging makes use of this physical bound to determine when to checkpoint the aggregated changes. See the comment in xfs_log_priv.h above the definition of XLOG_CIL_SPACE_LIMIT and XLOG_CIL_HARD_SPACE_LIMIT and how they are used in xlog_cil_push() for more information about this. Cheers, Dave. -- Dave Chinner david@fromorbit.com From sfr@canb.auug.org.au Thu Jan 26 18:05:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0R05mu7054482 for ; Thu, 26 Jan 2012 18:05:48 -0600 X-ASG-Debug-ID: 1327622745-04cbb01fb31030a0001-NocioJ Received: from smtps.tip.net.au (chilli.pcug.org.au [203.10.76.44]) by cuda.sgi.com with ESMTP id uGgI1hk29CmUj2KU; Thu, 26 Jan 2012 16:05:46 -0800 (PST) X-Barracuda-Envelope-From: sfr@canb.auug.org.au X-Barracuda-Apparent-Source-IP: 203.10.76.44 Received: from canb.auug.org.au (ibmaus65.lnk.telstra.net [165.228.126.9]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtps.tip.net.au (Postfix) with ESMTPSA id 1BADF144BDE; Fri, 27 Jan 2012 11:05:42 +1100 (EST) Date: Fri, 27 Jan 2012 11:05:33 +1100 From: Stephen Rothwell To: Ben Myers Cc: linux-next@vger.kernel.org, xfs@oss.sgi.com, David Chinner , xfs-masters@oss.sgi.com Subject: Re: XFS for-next branch Message-Id: <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> X-ASG-Orig-Subj: Re: XFS for-next branch In-Reply-To: <20120125171244.GX8262@sgi.com> References: <20120125171244.GX8262@sgi.com> X-Mailer: Sylpheed 3.2.0beta5 (GTK+ 2.24.8; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg="PGP-SHA256"; boundary="Signature=_Fri__27_Jan_2012_11_05_33_+1100_i49ME4GPcmRrH3K." X-Barracuda-Connect: chilli.pcug.org.au[203.10.76.44] X-Barracuda-Start-Time: 1327622746 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86785 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --Signature=_Fri__27_Jan_2012_11_05_33_+1100_i49ME4GPcmRrH3K. Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi Ben, On Wed, 25 Jan 2012 11:12:44 -0600 Ben Myers wrote: > > Could you pull XFS updates from >=20 > git://oss.sgi.com/xfs/xfs.git for-next >=20 > instead of from the oss/master branch for 3.3? OK, currently I fetch the "master" branch of that tree. And you want em to switch to the "for-next" branch, right? (Those two branches currently point to the same commit, so I have not changed yet.) Did you mean "3.3", or "3.4"? Currently the contacts for that tree are: David Chinner , xfs-masters@oss.sgi.com. Should I change that? i.e. who has control over the tree and can fix problems if I report them? --=20 Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ --Signature=_Fri__27_Jan_2012_11_05_33_+1100_i49ME4GPcmRrH3K. Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAEBCAAGBQJPIepNAAoJEECxmPOUX5FEmLcQAKg1mkTWQV8Qs0EkvU7ByKYu sAr1GA+ctvmkTedAFJGxQuuC62wAkD5HcWQ8+F3K2sSSBnuaMZJsUzMKIXE3ezYs Jttv1oHa/ZM4UjTjWsptqCn3q0Kg5m4R3cT+qvNFr0RSfC7Rthy/pRs4abDIRC9L Xa5TGRPSiNlLIEJpbvIQAUufPr5ps3FpvERlTOOKMvq2aaC0U1wE8y56463wdw5e FHEZeuqusnLMf8YdfEuCYbX3sLKyEL94cQr7hoas3vbNtgghE81A2KzQpAXSm6ZZ AbfFRGZVkKXVvX2hgRsdsL56lNj6TGIP8JPbsdxLyPUfZjldwXSEb7pwmudVkdIx qiRiBod1z01MZfTbqoFkMm9YcIW2KVtBIfAdYerWkyWa6b8TkuuOaF5MtWe2nMNh mwwdRKIrXEV1rxzbfcYY3hrl7ZBOGUngUf79WB+Tsv43CiejdI2HhWHssrPn+uPL +rxINLHxg+rFtFJT7HEvMyMeKErRfyKqc32NAYmyF0+79Xrm0IKgZ1zT9xMIfmwS WOnG9iPQUEyTBJAnISp/7sVzaM78jbYfMe6Kv59q/oE5yZBsisMVQhrS85J5nAQw XchzEY9Br+Pc6tA3sCMEv+YbQRSmmdZ/do/wO6OmI5TUqBahIiiIAnun1QtAq2YL 3VpMWsJv11Zq0jmjyecv =2f99 -----END PGP SIGNATURE----- --Signature=_Fri__27_Jan_2012_11_05_33_+1100_i49ME4GPcmRrH3K.-- From david@fromorbit.com Thu Jan 26 18:26:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0R0QJwK060387 for ; Thu, 26 Jan 2012 18:26:20 -0600 X-ASG-Debug-ID: 1327623977-04cb6c225fd1ac0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id kVyvbRBy9fF3NiK3; Thu, 26 Jan 2012 16:26:18 -0800 (PST) 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: Av0EAPTuIU95LElR/2dsb2JhbABCrk+BBoFyAQEFOhwjEAgDDgouFCUDIRO/fhOJDAMKAwsFBgkBCAEGBAMDBAQFAQsCCwOEHgUBBSAJBoJLYwSVHpJm Received: from ppp121-44-73-81.lns20.syd6.internode.on.net (HELO dastard) ([121.44.73.81]) by ipmail06.adl6.internode.on.net with ESMTP; 27 Jan 2012 10:56:04 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RqZdi-00044L-NK; Fri, 27 Jan 2012 11:26:02 +1100 Date: Fri, 27 Jan 2012 11:26:02 +1100 From: Dave Chinner To: Stephen Rothwell Cc: Ben Myers , linux-next@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com Subject: Re: XFS for-next branch Message-ID: <20120127002602.GC15102@dastard> X-ASG-Orig-Subj: Re: XFS for-next branch References: <20120125171244.GX8262@sgi.com> <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> 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: 1327623977 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86787 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 27, 2012 at 11:05:33AM +1100, Stephen Rothwell wrote: > Hi Ben, > > On Wed, 25 Jan 2012 11:12:44 -0600 Ben Myers wrote: > > > > Could you pull XFS updates from > > > > git://oss.sgi.com/xfs/xfs.git for-next > > > > instead of from the oss/master branch for 3.3? > > OK, currently I fetch the "master" branch of that tree. And you want em > to switch to the "for-next" branch, right? (Those two branches currently > point to the same commit, so I have not changed yet.) > > Did you mean "3.3", or "3.4"? > > Currently the contacts for that tree are: David Chinner > , xfs-masters@oss.sgi.com. Should I change that? > i.e. who has control over the tree and can fix problems if I report them? I'd suggest changing the xfs-masters@oss.sgi.com address to just the xfs list (xfs@oss.sgi.com) as more people will see it that way. You can leave my email address there if you want because I'm in the same timezone as you, Stephen. Ben is the only person that can manipulate the tree, though, so you probably should add him to the list, too. Cheers, Dave. -- Dave Chinner david@fromorbit.com From greg@kroah.com Thu Jan 26 18:48:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0R0mek1069184 for ; Thu, 26 Jan 2012 18:48:40 -0600 X-ASG-Debug-ID: 1327625319-04cbb01fb3106450001-NocioJ Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by cuda.sgi.com with ESMTP id H7tCEzQdBTkM64Et (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 26 Jan 2012 16:48:39 -0800 (PST) X-Barracuda-Envelope-From: greg@kroah.com X-Barracuda-Apparent-Source-IP: 66.111.4.27 Received: from compute2.internal (compute2.nyi.mail.srv.osa [10.202.2.42]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id 20988208C6 for ; Thu, 26 Jan 2012 19:48:39 -0500 (EST) Received: from frontend1.nyi.mail.srv.osa ([10.202.2.160]) by compute2.internal (MEProxy); Thu, 26 Jan 2012 19:48:39 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:cc:subject:message-id :references:mime-version:content-type:in-reply-to; s=smtpout; bh=o+h/xICVUSRiWxE+vIboo7cnaX0=; b=qBoB9+ZDzxgkzG98qQXDja4TbCav VPPj7dUb71f0TjN0vWKzh0SWs+g32qkDdgBOYVICbVJhsmC98NYKJTDi2on8wUDO 2SkHpRnZRBs5GTMq0sO+OjRpW+O0vVXtKqt5GyARjWHvxkGa+vxdzoY9OrlS2Pkm zqAgEeGP4P/zuBc= X-Sasl-enc: gXkXkOQNEMeU6I37fdgA1GChfJXieoyQwtbOg2rXB3Ea 1327625318 Received: from localhost (c-76-121-69-168.hsd1.wa.comcast.net [76.121.69.168]) by mail.messagingengine.com (Postfix) with ESMTPSA id 98AFD8E00F1; Thu, 26 Jan 2012 19:48:38 -0500 (EST) Date: Thu, 26 Jan 2012 16:47:05 -0800 From: Greg KH To: bpm@sgi.com Cc: stable@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS update for 3.0-stable Message-ID: <20120127004705.GA19469@kroah.com> X-ASG-Orig-Subj: Re: XFS update for 3.0-stable References: <1327607262-3500-1-git-send-email-bpm@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327607262-3500-1-git-send-email-bpm@sgi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: out3-smtp.messagingengine.com[66.111.4.27] X-Barracuda-Start-Time: 1327625319 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86789 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 Thu, Jan 26, 2012 at 01:47:41PM -0600, bpm@sgi.com wrote: > Here's a fix for 3.0-stable related to trim support in xfs. Applied, thanks. greg k-h From mitsuo.hayasaka.hu@hitachi.com Fri Jan 27 00:21:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0R6LCu4114782 for ; Fri, 27 Jan 2012 00:21:12 -0600 X-ASG-Debug-ID: 1327645269-04cbb01fb5139f80001-NocioJ Received: from mail7.hitachi.co.jp (mail7.hitachi.co.jp [133.145.228.42]) by cuda.sgi.com with ESMTP id CcykHcgV0HHeOFX2; Thu, 26 Jan 2012 22:21:11 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.42 Received: from mlsv4.hitachi.co.jp (unknown [133.144.234.166]) by mail7.hitachi.co.jp (Postfix) with ESMTP id 4EA1137AC4; Fri, 27 Jan 2012 15:21:09 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv4.hitachi.co.jp (8.13.1/8.13.1) id q0R6L9Fu002926; Fri, 27 Jan 2012 15:21:09 +0900 Received: from vshuts2.hitachi.co.jp (vshuts2.hitachi.co.jp [10.201.6.71]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0R6L8b9003596; Fri, 27 Jan 2012 15:21:08 +0900 X-AuditID: b753bd60-9a062ba00000359c-5d-4f224253930d Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts2.hitachi.co.jp (Symantec Mail Security) with ESMTP id E8CCF8B0326; Fri, 27 Jan 2012 15:21:07 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0R6L7ao023229; Fri, 27 Jan 2012 15:21:07 +0900 X-AuditID: b753bd60-9a062ba00000359c-5d-4f224253930d Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 81F78236561; Fri, 27 Jan 2012 15:18:23 +0900 (JST) Received: from [127.0.0.1] (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 105B112552C; Fri, 27 Jan 2012 15:21:03 +0900 (JST) Message-ID: <4F22424E.8070407@hitachi.com> Date: Fri, 27 Jan 2012 15:21:02 +0900 From: HAYASAKA Mitsuo User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Christoph Hellwig Cc: Ben Myers , Alex Elder , Christoph Hellwig , xfs-masters@oss.sgi.com, linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [PATCH 0/3] xfs: change available ranges in quota check References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> <20120124174612.GC9853@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 0/3] xfs: change available ranges in quota check In-Reply-To: <20120124174612.GC9853@infradead.org> Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail7.hitachi.co.jp[133.145.228.42] X-Barracuda-Start-Time: 1327645270 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -0.00 X-Barracuda-Spam-Status: No, SCORE=-0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ISO2022JP_CHARSET X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 ISO2022JP_CHARSET ISO-2022-JP message Hi Christoph, (2012/01/25 2:46), Christoph Hellwig wrote: > On Mon, Jan 23, 2012 at 12:45:14PM +0900, Mitsuo Hayasaka wrote: >> Hi, >> >> This patch series changes available ranges of softlimit and >> hardlimit in quota check, as follows. >> >> (1) Consider new reservation for quota check >> The disk block reservation checks if (current usage + new >> reservation) reach the quota limit although the inode reservation >> does not use the new reservation for quota check. It should >> consider it, as well. This is mandatory for (2). > > Can you send a testcase that reproduces issues with the old behaviour? > Regarding (1) related to inode reservation, current xfs works well because inode is reserved one by one if required. For example, when an new inode tries to be reserved in xfs_trans_dqresv(), it checks quota as follows. if (ninos > 0) { // ninos: # of new inodes expected to be allocated. if (cur_usage >= limit) goto error; cur_usage += ninos; } It checks only current usage, but this code works well since the caller always set the argument ninos to 1 or 0 in current xfs. So, inode can be used up to the limits due to the one by one reservation. To make it more general, this check should be the same way as the new block quota check introduced in the PATCH 2/3 where the disk block can be used up to the block quota limits. So, this part is a kind of cleanup patch. I'm going to split the part into another patch, and to send a new patch series. Thanks. From mitsuo.hayasaka.hu@hitachi.com Fri Jan 27 00:31:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0R6VimE115609 for ; Fri, 27 Jan 2012 00:31:44 -0600 X-ASG-Debug-ID: 1327645902-04bdf07519129b90001-NocioJ Received: from mail7.hitachi.co.jp (mail7.hitachi.co.jp [133.145.228.42]) by cuda.sgi.com with ESMTP id x4IlE7rAMmjAf0GB; Thu, 26 Jan 2012 22:31:42 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.42 Received: from mlsv5.hitachi.co.jp (unknown [133.144.234.166]) by mail7.hitachi.co.jp (Postfix) with ESMTP id 2222537AC8; Fri, 27 Jan 2012 15:31:42 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv5.hitachi.co.jp (8.13.1/8.13.1) id q0R6VgC6021929; Fri, 27 Jan 2012 15:31:42 +0900 Received: from vshuts3.hitachi.co.jp (vshuts3.hitachi.co.jp [10.201.6.72]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0R6Vfs5009162; Fri, 27 Jan 2012 15:31:41 +0900 X-AuditID: b753bd60-a2688ba000000655-03-4f2244ccbb79 Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts3.hitachi.co.jp (Symantec Mail Security) with ESMTP id D65A177425E; Fri, 27 Jan 2012 15:31:40 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0R6VeXp025100; Fri, 27 Jan 2012 15:31:40 +0900 X-AuditID: b753bd60-a2688ba000000655-03-4f2244ccbb79 Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 3A0D0236561; Fri, 27 Jan 2012 15:28:56 +0900 (JST) Received: from ltc219.sdl.hitachi.co.jp (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 8D3C9125533; Fri, 27 Jan 2012 15:31:29 +0900 (JST) From: Mitsuo Hayasaka Subject: [RFC PATCH] xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() To: Ben Myers , Alex Elder , Christoph Hellwig X-ASG-Orig-Subj: [RFC PATCH] xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, yrl.pp-manager.tt@hitachi.com, Mitsuo Hayasaka , Ben Myers , Alex Elder , Christoph Hellwig Date: Fri, 27 Jan 2012 15:37:26 +0900 Message-ID: <20120127063726.16227.681.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail7.hitachi.co.jp[133.145.228.42] X-Barracuda-Start-Time: 1327645902 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The kmem_realloc() in xfs is given KM_* memory allocation flags. And it allocates memory using kmalloc() after they are converted to gfp_mask flags. In xlog_recover_add_to_cont_trans(), 0u is passed to kmem_realloc(), instead of them. I guess it is preferred to use them, and here memory must be allocated but don't have to be done with GFP_ATOMIC. So, this patch changes it to KM_SLEEP. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig --- fs/xfs/xfs_log_recover.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 541a508..15ff539 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -1489,7 +1489,7 @@ xlog_recover_add_to_cont_trans( old_ptr = item->ri_buf[item->ri_cnt-1].i_addr; old_len = item->ri_buf[item->ri_cnt-1].i_len; - ptr = kmem_realloc(old_ptr, len+old_len, old_len, 0u); + ptr = kmem_realloc(old_ptr, len+old_len, old_len, KM_SLEEP); memcpy(&ptr[old_len], dp, len); /* d, s, l */ item->ri_buf[item->ri_cnt-1].i_len += len; item->ri_buf[item->ri_cnt-1].i_addr = ptr; From dermaniac@gmail.com Fri Jan 27 01:50:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_43,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0R7odXd136121 for ; Fri, 27 Jan 2012 01:50:39 -0600 X-ASG-Debug-ID: 1327650638-04cbb01fb414a350001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id OiZapeCmBUOLzX1C (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 26 Jan 2012 23:50:38 -0800 (PST) X-Barracuda-Envelope-From: dermaniac@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iakl21 with SMTP id l21so2099295iak.26 for ; Thu, 26 Jan 2012 23:50:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=SHGRrQlZpauNsCfmIneAeD2gGcMtCksWO0nSiB49id0=; b=pWoeSPnVmJ3JIA6WSjNmhVMBMg6B/oxTB7mFJbVv4KIrJEo53/2BF3mBsve6EV7Wso EpuINhw3a5ByAG+2g10o5gUilNnHyKvoSXqgaDru+d7Iyb9b7EfLctQ9WXYMBnZkfOnU RD4m+TfMKORy4mBRBwHT6gZBdAodAOzFoXq+4= MIME-Version: 1.0 Received: by 10.42.189.5 with SMTP id dc5mr4227852icb.51.1327650638419; Thu, 26 Jan 2012 23:50:38 -0800 (PST) Received: by 10.42.135.201 with HTTP; Thu, 26 Jan 2012 23:50:38 -0800 (PST) Date: Fri, 27 Jan 2012 08:50:38 +0100 Message-ID: Subject: Insane file system overhead on large volume From: Manny X-ASG-Orig-Subj: Insane file system overhead on large volume To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1327650638 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86817 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 there, I'm not sure if this is intended behavior, but I was a bit stumped when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in RAID 6) with XFS and noticed that there were only 22 TB left. I just called mkfs.xfs with default parameters - except for swith and sunit which match the RAID setup. Is it normal that I lost 8TB just for the file system? That's almost 30% of the volume. Should I set the block size higher? Or should I increase the number of allocation groups? Would that make a difference? Whats the preferred method for handling such large volumes? Thanks a lot, Manny From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 04:44:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RAiJmE162639 for ; Fri, 27 Jan 2012 04:44:19 -0600 X-ASG-Debug-ID: 1327661054-04cbb01fb416bb90001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id yIINvLAM8c2ldNkx (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 02:44:14 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjHx-0004As-Qy; Fri, 27 Jan 2012 10:44:13 +0000 Date: Fri, 27 Jan 2012 05:44:13 -0500 From: Christoph Hellwig To: Manny Cc: xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume Message-ID: <20120127104413.GA12347@infradead.org> X-ASG-Orig-Subj: Re: Insane file system overhead on large volume 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327661054 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86827 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 27, 2012 at 08:50:38AM +0100, Manny wrote: > Hi there, > > I'm not sure if this is intended behavior, but I was a bit stumped > when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in RAID > 6) with XFS and noticed that there were only 22 TB left. I just called > mkfs.xfs with default parameters - except for swith and sunit which > match the RAID setup. > > Is it normal that I lost 8TB just for the file system? That's almost > 30% of the volume. Should I set the block size higher? Or should I > increase the number of allocation groups? Would that make a > difference? Whats the preferred method for handling such large > volumes? Where did you get the sizes for the raw volume and the filesystem usage from? From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 04:52:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RAqxEv163121 for ; Fri, 27 Jan 2012 04:52:59 -0600 X-ASG-Debug-ID: 1327661577-04cbb01fb216d5a0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id hSx8VWFRt3tmqLnS (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 02:52:58 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjQL-000657-KX; Fri, 27 Jan 2012 10:52:53 +0000 Date: Fri, 27 Jan 2012 05:52:53 -0500 From: Christoph Hellwig To: Mitsuo Hayasaka Cc: Ben Myers , Alex Elder , Christoph Hellwig , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [RFC PATCH] xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() Message-ID: <20120127105253.GA23335@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH] xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() References: <20120127063726.16227.681.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120127063726.16227.681.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327661577 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 27, 2012 at 03:37:26PM +0900, Mitsuo Hayasaka wrote: > The kmem_realloc() in xfs is given KM_* memory allocation flags. And it > allocates memory using kmalloc() after they are converted to gfp_mask > flags. In xlog_recover_add_to_cont_trans(), 0u is passed to kmem_realloc(), > instead of them. I guess it is preferred to use them, and here memory must > be allocated but don't have to be done with GFP_ATOMIC. So, this patch > changes it to KM_SLEEP. Looks good. I actually just noticed it when changing the kmem_realloc implementation, but let's put your patch in before that and send it off to Linus ASAP. Reviewed-by: Christoph Hellwig From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 04:53:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RArotL163183 for ; Fri, 27 Jan 2012 04:53:51 -0600 X-ASG-Debug-ID: 1327661629-04bdf07516152930001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id GWEe6zS5XjpvJ2YC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 02:53:49 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjRB-00066X-0b; Fri, 27 Jan 2012 10:53:45 +0000 Date: Fri, 27 Jan 2012 05:53:45 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: Eric Sandeen , Andreas Dilger , "linux-ext4@vger.kernel.org" , Theodore Tso , Yu Jian , xfs-oss Subject: Re: [PATCH V2] xfstests: Sort recursive getfattr output in 062 Message-ID: <20120127105344.GB23335@infradead.org> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: Sort recursive getfattr output in 062 References: <4EC10664.1080501@tuxadero.com> <20111115142246.GA7516@thunk.org> <246EA1CC-3C33-4D41-80C0-2331C426EBB0@whamcloud.com> <4ECA4282.5020908@whamcloud.com> <401CC4FF-8955-4D5F-B620-5C39AF566123@mit.edu> <4ECB2ADE.3010007@redhat.com> <4ECD28D1.1080800@redhat.com> <4F20766E.9040902@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F20766E.9040902@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327661629 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Jan 25, 2012 at 03:38:54PM -0600, Eric Sandeen wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Test 062 was made "generic" a while back, but it fails on any filesystem > which returns getfattr -R results (aka readdir results) in something > other than inode-order. > > With a little awk-fu we can sort the records from getfattr -R so that > the output is the same for xfs as well as ext4, etc. > > Also filter out lost+found which extN creates at mkfs time, but > some other filesystems do not. > > Signed-off-by: Eric Sandeen > - --- > > V2: move sorting function into common.attr Looks good, Reviewed-by: Christoph Hellwig From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 04:59:01 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RAx1Vn163474 for ; Fri, 27 Jan 2012 04:59:01 -0600 X-ASG-Debug-ID: 1327661940-04cb6c225f122b60001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 00zl39dcsWf7MU7e (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 02:59:00 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjWF-000754-2W; Fri, 27 Jan 2012 10:58:59 +0000 Date: Fri, 27 Jan 2012 05:58:59 -0500 From: Christoph Hellwig To: Kelbel Junior Cc: Christoph Hellwig , linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS problem Message-ID: <20120127105859.GC23335@infradead.org> X-ASG-Orig-Subj: Re: XFS problem References: <20120124213936.GA1505@infradead.org> 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327661940 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.00 BSF_SC5_SA210e Custom Rule SA210e On Thu, Jan 26, 2012 at 01:57:34PM -0200, Kelbel Junior wrote: > Well, in 24/01 i upgrade to the kernel 3.2.1 in one server and forgot > read my emails...until now it's running without problems. > Then, yesterday i put kernel 3.2.1 on another server and this morning > a several same messages "server013 kernel: XFS: possible memory > allocation deadlock in kmem_alloc (mode:0x250)" and delays. > > (without call trace because i forgot to apply that patch with dump_stack) Not a problem, we know where it comes from now. > I work in a cache solution company, so I/O performance is very > important in our context. What I'm really curious about is what kind of workloads you have. We should only run into problems here if we have a huge extent indirection array, which points to a massively fragmented file. Right now the handling of that isn't optimal, and we need to improve on that. But you'd probably get better results by avoiding that massive fragmentaion in the first place, e.g. try to preallocate or set extent size hints if you do random writes to a sparse file. From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 05:00:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RB0TQd163572 for ; Fri, 27 Jan 2012 05:00:29 -0600 X-ASG-Debug-ID: 1327662028-04cb6c2260122f60001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id UmgJaCWRGLYe0xzg (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 03:00:28 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjXf-000852-2l; Fri, 27 Jan 2012 11:00:27 +0000 Date: Fri, 27 Jan 2012 06:00:27 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , Eric Sandeen , ext4 development , xfs-oss Subject: Re: [PATCH V2] xfstests: mount other filesystems with selinux context as well Message-ID: <20120127110027.GD23335@infradead.org> X-ASG-Orig-Subj: Re: [PATCH V2] xfstests: mount other filesystems with selinux context as well References: <4ECD3262.105@redhat.com> <20111128110228.GC13766@infradead.org> <4F1862FC.1050401@sandeen.net> <20120124174500.GB9853@infradead.org> <4F20700B.8060307@sandeen.net> <20120125211438.GA11821@infradead.org> <4F2073EC.80208@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F2073EC.80208@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327662028 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS In that case the update patch is fine with me, Reviewed-by: Christoph Hellwig From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 05:01:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RB1NVd163802 for ; Fri, 27 Jan 2012 05:01:23 -0600 X-ASG-Debug-ID: 1327662081-04bdf07519153840001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Wk7EpN8xKX8qoMzo (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 03:01:22 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjYX-00087T-1y; Fri, 27 Jan 2012 11:01:21 +0000 Date: Fri, 27 Jan 2012 06:01:21 -0500 From: Christoph Hellwig To: Eryu Guan Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it Message-ID: <20120127110120.GA31093@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it References: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327662081 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 13, 2012 at 01:20:15AM +0800, Eryu Guan wrote: > Do all testings in dedicated dir($SCRATCH_MNT/$seq) instead of > $SCRATCH_MNT and don't remove test files in _cleanup() for debug > purpose. What it the dedicated directory useful for? From lukasz.oles@open-e.com Fri Jan 27 05:02:28 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.1 required=5.0 tests=BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RB2RCq163898 for ; Fri, 27 Jan 2012 05:02:28 -0600 X-ASG-Debug-ID: 1327662145-04cb6c225f1233b0001-NocioJ Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.8]) by cuda.sgi.com with ESMTP id sryH9xsAkZR8mUsD for ; Fri, 27 Jan 2012 03:02:25 -0800 (PST) X-Barracuda-Envelope-From: lukasz.oles@open-e.com X-Barracuda-Apparent-Source-IP: 212.227.17.8 Received: from [192.168.241.50] (host8514118246.static.open-e.3s.pl [85.14.118.246]) by mrelayeu.kundenserver.de (node=mrbap3) with ESMTP (Nemesis) id 0M7az9-1SmheR2Iq7-00xNiS; Fri, 27 Jan 2012 12:02:24 +0100 Message-ID: <4F22843E.4050804@open-e.com> Date: Fri, 27 Jan 2012 12:02:22 +0100 From: =?UTF-8?B?xYF1a2FzeiBPbGXFmw==?= User-Agent: Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20120104 Icedove/8.0 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: reserved blocks pool default size Content-Type: multipart/alternative; boundary="------------070408090905010307030302" X-ASG-Orig-Subj: reserved blocks pool default size X-Provags-ID: V02:K0:KWrk2+FNnBgldZzhdQupJetQfrFAfm3t5SSgTiChWPn JqPRD+MD5j6XXceYz185DS7m+ZVq7m/KQgXnnKZFDKn5eaaphA zlABxWTWAGk17GhpeU/hdB0C35PclbSn2pjWiv1qOcvX7k4tMY 2txm+Hqw7CJf/RAmQlCXG7ArLpm4NdiSC4aqNbGO21qQWInMVD mbyvnqB/LUyMfQZGMKsxNko8Yt1nEu6QqOdTbpbonMuj2MSeAu YVnEq6BPm1JMfCh2mNZSqToYEu8YfkiFmmnRCJ9uCBHlcblvCH tG9jyzXM3Wh1fioQLfG1nju0TXqg1UgT1XBES1M+HmMCO2w0W3 MFlO3yu4xszz3FGrbipVv1XMv2ILGcXR9G77812U+ X-Barracuda-Connect: moutng.kundenserver.de[212.227.17.8] X-Barracuda-Start-Time: 1327662145 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 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. --------------070408090905010307030302 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, I updated kernel from 2.6.27 to 2.6.35 and noticed that free size on my xfs volume changed. Before update there was 7MB free space, now there is none. After some investigation I found that default size for reserved block pool changed [1]. On this volume I have one very big file which is exported as iSCSI disk via SCST and one small configuration file. The big file size will never change. Small file size can change only by some KB. With this assumptions, can I revert this change and set reserved blocks pool size to 1024 blocks? [1]. http://kerneltrap.org/mailarchive/git-commits-head/2010/3/6/28671 Reagards, -- Åukasz OleÅ› --------------070408090905010307030302 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi,

I updated kernel from 2.6.27 to 2.6.35 and noticed that free size on my xfs volume changed. Before update there was 7MB free space, now there is none.

After some investigation I found that default size for reserved block pool changed [1].
On this volume I have one very big file which is exported as iSCSI disk via SCST and one small configuration file. The big file size will never change. Small file size can change only by some KB.

With this assumptions, can I revert this change and set reserved blocks pool size to 1024 blocks?

[1]. http://kerneltrap.org/mailarchive/git-commits-head/2010/3/6/28671

Reagards,

--
Åukasz OleÅ›
--------------070408090905010307030302-- From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 05:02:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RB2sPo163936 for ; Fri, 27 Jan 2012 05:02:54 -0600 X-ASG-Debug-ID: 1327662159-04cb6c2261123450001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 5JcAv67hx9ras5xl (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 03:02:40 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqjZm-00088r-Kl; Fri, 27 Jan 2012 11:02:38 +0000 Date: Fri, 27 Jan 2012 06:02:38 -0500 From: Christoph Hellwig To: HAYASAKA Mitsuo Cc: Christoph Hellwig , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , Christoph Hellwig Subject: Re: [PATCH 0/3] xfs: change available ranges in quota check Message-ID: <20120127110238.GB31093@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 0/3] xfs: change available ranges in quota check References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> <20120124174612.GC9853@infradead.org> <4F22424E.8070407@hitachi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F22424E.8070407@hitachi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327662160 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 27, 2012 at 03:21:02PM +0900, HAYASAKA Mitsuo wrote: > > Can you send a testcase that reproduces issues with the old behaviour? > > > > Regarding (1) related to inode reservation, current xfs works well > because inode is reserved one by one if required. > > For example, when an new inode tries to be reserved in xfs_trans_dqresv(), > it checks quota as follows. I'm just curious what the intent behdind the patches was. They look good to me, but I wonder why we need to change it at all. > To make it more general, this check should be the same way as the new > block quota check introduced in the PATCH 2/3 where the disk block can > be used up to the block quota limits. So I guess that's the part we'd want a test case for if possible. From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 05:40:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RBeZ0q166743 for ; Fri, 27 Jan 2012 05:40:35 -0600 X-ASG-Debug-ID: 1327664433-04bdf07516159c50001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 7qvuQP5AOXHpDa5I (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 03:40:34 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqkAS-0000v4-VJ; Fri, 27 Jan 2012 11:40:33 +0000 Date: Fri, 27 Jan 2012 06:40:32 -0500 From: Christoph Hellwig To: ??ukasz Ole?? Cc: xfs@oss.sgi.com Subject: Re: reserved blocks pool default size Message-ID: <20120127114032.GA32236@infradead.org> X-ASG-Orig-Subj: Re: reserved blocks pool default size References: <4F22843E.4050804@open-e.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F22843E.4050804@open-e.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327664433 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86831 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 27, 2012 at 12:02:22PM +0100, ??ukasz Ole?? wrote: > Hi, > > I updated kernel from 2.6.27 to 2.6.35 and noticed that free size on > my xfs volume changed. Before update there was 7MB free space, now > there is none. > > After some investigation I found that default size for reserved > block pool changed [1]. > On this volume I have one very big file which is exported as iSCSI > disk via SCST and one small configuration file. The big file size > will never change. Small file size can change only by some KB. > > With this assumptions, can I revert this change and set reserved > blocks pool size to 1024 blocks? If it worked fine for your workload before it should work fine with newer kernels, too. From mitsuo.hayasaka.hu@hitachi.com Fri Jan 27 08:02:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RE2Jm0180346 for ; Fri, 27 Jan 2012 08:02:19 -0600 X-ASG-Debug-ID: 1327672936-04bdf07516171c80001-NocioJ Received: from mail7.hitachi.co.jp (mail7.hitachi.co.jp [133.145.228.42]) by cuda.sgi.com with ESMTP id LB3lonTWMVckDIiA; Fri, 27 Jan 2012 06:02:17 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.42 Received: from mlsv3.hitachi.co.jp (unknown [133.144.234.166]) by mail7.hitachi.co.jp (Postfix) with ESMTP id 7821C37AC2; Fri, 27 Jan 2012 23:02:16 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv3.hitachi.co.jp (8.13.1/8.13.1) id q0RE2GHb012724; Fri, 27 Jan 2012 23:02:16 +0900 Received: from vshuts2.hitachi.co.jp (vshuts2.hitachi.co.jp [10.201.6.71]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q0RE2FG4021760; Fri, 27 Jan 2012 23:02:16 +0900 X-AuditID: b753bd60-9825fba00000359c-87-4f22ae67c238 Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts2.hitachi.co.jp (Symantec Mail Security) with ESMTP id EE4488B0276; Fri, 27 Jan 2012 23:02:14 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q0RE2EhO028999; Fri, 27 Jan 2012 23:02:14 +0900 X-AuditID: b753bd60-9825fba00000359c-87-4f22ae67c238 Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 8613F236561; Fri, 27 Jan 2012 22:59:30 +0900 (JST) Received: from [127.0.0.1] (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id C357C12552C; Fri, 27 Jan 2012 23:02:11 +0900 (JST) Message-ID: <4F22AE63.2020809@hitachi.com> Date: Fri, 27 Jan 2012 23:02:11 +0900 From: HAYASAKA Mitsuo User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Christoph Hellwig Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , Christoph Hellwig Subject: Re: [PATCH 0/3] xfs: change available ranges in quota check References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> <20120124174612.GC9853@infradead.org> <4F22424E.8070407@hitachi.com> <20120127110238.GB31093@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 0/3] xfs: change available ranges in quota check In-Reply-To: <20120127110238.GB31093@infradead.org> Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail7.hitachi.co.jp[133.145.228.42] X-Barracuda-Start-Time: 1327672937 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -0.00 X-Barracuda-Spam-Status: No, SCORE=-0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ISO2022JP_CHARSET X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86841 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 ISO2022JP_CHARSET ISO-2022-JP message Hi Christoph, I'd like to explain the reason why I sent the patch series. Here is an example where I activated user quota and set each softlimit and hardlimit as follows. | softlimit | hardlimit ------------------------------- block | 1M | 2M ------------------------------- inode | 3 | 5 I succeeded to create files up to the inode hardlimit using touch command. The quota information is shown as follows. # xfs_quota -x -c 'report -u -b -i -h' /mnt/xfs2 User quota on /mnt/xfs2 (/dev/vdb) Blocks Inodes User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace ---------- --------------------------------- --------------------------------- root 0 0 0 00 [------] 3 0 0 00 [------] xfstest01 0 1M 2M 00 [------] 5 3 5 00 [6 days] ~~~~ ~~ However, I failed to create and add another file due to the quota limitation. $ touch /mnt/xfs2/dir00/file05 touch: cannot touch `/mnt/xfs2/dir00/file05': Disk quota exceeded It seems the inode quota works well. Regarding the block quota, I got the quota limitation message even if I created a 2MB file which is equal to the hardlimit of disk quota. $ dd if=/dev/zero of=/mnt/xfs2/dir00/file01 bs=2M count=1 dd: writing `/mnt/xfs2/dir00/file01': Disk quota exceeded 1+0 records in ~~~~~~~~~~~~~~~~~~~~~ 0+0 records out 2093056 bytes (2.1 MB) copied, 0.00561516 s, 373 MB/s I'd like to change the available range of the block quota, and also change the inode quota check to the same way as the block check introduced in PATCH 2/3 to make it more general. Regards. (2012/01/27 20:02), Christoph Hellwig wrote: > On Fri, Jan 27, 2012 at 03:21:02PM +0900, HAYASAKA Mitsuo wrote: >>> Can you send a testcase that reproduces issues with the old behaviour? >>> >> >> Regarding (1) related to inode reservation, current xfs works well >> because inode is reserved one by one if required. >> >> For example, when an new inode tries to be reserved in xfs_trans_dqresv(), >> it checks quota as follows. > > I'm just curious what the intent behdind the patches was. They look > good to me, but I wonder why we need to change it at all. > >> To make it more general, this check should be the same way as the new >> block quota check introduced in the PATCH 2/3 where the disk block can >> be used up to the block quota limits. > > So I guess that's the part we'd want a test case for if possible. > From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 08:05:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RE4xBa182148 for ; Fri, 27 Jan 2012 08:05:00 -0600 X-ASG-Debug-ID: 1327673095-04cb6c226013e930001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 50soo4TxWN56Qrkq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 06:04:55 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqmQ9-0003oC-Cp; Fri, 27 Jan 2012 14:04:53 +0000 Date: Fri, 27 Jan 2012 09:04:53 -0500 From: Christoph Hellwig To: HAYASAKA Mitsuo Cc: Christoph Hellwig , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , Christoph Hellwig Subject: Re: [PATCH 0/3] xfs: change available ranges in quota check Message-ID: <20120127140453.GA14566@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 0/3] xfs: change available ranges in quota check References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> <20120124174612.GC9853@infradead.org> <4F22424E.8070407@hitachi.com> <20120127110238.GB31093@infradead.org> <4F22AE63.2020809@hitachi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F22AE63.2020809@hitachi.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327673095 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86841 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Jan 27, 2012 at 11:02:11PM +0900, HAYASAKA Mitsuo wrote: > Hi Christoph, > > I'd like to explain the reason why I sent the patch series. > > Here is an example where I activated user quota and set each softlimit and > hardlimit as follows. > > | softlimit | hardlimit > ------------------------------- > block | 1M | 2M > ------------------------------- > inode | 3 | 5 > > I succeeded to create files up to the inode hardlimit using touch command. > The quota information is shown as follows. > > # xfs_quota -x -c 'report -u -b -i -h' /mnt/xfs2 > User quota on /mnt/xfs2 (/dev/vdb) > Blocks Inodes > User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace > ---------- --------------------------------- --------------------------------- > root 0 0 0 00 [------] 3 0 0 00 [------] > xfstest01 0 1M 2M 00 [------] 5 3 5 00 [6 days] > ~~~~ ~~ > > However, I failed to create and add another file due to the quota limitation. > > $ touch /mnt/xfs2/dir00/file05 > touch: cannot touch `/mnt/xfs2/dir00/file05': Disk quota exceeded > > It seems the inode quota works well. > > Regarding the block quota, I got the quota limitation message even if I > created a 2MB file which is equal to the hardlimit of disk quota. > > $ dd if=/dev/zero of=/mnt/xfs2/dir00/file01 bs=2M count=1 > dd: writing `/mnt/xfs2/dir00/file01': Disk quota exceeded > 1+0 records in ~~~~~~~~~~~~~~~~~~~~~ > 0+0 records out > 2093056 bytes (2.1 MB) copied, 0.00561516 s, 373 MB/s > > I'd like to change the available range of the block quota, and > also change the inode quota check to the same way as the block check > introduced in PATCH 2/3 to make it more general. Makes sense. Can you create an xfstests testcase containing the above test case? From bpm@sgi.com Fri Jan 27 10:01:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RG1f8x203244; Fri, 27 Jan 2012 10:01:41 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 440E3AC005; Fri, 27 Jan 2012 08:01:34 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 7D6DE426DA7; Fri, 27 Jan 2012 10:01:37 -0600 (CST) Date: Fri, 27 Jan 2012 10:01:37 -0600 From: Ben Myers To: Stephen Rothwell Cc: linux-next@vger.kernel.org, xfs@oss.sgi.com, David Chinner , xfs-masters@oss.sgi.com Subject: Re: XFS for-next branch Message-ID: <20120127160137.GJ8262@sgi.com> References: <20120125171244.GX8262@sgi.com> <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> User-Agent: Mutt/1.5.18 (2008-05-17) Hey Stephen, On Fri, Jan 27, 2012 at 11:05:33AM +1100, Stephen Rothwell wrote: > On Wed, 25 Jan 2012 11:12:44 -0600 Ben Myers wrote: > > > > Could you pull XFS updates from > > > > git://oss.sgi.com/xfs/xfs.git for-next > > > > instead of from the oss/master branch for 3.3? > > OK, currently I fetch the "master" branch of that tree. And you want em > to switch to the "for-next" branch, right? (Those two branches currently > point to the same commit, so I have not changed yet.) Yep, please switch to oss/for-next instead of oss/master. I'll keep them in sync normally, it's just that I'd like to have a little flexability WRT what is in for-next. > Did you mean "3.3", or "3.4"? I meant only that I'd like to try it this way for a single release, see how it goes, and then re-evaluate. > Currently the contacts for that tree are: David Chinner > , xfs-masters@oss.sgi.com. Should I change that? > i.e. who has control over the tree and can fix problems if I report them? I think Dave's suggestion is reasonable: Keep him as a contact, add me, and s/xfs-masters@oss.sgi.com/xfs@oss.sgi.com/. It really helps that you two are in the same timezone. ;) Thanks, Ben From guaneryu@gmail.com Fri Jan 27 10:28:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_45,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RGSxjZ204109 for ; Fri, 27 Jan 2012 10:28:59 -0600 X-ASG-Debug-ID: 1327681736-04bdf07516192920001-NocioJ Received: from mail-ww0-f51.google.com (mail-ww0-f51.google.com [74.125.82.51]) by cuda.sgi.com with ESMTP id 6fRCZGfDXYlLtE33 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 27 Jan 2012 08:28:58 -0800 (PST) X-Barracuda-Envelope-From: guaneryu@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.51 Received: by wgbdy1 with SMTP id dy1so1503429wgb.32 for ; Fri, 27 Jan 2012 08:28:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:reply-to:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=djQ3eHvJ+Sm9aWo5cCi7KKfzPhTBu3vfDV9CTlGuUsI=; b=J2ruKaltQvJsOqxlTQMadf53obqGjX8mgZMC3zMYgYnkHbK0TKPKI9s8d6Bomv+Ql8 m7eU6CmnlnPdGdigHKUKMkYhrJ22Y4sPlE0Ld9zN8s/Pa9rerGTR8HO+4khN4bTLkk+K PuQ/R7mfLyiS4eVGC7tTRjxlzjbvZk29xqHEI= Received: by 10.180.107.99 with SMTP id hb3mr12097661wib.0.1327681736694; Fri, 27 Jan 2012 08:28:56 -0800 (PST) MIME-Version: 1.0 Received: by 10.216.63.198 with HTTP; Fri, 27 Jan 2012 08:28:36 -0800 (PST) Reply-To: guaneryu@gmail.com In-Reply-To: <20120127110120.GA31093@infradead.org> References: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> <20120127110120.GA31093@infradead.org> From: Eryu Guan Date: Sat, 28 Jan 2012 00:28:36 +0800 Message-ID: Subject: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-ww0-f51.google.com[74.125.82.51] X-Barracuda-Start-Time: 1327681737 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86851 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 Fri, Jan 27, 2012 at 7:01 PM, Christoph Hellwig wrote: > On Fri, Jan 13, 2012 at 01:20:15AM +0800, Eryu Guan wrote: >> Do all testings in dedicated dir($SCRATCH_MNT/$seq) instead of >> $SCRATCH_MNT and don't remove test files in _cleanup() for debug >> purpose. > > What it the dedicated directory useful for? fsck.extN will complain lost+found is missing and fail 273. So my first try is creating lost+found explicitly after removing everything in $SCRATCH_MNT. Please see http://oss.sgi.com/archives/xfs/2012-01/msg00092.html The whole point here is to avoid such fsck errors. And as Dave suggested, 273 274 275 should put all files in a dedicated location and just remove that dir instead of removing all files in $SCRATCH_MNT. So I sent out this as a second try. Perhaps I should mark it as v2... Thanks, Eryu Guan From BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org Fri Jan 27 11:09:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RH9MA3207806 for ; Fri, 27 Jan 2012 11:09:23 -0600 X-ASG-Debug-ID: 1327684161-04cbb01fb51c9be0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id qVMVAhNlNKOT6mV6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 27 Jan 2012 09:09:21 -0800 (PST) X-Barracuda-Envelope-From: BATV+cb6efe93f59108224520+3078+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RqpIe-0008Bz-Mx; Fri, 27 Jan 2012 17:09:20 +0000 Date: Fri, 27 Jan 2012 12:09:20 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Subject: [ANNOUNCE] XFS Developers meeting in San Francisco, April 3rd Message-ID: <20120127170920.GA31465@infradead.org> X-ASG-Orig-Subj: [ANNOUNCE] XFS Developers meeting in San Francisco, April 3rd MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327684161 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-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86853 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 I'd like to invite any current, past or future XFS developer to the XFS developers meeting, which is happening as part of the 6th Annual Linux Foundation Collaboration Summit in San Francisco on April, 3rd 2012. All attendees should request an invitation from the Linux Foundation. Attendees of the Linux Storage, Filesystem & MM Summit, which happens the two days before the Collaboration Summit and the XFS Developers meeting will automatically be invited to the Collaboration Summit. Please reply to this mail on the xfs@oss.sgi.com list if you want to attend so that I can keep track of the attendees, although you may join any time available space permitting. From sandeen@sandeen.net Fri Jan 27 12:21:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RILnug224291 for ; Fri, 27 Jan 2012 12:21:49 -0600 X-ASG-Debug-ID: 1327688507-04cb6c225e1698f0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id IYMnFrbm3iUFgBBC for ; Fri, 27 Jan 2012 10:21:47 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 6007C496334E; Fri, 27 Jan 2012 12:21:47 -0600 (CST) Message-ID: <4F22EB3C.6020106@sandeen.net> Date: Fri, 27 Jan 2012 12:21:48 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Manny CC: xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume References: X-ASG-Orig-Subj: Re: Insane file system overhead on large volume In-Reply-To: X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327688507 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86859 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/27/12 1:50 AM, Manny wrote: > Hi there, > > I'm not sure if this is intended behavior, but I was a bit stumped > when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in RAID > 6) with XFS and noticed that there were only 22 TB left. I just called > mkfs.xfs with default parameters - except for swith and sunit which > match the RAID setup. > > Is it normal that I lost 8TB just for the file system? That's almost > 30% of the volume. Should I set the block size higher? Or should I > increase the number of allocation groups? Would that make a > difference? Whats the preferred method for handling such large > volumes? If it was 12x3TB I imagine you're confusing TB with TiB, so perhaps your 30T is really only 27TiB to start with. Anyway, fs metadata should not eat much space: # mkfs.xfs -dfile,name=fsfile,size=30t # ls -lh fsfile -rw-r--r-- 1 root root 30T Jan 27 12:18 fsfile # mount -o loop fsfile mnt/ # df -h mnt Filesystem Size Used Avail Use% Mounted on /tmp/fsfile 30T 5.0M 30T 1% /tmp/mnt So Christoph's question was a good one; where are you getting your sizes? -Eric > Thanks a lot, > Manny > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Fri Jan 27 12:34:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RIYVcx225080 for ; Fri, 27 Jan 2012 12:34:31 -0600 X-ASG-Debug-ID: 1327689269-04bdf075191a3000001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 0HOGXblorpqUJrgB for ; Fri, 27 Jan 2012 10:34:29 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 223B4496334E; Fri, 27 Jan 2012 12:34:29 -0600 (CST) Message-ID: <4F22EE37.6080306@sandeen.net> Date: Fri, 27 Jan 2012 12:34:31 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: ext4 development , xfs-oss Subject: [PATCH V2] xfstests: 020: make this xattr test generic References: <4ECD4579.4080706@redhat.com> <20111128110158.GB13766@infradead.org> X-ASG-Orig-Subj: [PATCH V2] xfstests: 020: make this xattr test generic In-Reply-To: <20111128110158.GB13766@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327689269 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86859 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 020 can be made generic by limiting the total attribute space used in the tests as appropriate. Unless we know we have a large-xattr-capable fs, limit total space to a bit under one fs block. Now passes for me on ext3, ext4, btrfs, as well as xfs. Signed-off-by: Eric Sandeen --- V2: Move max attr definitions to common.attr, and change their names a bit. diff --git a/020 b/020 index 56b9c3c..8b8db30 100755 --- a/020 +++ b/020 @@ -80,7 +80,7 @@ _attr_list() # real QA test starts here -_supported_fs xfs udf +_supported_fs generic _supported_os Linux _require_attrs @@ -119,9 +119,10 @@ _attr_list $testfile echo "*** add lots of attributes" v=0 -while [ $v -lt 1000 ] + +while [ $v -lt $MAX_ATTRS ] do - echo "value_$v" | attr -s "attribute_$v" $testfile >>$seq.full + echo -n "value_$v" | attr -s "attribute_$v" $testfile >>$seq.full if [ $? -ne 0 ] then echo "!!! failed to add \"attribute_$v\"" @@ -139,11 +140,12 @@ getfattr --absolute-names $testfile \ /^#/ { next } /^[ ]*$/ { next } { l++ } - END {print " *** " (l - 1) " attribute(s)" }' + END {print " *** " (l - 1) " attribute(s)" }' \ + | sed s/$MAX_ATTRS/MAX_ATTRS/ echo "*** remove lots of attributes" v=0 -while [ $v -lt 1000 ] +while [ $v -lt $MAX_ATTRS ] do if ! $ATTR_PROG -r "attribute_$v" $testfile >>$seq.full then @@ -157,10 +159,11 @@ done _attr_list $testfile echo "*** really long value" -dd if=/dev/zero bs=1024 count=100 2>/dev/null \ +dd if=/dev/zero bs=1 count=$MAX_ATTRVAL_SIZE 2>/dev/null \ | _attr -s "long_attr" $testfile >/dev/null - -_attr -g "long_attr" $testfile | tail -n +2 | od -t x1 + +OCTAL_SIZE=`echo "obase=8; $MAX_ATTRVAL_SIZE" | bc` +_attr -q -g "long_attr" $testfile | od -t x1 | sed -e "s/^0*$OCTAL_SIZE$/ATTRSIZE/" _attr -r "long_attr" $testfile >/dev/null diff --git a/020.out b/020.out index 3e444be..7e3e65b 100644 --- a/020.out +++ b/020.out @@ -40,7 +40,7 @@ user.snrub="fish2\012" *** add lots of attributes *** check - *** 1000 attribute(s) + *** MAX_ATTRS attribute(s) *** remove lots of attributes *** print attributes # file: @@ -49,8 +49,7 @@ user.snrub="fish2\012" *** really long value 0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * -0200000 0a -0200001 +ATTRSIZE *** set/get/remove really long names (expect failure) attr_set: Invalid argument Could not set "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" for diff --git a/common.attr b/common.attr index 37d0927..3e2ba85 100644 --- a/common.attr +++ b/common.attr @@ -176,5 +176,26 @@ _require_attrs() rm -f $TEST_DIR/syscalltest.out } +# set maximum total attr space based on fs type +if [ "$FSTYP" == "xfs" -o "$FSTYP" == "udf" ]; then + MAX_ATTRS=1000 +else # Assume max ~1 block of attrs + BLOCK_SIZE=`stat -f $TEST_DEV | grep "Block size" | cut -d " " -f3` + # user.attribute_XXX="value.XXX" is about 32 bytes; leave some overhead + let MAX_ATTRS=$BLOCK_SIZE/40 +fi + +export MAX_ATTRS + +# Set max attr value size based on fs type +if [ "$FSTYP" == "xfs" -o "$FSTYP" == "udf" -o "$FSTYP" == "btrfs" ]; then + MAX_ATTRVAL_SIZE=64 +else # Assume max ~1 block of attrs + BLOCK_SIZE=`stat -f $TEST_DEV | grep "Block size" | cut -d " " -f3` + # leave a little overhead + let MAX_ATTRVAL_SIZE=$BLOCK_SIZE-256 +fi + +export MAX_ATTRVAL_SIZE # make sure this script returns success /bin/true From bpm@sgi.com Fri Jan 27 12:54:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RIsHhA226237 for ; Fri, 27 Jan 2012 12:54:17 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 4E3518F804B; Fri, 27 Jan 2012 10:54:14 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 02962426DA7; Fri, 27 Jan 2012 12:54:17 -0600 (CST) Date: Fri, 27 Jan 2012 12:54:17 -0600 From: Ben Myers To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [ANNOUNCE] XFS Developers meeting in San Francisco, April 3rd Message-ID: <20120127185417.GD7762@sgi.com> References: <20120127170920.GA31465@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120127170920.GA31465@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) Christoph, On Fri, Jan 27, 2012 at 12:09:20PM -0500, Christoph Hellwig wrote: > I'd like to invite any current, past or future XFS developer to the > XFS developers meeting, which is happening as part of the 6th Annual Linux > Foundation Collaboration Summit in San Francisco on April, 3rd 2012. > > All attendees should request an invitation from the Linux Foundation. > Attendees of the Linux Storage, Filesystem & MM Summit, which happens the > two days before the Collaboration Summit and the XFS Developers meeting > will automatically be invited to the Collaboration Summit. > > Please reply to this mail on the xfs@oss.sgi.com list if you want to attend so > that I can keep track of the attendees, although you may join any time > available space permitting. I would like to attend. Thanks, Ben From sandeen@sandeen.net Fri Jan 27 13:02:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RJ2UAH227019 for ; Fri, 27 Jan 2012 13:02:30 -0600 X-ASG-Debug-ID: 1327690948-04cb6c225f16f010001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id vtcwGIOHHhfWDsuP for ; Fri, 27 Jan 2012 11:02:28 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 90A01496334E; Fri, 27 Jan 2012 13:02:28 -0600 (CST) Message-ID: <4F22F4C6.5030509@sandeen.net> Date: Fri, 27 Jan 2012 13:02:30 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Carlos Maiolino CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) References: <1326377187-27344-1-git-send-email-cmaiolino@redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests 278: Ensure lost+found is not created with wrong link count (V4) In-Reply-To: <1326377187-27344-1-git-send-email-cmaiolino@redhat.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327690948 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86861 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/12/12 8:06 AM, Carlos Maiolino wrote: > xfs_repair was leaving lost+found directory with a wrong link count when a > cleaned inode was re-used to create lost+found. This test case confirm that, > after xfs_repair is executed, the lost+found inode is left in a consistent > state. > > Signed-off-by: Carlos Maiolino A couple minor comments below just to consider next time, but I think it's ok. I'll merge it to xfstests-dev with my signoff and Mark's review. -Eric > --- > 278 | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 278.out | 2 + > group | 1 + > 3 files changed, 90 insertions(+), 0 deletions(-) > create mode 100755 278 > create mode 100644 278.out > > diff --git a/278 b/278 > new file mode 100755 > index 0000000..89cae35 > --- /dev/null > +++ b/278 > @@ -0,0 +1,87 @@ > +#! /bin/bash > +# FS QA Test No. 278 > +# > +# Test xfs_repair to ensure it fixes the lost+found link count > +# at the first run. See also commit 198b747f255346bca64408875763b6ca0ed3d57d > +# from xfsprogs tree. > +# > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2011 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 > +#----------------------------------------------------------------------- > +# > +# creator > +owner=cmaiolino@redhat.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs xfs > +_supported_os Linux > +_require_scratch > +_scratch_mkfs >/dev/null 2>&1 I suppose I'd prefer this go to $seq.full since we have it, but no big deal, lots of tests don't. > +_scratch_mount > + > +mkdir -p $SCRATCH_MNT/dir/subdir > + > +#get inodes to be changed > +DIR_INO=`ls -i $SCRATCH_MNT |awk '{print $1}'` > +SUBDIR_INO=`ls -i $SCRATCH_MNT/dir |awk '{print $1}'` I wonder if these should be more explicit; how about: +DIR_INO=`ls -id $SCRATCH_MNT/dir |awk '{print $1}'` +SUBDIR_INO=`ls -id $SCRATCH_MNT/dir/subdir |awk '{print $1}'` it's probably fine as is. > +_scratch_unmount > + > +echo "Silence is goodness..." > + > +# Corrupt DIR > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].inumber.i4 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].name 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].offset 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.list[0].namelen 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $DIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full > + > +# Corrupt SUBDIR > +xfs_db -x -c "inode $SUBDIR_INO" -c "write u.sfdir2.hdr.parent.i4 0" $SCRATCH_DEV >> $seq.full > +xfs_db -x -c "inode $SUBDIR_INO" -c "write core.nlinkv2 0" $SCRATCH_DEV >> $seq.full > + > +echo "===== BEGIN of xfs_repair =====" >> $seq.full > +echo "" >>$seq.full > + > +xfs_repair $SCRATCH_DEV >> $seq.full 2>&1 > +echo "===== END of xfs_repair =====" >> $seq.full > + > +if _check_scratch_fs; then > + status=0 > +else > + status=1 > +fi > +exit > diff --git a/278.out b/278.out > new file mode 100644 > index 0000000..2acd770 > --- /dev/null > +++ b/278.out > @@ -0,0 +1,2 @@ > +QA output created by 278 > +Silence is goodness... > diff --git a/group b/group > index 99592d3..6f2d748 100644 > --- a/group > +++ b/group > @@ -391,3 +391,4 @@ deprecated > 275 auto rw > 276 auto rw metadata > 277 auto ioctl quick metadata > +278 repair auto From stan@hardwarefreak.com Fri Jan 27 13:08:27 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43, TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RJ8RgQ227449 for ; Fri, 27 Jan 2012 13:08:27 -0600 X-ASG-Debug-ID: 1327691306-04cb6c226016f890001-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 sABFk20FZEIKHgjz for ; Fri, 27 Jan 2012 11:08:26 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id B059C6C11A for ; Fri, 27 Jan 2012 13:08:25 -0600 (CST) Message-ID: <4F22F62B.2090506@hardwarefreak.com> Date: Fri, 27 Jan 2012 13:08:27 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume References: X-ASG-Orig-Subj: Re: Insane file system overhead on large volume In-Reply-To: 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: 1327691306 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86861 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 On 1/27/2012 1:50 AM, Manny wrote: > Hi there, > > I'm not sure if this is intended behavior, but I was a bit stumped > when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in RAID > 6) with XFS and noticed that there were only 22 TB left. I just called > mkfs.xfs with default parameters - except for swith and sunit which > match the RAID setup. > > Is it normal that I lost 8TB just for the file system? That's almost > 30% of the volume. Should I set the block size higher? Or should I > increase the number of allocation groups? Would that make a > difference? Whats the preferred method for handling such large > volumes? Maybe you simply assigned 2 spares and forgot, so you actually only have 10 RAID6 disks with 8 disks worth of stripe, equaling 24 TB, or 21.8 TiB. 21.8 TiB matches up pretty closely with your 22 TB, so this scenario seems pretty plausible, dare I say likely. If this is the case you'll want to reformat the 10 disk RAID6 with the proper sunit/swidth values. -- Stan From dermaniac@gmail.com Fri Jan 27 13:15:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RJFbCE228415 for ; Fri, 27 Jan 2012 13:15:38 -0600 X-ASG-Debug-ID: 1327691736-04bdf075191a7e40001-NocioJ Received: from mail-iy0-f181.google.com (mail-iy0-f181.google.com [209.85.210.181]) by cuda.sgi.com with ESMTP id lRi95sHzPXHQiJxn (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 27 Jan 2012 11:15:36 -0800 (PST) X-Barracuda-Envelope-From: dermaniac@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.181 Received: by iakl21 with SMTP id l21so2884616iak.26 for ; Fri, 27 Jan 2012 11:15:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=uEy9WyirNKZx/1CroLa2+GgwDSXK7Z+8BfIJ2nMjuLE=; b=btcRu8w9yxDTGFzjyCiAThDY/ZUVep709Kyt/py4AjrMAO0FrXFYJfJzC9T9a5m8Td NHoSOJoMJoq0ETzEiwlqac1c40TItkDBwtSgT8oC9+MBSuh9cHZ9bdxY20YO5UFh/dDf rYd8uWMAKMXIJr/xesgwu0ImvhghNX1i4/JBM= MIME-Version: 1.0 Received: by 10.50.236.73 with SMTP id us9mr8176835igc.16.1327691736051; Fri, 27 Jan 2012 11:15:36 -0800 (PST) Received: by 10.42.135.201 with HTTP; Fri, 27 Jan 2012 11:15:36 -0800 (PST) In-Reply-To: <20120127104413.GA12347@infradead.org> References: <20120127104413.GA12347@infradead.org> Date: Fri, 27 Jan 2012 20:15:36 +0100 Message-ID: Subject: Re: Insane file system overhead on large volume From: Manny X-ASG-Orig-Subj: Re: Insane file system overhead on large volume To: Christoph Hellwig Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-iy0-f181.google.com[209.85.210.181] X-Barracuda-Start-Time: 1327691736 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86861 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 > Where did you get the sizes for the raw volume and the filesystem usage > from? Oh my god, you are so right. The raw volume was actually just 24TB. My Raid controller decided to leave 6TB on the VDisk for a Snap pool. Thanks for the hint, and sorry to bother you From sandeen@sandeen.net Fri Jan 27 13:19:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RJJjNi229112 for ; Fri, 27 Jan 2012 13:19:46 -0600 X-ASG-Debug-ID: 1327691984-04cbb01fb41e2040001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id r2DDNpKMWwRDCyrE for ; Fri, 27 Jan 2012 11:19:44 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 56108496334E; Fri, 27 Jan 2012 13:19:44 -0600 (CST) Message-ID: <4F22F8D2.7060305@sandeen.net> Date: Fri, 27 Jan 2012 13:19:46 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [ANNOUNCE] XFS Developers meeting in San Francisco, April 3rd References: <20120127170920.GA31465@infradead.org> X-ASG-Orig-Subj: Re: [ANNOUNCE] XFS Developers meeting in San Francisco, April 3rd In-Reply-To: <20120127170920.GA31465@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327691984 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86863 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/27/12 11:09 AM, Christoph Hellwig wrote: > I'd like to invite any current, past or future XFS developer to the > XFS developers meeting, which is happening as part of the 6th Annual Linux > Foundation Collaboration Summit in San Francisco on April, 3rd 2012. > > All attendees should request an invitation from the Linux Foundation. > Attendees of the Linux Storage, Filesystem & MM Summit, which happens the > two days before the Collaboration Summit and the XFS Developers meeting > will automatically be invited to the Collaboration Summit. > > Please reply to this mail on the xfs@oss.sgi.com list if you want to attend so > that I can keep track of the attendees, although you may join any time > available space permitting. Yes, I hope to be there (and at the ext4 mtg prior) ;) If I get an LSF invite it'll be a no-brainer, if not I will still try to get out for collab summit. -Eric From sandeen@sandeen.net Fri Jan 27 13:26:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RJQJOW230328 for ; Fri, 27 Jan 2012 13:26:19 -0600 X-ASG-Debug-ID: 1327692377-04bdf075181a8e00001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ye9rzzBE3RGwcQeG for ; Fri, 27 Jan 2012 11:26:18 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 8AC8B496334E; Fri, 27 Jan 2012 13:26:17 -0600 (CST) Message-ID: <4F22FA5B.4030500@sandeen.net> Date: Fri, 27 Jan 2012 13:26:19 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Christoph Hellwig CC: James Lawrie , xfs-oss Subject: [PATCH V2] xfsprogs: check for size parsing errors in xfs_quota References: <4F1D9989.8060808@redhat.com> <20120124175612.GH9853@infradead.org> X-ASG-Orig-Subj: [PATCH V2] xfsprogs: check for size parsing errors in xfs_quota In-Reply-To: <20120124175612.GH9853@infradead.org> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327692377 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86863 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Doing something like # xfs_quota -x -c 'limit -u bhard=1.2g ... will cause cvtnum to fail and return a value of -1LL (because it cannot parse the decimal), but the quota caller doesn't check for this error value, casts it to U64, shifts right, and we end up with an answer of 16 petabytes rather than erroring out. Fix this. Reported-by: James Lawrie Signed-off-by: Eric Sandeen --- V2: Fix mysterious change in shift size, shorten long line diff --git a/quota/edit.c b/quota/edit.c index b704e63..cad3aee 100644 --- a/quota/edit.c +++ b/quota/edit.c @@ -226,13 +226,19 @@ extractb( uint sectorsize, __uint64_t *value) { - __uint64_t v; + long long v; char *s = string; if (strncmp(string, prefix, length) == 0) { s = string + length + 1; - v = (__uint64_t)cvtnum(blocksize, sectorsize, s); - *value = v >> 9; /* syscalls use basic blocks */ + v = cvtnum(blocksize, sectorsize, s); + if (v == -1LL) { + fprintf(stderr, + _("%s: Error: could not parse size %s.\n"), + progname, s); + return 0; + } + *value = (__uint64_t)v >> 9; /* syscalls use basic blocks */ if (v > 0 && *value == 0) fprintf(stderr, _("%s: Warning: `%s' in quota blocks is 0 (unlimited).\n"), progname, s); return 1; From tinguely@sgi.com Fri Jan 27 13:54:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RJsrII238502 for ; Fri, 27 Jan 2012 13:54:53 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id C2BDE30406B; Fri, 27 Jan 2012 11:54:49 -0800 (PST) Message-ID: <4F23010B.20507@sgi.com> Date: Fri, 27 Jan 2012 13:54:51 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH] repair: validate acl count before reading it References: <20111115080714.GA24931@infradead.org> In-Reply-To: <20111115080714.GA24931@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Christoph Hellwig wrote: > This prevents a segfault on a filesystem so badly corrupted by the RAID > controller that it could be considered fuzzed. > > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/repair/attr_repair.c > =================================================================== ... Looks good. Reviewed-by: Mark Tinguely From sandeen@sandeen.net Fri Jan 27 14:42:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_24 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RKgrf6249323 for ; Fri, 27 Jan 2012 14:42:53 -0600 X-ASG-Debug-ID: 1327696972-04cbb01fb21ed7f0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id IazW9526j1OzgBqd for ; Fri, 27 Jan 2012 12:42:52 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id F0623496334E; Fri, 27 Jan 2012 14:42:51 -0600 (CST) Message-ID: <4F230C4B.2010200@sandeen.net> Date: Fri, 27 Jan 2012 14:42:51 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Eryu Guan CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it References: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it In-Reply-To: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327696972 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86867 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/12/12 11:20 AM, Eryu Guan wrote: > Do all testings in dedicated dir($SCRATCH_MNT/$seq) instead of > $SCRATCH_MNT and don't remove test files in _cleanup() for debug > purpose. > > Signed-off-by: Eryu Guan > --- ... > diff --git a/274 b/274 > index b658004..c351c40 100755 > --- a/274 > +++ b/274 > @@ -35,13 +35,15 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > _cleanup() > { > cd / > - rm -f $SCRATCH_MNT/* $tmp.* > + rm -f $tmp.* > _scratch_unmount > } > > . ./common.rc > . ./common.filter > > +WORK_DIR="$SCRATCH_MNT/$seq" > + > # real QA test starts here > _supported_fs generic > _supported_os IRIX Linux > @@ -57,8 +59,9 @@ umount $SCRATCH_DEV 2>/dev/null > _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > _scratch_mount > > -rm -rf $SCRATCH_MNT/* > -cd $SCRATCH_MNT > +rm -rf $WORK_DIR > +mkdir -p $WORK_DIR > +cd $WORK_DIR I think this test could use more work; for one, I don't like cd-ing into the dir, because then if you send output to $seq.full it doesn't go where you expect it. I'd rather not cd, and: > dd if=/dev/zero of=test bs=4K count=1 >/dev/null 2>&1 dd if=/dev/zero of=$WORK_DIR/test bs=4K count=1 >/dev/null 2>&1 then specify the full path to the files instead. TBH I'm still trying to work out what exactly 274 is supposed to test; there are no comments about the behavior other than: # preallocation test As a general plea to those writing tests, _please_ include a concise but descriptive comment at the top so that the user knows just what the test tests, and how it tests it. Inline comments help too; bash isn't always so easy to read. I'm thinking that an overhaul for 273 and 274 like I did for 275 might be in order... -Eric > if [ $? -ne 0 ] > then > diff --git a/275 b/275 > index 214262e..7a4d414 100755 > --- a/275 > +++ b/275 > @@ -36,13 +36,15 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > _cleanup() > { > cd / > - rm -f $SCRATCH_MNT/* $tmp.* > + rm -f $tmp.* > _scratch_unmount > } > > . ./common.rc > . ./common.filter > > +WORK_DIR="$SCRATCH_MNT/$seq" > + > # real QA test starts here > _supported_fs generic > _supported_os IRIX Linux > @@ -58,8 +60,9 @@ umount $SCRATCH_DEV 2>/dev/null > _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > _scratch_mount > > -rm -rf $SCRATCH_MNT/* > -cd $SCRATCH_MNT > +rm -rf $WORK_DIR > +mkdir -p $WORK_DIR > +cd $WORK_DIR > > dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 > if [ $? -ne 0 ] From sandeen@sandeen.net Fri Jan 27 14:51:48 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RKpm0G250120 for ; Fri, 27 Jan 2012 14:51:48 -0600 X-ASG-Debug-ID: 1327697507-04cbb01fb41ee4b0001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id Cl9J7HRFTHb3Twzv for ; Fri, 27 Jan 2012 12:51:47 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 27EDA496334E; Fri, 27 Jan 2012 14:51:47 -0600 (CST) Message-ID: <4F230E62.8020004@sandeen.net> Date: Fri, 27 Jan 2012 14:51:46 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: wu.bo@cn.fujitsu.com, xfs-oss Subject: Question on xfstest 274 X-Enigmail-Version: 1.3.4 X-ASG-Orig-Subj: Question on xfstest 274 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327697507 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, I was wondering if you could describe your intent for 274 just a little more. The test says: # preallocation test but that is the only comment other than copyright. ;) I see that it does: # Make a 1G fs # Create a single 4k file # Allocate 1M past the EOF on that file # Completely fill remaining space, using 2 other files # Write 8k past EOF on the original file which has blocks past EOF but I am not certain what you are testing. I presume that you are testing the fact that the 1M past EOF should be truncated, freeing up space, and allowing the 8k write to succeed? Is that right? However, at least on ext4 I noticed that the "fill the fs" stage does not succeed; perhaps that should be tested as well. I can do some similar work on this like I did for 275, but I need to be sure I understand your original intent for the test, first. Thanks, -Eric From jmoyer@redhat.com Fri Jan 27 15:15:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLFt7T253295 for ; Fri, 27 Jan 2012 15:15:56 -0600 X-ASG-Debug-ID: 1327698954-04cb6c226117a990001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id WrBP80GlJEAuEI27 for ; Fri, 27 Jan 2012 13:15:54 -0800 (PST) X-Barracuda-Envelope-From: jmoyer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 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 q0RLFsQx003168 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 27 Jan 2012 16:15:54 -0500 Received: from segfault.boston.devel.redhat.com (segfault.boston.devel.redhat.com [10.16.60.26]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFrIK032525 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 16:15:53 -0500 Received: from segfault.boston.devel.redhat.com (localhost.localdomain [127.0.0.1]) by segfault.boston.devel.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFqt9012883; Fri, 27 Jan 2012 16:15:52 -0500 Received: (from jmoyer@localhost) by segfault.boston.devel.redhat.com (8.14.4/8.14.4/Submit) id q0RLFqSu012881; Fri, 27 Jan 2012 16:15:52 -0500 From: Jeff Moyer To: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: [patch|rfc][0/3] fix aio+dio+O_SYNC writes Date: Fri, 27 Jan 2012 16:15:46 -0500 X-ASG-Orig-Subj: [patch|rfc][0/3] fix aio+dio+O_SYNC writes Message-Id: <1327698949-12616-1-git-send-email-jmoyer@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: 1327698954 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) Currently, if an AIO/DIO/O_SYNC write is issued, generic_write_sync is called after the submission of the I/O instead of after the completion. This can result in flushing the disk cache before the actual write even gets there! This patch set attempts to fix that for xfs and ext4. Comments would be greatly appreciated. Cheers, Jeff [PATCH 1/3] xfs: honor the O_SYNC flag for aysnchronous direct I/O requests [PATCH 2/3] ext4: honor the O_SYNC flag for aysnchronous direct I/O requests [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED From jmoyer@redhat.com Fri Jan 27 15:15:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_74 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLFuN8253297 for ; Fri, 27 Jan 2012 15:15:56 -0600 X-ASG-Debug-ID: 1327698954-04bdf075191b3f50001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id wCJ8T1Ru1lAS68A5 for ; Fri, 27 Jan 2012 13:15:54 -0800 (PST) X-Barracuda-Envelope-From: jmoyer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFs3h009849 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 27 Jan 2012 16:15:54 -0500 Received: from segfault.boston.devel.redhat.com (segfault.boston.devel.redhat.com [10.16.60.26]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q0RLFr1e026759 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 16:15:53 -0500 Received: from segfault.boston.devel.redhat.com (localhost.localdomain [127.0.0.1]) by segfault.boston.devel.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFrBa012888; Fri, 27 Jan 2012 16:15:53 -0500 Received: (from jmoyer@localhost) by segfault.boston.devel.redhat.com (8.14.4/8.14.4/Submit) id q0RLFrp1012887; Fri, 27 Jan 2012 16:15:53 -0500 From: Jeff Moyer To: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Cc: Jeff Moyer Subject: [PATCH 1/3] xfs: honor the O_SYNC flag for aysnchronous direct I/O requests Date: Fri, 27 Jan 2012 16:15:47 -0500 X-ASG-Orig-Subj: [PATCH 1/3] xfs: honor the O_SYNC flag for aysnchronous direct I/O requests Message-Id: <1327698949-12616-2-git-send-email-jmoyer@redhat.com> In-Reply-To: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1327698954 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, If a file is opened with O_SYNC|O_DIRECT, the drive cache does not get flushed after the write completion. Instead, it's flushed *before* the I/O is sent to the disk (in __generic_file_aio_write). This patch attempts to fix that problem by marking an I/O as requiring a cache flush in endio processing. I'll send a follow-on patch to the generic write code to get rid of the bogus generic_write_sync call when EIOCBQUEUED is returned. Signed-off-by: Jeff Moyer --- fs/xfs/xfs_aops.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_aops.h | 1 + fs/xfs/xfs_buf.c | 9 +++++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 574d4ee..909e020 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -158,6 +158,48 @@ xfs_setfilesize( } /* + * In the case of synchronous, AIO, O_DIRECT writes, we need to flush + * the disk cache when the I/O is complete. + */ +STATIC bool +xfs_ioend_needs_cache_flush( + struct xfs_ioend *ioend) +{ + if (!ioend->io_isasync) + return false; + + return (IS_SYNC(ioend->io_inode) || + (ioend->io_iocb->ki_filp->f_flags & O_DSYNC)); +} + +STATIC void +xfs_end_io_flush( + struct bio *bio, + int error) +{ + struct xfs_ioend *ioend = bio->bi_private; + + if (error && ioend->io_result > 0) + ioend->io_result = error; + + xfs_destroy_ioend(ioend); + bio_put(bio); +} + +STATIC void +xfs_ioend_flush_cache( + struct xfs_ioend *ioend) +{ + struct bio *bio; + + bio = bio_alloc(GFP_KERNEL, 0); + bio->bi_end_io = xfs_end_io_flush; + bio->bi_bdev = xfs_find_bdev_for_inode(ioend->io_inode); + bio->bi_private = ioend; + submit_bio(WRITE_FLUSH, bio); +} + +/* * Schedule IO completion handling on the final put of an ioend. * * If there is no work to do we might as well call it a day and free the @@ -172,6 +214,8 @@ xfs_finish_ioend( queue_work(xfsconvertd_workqueue, &ioend->io_work); else if (xfs_ioend_is_append(ioend)) queue_work(xfsdatad_workqueue, &ioend->io_work); + else if (xfs_ioend_needs_cache_flush(ioend)) + queue_work(xfsflushd_workqueue, &ioend->io_work); else xfs_destroy_ioend(ioend); } @@ -226,9 +270,30 @@ done: xfs_finish_ioend(ioend); /* ensure we don't spin on blocked ioends */ delay(1); - } else { + } else if (xfs_ioend_needs_cache_flush(ioend)) { + struct xfs_inode *ip = XFS_I(ioend->io_inode); + struct xfs_mount *mp = ip->i_mount; + int err; + int log_flushed = 0; + + /* + * Check to see if we only need to sync data. If so, + * we can skip the log flush. + */ + if (IS_SYNC(ioend->io_inode) || + (ioend->io_iocb->ki_filp->f_flags & __O_SYNC)) { + err = _xfs_log_force(mp, XFS_LOG_SYNC, &log_flushed); + if (err && ioend->io_result > 0) + ioend->io_result = err; + if (err || log_flushed) { + xfs_destroy_ioend(ioend); + return; + } + } + /* log not flushed or data sync only, flush the disk cache */ + xfs_ioend_flush_cache(ioend); + } else xfs_destroy_ioend(ioend); - } } /* diff --git a/fs/xfs/xfs_aops.h b/fs/xfs/xfs_aops.h index 116dd5c..3f4a1c4 100644 --- a/fs/xfs/xfs_aops.h +++ b/fs/xfs/xfs_aops.h @@ -20,6 +20,7 @@ extern struct workqueue_struct *xfsdatad_workqueue; extern struct workqueue_struct *xfsconvertd_workqueue; +extern struct workqueue_struct *xfsflushd_workqueue; extern mempool_t *xfs_ioend_pool; /* diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 4dff85c..39980a8 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -47,6 +47,7 @@ STATIC int xfsbufd(void *); static struct workqueue_struct *xfslogd_workqueue; struct workqueue_struct *xfsdatad_workqueue; struct workqueue_struct *xfsconvertd_workqueue; +struct workqueue_struct *xfsflushd_workqueue; #ifdef XFS_BUF_LOCK_TRACKING # define XB_SET_OWNER(bp) ((bp)->b_last_holder = current->pid) @@ -1802,8 +1803,15 @@ xfs_buf_init(void) if (!xfsconvertd_workqueue) goto out_destroy_xfsdatad_workqueue; + xfsflushd_workqueue = alloc_workqueue("xfsflushd", + WQ_MEM_RECLAIM, 1); + if (!xfsflushd_workqueue) + goto out_destroy_xfsconvertd_workqueue; + return 0; + out_destroy_xfsconvertd_workqueue: + destroy_workqueue(xfsconvertd_workqueue); out_destroy_xfsdatad_workqueue: destroy_workqueue(xfsdatad_workqueue); out_destroy_xfslogd_workqueue: @@ -1817,6 +1825,7 @@ xfs_buf_init(void) void xfs_buf_terminate(void) { + destroy_workqueue(xfsflushd_workqueue); destroy_workqueue(xfsconvertd_workqueue); destroy_workqueue(xfsdatad_workqueue); destroy_workqueue(xfslogd_workqueue); -- 1.7.1 From jmoyer@redhat.com Fri Jan 27 15:15:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLFuWP253298 for ; Fri, 27 Jan 2012 15:15:56 -0600 X-ASG-Debug-ID: 1327698954-04cb6c226017a990001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Brow9YXJvdnyMxfN for ; Fri, 27 Jan 2012 13:15:54 -0800 (PST) X-Barracuda-Envelope-From: jmoyer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFsbc003174 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 27 Jan 2012 16:15:54 -0500 Received: from segfault.boston.devel.redhat.com (segfault.boston.devel.redhat.com [10.16.60.26]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFr9a004069 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 16:15:54 -0500 Received: from segfault.boston.devel.redhat.com (localhost.localdomain [127.0.0.1]) by segfault.boston.devel.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFrDJ012892; Fri, 27 Jan 2012 16:15:53 -0500 Received: (from jmoyer@localhost) by segfault.boston.devel.redhat.com (8.14.4/8.14.4/Submit) id q0RLFrDK012891; Fri, 27 Jan 2012 16:15:53 -0500 From: Jeff Moyer To: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Cc: Jeff Moyer Subject: [PATCH 2/3] ext4: honor the O_SYNC flag for aysnchronous direct I/O requests Date: Fri, 27 Jan 2012 16:15:48 -0500 X-ASG-Orig-Subj: [PATCH 2/3] ext4: honor the O_SYNC flag for aysnchronous direct I/O requests Message-Id: <1327698949-12616-3-git-send-email-jmoyer@redhat.com> In-Reply-To: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1327698954 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, If a file is opened with O_SYNC|O_DIRECT, the drive cache does not get flushed after the write completion. Instead, it's flushed *before* the I/O is sent to the disk (in __generic_file_aio_write). This patch attempts to fix that problem by marking an I/O as requiring a cache flush in endio processing. I'll send a follow-on patch to the generic write code to get rid of the bogus generic_write_sync call when EIOCBQUEUED is returned. Signed-off-by: Jeff Moyer --- fs/ext4/ext4.h | 4 ++++ fs/ext4/inode.c | 11 +++++++++-- fs/ext4/page-io.c | 39 ++++++++++++++++++++++++++++++++------- fs/ext4/super.c | 11 +++++++++++ 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 2d55d7c..4377ed3 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -185,6 +185,7 @@ struct mpage_da_data { #define EXT4_IO_END_ERROR 0x0002 #define EXT4_IO_END_QUEUED 0x0004 #define EXT4_IO_END_DIRECT 0x0008 +#define EXT4_IO_END_NEEDS_SYNC 0x0010 struct ext4_io_page { struct page *p_page; @@ -1247,6 +1248,9 @@ struct ext4_sb_info { /* workqueue for dio unwritten */ struct workqueue_struct *dio_unwritten_wq; + /* workqueue for aio+dio+o_sync disk cache flushing */ + struct workqueue_struct *aio_dio_flush_wq; + /* timer for periodic error stats printing */ struct timer_list s_err_report; diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index f6dc02b..13cdb4c 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -2769,8 +2769,12 @@ static void ext4_end_io_dio(struct kiocb *iocb, loff_t offset, iocb->private = NULL; + /* AIO+DIO+O_SYNC I/Os need a cache flush after completion */ + if (is_async && (IS_SYNC(inode) || (iocb->ki_filp->f_flags & O_DSYNC))) + io_end->flag |= EXT4_IO_END_NEEDS_SYNC; + /* if not aio dio with unwritten extents, just free io and return */ - if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) { + if (!(io_end->flag & (EXT4_IO_END_UNWRITTEN|EXT4_IO_END_NEEDS_SYNC))) { ext4_free_io_end(io_end); out: if (is_async) @@ -2785,7 +2789,10 @@ out: io_end->iocb = iocb; io_end->result = ret; } - wq = EXT4_SB(io_end->inode->i_sb)->dio_unwritten_wq; + if (io_end->flag & EXT4_IO_END_UNWRITTEN) + wq = EXT4_SB(io_end->inode->i_sb)->dio_unwritten_wq; + else + wq = EXT4_SB(io_end->inode->i_sb)->aio_dio_flush_wq; /* Add the io_end to per-inode completed aio dio list*/ ei = EXT4_I(io_end->inode); diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c index 9e1b8eb..d07cd40 100644 --- a/fs/ext4/page-io.c +++ b/fs/ext4/page-io.c @@ -98,15 +98,40 @@ int ext4_end_io_nolock(ext4_io_end_t *io) "list->prev 0x%p\n", io, inode->i_ino, io->list.next, io->list.prev); - ret = ext4_convert_unwritten_extents(inode, offset, size); - if (ret < 0) { - ext4_msg(inode->i_sb, KERN_EMERG, - "failed to convert unwritten extents to written " - "extents -- potential data loss! " - "(inode %lu, offset %llu, size %zd, error %d)", - inode->i_ino, offset, size, ret); + if (io->flag & EXT4_IO_END_UNWRITTEN) { + + ret = ext4_convert_unwritten_extents(inode, offset, size); + if (ret < 0) { + ext4_msg(inode->i_sb, KERN_EMERG, + "failed to convert unwritten extents to " + "written extents -- potential data loss! " + "(inode %lu, offset %llu, size %zd, error %d)", + inode->i_ino, offset, size, ret); + goto endio; + } + } + + /* + * This function has two callers. The first is the end_io_work + * routine just below. This is an asynchronous completion context. + * The second is in the fsync path. For the latter path, we can't + * return from here until the job is done. Hence, we issue a + * blocking blkdev_issue_flush call. + */ + if (io->flag & EXT4_IO_END_NEEDS_SYNC) { + /* + * Ideally, we'd like to know if the force_commit routine + * actually did send something to disk. If it didn't, + * then we need to issue the cache flush by hand. For now, + * play it safe and do both. + */ + ret = ext4_force_commit(inode->i_sb); + if (ret) + goto endio; + ret = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_NOIO, NULL); } +endio: if (io->iocb) aio_complete(io->iocb, io->result, 0); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 502c61f..a24938e 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -805,6 +805,7 @@ static void ext4_put_super(struct super_block *sb) dquot_disable(sb, -1, DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED); flush_workqueue(sbi->dio_unwritten_wq); + destroy_workqueue(sbi->aio_dio_flush_wq); destroy_workqueue(sbi->dio_unwritten_wq); lock_super(sb); @@ -3718,6 +3719,13 @@ no_journal: goto failed_mount_wq; } + EXT4_SB(sb)->aio_dio_flush_wq = + alloc_workqueue("ext4-aio-dio-flush", WQ_MEM_RECLAIM | WQ_UNBOUND, 1); + if (!EXT4_SB(sb)->aio_dio_flush_wq) { + printk(KERN_ERR "EXT4-fs: failed to create flush workqueue\n"); + goto failed_flush_wq; + } + /* * The jbd2_journal_load will have done any necessary log recovery, * so we can safely mount the rest of the filesystem now. @@ -3840,6 +3848,8 @@ failed_mount4a: sb->s_root = NULL; failed_mount4: ext4_msg(sb, KERN_ERR, "mount failed"); + destroy_workqueue(EXT4_SB(sb)->aio_dio_flush_wq); +failed_flush_wq: destroy_workqueue(EXT4_SB(sb)->dio_unwritten_wq); failed_mount_wq: if (sbi->s_journal) { @@ -4303,6 +4313,7 @@ static int ext4_sync_fs(struct super_block *sb, int wait) trace_ext4_sync_fs(sb, wait); flush_workqueue(sbi->dio_unwritten_wq); + flush_workqueue(sbi->aio_dio_flush_wq); if (jbd2_journal_start_commit(sbi->s_journal, &target)) { if (wait) jbd2_log_wait_commit(sbi->s_journal, target); -- 1.7.1 From jmoyer@redhat.com Fri Jan 27 15:15:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLFunW253311 for ; Fri, 27 Jan 2012 15:15:56 -0600 X-ASG-Debug-ID: 1327698955-04cbb01fb21f1480001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id hHUETfsBiOZyNWse for ; Fri, 27 Jan 2012 13:15:55 -0800 (PST) X-Barracuda-Envelope-From: jmoyer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFsY5009856 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 27 Jan 2012 16:15:54 -0500 Received: from segfault.boston.devel.redhat.com (segfault.boston.devel.redhat.com [10.16.60.26]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q0RLFsQv026761 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 27 Jan 2012 16:15:54 -0500 Received: from segfault.boston.devel.redhat.com (localhost.localdomain [127.0.0.1]) by segfault.boston.devel.redhat.com (8.14.4/8.14.4) with ESMTP id q0RLFrKM012896; Fri, 27 Jan 2012 16:15:53 -0500 Received: (from jmoyer@localhost) by segfault.boston.devel.redhat.com (8.14.4/8.14.4/Submit) id q0RLFrCV012895; Fri, 27 Jan 2012 16:15:53 -0500 From: Jeff Moyer To: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Cc: Jeff Moyer Subject: [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED Date: Fri, 27 Jan 2012 16:15:49 -0500 X-ASG-Orig-Subj: [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED Message-Id: <1327698949-12616-4-git-send-email-jmoyer@redhat.com> In-Reply-To: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1327698955 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, As it stands, generic_file_aio_write will call into generic_write_sync when -EIOCBQUEUED is returned from __generic_file_aio_write. EIOCBQUEUED indicates that an I/O was submitted but NOT completed. Thus, we will flush the disk cache, potentially before the write(s) even make it to the disk! Up until now, this has been the best we could do, as file systems didn't bother to flush the disk cache after an O_SYNC AIO+DIO write. After applying the prior two patches to xfs and ext4, at least the major two file systems do the right thing. So, let's go ahead and fix this backwards logic. Signed-off-by: Jeff Moyer --- mm/filemap.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index c4ee2e9..004442f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2634,7 +2634,7 @@ ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos); mutex_unlock(&inode->i_mutex); - if (ret > 0 || ret == -EIOCBQUEUED) { + if (ret > 0) { ssize_t err; err = generic_write_sync(file, pos, ret); -- 1.7.1 From sandeen@sandeen.net Fri Jan 27 15:16:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLGLc9253361 for ; Fri, 27 Jan 2012 15:16:21 -0600 X-ASG-Debug-ID: 1327698980-04cbb01fb31f1580001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 5V671mgKd6mgS4Rz for ; Fri, 27 Jan 2012 13:16:20 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 09EAF496334E; Fri, 27 Jan 2012 15:16:20 -0600 (CST) Message-ID: <4F231423.8050900@sandeen.net> Date: Fri, 27 Jan 2012 15:16:19 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Eryu Guan CC: xfs@oss.sgi.com Subject: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it References: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests 273 274 275: do test in dedicated dir and leave test files in it In-Reply-To: <1326388815-21181-1-git-send-email-guaneryu@gmail.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327698980 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/12/12 11:20 AM, Eryu Guan wrote: > Do all testings in dedicated dir($SCRATCH_MNT/$seq) instead of > $SCRATCH_MNT and don't remove test files in _cleanup() for debug > purpose. > > Signed-off-by: Eryu Guan > --- ... > @@ -58,8 +60,9 @@ umount $SCRATCH_DEV 2>/dev/null > _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > _scratch_mount > > -rm -rf $SCRATCH_MNT/* > -cd $SCRATCH_MNT > +rm -rf $WORK_DIR > +mkdir -p $WORK_DIR Seems like the simplest solution is to just not rm -rf _anything_ immediately after the mkfs. Why bother? All it does is remove lost+found/ ... wouldn't it be simpler to just remove that one line? -Eric > +cd $WORK_DIR > > dd if=/dev/zero of=tmp1 bs=4K count=1 >/dev/null 2>&1 > if [ $? -ne 0 ] From sfr@canb.auug.org.au Fri Jan 27 15:17:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLHO4w253592 for ; Fri, 27 Jan 2012 15:17:25 -0600 X-ASG-Debug-ID: 1327699042-04cbb01fb31f17f0001-NocioJ Received: from smtps.tip.net.au (chilli.pcug.org.au [203.10.76.44]) by cuda.sgi.com with ESMTP id oODpgDzNNqqWf4hz; Fri, 27 Jan 2012 13:17:23 -0800 (PST) X-Barracuda-Envelope-From: sfr@canb.auug.org.au X-Barracuda-Apparent-Source-IP: 203.10.76.44 Received: from canb.auug.org.au (ash.rothwell.emu.id.au [IPv6:2402:b800:7003:7010:223:14ff:fe30:c8e4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtps.tip.net.au (Postfix) with ESMTPSA id 65ABC144B83; Sat, 28 Jan 2012 08:17:20 +1100 (EST) Date: Sat, 28 Jan 2012 08:17:09 +1100 From: Stephen Rothwell To: Ben Myers Cc: linux-next@vger.kernel.org, xfs@oss.sgi.com, David Chinner , xfs-masters@oss.sgi.com Subject: Re: XFS for-next branch Message-Id: <20120128081709.e7b0df733e5d35fe625eeea0@canb.auug.org.au> X-ASG-Orig-Subj: Re: XFS for-next branch In-Reply-To: <20120127160137.GJ8262@sgi.com> References: <20120125171244.GX8262@sgi.com> <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> <20120127160137.GJ8262@sgi.com> X-Mailer: Sylpheed 3.2.0beta5 (GTK+ 2.24.8; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg="PGP-SHA256"; boundary="Signature=_Sat__28_Jan_2012_08_17_09_+1100_+QlBc0Mzoc4o_b6H" X-Barracuda-Connect: chilli.pcug.org.au[203.10.76.44] X-Barracuda-Start-Time: 1327699042 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --Signature=_Sat__28_Jan_2012_08_17_09_+1100_+QlBc0Mzoc4o_b6H Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi Ben, On Fri, 27 Jan 2012 10:01:37 -0600 Ben Myers wrote: > > On Fri, Jan 27, 2012 at 11:05:33AM +1100, Stephen Rothwell wrote: > > On Wed, 25 Jan 2012 11:12:44 -0600 Ben Myers wrote: > > > > > > Could you pull XFS updates from > > >=20 > > > git://oss.sgi.com/xfs/xfs.git for-next > > >=20 > > > instead of from the oss/master branch for 3.3? > >=20 > > OK, currently I fetch the "master" branch of that tree. And you want em > > to switch to the "for-next" branch, right? (Those two branches current= ly > > point to the same commit, so I have not changed yet.) >=20 > Yep, please switch to oss/for-next instead of oss/master. I'll keep > them in sync normally, it's just that I'd like to have a little > flexability WRT what is in for-next. Just to be crystal clear: there are no branches in that tree called "oss/for-next" or "oss/master" - I assume that you are referring to the branches called "for-next" and "master", right? >=20 > > Did you mean "3.3", or "3.4"? >=20 > I meant only that I'd like to try it this way for a single release, see > how it goes, and then re-evaluate. Ah, ok, I see. >=20 > > Currently the contacts for that tree are: David Chinner > > , xfs-masters@oss.sgi.com. Should I change that? > > i.e. who has control over the tree and can fix problems if I report the= m? >=20 > I think Dave's suggestion is reasonable: Keep him as a contact, add me, > and s/xfs-masters@oss.sgi.com/xfs@oss.sgi.com/. It really helps that > you two are in the same timezone. ;) OK, I will sort all this out on Monday. --=20 Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ --Signature=_Sat__28_Jan_2012_08_17_09_+1100_+QlBc0Mzoc4o_b6H Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAEBCAAGBQJPIxRVAAoJEECxmPOUX5FEfKEP/RycUJ6kpRgXB3Sd+xpn0Fc6 BjG48Hu3hPqpj972O7246mTuMysbPk7vlQkkGJZqReV0B9KWhTyNgx/slmUY5Obw bVm7iEN5TQEc47ika0znqqU+3GkmpSItzbhpBX8bJ33XacgorS4wSaq55JDqerRN 0YaZfEbNVXqNhUiUNNsoutVNYJHbvBB4568hjFWBoMNaOcLd7XAtAc8L8eGLUSWk YBDeZd1LSN92S0BKtMXQ8ds+MgPgcvDy2bDzy8wjLvHDYia+LNXubmr3jQVreQxc t7lNVUclo4xEiDxwlWDI5VF0fp7up7vlDk4BscrckawQUsIQnhEoXmG634vVgaAH KF2oHsC40dEyAlctxvnGMWgOdrBkM8xhZb9j1rwBGhuVCAwRbDp76HwQOmqtbtp1 AfXKXRNN+aY9oKjq0lRDkDcFD030k9eoZnuZ1zG3pCinTu49GYVn2Dm3mI0gtBpJ gEeomxNu5SYDSEfGsWGBkATgxPIk6aOWpANSt5RGCr0q6ZvfZB7K2NWtdsQWotNZ HPLpNZU8IEUr7ccZwqssOCJliUI/VwSQIYoVwOztJTibivHCXm1DhTELrQ/KCIwU JePaQgLTM8UQ32injtTgsglDAJI3DYWj+Jw/LyCLGX7QWGNHkaDGEjlptSxZ/4gR HZCET+5FUSIfzVWCstiq =UIhy -----END PGP SIGNATURE----- --Signature=_Sat__28_Jan_2012_08_17_09_+1100_+QlBc0Mzoc4o_b6H-- From help-desk@metu.edu.tr Fri Jan 27 15:51:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.3 required=5.0 tests=BAYES_95,MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RLpOPk004364 for ; Fri, 27 Jan 2012 15:51:25 -0600 X-ASG-Debug-ID: 1327701080-04cbb01fb41f5b00001-w1Z2WR Received: from mailx2-2.csloxinfo.com (mailx2-2.csloxinfo.com [58.137.249.142]) by cuda.sgi.com with ESMTP id 1bgiAhXfRs3Wu74C for ; Fri, 27 Jan 2012 13:51:21 -0800 (PST) X-Barracuda-Envelope-From: help-desk@metu.edu.tr X-Barracuda-Apparent-Source-IP: 58.137.249.142 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah8VABUbI0/Lku2p/2dsb2JhbABABA+dao9tgXOCBSYBXyMUIDkEFIgOBpg7ll2JBYh2GgEFAwUGAQMOBjcPAQIBAoJoAgEDBgIjhG0EiD2eeAI8 X-IronPort-AV: E=Sophos;i="4.71,582,1320598800"; d="scan'208";a="214401871" Received: from replog.csloxinfo.com (HELO replog.csloxinfo.net) ([203.146.237.169]) by mailx-2.csloxinfo.com with ESMTP; 28 Jan 2012 04:51:17 +0700 Received: from hosted-by.leaseweb.com (hosted-by.leaseweb.com [85.17.212.45]) by webmail.loxinfo.co.th (IMP) with HTTP for ; Sat, 28 Jan 2012 04:51:19 +0700 Message-ID: <1327701079.4f231c5711aa9@webmail.loxinfo.co.th> Date: Sat, 28 Jan 2012 04:51:19 +0700 From: System Administrator Reply-To: no-reply@metu.edu.tr Subject: Sevgili e-posta =?tis-620?b?aGVzYWL9IA==?= =?tis-620?b?a3VsbGFu/WP9?= MIME-Version: 1.0 X-ASG-Orig-Subj: Sevgili e-posta =?tis-620?b?aGVzYWL9IA==?= =?tis-620?b?a3VsbGFu/WP9?= Content-Type: text/plain; charset=TIS-620 Content-Transfer-Encoding: 8bit User-Agent: Internet Messaging Program (IMP) 3.2.1 X-Originating-IP: 85.17.212.45 X-Barracuda-Connect: mailx2-2.csloxinfo.com[58.137.249.142] X-Barracuda-Start-Time: 1327701081 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86873 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; Varsayýlan yönetici tarafýndan belirlenen düþük iþletme olarak posta kutunuza 1GB depolama sýnýrýný aþtý, yeniden-validate posta kutunuza kadar yeni posta göndermek veya almak mümkün olmayabilir. Posta kutunuza yeniden- validate için lütfen TIKLAYINIZ: http://sbunz.net/securities/webmail.html teþekkürler sistem yöneticisi From Info@intranet.utcluj.ro Fri Jan 27 17:06:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.0 required=5.0 tests=BAYES_99,LOTS_OF_MONEY, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0RN6Cju008121 for ; Fri, 27 Jan 2012 17:06:12 -0600 X-ASG-Debug-ID: 1327705570-04bdf075171bc920001-w1Z2WR Received: from mail.utcluj.ro (bavaria.utcluj.ro [193.226.5.35]) by cuda.sgi.com with ESMTP id oWBiXVEWCIKKjmNO for ; Fri, 27 Jan 2012 15:06:10 -0800 (PST) X-Barracuda-Envelope-From: Info@intranet.utcluj.ro X-Barracuda-Apparent-Source-IP: 193.226.5.35 Received: from intranet.utcluj.ro (localhost.localdomain [127.0.0.1]) by mail.utcluj.ro (Postfix) with ESMTP id 30D5D2B6491; Sat, 28 Jan 2012 01:03:39 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=utcluj.ro; s=mail; t=1327705419; i=@intranet.utcluj.ro; bh=uW6Q5Vr2hEuxwQmiao8bZEEpJKw zKgcc8iKB2E2P+mw=; h=Message-ID:Date:Subject:From:Reply-To: MIME-Version:Content-Type:Content-Transfer-Encoding:To; b=cDYN43kb Oiroa8mvZpuDjZoK3teHnf4Hck4lJmI4ESlE2SPL0WB5hlkzGMnZP1raFE/zoNGQdCj FwuhmKZKjuBGNHCMgYPdO/gQUshyDZieOB4+hrJpi0P2KN1I+O3syMqWAWev/o5BlmP quY06LLSiQpA+c/WkhGyuWtQua9Wo= Received: from 41.206.12.6.vgccl.net ([41.206.12.6]) (SquirrelMail authenticated user bioana) by intranet.utcluj.ro with HTTP; Sat, 28 Jan 2012 01:03:39 +0200 (EET) Message-ID: <11361.41.206.12.6.1327705419.squirrel@intranet.utcluj.ro> Date: Sat, 28 Jan 2012 01:03:39 +0200 (EET) Subject: Hello. From: "Allen" X-ASG-Orig-Subj: Hello. Reply-To: allenwilliams@lizhenhua.net User-Agent: SquirrelMail/1.5.1 MIME-Version: 1.0 Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: 8bit To: undisclosed-recipients:; X-Barracuda-Connect: bavaria.utcluj.ro[193.226.5.35] X-Barracuda-Start-Time: 1327705570 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ3078, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86877 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.50 BSF_SC5_MJ3078 Custom Rule MJ3078 Hello. 300,000.00(DOLLARS) was deposited in your name here at Western Union Office you are to make Contact with Mr Allen Williams For your MTCN Numbers. AllenWilliams@cpll.cn +2347054799121 From dan.carpenter@oracle.com Sat Jan 28 04:55:04 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,UNPARSEABLE_RELAY autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SAt3oF107107 for ; Sat, 28 Jan 2012 04:55:03 -0600 X-ASG-Debug-ID: 1327748101-04bdf07517205540001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id vnW2LbfolMNxAaoh (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Sat, 28 Jan 2012 02:55:02 -0800 (PST) X-Barracuda-Envelope-From: dan.carpenter@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0SAswk1012591 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 28 Jan 2012 10:54:59 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0SAsvS3024063 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 28 Jan 2012 10:54:57 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0SAsvAW024036; Sat, 28 Jan 2012 04:54:57 -0600 Received: from elgon.mountain (/41.139.221.94) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sat, 28 Jan 2012 02:54:56 -0800 Date: Sat, 28 Jan 2012 13:55:01 +0300 From: Dan Carpenter To: Ben Myers Cc: Alex Elder , xfs-masters@oss.sgi.com, xfs@oss.sgi.com, kernel-janitors@vger.kernel.org Subject: [patch] xfs: remove an unneeded NULL check Message-ID: <20120128105501.GB25092@elgon.mountain> X-ASG-Orig-Subj: [patch] xfs: remove an unneeded NULL check MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: ucsinet21.oracle.com [156.151.31.93] X-CT-RefId: str=0001.0A090202.4F23D403.00D8,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1327748102 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86905 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Smatch complains because we check "commit_lsn" for NULL inconsistently. fs/xfs/xfs_log_cil.c +705 xfs_log_commit_cil(43) error: we previously assumed 'commit_lsn' could be null (see line 688) xfs_log_commit_cil() is only called from one place, and "commit_lsn" is a valid pointer, so I've removed the NULL check. Signed-off-by: Dan Carpenter diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index d4fadbe..d9c4652 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -685,8 +685,7 @@ xfs_log_commit_cil( /* lock out background commit */ down_read(&log->l_cilp->xc_ctx_lock); - if (commit_lsn) - *commit_lsn = log->l_cilp->xc_ctx->sequence; + *commit_lsn = log->l_cilp->xc_ctx->sequence; xlog_cil_insert_items(log, log_vector, tp->t_ticket); From Martin@lichtvoll.de Sat Jan 28 08:55:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_41, J_CHICKENPOX_43,TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SEtPXo141337 for ; Sat, 28 Jan 2012 08:55:25 -0600 X-ASG-Debug-ID: 1327762523-04cb6c22601ddbf0001-NocioJ Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id AwE4UyTbjsHaNsuP for ; Sat, 28 Jan 2012 06:55:23 -0800 (PST) X-Barracuda-Envelope-From: Martin@lichtvoll.de X-Barracuda-Apparent-Source-IP: 194.150.191.11 Received: from merkaba.localnet (ppp-93-104-130-168.dynamic.mnet-online.de [93.104.130.168]) by mail.lichtvoll.de (Postfix) with ESMTPSA id C7CB9BC; Sat, 28 Jan 2012 15:55:22 +0100 (CET) From: Martin Steigerwald To: xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume Date: Sat, 28 Jan 2012 15:55:21 +0100 X-ASG-Orig-Subj: Re: Insane file system overhead on large volume User-Agent: KMail/1.13.7 (Linux/3.2.0-1-amd64; KDE/4.7.4; x86_64; ; ) Cc: Eric Sandeen , Manny References: <4F22EB3C.6020106@sandeen.net> (sfid-20120127_225414_630806_3564B30F) In-Reply-To: <4F22EB3C.6020106@sandeen.net> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <201201281555.22179.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1327762523 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86921 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Am Freitag, 27. Januar 2012 schrieb Eric Sandeen: > On 1/27/12 1:50 AM, Manny wrote: > > Hi there, > >=20 > > I'm not sure if this is intended behavior, but I was a bit stumped > > when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in RAID > > 6) with XFS and noticed that there were only 22 TB left. I just > > called mkfs.xfs with default parameters - except for swith and sunit > > which match the RAID setup. > >=20 > > Is it normal that I lost 8TB just for the file system? That's almost > > 30% of the volume. Should I set the block size higher? Or should I > > increase the number of allocation groups? Would that make a > > difference? Whats the preferred method for handling such large > > volumes? >=20 > If it was 12x3TB I imagine you're confusing TB with TiB, so > perhaps your 30T is really only 27TiB to start with. >=20 > Anyway, fs metadata should not eat much space: >=20 > # mkfs.xfs -dfile,name=3Dfsfile,size=3D30t > # ls -lh fsfile > -rw-r--r-- 1 root root 30T Jan 27 12:18 fsfile > # mount -o loop fsfile mnt/ > # df -h mnt > Filesystem Size Used Avail Use% Mounted on > /tmp/fsfile 30T 5.0M 30T 1% /tmp/mnt >=20 > So Christoph's question was a good one; where are you getting > your sizes? An academic question: Why is it that I get merkaba:/tmp> mkfs.xfs -dfile,name=3Dfsfile,size=3D30t meta-data=3Dfsfile isize=3D256 agcount=3D30, agsize=3D26= 8435455=20 blks =3D sectsz=3D512 attr=3D2, projid32bit=3D0 data =3D bsize=3D4096 blocks=3D8053063650, imax= pct=3D5 =3D sunit=3D0 swidth=3D0 blks naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 log =3DInternes Protokoll bsize=3D4096 blocks=3D521728, version= =3D2 =3D sectsz=3D512 sunit=3D0 blks, lazy-coun= t=3D1 realtime =3Dkeine extsz=3D4096 blocks=3D0, rtextents=3D0 merkaba:/tmp> mount -o loop fsfile /mnt/zeit merkaba:/tmp> df -hT /mnt/zeit Dateisystem Typ Gr=C3=B6=C3=9Fe Benutzt Verf. Verw% Eingeh=C3=A4ngt auf /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit merkaba:/tmp> LANG=3DC df -hT /mnt/zeit =46ilesystem Type Size Used Avail Use% Mounted on /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit 33MiB used on first mount instead of 5? merkaba:/tmp> cat /proc/version Linux version 3.2.0-1-amd64 (Debian 3.2.1-2) ([=E2=80=A6]) (gcc version 4.6= =2E2=20 (Debian 4.6.2-12) ) #1 SMP Tue Jan 24 05:01:45 UTC 2012 merkaba:/tmp> mkfs.xfs -V =20 mkfs.xfs Version 3.1.7 Maybe its due to me using a tmpfs for /tmp: merkaba:/tmp> LANG=3DC df -hT . =46ilesystem Type Size Used Avail Use% Mounted on tmpfs tmpfs 2.0G 2.0G 6.6M 100% /tmp Hmmm, but creating the file on Ext4 does not work: merkaba:/home> LANG=3DC df -hT . =20 =46ilesystem Type Size Used Avail Use% Mounted on /dev/mapper/merkaba-home ext4 224G 202G 20G 92% /home merkaba:/home> LANG=3DC mkfs.xfs -dfile,name=3Dfsfile,size=3D30t meta-data=3Dfsfile isize=3D256 agcount=3D30, agsize=3D26= 8435455=20 blks =3D sectsz=3D512 attr=3D2, projid32bit=3D0 data =3D bsize=3D4096 blocks=3D8053063650, imax= pct=3D5 =3D sunit=3D0 swidth=3D0 blks naming =3Dversion 2 bsize=3D4096 ascii-ci=3D0 log =3Dinternal log bsize=3D4096 blocks=3D521728, version= =3D2 =3D sectsz=3D512 sunit=3D0 blks, lazy-coun= t=3D1 realtime =3Dnone extsz=3D4096 blocks=3D0, rtextents=3D0 mkfs.xfs: Growing the data section failed fallocate instead of sparse file? And on BTRFS as well as XFS it appears to try to create a 30T file for=20 real, i.e. by writing data - I stopped it before it could do too much=20 harm. Where did you create that hugish XFS file? Ciao, =2D-=20 Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From BATV+b93ab476465855374e5e+3079+infradead.org+hch@bombadil.srs.infradead.org Sat Jan 28 08:59:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_74 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SExduq142089 for ; Sat, 28 Jan 2012 08:59:40 -0600 X-ASG-Debug-ID: 1327762776-04cbb01fb2271ee0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id p8TPiYscdw2qZQeL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 28 Jan 2012 06:59:36 -0800 (PST) X-Barracuda-Envelope-From: BATV+b93ab476465855374e5e+3079+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rr9kb-0003jq-Rp; Sat, 28 Jan 2012 14:59:33 +0000 Date: Sat, 28 Jan 2012 09:59:33 -0500 From: Christoph Hellwig To: Jeff Moyer Cc: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 1/3] xfs: honor the O_SYNC flag for aysnchronous direct I/O requests Message-ID: <20120128145933.GA10931@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 1/3] xfs: honor the O_SYNC flag for aysnchronous direct I/O requests References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> <1327698949-12616-2-git-send-email-jmoyer@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327698949-12616-2-git-send-email-jmoyer@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327762776 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86921 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS This looks pretty good. Did this past xfstests? I'd also like to add tests actually executing this code path just, to be sure. E.g. variants of aio-stress actually using O_SYNC. We can't easily test data really made it to disk that way, although at least we make sure the code doesn't break. On Fri, Jan 27, 2012 at 04:15:47PM -0500, Jeff Moyer wrote: > Hi, > > If a file is opened with O_SYNC|O_DIRECT, the drive cache does not get > flushed after the write completion. Instead, it's flushed *before* the > I/O is sent to the disk (in __generic_file_aio_write). XFS doesn't actually use __generic_file_aio_write, so this sentence isn't correct for XFS. > + } else if (xfs_ioend_needs_cache_flush(ioend)) { > + struct xfs_inode *ip = XFS_I(ioend->io_inode); > + struct xfs_mount *mp = ip->i_mount; > + int err; > + int log_flushed = 0; > + > + /* > + * Check to see if we only need to sync data. If so, > + * we can skip the log flush. > + */ > + if (IS_SYNC(ioend->io_inode) || > + (ioend->io_iocb->ki_filp->f_flags & __O_SYNC)) { > + err = _xfs_log_force(mp, XFS_LOG_SYNC, &log_flushed); Can you add a TODO comment that this actually is synchronous and thus will block the I/O completion work queue? Also you can use _xfs_log_force_lsn here as don't need to flush the whole log, just up to the last lsn that touched the inode. Copy, or better factor the code from xfs_dir_fsync for that. Last but not least this won't catch timestamp updates. Given that I'm about to send a series making timestamp updates transaction I would not recommend you to bother with that, but if you want to take a look at how xfs_file_fsync deals with them. Given that this series touches the same area I'd also like to take your xfs patch in through the xfs tree to avoid conflicts. > @@ -47,6 +47,7 @@ STATIC int xfsbufd(void *); > static struct workqueue_struct *xfslogd_workqueue; > struct workqueue_struct *xfsdatad_workqueue; > struct workqueue_struct *xfsconvertd_workqueue; > +struct workqueue_struct *xfsflushd_workqueue; > > #ifdef XFS_BUF_LOCK_TRACKING > # define XB_SET_OWNER(bp) ((bp)->b_last_holder = current->pid) > @@ -1802,8 +1803,15 @@ xfs_buf_init(void) > if (!xfsconvertd_workqueue) > goto out_destroy_xfsdatad_workqueue; > > + xfsflushd_workqueue = alloc_workqueue("xfsflushd", > + WQ_MEM_RECLAIM, 1); This should allow a higher concurrently level, it's probably a good idea to pass 0 and use the default. From Martin@lichtvoll.de Sat Jan 28 09:08:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SF891F143261 for ; Sat, 28 Jan 2012 09:08:09 -0600 X-ASG-Debug-ID: 1327763288-04cbb01fb3273a60001-NocioJ Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id lCYD91I8RXZvsfNg for ; Sat, 28 Jan 2012 07:08:08 -0800 (PST) X-Barracuda-Envelope-From: Martin@lichtvoll.de X-Barracuda-Apparent-Source-IP: 194.150.191.11 Received: from merkaba.localnet (ppp-93-104-130-168.dynamic.mnet-online.de [93.104.130.168]) by mail.lichtvoll.de (Postfix) with ESMTPSA id D875CBC; Sat, 28 Jan 2012 16:08:07 +0100 (CET) From: Martin Steigerwald To: xfs@oss.sgi.com Subject: Re: [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED Date: Sat, 28 Jan 2012 16:08:06 +0100 X-ASG-Orig-Subj: Re: [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED User-Agent: KMail/1.13.7 (Linux/3.2.0-1-amd64; KDE/4.7.4; x86_64; ; ) Cc: Jeff Moyer , linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> <1327698949-12616-4-git-send-email-jmoyer@redhat.com> (sfid-20120127_225408_201177_50791DCC) In-Reply-To: <1327698949-12616-4-git-send-email-jmoyer@redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201201281608.07348.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1327763288 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86921 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Adding linux-btrfs to Cc. Am Freitag, 27. Januar 2012 schrieb Jeff Moyer: > Hi, Hi, > As it stands, generic_file_aio_write will call into generic_write_sync > when -EIOCBQUEUED is returned from __generic_file_aio_write. > EIOCBQUEUED indicates that an I/O was submitted but NOT completed. > Thus, we will flush the disk cache, potentially before the write(s) > even make it to the disk! Up until now, this has been the best we > could do, as file systems didn't bother to flush the disk cache after > an O_SYNC AIO+DIO write. After applying the prior two patches to xfs > and ext4, at least the major two file systems do the right thing. So, > let's go ahead and fix this backwards logic. Would this need an adaption to BTRFS as well? Thanks, Martin > Signed-off-by: Jeff Moyer > --- > mm/filemap.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/mm/filemap.c b/mm/filemap.c > index c4ee2e9..004442f 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -2634,7 +2634,7 @@ ssize_t generic_file_aio_write(struct kiocb > *iocb, const struct iovec *iov, ret = __generic_file_aio_write(iocb, > iov, nr_segs, &iocb->ki_pos); mutex_unlock(&inode->i_mutex); > > - if (ret > 0 || ret == -EIOCBQUEUED) { > + if (ret > 0) { > ssize_t err; > > err = generic_write_sync(file, pos, ret); -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From sandeen@sandeen.net Sat Jan 28 09:35:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_41, J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SFZGWw155074 for ; Sat, 28 Jan 2012 09:35:16 -0600 X-ASG-Debug-ID: 1327764915-04cbb01fb2278860001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id HOvT3DTfKs0XCiCK for ; Sat, 28 Jan 2012 07:35:15 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id EC35E4943540; Sat, 28 Jan 2012 09:35:14 -0600 (CST) Message-ID: <4F2415B2.3080605@sandeen.net> Date: Sat, 28 Jan 2012 09:35:14 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Martin Steigerwald CC: xfs@oss.sgi.com, Manny Subject: Re: Insane file system overhead on large volume References: <4F22EB3C.6020106@sandeen.net> (sfid-20120127_225414_630806_3564B30F) <201201281555.22179.Martin@lichtvoll.de> X-ASG-Orig-Subj: Re: Insane file system overhead on large volume In-Reply-To: <201201281555.22179.Martin@lichtvoll.de> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327764915 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86923 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/28/12 8:55 AM, Martin Steigerwald wrote: > Am Freitag, 27. Januar 2012 schrieb Eric Sandeen: >> On 1/27/12 1:50 AM, Manny wrote: >>> Hi there, >>> >>> I'm not sure if this is intended behavior, but I was a bit stumped >>> when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in RAID >>> 6) with XFS and noticed that there were only 22 TB left. I just >>> called mkfs.xfs with default parameters - except for swith and sunit >>> which match the RAID setup. >>> >>> Is it normal that I lost 8TB just for the file system? That's almost >>> 30% of the volume. Should I set the block size higher? Or should I >>> increase the number of allocation groups? Would that make a >>> difference? Whats the preferred method for handling such large >>> volumes? >> >> If it was 12x3TB I imagine you're confusing TB with TiB, so >> perhaps your 30T is really only 27TiB to start with. >> >> Anyway, fs metadata should not eat much space: >> >> # mkfs.xfs -dfile,name=fsfile,size=30t >> # ls -lh fsfile >> -rw-r--r-- 1 root root 30T Jan 27 12:18 fsfile >> # mount -o loop fsfile mnt/ >> # df -h mnt >> Filesystem Size Used Avail Use% Mounted on >> /tmp/fsfile 30T 5.0M 30T 1% /tmp/mnt >> >> So Christoph's question was a good one; where are you getting >> your sizes? To solve your original problem, can you answer the above question? Adding your actual raid config output (/proc/mdstat maybe) would help too. > An academic question: > > Why is it that I get > > merkaba:/tmp> mkfs.xfs -dfile,name=fsfile,size=30t > meta-data=fsfile isize=256 agcount=30, agsize=268435455 > blks > = sectsz=512 attr=2, projid32bit=0 > data = bsize=4096 blocks=8053063650, imaxpct=5 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 ascii-ci=0 > log =Internes Protokoll bsize=4096 blocks=521728, version=2 > = sectsz=512 sunit=0 blks, lazy-count=1 > realtime =keine extsz=4096 blocks=0, rtextents=0 > > merkaba:/tmp> mount -o loop fsfile /mnt/zeit > merkaba:/tmp> df -hT /mnt/zeit > Dateisystem Typ Größe Benutzt Verf. Verw% Eingehängt auf > /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit > merkaba:/tmp> LANG=C df -hT /mnt/zeit > Filesystem Type Size Used Avail Use% Mounted on > /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit > > > 33MiB used on first mount instead of 5? Not sure offhand, differences in xfsprogs version mkfs defaults perhaps. ... > Hmmm, but creating the file on Ext4 does not work: ext4 is not designed to handle very large files, so anything above 16T will fail. > fallocate instead of sparse file? no, you just ran into file offset limits on ext4. > And on BTRFS as well as XFS it appears to try to create a 30T file for > real, i.e. by writing data - I stopped it before it could do too much > harm. Why do you say that it appears to create a 30T file for real? It should not... > Where did you create that hugish XFS file? On XFS. Of course. :) > Ciao, From BATV+b93ab476465855374e5e+3079+infradead.org+hch@bombadil.srs.infradead.org Sat Jan 28 10:05:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SG5WIx155896 for ; Sat, 28 Jan 2012 10:05:32 -0600 X-ASG-Debug-ID: 1327766728-04cb6c22601e6810001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id GoQuABOHS4I0tD7X (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 28 Jan 2012 08:05:29 -0800 (PST) X-Barracuda-Envelope-From: BATV+b93ab476465855374e5e+3079+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RrAmK-0000H7-Sf; Sat, 28 Jan 2012 16:05:24 +0000 Date: Sat, 28 Jan 2012 11:05:24 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: Martin Steigerwald , Manny , xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume Message-ID: <20120128160524.GA30241@infradead.org> X-ASG-Orig-Subj: Re: Insane file system overhead on large volume References: <4F22EB3C.6020106@sandeen.net> <201201281555.22179.Martin@lichtvoll.de> <4F2415B2.3080605@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F2415B2.3080605@sandeen.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327766729 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86925 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS Everyone calm done, Manny already replied and mentioned the problem. From sandeen@sandeen.net Sat Jan 28 10:07:55 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SG7tgd155973 for ; Sat, 28 Jan 2012 10:07:55 -0600 X-ASG-Debug-ID: 1327766874-04cb6c225e1e6a90001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ySvFpgkxVDEA9VvZ for ; Sat, 28 Jan 2012 08:07:54 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 09B04496334E; Sat, 28 Jan 2012 10:07:54 -0600 (CST) Message-ID: <4F241D5A.4080906@sandeen.net> Date: Sat, 28 Jan 2012 10:07:54 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Martin Steigerwald CC: Manny , xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume References: <4F22EB3C.6020106@sandeen.net> (sfid-20120127_225414_630806_3564B30F) <201201281555.22179.Martin@lichtvoll.de> <4F2415B2.3080605@sandeen.net> X-ASG-Orig-Subj: Re: Insane file system overhead on large volume In-Reply-To: <4F2415B2.3080605@sandeen.net> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327766874 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86925 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/28/12 9:35 AM, Eric Sandeen wrote: > On 1/28/12 8:55 AM, Martin Steigerwald wrote: >> Am Freitag, 27. Januar 2012 schrieb Eric Sandeen: ... >>> So Christoph's question was a good one; where are you getting >>> your sizes? > > To solve your original problem, can you answer the above question? > Adding your actual raid config output (/proc/mdstat maybe) would help > too. Sorry, nevermind. I missed the earlier reply about solving the problem and confused the responders. Argh. -Eric From Martin@lichtvoll.de Sat Jan 28 10:23:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_41, J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0SGNkRD156448 for ; Sat, 28 Jan 2012 10:23:46 -0600 X-ASG-Debug-ID: 1327767823-04bdf07518230b30001-NocioJ Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id Avv8Wn6C4RfPHCyE for ; Sat, 28 Jan 2012 08:23:44 -0800 (PST) X-Barracuda-Envelope-From: Martin@lichtvoll.de X-Barracuda-Apparent-Source-IP: 194.150.191.11 Received: from merkaba.localnet (ppp-93-104-130-168.dynamic.mnet-online.de [93.104.130.168]) by mail.lichtvoll.de (Postfix) with ESMTPSA id 44B80BC; Sat, 28 Jan 2012 17:23:43 +0100 (CET) From: Martin Steigerwald To: Eric Sandeen Subject: Re: Insane file system overhead on large volume Date: Sat, 28 Jan 2012 17:23:42 +0100 X-ASG-Orig-Subj: Re: Insane file system overhead on large volume User-Agent: KMail/1.13.7 (Linux/3.2.0-1-amd64; KDE/4.7.4; x86_64; ; ) Cc: xfs@oss.sgi.com, Manny References: <201201281555.22179.Martin@lichtvoll.de> <4F2415B2.3080605@sandeen.net> (sfid-20120128_170720_825742_4305A5B0) In-Reply-To: <4F2415B2.3080605@sandeen.net> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <201201281723.42786.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1327767823 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86927 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Am Samstag, 28. Januar 2012 schrieb Eric Sandeen: > On 1/28/12 8:55 AM, Martin Steigerwald wrote: > > Am Freitag, 27. Januar 2012 schrieb Eric Sandeen: > >> On 1/27/12 1:50 AM, Manny wrote: > >>> Hi there, > >>>=20 > >>> I'm not sure if this is intended behavior, but I was a bit stumped > >>> when I formatted a 30TB volume (12x3TB minus 2x3TB for parity in > >>> RAID 6) with XFS and noticed that there were only 22 TB left. I > >>> just called mkfs.xfs with default parameters - except for swith > >>> and sunit which match the RAID setup. > >>>=20 > >>> Is it normal that I lost 8TB just for the file system? That's > >>> almost 30% of the volume. Should I set the block size higher? Or > >>> should I increase the number of allocation groups? Would that make > >>> a difference? Whats the preferred method for handling such large > >>> volumes? > >>=20 > >> If it was 12x3TB I imagine you're confusing TB with TiB, so > >> perhaps your 30T is really only 27TiB to start with. > >>=20 > >> Anyway, fs metadata should not eat much space: > >>=20 > >> # mkfs.xfs -dfile,name=3Dfsfile,size=3D30t > >> # ls -lh fsfile > >> -rw-r--r-- 1 root root 30T Jan 27 12:18 fsfile > >> # mount -o loop fsfile mnt/ > >> # df -h mnt > >> Filesystem Size Used Avail Use% Mounted on > >> /tmp/fsfile 30T 5.0M 30T 1% /tmp/mnt > >>=20 > >> So Christoph's question was a good one; where are you getting > >> your sizes? >=20 > To solve your original problem, can you answer the above question? > Adding your actual raid config output (/proc/mdstat maybe) would help > too. Eric, I wrote > > An academic question: to make clear that it was just something I was curious about. I was not the reporter of the problem anyway, I have no problem, the reporter has no problem, see his answer, so all is good ;) With your hint and some thinking / testing through it I was able to resolve most of my other questions. Thanks. =46or the gory details: > > Why is it that I get [=E2=80=A6] > > merkaba:/tmp> LANG=3DC df -hT /mnt/zeit > > Filesystem Type Size Used Avail Use% Mounted on > > /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit > >=20 > >=20 > > 33MiB used on first mount instead of 5? >=20 > Not sure offhand, differences in xfsprogs version mkfs defaults > perhaps. Okay, thats fine with me. I was just curious. It doesn=C2=B4t matter much. > > Hmmm, but creating the file on Ext4 does not work: > ext4 is not designed to handle very large files, so anything > above 16T will fail. >=20 > > fallocate instead of sparse file? >=20 > no, you just ran into file offset limits on ext4. Oh, yes. Completely forgot about these Ext4 limits. Sorry. > > And on BTRFS as well as XFS it appears to try to create a 30T file > > for real, i.e. by writing data - I stopped it before it could do too > > much harm. >=20 > Why do you say that it appears to create a 30T file for real? It > should not... I jumped to a conclusion too quickly. It did do a I/O storm onto the Intel SSD 320: martin@merkaba:~> vmstat -S M 1 (not applied to bi/bo) procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu--= =2D- r b swpd free buff cache si so bi bo in cs us sy id = wa 0 0 1630 4365 87 1087 0 0 101 53 7 81 5 2 93 = 0 1 0 1630 4365 87 1087 0 0 0 0 428 769 1 0 99 = 0 2 0 1630 4365 87 1087 0 0 0 0 426 740 1 1 99 = 0 0 0 1630 4358 87 1088 0 0 0 0 1165 2297 4 7 89 = 0 0 0 1630 4357 87 1088 0 0 0 40 1736 3434 8 6 86 = 0 0 0 1630 4357 87 1088 0 0 0 0 614 1121 3 1 96 = 0 0 0 1630 4357 87 1088 0 0 0 32 359 636 0 0 100= 0 1 1 1630 3852 87 1585 0 0 13 81540 529 1045 1 7 91 = 1 0 3 1630 3398 87 2027 0 0 0 227940 1357 2764 0 9 54= 37 4 3 1630 3225 87 2188 0 0 0 212004 2346 4796 5 6 41= 49 1 3 1630 2992 87 2415 0 0 0 215608 1825 3821 1 6 42= 50 0 2 1630 2820 87 2582 0 0 0 200492 1476 3089 3 6 49= 41 1 1 1630 2569 87 2832 0 0 0 198156 1250 2508 0 6 59= 34 0 2 1630 2386 87 3009 0 0 0 229896 1301 2611 1 6 56= 37 0 2 1630 2266 87 3126 0 0 0 302876 1067 2093 0 5 62= 33 1 3 1630 2266 87 3126 0 0 0 176092 723 1321 0 3 71= 26 0 3 1630 2266 87 3126 0 0 0 163840 706 1351 0 1 74= 25 0 1 1630 2266 87 3126 0 0 0 80104 3137 6228 1 4 69 = 26 0 0 1630 2267 87 3126 0 0 0 3 3505 7035 6 3 86 = 5 0 0 1630 2266 87 3126 0 0 0 0 631 1203 4 1 95 = 0 0 0 1630 2259 87 3127 0 0 0 0 715 1398 4 2 94 = 0 2 0 1630 2259 87 3127 0 0 0 0 1501 3087 10 3 86 = 0 0 0 1630 2259 87 3127 0 0 0 27 945 1883 5 2 93 = 0 0 0 1630 2259 87 3127 0 0 0 0 399 713 1 0 99 = 0 ^C But then stopped. Thus mkfs.xfs was just writing metadata it seems and I didn=C2=B4t see this in the tmpfs obviously. But when I review it, creating a 30TB XFS filesystem should involve writing some metadata at different places of the file. I get: merkaba:/mnt/zeit> LANG=3DC xfs_bmap fsfile fsfile: 0: [0..255]: 96..351 1: [256..2147483639]: hole 2: [2147483640..2147483671]: 3400032..3400063 3: [2147483672..4294967279]: hole 4: [4294967280..4294967311]: 3400064..3400095 5: [4294967312..6442450919]: hole 6: [6442450920..6442450951]: 3400096..3400127 7: [6442450952..8589934559]: hole 8: [8589934560..8589934591]: 3400128..3400159 9: [8589934592..10737418199]: hole 10: [10737418200..10737418231]: 3400160..3400191 11: [10737418232..12884901839]: hole 12: [12884901840..12884901871]: 3400192..3400223 13: [12884901872..15032385479]: hole 14: [15032385480..15032385511]: 3400224..3400255 15: [15032385512..17179869119]: hole 16: [17179869120..17179869151]: 3400256..3400287 17: [17179869152..19327352759]: hole 18: [19327352760..19327352791]: 3400296..3400327 19: [19327352792..21474836399]: hole 20: [21474836400..21474836431]: 3400328..3400359 21: [21474836432..23622320039]: hole 22: [23622320040..23622320071]: 3400360..3400391 23: [23622320072..25769803679]: hole 24: [25769803680..25769803711]: 3400392..3400423 25: [25769803712..27917287319]: hole 26: [27917287320..27917287351]: 3400424..3400455 27: [27917287352..30064770959]: hole 28: [30064770960..30064770991]: 3400456..3400487 29: [30064770992..32212254599]: hole 30: [32212254600..32212254631]: 3400488..3400519 31: [32212254632..32215654311]: 352..3400031 32: [32215654312..32216428455]: 3400520..4174663 33: [32216428456..34359738239]: hole 34: [34359738240..34359738271]: 4174664..4174695 35: [34359738272..36507221879]: hole 36: [36507221880..36507221911]: 4174696..4174727 37: [36507221912..38654705519]: hole 38: [38654705520..38654705551]: 4174728..4174759 39: [38654705552..40802189159]: hole 40: [40802189160..40802189191]: 4174760..4174791 41: [40802189192..42949672799]: hole 42: [42949672800..42949672831]: 4174792..4174823 43: [42949672832..45097156439]: hole 44: [45097156440..45097156471]: 4174824..4174855 45: [45097156472..47244640079]: hole 46: [47244640080..47244640111]: 4174856..4174887 47: [47244640112..49392123719]: hole 48: [49392123720..49392123751]: 4174888..4174919 49: [49392123752..51539607359]: hole 50: [51539607360..51539607391]: 4174920..4174951 51: [51539607392..53687090999]: hole 52: [53687091000..53687091031]: 4174952..4174983 53: [53687091032..55834574639]: hole 54: [55834574640..55834574671]: 4174984..4175015 55: [55834574672..57982058279]: hole 56: [57982058280..57982058311]: 4175016..4175047 57: [57982058312..60129541919]: hole 58: [60129541920..60129541951]: 4175048..4175079 59: [60129541952..62277025559]: hole 60: [62277025560..62277025591]: 4175080..4175111 61: [62277025592..64424509191]: hole 62: [64424509192..64424509199]: 4175112..4175119 Okay, it needed to write 2 GB: merkaba:/mnt/zeit> du -h fsfile=20 2,0G fsfile merkaba:/mnt/zeit> du --apparent-size -h fsfile 30T fsfile merkaba:/mnt/zeit> I didn=C2=B4t expect mkfs.xfs to write 2 GB, but when thinking through it for a 30 TB filesystem I find this reasonable. Still it has 33 MiB for metadata: merkaba:/mnt/zeit> mkdir bigfilefs merkaba:/mnt/zeit> mount -o loop fsfile bigfilefs=20 merkaba:/mnt/zeit> LANG=3DC df -hT bigfilefs =46ilesystem Type Size Used Avail Use% Mounted on /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit/bigfilefs Ciao, =2D-=20 Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From stan@hardwarefreak.com Sat Jan 28 18:36:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0T0akYj217022 for ; Sat, 28 Jan 2012 18:36:47 -0600 X-ASG-Debug-ID: 1327797404-04cb6c2260203e00001-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 fQHzNnfyMWvQVhzX for ; Sat, 28 Jan 2012 16:36:45 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 87A936C064 for ; Sat, 28 Jan 2012 18:36:44 -0600 (CST) Message-ID: <4F24949E.2090108@hardwarefreak.com> Date: Sat, 28 Jan 2012 18:36:46 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Dave's presentation at Linux.Conf.Au 2012 Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: Dave's presentation at Linux.Conf.Au 2012 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1327797405 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86959 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 http://www.phoronix.com/scan.php?page=news_item&px=MTA0NzM (I don't care for the Phoronix title or summary) I really enjoyed your presentation Dave. It's also nice to finally put a face and voice to a name. -- Stan From trace@tie.cl Sat Jan 28 19:08:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.0 required=5.0 tests=BAYES_99 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0T18HB9218038 for ; Sat, 28 Jan 2012 19:08:17 -0600 X-ASG-Debug-ID: 1327799293-04cb6c225e204fb0002-w1Z2WR Received: from ironport7-4T.isc.cl (ironport7-4T.isc.cl [200.91.27.122]) by cuda.sgi.com with ESMTP id 4zKvzPzCupjG5GkC for ; Sat, 28 Jan 2012 17:08:15 -0800 (PST) X-Barracuda-Envelope-From: trace@tie.cl X-Barracuda-Apparent-Source-IP: 200.91.27.122 Received: from maaa1.isc.cl (HELO maa1.isc.cl) ([172.31.30.141]) by ironport7-4T.isc.cl with ESMTP; 28 Jan 2012 22:08:12 -0300 Received: from ms1.isc.cl (172.31.30.21) by maa1.isc.cl (8.5.140.02) id 4F22F618000CF1D4; Sat, 28 Jan 2012 22:08:13 -0300 Received: from [172.31.30.6] by ms1.isc.cl with HTTP; Sat, 28 Jan 2012 22:08:12 -0300 Date: Sat, 28 Jan 2012 17:08:12 -0800 Message-ID: <4E8531AC00017153@ms1.isc.cl> From: "Atualize conta" Subject: clique no link abaixo: Reply-To: account.upgrade11@w.cn X-ASG-Orig-Subj: clique no link abaixo: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ironport7-4T.isc.cl[200.91.27.122] X-Barracuda-Start-Time: 1327799295 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86961 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; Sua caixa de correio excedeu o limite de armazenamento de 1GB, que ? definido pelo seu administrador, voc? est? rodando a 5.9GB, voc? pode n?o ser capaz de enviar ou receber novas mensagens at? que voc? re-validar a sua caixa de correio. Para revalida sua caixa postal, clique no link abaixo: http://www.s-sherman.com/phpforms/use/webmaster/form1.html Obrigado Webmail System Administrator 2012 Help Desk ITS.Atualize conta From trace@tie.cl Sat Jan 28 19:08:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.0 required=5.0 tests=BAYES_99 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0T18GW7218035 for ; Sat, 28 Jan 2012 19:08:17 -0600 X-ASG-Debug-ID: 1327799293-04cb6c225e204fb0001-w1Z2WR Received: from ironport7-4T.isc.cl (ironport7-4T.isc.cl [200.91.27.122]) by cuda.sgi.com with ESMTP id sdqsMzFFeExd8NrG for ; Sat, 28 Jan 2012 17:08:14 -0800 (PST) X-Barracuda-Envelope-From: trace@tie.cl X-Barracuda-Apparent-Source-IP: 200.91.27.122 Received: from maaa1.isc.cl (HELO maa1.isc.cl) ([172.31.30.141]) by ironport7-4T.isc.cl with ESMTP; 28 Jan 2012 22:08:12 -0300 Received: from ms1.isc.cl (172.31.30.21) by maa1.isc.cl (8.5.140.02) id 4F22F618000CF1D3; Sat, 28 Jan 2012 22:08:13 -0300 Received: from [172.31.30.6] by ms1.isc.cl with HTTP; Sat, 28 Jan 2012 22:08:12 -0300 Date: Sat, 28 Jan 2012 17:08:12 -0800 Message-ID: <4E8531AC00017154@ms1.isc.cl> From: "Atualize conta" Subject: clique no link abaixo: Reply-To: account.upgrade11@w.cn X-ASG-Orig-Subj: clique no link abaixo: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ironport7-4T.isc.cl[200.91.27.122] X-Barracuda-Start-Time: 1327799294 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86961 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; Sua caixa de correio excedeu o limite de armazenamento de 1GB, que ? definido pelo seu administrador, voc? est? rodando a 5.9GB, voc? pode n?o ser capaz de enviar ou receber novas mensagens at? que voc? re-validar a sua caixa de correio. Para revalida sua caixa postal, clique no link abaixo: http://www.s-sherman.com/phpforms/use/webmaster/form1.html Obrigado Webmail System Administrator 2012 Help Desk ITS.Atualize conta From webmaster@tuvaairport.ru Sat Jan 28 23:46:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0T5kmcG245183 for ; Sat, 28 Jan 2012 23:46:49 -0600 X-ASG-Debug-ID: 1327816006-04cbb01fb22b7250001-w1Z2WR Received: from s9.cishost.ru (s9.cishost.ru [31.41.46.1]) by cuda.sgi.com with ESMTP id 8BZWZWo3542TDN69 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 28 Jan 2012 21:46:47 -0800 (PST) X-Barracuda-Envelope-From: webmaster@tuvaairport.ru X-Barracuda-Apparent-Source-IP: 31.41.46.1 Received: from user19934 by s9.cishost.ru with local (Exim 4.72) (envelope-from ) id 1RrNUi-0003hi-03 for linux-xfs@oss.sgi.com; Sun, 29 Jan 2012 09:40:04 +0400 Date: Sun, 29 Jan 2012 09:40:04 +0400 Message-Id: To: linux-xfs@oss.sgi.com Subject: Employment Offer ! X-PHP-Originating-Script: 1262:helpus.php X-ASG-Orig-Subj: Employment Offer ! From: "Whadil Heritage LLC." Reply-To: paul34simon@gmail.com MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit X-Barracuda-Connect: s9.cishost.ru[31.41.46.1] X-Barracuda-Start-Time: 1327816007 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86979 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- It might interest you to know that there is a new job opening all over the United States. You'll be working for us as a Feedback Specialist. Would you like to know more? No application fee involved. Paul Simon 360 - 282- 9374 The Hiring Agent WHADIL HERITAGE LLC. From Martin@lichtvoll.de Sun Jan 29 01:38:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0T7ctS4002362 for ; Sun, 29 Jan 2012 01:38:56 -0600 X-ASG-Debug-ID: 1327822733-04cbb01fb42c0630001-NocioJ Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id xm8oTihKVUvSEkBm for ; Sat, 28 Jan 2012 23:38:53 -0800 (PST) X-Barracuda-Envelope-From: Martin@lichtvoll.de X-Barracuda-Apparent-Source-IP: 194.150.191.11 Received: from merkaba.localnet (ppp-88-217-120-154.dynamic.mnet-online.de [88.217.120.154]) by mail.lichtvoll.de (Postfix) with ESMTPSA id D64D0B4; Sun, 29 Jan 2012 08:39:09 +0100 (CET) From: Martin Steigerwald To: xfs@oss.sgi.com, stan@hardwarefreak.com Subject: Re: Dave's presentation at Linux.Conf.Au 2012 Date: Sun, 29 Jan 2012 08:38:52 +0100 X-ASG-Orig-Subj: Re: Dave's presentation at Linux.Conf.Au 2012 User-Agent: KMail/1.13.7 (Linux/3.2.0-1-amd64; KDE/4.7.4; x86_64; ; ) References: <4F24949E.2090108@hardwarefreak.com> (sfid-20120129_082156_692375_C3684A91) (sfid-20120129_082156_692375_C3684A91) (sfid-20120129_082156_692375_C3684A91) In-Reply-To: <4F24949E.2090108@hardwarefreak.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Message-Id: <201201290838.52497.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1327822733 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86987 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Am Sonntag, 29. Januar 2012 schrieb Stan Hoeppner: > http://www.phoronix.com/scan.php?page=3Dnews_item&px=3DMTA0NzM > (I don't care for the Phoronix title or summary) >=20 > I really enjoyed your presentation Dave. It's also nice to finally put > a face and voice to a name. Yes, I enjoyed it as well, although I mainly read the LWN summary about it= =20 without watching it completely yet. Since then I wonder whether it might be good to replace the Ext4 for /home= =20 on the Intel SSD 320 in my ThinkPad T520 with Intel i5 Dualcore (+ HT) by=20 XFS again. I didn=B4t use XFS initially specifically due to the lower=20 metadata performance and due to that to my knowledge only Ext4 implements=20 the rename-case workaround for delayed allocation. I will put various informations and a link to the lwn.net article=20 regarding his presentation [1] - which I prefer over the Phoronix article=20 the headline of the later appears lurid to me, well that appears to be=20 Michael=B4s style, maybe he thinks he attracts more visitors this way - int= o=20 my Linux performance analysis & tuning training. [1] XFS: the filesystem of the future?, https://lwn.net/Articles/476263/=20 (if not subscribed you need to wait till February 2, 2012) Ciao, =2D-=20 Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From jeff.liu@oracle.com Sun Jan 29 02:36:05 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0T8a5RU005378 for ; Sun, 29 Jan 2012 02:36:05 -0600 X-ASG-Debug-ID: 1327826163-04cbb01fb42c6680001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id GC4JmaFydCh9Y2V2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Sun, 29 Jan 2012 00:36:03 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q0T8Zrce032336 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 29 Jan 2012 08:35:54 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q0T8ZqVW002647 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 29 Jan 2012 08:35:53 GMT Received: from abhmt114.oracle.com (abhmt114.oracle.com [141.146.116.66]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q0T8ZqJ9012137; Sun, 29 Jan 2012 02:35:52 -0600 Received: from [10.191.47.39] (/10.191.47.39) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 29 Jan 2012 00:35:51 -0800 Message-ID: <4F2504DD.5020503@oracle.com> Date: Sun, 29 Jan 2012 16:35:41 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: xfs@oss.sgi.com CC: Ben Myers , Christoph Hellwig , Mark Tinguely , Chris Mason Subject: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V6 Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V6 Content-Transfer-Encoding: 7bit X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090207.4F2504EA.00BA,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1327826163 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.86991 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, Sorry for the delay!! I just got back from vacation. This is the V6 to introduce SEEK_DATA/SEEK_HOLE support to XFS. As we have discussed previously, I have removed the dirty data probing stuff and just treating unwritten extents as data in this post. Changes to V6: -------------- * remove xfs_has_unwritten_buffer() for now. * xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole, so we need to check its startblock is not a "nullstartblock" in this case. * call i_size_read() after taking the ilock shared, otherwise, isize could be stale. * remove "ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK)" from xfs_seek_data() since it will not used. * in xfs_file_llseek(), return -EINVAL rather than -EOPNOTSUPP if whence is not valid according to http://linux.die.net/man/2/lseek. * s/int lock/uint lock/ in both xfs_seek_data() and xfs_seek_hole(). * s/out_lock/out_unlock/ in both functions too. Tests: ------ * seek_sanity_tester: http://permalink.gmane.org/gmane.comp.file-systems.xfs.general/42514 *seek_copy_tester: http://permalink.gmane.org/gmane.comp.file-systems.xfs.general/42522 Thank you! -Jeff Signed-off-by: Jie Liu --- fs/xfs/xfs_file.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 167 insertions(+), 1 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 753ed9b..41a045f 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1141,8 +1141,174 @@ xfs_vm_page_mkwrite( return block_page_mkwrite(vma, vmf, xfs_get_blocks); } +STATIC loff_t +xfs_seek_data( + struct file *file, + loff_t start, + u32 type) +{ + struct inode *inode = file->f_mapping->host; + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + loff_t uninitialized_var(offset); + xfs_fsize_t isize; + xfs_fileoff_t fsbno; + xfs_filblks_t len; + uint lock; + int error; + + lock = xfs_ilock_map_shared(ip); + + isize = i_size_read(inode); + if (start >= isize) { + error = ENXIO; + goto out_unlock; + } + + fsbno = XFS_B_TO_FSBT(mp, start); + len = XFS_B_TO_FSB(mp, isize); + for (;;) { + struct xfs_bmbt_irec map[2]; + int nmap = 2; + loff_t seekoff; + + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map, &nmap, + XFS_BMAPI_ENTIRE); + if (error) + goto out_unlock; + + /* No extents at given offset, must be beyond EOF */ + if (nmap == 0) { + error = ENXIO; + goto out_unlock; + } + + seekoff = XFS_FSB_TO_B(mp, fsbno); + + if ((map[0].br_state == XFS_EXT_NORM && + !isnullstartblock(map[0].br_startblock)) || + map[0].br_startblock == DELAYSTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } else if (map[0].br_state == XFS_EXT_UNWRITTEN) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[0].br_startoff)); + break; + } else if (map[0].br_startblock == HOLESTARTBLOCK) { + if (nmap == 1) { + error = ENXIO; + goto out_unlock; + } + + if ((map[1].br_state == XFS_EXT_NORM && + !isnullstartblock(map[1].br_startblock)) || + map[1].br_startblock == DELAYSTARTBLOCK) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } else if (map[1].br_state == XFS_EXT_UNWRITTEN) { + offset = max_t(loff_t, seekoff, + XFS_FSB_TO_B(mp, map[1].br_startoff)); + break; + } else if (map[1].br_startblock == HOLESTARTBLOCK) { + fsbno = map[1].br_startoff + + map[1].br_blockcount; + } else { + BUG(); + } + } else { + BUG(); + } + + if (XFS_FSB_TO_B(mp, fsbno) > isize) { + error = ENXIO; + goto out_unlock; + } + } + + if (offset < start) + offset = start; + + if (offset != file->f_pos) + file->f_pos = offset; + +out_unlock: + xfs_iunlock_map_shared(ip, lock); + + if (error) + return -error; + return offset; +} + +STATIC loff_t +xfs_seek_hole( + struct file *file, + loff_t start, + u32 type) +{ + struct inode *inode = file->f_mapping->host; + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + loff_t uninitialized_var(offset); + loff_t holeoff; + xfs_fsize_t isize; + xfs_fileoff_t fsbno; + uint lock; + int error; + + lock = xfs_ilock_map_shared(ip); + + isize = i_size_read(inode); + if (start >= isize) { + error = ENXIO; + goto out_unlock; + } + + fsbno = XFS_B_TO_FSBT(mp, start); + error = xfs_bmap_first_unused(NULL, ip, 1, &fsbno, XFS_DATA_FORK); + if (error) + goto out_unlock; + + holeoff = XFS_FSB_TO_B(mp, fsbno); + if (holeoff <= start) + offset = start; + else + offset = min_t(loff_t, holeoff, isize); + + if (offset != file->f_pos) + file->f_pos = offset; + +out_unlock: + xfs_iunlock_map_shared(ip, lock); + + if (error) + return -error; + return offset; +} + +STATIC loff_t +xfs_file_llseek( + struct file *file, + loff_t offset, + int origin) +{ + switch (origin) { + case SEEK_END: + case SEEK_CUR: + case SEEK_SET: + return generic_file_llseek(file, offset, origin); + case SEEK_DATA: + return xfs_seek_data(file, offset, origin); + case SEEK_HOLE: + return xfs_seek_hole(file, offset, origin); + default: + return -EINVAL; + } +} + const struct file_operations xfs_file_operations = { - .llseek = generic_file_llseek, + .llseek = xfs_file_llseek, .read = do_sync_read, .write = do_sync_write, .aio_read = xfs_file_aio_read, -- 1.7.4.1 From sgi-linux-xfs@plane.gmane.org Sun Jan 29 06:50:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_TO_NO_BRKTS_FREEMAIL,UNPARSEABLE_RELAY autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0TCo6Dn050451 for ; Sun, 29 Jan 2012 06:50:08 -0600 X-ASG-Debug-ID: 1327841404-04cb6c2261234170001-w1Z2WR Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by cuda.sgi.com with ESMTP id alE9hl9VrfvVxgDs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 29 Jan 2012 04:50:05 -0800 (PST) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.3 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1RrUCo-0002AC-VE for linux-xfs@oss.sgi.com; Sun, 29 Jan 2012 13:50:03 +0100 Received: from bd206cc2.virtua.com.br ([bd206cc2.virtua.com.br]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 29 Jan 2012 13:50:02 +0100 Received: from marcosfrm by bd206cc2.virtua.com.br with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 29 Jan 2012 13:50:02 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Marcos Mello Subject: Placing the root partition on an XFS filesystem is not supported Date: Sun, 29 Jan 2012 12:46:42 +0000 (UTC) X-ASG-Orig-Subj: Placing the root partition on an XFS filesystem is not supported Lines: 6 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: sea.gmane.org User-Agent: Loom/3.14 (http://gmane.org/) X-Loom-IP: 189.32.108.194 (Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1) X-Barracuda-Connect: plane.gmane.org[80.91.229.3] X-Barracuda-Start-Time: 1327841405 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.41 X-Barracuda-Spam-Status: No, SCORE=0.41 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=SUBJECT_FUZZY_TION, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87009 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines http://git.fedorahosted.org/git/?p=anaconda.git;a=commit;h=b3e19d43840f6c4015fab75411853003fcf26a63 Does someone knows why? I'm trying to get rid of EXT* partitions on my new CentOS 6.2 installs but apparently it will not be possible. Marcos From david@fromorbit.com Sun Jan 29 16:18:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_41, J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0TMI8xT150566 for ; Sun, 29 Jan 2012 16:18:09 -0600 X-ASG-Debug-ID: 1327875485-04cb6c22612723f0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id ogxGlEflrMrdudSK for ; Sun, 29 Jan 2012 14:18:06 -0800 (PST) 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: Av8EACnDJU95LD+b/2dsb2JhbABDhQupTIEGgXIBAQQBIw8BIyMFCwgDFAQCAiYCAhQlAyETh3ymfZBrE4Echw4BBAMdBAMECwEIAQUJBgMHAQkHhB8CAwEDDgIBBgiCITNjBJUZkmY Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 30 Jan 2012 08:48:04 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rrd4V-0001rz-E9; Mon, 30 Jan 2012 09:18:03 +1100 Date: Mon, 30 Jan 2012 09:18:03 +1100 From: Dave Chinner To: Martin Steigerwald Cc: Eric Sandeen , Manny , xfs@oss.sgi.com Subject: Re: Insane file system overhead on large volume Message-ID: <20120129221803.GF15102@dastard> X-ASG-Orig-Subj: Re: Insane file system overhead on large volume References: <201201281555.22179.Martin@lichtvoll.de> <4F2415B2.3080605@sandeen.net> <201201281723.42786.Martin@lichtvoll.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <201201281723.42786.Martin@lichtvoll.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1327875486 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87047 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Jan 28, 2012 at 05:23:42PM +0100, Martin Steigerwald wrote: > Am Samstag, 28. Januar 2012 schrieb Eric Sandeen: > > On 1/28/12 8:55 AM, Martin Steigerwald wrote: > For the gory details: > > > > Why is it that I get > […] > > > merkaba:/tmp> LANG=C df -hT /mnt/zeit > > > Filesystem Type Size Used Avail Use% Mounted on > > > /dev/loop0 xfs 30T 33M 30T 1% /mnt/zeit > > > > > > > > > 33MiB used on first mount instead of 5? > > > > Not sure offhand, differences in xfsprogs version mkfs defaults > > perhaps. > > Okay, thats fine with me. I was just curious. It doesn´t matter much. More likely the kernel. Older kernels only use 1024 blocks for the reserve block pool, while more recent ones use 8192 blocks. $ gl -n 1 8babd8a commit 8babd8a2e75cccff3167a61176c2a3e977e13799 Author: Dave Chinner Date: Thu Mar 4 01:46:25 2010 +0000 xfs: Increase the default size of the reserved blocks pool The current default size of the reserved blocks pool is easy to deplete with certain workloads, in particular workloads that do lots of concurrent delayed allocation extent conversions. If enough transactions are running in parallel and the entire pool is consumed then subsequent calls to xfs_trans_reserve() will fail with ENOSPC. Also add a rate limited warning so we know if this starts happening again. This is an updated version of an old patch from Lachlan McIlroy. Signed-off-by: Dave Chinner Signed-off-by: Alex Elder > But when I review it, creating a 30TB XFS filesystem should involve writing > some metadata at different places of the file. > > I get: > > merkaba:/mnt/zeit> LANG=C xfs_bmap fsfile > fsfile: > 0: [0..255]: 96..351 > 1: [256..2147483639]: hole > 2: [2147483640..2147483671]: 3400032..3400063 > 3: [2147483672..4294967279]: hole > 4: [4294967280..4294967311]: 3400064..3400095 > 5: [4294967312..6442450919]: hole > 6: [6442450920..6442450951]: 3400096..3400127 > 7: [6442450952..8589934559]: hole ..... Yeah, that's all the AG headers. > Okay, it needed to write 2 GB: > > merkaba:/mnt/zeit> du -h fsfile > 2,0G fsfile > merkaba:/mnt/zeit> du --apparent-size -h fsfile > 30T fsfile > merkaba:/mnt/zeit> > > I didn´t expect mkfs.xfs to write 2 GB, but when thinking through it > for a 30 TB filesystem I find this reasonable. It zeroed the log, which will be just under 2GB in size for a filesystem that large. Zeroing the log accounts for >99% of the IO that mkfs does for most normal cases. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun Jan 29 16:20:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0TMKoY5150764 for ; Sun, 29 Jan 2012 16:20:50 -0600 X-ASG-Debug-ID: 1327875647-04cbb01fb232d210001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id F1BPNRjAcrfOpvA5 for ; Sun, 29 Jan 2012 14:20:48 -0800 (PST) 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: Av8EACnDJU95LD+b/2dsb2JhbABDhQupTIEGgXIBAQUjDwEjIxAIAxgCAiYCAhQlAyETrnmQaxOBHIcOAQQDHQQDBAsBCAEFCQYDBwEJBwMDhBkCAwEDDgIBBoIpgRYElRmSZg Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 30 Jan 2012 08:50:47 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rrd79-0001sV-1I; Mon, 30 Jan 2012 09:20:47 +1100 Date: Mon, 30 Jan 2012 09:20:47 +1100 From: Dave Chinner To: =?utf-8?B?xYF1a2FzeiBPbGXFmw==?= Cc: xfs@oss.sgi.com Subject: Re: reserved blocks pool default size Message-ID: <20120129222046.GG15102@dastard> X-ASG-Orig-Subj: Re: reserved blocks pool default size References: <4F22843E.4050804@open-e.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4F22843E.4050804@open-e.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: 1327875648 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87047 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Jan 27, 2012 at 12:02:22PM +0100, Åukasz OleÅ› wrote: > Hi, > > I updated kernel from 2.6.27 to 2.6.35 and noticed that free size on > my xfs volume changed. Before update there was 7MB free space, now > there is none. > > After some investigation I found that default size for reserved > block pool changed [1]. > On this volume I have one very big file which is exported as iSCSI > disk via SCST and one small configuration file. The big file size > will never change. Small file size can change only by some KB. > > With this assumptions, can I revert this change and set reserved > blocks pool size to 1024 blocks? xfs_io -c "resblks 1024" after the filesystem is mounted will set the reserve block pool back to the 1024 blocks you had before. Cheers, Dave. -- Dave Chinner david@fromorbit.com From sliedes@cc.hut.fi Sun Jan 29 18:20:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U0KYSW177143 for ; Sun, 29 Jan 2012 18:20:35 -0600 X-ASG-Debug-ID: 1327882830-04cbb01fb5334870001-NocioJ Received: from smtp-3.hut.fi (smtp-3.hut.fi [130.233.228.93]) by cuda.sgi.com with ESMTP id W3HHnf2cAF4oryWO (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 29 Jan 2012 16:20:31 -0800 (PST) X-Barracuda-Envelope-From: sliedes@cc.hut.fi X-Barracuda-Apparent-Source-IP: 130.233.228.93 Received: from localhost (katosiko.hut.fi [130.233.228.115]) by smtp-3.hut.fi (8.13.6/8.12.10) with ESMTP id q0U0KTum022995 for ; Mon, 30 Jan 2012 02:20:29 +0200 Received: from smtp-3.hut.fi ([130.233.228.93]) by localhost (katosiko.hut.fi [130.233.228.115]) (amavisd-new, port 10024) with LMTP id 06953-386 for ; Mon, 30 Jan 2012 02:20:29 +0200 (EET) Received: from kosh.localdomain (kosh.hut.fi [130.233.228.12]) by smtp-3.hut.fi (8.13.6/8.12.10) with ESMTP id q0U0KQVA022979 for ; Mon, 30 Jan 2012 02:20:26 +0200 Received: by kosh.localdomain (Postfix, from userid 43888) id A6667CFD; Mon, 30 Jan 2012 02:20:26 +0200 (EET) Date: Mon, 30 Jan 2012 02:20:26 +0200 From: Sami Liedes To: xfs@oss.sgi.com Subject: xfs task blocked for more than 120 seconds Message-ID: <20120130002026.GG10174@sli.dy.fi> X-ASG-Orig-Subj: xfs task blocked for more than 120 seconds MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-TKK-Virus-Scanned: by amavisd-new-2.1.2-hutcc at katosiko.hut.fi X-Barracuda-Connect: smtp-3.hut.fi[130.233.228.93] X-Barracuda-Start-Time: 1327882831 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87055 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi! Following the LWN coverage of LCA talk on XFS, I decided to give XFS a try again. So I decided to try XFS on my backup partition. My setup is as follows: * The relevant disk, containing both the ext4 partition (/media/backup) and the xfs partition (/media/xfstest) are on the same 2 TB disk, which is a Western Digital Caviar Green SATA3 drive (SMART reports the device model to be WDC WD20EARX-00PASB0). The spindle speed of the model is reported to be "closer to 5400 than 7200 rpm". * The ext4 partition is roughly 1 TB in size and the xfs partition roughly 800 GB * I'm using LVM; the logical volumes are /dev/rootvg/backup and /dev/rootvg/xfstest * These LVs are both LUKS (dm-crypt) partitions, encrypted with cbc-essiv:sha256 * The computer is a Core i7 2600 3.4 GHz with 4 cores and HT (therefore shows as 8 cores) with 8 GiB main memory. AES-NI instructions are supported and disk crypto generally (with ext4) works at transparent speeds. * I'm running Debian unstable amd64 with vanilla (non-Debian) 3.2.2 kernel * I believe both the disk and the main memory are in good health; particularly with ext4 there hasn't been any problems * The backup data is generated by BackupPC. It generally consists of a large pool of files named by sha-1 hashes (~105 GB of files), plus lots of trees of hardlinks to these in a structure not unlike typical home directories and / and /usr trees. I *think* the hard links may be a red herring and I suspect the problem has something to do with xfs--dm-crypt interaction, but I'm not sure. So, to copy the contents of the backup partition -- BackupPC data -- to the XFS drive, I did the following (the tar line is from shell history, the lines before it are from my memory and might be slightly wrong): # cryptsetup luksFormat /dev/rootvg/xfstest # cryptsetup luksOpen /dev/rootvg/xfstest rootvg-xfstest_crypt # mkfs.xfs /dev/mapper/rootvg-xfstest_crypt # mount /dev/mapper/rootvg-xfstest_crypt /media/xfstest # cd /media/backup # tar cf - backuppc/ | (cd ../xfstest && tar xf -) During this operation, I got the following two warning messages in dmesg: ------------------------------------------------------------ [ 0.000000] Linux version 3.2.2 (sliedes@lh) (gcc version 4.6.2 (Debian 4.6.2-12) ) #1 SMP Thu Jan 26 03:51:41 EET 2012 [...] [19419.407855] XFS (dm-7): Mounting Filesystem [19419.726935] XFS (dm-7): Ending clean mount [...] [35380.253189] INFO: task tar:3312 blocked for more than 120 seconds. [35380.253192] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [35380.253194] tar D ffff880220adc678 0 3312 3311 0x00000000 [35380.253198] ffff880107a1d778 0000000000000082 0000000000000000 ffff8800c552be30 [35380.253202] ffff880220adc2f0 ffff880107a1dfd8 ffff880107a1dfd8 ffff880107a1dfd8 [35380.253206] ffff880223d01650 ffff880220adc2f0 0000000000000000 ffffffff00000000 [35380.253210] Call Trace: [35380.253217] [] schedule+0x3a/0x50 [35380.253220] [] schedule_timeout+0x1c5/0x300 [35380.253237] [] ? _xfs_buf_find+0xb5/0x240 [xfs] [35380.253240] [] __down_common+0x95/0xe5 [35380.253249] [] ? _xfs_buf_find+0xce/0x240 [xfs] [35380.253252] [] __down+0x18/0x1a [35380.253255] [] down+0x3c/0x50 [35380.253263] [] xfs_buf_lock+0x44/0x110 [xfs] [35380.253272] [] _xfs_buf_find+0xce/0x240 [xfs] [35380.253280] [] xfs_buf_get+0x2f/0x1d0 [xfs] [35380.253289] [] xfs_buf_read+0x28/0x120 [xfs] [35380.253303] [] xfs_trans_read_buf+0x187/0x470 [xfs] [35380.253316] [] ? xfs_trans_brelse+0xd5/0x160 [xfs] [35380.253329] [] xfs_imap_to_bp.isra.9+0x42/0x120 [xfs] [35380.253341] [] xfs_iread+0x81/0x1c0 [xfs] [35380.253352] [] ? kmem_zone_alloc+0x67/0xe0 [xfs] [35380.253362] [] xfs_iget+0x2a3/0x820 [xfs] [35380.253371] [] ? xfs_iunlock+0xbc/0x130 [xfs] [35380.253382] [] xfs_lookup+0xb6/0x130 [xfs] [35380.253392] [] xfs_vn_lookup+0x49/0x90 [xfs] [35380.253395] [] ? d_alloc+0x24/0x70 [35380.253399] [] d_alloc_and_lookup+0x40/0x80 [35380.253401] [] ? d_lookup+0x30/0x50 [35380.253403] [] do_lookup+0x2bd/0x3c0 [35380.253406] [] path_lookupat+0x114/0x740 [35380.253408] [] do_path_lookup+0x2c/0xc0 [35380.253410] [] user_path_at_empty+0x54/0xa0 [35380.253414] [] ? mntput_no_expire+0x1f/0x100 [35380.253416] [] user_path_at+0xc/0x10 [35380.253418] [] sys_linkat+0x59/0x150 [35380.253421] [] ? sys_read+0x45/0x90 [35380.253425] [] system_call_fastpath+0x16/0x1b [36339.636777] INFO: task tar:3312 blocked for more than 120 seconds. [36339.636779] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [36339.636782] tar D ffff880220adc678 0 3312 3311 0x00000000 [36339.636786] ffff880107a1d6f8 0000000000000082 ffff880107a1d6d8 ffffffff8100177a [36339.636790] ffff880220adc2f0 ffff880107a1dfd8 ffff880107a1dfd8 ffff880107a1dfd8 [36339.636793] ffff88021e222ca0 ffff880220adc2f0 ffff88021d8a7380 ffff88022040fa80 [36339.636797] Call Trace: [36339.636803] [] ? __switch_to+0x1ea/0x310 [36339.636808] [] schedule+0x3a/0x50 [36339.636811] [] schedule_timeout+0x1c5/0x300 [36339.636813] [] ? schedule+0x3a/0x50 [36339.636816] [] __down_common+0x95/0xe5 [36339.636832] [] ? _xfs_buf_find+0xce/0x240 [xfs] [36339.636835] [] __down+0x18/0x1a [36339.636838] [] down+0x3c/0x50 [36339.636847] [] xfs_buf_lock+0x44/0x110 [xfs] [36339.636856] [] _xfs_buf_find+0xce/0x240 [xfs] [36339.636865] [] xfs_buf_get+0x2f/0x1d0 [xfs] [36339.636874] [] xfs_buf_read+0x28/0x120 [xfs] [36339.636889] [] xfs_trans_read_buf+0x187/0x470 [xfs] [36339.636901] [] xfs_da_do_buf+0x24e/0x620 [xfs] [36339.636904] [] ? up+0x2d/0x50 [36339.636916] [] xfs_da_read_buf+0x1c/0x20 [xfs] [36339.636918] [] ? wake_up_bit+0x29/0x40 [36339.636931] [] xfs_dir2_leaf_lookup_int+0x5b/0x2d0 [xfs] [36339.636942] [] ? xfs_bmap_last_extent.constprop.23+0x6e/0xb0 [xfs] [36339.636953] [] xfs_dir2_leaf_lookup+0x34/0x110 [xfs] [36339.636965] [] ? xfs_dir2_isleaf+0x21/0x60 [xfs] [36339.636976] [] xfs_dir_lookup+0x14a/0x160 [xfs] [36339.636987] [] xfs_lookup+0x7f/0x130 [xfs] [36339.636997] [] xfs_vn_lookup+0x49/0x90 [xfs] [36339.637000] [] ? d_alloc+0x24/0x70 [36339.637003] [] d_alloc_and_lookup+0x40/0x80 [36339.637006] [] ? d_lookup+0x30/0x50 [36339.637008] [] __lookup_hash.part.28+0xbf/0xe0 [36339.637012] [] ? security_inode_permission+0x17/0x20 [36339.637014] [] lookup_hash+0x48/0x60 [36339.637016] [] kern_path_create+0x83/0x120 [36339.637019] [] ? strncpy_from_user+0x2c/0x40 [36339.637022] [] ? getname_flags+0x140/0x260 [36339.637024] [] user_path_create+0x45/0x70 [36339.637027] [] sys_linkat+0x89/0x150 [36339.637029] [] ? sys_read+0x45/0x90 [36339.637033] [] system_call_fastpath+0x16/0x1b ------------------------------------------------------------ Afterwards when BackupPC was doing a backup, I got these additional warnings: ------------------------------------------------------------ [91863.941820] INFO: task kworker/0:5:19584 blocked for more than 120 seconds. [91863.941823] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [91863.941825] kworker/0:5 D ffff8802205699d8 0 19584 2 0x00000000 [91863.941829] ffff88005fe9bb70 0000000000000046 ffff88005fe9bb00 0000000000000086 [91863.941833] ffff880220569650 ffff88005fe9bfd8 ffff88005fe9bfd8 ffff88005fe9bfd8 [91863.941837] ffff88021e4c8000 ffff880220569650 ffff88005fe9bb80 ffffffff81044ecd [91863.941840] Call Trace: [91863.941847] [] ? try_to_wake_up+0x22d/0x290 [91863.941852] [] schedule+0x3a/0x50 [91863.941855] [] schedule_timeout+0x1c5/0x300 [91863.941858] [] ? kmem_cache_free+0x104/0x110 [91863.941863] [] ? mempool_free_slab+0x12/0x20 [91863.941866] [] __down_common+0x95/0xe5 [91863.941886] [] ? xfs_getsb+0x37/0x60 [xfs] [91863.941889] [] __down+0x18/0x1a [91863.941892] [] down+0x3c/0x50 [91863.941902] [] xfs_buf_lock+0x44/0x110 [xfs] [91863.941915] [] xfs_getsb+0x37/0x60 [xfs] [91863.941929] [] xfs_trans_getsb+0x43/0x140 [xfs] [91863.941942] [] xfs_mod_sb+0x46/0xc0 [xfs] [91863.941952] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] [91863.941962] [] xfs_fs_log_dummy+0x4f/0x90 [xfs] [91863.941975] [] ? xfs_log_need_covered+0x83/0xb0 [xfs] [91863.941985] [] xfs_sync_worker+0x84/0x90 [xfs] [91863.941988] [] process_one_work+0x118/0x470 [91863.941991] [] worker_thread+0x15e/0x350 [91863.941994] [] ? manage_workers.isra.29+0x220/0x220 [91863.941996] [] kthread+0x87/0x90 [91863.941999] [] kernel_thread_helper+0x4/0x10 [91863.942002] [] ? kthread_worker_fn+0x190/0x190 [91863.942004] [] ? gs_change+0x13/0x13 [92103.787573] INFO: task cp:18226 blocked for more than 120 seconds. [92103.787576] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [92103.787578] cp D ffff8802078e19d8 0 18226 28931 0x00000000 [92103.787582] ffff880100f116f8 0000000000000082 ffff880100f116d8 ffffffff8100177a [92103.787586] ffff8802078e1650 ffff880100f11fd8 ffff880100f11fd8 ffff880100f11fd8 [92103.787590] ffff880103439650 ffff8802078e1650 ffff880220c06c80 ffff88021f968000 [92103.787593] Call Trace: [92103.787599] [] ? __switch_to+0x1ea/0x310 [92103.787604] [] schedule+0x3a/0x50 [92103.787607] [] schedule_timeout+0x1c5/0x300 [92103.787623] [] ? xfs_buf_trylock+0x28/0xd0 [xfs] [92103.787626] [] ? schedule+0x3a/0x50 [92103.787629] [] __down_common+0x95/0xe5 [92103.787637] [] ? _xfs_buf_find+0xce/0x240 [xfs] [92103.787640] [] __down+0x18/0x1a [92103.787643] [] down+0x3c/0x50 [92103.787652] [] xfs_buf_lock+0x44/0x110 [xfs] [92103.787661] [] _xfs_buf_find+0xce/0x240 [xfs] [92103.787670] [] xfs_buf_get+0x2f/0x1d0 [xfs] [92103.787678] [] xfs_buf_read+0x28/0x120 [xfs] [92103.787693] [] xfs_trans_read_buf+0x187/0x470 [xfs] [92103.787706] [] xfs_da_do_buf+0x24e/0x620 [xfs] [92103.787709] [] ? up+0x2d/0x50 [92103.787720] [] xfs_da_read_buf+0x1c/0x20 [xfs] [92103.787723] [] ? wake_up_bit+0x29/0x40 [92103.787735] [] xfs_dir2_leaf_lookup_int+0x5b/0x2d0 [xfs] [92103.787746] [] ? xfs_bmap_last_extent.constprop.23+0x6e/0xb0 [xfs] [92103.787758] [] xfs_dir2_leaf_lookup+0x34/0x110 [xfs] [92103.787770] [] ? xfs_dir2_isleaf+0x21/0x60 [xfs] [92103.787781] [] xfs_dir_lookup+0x14a/0x160 [xfs] [92103.787791] [] xfs_lookup+0x7f/0x130 [xfs] [92103.787801] [] xfs_vn_lookup+0x49/0x90 [xfs] [92103.787804] [] ? d_alloc+0x24/0x70 [92103.787808] [] d_alloc_and_lookup+0x40/0x80 [92103.787810] [] ? d_lookup+0x30/0x50 [92103.787813] [] __lookup_hash.part.28+0xbf/0xe0 [92103.787817] [] ? security_inode_permission+0x17/0x20 [92103.787819] [] lookup_hash+0x48/0x60 [92103.787822] [] kern_path_create+0x83/0x120 [92103.787825] [] ? strncpy_from_user+0x2c/0x40 [92103.787828] [] ? getname_flags+0x140/0x260 [92103.787830] [] user_path_create+0x45/0x70 [92103.787832] [] sys_linkat+0x89/0x150 [92103.787836] [] system_call_fastpath+0x16/0x1b [92103.787842] INFO: task kworker/0:1:19995 blocked for more than 120 seconds. [92103.787844] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [92103.787845] kworker/0:1 D ffff88021a6719d8 0 19995 2 0x00000000 [92103.787848] ffff8800bfbd1b70 0000000000000046 ffff8800bfbd1b10 ffffffff811d2106 [92103.787852] ffff88021a671650 ffff8800bfbd1fd8 ffff8800bfbd1fd8 ffff8800bfbd1fd8 [92103.787855] ffff880226185940 ffff88021a671650 ffff8800bfbd1d90 ffff8800bfbd1e2c [92103.787858] Call Trace: [92103.787863] [] ? cpumask_next_and+0x36/0x50 [92103.787866] [] schedule+0x3a/0x50 [92103.787868] [] schedule_timeout+0x1c5/0x300 [92103.787872] [] ? cpufreq_stat_notifier_trans+0xa0/0xc0 [cpufreq_stats] [92103.787875] [] ? notifier_call_chain+0x4d/0x70 [92103.787879] [] __down_common+0x95/0xe5 [92103.787892] [] ? xfs_getsb+0x37/0x60 [xfs] [92103.787895] [] __down+0x18/0x1a [92103.787897] [] down+0x3c/0x50 [92103.787906] [] xfs_buf_lock+0x44/0x110 [xfs] [92103.787918] [] xfs_getsb+0x37/0x60 [xfs] [92103.787931] [] xfs_trans_getsb+0x43/0x140 [xfs] [92103.787944] [] xfs_mod_sb+0x46/0xc0 [xfs] [92103.787954] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] [92103.787964] [] xfs_fs_log_dummy+0x4f/0x90 [xfs] [92103.787977] [] ? xfs_log_need_covered+0x83/0xb0 [xfs] [92103.787987] [] xfs_sync_worker+0x84/0x90 [xfs] [92103.787991] [] process_one_work+0x118/0x470 [92103.787994] [] worker_thread+0x15e/0x350 [92103.787996] [] ? manage_workers.isra.29+0x220/0x220 [92103.787999] [] kthread+0x87/0x90 [92103.788002] [] kernel_thread_helper+0x4/0x10 [92103.788004] [] ? kthread_worker_fn+0x190/0x190 [92103.788007] [] ? gs_change+0x13/0x13 ------------------------------------------------------------ Sami From david@fromorbit.com Sun Jan 29 18:47:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U0lOeG178815 for ; Sun, 29 Jan 2012 18:47:25 -0600 X-ASG-Debug-ID: 1327884439-04cb6c226127afc0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id QOxpirqCv1135xHT for ; Sun, 29 Jan 2012 16:47:20 -0800 (PST) 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: Av4EAFbmJU95LD+b/2dsb2JhbAApGq5ZgQaBcgEBBAEyASMjBQsIAxgMIhQlAyETGASHYAkpt0UTiCoBAwQQDQQDBAsBCAEFCQYDBwEJB4QfAgMBAx8MgysElRmSZlg Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 30 Jan 2012 11:17:19 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RrfOv-00025P-Lv; Mon, 30 Jan 2012 11:47:17 +1100 Date: Mon, 30 Jan 2012 11:47:17 +1100 From: Dave Chinner To: Martin Steigerwald Cc: xfs@oss.sgi.com, stan@hardwarefreak.com Subject: Re: Dave's presentation at Linux.Conf.Au 2012 Message-ID: <20120130004717.GH15102@dastard> X-ASG-Orig-Subj: Re: Dave's presentation at Linux.Conf.Au 2012 References: <4F24949E.2090108@hardwarefreak.com> <201201290838.52497.Martin@lichtvoll.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <201201290838.52497.Martin@lichtvoll.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1327884439 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87057 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sun, Jan 29, 2012 at 08:38:52AM +0100, Martin Steigerwald wrote: > Am Sonntag, 29. Januar 2012 schrieb Stan Hoeppner: > > http://www.phoronix.com/scan.php?page=news_item&px=MTA0NzM > > (I don't care for the Phoronix title or summary) > > > > I really enjoyed your presentation Dave. It's also nice to finally put > > a face and voice to a name. > > Yes, I enjoyed it as well, although I mainly read the LWN summary about it > without watching it completely yet. > > Since then I wonder whether it might be good to replace the Ext4 for /home > on the Intel SSD 320 in my ThinkPad T520 with Intel i5 Dualcore (+ HT) by > XFS again. I didn´t use XFS initially specifically due to the lower > metadata performance If ext4 works well enough for you, then there is no compelling reason to change to XFS. If it ain't broke..... > and due to that to my knowledge only Ext4 implements > the rename-case workaround for delayed allocation. I'm pretty sure ext4 copied all the "flush it faster" fixes to work around the zero-length files problem from XFS in the first place.... ;) > I will put various informations and a link to the lwn.net article > regarding his presentation [1] - which I prefer over the Phoronix article > the headline of the later appears lurid to me, well that appears to be > Michael´s style, maybe he thinks he attracts more visitors this way - into > my Linux performance analysis & tuning training. I can't say that I like the way Phoronix presented it, either, but that's Phoronix for you. Indeed, people even complain about it in the forums: http://phoronix.com/forums/showthread.php?68388-XFS-Developer-Takes-Shots-At-Btrfs-EXT4 The Phoronix forum has the usual trolls of "XFS zero's files when it crashes" and "XFS corrupted data back in 2000 so I'll never use it again" whenever XFS is mentioned. And it doesn't have the SNR of the LWN article comments, so it's not really a place worth visiting or caring that much about, IMO. > [1] XFS: the filesystem of the future?, https://lwn.net/Articles/476263/ > (if not subscribed you need to wait till February 2, 2012) It's been up for more than a week now, so I don't think Jon will mind if it post this link for everyone on the list to read now if they haven't already: http://lwn.net/SubscriberLink/476263/1d75cb4eb1af8868/ If you don't already subscribe to LWN, then getting early access to this sort of article is why you should subscribe. ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Sun Jan 29 19:05:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U15ZiU179704 for ; Sun, 29 Jan 2012 19:05:35 -0600 X-ASG-Debug-ID: 1327885532-04bdf075182f0310001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id zT9DlRa8bfdJiOFN for ; Sun, 29 Jan 2012 17:05:32 -0800 (PST) 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: Av0EAO3pJU95LD+b/2dsb2JhbABDrlmBBoFyAQEEATocIwULCAMYLhQlAyETh3y3eBOILwMLBAsHAwQLAQgBBQkGAwcBCQeEHwIDAQMQB4M/BJUZkmY Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 30 Jan 2012 11:35:31 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RrfgY-00027C-FX; Mon, 30 Jan 2012 12:05:30 +1100 Date: Mon, 30 Jan 2012 12:05:30 +1100 From: Dave Chinner To: Sami Liedes Cc: xfs@oss.sgi.com Subject: Re: xfs task blocked for more than 120 seconds Message-ID: <20120130010530.GI15102@dastard> X-ASG-Orig-Subj: Re: xfs task blocked for more than 120 seconds References: <20120130002026.GG10174@sli.dy.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120130002026.GG10174@sli.dy.fi> 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: 1327885532 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87057 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jan 30, 2012 at 02:20:26AM +0200, Sami Liedes wrote: > Hi! > > Following the LWN coverage of LCA talk on XFS, I decided to give XFS a > try again. So I decided to try XFS on my backup partition. > > My setup is as follows: > > * The relevant disk, containing both the ext4 partition > (/media/backup) and the xfs partition (/media/xfstest) are on the > same 2 TB disk, which is a Western Digital Caviar Green SATA3 drive > (SMART reports the device model to be WDC WD20EARX-00PASB0). The > spindle speed of the model is reported to be "closer to 5400 than > 7200 rpm". Ok, so your workload is seeking repeatedly between the inner and out portions of the disk, so will be seek bound and quite slow. > * The ext4 partition is roughly 1 TB in size and the xfs partition > roughly 800 GB > > * I'm using LVM; the logical volumes are /dev/rootvg/backup and > /dev/rootvg/xfstest > > * These LVs are both LUKS (dm-crypt) partitions, encrypted with > cbc-essiv:sha256 > > * The computer is a Core i7 2600 3.4 GHz with 4 cores and HT > (therefore shows as 8 cores) with 8 GiB main memory. AES-NI > instructions are supported and disk crypto generally (with ext4) > works at transparent speeds. That's not to say that ext4 doesn't have long IO hold-offs - it just doesn't trigger the hang-check code. > > * I'm running Debian unstable amd64 with vanilla (non-Debian) 3.2.2 > kernel > > * I believe both the disk and the main memory are in good health; > particularly with ext4 there hasn't been any problems > > * The backup data is generated by BackupPC. It generally consists of a > large pool of files named by sha-1 hashes (~105 GB of files), plus > lots of trees of hardlinks to these in a structure not unlike > typical home directories and / and /usr trees. I *think* the hard > links may be a red herring and I suspect the problem has something > to do with xfs--dm-crypt interaction, but I'm not sure. It could very well be a dm-crypt/xfs interaction, though I don't have enough information yet. > So, to copy the contents of the backup partition -- BackupPC data -- > to the XFS drive, I did the following (the tar line is from shell > history, the lines before it are from my memory and might be slightly > wrong): > > # cryptsetup luksFormat /dev/rootvg/xfstest > # cryptsetup luksOpen /dev/rootvg/xfstest rootvg-xfstest_crypt > # mkfs.xfs /dev/mapper/rootvg-xfstest_crypt > # mount /dev/mapper/rootvg-xfstest_crypt /media/xfstest > # cd /media/backup > # tar cf - backuppc/ | (cd ../xfstest && tar xf -) > > During this operation, I got the following two warning messages in > dmesg: > > ------------------------------------------------------------ > [ 0.000000] Linux version 3.2.2 (sliedes@lh) (gcc version 4.6.2 (Debian 4.6.2-12) ) #1 SMP Thu Jan 26 03:51:41 EET 2012 > [...] > [19419.407855] XFS (dm-7): Mounting Filesystem > [19419.726935] XFS (dm-7): Ending clean mount > [...] > [35380.253189] INFO: task tar:3312 blocked for more than 120 seconds. > [35380.253192] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. > [35380.253194] tar D ffff880220adc678 0 3312 3311 0x00000000 > [35380.253198] ffff880107a1d778 0000000000000082 0000000000000000 ffff8800c552be30 > [35380.253202] ffff880220adc2f0 ffff880107a1dfd8 ffff880107a1dfd8 ffff880107a1dfd8 > [35380.253206] ffff880223d01650 ffff880220adc2f0 0000000000000000 ffffffff00000000 > [35380.253210] Call Trace: > [35380.253217] [] schedule+0x3a/0x50 > [35380.253220] [] schedule_timeout+0x1c5/0x300 > [35380.253237] [] ? _xfs_buf_find+0xb5/0x240 [xfs] > [35380.253240] [] __down_common+0x95/0xe5 > [35380.253249] [] ? _xfs_buf_find+0xce/0x240 [xfs] > [35380.253252] [] __down+0x18/0x1a > [35380.253255] [] down+0x3c/0x50 > [35380.253263] [] xfs_buf_lock+0x44/0x110 [xfs] > [35380.253272] [] _xfs_buf_find+0xce/0x240 [xfs] > [35380.253280] [] xfs_buf_get+0x2f/0x1d0 [xfs] > [35380.253289] [] xfs_buf_read+0x28/0x120 [xfs] > [35380.253303] [] xfs_trans_read_buf+0x187/0x470 [xfs] > [35380.253316] [] ? xfs_trans_brelse+0xd5/0x160 [xfs] > [35380.253329] [] xfs_imap_to_bp.isra.9+0x42/0x120 [xfs] > [35380.253341] [] xfs_iread+0x81/0x1c0 [xfs] Waiting for IO completion reading an inode buffer. > [36339.636779] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. > [36339.636782] tar D ffff880220adc678 0 3312 3311 0x00000000 ..... > [36339.636838] [] down+0x3c/0x50 > [36339.636847] [] xfs_buf_lock+0x44/0x110 [xfs] > [36339.636856] [] _xfs_buf_find+0xce/0x240 [xfs] > [36339.636865] [] xfs_buf_get+0x2f/0x1d0 [xfs] > [36339.636874] [] xfs_buf_read+0x28/0x120 [xfs] > [36339.636889] [] xfs_trans_read_buf+0x187/0x470 [xfs] > [36339.636901] [] xfs_da_do_buf+0x24e/0x620 [xfs] > [36339.636904] [] ? up+0x2d/0x50 > [36339.636916] [] xfs_da_read_buf+0x1c/0x20 [xfs] Waiting for IO completion reading a directory buffer. This typically happens when the buffer is already under IO (read or write). > ------------------------------------------------------------ > > Afterwards when BackupPC was doing a backup, I got these additional > warnings: > > ------------------------------------------------------------ > [91863.941820] INFO: task kworker/0:5:19584 blocked for more than 120 seconds. > [91863.941823] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. > [91863.941825] kworker/0:5 D ffff8802205699d8 0 19584 2 0x00000000 > [91863.941829] ffff88005fe9bb70 0000000000000046 ffff88005fe9bb00 0000000000000086 > [91863.941833] ffff880220569650 ffff88005fe9bfd8 ffff88005fe9bfd8 ffff88005fe9bfd8 > [91863.941837] ffff88021e4c8000 ffff880220569650 ffff88005fe9bb80 ffffffff81044ecd > [91863.941840] Call Trace: > [91863.941847] [] ? try_to_wake_up+0x22d/0x290 > [91863.941852] [] schedule+0x3a/0x50 > [91863.941855] [] schedule_timeout+0x1c5/0x300 > [91863.941858] [] ? kmem_cache_free+0x104/0x110 > [91863.941863] [] ? mempool_free_slab+0x12/0x20 > [91863.941866] [] __down_common+0x95/0xe5 > [91863.941886] [] ? xfs_getsb+0x37/0x60 [xfs] > [91863.941889] [] __down+0x18/0x1a > [91863.941892] [] down+0x3c/0x50 > [91863.941902] [] xfs_buf_lock+0x44/0x110 [xfs] > [91863.941915] [] xfs_getsb+0x37/0x60 [xfs] > [91863.941929] [] xfs_trans_getsb+0x43/0x140 [xfs] > [91863.941942] [] xfs_mod_sb+0x46/0xc0 [xfs] > [91863.941952] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] > [91863.941962] [] xfs_fs_log_dummy+0x4f/0x90 [xfs] > [91863.941975] [] ? xfs_log_need_covered+0x83/0xb0 [xfs] > [91863.941985] [] xfs_sync_worker+0x84/0x90 [xfs] Ok, that implies that the problem is dm-crypt. xfs_sync_worker() calls xfs_fs_log_dummy() once every 30s. The first time it dirties the superblock, logs it, then pushes it out for I/O. 30s later we've come back and the superblock is still under IO. That directly implies that dm-crypt hasn't finished the IO yet. > [92103.787573] INFO: task cp:18226 blocked for more than 120 seconds. > [92103.787576] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. > [92103.787578] cp D ffff8802078e19d8 0 18226 28931 0x00000000 .... > [92103.787640] [] __down+0x18/0x1a > [92103.787643] [] down+0x3c/0x50 > [92103.787652] [] xfs_buf_lock+0x44/0x110 [xfs] > [92103.787661] [] _xfs_buf_find+0xce/0x240 [xfs] > [92103.787670] [] xfs_buf_get+0x2f/0x1d0 [xfs] > [92103.787678] [] xfs_buf_read+0x28/0x120 [xfs] > [92103.787693] [] xfs_trans_read_buf+0x187/0x470 [xfs] > [92103.787706] [] xfs_da_do_buf+0x24e/0x620 [xfs] And that's another directory read waiting on IO completion. It is definitely a possibility that dm-crypt is not keeping up with the IO that XFS is sending it and the way XFS blocks waiting for it to complete triggers the hang-check code. However, it is possible that XFS is stalling due to long IO completion latencies. Do the workloads actually complete, or does the system hang? Also, does the IO to the disk appear to stop for long periods, or is the disk 100% busy the whole time? If the disk goes idle, can you get a dump of the stalled processes via "echo w > /proc/sysrq-trigger" and post that? Cheers, Dave. -- Dave Chinner david@fromorbit.com From wu.bo@cn.fujitsu.com Sun Jan 29 20:40:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U2ep7I189284 for ; Sun, 29 Jan 2012 20:40:52 -0600 X-ASG-Debug-ID: 1327891245-04cb6c225e283150001-NocioJ Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id PsGKjKC4glqRRINj for ; Sun, 29 Jan 2012 18:40:49 -0800 (PST) X-Barracuda-Envelope-From: wu.bo@cn.fujitsu.com X-Barracuda-Apparent-Source-IP: 222.73.24.84 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 8BDB717011C; Mon, 30 Jan 2012 10:40:39 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q0U2ecBl027674; Mon, 30 Jan 2012 10:40:39 +0800 Received: from localhost.localdomain ([10.167.225.174]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012013010392060-448220 ; Mon, 30 Jan 2012 10:39:20 +0800 Message-ID: <4F2603CC.9080807@cn.fujitsu.com> Date: Mon, 30 Jan 2012 10:43:24 +0800 From: WuBo User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100921 Fedora/3.1.4-1.fc14 Thunderbird/3.1.4 MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss Subject: Re: Question on xfstest 274 References: <4F230E62.8020004@sandeen.net> X-ASG-Orig-Subj: Re: Question on xfstest 274 In-Reply-To: <4F230E62.8020004@sandeen.net> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-30 10:39:20, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-30 10:39:21, Serialize complete at 2012-01-30 10:39:21 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1327891247 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87063 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 01/28/2012 04:51 AM, Eric Sandeen wrote: > Hi, I was wondering if you could describe your intent for 274 just a little more. > > The test says: > > # preallocation test > > but that is the only comment other than copyright. ;) Maybe the comment is too simple :) > > I see that it does: > > # Make a 1G fs > # Create a single 4k file > # Allocate 1M past the EOF on that file > # Completely fill remaining space, using 2 other files > # Write 8k past EOF on the original file which has blocks past EOF > > but I am not certain what you are testing. I presume that > you are testing the fact that the 1M past EOF should be truncated, > freeing up space, and allowing the 8k write to succeed? > Is that right? Actually I write 8K at the end of 4K(seek=1), and what I want to test is the 8K-write should be succeed because the preallocation 1M. At the mean while, the file should not be truncated. Thanks, wubo > > However, at least on ext4 I noticed that the "fill the fs" > stage does not succeed; perhaps that should be tested as well. > > I can do some similar work on this like I did for 275, but I need > to be sure I understand your original intent for the test, first. > > Thanks, > -Eric > From david@fromorbit.com Sun Jan 29 21:44:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U3iinK208325 for ; Sun, 29 Jan 2012 21:44:45 -0600 X-ASG-Debug-ID: 1327895081-04bdf075192fd690001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id PHPrixyXKv8eP3iO for ; Sun, 29 Jan 2012 19:44:42 -0800 (PST) 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: Av0EAH8QJk95LD+b/2dsb2JhbAApGq5agQaBcgEBBTocIxAIAxguFCUDIROIBSm3WROILwMLBAsHAwQLAQgBBQkGAwcBCQcDAQIBhBgCAwEDHwyCSGMElRmSZlg Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 30 Jan 2012 14:14:41 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RriAa-0002Nj-7L; Mon, 30 Jan 2012 14:44:40 +1100 Date: Mon, 30 Jan 2012 14:44:40 +1100 From: Dave Chinner To: Stan Hoeppner Cc: xfs@oss.sgi.com Subject: Re: Dave's presentation at Linux.Conf.Au 2012 Message-ID: <20120130034440.GA9090@dastard> X-ASG-Orig-Subj: Re: Dave's presentation at Linux.Conf.Au 2012 References: <4F24949E.2090108@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F24949E.2090108@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: 1327895081 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87067 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 On Sat, Jan 28, 2012 at 06:36:46PM -0600, Stan Hoeppner wrote: > http://www.phoronix.com/scan.php?page=news_item&px=MTA0NzM > (I don't care for the Phoronix title or summary) > > I really enjoyed your presentation Dave. It's also nice to finally put > a face and voice to a name. BTW, presentation slides are now available from: http://xfs.org/index.php/XFS_Papers_and_Documentation Cheers, Dave. -- Dave Chinner david@fromorbit.com From stan@hardwarefreak.com Mon Jan 30 03:12:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U9C2BR001359 for ; Mon, 30 Jan 2012 03:12:03 -0600 X-ASG-Debug-ID: 1327914720-04cb6c225f2a9410001-w1Z2WR Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id Dmj7ddlRuqJpJb5H for ; Mon, 30 Jan 2012 01:12:01 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 6A3AA6C08F; Mon, 30 Jan 2012 03:12:00 -0600 (CST) Message-ID: <4F265EE3.6020908@hardwarefreak.com> Date: Mon, 30 Jan 2012 03:12:03 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Marcos Mello CC: linux-xfs@oss.sgi.com Subject: Re: Placing the root partition on an XFS filesystem is not supported References: X-ASG-Orig-Subj: Re: Placing the root partition on an XFS filesystem is not supported In-Reply-To: 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: 1327914721 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.61 X-Barracuda-Spam-Status: No, SCORE=0.61 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085, RDNS_DYNAMIC, SUBJECT_FUZZY_TION X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87089 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.10 BSF_SC0_SA085 Custom Rule SA085 On 1/29/2012 6:46 AM, Marcos Mello wrote: > http://git.fedorahosted.org/git/?p=anaconda.git;a=commit;h=b3e19d43840f6c4015fab75411853003fcf26a63 > > Does someone knows why? I'm trying to get rid of EXT* partitions on my new > CentOS 6.2 installs but apparently it will not be possible. I'm unsure what this Fedora commit is all about, but in the general Linux case you can put root on XFS, with a minor caveat. See: http://www.xfs.org/index.php/XFS_FAQ#Q:_Can_XFS_be_used_for_a_root_filesystem.3F -- Stan From supratiksekhar@gmail.com Mon Jan 30 03:19:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0U9JMb9001834 for ; Mon, 30 Jan 2012 03:19:22 -0600 X-ASG-Debug-ID: 1327915159-04cb6c225f2a9ef0001-NocioJ Received: from mail-we0-f181.google.com (mail-we0-f181.google.com [74.125.82.181]) by cuda.sgi.com with ESMTP id i2cFA5Uo0GdAQDh6 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 30 Jan 2012 01:19:19 -0800 (PST) X-Barracuda-Envelope-From: supratiksekhar@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.181 Received: by werb10 with SMTP id b10so3597800wer.26 for ; Mon, 30 Jan 2012 01:19:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; bh=UzqkP+lQwMknT9Q17GgIyQj/i3APger3MXDueBovAUY=; b=PfBgpOAS4LOLuEvvgHv6JjugfNDrDDgOMJBZDMlcZLraH//AUhLNc3hWt4iI3JOqSJ RF4jI/o0Kq2OVx3wS8HydsbzUe0kp/vJNUwNPtB8Uk2SRy+TE6tqRL2jf/ZK7UUh/iO8 gMuBfEh6jHdTxSpsuoQ6QGpOvsDQW7cJdsQrU= Received: by 10.216.139.147 with SMTP id c19mr6765878wej.11.1327915158847; Mon, 30 Jan 2012 01:19:18 -0800 (PST) MIME-Version: 1.0 Received: by 10.180.99.164 with HTTP; Mon, 30 Jan 2012 01:18:58 -0800 (PST) From: Supratik Goswami Date: Mon, 30 Jan 2012 14:48:58 +0530 Message-ID: Subject: File system remain unresponsive until the system is rebooted. To: xfs@oss.sgi.com X-ASG-Orig-Subj: File system remain unresponsive until the system is rebooted. Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-we0-f181.google.com[74.125.82.181] X-Barracuda-Start-Time: 1327915159 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87091 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 We are using RAID-0 volumes as PV's in our LVM stack and XFS as the filesystem. The kernel logged the below call trace when the filesystem was being expanded using "xfs_growfs" command. We have used xfs_grofs at least 3 times earlier but did not cam across this situation. The files system remained unresponsive until we rebooted the system and again increased the size of the filesystem. This time it worked fine. Can you please tell us why xfs_grofs hanged suddenly ? Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550724] flush-254:0 D 00000001016ff564 0 31679 2 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550728] ffff8801de5df388 0000000000000246 ffff88002a3f57d0 ffff8801de5df308 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550732] ffff8801deb59a10 ffff8801de5df350 ffff8801def9ec70 ffff8801de5dffd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550734] ffff8801def9e8c0 ffff8801def9e8c0 ffff8801def9e8c0 ffff8801de5dffd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550737] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550748] [] ? xfs_btree_insert+0x67/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550754] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550757] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550761] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550764] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550770] [] xfs_bmap_btalloc+0x300/0xa90 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550774] [] ? xfs_bmap_search_multi_extents+0xa5/0x110 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550784] [] ? xfs_bmap_search_extents+0x69/0xf0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550787] [] xfs_bmap_alloc+0x1c/0x40 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550790] [] xfs_bmapi+0xb9f/0x1290 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550796] [] xfs_iomap_write_allocate+0x1c5/0x3c0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550799] [] xfs_iomap+0x2a6/0x2e0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550804] [] xfs_map_blocks+0x28/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550807] [] xfs_page_state_convert+0x3da/0x720 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550809] [] xfs_vm_writepage+0x71/0x120 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550815] [] __writepage+0x12/0x40 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550817] [] write_cache_pages+0x1d7/0x3d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550820] [] ? __writepage+0x0/0x40 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550823] [] generic_writepages+0x1f/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550826] [] xfs_vm_writepages+0x70/0x90 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550829] [] do_writepages+0x1c/0x40 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550834] [] writeback_single_inode+0x103/0x3f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550837] [] writeback_sb_inodes+0x184/0x2a0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550840] [] writeback_inodes_wb+0x6b/0x1f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550843] [] wb_writeback+0x26b/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550847] [] ? del_timer_sync+0x1a/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550850] [] wb_do_writeback+0x17f/0x190 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550853] [] bdi_writeback_task+0x4b/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550858] [] ? bdi_start_fn+0x0/0x110 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550861] [] bdi_start_fn+0x81/0x110 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550863] [] ? bdi_start_fn+0x0/0x110 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550868] [] kthread+0x8e/0xa0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550873] [] child_rip+0xa/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550876] [] ? kthread+0x0/0xa0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550878] [] ? child_rip+0x0/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550897] cm-httpserver D 00000001016fed9a 0 16726 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550900] ffff8801dd869d28 0000000000000286 ffff8801dca1a8c0 ffff8801dd869ca8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550903] ffff8801b1583032 ffff8801dd869cf0 ffff8801dd7f6870 ffff8801dd869fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550905] ffff8801dd7f64c0 ffff8801dd7f64c0 ffff8801dd7f64c0 ffff8801dd869fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550908] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550916] [] ? security_inode_permission+0x1a/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550920] [] ? __link_path_walk+0xed/0xf90 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550922] [] __mutex_lock_slowpath+0x11c/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550928] [] ? apparmor_file_alloc_security+0x24/0x90 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550930] [] mutex_lock+0x1e/0x40 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550933] [] do_filp_open+0x3cd/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550936] [] ? path_put+0x2c/0x40 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550939] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550944] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550947] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550950] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550953] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550977] cm-gdoc D 0000000000000002 0 16809 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550980] ffff8801dcd65810 0000000000000286 000000008102a929 ffff8801dcd65790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550983] ffff880002c67bd0 ffff8801dcd657d8 ffff88012679e8f0 ffff8801dcd65fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550985] ffff88012679e540 ffff88012679e540 ffff88012679e540 ffff8801dcd65fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550990] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550995] [] ? find_busiest_group+0x5f/0x440 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550997] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551003] [] ? notify_remote_via_irq+0x5e/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551006] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551008] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551011] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551013] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551017] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551020] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551026] [] ? update_sd_lb_stats+0x1fd/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551029] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551032] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551035] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551038] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551041] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551044] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551047] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551050] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551052] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551054] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551057] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551059] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551062] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551065] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551067] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551070] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551078] cm-gdoc D 0000000000000001 0 16816 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551081] ffff8801dea61a58 0000000000000286 ffff8800087f1078 ffff8801dea619d8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551083] ffff880004a73000 ffff8801dea61a20 ffff8801dcc3ca70 ffff8801dea61fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551086] ffff8801dcc3c6c0 ffff8801dcc3c6c0 ffff8801dcc3c6c0 ffff8801dea61fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551088] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551094] [] ? xlog_state_get_iclog_space+0x60/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551097] [] schedule_timeout+0x1e5/0x2c0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551099] [] ? xlog_state_get_iclog_space+0x60/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551102] [] ? xlog_write+0x5d8/0x690 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551104] [] __down+0x78/0xf0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551109] [] down+0x3c/0x50 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551112] [] xfs_buf_lock+0x1e/0x60 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551114] [] _xfs_buf_find+0x149/0x270 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551117] [] xfs_buf_get_flags+0x5b/0x170 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551119] [] xfs_buf_read_flags+0x13/0xa0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551122] [] xfs_trans_read_buf+0x1c9/0x300 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551126] [] ? xfs_dir2_sf_removename+0x121/0x190 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551128] [] xfs_read_agi+0x6f/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551131] [] xfs_iunlink+0x46/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551134] [] ? current_fs_time+0x22/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551137] [] ? __mark_inode_dirty+0x3d/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551139] [] ? xfs_ichgtime+0x1d/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551142] [] xfs_droplink+0x59/0x70 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551144] [] xfs_remove+0x294/0x350 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551148] [] ? generic_permission+0x1e/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551150] [] xfs_vn_unlink+0x43/0x90 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551152] [] vfs_unlink+0xa0/0xf0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551154] [] ? lookup_hash+0x35/0x50 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551156] [] do_unlinkat+0x19e/0x1d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551159] [] ? fput+0x1d/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551162] [] ? filp_close+0x58/0x90 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551164] [] sys_unlink+0x11/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551167] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551169] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551177] cm-gdoc D 00000001016fea9d 0 16817 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551180] ffff8801ddbad810 0000000000000286 0000000000000000 ffff8801ddbad790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551183] ffff880002c67bd0 ffff8801ddbad7d8 ffff8801de886ab0 ffff8801ddbadfd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551185] ffff8801de886700 ffff8801de886700 ffff8801de886700 ffff8801ddbadfd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551190] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551192] [] ? find_busiest_group+0x5f/0x440 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551195] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551198] [] ? notify_remote_via_irq+0x5e/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551200] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551203] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551205] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551208] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551210] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551212] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551217] [] ? ip_finish_output+0x134/0x310 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551220] [] ? ip_output+0xb8/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551222] [] ? schedule_hrtimeout_range+0xcd/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551225] [] ? ip_local_out+0x20/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551227] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551230] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551233] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551236] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551239] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551241] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551244] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551246] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551249] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551251] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551253] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551256] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551259] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551261] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551264] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551267] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551274] cm-gdoc D 00000001016fea61 0 16818 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551277] ffff8801dd593810 0000000000000286 0000000000000000 ffff8801dd593790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551280] ffff880002c67bd0 ffff8801dd5937d8 ffff8801ded64af0 ffff8801dd593fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551284] ffff8801ded64740 ffff8801ded64740 ffff8801ded64740 ffff8801dd593fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551287] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551290] [] ? hypervisor_callback+0x25/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551293] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551295] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551298] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551300] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551302] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551305] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551307] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551310] [] ? update_sd_lb_stats+0x1fd/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551312] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551315] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551318] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551321] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551324] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551326] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551329] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551331] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551333] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551336] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551338] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551340] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551343] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551346] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551348] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551351] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551359] cm-gdoc D 00000001016fea55 0 16831 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551362] ffff8801dde39810 0000000000000286 0000000000000000 ffff8801dde39790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551364] ffff880002c67bd0 ffff8801dde397d8 ffff8801de888cb0 ffff8801dde39fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551367] ffff8801de888900 ffff8801de888900 ffff8801de888900 ffff8801dde39fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551369] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551374] [] ? find_busiest_group+0x5f/0x440 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551377] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551379] [] ? notify_remote_via_irq+0x5e/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551382] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551384] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551387] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551389] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551391] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551394] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551396] [] ? ip_finish_output+0x134/0x310 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551399] [] ? ip_output+0xb8/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551401] [] ? schedule_hrtimeout_range+0xcd/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551404] [] ? ip_local_out+0x20/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551406] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551409] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551412] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551415] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551417] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551420] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551423] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551426] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551428] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551430] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551433] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551435] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551438] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551441] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551443] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551446] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551453] cm-gdoc D 0000000000000001 0 16837 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551456] ffff8801dd5a7810 0000000000000286 0000000000000000 ffff8801dd5a7790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551459] ffff880004a73000 ffff8801dd5a77d8 ffff8801dd59e4f0 ffff8801dd5a7fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551461] ffff8801dd59e140 ffff8801dd59e140 ffff8801dd59e140 ffff8801dd5a7fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551464] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551469] [] ? find_busiest_group+0x5f/0x440 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551472] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551474] [] ? notify_remote_via_irq+0x5e/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551477] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551479] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551482] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551484] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551486] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551489] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551491] [] ? ip_finish_output+0x134/0x310 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551494] [] ? ip_output+0xb8/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551496] [] ? schedule_hrtimeout_range+0xcd/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551499] [] ? ip_local_out+0x20/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551501] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551504] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551507] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551509] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551512] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551515] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551518] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551520] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551522] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551525] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551527] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551530] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551533] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551535] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551538] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551541] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551548] cm-gdoc D 0000000000000001 0 16838 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551551] ffff8801b15e9810 0000000000000286 0000000000000000 ffff8801b15e9790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551554] ffff880004a73000 ffff8801b15e97d8 ffff8801deb9e530 ffff8801b15e9fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551556] ffff8801deb9e180 ffff8801deb9e180 ffff8801deb9e180 ffff8801b15e9fd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551558] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551563] [] ? find_busiest_group+0x5f/0x440 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551566] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551569] [] ? notify_remote_via_irq+0x5e/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551571] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551574] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551576] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551578] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551581] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551583] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551586] [] ? ip_finish_output+0x134/0x310 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551588] [] ? ip_output+0xb8/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551591] [] ? schedule_hrtimeout_range+0xcd/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551593] [] ? ip_local_out+0x20/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551596] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551598] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551601] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551604] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551606] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551609] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551612] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551614] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551616] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551618] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551621] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551623] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551626] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551629] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551631] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551634] [] ? system_call+0x0/0x52 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551641] cm-gdoc D 0000000000000002 0 16859 1 0x00000000 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551644] ffff88012646b810 0000000000000286 0000000000000000 ffff88012646b790 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551647] ffff880002c67bd0 ffff88012646b7d8 ffff8801b1690a70 ffff88012646bfd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551649] ffff8801b16906c0 ffff8801b16906c0 ffff8801b16906c0 ffff88012646bfd8 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551652] Call Trace: Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551656] [] ? find_busiest_group+0x5f/0x440 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551659] [] rwsem_down_failed_common+0xbd/0x240 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551662] [] ? notify_remote_via_irq+0x5e/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551664] [] rwsem_down_read_failed+0x26/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551667] [] call_rwsem_down_read_failed+0x14/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551669] [] ? down_read+0x12/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551671] [] xfs_ialloc_ag_select+0x92/0x370 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551674] [] ? sch_direct_xmit+0x95/0x200 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551676] [] xfs_dialloc+0x415/0x940 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551679] [] ? ip_finish_output+0x134/0x310 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551682] [] ? ip_output+0xb8/0xc0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551684] [] ? schedule_hrtimeout_range+0xcd/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551687] [] ? ip_local_out+0x20/0x30 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551689] [] xfs_ialloc+0x5d/0x700 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551692] [] ? xlog_grant_log_space+0x3fc/0x450 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551695] [] xfs_dir_ialloc+0x7d/0x2d0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551697] [] ? xfs_log_reserve+0xd4/0xe0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551700] [] xfs_create+0x3e3/0x5f0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551703] [] ? __d_lookup+0xb1/0x180 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551705] [] xfs_vn_mknod+0xa2/0x1b0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551708] [] xfs_vn_create+0xb/0x10 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551710] [] vfs_create+0xaf/0xd0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551712] [] __open_namei_create+0xbc/0x100 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551715] [] do_filp_open+0xa66/0xba0 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551717] [] ? alloc_fd+0x4b/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551720] [] do_sys_open+0x64/0x160 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551723] [] sys_open+0x1b/0x20 Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551726] [] system_call_fastpath+0x16/0x1b Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.551728] [] ? system_call+0x0/0x52 -- Warm Regards Supratik From stan@hardwarefreak.com Mon Jan 30 04:14:58 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UAEvpG005562 for ; Mon, 30 Jan 2012 04:14:58 -0600 X-ASG-Debug-ID: 1327918495-04bdf07517328f90001-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 88i3Pr4uZpGYqgU7 for ; Mon, 30 Jan 2012 02:14:55 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id E5B476C09E; Mon, 30 Jan 2012 04:14:54 -0600 (CST) Message-ID: <4F266DA1.20806@hardwarefreak.com> Date: Mon, 30 Jan 2012 04:14:57 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Dave Chinner CC: Martin Steigerwald , xfs@oss.sgi.com Subject: Re: Dave's presentation at Linux.Conf.Au 2012 References: <4F24949E.2090108@hardwarefreak.com> <201201290838.52497.Martin@lichtvoll.de> <20120130004717.GH15102@dastard> X-ASG-Orig-Subj: Re: Dave's presentation at Linux.Conf.Au 2012 In-Reply-To: <20120130004717.GH15102@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: 1327918495 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On 1/29/2012 6:47 PM, Dave Chinner wrote: >> Am Sonntag, 29. Januar 2012 schrieb Stan Hoeppner: >>> http://www.phoronix.com/scan.php?page=news_item&px=MTA0NzM >>> (I don't care for the Phoronix title or summary) > I can't say that I like the way Phoronix presented it, either, but > that's Phoronix for you. Phoronix just happened to be the first/only place I'd found the video. I'd have preferred a different option for linking. Someone posted it on the Dovecot list. Phoronix is apparently geared toward the "power desktop" user. Interestingly, their last (if not all) Linux filesystem test was performed on an Intel Core 2 Duo laptop with 4GB RAM and a single SATA disk. Obviously an optimal real world platform for demonstrating XFS' "large and lots" strengths/advantages. /laughs http://www.phoronix.com/scan.php?page=article&item=linux_2639_fs&num=1 -- Stan From sgi-linux-xfs@plane.gmane.org Mon Jan 30 05:19:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_TO_NO_BRKTS_FREEMAIL,UNPARSEABLE_RELAY autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UBJtvu013980 for ; Mon, 30 Jan 2012 05:19:57 -0600 X-ASG-Debug-ID: 1327922392-04cb6c22612b65a0001-w1Z2WR Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by cuda.sgi.com with ESMTP id izh5UM8Hh4wZfJdi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 30 Jan 2012 03:19:53 -0800 (PST) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.3 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1RrpH2-0005Fi-Qe for linux-xfs@oss.sgi.com; Mon, 30 Jan 2012 12:19:51 +0100 Received: from bd206cc2.virtua.com.br ([bd206cc2.virtua.com.br]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 30 Jan 2012 12:19:48 +0100 Received: from marcosfrm by bd206cc2.virtua.com.br with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 30 Jan 2012 12:19:48 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Marcos Mello Subject: Re: Placing the root partition on an XFS filesystem is not supported Date: Mon, 30 Jan 2012 11:19:39 +0000 (UTC) X-ASG-Orig-Subj: Re: Placing the root partition on an XFS filesystem is not supported Lines: 24 Message-ID: References: <4F265EE3.6020908@hardwarefreak.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: sea.gmane.org User-Agent: Loom/3.14 (http://gmane.org/) X-Loom-IP: 189.32.108.194 (Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1) X-Barracuda-Connect: plane.gmane.org[80.91.229.3] X-Barracuda-Start-Time: 1327922393 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.51 X-Barracuda-Spam-Status: No, SCORE=0.51 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085, SUBJECT_FUZZY_TION, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87099 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines 0.10 BSF_SC0_SA085 Custom Rule SA085 Stan Hoeppner hardwarefreak.com> writes: > > On 1/29/2012 6:46 AM, Marcos Mello wrote: > > http://git.fedorahosted.org/git/?p=anaconda.git;a=commit;h=b3e19d43840f6c4015fab75411853003fcf26a63 > > > > Does someone knows why? I'm trying to get rid of EXT* partitions on my new > > CentOS 6.2 installs but apparently it will not be possible. > > I'm unsure what this Fedora commit is all about, but in the general > Linux case you can put root on XFS, with a minor caveat. See: > > http://www.xfs.org/index.php/XFS_FAQ#Q:_Can_XFS_be_used_for_a_root_filesystem.3F > Yeah, some time ago I run XFS as my / on Arch. But Anaconda doesn't allow it now. So we're still forced to have an EXT partition for the root filesystem in the Red Hat land. Found this http://pastebin.com/gHqGGkSp Marcos From BATV+3360dee9c1a50ec51f29+3081+infradead.org+hch@bombadil.srs.infradead.org Mon Jan 30 05:50:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UBoVDc036845 for ; Mon, 30 Jan 2012 05:50:31 -0600 X-ASG-Debug-ID: 1327924226-04cb6c22602b90f0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Ywy6lw4eh9IrKeQD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 30 Jan 2012 03:50:26 -0800 (PST) X-Barracuda-Envelope-From: BATV+3360dee9c1a50ec51f29+3081+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rrpke-0000J5-LJ; Mon, 30 Jan 2012 11:50:24 +0000 Date: Mon, 30 Jan 2012 06:50:24 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: nathans@aconex.com, arekm@maven.pl Subject: [PATCH] xfs_quota: remove calls to XFS_QSYNC Message-ID: <20120130115024.GA884@infradead.org> X-ASG-Orig-Subj: [PATCH] xfs_quota: remove calls to XFS_QSYNC MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1327924226 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87101 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 In 2005 commit master-melb:xfs-cmds:23840a from Nathan added calls to XFS_QSYNC/Q_XQUOTASYNC to xfs_quota, with the following rather sparse description: "Issue a quote sync before reporting quota, resolving issue with delayed allocation." I can't really see a reason for this - we do quota accounting by the time we reserve space for the delayed allocation, and while converting the reservations might change the quota accounting minimally due to the amount of btree blocks used for the bmap btree on large files in generally this makes little sense, and on today's large system has a large performance impact. Also only xfs_quota ever did these calls, the generic quota tool never did any kind of sync, and of course removing it does not cause any regressions in xfstests. Nathan, I've cced you in case you still remember anything about this, although it's fairly unlikely after 6.5 years. Also if anyone at SGI can find anything about the above commits in BugWorks additional feedback would be welcome. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/quota/free.c =================================================================== --- xfsprogs-dev.orig/quota/free.c 2012-01-27 11:10:34.000000000 +0000 +++ xfsprogs-dev/quota/free.c 2012-01-27 11:10:42.000000000 +0000 @@ -167,7 +167,6 @@ projects_free_space_data( return 0; } - xfsquotactl(XFS_QSYNC, dev, type, fsx.fsx_projid, NULL); if (xfsquotactl(XFS_GETQUOTA, dev, type, fsx.fsx_projid, &d) < 0) { perror("XFS_GETQUOTA"); close(fd); Index: xfsprogs-dev/quota/irix.c =================================================================== --- xfsprogs-dev.orig/quota/irix.c 2012-01-27 11:10:52.000000000 +0000 +++ xfsprogs-dev/quota/irix.c 2012-01-27 11:10:59.000000000 +0000 @@ -45,8 +45,6 @@ xcommand_to_qcommand( return Q_XGETQSTAT; case XFS_QUOTARM: return Q_XQUOTARM; - case XFS_QSYNC: - return Q_SYNC; } return 0; } Index: xfsprogs-dev/quota/linux.c =================================================================== --- xfsprogs-dev.orig/quota/linux.c 2012-01-27 11:11:02.000000000 +0000 +++ xfsprogs-dev/quota/linux.c 2012-01-27 11:11:05.000000000 +0000 @@ -55,8 +55,6 @@ xcommand_to_qcommand( return Q_XGETQSTAT; case XFS_QUOTARM: return Q_XQUOTARM; - case XFS_QSYNC: - return Q_XQUOTASYNC; } return 0; } Index: xfsprogs-dev/quota/quota.c =================================================================== --- xfsprogs-dev.orig/quota/quota.c 2012-01-27 11:10:24.000000000 +0000 +++ xfsprogs-dev/quota/quota.c 2012-01-27 11:10:29.000000000 +0000 @@ -64,7 +64,6 @@ quota_mount( uint qflags; int count; - xfsquotactl(XFS_QSYNC, dev, type, 0, NULL); if (xfsquotactl(XFS_GETQUOTA, dev, type, id, (void *)&d) < 0) return 0; Index: xfsprogs-dev/quota/quota.h =================================================================== --- xfsprogs-dev.orig/quota/quota.h 2012-01-27 11:11:10.000000000 +0000 +++ xfsprogs-dev/quota/quota.h 2012-01-27 11:11:20.000000000 +0000 @@ -41,7 +41,6 @@ enum { XFS_SETQLIM, /* set disk limits */ XFS_GETQSTAT, /* get quota subsystem status */ XFS_QUOTARM, /* free disk space used by dquots */ - XFS_QSYNC, /* flush delayed allocate space */ }; /* Index: xfsprogs-dev/quota/report.c =================================================================== --- xfsprogs-dev.orig/quota/report.c 2012-01-27 11:09:41.000000000 +0000 +++ xfsprogs-dev/quota/report.c 2012-01-27 11:10:19.000000000 +0000 @@ -520,10 +520,6 @@ report_any_type( if (type & XFS_USER_QUOTA) { fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor); while ((mount = fs_cursor_next_entry(&cursor))) { - if (xfsquotactl(XFS_QSYNC, mount->fs_name, - XFS_USER_QUOTA, 0, NULL) < 0 - && errno != ENOENT && errno != ENOSYS) - perror("XFS_QSYNC user quota"); report_user_mount(fp, form, mount, lower, upper, flags); } @@ -531,10 +527,6 @@ report_any_type( if (type & XFS_GROUP_QUOTA) { fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor); while ((mount = fs_cursor_next_entry(&cursor))) { - if (xfsquotactl(XFS_QSYNC, mount->fs_name, - XFS_GROUP_QUOTA, 0, NULL) < 0 - && errno != ENOENT && errno != ENOSYS) - perror("XFS_QSYNC group quota"); report_group_mount(fp, form, mount, lower, upper, flags); } @@ -542,10 +534,6 @@ report_any_type( if (type & XFS_PROJ_QUOTA) { fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor); while ((mount = fs_cursor_next_entry(&cursor))) { - if (xfsquotactl(XFS_QSYNC, mount->fs_name, - XFS_PROJ_QUOTA, 0, NULL) < 0 - && errno != ENOENT && errno != ENOSYS) - perror("XFS_QSYNC proj quota"); report_project_mount(fp, form, mount, lower, upper, flags); } From jymmyjr@gmail.com Mon Jan 30 08:31:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UEVd2V057718 for ; Mon, 30 Jan 2012 08:31:39 -0600 X-ASG-Debug-ID: 1327933896-04bdf07519345620001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id xVLFhD6zP6bBEzcz (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 30 Jan 2012 06:31:38 -0800 (PST) X-Barracuda-Envelope-From: jymmyjr@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lahd3 with SMTP id d3so2675741lah.26 for ; Mon, 30 Jan 2012 06:31:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=ISxYke6kbuWikxnXCAqGlODc0QcSX5mjSZd288alues=; b=mSXPJdD2RPBRLkzqx3JW3T8PQRYCJYlCEEC9JSLpy+PWjccW6RzpV7ER87CYk6JAT4 axfZRacXUcpt11FQ9Nslm60QWaC7Tjm8tWs8iyMJpnwDErDXZRciRY3okHqXitJh6Y+g SjvgzXp8tIlJETQubzZFuxyAkEa/RgVRwWn30= MIME-Version: 1.0 Received: by 10.152.131.40 with SMTP id oj8mr9323172lab.24.1327933896443; Mon, 30 Jan 2012 06:31:36 -0800 (PST) Received: by 10.112.10.167 with HTTP; Mon, 30 Jan 2012 06:31:36 -0800 (PST) In-Reply-To: <20120127191532.GA25529@infradead.org> References: <20120124213936.GA1505@infradead.org> <20120127105859.GC23335@infradead.org> <20120127191532.GA25529@infradead.org> Date: Mon, 30 Jan 2012 12:31:36 -0200 Message-ID: Subject: Re: XFS problem From: Kelbel Junior X-ASG-Orig-Subj: Re: XFS problem To: Christoph Hellwig Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1327933897 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87110 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, Christoph. Yes, we work on 1TB file, doing lots of random I/O over a single file. We are using 'pwrite' ofr each write operation. Output of 'filefrag' in this file: file: 1364 extents found The 'mount' options are the same as mentioned earlier. About RAID, we use RAID 0. In a file with this size and this extents amount could happen the problem that we're seeing? Thanks. Kelbel Junior From pg_mh@V01.sabi.co.uk Mon Jan 30 11:23:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UHNucW091551 for ; Mon, 30 Jan 2012 11:23:56 -0600 X-ASG-Debug-ID: 1327944233-04cb6c225e2dc960001-ps1ADW Received: from woodbine.london.02.net (woodbine.london.02.net [87.194.255.145]) by cuda.sgi.com with ESMTP id AjvbSLyaqBB6jDl9 for ; Mon, 30 Jan 2012 09:23:54 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.145 Received: from ty.sabi.co.UK (87.194.99.40) by woodbine.london.02.net (8.5.140) id 4EEB647400C5C402 for xfs@OSS.SGI.com; Mon, 30 Jan 2012 17:23:52 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RruxI-0003Mh-4k for ; Mon, 30 Jan 2012 17:23:48 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20262.53793.852781.185079@tree.ty.sabi.co.UK> Date: Mon, 30 Jan 2012 17:23:45 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: woodbine.london.02.net[87.194.255.145] X-Barracuda-Start-Time: 1327944234 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87123 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > We are using RAID-0 volumes as PV's in our LVM stack and XFS > as the filesystem. LVM is in general a bad idea, and I have found that it occasionally interacts not so well with XFS and other filesystems under resource pressure. It also seems from one of the backtraces that you are complicating all this further by running under Xen, perhaps on sparsely allocated virtual disks. > [ ... ] The files system remained unresponsive until we > rebooted the system and again increased the size of the > filesystem. [ ... ] Good luck. I know some people who also went the whole VM/LVM/XFS stack way and had lots of problems. It is what I call the "syntactic" approach: expecting that every syntactically valid combination of features is going to work, and work well. Sure it should :-). Most of the hangs seem to happen during resource allocation, and at least one is triggered by the flusher: > Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550853] [] bdi_writeback_task+0x4b/0xe0 > Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550858] [] ? bdi_start_fn+0x0/0x110 > Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550861] [] bdi_start_fn+0x81/0x110 > Jan 26 03:05:47 ip-10-0-1-153 kernel: [241565.550863] [] ? bdi_start_fn+0x0/0x110 It could be that there is intense pressure on kernel memory, often due to excessively loose flusher parameters. From bpm@sgi.com Mon Jan 30 12:27:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UIRJpo094108; Mon, 30 Jan 2012 12:27:19 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id AAE888F8054; Mon, 30 Jan 2012 10:27:13 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 5F96E426DA7; Mon, 30 Jan 2012 12:27:17 -0600 (CST) Date: Mon, 30 Jan 2012 12:27:17 -0600 From: Ben Myers To: Stephen Rothwell Cc: xfs-masters@oss.sgi.com, linux-next@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS for-next branch Message-ID: <20120130182717.GE7762@sgi.com> References: <20120125171244.GX8262@sgi.com> <20120127110533.10304c6a33b83ac8e778915c@canb.auug.org.au> <20120127160137.GJ8262@sgi.com> <20120128081709.e7b0df733e5d35fe625eeea0@canb.auug.org.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120128081709.e7b0df733e5d35fe625eeea0@canb.auug.org.au> User-Agent: Mutt/1.5.18 (2008-05-17) Hi Stephen, On Sat, Jan 28, 2012 at 08:17:09AM +1100, Stephen Rothwell wrote: > On Fri, 27 Jan 2012 10:01:37 -0600 Ben Myers wrote: > > > > On Fri, Jan 27, 2012 at 11:05:33AM +1100, Stephen Rothwell wrote: > > > On Wed, 25 Jan 2012 11:12:44 -0600 Ben Myers wrote: > > > > > > > > Could you pull XFS updates from > > > > > > > > git://oss.sgi.com/xfs/xfs.git for-next > > > > > > > > instead of from the oss/master branch for 3.3? > > > > > > OK, currently I fetch the "master" branch of that tree. And you want em > > > to switch to the "for-next" branch, right? (Those two branches currently > > > point to the same commit, so I have not changed yet.) > > > > Yep, please switch to oss/for-next instead of oss/master. I'll keep > > them in sync normally, it's just that I'd like to have a little > > flexability WRT what is in for-next. > > Just to be crystal clear: there are no branches in that tree called > "oss/for-next" or "oss/master" - I assume that you are referring to the > branches called "for-next" and "master", right? I am referring to for-next and master branches, at git://oss.sgi.com/xfs/xfs.git. Sorry I wasn't very clear. Thanks, Ben From ndsco1@student.monash.edu Mon Jan 30 13:57:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UJvCMm113632 for ; Mon, 30 Jan 2012 13:57:12 -0600 X-ASG-Debug-ID: 1327953429-04cbb01fb33c18f0001-NocioJ Received: from cartman.its.monash.edu.au (cartman.its.monash.edu.au [130.194.13.166]) by cuda.sgi.com with ESMTP id 21iws2BGq5jyXpzF for ; Mon, 30 Jan 2012 11:57:10 -0800 (PST) X-Barracuda-Envelope-From: ndsco1@student.monash.edu X-Barracuda-Apparent-Source-IP: 130.194.13.166 Received: from chapman.its.monash.edu.au ([130.194.13.89]) by cartman.its.monash.edu.au (Sun Java System Messaging Server 6.2-4.03 (built Sep 22 2005)) with ESMTP id <0LYM00IYZNF8NR10@cartman.its.monash.edu.au> for xfs@oss.sgi.com; Tue, 31 Jan 2012 06:57:08 +1100 (EST) Received: from chapman.its.monash.edu.au (localhost.localdomain [127.0.0.1]) by localhost (Postfix) with SMTP id 571737E6105 for ; Tue, 31 Jan 2012 06:57:08 +1100 (EST) Received: from mail-pz0-f54.google.com (mail-pz0-f54.google.com [209.85.210.54]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by chapman.its.monash.edu.au (Postfix) with ESMTPS id D62137E6117 for ; Tue, 31 Jan 2012 06:57:07 +1100 (EST) Received: by dadw1 with SMTP id w1so4590313dad.41 for ; Mon, 30 Jan 2012 11:57:04 -0800 (PST) Received: by 10.68.218.5 with SMTP id pc5mr43906293pbc.101.1327953424867; Mon, 30 Jan 2012 11:57:04 -0800 (PST) Received: by 10.68.17.40 with HTTP; Mon, 30 Jan 2012 11:57:04 -0800 (PST) Date: Tue, 31 Jan 2012 06:57:04 +1100 From: Nathan Scott Subject: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC In-reply-to: <20120130115024.GA884@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC Sender: ndsco1@student.monash.edu To: Christoph Hellwig Cc: xfs@oss.sgi.com Message-id: MIME-version: 1.0 Content-type: text/plain; charset=ISO-8859-1 Content-transfer-encoding: quoted-printable X-Google-Sender-Auth: IuII4UPoebocUUczzeZSGvSRYNY References: <20120130115024.GA884@infradead.org> X-Barracuda-Connect: cartman.its.monash.edu.au[130.194.13.166] X-Barracuda-Start-Time: 1327953430 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87133 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 30 January 2012 22:50, Christoph Hellwig wrote: > ... > Nathan, I've cced you in case you still remember anything about this, > although it's fairly unlikely after 6.5 years. =A0Also if anyone at SGI > can find anything about the above commits in BugWorks additional feedback > would be welcome. I can't recall - but usually there was greater detail in the bugworks entry= , I think thats your best source now. Patch looks OK to me FWIW, assuming nothing comes of the bugworks archeology exercise. cheers. -- Nathan From jymmyjr@gmail.com Mon Jan 30 14:34:55 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UKYt3w120201 for ; Mon, 30 Jan 2012 14:34:55 -0600 X-ASG-Debug-ID: 1327955693-04cb6c225f2f2340001-NocioJ Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by cuda.sgi.com with ESMTP id cw9ILB2JBIFXcEZZ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 30 Jan 2012 12:34:53 -0800 (PST) X-Barracuda-Envelope-From: jymmyjr@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.215.53 Received: by lahd3 with SMTP id d3so2911975lah.26 for ; Mon, 30 Jan 2012 12:34:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=GTFkFUHGDlWTZouLQvRcXWOilA6RduSIZ2NKvekPCdI=; b=lhSXvDbtc79Bqv+XERYLzJQ9TGOwOPIze4GMU7VZxRyR/WGSbokxmCGDd3pGeOZuj/ Toq514/aZLjnKZxzc8it5MHUcudRfU1Ixnlapkv57FFgdxFFr6jlaztrR5esLMgWymRN 2nL7Ji4lUEfZwO0WEvptGkSk7z9jnUpzNqggs= MIME-Version: 1.0 Received: by 10.152.131.40 with SMTP id oj8mr9975239lab.24.1327955692707; Mon, 30 Jan 2012 12:34:52 -0800 (PST) Received: by 10.112.10.167 with HTTP; Mon, 30 Jan 2012 12:34:52 -0800 (PST) In-Reply-To: References: <20120124213936.GA1505@infradead.org> <20120127105859.GC23335@infradead.org> <20120127191532.GA25529@infradead.org> Date: Mon, 30 Jan 2012 18:34:52 -0200 Message-ID: Subject: Re: XFS problem From: Kelbel Junior X-ASG-Orig-Subj: Re: XFS problem To: Christoph Hellwig Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-lpp01m010-f53.google.com[209.85.215.53] X-Barracuda-Start-Time: 1327955693 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87135 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 again, Christoph. How you prefer to pre allocate space? xfs I/O or by 'dd' to do it? What other information you would like to better understand and manage to solve this problem? Below sending the first lines of the output 'filefrag -v cachefile' to check if there is some useful information ... if you want, I can make available for download a file with the output of the 'filefrag-v' #### Filesystem type is: 58465342 File size of cachefile is 885075181568 (216082808 blocks, blocksize 4096) ext logical physical expected length flags 0 0 37651 1 1 8 8356011 37651 2 2 10 42985973 8356012 5 3 16 8356008 42985977 1 4 24 14384348 8356008 3 5 27 42978781 14384350 4 6 31 49416416 42978784 1 7 32 14384398 49416416 3 8 35 42985981 14384400 3 9 40 14384407 42985983 2 10 42 42990181 14384408 4 11 48 14384433 42990184 3 12 56 14384445 14384435 2 13 64 14384470 14384446 2 14 66 43029387 14384471 2 15 72 14384492 43029388 2 16 80 14384556 14384493 2 17 82 43108186 14384557 2 18 88 14388688 43108187 3 19 96 14391631 14388690 3 20 104 14391634 1 21 112 14391635 1 22 113 41118314 14391635 1 23 120 14391625 41118314 1 24 121 43107765 14391625 5 25 128 14391888 43107769 7 26 136 14391793 14391894 6 27 142 14391806 14391798 1 28 144 14391802 14391806 4 29 152 14391810 14391805 4 30 160 14391818 14391813 3 31 168 14391826 14391820 4 32 176 14391830 1 33 184 30960375 14391830 13 34 200 30960391 30960387 2 35 202 43111672 30960392 5 36 208 30960399 43111676 2 37 210 42949345 30960400 3 38 216 30960407 42949347 3 39 224 30960415 30960409 3 40 232 30960423 30960417 3 41 240 30960431 30960425 3 42 248 30960439 30960433 6 43 256 30960447 30960444 3 44 264 30960455 30960449 2 45 266 41079292 30960456 1 46 272 30960463 41079292 3 47 275 40779450 30960465 1 #### Another fact, tried to run a 'xfs_bmap' file on my 1TB (not sure if the output of this command would be relevant to you) and got the following message: # xfs_bmap -pv cachefile xfs_bmap: xfsctl(XFS_IOC_GETBMAPX) iflags=0x4 ["file"]: Unable to allocate memory Thanks. Kelbel Junior From sandeen@sandeen.net Mon Jan 30 15:22:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_47 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0ULMvQf135418 for ; Mon, 30 Jan 2012 15:22:57 -0600 X-ASG-Debug-ID: 1327958575-04bdf0751837bf50001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id s1zpeGIJznMstPEw for ; Mon, 30 Jan 2012 13:22:55 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 4106F496334E; Mon, 30 Jan 2012 15:22:55 -0600 (CST) Message-ID: <4F270A2F.10601@sandeen.net> Date: Mon, 30 Jan 2012 15:22:55 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: WuBo CC: xfs-oss Subject: Re: Question on xfstest 274 References: <4F230E62.8020004@sandeen.net> <4F2603CC.9080807@cn.fujitsu.com> X-ASG-Orig-Subj: Re: Question on xfstest 274 In-Reply-To: <4F2603CC.9080807@cn.fujitsu.com> X-Enigmail-Version: 1.3.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327958575 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87139 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/29/12 8:43 PM, WuBo wrote: > On 01/28/2012 04:51 AM, Eric Sandeen wrote: >> Hi, I was wondering if you could describe your intent for 274 just a little more. >> >> The test says: >> >> # preallocation test >> >> but that is the only comment other than copyright. ;) > > Maybe the comment is too simple :) > >> >> I see that it does: >> >> # Make a 1G fs >> # Create a single 4k file >> # Allocate 1M past the EOF on that file >> # Completely fill remaining space, using 2 other files >> # Write 8k past EOF on the original file which has blocks past EOF >> >> but I am not certain what you are testing. I presume that >> you are testing the fact that the 1M past EOF should be truncated, >> freeing up space, and allowing the 8k write to succeed? >> Is that right? > > Actually I write 8K at the end of 4K(seek=1), and what I want to test > is the 8K-write should be succeed because the preallocation 1M. At the > mean while, the file should not be truncated. Ah, right - I missed the conv=notrunc sorry. Ok, that all makes sense. I think I will try to clean up the test just a bit. Thanks, -Eric > Thanks, > wubo > >> >> However, at least on ext4 I noticed that the "fill the fs" >> stage does not succeed; perhaps that should be tested as well. >> >> I can do some similar work on this like I did for 275, but I need >> to be sure I understand your original intent for the test, first. >> >> Thanks, >> -Eric >> > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From b.candler@pobox.com Mon Jan 30 16:00:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_63,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UM0OGs138512 for ; Mon, 30 Jan 2012 16:00:25 -0600 X-ASG-Debug-ID: 1327960822-04cb6c225e2f8150001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id zVBBL6zmO9eTw5Uy for ; Mon, 30 Jan 2012 14:00:23 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 28A6364D4 for ; Mon, 30 Jan 2012 17:00:22 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :subject:message-id:mime-version:content-type; s=sasl; bh=cpNAvk zfBht9CVDT77zBfuM4/CU=; b=NHqPM2RVs5FxkzlRR7njaEupnYHDOK5umtDIVH tTC+a2IaZQqN6RSTHwn8BxbUkAasn7mZ/09bPzjQcSS91LjB2xlVsU47WYQJ+mgc DuOJcIyoHvLpd1KJLxJ77gIIV50BIegPNfw/VdOJJ6nXIs2TmJyXL81q96mOJWHt XpFDo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to :subject:message-id:mime-version:content-type; q=dns; s=sasl; b= v0bOK8uDPMvAGNXR1P9z77TDZ+0+4zdcJ1oDr1pybGMyTwE/UyB+v1aUjbURxK/6 1psseEJxLpYZt3Cmg2nhjOQRMvkWas8HP93BxBLA/w2vr19avSaL2B/WoryGnUOR BCoPqGVf6gYBlsXeOtDxFFQ+Ol6Kmg18dyzFB0SF/uc= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 1F79664D3 for ; Mon, 30 Jan 2012 17:00:22 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [31.185.235.168]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 796CA64D2 for ; Mon, 30 Jan 2012 17:00:21 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYMT4J-000ZBZ-R1 for xfs@oss.sgi.com; Mon, 30 Jan 2012 22:00:19 +0000 Date: Mon, 30 Jan 2012 22:00:19 +0000 From: Brian Candler To: xfs@oss.sgi.com Subject: Performance problem - reads slower than writes Message-ID: <20120130220019.GA45782@nsrc.org> X-ASG-Orig-Subj: Performance problem - reads slower than writes MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: CDEBB28C-4B8D-11E1-BFC2-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1327960822 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87141 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 I am doing some performance testing of XFS. I am using Ubuntu 11.10 amd64 (server), on an i3-2130 (3.4GHz) with 8GB RAM. This will eventually run with a bunch of Hitachi 3TB Deskstar drives, but the performance issue can be shown with just one. Writing and reading large files using dd is fine. Performance is close to what I get if I dd to the drive itself (which is 125MB/sec near the start of the disk, down to 60MB/sec near the end of the disk, both reading and writing). However I'm getting something strange when I try using bonnie++ to write and read a bunch of individual files - in this case 100,000 files with sizes between 500k and 800k, spread over 1000 directories. # time bonnie++ -d /data/sdb -s 16384k -n 98:800k:500k:1000 -u root ... Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP storage1 16G 1900 93 97299 3 49909 4 4899 96 139565 5 270.7 4 Latency 5251us 222ms 394ms 10705us 94111us 347ms Version 1.96 ------Sequential Create------ --------Random Create-------- storage1 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 98:819200:512000/1000 112 3 37 2 12659 32 106 3 39 2 8148 31 Latency 6791ms 134ms 56383us 5161ms 459ms 3664ms 1.96,1.96,storage1,1,1327926367,16G,,1900,93,97299,3,49909,4,4899,96,139565,5,270.7,4,98,819200,512000,,1000,112,3,37,2,12659,32,106,3,39,2,8148,31,5251us,222ms,394ms,10705us,94111us,347ms,6791ms,134ms,56383us,5161ms,459ms,3664ms real 129m3.450s user 0m6.684s sys 3m22.421s Writing is fine: it writes about 110 files per second, and iostat shows about 75MB/sec of write data throughput during that phase. However when bonnie++ gets to the reading stage it reads only ~38 files per second, and iostat shows only about 22MB/sec of data being read from the disk. There are about 270 disk operations per second seen at the time, so the drive is clearly saturated with seeks. It seems to be doing about 7 seeks for each stat+read. root@storage1:~# iostat 5 | grep sdb ... sdb 270.40 22119.20 0.00 110596 0 sdb 269.60 21948.80 0.00 109744 0 sdb 257.80 20969.60 0.00 104848 0 Now of course this might be symptomatic of something that bonnie++ is doing, but strace'ing the program just shows it doing stat, open, repeated reads, and close: # strace -p 14318 2>&1 | grep -v '= 8192' | head -20 Process 14318 attached - interrupt to quit read(3, "00999\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0"..., 2214) = 2214 close(3) = 0 stat("00248/Jm00000061ec", {st_mode=S_IFREG|0600, st_size=706711, ...}) = 0 open("00248/Jm00000061ec", O_RDONLY) = 3 read(3, "00999\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0"..., 2199) = 2199 close(3) = 0 stat("00566/000000df91", {st_mode=S_IFREG|0600, st_size=637764, ...}) = 0 open("00566/000000df91", O_RDONLY) = 3 read(3, "00999\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0"..., 6980) = 6980 close(3) = 0 stat("00868/7ndVASazO4I00000156bb", {st_mode=S_IFREG|0600, st_size=813560, ...}) = 0 open("00868/7ndVASazO4I00000156bb", O_RDONLY) = 3 read(3, "00999\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0"..., 2552) = 2552 close(3) = 0 stat("00759/vGTNHcCtfQ0000012bb6", {st_mode=S_IFREG|0600, st_size=786576, ...}) = 0 open("00759/vGTNHcCtfQ0000012bb6", O_RDONLY) = 3 read(3, "00999\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0 \266Z\1\0\0\0\0"..., 144) = 144 close(3) = 0 stat("00736/0RYuGyy00000122a4", {st_mode=S_IFREG|0600, st_size=758003, ...}) = 0 I can't see anything unusual there, not even O_DIRECT on the open(). The filesystem was created like this: # mkfs.xfs -i attr=2,maxpct=1 /dev/sdb Does anyone have any suggestions as to why there is so much seek activity going on, or anything I can do to trace this further? Thanks, Brian Candler. P.S. When dd'ing large files ontp XFS I found that bs=8k gave a lower performance than bs=16k or larger. So I wanted to rerun bonnie++ with larger chunk sizes. Unfortunately that causes it to crash (and fairly consistently) - see below. Is the 8k block size likely to be the performance culprit here? # time bonnie++ -d /data/sdb -s 16384k:32k -n 98:800k:500k:1000:32k -u root Using uid:0, gid:0. Writing a byte at a time...done Writing intelligently...done Rewriting...done Reading a byte at a time...done Reading intelligently... done start 'em...done...done...done...done...done... *** glibc detected *** bonnie++: double free or corruption (out): 0x00000000024430a0 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x78a96)[0x7f42a0317a96] /lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f42a031bd7c] bonnie++[0x404dd7] bonnie++[0x402e90] bonnie++[0x403bb6] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f42a02c030d] bonnie++[0x402219] ======= Memory map: ======== 00400000-0040c000 r-xp 00000000 08:01 3683058 /usr/sbin/bonnie++ 0060b000-0060c000 r--p 0000b000 08:01 3683058 /usr/sbin/bonnie++ 0060c000-0060d000 rw-p 0000c000 08:01 3683058 /usr/sbin/bonnie++ 02438000-02484000 rw-p 00000000 00:00 0 [heap] 7f4298000000-7f4298021000 rw-p 00000000 00:00 0 7f4298021000-7f429c000000 ---p 00000000 00:00 0 7f429d25e000-7f429d25f000 ---p 00000000 00:00 0 7f429d25f000-7f429da5f000 rw-p 00000000 00:00 0 7f429da5f000-7f429da60000 ---p 00000000 00:00 0 7f429da60000-7f429e260000 rw-p 00000000 00:00 0 7f429e260000-7f429e261000 ---p 00000000 00:00 0 7f429e261000-7f429ea61000 rw-p 00000000 00:00 0 7f429ea61000-7f429ea62000 ---p 00000000 00:00 0 7f429ea62000-7f429f262000 rw-p 00000000 00:00 0 7f429f262000-7f429f263000 ---p 00000000 00:00 0 7f429f263000-7f429fa63000 rw-p 00000000 00:00 0 7f429fa63000-7f429fa6f000 r-xp 00000000 08:01 1179679 /lib/x86_64-linux-gnu/libnss_files-2.13.so 7f429fa6f000-7f429fc6e000 ---p 0000c000 08:01 1179679 /lib/x86_64-linux-gnu/libnss_files-2.13.so 7f429fc6e000-7f429fc6f000 r--p 0000b000 08:01 1179679 /lib/x86_64-linux-gnu/libnss_files-2.13.so 7f429fc6f000-7f429fc70000 rw-p 0000c000 08:01 1179679 /lib/x86_64-linux-gnu/libnss_files-2.13.so 7f429fc70000-7f429fc7a000 r-xp 00000000 08:01 1179685 /lib/x86_64-linux-gnu/libnss_nis-2.13.so 7f429fc7a000-7f429fe7a000 ---p 0000a000 08:01 1179685 /lib/x86_64-linux-gnu/libnss_nis-2.13.so 7f429fe7a000-7f429fe7b000 r--p 0000a000 08:01 1179685 /lib/x86_64-linux-gnu/libnss_nis-2.13.so 7f429fe7b000-7f429fe7c000 rw-p 0000b000 08:01 1179685 /lib/x86_64-linux-gnu/libnss_nis-2.13.so 7f429fe7c000-7f429fe93000 r-xp 00000000 08:01 1179674 /lib/x86_64-linux-gnu/libnsl-2.13.so 7f429fe93000-7f42a0092000 ---p 00017000 08:01 1179674 /lib/x86_64-linux-gnu/libnsl-2.13.so 7f42a0092000-7f42a0093000 r--p 00016000 08:01 1179674 /lib/x86_64-linux-gnu/libnsl-2.13.so 7f42a0093000-7f42a0094000 rw-p 00017000 08:01 1179674 /lib/x86_64-linux-gnu/libnsl-2.13.so 7f42a0094000-7f42a0096000 rw-p 00000000 00:00 0 7f42a0096000-7f42a009e000 r-xp 00000000 08:01 1179667 /lib/x86_64-linux-gnu/libnss_compat-2.13.so 7f42a009e000-7f42a029d000 ---p 00008000 08:01 1179667 /lib/x86_64-linux-gnu/libnss_compat-2.13.so 7f42a029d000-7f42a029e000 r--p 00007000 08:01 1179667 /lib/x86_64-linux-gnu/libnss_compat-2.13.so 7f42a029e000-7f42a029f000 rw-p 00008000 08:01 1179667 /lib/x86_64-linux-gnu/libnss_compat-2.13.so 7f42a029f000-7f42a0434000 r-xp 00000000 08:01 1179676 /lib/x86_64-linux-gnu/libc-2.13.so 7f42a0434000-7f42a0633000 ---p 00195000 08:01 1179676 /lib/x86_64-linux-gnu/libc-2.13.so 7f42a0633000-7f42a0637000 r--p 00194000 08:01 1179676 /lib/x86_64-linux-gnu/libc-2.13.so 7f42a0637000-7f42a0638000 rw-p 00198000 08:01 1179676 /lib/x86_64-linux-gnu/libc-2.13.so 7f42a0638000-7f42a063e000 rw-p 00000000 00:00 0 7f42a063e000-7f42a0653000 r-xp 00000000 08:01 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f42a0653000-7f42a0852000 ---p 00015000 08:01 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f42a0852000-7f42a0853000 r--p 00014000 08:01 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f42a0853000-7f42a0854000 rw-p 00015000 08:01 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f42a0854000-7f42a08d7000 r-xp 00000000 08:01 1179686 /lib/x86_64-linux-gnu/libm-2.13.so 7f42a08d7000-7f42a0ad6000 ---p 00083000 08:01 1179686 /lib/x86_64-linux-gnu/libm-2.13.so 7f42a0ad6000-7f42a0ad7000 r--p 00082000 08:01 1179686 /lib/x86_64-linux-gnu/libm-2.13.so 7f42a0ad7000-7f42a0ad8000 rw-p 00083000 08:01 1179686 /lib/x86_64-linux-gnu/libm-2.13.so 7f42a0ad8000-7f42a0bc0000 r-xp 00000000 08:01 3674840 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16 7f42a0bc0000-7f42a0dc0000 ---p 000e8000 08:01 3674840 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16 7f42a0dc0000-7f42a0dc8000 r--p 000e8000 08:01 3674840 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16 7f42a0dc8000-7f42a0dca000 rw-p 000f0000 08:01 3674840 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16 7f42a0dca000-7f42a0ddf000 rw-p 00000000 00:00 0 7f42a0ddf000-7f42a0df7000 r-xp 00000000 08:01 1179684 /lib/x86_64-linux-gnu/libpthread-2.13.so 7f42a0df7000-7f42a0ff6000 ---p 00018000 08:01 1179684 /lib/x86_64-linux-gnu/libpthread-2.13.so 7f42a0ff6000-7f42a0ff7000 r--p 00017000 08:01 1179684 /lib/x86_64-linux-gnu/libpthread-2.13.so 7f42a0ff7000-7f42a0ff8000 rw-p 00018000 08:01 1179684 /lib/x86_64-linux-gnu/libpthread-2.13.so 7f42a0ff8000-7f42a0ffc000 rw-p 00000000 00:00 0 7f42a0ffc000-7f42a101d000 r-xp 00000000 08:01 1179683 /lib/x86_64-linux-gnu/ld-2.13.so 7f42a1210000-7f42a1215000 rw-p 00000000 00:00 0 7f42a121a000-7f42a121c000 rw-p 00000000 00:00 0 7f42a121c000-7f42a121d000 r--p 00020000 08:01 1179683 /lib/x86_64-linux-gnu/ld-2.13.so 7f42a121d000-7f42a121f000 rw-p 00021000 08:01 1179683 /lib/x86_64-linux-gnu/ld-2.13.so 7ffff2c84000-7ffff2ca5000 rw-p 00000000 00:00 0 [stack] 7ffff2cc1000-7ffff2cc2000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted real 14m38.760s user 0m0.832s sys 0m32.670s From sandeen@sandeen.net Mon Jan 30 16:27:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_47,J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UMRqte139652 for ; Mon, 30 Jan 2012 16:27:52 -0600 X-ASG-Debug-ID: 1327962471-04cbb01fb23d0540001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 56MeF9vYnY3fNA8e for ; Mon, 30 Jan 2012 14:27:51 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 3E1344943540; Mon, 30 Jan 2012 16:27:51 -0600 (CST) Message-ID: <4F271967.10308@sandeen.net> Date: Mon, 30 Jan 2012 16:27:51 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs-oss , WuBo Subject: [PATCH] xfstests: several 274 fixups X-Enigmail-Version: 1.3.4 X-ASG-Orig-Subj: [PATCH] xfstests: several 274 fixups Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1327962471 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87143 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This changes quite a few things about 274 to make it more robust and useful. * More comments * Use xfs_io for falloc (not all systems have /usr/bin/fallocate) * use _require_xfs_io_falloc to be sure system & fs support preallocation * Do not remove all of the files in $SCRATCH_MNT/ post-mkfs * Do not remove all of the files in $SCRATCH_MNT/ on completion (this breaks e2fsck when lost+found/ goes missing) * Don't cd into $SCRATCH_MNT * Try harder to completely fill the fs * Use a larger preallocated space, and write into all of it (hopefully avoid just accidentally succeeding by writing into fs reserved space that may be there) * Save more output in $seq.full instead of /dev/null Signed-off-by: Eric Sandeen --- diff --git a/274 b/274 index b658004..acf4543 100755 --- a/274 +++ b/274 @@ -1,7 +1,9 @@ #! /bin/bash # FS QA Test No. 274 # -# preallocation test +# preallocation test: +# Preallocate space to a file, and fill the rest of the fs to 100%. +# Then test a write into that preallocated space, which should succeed. # #----------------------------------------------------------------------- # Copyright (c) 2011-2012 Fujitsu, Inc. All Rights Reserved. @@ -35,7 +37,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / - rm -f $SCRATCH_MNT/* $tmp.* + rm -f $tmp.* _scratch_unmount } @@ -46,6 +48,7 @@ _cleanup() _supported_fs generic _supported_os IRIX Linux _require_scratch +_require_xfs_io_falloc echo "------------------------------" echo "preallocation test" @@ -57,32 +60,39 @@ umount $SCRATCH_DEV 2>/dev/null _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 _scratch_mount -rm -rf $SCRATCH_MNT/* -cd $SCRATCH_MNT -dd if=/dev/zero of=test bs=4K count=1 >/dev/null 2>&1 +# Create a 4k file +dd if=/dev/zero of=$SCRATCH_MNT/test bs=4K count=1 >>$seq.full 2>&1 if [ $? -ne 0 ] then - echo "create file err" + echo "create file error" status=1 exit fi -fallocate -n -o 4K -l 1M test >/dev/null 2>&1 +# Allocate 4M past EOF on that file +xfs_io -F -c "falloc -k 4k 4m" $SCRATCH_MNT/test >>$seq.full 2>&1 if [ $? -ne 0 ] then - echo "fallocate file err" + echo "fallocate file error" status=1 exit fi -dd if=/dev/zero of=tmp1 bs=1M >/dev/null 2>&1 -dd if=/dev/zero of=tmp2 bs=4K >/dev/null 2>&1 +# Fill the rest of the fs completely +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M >>$seq.full 2>&1 +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=4K >>$seq.full 2>&1 sync +# Last effort, use O_SYNC +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K oflag=sync >>$seq.full 2>&1 +# Save space usage info +echo "Post-fill space:" >> $seq.full +df $SCRATCH_MNT >>$seq.full 2>&1 -dd if=/dev/zero of=test seek=1 bs=4K count=2 conv=notrunc >/dev/null 2>&1 +# Now attempt a write into all of the preallocated space +dd if=/dev/zero of=$SCRATCH_MNT/test seek=1 bs=4K count=1024 conv=notrunc >>$seq.full 2>&1 if [ $? -ne 0 ] then - echo "fill prealloc range err" + echo "fill prealloc range error" status=1 exit fi From sliedes@cc.hut.fi Mon Jan 30 16:35:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0UMZiFw140060 for ; Mon, 30 Jan 2012 16:35:44 -0600 X-ASG-Debug-ID: 1327962940-04bdf07517382e80001-NocioJ Received: from smtp-2.hut.fi (smtp-2.hut.fi [130.233.228.92]) by cuda.sgi.com with ESMTP id CLbhv7WhXID97ehs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 30 Jan 2012 14:35:42 -0800 (PST) X-Barracuda-Envelope-From: sliedes@cc.hut.fi X-Barracuda-Apparent-Source-IP: 130.233.228.92 Received: from localhost (katosiko.hut.fi [130.233.228.115]) by smtp-2.hut.fi (8.13.6/8.12.10) with ESMTP id q0UMZe7j019017 for ; Tue, 31 Jan 2012 00:35:40 +0200 Received: from smtp-2.hut.fi ([130.233.228.92]) by localhost (katosiko.hut.fi [130.233.228.115]) (amavisd-new, port 10024) with LMTP id 12706-697 for ; Tue, 31 Jan 2012 00:35:39 +0200 (EET) Received: from kosh.localdomain (kosh.hut.fi [130.233.228.12]) by smtp-2.hut.fi (8.13.6/8.12.10) with ESMTP id q0UMZTqf019010 for ; Tue, 31 Jan 2012 00:35:29 +0200 Received: by kosh.localdomain (Postfix, from userid 43888) id 3D53A859; Tue, 31 Jan 2012 00:35:29 +0200 (EET) Date: Tue, 31 Jan 2012 00:35:28 +0200 From: Sami Liedes To: xfs@oss.sgi.com Subject: Re: xfs task blocked for more than 120 seconds Message-ID: <20120130223527.GH10174@sli.dy.fi> X-ASG-Orig-Subj: Re: xfs task blocked for more than 120 seconds Mail-Followup-To: xfs@oss.sgi.com References: <20120130002026.GG10174@sli.dy.fi> <20120130010530.GI15102@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120130010530.GI15102@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-TKK-Virus-Scanned: by amavisd-new-2.1.2-hutcc at katosiko.hut.fi X-Barracuda-Connect: smtp-2.hut.fi[130.233.228.92] X-Barracuda-Start-Time: 1327962941 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87143 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jan 30, 2012 at 12:05:30PM +1100, Dave Chinner wrote: > > * The computer is a Core i7 2600 3.4 GHz with 4 cores and HT > > (therefore shows as 8 cores) with 8 GiB main memory. AES-NI > > instructions are supported and disk crypto generally (with ext4) > > works at transparent speeds. > > That's not to say that ext4 doesn't have long IO hold-offs - it just > doesn't trigger the hang-check code. Hmm, maybe. Yet 120 seconds of a blocking syscall somehow sounds quite long to me. With ext3 I remember seeing those every now and then with dm-crypt. > It is definitely a possibility that dm-crypt is not keeping up with > the IO that XFS is sending it and the way XFS blocks waiting for it > to complete triggers the hang-check code. However, it is possible > that XFS is stalling due to long IO completion latencies. Do the > workloads actually complete, or does the system hang? Also, does the > IO to the disk appear to stop for long periods, or is the disk 100% > busy the whole time? If the disk goes idle, can you get a dump of > the stalled processes via "echo w > /proc/sysrq-trigger" and post > that? The workloads do eventually complete. I tried the tar extraction again but this time extracting the tar from a different disk and saw no such warnings (and the time taken seems reasonable at 96 minutes). The blocked syscalls during BackupPC backupping seems weirder to me. I don't think the ext4 partition was even mounted at that point, and if it was, there certainly was no activity, i.e. the XFS partition was the only partition on that disk that saw any I/O. I'll see if I can figure out some way to repeat that and to figure out if the disk goes idle. Sami From david@fromorbit.com Mon Jan 30 19:31:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0V1Vd04169666 for ; Mon, 30 Jan 2012 19:31:40 -0600 X-ASG-Debug-ID: 1327973497-04bdf07516399d70001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id lo7CEouAzJwLdrRx for ; Mon, 30 Jan 2012 17:31:37 -0800 (PST) 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: Av0EAMtCJ095LD+b/2dsb2JhbABDrlaBBoFyAQEFOhwjEAgDGC4UJQMhE8EKE4pyAgIJBQwHBgELAQgFAwMJBgQPAwMBhB0BAwEEGAIEglZjBJUZkmY Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl6.internode.on.net with ESMTP; 31 Jan 2012 12:01:36 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rs2ZA-0004na-Br; Tue, 31 Jan 2012 12:31:24 +1100 Date: Tue, 31 Jan 2012 12:31:24 +1100 From: Dave Chinner To: Supratik Goswami Cc: xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120131013124.GE9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. 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: 1327973497 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87155 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jan 30, 2012 at 02:48:58PM +0530, Supratik Goswami wrote: > Hi > > We are using RAID-0 volumes as PV's in our LVM stack and XFS as the filesystem. > > The kernel logged the below call trace when the filesystem was being > expanded using "xfs_growfs" command. > We have used xfs_grofs at least 3 times earlier but did not cam across > this situation. > > The files system remained unresponsive until we rebooted the system > and again increased the size of the filesystem. > This time it worked fine. Can you please tell us why xfs_grofs hanged suddenly ? What kernel? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Jan 30 20:05:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_43,J_CHICKENPOX_44 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0V25DRw175611 for ; Mon, 30 Jan 2012 20:05:13 -0600 X-ASG-Debug-ID: 1327975510-04bdf0751639e850001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id eqJrkPl0EiinNbZB for ; Mon, 30 Jan 2012 18:05:10 -0800 (PST) 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: Av4EAJBJJ095LD+b/2dsb2JhbABDrlaBBoFyAQEEATocHgUFCwgDDgQGLhQlAw0UE4d8uRMTinICAgkFDAcGAQsBCAUDAwkGBA+EJAEDAQSCdGMElRmSZg Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl6.internode.on.net with ESMTP; 31 Jan 2012 12:35:09 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rs35o-0004rD-Nv; Tue, 31 Jan 2012 13:05:08 +1100 Date: Tue, 31 Jan 2012 13:05:08 +1100 From: Dave Chinner To: Brian Candler Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131020508.GF9090@dastard> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120130220019.GA45782@nsrc.org> 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: 1327975510 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87157 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jan 30, 2012 at 10:00:19PM +0000, Brian Candler wrote: > I am doing some performance testing of XFS. I am using Ubuntu 11.10 amd64 > (server), on an i3-2130 (3.4GHz) with 8GB RAM. > > This will eventually run with a bunch of Hitachi 3TB Deskstar drives, but > the performance issue can be shown with just one. > > Writing and reading large files using dd is fine. Performance is close to > what I get if I dd to the drive itself (which is 125MB/sec near the start of > the disk, down to 60MB/sec near the end of the disk, both reading and > writing). > > However I'm getting something strange when I try using bonnie++ to write and > read a bunch of individual files - in this case 100,000 files with sizes > between 500k and 800k, spread over 1000 directories. Write order is different to read order, and read performance is sensitive to cache hit rates and IO latency. When you working set is larger than memory (which is definitely true here), read performance will almost always be determined by read IO latency. > # time bonnie++ -d /data/sdb -s 16384k -n 98:800k:500k:1000 -u root > ... > Version 1.96 ------Sequential Output------ --Sequential Input- --Random- > Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP > storage1 16G 1900 93 97299 3 49909 4 4899 96 139565 5 270.7 4 > Latency 5251us 222ms 394ms 10705us 94111us 347ms > Version 1.96 ------Sequential Create------ --------Random Create-------- > storage1 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- > files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP > 98:819200:512000/1000 112 3 37 2 12659 32 106 3 39 2 8148 31 > Latency 6791ms 134ms 56383us 5161ms 459ms 3664ms > 1.96,1.96,storage1,1,1327926367,16G,,1900,93,97299,3,49909,4,4899,96,139565,5,270.7,4,98,819200,512000,,1000,112,3,37,2,12659,32,106,3,39,2,8148,31,5251us,222ms,394ms,10705us,94111us,347ms,6791ms,134ms,56383us,5161ms,459ms,3664ms > > real 129m3.450s > user 0m6.684s > sys 3m22.421s > > Writing is fine: it writes about 110 files per second, and iostat shows > about 75MB/sec of write data throughput during that phase. > > However when bonnie++ gets to the reading stage it reads only ~38 files per > second, and iostat shows only about 22MB/sec of data being read from the > disk. There are about 270 disk operations per second seen at the time, so > the drive is clearly saturated with seeks. It seems to be doing about 7 > seeks for each stat+read. It's actually reading bits of the files, too, as your strace shows, which is where most of the IO comes from. So my desktop which is similar to yours except for the storage. It has a pair of $150 SSDs in RAID-0. Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP disappointment 16G 1904 98 511102 26 182616 21 4623 99 348043 22 8367 201 Latency 10601us 283ms 250ms 5491us 156ms 8502us Version 1.96 ------Sequential Create------ --------Random Create-------- disappointment -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 98:819200:512000/1000 698 29 378 21 17257 89 699 29 370 21 13532 86 Latency 1421ms 278ms 145ms 1520ms 242ms 159ms 1.96,1.96,disappointment,1,1327963543,16G,,1904,98,511102,26,182616,21,4623,99,348043,22,8367,201,98,819200,512000,,1000,698,29,378,21,17257,89,699,29,370,21,13532,86,10601us,283ms,250ms,5491us,156ms,8502us,1421ms,278ms,145ms,1520ms,242ms,159ms real 16m55.664s user 0m6.708s sys 4m8.468s So, sequential write is 500MB/s read is 350MB/s, single threaded seeks are ~10k/s and cpu bound. Creates are 700/s, read is 380/s and deletes are 17,000/s. Random create/read/delete is roughly the same. So as you can see, the read performance of your storage makes a big, big difference to the results. The write performance is 5x faster than your SATA drive, the read is only 3x faster, but the seeks are 40x faster. The result is that the seek intensive workload runs 10x faster, and the overall benchmark run completes in only 10% of your current runtime. The big question is whether this bonnie++ workload reflects your real workload? If not, then find a benchmark that is more closely related to your application. If so, and the read performance is what you really need maximised then you need to optimise your storage architecture for minimising read latency, not write speed. That means either lots of spindles, or high RPM drives or SSDs or some combination of all three. There's nothing the filesystem can really do to make it any faster than it already is... > The filesystem was created like this: > > # mkfs.xfs -i attr=2,maxpct=1 /dev/sdb attr=2 is the default, and maxpct is a soft limit so the only reason you would have to change it is if you need more indoes in teh filesystem than it can support by default. Indeed, that's somewhere around 200 million inodes per TB of disk space... > P.S. When dd'ing large files ontp XFS I found that bs=8k gave a lower > performance than bs=16k or larger. So I wanted to rerun bonnie++ with > larger chunk sizes. Unfortunately that causes it to crash (and fairly > consistently) - see below. No surprise - twice as many syscalls, twice the overhead. > Is the 8k block size likely to be the performance culprit here? > > # time bonnie++ -d /data/sdb -s 16384k:32k -n 98:800k:500k:1000:32k -u root > Using uid:0, gid:0. > Writing a byte at a time...done > Writing intelligently...done > Rewriting...done > Reading a byte at a time...done > Reading intelligently... > done > start 'em...done...done...done...done...done... > *** glibc detected *** bonnie++: double free or corruption (out): 0x00000000024430a0 *** > ======= Backtrace: ========= > /lib/x86_64-linux-gnu/libc.so.6(+0x78a96)[0x7f42a0317a96] > /lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f42a031bd7c] That's a bug in bonnie. I'd take that up with the benchmark maintainer. Cheers, Dave. -- Dave Chinner david@fromorbit.com From supratiksekhar@gmail.com Mon Jan 30 23:04:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0V54W4j211356 for ; Mon, 30 Jan 2012 23:04:32 -0600 X-ASG-Debug-ID: 1327986270-04cb6c225f324ce0001-NocioJ Received: from mail-ww0-f51.google.com (mail-ww0-f51.google.com [74.125.82.51]) by cuda.sgi.com with ESMTP id U3HMl8DxwqQ5o3ai (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 30 Jan 2012 21:04:31 -0800 (PST) X-Barracuda-Envelope-From: supratiksekhar@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.51 Received: by wgbdy1 with SMTP id dy1so4153651wgb.32 for ; Mon, 30 Jan 2012 21:04:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=hWSdYA8Nm9aniHkRUZtwdpqHWqJayeT46U6IvXm4m0Y=; b=EoDyIFvy3VhXQur9oLdUiinhsUlQF3Blb/2JRRLTklyg6vCKvN+NTaV3CX0UkFIZiF w67OOjQb67fF5dduMWTbvQtO0+Rhj2nY9SnPmsyP1ai76u1Xu6WO0zMIeugC7L7KAheK a0Z4QLGCQf6Vo/ylS3xr8/aTYLADcTXHjiRKE= Received: by 10.180.92.71 with SMTP id ck7mr40510841wib.3.1327986270208; Mon, 30 Jan 2012 21:04:30 -0800 (PST) MIME-Version: 1.0 Received: by 10.180.99.164 with HTTP; Mon, 30 Jan 2012 21:04:10 -0800 (PST) In-Reply-To: <20120131013124.GE9090@dastard> References: <20120131013124.GE9090@dastard> From: Supratik Goswami Date: Tue, 31 Jan 2012 10:34:10 +0530 Message-ID: Subject: Re: File system remain unresponsive until the system is rebooted. To: Dave Chinner X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-ww0-f51.google.com[74.125.82.51] X-Barracuda-Start-Time: 1327986271 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87169 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 We are using Amazon EC2 instances. ubuntu@ip-10-0-0-10:~$ uname -aLinux ip-10-0-0-10 2.6.32-318-ec2 #38-Ubuntu SMP Thu Sep 1 18:09:30 UTC 2011 x86_64 GNU/Linux On Tue, Jan 31, 2012 at 7:01 AM, Dave Chinner wrote: > On Mon, Jan 30, 2012 at 02:48:58PM +0530, Supratik Goswami wrote: >> Hi >> >> We are using RAID-0 volumes as PV's in our LVM stack and XFS as the filesystem. >> >> The kernel logged the below call trace when the filesystem was being >> expanded using "xfs_growfs" command. >> We have used xfs_grofs at least 3 times earlier but did not cam across >> this situation. >> >> The files system remained unresponsive until we rebooted the system >> and again increased the size of the filesystem. >> This time it worked fine. Can you please tell us why xfs_grofs hanged suddenly ? > > What kernel? > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com -- Warm Regards Supratik From eflorac@intellique.com Tue Jan 31 01:19:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0V7Jcq0219139 for ; Tue, 31 Jan 2012 01:19:39 -0600 X-ASG-Debug-ID: 1327994373-04bdf075193beb60001-NocioJ Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by cuda.sgi.com with ESMTP id HufSzb0Ei5GvdF5J for ; Mon, 30 Jan 2012 23:19:35 -0800 (PST) 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 5D813A645C; Tue, 31 Jan 2012 08:19:29 +0100 (CET) Date: Tue, 31 Jan 2012 08:19:21 +0100 From: Emmanuel Florac To: Supratik Goswami Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120131081921.2767d72d@galadriel.home> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: References: <20120131013124.GE9090@dastard> Organization: Intellique X-Mailer: Claws Mail 3.7.8 (GTK+ 2.20.1; i686-pc-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: 1327994373 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87177 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Tue, 31 Jan 2012 10:34:10 +0530 vous =C3=A9criviez: > We are using Amazon EC2 instances. >=20 You can't know for sure what's happening behind the scenes. The most common problem of EC2 instances is IO starving, so this is hardly surprising. --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From stan@hardwarefreak.com Tue Jan 31 03:04:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0V94KTc229145 for ; Tue, 31 Jan 2012 03:04:20 -0600 X-ASG-Debug-ID: 1328000658-04bdf075183ca650001-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 YMY4cD6UAslQHdcJ for ; Tue, 31 Jan 2012 01:04:18 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 62DDE6C160 for ; Tue, 31 Jan 2012 03:04:18 -0600 (CST) Message-ID: <4F27AE92.9060003@hardwarefreak.com> Date: Tue, 31 Jan 2012 03:04:18 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: 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: 1328000658 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87185 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 On 1/30/2012 11:04 PM, Supratik Goswami wrote: > We are using Amazon EC2 instances. ^^^^^^^^^^ I'd have never thought I would see those words on this list, except maybe as a joke, or as an example of one of the the worst possible platforms for XFS. I wish EC2 had been asked about during the QA session after Dave's presentation. I'm guessing some laughter would have been involved. ;) -- Stan From BATV+8e09fc8db539fce50bab+3082+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 31 03:27:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0V9RqqC235586 for ; Tue, 31 Jan 2012 03:27:53 -0600 X-ASG-Debug-ID: 1328002070-04bdf075163cc900001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 7I9kMU93s8D8Pq8a (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 31 Jan 2012 01:27:51 -0800 (PST) X-Barracuda-Envelope-From: BATV+8e09fc8db539fce50bab+3082+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsA0C-00078e-4G; Tue, 31 Jan 2012 09:27:48 +0000 Date: Tue, 31 Jan 2012 04:27:48 -0500 From: Christoph Hellwig To: Kelbel Junior Cc: Christoph Hellwig , linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS problem Message-ID: <20120131092748.GA22999@infradead.org> X-ASG-Orig-Subj: Re: XFS problem References: <20120124213936.GA1505@infradead.org> <20120127105859.GC23335@infradead.org> <20120127191532.GA25529@infradead.org> 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-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328002071 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-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87187 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 30, 2012 at 06:34:52PM -0200, Kelbel Junior wrote: > How you prefer to pre allocate space? > xfs I/O or by 'dd' to do it? > > What other information you would like to better understand and manage > to solve this problem? Do you expect to fill most of the file with data? In that case preallocating the file before starting I/O is the best way to do it. >From the shell you can do it using the xfs_io 'resvsp' command, and from C code using the fallocate system call, or if it's not present the xfs RESVSP ioctl, as documented by the xfsctl manpage when you have the xfsprogs development libraries installed. If you actually want to keep the file sparse it's much harder. You could try larger I/O sized, or trying using the xfs extent size hint which is set using the XFS_IOC_FSSETXATTR ioctl, again documented in the xfsctl man page. From b.candler@pobox.com Tue Jan 31 04:31:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_56,RCVD_IN_SORBS_WEB, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VAVU6M240346 for ; Tue, 31 Jan 2012 04:31:31 -0600 X-ASG-Debug-ID: 1328005887-04cbb01fb4432e20001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id ZGpOsl86I1s56eed for ; Tue, 31 Jan 2012 02:31:29 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id B872A4E6D; Tue, 31 Jan 2012 05:31:26 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=sasl; bh=0hlWJViXdnnN/tOKvuhinHMMHcw=; b=mzyzXu1 BUUJtEi1mLJryYJDKECkWvMlMQO9BoLNKxZSRxnCEeIHIQ694ei1LCE2iezvdtEy LSNNGkBjin7LDIF9Qip9Bbc5v6hxknBFze+5ff2fuzBcKgH81ixLJmVGelgApU/m 2v+sZU/JuX/cx+12HiDbDLr9eVh3erEW+JF8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to:cc :subject:message-id:references:mime-version:content-type :in-reply-to; q=dns; s=sasl; b=lrkPL6ieX/TZN/Xm09tEwHDAumNC2E4jZ Vbsn6srH7kQuy4Eh1KouUaxKa5/PbESKGUX9n7xcKZnkPkWH1xU9LCGaQCbfNfmU ZBVc3Waidh0v5MMpFufJYLa/04h1QHCUuai/OyiTfa1XWXCWR/r5i7c+XfThHhD4 rpf9aPdgfg= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id AE5F64E6C; Tue, 31 Jan 2012 05:31:26 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [217.206.150.147]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 1530C4E68; Tue, 31 Jan 2012 05:31:26 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYNRWE-000ZNF-E4; Tue, 31 Jan 2012 10:31:26 +0000 Date: Tue, 31 Jan 2012 10:31:26 +0000 From: Brian Candler To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131103126.GA46170@nsrc.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131020508.GF9090@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: BA825822-4BF6-11E1-B516-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328005889 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87191 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 BSF_SC5_SA210e Custom Rule SA210e On Tue, Jan 31, 2012 at 01:05:08PM +1100, Dave Chinner wrote: > When you working set is > larger than memory (which is definitely true here), read performance > will almost always be determined by read IO latency. Absolutely. > > There are about 270 disk operations per second seen at the time, so > > the drive is clearly saturated with seeks. It seems to be doing about 7 > > seeks for each stat+read. > > It's actually reading bits of the files, too, as your strace shows, > which is where most of the IO comes from. It's reading the entire files - I had grepped out the read(...) = 8192 lines so that the stat/open/read/close pattern could be seen. > The big question is whether this bonnie++ workload reflects your > real workload? Yes it does. The particular application I'm tuning for includes a library of some 20M files in the 500-800K size range. The library is semi-static, i.e. occasionally appended to. Some clients will be reading individual files at random, but from time to time we will need to scan across the whole library and process all the files or a large subset of it. > you need to optimise your storage > architecture for minimising read latency, not write speed. That > means either lots of spindles, or high RPM drives or SSDs or some > combination of all three. There's nothing the filesystem can really > do to make it any faster than it already is... I will end up distributing the library across multiple spindles using something like Gluster, but first I want to tune the performance on a single filesystem. It seems to me that reading a file should consist roughly of: - seek to inode (if the inode block isn't already in cache) - seek to extents table (if all extents don't fit in the inode) - seek(s) to the file contents, depending on how they're fragmented. I am currently seeing somewhere between 7 and 8 seeks per file read, and this just doesn't seem right to me. One thing I can test directly is whether the files are fragmented, using xfs_bmap, and this shows they clearly are not: root@storage1:~# xfs_bmap /data/sdc/Bonnie.16388/00449/* /data/sdc/Bonnie.16388/00449/000000b125QaaLg: 0: [0..1167]: 2952872392..2952873559 /data/sdc/Bonnie.16388/00449/000000b126: 0: [0..1087]: 4415131112..4415132199 /data/sdc/Bonnie.16388/00449/000000b1272Mfp: 0: [0..1255]: 1484828464..1484829719 /data/sdc/Bonnie.16388/00449/000000b128sEYN5: 0: [0..1319]: 2952873560..2952874879 /data/sdc/Bonnie.16388/00449/000000b129Zs: 0: [0..1591]: 4415132200..4415133791 /data/sdc/Bonnie.16388/00449/000000b12aIaa3UV: 0: [0..1527]: 1484829720..1484831247 /data/sdc/Bonnie.16388/00449/000000b12b: 0: [0..1287]: 2952874880..2952876167 /data/sdc/Bonnie.16388/00449/000000b12c3ze1zN5FfX1i: 0: [0..1463]: 4415133792..4415135255 ... snip rest So the next thing I'd have to do is to try to get a trace of the I/O operations being performed, and I don't know how to do that. > > The filesystem was created like this: > > > > # mkfs.xfs -i attr=2,maxpct=1 /dev/sdb > > attr=2 is the default, and maxpct is a soft limit so the only reason > you would have to change it is if you need more indoes in teh > filesystem than it can support by default. Indeed, that's somewhere > around 200 million inodes per TB of disk space... OK. I saw "df -i" reporting a stupid number of available inodes, over 500 million, so I decided to reduce it to 100 million. But df -k didn't show any corresponding increase in disk space, so I'm guessing in xfs these are allocated on-demand, and the inode limit doesn't really matter? > > P.S. When dd'ing large files ontp XFS I found that bs=8k gave a lower > > performance than bs=16k or larger. So I wanted to rerun bonnie++ with > > larger chunk sizes. Unfortunately that causes it to crash (and fairly > > consistently) - see below. > > No surprise - twice as many syscalls, twice the overhead. I'm not sure that simple explanation works here. I see almost exactly the same performance with bs=512m down bs=32k, slightly worse at bs=16k, and a sudden degradation at bs=8k. However the CPU is still massively underutilised at that point. root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=1024k count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 7.91832 s, 136 MB/s real 0m7.950s user 0m0.000s sys 0m0.100s root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=32k count=32768 32768+0 records in 32768+0 records out 1073741824 bytes (1.1 GB) copied, 7.92206 s, 136 MB/s real 0m7.963s user 0m0.004s sys 0m0.420s root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=16k count=65536 65536+0 records in 65536+0 records out 1073741824 bytes (1.1 GB) copied, 8.48255 s, 127 MB/s real 0m8.496s user 0m0.096s sys 0m0.644s root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=8k count=131072 131072+0 records in 131072+0 records out 1073741824 bytes (1.1 GB) copied, 13.8283 s, 77.6 MB/s real 0m13.829s user 0m0.084s sys 0m1.328s Also: I can run the same dd on twelve separate drives concurrently, and get the same results. This is a two-core (+hyperthreading) processor, but if syscall overhead really were the limiting factor I would expect doing it twelve times in parallel would amplify the effect. My suspicion is that some other factor is coming into play - read-ahead on the drives perhaps - but I haven't nailed it down yet. Regards, Brian. From b.candler@pobox.com Tue Jan 31 04:54:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,FAKE_REPLY_C, RCVD_IN_SORBS_WEB,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VAs9Ya242800 for ; Tue, 31 Jan 2012 04:54:09 -0600 X-ASG-Debug-ID: 1328007248-04cb6c226033fed0001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id PRtUC4Eqk659QVNA for ; Tue, 31 Jan 2012 02:54:08 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 5F65D5188 for ; Tue, 31 Jan 2012 05:54:08 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :subject:message-id:mime-version:content-type; s=sasl; bh=2kOttI iZ14TyFo1jYNdqzMRj4z0=; b=TLIP9wv5WIQayp1iWrK9C0tjVkET33k6ujFQvh BDAZ3eFC0P9iH5pLZK3J2I3hVU9juBB0aRFw2pt1cI/1wwyS/kcnNTVGma/gA/4z S6kQMdYuyUHGCkqScc9yEZZHRoTlhP2JrcCH9JYC2Q8LdHlP82ExYYMRSnbm791A oU9wU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to :subject:message-id:mime-version:content-type; q=dns; s=sasl; b= JMKl1c3WWpvMIxaBZLAHHJzEltOyzDssQb3UNqhXznpIL9rqi6AolTq1qDyOevuF Bp/EbItUnL0IHQZrRO7kLUMKHfKqVwGgp+9TIhLjNBE0dZ7lJS5vtsWquQuuHS/N qFeZOxl0ISF2UpnLn4xMvyxN3Au+al0yPXX3CahcUfc= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 57B455187 for ; Tue, 31 Jan 2012 05:54:08 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [217.206.150.147]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id A3AFB5186 for ; Tue, 31 Jan 2012 05:54:07 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYNSY8-000ZOR-13 for xfs@oss.sgi.com; Tue, 31 Jan 2012 10:54:08 +0000 Date: Tue, 31 Jan 2012 10:54:08 +0000 From: Brian Candler To: xfs@oss.sgi.com Subject: Re: xfs task blocked for more than 120 seconds Message-ID: <20120131105408.GA46226@nsrc.org> X-ASG-Orig-Subj: Re: xfs task blocked for more than 120 seconds MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: E6137432-4BF9-11E1-AA7E-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328007248 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87193 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 Aside: I saw what seems to be the same error twice yesterday in a setup without dcrypt, but running bonnie++ on a software RAID6 array (12 drives) The tasks affected were "kworker" and "xfsaild" - full logs below. OS is stock ubuntu 11.10 x86_64 server. Write performance to the RAID6 is admittedly pretty terrible, so maybe it was just some backlog building up. Regards, Brian. ... Jan 30 10:36:40 storage2 kernel: [ 149.840035] XFS (md127): Mounting Filesystem Jan 30 10:36:40 storage2 kernel: [ 150.083318] XFS (md127): Ending clean mount Jan 30 12:00:11 storage2 kernel: [ 5159.737134] INFO: task kworker/0:3:1644 blocked for more than 120 seconds. Jan 30 12:00:11 storage2 kernel: [ 5159.737507] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Jan 30 12:00:11 storage2 kernel: [ 5159.746598] kworker/0:3 D ffffffff81805120 0 1644 2 0x00000000 Jan 30 12:00:11 storage2 kernel: [ 5159.746603] ffff8802078abb00 0000000000000046 0000000000000004 0000000000000000 Jan 30 12:00:11 storage2 kernel: [ 5159.746608] ffff8802078abfd8 ffff8802078abfd8 ffff8802078abfd8 0000000000012a40 Jan 30 12:00:11 storage2 kernel: [ 5159.746613] ffffffff81c0b020 ffff880212bc4560 ffff8802078abaf0 ffff8802129c2998 Jan 30 12:00:11 storage2 kernel: [ 5159.746618] Call Trace: Jan 30 12:00:11 storage2 kernel: [ 5159.746625] [] schedule+0x3f/0x60 Jan 30 12:00:11 storage2 kernel: [ 5159.746642] [] xlog_wait+0x6c/0x90 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746646] [] ? try_to_wake_up+0x200/0x200 Jan 30 12:00:11 storage2 kernel: [ 5159.746658] [] xlog_cil_push+0x30f/0x380 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746661] [] ? up+0x32/0x50 Jan 30 12:00:11 storage2 kernel: [ 5159.746672] [] xlog_cil_force_lsn+0x10e/0x120 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746676] [] ? kmem_cache_free+0x2f/0x120 Jan 30 12:00:11 storage2 kernel: [ 5159.746687] [] _xfs_log_force_lsn+0x57/0x2e0 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746690] [] ? kmem_cache_free+0x2f/0x120 Jan 30 12:00:11 storage2 kernel: [ 5159.746702] [] _xfs_trans_commit+0x29d/0x2b0 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746715] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746726] [] xfs_fs_log_dummy+0x64/0x90 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746738] [] xfs_sync_worker+0x84/0x90 [xfs] Jan 30 12:00:11 storage2 kernel: [ 5159.746742] [] process_one_work+0x11a/0x480 Jan 30 12:00:11 storage2 kernel: [ 5159.746745] [] worker_thread+0x165/0x370 Jan 30 12:00:11 storage2 kernel: [ 5159.746748] [] ? manage_workers.isra.30+0x130/0x130 Jan 30 12:00:11 storage2 kernel: [ 5159.746752] [] kthread+0x8c/0xa0 Jan 30 12:00:11 storage2 kernel: [ 5159.746755] [] kernel_thread_helper+0x4/0x10 Jan 30 12:00:11 storage2 kernel: [ 5159.746759] [] ? flush_kthread_worker+0xa0/0xa0 Jan 30 12:00:11 storage2 kernel: [ 5159.746761] [] ? gs_change+0x13/0x13 Jan 30 12:56:11 storage2 kernel: [ 8519.003667] INFO: task xfsaild/md127:1559 blocked for more than 120 seconds. Jan 30 12:56:11 storage2 kernel: [ 8519.008584] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Jan 30 12:56:11 storage2 kernel: [ 8519.018149] xfsaild/md127 D ffffffff81805120 0 1559 2 0x00000000 Jan 30 12:56:11 storage2 kernel: [ 8519.018153] ffff88020789dcb0 0000000000000046 0000000000000000 0000000000000000 Jan 30 12:56:11 storage2 kernel: [ 8519.018155] ffff88020789dfd8 ffff88020789dfd8 ffff88020789dfd8 0000000000012a40 Jan 30 12:56:11 storage2 kernel: [ 8519.018158] ffff880212d28000 ffff8802117dc560 ffff88020789dca0 000000000000007e Jan 30 12:56:11 storage2 kernel: [ 8519.018160] Call Trace: Jan 30 12:56:11 storage2 kernel: [ 8519.018167] [] schedule+0x3f/0x60 Jan 30 12:56:11 storage2 kernel: [ 8519.018183] [] xlog_cil_force_lsn+0xf7/0x120 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018185] [] ? try_to_wake_up+0x200/0x200 Jan 30 12:56:11 storage2 kernel: [ 8519.018196] [] _xfs_log_force+0x68/0x2a0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018208] [] ? xfs_buf_unlock+0x3b/0xc0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018218] [] xfs_log_force+0x18/0x40 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018229] [] xfsaild_push+0x394/0x3a0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018239] [] xfsaild+0x62/0xc0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018249] [] ? xfsaild_push+0x3a0/0x3a0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.018252] [] kthread+0x8c/0xa0 Jan 30 12:56:11 storage2 kernel: [ 8519.018254] [] kernel_thread_helper+0x4/0x10 Jan 30 12:56:11 storage2 kernel: [ 8519.018256] [] ? flush_kthread_worker+0xa0/0xa0 Jan 30 12:56:11 storage2 kernel: [ 8519.018258] [] ? gs_change+0x13/0x13 Jan 30 12:56:11 storage2 kernel: [ 8519.018260] INFO: task kworker/0:0:1796 blocked for more than 120 seconds. Jan 30 12:56:11 storage2 kernel: [ 8519.023397] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Jan 30 12:56:11 storage2 kernel: [ 8519.033551] kworker/0:0 D ffffffff81805120 0 1796 2 0x00000000 Jan 30 12:56:11 storage2 kernel: [ 8519.033553] ffff88010c9ebb00 0000000000000046 0000000000000004 0000000000000000 Jan 30 12:56:11 storage2 kernel: [ 8519.033555] ffff88010c9ebfd8 ffff88010c9ebfd8 ffff88010c9ebfd8 0000000000012a40 Jan 30 12:56:11 storage2 kernel: [ 8519.033557] ffffffff81c0b020 ffff880212cedc80 ffff88010c9ebaf0 ffff8802129c2998 Jan 30 12:56:11 storage2 kernel: [ 8519.033560] Call Trace: Jan 30 12:56:11 storage2 kernel: [ 8519.033562] [] schedule+0x3f/0x60 Jan 30 12:56:11 storage2 kernel: [ 8519.033572] [] xlog_wait+0x6c/0x90 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033574] [] ? try_to_wake_up+0x200/0x200 Jan 30 12:56:11 storage2 kernel: [ 8519.033583] [] xlog_cil_push+0x30f/0x380 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033586] [] ? up+0x32/0x50 Jan 30 12:56:11 storage2 kernel: [ 8519.033595] [] xlog_cil_force_lsn+0x10e/0x120 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033598] [] ? kmem_cache_free+0x2f/0x120 Jan 30 12:56:11 storage2 kernel: [ 8519.033607] [] _xfs_log_force_lsn+0x57/0x2e0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033609] [] ? kmem_cache_free+0x2f/0x120 Jan 30 12:56:11 storage2 kernel: [ 8519.033619] [] _xfs_trans_commit+0x29d/0x2b0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033630] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033640] [] xfs_fs_log_dummy+0x64/0x90 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033651] [] xfs_sync_worker+0x84/0x90 [xfs] Jan 30 12:56:11 storage2 kernel: [ 8519.033654] [] process_one_work+0x11a/0x480 Jan 30 12:56:11 storage2 kernel: [ 8519.033656] [] worker_thread+0x165/0x370 Jan 30 12:56:11 storage2 kernel: [ 8519.033657] [] ? manage_workers.isra.30+0x130/0x130 Jan 30 12:56:11 storage2 kernel: [ 8519.033660] [] kthread+0x8c/0xa0 Jan 30 12:56:11 storage2 kernel: [ 8519.033661] [] kernel_thread_helper+0x4/0x10 Jan 30 12:56:11 storage2 kernel: [ 8519.033664] [] ? flush_kthread_worker+0xa0/0xa0 Jan 30 12:56:11 storage2 kernel: [ 8519.033665] [] ? gs_change+0x13/0x13 From eflorac@intellique.com Tue Jan 31 05:09:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VB96dU245779 for ; Tue, 31 Jan 2012 05:09:06 -0600 X-ASG-Debug-ID: 1328008142-04cbb01fb3436f00001-NocioJ Received: from smtp4-g21.free.fr (smtp4-g21.free.fr [212.27.42.4]) by cuda.sgi.com with ESMTP id rEAI6OERq2s8cJOi for ; Tue, 31 Jan 2012 03:09:03 -0800 (PST) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.4 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp4-g21.free.fr (Postfix) with ESMTP id 82C244C8481; Tue, 31 Jan 2012 12:08:58 +0100 (CET) Date: Tue, 31 Jan 2012 12:08:59 +0100 From: Emmanuel Florac To: stan@hardwarefreak.com Cc: xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120131120859.1f1d6a17@harpe.intellique.com> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <4F27AE92.9060003@hardwarefreak.com> References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> Organization: Intellique X-Mailer: Claws Mail 3.7.9 (GTK+ 2.16.6; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp4-g21.free.fr[212.27.42.4] X-Barracuda-Start-Time: 1328008142 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87193 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Tue, 31 Jan 2012 03:04:18 -0600 Stan Hoeppner =E9crivait: > I'd have never thought I would see those words on this list, except > maybe as a joke, or as an example of one of the the worst possible > platforms for XFS. Oh come on, be nice for once :) People are constantly brainwashed about how "cloud computing" will solve financial crisis and world hunger, and didn't you notice that Amazon now sells an over-the-top storage platform that'll cover everyone needs real soon now? If you believe their marketing, of course. Don't forget to check: http://aws.amazon.com/storagegateway/ =20 > I wish EC2 had been asked about during the QA session after Dave's > presentation. I'm guessing some laughter would have been involved. ;) Is there a filesystem that's really suitable for EC2? What about workloads? my impression is that EC2 is fine for whatever doesn't need any QoS. Prototyping, for instance.=20 --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From saskia.penninga@stenden.com Tue Jan 31 05:29:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VBTHTR250096 for ; Tue, 31 Jan 2012 05:29:18 -0600 X-ASG-Debug-ID: 1328009353-04bdf075173d7690001-w1Z2WR Received: from smtp.stenden.com (smtp.stenden.com [194.171.180.8]) by cuda.sgi.com with ESMTP id ISn0ACLXS90AMFdf (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 31 Jan 2012 03:29:14 -0800 (PST) X-Barracuda-Envelope-From: saskia.penninga@stenden.com X-Barracuda-Apparent-Source-IP: 194.171.180.8 Received: from MSE0002.stenden.local (10.9.9.108) by smtp.stenden.com (194.171.180.8) with Microsoft SMTP Server (TLS) id 8.1.393.1; Tue, 31 Jan 2012 12:28:57 +0100 Received: from MSE0003.stenden.local ([10.9.9.107]) by MSE0002.stenden.local ([::1]) with mapi; Tue, 31 Jan 2012 12:29:12 +0100 From: Saskia Penninga Date: Tue, 31 Jan 2012 12:29:11 +0100 Subject: Your Mail Box Quota Exceeded Thread-Topic: Your Mail Box Quota Exceeded X-ASG-Orig-Subj: Your Mail Box Quota Exceeded Thread-Index: AQHM4AuO/q8mu1+LZEe/dYWRRGBd9A== Message-ID: Accept-Language: nl-NL, en-US Content-Language: nl-NL X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: nl-NL, en-US x-exclaimer-md-config: 7eab3aa6-c72d-4c5f-8d29-4514c77f7ca7 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 To: Undisclosed recipients:; X-Barracuda-Connect: smtp.stenden.com[194.171.180.8] X-Barracuda-Start-Time: 1328009354 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87195 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Your web mail quota has exceeded the set quota which is 3GB. you are currently running on 3.9 GB. To re-activate and increase your web mail quota please click the link below= . https://docs.google.com/a/insidehighered.com/spreadsheet/viewform?formkey= =3DdDJjVF9jU1FMNjZvS3ZQQkVBMC1kOEE6MQ Failure to do so may result in the cancellation of your web mail account. Thanks, and sorry for the inconvenience Local-host. ------------------------------------------------------------------------ This message was sent via the facilities of the Stenden Netherlands. This e-mail message is only intended for the addressee(s) and may contain confidential information or material. Use by any third parties is not permitted. Discussion, retransmission, distribution or any other use of this information, or taking action on the basis thereof by other parties than the intended recipient, is forbidden barring explicit permission of the sender.If you have received this information in error, please contact the sender and delete the material from your computer(s). In view of the electronic transmission no rights may be derived from the contents of this message. ------------------------------------------------------------------------ From b.candler@pobox.com Tue Jan 31 08:16:22 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,J_CHICKENPOX_44, RCVD_IN_SORBS_WEB,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VEGL01018853 for ; Tue, 31 Jan 2012 08:16:22 -0600 X-ASG-Debug-ID: 1328019380-04cbb01fb344dc80001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id XCE32GK4YjaPLFZ2 for ; Tue, 31 Jan 2012 06:16:20 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 219D95786; Tue, 31 Jan 2012 09:16:19 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=sasl; bh=JkGEL71ubQy0LXaDzu0v1VpNSsA=; b=rxA1xxW qVv0a1HTiHXMNQY7xW6y/v9vgvMCuwb9A1V0jE8PbMYWaxsJUrXO+ssD9mGD9FSF DF+iC5P6577Ud3DhW1CaGFm67xCW0MWb99TF3xwQJqXLE9XdzfyONLmNnEAds0yE 3atFDjRhNDIvXjRKansFDYMrGtvoWdePsEtk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to:cc :subject:message-id:references:mime-version:content-type :in-reply-to; q=dns; s=sasl; b=qsN7UiZTiVRDCkJBd9Xq4Itv4a7P8Bagl 3ZRh+Lg5pwNfEQMhQgxi4u5tWm6Qau+JUzWwbC/LvwSjqvAz6HHP0A1KgsuhY3gc IubjcGyMEnA9miKzvCoC/76rXlHkU0ky5KIpP53YzDSA+cAyFlAMpsyEEczsPVHI S1Xt/BE+ts= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 1968A5785; Tue, 31 Jan 2012 09:16:19 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [217.206.150.147]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id B0CF45784; Tue, 31 Jan 2012 09:16:18 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYO2AS-000ZZ5-ED; Tue, 31 Jan 2012 14:16:04 +0000 Date: Tue, 31 Jan 2012 14:16:04 +0000 From: Brian Candler To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131141604.GB46571@nsrc.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131103126.GA46170@nsrc.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: 24BF7926-4C16-11E1-B835-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328019380 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87205 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 Updates: (1) The bug in bonnie++ is to do with memory allocation, and you can work around it by putting '-n' before '-s' on the command line and using the same custom chunk size before both (or by using '-n' with '-s 0') # time bonnie++ -d /data/sdc -n 98:800k:500k:1000:32k -s 16384k:32k -u root Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP storage1 16G:32k 2061 91 101801 3 49405 4 5054 97 126748 6 130.9 3 Latency 15446us 222ms 412ms 23149us 83913us 452ms Version 1.96 ------Sequential Create------ --------Random Create-------- storage1 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 98:819200:512000/1000 128 3 37 1 10550 25 108 3 38 1 8290 33 Latency 6874ms 99117us 45394us 4462ms 12582ms 4027ms 1.96,1.96,storage1,1,1328002525,16G,32k,2061,91,101801,3,49405,4,5054,97,126748,6,130.9,3,98,819200,512000,,1000,128,3,37,1,10550,25,108,3,38,1,8290,33,15446us,222ms,412ms,23149us,83913us,452ms,6874ms,99117us,45394us,4462ms,12582ms,4027ms This shows that using 32k transfers instead of 8k doesn't really help; I'm still only seeing 37-38 reads per second, either sequential or random. (2) In case extents aren't being kept in the inode, I decided to build a filesystem with '-i size=1024' # time bonnie++ -d /data/sdb -n 98:800k:500k:1000:32k -s0 -u root Version 1.96 ------Sequential Create------ --------Random Create-------- storage1 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 98:819200:512000/1000 110 3 131 5 3410 10 110 3 33 1 387 1 Latency 6038ms 92092us 87730us 5202ms 117ms 7653ms 1.96,1.96,storage1,1,1328003901,,,,,,,,,,,,,,98,819200,512000,,1000,110,3,131,5,3410,10,110,3,33,1,387,1,,,,,,,6038ms,92092us,87730us,5202ms,117ms,7653ms Wow! The sequential read just blows away the previous results. What's even more amazing is the number of transactions per second reported by iostat while bonnie++ was sequentially stat()ing and read()ing the files: # iostat 5 ... sdb 820.80 86558.40 0.00 432792 0 !! 820 tps on a bog-standard hard-drive is unbelievable, although the total throughput of 86MB/sec is. It could be that either NCQ or drive read-ahead is scoring big-time here. However during random stat()+read() the performance drops: # iostat 5 ... sdb 225.40 21632.00 0.00 108160 0 Here we appear to be limited by real seeks. 225 seeks/sec is still very good for a hard drive, but it means the filesystem is generating about 7 seeks for every file (stat+open+read+close). Indeed the random read performance appears to be a bit worse than the default (-i size=256) filesystem, where I was getting 25MB/sec on iostat, and 38 files per second instead of 33. There are only 1000 directories in this test, and I would expect those to become cached quickly. According to Wikipedia, XFS has variable-length extents. I think that as long as the file data is contiguous then each file should only be taking a single extent, and this is what xfs_bmap seems to be telling me: # xfs_bmap -n1 -l -v /data/sdc/Bonnie.25448/00449/* | head /data/sdc/Bonnie.25448/00449/000000b125mpBap4gg7U: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: [0..1559]: 4446598752..4446600311 3 (51198864..51200423) 1560 /data/sdc/Bonnie.25448/00449/000000b1262hBudG6gV: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: [0..1551]: 1484870256..1484871807 1 (19736960..19738511) 1552 /data/sdc/Bonnie.25448/00449/000000b127fM: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: [0..1111]: 2954889944..2954891055 2 (24623352..24624463) 1112 /data/sdc/Bonnie.25448/00449/000000b128: It looks like I need to get familiar with xfs_db and http://oss.sgi.com/projects/xfs/papers/xfs_filesystem_structure.pdf to find out what's going on. (These filesystems are mounted with noatime,nodiratime incidentally) Regards, Brian. From BATV+8e09fc8db539fce50bab+3082+infradead.org+hch@bombadil.srs.infradead.org Tue Jan 31 08:52:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VEqJWr021375 for ; Tue, 31 Jan 2012 08:52:19 -0600 X-ASG-Debug-ID: 1328021536-04cb6c2261356b10001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id BonLJw8V5UWoUuE2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 31 Jan 2012 06:52:17 -0800 (PST) X-Barracuda-Envelope-From: BATV+8e09fc8db539fce50bab+3082+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsF41-0002bd-RB; Tue, 31 Jan 2012 14:52:05 +0000 Date: Tue, 31 Jan 2012 09:52:05 -0500 From: Christoph Hellwig To: Brian Candler Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131145205.GA6607@infradead.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131103126.GA46170@nsrc.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328021537 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87208 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Tue, Jan 31, 2012 at 10:31:26AM +0000, Brian Candler wrote: > - seek to inode (if the inode block isn't already in cache) > - seek to extents table (if all extents don't fit in the inode) > - seek(s) to the file contents, depending on how they're fragmented. > > I am currently seeing somewhere between 7 and 8 seeks per file read, and > this just doesn't seem right to me. You don't just read a single file at a time but multiple ones, don't you? Try playing with the following tweaks to get larger I/O to the disk: a) make sure you use the noop or deadline elevators b) increase /sys/block/sdX/queue/max_sectors_kb from its low default c) dramatically increase /sys/devices/virtual/bdi/:/read_ahead_kb > OK. I saw "df -i" reporting a stupid number of available inodes, over 500 > million, so I decided to reduce it to 100 million. But df -k didn't show > any corresponding increase in disk space, so I'm guessing in xfs these are > allocated on-demand, and the inode limit doesn't really matter? Exactly, the number displayed is the upper bound. From bpm@sgi.com Tue Jan 31 10:26:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VGQGjj056764 for ; Tue, 31 Jan 2012 10:26:17 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 60E4AAC00A; Tue, 31 Jan 2012 08:26:13 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 504AA426DA7; Tue, 31 Jan 2012 10:26:17 -0600 (CST) Date: Tue, 31 Jan 2012 10:26:17 -0600 From: Ben Myers To: Christoph Hellwig Cc: Nathan Scott , xfs@oss.sgi.com Subject: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC Message-ID: <20120131162617.GF7762@sgi.com> References: <20120130115024.GA884@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) On Tue, Jan 31, 2012 at 06:57:04AM +1100, Nathan Scott wrote: > On 30 January 2012 22:50, Christoph Hellwig wrote: > > ... > > Nathan, I've cced you in case you still remember anything about this, > > although it's fairly unlikely after 6.5 years.  Also if anyone at SGI > > can find anything about the above commits in BugWorks additional feedback > > would be welcome. > > I can't recall - but usually there was greater detail in the bugworks entry, > I think thats your best source now. > > Patch looks OK to me FWIW, assuming nothing comes of the bugworks > archeology exercise. I'm not a ptools expert so I had to ask around. This turned out to be PV942815 - XFS quota reporting interacts badly with delalloc "We get a constant trickle of confused people who've found that the used space reported by repquota/quota does not get immediately updated after creating new files / extending existing ones. The problem is a result of buffered IO in XFS doing delayed allocation - if we have not done an allocation, the quota accounting has not been updated, so we end up with effectively stale data being reported. This affects CXFS too, of course. After discussion a few weeks back on the XFS conf. call, it was decided to not change CXFS (too expensive to do a flush on all nodes) but that we can make some simple XFS changes to make this less of a problem - i.e. flushing delalloc data just before we extract quota information." -Nathan Patch looks good to me. Reviewed-by: Ben Myers -Ben From suprasam@crossmeta.org Tue Jan 31 11:13:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VHDeTJ058888 for ; Tue, 31 Jan 2012 11:13:40 -0600 X-ASG-Debug-ID: 1328030018-04bdf07518400940001-NocioJ Received: from mail-yw0-f46.google.com (mail-yw0-f46.google.com [209.85.213.46]) by cuda.sgi.com with ESMTP id 0BOToP18Opsw4vcc (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 31 Jan 2012 09:13:38 -0800 (PST) X-Barracuda-Envelope-From: suprasam@crossmeta.org X-Barracuda-Apparent-Source-IP: 209.85.213.46 Received: by yhoo21 with SMTP id o21so149463yho.5 for ; Tue, 31 Jan 2012 09:13:37 -0800 (PST) MIME-Version: 1.0 Received: by 10.236.128.232 with SMTP id f68mr36168449yhi.17.1328030016874; Tue, 31 Jan 2012 09:13:36 -0800 (PST) Received: by 10.146.82.20 with HTTP; Tue, 31 Jan 2012 09:13:36 -0800 (PST) X-Originating-IP: [76.103.142.18] Date: Tue, 31 Jan 2012 09:13:36 -0800 Message-ID: Subject: Identify patches for superblock changes for Crossmeta From: sam supramani X-ASG-Orig-Subj: Identify patches for superblock changes for Crossmeta To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: mail-yw0-f46.google.com[209.85.213.46] X-Barracuda-Start-Time: 1328030018 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-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, I am trying to get Crossmeta that includes windows port of XFS file system, to recognize newer ondisk format changes seen with the newer linux kernels.(RHEL6) The crossmeta-xfs port in https://github.com/crossmeta/sgi is quite old based on XFS 1.1 release with log v2 patches added later. I am interested in knowing submittal ID for the following changes; attr=2 lazy-count=1. Getting crossmeta to work with latest sources would be a bigger task, compared to selectively pulling the patch diffs. If file system was made with attr=0 it works fine. The program is free to use and is available at http://www.crossmeta.org/redmine Thanks, Sam. From bpm@sgi.com Tue Jan 31 11:50:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VHovHN059927; Tue, 31 Jan 2012 11:50:57 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id A7008AC001; Tue, 31 Jan 2012 09:50:49 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 9D9A3426DA7; Tue, 31 Jan 2012 11:50:53 -0600 (CST) Date: Tue, 31 Jan 2012 11:50:53 -0600 From: Ben Myers To: Mitsuo Hayasaka Cc: Alex Elder , Christoph Hellwig , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [RFC PATCH] xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() Message-ID: <20120131175053.GG7762@sgi.com> References: <20120127063726.16227.681.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120127063726.16227.681.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.18 (2008-05-17) On Fri, Jan 27, 2012 at 03:37:26PM +0900, Mitsuo Hayasaka wrote: > The kmem_realloc() in xfs is given KM_* memory allocation flags. And it > allocates memory using kmalloc() after they are converted to gfp_mask > flags. In xlog_recover_add_to_cont_trans(), 0u is passed to kmem_realloc(), > instead of them. I guess it is preferred to use them, and here memory must > be allocated but don't have to be done with GFP_ATOMIC. So, this patch > changes it to KM_SLEEP. > > Signed-off-by: Mitsuo Hayasaka > Cc: Ben Myers > Cc: Alex Elder > Cc: Christoph Hellwig Looks good. Consistent with other kmem_*alloc in log recovery. Reviewed-by: Ben Myers From bpm@oss.sgi.com Tue Jan 31 12:33:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VIXaEv067918 for ; Tue, 31 Jan 2012 12:33:36 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0VIXXqP067877; Tue, 31 Jan 2012 12:33:33 -0600 Date: Tue, 31 Jan 2012 12:33:33 -0600 Message-Id: <201201311833.q0VIXXqP067877@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-11433-g4505360 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 9b025eb3a89e041bab6698e3858706be2385d692 X-Git-Newrev: 4505360376637832f79f84f352588b0a045ad113 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 4505360 xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() from 9b025eb3a89e041bab6698e3858706be2385d692 (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 4505360376637832f79f84f352588b0a045ad113 Author: Mitsuo Hayasaka Date: Fri Jan 27 06:37:26 2012 +0000 xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() The kmem_realloc() in xfs is given KM_* memory allocation flags. And it allocates memory using kmalloc() after they are converted to gfp_mask flags. In xlog_recover_add_to_cont_trans(), 0u is passed to kmem_realloc(), instead of them. I guess it is preferred to use them, and here memory must be allocated but don't have to be done with GFP_ATOMIC. So, this patch changes it to KM_SLEEP. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_log_recover.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Tue Jan 31 12:33:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VIXibT068073 for ; Tue, 31 Jan 2012 12:33:44 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0VIXhcE068045; Tue, 31 Jan 2012 12:33:43 -0600 Date: Tue, 31 Jan 2012 12:33:43 -0600 Message-Id: <201201311833.q0VIXhcE068045@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v3.2-rc1-11433-g4505360 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: 9b025eb3a89e041bab6698e3858706be2385d692 X-Git-Newrev: 4505360376637832f79f84f352588b0a045ad113 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated 4505360 xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() from 9b025eb3a89e041bab6698e3858706be2385d692 (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 4505360376637832f79f84f352588b0a045ad113 Author: Mitsuo Hayasaka Date: Fri Jan 27 06:37:26 2012 +0000 xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() The kmem_realloc() in xfs is given KM_* memory allocation flags. And it allocates memory using kmalloc() after they are converted to gfp_mask flags. In xlog_recover_add_to_cont_trans(), 0u is passed to kmem_realloc(), instead of them. I guess it is preferred to use them, and here memory must be allocated but don't have to be done with GFP_ATOMIC. So, this patch changes it to KM_SLEEP. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_log_recover.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Tue Jan 31 12:34:41 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VIYfWP068436 for ; Tue, 31 Jan 2012 12:34:41 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q0VIYeNo068408; Tue, 31 Jan 2012 12:34:40 -0600 Date: Tue, 31 Jan 2012 12:34:40 -0600 Message-Id: <201201311834.q0VIYeNo068408@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. v3.2-rc1-11433-g4505360 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 9b025eb3a89e041bab6698e3858706be2385d692 X-Git-Newrev: 4505360376637832f79f84f352588b0a045ad113 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 4505360 xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() from 9b025eb3a89e041bab6698e3858706be2385d692 (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 4505360376637832f79f84f352588b0a045ad113 Author: Mitsuo Hayasaka Date: Fri Jan 27 06:37:26 2012 +0000 xfs: pass KM_SLEEP flag to kmem_realloc() in xlog_recover_add_to_cnt_trans() The kmem_realloc() in xfs is given KM_* memory allocation flags. And it allocates memory using kmalloc() after they are converted to gfp_mask flags. In xlog_recover_add_to_cont_trans(), 0u is passed to kmem_realloc(), instead of them. I guess it is preferred to use them, and here memory must be allocated but don't have to be done with GFP_ATOMIC. So, this patch changes it to KM_SLEEP. Signed-off-by: Mitsuo Hayasaka Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_log_recover.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From bpm@sgi.com Tue Jan 31 13:19:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VJJUR0086373; Tue, 31 Jan 2012 13:19:30 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay1.corp.sgi.com (Postfix) with ESMTP id 293A68F8078; Tue, 31 Jan 2012 11:19:24 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 63F18426DA7; Tue, 31 Jan 2012 13:19:28 -0600 (CST) Date: Tue, 31 Jan 2012 13:19:28 -0600 From: Ben Myers To: Mitsuo Hayasaka Cc: Alex Elder , Christoph Hellwig , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [PATCH] xfs: show uuid when mount fails due to duplicate uuid Message-ID: <20120131191928.GH7762@sgi.com> References: <20120113055839.12919.98763.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120113055839.12919.98763.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.18 (2008-05-17) On Fri, Jan 13, 2012 at 02:58:39PM +0900, Mitsuo Hayasaka wrote: > When a system tries to mount a filesystem (FS) using UUID, the xfs > returns -EINVAL and shows a message if a FS with the same UUID has > been already mounted. It is useful to output the duplicate UUID > with it. > > Signed-off-by: Mitsuo Hayasaka > Reviewed-by: Christoph Hellwig > Cc: Ben Myers > Cc: Alex Elder > Cc: Christoph Hellwig Looks good. Reviewed-by: Ben Myers From tinguely@sgi.com Tue Jan 31 13:22:26 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VJMQF4087795 for ; Tue, 31 Jan 2012 13:22:26 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8A043304032; Tue, 31 Jan 2012 11:22:23 -0800 (PST) Message-ID: <4F283F71.1020606@sgi.com> Date: Tue, 31 Jan 2012 13:22:25 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: xfs@oss.sgi.com, Ben Myers , Christoph Hellwig , Chris Mason Subject: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V6 References: <4F2504DD.5020503@oracle.com> In-Reply-To: <4F2504DD.5020503@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/29/12 02:35, Jeff Liu wrote: > Hello, > > Sorry for the delay!! I just got back from vacation. > > This is the V6 to introduce SEEK_DATA/SEEK_HOLE support to XFS. > As we have discussed previously, I have removed the dirty data probing stuff and just treating unwritten extents as data in this post. > > Changes to V6: > -------------- > * remove xfs_has_unwritten_buffer() for now. > * xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole, so we need to check its startblock is not a "nullstartblock" in this case. > * call i_size_read() after taking the ilock shared, otherwise, isize could be stale. > * remove "ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK)" from xfs_seek_data() since it will not used. > * in xfs_file_llseek(), return -EINVAL rather than -EOPNOTSUPP if whence is not valid according to http://linux.die.net/man/2/lseek. > * s/int lock/uint lock/ in both xfs_seek_data() and xfs_seek_hole(). > * s/out_lock/out_unlock/ in both functions too. > > Tests: > ------ > * seek_sanity_tester: > http://permalink.gmane.org/gmane.comp.file-systems.xfs.general/42514 > > *seek_copy_tester: > http://permalink.gmane.org/gmane.comp.file-systems.xfs.general/42522 > > > Thank you! > -Jeff > > > Signed-off-by: Jie Liu > > --- > fs/xfs/xfs_file.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 167 insertions(+), 1 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 753ed9b..41a045f 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > +STATIC loff_t > +xfs_seek_data( > + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map,&nmap, > + XFS_BMAPI_ENTIRE); > + if (error) > + goto out_unlock; > +STATIC loff_t > +xfs_seek_hole( > + error = xfs_bmap_first_unused(NULL, ip, 1,&fsbno, XFS_DATA_FORK); > + if (error) > + goto out_unlock; The code looks good for the reduced problem. It test correctly. I am still finding holes only if they start on a 16KB boundary which we discussed before. I mention it in case more advanced test cases are generated. Question: If the routines that are looking for extents/hole return an error (I see EFSCORRUPTED, EAGAIN, ENOMEM, EIO as possible errors in these routines), should you convert them to an error such as EIO? There is no specific error mention in the lseek manual page. --Mark Tinguely. From david@fromorbit.com Tue Jan 31 13:44:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VJi9UD094192 for ; Tue, 31 Jan 2012 13:44:09 -0600 X-ASG-Debug-ID: 1328039047-04cbb01fb347b0d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id tDiUF0tbgGbfHqbC for ; Tue, 31 Jan 2012 11:44:07 -0800 (PST) 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: Av0EAKpCKE95LD+b/2dsb2JhbABDrmCBBoFyAQEFOhwjEAgDGC4UJQMhE8EME4sEAgIJBQwHBgELAQgFAwMJBgQPAwMBhB0BAwEEGAIEgzkElR+SaQ Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 06:14:06 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsJca-0006hH-Qp; Wed, 01 Feb 2012 06:44:04 +1100 Date: Wed, 1 Feb 2012 06:44:04 +1100 From: Dave Chinner To: Supratik Goswami Cc: xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120131194404.GH9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1328039047 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 10:34:10AM +0530, Supratik Goswami wrote: > We are using Amazon EC2 instances. > > ubuntu@ip-10-0-0-10:~$ uname -aLinux ip-10-0-0-10 2.6.32-318-ec2 > #38-Ubuntu SMP Thu Sep 1 18:09:30 UTC 2011 x86_64 GNU/Linux The growfs hang problem was fixed in 2.6.34. On earlier kernels, if you do a grow while the system is under allocation load it could deadlock. growing on a mostly idle filesystem was generally OK, but under heavy load problems could occur. This hang is what xfstests 104 exercises... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 14:06:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_56 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VK6eXr098410 for ; Tue, 31 Jan 2012 14:06:40 -0600 X-ASG-Debug-ID: 1328040397-04cbb01fb447d5e0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id dTbsWY0KhpWwzxyM for ; Tue, 31 Jan 2012 12:06:38 -0800 (PST) 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: Av4EAAtGKE95LD+b/2dsb2JhbABDrmCBBoFyAQEEATocIwULCAMOBAYuFCUDDRQTh3y5FROLBAICCQUMBwYBCwEIBQMDCQYED4QkAQMBBINXBJUfkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 06:36:37 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsJyN-0006jd-SI; Wed, 01 Feb 2012 07:06:35 +1100 Date: Wed, 1 Feb 2012 07:06:35 +1100 From: Dave Chinner To: Brian Candler Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131200635.GI9090@dastard> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131103126.GA46170@nsrc.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1328040397 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87228 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC5_SA210e Custom Rule SA210e On Tue, Jan 31, 2012 at 10:31:26AM +0000, Brian Candler wrote: > On Tue, Jan 31, 2012 at 01:05:08PM +1100, Dave Chinner wrote: > > When you working set is > > larger than memory (which is definitely true here), read performance > > will almost always be determined by read IO latency. > > Absolutely. > > > > There are about 270 disk operations per second seen at the time, so > > > the drive is clearly saturated with seeks. It seems to be doing about 7 > > > seeks for each stat+read. > > > > It's actually reading bits of the files, too, as your strace shows, > > which is where most of the IO comes from. > > It's reading the entire files - I had grepped out the read(...) = 8192 > lines so that the stat/open/read/close pattern could be seen. > > > The big question is whether this bonnie++ workload reflects your > > real workload? > > Yes it does. The particular application I'm tuning for includes a library of > some 20M files in the 500-800K size range. The library is semi-static, i.e. > occasionally appended to. Some clients will be reading individual files at > random, but from time to time we will need to scan across the whole library > and process all the files or a large subset of it. > > > you need to optimise your storage > > architecture for minimising read latency, not write speed. That > > means either lots of spindles, or high RPM drives or SSDs or some > > combination of all three. There's nothing the filesystem can really > > do to make it any faster than it already is... > > I will end up distributing the library across multiple spindles using > something like Gluster, but first I want to tune the performance on a single > filesystem. > > It seems to me that reading a file should consist roughly of: > > - seek to inode (if the inode block isn't already in cache) > - seek to extents table (if all extents don't fit in the inode) > - seek(s) to the file contents, depending on how they're fragmented. You forgot the directory IO. If you've got enough entries in the directory to push it out to leaf/node format, then it could certainly take 3-4 IOs just to find the directory entry you are looking for. > I am currently seeing somewhere between 7 and 8 seeks per file read, and > this just doesn't seem right to me. The number of IOs does not equal the number of seeks. Two adjacent, sequential IOs issued serially will show up as two IOs, even though there was no seek in between. Especially if the files are large enough that readahead tops out (500-800k is large enough for this as readahead maximum is 128k by default). So it might be taking 3-4 IOs just to read the file data. > So the next thing I'd have to do is to try to get a trace of the I/O > operations being performed, and I don't know how to do that. blktrace/blkparse or seekwatcher. > > > The filesystem was created like this: > > > > > > # mkfs.xfs -i attr=2,maxpct=1 /dev/sdb > > > > attr=2 is the default, and maxpct is a soft limit so the only reason > > you would have to change it is if you need more indoes in teh > > filesystem than it can support by default. Indeed, that's somewhere > > around 200 million inodes per TB of disk space... > > OK. I saw "df -i" reporting a stupid number of available inodes, over 500 > million, so I decided to reduce it to 100 million. But df -k didn't show > any corresponding increase in disk space, so I'm guessing in xfs these are > allocated on-demand, and the inode limit doesn't really matter? Right. The "available inodes" number is calculated based on the current amount of free space, IIRC. It's dynamic, and mostly meaningless. > > > P.S. When dd'ing large files ontp XFS I found that bs=8k gave a lower > > > performance than bs=16k or larger. So I wanted to rerun bonnie++ with > > > larger chunk sizes. Unfortunately that causes it to crash (and fairly > > > consistently) - see below. > > > > No surprise - twice as many syscalls, twice the overhead. > > I'm not sure that simple explanation works here. I see almost exactly the > same performance with bs=512m down bs=32k, slightly worse at bs=16k, and a > sudden degradation at bs=8k. However the CPU is still massively > underutilised at that point. > > root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=1024k count=1024 ^^^^^^^^^^^^ Direct IO is different to buffered IO, which is what bonnie++ does. For direct IO, the IO size that hits th disk is exactly the bs value, and you con only have one IO per thread outstanding. All you are showing is that your disk cache readahead is not magic. Indeed, look at the system time: > sys 0m0.100s > > root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=32k count=32768 ..... > sys 0m0.420s > > root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=16k count=65536 ..... > sys 0m0.644s > > root@storage1:~# time dd iflag=direct if=/dev/sdg of=/dev/null bs=8k count=131072 .... > sys 0m1.328s It scales roughly linearly with the number of IOs that are done. This means there is more CPU time spent to retreive a given amount of data, and that time is not being spent doing IO. Put simply, this is slower: Fixed CPU time to issue 8K IO IO time Fixed CPU time to issue 8K IO IO time Fixed CPU time to issue 8K IO IO time Fixed CPU time to issue 8K IO IO time than: Fixed CPU time to issue 32K IO IO time because of the CPU time spent between IOs, and the difference in IO time between an 8k read and a 32k read is only about 5%. > Also: I can run the same dd on twelve separate drives concurrently, and get > the same results. This is a two-core (+hyperthreading) processor, but if > syscall overhead really were the limiting factor I would expect doing it > twelve times in parallel would amplify the effect. It's single thread latency that is your limiting factor. All you've done is demonstrate that threads don't interfere with each other. > My suspicion is that some other factor is coming into play - read-ahead on > the drives perhaps - but I haven't nailed it down yet. It's simply that the amount of CPU spent in syscalls doing IO is the performance limiting factor for a single thread. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 14:25:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_44 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VKPUiu099087 for ; Tue, 31 Jan 2012 14:25:30 -0600 X-ASG-Debug-ID: 1328041528-04cbb01fb347fa90001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 3fAa6RmO1TFwgGRp for ; Tue, 31 Jan 2012 12:25:29 -0800 (PST) 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: Av4EADpNKE95LD+b/2dsb2JhbAA/A65kgQaBcgEBAwEBOhwjBQsIAw4KLhQlAyEKCYd8CbkME4sEAgIJBQwHBgELAQgFAwMJBgQPhCQBAwEENoMhBJUfkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 06:55:28 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsKGc-0006lq-Vp; Wed, 01 Feb 2012 07:25:27 +1100 Date: Wed, 1 Feb 2012 07:25:26 +1100 From: Dave Chinner To: Brian Candler Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131202526.GJ9090@dastard> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131141604.GB46571@nsrc.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131141604.GB46571@nsrc.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1328041528 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87230 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 02:16:04PM +0000, Brian Candler wrote: > Updates: > > (1) The bug in bonnie++ is to do with memory allocation, and you can work > around it by putting '-n' before '-s' on the command line and using the same > custom chunk size before both (or by using '-n' with '-s 0') > > # time bonnie++ -d /data/sdc -n 98:800k:500k:1000:32k -s 16384k:32k -u root > > Version 1.96 ------Sequential Output------ --Sequential Input- --Random- > Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- > Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP > storage1 16G:32k 2061 91 101801 3 49405 4 5054 97 126748 6 130.9 3 > Latency 15446us 222ms 412ms 23149us 83913us 452ms > Version 1.96 ------Sequential Create------ --------Random Create-------- > storage1 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- > files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP > 98:819200:512000/1000 128 3 37 1 10550 25 108 3 38 1 8290 33 > Latency 6874ms 99117us 45394us 4462ms 12582ms 4027ms > 1.96,1.96,storage1,1,1328002525,16G,32k,2061,91,101801,3,49405,4,5054,97,126748,6,130.9,3,98,819200,512000,,1000,128,3,37,1,10550,25,108,3,38,1,8290,33,15446us,222ms,412ms,23149us,83913us,452ms,6874ms,99117us,45394us,4462ms,12582ms,4027ms > > This shows that using 32k transfers instead of 8k doesn't really help; I'm > still only seeing 37-38 reads per second, either sequential or random. Right, because it is doing buffered IO and reading and writing into the page cache for small Io sizes is much faster than waiting for physical IO. Hence there is much less of a penalty for small buffered IOs compared. > (2) In case extents aren't being kept in the inode, I decided to build a > filesystem with '-i size=1024' > > # time bonnie++ -d /data/sdb -n 98:800k:500k:1000:32k -s0 -u root > > Version 1.96 ------Sequential Create------ --------Random Create-------- > storage1 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- > files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP > 98:819200:512000/1000 110 3 131 5 3410 10 110 3 33 1 387 1 > Latency 6038ms 92092us 87730us 5202ms 117ms 7653ms > 1.96,1.96,storage1,1,1328003901,,,,,,,,,,,,,,98,819200,512000,,1000,110,3,131,5,3410,10,110,3,33,1,387,1,,,,,,,6038ms,92092us,87730us,5202ms,117ms,7653ms > > Wow! The sequential read just blows away the previous results. What's even > more amazing is the number of transactions per second reported by iostat > while bonnie++ was sequentially stat()ing and read()ing the files: The only thing changing the inode size will have affected is the directory structure - maybe your directories are small enough to fit in line, or the inode is large enough to keep it in extent format rather than a full btree. In either case, though, the directory lookup will require less IO. > > # iostat 5 > ... > sdb 820.80 86558.40 0.00 432792 0 > !! > > 820 tps on a bog-standard hard-drive is unbelievable, although the total > throughput of 86MB/sec is. It could be that either NCQ or drive read-ahead > is scoring big-time here. See my previous explanation of adjacent IOs not needing seeks. All you've done is increase the amount of IO needed to read and write inodes because the inode cluster size is a fixed 8k. That means you now need to do 8 adjacent IOs to read a 64 inode chunk instead of 2 adjecent IOs when you have 256 byte inodes. And because they are adjacent IOs, they will hit the drive cache and so not require physical IO to be done. Hence you can get much "higher" Io throughput without actually doing any more physical IO.... > However during random stat()+read() the performance drops: > > # iostat 5 > ... > sdb 225.40 21632.00 0.00 108160 0 Because it is now reading random inodes so not reading adjacent 8k inode clusters all the time. > > Here we appear to be limited by real seeks. 225 seeks/sec is still very good That number indicates 225 IOs/s, not 225 seeks/s. > for a hard drive, but it means the filesystem is generating about 7 seeks > for every file (stat+open+read+close). Indeed the random read performance 7 IOs for every file. > appears to be a bit worse than the default (-i size=256) filesystem, where > I was getting 25MB/sec on iostat, and 38 files per second instead of 33. Right, because it is taking more seeks to read the inodes because they are physically further apart. > There are only 1000 directories in this test, and I would expect those to > become cached quickly. Doubtful. There's plenty of page cache pressure (500-800k) per inode read (maybe 16k of cached metadata all up) so there's enough memory pressure to prevent the directory structure from staying memory resident. > It looks like I need to get familiar with xfs_db and > http://oss.sgi.com/projects/xfs/papers/xfs_filesystem_structure.pdf > to find out what's going on. It's pretty obvious to me what is happening. :/ I think that you first need to understand exactly what the tools you are already using are actually telling you, then go from there... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 14:50:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VKoJkE099704 for ; Tue, 31 Jan 2012 14:50:19 -0600 X-ASG-Debug-ID: 1328043016-04bdf0751641a320001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id IB3CPQNWbI9fTQmW for ; Tue, 31 Jan 2012 12:50:16 -0800 (PST) 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: Av0EAAJQKE95LD+b/2dsb2JhbABCrmSBBoFyAQEEATocIwULCAMYLhQlAyETh3y5DhOLBAICCQUMBwYBCwEIBQMDCQYEDwMDhB4BAwEEGAIEgzkElR+SaQ Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 07:20:15 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsKec-0006t7-NO; Wed, 01 Feb 2012 07:50:14 +1100 Date: Wed, 1 Feb 2012 07:50:14 +1100 From: Dave Chinner To: Stan Hoeppner Cc: xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120131205014.GM9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F27AE92.9060003@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: 1328043016 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87232 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 03:04:18AM -0600, Stan Hoeppner wrote: > On 1/30/2012 11:04 PM, Supratik Goswami wrote: > > We are using Amazon EC2 instances. > > ^^^^^^^^^^ > I'd have never thought I would see those words on this list, except > maybe as a joke, or as an example of one of the the worst possible > platforms for XFS. I don't agree with you there. If the workload works best on XFs, it doesn't matter what the underlying storage device is. e.g. if it's a fsync heavy workload, it will still perform better on XFS on EC2 than btrfs on EC2... > I wish EC2 had been asked about during the QA session after Dave's > presentation. I'm guessing some laughter would have been involved. ;) You'd be wrong about that. There are as many good uses of cloud services as there are bad ones, yet the same decisions about storage need to be made even when services are remotely hosted.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 15:01:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VL1ELu100004 for ; Tue, 31 Jan 2012 15:01:14 -0600 X-ASG-Debug-ID: 1328043672-04cb6c225e37a910001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id lfG3lGd0jqu9JQcD for ; Tue, 31 Jan 2012 13:01:12 -0800 (PST) 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: Av0EADhUKE95LD+b/2dsb2JhbABCrmWBBoFyAQEFJwsBIxUOEAgDDgouFCUDIRPBBBOIF4JnAQQDAg0CBwcEBgELAQgFAwMJBgQPhCQBAwEEHoM5BJUfiS+JOg Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 07:31:11 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsKpC-0006vf-Kl; Wed, 01 Feb 2012 08:01:10 +1100 Date: Wed, 1 Feb 2012 08:01:10 +1100 From: Dave Chinner To: Ben Myers Cc: Christoph Hellwig , Nathan Scott , xfs@oss.sgi.com Subject: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC Message-ID: <20120131210110.GN9090@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC References: <20120130115024.GA884@infradead.org> <20120131162617.GF7762@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20120131162617.GF7762@sgi.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: 1328043672 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87232 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 10:26:17AM -0600, Ben Myers wrote: > On Tue, Jan 31, 2012 at 06:57:04AM +1100, Nathan Scott wrote: > > On 30 January 2012 22:50, Christoph Hellwig wrote: > > > ... > > > Nathan, I've cced you in case you still remember anything about this, > > > although it's fairly unlikely after 6.5 years.  Also if anyone at SGI > > > can find anything about the above commits in BugWorks additional feedback > > > would be welcome. > > > > I can't recall - but usually there was greater detail in the bugworks entry, > > I think thats your best source now. > > > > Patch looks OK to me FWIW, assuming nothing comes of the bugworks > > archeology exercise. > > I'm not a ptools expert so I had to ask around. This turned out to be > > PV942815 - XFS quota reporting interacts badly with delalloc > > "We get a constant trickle of confused people who've found that the used > space reported by repquota/quota does not get immediately updated after > creating new files / extending existing ones. The problem is a result > of buffered IO in XFS doing delayed allocation - if we have not done an > allocation, the quota accounting has not been updated, so we end up with > effectively stale data being reported. > > This affects CXFS too, of course. After discussion a few weeks back on > the XFS conf. call, it was decided to not change CXFS (too expensive to > do a flush on all nodes) but that we can make some simple XFS changes to > make this less of a problem - i.e. flushing delalloc data just before we > extract quota information." -Nathan So effectively what that says to me is that quota only exports the real block usage, even though it internally tracks delalloc reservations. Perhaps an additionaly change to make in this case is to fold the reserved blocks into what is reported to the quota utilities? Indeed, what is exported to userspace via xfs_qm_export_dquot() is the information in the dquot core - the on-disk information - so perhaps all we need to do is export dqp->q_res_bcount (the count of real + reserved blocks) instead of the on-disk info? Cheers, Dave. -- Dave Chinner david@fromorbit.com From b.candler@pobox.com Tue Jan 31 15:35:25 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VLZPDs101061 for ; Tue, 31 Jan 2012 15:35:25 -0600 X-ASG-Debug-ID: 1328045723-04bdf0751941e3c0001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id WDZqcZslqjKpNuNE for ; Tue, 31 Jan 2012 13:35:24 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 530C16E82; Tue, 31 Jan 2012 16:35:23 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=sasl; bh=yHa6JLsCDHO9bwoYLoHt/J01csU=; b=l7WcIK8 FC0Dj5ZVt6kx6shJ/LyLG7Nwlz0I72R2GklrRkoG4ydgmTQs3QdZw16WGnRGnWlk 8jWlRFFaWDCtlpa7fBmuomWWlD4Drenjcmu1Qsts9iUZM8mSHKauxZGh3hwxSQBF lDjYYi0EopnL5V7a0UHbdbd3787wZe79/6s0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to:cc :subject:message-id:references:mime-version:content-type :in-reply-to; q=dns; s=sasl; b=x1te1hAcM707iPI0H68cNw/9iGcwOEhJT 68ldF/yx9V9AtPEyyVR54T9RN3zPempG8/p7pgaKYeghBcu9dfnax7z7x7xuODu5 L3Lb0evXQ3F54MruajM1imlQtvXjKzaUEaN00vHkXQbpXCgaNiIlWm7Xd7p5KWDQ yr5ZTEXVrk= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 4A1C86E81; Tue, 31 Jan 2012 16:35:23 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [31.185.235.168]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id F3B216E7D; Tue, 31 Jan 2012 16:35:22 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYOMMY-0010LK-CH; Tue, 31 Jan 2012 21:35:22 +0000 Date: Tue, 31 Jan 2012 21:35:22 +0000 From: Brian Candler To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131213522.GA47420@nsrc.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131200635.GI9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131200635.GI9090@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: 7B28B1C8-4C53-11E1-8A6E-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328045723 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87234 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 Wed, Feb 01, 2012 at 07:06:35AM +1100, Dave Chinner wrote: > The number of IOs does not equal the number of seeks. Two adjacent, > sequential IOs issued serially will show up as two IOs, even though > there was no seek in between. Especially if the files are large > enough that readahead tops out (500-800k is large enough for this as > readahead maximum is 128k by default). So it might be taking 3-4 > IOs just to read the file data. Ah. And if the IOs are not stacked up, then the platter has to rotate nearly a whole turn to perform the next one. > > So the next thing I'd have to do is to try to get a trace of the I/O > > operations being performed, and I don't know how to do that. > > blktrace/blkparse or seekwatcher. Excellent, just what I wanted. I've made a start with this and will report back. Many thanks for the help and pointers you have provided. Regards, Brian. From pwhite@sgi.com Tue Jan 31 15:41:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cthulhu.engr.sgi.com (cthulhu.engr.sgi.com [150.166.39.100]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VLf62Q101350 for ; Tue, 31 Jan 2012 15:41:06 -0600 Received: from caliban.corp.sgi.com ([10.202.8.38]) by cthulhu.engr.sgi.com (8.12.10/8.12.10/SuSE Linux 0.7) with ESMTP id q0VLf5Po020749 for ; Tue, 31 Jan 2012 13:41:05 -0800 Date: Tue, 31 Jan 2012 13:41:11 -0800 From: Phil White To: xfs@oss.sgi.com Subject: [NOTES] [RFC v3 PATCH 1/4] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Message-ID: <20120131214111.GC2569@caliban.corp.sgi.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173204.31640.53918.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173204.31640.53918.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) #pwhite: The only questionable bit of code here is when transferring the #superblock back and forth to disk. At present, we maintain XFS_OQUOTA #settings on the disk and guess at whether that meant PQUOTA or GQUOTA when #we get it into core from the ACCT settings. That works for now, but we'll #want to eliminate that eventually. Define new macros XFS_GQUOTA_ENFD, XFS_GQUOTA_CHKD, XFS_PQUOTA_ENFD, and XFS_PQUOTA_CHKD. Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Instead, start using XFS_GQUOTA_.* XFS_PQUOTA_.* counterparts. No changes is made to the on-disk version of the superblock yet. On-disk copy still uses XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD. Signed-off-by: Chandra Seetharaman Reviewed-by: Phil White --- fs/xfs/xfs_mount.c | 30 ++++++++++++++++++++++++++++++ fs/xfs/xfs_qm.c | 9 ++++++--- fs/xfs/xfs_qm_syscalls.c | 26 ++++++++++++++------------ fs/xfs/xfs_quota.h | 36 +++++++++++++++++++++++++----------- fs/xfs/xfs_quotaops.c | 6 ++++-- fs/xfs/xfs_super.c | 16 ++++++++-------- fs/xfs/xfs_trans_dquot.c | 4 ++-- 7 files changed, 89 insertions(+), 38 deletions(-) diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index b50ec5b..d7205b0 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -152,19 +152,34 @@ typedef struct xfs_qoff_logformat { #define XFS_GQUOTA_ACCT 0x0040 /* group quota accounting ON */ #pwhite: OQUOTA_ENFD == 0x10, OQUOTA_CHKD=0x20. Those values don't overlap #with the GQUOTA or PQUOTA flags. /* + * Start differentiating group quota and project quota in-core + * using distinct flags, instead of using the combined OQUOTA flags. + * + * Conversion to and from the combined OQUOTA flag (if necessary) + * is done only in xfs_sb_{to,from}_disk() + */ +#define XFS_GQUOTA_ENFD 0x0080 /* group quota limits enforced */ +#define XFS_GQUOTA_CHKD 0x0100 /* quotacheck run on group quotas */ +#define XFS_PQUOTA_ENFD 0x0200 /* project quota limits enforced */ +#define XFS_PQUOTA_CHKD 0x0400 /* quotacheck run on project quotas */ + +/* * Quota Accounting/Enforcement flags */ #define XFS_ALL_QUOTA_ACCT \ (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT) -#define XFS_ALL_QUOTA_ENFD (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD) -#define XFS_ALL_QUOTA_CHKD (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD) +#define XFS_ALL_QUOTA_ENFD \ + (XFS_UQUOTA_ENFD | XFS_GQUOTA_ENFD | XFS_PQUOTA_ENFD) +#define XFS_ALL_QUOTA_CHKD \ + (XFS_UQUOTA_CHKD | XFS_GQUOTA_CHKD | XFS_PQUOTA_CHKD) #pwhite: I'm not sure why we remove OQUOTA_ENFD and OQUOTA_CHKD here. It #seems like if we're setting those flags, then they're indicative of quotas #being set, therefore we should check them out. #define XFS_IS_QUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT) #define XFS_IS_UQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_UQUOTA_ACCT) #define XFS_IS_PQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_PQUOTA_ACCT) #define XFS_IS_GQUOTA_RUNNING(mp) ((mp)->m_qflags & XFS_GQUOTA_ACCT) #define XFS_IS_UQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_UQUOTA_ENFD) -#define XFS_IS_OQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_OQUOTA_ENFD) +#define XFS_IS_PQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_PQUOTA_ENFD) +#define XFS_IS_GQUOTA_ENFORCED(mp) ((mp)->m_qflags & XFS_GQUOTA_ENFD) #pwhite: It's implied that if PQUOTA or GQUOTA, then also OQUOTA. I'd like to #see these also do a check against OQUOTA_ENFD even though it may be redundant. /* * Incore only flags for quotaoff - these bits get cleared when quota(s) @@ -259,24 +274,23 @@ typedef struct xfs_qoff_logformat { ((XFS_IS_UQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \ (XFS_IS_GQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT))) || \ + (mp->m_sb.sb_qflags & XFS_GQUOTA_CHKD) == 0) || \ (XFS_IS_PQUOTA_ON(mp) && \ - ((mp->m_sb.sb_qflags & XFS_OQUOTA_CHKD) == 0 || \ - (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT)))) + (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) #pwhite: These seem reasonable, but I'd like to see a separate term for #XFS_IS_OQUOTA_ON(mp) && ((mp->m_sb.sb_qflags & OQUOTA_CHKD) == 0) #define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) #define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD) + XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_OQUOTA_ENFD|XFS_OQUOTA_CHKD|\ - XFS_GQUOTA_ACCT) + XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ + XFS_GQUOTA_ACCT|XFS_GQUOTA_ENFD|\ + XFS_GQUOTA_CHKD) /* diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 25e9908..64313e4 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -593,6 +593,20 @@ xfs_sb_from_disk( to->sb_uquotino = be64_to_cpu(from->sb_uquotino); to->sb_gquotino = be64_to_cpu(from->sb_gquotino); to->sb_qflags = be16_to_cpu(from->sb_qflags); + if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && + (to->sb_qflags & (XFS_PQUOTA_ENFD |XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD| XFS_GQUOTA_CHKD))) { + xfs_notice(mp, "Super block has XFS_OQUOTA bits along with " + "XFS_PQUOTA and/or XFS_GQUOTA bits. Fixing it.\n"); + } + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + to->sb_flags = from->sb_flags; to->sb_shared_vn = from->sb_shared_vn; to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); @@ -622,11 +636,26 @@ xfs_sb_to_disk( xfs_sb_field_t f; int first; int size; + __be16 saved_qflags; ASSERT(fields); if (!fields) return; + /* + * in-core version of qflags do not have XFS_OQUOTA.*, whereas the + * on-disk version does. So, save the in-core sb_qflags and restore + * it after we modify and copy it to the buffer to be copied to + * disk. + */ + saved_qflags = from->sb_qflags; + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + from->sb_qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + from->sb_qflags |= XFS_OQUOTA_CHKD; + from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); #pwhite: We translate back and forth from [GP]QUOTA to OQUOTA for now, but in #the third patch of the series, we'll do away with that and add [GP]QUOTA as #valid flags while (fields) { f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); first = xfs_sb_info[f].offset; @@ -657,6 +686,7 @@ xfs_sb_to_disk( fields &= ~(1LL << f); } + from->sb_qflags = saved_qflags; } /* diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 1b2f5b3..bb8c2ac 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -313,8 +313,10 @@ xfs_qm_mount_quotas( */ if (!XFS_IS_UQUOTA_ON(mp)) mp->m_qflags &= ~XFS_UQUOTA_CHKD; - if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) - mp->m_qflags &= ~XFS_OQUOTA_CHKD; + if (!XFS_IS_GQUOTA_ON(mp)) + mp->m_qflags &= ~XFS_GQUOTA_CHKD; + if (!XFS_IS_PQUOTA_ON(mp)) + mp->m_qflags &= ~XFS_PQUOTA_CHKD; write_changes: /* @@ -1449,7 +1451,8 @@ xfs_qm_quotacheck( XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); if (error) goto error_return; - flags |= XFS_OQUOTA_CHKD; + flags |= XFS_IS_GQUOTA_ON(mp) ? + XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; } do { diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index eafbcff..d43c68c 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -121,11 +121,11 @@ xfs_qm_scall_quotaoff( } if (flags & XFS_GQUOTA_ACCT) { dqtype |= XFS_QMOPT_GQUOTA; - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); + flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); inactivate_flags |= XFS_GQUOTA_ACTIVE; } else if (flags & XFS_PQUOTA_ACCT) { dqtype |= XFS_QMOPT_PQUOTA; - flags |= (XFS_OQUOTA_CHKD | XFS_OQUOTA_ENFD); + flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); inactivate_flags |= XFS_PQUOTA_ACTIVE; } @@ -349,9 +349,11 @@ xfs_qm_scall_quotaon( || ((flags & XFS_PQUOTA_ACCT) == 0 && (mp->m_sb.sb_qflags & XFS_PQUOTA_ACCT) == 0 && - (flags & XFS_GQUOTA_ACCT) == 0 && + (flags & XFS_PQUOTA_ENFD)) + || + ((flags & XFS_GQUOTA_ACCT) == 0 && (mp->m_sb.sb_qflags & XFS_GQUOTA_ACCT) == 0 && - (flags & XFS_OQUOTA_ENFD))) { + (flags & XFS_GQUOTA_ENFD))) { xfs_debug(mp, "%s: Can't enforce without acct, flags=%x sbflags=%x\n", __func__, flags, mp->m_sb.sb_qflags); @@ -801,8 +803,8 @@ xfs_qm_export_dquot( * so return zeroes in that case. */ if ((!XFS_IS_UQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_USER) || - (!XFS_IS_OQUOTA_ENFORCED(mp) && - (src->d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { + (!XFS_IS_PQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_PROJ) || + (!XFS_IS_GQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_GROUP)) { dst->d_btimer = 0; dst->d_itimer = 0; dst->d_rtbtimer = 0; @@ -810,8 +812,8 @@ xfs_qm_export_dquot( #ifdef DEBUG if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == FS_USER_QUOTA) || - (XFS_IS_OQUOTA_ENFORCED(mp) && - (dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) && + (XFS_IS_PQUOTA_ENFORCED(mp) && dst->d_flags == FS_PROJ_QUOTA) || + (XFS_IS_GQUOTA_ENFORCED(mp) && dst->d_flags == FS_GROUP_QUOTA)) && dst->d_id != 0) { if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && (dst->d_blk_softlimit > 0)) { @@ -860,10 +862,10 @@ xfs_qm_export_flags( uflags |= FS_QUOTA_GDQ_ACCT; if (flags & XFS_UQUOTA_ENFD) uflags |= FS_QUOTA_UDQ_ENFD; - if (flags & (XFS_OQUOTA_ENFD)) { - uflags |= (flags & XFS_GQUOTA_ACCT) ? - FS_QUOTA_GDQ_ENFD : FS_QUOTA_PDQ_ENFD; - } + if (flags & XFS_PQUOTA_ENFD) + uflags |= FS_QUOTA_PDQ_ENFD; + if (flags & XFS_GQUOTA_ENFD) + uflags |= FS_QUOTA_GDQ_ENFD; return (uflags); } diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c index 7e76f53..be5389e 100644 --- a/fs/xfs/xfs_quotaops.c +++ b/fs/xfs/xfs_quotaops.c @@ -76,8 +76,10 @@ xfs_fs_set_xstate( flags |= XFS_GQUOTA_ACCT; if (uflags & FS_QUOTA_UDQ_ENFD) flags |= XFS_UQUOTA_ENFD; - if (uflags & (FS_QUOTA_PDQ_ENFD|FS_QUOTA_GDQ_ENFD)) - flags |= XFS_OQUOTA_ENFD; + if (uflags & FS_QUOTA_PDQ_ENFD) + flags |= XFS_PQUOTA_ENFD; + if (uflags & FS_QUOTA_GDQ_ENFD) + flags |= XFS_GQUOTA_ENFD; switch (op) { case Q_XQUOTAON: diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 5e0d43f..01de9f9 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -339,17 +339,17 @@ xfs_parseargs( } else if (!strcmp(this_char, MNTOPT_PQUOTA) || !strcmp(this_char, MNTOPT_PRJQUOTA)) { mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | - XFS_OQUOTA_ENFD); + XFS_PQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) { mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); - mp->m_qflags &= ~XFS_OQUOTA_ENFD; + mp->m_qflags &= ~XFS_PQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_GQUOTA) || !strcmp(this_char, MNTOPT_GRPQUOTA)) { mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | - XFS_OQUOTA_ENFD); + XFS_GQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); - mp->m_qflags &= ~XFS_OQUOTA_ENFD; + mp->m_qflags &= ~XFS_GQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) { xfs_warn(mp, "delaylog is the default now, option is deprecated."); @@ -542,12 +542,12 @@ xfs_showargs( /* Either project or group quotas can be active, not both */ if (mp->m_qflags & XFS_PQUOTA_ACCT) { - if (mp->m_qflags & XFS_OQUOTA_ENFD) + if (mp->m_qflags & XFS_PQUOTA_ENFD) seq_puts(m, "," MNTOPT_PRJQUOTA); else seq_puts(m, "," MNTOPT_PQUOTANOENF); } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { - if (mp->m_qflags & XFS_OQUOTA_ENFD) + if (mp->m_qflags & XFS_GQUOTA_ENFD) seq_puts(m, "," MNTOPT_GRPQUOTA); else seq_puts(m, "," MNTOPT_GQUOTANOENF); @@ -1059,8 +1059,8 @@ xfs_fs_statfs( spin_unlock(&mp->m_sb_lock); if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) || - ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD))) == - (XFS_PQUOTA_ACCT|XFS_OQUOTA_ENFD)) + ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) == + (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD)) xfs_qm_statvfs(ip, statp); return 0; } diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 4d00ee6..bea957d 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -640,8 +640,8 @@ xfs_trans_dqresv( if ((flags & XFS_QMOPT_FORCE_RES) == 0 && dqp->q_core.d_id && ((XFS_IS_UQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISUDQ(dqp)) || - (XFS_IS_OQUOTA_ENFORCED(dqp->q_mount) && - (XFS_QM_ISPDQ(dqp) || XFS_QM_ISGDQ(dqp))))) { + (XFS_IS_PQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISPDQ(dqp)) || + (XFS_IS_GQUOTA_ENFORCED(dqp->q_mount) && XFS_QM_ISGDQ(dqp)))) { if (nblks > 0) { /* * dquot is locked already. See if we'd go over the -- 1.7.1 From pwhite@sgi.com Tue Jan 31 15:41:38 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_48, J_CHICKENPOX_64,J_CHICKENPOX_65,TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cthulhu.engr.sgi.com (cthulhu.engr.sgi.com [150.166.39.100]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VLfbn3101375 for ; Tue, 31 Jan 2012 15:41:38 -0600 Received: from caliban.corp.sgi.com ([10.202.8.38]) by cthulhu.engr.sgi.com (8.12.10/8.12.10/SuSE Linux 0.7) with ESMTP id q0VLfbPo020761 for ; Tue, 31 Jan 2012 13:41:37 -0800 Date: Tue, 31 Jan 2012 13:41:43 -0800 From: Phil White To: xfs@oss.sgi.com Subject: [NOTES] [RFC v3 PATCH 2/4] xfs: Add pquota fields where gquota is used. Message-ID: <20120131214143.GD2569@caliban.corp.sgi.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173210.31640.96565.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173210.31640.96565.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) #pwhite: Most of the changes fall into two categories. # 1) Changing the check for OQUOTA to mean either GQUOTA or PQUOTA to an # inclusive or. # 2) Substituting OQUOTA for PQUOTA and GQUOTA in function arguments, # initializations, etc. Add project quota changes to all the places where group quota field is used. No externally visible changed and no superblock changes, yet. Signed-off-by: Chandra Seetharaman Reviewed-by: Phil White --- fs/xfs/xfs_dquot.c | 17 +++- fs/xfs/xfs_dquot.h | 9 ++- fs/xfs/xfs_iget.c | 2 +- fs/xfs/xfs_inode.h | 1 + fs/xfs/xfs_ioctl.c | 12 +- fs/xfs/xfs_iops.c | 4 +- fs/xfs/xfs_qm.c | 259 ++++++++++++++++++++++++++++++++-------------- fs/xfs/xfs_qm.h | 7 +- fs/xfs/xfs_qm_bhv.c | 2 +- fs/xfs/xfs_qm_syscalls.c | 19 +++- fs/xfs/xfs_quota.h | 38 ++++--- fs/xfs/xfs_quota_priv.h | 6 +- fs/xfs/xfs_sb.h | 1 + fs/xfs/xfs_super.c | 5 +- fs/xfs/xfs_trans_dquot.c | 71 ++++++++++--- fs/xfs/xfs_vnodeops.c | 23 +++-- 16 files changed, 330 insertions(+), 146 deletions(-) diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index d7205b0..1c61c9b 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -186,9 +186,9 @@ typedef struct xfs_qoff_logformat { * are in the process of getting turned off. These flags are in m_qflags but * never in sb_qflags. */ -#define XFS_UQUOTA_ACTIVE 0x0100 /* uquotas are being turned off */ -#define XFS_PQUOTA_ACTIVE 0x0200 /* pquotas are being turned off */ -#define XFS_GQUOTA_ACTIVE 0x0400 /* gquotas are being turned off */ +#define XFS_UQUOTA_ACTIVE 0x1000 /* uquotas are being turned off */ +#define XFS_PQUOTA_ACTIVE 0x2000 /* pquotas are being turned off */ +#define XFS_GQUOTA_ACTIVE 0x4000 /* gquotas are being turned off */ #define XFS_ALL_QUOTA_ACTIVE \ (XFS_UQUOTA_ACTIVE | XFS_PQUOTA_ACTIVE | XFS_GQUOTA_ACTIVE) #pwhite: These have to get moved up because of the definitions for #XFS_[GP]QUOTA_* @@ -199,8 +199,6 @@ typedef struct xfs_qoff_logformat { #define XFS_IS_QUOTA_ON(mp) ((mp)->m_qflags & (XFS_UQUOTA_ACTIVE | \ XFS_GQUOTA_ACTIVE | \ XFS_PQUOTA_ACTIVE)) -#define XFS_IS_OQUOTA_ON(mp) ((mp)->m_qflags & (XFS_GQUOTA_ACTIVE | \ - XFS_PQUOTA_ACTIVE)) #define XFS_IS_UQUOTA_ON(mp) ((mp)->m_qflags & XFS_UQUOTA_ACTIVE) #define XFS_IS_GQUOTA_ON(mp) ((mp)->m_qflags & XFS_GQUOTA_ACTIVE) #define XFS_IS_PQUOTA_ON(mp) ((mp)->m_qflags & XFS_PQUOTA_ACTIVE) @@ -267,8 +265,10 @@ typedef struct xfs_qoff_logformat { */ #define XFS_NOT_DQATTACHED(mp, ip) ((XFS_IS_UQUOTA_ON(mp) &&\ (ip)->i_udquot == NULL) || \ - (XFS_IS_OQUOTA_ON(mp) && \ - (ip)->i_gdquot == NULL)) + (XFS_IS_GQUOTA_ON(mp) && \ + (ip)->i_gdquot == NULL) || \ + (XFS_IS_PQUOTA_ON(mp) && \ + (ip)->i_pdquot == NULL)) #define XFS_QM_NEED_QUOTACHECK(mp) \ ((XFS_IS_UQUOTA_ON(mp) && \ @@ -323,17 +323,18 @@ extern int xfs_trans_reserve_quota_nblks(struct xfs_trans *, struct xfs_inode *, long, long, uint); extern int xfs_trans_reserve_quota_bydquots(struct xfs_trans *, struct xfs_mount *, struct xfs_dquot *, - struct xfs_dquot *, long, long, uint); + struct xfs_dquot *, struct xfs_dquot *, long, long, uint); #pwhite: This -- and the series of redefinitions following are to change out #passing one oquota structure for two structures -- one for pquota, one for #gquota. extern int xfs_qm_vop_dqalloc(struct xfs_inode *, uid_t, gid_t, prid_t, uint, - struct xfs_dquot **, struct xfs_dquot **); + struct xfs_dquot **, struct xfs_dquot **, struct xfs_dquot **); extern void xfs_qm_vop_create_dqattach(struct xfs_trans *, struct xfs_inode *, - struct xfs_dquot *, struct xfs_dquot *); + struct xfs_dquot *, struct xfs_dquot *, struct xfs_dquot *); extern int xfs_qm_vop_rename_dqattach(struct xfs_inode **); extern struct xfs_dquot *xfs_qm_vop_chown(struct xfs_trans *, struct xfs_inode *, struct xfs_dquot **, struct xfs_dquot *); extern int xfs_qm_vop_chown_reserve(struct xfs_trans *, struct xfs_inode *, - struct xfs_dquot *, struct xfs_dquot *, uint); + struct xfs_dquot *, struct xfs_dquot *, + struct xfs_dquot *, uint); extern int xfs_qm_dqattach(struct xfs_inode *, uint); extern int xfs_qm_dqattach_locked(struct xfs_inode *, uint); extern void xfs_qm_dqdetach(struct xfs_inode *); @@ -347,10 +348,12 @@ extern void xfs_qm_unmount_quotas(struct xfs_mount *); #else static inline int xfs_qm_vop_dqalloc(struct xfs_inode *ip, uid_t uid, gid_t gid, prid_t prid, - uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp) + uint flags, struct xfs_dquot **udqp, struct xfs_dquot **gdqp, + xfs_dquot **pdqp) { *udqp = NULL; *gdqp = NULL; + *pdqp = NULL; return 0; } #define xfs_trans_dup_dqinfo(tp, tp2) @@ -365,14 +368,15 @@ static inline int xfs_trans_reserve_quota_nblks(struct xfs_trans *tp, } static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, struct xfs_mount *mp, struct xfs_dquot *udqp, - struct xfs_dquot *gdqp, long nblks, long nions, uint flags) + struct xfs_dquot *gdqp, struct xfs_dquot *pdqp, + long nblks, long nions, uint flags) { return 0; } -#define xfs_qm_vop_create_dqattach(tp, ip, u, g) +#define xfs_qm_vop_create_dqattach(tp, ip, u, g, p) #define xfs_qm_vop_rename_dqattach(it) (0) #define xfs_qm_vop_chown(tp, ip, old, new) (NULL) -#define xfs_qm_vop_chown_reserve(tp, ip, u, g, fl) (0) +#define xfs_qm_vop_chown_reserve(tp, ip, u, g, p, fl) (0) #define xfs_qm_dqattach(ip, fl) (0) #define xfs_qm_dqattach_locked(ip, fl) (0) #define xfs_qm_dqdetach(ip) @@ -386,8 +390,8 @@ static inline int xfs_trans_reserve_quota_bydquots(struct xfs_trans *tp, #define xfs_trans_unreserve_quota_nblks(tp, ip, nblks, ninos, flags) \ xfs_trans_reserve_quota_nblks(tp, ip, -(nblks), -(ninos), flags) -#define xfs_trans_reserve_quota(tp, mp, ud, gd, nb, ni, f) \ - xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, nb, ni, \ +#define xfs_trans_reserve_quota(tp, mp, ud, gd, pd, nb, ni, f) \ + xfs_trans_reserve_quota_bydquots(tp, mp, ud, gd, pd, nb, ni, \ f | XFS_QMOPT_RES_REGBLKS) extern int xfs_qm_dqcheck(struct xfs_mount *, xfs_disk_dquot_t *, diff --git a/fs/xfs/xfs_quota_priv.h b/fs/xfs/xfs_quota_priv.h index 94a3d92..0e5ef5a 100644 --- a/fs/xfs/xfs_quota_priv.h +++ b/fs/xfs/xfs_quota_priv.h @@ -30,11 +30,7 @@ #define XFS_DQ_HASHVAL(mp, id) (((__psunsigned_t)(mp) + \ (__psunsigned_t)(id)) & \ (xfs_Gqm->qm_dqhashmask - 1)) -#define XFS_DQ_HASH(mp, id, type) (type == XFS_DQ_USER ? \ - (xfs_Gqm->qm_usr_dqhtable + \ - XFS_DQ_HASHVAL(mp, id)) : \ - (xfs_Gqm->qm_grp_dqhtable + \ - XFS_DQ_HASHVAL(mp, id))) + #pwhite: Ok -- this is a little worrying. I'm not sure why we're removing #XFS_DQ_HASH. #define XFS_IS_DQUOT_UNINITIALIZED(dqp) ( \ !dqp->q_core.d_blk_hardlimit && \ !dqp->q_core.d_blk_softlimit && \ diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h index cb6ae71..5242512 100644 --- a/fs/xfs/xfs_sb.h +++ b/fs/xfs/xfs_sb.h @@ -140,6 +140,7 @@ typedef struct xfs_sb { */ xfs_ino_t sb_uquotino; /* user quota inode */ xfs_ino_t sb_gquotino; /* group quota inode */ +#define sb_pquotino sb_gquotino __uint16_t sb_qflags; /* quota flags */ __uint8_t sb_flags; /* misc. flags */ __uint8_t sb_shared_vn; /* shared version number */ diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h index 9b4f3ad..d46ff1c 100644 --- a/fs/xfs/xfs_qm.h +++ b/fs/xfs/xfs_qm.h @@ -68,6 +68,7 @@ typedef xfs_dqhash_t xfs_dqlist_t; typedef struct xfs_qm { xfs_dqlist_t *qm_usr_dqhtable;/* udquot hash table */ xfs_dqlist_t *qm_grp_dqhtable;/* gdquot hash table */ + xfs_dqlist_t *qm_prj_dqhtable;/* project hash table */ uint qm_dqhashmask; /* # buckets in dq hashtab - 1 */ struct list_head qm_dqfrlist; /* freelist of dquots */ struct mutex qm_dqfrlist_lock; @@ -86,6 +87,7 @@ typedef struct xfs_qm { typedef struct xfs_quotainfo { xfs_inode_t *qi_uquotaip; /* user quota inode */ xfs_inode_t *qi_gquotaip; /* group quota inode */ + xfs_inode_t *qi_pquotaip; /* project quota inode */ struct list_head qi_dqlist; /* all dquots in filesys */ struct mutex qi_dqlist_lock; int qi_dquots; #pwhite: Why are the group & project quota inodes different here, but not in #xfs_sb? This anticipates a change in the 3rd patch. @@ -110,13 +112,11 @@ typedef struct xfs_quotainfo { extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); -extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, - xfs_dquot_t *, xfs_dquot_t *, long, long, uint); extern void xfs_trans_dqjoin(xfs_trans_t *, xfs_dquot_t *); extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); /* - * We keep the usr and grp dquots separately so that locking will be easier + * We keep the usr, grp, and prj dquots separately so that locking will be easier * to do at commit time. All transactions that we know of at this point * affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value. */ @@ -124,6 +124,7 @@ extern void xfs_trans_log_dquot(xfs_trans_t *, xfs_dquot_t *); typedef struct xfs_dquot_acct { xfs_dqtrx_t dqa_usrdquots[XFS_QM_TRANS_MAXDQS]; xfs_dqtrx_t dqa_grpdquots[XFS_QM_TRANS_MAXDQS]; + xfs_dqtrx_t dqa_prjdquots[XFS_QM_TRANS_MAXDQS]; } xfs_dquot_acct_t; /* diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 2f27b74..cafc3c2 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -224,6 +224,7 @@ typedef struct xfs_inode { struct xfs_mount *i_mount; /* fs mount struct ptr */ struct xfs_dquot *i_udquot; /* user dquot */ struct xfs_dquot *i_gdquot; /* group dquot */ + struct xfs_dquot *i_pdquot; /* project dquot */ /* Inode location stuff */ xfs_ino_t i_ino; /* inode number (agno/agino)*/ diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h index 41cb5f4..0cdb79e 100644 --- a/fs/xfs/xfs_dquot.h +++ b/fs/xfs/xfs_dquot.h @@ -59,6 +59,7 @@ typedef struct xfs_dquot { xfs_fileoff_t q_fileoffset; /* offset in quotas file */ struct xfs_dquot*q_gdquot; /* group dquot, hint only */ + struct xfs_dquot*q_pdquot; /* project dquot, hint only */ xfs_disk_dquot_t q_core; /* actual usage & quotas */ xfs_dq_logitem_t q_logitem; /* dquot log item */ xfs_qcnt_t q_res_bcount; /* total regular nblks used+reserved */ @@ -122,8 +123,9 @@ static inline int xfs_this_quota_on(struct xfs_mount *mp, int type) case XFS_DQ_USER: return XFS_IS_UQUOTA_ON(mp); case XFS_DQ_GROUP: + return XFS_IS_GQUOTA_ON(mp); case XFS_DQ_PROJ: - return XFS_IS_OQUOTA_ON(mp); + return XFS_IS_PQUOTA_ON(mp); default: return 0; } @@ -136,6 +138,7 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) case XFS_DQ_USER: return ip->i_udquot; case XFS_DQ_PROJ: + return ip->i_pdquot; case XFS_DQ_GROUP: return ip->i_gdquot; default: @@ -151,7 +154,9 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) #define XFS_DQ_TO_QINF(dqp) ((dqp)->q_mount->m_quotainfo) #define XFS_DQ_TO_QIP(dqp) (XFS_QM_ISUDQ(dqp) ? \ XFS_DQ_TO_QINF(dqp)->qi_uquotaip : \ - XFS_DQ_TO_QINF(dqp)->qi_gquotaip) + (XFS_QM_ISGDQ(dqp) ? \ + XFS_DQ_TO_QINF(dqp)->qi_gquotaip : \ + XFS_DQ_TO_QINF(dqp)->qi_pquotaip)) extern int xfs_qm_dqread(struct xfs_mount *, xfs_dqid_t, uint, uint, struct xfs_dquot **); diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index bf4fe86..e6e9a1a 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -706,6 +706,21 @@ xfs_qm_dqlookup( return 1; } +static struct xfs_dqhash *xfs_dq_hash(struct xfs_mount *mp, + xfs_dqid_t id, uint type) +{ + switch (type) { + case XFS_DQ_USER: + return (xfs_Gqm->qm_usr_dqhtable + XFS_DQ_HASHVAL(mp, id)); + case XFS_DQ_GROUP: + return (xfs_Gqm->qm_grp_dqhtable + XFS_DQ_HASHVAL(mp, id)); + case XFS_DQ_PROJ: + return (xfs_Gqm->qm_prj_dqhtable + XFS_DQ_HASHVAL(mp, id)); + default: + return NULL; + } +} + #pwhite: OK. This replaces XFS_DQ_HASH(). Fair enough. /* * Given the file system, inode OR id, and type (UDQUOT/GDQUOT), return a * a locked dquot, doing an allocation (if requested) as needed. @@ -734,7 +749,7 @@ xfs_qm_dqget( (! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) { return (ESRCH); } - h = XFS_DQ_HASH(mp, id, type); + h = xfs_dq_hash(mp, id, type); #ifdef DEBUG if (xfs_do_dqerror) { diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index 8c3e463..823f5d8 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c @@ -362,7 +362,7 @@ xfs_iget_cache_miss( } /* These values _must_ be set before releasing the radix tree lock! */ - ip->i_udquot = ip->i_gdquot = NULL; + ip->i_udquot = ip->i_gdquot = ip->i_pdquot = NULL; xfs_iflags_set(ip, XFS_INEW); spin_unlock(&pag->pag_ici_lock); diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 76f3ca5..abe9269 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -907,7 +907,7 @@ xfs_ioctl_setattr( struct xfs_trans *tp; unsigned int lock_flags = 0; struct xfs_dquot *udqp = NULL; - struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; #pwhite: Why does this remove *gdqp? Are we never going to use group quotas #through this ioctl() ? struct xfs_dquot *olddquot = NULL; int code; @@ -936,7 +936,7 @@ xfs_ioctl_setattr( if (XFS_IS_QUOTA_ON(mp) && (mask & FSX_PROJID)) { code = xfs_qm_vop_dqalloc(ip, ip->i_d.di_uid, ip->i_d.di_gid, fa->fsx_projid, - XFS_QMOPT_PQUOTA, &udqp, &gdqp); + XFS_QMOPT_PQUOTA, &udqp, NULL, &pdqp); if (code) return code; } @@ -973,7 +973,7 @@ xfs_ioctl_setattr( XFS_IS_PQUOTA_ON(mp) && xfs_get_projid(ip) != fa->fsx_projid) { ASSERT(tp); - code = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, + code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, pdqp, capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); if (code) /* out of quota */ @@ -1092,7 +1092,7 @@ xfs_ioctl_setattr( if (xfs_get_projid(ip) != fa->fsx_projid) { if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { olddquot = xfs_qm_vop_chown(tp, ip, - &ip->i_gdquot, gdqp); + &ip->i_pdquot, pdqp); } xfs_set_projid(ip, fa->fsx_projid); @@ -1139,13 +1139,13 @@ xfs_ioctl_setattr( */ xfs_qm_dqrele(olddquot); xfs_qm_dqrele(udqp); - xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); return code; error_return: xfs_qm_dqrele(udqp); - xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); xfs_trans_cancel(tp, 0); if (lock_flags) xfs_iunlock(ip, lock_flags); diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index ab30253..6959a48 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -569,7 +569,7 @@ xfs_setattr_nonsize( ASSERT(udqp == NULL); ASSERT(gdqp == NULL); error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip), - qflags, &udqp, &gdqp); + qflags, &udqp, &gdqp, NULL); if (error) return error; } @@ -604,7 +604,7 @@ xfs_setattr_nonsize( ((XFS_IS_UQUOTA_ON(mp) && iuid != uid) || (XFS_IS_GQUOTA_ON(mp) && igid != gid))) { ASSERT(tp); - error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, + error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp, NULL, capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); if (error) /* out of quota */ diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index bb8c2ac..47c33a5 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -74,7 +74,7 @@ static struct shrinker xfs_qm_shaker = { STATIC struct xfs_qm * xfs_Gqm_init(void) { - xfs_dqhash_t *udqhash, *gdqhash; + xfs_dqhash_t *udqhash, *gdqhash, *pdqhash; xfs_qm_t *xqm; size_t hsize; uint i; @@ -92,6 +92,10 @@ xfs_Gqm_init(void) if (!gdqhash) goto out_free_udqhash; + pdqhash = kmem_zalloc_large(hsize); + if (!pdqhash) + goto out_free_gdqhash; + hsize /= sizeof(xfs_dqhash_t); ndquot = hsize << 8; @@ -99,12 +103,15 @@ xfs_Gqm_init(void) xqm->qm_dqhashmask = hsize - 1; xqm->qm_usr_dqhtable = udqhash; xqm->qm_grp_dqhtable = gdqhash; + xqm->qm_prj_dqhtable = pdqhash; ASSERT(xqm->qm_usr_dqhtable != NULL); ASSERT(xqm->qm_grp_dqhtable != NULL); + ASSERT(xqm->qm_prj_dqhtable != NULL); for (i = 0; i < hsize; i++) { xfs_qm_list_init(&(xqm->qm_usr_dqhtable[i]), "uxdqh", i); xfs_qm_list_init(&(xqm->qm_grp_dqhtable[i]), "gxdqh", i); + xfs_qm_list_init(&(xqm->qm_prj_dqhtable[i]), "pxdqh", i); } /* @@ -141,6 +148,8 @@ xfs_Gqm_init(void) xqm->qm_nrefs = 0; return xqm; + out_free_gdqhash: + kmem_free_large(gdqhash); out_free_udqhash: kmem_free_large(udqhash); out: @@ -169,11 +178,14 @@ xfs_qm_destroy( for (i = 0; i < hsize; i++) { xfs_qm_list_destroy(&(xqm->qm_usr_dqhtable[i])); xfs_qm_list_destroy(&(xqm->qm_grp_dqhtable[i])); + xfs_qm_list_destroy(&(xqm->qm_prj_dqhtable[i])); } kmem_free_large(xqm->qm_usr_dqhtable); kmem_free_large(xqm->qm_grp_dqhtable); + kmem_free_large(xqm->qm_prj_dqhtable); xqm->qm_usr_dqhtable = NULL; xqm->qm_grp_dqhtable = NULL; + xqm->qm_prj_dqhtable = NULL; xqm->qm_dqhashmask = 0; kmem_free(xqm); @@ -378,6 +390,10 @@ xfs_qm_unmount_quotas( IRELE(mp->m_quotainfo->qi_gquotaip); mp->m_quotainfo->qi_gquotaip = NULL; } + if (mp->m_quotainfo->qi_pquotaip) { + IRELE(mp->m_quotainfo->qi_pquotaip); + mp->m_quotainfo->qi_pquotaip = NULL; + } } } @@ -450,7 +466,7 @@ xfs_qm_detach_gdquots( struct xfs_mount *mp) { struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_dquot *dqp, *gdqp; + struct xfs_dquot *dqp, *gdqp, *pdqp; again: ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); @@ -467,10 +483,15 @@ xfs_qm_detach_gdquots( gdqp = dqp->q_gdquot; if (gdqp) dqp->q_gdquot = NULL; + pdqp = dqp->q_pdquot; + if (pdqp) + dqp->q_pdquot = NULL; xfs_dqunlock(dqp); if (gdqp) xfs_qm_dqrele(gdqp); + if (pdqp) + xfs_qm_dqrele(pdqp); } } @@ -593,7 +614,10 @@ xfs_qm_dqattach_one( * be reclaimed as long as we have a ref from inode and we * hold the ilock. */ - dqp = udqhint->q_gdquot; + if (type == XFS_DQ_GROUP) + dqp = udqhint->q_gdquot; + else + dqp = udqhint->q_pdquot; if (dqp && be32_to_cpu(dqp->q_core.d_id) == id) { ASSERT(*IO_idqpp == NULL); @@ -636,28 +660,29 @@ xfs_qm_dqattach_one( /* - * Given a udquot and gdquot, attach a ptr to the group dquot in the + * Given a udquot and gdquot, attach a ptr to the group/project dquot in the * udquot as a hint for future lookups. */ STATIC void -xfs_qm_dqattach_grouphint( - xfs_dquot_t *udq, - xfs_dquot_t *gdq) +xfs_qm_dqattach_grouphint(xfs_inode_t *ip, int type) { - xfs_dquot_t *tmp; + xfs_dquot_t **tmp, *gpdq, *tmp1, *udq = ip->i_udquot; + gpdq = (type == XFS_DQ_GROUP) ? ip->i_gdquot : ip->i_pdquot; xfs_dqlock(udq); - tmp = udq->q_gdquot; - if (tmp) { - if (tmp == gdq) + tmp = (type == XFS_DQ_GROUP) ? &udq->q_gdquot : &udq->q_pdquot; + + if (*tmp) { + if (*tmp == gpdq) goto done; - udq->q_gdquot = NULL; - xfs_qm_dqrele(tmp); + tmp1 = *tmp; + *tmp = NULL; + xfs_qm_dqrele(tmp1); } - udq->q_gdquot = xfs_qm_dqhold(gdq); + *tmp = xfs_qm_dqhold(gpdq); done: xfs_dqunlock(udq); } @@ -698,12 +723,8 @@ xfs_qm_dqattach_locked( } ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - if (XFS_IS_OQUOTA_ON(mp)) { - error = XFS_IS_GQUOTA_ON(mp) ? - xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, - flags & XFS_QMOPT_DQALLOC, - ip->i_udquot, &ip->i_gdquot) : - xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, + if (XFS_IS_GQUOTA_ON(mp)) { + error = xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, flags & XFS_QMOPT_DQALLOC, ip->i_udquot, &ip->i_gdquot); #pwhite: Shouldn't this code check for PQUOTA_ON and do the appropriate attach? /* @@ -715,14 +736,28 @@ xfs_qm_dqattach_locked( nquotas++; } + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + if (XFS_IS_PQUOTA_ON(mp)) { + error = xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, + flags & XFS_QMOPT_DQALLOC, + ip->i_udquot, &ip->i_pdquot); + /* + * Don't worry about the udquot that we may have + * attached above. It'll get detached, if not already. + */ + if (error) + goto done; + nquotas++; + } + #pwhite: Oh, there it is. That'll teach me to hold my horses. /* - * Attach this group quota to the user quota as a hint. + * Attach this group/project quota to the user quota as a hint. * This WON'T, in general, result in a thrash. */ - if (nquotas == 2) { + if (nquotas > 1 && ip->i_udquot) { ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - ASSERT(ip->i_udquot); - ASSERT(ip->i_gdquot); + ASSERT(ip->i_gdquot || !XFS_IS_GQUOTA_ON(mp)); + ASSERT(ip->i_pdquot || !XFS_IS_PQUOTA_ON(mp)); /* * We do not have i_udquot locked at this point, but this check @@ -730,8 +765,13 @@ xfs_qm_dqattach_locked( * 100% all the time. It is just a hint, and this will * succeed in general. */ - if (ip->i_udquot->q_gdquot != ip->i_gdquot) - xfs_qm_dqattach_grouphint(ip->i_udquot, ip->i_gdquot); + if (XFS_IS_GQUOTA_ON(mp) && + ip->i_udquot->q_gdquot != ip->i_gdquot) + xfs_qm_dqattach_grouphint(ip, XFS_DQ_GROUP); + + if (XFS_IS_PQUOTA_ON(mp) && + ip->i_udquot->q_pdquot != ip->i_pdquot) + xfs_qm_dqattach_grouphint(ip, XFS_DQ_PROJ); } done: @@ -739,8 +779,10 @@ xfs_qm_dqattach_locked( if (!error) { if (XFS_IS_UQUOTA_ON(mp)) ASSERT(ip->i_udquot); - if (XFS_IS_OQUOTA_ON(mp)) + if (XFS_IS_GQUOTA_ON(mp)) ASSERT(ip->i_gdquot); + if (XFS_IS_PQUOTA_ON(mp)) + ASSERT(ip->i_pdquot); } ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); #endif @@ -770,7 +812,7 @@ void xfs_qm_dqdetach( xfs_inode_t *ip) { - if (!(ip->i_udquot || ip->i_gdquot)) + if (!(ip->i_udquot || ip->i_gdquot || ip->i_pdquot)) return; trace_xfs_dquot_dqdetach(ip); @@ -785,6 +827,10 @@ xfs_qm_dqdetach( xfs_qm_dqrele(ip->i_gdquot); ip->i_gdquot = NULL; } + if (ip->i_pdquot) { + xfs_qm_dqrele(ip->i_pdquot); + ip->i_pdquot = NULL; + } } /* @@ -936,6 +982,10 @@ xfs_qm_destroy_quotainfo( IRELE(qi->qi_gquotaip); qi->qi_gquotaip = NULL; } + if (qi->qi_pquotaip) { + IRELE(qi->qi_pquotaip); + qi->qi_pquotaip = NULL; + } mutex_destroy(&qi->qi_quotaofflock); kmem_free(qi); mp->m_quotainfo = NULL; @@ -1413,7 +1463,7 @@ xfs_qm_quotacheck( int done, count, error; xfs_ino_t lastino; size_t structsz; - xfs_inode_t *uip, *gip; + xfs_inode_t *uip, *gip, *pip; uint flags; count = INT_MAX; @@ -1421,7 +1471,8 @@ xfs_qm_quotacheck( lastino = 0; flags = 0; - ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); + ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip + || mp->m_quotainfo->qi_pquotaip); ASSERT(XFS_IS_QUOTA_RUNNING(mp)); /* @@ -1447,12 +1498,18 @@ xfs_qm_quotacheck( gip = mp->m_quotainfo->qi_gquotaip; if (gip) { - error = xfs_qm_dqiterate(mp, gip, XFS_IS_GQUOTA_ON(mp) ? - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); + error = xfs_qm_dqiterate(mp, gip, XFS_QMOPT_GQUOTA); if (error) goto error_return; - flags |= XFS_IS_GQUOTA_ON(mp) ? - XFS_GQUOTA_CHKD : XFS_PQUOTA_CHKD; + flags |= XFS_GQUOTA_CHKD; + } + + pip = mp->m_quotainfo->qi_pquotaip; + if (pip) { + error = xfs_qm_dqiterate(mp, pip, XFS_QMOPT_PQUOTA); + if (error) + goto error_return; + flags |= XFS_PQUOTA_CHKD; } do { @@ -1533,13 +1590,13 @@ STATIC int xfs_qm_init_quotainos( xfs_mount_t *mp) { - xfs_inode_t *uip, *gip; + xfs_inode_t *uip, *gip, *pip; int error; __int64_t sbflags; uint flags; ASSERT(mp->m_quotainfo); - uip = gip = NULL; + uip = gip = pip = NULL; sbflags = 0; flags = 0; @@ -1554,7 +1611,7 @@ xfs_qm_init_quotainos( 0, 0, &uip))) return XFS_ERROR(error); } - if (XFS_IS_OQUOTA_ON(mp) && + if (XFS_IS_GQUOTA_ON(mp) && mp->m_sb.sb_gquotino != NULLFSINO) { ASSERT(mp->m_sb.sb_gquotino > 0); if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, @@ -1564,6 +1621,18 @@ xfs_qm_init_quotainos( return XFS_ERROR(error); } } + if (XFS_IS_PQUOTA_ON(mp) && + mp->m_sb.sb_pquotino != NULLFSINO) { + ASSERT(mp->m_sb.sb_pquotino > 0); + if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip))) { + if (uip) + IRELE(uip); + if (gip) + IRELE(gip); + return XFS_ERROR(error); + } + } } else { flags |= XFS_QMOPT_SBVERSION; sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | @@ -1571,7 +1640,7 @@ xfs_qm_init_quotainos( } /* - * Create the two inodes, if they don't exist already. The changes + * Create the three inodes, if they don't exist already. The changes * made above will get added to a transaction and logged in one of * the qino_alloc calls below. If the device is readonly, * temporarily switch to read-write to do this. @@ -1584,11 +1653,10 @@ xfs_qm_init_quotainos( flags &= ~XFS_QMOPT_SBVERSION; } - if (XFS_IS_OQUOTA_ON(mp) && gip == NULL) { - flags |= (XFS_IS_GQUOTA_ON(mp) ? - XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); + if (XFS_IS_GQUOTA_ON(mp) && gip == NULL) { error = xfs_qm_qino_alloc(mp, &gip, - sbflags | XFS_SB_GQUOTINO, flags); + sbflags | XFS_SB_GQUOTINO, + flags | XFS_QMOPT_GQUOTA); if (error) { if (uip) IRELE(uip); @@ -1596,9 +1664,23 @@ xfs_qm_init_quotainos( return XFS_ERROR(error); } } + if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { + error = xfs_qm_qino_alloc(mp, &pip, + sbflags | XFS_SB_GQUOTINO, + flags | XFS_QMOPT_PQUOTA); + if (error) { + if (uip) + IRELE(uip); + if (gip) + IRELE(gip); + + return XFS_ERROR(error); + } + } mp->m_quotainfo->qi_uquotaip = uip; mp->m_quotainfo->qi_gquotaip = gip; + mp->m_quotainfo->qi_pquotaip = pip; return 0; } @@ -1862,10 +1944,11 @@ xfs_qm_vop_dqalloc( prid_t prid, uint flags, struct xfs_dquot **O_udqpp, - struct xfs_dquot **O_gdqpp) + struct xfs_dquot **O_gdqpp, + struct xfs_dquot **O_pdqpp) { struct xfs_mount *mp = ip->i_mount; - struct xfs_dquot *uq, *gq; + struct xfs_dquot *uq, *gq, *pq; int error; uint lockflags; @@ -1890,7 +1973,7 @@ xfs_qm_vop_dqalloc( } } - uq = gq = NULL; + uq = gq = pq = NULL; if ((flags & XFS_QMOPT_UQUOTA) && XFS_IS_UQUOTA_ON(mp)) { if (ip->i_d.di_uid != uid) { /* @@ -1946,25 +2029,28 @@ xfs_qm_vop_dqalloc( ASSERT(ip->i_gdquot); gq = xfs_qm_dqhold(ip->i_gdquot); } - } else if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { + } + if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { if (xfs_get_projid(ip) != prid) { xfs_iunlock(ip, lockflags); if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, XFS_DQ_PROJ, XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, - &gq))) { + &pq))) { if (uq) xfs_qm_dqrele(uq); + if (gq) + xfs_qm_dqrele(gq); ASSERT(error != ENOENT); return (error); } - xfs_dqunlock(gq); + xfs_dqunlock(pq); lockflags = XFS_ILOCK_SHARED; xfs_ilock(ip, lockflags); } else { - ASSERT(ip->i_gdquot); - gq = xfs_qm_dqhold(ip->i_gdquot); + ASSERT(ip->i_pdquot); + pq = xfs_qm_dqhold(ip->i_pdquot); } } if (uq) @@ -1979,6 +2065,10 @@ xfs_qm_vop_dqalloc( *O_gdqpp = gq; else if (gq) xfs_qm_dqrele(gq); + if (O_pdqpp) + *O_pdqpp = pq; + else if (pq) + xfs_qm_dqrele(pq); return 0; } @@ -2031,11 +2121,13 @@ xfs_qm_vop_chown_reserve( xfs_inode_t *ip, xfs_dquot_t *udqp, xfs_dquot_t *gdqp, + xfs_dquot_t *pdqp, uint flags) { xfs_mount_t *mp = ip->i_mount; uint delblks, blkflags, prjflags = 0; - xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; + xfs_dquot_t *unresudq, *unresgdq, *unrespdq; + xfs_dquot_t *delblksudq, *delblksgdq, *delblkspdq; int error; @@ -2043,7 +2135,8 @@ xfs_qm_vop_chown_reserve( ASSERT(XFS_IS_QUOTA_RUNNING(mp)); delblks = ip->i_delayed_blks; - delblksudq = delblksgdq = unresudq = unresgdq = NULL; + delblksudq = delblksgdq = delblkspdq = NULL; + unresudq = unresgdq = unrespdq = NULL; blkflags = XFS_IS_REALTIME_INODE(ip) ? XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS; @@ -2060,25 +2153,28 @@ xfs_qm_vop_chown_reserve( unresudq = ip->i_udquot; } } - if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { - if (XFS_IS_PQUOTA_ON(ip->i_mount) && - xfs_get_projid(ip) != be32_to_cpu(gdqp->q_core.d_id)) - prjflags = XFS_QMOPT_ENOSPC; - - if (prjflags || - (XFS_IS_GQUOTA_ON(ip->i_mount) && - ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { - delblksgdq = gdqp; - if (delblks) { - ASSERT(ip->i_gdquot); - unresgdq = ip->i_gdquot; - } + if (XFS_IS_GQUOTA_ON(ip->i_mount) && gdqp && + ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id)) { + delblksgdq = gdqp; + if (delblks) { + ASSERT(ip->i_gdquot); + unresgdq = ip->i_gdquot; + } + } + + if (XFS_IS_PQUOTA_ON(ip->i_mount) && pdqp && + xfs_get_projid(ip) != be32_to_cpu(pdqp->q_core.d_id)) { + prjflags = XFS_QMOPT_ENOSPC; + delblkspdq = pdqp; + if (delblks) { + ASSERT(ip->i_pdquot); + unrespdq = ip->i_pdquot; } } if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, - delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, - flags | blkflags | prjflags))) + delblksudq, delblksgdq, delblkspdq, ip->i_d.di_nblocks, + 1, flags | blkflags | prjflags))) return (error); /* @@ -2091,15 +2187,16 @@ xfs_qm_vop_chown_reserve( /* * Do the reservations first. Unreservation can't fail. */ - ASSERT(delblksudq || delblksgdq); - ASSERT(unresudq || unresgdq); + ASSERT(delblksudq || delblksgdq || delblkspdq); + ASSERT(unresudq || unresgdq || unrespdq); if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, - delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, + delblksudq, delblksgdq, delblkspdq, + (xfs_qcnt_t)delblks, 0, flags | blkflags | prjflags))) return (error); xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, - unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, - blkflags); + unresudq, unresgdq, unrespdq, + -((xfs_qcnt_t)delblks), 0, blkflags); } return (0); @@ -2138,7 +2235,8 @@ xfs_qm_vop_create_dqattach( struct xfs_trans *tp, struct xfs_inode *ip, struct xfs_dquot *udqp, - struct xfs_dquot *gdqp) + struct xfs_dquot *gdqp, + struct xfs_dquot *pdqp) { struct xfs_mount *mp = tp->t_mountp; @@ -2158,13 +2256,18 @@ xfs_qm_vop_create_dqattach( } if (gdqp) { ASSERT(ip->i_gdquot == NULL); - ASSERT(XFS_IS_OQUOTA_ON(mp)); - ASSERT((XFS_IS_GQUOTA_ON(mp) ? - ip->i_d.di_gid : xfs_get_projid(ip)) == - be32_to_cpu(gdqp->q_core.d_id)); - + ASSERT(XFS_ISGOQUOTA_ON(mp)); + ASSERT(ip->i_d.di_gid == be32_to_cpu(gdqp->q_core.d_id)); ip->i_gdquot = xfs_qm_dqhold(gdqp); xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); } + if (pdqp) { + ASSERT(ip->i_pdquot == NULL); + ASSERT(XFS_IS_PQUOTA_ON(mp)); + ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); + + ip->i_pdquot = xfs_qm_dqhold(pdqp); + xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1); + } } diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c index a0a829a..c9b05f1 100644 --- a/fs/xfs/xfs_qm_bhv.c +++ b/fs/xfs/xfs_qm_bhv.c @@ -117,7 +117,7 @@ xfs_qm_newmount( (pquotaondisk && !XFS_IS_PQUOTA_ON(mp)) || (!pquotaondisk && XFS_IS_PQUOTA_ON(mp)) || (gquotaondisk && !XFS_IS_GQUOTA_ON(mp)) || - (!gquotaondisk && XFS_IS_OQUOTA_ON(mp))) && + (!gquotaondisk && XFS_IS_GQUOTA_ON(mp))) && xfs_dev_is_read_only(mp, "changing quota state")) { xfs_warn(mp, "please mount with%s%s%s%s.", (!quotaondisk ? "out quota" : ""), diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index d43c68c..9849828 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -123,7 +123,8 @@ xfs_qm_scall_quotaoff( dqtype |= XFS_QMOPT_GQUOTA; flags |= (XFS_GQUOTA_CHKD | XFS_GQUOTA_ENFD); inactivate_flags |= XFS_GQUOTA_ACTIVE; - } else if (flags & XFS_PQUOTA_ACCT) { + } + if (flags & XFS_PQUOTA_ACCT) { dqtype |= XFS_QMOPT_PQUOTA; flags |= (XFS_PQUOTA_CHKD | XFS_PQUOTA_ENFD); inactivate_flags |= XFS_PQUOTA_ACTIVE; @@ -223,10 +224,14 @@ xfs_qm_scall_quotaoff( IRELE(q->qi_uquotaip); q->qi_uquotaip = NULL; } - if ((dqtype & (XFS_QMOPT_GQUOTA|XFS_QMOPT_PQUOTA)) && q->qi_gquotaip) { + if ((dqtype & XFS_QMOPT_GQUOTA) && q->qi_gquotaip) { IRELE(q->qi_gquotaip); q->qi_gquotaip = NULL; } + if ((dqtype & XFS_QMOPT_PQUOTA) && q->qi_pquotaip) { + IRELE(q->qi_pquotaip); + q->qi_pquotaip = NULL; + } out_unlock: mutex_unlock(&q->qi_quotaofflock); @@ -878,9 +883,11 @@ xfs_dqrele_inode( { /* skip quota inodes */ if (ip == ip->i_mount->m_quotainfo->qi_uquotaip || - ip == ip->i_mount->m_quotainfo->qi_gquotaip) { + ip == ip->i_mount->m_quotainfo->qi_gquotaip || + ip == ip->i_mount->m_quotainfo->qi_pquotaip) { ASSERT(ip->i_udquot == NULL); ASSERT(ip->i_gdquot == NULL); + ASSERT(ip->i_pdquot == NULL); return 0; } @@ -889,10 +896,14 @@ xfs_dqrele_inode( xfs_qm_dqrele(ip->i_udquot); ip->i_udquot = NULL; } - if (flags & (XFS_PQUOTA_ACCT|XFS_GQUOTA_ACCT) && ip->i_gdquot) { + if ((flags & XFS_GQUOTA_ACCT) && ip->i_gdquot) { xfs_qm_dqrele(ip->i_gdquot); ip->i_gdquot = NULL; } + if ((flags & XFS_PQUOTA_ACCT) && ip->i_pdquot) { + xfs_qm_dqrele(ip->i_pdquot); + ip->i_pdquot = NULL; + } xfs_iunlock(ip, XFS_ILOCK_EXCL); return 0; } diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 01de9f9..b0a1266 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -539,14 +539,13 @@ xfs_showargs( else if (mp->m_qflags & XFS_UQUOTA_ACCT) seq_puts(m, "," MNTOPT_UQUOTANOENF); - /* Either project or group quotas can be active, not both */ - if (mp->m_qflags & XFS_PQUOTA_ACCT) { if (mp->m_qflags & XFS_PQUOTA_ENFD) seq_puts(m, "," MNTOPT_PRJQUOTA); else seq_puts(m, "," MNTOPT_PQUOTANOENF); - } else if (mp->m_qflags & XFS_GQUOTA_ACCT) { + } + if (mp->m_qflags & XFS_GQUOTA_ACCT) { if (mp->m_qflags & XFS_GQUOTA_ENFD) seq_puts(m, "," MNTOPT_GRPQUOTA); else diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index bea957d..48003d3 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -115,7 +115,7 @@ xfs_trans_dup_dqinfo( if(otp->t_flags & XFS_TRANS_DQ_DIRTY) ntp->t_flags |= XFS_TRANS_DQ_DIRTY; - for (j = 0; j < 2; j++) { + for (j = 0; j < 3; j++) { /* 0 - usr, 1 - grp, 2 - prj */ for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { if (oqa[i].qt_dquot == NULL) break; @@ -140,8 +140,13 @@ xfs_trans_dup_dqinfo( oq->qt_ino_res = oq->qt_ino_res_used; } - oqa = otp->t_dqinfo->dqa_grpdquots; - nqa = ntp->t_dqinfo->dqa_grpdquots; + if (oqa == otp->t_dqinfo->dqa_usrdquots) { + oqa = otp->t_dqinfo->dqa_grpdquots; + nqa = ntp->t_dqinfo->dqa_grpdquots; + } else { + oqa = otp->t_dqinfo->dqa_prjdquots; + nqa = ntp->t_dqinfo->dqa_prjdquots; + } } } @@ -168,8 +173,10 @@ xfs_trans_mod_dquot_byino( if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot) (void) xfs_trans_mod_dquot(tp, ip->i_udquot, field, delta); - if (XFS_IS_OQUOTA_ON(mp) && ip->i_gdquot) + if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot) (void) xfs_trans_mod_dquot(tp, ip->i_gdquot, field, delta); + if (XFS_IS_PQUOTA_ON(mp) && ip->i_pdquot) + (void) xfs_trans_mod_dquot(tp, ip->i_pdquot, field, delta); } STATIC xfs_dqtrx_t * @@ -180,15 +187,20 @@ xfs_trans_get_dqtrx( int i; xfs_dqtrx_t *qa; - qa = XFS_QM_ISUDQ(dqp) ? - tp->t_dqinfo->dqa_usrdquots : tp->t_dqinfo->dqa_grpdquots; + if (XFS_QM_ISUDQ(dqp)) + qa = tp->t_dqinfo->dqa_usrdquots; + else if (XFS_QM_ISGDQ(dqp)) + qa = tp->t_dqinfo->dqa_grpdquots; + else if (XFS_QM_ISPDQ(dqp)) + qa = tp->t_dqinfo->dqa_prjdquots; + else + return NULL; for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { if (qa[i].qt_dquot == NULL || qa[i].qt_dquot == dqp) return &qa[i]; } - return NULL; } @@ -342,9 +354,12 @@ xfs_trans_apply_dquot_deltas( ASSERT(tp->t_dqinfo); qa = tp->t_dqinfo->dqa_usrdquots; - for (j = 0; j < 2; j++) { + for (j = 0; j < 3; j++) { /* 0 - usr, 1 - grp, 2 - prj */ if (qa[0].qt_dquot == NULL) { - qa = tp->t_dqinfo->dqa_grpdquots; + if (qa == tp->t_dqinfo->dqa_usrdquots) + qa = tp->t_dqinfo->dqa_grpdquots; + else + qa = tp->t_dqinfo->dqa_prjdquots; continue; } @@ -498,9 +513,12 @@ xfs_trans_apply_dquot_deltas( be64_to_cpu(dqp->q_core.d_rtbcount)); } /* - * Do the group quotas next + * Do the group quotas or project quotas next */ - qa = tp->t_dqinfo->dqa_grpdquots; + if (qa == tp->t_dqinfo->dqa_usrdquots) + qa = tp->t_dqinfo->dqa_grpdquots; + else + qa = tp->t_dqinfo->dqa_prjdquots; } } @@ -525,7 +543,7 @@ xfs_trans_unreserve_and_mod_dquots( qa = tp->t_dqinfo->dqa_usrdquots; - for (j = 0; j < 2; j++) { + for (j = 0; j < 3; j++) { /* 0 - usr, 1 - grp, 2 - prj */ for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { qtrx = &qa[i]; /* @@ -567,7 +585,10 @@ xfs_trans_unreserve_and_mod_dquots( xfs_dqunlock(dqp); } - qa = tp->t_dqinfo->dqa_grpdquots; + if (qa == tp->t_dqinfo->dqa_usrdquots) + qa = tp->t_dqinfo->dqa_grpdquots; + else + qa = tp->t_dqinfo->dqa_prjdquots; } } @@ -737,8 +758,8 @@ error_return: /* * Given dquot(s), make disk block and/or inode reservations against them. - * The fact that this does the reservation against both the usr and - * grp/prj quotas is important, because this follows a both-or-nothing + * The fact that this does the reservation against user, group and + * project quotas is important, because this follows a all-or-nothing * approach. * * flags = XFS_QMOPT_FORCE_RES evades limit enforcement. Used by chown. @@ -753,6 +774,7 @@ xfs_trans_reserve_quota_bydquots( xfs_mount_t *mp, xfs_dquot_t *udqp, xfs_dquot_t *gdqp, + xfs_dquot_t *pdqp, long nblks, long ninos, uint flags) @@ -790,6 +812,24 @@ xfs_trans_reserve_quota_bydquots( } } + if (pdqp) { + error = xfs_trans_dqresv(tp, mp, pdqp, nblks, ninos, flags); + if (error) { + /* + * can't do it, so backout previous reservation + */ + if (resvd) { + flags |= XFS_QMOPT_FORCE_RES; + xfs_trans_dqresv(tp, mp, udqp, + -nblks, -ninos, flags); + if (gdqp) + xfs_trans_dqresv(tp, mp, gdqp, + -nblks, -ninos, flags); + } + return error; + } + } + /* * Didn't change anything critical, so, no need to log */ @@ -831,6 +871,7 @@ xfs_trans_reserve_quota_nblks( */ return xfs_trans_reserve_quota_bydquots(tp, mp, ip->i_udquot, ip->i_gdquot, + ip->i_pdquot, nblks, ninos, flags); } diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 0cf52da..62d8689 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -851,6 +851,7 @@ xfs_create( prid_t prid; struct xfs_dquot *udqp = NULL; struct xfs_dquot *gdqp = NULL; + struct xfs_dquot *pdqp = NULL; uint resblks; uint log_res; uint log_count; @@ -869,7 +870,7 @@ xfs_create( * Make sure that we have allocated dquot(s) on disk. */ error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); if (error) return error; @@ -929,7 +930,8 @@ xfs_create( /* * Reserve disk quota and the inode. */ - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, + pdqp, resblks, 1, 0); if (error) goto out_trans_cancel; @@ -993,7 +995,7 @@ xfs_create( * These ids of the inode couldn't have changed since the new * inode has been locked ever since it was created. */ - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); error = xfs_bmap_finish(&tp, &free_list, &committed); if (error) @@ -1005,6 +1007,7 @@ xfs_create( xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); *ipp = ip; return 0; @@ -1026,6 +1029,7 @@ xfs_create( xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); if (unlock_dp_on_error) xfs_iunlock(dp, XFS_ILOCK_EXCL); @@ -1516,7 +1520,7 @@ xfs_symlink( int n; xfs_buf_t *bp; prid_t prid; - struct xfs_dquot *udqp, *gdqp; + struct xfs_dquot *udqp, *gdqp, *pdqp; uint resblks; *ipp = NULL; @@ -1546,7 +1550,7 @@ xfs_symlink( * Make sure that we have allocated dquot(s) on disk. */ error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid, - XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp); + XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp, &pdqp); if (error) goto std_return; @@ -1587,7 +1591,8 @@ xfs_symlink( /* * Reserve disk quota : blocks and inode. */ - error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0); + error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, + pdqp, resblks, 1, 0); if (error) goto error_return; @@ -1625,7 +1630,7 @@ xfs_symlink( /* * Also attach the dquot(s) to it, if applicable. */ - xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); + xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); if (resblks) resblks -= XFS_IALLOC_SPACE_RES(mp); @@ -1709,6 +1714,7 @@ xfs_symlink( error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); *ipp = ip; return 0; @@ -1722,6 +1728,7 @@ xfs_symlink( xfs_trans_cancel(tp, cancel_flags); xfs_qm_dqrele(udqp); xfs_qm_dqrele(gdqp); + xfs_qm_dqrele(pdqp); if (unlock_dp_on_error) xfs_iunlock(dp, XFS_ILOCK_EXCL); @@ -2188,7 +2195,7 @@ xfs_free_file_space( } xfs_ilock(ip, XFS_ILOCK_EXCL); error = xfs_trans_reserve_quota(tp, mp, - ip->i_udquot, ip->i_gdquot, + ip->i_udquot, ip->i_gdquot, ip->i_pdquot, resblks, 0, XFS_QMOPT_RES_REGBLKS); if (error) goto error1; -- 1.7.1 From pwhite@sgi.com Tue Jan 31 15:42:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63, LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cthulhu.engr.sgi.com (cthulhu.engr.sgi.com [150.166.39.100]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VLgAka101433 for ; Tue, 31 Jan 2012 15:42:10 -0600 Received: from caliban.corp.sgi.com ([10.202.8.38]) by cthulhu.engr.sgi.com (8.12.10/8.12.10/SuSE Linux 0.7) with ESMTP id q0VLg9Po020776 for ; Tue, 31 Jan 2012 13:42:09 -0800 Date: Tue, 31 Jan 2012 13:42:15 -0800 From: Phil White To: xfs@oss.sgi.com Subject: [NOTES] [RFC v3 PATCH 3/4] xfs: Add pquotaino to on-disk super block Message-ID: <20120131214215.GE2569@caliban.corp.sgi.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173216.31640.48107.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173216.31640.48107.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) #pwhite: This starts to remove the OQUOTA setting from the old superblock, so #that we can support group & project quotas simultaneously. Add a new field to the superblock to add support for separate pquota with a specific version. No change made yet to gather both project and group quota with quotactl. Signed-off-by: Chandra Seetharaman Reviewed-by: Phil White --- fs/xfs/xfs_itable.c | 3 +- fs/xfs/xfs_mount.c | 101 ++++++++++++++++++++++++++++++++------------ fs/xfs/xfs_qm.c | 18 +++++--- fs/xfs/xfs_qm_syscalls.c | 30 ++++++++++--- fs/xfs/xfs_quota.h | 8 ---- fs/xfs/xfs_sb.h | 20 +++++++-- fs/xfs/xfs_super.c | 15 ++++--- fs/xfs/xfs_trans_dquot.c | 4 +- include/linux/dqblk_xfs.h | 1 + 9 files changed, 139 insertions(+), 61 deletions(-) diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index 8655280..f17e3bb 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h @@ -155,6 +155,7 @@ typedef struct fs_quota_stat { __s8 qs_pad; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ +#define qs_pquota qs_gquota __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index 1c61c9b..6e218ba 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h @@ -278,14 +278,6 @@ typedef struct xfs_qoff_logformat { (XFS_IS_PQUOTA_ON(mp) && \ (mp->m_sb.sb_qflags & XFS_PQUOTA_CHKD) == 0)) -#define XFS_MOUNT_QUOTA_SET1 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ - XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ - XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD) - -#define XFS_MOUNT_QUOTA_SET2 (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ - XFS_UQUOTA_CHKD|XFS_GQUOTA_ACCT|\ - XFS_GQUOTA_ENFD|XFS_GQUOTA_CHKD) - #define XFS_MOUNT_QUOTA_ALL (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD|\ XFS_UQUOTA_CHKD|XFS_PQUOTA_ACCT|\ XFS_PQUOTA_ENFD|XFS_PQUOTA_CHKD|\ diff --git a/fs/xfs/xfs_sb.h b/fs/xfs/xfs_sb.h index 5242512..55f63ed 100644 --- a/fs/xfs/xfs_sb.h +++ b/fs/xfs/xfs_sb.h @@ -81,11 +81,15 @@ struct xfs_mount; #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ #define XFS_SB_VERSION2_PARENTBIT 0x00000010 /* parent pointers */ #define XFS_SB_VERSION2_PROJID32BIT 0x00000080 /* 32 bit project id */ +#define XFS_SB_VERSION2_NO_OQUOTA 0x00000100 /* No OQUOTA and * + * separate project * + * quota field */ #define XFS_SB_VERSION2_OKREALFBITS \ (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ XFS_SB_VERSION2_ATTR2BIT | \ - XFS_SB_VERSION2_PROJID32BIT) + XFS_SB_VERSION2_PROJID32BIT | \ + XFS_SB_VERSION2_NO_OQUOTA) #define XFS_SB_VERSION2_OKSASHFBITS \ (0) #define XFS_SB_VERSION2_OKREALBITS \ @@ -140,7 +144,6 @@ typedef struct xfs_sb { */ xfs_ino_t sb_uquotino; /* user quota inode */ xfs_ino_t sb_gquotino; /* group quota inode */ -#define sb_pquotino sb_gquotino __uint16_t sb_qflags; /* quota flags */ __uint8_t sb_flags; /* misc. flags */ __uint8_t sb_shared_vn; /* shared version number */ @@ -160,6 +163,7 @@ typedef struct xfs_sb { * it for anything else. */ __uint32_t sb_bad_features2; + xfs_ino_t sb_pquotino; /* project quota inode */ #pwhite: Ok, now we're splitting the two gquota & pquota inodes up. We saw some #of this in patch 2 of this series. /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -230,6 +234,7 @@ typedef struct xfs_dsb { * it for anything else. */ __be32 sb_bad_features2; + __be64 sb_pquotino; /* project quota inode */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -250,7 +255,7 @@ typedef enum { XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, - XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_PQUOTINO, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -276,6 +281,7 @@ typedef enum { #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) +#define XFS_SB_PQUOTINO XFS_SB_MVAL(PQUOTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) #define XFS_SB_MOD_BITS \ @@ -283,7 +289,7 @@ typedef enum { XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ - XFS_SB_BAD_FEATURES2) + XFS_SB_BAD_FEATURES2 | XFS_SB_PQUOTINO) /* @@ -504,6 +510,12 @@ static inline int xfs_sb_version_hasprojid32bit(xfs_sb_t *sbp) (sbp->sb_features2 & XFS_SB_VERSION2_PROJID32BIT); } +static inline int xfs_sb_version_has_no_oquota(xfs_sb_t *sbp) +{ + return xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_NO_OQUOTA); +} + /* * end of superblock version macros */ diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index 751e94f..0ea4361 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -43,7 +43,8 @@ xfs_internal_inum( { return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || (xfs_sb_version_hasquota(&mp->m_sb) && - (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); + (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino))); } /* diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 64313e4..2a70acb 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -108,6 +108,7 @@ static const struct { { offsetof(xfs_sb_t, sb_logsunit), 0 }, { offsetof(xfs_sb_t, sb_features2), 0 }, { offsetof(xfs_sb_t, sb_bad_features2), 0 }, + { offsetof(xfs_sb_t, sb_pquotino), 0 }, { sizeof(xfs_sb_t), 0 } }; #pwhite: xfs_sb_(from|to)_disk() contain the new superblock format in which #we do away with OQUOTA flags to represent [PG]QUOTA. @@ -593,20 +594,6 @@ xfs_sb_from_disk( to->sb_uquotino = be64_to_cpu(from->sb_uquotino); to->sb_gquotino = be64_to_cpu(from->sb_gquotino); to->sb_qflags = be16_to_cpu(from->sb_qflags); - if ((to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) && - (to->sb_qflags & (XFS_PQUOTA_ENFD |XFS_GQUOTA_ENFD | - XFS_PQUOTA_CHKD| XFS_GQUOTA_CHKD))) { - xfs_notice(mp, "Super block has XFS_OQUOTA bits along with " - "XFS_PQUOTA and/or XFS_GQUOTA bits. Fixing it.\n"); - } - if (to->sb_qflags & XFS_OQUOTA_ENFD) - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? - XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; - if (to->sb_qflags & XFS_OQUOTA_CHKD) - to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? - XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; - to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); - to->sb_flags = from->sb_flags; to->sb_shared_vn = from->sb_shared_vn; to->sb_inoalignmt = be32_to_cpu(from->sb_inoalignmt); @@ -618,6 +605,33 @@ xfs_sb_from_disk( to->sb_logsunit = be32_to_cpu(from->sb_logsunit); to->sb_features2 = be32_to_cpu(from->sb_features2); to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); + + if (xfs_sb_version_has_no_oquota(to)) { + if (to->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { + xfs_notice(mp, "Super block has XFS_OQUOTA bits with " + "version NO_OQUOTA. Fixing it.\n"); + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + } + to->sb_pquotino = be64_to_cpu(from->sb_pquotino); + } else { + if (to->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { + xfs_notice(mp, "Super block has XFS_[G|P]UOTA bits in " + "older version. Fixing it.\n"); + to->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | + XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD); + } + if (to->sb_qflags & XFS_OQUOTA_ENFD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_ENFD : XFS_GQUOTA_ENFD; + if (to->sb_qflags & XFS_OQUOTA_CHKD) + to->sb_qflags |= (to->sb_qflags & XFS_PQUOTA_ACCT) ? + XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD; + to->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD); + + if (to->sb_qflags & XFS_PQUOTA_ACCT) + to->sb_pquotino = to->sb_gquotino; + } } /* @@ -636,26 +650,37 @@ xfs_sb_to_disk( xfs_sb_field_t f; int first; int size; - __be16 saved_qflags; + __be16 saved_qflags = 0; ASSERT(fields); if (!fields) return; - /* - * in-core version of qflags do not have XFS_OQUOTA.*, whereas the - * on-disk version does. So, save the in-core sb_qflags and restore - * it after we modify and copy it to the buffer to be copied to - * disk. - */ - saved_qflags = from->sb_qflags; - if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) - from->sb_qflags |= XFS_OQUOTA_ENFD; - if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) - from->sb_qflags |= XFS_OQUOTA_CHKD; - from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + if (!xfs_sb_version_has_no_oquota(from) && + (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | + XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD))) { + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD)) { + from->sb_gquotino = from->sb_pquotino; + from->sb_pquotino = 0; + } + /* + * in-core version of qflags do not have XFS_OQUOTA.*, whereas + * the on-disk version does. So, save the in-core sb_qflags + * and restore it after we modify and copy it to the buffer + * to be copied to disk. + */ + saved_qflags = from->sb_qflags; + + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD)) + from->sb_qflags |= XFS_OQUOTA_ENFD; + if (from->sb_qflags & (XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) + from->sb_qflags |= XFS_OQUOTA_CHKD; + from->sb_qflags &= ~(XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD | XFS_GQUOTA_ENFD | XFS_GQUOTA_CHKD); + } + while (fields) { f = (xfs_sb_field_t)xfs_lowbit64((__uint64_t)fields); first = xfs_sb_info[f].offset; @@ -686,7 +711,15 @@ xfs_sb_to_disk( fields &= ~(1LL << f); } - from->sb_qflags = saved_qflags; + + /* Revert to the old saved values */ + if (saved_qflags) { + from->sb_qflags = saved_qflags; + if (from->sb_qflags & (XFS_PQUOTA_ENFD | XFS_PQUOTA_CHKD)) { + from->sb_pquotino = from->sb_gquotino; + from->sb_gquotino = NULLFSINO; + } + } #pwhite: We'll need a bunch of checks like this in order to ensure that the #disk's super block isn't half converted from using OQUOTA to using [PG]QUOTA. } /* @@ -754,6 +787,12 @@ reread: goto reread; } + if (!xfs_sb_version_has_no_oquota(&mp->m_sb) && + XFS_IS_PQUOTA_ON(mp)) { + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino; + mp->m_sb.sb_gquotino = NULLFSINO; + } + /* Initialize per-cpu counters */ xfs_icsb_reinit_counters(mp); @@ -1672,6 +1711,12 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) first = sizeof(xfs_sb_t); last = 0; + if (!xfs_sb_version_has_no_oquota(&mp->m_sb) && + XFS_IS_PQUOTA_ON(mp)) { + fields &= (__int64_t)~XFS_SB_PQUOTINO; + fields |= (__int64_t)XFS_SB_GQUOTINO; + } + /* translate/copy */ xfs_sb_to_disk(XFS_BUF_TO_SBP(bp), &mp->m_sb, fields); diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 47c33a5..b3eb91e 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -708,7 +708,8 @@ xfs_qm_dqattach_locked( !XFS_IS_QUOTA_ON(mp) || !XFS_NOT_DQATTACHED(mp, ip) || ip->i_ino == mp->m_sb.sb_uquotino || - ip->i_ino == mp->m_sb.sb_gquotino) + ip->i_ino == mp->m_sb.sb_gquotino || + ip->i_ino == mp->m_sb.sb_pquotino) return 0; ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); @@ -819,6 +820,7 @@ xfs_qm_dqdetach( ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_uquotino); ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_gquotino); + ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_pquotino); if (ip->i_udquot) { xfs_qm_dqrele(ip->i_udquot); ip->i_udquot = NULL; @@ -1058,19 +1060,22 @@ xfs_qm_qino_alloc( ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); + XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | XFS_SB_QFLAGS)); xfs_sb_version_addquota(&mp->m_sb); mp->m_sb.sb_uquotino = NULLFSINO; mp->m_sb.sb_gquotino = NULLFSINO; + mp->m_sb.sb_pquotino = NULLFSINO; /* qflags will get updated _after_ quotacheck */ mp->m_sb.sb_qflags = 0; } if (flags & XFS_QMOPT_UQUOTA) mp->m_sb.sb_uquotino = (*ip)->i_ino; - else + else if (flags & XFS_QMOPT_GQUOTA) mp->m_sb.sb_gquotino = (*ip)->i_ino; + else + mp->m_sb.sb_pquotino = (*ip)->i_ino; spin_unlock(&mp->m_sb_lock); xfs_mod_sb(tp, sbfields); @@ -1377,7 +1382,8 @@ xfs_qm_dqusage_adjust( * rootino must have its resources accounted for, not so with the quota * inodes. */ - if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { + if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino) { *res = BULKSTAT_RV_NOTHING; return XFS_ERROR(EINVAL); } @@ -1636,7 +1642,7 @@ xfs_qm_init_quotainos( } else { flags |= XFS_QMOPT_SBVERSION; sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | - XFS_SB_GQUOTINO | XFS_SB_QFLAGS); + XFS_SB_GQUOTINO | XFS_SB_PQUOTINO | XFS_SB_QFLAGS); } /* @@ -1666,7 +1672,7 @@ xfs_qm_init_quotainos( } if (XFS_IS_PQUOTA_ON(mp) && pip == NULL) { error = xfs_qm_qino_alloc(mp, &pip, - sbflags | XFS_SB_GQUOTINO, + sbflags | XFS_SB_PQUOTINO, flags | XFS_QMOPT_PQUOTA); if (error) { if (uip) diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index 9849828..fe92b72 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -210,8 +210,7 @@ xfs_qm_scall_quotaoff( /* * If quotas is completely disabled, close shop. */ - if (((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET1) || - ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_SET2)) { + if ((flags & XFS_MOUNT_QUOTA_ALL) == XFS_MOUNT_QUOTA_ALL) { mutex_unlock(&q->qi_quotaofflock); xfs_qm_destroy_quotainfo(mp); return (0); @@ -306,8 +305,10 @@ xfs_qm_scall_trunc_qfiles( if (flags & XFS_DQ_USER) error = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_uquotino); - if (flags & (XFS_DQ_GROUP|XFS_DQ_PROJ)) + if (flags & XFS_DQ_GROUP) error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_gquotino); + if (flags & XFS_DQ_PROJ) + error2 = xfs_qm_scall_trunc_qfile(mp, mp->m_sb.sb_pquotino); return error ? error : error2; } @@ -423,17 +424,18 @@ xfs_qm_scall_getqstat( struct fs_quota_stat *out) { struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_inode *uip, *gip; - boolean_t tempuqip, tempgqip; + struct xfs_inode *uip, *gip, *pip; + boolean_t tempuqip, tempgqip, temppqip; - uip = gip = NULL; - tempuqip = tempgqip = B_FALSE; + uip = gip = pip = NULL; + tempuqip = tempgqip = temppqip = B_FALSE; memset(out, 0, sizeof(fs_quota_stat_t)); out->qs_version = FS_QSTAT_VERSION; if (!xfs_sb_version_hasquota(&mp->m_sb)) { out->qs_uquota.qfs_ino = NULLFSINO; out->qs_gquota.qfs_ino = NULLFSINO; + out->qs_pquota.qfs_ino = NULLFSINO; return (0); } out->qs_flags = (__uint16_t) xfs_qm_export_flags(mp->m_qflags & @@ -442,10 +444,13 @@ xfs_qm_scall_getqstat( out->qs_pad = 0; out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; + if (&out->qs_gquota != &out->qs_pquota) + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; if (q) { uip = q->qi_uquotaip; gip = q->qi_gquotaip; + pip = q->qi_pquotaip; } if (!uip && mp->m_sb.sb_uquotino != NULLFSINO) { if (xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, @@ -457,6 +462,11 @@ xfs_qm_scall_getqstat( 0, 0, &gip) == 0) tempgqip = B_TRUE; } + if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { + if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip) == 0) + temppqip = B_TRUE; + } if (uip) { out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; @@ -469,6 +479,12 @@ xfs_qm_scall_getqstat( if (tempgqip) IRELE(gip); } + if (pip) { + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + if (temppqip) + IRELE(pip); + } if (q) { out->qs_incoredqs = q->qi_dquots; out->qs_btimelimit = q->qi_btimelimit; diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index b0a1266..5c3fa86 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -400,12 +400,6 @@ xfs_parseargs( } #endif - if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && - (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { - xfs_warn(mp, "cannot mount with both project and group quota"); - return EINVAL; - } - if ((dsunit && !dswidth) || (!dsunit && dswidth)) { xfs_warn(mp, "sunit and swidth must be specified together"); return EINVAL; @@ -1315,6 +1309,15 @@ xfs_fs_fill_super( if (error) goto out_destroy_counters; + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) && + !xfs_sb_version_has_no_oquota(&mp->m_sb)) { + xfs_warn(mp, "Super block does not support " + "project and group quota together"); + error = EINVAL; + goto out_free_sb; + } + #pwhite: This is a check for the old format superblock which could not do both #project & group quotas. error = xfs_finish_flags(mp); if (error) goto out_free_sb; diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c index 48003d3..a9b5f73 100644 --- a/fs/xfs/xfs_trans_dquot.c +++ b/fs/xfs/xfs_trans_dquot.c @@ -165,7 +165,8 @@ xfs_trans_mod_dquot_byino( if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp) || ip->i_ino == mp->m_sb.sb_uquotino || - ip->i_ino == mp->m_sb.sb_gquotino) + ip->i_ino == mp->m_sb.sb_gquotino || + ip->i_ino == mp->m_sb.sb_pquotino) return; if (tp->t_dqinfo == NULL) @@ -859,6 +860,7 @@ xfs_trans_reserve_quota_nblks( ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); + ASSERT(ip->i_ino != mp->m_sb.sb_pquotino); ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT((flags & ~(XFS_QMOPT_FORCE_RES | XFS_QMOPT_ENOSPC)) == -- 1.7.1 From pwhite@sgi.com Tue Jan 31 15:42:34 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_93 autolearn=no version=3.4.0-r929098 Received: from cthulhu.engr.sgi.com (cthulhu.engr.sgi.com [150.166.39.100]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VLgX7K101479 for ; Tue, 31 Jan 2012 15:42:33 -0600 Received: from caliban.corp.sgi.com ([10.202.8.38]) by cthulhu.engr.sgi.com (8.12.10/8.12.10/SuSE Linux 0.7) with ESMTP id q0VLgXPo020790 for ; Tue, 31 Jan 2012 13:42:33 -0800 Date: Tue, 31 Jan 2012 13:42:39 -0800 From: Phil White To: xfs@oss.sgi.com Subject: [NOTES] [RFC v3 PATCH 4/4] xfs: Add a new field to fs_quota_stat to get pquota information Message-ID: <20120131214239.GF2569@caliban.corp.sgi.com> References: <20120123173158.31640.30333.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173222.31640.36334.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173222.31640.36334.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) #pwhite: This essentially just adds the detection for the new quota sizes. #The only quibble I have is on qstatsize(), but that might be because I don't #understand the basic assumption of the quota versioning not equalling V1 or V2. Add a new field to fs_quota_stat and define a new version for the bigger size. Signed-off-by: Chandra Seetharaman Reviewed-by: Phil White --- fs/quota/quota.c | 6 +++++- fs/xfs/xfs_qm_syscalls.c | 26 +++++++++++++------------- include/linux/dqblk_xfs.h | 28 +++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index f17e3bb..74cc847 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h @@ -18,6 +18,7 @@ #define _LINUX_DQBLK_XFS_H #include +#include /* * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). @@ -139,6 +140,7 @@ typedef struct fs_disk_quota { * incore. */ #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ +#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */ /* * Some basic information about 'quota files'. @@ -155,13 +157,37 @@ typedef struct fs_quota_stat { __s8 qs_pad; /* unused */ fs_qfilestat_t qs_uquota; /* user quota storage information */ fs_qfilestat_t qs_gquota; /* group quota storage information */ -#define qs_pquota qs_gquota __u32 qs_incoredqs; /* number of dquots incore */ __s32 qs_btimelimit; /* limit for blks timer */ __s32 qs_itimelimit; /* limit for inodes timer */ __s32 qs_rtbtimelimit;/* limit for rt blks timer */ __u16 qs_bwarnlimit; /* limit for num warnings */ __u16 qs_iwarnlimit; /* limit for num warnings */ + fs_qfilestat_t qs_pquota; /* project quota storage information */ } fs_quota_stat_t; +#define FS_QSTAT_V1_SIZE (offsetof(fs_quota_stat_t, qs_pquota)) +#define FS_QSTAT_V2_SIZE (FS_QSTAT_V1_SIZE + sizeof (fs_qfilestat_t)) + +static inline int valid_qstat_version(int version) +{ + switch(version) { + case FS_QSTAT_VERSION: + case FS_QSTAT_VERSION_2: + return 1; + default: + return 0; + } +} +static inline int qstatsize(int version) +{ + switch(version) { + case FS_QSTAT_VERSION_2: + return FS_QSTAT_V2_SIZE; + case FS_QSTAT_VERSION: + default: + return FS_QSTAT_V1_SIZE; + } +} + #pwhite: It seems like in the event of an invalid version, then we should #either return 0 or FS_QSTAT_V2_SIZE to ensure that we don't have something #trying to use the old version. #endif /* _LINUX_DQBLK_XFS_H */ diff --git a/fs/quota/quota.c b/fs/quota/quota.c index 7898cd6..ee571b9 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c @@ -203,8 +203,12 @@ static int quota_getxstate(struct super_block *sb, void __user *addr) if (!sb->s_qcop->get_xstate) return -ENOSYS; + if (copy_from_user(&fqs, addr, 1)) /* just get the version */ + return -EFAULT; + if (!valid_qstat_version(fqs.qs_version)) + fqs.qs_version = FS_QSTAT_VERSION; ret = sb->s_qcop->get_xstate(sb, &fqs); - if (!ret && copy_to_user(addr, &fqs, sizeof(fqs))) + if (!ret && copy_to_user(addr, &fqs, qstatsize(fqs.qs_version))) return -EFAULT; return ret; } diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index fe92b72..a4df935 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c @@ -431,7 +431,6 @@ xfs_qm_scall_getqstat( tempuqip = tempgqip = temppqip = B_FALSE; memset(out, 0, sizeof(fs_quota_stat_t)); - out->qs_version = FS_QSTAT_VERSION; if (!xfs_sb_version_hasquota(&mp->m_sb)) { out->qs_uquota.qfs_ino = NULLFSINO; out->qs_gquota.qfs_ino = NULLFSINO; @@ -444,8 +443,6 @@ xfs_qm_scall_getqstat( out->qs_pad = 0; out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino; out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino; - if (&out->qs_gquota != &out->qs_pquota) - out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; if (q) { uip = q->qi_uquotaip; @@ -462,11 +459,6 @@ xfs_qm_scall_getqstat( 0, 0, &gip) == 0) tempgqip = B_TRUE; } - if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { - if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, - 0, 0, &pip) == 0) - temppqip = B_TRUE; - } if (uip) { out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks; out->qs_uquota.qfs_nextents = uip->i_d.di_nextents; @@ -479,11 +471,19 @@ xfs_qm_scall_getqstat( if (tempgqip) IRELE(gip); } - if (pip) { - out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; - out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; - if (temppqip) - IRELE(pip); + if (out->qs_version >= FS_QSTAT_VERSION_2) { + out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino; + if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) { + if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino, + 0, 0, &pip) == 0) + temppqip = B_TRUE; + } + if (pip) { + out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks; + out->qs_pquota.qfs_nextents = pip->i_d.di_nextents; + if (temppqip) + IRELE(pip); + } } if (q) { out->qs_incoredqs = q->qi_dquots; -- 1.7.1 From b.candler@pobox.com Tue Jan 31 15:52:14 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VLqEH7102122 for ; Tue, 31 Jan 2012 15:52:14 -0600 X-ASG-Debug-ID: 1328046733-04bdf0751841fa70001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id gOGGwHs0M9gTqAf7 for ; Tue, 31 Jan 2012 13:52:13 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id C78E071F9; Tue, 31 Jan 2012 16:52:12 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=sasl; bh=XJls+1zohmJepjqaErFEBEqzQYI=; b=JxhLWRw SCEqrRp2JOal/5knO2Iuly+U6BeN4/cJlJg1U4efcTLnHOiRa8L798fXDHkcst3m MU+Pvr2na8c5v6cfIfMVUR7AZqb0TNIw8Nyg4NwYMTQ8g5qMEjq5R22rOAF8+ATX vB6yhBnd5mGVraPq7tVX6KJSXxdFuhvQ4rm4= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id BFB9871F8; Tue, 31 Jan 2012 16:52:12 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [31.185.235.168]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 462AB71F7; Tue, 31 Jan 2012 16:52:11 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYONEY-0010LZ-PY; Tue, 31 Jan 2012 21:52:10 +0000 Date: Tue, 31 Jan 2012 21:52:10 +0000 From: Brian Candler To: Christoph Hellwig Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120131215210.GB47420@soundmouse.com> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131145205.GA6607@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131145205.GA6607@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: D4256364-4C55-11E1-A4F4-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328046733 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87236 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Tue, Jan 31, 2012 at 09:52:05AM -0500, Christoph Hellwig wrote: > You don't just read a single file at a time but multiple ones, don't > you? It's sequential at the moment, although I'll do further tests with the -c (concurrency) option to bonnie++ > Try playing with the following tweaks to get larger I/O to the disk: > > a) make sure you use the noop or deadline elevators > b) increase /sys/block/sdX/queue/max_sectors_kb from its low default > c) dramatically increase /sys/devices/virtual/bdi/:/read_ahead_kb Thank you very much: I will do further tests with these. Is the read_ahead_kb knob aware of file boundaries? That is, is there any risk that if I set it too large it would read useless blocks past the end of the file? Regards, Brian. From pwhite@sgi.com Tue Jan 31 16:04:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cthulhu.engr.sgi.com (cthulhu.engr.sgi.com [150.166.39.100]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VM4pOR103789 for ; Tue, 31 Jan 2012 16:04:51 -0600 Received: from caliban.corp.sgi.com ([10.202.8.38]) by cthulhu.engr.sgi.com (8.12.10/8.12.10/SuSE Linux 0.7) with ESMTP id q0VM4pPo022644 for ; Tue, 31 Jan 2012 14:04:51 -0800 Date: Tue, 31 Jan 2012 14:04:56 -0800 From: Phil White To: xfs@oss.sgi.com Subject: [NOTES] [patch] xfs: remove an unneeded NULL check Message-ID: <20120131220456.GG2569@caliban.corp.sgi.com> References: <20120128105501.GB25092@elgon.mountain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120128105501.GB25092@elgon.mountain> User-Agent: Mutt/1.5.21 (2010-09-15) #pwhite: We can safely remove this check because the one call to #xfs_log_commit_cil() comes from xfs_trans_commit() and passes a pointer to a #local variable. Smatch complains because we check "commit_lsn" for NULL inconsistently. fs/xfs/xfs_log_cil.c +705 xfs_log_commit_cil(43) error: we previously assumed 'commit_lsn' could be null (see line 688) xfs_log_commit_cil() is only called from one place, and "commit_lsn" is a valid pointer, so I've removed the NULL check. Signed-off-by: Dan Carpenter Reviewed-by: Phil White diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index d4fadbe..d9c4652 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -685,8 +685,7 @@ xfs_log_commit_cil( /* lock out background commit */ down_read(&log->l_cilp->xc_ctx_lock); - if (commit_lsn) - *commit_lsn = log->l_cilp->xc_ctx->sequence; + *commit_lsn = log->l_cilp->xc_ctx->sequence; xlog_cil_insert_items(log, log_vector, tp->t_ticket); From david@fromorbit.com Tue Jan 31 16:24:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VMOI6X109570 for ; Tue, 31 Jan 2012 16:24:18 -0600 X-ASG-Debug-ID: 1328048655-04bdf07518422500001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 9iciGfJ7sOYH17nb for ; Tue, 31 Jan 2012 14:24:16 -0800 (PST) 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: Av0EAH9pKE95LD+b/2dsb2JhbAA4Cq5mgQaBcgEBBTocIxAIAxguFCUDIRMUwGoEE4gTgnECAgkFDAcGAQsBCAUDAwkGBA8GhB4BAwEEDgoCBIM5BJUfkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 08:54:15 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsM7Z-00074W-NH; Wed, 01 Feb 2012 09:24:13 +1100 Date: Wed, 1 Feb 2012 09:24:13 +1100 From: Dave Chinner To: sam supramani Cc: xfs@oss.sgi.com Subject: Re: Identify patches for superblock changes for Crossmeta Message-ID: <20120131222413.GO9090@dastard> X-ASG-Orig-Subj: Re: Identify patches for superblock changes for Crossmeta 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.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1328048655 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87238 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 09:13:36AM -0800, sam supramani wrote: > Hi, > > I am trying to get Crossmeta that includes windows port of XFS file > system, > to recognize newer ondisk format changes seen with the newer > linux kernels.(RHEL6) > The crossmeta-xfs port in https://github.com/crossmeta/sgi is quite > old based on XFS 1.1 release with log v2 patches added later. > > I am interested in knowing submittal ID for the following changes; > attr=2 lazy-count=1. You've got a 10+ year old code base. That's a significant problem - nobody is going to search 10 years worth of history for you. It's all in various git trees around the place, so you should probably learn to use git blame.... BTW, filesystems that have been mounted on windows are completely unsupportable by the Linux community, so using crossmeta to access your Linux XFS filesystem is not an advisable thing to do in the first place... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 16:41:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_47,J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VMfu5o118977 for ; Tue, 31 Jan 2012 16:41:56 -0600 X-ASG-Debug-ID: 1328049714-04bdf075194238a0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id UBETDA6aYsnflliW for ; Tue, 31 Jan 2012 14:41:54 -0800 (PST) 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: Av0EAGtsKE95LD+b/2dsb2JhbABCrmaBBoFyAQEFOhwjEAgDGC4UJQMhE8B/E4sEAgIJBQwHBgELAQgFAwMJBgQPhCQBAwEEHoM5BJUfkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 09:11:54 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsMOe-00076h-Jl; Wed, 01 Feb 2012 09:41:52 +1100 Date: Wed, 1 Feb 2012 09:41:52 +1100 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss , WuBo Subject: Re: [PATCH] xfstests: several 274 fixups Message-ID: <20120131224152.GP9090@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: several 274 fixups References: <4F271967.10308@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F271967.10308@sandeen.net> 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: 1328049714 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87238 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Jan 30, 2012 at 04:27:51PM -0600, Eric Sandeen wrote: > This changes quite a few things about 274 to make it more robust > and useful. > > * More comments > * Use xfs_io for falloc (not all systems have /usr/bin/fallocate) > * use _require_xfs_io_falloc to be sure system & fs support preallocation > * Do not remove all of the files in $SCRATCH_MNT/ post-mkfs > * Do not remove all of the files in $SCRATCH_MNT/ on completion > (this breaks e2fsck when lost+found/ goes missing) FWIW, can't e2fsck be fixed to handle this case? ...... > _cleanup() > { > cd / > - rm -f $SCRATCH_MNT/* $tmp.* > + rm -f $tmp.* > _scratch_unmount > } > > @@ -46,6 +48,7 @@ _cleanup() > _supported_fs generic > _supported_os IRIX Linux > _require_scratch > +_require_xfs_io_falloc > > echo "------------------------------" > echo "preallocation test" > @@ -57,32 +60,39 @@ umount $SCRATCH_DEV 2>/dev/null > _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 > _scratch_mount > > -rm -rf $SCRATCH_MNT/* > -cd $SCRATCH_MNT > -dd if=/dev/zero of=test bs=4K count=1 >/dev/null 2>&1 > +# Create a 4k file > +dd if=/dev/zero of=$SCRATCH_MNT/test bs=4K count=1 >>$seq.full 2>&1 > if [ $? -ne 0 ] > then > - echo "create file err" > + echo "create file error" > status=1 > exit > fi > > -fallocate -n -o 4K -l 1M test >/dev/null 2>&1 > +# Allocate 4M past EOF on that file > +xfs_io -F -c "falloc -k 4k 4m" $SCRATCH_MNT/test >>$seq.full 2>&1 > if [ $? -ne 0 ] > then > - echo "fallocate file err" > + echo "fallocate file error" > status=1 > exit > fi That whole create and falloc step can be done with one command: xfs_io -F -c "write 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test The output of xfs_io will tell us what failed if it does. Also, failure handling is as simple as appending: || _fail "failure string" to the command. It handles setting status appropriately, tees the failure string to $seq.full, and tells the user to go look at $seq.full for why the test failed. hence that 16 lines of script can be simply replaced with these 2 lines: xfs_io -F -c "write 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test \ >>$seq.full 2>&1 || _fail "failed to create test file" > -dd if=/dev/zero of=tmp1 bs=1M >/dev/null 2>&1 > -dd if=/dev/zero of=tmp2 bs=4K >/dev/null 2>&1 > +# Fill the rest of the fs completely > +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M >>$seq.full 2>&1 > +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=4K >>$seq.full 2>&1 > sync > +# Last effort, use O_SYNC > +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K oflag=sync >>$seq.full 2>&1 > +# Save space usage info > +echo "Post-fill space:" >> $seq.full > +df $SCRATCH_MNT >>$seq.full 2>&1 > > -dd if=/dev/zero of=test seek=1 bs=4K count=2 conv=notrunc >/dev/null 2>&1 > +# Now attempt a write into all of the preallocated space > +dd if=/dev/zero of=$SCRATCH_MNT/test seek=1 bs=4K count=1024 conv=notrunc >>$seq.full 2>&1 > if [ $? -ne 0 ] > then > - echo "fill prealloc range err" > + echo "fill prealloc range error" > status=1 > exit > fi I'd still like to see this write attempt to trigger nasty behaviours like needing to allocate a metadata block for the extent list. I suggested randholes, but perhaps this would be easier: for i in `seq 1 2 1023`; do dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \ >>$seq.full 2>&1 || _fail "failed to write test file" done which will write every second block and so only convert every second block from unwritten to written and hence blow out the size of the extent list and require extent map block allocation and potentially trigger ENOSPC that way.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 16:56:06 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VMu6oN125535 for ; Tue, 31 Jan 2012 16:56:06 -0600 X-ASG-Debug-ID: 1328050563-04cbb01fb448a760001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id usMGPjyOIOZ4KyFt; Tue, 31 Jan 2012 14:56:04 -0800 (PST) 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: Av0EADxwKE95LD+b/2dsb2JhbABCrmaBBoFyAQEFJxMcIxAIAxguFCUDIRPBAxOLBAICCQUMBwYBCwEIBQMDCQYEDwaEHgEDAQQMg0sElR+SaQ Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl2.internode.on.net with ESMTP; 01 Feb 2012 09:26:02 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsMcL-00078V-LN; Wed, 01 Feb 2012 09:56:01 +1100 Date: Wed, 1 Feb 2012 09:56:01 +1100 From: Dave Chinner To: Dan Carpenter Cc: Ben Myers , xfs-masters@oss.sgi.com, Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: remove an unneeded NULL check Message-ID: <20120131225601.GQ9090@dastard> X-ASG-Orig-Subj: Re: [patch] xfs: remove an unneeded NULL check References: <20120128105501.GB25092@elgon.mountain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120128105501.GB25092@elgon.mountain> 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: 1328050563 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Sat, Jan 28, 2012 at 01:55:01PM +0300, Dan Carpenter wrote: > Smatch complains because we check "commit_lsn" for NULL inconsistently. > fs/xfs/xfs_log_cil.c +705 xfs_log_commit_cil(43) error: we previously > assumed 'commit_lsn' could be null (see line 688) > xfs_log_commit_cil() is only called from one place, and "commit_lsn" is > a valid pointer, so I've removed the NULL check. > > Signed-off-by: Dan Carpenter > > diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c > index d4fadbe..d9c4652 100644 > --- a/fs/xfs/xfs_log_cil.c > +++ b/fs/xfs/xfs_log_cil.c > @@ -685,8 +685,7 @@ xfs_log_commit_cil( > > /* lock out background commit */ > down_read(&log->l_cilp->xc_ctx_lock); > - if (commit_lsn) > - *commit_lsn = log->l_cilp->xc_ctx->sequence; > + *commit_lsn = log->l_cilp->xc_ctx->sequence; > > xlog_cil_insert_items(log, log_vector, tp->t_ticket); There's a set of reviewed patches (for 3.3) that change all this code. The null check might still be there, but that needs to be checked. On that note, Ben, can you get all of the reviewed patches that are currently outstanding into the for-next branch of the oss tree? We need this done sooner rather than later so that all our current testing during development is done with those patches applied. it also helps us to avoid conflicts between patchsets that touch the same code (which I have quite a few of at the moment).... Cheers, Dave. -- Dave Chinner david@fromorbit.com From nscott@aconex.com Tue Jan 31 17:07:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VN7F5F128936 for ; Tue, 31 Jan 2012 17:07:16 -0600 X-ASG-Debug-ID: 1328051233-04cbb01fb348b670001-NocioJ Received: from postoffice2.aconex.com (mail.aconex.com [203.166.49.3]) by cuda.sgi.com with ESMTP id 1BeKEtokBbopMcer for ; Tue, 31 Jan 2012 15:07:13 -0800 (PST) X-Barracuda-Envelope-From: nscott@aconex.com X-Barracuda-Apparent-Source-IP: 203.166.49.3 Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.35.100]) by postoffice2.aconex.com with ESMTP id ODZKVXFjUUl0Zamp for ; Wed, 01 Feb 2012 10:07:11 +1100 (EST) Received: from gatekeeper.aconex.com (gatekeeper.yarra.acx [192.168.35.102]) by postoffice.aconex.com (Postfix) with ESMTP id 73DBC3CE00B5 for ; Wed, 1 Feb 2012 10:06:55 +1100 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id 8F0379E0002 for ; Wed, 1 Feb 2012 10:07:11 +1100 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gLMO2l+aimoa for ; Wed, 1 Feb 2012 10:07:09 +1100 (EST) Received: from acxmail-au2.aconex.com (acxmail-au2.aconex.com [192.168.35.104]) by gatekeeper.aconex.com (Postfix) with ESMTP id 2010B9E0001 for ; Wed, 1 Feb 2012 10:07:09 +1100 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id 1C0AA3B20003 for ; Wed, 1 Feb 2012 10:07:09 +1100 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from acxmail-au2.aconex.com ([127.0.0.1]) by localhost (acxmail-au2.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Vkv7SPUxkPHd for ; Wed, 1 Feb 2012 10:07:08 +1100 (EST) Received: from acxmail-au2.aconex.com (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id E776A3B20001 for ; Wed, 1 Feb 2012 10:07:08 +1100 (EST) Date: Wed, 1 Feb 2012 10:07:08 +1100 (EST) From: Nathan Scott Reply-To: Nathan Scott To: xfs@oss.sgi.com Message-ID: <419906537.69741.1328051228836.JavaMail.root@acxmail-au2.aconex.com> In-Reply-To: <1317955640.69734.1328051152460.JavaMail.root@acxmail-au2.aconex.com> Subject: [patch] xfsprogs: add debian linux-libc-dev build dependency MIME-Version: 1.0 X-ASG-Orig-Subj: [patch] xfsprogs: add debian linux-libc-dev build dependency Content-Type: multipart/mixed; boundary="----=_Part_69740_686805766.1328051228834" X-Originating-IP: [220.237.96.234] X-Mailer: Zimbra 6.0.12_GA_2888 (ZimbraWebClient - SAF3 (Mac)/6.0.12_GA_2883) X-Virus-Scanned: by bsmtpd at aconex.com X-Barracuda-Connect: mail.aconex.com[203.166.49.3] X-Barracuda-Start-Time: 1328051233 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- ------=_Part_69740_686805766.1328051228834 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Add a build dependency on linux-libc-dev, to ensure we build packages with have_fiemap set to true if the headers support it. Noticed by Dave, some package builds didn't enable this when they should have. Signed-off-by: Nathan Scott ------=_Part_69740_686805766.1328051228834 Content-Type: text/x-patch; name=debiandeps.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=debiandeps.patch ZGlmZiAtLWdpdCBhL2RlYmlhbi9jb250cm9sIGIvZGViaWFuL2NvbnRyb2wKaW5kZXggY2E1MTdh ZC4uNTAyYjQ4YiAxMDA2NDQKLS0tIGEvZGViaWFuL2NvbnRyb2wKKysrIGIvZGViaWFuL2NvbnRy b2wKQEAgLTMsNyArMyw3IEBAIFNlY3Rpb246IGFkbWluCiBQcmlvcml0eTogb3B0aW9uYWwKIE1h aW50YWluZXI6IFhGUyBEZXZlbG9wbWVudCBUZWFtIDx4ZnNAb3NzLnNnaS5jb20+CiBVcGxvYWRl cnM6IE5hdGhhbiBTY290dCA8bmF0aGFuc0BkZWJpYW4ub3JnPiwgQW5pYmFsIE1vbnNhbHZlIFNh bGF6YXIgPGFuaWJhbEBkZWJpYW4ub3JnPgotQnVpbGQtRGVwZW5kczogdXVpZC1kZXYsIGF1dG9j b25mLCBkZWJoZWxwZXIgKD49IDUpLCBnZXR0ZXh0LCBsaWJ0b29sLCBsaWJyZWFkbGluZS1ncGx2 Mi1kZXYgfCBsaWJyZWFkbGluZTUtZGV2LCBsaWJibGtpZC1kZXYgKD49IDIuMTcpCitCdWlsZC1E ZXBlbmRzOiB1dWlkLWRldiwgYXV0b2NvbmYsIGRlYmhlbHBlciAoPj0gNSksIGdldHRleHQsIGxp YnRvb2wsIGxpYnJlYWRsaW5lLWdwbHYyLWRldiB8IGxpYnJlYWRsaW5lNS1kZXYsIGxpYmJsa2lk LWRldiAoPj0gMi4xNyksIGxpbnV4LWxpYmMtZGV2CiBTdGFuZGFyZHMtVmVyc2lvbjogMy45LjEK IEhvbWVwYWdlOiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMveGZzLwogCg== ------=_Part_69740_686805766.1328051228834-- From bpm@sgi.com Tue Jan 31 17:08:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VN8xb4129937; Tue, 31 Jan 2012 17:08:59 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id A9938304053; Tue, 31 Jan 2012 15:08:52 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id ECA7A426DA7; Tue, 31 Jan 2012 17:08:56 -0600 (CST) Date: Tue, 31 Jan 2012 17:08:56 -0600 From: Ben Myers To: Dave Chinner Cc: Dan Carpenter , xfs-masters@oss.sgi.com, Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: remove an unneeded NULL check Message-ID: <20120131230856.GI8262@sgi.com> References: <20120128105501.GB25092@elgon.mountain> <20120131225601.GQ9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131225601.GQ9090@dastard> User-Agent: Mutt/1.5.18 (2008-05-17) On Wed, Feb 01, 2012 at 09:56:01AM +1100, Dave Chinner wrote: > On Sat, Jan 28, 2012 at 01:55:01PM +0300, Dan Carpenter wrote: > > Smatch complains because we check "commit_lsn" for NULL inconsistently. > > fs/xfs/xfs_log_cil.c +705 xfs_log_commit_cil(43) error: we previously > > assumed 'commit_lsn' could be null (see line 688) > > xfs_log_commit_cil() is only called from one place, and "commit_lsn" is > > a valid pointer, so I've removed the NULL check. > > > > Signed-off-by: Dan Carpenter > > > > diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c > > index d4fadbe..d9c4652 100644 > > --- a/fs/xfs/xfs_log_cil.c > > +++ b/fs/xfs/xfs_log_cil.c > > @@ -685,8 +685,7 @@ xfs_log_commit_cil( > > > > /* lock out background commit */ > > down_read(&log->l_cilp->xc_ctx_lock); > > - if (commit_lsn) > > - *commit_lsn = log->l_cilp->xc_ctx->sequence; > > + *commit_lsn = log->l_cilp->xc_ctx->sequence; > > > > xlog_cil_insert_items(log, log_vector, tp->t_ticket); > > There's a set of reviewed patches (for 3.3) that change all this > code. The null check might still be there, but that needs to be > checked. > > On that note, Ben, can you get all of the reviewed patches that are > currently outstanding into the for-next branch of the oss tree? We > need this done sooner rather than later so that all our current > testing during development is done with those patches applied. it > also helps us to avoid conflicts between patchsets that touch the > same code (which I have quite a few of at the moment).... I'll have it resolved ASAP. -Ben From nscott@aconex.com Tue Jan 31 17:11:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VNBNdC130590 for ; Tue, 31 Jan 2012 17:11:23 -0600 X-ASG-Debug-ID: 1328051479-04cb6c225f382230001-NocioJ Received: from postoffice2.aconex.com (mail.aconex.com [203.166.49.3]) by cuda.sgi.com with ESMTP id d26njuFQDFQLnRiF for ; Tue, 31 Jan 2012 15:11:20 -0800 (PST) X-Barracuda-Envelope-From: nscott@aconex.com X-Barracuda-Apparent-Source-IP: 203.166.49.3 Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.35.100]) by postoffice2.aconex.com with ESMTP id RWyX1mxFajaGpIlf for ; Wed, 01 Feb 2012 10:11:17 +1100 (EST) Received: from gatekeeper.aconex.com (gatekeeper.yarra.acx [192.168.35.102]) by postoffice.aconex.com (Postfix) with ESMTP id 820A43CE00C5 for ; Wed, 1 Feb 2012 10:11:01 +1100 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id 9B9059E0002 for ; Wed, 1 Feb 2012 10:11:17 +1100 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bDPA+luNA1dv for ; Wed, 1 Feb 2012 10:11:17 +1100 (EST) Received: from acxmail-au2.aconex.com (acxmail-au2.aconex.com [192.168.35.104]) by gatekeeper.aconex.com (Postfix) with ESMTP id 1D47D9E0001 for ; Wed, 1 Feb 2012 10:11:17 +1100 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by acxmail-au2.aconex.com (Postfix) with ESMTP id 14D2A3B20003 for ; Wed, 1 Feb 2012 10:11:17 +1100 (EST) X-Virus-Scanned: amavisd-new at aconex.com Received: from acxmail-au2.aconex.com ([127.0.0.1]) by localhost (acxmail-au2.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Vr2Zz2bhPHnZ for ; Wed, 1 Feb 2012 10:11:16 +1100 (EST) Received: from acxmail-au2.aconex.com (acxmail-au2.aconex.com [192.168.35.104]) by acxmail-au2.aconex.com (Postfix) with ESMTP id D4CAF3B20001 for ; Wed, 1 Feb 2012 10:11:16 +1100 (EST) Date: Wed, 1 Feb 2012 10:11:16 +1100 (EST) From: Nathan Scott Reply-To: Nathan Scott To: xfs@oss.sgi.com Message-ID: <1247398017.69749.1328051476851.JavaMail.root@acxmail-au2.aconex.com> In-Reply-To: <519369070.69746.1328051417713.JavaMail.root@acxmail-au2.aconex.com> Subject: [patch] xfsprogs: extend fiemap configure check MIME-Version: 1.0 X-ASG-Orig-Subj: [patch] xfsprogs: extend fiemap configure check Content-Type: multipart/mixed; boundary="----=_Part_69748_1420656309.1328051476850" X-Originating-IP: [220.237.96.234] X-Mailer: Zimbra 6.0.12_GA_2888 (ZimbraWebClient - SAF3 (Mac)/6.0.12_GA_2883) X-Virus-Scanned: by bsmtpd at aconex.com X-Barracuda-Connect: mail.aconex.com[203.166.49.3] X-Barracuda-Start-Time: 1328051479 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- ------=_Part_69748_1420656309.1328051476850 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Make the fiemap configure check consistent with the other libc interface checks - perform a compile and link with a complete set of symbols, macros and interfaces needed, as opposed to a build with just the headers. Signed-off-by: Nathan Scott ------=_Part_69748_1420656309.1328051476850 Content-Type: text/x-patch; name=fiemap.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=fiemap.patch ZGlmZiAtLWdpdCBhL200L3BhY2thZ2VfbGliY2Rldi5tNCBiL200L3BhY2thZ2VfbGliY2Rldi5t NAppbmRleCA4MTkyMTgxLi4xZTJjMjU2IDEwMDY0NAotLS0gYS9tNC9wYWNrYWdlX2xpYmNkZXYu bTQKKysrIGIvbTQvcGFja2FnZV9saWJjZGV2Lm00CkBAIC0xMjEsNiArMTIxLDE3IEBAIEFDX0RF RlVOKFtBQ19IQVZFX0ZBTExPQ0FURV0sCiAjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGZpZW1hcCBp b2N0bCAoTGludXgpCiAjCiBBQ19ERUZVTihbQUNfSEFWRV9GSUVNQVBdLAotICBbIEFDX0NIRUNL X0hFQURFUlMoW2xpbnV4L2ZpZW1hcC5oXSwgWyBoYXZlX2ZpZW1hcD15ZXMgXSwgWyBoYXZlX2Zp ZW1hcD1ubyBdKQorICBbIEFDX01TR19DSEVDS0lORyhbZm9yIGZpZW1hcF0pCisgICAgQUNfVFJZ X0xJTksoWworI2RlZmluZSBfR05VX1NPVVJDRQorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2 NAorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmllbWFwLmg+CisgICAg XSwgWworICAgICAgICAgc3RydWN0IGZpZW1hcCAqZmllbWFwOworICAgICAgICAgaW9jdGwoMCwg RlNfSU9DX0ZJRU1BUCwgKHVuc2lnbmVkIGxvbmcpZmllbWFwKTsKKyAgICBdLCBoYXZlX2ZpZW1h cD15ZXMKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcyksCisgICAgICAgQUNfTVNHX1JFU1VMVChu bykpCiAgICAgQUNfU1VCU1QoaGF2ZV9maWVtYXApCiAgIF0pCg== ------=_Part_69748_1420656309.1328051476850-- From sliedes@cc.hut.fi Tue Jan 31 17:30:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VNUkVL136313 for ; Tue, 31 Jan 2012 17:30:46 -0600 X-ASG-Debug-ID: 1328052641-04cbb01fb348d3a0001-NocioJ Received: from smtp-1.hut.fi (smtp-1.hut.fi [130.233.228.91]) by cuda.sgi.com with ESMTP id KjrPoChatTg99xSN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 31 Jan 2012 15:30:43 -0800 (PST) X-Barracuda-Envelope-From: sliedes@cc.hut.fi X-Barracuda-Apparent-Source-IP: 130.233.228.91 Received: from localhost (katosiko.hut.fi [130.233.228.115]) by smtp-1.hut.fi (8.13.6/8.12.10) with ESMTP id q0VNUeJE031490 for ; Wed, 1 Feb 2012 01:30:40 +0200 Received: from smtp-1.hut.fi ([130.233.228.91]) by localhost (katosiko.hut.fi [130.233.228.115]) (amavisd-new, port 10024) with LMTP id 22246-805 for ; Wed, 1 Feb 2012 01:30:40 +0200 (EET) Received: from kosh.localdomain (kosh.hut.fi [130.233.228.12]) by smtp-1.hut.fi (8.13.6/8.12.10) with ESMTP id q0VNUZvU031480 for ; Wed, 1 Feb 2012 01:30:35 +0200 Received: by kosh.localdomain (Postfix, from userid 43888) id 6C22EDF8; Wed, 1 Feb 2012 01:30:35 +0200 (EET) Date: Wed, 1 Feb 2012 01:30:34 +0200 From: Sami Liedes To: xfs@oss.sgi.com Subject: Re: xfs task blocked for more than 120 seconds Message-ID: <20120131233034.GK10174@sli.dy.fi> X-ASG-Orig-Subj: Re: xfs task blocked for more than 120 seconds Mail-Followup-To: xfs@oss.sgi.com References: <20120130002026.GG10174@sli.dy.fi> <20120130010530.GI15102@dastard> <2504_1327964557_4F27218D_2504_92_2_20120130223527.GH10174@sli.dy.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2504_1327964557_4F27218D_2504_92_2_20120130223527.GH10174@sli.dy.fi> User-Agent: Mutt/1.5.21 (2010-09-15) X-TKK-Virus-Scanned: by amavisd-new-2.1.2-hutcc at katosiko.hut.fi X-Barracuda-Connect: smtp-1.hut.fi[130.233.228.91] X-Barracuda-Start-Time: 1328052642 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-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=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87242 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 12:35:28AM +0200, Sami Liedes wrote: > The workloads do eventually complete. I tried the tar extraction again > but this time extracting the tar from a different disk and saw no such > warnings (and the time taken seems reasonable at 96 minutes). Extracting a 105 GB tar that resides on the same (target) XFS partition on an otherwise idle disk does trigger warnings, but only for kworker, not the tar process. The time taken to extract was a reasonable-sounding 140 minutes, so maybe these are just harmless warnings. Perhaps something should/could be done to silence them in that case? Sami ------------------------------------------------------------ [438920.782686] INFO: task kworker/0:1:7593 blocked for more than 120 seconds. [438920.782689] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [438920.782691] kworker/0:1 D ffff8802228519d8 0 7593 2 0x00000000 [438920.782695] ffff88003627fb70 0000000000000046 ffff88003627fb10 ffffffff811d2106 [438920.782699] ffff880222851650 ffff88003627ffd8 ffff88003627ffd8 ffff88003627ffd8 [438920.782702] ffff880220adc2f0 ffff880222851650 ffff88003627fd90 ffff88003627fe2c [438920.782706] Call Trace: [438920.782713] [] ? cpumask_next_and+0x36/0x50 [438920.782718] [] schedule+0x3a/0x50 [438920.782721] [] schedule_timeout+0x1c5/0x300 [438920.782724] [] ? __enqueue_entity+0x74/0x80 [438920.782727] [] ? enqueue_entity+0xe5/0x4d0 [438920.782730] [] __down_common+0x95/0xe5 [438920.782752] [] ? xfs_getsb+0x37/0x60 [xfs] [438920.782755] [] __down+0x18/0x1a [438920.782759] [] down+0x3c/0x50 [438920.782768] [] xfs_buf_lock+0x44/0x110 [xfs] [438920.782781] [] xfs_getsb+0x37/0x60 [xfs] [438920.782795] [] xfs_trans_getsb+0x43/0x140 [xfs] [438920.782809] [] xfs_mod_sb+0x46/0xc0 [xfs] [438920.782820] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] [438920.782829] [] xfs_fs_log_dummy+0x4f/0x90 [xfs] [438920.782842] [] ? xfs_log_need_covered+0x83/0xb0 [xfs] [438920.782853] [] xfs_sync_worker+0x84/0x90 [xfs] [438920.782856] [] process_one_work+0x118/0x470 [438920.782859] [] worker_thread+0x15e/0x350 [438920.782862] [] ? manage_workers.isra.29+0x220/0x220 [438920.782864] [] kthread+0x87/0x90 [438920.782867] [] kernel_thread_helper+0x4/0x10 [438920.782870] [] ? kthread_worker_fn+0x190/0x190 [438920.782872] [] ? gs_change+0x13/0x13 [439640.359882] INFO: task kworker/0:3:7681 blocked for more than 120 seconds. [439640.359885] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [439640.359887] kworker/0:3 D ffff8801086499d8 0 7681 2 0x00000000 [439640.359891] ffff88013591db70 0000000000000046 ffff88013591db00 0000000000000086 [439640.359895] ffff880108649650 ffff88013591dfd8 ffff88013591dfd8 ffff88013591dfd8 [439640.359898] ffff880222335940 ffff880108649650 ffff88013591db80 ffffffff81044ecd [439640.359902] Call Trace: [439640.359909] [] ? try_to_wake_up+0x22d/0x290 [439640.359914] [] schedule+0x3a/0x50 [439640.359916] [] schedule_timeout+0x1c5/0x300 [439640.359920] [] ? kmem_cache_free+0x104/0x110 [439640.359924] [] ? mempool_free_slab+0x12/0x20 [439640.359927] [] __down_common+0x95/0xe5 [439640.359947] [] ? xfs_getsb+0x37/0x60 [xfs] [439640.359950] [] __down+0x18/0x1a [439640.359954] [] down+0x3c/0x50 [439640.359962] [] xfs_buf_lock+0x44/0x110 [xfs] [439640.359975] [] xfs_getsb+0x37/0x60 [xfs] [439640.359987] [] xfs_trans_getsb+0x43/0x140 [xfs] [439640.360000] [] xfs_mod_sb+0x46/0xc0 [xfs] [439640.360009] [] ? xfs_sync_inode_attr+0xf0/0xf0 [xfs] [439640.360018] [] xfs_fs_log_dummy+0x4f/0x90 [xfs] [439640.360030] [] ? xfs_log_need_covered+0x83/0xb0 [xfs] [439640.360039] [] xfs_sync_worker+0x84/0x90 [xfs] [439640.360042] [] process_one_work+0x118/0x470 [439640.360045] [] worker_thread+0x15e/0x350 [439640.360048] [] ? manage_workers.isra.29+0x220/0x220 [439640.360050] [] kthread+0x87/0x90 [439640.360053] [] kernel_thread_helper+0x4/0x10 [439640.360055] [] ? kthread_worker_fn+0x190/0x190 [439640.360057] [] ? gs_change+0x13/0x13 ------------------------------------------------------------ From bpm@sgi.com Tue Jan 31 17:44:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q0VNi8In140851 for ; Tue, 31 Jan 2012 17:44:08 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6AE6C304053 for ; Tue, 31 Jan 2012 15:44:08 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id B0E10426DA7; Tue, 31 Jan 2012 17:44:12 -0600 (CST) Date: Tue, 31 Jan 2012 17:44:12 -0600 From: Ben Myers To: xfs@oss.sgi.com Subject: Re: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-11433-g4505360 Message-ID: <20120131234412.GI7762@sgi.com> References: <201201311833.q0VIXXqP067877@oss.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201201311833.q0VIXXqP067877@oss.sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) Hi Folks, On Tue, Jan 31, 2012 at 12:33:33PM -0600, xfs@oss.sgi.com wrote: > 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". Please continue to use only the 'master' branch at git://oss.sgi.com/xfs/xfs.git for development on XFS. I have recently added the 'for-next' branch and asked Stephen Rothwell to pull from there for the -next trees so that we may have the opportunity to have bugfixes go through for-next into the Stephen's tree before going to Linus. As such, it may be necessary for the for-next branch to wiggle around a bit, making it unsuitable for anything except this purpose. If this doesn't work out the way I hope, we'll go back to the old workflow for the next release. Again, please stick with the master branch... Regards, Ben From stan@hardwarefreak.com Tue Jan 31 18:20:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q110KpW8145252 for ; Tue, 31 Jan 2012 18:20:51 -0600 X-ASG-Debug-ID: 1328055649-04bdf0751742a510001-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 uiyR4OQG4Ab6Ve33 for ; Tue, 31 Jan 2012 16:20:50 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 646BD6C119; Tue, 31 Jan 2012 18:20:49 -0600 (CST) Message-ID: <4F288561.5040803@hardwarefreak.com> Date: Tue, 31 Jan 2012 18:20:49 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131205014.GM9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <20120131205014.GM9090@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: 1328055650 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87246 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On 1/31/2012 2:50 PM, Dave Chinner wrote: > On Tue, Jan 31, 2012 at 03:04:18AM -0600, Stan Hoeppner wrote: >> On 1/30/2012 11:04 PM, Supratik Goswami wrote: >>> We are using Amazon EC2 instances. >> >> ^^^^^^^^^^ >> I'd have never thought I would see those words on this list, except >> maybe as a joke, or as an example of one of the the worst possible >> platforms for XFS. > > I don't agree with you there. If the workload works best on XFs, it > doesn't matter what the underlying storage device is. e.g. if it's a > fsync heavy workload, it will still perform better on XFS on EC2 > than btrfs on EC2... > >> I wish EC2 had been asked about during the QA session after Dave's >> presentation. I'm guessing some laughter would have been involved. ;) > > You'd be wrong about that. There are as many good uses of cloud > services as there are bad ones, yet the same decisions about storage > need to be made even when services are remotely hosted.... Maybe I should have elaborated a bit. My thinking is that workloads that would require XFS, or benefit most from it, are probably going to need more guarantees WRT bandwidth and IOPS being available consistently, vs sharing said resources with other systems in the cloud infrastructure. Additionally, you have driven the point home many times WRT tuning XFS to the underlying hardware, specifically stripe alignment. I'd bet alignment would be a bit tricky to achieve in a cloud environment such as EC2. In summary, I wasn't saying XFS is bad on EC2. I was simply saying EC2 is probably bad for the typical workloads where XFS best flexes its muscles. -- Stan From raghu.prabhu13@gmail.com Tue Jan 31 18:51:09 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.7 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_21,T_DKIM_INVALID,URI_OBFU_WWW autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q110p8PT146532 for ; Tue, 31 Jan 2012 18:51:08 -0600 X-ASG-Debug-ID: 1328057465-04bdf0751842ce20001-NocioJ Received: from mail-pz0-f53.google.com (mail-pz0-f53.google.com [209.85.210.53]) by cuda.sgi.com with ESMTP id pxXz1Gj7ldTUG2zX (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 31 Jan 2012 16:51:05 -0800 (PST) X-Barracuda-Envelope-From: raghu.prabhu13@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.210.53 Received: by dady25 with SMTP id y25so483824dad.26 for ; Tue, 31 Jan 2012 16:51:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :x-operating-system:x-editor:user-agent; bh=d9UC8/F9tUNHiMmPMTfNLpIVhFRQDobA/yKOsawlgNE=; b=iJCZdF+F0p0rmgQPgkH0P7Vorxt1Fnh8jXKrkNyMR23iGFOGK6NIPxdZ+HFOZBSRTf YeklbfRYmgtsT48eN30p7YB928WNng80nQQaWiI2PVhY3Asa/6eYdjakizcijgs6eEMX FxfkuxnB6OnTMDuLuPBJF2h+P/WM6xhGqDNO8= Received: by 10.68.225.71 with SMTP id ri7mr38033062pbc.129.1328057465497; Tue, 31 Jan 2012 16:51:05 -0800 (PST) Received: from localhost ([122.172.171.34]) by mx.google.com with ESMTPS id x6sm30921758pbf.7.2012.01.31.16.51.02 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 31 Jan 2012 16:51:04 -0800 (PST) Date: Wed, 1 Feb 2012 06:20:57 +0530 From: Raghavendra D Prabhu To: Brian Candler Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120201005057.GA44385@Xye> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes Mail-Followup-To: Brian Candler , Christoph Hellwig , xfs@oss.sgi.com References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131145205.GA6607@infradead.org> <20120131215210.GB47420@soundmouse.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="/9DWx/yDrRhgMJTb" Content-Disposition: inline In-Reply-To: <20120131215210.GB47420@soundmouse.com> X-Operating-System: Arch linux x86_64 3.2.0-rc7-VYX X-Editor: VIM - Vi IMproved 7.3 User-Agent: Mutt/1.5.21 (2010-12-30) X-Barracuda-Connect: mail-pz0-f53.google.com[209.85.210.53] X-Barracuda-Start-Time: 1328057465 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-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=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87248 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 --/9DWx/yDrRhgMJTb Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi, * On Tue, Jan 31, 2012 at 09:52:10PM +0000, Brian Candler wrote: >On Tue, Jan 31, 2012 at 09:52:05AM -0500, Christoph Hellwig wrote: >> You don't just read a single file at a time but multiple ones, don't >> you? > >It's sequential at the moment, although I'll do further tests with the -c >(concurrency) option to bonnie++ > >> Try playing with the following tweaks to get larger I/O to the disk: >> >> a) make sure you use the noop or deadline elevators >> b) increase /sys/block/sdX/queue/max_sectors_kb from its low default >> c) dramatically increase /sys/devices/virtual/bdi/:/read_= ahead_kb > >Thank you very much: I will do further tests with these. > >Is the read_ahead_kb knob aware of file boundaries? That is, is there any >risk that if I set it too large it would read useless blocks past the end = of >the file? The read_ahead_kb knob is used the by memory subsystem=20 readahead code to set the initial readahead to scale from (it=20 uses a dynamic scaling window). It is set by default based on=20 device readahead value (probably obtained in a way similar to=20 hdparm -I).=20 =20 Setting it higher will be beneficial for sequential workloads=20 and the risk you mentioned is not there since it file=20 boundary aware -- check=20 http://lxr.linux.no/linux+*/mm/readahead.c#L151 for more=20 details. > >Regards, > >Brian. > >_______________________________________________ >xfs mailing list >xfs@oss.sgi.com >http://oss.sgi.com/mailman/listinfo/xfs Regards, --=20 Raghavendra Prabhu GPG Id : 0xD72BE977 Fingerprint: B93F EBCB 8E05 7039 CD3C A4B8 A616 DCA1 D72B E977 www: wnohang.net --/9DWx/yDrRhgMJTb Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iQEcBAEBAgAGBQJPKIxxAAoJEKYW3KHXK+l3kygH/RjCzgDrUKKkxIthJt8NgPlq GOq6OpCLdYg7aCDFd5CkUAQgTLnb/dD5yM0qlEBkka144BFu2CQqEKBWDZyawM90 eNjNVycYS3E8z62n1FRSMmoja0ehqzJU7BEJaXvf8i1b4vW82UvQ0kcQ2q/uxxIT 0aLrV8Yy3vvNnyThXE1pQNIxYwz1+UR8vMvJuXGopyd72tr4VOmv2dnHhOeCRuum EB//6glR+gyMZjvgLFbveYeW8aAaGGSDnrapBTVqQxSfXpbZjuX1xTEGVxTUhb0B xv1UKI8dxnEJhkEXXZwxpbtxHFuQi7x/nAlsv7Defeg1Ct5kve8y1mZ4OhRL5O8= =9TqE -----END PGP SIGNATURE----- --/9DWx/yDrRhgMJTb-- From sandeen@sandeen.net Tue Jan 31 20:27:59 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q112RxKu161957 for ; Tue, 31 Jan 2012 20:27:59 -0600 X-ASG-Debug-ID: 1328063277-04bdf07518435a50001-NocioJ Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id 1ILtiOJXZ35Slf5v for ; Tue, 31 Jan 2012 18:27:57 -0800 (PST) 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-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 297A2496334E; Tue, 31 Jan 2012 20:27:57 -0600 (CST) Message-ID: <4F28A32C.9030706@sandeen.net> Date: Tue, 31 Jan 2012 20:27:56 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Dave Chinner CC: xfs-oss , WuBo Subject: Re: [PATCH] xfstests: several 274 fixups References: <4F271967.10308@sandeen.net> <20120131224152.GP9090@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: several 274 fixups In-Reply-To: <20120131224152.GP9090@dastard> X-Enigmail-Version: 1.3.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1328063277 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87254 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 1/31/12 4:41 PM, Dave Chinner wrote: > On Mon, Jan 30, 2012 at 04:27:51PM -0600, Eric Sandeen wrote: >> This changes quite a few things about 274 to make it more robust >> and useful. >> >> * More comments >> * Use xfs_io for falloc (not all systems have /usr/bin/fallocate) >> * use _require_xfs_io_falloc to be sure system & fs support preallocation >> * Do not remove all of the files in $SCRATCH_MNT/ post-mkfs >> * Do not remove all of the files in $SCRATCH_MNT/ on completion >> (this breaks e2fsck when lost+found/ goes missing) > > FWIW, can't e2fsck be fixed to handle this case? perhaps some day. but it'd return "modified" if it adds lost+found ... I suppose it could just be left missing unless otherwise needed. > ...... >> _cleanup() >> { >> cd / >> - rm -f $SCRATCH_MNT/* $tmp.* >> + rm -f $tmp.* >> _scratch_unmount >> } >> >> @@ -46,6 +48,7 @@ _cleanup() >> _supported_fs generic >> _supported_os IRIX Linux >> _require_scratch >> +_require_xfs_io_falloc >> >> echo "------------------------------" >> echo "preallocation test" >> @@ -57,32 +60,39 @@ umount $SCRATCH_DEV 2>/dev/null >> _scratch_mkfs_sized $((1 * 1024 * 1024 * 1024)) >>$seq.full 2>&1 >> _scratch_mount >> >> -rm -rf $SCRATCH_MNT/* >> -cd $SCRATCH_MNT >> -dd if=/dev/zero of=test bs=4K count=1 >/dev/null 2>&1 >> +# Create a 4k file >> +dd if=/dev/zero of=$SCRATCH_MNT/test bs=4K count=1 >>$seq.full 2>&1 >> if [ $? -ne 0 ] >> then >> - echo "create file err" >> + echo "create file error" >> status=1 >> exit >> fi >> >> -fallocate -n -o 4K -l 1M test >/dev/null 2>&1 >> +# Allocate 4M past EOF on that file >> +xfs_io -F -c "falloc -k 4k 4m" $SCRATCH_MNT/test >>$seq.full 2>&1 >> if [ $? -ne 0 ] >> then >> - echo "fallocate file err" >> + echo "fallocate file error" >> status=1 >> exit >> fi > > That whole create and falloc step can be done with one command: > > xfs_io -F -c "write 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test > > The output of xfs_io will tell us what failed if it does. > > Also, failure handling is as simple as appending: > > || _fail "failure string" > > to the command. It handles setting status appropriately, tees the > failure string to $seq.full, and tells the user to go look at > $seq.full for why the test failed. hence that 16 lines of script can > be simply replaced with these 2 lines: > > xfs_io -F -c "write 0 4k" -c "falloc -k 4k 4m" $SCRATCH_MNT/test \ > >>$seq.full 2>&1 || _fail "failed to create test file" Ok, that's fine. >> -dd if=/dev/zero of=tmp1 bs=1M >/dev/null 2>&1 >> -dd if=/dev/zero of=tmp2 bs=4K >/dev/null 2>&1 >> +# Fill the rest of the fs completely >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M >>$seq.full 2>&1 >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=4K >>$seq.full 2>&1 >> sync >> +# Last effort, use O_SYNC >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K oflag=sync >>$seq.full 2>&1 >> +# Save space usage info >> +echo "Post-fill space:" >> $seq.full >> +df $SCRATCH_MNT >>$seq.full 2>&1 >> >> -dd if=/dev/zero of=test seek=1 bs=4K count=2 conv=notrunc >/dev/null 2>&1 >> +# Now attempt a write into all of the preallocated space >> +dd if=/dev/zero of=$SCRATCH_MNT/test seek=1 bs=4K count=1024 conv=notrunc >>$seq.full 2>&1 >> if [ $? -ne 0 ] >> then >> - echo "fill prealloc range err" >> + echo "fill prealloc range error" >> status=1 >> exit >> fi > > I'd still like to see this write attempt to trigger nasty behaviours > like needing to allocate a metadata block for the extent list. I > suggested randholes, but perhaps this would be easier: > > for i in `seq 1 2 1023`; do > dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \ > >>$seq.full 2>&1 || _fail "failed to write test file" > done > > which will write every second block and so only convert every second > block from unwritten to written and hence blow out the size of the > extent list and require extent map block allocation and potentially > trigger ENOSPC that way.... but will also only write half the actual preallocated space. I guess it depends on what we are trying to test - reservations for metadata or proper accounting of prealloc'd space itself...? (and really, what is the proper amount of preallocated metadata space; if I subbed 2G for 4M, would anything survive the test above?) -Eric > Cheers, > > Dave. From david@fromorbit.com Tue Jan 31 21:59:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q113xK9M186579 for ; Tue, 31 Jan 2012 21:59:20 -0600 X-ASG-Debug-ID: 1328068757-04cbb01fb54ada20001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id lFUVPcYRjPk8ITbQ for ; Tue, 31 Jan 2012 19:59:18 -0800 (PST) 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: Av0EAPi2KE95LD+b/2dsb2JhbABDrm+BBoFyAQEFOhwjEAgDGC4UJQMhE8EtE4sSAgIJBQwHBgELAQgFAwMJBgQPBoQeAQMBBB6DOQSVH5Jp Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 01 Feb 2012 14:29:16 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsRLn-0007ew-VA; Wed, 01 Feb 2012 14:59:15 +1100 Date: Wed, 1 Feb 2012 14:59:15 +1100 From: Dave Chinner To: Brian Candler Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120201035915.GS9090@dastard> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131145205.GA6607@infradead.org> <20120131215210.GB47420@soundmouse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131215210.GB47420@soundmouse.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: 1328068757 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87260 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 09:52:10PM +0000, Brian Candler wrote: > On Tue, Jan 31, 2012 at 09:52:05AM -0500, Christoph Hellwig wrote: > > You don't just read a single file at a time but multiple ones, don't > > you? > > It's sequential at the moment, although I'll do further tests with the -c > (concurrency) option to bonnie++ > > > Try playing with the following tweaks to get larger I/O to the disk: > > > > a) make sure you use the noop or deadline elevators > > b) increase /sys/block/sdX/queue/max_sectors_kb from its low default > > c) dramatically increase /sys/devices/virtual/bdi/:/read_ahead_kb > > Thank you very much: I will do further tests with these. > > Is the read_ahead_kb knob aware of file boundaries? That is, is there any > risk that if I set it too large it would read useless blocks past the end of > the file? Yes, readahead only occurs within the file, and won't readahead past EOF. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Tue Jan 31 22:07:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_47,J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q1147CoQ186936 for ; Tue, 31 Jan 2012 22:07:12 -0600 X-ASG-Debug-ID: 1328069229-04cb6c225f3a08b0001-NocioJ Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id WL1uzpCpsRc7l4Ie for ; Tue, 31 Jan 2012 20:07:10 -0800 (PST) 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: Av0EAPi2KE95LD+b/2dsb2JhbABDrm+BBoFyAQEFOhwjEAgDGC4UJQMhE8EtE4sSAgIJBQwHBgELAQgFAwMJBgQPhCQBAwEEHoM5BJUfkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail04.adl6.internode.on.net with ESMTP; 01 Feb 2012 14:37:09 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsRTP-0007g7-Vz; Wed, 01 Feb 2012 15:07:08 +1100 Date: Wed, 1 Feb 2012 15:07:07 +1100 From: Dave Chinner To: Eric Sandeen Cc: xfs-oss , WuBo Subject: Re: [PATCH] xfstests: several 274 fixups Message-ID: <20120201040707.GT9090@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfstests: several 274 fixups References: <4F271967.10308@sandeen.net> <20120131224152.GP9090@dastard> <4F28A32C.9030706@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F28A32C.9030706@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: 1328069229 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 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=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87260 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Jan 31, 2012 at 08:27:56PM -0600, Eric Sandeen wrote: > On 1/31/12 4:41 PM, Dave Chinner wrote: > > On Mon, Jan 30, 2012 at 04:27:51PM -0600, Eric Sandeen wrote: > >> -dd if=/dev/zero of=tmp1 bs=1M >/dev/null 2>&1 > >> -dd if=/dev/zero of=tmp2 bs=4K >/dev/null 2>&1 > >> +# Fill the rest of the fs completely > >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M >>$seq.full 2>&1 > >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp2 bs=4K >>$seq.full 2>&1 > >> sync > >> +# Last effort, use O_SYNC > >> +dd if=/dev/zero of=$SCRATCH_MNT/tmp3 bs=4K oflag=sync >>$seq.full 2>&1 > >> +# Save space usage info > >> +echo "Post-fill space:" >> $seq.full > >> +df $SCRATCH_MNT >>$seq.full 2>&1 > >> > >> -dd if=/dev/zero of=test seek=1 bs=4K count=2 conv=notrunc >/dev/null 2>&1 > >> +# Now attempt a write into all of the preallocated space > >> +dd if=/dev/zero of=$SCRATCH_MNT/test seek=1 bs=4K count=1024 conv=notrunc >>$seq.full 2>&1 > >> if [ $? -ne 0 ] > >> then > >> - echo "fill prealloc range err" > >> + echo "fill prealloc range error" > >> status=1 > >> exit > >> fi > > > > I'd still like to see this write attempt to trigger nasty behaviours > > like needing to allocate a metadata block for the extent list. I > > suggested randholes, but perhaps this would be easier: > > > > for i in `seq 1 2 1023`; do > > dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \ > > >>$seq.full 2>&1 || _fail "failed to write test file" > > done > > > > which will write every second block and so only convert every second > > block from unwritten to written and hence blow out the size of the > > extent list and require extent map block allocation and potentially > > trigger ENOSPC that way.... > > but will also only write half the actual preallocated space. I guess it > depends on what we are trying to test - reservations for metadata or proper > accounting of prealloc'd space itself...? So then go back and fill in the unwritten blocks. i.e: for i in `seq 1 2 1023`; do dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \ >>$seq.full 2>&1 || _fail "failed to write test file" done sync for i in `seq 2 2 1023`; do dd if=/dev/zero of=$SCRATCH_MNT/test seek=$i bs=4K count=1 conv=notrunc \ >>$seq.full 2>&1 || _fail "failed to fill test file" done sync > (and really, what is the proper amount of preallocated metadata space; if > I subbed 2G for 4M, would anything survive the test above?) Given that the test is only using a 1GB filesystem.... ;) But even if it was 2GB, then I'm pretty sure that XFS would handle it fine. Take a long to run, though, with all those individual 4k IOs. My point was simply to determine if the filesystem will be able to hold up the guarantees posix_fallocate() tries to give applications, and so enough extents simple to force a single metadata block allocation is all that is required. Having a 1000 extent state changes shoul dbe sufficient to cause that.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From ygq51@hotmail.com Tue Jan 31 23:47:01 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q115l1uF191345 for ; Tue, 31 Jan 2012 23:47:01 -0600 X-ASG-Debug-ID: 1328075219-04cb6c22603a8400001-w1Z2WR Received: from snt0-omc1-s27.snt0.hotmail.com (snt0-omc1-s27.snt0.hotmail.com [65.55.90.38]) by cuda.sgi.com with ESMTP id QAEbDSLeDZFFfBfp for ; Tue, 31 Jan 2012 21:47:00 -0800 (PST) X-Barracuda-Envelope-From: ygq51@hotmail.com X-Barracuda-Apparent-Source-IP: 65.55.90.38 Received: from SNT135-W37 ([65.55.90.9]) by snt0-omc1-s27.snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 31 Jan 2012 21:46:59 -0800 Message-ID: Content-Type: multipart/alternative; boundary="_d46fa29a-a08b-4572-b36a-2122a86c8a82_" X-Originating-IP: [60.191.94.124] From: yangguoquan To: CC: , Subject: RE: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again Date: Wed, 1 Feb 2012 13:46:58 +0800 X-ASG-Orig-Subj: RE: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again Importance: Normal In-Reply-To: <20120124175826.GA23671@infradead.org> References: <1276846374-23916-1-git-send-email-david@fromorbit.com>,,<20111123143045.GA20892@infradead.org>,<20111128111947.GA26454@infradead.org>,,,<20120102150201.GB31110@infradead.org>,,<20120124175826.GA23671@infradead.org> MIME-Version: 1.0 X-OriginalArrivalTime: 01 Feb 2012 05:46:59.0183 (UTC) FILETIME=[E9FCF7F0:01CCE0A4] X-Barracuda-Connect: snt0-omc1-s27.snt0.hotmail.com[65.55.90.38] X-Barracuda-Start-Time: 1328075220 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC0_SA038b, HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC0_SA038b Custom Rule SA038b --_d46fa29a-a08b-4572-b36a-2122a86c8a82_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit The handles appear in wireshark is the same as in the /proc/net/rpc/nfsd.fh/content info but there no corresponding directory path. just like this: # * 6 0x06fd0000000000000000000000000000 root@Dahua_Storage:~# cat /proc/net/rpc/nfsd.fh/content #domain fsidtype fsid [path] * 6 0x00fd0000000000000000000000000000 /mnt/storage_pool/testnfs00 * 6 0x03fd0000000000000000000000000000 /mnt/storage_pool/testnfs03 * 6 0x02fd0000000000000000000000000000 /mnt/storage_pool/testnfs02 * 6 0x01fd0000000000000000000000000000 /mnt/storage_pool/testnfs01 # * 6 0x06fd0000000000000000000000000000 * 6 0x05fd0000000000000000000000000000 /mnt/storage_pool/testnfs05 * 6 0x04fd0000000000000000000000000000 /mnt/storage_pool/testnfs04 # * 6 0x09fd0000000000000000000000000000 # * 6 0x08fd0000000000000000000000000000 # * 6 0x07fd0000000000000000000000000000 more info, this problem happens when rebooting the storage server while the nfs clients is still accessing the mounting points. > Date: Tue, 24 Jan 2012 12:58:26 -0500 > From: hch@infradead.org > To: ygq51@hotmail.com > Subject: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again > CC: hch@infradead.org; linux-xfs@oss.sgi.com; pengxihan@gmail.com > > On Wed, Jan 04, 2012 at 10:20:31AM +0800, yangguoquan wrote: > > > > Yes, They are mount points. > > > > /dev/mapper/storage_pool-testnfs00 on /mnt/storage_pool/testnfs00 type xfs (rw) > > In that case I really have no idea. Did you make sure you no > outstanding "old" filehandles before the fix on clients? How do the > handles look in wireshark traces? > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --_d46fa29a-a08b-4572-b36a-2122a86c8a82_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: 8bit
The handles appear in wireshark is the same as in the /proc/net/rpc/nfsd.fh/content info
but there no corresponding directory path. just like this:
# * 6 0x06fd0000000000000000000000000000
root@Dahua_Storage:~# cat /proc/net/rpc/nfsd.fh/content
#domain fsidtype fsid [path]
* 6 0x00fd0000000000000000000000000000 /mnt/storage_pool/testnfs00
* 6 0x03fd0000000000000000000000000000 /mnt/storage_pool/testnfs03
* 6 0x02fd0000000000000000000000000000 /mnt/storage_pool/testnfs02
* 6 0x01fd0000000000000000000000000000 /mnt/storage_pool/testnfs01
# * 6 0x06fd0000000000000000000000000000
* 6 0x05fd0000000000000000000000000000 /mnt/storage_pool/testnfs05
* 6 0x04fd0000000000000000000000000000 /mnt/storage_pool/testnfs04
# * 6 0x09fd0000000000000000000000000000
# * 6 0x08fd0000000000000000000000000000
# * 6 0x07fd0000000000000000000000000000
 
more info, this problem happens when rebooting the storage server while the nfs clients is still accessing the mounting points.
> Date: Tue, 24 Jan 2012 12:58:26 -0500
> From: hch@infradead.org
> To: ygq51@hotmail.com
> Subject: Re: xfs: validate inode numbers in file handles correctly--NFS Stale File Handle Again
> CC: hch@infradead.org; linux-xfs@oss.sgi.com; pengxihan@gmail.com
>
> On Wed, Jan 04, 2012 at 10:20:31AM +0800, yangguoquan wrote:
> >
> > Yes, They are mount points.
> >
> > /dev/mapper/storage_pool-testnfs00 on /mnt/storage_pool/testnfs00 type xfs (rw)
>
> In that case I really have no idea. Did you make sure you no
> outstanding "old" filehandles before the fix on clients? How do the
> handles look in wireshark traces?
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
--_d46fa29a-a08b-4572-b36a-2122a86c8a82_--