From 3b7MbVQsHA_ImohmYmiZnvuv0x.WigrZmimm.mac.Wig@trix.bounces.google.com Wed Apr 1 03:59:31 2015 Return-Path: <3b7MbVQsHA_ImohmYmiZnvuv0x.WigrZmimm.mac.Wig@trix.bounces.google.com> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_REMOTE_IMAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4E31D7F37 for ; Wed, 1 Apr 2015 03:59:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id A6184AC006 for ; Wed, 1 Apr 2015 01:59:30 -0700 (PDT) X-ASG-Debug-ID: 1427878767-04cb6c3fdc230990001-NocioJ Received: from mail-ob0-f198.google.com (mail-ob0-f198.google.com [209.85.214.198]) by cuda.sgi.com with ESMTP id FrAA4xazf143gxCh (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 Apr 2015 01:59:28 -0700 (PDT) X-Barracuda-Envelope-From: 3b7MbVQsHA_ImohmYmiZnvuv0x.WigrZmimm.mac.Wig@trix.bounces.google.com Received: by obvd1 with SMTP id d1so73259642obv.2 for ; Wed, 01 Apr 2015 01:59:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=mime-version:message-id:date:subject:from:to:content-type; bh=hc7bp2tI5W5Y36z5W26MHxuu8kYcrozKbPET/znZuPc=; b=eB3bepzYHUXIbp1bM1NM5QUA6kZ0exW3Ls74aHSm5R1+iuAyy202ZLhl+Vf5x5jQwN xe7deHOhC6G76kFlmkWAGvXIJxhFCZUI/UKpCPTnol0qywELTv+ySUPgnuZW0RqZ4zv5 w8jIiPVJjvai61S8GY3BL8wWyQY829tP+RDmnOXnQcADIy4PP75+Sl04KBbxhDp1L/Hv r7afnLFt0R7gthIelWP9GqbJL4597J2M+fIsYFAsqJrS9TM4zwDJW/igpM/4qwv1B260 klkJbn0JShNP9GxtyWZljLBjr53YhlEo8zOvG6+e13u4w774TBSAat6h7Ne9a5kwuMPc LDeA== MIME-Version: 1.0 X-Received: by 10.182.135.230 with SMTP id pv6mt66640816obb.17.1427878767729; Wed, 01 Apr 2015 01:59:27 -0700 (PDT) X-No-Auto-Attachment: 1 Message-ID: <089e0112c5ccbb9f850512a5ee5e@google.com> Date: Wed, 01 Apr 2015 08:59:27 +0000 Subject: =?GB2312?B?zeLDs9b3tq/KvdOqz/qzyc6qzeLDs9eq0M3QwsK3vrY=?= From: sunsesoft10@163.com X-ASG-Orig-Subj: =?GB2312?B?zeLDs9b3tq/KvdOqz/qzyc6qzeLDs9eq0M3QwsK3vrY=?= To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=089e0112c5ccbc9f5e0512a5ee8d X-Barracuda-Connect: mail-ob0-f198.google.com[209.85.214.198] X-Barracuda-Start-Time: 1427878768 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17425 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HTML_MESSAGE BODY: HTML included in message --089e0112c5ccbc9f5e0512a5ee8d Content-Type: text/plain; charset=GB2312; format=flowed; delsp=yes Content-Transfer-Encoding: base64 xPq21NPaytbJz83iw7PXytS0wvrS4sLwo78NCs7Sw8e3os/WxL/HsLrctuDN4sOzxvPStdP2tb3S 1M/CxNHM4qO6DQrGvcyoxNHX9qO/v827p9PQ0KfRr8XMvPXJ2aO/1bm74bPJsb7Mq7jfo7+/zbun t7bOp8yr1a2jvw0K16jStc6qzeLDs8bz0rXM4bmpv827p7+qt6K94r72t72wuDoNCs7Sw8fE3M6q xPrX9rW9x+HLyb+qt6K/zbuno6y2qbWlsru2z6Osv6q3orP2yvTT2tfUvLq1xL/Nu6fIuqGjDQrO 0sPHxNzOqsT6tcTG89K11sa2qNK7zNfXqNK1tcS/zbunv6q3or3ivva3vbC4t/7O8aOss9DFtbDZ t9aw2bP20Ke5+6Oszt4NCtCnyKu27s3Lv+6how0KztLDx7L6xre1xLmmxNy8sMbk08XKxqO6DQox oaLA+9PDy9HL99L9x+bW97avv6q3osirx/LEv7Hqv827p6GjDQoyoaK2zMqxvOTE2r7NxNzK1bW9 tPPBv9Gvxcy6zbaptaWhow0KM6Gi1ve2r7XY1dK1vcTjtcTEv7Hqv827p8i6zOWhow0KNKGi1ve2 r72rxPq1xLL6xrfTyrz+yLq3os3GueO4+L/Nu6ehow0KNaGisdzD4s3iw7O1rby+o6yx3MPi0a/F zLbgo6yzyb27ydmjrM3iw7O/qreizbbXyrjfo6xCMkLRr8XM1srBv7K7uN+1xMCnDQq+1qGjDQo2 oaLN4sOzv827p7+qt6Kyu9TZxNGjrLK71NnX383kwrejrMjDyKvH8r/Nu6fW97avwarPtcT6oaMN CsjnufvE+rbUztLDx7XEsvrGt9LUvLC3/s7xuNDQy8iko6y7ttOtxPq72Li008q8/rvyvNPO0lFR z+rMuKGjDQpyZXBsYXkgdG/K/dfWusVRUS8xNzUzMjQ0OTI5DQq/ycD708O588u+s6PTw7XEsvrG t7nYvPy0yqOsw+K30dTaz9/R3cq+yO28/rXEuabE3LrNy9HL99CnufsNCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQrI9LK70OjSqrTLwODTyrz+x+vJ6NbDvtzK1aOssafHuLTyxNMNCg0K DQoNCg0KDQoNCg0KSSd2ZSBpbnZpdGVkIHlvdSB0byBmaWxsIG91dCB0aGUgZm9ybSBVbnRpdGxl ZCBmb3JtLiBUbyBmaWxsIGl0IG91dCwNCnZpc2l0Og0KaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20v Zm9ybXMvZC8xUmFKaG5OU3ZIMWo2X2VHLVFDaDRHVU9LdHRRSFpZXzBlOEpHRWJqeXNoYy92aWV3 Zm9ybT9jPTAmdz0xJnVzcD1tYWlsX2Zvcm1fbGluaw0K --089e0112c5ccbc9f5e0512a5ee8d Content-Type: text/html; charset=GB2312 Content-Transfer-Encoding: quoted-printable

=C4=FA=B6=D4=D3=DA=CA=D6=C9=CF=CD=E2= =C3=B3=D7=CA=D4=B4=C2=FA=D2=E2=C2=F0=A3=BF

=CE=D2=C3=C7=B7=A2=CF=D6=C4=BF= =C7=B0=BA=DC=B6=E0=CD=E2=C3=B3=C6=F3=D2=B5=D3=F6=B5=BD=D2=D4=CF=C2=C4=D1=CC= =E2=A3=BA
=C6=BD=CC=A8=C4=D1=D7=F6=A3=BF=BF=CD=BB=A7=D3=D0=D0=A7=D1=AF= =C5=CC=BC=F5=C9=D9=A3=BF=D5=B9=BB=E1=B3=C9=B1=BE=CC=AB=B8=DF=A3=BF=BF=CD=BB= =A7=B7=B6=CE=A7=CC=AB=D5=AD=A3=BF

=D7=A8=D2=B5=CE=AA=CD=E2=C3=B3=C6=F3= =D2=B5=CC=E1=B9=A9=BF=CD=BB=A7=BF=AA=B7=A2=BD=E2=BE=F6=B7=BD=B0=B8:
=CE= =D2=C3=C7=C4=DC=CE=AA=C4=FA=D7=F6=B5=BD=C7=E1=CB=C9=BF=AA=B7=A2=BF=CD=BB=A7= =A3=AC=B6=A9=B5=A5=B2=BB=B6=CF=A3=AC=BF=AA=B7=A2=B3=F6=CA=F4=D3=DA=D7=D4=BC= =BA=B5=C4=BF=CD=BB=A7=C8=BA=A1=A3
=CE=D2=C3=C7=C4=DC=CE=AA=C4=FA=B5=C4= =C6=F3=D2=B5=D6=C6=B6=A8=D2=BB=CC=D7=D7=A8=D2=B5=B5=C4=BF=CD=BB=A7=BF=AA=B7= =A2=BD=E2=BE=F6=B7=BD=B0=B8=B7=FE=CE=F1=A3=AC=B3=D0=C5=B5=B0=D9=B7=D6=B0=D9= =B3=F6=D0=A7=B9=FB=A3=AC=CE=DE=D0=A7=C8=AB=B6=EE=CD=CB=BF=EE=A1=A3

=CE=D2= =C3=C7=B2=FA=C6=B7=B5=C4=B9=A6=C4=DC=BC=B0=C6=E4=D3=C5=CA=C6=A3=BA
1=A1= =A2=C0=FB=D3=C3=CB=D1=CB=F7=D2=FD=C7=E6=D6=F7=B6=AF=BF=AA=B7=A2=C8=AB=C7=F2= =C4=BF=B1=EA=BF=CD=BB=A7=A1=A3
2=A1=A2=B6=CC=CA=B1=BC=E4=C4=DA=BE=CD=C4= =DC=CA=D5=B5=BD=B4=F3=C1=BF=D1=AF=C5=CC=BA=CD=B6=A9=B5=A5=A1=A3
3=A1=A2= =D6=F7=B6=AF=B5=D8=D5=D2=B5=BD=C4=E3=B5=C4=C4=BF=B1=EA=BF=CD=BB=A7=C8=BA=CC= =E5=A1=A3
4=A1=A2=D6=F7=B6=AF=BD=AB=C4=FA=B5=C4=B2=FA=C6=B7=D3=CA=BC=FE= =C8=BA=B7=A2=CD=C6=B9=E3=B8=F8=BF=CD=BB=A7=A1=A3
5=A1=A2=B1=DC=C3=E2=CD= =E2=C3=B3=B5=AD=BC=BE=A3=AC=B1=DC=C3=E2=D1=AF=C5=CC=B6=E0=A3=AC=B3=C9=BD=BB= =C9=D9=A3=AC=CD=E2=C3=B3=BF=AA=B7=A2=CD=B6=D7=CA=B8=DF=A3=ACB2B=D1=AF=C5=CC= =D6=CA=C1=BF=B2=BB=B8=DF=B5=C4=C0=A7=BE=D6=A1=A3
6=A1=A2=CD=E2=C3=B3=BF= =CD=BB=A7=BF=AA=B7=A2=B2=BB=D4=D9=C4=D1=A3=AC=B2=BB=D4=D9=D7=DF=CD=E4=C2=B7= =A3=AC=C8=C3=C8=AB=C7=F2=BF=CD=BB=A7=D6=F7=B6=AF=C1=AA=CF=B5=C4=FA=A1=A3 =C8=E7=B9=FB=C4=FA=B6=D4=CE=D2=C3=C7=B5=C4=B2=FA=C6=B7=D2=D4=BC=B0=B7=FE= =CE=F1=B8=D0=D0=CB=C8=A4=A3=AC=BB=B6=D3=AD=C4=FA=BB=D8=B8=B4=D3=CA=BC=FE=BB= =F2=BC=D3=CE=D2QQ=CF=EA=CC=B8=A1=A3

replay to=CA=FD=D7=D6=BA=C5QQ/1753244= 929

=BF=C9=C0=FB=D3=C3=B9=F3=CB=BE=B3=A3=D3=C3=B5=C4=B2=FA=C6=B7=B9=D8= =BC=FC=B4=CA=A3=AC=C3=E2=B7=D1=D4=DA=CF=DF=D1=DD=CA=BE=C8=ED=BC=FE=B5=C4=B9= =A6=C4=DC=BA=CD=CB=D1=CB=F7=D0=A7=B9=FB

-----------------------------
= =C8=F4=B2=BB=D0=E8=D2=AA=B4=CB=C0=E0=D3=CA=BC=FE=C7=EB=C9=E8=D6=C3=BE=DC=CA= =D5=A3=AC=B1=A7=C7=B8=B4=F2=C4=D3

If you have trouble viewing or submitting this form, you can fill it out in= Google Forms.

Untitled form

=
    • Option 1
P= owered by
3D"Google
This content is neither create= d nor endorsed by Google.
Report Abuse - Terms of Service<= /a> - Addition= al Terms

<= /html> --089e0112c5ccbc9f5e0512a5ee8d-- From danny@zadarastorage.com Wed Apr 1 09:09:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 252537F5A for ; Wed, 1 Apr 2015 09:09:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 76624AC005 for ; Wed, 1 Apr 2015 07:09:15 -0700 (PDT) X-ASG-Debug-ID: 1427897351-04cbb06cc9295190001-NocioJ Received: from mail-wg0-f47.google.com (mail-wg0-f47.google.com [74.125.82.47]) by cuda.sgi.com with ESMTP id 7gUPrSsR12aXtRKF (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 Apr 2015 07:09:12 -0700 (PDT) X-Barracuda-Envelope-From: danny@zadarastorage.com X-Barracuda-Apparent-Source-IP: 74.125.82.47 Received: by wgoe14 with SMTP id e14so54565107wgo.0 for ; Wed, 01 Apr 2015 07:09:11 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to:cc :content-type; bh=V4//W8etbY4ndyi2H6nTSWXmUJ5/B8g0lSlty+fLzuE=; b=cjMEHZJ98Z1ihddGqyRW4rsKX+gkPaK+1k4XQEYEiKMFvrH8BmPf7X5otHv6aiV4la JIQJehX4ZucsSKYDGLySq9zKXZqmMNUPKiKcde+fotXLcw9XkuHfgjoLB2UmQPtozJoj tWcAxTV+QSYXPWSDgBeVk4jVctEJ3m/lKSSz00vL9Q0DnExya2aiHy1H6xwBDqhcTVPg i82XjYE5ln4aHGf21K7AvTVebuZsuEbUaiZQvKwjzKjvMR2X8Un45tOQRMB+mxsYM4gF RacsdqxqnHaQQaEAphOLUmBfKmWFSWlOZOjwbbIO5Ay1PNx00G5nm5O9h0LONqRQQ3uJ Gz+g== X-Gm-Message-State: ALoCoQk4YHpwi1MgE1GMG22Pc+gglUSxKwrE1nsjSs8o6gwbLJorTmOGMnvAdKBZHTa8FpUirE3P MIME-Version: 1.0 X-Received: by 10.194.208.229 with SMTP id mh5mr84432468wjc.108.1427897351276; Wed, 01 Apr 2015 07:09:11 -0700 (PDT) Received: by 10.28.60.68 with HTTP; Wed, 1 Apr 2015 07:09:11 -0700 (PDT) Date: Wed, 1 Apr 2015 17:09:11 +0300 Message-ID: Subject: xfs corruption issue From: Danny Shavit X-ASG-Orig-Subj: xfs corruption issue To: xfs@oss.sgi.com, Dave Chinner Cc: Alex Lyakas , Lev Vainblat Content-Type: multipart/alternative; boundary=001a11338f6c661fed0512aa42e9 X-Barracuda-Connect: mail-wg0-f47.google.com[74.125.82.47] X-Barracuda-Start-Time: 1427897352 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.00 X-Barracuda-Spam-Status: No, SCORE=1.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_TG232, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC0_TG232 BODY: Custom Rule TG232 0.00 HTML_MESSAGE BODY: HTML included in message --001a11338f6c661fed0512aa42e9 Content-Type: text/plain; charset=UTF-8 Hello Dave, My name is Danny Shavit and I am with Zadara storage. We will appreciate your feedback reagrding an xfs_corruption and xfs_reapir issue. We found a corrupted xfs volume in one of our systems. It is around 1 TB size and about 12 M files. We run xfs_repair on the volume which succeeded after 42 minutes. We noticed that memory consumption raised to about 7.5 GB. Since some customers are using only 4GB (and sometimes even 2 GB) we tried running "xfs_repair -m 3200" on a 4GB RAM machine. However, this time an OOM event happened during handling of AG 26 during step 3. The log of xfs_repair is enclosed below. We will appreciate your feedback on the amount of memory needed for xfs_repair in general and when using "-m" option specifically. The xfs metadata dump (prior to xfs_repair) can be found here: https://zadarastorage-public.s3.amazonaws.com/xfs/xfsdump-prod-ebs_2015-03-30_23-00-38.tgz It is a 1.2 GB file (and 5.7 GB uncompressed). We will appreciate your feedback on the corruption pattern as well. -- Thank you, Danny Shavit Zadarastorage ---------- xfs_repair log ---------------- root@vsa-00000428-vc-1:/export/4xfsdump# date; xfs_repair -v /dev/dm-55; date Tue Mar 31 02:28:04 PDT 2015 Phase 1 - find and verify superblock... - block cache size set to 735288 entries Phase 2 - using internal log - zero log... zero_log: head block 1920 tail block 1920 - scan filesystem freespace and inode maps... agi_freecount 54, counted 55 in ag 7 sb_ifree 947, counted 948 - 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 bad . entry in directory inode 5691013154, was 5691013170: correcting bad . entry in directory inode 5691013156, was 5691013172: correcting bad . entry in directory inode 5691013157, was 5691013173: correcting bad . entry in directory inode 5691013163, was 5691013179: correcting - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 (Danny: OOM occurred here with -m 3200) - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - agno = 32 - 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 = 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 - agno = 32 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 - agno = 32 - 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 entry "SavedXML" in dir inode 2992927241 inconsistent with .. value (4324257659) in ino 5691013156 will clear entry "SavedXML" rebuilding directory inode 2992927241 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 entry "Out" in dir inode 4324257659 inconsistent with .. value (2992927241) in ino 5691013172 will clear entry "Out" rebuilding directory inode 4324257659 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 entry "tocs_file" in dir inode 5691012138 inconsistent with .. value (3520464676) in ino 5691013154 will clear entry "tocs_file" entry "trees.log" in dir inode 5691012138 inconsistent with .. value (3791956240) in ino 5691013155 will clear entry "trees.log" rebuilding directory inode 5691012138 entry "filelist.xml" in directory inode 5691012139 not consistent with .. value (1909707067) in inode 5691013157, junking entry fixing i8count in inode 5691012139 entry "image001.jpg" in directory inode 5691012140 not consistent with .. value (2450176033) in inode 5691013163, junking entry fixing i8count in inode 5691012140 entry "OCR" in dir inode 5691013154 inconsistent with .. value (5691013170) in ino 1909707065 will clear entry "OCR" entry "Tmp" in dir inode 5691013154 inconsistent with .. value (5691013170) in ino 2179087403 will clear entry "Tmp" entry "images" in dir inode 5691013154 inconsistent with .. value (5691013170) in ino 2450176007 will clear entry "images" rebuilding directory inode 5691013154 entry "286_Kellman_Hoffer_Master.pdf_files" in dir inode 5691013156 inconsistent with .. value (5691013172) in ino 834535727 will clear entry "286_Kellman_Hoffer_Master.pdf_files" rebuilding directory inode 5691013156 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - agno = 32 - traversal finished ... - moving disconnected inodes to lost+found ... disconnected dir inode 834535727, moving to lost+found disconnected dir inode 1909707065, moving to lost+found disconnected dir inode 2179087403, moving to lost+found disconnected dir inode 2450176007, moving to lost+found disconnected dir inode 5691013154, moving to lost+found disconnected dir inode 5691013155, moving to lost+found disconnected dir inode 5691013156, moving to lost+found disconnected dir inode 5691013157, moving to lost+found disconnected dir inode 5691013163, moving to lost+found disconnected dir inode 5691013172, moving to lost+found Phase 7 - verify and correct link counts... resetting inode 81777983 nlinks from 2 to 12 resetting inode 1909210410 nlinks from 1 to 2 resetting inode 1909707067 nlinks from 3 to 2 resetting inode 2450176033 nlinks from 18 to 17 resetting inode 2992927241 nlinks from 13 to 12 resetting inode 3520464676 nlinks from 13 to 12 resetting inode 3791956240 nlinks from 13 to 12 resetting inode 4324257659 nlinks from 13 to 12 resetting inode 5691013154 nlinks from 5 to 2 resetting inode 5691013156 nlinks from 3 to 2 XFS_REPAIR Summary Tue Mar 31 03:11:00 2015 Phase Start End Duration Phase 1: 03/31 02:28:04 03/31 02:28:05 1 second Phase 2: 03/31 02:28:05 03/31 02:28:42 37 seconds Phase 3: 03/31 02:28:42 03/31 02:48:29 19 minutes, 47 seconds Phase 4: 03/31 02:48:29 03/31 02:55:40 7 minutes, 11 seconds Phase 5: 03/31 02:55:40 03/31 02:55:43 3 seconds Phase 6: 03/31 02:55:43 03/31 03:10:57 15 minutes, 14 seconds Phase 7: 03/31 03:10:57 03/31 03:10:57 Total run time: 42 minutes, 53 seconds done Tue Mar 31 03:11:01 PDT 2015 --001a11338f6c661fed0512aa42e9 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2Pkhl bGxvIERhdmUsPGJyPk15IG5hbWUgaXMgRGFubnkgU2hhdml0IGFuZCBJIGFtIHdpdGggWmFkYXJh IHN0b3JhZ2UuPGJyPjwvZGl2PldlIHdpbGwgYXBwcmVjaWF0ZSB5b3VyIGZlZWRiYWNrIHJlYWdy ZGluZyBhbiB4ZnNfY29ycnVwdGlvbiBhbmQgeGZzX3JlYXBpciBpc3N1ZS48YnI+PGJyPldlIGZv dW5kIGEgY29ycnVwdGVkIHhmcyB2b2x1bWUgaW4gb25lIG9mIG91ciBzeXN0ZW1zLiBJdCBpcyBh cm91bmQgMSBUQiBzaXplIGFuZCBhYm91dCAxMiBNIGZpbGVzLjxicj48L2Rpdj5XZSBydW4geGZz X3JlcGFpciBvbiB0aGUgdm9sdW1lIHdoaWNoIHN1Y2NlZWRlZCBhZnRlciA0MiBtaW51dGVzLjxi cj48L2Rpdj48ZGl2PldlIG5vdGljZWQgdGhhdCBtZW1vcnkgY29uc3VtcHRpb24gcmFpc2VkIHRv IGFib3V0IDcuNSBHQi48YnI+PC9kaXY+PGRpdj5TaW5jZSBzb21lIGN1c3RvbWVycyBhcmUgdXNp bmcgb25seSA0R0IgKGFuZCBzb21ldGltZXMgZXZlbiAyIEdCKSB3ZSB0cmllZCBydW5uaW5nICZx dW90O3hmc19yZXBhaXIgLW0gMzIwMCZxdW90OyBvbiBhIDRHQiBSQU0gbWFjaGluZS4gPGJyPkhv d2V2ZXIsIHRoaXMgdGltZSBhbiBPT00gZXZlbnQgaGFwcGVuZWQgZHVyaW5nIGhhbmRsaW5nIG9m IEFHIDI2IGR1cmluZyBzdGVwIDMuPGJyPjwvZGl2PjwvZGl2PlRoZSBsb2cgb2YgeGZzX3JlcGFp ciBpcyBlbmNsb3NlZCBiZWxvdy48YnI+PC9kaXY+V2Ugd2lsbCBhcHByZWNpYXRlIHlvdXIgZmVl ZGJhY2sgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciB4ZnNfcmVwYWlyIGluIGdl bmVyYWwgYW5kIHdoZW4gdXNpbmcgJnF1b3Q7LW0mcXVvdDsgb3B0aW9uIHNwZWNpZmljYWxseS48 YnI+PC9kaXY+VGhlIHhmcyBtZXRhZGF0YSBkdW1wIChwcmlvciB0byB4ZnNfcmVwYWlyKSBjYW4g YmUgZm91bmQgaGVyZTo8YnI+PGEgaHJlZj0iaHR0cHM6Ly96YWRhcmFzdG9yYWdlLXB1YmxpYy5z My5hbWF6b25hd3MuY29tL3hmcy94ZnNkdW1wLXByb2QtZWJzXzIwMTUtMDMtMzBfMjMtMDAtMzgu dGd6Ij5odHRwczovL3phZGFyYXN0b3JhZ2UtcHVibGljLnMzLmFtYXpvbmF3cy5jb20veGZzL3hm c2R1bXAtcHJvZC1lYnNfMjAxNS0wMy0zMF8yMy0wMC0zOC50Z3o8L2E+PGJyPjwvZGl2Pkl0IGlz IGEgMS4yIEdCIGZpbGUgKGFuZCA1LjcgR0IgdW5jb21wcmVzc2VkKS48YnI+PGJyPjwvZGl2Pldl IHdpbGwgYXBwcmVjaWF0ZSB5b3VyIGZlZWRiYWNrIG9uIHRoZSBjb3JydXB0aW9uIHBhdHRlcm4g YXMgd2VsbC48YnI+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+ PGRpdj4tLSA8YnI+PGRpdiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0ibHRyIj48 ZGl2PlRoYW5rIHlvdSw8YnI+PC9kaXY+RGFubnkgU2hhdml0PGJyPjwvZGl2PjxkaXY+WmFkYXJh c3RvcmFnZTxicj48YnI+PC9kaXY+PGRpdj4tLS0tLS0tLS0tIHhmc19yZXBhaXIgbG9nwqAgLS0t LS0tLS0tLS0tLS0tLTxicj5yb290QHZzYS0wMDAwMDQyOC12Yy0xOi9leHBvcnQvNHhmc2R1bXAj IGRhdGU7IHhmc19yZXBhaXIgLXYgL2Rldi9kbS01NTsgZGF0ZcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8YnI+VHVl IE1hciAzMSAwMjoyODowNCBQRFQgMjAxNTxicj5QaGFzZSAxIC0gZmluZCBhbmQgdmVyaWZ5IHN1 cGVyYmxvY2suLi48YnI+wqDCoMKgwqDCoMKgwqAgLSBibG9jayBjYWNoZSBzaXplIHNldCB0byA3 MzUyODggZW50cmllczxicj5QaGFzZSAyIC0gdXNpbmcgaW50ZXJuYWwgbG9nPGJyPsKgwqDCoMKg wqDCoMKgIC0gemVybyBsb2cuLi48YnI+emVyb19sb2c6IGhlYWQgYmxvY2sgMTkyMCB0YWlsIGJs b2NrIDE5MjA8YnI+wqDCoMKgwqDCoMKgwqAgLSBzY2FuIGZpbGVzeXN0ZW0gZnJlZXNwYWNlIGFu ZCBpbm9kZSBtYXBzLi4uPGJyPmFnaV9mcmVlY291bnQgNTQsIGNvdW50ZWQgNTUgaW4gYWcgNzxi cj5zYl9pZnJlZSA5NDcsIGNvdW50ZWQgOTQ4PGJyPsKgwqDCoMKgwqDCoMKgIC0gZm91bmQgcm9v dCBpbm9kZSBjaHVuazxicj5QaGFzZSAzIC0gZm9yIGVhY2ggQUcuLi48YnI+wqDCoMKgwqDCoMKg wqAgLSBzY2FuIGFuZCBjbGVhciBhZ2kgdW5saW5rZWQgbGlzdHMuLi48YnI+wqDCoMKgwqDCoMKg wqAgLSBwcm9jZXNzIGtub3duIGlub2RlcyBhbmQgcGVyZm9ybSBpbm9kZSBkaXNjb3ZlcnkuLi48 YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMDxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAx PGJyPsKgwqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8g PSAzPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDQ8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25v ID0gNTxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSA2PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdu byA9IDc8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gODxicj7CoMKgwqDCoMKgwqDCoCAtIGFn bm8gPSA5PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDEwPGJyPsKgwqDCoMKgwqDCoMKgIC0g YWdubyA9IDExPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDEyPGJyPsKgwqDCoMKgwqDCoMKg IC0gYWdubyA9IDEzPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE0PGJyPsKgwqDCoMKgwqDC oMKgIC0gYWdubyA9IDE1PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE2PGJyPsKgwqDCoMKg wqDCoMKgIC0gYWdubyA9IDE3PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE4PGJyPsKgwqDC oMKgwqDCoMKgIC0gYWdubyA9IDE5PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDIwPGJyPsKg wqDCoMKgwqDCoMKgIC0gYWdubyA9IDIxPGJyPmJhZCAuIGVudHJ5IGluIGRpcmVjdG9yeSBpbm9k ZSA1NjkxMDEzMTU0LCB3YXMgNTY5MTAxMzE3MDogY29ycmVjdGluZzxicj5iYWQgLiBlbnRyeSBp biBkaXJlY3RvcnkgaW5vZGUgNTY5MTAxMzE1Niwgd2FzIDU2OTEwMTMxNzI6IGNvcnJlY3Rpbmc8 YnI+YmFkIC4gZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlIDU2OTEwMTMxNTcsIHdhcyA1NjkxMDEz MTczOiBjb3JyZWN0aW5nPGJyPmJhZCAuIGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSA1NjkxMDEz MTYzLCB3YXMgNTY5MTAxMzE3OTogY29ycmVjdGluZzxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8g PSAyMjxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAyMzxicj7CoMKgwqDCoMKgwqDCoCAtIGFn bm8gPSAyNDxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAyNTxicj7CoMKgwqDCoMKgwqDCoCAt IGFnbm8gPSAyNsKgwqAgKERhbm55OiBPT00gb2NjdXJyZWQgaGVyZSB3aXRoIC1tIDMyMDApPGJy PsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI3PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI4 PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI5PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9 IDMwPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDMxPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdu byA9IDMyPGJyPsKgwqDCoMKgwqDCoMKgIC0gcHJvY2VzcyBuZXdseSBkaXNjb3ZlcmVkIGlub2Rl cy4uLjxicj5QaGFzZSA0IC0gY2hlY2sgZm9yIGR1cGxpY2F0ZSBibG9ja3MuLi48YnI+wqDCoMKg wqDCoMKgwqAgLSBzZXR0aW5nIHVwIGR1cGxpY2F0ZSBleHRlbnQgbGlzdC4uLjxicj7CoMKgwqDC oMKgwqDCoCAtIGNoZWNrIGZvciBpbm9kZXMgY2xhaW1pbmcgZHVwbGljYXRlIGJsb2Nrcy4uLjxi cj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAwPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE8 YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAz PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDQ8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0g NTxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSA2PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9 IDc8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gODxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8g PSA5PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDEwPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdu byA9IDExPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDEyPGJyPsKgwqDCoMKgwqDCoMKgIC0g YWdubyA9IDEzPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE0PGJyPsKgwqDCoMKgwqDCoMKg IC0gYWdubyA9IDE1PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE2PGJyPsKgwqDCoMKgwqDC oMKgIC0gYWdubyA9IDE3PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE4PGJyPsKgwqDCoMKg wqDCoMKgIC0gYWdubyA9IDE5PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDIwPGJyPsKgwqDC oMKgwqDCoMKgIC0gYWdubyA9IDIxPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDIyPGJyPsKg wqDCoMKgwqDCoMKgIC0gYWdubyA9IDIzPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI0PGJy PsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI1PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI2 PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI3PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9 IDI4PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDI5PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdu byA9IDMwPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDMxPGJyPsKgwqDCoMKgwqDCoMKgIC0g YWdubyA9IDMyPGJyPlBoYXNlIDUgLSByZWJ1aWxkIEFHIGhlYWRlcnMgYW5kIHRyZWVzLi4uPGJy PsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDA8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMTxi cj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAyPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDM8 YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gNDxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSA1 PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDY8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0g Nzxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSA4PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9 IDk8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMTA8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25v ID0gMTE8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMTI8YnI+wqDCoMKgwqDCoMKgwqAgLSBh Z25vID0gMTM8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMTQ8YnI+wqDCoMKgwqDCoMKgwqAg LSBhZ25vID0gMTU8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMTY8YnI+wqDCoMKgwqDCoMKg wqAgLSBhZ25vID0gMTc8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMTg8YnI+wqDCoMKgwqDC oMKgwqAgLSBhZ25vID0gMTk8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjA8YnI+wqDCoMKg wqDCoMKgwqAgLSBhZ25vID0gMjE8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjI8YnI+wqDC oMKgwqDCoMKgwqAgLSBhZ25vID0gMjM8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjQ8YnI+ wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjU8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjY8 YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjc8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0g Mjg8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjk8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25v ID0gMzA8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMzE8YnI+wqDCoMKgwqDCoMKgwqAgLSBh Z25vID0gMzI8YnI+wqDCoMKgwqDCoMKgwqAgLSByZXNldCBzdXBlcmJsb2NrLi4uPGJyPlBoYXNl IDYgLSBjaGVjayBpbm9kZSBjb25uZWN0aXZpdHkuLi48YnI+wqDCoMKgwqDCoMKgwqAgLSByZXNl dHRpbmcgY29udGVudHMgb2YgcmVhbHRpbWUgYml0bWFwIGFuZCBzdW1tYXJ5IGlub2Rlczxicj7C oMKgwqDCoMKgwqDCoCAtIHRyYXZlcnNpbmcgZmlsZXN5c3RlbSAuLi48YnI+wqDCoMKgwqDCoMKg wqAgLSBhZ25vID0gMDxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAxPGJyPsKgwqDCoMKgwqDC oMKgIC0gYWdubyA9IDI8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMzxicj7CoMKgwqDCoMKg wqDCoCAtIGFnbm8gPSA0PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDU8YnI+wqDCoMKgwqDC oMKgwqAgLSBhZ25vID0gNjxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSA3PGJyPsKgwqDCoMKg wqDCoMKgIC0gYWdubyA9IDg8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gOTxicj7CoMKgwqDC oMKgwqDCoCAtIGFnbm8gPSAxMDxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAxMTxicj5lbnRy eSAmcXVvdDtTYXZlZFhNTCZxdW90OyBpbiBkaXIgaW5vZGUgMjk5MjkyNzI0MSBpbmNvbnNpc3Rl bnQgd2l0aCAuLiB2YWx1ZSAoNDMyNDI1NzY1OSkgaW4gaW5vIDU2OTEwMTMxNTY8YnI+wqDCoMKg wqDCoMKgwqAgd2lsbCBjbGVhciBlbnRyeSAmcXVvdDtTYXZlZFhNTCZxdW90Ozxicj5yZWJ1aWxk aW5nIGRpcmVjdG9yeSBpbm9kZSAyOTkyOTI3MjQxPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9 IDEyPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDEzPGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdu byA9IDE0PGJyPsKgwqDCoMKgwqDCoMKgIC0gYWdubyA9IDE1PGJyPsKgwqDCoMKgwqDCoMKgIC0g YWdubyA9IDE2PGJyPmVudHJ5ICZxdW90O091dCZxdW90OyBpbiBkaXIgaW5vZGUgNDMyNDI1NzY1 OSBpbmNvbnNpc3RlbnQgd2l0aCAuLiB2YWx1ZSAoMjk5MjkyNzI0MSkgaW4gaW5vIDU2OTEwMTMx NzI8YnI+wqDCoMKgwqDCoMKgwqAgd2lsbCBjbGVhciBlbnRyeSAmcXVvdDtPdXQmcXVvdDs8YnI+ cmVidWlsZGluZyBkaXJlY3RvcnkgaW5vZGUgNDMyNDI1NzY1OTxicj7CoMKgwqDCoMKgwqDCoCAt IGFnbm8gPSAxNzxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAxODxicj7CoMKgwqDCoMKgwqDC oCAtIGFnbm8gPSAxOTxicj7CoMKgwqDCoMKgwqDCoCAtIGFnbm8gPSAyMDxicj7CoMKgwqDCoMKg wqDCoCAtIGFnbm8gPSAyMTxicj5lbnRyeSAmcXVvdDt0b2NzX2ZpbGUmcXVvdDsgaW4gZGlyIGlu b2RlIDU2OTEwMTIxMzggaW5jb25zaXN0ZW50IHdpdGggLi4gdmFsdWUgKDM1MjA0NjQ2NzYpIGlu IGlubyA1NjkxMDEzMTU0PGJyPsKgwqDCoMKgwqDCoMKgIHdpbGwgY2xlYXIgZW50cnkgJnF1b3Q7 dG9jc19maWxlJnF1b3Q7PGJyPmVudHJ5ICZxdW90O3RyZWVzLmxvZyZxdW90OyBpbiBkaXIgaW5v ZGUgNTY5MTAxMjEzOCBpbmNvbnNpc3RlbnQgd2l0aCAuLiB2YWx1ZSAoMzc5MTk1NjI0MCkgaW4g aW5vIDU2OTEwMTMxNTU8YnI+wqDCoMKgwqDCoMKgwqAgd2lsbCBjbGVhciBlbnRyeSAmcXVvdDt0 cmVlcy5sb2cmcXVvdDs8YnI+cmVidWlsZGluZyBkaXJlY3RvcnkgaW5vZGUgNTY5MTAxMjEzODxi cj5lbnRyeSAmcXVvdDtmaWxlbGlzdC54bWwmcXVvdDsgaW4gZGlyZWN0b3J5IGlub2RlIDU2OTEw MTIxMzkgbm90IGNvbnNpc3RlbnQgd2l0aCAuLiB2YWx1ZSAoMTkwOTcwNzA2NykgaW4gaW5vZGUg NTY5MTAxMzE1Nyw8YnI+anVua2luZyBlbnRyeTxicj5maXhpbmcgaThjb3VudCBpbiBpbm9kZSA1 NjkxMDEyMTM5PGJyPmVudHJ5ICZxdW90O2ltYWdlMDAxLmpwZyZxdW90OyBpbiBkaXJlY3Rvcnkg aW5vZGUgNTY5MTAxMjE0MCBub3QgY29uc2lzdGVudCB3aXRoIC4uIHZhbHVlICgyNDUwMTc2MDMz KSBpbiBpbm9kZSA1NjkxMDEzMTYzLDxicj5qdW5raW5nIGVudHJ5PGJyPmZpeGluZyBpOGNvdW50 IGluIGlub2RlIDU2OTEwMTIxNDA8YnI+ZW50cnkgJnF1b3Q7T0NSJnF1b3Q7IGluIGRpciBpbm9k ZSA1NjkxMDEzMTU0IGluY29uc2lzdGVudCB3aXRoIC4uIHZhbHVlICg1NjkxMDEzMTcwKSBpbiBp bm8gMTkwOTcwNzA2NTxicj7CoMKgwqDCoMKgwqDCoCB3aWxsIGNsZWFyIGVudHJ5ICZxdW90O09D UiZxdW90Ozxicj5lbnRyeSAmcXVvdDtUbXAmcXVvdDsgaW4gZGlyIGlub2RlIDU2OTEwMTMxNTQg aW5jb25zaXN0ZW50IHdpdGggLi4gdmFsdWUgKDU2OTEwMTMxNzApIGluIGlubyAyMTc5MDg3NDAz PGJyPsKgwqDCoMKgwqDCoMKgIHdpbGwgY2xlYXIgZW50cnkgJnF1b3Q7VG1wJnF1b3Q7PGJyPmVu dHJ5ICZxdW90O2ltYWdlcyZxdW90OyBpbiBkaXIgaW5vZGUgNTY5MTAxMzE1NCBpbmNvbnNpc3Rl bnQgd2l0aCAuLiB2YWx1ZSAoNTY5MTAxMzE3MCkgaW4gaW5vIDI0NTAxNzYwMDc8YnI+wqDCoMKg wqDCoMKgwqAgd2lsbCBjbGVhciBlbnRyeSAmcXVvdDtpbWFnZXMmcXVvdDs8YnI+cmVidWlsZGlu ZyBkaXJlY3RvcnkgaW5vZGUgNTY5MTAxMzE1NDxicj5lbnRyeSAmcXVvdDsyODZfS2VsbG1hbl9I b2ZmZXJfTWFzdGVyLnBkZl9maWxlcyZxdW90OyBpbiBkaXIgaW5vZGUgNTY5MTAxMzE1NiBpbmNv bnNpc3RlbnQgd2l0aCAuLiB2YWx1ZSAoNTY5MTAxMzE3MikgaW4gaW5vIDgzNDUzNTcyNzxicj7C oMKgwqDCoMKgwqDCoCB3aWxsIGNsZWFyIGVudHJ5ICZxdW90OzI4Nl9LZWxsbWFuX0hvZmZlcl9N YXN0ZXIucGRmX2ZpbGVzJnF1b3Q7PGJyPnJlYnVpbGRpbmcgZGlyZWN0b3J5IGlub2RlIDU2OTEw MTMxNTY8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjI8YnI+wqDCoMKgwqDCoMKgwqAgLSBh Z25vID0gMjM8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjQ8YnI+wqDCoMKgwqDCoMKgwqAg LSBhZ25vID0gMjU8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjY8YnI+wqDCoMKgwqDCoMKg wqAgLSBhZ25vID0gMjc8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMjg8YnI+wqDCoMKgwqDC oMKgwqAgLSBhZ25vID0gMjk8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMzA8YnI+wqDCoMKg wqDCoMKgwqAgLSBhZ25vID0gMzE8YnI+wqDCoMKgwqDCoMKgwqAgLSBhZ25vID0gMzI8YnI+wqDC oMKgwqDCoMKgwqAgLSB0cmF2ZXJzYWwgZmluaXNoZWQgLi4uPGJyPsKgwqDCoMKgwqDCoMKgIC0g bW92aW5nIGRpc2Nvbm5lY3RlZCBpbm9kZXMgdG8gbG9zdCtmb3VuZCAuLi48YnI+ZGlzY29ubmVj dGVkIGRpciBpbm9kZSA4MzQ1MzU3MjcsIG1vdmluZyB0byBsb3N0K2ZvdW5kPGJyPmRpc2Nvbm5l Y3RlZCBkaXIgaW5vZGUgMTkwOTcwNzA2NSwgbW92aW5nIHRvIGxvc3QrZm91bmQ8YnI+ZGlzY29u bmVjdGVkIGRpciBpbm9kZSAyMTc5MDg3NDAzLCBtb3ZpbmcgdG8gbG9zdCtmb3VuZDxicj5kaXNj b25uZWN0ZWQgZGlyIGlub2RlIDI0NTAxNzYwMDcsIG1vdmluZyB0byBsb3N0K2ZvdW5kPGJyPmRp c2Nvbm5lY3RlZCBkaXIgaW5vZGUgNTY5MTAxMzE1NCwgbW92aW5nIHRvIGxvc3QrZm91bmQ8YnI+ ZGlzY29ubmVjdGVkIGRpciBpbm9kZSA1NjkxMDEzMTU1LCBtb3ZpbmcgdG8gbG9zdCtmb3VuZDxi cj5kaXNjb25uZWN0ZWQgZGlyIGlub2RlIDU2OTEwMTMxNTYsIG1vdmluZyB0byBsb3N0K2ZvdW5k PGJyPmRpc2Nvbm5lY3RlZCBkaXIgaW5vZGUgNTY5MTAxMzE1NywgbW92aW5nIHRvIGxvc3QrZm91 bmQ8YnI+ZGlzY29ubmVjdGVkIGRpciBpbm9kZSA1NjkxMDEzMTYzLCBtb3ZpbmcgdG8gbG9zdCtm b3VuZDxicj5kaXNjb25uZWN0ZWQgZGlyIGlub2RlIDU2OTEwMTMxNzIsIG1vdmluZyB0byBsb3N0 K2ZvdW5kPGJyPlBoYXNlIDcgLSB2ZXJpZnkgYW5kIGNvcnJlY3QgbGluayBjb3VudHMuLi48YnI+ cmVzZXR0aW5nIGlub2RlIDgxNzc3OTgzIG5saW5rcyBmcm9tIDIgdG8gMTI8YnI+cmVzZXR0aW5n IGlub2RlIDE5MDkyMTA0MTAgbmxpbmtzIGZyb20gMSB0byAyPGJyPnJlc2V0dGluZyBpbm9kZSAx OTA5NzA3MDY3IG5saW5rcyBmcm9tIDMgdG8gMjxicj5yZXNldHRpbmcgaW5vZGUgMjQ1MDE3NjAz MyBubGlua3MgZnJvbSAxOCB0byAxNzxicj5yZXNldHRpbmcgaW5vZGUgMjk5MjkyNzI0MSBubGlu a3MgZnJvbSAxMyB0byAxMjxicj5yZXNldHRpbmcgaW5vZGUgMzUyMDQ2NDY3NiBubGlua3MgZnJv bSAxMyB0byAxMjxicj5yZXNldHRpbmcgaW5vZGUgMzc5MTk1NjI0MCBubGlua3MgZnJvbSAxMyB0 byAxMjxicj5yZXNldHRpbmcgaW5vZGUgNDMyNDI1NzY1OSBubGlua3MgZnJvbSAxMyB0byAxMjxi cj5yZXNldHRpbmcgaW5vZGUgNTY5MTAxMzE1NCBubGlua3MgZnJvbSA1IHRvIDI8YnI+cmVzZXR0 aW5nIGlub2RlIDU2OTEwMTMxNTYgbmxpbmtzIGZyb20gMyB0byAyPGJyPjxicj7CoMKgwqDCoMKg wqDCoCBYRlNfUkVQQUlSIFN1bW1hcnnCoMKgwqAgVHVlIE1hciAzMSAwMzoxMTowMCAyMDE1PGJy Pjxicj5QaGFzZcKgwqDCoMKgwqDCoMKgwqDCoMKgIFN0YXJ0wqDCoMKgwqDCoMKgwqDCoMKgwqAg RW5kwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIER1cmF0aW9uPGJyPlBoYXNlIDE6wqDCoMKgwqDC oMKgwqAgMDMvMzEgMDI6Mjg6MDTCoCAwMy8zMSAwMjoyODowNcKgIDEgc2Vjb25kPGJyPlBoYXNl IDI6wqDCoMKgwqDCoMKgwqAgMDMvMzEgMDI6Mjg6MDXCoCAwMy8zMSAwMjoyODo0MsKgIDM3IHNl Y29uZHM8YnI+UGhhc2UgMzrCoMKgwqDCoMKgwqDCoCAwMy8zMSAwMjoyODo0MsKgIDAzLzMxIDAy OjQ4OjI5wqAgMTkgbWludXRlcywgNDcgc2Vjb25kczxicj5QaGFzZSA0OsKgwqDCoMKgwqDCoMKg IDAzLzMxIDAyOjQ4OjI5wqAgMDMvMzEgMDI6NTU6NDDCoCA3IG1pbnV0ZXMsIDExIHNlY29uZHM8 YnI+UGhhc2UgNTrCoMKgwqDCoMKgwqDCoCAwMy8zMSAwMjo1NTo0MMKgIDAzLzMxIDAyOjU1OjQz wqAgMyBzZWNvbmRzPGJyPlBoYXNlIDY6wqDCoMKgwqDCoMKgwqAgMDMvMzEgMDI6NTU6NDPCoCAw My8zMSAwMzoxMDo1N8KgIDE1IG1pbnV0ZXMsIDE0IHNlY29uZHM8YnI+UGhhc2UgNzrCoMKgwqDC oMKgwqDCoCAwMy8zMSAwMzoxMDo1N8KgIDAzLzMxIDAzOjEwOjU3PGJyPjxicj5Ub3RhbCBydW4g dGltZTogNDIgbWludXRlcywgNTMgc2Vjb25kczxicj5kb25lPGJyPlR1ZSBNYXIgMzEgMDM6MTE6 MDEgUERUIDIwMTU8YnI+PGJyPjwvZGl2PjwvZGl2Pg0KPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+ PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+DQo= --001a11338f6c661fed0512aa42e9-- From jack@suse.cz Wed Apr 1 09:34:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BBC377F5A for ; Wed, 1 Apr 2015 09:34:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id B42FE8F8052 for ; Wed, 1 Apr 2015 07:34:34 -0700 (PDT) X-ASG-Debug-ID: 1427898868-04cbb06cca2965a0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id v9mqGWxR0g0xezN1 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Apr 2015 07:34:29 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id DF5B6AC28; Wed, 1 Apr 2015 14:34:27 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id C3D3682878; Wed, 1 Apr 2015 16:34:23 +0200 (CEST) Date: Wed, 1 Apr 2015 16:34:23 +0200 From: Jan Kara To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 1/8] xfs: mmap lock needs to be inside freeze protection Message-ID: <20150401143423.GO26339@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 1/8] xfs: mmap lock needs to be inside freeze protection References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-2-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-2-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1427898869 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17436 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue 24-03-15 21:50:59, Dave Chinner wrote: > From: Dave Chinner > > Lock ordering for the new mmap lock needs to be: > > mmap_sem > sb_start_pagefault > i_mmap_lock > page lock > > > Right now xfs_vm_page_mkwrite gets this the wrong way around, > While technically it cannot deadlock due to the current freeze > ordering, it's still a landmine that might explode if we change > anything in future. Hence we need to nest the locks correctly. Looks good to me. You can add: Reviewed-by: Jan Kara Honza > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_file.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index dc5f609..a4c882e 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -1449,15 +1449,20 @@ xfs_filemap_page_mkwrite( > struct vm_fault *vmf) > { > struct xfs_inode *ip = XFS_I(vma->vm_file->f_mapping->host); > - int error; > + int ret; > > trace_xfs_filemap_page_mkwrite(ip); > > + sb_start_pagefault(VFS_I(ip)->i_sb); > + file_update_time(vma->vm_file); > xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > - error = block_page_mkwrite(vma, vmf, xfs_get_blocks); > + > + ret = __block_page_mkwrite(vma, vmf, xfs_get_blocks); > + > xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); > + sb_end_pagefault(VFS_I(ip)->i_sb); > > - return error; > + return block_page_mkwrite_return(ret); > } > > const struct file_operations xfs_file_operations = { > -- > 2.0.0 > -- Jan Kara SUSE Labs, CR From jack@suse.cz Wed Apr 1 09:53:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 577567F5A for ; Wed, 1 Apr 2015 09:53:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C734CAC002 for ; Wed, 1 Apr 2015 07:53:35 -0700 (PDT) X-ASG-Debug-ID: 1427900012-04cbb06ccb2974a0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id uTnUzDB3DimHitL3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Apr 2015 07:53:33 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id A3637AC54; Wed, 1 Apr 2015 14:53:31 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id 1313882878; Wed, 1 Apr 2015 16:53:28 +0200 (CEST) Date: Wed, 1 Apr 2015 16:53:28 +0200 From: Jan Kara To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 2/8] dax: don't abuse get_block mapping for endio callbacks Message-ID: <20150401145328.GP26339@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/8] dax: don't abuse get_block mapping for endio callbacks References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-3-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-3-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1427900012 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17438 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue 24-03-15 21:51:00, Dave Chinner wrote: > From: Dave Chinner > > dax_fault() currently relies on the get_block callback to attach an > io completion callback to the mapping buffer head so that it can > run unwritten extent conversion after zeroing allocated blocks. > > Instead of this hack, pass the conversion callback directly into > dax_fault() similar to the get_block callback. When the filesystem > allocates unwritten extents, it will set the buffer_unwritten() > flag, and hence the dax_fault code can call the completion function > in the contexts where it is necessary without overloading the > mapping buffer head. > > Note: The changes to ext4 to use this interface are suspect at best. > In fact, the way ext4 did this end_io assignment in the first place > looks suspect because it only set a completion callback when there > wasn't already some other write() call taking place on the same > inode. The ext4 end_io code looks rather intricate and fragile with > all it's reference counting and passing to different contexts for > modification via inode private pointers that aren't protected by > locks... Yeah, the io_end handling is currently buggy when you try to do more than one write in parallel (normally we don't allow that and seriealize everything behind i_mutex). That needs fixing but here what you did looks good enough for this patch set. You have my Acked-by: Jan Kara Honza > Signed-off-by: Dave Chinner > --- > fs/dax.c | 17 +++++++++++------ > fs/ext2/file.c | 4 ++-- > fs/ext4/file.c | 16 ++++++++++++++-- > fs/ext4/inode.c | 21 +++++++-------------- > include/linux/fs.h | 6 ++++-- > 5 files changed, 38 insertions(+), 26 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index ed1619e..431ec2b 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -310,14 +310,11 @@ static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh, > out: > i_mmap_unlock_read(mapping); > > - if (bh->b_end_io) > - bh->b_end_io(bh, 1); > - > return error; > } > > static int do_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > - get_block_t get_block) > + get_block_t get_block, dax_iodone_t complete_unwritten) > { > struct file *file = vma->vm_file; > struct address_space *mapping = file->f_mapping; > @@ -418,7 +415,15 @@ static int do_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > page_cache_release(page); > } > > + /* > + * If we successfully insert the new mapping over an unwritten extent, > + * we need to ensure we convert the unwritten extent. If there is an > + * error inserting the mapping, we leave the extent as unwritten to > + * prevent exposure of the stale underlying data to userspace. > + */ > error = dax_insert_mapping(inode, &bh, vma, vmf); > + if (!error && buffer_unwritten(&bh)) > + complete_unwritten(&bh, 1); > > out: > if (error == -ENOMEM) > @@ -446,7 +451,7 @@ static int do_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > * fault handler for DAX files. > */ > int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > - get_block_t get_block) > + get_block_t get_block, dax_iodone_t complete_unwritten) > { > int result; > struct super_block *sb = file_inode(vma->vm_file)->i_sb; > @@ -455,7 +460,7 @@ int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > sb_start_pagefault(sb); > file_update_time(vma->vm_file); > } > - result = do_dax_fault(vma, vmf, get_block); > + result = do_dax_fault(vma, vmf, get_block, complete_unwritten); > if (vmf->flags & FAULT_FLAG_WRITE) > sb_end_pagefault(sb); > > diff --git a/fs/ext2/file.c b/fs/ext2/file.c > index e317017..8da747a 100644 > --- a/fs/ext2/file.c > +++ b/fs/ext2/file.c > @@ -28,12 +28,12 @@ > #ifdef CONFIG_FS_DAX > static int ext2_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf) > { > - return dax_fault(vma, vmf, ext2_get_block); > + return dax_fault(vma, vmf, ext2_get_block, NULL); > } > > static int ext2_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > { > - return dax_mkwrite(vma, vmf, ext2_get_block); > + return dax_mkwrite(vma, vmf, ext2_get_block, NULL); > } > > static const struct vm_operations_struct ext2_dax_vm_ops = { > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index 33a09da..f7dabb1 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -192,15 +192,27 @@ errout: > } > > #ifdef CONFIG_FS_DAX > +static void ext4_end_io_unwritten(struct buffer_head *bh, int uptodate) > +{ > + struct inode *inode = bh->b_assoc_map->host; > + /* XXX: breaks on 32-bit > 16GB. Is that even supported? */ > + loff_t offset = (loff_t)(uintptr_t)bh->b_private << inode->i_blkbits; > + int err; > + if (!uptodate) > + return; > + WARN_ON(!buffer_unwritten(bh)); > + err = ext4_convert_unwritten_extents(NULL, inode, offset, bh->b_size); > +} > + > static int ext4_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf) > { > - return dax_fault(vma, vmf, ext4_get_block); > + return dax_fault(vma, vmf, ext4_get_block, ext4_end_io_unwritten); > /* Is this the right get_block? */ > } > > static int ext4_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > { > - return dax_mkwrite(vma, vmf, ext4_get_block); > + return dax_mkwrite(vma, vmf, ext4_get_block, ext4_end_io_unwritten); > } > > static const struct vm_operations_struct ext4_dax_vm_ops = { > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index 5cb9a21..43433de 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -657,18 +657,6 @@ has_zeroout: > return retval; > } > > -static void ext4_end_io_unwritten(struct buffer_head *bh, int uptodate) > -{ > - struct inode *inode = bh->b_assoc_map->host; > - /* XXX: breaks on 32-bit > 16GB. Is that even supported? */ > - loff_t offset = (loff_t)(uintptr_t)bh->b_private << inode->i_blkbits; > - int err; > - if (!uptodate) > - return; > - WARN_ON(!buffer_unwritten(bh)); > - err = ext4_convert_unwritten_extents(NULL, inode, offset, bh->b_size); > -} > - > /* Maximum number of blocks we map for direct IO at once. */ > #define DIO_MAX_BLOCKS 4096 > > @@ -706,10 +694,15 @@ static int _ext4_get_block(struct inode *inode, sector_t iblock, > > map_bh(bh, inode->i_sb, map.m_pblk); > bh->b_state = (bh->b_state & ~EXT4_MAP_FLAGS) | map.m_flags; > - if (IS_DAX(inode) && buffer_unwritten(bh) && !io_end) { > + if (IS_DAX(inode) && buffer_unwritten(bh)) { > + /* > + * dgc: I suspect unwritten conversion on ext4+DAX is > + * fundamentally broken here when there are concurrent > + * read/write in progress on this inode. > + */ > + WARN_ON_ONCE(io_end); > bh->b_assoc_map = inode->i_mapping; > bh->b_private = (void *)(unsigned long)iblock; > - bh->b_end_io = ext4_end_io_unwritten; > } > if (io_end && io_end->flag & EXT4_IO_END_UNWRITTEN) > set_buffer_defer_completion(bh); > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 937e280..82100ae 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -70,6 +70,7 @@ typedef int (get_block_t)(struct inode *inode, sector_t iblock, > struct buffer_head *bh_result, int create); > typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset, > ssize_t bytes, void *private); > +typedef void (dax_iodone_t)(struct buffer_head *bh_map, int uptodate); > > #define MAY_EXEC 0x00000001 > #define MAY_WRITE 0x00000002 > @@ -2603,8 +2604,9 @@ ssize_t dax_do_io(int rw, struct kiocb *, struct inode *, struct iov_iter *, > int dax_clear_blocks(struct inode *, sector_t block, long size); > int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); > int dax_truncate_page(struct inode *, loff_t from, get_block_t); > -int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t); > -#define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb) > +int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t, > + dax_iodone_t); > +#define dax_mkwrite(vma, vmf, gb, iod) dax_fault(vma, vmf, gb, iod) > > #ifdef CONFIG_BLOCK > typedef void (dio_submit_t)(int rw, struct bio *bio, struct inode *inode, > -- > 2.0.0 > -- Jan Kara SUSE Labs, CR From jack@suse.cz Wed Apr 1 10:07:22 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0D1DA7F5A for ; Wed, 1 Apr 2015 10:07:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 06177304043 for ; Wed, 1 Apr 2015 08:07:18 -0700 (PDT) X-ASG-Debug-ID: 1427900833-04cb6c3fdb25ac70001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Gdn379ZN4s1QBRAx (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Apr 2015 08:07:13 -0700 (PDT) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id BF4F8AC54; Wed, 1 Apr 2015 15:07:12 +0000 (UTC) Received: by quack.suse.cz (Postfix, from userid 1000) id 4C35E82878; Wed, 1 Apr 2015 17:07:09 +0200 (CEST) Date: Wed, 1 Apr 2015 17:07:09 +0200 From: Jan Kara To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 3/8] dax: expose __dax_fault for filesystems with locking constraints Message-ID: <20150401150709.GQ26339@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/8] dax: expose __dax_fault for filesystems with locking constraints References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-4-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-4-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1427900833 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17437 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue 24-03-15 21:51:01, Dave Chinner wrote: > From: Dave Chinner > > Some filesystems cannot call dax_fault() directly because they have > different locking and/or allocation constraints in the page fault IO > path. To handle this, we need to follow the same model as the > generic block_page_mkwrite code, where the internals are exposed via > __block_page_mkwrite() so that filesystems can wrap the correct > locking and operations around the outside. > > This is loosely based on a patch originally from Matthew Willcox. > Unlike the original patch, it does not change ext4 code, error > returns or unwritten extent conversion handling. It also adds a > __dax_mkwrite() wrapper for .page_mkwrite implementations to do the > right thing, too. We will need a normal error return from __dax_mkwrite() for proper ENOSPC handling in ext4. You could do this when touching that code here if you feel like that but if not, I can do that as a separate patch. Anyway, feel free to add: Reviewed-by: Jan Kara Honza > > Signed-off-by: Dave Chinner > --- > fs/dax.c | 15 +++++++++++++-- > include/linux/fs.h | 5 ++++- > 2 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index 431ec2b..0121f7d 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -313,7 +313,17 @@ static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh, > return error; > } > > -static int do_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > +/** > + * __dax_fault - handle a page fault on a DAX file > + * @vma: The virtual memory area where the fault occurred > + * @vmf: The description of the fault > + * @get_block: The filesystem method used to translate file offsets to blocks > + * > + * When a page fault occurs, filesystems may call this helper in their > + * fault handler for DAX files. __dax_fault() assumes the caller has done all > + * the necessary locking for the page fault to proceed successfully. > + */ > +int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > get_block_t get_block, dax_iodone_t complete_unwritten) > { > struct file *file = vma->vm_file; > @@ -440,6 +450,7 @@ static int do_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > } > goto out; > } > +EXPORT_SYMBOL(__dax_fault); > > /** > * dax_fault - handle a page fault on a DAX file > @@ -460,7 +471,7 @@ int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf, > sb_start_pagefault(sb); > file_update_time(vma->vm_file); > } > - result = do_dax_fault(vma, vmf, get_block, complete_unwritten); > + result = __dax_fault(vma, vmf, get_block, complete_unwritten); > if (vmf->flags & FAULT_FLAG_WRITE) > sb_end_pagefault(sb); > > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 82100ae..7e5a2d6 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -2606,7 +2606,10 @@ int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); > int dax_truncate_page(struct inode *, loff_t from, get_block_t); > int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t, > dax_iodone_t); > -#define dax_mkwrite(vma, vmf, gb, iod) dax_fault(vma, vmf, gb, iod) > +int __dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t, > + dax_iodone_t); > +#define dax_mkwrite(vma, vmf, gb, iod) dax_fault(vma, vmf, gb, iod) > +#define __dax_mkwrite(vma, vmf, gb, iod) __dax_fault(vma, vmf, gb, iod) > > #ifdef CONFIG_BLOCK > typedef void (dio_submit_t)(int rw, struct bio *bio, struct inode *inode, > -- > 2.0.0 > -- Jan Kara SUSE Labs, CR From tfire.xfs-xfs=oss.sgi.com@diznyxd.com Wed Apr 1 11:09:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID, T_REMOTE_IMAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id BF92D7F5A for ; Wed, 1 Apr 2015 11:09:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2B939AC008 for ; Wed, 1 Apr 2015 09:09:25 -0700 (PDT) X-ASG-Debug-ID: 1427904551-04cb6c3fdc25e7d0001-NocioJ Received: from measure.diznyxd.com (measure.diznyxd.com [46.228.205.97]) by cuda.sgi.com with ESMTP id woa18JtkHiF6mmE7 for ; Wed, 01 Apr 2015 09:09:23 -0700 (PDT) X-Barracuda-Envelope-From: tfire.xfs-xfs=oss.sgi.com@diznyxd.com X-Barracuda-Apparent-Source-IP: 46.228.205.97 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dkim; d=diznyxd.com; h=MIME-Version:Content-Type:Date:Message-Id:Subject:From:To; i=tfire.xfs@diznyxd.com; bh=xz0u+PCHpmn5AxXawolpCLtnh7M=; b=n3HFjLfkXbPtf5z37CyuELbzyjWs98d18lGHv+assESN2aQOdYbLDarRgNz8UQqLhd5GW1SffLw6 YIlYrmCRL9uYt4K8TY5ywhl0x/qbQCg28tqn5vN9sgBDMyz0yGxPuF6/bQEwea7RfcjYnTpDSFZ+ jSBQ0BrLKLAp9GP1w8E= Received: by measure.diznyxd.com id h3gbvk0001gj for ; Wed, 1 Apr 2015 10:35:50 -0400 (envelope-from ) MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="997e3debc04397f86d48cf77384f52" Date: Wed, 1 Apr 2015 10:35:50 -0400 Message-Id: Subject: =?UTF-8?B?SW50cm9kdWNpbmcgVGhlIFRydWUgTGFwdG9wIEtpbGxlci4=?= From: Touch-FIRE X-ASG-Orig-Subj: =?UTF-8?B?SW50cm9kdWNpbmcgVGhlIFRydWUgTGFwdG9wIEtpbGxlci4=?= To: xfs@oss.sgi.com X-Barracuda-Connect: measure.diznyxd.com[46.228.205.97] X-Barracuda-Start-Time: 1427904551 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.00 X-Barracuda-Spam-Status: No, SCORE=2.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0240, BSF_SC0_SA828, DKIM_SIGNED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17438 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 1.00 BSF_SC0_MV0240 BODY: Custom rule MV0240 0.00 HTML_MESSAGE BODY: HTML included in message 1.00 BSF_SC0_SA828 Custom Outbreak Rule BSF_SC0_SA828 --997e3debc04397f86d48cf77384f52 Content-Type: text/plain; Touch__fire Touchfire,_Inc. | 1117_NW_54th__Street | Seattle,_WA_98107 Attention iPad Owners: Bluetooth Keyboards Are A Thing Of The Past. | Introducing The All-New Touchfire Case and Keyboard | Unlike bluetooth keyboards, Touchfire... -Isn’t An Extra Device You Have To Carry -Doesn’t Add Any Noticeable Size Or Weight -Won’t Drain Your iPad’s Battery -Doesn’t Need To Pair Or Synch With Your iPad -Is Affordable And Has A Lifetime Warranty | Over 35,000 Satisfied Customers!| “Incredibly Simple To Use. Like Typing On A Physical Keyboard” - The New York Times | “I love it! I love it!” ~ Kathy Lee - Today Show | “An Ingenious Idea” - TIME Touchfire,_Inc. | 1117_NW_54th_Street | Seattle,_WA 98107 To__unsubscribe click__here Form: Novmbr 11, 19261 vwalskey 1 Mar collson Th U. S. govrnmn shoul classfy aonal nformaon abou h vn. A horough publc arng of h xsng nformaon coul rsolv h conrovrsy. 32?0?N 80?51?WCoornas: 32?0?N 80?51?W 2.1 Zons of opraon To a, no unu lvls of unnaural raoacv conamnaon hav bn c n h rgonal Uppr Floran aqufr by h Gorga Dparmn of Naural Rsourcs (ovr an abov h alray hgh lvls hough o b u o monaz, a locally occurrng san naurally hgh n raaon).910 S also: Ls of norsmns n h Scosh npnnc rfrnum, 2014 Man arcl: Consuonal saus of Orkny, Shlan an h Wsrn Isls In 2010, Jmmy Carr publsh hs Wh Hous Dars. In h nry for Fbruary 27, 1980, Jmmy Carr wro: Bhn h scns, h fral a program ha bgun wh h passag of h Fral A Roa Ac of 1916, provng 50% monary suppor from h fral govrnmn for mprovmn of major roas. Th Fral A Hghway Ac of 1921 lm h rous o 7% of ach sa's roas, whl 3 n vry 7 roas ha o b nrsa n characr. Infcaon of hs man roas was compl n 1923.1 Th U.S. Rou shl s prn on a squar blank wh a black backgroun. Calforna s h only sa o us an olr cu-ou sgn. B r sh czns who ar rsn n Scolan; 4 Racons Auhncy of h fgur S also: Ls of Un Sas Numbr Hghways Prm Mnsr Dav Camron sa h was lgh wh h rsul, gong on o say ha woul hav brokn my har o s our Un Kngom com o an n an I know ha hs snmn was shar no jus by popl across our counry bu also aroun h worl.394 Shan Anrson from h Wllam Crk Hol, loca 200 km (124 m) norh-ws of h own of Marr clam h hol rcv an anonymous fax scrbng h locaon of h arwork, bu hy gnor , smssng h fax as a jok. In Dcmbr 2013 h Br Toghr campagn clar ha ha rcv onaons of ?2.8 mllon.55 Sx-fgur conrbuons wr ma by busnssmn Ian Taylor an Donal Houson, an by auhor C. J. Sansom; almos 27,000 onaons of unr ?7,500 ha bn rcv by h sam a.56 A lar onaon cam from wrr J. K. Rowlng, who announc n Jun 2014 ha sh ha gvn ?1 mllon.5556 In h followng monh, whsky sllr Wllam Gran & Sons announc a onaon of approxmaly ?100,000.57 On 12 Augus 2014 Br Toghr announc ha ha ras nough mony o covr h maxmum spnng prm an was no longr accpng onaons.58 Ths was arbu n par o a larg numbr of small onaons bng rcv afr h frs lvs ba bwn Salmon an Darlng.58 6 Furhr rang --997e3debc04397f86d48cf77384f52 Content-Type: text/html; Touch__fire
Touchfire Case & Keyboard
Touchfire,_Inc. | 1117_NW_54th__Street | Seattle,_WA_98107

Attention iPad Owners: Bluetooth Keyboards Are A Thing Of The Past. | Introducing The All-New Touchfire Case and Keyboard | Unlike bluetooth keyboards, Touchfire... -Isn’t An Extra Device You Have To Carry -Doesn’t Add Any Noticeable Size Or Weight -Won’t Drain Your iPad’s Battery -Doesn’t Need To Pair Or Synch With Your iPad -Is Affordable And Has A Lifetime Warranty | Over 35,000 Satisfied Customers!| “Incredibly Simple To Use. Like Typing On A Physical Keyboard” - The New York Times | “I love it! I love it!” ~ Kathy Lee - Today Show | “An Ingenious Idea” - TIME

Touchfire,_Inc. | 1117_NW_54th_Street | Seattle,_WA 98107

To__unsubscribe < a href="http://diznyxd.com/n8w6=oKWAMdAivt/368722a09baf57a27b39c0ba1f12b194">click__here

A smnar hos by h Carng Enowmn for Inrnaonal Pac sa ha h Royal Navy woul hav o consr a rang of alrnavs, nclung sarmamn.96 A rpor n 2013 from h Scolan Insu hnk ank suggs a fuur Scosh govrnmn coul b convnc o las h Faslan nuclar bas o h rs of h UK o manan goo plomac rlaons an xp NATO nry ngoaons.97 xfs Cos an funng A shorr form of hs worng was us n a subsqun Naonal Inllgnc Councl mmoranum of Spmbr, 1985.48 Inrnaonal racon Th Ys campagn rpaly call for hr o b a lvs ba bwn UK Prm Mnsr Dav Camron an Frs Mnsr of Scolan Alx Salmon. Ths calls for a on-on-on ba wr smss by Camron354355 on h bass ha h rfrnum s for Scos o c an h ba shoul b bwn popl n Scolan who wan o say, an popl n Scolan who wan o go.356 Calls for such a ba wr also suppor by formr Prm Mnsr Goron Brown who sa woul b a goo a.357 Br Toghr charman Alsar Darlng accus Salmon of run n ng scar from bang hm nsa,358 alhough Surgon sa n 2013 ha a Salmon-Darlng ba woul ak plac a som pon.359 Darlng rfus a publc ba wh Ys Scolan charman Blar Jnkns.360 UKIP lar Ngl Farag also challng Salmon o ba, bu Farag was smss by an SNP spokswoman as an rrlvanc n Scolan.361 In Ocobr 1999, a wh papr ha was publsh by h U.S. Sna Rpublcan Polcy Comm n opposon o h Comprhnsv Ts Ban Tray sa: Canaa: John Bar, h Mnsr of Forgn Affars of Canaa, wlcom h cson an pras h conuc of h rfrnum.398 Wh 32 sas alray markng hr rous, h plan was approv by AASHO on Novmbr 11, 1926.1 Ths plan nclu a numbr of rconally spl rous, svral sconnuous rous (nclung US 6, US 19 an US 50), an som rmn a sa lns.22 By h m h frs rou log was publsh n Aprl 1927, major numbrng changs ha bn ma n Pnnsylvana n orr o algn h rous o h xsng auo rals.23 In aon, U.S. Rou 15 ha bn xn across Vrgna.24 In January 2012, Elan Murray MSP of Labour l a ba argung ha h franchs shoul b xn o Scos lvng ous Scolan, nclung h approxmaly 800,000 lv n g n h ohr pars of h UK.35 Ths was oppos by h Scosh Govrnmn, whch argu ha woul graly ncras h complxy of h rfrnum an sa ha hr was vnc from h Un Naons Human Rghs Comm ha ohr naons mgh quson h lgmacy of a rfrnum f h franchs s no rroral.35 Th Kngom of Scolan an h Kngom of Englan wr sablsh as npnn counrs urng h Ml Ags. Afr fghng a srs of wars urng h 14h cnury, h wo monarchs nr a prsonal unon n 1603 (h Unon of h Crowns) whn Jams VI of Scolan also bcam Jams I of Englan. Th wo naons wr mporarly un unr on govrnmn whn Olvr Cromwll was clar Lor Procor of a Commonwalh n 1653, bu hs was ssolv whn h monarchy was rsor n 1660. Scolan an Englan un o form h Kngom of Gra Bran n 1707, facors n favour of unon bng, on h Scosh s, h conomc problms caus by h falur of h Darn schm an, on h Englsh, scurng h Hannovran ln of succsson. Gra Bran n urn un wh h Kngom of Irlan n 1801, formng h Un Kngom of Gra Bran an Irlan. Mos of Irlan lf h Unon n 1922 as h Irsh Fr Sa; hus h full nam of h sovrgn sa oay s h U n Kngom of Gra Bran an Norhrn Irlan. Th rou numbrs an locaons ar coorna by h Amrcan Assocaon of Sa Hghway an Transporaon Offcals (AASHTO).3 Th only fral nvolvmn n AASHTO s a nonvong sa for h Un Sas Dparmn of Transporaon. Gnrally, norh-o-souh hghways ar o-numbr, wh lows numbrs n h as, h ara of h founng hrn sas of h Un Sas, an hghs n h ws. Smlarly, as-o-ws hghways ar ypcally vn-numbr, wh h lows numbrs n h norh, whr roas wr frs mprov mos nnsvly, an hghs n h souh. Major norh-souh rous hav numbrs nng n 1 whl major as-ws rous hav numbrs nng n 0. Thr-g numbr hghways ar spur rous of parn hghways bu ar no ncssarly connc o hr parns. Som v rous xs o prov wo algnmns for on rou, vn hough many spls hav bn lmna. Spcal rous, usually pos wh a bannr, can prov varous rous, such as an alrna, bypass or busnss rou, for a U.S. Hghway. Th Scosh govrnmn an pro-npnnc campagnrs sa ha a mocrac fc xs n Scolan111112113 bcaus h UK was a unary sa ha no hav a cof consuon.114 Th SNP also scrb h unlc Hous of L ors as an affron o mocracy.115 Th mocrac fc labl has somms bn us o rfr o h pro bwn h 1979 an 1997 UK gnral lcons, urng whch h Labour Pary hl a majory of Scosh sas bu h Consrvav Pary govrn h whol of h UK.116 Alx Salmon sa n Spmbr 2013 ha nsancs such as hs amoun o a lack of mocracy, an ha h popl who lv an work n Scolan ar h popl mos lkly o mak h rgh chocs for Scolan.117118 In January 2012, Parck Harv sa: Grns hav a vson of a mor racal mocracy n Scolan, wh far grar lvls of scusson an cson makng a communy lvl.119 Th campagn n favour of Scolan rmanng n h UK, Br Toghr, was launch on 25 Jun 2012.51 I was l by Alsar Darlng, formr Chancllor of h Exchqur, an ha suppor from h Consrvav Pary, Labour Pary an Lbral Dmocras.5152 S Tyb Islan, Gorga, Un Sas Prm Mnsr Dav Camron sa h was lgh wh h rsul, gong on o say ha woul hav brokn my har o s our Un Kngom com o an n an I know ha hs snmn was shar no jus by popl across our counry bu also aroun h worl.394 1958 Tyb Islan m-ar collson War Plan R f rs s ou a scrpon of Canaa's gography, mlary rsourcs, an ransporaon, an wn on o valua a srs of possbl pr-mpv Amrcan campagns o nva Canaa n svral aras an occupy ky pors an ralways bfor Brsh roops coul prov rnforcmn o h Canaans - h assumpon bng ha Bran woul us Canaa as a sagng pon. Th a was ha h Amrcan aacks on Canaa woul prvn Bran from usng Canaan rsourcs, pors, or arbass.2 8 Rfrncs Vancouvr an Vcora:

--997e3debc04397f86d48cf77384f52-- From bfoster@redhat.com Wed Apr 1 11:38:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2188E7F5D for ; Wed, 1 Apr 2015 11:38:30 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 025BC8F8081 for ; Wed, 1 Apr 2015 09:38:26 -0700 (PDT) X-ASG-Debug-ID: 1427906305-04bdf036242cc5e0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ctqn1a5bw0yUPmwk (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Apr 2015 09:38:25 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 6FF1B8E3CC; Wed, 1 Apr 2015 16:38:25 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t31GcOwA026783; Wed, 1 Apr 2015 12:38:24 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id AF3A41208AB; Wed, 1 Apr 2015 12:38:23 -0400 (EDT) Date: Wed, 1 Apr 2015 12:38:23 -0400 From: Brian Foster To: Danny Shavit Cc: xfs@oss.sgi.com, Dave Chinner , Lev Vainblat , Alex Lyakas Subject: Re: xfs corruption issue Message-ID: <20150401163822.GC4756@bfoster.bfoster> X-ASG-Orig-Subj: Re: xfs corruption issue References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1427906305 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Wed, Apr 01, 2015 at 05:09:11PM +0300, Danny Shavit wrote: > Hello Dave, > My name is Danny Shavit and I am with Zadara storage. > We will appreciate your feedback reagrding an xfs_corruption and xfs_reapir > issue. > > We found a corrupted xfs volume in one of our systems. It is around 1 TB > size and about 12 M files. > We run xfs_repair on the volume which succeeded after 42 minutes. > We noticed that memory consumption raised to about 7.5 GB. > Since some customers are using only 4GB (and sometimes even 2 GB) we tried > running "xfs_repair -m 3200" on a 4GB RAM machine. > However, this time an OOM event happened during handling of AG 26 during > step 3. > The log of xfs_repair is enclosed below. > We will appreciate your feedback on the amount of memory needed for > xfs_repair in general and when using "-m" option specifically. > The xfs metadata dump (prior to xfs_repair) can be found here: > https://zadarastorage-public.s3.amazonaws.com/xfs/xfsdump-prod-ebs_2015-03-30_23-00-38.tgz > It is a 1.2 GB file (and 5.7 GB uncompressed). > > We will appreciate your feedback on the corruption pattern as well. Have you tried something smaller, perhaps -m 2048? I just ran repair on the metadump on a 4g vm. It oom'd with default options and completed in a few minutes with -m 2048, though rss still peaked at around 3.6G. Using -P seems to help at the cost of time. That took me ~20m, but rss peaked around 2.4GB. FWIW, I'm also on a recent xfsprogs: # xfs_repair -V xfs_repair version 3.2.2 Brian > -- > Thank you, > Danny Shavit > Zadarastorage > > ---------- xfs_repair log ---------------- > root@vsa-00000428-vc-1:/export/4xfsdump# date; xfs_repair -v /dev/dm-55; > date > Tue Mar 31 02:28:04 PDT 2015 > Phase 1 - find and verify superblock... > - block cache size set to 735288 entries > Phase 2 - using internal log > - zero log... > zero_log: head block 1920 tail block 1920 > - scan filesystem freespace and inode maps... > agi_freecount 54, counted 55 in ag 7 > sb_ifree 947, counted 948 > - 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 > bad . entry in directory inode 5691013154, was 5691013170: correcting > bad . entry in directory inode 5691013156, was 5691013172: correcting > bad . entry in directory inode 5691013157, was 5691013173: correcting > bad . entry in directory inode 5691013163, was 5691013179: correcting > - agno = 22 > - agno = 23 > - agno = 24 > - agno = 25 > - agno = 26 (Danny: OOM occurred here with -m 3200) > - agno = 27 > - agno = 28 > - agno = 29 > - agno = 30 > - agno = 31 > - agno = 32 > - 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 = 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 > - agno = 32 > 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 > - agno = 32 > - 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 > entry "SavedXML" in dir inode 2992927241 inconsistent with .. value > (4324257659) in ino 5691013156 > will clear entry "SavedXML" > rebuilding directory inode 2992927241 > - agno = 12 > - agno = 13 > - agno = 14 > - agno = 15 > - agno = 16 > entry "Out" in dir inode 4324257659 inconsistent with .. value (2992927241) > in ino 5691013172 > will clear entry "Out" > rebuilding directory inode 4324257659 > - agno = 17 > - agno = 18 > - agno = 19 > - agno = 20 > - agno = 21 > entry "tocs_file" in dir inode 5691012138 inconsistent with .. value > (3520464676) in ino 5691013154 > will clear entry "tocs_file" > entry "trees.log" in dir inode 5691012138 inconsistent with .. value > (3791956240) in ino 5691013155 > will clear entry "trees.log" > rebuilding directory inode 5691012138 > entry "filelist.xml" in directory inode 5691012139 not consistent with .. > value (1909707067) in inode 5691013157, > junking entry > fixing i8count in inode 5691012139 > entry "image001.jpg" in directory inode 5691012140 not consistent with .. > value (2450176033) in inode 5691013163, > junking entry > fixing i8count in inode 5691012140 > entry "OCR" in dir inode 5691013154 inconsistent with .. value (5691013170) > in ino 1909707065 > will clear entry "OCR" > entry "Tmp" in dir inode 5691013154 inconsistent with .. value (5691013170) > in ino 2179087403 > will clear entry "Tmp" > entry "images" in dir inode 5691013154 inconsistent with .. value > (5691013170) in ino 2450176007 > will clear entry "images" > rebuilding directory inode 5691013154 > entry "286_Kellman_Hoffer_Master.pdf_files" in dir inode 5691013156 > inconsistent with .. value (5691013172) in ino 834535727 > will clear entry "286_Kellman_Hoffer_Master.pdf_files" > rebuilding directory inode 5691013156 > - agno = 22 > - agno = 23 > - agno = 24 > - agno = 25 > - agno = 26 > - agno = 27 > - agno = 28 > - agno = 29 > - agno = 30 > - agno = 31 > - agno = 32 > - traversal finished ... > - moving disconnected inodes to lost+found ... > disconnected dir inode 834535727, moving to lost+found > disconnected dir inode 1909707065, moving to lost+found > disconnected dir inode 2179087403, moving to lost+found > disconnected dir inode 2450176007, moving to lost+found > disconnected dir inode 5691013154, moving to lost+found > disconnected dir inode 5691013155, moving to lost+found > disconnected dir inode 5691013156, moving to lost+found > disconnected dir inode 5691013157, moving to lost+found > disconnected dir inode 5691013163, moving to lost+found > disconnected dir inode 5691013172, moving to lost+found > Phase 7 - verify and correct link counts... > resetting inode 81777983 nlinks from 2 to 12 > resetting inode 1909210410 nlinks from 1 to 2 > resetting inode 1909707067 nlinks from 3 to 2 > resetting inode 2450176033 nlinks from 18 to 17 > resetting inode 2992927241 nlinks from 13 to 12 > resetting inode 3520464676 nlinks from 13 to 12 > resetting inode 3791956240 nlinks from 13 to 12 > resetting inode 4324257659 nlinks from 13 to 12 > resetting inode 5691013154 nlinks from 5 to 2 > resetting inode 5691013156 nlinks from 3 to 2 > > XFS_REPAIR Summary Tue Mar 31 03:11:00 2015 > > Phase Start End Duration > Phase 1: 03/31 02:28:04 03/31 02:28:05 1 second > Phase 2: 03/31 02:28:05 03/31 02:28:42 37 seconds > Phase 3: 03/31 02:28:42 03/31 02:48:29 19 minutes, 47 seconds > Phase 4: 03/31 02:48:29 03/31 02:55:40 7 minutes, 11 seconds > Phase 5: 03/31 02:55:40 03/31 02:55:43 3 seconds > Phase 6: 03/31 02:55:43 03/31 03:10:57 15 minutes, 14 seconds > Phase 7: 03/31 03:10:57 03/31 03:10:57 > > Total run time: 42 minutes, 53 seconds > done > Tue Mar 31 03:11:01 PDT 2015 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Wed Apr 1 12:12:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D7A127F5E for ; Wed, 1 Apr 2015 12:12:40 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C7B46304039 for ; Wed, 1 Apr 2015 10:12:37 -0700 (PDT) X-ASG-Debug-ID: 1427908352-04cbb06ccb2a5b50001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id MvGv0RkwQObYMRmG for ; Wed, 01 Apr 2015 10:12:32 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from Liberator.local (unknown [184.49.98.206]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id A178163C3A22; Wed, 1 Apr 2015 12:12:31 -0500 (CDT) Message-ID: <551C26FC.10803@sandeen.net> Date: Wed, 01 Apr 2015 13:12:28 -0400 From: Eric Sandeen MIME-Version: 1.0 To: Danny Shavit , xfs@oss.sgi.com, Dave Chinner CC: Lev Vainblat , Alex Lyakas Subject: Re: xfs corruption issue References: X-ASG-Orig-Subj: Re: xfs corruption issue In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1427908352 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.00 X-Barracuda-Spam-Status: No, SCORE=1.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_TG232 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17443 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC0_TG232 BODY: Custom Rule TG232 On 4/1/15 10:09 AM, Danny Shavit wrote: > Hello Dave, > My name is Danny Shavit and I am with Zadara storage. > We will appreciate your feedback reagrding an xfs_corruption and xfs_reapir issue. > > We found a corrupted xfs volume in one of our systems. It is around 1 TB size and about 12 M files. > We run xfs_repair on the volume which succeeded after 42 minutes. > We noticed that memory consumption raised to about 7.5 GB. > Since some customers are using only 4GB (and sometimes even 2 GB) we tried running "xfs_repair -m 3200" on a 4GB RAM machine. > However, this time an OOM event happened during handling of AG 26 during step 3. > The log of xfs_repair is enclosed below. > We will appreciate your feedback on the amount of memory needed for xfs_repair in general and when using "-m" option specifically. > The xfs metadata dump (prior to xfs_repair) can be found here: > https://zadarastorage-public.s3.amazonaws.com/xfs/xfsdump-prod-ebs_2015-03-30_23-00-38.tgz > It is a 1.2 GB file (and 5.7 GB uncompressed). > > We will appreciate your feedback on the corruption pattern as well. > -- > Thank you, > Danny Shavit > Zadarastorage > > ---------- xfs_repair log ---------------- Just a note ... > bad . entry in directory inode 5691013154, was 5691013170: correcting 101010011001101011111100000100100 101010011001101011111100000110100 ^ bit flip > bad . entry in directory inode 5691013156, was 5691013172: correcting 101010011001101011111100000100100 101010011001101011111100000110100 ^ bit flip etc ... > bad . entry in directory inode 5691013157, was 5691013173: correcting > bad . entry in directory inode 5691013163, was 5691013179: correcting From kdhall@binghamton.edu Wed Apr 1 14:53:41 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 825387F60 for ; Wed, 1 Apr 2015 14:53:41 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1AE7DAC001 for ; Wed, 1 Apr 2015 12:53:37 -0700 (PDT) X-ASG-Debug-ID: 1427918010-04bdf036252d92a0001-NocioJ Received: from mail-qc0-f173.google.com (mail-qc0-f173.google.com [209.85.216.173]) by cuda.sgi.com with ESMTP id kyGoTO0fpMY9kQSQ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 Apr 2015 12:53:31 -0700 (PDT) X-Barracuda-Envelope-From: kdhall@binghamton.edu X-Barracuda-Apparent-Source-IP: 209.85.216.173 Received: by qcay5 with SMTP id y5so50657350qca.1 for ; Wed, 01 Apr 2015 12:53:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type; bh=63afQYk4HEie/+syY9QksjdvgIzMLYXVBKzFYr1ewO8=; b=BOS6SwAybLP8hnNBBAVwz6S5t4VEhRRCQs7kGtpaXVF+MWq48Fbg8UVNQcBdue28te DzZRStBrYYsbInVy7yUFn0SPV8OAzIi80TSucO/JoU01uAn5OdwMPTNiS9RDw0M7lmPa xX5u/zc5/4UvfsPsiKErzvB5+/dkJdJwEdbxme6L93AnTQbLhJb/xPjpN5/7LNZxnaPg F4QTaXKXqKPMWMJb4vpi0rwSlkeL8uBdll4KYDMUObpZqnHcVtmua/sDa8N3q71FeTwz 6y46tU/oIPZJpWXFGpo/C2/JHE63gaAItrU8+fC6/RdOEyJlqKQd+IekpKBa6jMrFG4O j5fw== X-Gm-Message-State: ALoCoQnFzxEDnbX7EFLA7+Hc2/B86Q2dqlq6EH+eHMG0WI9DxwxqKrqXRexgTi75ysRLPMNVQwGx X-Received: by 10.229.122.70 with SMTP id k6mr42937219qcr.27.1427918010310; Wed, 01 Apr 2015 12:53:30 -0700 (PDT) Received: from [128.226.118.196] (omega.cs.binghamton.edu. [128.226.118.196]) by mx.google.com with ESMTPSA id h128sm1959938qhc.6.2015.04.01.12.53.29 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 01 Apr 2015 12:53:29 -0700 (PDT) Message-ID: <551C4CB8.7@binghamton.edu> Date: Wed, 01 Apr 2015 15:53:28 -0400 From: Dave Hall User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20121215 Icedove/3.0.11 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: Slightly Urgent: XFS No Space Left On Device References: <551993CF.4060908@binghamton.edu> <20150330194510.GD28621@dastard> X-ASG-Orig-Subj: Re: Slightly Urgent: XFS No Space Left On Device In-Reply-To: <20150330194510.GD28621@dastard> Content-Type: multipart/alternative; boundary="------------000606080309030203050905" X-Barracuda-Connect: mail-qc0-f173.google.com[209.85.216.173] X-Barracuda-Start-Time: 1427918011 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17450 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. --------------000606080309030203050905 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Please pardon the 'top-post', but here is the additional information requested: This is a Dell R720xd dual 8-core Xeon system with 128GB RAM. The RAID controller is Dell PERC H710 Mini with 12 2TB disks in RAID6. The OS is Debian 6 with kernel 3.2.0-0.bpo.4-amd64 #1 SMP Debian 3.2.65-1+deb7u2~bpo60+1 x86_64. From /proc/mounts: /dev/sdb1 /data xfs rw,noexec,noatime,attr2,delaylog,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,usrquota,prjquota 0 0 Content-wise there are 7 first level directories. Four contain just a couple files. One of these has a 4.9TB file in it. The other 3 directories are multi-terabyte, but contain many hundreds of thousands of smaller files. There are nearly 5 million files in about 6500 directories, but less than 500 files are over 1GB in size, with only 200 over 20GB and less than 10 over 1TB. The output from xfs_info was previously included, but is repeated here: # xfs_info /data meta-data=/dev/sdb1 isize=256 agcount=19, agsize=268435440 blks = sectsz=512 attr=2 data = bsize=4096 blocks=4882431488, imaxpct=5 = sunit=16 swidth=160 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=521728, version=2 = sectsz=512 sunit=16 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # df -h . Filesystem Size Used Avail Use% Mounted on /dev/sdb1 19T 12T 7.0T 62% /data # df -ih . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 3.7G 4.7M 3.7G 1% /data Here are the more extensive freesp outputs for each of the 19 AGs: # xfs_db -r /dev/sdb1 -c 'freesp -s -a0' from to extents blocks pct 1 1 747 747 19.68 2 3 1045 2496 65.77 4 7 138 552 14.55 total free extents 1930 total free blocks 3795 average free extent size 1.96632 (I don't recall the output from AG0 being so terse on Monday when I first posted, but the summary information is the same.) # xfs_db -r /dev/sdb1 -c 'freesp -s -a1' from to extents blocks pct 1 1 4494 4494 0.00 2 3 42096 91313 0.05 4 7 41096 232953 0.13 8 15 121930 1401067 0.81 16 31 44994 1067002 0.61 32 63 4 209 0.00 64 127 20 1888 0.00 128 255 38 7408 0.00 256 511 14728 5936038 3.41 512 1023 308 246748 0.14 1024 2047 14893 22978919 13.22 2048 4095 1229 4118315 2.37 4096 8191 778 4743029 2.73 8192 16383 329 3694322 2.13 16384 32767 51 1098154 0.63 32768 65535 3 98794 0.06 65536 131071 3 275197 0.16 131072 262143 4 957177 0.55 1048576 2097151 1 1968807 1.13 2097152 4194303 1 3085945 1.78 4194304 8388607 1 5131888 2.95 8388608 16777215 3 33124064 19.06 16777216 33554431 1 28684574 16.50 33554432 67108863 1 54883950 31.57 total free extents 287006 total free blocks 173832255 average free extent size 605.675 # xfs_db -r /dev/sdb1 -c 'freesp -s -a2' from to extents blocks pct 1 1 5695 5695 0.01 2 3 15405 39309 0.04 4 7 52230 296302 0.31 8 15 112686 1303036 1.38 16 31 967 20943 0.02 32 63 67 2983 0.00 64 127 343 31251 0.03 128 255 100 17428 0.02 256 511 76672 30821379 32.69 512 1023 4 2800 0.00 1024 2047 7537 11762194 12.47 2048 4095 326 1130975 1.20 4096 8191 251 1615591 1.71 8192 16383 105 1184516 1.26 16384 32767 14 274014 0.29 65536 131071 1 73535 0.08 131072 262143 1 234632 0.25 262144 524287 2 788639 0.84 524288 1048575 1 738305 0.78 1048576 2097151 17 34302421 36.38 8388608 16777215 1 9645304 10.23 total free extents 272425 total free blocks 94291252 # xfs_db -r /dev/sdb1 -c 'freesp -s -a3' from to extents blocks pct 1 1 5793 5793 0.01 2 3 30667 70359 0.06 4 7 53174 301241 0.27 8 15 129098 1480652 1.34 16 31 4875 116797 0.11 32 63 148 6755 0.01 64 127 13192 1200672 1.09 128 255 1754 286342 0.26 256 511 35132 14122824 12.81 512 1023 6 4349 0.00 1024 2047 11609 18155617 16.47 2048 4095 447 1557312 1.41 4096 8191 342 2120360 1.92 8192 16383 147 1685429 1.53 16384 32767 21 438149 0.40 32768 65535 5 221907 0.20 65536 131071 4 384869 0.35 131072 262143 3 576503 0.52 524288 1048575 1 524974 0.48 1048576 2097151 2 2718327 2.47 33554432 67108863 1 64229173 58.28 total free extents 286421 total free blocks 110208404 average free extent size 384.778 # xfs_db -r /dev/sdb1 -c 'freesp -s -a4' from to extents blocks pct 1 1 5399 5399 0.01 2 3 29098 67289 0.06 4 7 50889 287977 0.27 8 15 125018 1433485 1.34 16 31 4601 108565 0.10 32 63 86 3986 0.00 64 127 12587 1145709 1.07 128 255 1537 250472 0.23 256 511 35982 14464615 13.50 512 1023 2 1039 0.00 1024 2047 11074 17306417 16.16 2048 4095 428 1488906 1.39 4096 8191 343 2130436 1.99 8192 16383 141 1574556 1.47 16384 32767 22 437491 0.41 32768 65535 2 74530 0.07 65536 131071 2 198418 0.19 131072 262143 2 399680 0.37 262144 524287 1 278259 0.26 524288 1048575 1 858623 0.80 2097152 4194303 1 2357798 2.20 4194304 8388607 1 7007241 6.54 8388608 16777215 2 24665312 23.03 16777216 33554431 1 30572144 28.54 total free extents 277220 total free blocks 107118347 average free extent size 386.402 # xfs_db -r /dev/sdb1 -c 'freesp -s -a5' from to extents blocks pct 1 1 5623 5623 0.01 2 3 28053 65224 0.06 4 7 51000 288250 0.27 8 15 122593 1405739 1.32 16 31 4439 104165 0.10 32 63 107 4913 0.00 64 127 10904 992287 0.93 128 255 1458 237872 0.22 256 511 37480 15066766 14.19 512 1023 4 3298 0.00 1024 2047 11035 17206454 16.20 2048 4095 416 1447533 1.36 4096 8191 367 2264983 2.13 8192 16383 132 1507258 1.42 16384 32767 17 369018 0.35 32768 65535 5 252737 0.24 65536 131071 1 93292 0.09 131072 262143 2 369218 0.35 262144 524287 1 371390 0.35 8388608 16777215 1 11907027 11.21 16777216 33554431 1 17447945 16.43 33554432 67108863 1 34801264 32.77 total free extents 273640 total free blocks 106212256 average free extent size 388.146 # xfs_db -r /dev/sdb1 -c 'freesp -s -a6' from to extents blocks pct 1 1 5485 5485 0.01 2 3 28092 65622 0.06 4 7 51124 288408 0.27 8 15 122946 1411945 1.32 16 31 4295 99036 0.09 32 63 136 6165 0.01 64 127 10723 975901 0.91 128 255 1393 227148 0.21 256 511 37816 15202240 14.21 512 1023 9 6955 0.01 1024 2047 11001 17139027 16.02 2048 4095 452 1570875 1.47 4096 8191 310 1937437 1.81 8192 16383 140 1622878 1.52 16384 32767 22 432606 0.40 32768 65535 3 119928 0.11 65536 131071 2 201539 0.19 131072 262143 1 242792 0.23 524288 1048575 2 1642283 1.53 1048576 2097151 2 2522760 2.36 4194304 8388607 2 9405762 8.79 16777216 33554431 2 51878521 48.48 total free extents 273958 total free blocks 107005313 average free extent size 390.59 # xfs_db -r /dev/sdb1 -c 'freesp -s -a7' from to extents blocks pct 1 1 5728 5728 0.01 2 3 27342 63963 0.06 4 7 51098 288588 0.27 8 15 122083 1400413 1.29 16 31 4154 95945 0.09 32 63 125 5696 0.01 64 127 10490 954737 0.88 128 255 1377 225554 0.21 256 511 38215 15362799 14.12 512 1023 5 3014 0.00 1024 2047 11138 17383490 15.98 2048 4095 446 1547400 1.42 4096 8191 314 1940099 1.78 8192 16383 138 1553781 1.43 16384 32767 26 526808 0.48 32768 65535 5 198738 0.18 65536 131071 3 306072 0.28 131072 262143 1 204457 0.19 524288 1048575 1 675084 0.62 4194304 8388607 1 6256240 5.75 8388608 16777215 1 16700425 15.35 16777216 33554431 2 43106323 39.62 total free extents 272693 total free blocks 108805354 average free extent size 399.003 # xfs_db -r /dev/sdb1 -c 'freesp -s -a8' from to extents blocks pct 1 1 5545 5545 0.01 2 3 27537 64379 0.06 4 7 50486 284834 0.28 8 15 121719 1398087 1.35 16 31 4169 96146 0.09 32 63 140 6404 0.01 64 127 10168 925246 0.90 128 255 1347 219934 0.21 256 511 38396 15435162 14.96 512 1023 9 6657 0.01 1024 2047 11038 17234155 16.70 2048 4095 411 1427988 1.38 4096 8191 337 2110360 2.04 8192 16383 134 1540661 1.49 16384 32767 29 608663 0.59 32768 65535 4 194772 0.19 65536 131071 1 103722 0.10 131072 262143 1 204540 0.20 1048576 2097151 1 1177573 1.14 16777216 33554431 1 19036961 18.45 33554432 67108863 1 41120777 39.84 total free extents 271474 total free blocks 103202566 average free extent size 380.156 # xfs_db -r /dev/sdb1 -c 'freesp -s -a9' from to extents blocks pct 1 1 5614 5614 0.01 2 3 27343 63817 0.06 4 7 50789 286921 0.26 8 15 122085 1402116 1.28 16 31 4116 95310 0.09 32 63 152 6954 0.01 64 127 10679 971872 0.89 128 255 1315 215145 0.20 256 511 38557 15499672 14.19 512 1023 6 4435 0.00 1024 2047 11119 17330956 15.86 2048 4095 428 1485414 1.36 4096 8191 313 1932235 1.77 8192 16383 158 1823615 1.67 16384 32767 20 427607 0.39 32768 65535 4 162954 0.15 65536 131071 1 74125 0.07 262144 524287 2 782823 0.72 524288 1048575 1 979230 0.90 4194304 8388607 1 6064549 5.55 33554432 67108863 1 59625070 54.58 total free extents 272704 total free blocks 109240434 average free extent size 400.582 # xfs_db -r /dev/sdb1 -c 'freesp -s -a10' from to extents blocks pct 1 1 5451 5451 0.01 2 3 27619 64469 0.06 4 7 50888 287306 0.27 8 15 122129 1401775 1.30 16 31 4156 96465 0.09 32 63 112 5115 0.00 64 127 10378 944415 0.87 128 255 1336 218180 0.20 256 511 38056 15298154 14.15 512 1023 6 3630 0.00 1024 2047 10908 17025890 15.75 2048 4095 443 1541035 1.43 4096 8191 326 2036141 1.88 8192 16383 150 1670607 1.55 16384 32767 23 497495 0.46 32768 65535 6 259503 0.24 65536 131071 1 80765 0.07 131072 262143 2 466041 0.43 8388608 16777215 2 24552174 22.72 16777216 33554431 2 41626231 38.51 total free extents 271994 total free blocks 108080842 average free extent size 397.365 # xfs_db -r /dev/sdb1 -c 'freesp -s -a11' from to extents blocks pct 1 1 5753 5753 0.01 2 3 28506 66164 0.06 4 7 51222 289018 0.27 8 15 122115 1400237 1.31 16 31 4325 100622 0.09 32 63 121 5515 0.01 64 127 11218 1020941 0.95 128 255 1419 231469 0.22 256 511 37233 14967258 13.96 512 1023 13 10433 0.01 1024 2047 11040 17243570 16.08 2048 4095 438 1528105 1.42 4096 8191 313 1948122 1.82 8192 16383 137 1545209 1.44 16384 32767 17 340315 0.32 32768 65535 3 135239 0.13 524288 1048575 1 806510 0.75 1048576 2097151 1 1670160 1.56 2097152 4194303 1 3359120 3.13 4194304 8388607 1 4927086 4.59 8388608 16777215 2 26372734 24.59 16777216 33554431 1 29269614 27.29 total free extents 273880 total free blocks 107243194 average free extent size 391.57 # xfs_db -r /dev/sdb1 -c 'freesp -s -a12' from to extents blocks pct 1 1 5373 5373 0.01 2 3 27530 64216 0.06 4 7 50788 286603 0.27 8 15 121652 1396720 1.31 16 31 4188 97008 0.09 32 63 71 3299 0.00 64 127 10446 950836 0.89 128 255 1349 220210 0.21 256 511 37835 15209592 14.28 512 1023 1 918 0.00 1024 2047 10950 17087135 16.04 2048 4095 416 1445170 1.36 4096 8191 341 2103801 1.98 8192 16383 146 1643458 1.54 16384 32767 27 551354 0.52 32768 65535 5 173876 0.16 65536 131071 3 273193 0.26 262144 524287 2 695714 0.65 524288 1048575 2 1740580 1.63 16777216 33554431 1 22797321 21.40 33554432 67108863 1 39761770 37.33 total free extents 271127 total free blocks 106508147 average free extent size 392.835 # xfs_db -r /dev/sdb1 -c 'freesp -s -a13' from to extents blocks pct 1 1 5756 5756 0.01 2 3 27074 63268 0.06 4 7 50796 287174 0.26 8 15 121675 1397015 1.28 16 31 4260 98417 0.09 32 63 136 6191 0.01 64 127 10324 939549 0.86 128 255 1315 215314 0.20 256 511 39195 15756002 14.40 512 1023 8 5675 0.01 1024 2047 11129 17335479 15.84 2048 4095 419 1457554 1.33 4096 8191 321 2012733 1.84 8192 16383 143 1666063 1.52 16384 32767 23 460740 0.42 32768 65535 2 103286 0.09 65536 131071 2 193585 0.18 262144 524287 1 356370 0.33 33554432 67108863 1 67081225 61.29 total free extents 272580 total free blocks 109441396 average free extent size 401.502 # xfs_db -r /dev/sdb1 -c 'freesp -s -a14' from to extents blocks pct 1 1 5585 5585 0.01 2 3 26740 62793 0.06 4 7 50781 286750 0.27 8 15 120804 1388061 1.30 16 31 4186 96930 0.09 32 63 160 7192 0.01 64 127 9898 900897 0.84 128 255 1318 215049 0.20 256 511 38427 15446911 14.48 512 1023 7 4130 0.00 1024 2047 11116 17330340 16.25 2048 4095 390 1356701 1.27 4096 8191 307 1917633 1.80 8192 16383 150 1679866 1.57 16384 32767 24 490742 0.46 32768 65535 3 156921 0.15 65536 131071 3 290496 0.27 524288 1048575 1 715032 0.67 1048576 2097151 1 1570472 1.47 33554432 67108863 1 62750353 58.83 total free extents 269902 total free blocks 106672854 average free extent size 395.228 # xfs_db -r /dev/sdb1 -c 'freesp -s -a15' from to extents blocks pct 1 1 5734 5734 0.01 2 3 15777 40616 0.05 4 7 51372 290289 0.39 8 15 121640 1396823 1.88 16 31 3105 69153 0.09 32 63 14 700 0.00 64 127 19 1760 0.00 128 255 3157 530350 0.71 256 511 18 7797 0.01 512 1023 7 4504 0.01 1024 2047 44155 71890115 96.61 2048 4095 5 13601 0.02 4096 8191 4 20168 0.03 8192 16383 3 24586 0.03 16384 32767 4 80524 0.11 32768 65535 1 37430 0.05 total free extents 245015 total free blocks 74414150 average free extent size 303.713 # xfs_db -r /dev/sdb1 -c 'freesp -s -a16' from to extents blocks pct 1 1 5458 5458 0.01 2 3 29896 69017 0.07 4 7 50646 286147 0.28 8 15 123250 1414603 1.37 16 31 4257 99155 0.10 32 63 112 5139 0.00 64 127 13228 1203844 1.17 128 255 1363 222544 0.22 256 511 31264 12567433 12.17 512 1023 8 5911 0.01 1024 2047 11091 17306832 16.76 2048 4095 452 1573760 1.52 4096 8191 356 2239416 2.17 8192 16383 135 1522673 1.47 16384 32767 17 350269 0.34 32768 65535 3 122543 0.12 65536 131071 3 374987 0.36 131072 262143 5 1169749 1.13 524288 1048575 2 1884165 1.83 1048576 2097151 1 1237015 1.20 8388608 16777215 1 9194667 8.91 16777216 33554431 2 50384042 48.80 total free extents 271550 total free blocks 103239369 average free extent size 380.185 # xfs_db -r /dev/sdb1 -c 'freesp -s -a17' from to extents blocks pct 1 1 5788 5788 0.01 2 3 26404 61921 0.06 4 7 50904 287563 0.27 8 15 120710 1385219 1.30 16 31 4204 97175 0.09 32 63 76 3490 0.00 64 127 10045 914186 0.86 128 255 1392 228552 0.21 256 511 36867 14820192 13.90 512 1023 7 4938 0.00 1024 2047 11286 17637792 16.54 2048 4095 441 1532071 1.44 4096 8191 334 2078958 1.95 8192 16383 123 1419610 1.33 16384 32767 19 396082 0.37 32768 65535 5 224967 0.21 65536 131071 4 362807 0.34 131072 262143 1 155224 0.15 262144 524287 2 866414 0.81 524288 1048575 1 999449 0.94 1048576 2097151 1 1158766 1.09 2097152 4194303 1 2528878 2.37 8388608 16777215 3 39151859 36.72 16777216 33554431 1 20313097 19.05 total free extents 268619 total free blocks 106634998 average free extent size 396.975 # xfs_db -r /dev/sdb1 -c 'freesp -s -a18' from to extents blocks pct 1 1 5588 5588 0.03 2 3 24900 58887 0.32 4 7 50929 287739 1.56 8 15 120592 1386142 7.52 16 31 4089 93924 0.51 32 63 141 6372 0.03 64 127 8468 770640 4.18 128 255 1339 218783 1.19 256 511 22 8582 0.05 512 1023 4 2711 0.01 1024 2047 9719 15333235 83.15 2048 4095 4 10960 0.06 4096 8191 1 4097 0.02 8192 16383 1 8769 0.05 16384 32767 2 32791 0.18 32768 65535 5 210714 1.14 total free extents 225804 total free blocks 18439934 average free extent size 81.6635 Dave Hall Binghamton University kdhall@binghamton.edu 607-760-2328 (Cell) 607-777-4641 (Office) On 03/30/2015 03:45 PM, Dave Chinner wrote: > On Mon, Mar 30, 2015 at 02:19:59PM -0400, Dave Hall wrote: > >> Hello, >> >> I have an XFS file system that's getting 'No space left on device' >> errors. xfs_fsr also complains of 'No space left'. The XFS Info >> is: >> >> # xfs_info /data >> meta-data=/dev/sdb1 isize=256 agcount=19, >> agsize=268435440 blks >> = sectsz=512 attr=2 >> data = bsize=4096 blocks=4882431488, imaxpct=5 >> = sunit=16 swidth=160 blks >> naming =version 2 bsize=4096 ascii-ci=0 >> log =internal bsize=4096 blocks=521728, version=2 >> = sectsz=512 sunit=16 blks, >> lazy-count=1 >> realtime =none extsz=4096 blocks=0, rtextents=0 >> >> # df -h . >> Filesystem Size Used Avail Use% Mounted on >> /dev/sdb1 19T 12T 7.0T 62% /data >> # df -ih . >> Filesystem Inodes IUsed IFree IUse% Mounted on >> /dev/sdb1 3.7G 4.7M 3.7G 1% /data >> >> >> xfs_db freesp shows that AG 0 seems to be full. I've included the >> freesp for the first few AGs, but the rest seem pretty consistent >> with AGs 1 - 4 that I've included below. >> >> xfs_db> freesp -s -e 1000000000 -a 0 >> > Can you please drop the "-e 1000000" from these commands and post it > again? The histogram of differing free space sizes is information > we actually need to diagnose the problem... > > Also, kernel version, mount options and machine details are > necessary to determine why AG0 might be full (e.g. allocation policy > in use). > > Cheers, > > Dave. > --------------000606080309030203050905 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Please pardon the 'top-post', but here is the additional information requested:

This is a Dell R720xd dual 8-core Xeon system with 128GB RAM.  The RAID controller is Dell PERC H710 Mini with 12 2TB disks in RAID6.

The OS is Debian 6 with kernel 3.2.0-0.bpo.4-amd64 #1 SMP Debian 3.2.65-1+deb7u2~bpo60+1 x86_64.

>From /proc/mounts:
/dev/sdb1 /data xfs rw,noexec,noatime,attr2,delaylog,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,usrquota,prjquota 0 0
Content-wise there are 7 first level directories.  Four contain just a couple files.  One of these has a 4.9TB file in it.  The other 3 directories are multi-terabyte, but contain many hundreds of thousands of smaller files.  There are nearly 5 million files in about 6500 directories, but less than 500 files are over 1GB in size, with only 200 over 20GB and less than 10 over 1TB.

The output from xfs_info was previously included, but is repeated here:
   # xfs_info /data
   meta-data=/dev/sdb1              isize=256    agcount=19,
   agsize=268435440 blks
             =                       sectsz=512   attr=2
   data     =                       bsize=4096 blocks=4882431488, imaxpct=5
             =                       sunit=16     swidth=160 blks
   naming   =version 2              bsize=4096   ascii-ci=0
   log      =internal               bsize=4096   blocks=521728, version=2
             =                       sectsz=512   sunit=16 blks,
   lazy-count=1
   realtime =none                   extsz=4096   blocks=0, rtextents=0

   # df -h .
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/sdb1              19T   12T  7.0T  62% /data
   # df -ih .
   Filesystem            Inodes   IUsed   IFree IUse% Mounted on
   /dev/sdb1               3.7G    4.7M    3.7G    1% /data
  
Here are the more extensive freesp outputs for each of the 19 AGs:
# xfs_db -r /dev/sdb1 -c 'freesp -s -a0'
   from      to extents  blocks    pct
      1       1     747     747  19.68
      2       3    1045    2496  65.77
      4       7     138     552  14.55
total free extents 1930
total free blocks 3795
average free extent size 1.96632
(I don't recall the output from AG0 being so terse on Monday when I first posted, but the summary information is the same.)
# xfs_db -r /dev/sdb1 -c 'freesp -s -a1'
   from      to extents  blocks    pct
      1       1    4494    4494   0.00
      2       3   42096   91313   0.05
      4       7   41096  232953   0.13
      8      15  121930 1401067   0.81
     16      31   44994 1067002   0.61
     32      63       4     209   0.00
     64     127      20    1888   0.00
    128     255      38    7408   0.00
    256     511   14728 5936038   3.41
    512    1023     308  246748   0.14
   1024    2047   14893 22978919  13.22
   2048    4095    1229 4118315   2.37
   4096    8191     778 4743029   2.73
   8192   16383     329 3694322   2.13
  16384   32767      51 1098154   0.63
  32768   65535       3   98794   0.06
  65536  131071       3  275197   0.16
 131072  262143       4  957177   0.55
1048576 2097151       1 1968807   1.13
2097152 4194303       1 3085945   1.78
4194304 8388607       1 5131888   2.95
8388608 16777215       3 33124064  19.06
16777216 33554431       1 28684574  16.50
33554432 67108863       1 54883950  31.57
total free extents 287006
total free blocks 173832255
average free extent size 605.675

# xfs_db -r /dev/sdb1 -c 'freesp -s -a2'
   from      to extents  blocks    pct
      1       1    5695    5695   0.01
      2       3   15405   39309   0.04
      4       7   52230  296302   0.31
      8      15  112686 1303036   1.38
     16      31     967   20943   0.02
     32      63      67    2983   0.00
     64     127     343   31251   0.03
    128     255     100   17428   0.02
    256     511   76672 30821379  32.69
    512    1023       4    2800   0.00
   1024    2047    7537 11762194  12.47
   2048    4095     326 1130975   1.20
   4096    8191     251 1615591   1.71
   8192   16383     105 1184516   1.26
  16384   32767      14  274014   0.29
  65536  131071       1   73535   0.08
 131072  262143       1  234632   0.25
 262144  524287       2  788639   0.84
 524288 1048575       1  738305   0.78
1048576 2097151      17 34302421  36.38
8388608 16777215       1 9645304  10.23
total free extents 272425
total free blocks 94291252

# xfs_db -r /dev/sdb1 -c 'freesp -s -a3'
   from      to extents  blocks    pct
      1       1    5793    5793   0.01
      2       3   30667   70359   0.06
      4       7   53174  301241   0.27
      8      15  129098 1480652   1.34
     16      31    4875  116797   0.11
     32      63     148    6755   0.01
     64     127   13192 1200672   1.09
    128     255    1754  286342   0.26
    256     511   35132 14122824  12.81
    512    1023       6    4349   0.00
   1024    2047   11609 18155617  16.47
   2048    4095     447 1557312   1.41
   4096    8191     342 2120360   1.92
   8192   16383     147 1685429   1.53
  16384   32767      21  438149   0.40
  32768   65535       5  221907   0.20
  65536  131071       4  384869   0.35
 131072  262143       3  576503   0.52
 524288 1048575       1  524974   0.48
1048576 2097151       2 2718327   2.47
33554432 67108863       1 64229173  58.28
total free extents 286421
total free blocks 110208404
average free extent size 384.778

# xfs_db -r /dev/sdb1 -c 'freesp -s -a4'
   from      to extents  blocks    pct
      1       1    5399    5399   0.01
      2       3   29098   67289   0.06
      4       7   50889  287977   0.27
      8      15  125018 1433485   1.34
     16      31    4601  108565   0.10
     32      63      86    3986   0.00
     64     127   12587 1145709   1.07
    128     255    1537  250472   0.23
    256     511   35982 14464615  13.50
    512    1023       2    1039   0.00
   1024    2047   11074 17306417  16.16
   2048    4095     428 1488906   1.39
   4096    8191     343 2130436   1.99
   8192   16383     141 1574556   1.47
  16384   32767      22  437491   0.41
  32768   65535       2   74530   0.07
  65536  131071       2  198418   0.19
 131072  262143       2  399680   0.37
 262144  524287       1  278259   0.26
 524288 1048575       1  858623   0.80
2097152 4194303       1 2357798   2.20
4194304 8388607       1 7007241   6.54
8388608 16777215       2 24665312  23.03
16777216 33554431       1 30572144  28.54
total free extents 277220
total free blocks 107118347
average free extent size 386.402

# xfs_db -r /dev/sdb1 -c 'freesp -s -a5'
   from      to extents  blocks    pct
      1       1    5623    5623   0.01
      2       3   28053   65224   0.06
      4       7   51000  288250   0.27
      8      15  122593 1405739   1.32
     16      31    4439  104165   0.10
     32      63     107    4913   0.00
     64     127   10904  992287   0.93
    128     255    1458  237872   0.22
    256     511   37480 15066766  14.19
    512    1023       4    3298   0.00
   1024    2047   11035 17206454  16.20
   2048    4095     416 1447533   1.36
   4096    8191     367 2264983   2.13
   8192   16383     132 1507258   1.42
  16384   32767      17  369018   0.35
  32768   65535       5  252737   0.24
  65536  131071       1   93292   0.09
 131072  262143       2  369218   0.35
 262144  524287       1  371390   0.35
8388608 16777215       1 11907027  11.21
16777216 33554431       1 17447945  16.43
33554432 67108863       1 34801264  32.77
total free extents 273640
total free blocks 106212256
average free extent size 388.146

# xfs_db -r /dev/sdb1 -c 'freesp -s -a6'
   from      to extents  blocks    pct
      1       1    5485    5485   0.01
      2       3   28092   65622   0.06
      4       7   51124  288408   0.27
      8      15  122946 1411945   1.32
     16      31    4295   99036   0.09
     32      63     136    6165   0.01
     64     127   10723  975901   0.91
    128     255    1393  227148   0.21
    256     511   37816 15202240  14.21
    512    1023       9    6955   0.01
   1024    2047   11001 17139027  16.02
   2048    4095     452 1570875   1.47
   4096    8191     310 1937437   1.81
   8192   16383     140 1622878   1.52
  16384   32767      22  432606   0.40
  32768   65535       3  119928   0.11
  65536  131071       2  201539   0.19
 131072  262143       1  242792   0.23
 524288 1048575       2 1642283   1.53
1048576 2097151       2 2522760   2.36
4194304 8388607       2 9405762   8.79
16777216 33554431       2 51878521  48.48
total free extents 273958
total free blocks 107005313
average free extent size 390.59

# xfs_db -r /dev/sdb1 -c 'freesp -s -a7'
   from      to extents  blocks    pct
      1       1    5728    5728   0.01
      2       3   27342   63963   0.06
      4       7   51098  288588   0.27
      8      15  122083 1400413   1.29
     16      31    4154   95945   0.09
     32      63     125    5696   0.01
     64     127   10490  954737   0.88
    128     255    1377  225554   0.21
    256     511   38215 15362799  14.12
    512    1023       5    3014   0.00
   1024    2047   11138 17383490  15.98
   2048    4095     446 1547400   1.42
   4096    8191     314 1940099   1.78
   8192   16383     138 1553781   1.43
  16384   32767      26  526808   0.48
  32768   65535       5  198738   0.18
  65536  131071       3  306072   0.28
 131072  262143       1  204457   0.19
 524288 1048575       1  675084   0.62
4194304 8388607       1 6256240   5.75
8388608 16777215       1 16700425  15.35
16777216 33554431       2 43106323  39.62
total free extents 272693
total free blocks 108805354
average free extent size 399.003

# xfs_db -r /dev/sdb1 -c 'freesp -s -a8'
   from      to extents  blocks    pct
      1       1    5545    5545   0.01
      2       3   27537   64379   0.06
      4       7   50486  284834   0.28
      8      15  121719 1398087   1.35
     16      31    4169   96146   0.09
     32      63     140    6404   0.01
     64     127   10168  925246   0.90
    128     255    1347  219934   0.21
    256     511   38396 15435162  14.96
    512    1023       9    6657   0.01
   1024    2047   11038 17234155  16.70
   2048    4095     411 1427988   1.38
   4096    8191     337 2110360   2.04
   8192   16383     134 1540661   1.49
  16384   32767      29  608663   0.59
  32768   65535       4  194772   0.19
  65536  131071       1  103722   0.10
 131072  262143       1  204540   0.20
1048576 2097151       1 1177573   1.14
16777216 33554431       1 19036961  18.45
33554432 67108863       1 41120777  39.84
total free extents 271474
total free blocks 103202566
average free extent size 380.156

# xfs_db -r /dev/sdb1 -c 'freesp -s -a9'
   from      to extents  blocks    pct
      1       1    5614    5614   0.01
      2       3   27343   63817   0.06
      4       7   50789  286921   0.26
      8      15  122085 1402116   1.28
     16      31    4116   95310   0.09
     32      63     152    6954   0.01
     64     127   10679  971872   0.89
    128     255    1315  215145   0.20
    256     511   38557 15499672  14.19
    512    1023       6    4435   0.00
   1024    2047   11119 17330956  15.86
   2048    4095     428 1485414   1.36
   4096    8191     313 1932235   1.77
   8192   16383     158 1823615   1.67
  16384   32767      20  427607   0.39
  32768   65535       4  162954   0.15
  65536  131071       1   74125   0.07
 262144  524287       2  782823   0.72
 524288 1048575       1  979230   0.90
4194304 8388607       1 6064549   5.55
33554432 67108863       1 59625070  54.58
total free extents 272704
total free blocks 109240434
average free extent size 400.582

# xfs_db -r /dev/sdb1 -c 'freesp -s -a10'
   from      to extents  blocks    pct
      1       1    5451    5451   0.01
      2       3   27619   64469   0.06
      4       7   50888  287306   0.27
      8      15  122129 1401775   1.30
     16      31    4156   96465   0.09
     32      63     112    5115   0.00
     64     127   10378  944415   0.87
    128     255    1336  218180   0.20
    256     511   38056 15298154  14.15
    512    1023       6    3630   0.00
   1024    2047   10908 17025890  15.75
   2048    4095     443 1541035   1.43
   4096    8191     326 2036141   1.88
   8192   16383     150 1670607   1.55
  16384   32767      23  497495   0.46
  32768   65535       6  259503   0.24
  65536  131071       1   80765   0.07
 131072  262143       2  466041   0.43
8388608 16777215       2 24552174  22.72
16777216 33554431       2 41626231  38.51
total free extents 271994
total free blocks 108080842
average free extent size 397.365

# xfs_db -r /dev/sdb1 -c 'freesp -s -a11'
   from      to extents  blocks    pct
      1       1    5753    5753   0.01
      2       3   28506   66164   0.06
      4       7   51222  289018   0.27
      8      15  122115 1400237   1.31
     16      31    4325  100622   0.09
     32      63     121    5515   0.01
     64     127   11218 1020941   0.95
    128     255    1419  231469   0.22
    256     511   37233 14967258  13.96
    512    1023      13   10433   0.01
   1024    2047   11040 17243570  16.08
   2048    4095     438 1528105   1.42
   4096    8191     313 1948122   1.82
   8192   16383     137 1545209   1.44
  16384   32767      17  340315   0.32
  32768   65535       3  135239   0.13
 524288 1048575       1  806510   0.75
1048576 2097151       1 1670160   1.56
2097152 4194303       1 3359120   3.13
4194304 8388607       1 4927086   4.59
8388608 16777215       2 26372734  24.59
16777216 33554431       1 29269614  27.29
total free extents 273880
total free blocks 107243194
average free extent size 391.57

# xfs_db -r /dev/sdb1 -c 'freesp -s -a12'
   from      to extents  blocks    pct
      1       1    5373    5373   0.01
      2       3   27530   64216   0.06
      4       7   50788  286603   0.27
      8      15  121652 1396720   1.31
     16      31    4188   97008   0.09
     32      63      71    3299   0.00
     64     127   10446  950836   0.89
    128     255    1349  220210   0.21
    256     511   37835 15209592  14.28
    512    1023       1     918   0.00
   1024    2047   10950 17087135  16.04
   2048    4095     416 1445170   1.36
   4096    8191     341 2103801   1.98
   8192   16383     146 1643458   1.54
  16384   32767      27  551354   0.52
  32768   65535       5  173876   0.16
  65536  131071       3  273193   0.26
 262144  524287       2  695714   0.65
 524288 1048575       2 1740580   1.63
16777216 33554431       1 22797321  21.40
33554432 67108863       1 39761770  37.33
total free extents 271127
total free blocks 106508147
average free extent size 392.835

# xfs_db -r /dev/sdb1 -c 'freesp -s -a13'
   from      to extents  blocks    pct
      1       1    5756    5756   0.01
      2       3   27074   63268   0.06
      4       7   50796  287174   0.26
      8      15  121675 1397015   1.28
     16      31    4260   98417   0.09
     32      63     136    6191   0.01
     64     127   10324  939549   0.86
    128     255    1315  215314   0.20
    256     511   39195 15756002  14.40
    512    1023       8    5675   0.01
   1024    2047   11129 17335479  15.84
   2048    4095     419 1457554   1.33
   4096    8191     321 2012733   1.84
   8192   16383     143 1666063   1.52
  16384   32767      23  460740   0.42
  32768   65535       2  103286   0.09
  65536  131071       2  193585   0.18
 262144  524287       1  356370   0.33
33554432 67108863       1 67081225  61.29
total free extents 272580
total free blocks 109441396
average free extent size 401.502

# xfs_db -r /dev/sdb1 -c 'freesp -s -a14'
   from      to extents  blocks    pct
      1       1    5585    5585   0.01
      2       3   26740   62793   0.06
      4       7   50781  286750   0.27
      8      15  120804 1388061   1.30
     16      31    4186   96930   0.09
     32      63     160    7192   0.01
     64     127    9898  900897   0.84
    128     255    1318  215049   0.20
    256     511   38427 15446911  14.48
    512    1023       7    4130   0.00
   1024    2047   11116 17330340  16.25
   2048    4095     390 1356701   1.27
   4096    8191     307 1917633   1.80
   8192   16383     150 1679866   1.57
  16384   32767      24  490742   0.46
  32768   65535       3  156921   0.15
  65536  131071       3  290496   0.27
 524288 1048575       1  715032   0.67
1048576 2097151       1 1570472   1.47
33554432 67108863       1 62750353  58.83
total free extents 269902
total free blocks 106672854
average free extent size 395.228

# xfs_db -r /dev/sdb1 -c 'freesp -s -a15'
   from      to extents  blocks    pct
      1       1    5734    5734   0.01
      2       3   15777   40616   0.05
      4       7   51372  290289   0.39
      8      15  121640 1396823   1.88
     16      31    3105   69153   0.09
     32      63      14     700   0.00
     64     127      19    1760   0.00
    128     255    3157  530350   0.71
    256     511      18    7797   0.01
    512    1023       7    4504   0.01
   1024    2047   44155 71890115  96.61
   2048    4095       5   13601   0.02
   4096    8191       4   20168   0.03
   8192   16383       3   24586   0.03
  16384   32767       4   80524   0.11
  32768   65535       1   37430   0.05
total free extents 245015
total free blocks 74414150
average free extent size 303.713

# xfs_db -r /dev/sdb1 -c 'freesp -s -a16'
   from      to extents  blocks    pct
      1       1    5458    5458   0.01
      2       3   29896   69017   0.07
      4       7   50646  286147   0.28
      8      15  123250 1414603   1.37
     16      31    4257   99155   0.10
     32      63     112    5139   0.00
     64     127   13228 1203844   1.17
    128     255    1363  222544   0.22
    256     511   31264 12567433  12.17
    512    1023       8    5911   0.01
   1024    2047   11091 17306832  16.76
   2048    4095     452 1573760   1.52
   4096    8191     356 2239416   2.17
   8192   16383     135 1522673   1.47
  16384   32767      17  350269   0.34
  32768   65535       3  122543   0.12
  65536  131071       3  374987   0.36
 131072  262143       5 1169749   1.13
 524288 1048575       2 1884165   1.83
1048576 2097151       1 1237015   1.20
8388608 16777215       1 9194667   8.91
16777216 33554431       2 50384042  48.80
total free extents 271550
total free blocks 103239369
average free extent size 380.185

# xfs_db -r /dev/sdb1 -c 'freesp -s -a17'
   from      to extents  blocks    pct
      1       1    5788    5788   0.01
      2       3   26404   61921   0.06
      4       7   50904  287563   0.27
      8      15  120710 1385219   1.30
     16      31    4204   97175   0.09
     32      63      76    3490   0.00
     64     127   10045  914186   0.86
    128     255    1392  228552   0.21
    256     511   36867 14820192  13.90
    512    1023       7    4938   0.00
   1024    2047   11286 17637792  16.54
   2048    4095     441 1532071   1.44
   4096    8191     334 2078958   1.95
   8192   16383     123 1419610   1.33
  16384   32767      19  396082   0.37
  32768   65535       5  224967   0.21
  65536  131071       4  362807   0.34
 131072  262143       1  155224   0.15
 262144  524287       2  866414   0.81
 524288 1048575       1  999449   0.94
1048576 2097151       1 1158766   1.09
2097152 4194303       1 2528878   2.37
8388608 16777215       3 39151859  36.72
16777216 33554431       1 20313097  19.05
total free extents 268619
total free blocks 106634998
average free extent size 396.975

# xfs_db -r /dev/sdb1 -c 'freesp -s -a18'
   from      to extents  blocks    pct
      1       1    5588    5588   0.03
      2       3   24900   58887   0.32
      4       7   50929  287739   1.56
      8      15  120592 1386142   7.52
     16      31    4089   93924   0.51
     32      63     141    6372   0.03
     64     127    8468  770640   4.18
    128     255    1339  218783   1.19
    256     511      22    8582   0.05
    512    1023       4    2711   0.01
   1024    2047    9719 15333235  83.15
   2048    4095       4   10960   0.06
   4096    8191       1    4097   0.02
   8192   16383       1    8769   0.05
  16384   32767       2   32791   0.18
  32768   65535       5  210714   1.14
total free extents 225804
total free blocks 18439934
average free extent size 81.6635

Dave Hall
Binghamton University
kdhall@binghamton.edu
607-760-2328 (Cell)
607-777-4641 (Office)

On 03/30/2015 03:45 PM, Dave Chinner wrote:
On Mon, Mar 30, 2015 at 02:19:59PM -0400, Dave Hall wrote:
  
Hello,

I have an XFS file system that's getting 'No space left on device'
errors.  xfs_fsr also complains of 'No space left'.  The XFS Info
is:

   # xfs_info /data
   meta-data=/dev/sdb1              isize=256    agcount=19,
   agsize=268435440 blks
             =                       sectsz=512   attr=2
   data     =                       bsize=4096 blocks=4882431488, imaxpct=5
             =                       sunit=16     swidth=160 blks
   naming   =version 2              bsize=4096   ascii-ci=0
   log      =internal               bsize=4096   blocks=521728, version=2
             =                       sectsz=512   sunit=16 blks,
   lazy-count=1
   realtime =none                   extsz=4096   blocks=0, rtextents=0

   # df -h .
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/sdb1              19T   12T  7.0T  62% /data
   # df -ih .
   Filesystem            Inodes   IUsed   IFree IUse% Mounted on
   /dev/sdb1               3.7G    4.7M    3.7G    1% /data


xfs_db freesp shows that AG 0 seems to be full.  I've included the
freesp for the first few AGs, but the rest seem pretty consistent
with AGs 1 - 4 that I've included below.

   xfs_db> freesp -s -e 1000000000 -a 0
    
Can you please drop the "-e 1000000" from these commands and post it
again?  The histogram of differing free space sizes is information
we actually need to diagnose the problem...

Also, kernel version, mount options and machine details are
necessary to determine why AG0 might be full (e.g. allocation policy
in use).

Cheers,

Dave.
  
--------------000606080309030203050905-- From david@fromorbit.com Wed Apr 1 19:12:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 589397F62 for ; Wed, 1 Apr 2015 19:12:43 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 30F75304039 for ; Wed, 1 Apr 2015 17:12:40 -0700 (PDT) X-ASG-Debug-ID: 1427933557-04cb6c3fde279a90001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id FNnv35NlLHFMMjdj for ; Wed, 01 Apr 2015 17:12:37 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2A+BwDGiBxVPM+HLHlcDoJ6gS6GQqt4BpkQBAICgUFNAQEBAQEBBwEBAQE4O4QeAQEBAwE6HCMFCwgDDgoJJQ8FJQMHGhOIJwfNTwEBAQEGAQEBAR4YhXeFGoR5B4QtBZpZgR6DMo9ygiQcgRNRKjGCQwEBAQ Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail06.adl6.internode.on.net with ESMTP; 02 Apr 2015 10:42:36 +1030 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YdSkN-0007Bc-BM; Thu, 02 Apr 2015 11:12:35 +1100 Date: Thu, 2 Apr 2015 11:12:35 +1100 From: Dave Chinner To: Dave Hall Cc: xfs@oss.sgi.com Subject: Re: Slightly Urgent: XFS No Space Left On Device Message-ID: <20150402001235.GI28621@dastard> X-ASG-Orig-Subj: Re: Slightly Urgent: XFS No Space Left On Device References: <551993CF.4060908@binghamton.edu> <20150330194510.GD28621@dastard> <551C4CB8.7@binghamton.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <551C4CB8.7@binghamton.edu> 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: 1427933557 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17460 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Apr 01, 2015 at 03:53:28PM -0400, Dave Hall wrote: > Please pardon the 'top-post', but here is the additional information > requested: > > This is a Dell R720xd dual 8-core Xeon system with 128GB RAM. The > RAID controller is Dell PERC H710 Mini with 12 2TB disks in RAID6. > > The OS is Debian 6 with kernel 3.2.0-0.bpo.4-amd64 #1 SMP Debian > 3.2.65-1+deb7u2~bpo60+1 x86_64. So defaults to inode32 allocation.... > From /proc/mounts: > > /dev/sdb1 /data xfs > rw,noexec,noatime,attr2,delaylog,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,usrquota,prjquota > 0 0 ... and inode64 is not in the mount options..... > The output from xfs_info was previously included, but is repeated here: > > # xfs_info /data > meta-data=/dev/sdb1 isize=256 agcount=19,agsize=268435440 blks Inode allocation requires contiguous free space of 16k aligned to 8k boundaries to allocate new inode chunks. Also, 1TB AGs, so with inode32, inodes can only be allocated in AG 0. > Here are the more extensive freesp outputs for each of the 19 AGs: > > # xfs_db -r /dev/sdb1 -c 'freesp -s -a0' > from to extents blocks pct > 1 1 747 747 19.68 > 2 3 1045 2496 65.77 > 4 7 138 552 14.55 > total free extents 1930 > total free blocks 3795 > average free extent size 1.96632 And that says you have no correctly aligned free 16k extents that can be allocated in AG 0. i.e. no more inodes can be allocated, and that's where the ENOSPC is coming from. Unmount, add the inode64 mount option, and you'll be able to allocate inodes again as they will be allowed to be allocated in any AG, not just AG 0. Cheers, Dave. -- Dave Chinner david@fromorbit.com From rjevskiy@gmail.com Thu Apr 2 06:42:17 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.0 required=5.0 tests=FREEMAIL_FROM,FRT_ADOBE2, T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E24037F59 for ; Thu, 2 Apr 2015 06:42:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 49B78AC002 for ; Thu, 2 Apr 2015 04:42:16 -0700 (PDT) X-ASG-Debug-ID: 1427974932-04cbb06cc92f9870001-NocioJ Received: from mail-wg0-f49.google.com (mail-wg0-f49.google.com [74.125.82.49]) by cuda.sgi.com with ESMTP id 8QdNTgqptZitGpuB (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 Apr 2015 04:42:13 -0700 (PDT) X-Barracuda-Envelope-From: rjevskiy@gmail.com X-Barracuda-Apparent-Source-IP: 74.125.82.49 Received: by wgra20 with SMTP id a20so82415283wgr.3 for ; Thu, 02 Apr 2015 04:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:subject:user-agent:date:message-id:mime-version :content-type; bh=3xCC0WgG9OWGmdq+F3AFJjW9XezfT7GJeR5xxoDvUQ8=; b=dq2uZ/YjyoDetQBz1p09dMtz964WDFg0qLYjVNXPyVDxtLWM9yyLNbvZXT7I9CT1nr pEkj81oumMiiBOKR6dNGEOE3j4wS0FLhbOy//W/Ai7BO21CysQ/y+uF1hO8LFEPcYrFZ SU/Muj/9gXQwJZJh7K9zQxMn1TpUoN6lXpjhnlwXdl5NjINQ6viY4EM9IGZ1MrT3FF4j C6XqFR45WSgUC148T4iSfCtMT6jWo2KBzW8k1n5WI/3e7OI0egE3mfHuCeTXubIwWhay c4oHKMUfBMTTzxgnQSDZeKkcLUda/xaPnifUDkhZIZ4acO8wqPtT4I52TBc4JCEvjOpC NHAA== X-Received: by 10.194.61.100 with SMTP id o4mr93929887wjr.28.1427974932603; Thu, 02 Apr 2015 04:42:12 -0700 (PDT) Received: from smtp.gmail.com ([195.214.234.4]) by mx.google.com with ESMTPSA id j7sm7361180wix.4.2015.04.02.04.42.10 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 02 Apr 2015 04:42:11 -0700 (PDT) Sender: Dmitry Monakhov From: Dmitry Monakhov To: xfs@oss.sgi.com, Dave Chinner Subject: FYI: xfstests generic/019 result panic. 4.0.0-rc5 User-Agent: Notmuch/0.18.1 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu) X-ASG-Orig-Subj: FYI: xfstests generic/019 result panic. 4.0.0-rc5 Date: Thu, 02 Apr 2015 14:40:26 +0300 Message-ID: <87r3s2g3md.fsf@openvz.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Barracuda-Connect: mail-wg0-f49.google.com[74.125.82.49] X-Barracuda-Start-Time: 1427974933 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17479 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature --=-=-= Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" --==-=-= Content-Type: text/plain Hi I've played with recent kernel 4.0.0-rc5 (AlViro's tree vfs.git/for-next) And have found two issues (I do not know whenever it was fixed in xfs.git already, so I just want to let you know) First one is Panic caused by xfstest generic/019 (disk failure simulation test) see attachment --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBCgAGBQJVHSqrAAoJELhyPTmIL6kB57IH/3F+o3Zgvm/IHSTtg73uuJus bmmOjvStQ/y+moDIDC8gkZDAMBHC249vLrWGUaxIVaKqalsrBFgGS4tnQgAeKkQp cLRcnNRi5XonazKnHPAaG+sECmivWGBeqHdq70SyE98dOEj9yv6b8bPsXac/1BAh LIxO1pYJYaweavLH/voU2f8sWiyQikkIQITrYbBV9hanTxy+74nIlO1aBqh97za3 MobynFwYFx6WVMIh4dveSas8ePd4mVYiKVaYBfqe3LHUWl4Zphg9CR9c4oO5pWFt TuLCBxAZdA4XzJTBVJsrk5WF3ZKdzE6VGwohvUiok9CkEZH+hNGy9dI9CFxrzAw= =gec5 -----END PGP SIGNATURE----- --==-=-=-- --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=xfs-generic-019-panic.txt /dev/vdb: 68/327680 files (5.9% non-contiguous), 59205/1310720 blocks FSTESTVER: fio fio-2.2.5-2-g64666f8-dirty (Thu, 22 Jan 2015 00:57:00 +0100) FSTESTVER: quota 52f4e0a (Mon, 5 Jan 2015 17:13:22 +0100) FSTESTVER: xfsprogs v3.2.2 (Thu, 4 Dec 2014 07:56:44 +1100) FSTESTVER: xfstests-bld 5a41f87 (Thu, 22 Jan 2015 17:26:16 +0300) FSTESTVER: xfstests linux-v3.8-571-gad5c393 (Tue, 20 Jan 2015 15:37:19 +0400) FSTESTVER: kernel 4.0.0-rc5-196354-gcf5ffe9 #18 SMP Tue Mar 31 17:23:06 MSK 2015 x86_64 FSTESTCFG: "xfs" FSTESTSET: "generic/019" FSTESTEXC: "" FSTESTOPT: "aex" MNTOPTS: "" meta-data=/dev/vdd isize=256 agcount=4, agsize=327680 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=1310720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=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 total used free shared buffers cached Mem: 1974 69 1905 9 0 17 -/+ buffers/cache: 51 1923 Swap: 0 0 0 xfs_dqtrx 0 0 576 14 2 : tunables 0 0 0 : slabdata 0 0 0 xfs_dquot 0 0 720 22 4 : tunables 0 0 0 : slabdata 0 0 0 xfs_icr 0 0 144 28 1 : tunables 0 0 0 : slabdata 0 0 0 xfs_inode 0 0 1792 18 8 : tunables 0 0 0 : slabdata 0 0 0 xfs_efd_item 0 0 400 20 2 : tunables 0 0 0 : slabdata 0 0 0 xfs_buf_item 34 34 232 17 1 : tunables 0 0 0 : slabdata 2 2 0 xfs_da_state 0 0 480 17 2 : tunables 0 0 0 : slabdata 0 0 0 xfs_btree_cur 0 0 208 19 1 : tunables 0 0 0 : slabdata 0 0 0 xfs_log_ticket 0 0 184 22 1 : tunables 0 0 0 : slabdata 0 0 0 xfs_ioend 52 52 152 26 1 : tunables 0 0 0 : slabdata 2 2 0 BEGIN TEST: XFS Tue Mar 31 13:30:30 UTC 2015 Device: /dev/vdd mk2fs options: mount options: -o block_validity FSTYP -- xfs (debug) PLATFORM -- Linux/x86_64 kvm-xfstests 4.0.0-rc5-196354-gcf5ffe9 MKFS_OPTIONS -- -f -bsize=4096 /dev/vdc MOUNT_OPTIONS -- /dev/vdc /vdc generic/019 [13:30:32][ 17.619593] XFS (vdc): xlog_verify_grant_tail: space > BBTOB(tail_blocks) [ 41.914283] XFS (vdc): metadata I/O error: block 0x503d1f ("xlog_iodone") error 5 numblks 64 [ 41.917326] XFS (vdc): xfs_bmap_check_leaf_extents: BAD after btree leaves for 6623 extents [ 41.917376] XFS (vdc): Log I/O Error Detected. Shutting down filesystem [ 41.917378] XFS (vdc): Please umount the filesystem and rectify the problem(s) [ 41.918098] fsstress (3180) used greatest stack depth: 11392 bytes left [ 41.918876] XFS (vdc): metadata I/O error: block 0x503d5f ("xlog_iodone") error 5 numblks 64 [ 41.918966] XFS (vdc): xfs_log_force: error -5 returned. [ 41.930237] Kernel panic - not syncing: xfs_bmap_check_leaf_extents: CORRUPTED BTREE OR SOMETHING [ 41.932793] CPU: 0 PID: 3214 Comm: fio Not tainted 4.0.0-rc5-196354-gcf5ffe9 #18 [ 41.933500] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014 [ 41.933500] 00000000000019df ffff880072b4f508 ffffffff816effa5 000000000000001e [ 41.933500] ffffffff81ac0665 ffff880072b4f588 ffffffff816efc10 ffff880000000010 [ 41.933500] ffff880072b4f598 ffff880072b4f538 ffff880072b4f598 ffff880072b4f558 [ 41.933500] Call Trace: [ 41.933500] [] dump_stack+0x48/0x5b [ 41.933500] [] panic+0xd4/0x21c [ 41.933500] [] xfs_bmap_check_leaf_extents+0x495/0x506 [ 41.933500] [] xfs_bmap_add_extent_hole_real+0x786/0x7ae [ 41.933500] [] xfs_bmapi_write+0x6da/0xbb9 [ 41.933500] [] xfs_iomap_write_direct+0x26d/0x321 [ 41.933500] [] __xfs_get_blocks+0x1cb/0x4a1 [ 41.933500] [] ? trace_hardirqs_on_caller+0x164/0x19b [ 41.933500] [] xfs_get_blocks_direct+0x14/0x16 [ 41.933500] [] do_blockdev_direct_IO+0x64a/0xb83 [ 41.933500] [] ? local_clock+0x1a/0x23 [ 41.933500] [] ? __xfs_get_blocks+0x4a1/0x4a1 [ 41.933500] [] __blockdev_direct_IO+0x4c/0x4e [ 41.933500] [] ? __xfs_get_blocks+0x4a1/0x4a1 [ 41.933500] [] ? xfs_setfilesize+0xf3/0xf3 [ 41.933500] [] xfs_vm_direct_IO+0x8a/0x8c [ 41.933500] [] ? __xfs_get_blocks+0x4a1/0x4a1 [ 41.933500] [] ? xfs_setfilesize+0xf3/0xf3 [ 41.933500] [] generic_file_direct_write+0xc1/0x150 [ 41.933500] [] xfs_file_dio_aio_write+0x21c/0x265 [ 41.933500] [] ? aio_run_iocb+0x163/0x28d [ 41.933500] [] ? kvm_clock_read+0x1e/0x20 [ 41.933500] [] ? xfs_file_buffered_aio_write+0x1e8/0x1e8 [ 41.933500] [] xfs_file_write_iter+0x7c/0x107 [ 41.933500] [] aio_run_iocb+0x172/0x28d [ 41.933500] [] ? might_fault+0x42/0x92 [ 41.933500] [] ? might_fault+0x42/0x92 [ 41.933500] [] do_io_submit+0x34c/0x3e3 [ 41.933500] [] SyS_io_submit+0x10/0x12 [ 41.933500] [] system_call_fastpath+0x12/0x17 [ 41.933500] Kernel Offset: 0x0 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffff9fffffff) [ 41.933500] ---[ end Kernel panic - not syncing: xfs_bmap_check_leaf_extents: CORRUPTED BTREE OR SOMETHING --=-=-= Content-Type: text/plain Second one is lockdep's complain from splice, It looks like a false-positive one, but still. --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=xfs-lockdep-complain.txt [ 468.667585] ====================================================== [ 468.669774] [ INFO: possible circular locking dependency detected ] [ 468.669983] 4.0.0-rc5-196355-gd50b8fe-dirty #19 Not tainted [ 468.669983] ------------------------------------------------------- [ 468.669983] splice-fcntl/2950 is trying to acquire lock: [ 468.669983] (&sb->s_type->i_mutex_key#11){+.+.+.}, at: [] xfs_rw_ilock+0x21/0x31 [ 468.669983] but task is already holding lock: [ 468.669983] (&pipe->mutex/1){+.+.+.}, at: [] pipe_lock+0x1c/0x1e [ 468.669983] which lock already depends on the new lock. [ 468.669983] the existing dependency chain (in reverse order) is: [ 468.669983] -> #2 (&pipe->mutex/1){+.+.+.}: [ 468.669983] [] lock_acquire+0xd7/0x112 [ 468.669983] [] mutex_lock_nested+0x63/0x5ab [ 468.669983] [] pipe_lock+0x1c/0x1e [ 468.669983] [] splice_to_pipe+0x2d/0x203 [ 468.669983] [] __generic_file_splice_read+0x41f/0x440 [ 468.669983] [] generic_file_splice_read+0x49/0x73 [ 468.669983] [] xfs_file_splice_read+0xfb/0x144 [ 468.669983] [] do_splice_to+0x74/0x81 [ 468.669983] [] SyS_splice+0x4b6/0x55e [ 468.669983] [] system_call_fastpath+0x12/0x17 [ 468.669983] -> #1 (&(&ip->i_iolock)->mr_lock){++++++}: [ 468.669983] [] lock_acquire+0xd7/0x112 [ 468.669983] [] down_write_nested+0x4b/0xad [ 468.669983] [] xfs_ilock+0xdb/0x14b [ 468.669983] [] xfs_rw_ilock+0x2c/0x31 [ 468.669983] [] xfs_file_buffered_aio_write+0x59/0x1e8 [ 468.669983] [] xfs_file_write_iter+0x83/0x107 [ 468.669983] [] new_sync_write+0x64/0x82 [ 468.669983] [] vfs_write+0xb5/0x14d [ 468.669983] [] SyS_write+0x5c/0x8c [ 468.669983] [] system_call_fastpath+0x12/0x17 [ 468.669983] -> #0 (&sb->s_type->i_mutex_key#11){+.+.+.}: [ 468.669983] [] __lock_acquire+0xbd6/0xefb [ 468.669983] [] lock_acquire+0xd7/0x112 [ 468.669983] [] mutex_lock_nested+0x63/0x5ab [ 468.669983] [] xfs_rw_ilock+0x21/0x31 [ 468.669983] [] xfs_file_buffered_aio_write+0x59/0x1e8 [ 468.669983] [] xfs_file_write_iter+0x83/0x107 [ 468.669983] [] vfs_iter_write+0x4c/0x6b [ 468.669983] [] iter_file_splice_write+0x230/0x33a [ 468.669983] [] SyS_splice+0x409/0x55e [ 468.669983] [] system_call_fastpath+0x12/0x17 [ 468.669983] other info that might help us debug this[ 604.889687] serial8250: too much work for irq4 : [ 468.669983] Chain exists of: &sb->s_type->i_mutex_key#11 --> &(&ip->i_iolock)->mr_lock --> &pipe->mutex/1 [ 468.669983] Possible unsafe locking scenario: [ 468.669983] CPU0 CPU1 [ 468.669983] ---- ---- [ 468.669983] lock(&pipe->mutex/1); [ 468.669983] lock(&(&ip->i_iolock)->mr_lock); [ 468.669983] lock(&pipe->mutex/1); [ 468.669983] lock(&sb->s_type->i_mutex_key#11); [ 468.669983] *** DEADLOCK *** [ 468.669983] 2 locks held by splice-fcntl/2950: [ 468.669983] #0: (sb_writers#9){.+.+.+}, at: [] SyS_splice+0x3d6/0x55e [ 468.669983] #1: (&pipe->mutex/1){+.+.+.}, at: [] pipe_lock+0x1c/0x1e [ 468.669983] stack backtrace: [ 468.669983] CPU: 1 PID: 2950 Comm: splice-fcntl Not tainted 4.0.0-rc5-196355-gd50b8fe-dirty #19 [ 468.669983] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014 [ 468.669983] ffffffff8247a700 ffff88006b03fa18 ffffffff816eff65 0000000000000001 [ 468.669983] ffffffff824924b0 ffff88006b03fa68 ffffffff810c2fae ffff88006b03fa68 [ 468.669983] ffffffff822781f0 ffff88007c062de0 ffff88007c0624b0 ffff88007c062de0 [ 468.669983] Call Trace: [ 468.669983] [] dump_stack+0x48/0x5b [ 468.669983] [] print_circular_bug+0x1f8/0x209 [ 468.669983] [] __lock_acquire+0xbd6/0xefb [ 468.669983] [] ? xfs_rw_ilock+0x21/0x31 [ 468.669983] [] lock_acquire+0xd7/0x112 [ 468.669983] [] ? xfs_rw_ilock+0x21/0x31 [ 468.669983] [] mutex_lock_nested+0x63/0x5ab [ 468.669983] [] ? xfs_rw_ilock+0x21/0x31 [ 468.669983] [] ? xfs_rw_ilock+0x21/0x31 [ 468.669983] [] ? mark_held_locks+0x59/0x77 [ 468.669983] [] ? slab_free_hook+0x7a/0x9a [ 468.669983] [] ? kvm_clock_read+0x1e/0x20 [ 468.669983] [] xfs_rw_ilock+0x21/0x31 [ 468.669983] [] xfs_file_buffered_aio_write+0x59/0x1e8 [ 468.669983] [] ? trace_hardirqs_on_caller+0x164/0x19b [ 468.669983] [] ? trace_hardirqs_on+0xd/0xf [ 468.669983] [] ? pipe_lock+0x1c/0x1e [ 468.669983] [] xfs_file_write_iter+0x83/0x107 [ 468.669983] [] vfs_iter_write+0x4c/0x6b [ 468.669983] [] iter_file_splice_write+0x230/0x33a [ 468.669983] [] SyS_splice+0x409/0x55e [ 468.669983] [] ? __fd_install+0x9f/0xab [ 468.669983] [] ? trace_hardirqs_on_caller+0x164/0x19b [ 468.669983] [] system_call_fastpath+0x12/0x17 --=-=-=-- From kdhall@binghamton.edu Thu Apr 2 09:33:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 14A307F59 for ; Thu, 2 Apr 2015 09:33:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 93827AC007 for ; Thu, 2 Apr 2015 07:32:58 -0700 (PDT) X-ASG-Debug-ID: 1427985176-04cbb06cca3004a0001-NocioJ Received: from mail-qg0-f41.google.com (mail-qg0-f41.google.com [209.85.192.41]) by cuda.sgi.com with ESMTP id AJ1DdDFIJJ3tticJ (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 Apr 2015 07:32:56 -0700 (PDT) X-Barracuda-Envelope-From: kdhall@binghamton.edu X-Barracuda-Apparent-Source-IP: 209.85.192.41 Received: by qgdy78 with SMTP id y78so9131579qgd.0 for ; Thu, 02 Apr 2015 07:32:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=PSZkTkVilyUd6i6g7s8ncZ8anNPZdInRSNMySMM5v7U=; b=A017P4cTlWM7qxFfICbqJjFl+uEvD2DmQuX9bH+A46azBtBt5VxLwo3g3ooSoABntC zbtdte2axFEnGfKTEMUguLLW/suAhVQa3sWoxiKMH9yTlslY4ckpcm28gnZKdbkGMm6j L2fiayAIJzuk8N5B7RB/FpEdQoOGwzefsOfzmcPxfpgy+b+zTx6rjEb5ymfiwcJocGR8 bY9tDYVca2KKuM8swjZHajXWJxAVE2KYca7xQ+yMlWgEXYtBYv9IEa4GWKPBfE+P7h/e Q1mIZGWqGj1SePLGRP2dqcXEn6Udb4BpxdLVAuPLe5oIyRSXaegy1Cuu4reCO7uUx/FK Elwg== X-Gm-Message-State: ALoCoQnclh/tfbLs7xGkOimx4vbAGzhTkiiInkWq+lW8E8Ae8wiN31FbZmOOCwsWrnlfLtXdNLjM X-Received: by 10.141.28.14 with SMTP id f14mr23478942qhe.74.1427985176092; Thu, 02 Apr 2015 07:32:56 -0700 (PDT) Received: from [128.226.118.196] (omega.cs.binghamton.edu. [128.226.118.196]) by mx.google.com with ESMTPSA id z77sm3555835qkg.44.2015.04.02.07.32.55 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 02 Apr 2015 07:32:55 -0700 (PDT) Message-ID: <551D5316.8050201@binghamton.edu> Date: Thu, 02 Apr 2015 10:32:54 -0400 From: Dave Hall User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20121215 Icedove/3.0.11 MIME-Version: 1.0 To: Dave Chinner CC: xfs@oss.sgi.com Subject: Re: Slightly Urgent: XFS No Space Left On Device References: <551993CF.4060908@binghamton.edu> <20150330194510.GD28621@dastard> <551C4CB8.7@binghamton.edu> <20150402001235.GI28621@dastard> X-ASG-Orig-Subj: Re: Slightly Urgent: XFS No Space Left On Device In-Reply-To: <20150402001235.GI28621@dastard> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-qg0-f41.google.com[209.85.192.41] X-Barracuda-Start-Time: 1427985176 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17485 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Thanks for the help. Rookie error. I didn't set these mount options, but I see that this option is set for all of the other XFS volumes I have. I am wondering why XFS would default this way though. Seems like heuristically you could assume that a large volume on a 64-bit OS would need 64-bit inodes. At least perhaps put out a message from mkfs.xfs suggesting the use of inode64 on the mount command? Thanks. -Dave Dave Hall Binghamton University kdhall@binghamton.edu 607-760-2328 (Cell) 607-777-4641 (Office) On 04/01/2015 08:12 PM, Dave Chinner wrote: > On Wed, Apr 01, 2015 at 03:53:28PM -0400, Dave Hall wrote: > >> Please pardon the 'top-post', but here is the additional information >> requested: >> >> This is a Dell R720xd dual 8-core Xeon system with 128GB RAM. The >> RAID controller is Dell PERC H710 Mini with 12 2TB disks in RAID6. >> >> The OS is Debian 6 with kernel 3.2.0-0.bpo.4-amd64 #1 SMP Debian >> 3.2.65-1+deb7u2~bpo60+1 x86_64. >> > So defaults to inode32 allocation.... > > >> From /proc/mounts: >> >> /dev/sdb1 /data xfs >> rw,noexec,noatime,attr2,delaylog,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,usrquota,prjquota >> 0 0 >> > ... and inode64 is not in the mount options..... > > >> The output from xfs_info was previously included, but is repeated here: >> >> # xfs_info /data >> meta-data=/dev/sdb1 isize=256 agcount=19,agsize=268435440 blks >> > Inode allocation requires contiguous free space of 16k aligned to 8k > boundaries to allocate new inode chunks. Also, 1TB AGs, so with > inode32, inodes can only be allocated in AG 0. > > >> Here are the more extensive freesp outputs for each of the 19 AGs: >> >> # xfs_db -r /dev/sdb1 -c 'freesp -s -a0' >> from to extents blocks pct >> 1 1 747 747 19.68 >> 2 3 1045 2496 65.77 >> 4 7 138 552 14.55 >> total free extents 1930 >> total free blocks 3795 >> average free extent size 1.96632 >> > And that says you have no correctly aligned free 16k extents that > can be allocated in AG 0. i.e. no more inodes can be allocated, and > that's where the ENOSPC is coming from. > > Unmount, add the inode64 mount option, and you'll be able to > allocate inodes again as they will be allowed to be allocated in > any AG, not just AG 0. > > Cheers, > > Dave. > From neutrino8@gmail.com Thu Apr 2 09:37:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 4C60D7F5A for ; Thu, 2 Apr 2015 09:37:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D88ECAC003 for ; Thu, 2 Apr 2015 07:37:00 -0700 (PDT) X-ASG-Debug-ID: 1427985418-04bdf036223339f0001-NocioJ Received: from mail-ig0-f173.google.com (mail-ig0-f173.google.com [209.85.213.173]) by cuda.sgi.com with ESMTP id G6UcDGAdSjfYANgd (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 Apr 2015 07:36:59 -0700 (PDT) X-Barracuda-Envelope-From: neutrino8@gmail.com Received: by igbqf9 with SMTP id qf9so74627687igb.1 for ; Thu, 02 Apr 2015 07:36:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=fNgRH7MYDfSOftOAtk8K5UMAPbrDgmMzZeHcXReWDiA=; b=p2XnC3sJo3oSPr2/OcDeyeuOAnLJv4mkyB9K1SNBzvLj2/r8KuaGBsN5nCCcpW9tmT cu3y2Dj8CZGmrvHyKJjVzf8tQLonsQ4BEi5ohJspt7xJ5V7zVl7tXC3LKFZtxbVWwKDZ HIodsv2uG8ejzD0kweIpOfXpGPWEUJaZlir9d/UmDyT2X59eca/pJvgNFfUXJ+iGz+BM s8Fpermfbb+mxgZ+HAHffUcvpJecb10TwmP7D6Un+4ADyhb43oOwNGnGvJxBP0ytI/3U 6k9v3v0xVKWmceSuAEQLx+c9LsskBQ/+y+DNO1dwoxQ04dzuqXJigVz74KSdUEmBpOR6 HcdQ== MIME-Version: 1.0 X-Received: by 10.50.137.37 with SMTP id qf5mr8961619igb.1.1427985418549; Thu, 02 Apr 2015 07:36:58 -0700 (PDT) Received: by 10.50.208.67 with HTTP; Thu, 2 Apr 2015 07:36:58 -0700 (PDT) In-Reply-To: <551D5316.8050201@binghamton.edu> References: <551993CF.4060908@binghamton.edu> <20150330194510.GD28621@dastard> <551C4CB8.7@binghamton.edu> <20150402001235.GI28621@dastard> <551D5316.8050201@binghamton.edu> Date: Thu, 2 Apr 2015 16:36:58 +0200 Message-ID: Subject: Re: Slightly Urgent: XFS No Space Left On Device From: Grozdan X-ASG-Orig-Subj: Re: Slightly Urgent: XFS No Space Left On Device To: Dave Hall Cc: Dave Chinner , Xfs Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-ig0-f173.google.com[209.85.213.173] X-Barracuda-Start-Time: 1427985419 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17485 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, Apr 2, 2015 at 4:32 PM, Dave Hall wrote: > Thanks for the help. Rookie error. I didn't set these mount options, but I > see that this option is set for all of the other XFS volumes I have. > > I am wondering why XFS would default this way though. Seems like > heuristically you could assume that a large volume on a 64-bit OS would need > 64-bit inodes. At least perhaps put out a message from mkfs.xfs suggesting > the use of inode64 on the mount command? inode64 has been made default, even for 32-bit systems, by recent versions of xfsprogs so I'd suggest to upgrade your xfsprogs > > Thanks. > > -Dave > > Dave Hall > Binghamton University > kdhall@binghamton.edu > 607-760-2328 (Cell) > 607-777-4641 (Office) > > > On 04/01/2015 08:12 PM, Dave Chinner wrote: >> >> On Wed, Apr 01, 2015 at 03:53:28PM -0400, Dave Hall wrote: >> >>> >>> Please pardon the 'top-post', but here is the additional information >>> requested: >>> >>> This is a Dell R720xd dual 8-core Xeon system with 128GB RAM. The >>> RAID controller is Dell PERC H710 Mini with 12 2TB disks in RAID6. >>> >>> The OS is Debian 6 with kernel 3.2.0-0.bpo.4-amd64 #1 SMP Debian >>> 3.2.65-1+deb7u2~bpo60+1 x86_64. >>> >> >> So defaults to inode32 allocation.... >> >> >>> >>> From /proc/mounts: >>> >>> /dev/sdb1 /data xfs >>> >>> rw,noexec,noatime,attr2,delaylog,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,usrquota,prjquota >>> 0 0 >>> >> >> ... and inode64 is not in the mount options..... >> >> >>> >>> The output from xfs_info was previously included, but is repeated here: >>> >>> # xfs_info /data >>> meta-data=/dev/sdb1 isize=256 agcount=19,agsize=268435440 >>> blks >>> >> >> Inode allocation requires contiguous free space of 16k aligned to 8k >> boundaries to allocate new inode chunks. Also, 1TB AGs, so with >> inode32, inodes can only be allocated in AG 0. >> >> >>> >>> Here are the more extensive freesp outputs for each of the 19 AGs: >>> >>> # xfs_db -r /dev/sdb1 -c 'freesp -s -a0' >>> from to extents blocks pct >>> 1 1 747 747 19.68 >>> 2 3 1045 2496 65.77 >>> 4 7 138 552 14.55 >>> total free extents 1930 >>> total free blocks 3795 >>> average free extent size 1.96632 >>> >> >> And that says you have no correctly aligned free 16k extents that >> can be allocated in AG 0. i.e. no more inodes can be allocated, and >> that's where the ENOSPC is coming from. >> >> Unmount, add the inode64 mount option, and you'll be able to >> allocate inodes again as they will be allowed to be allocated in >> any AG, not just AG 0. >> >> Cheers, >> >> Dave. >> > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -- Yours truly From neutrino8@gmail.com Thu Apr 2 09:41:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 997F67F59 for ; Thu, 2 Apr 2015 09:41:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7D0708F8078 for ; Thu, 2 Apr 2015 07:41:40 -0700 (PDT) X-ASG-Debug-ID: 1427985699-04cb6c3fde2ae8d0001-NocioJ Received: from mail-ie0-f174.google.com (mail-ie0-f174.google.com [209.85.223.174]) by cuda.sgi.com with ESMTP id zT15Dvs1wkNby6Cx (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 Apr 2015 07:41:39 -0700 (PDT) X-Barracuda-Envelope-From: neutrino8@gmail.com Received: by ierf6 with SMTP id f6so70261075ier.2 for ; Thu, 02 Apr 2015 07:41:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=GD4uogV5nHPItdzcmz1MiLOoZNyXx0TMSAOxNRbHR0I=; b=Y+NtcBcb2scFlJYl9eOhBTnnQ9oASvshHvA3nE/k+z5nRiWl4RFxZ1aIAfR8hMvRsG M/QZqfXjoztlv0pO62FYPzVwBv2k5LNJ02cqZhjc2GPG/3KTkXruJVConMKy2qxk+G8h 7hSCeyrJtJ2Jkv+LnHGFs3Fu+Xi5k+sBmHmdY6v3ggYXVnr+lOtc3R31QuPYuPUwCcM4 RZQACqTrcqKGHxRf4kR78KOowxdej0B97j524nPxzpACQNUf7b8ABy9z8K6ziBh/9AGB m35t1YWfZnUX69afX6mQMTmNR8PlTZUg7uDmkI9mQc33PwNKv0j0tMyoTJTPIFqEoGUd Gm1w== MIME-Version: 1.0 X-Received: by 10.107.128.3 with SMTP id b3mr16928123iod.24.1427985698948; Thu, 02 Apr 2015 07:41:38 -0700 (PDT) Received: by 10.50.208.67 with HTTP; Thu, 2 Apr 2015 07:41:38 -0700 (PDT) In-Reply-To: References: <551993CF.4060908@binghamton.edu> <20150330194510.GD28621@dastard> <551C4CB8.7@binghamton.edu> <20150402001235.GI28621@dastard> <551D5316.8050201@binghamton.edu> Date: Thu, 2 Apr 2015 16:41:38 +0200 Message-ID: Subject: Re: Slightly Urgent: XFS No Space Left On Device From: Grozdan X-ASG-Orig-Subj: Re: Slightly Urgent: XFS No Space Left On Device To: Dave Hall Cc: Dave Chinner , Xfs Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-ie0-f174.google.com[209.85.223.174] X-Barracuda-Start-Time: 1427985699 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17484 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, Apr 2, 2015 at 4:36 PM, Grozdan wrote: > On Thu, Apr 2, 2015 at 4:32 PM, Dave Hall wrote: >> Thanks for the help. Rookie error. I didn't set these mount options, but I >> see that this option is set for all of the other XFS volumes I have. >> >> I am wondering why XFS would default this way though. Seems like >> heuristically you could assume that a large volume on a 64-bit OS would need >> 64-bit inodes. At least perhaps put out a message from mkfs.xfs suggesting >> the use of inode64 on the mount command? > > > inode64 has been made default, even for 32-bit systems, by recent > versions of xfsprogs so I'd suggest to upgrade your xfsprogs sorry, I was thinking of the crc flag. XFS uses by default inode64 from kernel versions 3.7 and up > >> >> Thanks. >> >> -Dave >> >> Dave Hall >> Binghamton University >> kdhall@binghamton.edu >> 607-760-2328 (Cell) >> 607-777-4641 (Office) >> >> >> On 04/01/2015 08:12 PM, Dave Chinner wrote: >>> >>> On Wed, Apr 01, 2015 at 03:53:28PM -0400, Dave Hall wrote: >>> >>>> >>>> Please pardon the 'top-post', but here is the additional information >>>> requested: >>>> >>>> This is a Dell R720xd dual 8-core Xeon system with 128GB RAM. The >>>> RAID controller is Dell PERC H710 Mini with 12 2TB disks in RAID6. >>>> >>>> The OS is Debian 6 with kernel 3.2.0-0.bpo.4-amd64 #1 SMP Debian >>>> 3.2.65-1+deb7u2~bpo60+1 x86_64. >>>> >>> >>> So defaults to inode32 allocation.... >>> >>> >>>> >>>> From /proc/mounts: >>>> >>>> /dev/sdb1 /data xfs >>>> >>>> rw,noexec,noatime,attr2,delaylog,allocsize=64k,logbsize=64k,sunit=128,swidth=1280,usrquota,prjquota >>>> 0 0 >>>> >>> >>> ... and inode64 is not in the mount options..... >>> >>> >>>> >>>> The output from xfs_info was previously included, but is repeated here: >>>> >>>> # xfs_info /data >>>> meta-data=/dev/sdb1 isize=256 agcount=19,agsize=268435440 >>>> blks >>>> >>> >>> Inode allocation requires contiguous free space of 16k aligned to 8k >>> boundaries to allocate new inode chunks. Also, 1TB AGs, so with >>> inode32, inodes can only be allocated in AG 0. >>> >>> >>>> >>>> Here are the more extensive freesp outputs for each of the 19 AGs: >>>> >>>> # xfs_db -r /dev/sdb1 -c 'freesp -s -a0' >>>> from to extents blocks pct >>>> 1 1 747 747 19.68 >>>> 2 3 1045 2496 65.77 >>>> 4 7 138 552 14.55 >>>> total free extents 1930 >>>> total free blocks 3795 >>>> average free extent size 1.96632 >>>> >>> >>> And that says you have no correctly aligned free 16k extents that >>> can be allocated in AG 0. i.e. no more inodes can be allocated, and >>> that's where the ENOSPC is coming from. >>> >>> Unmount, add the inode64 mount option, and you'll be able to >>> allocate inodes again as they will be allowed to be allocated in >>> any AG, not just AG 0. >>> >>> Cheers, >>> >>> Dave. >>> >> >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > > > > -- > Yours truly -- Yours truly From david@fromorbit.com Thu Apr 2 17:36:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2FF2C7F59 for ; Thu, 2 Apr 2015 17:36:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1DF548F8054 for ; Thu, 2 Apr 2015 15:36:28 -0700 (PDT) X-ASG-Debug-ID: 1428014182-04cb6c11dd12bb0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id Oyiw7mDBMqlXDFiV for ; Thu, 02 Apr 2015 15:36:23 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DEBgC2wx1V/8+HLHlcDoJ6gS6yNQMBAQEGmR8EAgKBS00BAQEBAQF+hB4BAQEDATocIwULCAMOCgklDwUlAyETiCcHzVUBAQEBBgIBHxiFd4UahHkHgxeBFgWaaZRJIoMyUSoxgkMBAQE Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Apr 2015 09:06:22 +1030 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1Ydnia-0001HZ-Ma; Fri, 03 Apr 2015 09:36:08 +1100 Date: Fri, 3 Apr 2015 09:36:08 +1100 From: Dave Chinner To: Dave Hall Cc: xfs@oss.sgi.com Subject: Re: Slightly Urgent: XFS No Space Left On Device Message-ID: <20150402223608.GF8465@dastard> X-ASG-Orig-Subj: Re: Slightly Urgent: XFS No Space Left On Device References: <551993CF.4060908@binghamton.edu> <20150330194510.GD28621@dastard> <551C4CB8.7@binghamton.edu> <20150402001235.GI28621@dastard> <551D5316.8050201@binghamton.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <551D5316.8050201@binghamton.edu> 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: 1428014182 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17501 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Apr 02, 2015 at 10:32:54AM -0400, Dave Hall wrote: > Thanks for the help. Rookie error. I didn't set these mount > options, but I see that this option is set for all of the other XFS > volumes I have. > > I am wondering why XFS would default this way though. Seems like > heuristically you could assume that a large volume on a 64-bit OS > would need 64-bit inodes. The historical argument against inode64 on 64 bit machines was NFS export and 32 bit clients, which could then break if we used 64 bit inodes. The Linux NFS client handles this just fine on 32bit machines (has for a few years), so there's no reason for us to care very much about this anymore.... > At least perhaps put out a message from > mkfs.xfs suggesting the use of inode64 on the mount command? inode64 is now the default for upstream kernels (has been for a couple of years), but older distros are not going to get those kernel updates, or anything we might have put in xfsprogs... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Apr 2 17:43:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 578A37F59 for ; Thu, 2 Apr 2015 17:43:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 47449304032 for ; Thu, 2 Apr 2015 15:43:27 -0700 (PDT) X-ASG-Debug-ID: 1428014604-04cbb043b916b60001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id fWgg2nWfT0kOkqFx for ; Thu, 02 Apr 2015 15:43:24 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DEBgDjxB1V/8+HLHlcgwiBLrI1AwEBAQaZHwQCAoFLTQEBAQEBAX6EHgEBAQMBOhwjBQsIAw4KCSUPBSUDIROIJwfNSAEBAQEGAgEfGIV3hRqEeQeELQWaaYEegzSIeoZ9IoIAAxyBZCoxgkMBAQE Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Apr 2015 09:13:23 +1030 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YdnpO-0001In-VQ; Fri, 03 Apr 2015 09:43:11 +1100 Date: Fri, 3 Apr 2015 09:43:10 +1100 From: Dave Chinner To: Dmitry Monakhov Cc: xfs@oss.sgi.com Subject: Re: FYI: xfstests generic/019 result panic. 4.0.0-rc5 Message-ID: <20150402224310.GG8465@dastard> X-ASG-Orig-Subj: Re: FYI: xfstests generic/019 result panic. 4.0.0-rc5 References: <87r3s2g3md.fsf@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87r3s2g3md.fsf@openvz.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: 1428014604 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17502 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words On Thu, Apr 02, 2015 at 02:40:26PM +0300, Dmitry Monakhov wrote: > > Hi I've played with recent kernel 4.0.0-rc5 (AlViro's tree vfs.git/for-next) > > And have found two issues (I do not know whenever it was fixed in > xfs.git already, so I just want to let you know) > First one is Panic caused by xfstest generic/019 (disk failure > simulation test) see attachment ..... > > generic/019 [13:30:32][ 17.619593] XFS (vdc): xlog_verify_grant_tail: space > BBTOB(tail_blocks) > [ 41.914283] XFS (vdc): metadata I/O error: block 0x503d1f ("xlog_iodone") error 5 numblks 64 So the test has shut down the filesystem via device pull... > [ 41.917326] XFS (vdc): xfs_bmap_check_leaf_extents: BAD after btree leaves for 6623 extents in the middle of a bmbt update operation, which aborted in an inconsistent state in memory due to shutdown... > [ 41.917376] XFS (vdc): Log I/O Error Detected. Shutting down filesystem > [ 41.917378] XFS (vdc): Please umount the filesystem and rectify the problem(s) > [ 41.918098] fsstress (3180) used greatest stack depth: 11392 bytes left > [ 41.918876] XFS (vdc): metadata I/O error: block 0x503d5f ("xlog_iodone") error 5 numblks 64 > [ 41.918966] XFS (vdc): xfs_log_force: error -5 returned. > [ 41.930237] Kernel panic - not syncing: xfs_bmap_check_leaf_extents: CORRUPTED BTREE OR SOMETHING And debug code detected that inconsistent in-memory state, and threw out the panic. Production machines won't run this code (it's CONFIG_XFS_DEBUG=y specific) so they'll just shut down normally. > Second one is lockdep's complain from splice, It looks like a false-positive one, but still. No, that's a real one. splice has inverted locks and we've been able to deadlock it since, well, forever. The recent rework that Al Viro did removed the old lock inversion problem, and created a new one w.r.t. to the pipe_lock and filesystem locks. I've reported this to him previously, but I've never got any response about it... Thanks for the reports, though, Dmitry. Cheers, Dave. -- Dave Chinner david@fromorbit.com From lucy@demaxlt.com Fri Apr 3 04:19:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,MIME_QP_LONG_LINE, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2925C7F5D for ; Fri, 3 Apr 2015 04:19:00 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id EE751304032 for ; Fri, 3 Apr 2015 02:18:56 -0700 (PDT) X-ASG-Debug-ID: 1428052732-04bdf04f8133f50001-NocioJ Received: from smtp2192-65.mail.aliyun.com (smtp2192-65.mail.aliyun.com [121.197.192.65]) by cuda.sgi.com with ESMTP id KC8gQa0I0nOrtxdv for ; Fri, 03 Apr 2015 02:18:53 -0700 (PDT) X-Barracuda-Envelope-From: lucy@demaxlt.com X-Barracuda-Apparent-Source-IP: 121.197.192.65 Received: from WS-web by r41f05012.xy2.aliyun.com at Fri, 03 Apr 2015 17:17:41 +0800 Date: Fri, 03 Apr 2015 17:17:31 +0800 From: "LUCY" To: "xfs" Reply-To: "LUCY" Message-ID: Subject: =?UTF-8?B?cHZjIHBsYW5rIGZsb29yIGZyb20gREJETUM=?= X-Priority: 3 X-ASG-Orig-Subj: =?UTF-8?B?cHZjIHBsYW5rIGZsb29yIGZyb20gREJETUM=?= X-Mailer: Alimail-Mailagent MIME-Version: 1.0 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.3739916|-1;FP=18102776694863229021|5|1|85|0|-1|-1|-1;HT=r46d02008;MF=lucy@demaxlt.com;PH=DW;RN=35;RT=35;SR=0; X-Mailer: Alimail-Mailagent revision 2688041 x-aliyun-mail-creator: W4_2689231_V2lTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgMTAuMDsgV2luZG93cyBOVCA2LjE7IFdPVzY0OyBUcmlkZW50LzYuMCk=Ds Content-Type: multipart/alternative; boundary="----=ALIBOUNDARY_12464_56516940_551e5ab5_3936" X-Barracuda-Connect: smtp2192-65.mail.aliyun.com[121.197.192.65] X-Barracuda-Start-Time: 1428052733 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17514 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars ------=ALIBOUNDARY_12464_56516940_551e5ab5_3936 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable dear Manager:=0AHere is Lucy from Dezhou Demax Building Material Co,ltd. As on= e of the largest manufacturer of vinyl plank flooring in North China,our compa= ny has exported to more than 60 countries and have good reputation both in dom= estic and abroad.=0AAccording to the different installation methods,there are = 4styles of vinyl plank flooring for your choice: Unilin click,dry back,self-st= ick and loose lay.=0Asize:6*36,6*48, 7*48, 9*36,9*48,12*12,18*18,24*24 inches = etc=0Athickness:1.5mm to 5.00mm=0Awearlayer: 0.07mm to 0.7mm uv coating.=0AIf = you are interested in our products,plese feel free to contact me.We will give = you the best service,quality and competitive price.=0A=C2=A0=0AAny reply from = you will be highly appreciated!=0Abest regards=0ALucy=0A=C2=A0=0A=0A ------=ALIBOUNDARY_12464_56516940_551e5ab5_3936 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

dear Manager:

=

Here is Lucy from Dezhou Demax Building Material Co,ltd. As = one of the largest manufacturer of vinyl plank flooring in North China,our com= pany has exported to more than 60 countries and have good reputation both in d= omestic and abroad.


According to the different installati= on methods,there are 4styles of vinyl plank flooring for your choice: Unilin c= lick,dry back,self-stick and loose lay.


size:6*36,6*48, 7= *48, 9*36,9*48,12*12,18*18,24*24 inches etc


thickness:1.5= mm to 5.00mm


wearlayer: 0.07mm to 0.7mm uv coating.


If you are interested in our products,plese feel free to conta= ct me.We will give you the best service,quality and competitive price.


 


Any reply from you will be highly ap= preciated!


best regards


Lucy


 



------=ALIBOUNDARY_12464_56516940_551e5ab5_3936-- From usmyusuf5@gmail.com Fri Apr 3 12:22:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,HTML_FONT_FACE_BAD,HTML_MESSAGE,LOTS_OF_MONEY,MONEY_FORM_SHORT, T_DKIM_INVALID,T_FILL_THIS_FORM_SHORT autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 18B097F3F for ; Fri, 3 Apr 2015 12:22:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 072BD304048 for ; Fri, 3 Apr 2015 10:22:32 -0700 (PDT) X-ASG-Debug-ID: 1428081751-04cbb043b8472a0001-NocioJ Received: from mail-ie0-f193.google.com (mail-ie0-f193.google.com [209.85.223.193]) by cuda.sgi.com with ESMTP id To634hD0GcxSMoJk (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 03 Apr 2015 10:22:31 -0700 (PDT) X-Barracuda-Envelope-From: usmyusuf5@gmail.com Received: by iery20 with SMTP id y20so5132910ier.2 for ; Fri, 03 Apr 2015 10:22:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=LrzMDBLYkarYG+noK58vP13WUEgg7vznbrvq/q3M30I=; b=r/27jld0aB+akTxId7dEJDAS1AndA4UOzi3q0p7fZSxGS8nl9PZjGltNRcaGNO4BHm qvEJ9S4LZ41DhTbEEJU5euYFW7aCYlC8UXbk0bYJkY1jONds6xH40bAUWnMFnbtaTcL+ R8Br0Jv473WO1hdDmH6SMmLbAWdpzWjnAFTLxMTuWPbXa/Tti5yCdHTWIKkMr8DUr1HT TgbfPR7tcCSxP4ilgak9BsF4RfZXHM5anRHKQSc0R5nhUK1hO1qixnTQskwAWHI2qpmp 8/ZBxZ/dffiH/KlETjfecS8nZd1BClLtKQ3hlqUt9OBzvzhOo7aUVa1tQ06iLKxa+w4j rtjA== MIME-Version: 1.0 X-Received: by 10.107.158.143 with SMTP id h137mr5541816ioe.12.1428081751346; Fri, 03 Apr 2015 10:22:31 -0700 (PDT) Received: by 10.64.52.100 with HTTP; Fri, 3 Apr 2015 10:22:31 -0700 (PDT) Date: Fri, 3 Apr 2015 10:22:31 -0700 Message-ID: Subject: URGENT, From: Usman yusuf X-ASG-Orig-Subj: URGENT, To: undisclosed-recipients:; Content-Type: multipart/alternative; boundary=001a114039167fd50e0512d53173 X-Barracuda-Connect: mail-ie0-f193.google.com[209.85.223.193] X-Barracuda-Start-Time: 1428081751 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.71 X-Barracuda-Spam-Status: No, SCORE=1.71 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_FONT_FACE_BAD, HTML_MESSAGE, TVD_PH_SUBJ_URGENT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17527 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.10 TVD_PH_SUBJ_URGENT TVD_PH_SUBJ_URGENT -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.61 HTML_FONT_FACE_BAD BODY: HTML font face is not a word --001a114039167fd50e0512d53173 Content-Type: text/plain; charset=UTF-8 Sir, I wish to inform you that your contract payment has been approved under category (C) you shall receive your payment under Federal Ministry of health. US$4. 2m shall be paid to you as part payment; you are advised to confirm your contact address/telephone number for an immediate payment. Thank you, Usman Yusuf. DEBT MANAGEMENT OFFICE, --001a114039167fd50e0512d53173 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Sir,

I wish to inform you that your contract payment has been approved unde= r category (C) you shall receive your payment under Federal Ministry of hea= lth.
=C2=A0
US$4. 2m shall be paid to you as part pa= yment; you are advised to confirm your contact address/telephone number for= an immediate payment.

Thank you,
Usman Yusuf.
DE= BT MANAGEMENT OFFICE,
--001a114039167fd50e0512d53173-- From darrick.wong@oracle.com Fri Apr 3 13:28:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7E9037F3F for ; Fri, 3 Apr 2015 13:28:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6C2DB304043 for ; Fri, 3 Apr 2015 11:28:41 -0700 (PDT) X-ASG-Debug-ID: 1428085717-04cbb043b649940001-NocioJ Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by cuda.sgi.com with ESMTP id jhYaKdCw8GJD0RwE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Apr 2015 11:28:37 -0700 (PDT) X-Barracuda-Envelope-From: darrick.wong@oracle.com X-Barracuda-Apparent-Source-IP: 156.151.31.81 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t33ISVbP016197 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 3 Apr 2015 18:28:32 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id t33ISV8S002869 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 3 Apr 2015 18:28:31 GMT Received: from abhmp0019.oracle.com (abhmp0019.oracle.com [141.146.116.25]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id t33ISUQ0030611; Fri, 3 Apr 2015 18:28:31 GMT Received: from localhost (/24.21.154.84) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 03 Apr 2015 11:28:29 -0700 Date: Fri, 3 Apr 2015 11:28:25 -0700 From: "Darrick J. Wong" To: Ric Wheeler Cc: Linux FS Devel , "linux-scsi@vger.kernel.org" , device-mapper development , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-btrfs@vger.kernel.org Subject: LPC2015: File and Storage Systems uconf Message-ID: <20150403182825.GA11030@birch.djwong.org> X-ASG-Orig-Subj: LPC2015: File and Storage Systems uconf 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: aserv0021.oracle.com [141.146.126.233] X-Barracuda-Connect: userp1040.oracle.com[156.151.31.81] X-Barracuda-Start-Time: 1428085717 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17528 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Hi everyone, Linux Plumbers is coming up in just four months! I would like for there to be a file & storage miniconf at this year's LPC, so I've started assembling a plan for what we might discuss. As a starting point, I've filled the planning page with the topics that didn't achieve any sort of resolution at LSF/MM: http://wiki.linuxplumbersconf.org/2015:file_and_storage_systems There are undoubtedly things that I missed in my initial list, and it would be very helpful to figure out who's going. If you'd like to visit Seattle in mid-August (I promise it probably won't be raining!) and/or have a topic that you'd like to talk about that I missed, I'd appreciate it if you wrote it into the wiki page. Thanks, --Darrick From viro@ftp.linux.org.uk Sun Apr 5 11:29:21 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8D6C07F37 for ; Sun, 5 Apr 2015 11:29:21 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 690DE8F8033 for ; Sun, 5 Apr 2015 09:29:18 -0700 (PDT) X-ASG-Debug-ID: 1428251354-04bdf04f7f122150001-NocioJ Received: from ZenIV.linux.org.uk (zeniv.linux.org.uk [195.92.253.2]) by cuda.sgi.com with ESMTP id 8U9hiykHvxPpYRS0 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Sun, 05 Apr 2015 09:29:15 -0700 (PDT) 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 1YenOx-0002JJ-6f; Sun, 05 Apr 2015 16:27:59 +0000 Date: Sun, 5 Apr 2015 17:27:59 +0100 From: Al Viro To: Omar Sandoval Cc: linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-cifs@vger.kernel.org, osd-dev@open-osd.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, fuse-devel@lists.sourceforge.net, cluster-devel@redhat.com, jfs-discussion@lists.sourceforge.net, HPDD-discuss@ml01.01.org, linux-nfs@vger.kernel.org, linux-nilfs@vger.kernel.org, ocfs2-devel@oss.oracle.com, reiserfs-devel@vger.kernel.org, v9fs-developer@lists.sourceforge.net, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, Chris Mason , Josef Bacik , David Sterba , Yan Zheng , Sage Weil , Steve French , Boaz Harrosh , Benny Halevy , Jan Kara , Theodore Ts'o , Andreas Dilger , Jaegeuk Kim , Changman Lee , Miklos Szeredi , Steven Whitehouse , Dave Kleikamp , Oleg Drokin , Trond Myklebust , Anna Schumaker , Ryusuke Konishi , Mark Fasheh , Joel Becker , Eric Van Hensbergen , Ron Minnich , Latchesar Ionkov , Dave Chinner Subject: Re: [RFC PATCH 0/5] Remove rw parameter from direct_IO() Message-ID: <20150405162758.GI889@ZenIV.linux.org.uk> X-ASG-Orig-Subj: Re: [RFC PATCH 0/5] Remove rw parameter from direct_IO() 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) Sender: Al Viro X-Barracuda-Connect: zeniv.linux.org.uk[195.92.253.2] X-Barracuda-Start-Time: 1428251354 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17582 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Mar 16, 2015 at 04:33:48AM -0700, Omar Sandoval wrote: > Hi, > > Al, here's some cleanup that you mentioned back in December that I got > around to (https://lkml.org/lkml/2014/12/15/28). Applied. See #for-next From danny@zadarastorage.com Mon Apr 6 02:03:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 259E97F37 for ; Mon, 6 Apr 2015 02:03:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 057AB304039 for ; Mon, 6 Apr 2015 00:03:10 -0700 (PDT) X-ASG-Debug-ID: 1428303779-04cbb043b8137e50001-NocioJ Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by cuda.sgi.com with ESMTP id jtFF8vIoLfQSl0tz (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Mon, 06 Apr 2015 00:03:00 -0700 (PDT) X-Barracuda-Envelope-From: danny@zadarastorage.com X-Barracuda-Apparent-Source-IP: 209.85.212.169 Received: by wizk4 with SMTP id k4so22716868wiz.1 for ; Mon, 06 Apr 2015 00:02:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=obTuewBDB1FtV8eu0WiOEYb82pDCRjd7J7uVHmxcsBA=; b=PR/sIwk3jSAi6ZQ6kzUxuZkYjLVMSzH3WirI46eP7+hm1ZtsKU6bOfWBNWnlEaivLy QvsPyg1NylIiWzJK0TfZYQRNUm2pF1/yxG6VAEnaPYeMzM+wzq5JB8DxEESIU9osvlft OaTD3BcM+ZqLmMA9QQBB4HFDUJQUk+1xr6WoT9LPAHdUc8QwYgcj+xij85cEzoblPX3N p70KF08tA38Wu0XEpYPVNPhIhBzI7rBnB0q1/pOq+KPBATilX1gBI1DwG2mLDsdhT3ca yiVx1o6ZznHIcS4dTplsS9jrt/JMHxIkNQXoIAmiNGjvqlQMNe95w5/PXbJ0qD9MzjBs Y7FQ== X-Gm-Message-State: ALoCoQmXgrdQmGdh91iKYwvtek69SEZpRS9VjwZFJbWkfxxlyHq9f4XJHVRqF07XKuMpS81qOZ/S MIME-Version: 1.0 X-Received: by 10.194.61.12 with SMTP id l12mr28203361wjr.139.1428303779592; Mon, 06 Apr 2015 00:02:59 -0700 (PDT) Received: by 10.28.60.68 with HTTP; Mon, 6 Apr 2015 00:02:59 -0700 (PDT) In-Reply-To: <551C26FC.10803@sandeen.net> References: <551C26FC.10803@sandeen.net> Date: Mon, 6 Apr 2015 10:02:59 +0300 Message-ID: Subject: Re: xfs corruption issue From: Danny Shavit X-ASG-Orig-Subj: Re: xfs corruption issue To: Eric Sandeen Cc: xfs@oss.sgi.com, Dave Chinner , Lev Vainblat , Alex Lyakas Content-Type: multipart/alternative; boundary=047d7b86df386a105a051308e3a7 X-Barracuda-Connect: mail-wi0-f169.google.com[209.85.212.169] X-Barracuda-Start-Time: 1428303780 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.00 X-Barracuda-Spam-Status: No, SCORE=1.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_TG232, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17596 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC0_TG232 BODY: Custom Rule TG232 0.00 HTML_MESSAGE BODY: HTML included in message --047d7b86df386a105a051308e3a7 Content-Type: text/plain; charset=UTF-8 Thanks guys. So far we did not figure out the bit fllip. Will update if there is interesting information. Best regards, Danny On Wed, Apr 1, 2015 at 8:12 PM, Eric Sandeen wrote: > On 4/1/15 10:09 AM, Danny Shavit wrote: > > Hello Dave, > > My name is Danny Shavit and I am with Zadara storage. > > We will appreciate your feedback reagrding an xfs_corruption and > xfs_reapir issue. > > > > We found a corrupted xfs volume in one of our systems. It is around 1 TB > size and about 12 M files. > > We run xfs_repair on the volume which succeeded after 42 minutes. > > We noticed that memory consumption raised to about 7.5 GB. > > Since some customers are using only 4GB (and sometimes even 2 GB) we > tried running "xfs_repair -m 3200" on a 4GB RAM machine. > > However, this time an OOM event happened during handling of AG 26 during > step 3. > > The log of xfs_repair is enclosed below. > > We will appreciate your feedback on the amount of memory needed for > xfs_repair in general and when using "-m" option specifically. > > The xfs metadata dump (prior to xfs_repair) can be found here: > > > https://zadarastorage-public.s3.amazonaws.com/xfs/xfsdump-prod-ebs_2015-03-30_23-00-38.tgz > > It is a 1.2 GB file (and 5.7 GB uncompressed). > > > > We will appreciate your feedback on the corruption pattern as well. > > -- > > Thank you, > > Danny Shavit > > Zadarastorage > > > > ---------- xfs_repair log ---------------- > > Just a note ... > > > bad . entry in directory inode 5691013154, was 5691013170: correcting > > 101010011001101011111100000100100 > 101010011001101011111100000110100 > ^ bit flip > > > bad . entry in directory inode 5691013156, was 5691013172: correcting > > 101010011001101011111100000100100 > 101010011001101011111100000110100 > ^ bit flip > > etc ... > > > bad . entry in directory inode 5691013157, was 5691013173: correcting > > bad . entry in directory inode 5691013163, was 5691013179: correcting > > -- Regards, Danny --047d7b86df386a105a051308e3a7 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Thanks guys.
So far we did no= t figure out the bit fllip.
Will update if there is interesting in= formation.

Best regards,
Danny

On Wed, Apr 1, 2015 at 8:12 PM= , Eric Sandeen <sandeen@sandeen.net> wrote:
On 4/1/15 10:09 AM, Danny Shavit wrote= :
> Hello Dave,
> My name is Danny Shavit and I am with Zadara storage.
> We will appreciate your feedback reagrding an xfs_corruption and xfs_r= eapir issue.
>
> We found a corrupted xfs volume in one of our systems. It is around 1 = TB size and about 12 M files.
> We run xfs_repair on the volume which succeeded after 42 minutes.
> We noticed that memory consumption raised to about 7.5 GB.
> Since some customers are using only 4GB (and sometimes even 2 GB) we t= ried running "xfs_repair -m 3200" on a 4GB RAM machine.
> However, this time an OOM event happened during handling of AG 26 duri= ng step 3.
> The log of xfs_repair is enclosed below.
> We will appreciate your feedback on the amount of memory needed for xf= s_repair in general and when using "-m" option specifically.
> The xfs metadata dump (prior to xfs_repair) can be found here:
> https://zadarastorage-pu= blic.s3.amazonaws.com/xfs/xfsdump-prod-ebs_2015-03-30_23-00-38.tgz
> It is a 1.2 GB file (and 5.7 GB uncompressed).
>
> We will appreciate your feedback on the corruption pattern as well. > --
> Thank you,
> Danny Shavit
> Zadarastorage
>
> ---------- xfs_repair log=C2=A0 ----------------

Just a note ...

> bad . entry in directory inode 5691013154, was 5691013170: correcting<= br>
101010011001101011111100000100100
101010011001101011111100000110100
=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 ^ bit flip

> bad . entry in directory inode 5691013156, was 5691013172: correcting<= br>
101010011001101011111100000100100
101010011001101011111100000110100
=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 ^ bit flip

etc ...

> bad . entry in directory inode 5691013157, was 5691013173: correcting<= br> > bad . entry in directory inode 5691013163, was 5691013179: correcting<= br>



--
Regards,
Danny
--047d7b86df386a105a051308e3a7-- From debbugs@buxtehude.debian.org Mon Apr 6 08:33:19 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0FE4F29DFB for ; Mon, 6 Apr 2015 08:33:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id F39178F8037 for ; Mon, 6 Apr 2015 06:33:15 -0700 (PDT) X-ASG-Debug-ID: 1428327189-04cb6c11dd166bc0001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id xASghbjVCXghk3SS (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 06 Apr 2015 06:33:10 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1Yf79H-0006wI-1X; Mon, 06 Apr 2015 13:33:07 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#782012: xfs_admin: Changing UUID destroys Filesystem Reply-To: "F. Stoyan" , 782012@bugs.debian.org X-ASG-Orig-Subj: Bug#782012: xfs_admin: Changing UUID destroys Filesystem Resent-From: "F. Stoyan" Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Mon, 06 Apr 2015 13:33:02 +0000 Resent-Message-ID: X-Debian-PR-Message: report 782012 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: X-Debian-PR-Source: xfsprogs Received: via spool by submit@bugs.debian.org id=B.142832695625307 (code B); Mon, 06 Apr 2015 13:33:02 +0000 Received: (at submit) by bugs.debian.org; 6 Apr 2015 13:29:16 +0000 Received: from swapon.de ([81.169.139.143]) by buxtehude.debian.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1Yf75Y-0006Zp-30 for submit@bugs.debian.org; Mon, 06 Apr 2015 13:29:16 +0000 Received: from mail.lab.swapon.de (mail.lab.swapon.de [IPv6:2001:6f8:12ec:10::25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mail.lab.swapon.de", Issuer "Waitstate CA" (verified OK)) by swapon.de (Postfix) with ESMTPS id 32914A19A for ; Mon, 6 Apr 2015 15:23:44 +0200 (CEST) Received: from phoenix.lab.swapon.de (phoenix.lab.swapon.de [192.168.19.11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "phoenix.lab.swapon.de", Issuer "Waitstate CA" (verified OK)) by mail.lab.swapon.de (Postfix) with ESMTPS id 97E953320F8; Mon, 6 Apr 2015 15:23:43 +0200 (CEST) Received: by phoenix.lab.swapon.de (Postfix, from userid 1000) id 10A88100B3CF; Mon, 6 Apr 2015 15:23:42 +0200 (CEST) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: "F. Stoyan" To: Debian Bug Tracking System Message-ID: <20150406132342.2635.15072.reportbug@phoenix.lab.swapon.de> X-Mailer: reportbug 6.6.3 Date: Mon, 06 Apr 2015 15:23:42 +0200 X-Greylist: delayed 328 seconds by postgrey-1.34 at buxtehude; Mon, 06 Apr 2015 13:29:15 UTC Delivered-To: submit@bugs.debian.org X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1428327190 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17602 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Package: xfsprogs Version: 3.2.1 Severity: normal Dear Maintainer, after changing the UUID of an existing not mounted XFS-V5 Filesystem it can't be mounted anymore. xfs_repair fix this, but the remaining filsystem is empty. Here is what happend in detail: root@vger:~# xfs_admin -u /dev/mapper/rvg-sav UUID = a2320a38-0c83-478e-bc31-4bc3fb253fdd root@vger:~# xfs_admin -U a2320a38-0c83-478e-bc31-4bc3fb253fde /dev/mapper/rvg-sav Clearing log and setting UUID writing all SBs new UUID = a2320a38-0c83-478e-bc31-4bc3fb253fde root@vger:~# mount /dev/mapper/rvg-sav /tmp/sav mount: mount /dev/mapper/rvg-sav on /tmp/sav failed: Structure needs cleaning [ 696.826336] XFS (dm-5): Mounting V5 Filesystem [ 696.866945] XFS (dm-5): xfs_iread: validation failed for inode 96 failed [ 696.867000] ffff8800b9981000: 49 4e 41 ed 03 01 00 00 00 00 00 00 00 00 00 00 INA............. [ 696.867053] ffff8800b9981010: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................ [ 696.867105] ffff8800b9981020: 55 22 7a 21 2c 67 43 83 55 22 79 cf 08 76 b6 6a U"z!,gC.U"y..v.j [ 696.867157] ffff8800b9981030: 55 22 79 cf 08 76 b6 6a 00 00 00 00 00 00 00 35 U"y..v.j.......5 [ 696.867242] XFS (dm-5): Internal error xfs_iread at line 392 of file /build/linux-SAvLSw/linux-3.16.7-ckt7/fs/xfs/xfs_inode_buf.c. Caller xfs_iget+0x24b/0x690 [xfs] [ 696.867322] CPU: 1 PID: 1761 Comm: mount Not tainted 3.16.0-4-amd64 #1 Debian 3.16.7-ckt7-1 [ 696.867324] Hardware name: LENOVO 7666A26/7666A26, BIOS 7NETC0WW (2.20 ) 03/12/2009 [ 696.867326] 0000000000000001 ffffffff81509e7c ffff8801365d6000 ffffffffa023b5cb [ 696.867330] 00000188b87b4a40 ffffffffa0240f6b ffff8800ba194400 ffff8801365d6000 [ 696.867333] 0000000000000075 0000000000000000 ffffffffa0286aea ffffffffa0240f6b [ 696.867337] Call Trace: [ 696.867345] [] ? dump_stack+0x41/0x51 [ 696.867358] [] ? xfs_corruption_error+0x5b/0x80 [xfs] [ 696.867372] [] ? xfs_iget+0x24b/0x690 [xfs] [ 696.867389] [] ? xfs_iread+0xea/0x400 [xfs] [ 696.867402] [] ? xfs_iget+0x24b/0x690 [xfs] [ 696.867415] [] ? xfs_iget+0x24b/0x690 [xfs] [ 696.867429] [] ? xfs_parseargs+0xb80/0xb80 [xfs] [ 696.867444] [] ? xfs_mountfs+0x3e7/0x700 [xfs] [ 696.867458] [] ? xfs_fs_fill_super+0x293/0x310 [xfs] [ 696.867463] [] ? mount_bdev+0x1a6/0x1e0 [ 696.867467] [] ? mount_fs+0x34/0x1a0 [ 696.867472] [] ? vfs_kern_mount+0x62/0x110 [ 696.867476] [] ? do_mount+0x23a/0xaf0 [ 696.867480] [] ? memdup_user+0x3d/0x70 [ 696.867484] [] ? SyS_mount+0x81/0xc0 [ 696.867488] [] ? system_call_fast_compare_end+0x10/0x15 [ 696.867490] XFS (dm-5): Corruption detected. Unmount and run xfs_repair [ 696.867529] XFS (dm-5): failed to read root inode root@vger:~# xfs_repair /dev/mapper/rvg-sav Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... Metadata corruption detected at block 0x800008/0x1000 Metadata corruption detected at block 0x8/0x1000 Metadata corruption detected at block 0x1800008/0x1000 Metadata corruption detected at block 0x800010/0x1000 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 1 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 1 reset bad agf for ag 1 reset bad agi for ag 1 Metadata corruption detected at block 0x1000008/0x1000 Metadata corruption detected at block 0x1800010/0x1000 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 3 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 3 reset bad agf for ag 3 reset bad agi for ag 3 Metadata corruption detected at block 0x10/0x1000 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 0 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 0 reset bad agf for ag 0 reset bad agi for ag 0 Metadata corruption detected at block 0x800018/0x1000 Metadata corruption detected at block 0x1000010/0x1000 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 2 bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 2 reset bad agf for ag 2 reset bad agi for ag 2 Metadata corruption detected at block 0x1800018/0x1000 Metadata corruption detected at block 0x800020/0x1000 btree block 1/4 is suspect, error 117 Metadata corruption detected at block 0x1000018/0x1000 Metadata corruption detected at block 0x18/0x1000 Metadata corruption detected at block 0x1800020/0x1000 btree block 3/4 is suspect, error 117 Metadata corruption detected at block 0x1000020/0x1000 btree block 2/4 is suspect, error 117 Metadata corruption detected at block 0x20/0x1000 Metadata corruption detected at block 0x1800028/0x1000 btree block 3/5 is suspect, error 117 Metadata corruption detected at block 0x800028/0x1000 btree block 1/5 is suspect, error 117 btree block 0/4 is suspect, error 117 Metadata corruption detected at block 0x1000028/0x1000 btree block 2/5 is suspect, error 117 Metadata corruption detected at block 0x1800030/0x1000 btree block 3/6 is suspect, error 117 Metadata corruption detected at block 0x800030/0x1000 btree block 1/6 is suspect, error 117 Metadata corruption detected at block 0x28/0x1000 btree block 0/5 is suspect, error 117 Metadata corruption detected at block 0x1000030/0x1000 btree block 2/6 is suspect, error 117 Metadata corruption detected at block 0x1800038/0x1000 btree block 3/7 is suspect, error 117 Metadata corruption detected at block 0x800038/0x1000 btree block 1/7 is suspect, error 117 Metadata corruption detected at block 0x30/0x1000 Metadata corruption detected at block 0x1000038/0x1000 btree block 2/7 is suspect, error 117 btree block 0/6 is suspect, error 117 Metadata corruption detected at block 0x38/0x1000 btree block 0/7 is suspect, error 117 undiscovered finobt record, ino 96 (0/96) root inode chunk not found Phase 3 - for each AG... - scan and clear agi unlinked lists... found inodes not in the inode allocation tree - process known inodes and perform inode discovery... - agno = 0 UUID mismatch on inode 96 UUID mismatch on inode 97 UUID mismatch on inode 98 UUID mismatch on inode 99 UUID mismatch on inode 100 UUID mismatch on inode 101 UUID mismatch on inode 102 UUID mismatch on inode 103 UUID mismatch on inode 104 UUID mismatch on inode 105 UUID mismatch on inode 106 UUID mismatch on inode 107 UUID mismatch on inode 108 UUID mismatch on inode 109 UUID mismatch on inode 110 UUID mismatch on inode 111 UUID mismatch on inode 112 UUID mismatch on inode 113 UUID mismatch on inode 114 UUID mismatch on inode 115 UUID mismatch on inode 116 UUID mismatch on inode 117 UUID mismatch on inode 118 UUID mismatch on inode 119 UUID mismatch on inode 120 UUID mismatch on inode 121 UUID mismatch on inode 122 UUID mismatch on inode 123 UUID mismatch on inode 124 UUID mismatch on inode 125 UUID mismatch on inode 126 UUID mismatch on inode 127 UUID mismatch on inode 128 UUID mismatch on inode 129 UUID mismatch on inode 130 UUID mismatch on inode 131 UUID mismatch on inode 132 UUID mismatch on inode 133 UUID mismatch on inode 134 UUID mismatch on inode 135 UUID mismatch on inode 136 UUID mismatch on inode 137 UUID mismatch on inode 138 UUID mismatch on inode 139 UUID mismatch on inode 140 UUID mismatch on inode 141 UUID mismatch on inode 142 UUID mismatch on inode 143 UUID mismatch on inode 144 UUID mismatch on inode 145 UUID mismatch on inode 146 UUID mismatch on inode 147 UUID mismatch on inode 148 UUID mismatch on inode 149 UUID mismatch on inode 150 UUID mismatch on inode 151 UUID mismatch on inode 152 UUID mismatch on inode 153 UUID mismatch on inode 154 UUID mismatch on inode 155 UUID mismatch on inode 156 UUID mismatch on inode 157 UUID mismatch on inode 158 UUID mismatch on inode 159 UUID mismatch on inode 96 cleared root inode 96 UUID mismatch on inode 97 cleared realtime bitmap inode 97 UUID mismatch on inode 98 cleared realtime summary inode 98 UUID mismatch on inode 99 cleared inode 99 UUID mismatch on inode 100 cleared inode 100 UUID mismatch on inode 101 cleared inode 101 UUID mismatch on inode 102 cleared inode 102 UUID mismatch on inode 103 cleared inode 103 UUID mismatch on inode 104 cleared inode 104 UUID mismatch on inode 105 cleared inode 105 UUID mismatch on inode 106 cleared inode 106 UUID mismatch on inode 107 cleared inode 107 UUID mismatch on inode 108 cleared inode 108 UUID mismatch on inode 109 cleared inode 109 UUID mismatch on inode 110 cleared inode 110 UUID mismatch on inode 111 cleared inode 111 UUID mismatch on inode 112 cleared inode 112 UUID mismatch on inode 113 cleared inode 113 UUID mismatch on inode 114 cleared inode 114 UUID mismatch on inode 115 cleared inode 115 UUID mismatch on inode 116 cleared inode 116 UUID mismatch on inode 117 cleared inode 117 UUID mismatch on inode 118 cleared inode 118 UUID mismatch on inode 119 cleared inode 119 UUID mismatch on inode 120 cleared inode 120 UUID mismatch on inode 121 cleared inode 121 UUID mismatch on inode 122 cleared inode 122 UUID mismatch on inode 123 cleared inode 123 UUID mismatch on inode 124 cleared inode 124 UUID mismatch on inode 125 cleared inode 125 UUID mismatch on inode 126 cleared inode 126 UUID mismatch on inode 127 cleared inode 127 UUID mismatch on inode 128 cleared inode 128 UUID mismatch on inode 129 cleared inode 129 UUID mismatch on inode 130 cleared inode 130 UUID mismatch on inode 131 cleared inode 131 UUID mismatch on inode 132 cleared inode 132 UUID mismatch on inode 133 cleared inode 133 UUID mismatch on inode 134 cleared inode 134 UUID mismatch on inode 135 cleared inode 135 UUID mismatch on inode 136 cleared inode 136 UUID mismatch on inode 137 cleared inode 137 UUID mismatch on inode 138 cleared inode 138 UUID mismatch on inode 139 cleared inode 139 UUID mismatch on inode 140 cleared inode 140 UUID mismatch on inode 141 cleared inode 141 UUID mismatch on inode 142 cleared inode 142 UUID mismatch on inode 143 cleared inode 143 UUID mismatch on inode 144 cleared inode 144 UUID mismatch on inode 145 cleared inode 145 UUID mismatch on inode 146 cleared inode 146 UUID mismatch on inode 147 cleared inode 147 UUID mismatch on inode 148 cleared inode 148 UUID mismatch on inode 149 cleared inode 149 UUID mismatch on inode 150 cleared inode 150 UUID mismatch on inode 151 cleared inode 151 UUID mismatch on inode 152 cleared inode 152 UUID mismatch on inode 153 cleared inode 153 UUID mismatch on inode 154 cleared inode 154 UUID mismatch on inode 155 cleared inode 155 UUID mismatch on inode 156 cleared inode 156 UUID mismatch on inode 157 cleared inode 157 UUID mismatch on inode 158 cleared inode 158 UUID mismatch on inode 159 cleared inode 159 - agno = 1 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... root inode lost - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... reinitializing root directory reinitializing realtime bitmap inode reinitializing realtime summary inode - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... resetting inode 96 nlinks from 1 to 2 done root@vger:~# mount /dev/mapper/rvg-sav /tmp/sav [ 811.386714] XFS (dm-5): Mounting V5 Filesystem [ 811.432582] XFS (dm-5): Ending clean mount root@vger:~# ls -la /tmp/sav/ total 0 drwxr-xr-x 2 root root 6 Apr 6 14:40 . drwxrwxrwt 10 root root 200 Apr 6 14:38 .. -- System Information: Debian Release: 8.0 APT prefers testing-proposed-updates APT policy: (500, 'testing-proposed-updates'), (500, 'testing'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 3.16.0-4-amd64 (SMP w/2 CPU cores) Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages xfsprogs depends on: ii libblkid1 2.25.2-6 ii libc6 2.19-17 ii libreadline5 5.2+dfsg-2 ii libuuid1 2.25.2-6 xfsprogs recommends no packages. Versions of packages xfsprogs suggests: ii acl 2.2.52-2 pn attr pn quota pn xfsdump -- no debconf information From tfire.xfs-xfs=oss.sgi.com@trakkadog.com Mon Apr 6 08:49:26 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,T_DKIM_INVALID, T_REMOTE_IMAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A9D3629DFB for ; Mon, 6 Apr 2015 08:49:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1AAD2AC003 for ; Mon, 6 Apr 2015 06:49:22 -0700 (PDT) X-ASG-Debug-ID: 1428328159-04cb6c11dc167ae0001-NocioJ Received: from western.trakkadog.com (various.joycengcz.com [162.251.164.31]) by cuda.sgi.com with ESMTP id P8Ws3MvrsxhgjC2f for ; Mon, 06 Apr 2015 06:49:19 -0700 (PDT) X-Barracuda-Envelope-From: tfire.xfs-xfs=oss.sgi.com@trakkadog.com X-Barracuda-Apparent-Source-IP: 162.251.164.31 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=dkim; d=trakkadog.com; h=MIME-Version:Content-Type:Date:Message-Id:Subject:From:To; i=tfire.xfs@trakkadog.com; bh=DsCisBurewLHw3UsTbK0Le1lE0M=; b=aaMNS4C4hlepCJE7I3Qr5U1YhmgFWfEYjmzRWK9cmXrqP3jhvRF1X2V6oNa9nh2jmiVIjYxmXYui UhwDMRCAj0dpMvPRS6L2RABbYRAF9ZXLJ3/sl1Llmh0XEpLGyGyiIfvUIvEL593spSFN127+JRTM CH+qg2AiSGwa0CrKbzQ= Received: by western.trakkadog.com id h4a79o0001go for ; Mon, 6 Apr 2015 09:48:08 -0400 (envelope-from ) MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="132000789b428bb1ff73c5775d8e90" Date: Mon, 6 Apr 2015 09:48:08 -0400 Message-Id: Subject: =?UTF-8?B?VHJhbnNmb3JtIFlvdXIgaVBhZCBJbnRvIEEgTGFwdG9wIFJlcGxhY2VtZW50Lg==?= From: Touch-FIRE X-ASG-Orig-Subj: =?UTF-8?B?VHJhbnNmb3JtIFlvdXIgaVBhZCBJbnRvIEEgTGFwdG9wIFJlcGxhY2VtZW50Lg==?= To: xfs@oss.sgi.com X-Barracuda-Connect: various.joycengcz.com[162.251.164.31] X-Barracuda-Start-Time: 1428328159 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.00 X-Barracuda-Spam-Status: No, SCORE=2.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0240, BSF_SC0_SA828, DKIM_SIGNED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17603 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 1.00 BSF_SC0_MV0240 BODY: Custom rule MV0240 0.00 HTML_MESSAGE BODY: HTML included in message 1.00 BSF_SC0_SA828 Custom Outbreak Rule BSF_SC0_SA828 --132000789b428bb1ff73c5775d8e90 Content-Type: text/plain; Touch__fire Touchfire,_Inc. | 1117_NW_54th__Street | Seattle,_WA_98107 Attention iPad Owners: Bluetooth Keyboards Are A Thing Of The Past. | Introducing The All-New Touchfire Case and Keyboard | Unlike bluetooth keyboards, Touchfire... -Isn’t An Extra Device You Have To Carry -Doesn’t Add Any Noticeable Size Or Weight -Won’t Drain Your iPad’s Battery -Doesn’t Need To Pair Or Synch With Your iPad -Is Affordable And Has A Lifetime Warranty | Over 35,000 Satisfied Customers!| “Incredibly Simple To Use. Like Typing On A Physical Keyboard” - The New York Times | “I love it! I love it!” ~ Kathy Lee - Today Show | “An Ingenious Idea” - TIME Touchfire,_Inc. | 1117_NW_54th_Street | Seattle,_WA 98107 To__unsubscribe click__here Rsuls phyles Anohr major conomc ssu was h currncy h a woul b us by an npnn Scolan.147 Th prncpal opons wr o sablsh an npnn Scosh currncy, jon h uro, or ran h poun srlng147 (a form of currncy subsuon).148 Qubc an h vally of h San Lawrnc Rvr: Spcals ramn US 32 Iowa 1926 shl markr Th crw rqus prmsson o json h bomb, n orr o ruc wgh an prvn h bomb from xplong urng an mrgncy lanng. Prmsson was gran, an h bomb was json a 7,200 f (2,200 m) whl h bombr was ravlng a abou 200 knos (370 km/h). Th crw no s an xploson whn h bomb sruck h sa. Thy manag o lan h B-47 safly a h nars bas, Hunr Ar Forc Bas. Th plo, Colonl Howar Rcharson, was awar h Dsngush Flyng Cross afr hs ncn.1 Much of h arly crcsm of h U.S. Hghway Sysm focus on h choc of numbrs o sgna h hghways, rahr han nams. Som hough a numbr hghway sysm o b col compar o h mor colorful nams an hsorc valu of h auo ral sysms. Th Nw York Tms wro, Th ravlr may sh ars as h rvs h Lncoln Hghway or ram rams as h sps ovr h Jffrson Hghway, bu how can h g a 'kck' ou of 46, 55 or 33 or 21?6 (A popular song lar proms, G your kcks on Rou 66!) Th wrr Erns McGaffy was quo as sayng, Logarhms wll ak h plac of lgns, an 'hokum' for hsory.1 A rpublc s favour by som pro-npnnc polcal pars an organsaons, nclung h Scosh Grn Pary250 an h Scosh Socals Pary.251 Th SNP s n favour of an npnn Scolan bng a monarchy n prsonal unon wh h rs of h UK147 (an hus h 15 ohr Commonwalh ralms). Chrsn Graham has sa sh blvs ha pary polcy s o hol a rfrnum on h mar,252 u o a 1997 SNP confrnc rsoluon.253 Nonhlss, h nal assssmn by h Un Sas Naonal Scury Councl (NSC), wh chncal suppor by h Naval Rsarch Laboraory13pag n n Ocobr 1979 was ha h Amrcan nllgnc communy ha hgh confnc ha h vn was a low-yl nuclar xploson, alhough no raoacv brs ha vr bn c, an hr was no corroborang ssmc or hyro-acousc aa.14 A lar NSC rpor rvs hs poson o a poson of agnoscsm abou whhr a s ha occurr or no.15pag n Th NSC conclu ha rsponsbly for a nuclar xploson, f any, shoul b ascrb o h Rpublc of Souh Afrca.16pag n15pag n Wnnpg s a cnral nxus of h Canaan ral sysm for conncng h counry. Snc 1980, som small amouns of nw nformaon hav mrg. Howvr, mos qusons rman unanswr: Dusch Bank ssu a rpor n h wk pror o h rfrnum an h ma rpor on 13 Spmbr ha Dav Folkrs-Lanau, h bank's chf conoms, ha conclu: Whl may soun smpl an coslss for a naon o x a 300 yar-ol unon, nohng coul b furhr from h ruh. Folkrs-Lanau clam ha h conomc prospcs afr a ys vo wr ncomprhnsbl, cng Wnson Churchll's 1925 Gol Sanar cson an h acons of Amrca's Fral Rsrv ha rggr h Gra Dprsson of h 1930s, as ohr msaks of a smlar magnu. Th Swss UBS fnancal srvcs company suppor h poson of h Dusch Bank.324 Currn map of NATO, mmbr sas shown n ark blu Ina ha carr ou a nuclar s n 1974 (conam Smlng Buha). Th possbly ha Ina woul s a wapon was consr, snc woul b possbl for h Inan Navy o opra n hos wars so far souh, howvr, hs was smss as mpraccal an unncssary (gvn h fac ha Ina ha sgn an raf h Lm Ts Ban Tray or LTBT n 1963, an ha compl wh vn n s frs s).45 Vcor Glnsky (formr mmbr o f h Nuclar Rgulaory Commsson) amp o cas oub on h scnc panl's fnngs, argung ha s mmbrs wr polcally mova.20 Thr was som aa ha sm o confrm ha a nuclar xploson was h sourc for h oubl flash sgnal. Thr was h anomalous ravlng onosphrc surbanc ha was masur a h Arcbo Obsrvaory n Puro Rco a h sam m,20 bu many housans of mls away n a ffrn hmsphr of h arh. A s n Wsrn Ausrala conuc a fw monhs lar foun som ncras nuclar raaon lvls.26pag n Howvr, a al suy on by Nw Zalan's Naonal Raaon Laboraory foun no such vnc of xcss raoacvy, an nhr a U.S. Govrnmn-fun nuclar laboraory.27 Los Alamos Naonal Laboraory scnss who work on h Vla Hol program hav profss hr convcon ha h Vla Hol sall's cors work proprly.2028 2 Ouln 9 Furhr rang Th Arcbo onosphrc obsrvaory an rao lscop n Puro Rco c an anomalous onosphrc wav urng h mornng of Spmbr 22, 1979, whch mov from h souhas o h norhws, an vn whch ha no bn obsrv prvously by h scnss.20 Frs arcraf --132000789b428bb1ff73c5775d8e90 Content-Type: text/html; Touch__fire
Touchfire Case & Keyboard
Touchfire,_Inc. | 1117_NW_54th__Street | Seattle,_WA_98107

Attention iPad Owners: Bluetooth Keyboards Are A Thing Of The Past. | Introducing The All-New Touchfire Case and Keyboard | Unlike bluetooth keyboards, Touchfire... -Isn’t An Extra Device You Have To Carry -Doesn’t Add Any Noticeable Size Or Weight -Won’t Drain Your iPad’s Battery -Doesn’t Need To Pair Or Synch With Your iPad -Is Affordable And Has A Lifetime Warranty | Over 35,000 Satisfied Customers!| “Incredibly Simple To Use. Like Typing On A Physical Keyboard” - The New York Times | “I love it! I love it!” ~ Kathy Lee - Today Show | “An Ingenious Idea” - TIME

Touchfire,_Inc. | 1117_NW_54th_Street | Seattle,_WA 98107

To__unsubscr i be click__here

5 S also xfs 2.1 Sov Unon Thr rpor no ha h flash aa conan many of h faurs of sgnals from prvously obsrv nuclar xplosons,24 bu ha carful xamnaon rvals a sgnfcan vaon n h lgh sgnaur of h Spmbr 22 vn ha hrows oub on h nrpraon as a nuclar vn. Th bs analyss ha hy coul offr of h aa suggs ha, f h snsors wr proprly calbra, any sourc of h lgh flashs wr spurous zoo vns. Thus hr fnal rmnaon was ha whl hy coul no rul ou ha hs sgnal was of nuclar orgn, bas on our xprnc n rla scnfc assssmns, s our collcv jugmn ha h Spmbr 22 sgnal was probably no from a nuclar xploson.25 Bas on xnsv war gams conuc a h Naval War Collg, h plan rjc aackng Brsh shppng or ampng o sroy h Brsh fl. Th man Amrcan fl woul nsa say n h wsrn Norh Alanc o block Brsh-Canaan raffc. Th navy woul wa for a goo opporuny o ngag h Brsh fl, an f succssful woul hn aack Brsh ra a n colons n h Wsrn Hmsphr.6 2.2 Isral Th Barn formula has rsul n hghr pr-capa publc spnng n Scolan han Englan.181 If Norh Sa ol rvnu s calcula on a gographc bass, Scolan also proucs mor pr capa ax rvnu han h UK avrag.182183 Th Insu for Fscal Sus rpor n Novmbr 2012 ha a gographc shar of Norh Sa ol woul mor han covr h hghr publc spnng, bu warn ha ol prcs ar volal an ha ol s a fn rsourc.183 Th Govrnmn Expnur an Rvnu Scolan rpor for 2012/13 foun ha Norh Sa ol rvnu ha falln by 41.5% an ha Scolan's publc spnng fc ha ncras from ?4.6 bllon o ?8.6 bllon.184185 In h Hous of Lors, Baronss Symons argu ha h rs of h UK shoul b allow o vo on Scosh npnnc, on h grouns ha woul affc h whol counry. Ths argumn was rjc by h Brsh govrnmn, as h Avoca Gnral for Scolan Lor Wallac sa ha whhr or no Scolan shoul lav h Un Kngom s a mar for Scolan.35 Wallac also pon o h fac ha only wo of 11 rfrnums snc 1973 ha bn across all of h Un Kngom.35 Profssor John Curc also argu ha h Norhrn Irlan sovrgny rfrnum of 1 973 cra a prcn for allowng only hos rsn n on par of h UK o vo on s sovrgny.36 Anohr major conomc ssu was h currncy ha woul b us by an npnn Scolan.147 Th prncpal opons wr o sablsh an npnn Scosh currncy, jon h uro, or ran h poun srlng147 (a form of currncy subsuon).148 Furhr voluon Profssor Sr Dav Ewar, a formr Europan Cour jug, has sa ha h EU nsuons an mmbr sas woul b oblg o sar ngoaons bfor npnnc ook ffc o c h fuur rlaonshp.222 H sa hs woul b achv by agr amnmn of h xsng Tras (Arcl 48), rahr han a nw Accsson Tray (Arcl 49).209222 Graham Avry, h EC's honorary rcor gnral, agr wh Ewar.223 Avry wro a rpor, publsh by h Europan Polcy Cnr, whch sa ha EU lars woul probably allow Scolan o b par of h EU bcaus of h lgal an praccal ffculs ha woul ars from xclung .224 In a rsarch papr, Profssor Sonah Douglas-Sco of Oxfor Unvrsy sa ha h EU law normally aks a pragmac an purposv approach o ssus ha ar no alray prov for by xsng ras.225 Rsarch publsh by h Economc an Socal Rsarch Councl n Augus 2 014 conclu ha s unlkly ha an npnn Scolan woul b cu off from h rghs an oblgaons of EU mmbrshp for any pro of m, vn f Scolan was no formally a mmbr sa of h EU from s a of npnnc.226 Opraor Un Sas Ar Forc 2 Bomb Th UK has som op-ous from EU polcs. On s h op-ou from h Schngn Ara, manng hr ar full passpor chcks for ravllrs from ohr EU counrs xcp Rpublc of Irlan, whch s par of h Common Travl Ara (CTA) wh h UK. Th Scosh govrnmn propos ha an npnn Scolan shoul rman ous h Schngn Ara an jon h CTA,6768 nsurng ha no passpor conrols woul b n a h Anglo-Scosh borr. Ncola Surgon commn ha an npnn Scolan woul ngoa wh h EU o hav h sam vsa arrangmns as h UK has.69 In May 2014, Labour MEP Dav Marn commn ha h EU was no gong o forc Scolan o jon Schngn.70 Qubc: Th Prmr of Qubc, Phlpp Coullar, sa ha hr wr lm comparsons bwn Scolan an Qubc, whr h sovrgny movmn los rfrnums n 1980 an 1995, an suggs a volv mol smlar o fralsm as a possbl fuur mol for h UK: I hnk ha f h Scos ha wha w hav, Qubcrs whn Canaa, h y probably woul b qu happy.398 Sephan Bear, lar of h Par Quebecos, scrb hmslf as sappon by h rsul.399 Ys Scolan was h man campagn group for npnnc, whl Br Toghr was h man campagn group n favour of mananng h unon. Many ohr campagn groups, polcal pars, busnsss, nwspaprs an promnn nvuals wr also nvolv. Promnn ssus ras urng h campagn nclu whch currncy an npnn Scolan woul us, publc xpnur, EU mmbrshp, an Norh Sa ol. Convc prsonrs wr no abl o vo n h rfrnum. Th Europan Cour of Human Rghs (ECHR) arlr rul ha hs rsrcon was unlawful, bu Scosh jug Lor Glnn sa ha h blv h ECHR jugmn woul apply only o parlamnary lcons.28 Appals agans hs rulng wr rjc by h Cour of Ssson n Enburgh29 an h UK Suprm Cour.30 In gnral, U.S. Rous o no hav a mnmum sgn sanar, unlk h lar Inrsa Hghways, an ar no usually bul o frway sanars. Som srchs of U.S. Rous o m hos sanars. Many ar sgna usng h man srs of h cs an owns hrough whch hy run. Nw aons o h sysm, howvr, mus subsanally m h currn AASHTO sgn sanars.3 As of 1989, h Un Sas Numbr Hghways sysm has a oal lngh of 157,724 mls (253,832 km).2 Lgaly of a rfrnum 1958 Tyb Islan m-ar collson s loca n Gorga (U.S. sa) Crash sCrash s AlanaAlana

--132000789b428bb1ff73c5775d8e90-- From debbugs@buxtehude.debian.org Mon Apr 6 09:45:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BC65829DFB for ; Mon, 6 Apr 2015 09:45:10 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A87BB304032 for ; Mon, 6 Apr 2015 07:45:10 -0700 (PDT) X-ASG-Debug-ID: 1428331507-04cb6c11de16c400001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id UH3g0Qwt193DKpjt (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 06 Apr 2015 07:45:07 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1Yf8Gu-0004md-P1; Mon, 06 Apr 2015 14:45:04 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#782012: xfs_admin: Changing UUID destroys Filesystem Reply-To: Eric Sandeen , 782012@bugs.debian.org X-ASG-Orig-Subj: Bug#782012: xfs_admin: Changing UUID destroys Filesystem Resent-From: Eric Sandeen Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Mon, 06 Apr 2015 14:45:02 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 782012 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: X-Debian-PR-Source: xfsprogs Received: via spool by submit@bugs.debian.org id=B.142833136717913 (code B); Mon, 06 Apr 2015 14:45:02 +0000 Received: (at submit) by bugs.debian.org; 6 Apr 2015 14:42:47 +0000 Received: from sandeen.net ([63.231.237.45]) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1Yf8Eh-0004eB-3w; Mon, 06 Apr 2015 14:42:47 +0000 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 4716D63C3A22; Mon, 6 Apr 2015 09:35:11 -0500 (CDT) Message-ID: <552299A0.1070508@sandeen.net> Date: Mon, 06 Apr 2015 09:35:12 -0500 From: Eric Sandeen MIME-Version: 1.0 To: "F. Stoyan" , 782012@bugs.debian.org, Debian Bug Tracking System References: <20150406132342.2635.15072.reportbug@phoenix.lab.swapon.de> In-Reply-To: <20150406132342.2635.15072.reportbug@phoenix.lab.swapon.de> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Greylist: delayed 448 seconds by postgrey-1.34 at buxtehude; Mon, 06 Apr 2015 14:42:46 UTC Delivered-To: submit@bugs.debian.org X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1428331507 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17603 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- v5 filesystems stamp the filesystem UUID into many pieces of metadata; changing it only in the superblock via xfs_admin makes every other bit of metadata look wrong. We need to disable the ability to change UUID in xfs_admin, I'll send a patch. Thanks for the report, -Eric On 4/6/15 8:23 AM, F. Stoyan wrote: > Package: xfsprogs > Version: 3.2.1 > Severity: normal > > Dear Maintainer, > > after changing the UUID of an existing not mounted XFS-V5 Filesystem it can't be > mounted anymore. xfs_repair fix this, but the remaining filsystem is empty. > Here is what happend in detail: > > root@vger:~# xfs_admin -u /dev/mapper/rvg-sav > UUID = a2320a38-0c83-478e-bc31-4bc3fb253fdd > > root@vger:~# xfs_admin -U a2320a38-0c83-478e-bc31-4bc3fb253fde /dev/mapper/rvg-sav > Clearing log and setting UUID > writing all SBs > new UUID = a2320a38-0c83-478e-bc31-4bc3fb253fde > > root@vger:~# mount /dev/mapper/rvg-sav /tmp/sav > mount: mount /dev/mapper/rvg-sav on /tmp/sav failed: Structure needs cleaning > > [ 696.826336] XFS (dm-5): Mounting V5 Filesystem > [ 696.866945] XFS (dm-5): xfs_iread: validation failed for inode 96 failed > [ 696.867000] ffff8800b9981000: 49 4e 41 ed 03 01 00 00 00 00 00 00 00 00 00 00 INA............. > [ 696.867053] ffff8800b9981010: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................ > [ 696.867105] ffff8800b9981020: 55 22 7a 21 2c 67 43 83 55 22 79 cf 08 76 b6 6a U"z!,gC.U"y..v.j > [ 696.867157] ffff8800b9981030: 55 22 79 cf 08 76 b6 6a 00 00 00 00 00 00 00 35 U"y..v.j.......5 > [ 696.867242] XFS (dm-5): Internal error xfs_iread at line 392 of file /build/linux-SAvLSw/linux-3.16.7-ckt7/fs/xfs/xfs_inode_buf.c. Caller xfs_iget+0x24b/0x690 [xfs] > [ 696.867322] CPU: 1 PID: 1761 Comm: mount Not tainted 3.16.0-4-amd64 #1 Debian 3.16.7-ckt7-1 > [ 696.867324] Hardware name: LENOVO 7666A26/7666A26, BIOS 7NETC0WW (2.20 ) 03/12/2009 > [ 696.867326] 0000000000000001 ffffffff81509e7c ffff8801365d6000 ffffffffa023b5cb > [ 696.867330] 00000188b87b4a40 ffffffffa0240f6b ffff8800ba194400 ffff8801365d6000 > [ 696.867333] 0000000000000075 0000000000000000 ffffffffa0286aea ffffffffa0240f6b > [ 696.867337] Call Trace: > [ 696.867345] [] ? dump_stack+0x41/0x51 > [ 696.867358] [] ? xfs_corruption_error+0x5b/0x80 [xfs] > [ 696.867372] [] ? xfs_iget+0x24b/0x690 [xfs] > [ 696.867389] [] ? xfs_iread+0xea/0x400 [xfs] > [ 696.867402] [] ? xfs_iget+0x24b/0x690 [xfs] > [ 696.867415] [] ? xfs_iget+0x24b/0x690 [xfs] > [ 696.867429] [] ? xfs_parseargs+0xb80/0xb80 [xfs] > [ 696.867444] [] ? xfs_mountfs+0x3e7/0x700 [xfs] > [ 696.867458] [] ? xfs_fs_fill_super+0x293/0x310 [xfs] > [ 696.867463] [] ? mount_bdev+0x1a6/0x1e0 > [ 696.867467] [] ? mount_fs+0x34/0x1a0 > [ 696.867472] [] ? vfs_kern_mount+0x62/0x110 > [ 696.867476] [] ? do_mount+0x23a/0xaf0 > [ 696.867480] [] ? memdup_user+0x3d/0x70 > [ 696.867484] [] ? SyS_mount+0x81/0xc0 > [ 696.867488] [] ? system_call_fast_compare_end+0x10/0x15 > [ 696.867490] XFS (dm-5): Corruption detected. Unmount and run xfs_repair > [ 696.867529] XFS (dm-5): failed to read root inode > > root@vger:~# xfs_repair /dev/mapper/rvg-sav > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > Metadata corruption detected at block 0x800008/0x1000 > Metadata corruption detected at block 0x8/0x1000 > Metadata corruption detected at block 0x1800008/0x1000 > Metadata corruption detected at block 0x800010/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 1 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 1 > reset bad agf for ag 1 > reset bad agi for ag 1 > Metadata corruption detected at block 0x1000008/0x1000 > Metadata corruption detected at block 0x1800010/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 3 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 3 > reset bad agf for ag 3 > reset bad agi for ag 3 > Metadata corruption detected at block 0x10/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 0 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 0 > reset bad agf for ag 0 > reset bad agi for ag 0 > Metadata corruption detected at block 0x800018/0x1000 > Metadata corruption detected at block 0x1000010/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 2 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 2 > reset bad agf for ag 2 > reset bad agi for ag 2 > Metadata corruption detected at block 0x1800018/0x1000 > Metadata corruption detected at block 0x800020/0x1000 > btree block 1/4 is suspect, error 117 > Metadata corruption detected at block 0x1000018/0x1000 > Metadata corruption detected at block 0x18/0x1000 > Metadata corruption detected at block 0x1800020/0x1000 > btree block 3/4 is suspect, error 117 > Metadata corruption detected at block 0x1000020/0x1000 > btree block 2/4 is suspect, error 117 > Metadata corruption detected at block 0x20/0x1000 > Metadata corruption detected at block 0x1800028/0x1000 > btree block 3/5 is suspect, error 117 > Metadata corruption detected at block 0x800028/0x1000 > btree block 1/5 is suspect, error 117 > > btree block 0/4 is suspect, error 117 > Metadata corruption detected at block 0x1000028/0x1000 > btree block 2/5 is suspect, error 117 > Metadata corruption detected at block 0x1800030/0x1000 > btree block 3/6 is suspect, error 117 > Metadata corruption detected at block 0x800030/0x1000 > btree block 1/6 is suspect, error 117 > Metadata corruption detected at block 0x28/0x1000 > btree block 0/5 is suspect, error 117 > Metadata corruption detected at block 0x1000030/0x1000 > btree block 2/6 is suspect, error 117 > Metadata corruption detected at block 0x1800038/0x1000 > btree block 3/7 is suspect, error 117 > Metadata corruption detected at block 0x800038/0x1000 > btree block 1/7 is suspect, error 117 > Metadata corruption detected at block 0x30/0x1000 > Metadata corruption detected at block 0x1000038/0x1000 > btree block 2/7 is suspect, error 117 > btree block 0/6 is suspect, error 117 > Metadata corruption detected at block 0x38/0x1000 > btree block 0/7 is suspect, error 117 > undiscovered finobt record, ino 96 (0/96) > root inode chunk not found > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > found inodes not in the inode allocation tree > - process known inodes and perform inode discovery... > - agno = 0 > UUID mismatch on inode 96 > UUID mismatch on inode 97 > UUID mismatch on inode 98 > UUID mismatch on inode 99 > UUID mismatch on inode 100 > UUID mismatch on inode 101 > UUID mismatch on inode 102 > UUID mismatch on inode 103 > UUID mismatch on inode 104 > UUID mismatch on inode 105 > UUID mismatch on inode 106 > UUID mismatch on inode 107 > UUID mismatch on inode 108 > UUID mismatch on inode 109 > UUID mismatch on inode 110 > UUID mismatch on inode 111 > UUID mismatch on inode 112 > UUID mismatch on inode 113 > UUID mismatch on inode 114 > UUID mismatch on inode 115 > UUID mismatch on inode 116 > UUID mismatch on inode 117 > UUID mismatch on inode 118 > UUID mismatch on inode 119 > UUID mismatch on inode 120 > UUID mismatch on inode 121 > UUID mismatch on inode 122 > UUID mismatch on inode 123 > UUID mismatch on inode 124 > UUID mismatch on inode 125 > UUID mismatch on inode 126 > UUID mismatch on inode 127 > UUID mismatch on inode 128 > UUID mismatch on inode 129 > UUID mismatch on inode 130 > UUID mismatch on inode 131 > UUID mismatch on inode 132 > UUID mismatch on inode 133 > UUID mismatch on inode 134 > UUID mismatch on inode 135 > UUID mismatch on inode 136 > UUID mismatch on inode 137 > UUID mismatch on inode 138 > UUID mismatch on inode 139 > UUID mismatch on inode 140 > UUID mismatch on inode 141 > UUID mismatch on inode 142 > UUID mismatch on inode 143 > UUID mismatch on inode 144 > UUID mismatch on inode 145 > UUID mismatch on inode 146 > UUID mismatch on inode 147 > UUID mismatch on inode 148 > UUID mismatch on inode 149 > UUID mismatch on inode 150 > UUID mismatch on inode 151 > UUID mismatch on inode 152 > UUID mismatch on inode 153 > UUID mismatch on inode 154 > UUID mismatch on inode 155 > UUID mismatch on inode 156 > UUID mismatch on inode 157 > UUID mismatch on inode 158 > UUID mismatch on inode 159 > UUID mismatch on inode 96 > cleared root inode 96 > UUID mismatch on inode 97 > cleared realtime bitmap inode 97 > UUID mismatch on inode 98 > cleared realtime summary inode 98 > UUID mismatch on inode 99 > cleared inode 99 > UUID mismatch on inode 100 > cleared inode 100 > UUID mismatch on inode 101 > cleared inode 101 > UUID mismatch on inode 102 > cleared inode 102 > UUID mismatch on inode 103 > cleared inode 103 > UUID mismatch on inode 104 > cleared inode 104 > UUID mismatch on inode 105 > cleared inode 105 > UUID mismatch on inode 106 > cleared inode 106 > UUID mismatch on inode 107 > cleared inode 107 > UUID mismatch on inode 108 > cleared inode 108 > UUID mismatch on inode 109 > cleared inode 109 > UUID mismatch on inode 110 > cleared inode 110 > UUID mismatch on inode 111 > cleared inode 111 > UUID mismatch on inode 112 > cleared inode 112 > UUID mismatch on inode 113 > cleared inode 113 > UUID mismatch on inode 114 > cleared inode 114 > UUID mismatch on inode 115 > cleared inode 115 > UUID mismatch on inode 116 > cleared inode 116 > UUID mismatch on inode 117 > cleared inode 117 > UUID mismatch on inode 118 > cleared inode 118 > UUID mismatch on inode 119 > cleared inode 119 > UUID mismatch on inode 120 > cleared inode 120 > UUID mismatch on inode 121 > cleared inode 121 > UUID mismatch on inode 122 > cleared inode 122 > UUID mismatch on inode 123 > cleared inode 123 > UUID mismatch on inode 124 > cleared inode 124 > UUID mismatch on inode 125 > cleared inode 125 > UUID mismatch on inode 126 > cleared inode 126 > UUID mismatch on inode 127 > cleared inode 127 > UUID mismatch on inode 128 > cleared inode 128 > UUID mismatch on inode 129 > cleared inode 129 > UUID mismatch on inode 130 > cleared inode 130 > UUID mismatch on inode 131 > cleared inode 131 > UUID mismatch on inode 132 > cleared inode 132 > UUID mismatch on inode 133 > cleared inode 133 > UUID mismatch on inode 134 > cleared inode 134 > UUID mismatch on inode 135 > cleared inode 135 > UUID mismatch on inode 136 > cleared inode 136 > UUID mismatch on inode 137 > cleared inode 137 > UUID mismatch on inode 138 > cleared inode 138 > UUID mismatch on inode 139 > cleared inode 139 > UUID mismatch on inode 140 > cleared inode 140 > UUID mismatch on inode 141 > cleared inode 141 > UUID mismatch on inode 142 > cleared inode 142 > UUID mismatch on inode 143 > cleared inode 143 > UUID mismatch on inode 144 > cleared inode 144 > UUID mismatch on inode 145 > cleared inode 145 > UUID mismatch on inode 146 > cleared inode 146 > UUID mismatch on inode 147 > cleared inode 147 > UUID mismatch on inode 148 > cleared inode 148 > UUID mismatch on inode 149 > cleared inode 149 > UUID mismatch on inode 150 > cleared inode 150 > UUID mismatch on inode 151 > cleared inode 151 > UUID mismatch on inode 152 > cleared inode 152 > UUID mismatch on inode 153 > cleared inode 153 > UUID mismatch on inode 154 > cleared inode 154 > UUID mismatch on inode 155 > cleared inode 155 > UUID mismatch on inode 156 > cleared inode 156 > UUID mismatch on inode 157 > cleared inode 157 > UUID mismatch on inode 158 > cleared inode 158 > UUID mismatch on inode 159 > cleared inode 159 > - agno = 1 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > root inode lost > - check for inodes claiming duplicate blocks... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > Phase 5 - rebuild AG headers and trees... > - reset superblock... > Phase 6 - check inode connectivity... > reinitializing root directory > reinitializing realtime bitmap inode > reinitializing realtime summary inode > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > - traversal finished ... > - moving disconnected inodes to lost+found ... > Phase 7 - verify and correct link counts... > resetting inode 96 nlinks from 1 to 2 > done > > root@vger:~# mount /dev/mapper/rvg-sav /tmp/sav > > [ 811.386714] XFS (dm-5): Mounting V5 Filesystem > [ 811.432582] XFS (dm-5): Ending clean mount > > > root@vger:~# ls -la /tmp/sav/ > total 0 > drwxr-xr-x 2 root root 6 Apr 6 14:40 . > drwxrwxrwt 10 root root 200 Apr 6 14:38 .. > > > > -- System Information: > Debian Release: 8.0 > APT prefers testing-proposed-updates > APT policy: (500, 'testing-proposed-updates'), (500, 'testing'), (1, 'experimental') > Architecture: amd64 (x86_64) > > Kernel: Linux 3.16.0-4-amd64 (SMP w/2 CPU cores) > Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) > Shell: /bin/sh linked to /bin/dash > Init: systemd (via /run/systemd/system) > > Versions of packages xfsprogs depends on: > ii libblkid1 2.25.2-6 > ii libc6 2.19-17 > ii libreadline5 5.2+dfsg-2 > ii libuuid1 2.25.2-6 > > xfsprogs recommends no packages. > > Versions of packages xfsprogs suggests: > ii acl 2.2.52-2 > pn attr > pn quota > pn xfsdump > > -- no debconf information > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From debbugs@buxtehude.debian.org Mon Apr 6 09:45:20 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id DFBDC29E01 for ; Mon, 6 Apr 2015 09:45:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5DD40AC00A for ; Mon, 6 Apr 2015 07:45:16 -0700 (PDT) X-ASG-Debug-ID: 1428331513-04cb6c11dd16c410001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id rmj9Honaaygf6uWH (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 06 Apr 2015 07:45:14 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1Yf8H1-0004nE-Fs; Mon, 06 Apr 2015 14:45:11 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#782012: xfs_admin: Changing UUID destroys Filesystem Reply-To: Eric Sandeen , 782012@bugs.debian.org X-ASG-Orig-Subj: Bug#782012: xfs_admin: Changing UUID destroys Filesystem Resent-From: Eric Sandeen Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Mon, 06 Apr 2015 14:45:08 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 782012 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: X-Debian-PR-Source: xfsprogs Received: via spool by 782012-submit@bugs.debian.org id=B782012.142833136717922 (code B ref 782012); Mon, 06 Apr 2015 14:45:08 +0000 Received: (at 782012) by bugs.debian.org; 6 Apr 2015 14:42:47 +0000 Received: from sandeen.net ([63.231.237.45]) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1Yf8Eh-0004eB-3w; Mon, 06 Apr 2015 14:42:47 +0000 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 4716D63C3A22; Mon, 6 Apr 2015 09:35:11 -0500 (CDT) Message-ID: <552299A0.1070508@sandeen.net> Date: Mon, 06 Apr 2015 09:35:12 -0500 From: Eric Sandeen MIME-Version: 1.0 To: "F. Stoyan" , 782012@bugs.debian.org, Debian Bug Tracking System References: <20150406132342.2635.15072.reportbug@phoenix.lab.swapon.de> In-Reply-To: <20150406132342.2635.15072.reportbug@phoenix.lab.swapon.de> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Greylist: delayed 448 seconds by postgrey-1.34 at buxtehude; Mon, 06 Apr 2015 14:42:46 UTC X-CrossAssassin-Score: 2 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1428331514 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17603 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- v5 filesystems stamp the filesystem UUID into many pieces of metadata; changing it only in the superblock via xfs_admin makes every other bit of metadata look wrong. We need to disable the ability to change UUID in xfs_admin, I'll send a patch. Thanks for the report, -Eric On 4/6/15 8:23 AM, F. Stoyan wrote: > Package: xfsprogs > Version: 3.2.1 > Severity: normal > > Dear Maintainer, > > after changing the UUID of an existing not mounted XFS-V5 Filesystem it can't be > mounted anymore. xfs_repair fix this, but the remaining filsystem is empty. > Here is what happend in detail: > > root@vger:~# xfs_admin -u /dev/mapper/rvg-sav > UUID = a2320a38-0c83-478e-bc31-4bc3fb253fdd > > root@vger:~# xfs_admin -U a2320a38-0c83-478e-bc31-4bc3fb253fde /dev/mapper/rvg-sav > Clearing log and setting UUID > writing all SBs > new UUID = a2320a38-0c83-478e-bc31-4bc3fb253fde > > root@vger:~# mount /dev/mapper/rvg-sav /tmp/sav > mount: mount /dev/mapper/rvg-sav on /tmp/sav failed: Structure needs cleaning > > [ 696.826336] XFS (dm-5): Mounting V5 Filesystem > [ 696.866945] XFS (dm-5): xfs_iread: validation failed for inode 96 failed > [ 696.867000] ffff8800b9981000: 49 4e 41 ed 03 01 00 00 00 00 00 00 00 00 00 00 INA............. > [ 696.867053] ffff8800b9981010: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................ > [ 696.867105] ffff8800b9981020: 55 22 7a 21 2c 67 43 83 55 22 79 cf 08 76 b6 6a U"z!,gC.U"y..v.j > [ 696.867157] ffff8800b9981030: 55 22 79 cf 08 76 b6 6a 00 00 00 00 00 00 00 35 U"y..v.j.......5 > [ 696.867242] XFS (dm-5): Internal error xfs_iread at line 392 of file /build/linux-SAvLSw/linux-3.16.7-ckt7/fs/xfs/xfs_inode_buf.c. Caller xfs_iget+0x24b/0x690 [xfs] > [ 696.867322] CPU: 1 PID: 1761 Comm: mount Not tainted 3.16.0-4-amd64 #1 Debian 3.16.7-ckt7-1 > [ 696.867324] Hardware name: LENOVO 7666A26/7666A26, BIOS 7NETC0WW (2.20 ) 03/12/2009 > [ 696.867326] 0000000000000001 ffffffff81509e7c ffff8801365d6000 ffffffffa023b5cb > [ 696.867330] 00000188b87b4a40 ffffffffa0240f6b ffff8800ba194400 ffff8801365d6000 > [ 696.867333] 0000000000000075 0000000000000000 ffffffffa0286aea ffffffffa0240f6b > [ 696.867337] Call Trace: > [ 696.867345] [] ? dump_stack+0x41/0x51 > [ 696.867358] [] ? xfs_corruption_error+0x5b/0x80 [xfs] > [ 696.867372] [] ? xfs_iget+0x24b/0x690 [xfs] > [ 696.867389] [] ? xfs_iread+0xea/0x400 [xfs] > [ 696.867402] [] ? xfs_iget+0x24b/0x690 [xfs] > [ 696.867415] [] ? xfs_iget+0x24b/0x690 [xfs] > [ 696.867429] [] ? xfs_parseargs+0xb80/0xb80 [xfs] > [ 696.867444] [] ? xfs_mountfs+0x3e7/0x700 [xfs] > [ 696.867458] [] ? xfs_fs_fill_super+0x293/0x310 [xfs] > [ 696.867463] [] ? mount_bdev+0x1a6/0x1e0 > [ 696.867467] [] ? mount_fs+0x34/0x1a0 > [ 696.867472] [] ? vfs_kern_mount+0x62/0x110 > [ 696.867476] [] ? do_mount+0x23a/0xaf0 > [ 696.867480] [] ? memdup_user+0x3d/0x70 > [ 696.867484] [] ? SyS_mount+0x81/0xc0 > [ 696.867488] [] ? system_call_fast_compare_end+0x10/0x15 > [ 696.867490] XFS (dm-5): Corruption detected. Unmount and run xfs_repair > [ 696.867529] XFS (dm-5): failed to read root inode > > root@vger:~# xfs_repair /dev/mapper/rvg-sav > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > Metadata corruption detected at block 0x800008/0x1000 > Metadata corruption detected at block 0x8/0x1000 > Metadata corruption detected at block 0x1800008/0x1000 > Metadata corruption detected at block 0x800010/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 1 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 1 > reset bad agf for ag 1 > reset bad agi for ag 1 > Metadata corruption detected at block 0x1000008/0x1000 > Metadata corruption detected at block 0x1800010/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 3 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 3 > reset bad agf for ag 3 > reset bad agi for ag 3 > Metadata corruption detected at block 0x10/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 0 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 0 > reset bad agf for ag 0 > reset bad agi for ag 0 > Metadata corruption detected at block 0x800018/0x1000 > Metadata corruption detected at block 0x1000010/0x1000 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agf 2 > bad uuid a2320a38-0c83-478e-bc31-4bc3fb253fdd for agi 2 > reset bad agf for ag 2 > reset bad agi for ag 2 > Metadata corruption detected at block 0x1800018/0x1000 > Metadata corruption detected at block 0x800020/0x1000 > btree block 1/4 is suspect, error 117 > Metadata corruption detected at block 0x1000018/0x1000 > Metadata corruption detected at block 0x18/0x1000 > Metadata corruption detected at block 0x1800020/0x1000 > btree block 3/4 is suspect, error 117 > Metadata corruption detected at block 0x1000020/0x1000 > btree block 2/4 is suspect, error 117 > Metadata corruption detected at block 0x20/0x1000 > Metadata corruption detected at block 0x1800028/0x1000 > btree block 3/5 is suspect, error 117 > Metadata corruption detected at block 0x800028/0x1000 > btree block 1/5 is suspect, error 117 > > btree block 0/4 is suspect, error 117 > Metadata corruption detected at block 0x1000028/0x1000 > btree block 2/5 is suspect, error 117 > Metadata corruption detected at block 0x1800030/0x1000 > btree block 3/6 is suspect, error 117 > Metadata corruption detected at block 0x800030/0x1000 > btree block 1/6 is suspect, error 117 > Metadata corruption detected at block 0x28/0x1000 > btree block 0/5 is suspect, error 117 > Metadata corruption detected at block 0x1000030/0x1000 > btree block 2/6 is suspect, error 117 > Metadata corruption detected at block 0x1800038/0x1000 > btree block 3/7 is suspect, error 117 > Metadata corruption detected at block 0x800038/0x1000 > btree block 1/7 is suspect, error 117 > Metadata corruption detected at block 0x30/0x1000 > Metadata corruption detected at block 0x1000038/0x1000 > btree block 2/7 is suspect, error 117 > btree block 0/6 is suspect, error 117 > Metadata corruption detected at block 0x38/0x1000 > btree block 0/7 is suspect, error 117 > undiscovered finobt record, ino 96 (0/96) > root inode chunk not found > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > found inodes not in the inode allocation tree > - process known inodes and perform inode discovery... > - agno = 0 > UUID mismatch on inode 96 > UUID mismatch on inode 97 > UUID mismatch on inode 98 > UUID mismatch on inode 99 > UUID mismatch on inode 100 > UUID mismatch on inode 101 > UUID mismatch on inode 102 > UUID mismatch on inode 103 > UUID mismatch on inode 104 > UUID mismatch on inode 105 > UUID mismatch on inode 106 > UUID mismatch on inode 107 > UUID mismatch on inode 108 > UUID mismatch on inode 109 > UUID mismatch on inode 110 > UUID mismatch on inode 111 > UUID mismatch on inode 112 > UUID mismatch on inode 113 > UUID mismatch on inode 114 > UUID mismatch on inode 115 > UUID mismatch on inode 116 > UUID mismatch on inode 117 > UUID mismatch on inode 118 > UUID mismatch on inode 119 > UUID mismatch on inode 120 > UUID mismatch on inode 121 > UUID mismatch on inode 122 > UUID mismatch on inode 123 > UUID mismatch on inode 124 > UUID mismatch on inode 125 > UUID mismatch on inode 126 > UUID mismatch on inode 127 > UUID mismatch on inode 128 > UUID mismatch on inode 129 > UUID mismatch on inode 130 > UUID mismatch on inode 131 > UUID mismatch on inode 132 > UUID mismatch on inode 133 > UUID mismatch on inode 134 > UUID mismatch on inode 135 > UUID mismatch on inode 136 > UUID mismatch on inode 137 > UUID mismatch on inode 138 > UUID mismatch on inode 139 > UUID mismatch on inode 140 > UUID mismatch on inode 141 > UUID mismatch on inode 142 > UUID mismatch on inode 143 > UUID mismatch on inode 144 > UUID mismatch on inode 145 > UUID mismatch on inode 146 > UUID mismatch on inode 147 > UUID mismatch on inode 148 > UUID mismatch on inode 149 > UUID mismatch on inode 150 > UUID mismatch on inode 151 > UUID mismatch on inode 152 > UUID mismatch on inode 153 > UUID mismatch on inode 154 > UUID mismatch on inode 155 > UUID mismatch on inode 156 > UUID mismatch on inode 157 > UUID mismatch on inode 158 > UUID mismatch on inode 159 > UUID mismatch on inode 96 > cleared root inode 96 > UUID mismatch on inode 97 > cleared realtime bitmap inode 97 > UUID mismatch on inode 98 > cleared realtime summary inode 98 > UUID mismatch on inode 99 > cleared inode 99 > UUID mismatch on inode 100 > cleared inode 100 > UUID mismatch on inode 101 > cleared inode 101 > UUID mismatch on inode 102 > cleared inode 102 > UUID mismatch on inode 103 > cleared inode 103 > UUID mismatch on inode 104 > cleared inode 104 > UUID mismatch on inode 105 > cleared inode 105 > UUID mismatch on inode 106 > cleared inode 106 > UUID mismatch on inode 107 > cleared inode 107 > UUID mismatch on inode 108 > cleared inode 108 > UUID mismatch on inode 109 > cleared inode 109 > UUID mismatch on inode 110 > cleared inode 110 > UUID mismatch on inode 111 > cleared inode 111 > UUID mismatch on inode 112 > cleared inode 112 > UUID mismatch on inode 113 > cleared inode 113 > UUID mismatch on inode 114 > cleared inode 114 > UUID mismatch on inode 115 > cleared inode 115 > UUID mismatch on inode 116 > cleared inode 116 > UUID mismatch on inode 117 > cleared inode 117 > UUID mismatch on inode 118 > cleared inode 118 > UUID mismatch on inode 119 > cleared inode 119 > UUID mismatch on inode 120 > cleared inode 120 > UUID mismatch on inode 121 > cleared inode 121 > UUID mismatch on inode 122 > cleared inode 122 > UUID mismatch on inode 123 > cleared inode 123 > UUID mismatch on inode 124 > cleared inode 124 > UUID mismatch on inode 125 > cleared inode 125 > UUID mismatch on inode 126 > cleared inode 126 > UUID mismatch on inode 127 > cleared inode 127 > UUID mismatch on inode 128 > cleared inode 128 > UUID mismatch on inode 129 > cleared inode 129 > UUID mismatch on inode 130 > cleared inode 130 > UUID mismatch on inode 131 > cleared inode 131 > UUID mismatch on inode 132 > cleared inode 132 > UUID mismatch on inode 133 > cleared inode 133 > UUID mismatch on inode 134 > cleared inode 134 > UUID mismatch on inode 135 > cleared inode 135 > UUID mismatch on inode 136 > cleared inode 136 > UUID mismatch on inode 137 > cleared inode 137 > UUID mismatch on inode 138 > cleared inode 138 > UUID mismatch on inode 139 > cleared inode 139 > UUID mismatch on inode 140 > cleared inode 140 > UUID mismatch on inode 141 > cleared inode 141 > UUID mismatch on inode 142 > cleared inode 142 > UUID mismatch on inode 143 > cleared inode 143 > UUID mismatch on inode 144 > cleared inode 144 > UUID mismatch on inode 145 > cleared inode 145 > UUID mismatch on inode 146 > cleared inode 146 > UUID mismatch on inode 147 > cleared inode 147 > UUID mismatch on inode 148 > cleared inode 148 > UUID mismatch on inode 149 > cleared inode 149 > UUID mismatch on inode 150 > cleared inode 150 > UUID mismatch on inode 151 > cleared inode 151 > UUID mismatch on inode 152 > cleared inode 152 > UUID mismatch on inode 153 > cleared inode 153 > UUID mismatch on inode 154 > cleared inode 154 > UUID mismatch on inode 155 > cleared inode 155 > UUID mismatch on inode 156 > cleared inode 156 > UUID mismatch on inode 157 > cleared inode 157 > UUID mismatch on inode 158 > cleared inode 158 > UUID mismatch on inode 159 > cleared inode 159 > - agno = 1 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > root inode lost > - check for inodes claiming duplicate blocks... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > Phase 5 - rebuild AG headers and trees... > - reset superblock... > Phase 6 - check inode connectivity... > reinitializing root directory > reinitializing realtime bitmap inode > reinitializing realtime summary inode > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > - traversal finished ... > - moving disconnected inodes to lost+found ... > Phase 7 - verify and correct link counts... > resetting inode 96 nlinks from 1 to 2 > done > > root@vger:~# mount /dev/mapper/rvg-sav /tmp/sav > > [ 811.386714] XFS (dm-5): Mounting V5 Filesystem > [ 811.432582] XFS (dm-5): Ending clean mount > > > root@vger:~# ls -la /tmp/sav/ > total 0 > drwxr-xr-x 2 root root 6 Apr 6 14:40 . > drwxrwxrwt 10 root root 200 Apr 6 14:38 .. > > > > -- System Information: > Debian Release: 8.0 > APT prefers testing-proposed-updates > APT policy: (500, 'testing-proposed-updates'), (500, 'testing'), (1, 'experimental') > Architecture: amd64 (x86_64) > > Kernel: Linux 3.16.0-4-amd64 (SMP w/2 CPU cores) > Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) > Shell: /bin/sh linked to /bin/dash > Init: systemd (via /run/systemd/system) > > Versions of packages xfsprogs depends on: > ii libblkid1 2.25.2-6 > ii libc6 2.19-17 > ii libreadline5 5.2+dfsg-2 > ii libuuid1 2.25.2-6 > > xfsprogs recommends no packages. > > Versions of packages xfsprogs suggests: > ii acl 2.2.52-2 > pn attr > pn quota > pn xfsdump > > -- no debconf information > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@redhat.com Mon Apr 6 10:06:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B16797F50 for ; Mon, 6 Apr 2015 10:06:10 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4DC06AC002 for ; Mon, 6 Apr 2015 08:06:07 -0700 (PDT) X-ASG-Debug-ID: 1428332765-04bdf04f7f18c4d0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id s0KYm3qkggBeERAr (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 08:06:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 0CC1633A8AE; Mon, 6 Apr 2015 15:06:05 +0000 (UTC) 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 t36F63U2025889 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 6 Apr 2015 11:06:04 -0400 Message-ID: <5522A0DB.2010309@redhat.com> Date: Mon, 06 Apr 2015 10:06:03 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss , "F. Stoyan" , 782012@bugs.debian.org Subject: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Content-Transfer-Encoding: 8bit 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: 1428332766 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Do not allow xfs_db (or the xfs_admin frontend) to change the UUID of a V5 filesystem; this will cause UUID mismatches across the filesystem, and we currently have no mechanism to update them all. Changing only the superblock UUID makes all other metadata look invalid, and xfs_repair reacts by junking everything. Addresses-Debian-Bug: 782012 Reported-by: F. Stoyan Signed-off-by: Eric Sandeen --- diff --git a/db/sb.c b/db/sb.c index 6cb665d..f31f4a2 100644 --- a/db/sb.c +++ b/db/sb.c @@ -363,6 +363,18 @@ uuid_f( return 0; } + /* + * For now, changing the UUID of V5 superblock filesystems is + * not supported; we do not have the infrastructure to fix all + * other metadata when a new superblock UUID is generated. + */ + if (xfs_sb_version_hascrc(&mp->m_sb) && + strcasecmp(argv[1], "rewrite")) { + dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), + progname); + return 0; + } + if (!strcasecmp(argv[1], "generate")) { platform_uuid_generate(&uu); } else if (!strcasecmp(argv[1], "nil")) { From debbugs@buxtehude.debian.org Mon Apr 6 10:09:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 6F08E7F51 for ; Mon, 6 Apr 2015 10:09:11 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3FD40304032 for ; Mon, 6 Apr 2015 08:09:08 -0700 (PDT) X-ASG-Debug-ID: 1428332946-04bdf04f8018c670001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id F7q4GaXx9YrAGtXw (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 06 Apr 2015 08:09:06 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1Yf8e8-0006qh-GW; Mon, 06 Apr 2015 15:09:04 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#782012: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Reply-To: Eric Sandeen , 782012@bugs.debian.org X-ASG-Orig-Subj: Bug#782012: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Resent-From: Eric Sandeen Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Mon, 06 Apr 2015 15:09:01 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 782012 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: X-Debian-PR-Source: xfsprogs Received: via spool by 782012-submit@bugs.debian.org id=B782012.142833277225166 (code B ref 782012); Mon, 06 Apr 2015 15:09:01 +0000 Received: (at 782012) by bugs.debian.org; 6 Apr 2015 15:06:12 +0000 Received: from mx1.redhat.com ([209.132.183.28]) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1Yf8bM-0006X6-Ch for 782012@bugs.debian.org; Mon, 06 Apr 2015 15:06:12 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 0CC1633A8AE; Mon, 6 Apr 2015 15:06:05 +0000 (UTC) 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 t36F63U2025889 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 6 Apr 2015 11:06:04 -0400 Message-ID: <5522A0DB.2010309@redhat.com> Date: Mon, 06 Apr 2015 10:06:03 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss , "F. Stoyan" , 782012@bugs.debian.org Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1428332946 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17604 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Do not allow xfs_db (or the xfs_admin frontend) to change the UUID of a V5 filesystem; this will cause UUID mismatches across the filesystem, and we currently have no mechanism to update them all. Changing only the superblock UUID makes all other metadata look invalid, and xfs_repair reacts by junking everything. Addresses-Debian-Bug: 782012 Reported-by: F. Stoyan Signed-off-by: Eric Sandeen --- diff --git a/db/sb.c b/db/sb.c index 6cb665d..f31f4a2 100644 --- a/db/sb.c +++ b/db/sb.c @@ -363,6 +363,18 @@ uuid_f( return 0; } + /* + * For now, changing the UUID of V5 superblock filesystems is + * not supported; we do not have the infrastructure to fix all + * other metadata when a new superblock UUID is generated. + */ + if (xfs_sb_version_hascrc(&mp->m_sb) && + strcasecmp(argv[1], "rewrite")) { + dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), + progname); + return 0; + } + if (!strcasecmp(argv[1], "generate")) { platform_uuid_generate(&uu); } else if (!strcasecmp(argv[1], "nil")) { From sandeen@redhat.com Mon Apr 6 12:28:20 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B5D0D29DFB for ; Mon, 6 Apr 2015 12:28:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A500B8F8037 for ; Mon, 6 Apr 2015 10:28:17 -0700 (PDT) X-ASG-Debug-ID: 1428341295-04cb6c1cc7091a0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id y8speHYcKUfqAfZa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 10:28:16 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id BB0DBBBF5A for ; Mon, 6 Apr 2015 17:28:15 +0000 (UTC) Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36HSE8r014337 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 6 Apr 2015 13:28:15 -0400 Message-ID: <5522C22E.4000107@redhat.com> Date: Mon, 06 Apr 2015 12:28:14 -0500 From: Eric Sandeen MIME-Version: 1.0 To: xfs-oss Subject: [PATCH] xfsprogs: remove unreachable code in libxfs_inode_alloc Content-Type: text/plain; charset=utf-8 X-ASG-Orig-Subj: [PATCH] xfsprogs: remove unreachable code in libxfs_inode_alloc Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428341296 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This code does: if (!ialloc_context && !ip) return; // if !ip here, ialloc_context must be true if (ialloc_context) { ... if (!ip) error = ENOSPC; if (error) return error; // if !ip in this block we've returned } // so (!ip) cannot be true here if (!ip) error = ENOSPC; (cherry picked this one out of Coverity reports) Signed-off-by: Eric Sandeen --- diff --git a/libxfs/util.c b/libxfs/util.c index 6464a1b..49eb76d 100644 --- a/libxfs/util.c +++ b/libxfs/util.c @@ -700,8 +700,6 @@ libxfs_inode_alloc( if (error) return error; } - if (!ip) - error = ENOSPC; *ipp = ip; return error; From bfoster@redhat.com Mon Apr 6 12:48:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1CA7A29DFB for ; Mon, 6 Apr 2015 12:48:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id F143A304032 for ; Mon, 6 Apr 2015 10:48:47 -0700 (PDT) X-ASG-Debug-ID: 1428342526-04cbb056b20a9c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id SyN5UJOzKxBlSnT7 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 10:48:47 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id CCDDBA10C9; Mon, 6 Apr 2015 17:48:45 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36Hmj4W029019; Mon, 6 Apr 2015 13:48:45 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 1EB7B123969; Mon, 6 Apr 2015 13:48:44 -0400 (EDT) Date: Mon, 6 Apr 2015 13:48:43 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 1/8] xfs: mmap lock needs to be inside freeze protection Message-ID: <20150406174843.GA58965@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 1/8] xfs: mmap lock needs to be inside freeze protection References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-2-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-2-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428342527 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Mar 24, 2015 at 09:50:59PM +1100, Dave Chinner wrote: > From: Dave Chinner > > Lock ordering for the new mmap lock needs to be: > > mmap_sem > sb_start_pagefault > i_mmap_lock > page lock > > > Right now xfs_vm_page_mkwrite gets this the wrong way around, > While technically it cannot deadlock due to the current freeze > ordering, it's still a landmine that might explode if we change > anything in future. Hence we need to nest the locks correctly. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster > fs/xfs/xfs_file.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index dc5f609..a4c882e 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -1449,15 +1449,20 @@ xfs_filemap_page_mkwrite( > struct vm_fault *vmf) > { > struct xfs_inode *ip = XFS_I(vma->vm_file->f_mapping->host); > - int error; > + int ret; > > trace_xfs_filemap_page_mkwrite(ip); > > + sb_start_pagefault(VFS_I(ip)->i_sb); > + file_update_time(vma->vm_file); > xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > - error = block_page_mkwrite(vma, vmf, xfs_get_blocks); > + > + ret = __block_page_mkwrite(vma, vmf, xfs_get_blocks); > + > xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); > + sb_end_pagefault(VFS_I(ip)->i_sb); > > - return error; > + return block_page_mkwrite_return(ret); > } > > const struct file_operations xfs_file_operations = { > -- > 2.0.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Mon Apr 6 12:49:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5FC5A29E06 for ; Mon, 6 Apr 2015 12:49:02 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3F8D18F8037 for ; Mon, 6 Apr 2015 10:49:02 -0700 (PDT) X-ASG-Debug-ID: 1428342540-04cbb056b40aa00001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id I9aZS2TScgtDyis3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 10:49:01 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t36Hmt5T013698 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 Apr 2015 13:48:56 -0400 Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36Hmtdu021736; Mon, 6 Apr 2015 13:48:55 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id E1E0F123969; Mon, 6 Apr 2015 13:48:53 -0400 (EDT) Date: Mon, 6 Apr 2015 13:48:53 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 4/8] xfs: add DAX block zeroing support Message-ID: <20150406174853.GB58965@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 4/8] xfs: add DAX block zeroing support References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-5-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-5-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428342540 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Mar 24, 2015 at 09:51:02PM +1100, Dave Chinner wrote: > From: Dave Chinner > > Add initial support for DAX block zeroing operations to XFS. DAX > cannot use buffered IO through the page cache for zeroing, nor do we > need to issue IO for uncached block zeroing. In both cases, we can > simply call out to the dax block zeroing function. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_bmap_util.c | 23 +++++++++++++++++++---- > fs/xfs/xfs_file.c | 28 +++++++++++++++++----------- > 2 files changed, 36 insertions(+), 15 deletions(-) > > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c > index 1bd5393..d1fe432 100644 > --- a/fs/xfs/xfs_bmap_util.c > +++ b/fs/xfs/xfs_bmap_util.c > @@ -1133,14 +1133,29 @@ xfs_zero_remaining_bytes( > break; > ASSERT(imap.br_blockcount >= 1); > ASSERT(imap.br_startoff == offset_fsb); > + ASSERT(imap.br_startblock != DELAYSTARTBLOCK); > + > + if (imap.br_startblock == HOLESTARTBLOCK || > + imap.br_state == XFS_EXT_UNWRITTEN) { > + /* skip the entire extent */ > + lastoffset = XFS_FSB_TO_B(mp, imap.br_startoff + > + imap.br_blockcount) - 1; > + continue; > + } > + > lastoffset = XFS_FSB_TO_B(mp, imap.br_startoff + 1) - 1; > if (lastoffset > endoff) > lastoffset = endoff; > - if (imap.br_startblock == HOLESTARTBLOCK) > - continue; > - ASSERT(imap.br_startblock != DELAYSTARTBLOCK); > - if (imap.br_state == XFS_EXT_UNWRITTEN) > + > + /* DAX can just zero the backing device directly */ > + if (IS_DAX(VFS_I(ip))) { > + error = dax_zero_page_range(VFS_I(ip), offset, > + lastoffset - offset + 1, > + xfs_get_blocks_dax); > + if (error) > + return error; > continue; > + } > > error = xfs_buf_read_uncached(XFS_IS_REALTIME_INODE(ip) ? > mp->m_rtdev_targp : mp->m_ddev_targp, > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index a4c882e..94713c2 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -97,7 +97,8 @@ xfs_iozero( > { > struct page *page; > struct address_space *mapping; > - int status; > + int status = 0; > + > > mapping = VFS_I(ip)->i_mapping; > do { > @@ -109,20 +110,25 @@ xfs_iozero( > if (bytes > count) > bytes = count; > > - status = pagecache_write_begin(NULL, mapping, pos, bytes, > - AOP_FLAG_UNINTERRUPTIBLE, > - &page, &fsdata); > - if (status) > - break; > + if (IS_DAX(VFS_I(ip))) > + dax_zero_page_range(VFS_I(ip), pos, bytes, > + xfs_get_blocks_dax); xfs_get_blocks_dax() isn't defined yet. We should also probably error check here, yes? A nit... If we have to update this patch, it would be nice to update the comment above the function to adjust expectations with regard to the suggestion that this always allocates blocks. If I follow the dax codepath correctly, dax_zero_page_range() is a noop over holes or unwritten blocks (not that it seems to matter for current callers). > + else { > + status = pagecache_write_begin(NULL, mapping, pos, bytes, > + AOP_FLAG_UNINTERRUPTIBLE, > + &page, &fsdata); > + if (status) > + break; > > - zero_user(page, offset, bytes); > + zero_user(page, offset, bytes); > > - status = pagecache_write_end(NULL, mapping, pos, bytes, bytes, > - page, fsdata); > - WARN_ON(status <= 0); /* can't return less than zero! */ > + status = pagecache_write_end(NULL, mapping, pos, bytes, > + bytes, page, fsdata); > + WARN_ON(status <= 0); /* can't return less than zero! */ > + status = 0; > + } > pos += bytes; > count -= bytes; > - status = 0; > } while (count); > > return (-status); FWIW, that looks like a potential positive return code path (write_begin)... Brian > -- > 2.0.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Mon Apr 6 12:49:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5FE7829E0A for ; Mon, 6 Apr 2015 12:49:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 375418F8050 for ; Mon, 6 Apr 2015 10:49:07 -0700 (PDT) X-ASG-Debug-ID: 1428342545-04cb6c1cc809bb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ihdXm4W5sOHvz40I (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 10:49:06 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t36Hn2Wt015640 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 Apr 2015 13:49:02 -0400 Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36Hn2Ce024374; Mon, 6 Apr 2015 13:49:02 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id F0792123969; Mon, 6 Apr 2015 13:49:00 -0400 (EDT) Date: Mon, 6 Apr 2015 13:49:00 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 5/8] xfs: add DAX file operations support Message-ID: <20150406174900.GC58965@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 5/8] xfs: add DAX file operations support References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-6-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-6-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428342545 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Mar 24, 2015 at 09:51:03PM +1100, Dave Chinner wrote: > From: Dave Chinner > > Add the initial support for DAX file operations to XFS. This > includes the necessary block allocation and mmap page fault hooks > for DAX to function. > > Note: we specifically have to disable splice_read/write from > occurring because they are dependent on usingthe page cache for > correct operation. We have no page cache for DAX, so we need to > disable them completely on DAX inodes. > Looks like Boaz already pointed out this required an update wrt to splice... > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_aops.c | 73 ++++++++++++++++++++++++++++++++-- > fs/xfs/xfs_aops.h | 7 +++- > fs/xfs/xfs_file.c | 116 ++++++++++++++++++++++++++++++++---------------------- > 3 files changed, 143 insertions(+), 53 deletions(-) > > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c > index 3a9b7a1..3fc5052 100644 > --- a/fs/xfs/xfs_aops.c > +++ b/fs/xfs/xfs_aops.c > @@ -1233,13 +1233,64 @@ xfs_vm_releasepage( > return try_to_free_buffers(page); > } > > +/* > + * For DAX we need a mapping buffer callback for unwritten extent conversion > + * when page faults allocation blocks and then zero them. s/allocation/allocate/ > + */ > +#ifdef CONFIG_FS_DAX > +static struct xfs_ioend * > +xfs_dax_alloc_ioend( > + struct inode *inode, > + xfs_off_t offset, > + ssize_t size) > +{ > + struct xfs_ioend *ioend; > + > + ASSERT(IS_DAX(inode)); > + ioend = xfs_alloc_ioend(inode, XFS_IO_UNWRITTEN); > + ioend->io_offset = offset; > + ioend->io_size = size; > + return ioend; > +} > + > +void > +xfs_get_blocks_dax_complete( > + struct buffer_head *bh, > + int uptodate) > +{ > + struct xfs_ioend *ioend = bh->b_private; > + struct xfs_inode *ip = XFS_I(ioend->io_inode); > + int error; > + > + ASSERT(IS_DAX(ioend->io_inode)); > + > + /* if there was an error zeroing, then don't convert it */ > + if (!uptodate) > + goto out_free; > + Hmm, the error handling seems a bit off here. I'm new to the mmap paths so I could easily be missing something. Anyways, this uptodate val is hardcoded to 1 down in __dax_mkwrite(). This function is only called on !error, however, which seems to make this error handling superfluous. If I am following that correctly, who is going to free the ioend if an error does occur? Brian > + error = xfs_iomap_write_unwritten(ip, ioend->io_offset, ioend->io_size); > + if (error) > + xfs_warn(ip->i_mount, > +"%s: conversion failed, ino 0x%llx, offset 0x%llx, len 0x%lx, error %d\n", > + __func__, ip->i_ino, ioend->io_offset, > + ioend->io_size, error); > +out_free: > + mempool_free(ioend, xfs_ioend_pool); > + > +} > +#else > +#define xfs_dax_alloc_ioend(i,o,s) NULL > +void xfs_get_blocks_dax_complete(struct buffer_head *bh, int uptodate) { } > +#endif > + > STATIC int > __xfs_get_blocks( > struct inode *inode, > sector_t iblock, > struct buffer_head *bh_result, > int create, > - int direct) > + bool direct, > + bool clear) > { > struct xfs_inode *ip = XFS_I(inode); > struct xfs_mount *mp = ip->i_mount; > @@ -1304,6 +1355,7 @@ __xfs_get_blocks( > if (error) > return error; > new = 1; > + > } else { > /* > * Delalloc reservations do not require a transaction, > @@ -1340,7 +1392,10 @@ __xfs_get_blocks( > if (create || !ISUNWRITTEN(&imap)) > xfs_map_buffer(inode, bh_result, &imap, offset); > if (create && ISUNWRITTEN(&imap)) { > - if (direct) { > + if (clear) { > + bh_result->b_private = xfs_dax_alloc_ioend( > + inode, offset, size); > + } else if (direct) { > bh_result->b_private = inode; > set_buffer_defer_completion(bh_result); > } > @@ -1425,7 +1480,7 @@ xfs_get_blocks( > struct buffer_head *bh_result, > int create) > { > - return __xfs_get_blocks(inode, iblock, bh_result, create, 0); > + return __xfs_get_blocks(inode, iblock, bh_result, create, false, false); > } > > STATIC int > @@ -1435,7 +1490,17 @@ xfs_get_blocks_direct( > struct buffer_head *bh_result, > int create) > { > - return __xfs_get_blocks(inode, iblock, bh_result, create, 1); > + return __xfs_get_blocks(inode, iblock, bh_result, create, true, false); > +} > + > +int > +xfs_get_blocks_dax( > + struct inode *inode, > + sector_t iblock, > + struct buffer_head *bh_result, > + int create) > +{ > + return __xfs_get_blocks(inode, iblock, bh_result, create, true, true); > } > > /* > diff --git a/fs/xfs/xfs_aops.h b/fs/xfs/xfs_aops.h > index ac644e0..7c6fb3f 100644 > --- a/fs/xfs/xfs_aops.h > +++ b/fs/xfs/xfs_aops.h > @@ -53,7 +53,12 @@ typedef struct xfs_ioend { > } xfs_ioend_t; > > extern const struct address_space_operations xfs_address_space_operations; > -extern int xfs_get_blocks(struct inode *, sector_t, struct buffer_head *, int); > + > +int xfs_get_blocks(struct inode *inode, sector_t offset, > + struct buffer_head *map_bh, int create); > +int xfs_get_blocks_dax(struct inode *inode, sector_t offset, > + struct buffer_head *map_bh, int create); > +void xfs_get_blocks_dax_complete(struct buffer_head *bh, int uptodate); > > extern void xfs_count_page_state(struct page *, int *, int *); > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index 94713c2..8017175 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -385,7 +385,11 @@ xfs_file_splice_read( > > trace_xfs_file_splice_read(ip, count, *ppos, ioflags); > > - ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); > + /* for dax, we need to avoid the page cache */ > + if (IS_DAX(VFS_I(ip))) > + ret = default_file_splice_read(infilp, ppos, pipe, count, flags); > + else > + ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); > if (ret > 0) > XFS_STATS_ADD(xs_read_bytes, ret); > > @@ -654,7 +658,7 @@ xfs_file_dio_aio_write( > mp->m_rtdev_targp : mp->m_ddev_targp; > > /* DIO must be aligned to device logical sector size */ > - if ((pos | count) & target->bt_logical_sectormask) > + if (!IS_DAX(inode) && (pos | count) & target->bt_logical_sectormask) > return -EINVAL; > > /* "unaligned" here means not aligned to a filesystem block */ > @@ -724,8 +728,11 @@ xfs_file_dio_aio_write( > out: > xfs_rw_iunlock(ip, iolock); > > - /* No fallback to buffered IO on errors for XFS. */ > - ASSERT(ret < 0 || ret == count); > + /* > + * No fallback to buffered IO on errors for XFS. DAX can result in > + * partial writes, but direct IO will either complete fully or fail. > + */ > + ASSERT(ret < 0 || ret == count || IS_DAX(VFS_I(ip))); > return ret; > } > > @@ -810,7 +817,7 @@ xfs_file_write_iter( > if (XFS_FORCED_SHUTDOWN(ip->i_mount)) > return -EIO; > > - if (unlikely(file->f_flags & O_DIRECT)) > + if ((file->f_flags & O_DIRECT) || IS_DAX(inode)) > ret = xfs_file_dio_aio_write(iocb, from); > else > ret = xfs_file_buffered_aio_write(iocb, from); > @@ -1031,17 +1038,6 @@ xfs_file_readdir( > return xfs_readdir(ip, ctx, bufsize); > } > > -STATIC int > -xfs_file_mmap( > - struct file *filp, > - struct vm_area_struct *vma) > -{ > - vma->vm_ops = &xfs_file_vm_ops; > - > - file_accessed(filp); > - return 0; > -} > - > /* > * This type is designed to indicate the type of offset we would like > * to search from page cache for xfs_seek_hole_data(). > @@ -1422,26 +1418,11 @@ xfs_file_llseek( > * ordering of: > * > * mmap_sem (MM) > - * i_mmap_lock (XFS - truncate serialisation) > - * page_lock (MM) > - * i_lock (XFS - extent map serialisation) > + * sb_start_pagefault(vfs, freeze) > + * i_mmap_lock (XFS - truncate serialisation) > + * page_lock (MM) > + * i_lock (XFS - extent map serialisation) > */ > -STATIC int > -xfs_filemap_fault( > - struct vm_area_struct *vma, > - struct vm_fault *vmf) > -{ > - struct xfs_inode *ip = XFS_I(vma->vm_file->f_mapping->host); > - int error; > - > - trace_xfs_filemap_fault(ip); > - > - xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > - error = filemap_fault(vma, vmf); > - xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); > - > - return error; > -} > > /* > * mmap()d file has taken write protection fault and is being made writable. We > @@ -1454,21 +1435,66 @@ xfs_filemap_page_mkwrite( > struct vm_area_struct *vma, > struct vm_fault *vmf) > { > - struct xfs_inode *ip = XFS_I(vma->vm_file->f_mapping->host); > + struct inode *inode = file_inode(vma->vm_file); > int ret; > > - trace_xfs_filemap_page_mkwrite(ip); > + trace_xfs_filemap_page_mkwrite(XFS_I(inode)); > > - sb_start_pagefault(VFS_I(ip)->i_sb); > + sb_start_pagefault(inode->i_sb); > file_update_time(vma->vm_file); > - xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > + xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > + > + if (IS_DAX(inode)) { > + ret = __dax_mkwrite(vma, vmf, xfs_get_blocks_dax, > + xfs_get_blocks_dax_complete); > + } else { > + ret = __block_page_mkwrite(vma, vmf, xfs_get_blocks); > + ret = block_page_mkwrite_return(ret); > + } > + > + xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED); > + sb_end_pagefault(inode->i_sb); > + > + return ret; > +} > + > +STATIC int > +xfs_filemap_fault( > + struct vm_area_struct *vma, > + struct vm_fault *vmf) > +{ > + struct xfs_inode *ip = XFS_I(file_inode(vma->vm_file)); > + int ret; > > - ret = __block_page_mkwrite(vma, vmf, xfs_get_blocks); > + trace_xfs_filemap_fault(ip); > + > + /* DAX can shortcut the normal fault path on write faults! */ > + if ((vmf->flags & FAULT_FLAG_WRITE) && IS_DAX(VFS_I(ip))) > + return xfs_filemap_page_mkwrite(vma, vmf); > > + xfs_ilock(ip, XFS_MMAPLOCK_SHARED); > + ret = filemap_fault(vma, vmf); > xfs_iunlock(ip, XFS_MMAPLOCK_SHARED); > - sb_end_pagefault(VFS_I(ip)->i_sb); > > - return block_page_mkwrite_return(ret); > + return ret; > +} > + > +static const struct vm_operations_struct xfs_file_vm_ops = { > + .fault = xfs_filemap_fault, > + .map_pages = filemap_map_pages, > + .page_mkwrite = xfs_filemap_page_mkwrite, > +}; > + > +STATIC int > +xfs_file_mmap( > + struct file *filp, > + struct vm_area_struct *vma) > +{ > + file_accessed(filp); > + vma->vm_ops = &xfs_file_vm_ops; > + if (IS_DAX(file_inode(filp))) > + vma->vm_flags |= VM_MIXEDMAP; > + return 0; > } > > const struct file_operations xfs_file_operations = { > @@ -1501,9 +1527,3 @@ const struct file_operations xfs_dir_file_operations = { > #endif > .fsync = xfs_dir_fsync, > }; > - > -static const struct vm_operations_struct xfs_file_vm_ops = { > - .fault = xfs_filemap_fault, > - .map_pages = filemap_map_pages, > - .page_mkwrite = xfs_filemap_page_mkwrite, > -}; > -- > 2.0.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Mon Apr 6 12:49:10 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3E08929E0E for ; Mon, 6 Apr 2015 12:49:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2D5E68F8037 for ; Mon, 6 Apr 2015 10:49:10 -0700 (PDT) X-ASG-Debug-ID: 1428342548-04cbb056b20aa00001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id cVSX7GQ0zpzyLMPs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 10:49:09 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id CF340AB107; Mon, 6 Apr 2015 17:49:08 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36Hn8si004503; Mon, 6 Apr 2015 13:49:08 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 4C0FE123969; Mon, 6 Apr 2015 13:49:07 -0400 (EDT) Date: Mon, 6 Apr 2015 13:49:07 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 6/8] xfs: add DAX truncate support Message-ID: <20150406174906.GD58965@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 6/8] xfs: add DAX truncate support References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-7-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-7-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428342549 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Mar 24, 2015 at 09:51:04PM +1100, Dave Chinner wrote: > From: Dave Chinner > > When we truncate a DAX file, we need to call through the DAX page > truncation path rather than through block_truncate_page() so that > mappings and block zeroing are all handled correctly. Otherwise, > truncate does not need to change. > > Signed-off-by: Dave Chinner > --- Reviewed-by: Brian Foster > fs/xfs/xfs_iops.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index 8b9e688..9ca5352 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -851,7 +851,11 @@ xfs_setattr_size( > * to hope that the caller sees ENOMEM and retries the truncate > * operation. > */ > - error = block_truncate_page(inode->i_mapping, newsize, xfs_get_blocks); > + if (IS_DAX(inode)) > + error = dax_truncate_page(inode, newsize, xfs_get_blocks_dax); > + else > + error = block_truncate_page(inode->i_mapping, newsize, > + xfs_get_blocks); > if (error) > return error; > truncate_setsize(inode, newsize); > -- > 2.0.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Mon Apr 6 12:49:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E9F9629DFB for ; Mon, 6 Apr 2015 12:49:22 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 86A2DAC001 for ; Mon, 6 Apr 2015 10:49:19 -0700 (PDT) X-ASG-Debug-ID: 1428342558-04bdf0632010180001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jqjFiu1pSCjTK7xC (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 10:49:18 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-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 t36HnFkm015678 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 Apr 2015 13:49:15 -0400 Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36HnFg4021851; Mon, 6 Apr 2015 13:49:15 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 42832123969; Mon, 6 Apr 2015 13:49:14 -0400 (EDT) Date: Mon, 6 Apr 2015 13:49:14 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 7/8] xfs: add DAX IO path support Message-ID: <20150406174913.GE58965@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 7/8] xfs: add DAX IO path support References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-8-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-8-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428342558 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Mar 24, 2015 at 09:51:05PM +1100, Dave Chinner wrote: > From: Dave Chinner > > DAX does not do buffered IO (can't buffer direct access!) and hence > all read/write IO is vectored through the direct IO path. Hence we > need to add the DAX IO path callouts to the direct IO > infrastructure. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_aops.c | 35 +++++++++++++++++++++++++++-------- > 1 file changed, 27 insertions(+), 8 deletions(-) > > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c > index 3fc5052..97979e9 100644 > --- a/fs/xfs/xfs_aops.c > +++ b/fs/xfs/xfs_aops.c > @@ -1559,6 +1559,30 @@ xfs_end_io_direct_write( > } > } > > +static inline ssize_t > +xfs_vm_do_dio( > + struct inode *inode, > + int rw, > + struct kiocb *iocb, > + struct iov_iter *iter, > + loff_t offset, > + void (*endio)(struct kiocb *iocb, > + loff_t offset, > + ssize_t size, > + void *private), > + int flags) > +{ > + struct block_device *bdev; > + > + if (IS_DAX(inode)) > + return dax_do_io(rw, iocb, inode, iter, offset, > + xfs_get_blocks_direct, endio, 0); > + I assume this is supposed to be get_blocks_direct and not get_blocks_dax, based on the I/O codepath. The naming is starting to get a little confusing though. xfs_get_blocks_dax() implies to me that it's for any DAX I/O, but we only appear to use it internally for truncate/zeroing/mmap and such. Alas, I can't think of a better name atm and the code seems Ok to me: Reviewed-by: Brian Foster ... but a comment somewhere around here and/or at the xfs_get_blocks_dax() function would be helpful. Brian > + bdev = xfs_find_bdev_for_inode(inode); > + return __blockdev_direct_IO(rw, iocb, inode, bdev, iter, offset, > + xfs_get_blocks_direct, endio, NULL, flags); > +} > + > STATIC ssize_t > xfs_vm_direct_IO( > int rw, > @@ -1567,17 +1591,12 @@ xfs_vm_direct_IO( > loff_t offset) > { > struct inode *inode = iocb->ki_filp->f_mapping->host; > - struct block_device *bdev = xfs_find_bdev_for_inode(inode); > > if (rw & WRITE) { > - return __blockdev_direct_IO(rw, iocb, inode, bdev, iter, > - offset, xfs_get_blocks_direct, > - xfs_end_io_direct_write, NULL, > - DIO_ASYNC_EXTEND); > + return xfs_vm_do_dio(inode, rw, iocb, iter, offset, > + xfs_end_io_direct_write, DIO_ASYNC_EXTEND); > } > - return __blockdev_direct_IO(rw, iocb, inode, bdev, iter, > - offset, xfs_get_blocks_direct, > - NULL, NULL, 0); > + return xfs_vm_do_dio(inode, rw, iocb, iter, offset, NULL, 0); > } > > /* > -- > 2.0.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Mon Apr 6 14:00:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 423DF29E01 for ; Mon, 6 Apr 2015 14:00:37 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id AC475AC001 for ; Mon, 6 Apr 2015 12:00:36 -0700 (PDT) X-ASG-Debug-ID: 1428346834-04cbb056b210510001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id OEnQNLRjCmIqPfSi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 06 Apr 2015 12:00:35 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 67EB98E3D2; Mon, 6 Apr 2015 19:00:34 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t36J0X7B004020; Mon, 6 Apr 2015 15:00:33 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 00571123969; Mon, 6 Apr 2015 15:00:31 -0400 (EDT) Date: Mon, 6 Apr 2015 15:00:31 -0400 From: Brian Foster To: Dave Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, willy@linux.intel.com, jack@suse.cz Subject: Re: [PATCH 8/8] xfs: add initial DAX support Message-ID: <20150406190031.GF58965@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH 8/8] xfs: add initial DAX support References: <1427194266-2885-1-git-send-email-david@fromorbit.com> <1427194266-2885-9-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427194266-2885-9-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428346835 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Tue, Mar 24, 2015 at 09:51:06PM +1100, Dave Chinner wrote: > From: Dave Chinner > > Add initial DAX support to XFS. To do this we need a new mount > option to turn DAX on filesystem, and we need to propagate thi into > the inode flags whenever an inode is instantiated so that the > per-inode checks throughout the code Do The Right Thing. > > There are still some things remaining to be done: > > - needs per-inode flags to mark inodes as DAX enabled, and > an inheritance flag to enable automatic filesystem > propagation of the property > - fails occasionally with zero length writes instead of > ENOSPC errors, so error propagation inside/from the DAX > code need work > - occasionally creates two extents rather than a single > larger extent like non-dax filesystems. > - much more testing > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_iops.c | 24 ++++++++++++------------ > fs/xfs/xfs_mount.h | 2 ++ > fs/xfs/xfs_super.c | 25 +++++++++++++++++++++++-- > 3 files changed, 37 insertions(+), 14 deletions(-) > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index 9ca5352..695d857 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -1195,22 +1195,22 @@ xfs_diflags_to_iflags( > struct inode *inode, > struct xfs_inode *ip) > { > - if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) > + uint16_t flags = ip->i_d.di_flags; > + > + inode->i_flags &= ~(S_IMMUTABLE | S_APPEND | S_SYNC | > + S_NOATIME | S_DAX); > + > + if (flags & XFS_DIFLAG_IMMUTABLE) > inode->i_flags |= S_IMMUTABLE; > - else > - inode->i_flags &= ~S_IMMUTABLE; > - if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) > + if (flags & XFS_DIFLAG_APPEND) > inode->i_flags |= S_APPEND; > - else > - inode->i_flags &= ~S_APPEND; > - if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) > + if (flags & XFS_DIFLAG_SYNC) > inode->i_flags |= S_SYNC; > - else > - inode->i_flags &= ~S_SYNC; > - if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) > + if (flags & XFS_DIFLAG_NOATIME) > inode->i_flags |= S_NOATIME; > - else > - inode->i_flags &= ~S_NOATIME; > + /* XXX: Also needs an on-disk per inode flag! */ > + if (ip->i_mount->m_flags & XFS_MOUNT_DAX) > + inode->i_flags |= S_DAX; This is a temporary hack until we have some kind of inode flag inheritance mechanism as mentioned in the commit log, correct? > } > > /* > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index 8c995a2..cd44e88 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -179,6 +179,8 @@ typedef struct xfs_mount { > allocator */ > #define XFS_MOUNT_NOATTR2 (1ULL << 25) /* disable use of attr2 format */ > > +#define XFS_MOUNT_DAX (1ULL << 62) /* TEST ONLY! */ > + > > /* > * Default minimum read and write sizes. > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 3ad0b17..0f26d7a 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -112,6 +112,8 @@ static struct xfs_kobj xfs_dbg_kobj; /* global debug sysfs attrs */ > #define MNTOPT_DISCARD "discard" /* Discard unused blocks */ > #define MNTOPT_NODISCARD "nodiscard" /* Do not discard unused blocks */ > > +#define MNTOPT_DAX "dax" /* Enable direct access to bdev pages */ > + > /* > * Table driven mount option parser. > * > @@ -363,6 +365,10 @@ xfs_parseargs( > mp->m_flags |= XFS_MOUNT_DISCARD; > } else if (!strcmp(this_char, MNTOPT_NODISCARD)) { > mp->m_flags &= ~XFS_MOUNT_DISCARD; > +#ifdef CONFIG_FS_DAX > + } else if (!strcmp(this_char, MNTOPT_DAX)) { > + mp->m_flags |= XFS_MOUNT_DAX; > +#endif Something like what we do for !CONFIG_XFS_QUOTA just a few lines below might be a bit nicer. Then we can have a slightly more useful error message. > } else { > xfs_warn(mp, "unknown mount option [%s].", this_char); > return -EINVAL; > @@ -452,8 +458,8 @@ done: > } > > struct proc_xfs_info { > - int flag; > - char *str; > + uint64_t flag; > + char *str; > }; > > STATIC int > @@ -474,6 +480,7 @@ xfs_showargs( > { XFS_MOUNT_GRPID, "," MNTOPT_GRPID }, > { XFS_MOUNT_DISCARD, "," MNTOPT_DISCARD }, > { XFS_MOUNT_SMALL_INUMS, "," MNTOPT_32BITINODE }, > + { XFS_MOUNT_DAX, "," MNTOPT_DAX }, > { 0, NULL } > }; > static struct proc_xfs_info xfs_info_unset[] = { > @@ -1501,6 +1508,20 @@ xfs_fs_fill_super( > if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5) > sb->s_flags |= MS_I_VERSION; > > + if (mp->m_flags & XFS_MOUNT_DAX) { > + xfs_warn(mp, > + "DAX enabled. Warning: EXPERIMENTAL, use at your own risk"); > + if (sb->s_blocksize != PAGE_SIZE) { > + xfs_alert(mp, > + "Filesystem block size invalid for DAX Turning DAX off."); > + mp->m_flags &= ~XFS_MOUNT_DAX; > + } else if (!sb->s_bdev->bd_disk->fops->direct_access) { > + xfs_alert(mp, > + "Block device does not support DAX Turning DAX off."); > + mp->m_flags &= ~XFS_MOUNT_DAX; > + } Missing period in both error messages above. ;) Brian > + } > + > error = xfs_mountfs(mp); > if (error) > goto out_filestream_unmount; > -- > 2.0.0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sage@redhat.com Mon Apr 6 17:43:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5F18B29E01 for ; Mon, 6 Apr 2015 17:43:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id E02A1AC003 for ; Mon, 6 Apr 2015 15:43:52 -0700 (PDT) X-ASG-Debug-ID: 1428360231-04cb6c1cc922ff0001-NocioJ Received: from cobra.newdream.net (cobra.newdream.net [66.33.216.30]) by cuda.sgi.com with ESMTP id aXFCobA2st8GdFp8 for ; Mon, 06 Apr 2015 15:43:51 -0700 (PDT) X-Barracuda-Envelope-From: sage@redhat.com X-Barracuda-Apparent-Source-IP: 66.33.216.30 Received: from gnit.front.sepia.ceph.com (cpe-76-95-230-100.socal.res.rr.com [76.95.230.100]) by cobra.newdream.net (Postfix) with ESMTPA id B7DF98044E; Mon, 6 Apr 2015 15:43:50 -0700 (PDT) From: Sage Weil To: xfs@oss.sgi.com Cc: Sage Weil Subject: [PATCH] libhandle: add fd_to_handle to handle.h Date: Mon, 6 Apr 2015 15:43:01 -0700 X-ASG-Orig-Subj: [PATCH] libhandle: add fd_to_handle to handle.h Message-Id: <1428360181-10401-1-git-send-email-sage@redhat.com> X-Mailer: git-send-email 1.7.9.5 X-Barracuda-Connect: cobra.newdream.net[66.33.216.30] X-Barracuda-Start-Time: 1428360231 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17618 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- It's on the man page but strangely missing from the header. Signed-off-by: Sage Weil --- include/handle.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/handle.h b/include/handle.h index b211a2f..ee69a11 100644 --- a/include/handle.h +++ b/include/handle.h @@ -28,6 +28,7 @@ struct parent; extern int path_to_handle (char *__path, void **__hanp, size_t *__hlen); extern int path_to_fshandle (char *__path, void **__fshanp, size_t *__fshlen); +extern int fd_to_handle (int fd, void **hanp, size_t *hlen); extern int handle_to_fshandle (void *__hanp, size_t __hlen, void **__fshanp, size_t *__fshlen); extern void free_handle (void *__hanp, size_t __hlen); -- 1.7.9.5 From david@fromorbit.com Mon Apr 6 18:43:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CF9D429E01 for ; Mon, 6 Apr 2015 18:43:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6B172AC002 for ; Mon, 6 Apr 2015 16:43:00 -0700 (PDT) X-ASG-Debug-ID: 1428363777-04cbb056b4254d0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id QDHpHmZVOIYtQz2y for ; Mon, 06 Apr 2015 16:42:58 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DbBgB5GSNV/8+HLHlcgwiBLoxSpTkGmR8CAgEBAoEhTQEBAQEBAX6EHwEFOhwjEAgDGAklDwUlAyETiC7MCAEBCAIBHxiFd4UahHkHgxeBFgWabItOiQcihAEsMYJDAQEB Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 07 Apr 2015 09:12:56 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YfGfD-0000EA-Ao; Tue, 07 Apr 2015 09:42:43 +1000 Date: Tue, 7 Apr 2015 09:42:43 +1000 From: Dave Chinner To: Sage Weil Cc: xfs@oss.sgi.com Subject: Re: [PATCH] libhandle: add fd_to_handle to handle.h Message-ID: <20150406234243.GA15810@dastard> X-ASG-Orig-Subj: Re: [PATCH] libhandle: add fd_to_handle to handle.h References: <1428360181-10401-1-git-send-email-sage@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1428360181-10401-1-git-send-email-sage@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: 1428363777 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17622 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Apr 06, 2015 at 03:43:01PM -0700, Sage Weil wrote: > It's on the man page but strangely missing from the header. > > Signed-off-by: Sage Weil It was missed when the function was merged from the Irix userspace xfs-cmds code base back in 2005. Nobody has noticed since then, so clearly it is a well used function. ;) Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Mon Apr 6 19:03:45 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0F7F129E01 for ; Mon, 6 Apr 2015 19:03:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id E40D2304032 for ; Mon, 6 Apr 2015 17:03:41 -0700 (PDT) X-ASG-Debug-ID: 1428365014-04cb6c1cc926db0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id jpdguMoar3O0uPQr for ; Mon, 06 Apr 2015 17:03:35 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DTBgBOHiNV/8+HLHlcgwiBLrILBpkfAgIBAQKBIU0BAQEBAQF+hB8BBScTHCMQCAMYCSUPBSUDIROILswXAQEBBwIBHxiFd4UahHkHgxeBFgEEhh6UTotOiQcihAEsMYJDAQEB Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 07 Apr 2015 09:33:16 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YfGyt-0000G6-PE; Tue, 07 Apr 2015 10:03:03 +1000 Date: Tue, 7 Apr 2015 10:03:03 +1000 From: Dave Chinner To: "Darrick J. Wong" Cc: xfs@oss.sgi.com Subject: Re: [RFC 1/2] xfs_db: enable blockget for v5 filesystems Message-ID: <20150407000303.GB15810@dastard> X-ASG-Orig-Subj: Re: [RFC 1/2] xfs_db: enable blockget for v5 filesystems References: <20150318232356.GC24608@birch.djwong.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150318232356.GC24608@birch.djwong.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1428365015 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17623 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Wed, Mar 18, 2015 at 04:23:56PM -0700, Darrick J. Wong wrote: > Plumb in the necessary magic number checks and other fixups required > to handle v5 filesystems. This requires Eric Sandeen's earlier patch > rollup. > > Signed-off-by: Darrick J. Wong > --- > db/check.c | 52 +++++++++++++++++++++++++++++++++++++++------------- > 1 file changed, 39 insertions(+), 13 deletions(-) > > diff --git a/db/check.c b/db/check.c > index 4fd9fd0..767022f 100644 > --- a/db/check.c > +++ b/db/check.c > @@ -799,8 +799,6 @@ blockget_f( > * filters out, or we need to actually do the work to make check support > * crc enabled filesystems. > */ > - if (xfs_sb_version_hascrc(&mp->m_sb)) > - return 0; This causes check to run from xfstests on v5 filesystems, which then throws errors everywhere and fails every test. A more nuanced enablement of blockget is required here.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From Sales.199@papercone.vicp.cc Mon Apr 6 22:32:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.2 required=5.0 tests=DEAR_SOMETHING,HTML_MESSAGE, MIME_HTML_ONLY autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5897A29E01 for ; Mon, 6 Apr 2015 22:32:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 42C988F8059 for ; Mon, 6 Apr 2015 20:32:10 -0700 (PDT) X-ASG-Debug-ID: 1428377525-04cbb056b230d50001-NocioJ Received: from papercone.vicp.cc ([106.5.144.175]) by cuda.sgi.com with SMTP id EO2KwrTgHCoLZW1f for ; Mon, 06 Apr 2015 20:32:06 -0700 (PDT) X-Barracuda-Envelope-From: Sales.199@papercone.vicp.cc X-Barracuda-Apparent-Source-IP: 106.5.144.175 Received: from ASUS-PC[127.0.0.1] by ASUS-PC[127.0.0.1] (SMTPD32); Tue, 7 Apr 2015 11:31:23 +0800 From: "Sales.199@papercone.vicp.cc" Subject: Paper Cone Special in Chemical Fiber To: "xfs" X-ASG-Orig-Subj: Paper Cone Special in Chemical Fiber MIME-Version: 1.0 Sender: Sales.199@papercone.vicp.cc Reply-To: julie@ms-papercone.com Date: Tue, 7 Apr 2015 11:31:23 +0800 X-Priority: 3 X-DNSRBL: X-MAIL: PS-MAM01.PSheng.com q9QDEkb8018968 X-Mailer: Foxmail 7.0.1.91[cn] Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 8bit Content-Disposition: inline X-Barracuda-Connect: UNKNOWN[106.5.144.175] X-Barracuda-Start-Time: 1428377526 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.24 X-Barracuda-Spam-Status: No, SCORE=0.24 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE, MIME_HTML_ONLY, MISSING_MID, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17626 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.14 MISSING_MID Missing Message-Id: header 0.00 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS Message-Id: <20150407033210.625D4106C572@cuda.sgi.com>

Dear Sir or Madam,

Good morning.

Glad to hear that you're in the textile industry.

This is Julie from China. We specialized in textile paper cones for 15 years, with the product covers 5°57″, 5°32″, 3°30″, 4°20″, 9°15″, and hope to find a way to cooperate with you!

Please find the pictures with models and different packaging in attachment. An Pakistan client purchased 3,600,000 pcs 5°57″paper cones per month. I'd like to see if it's suitable for other countries now.

FREE SAMPLES can be sent on request. Call me, let's talk more!

Thank you.

Best Regards

Julie

Plant: Nanchang Ming Sheng Textile Audio Supplies CO., Ltd.

Add: B2-B3 Building Luoting Economic Development Zone, Wanli  District, NanChang City, JiangXi Province.
Tel: +86-0791-83971193

Office: MingSheng Import/Export Department
Add: Room 1015 Huizhan Road 999#,Honggutan District, Nanchang Jiangxi Province
Tel: +86-17770081019   Fax: +86-0791-83851019
Mobile: +86-13647917219
Email: julie@ms-papercone.com
Skype: julie131019
WhatsApp: +86-13647917219

From bfoster@redhat.com Tue Apr 7 08:37:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1E0217F63 for ; Tue, 7 Apr 2015 08:37:25 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0D93E3041EC for ; Tue, 7 Apr 2015 06:37:24 -0700 (PDT) X-ASG-Debug-ID: 1428413840-04cbb056b161540001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id n7sN3gNIBlseoR3Y (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 06:37:21 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 5580838590E for ; Tue, 7 Apr 2015 13:37:20 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t37DbJYB031262; Tue, 7 Apr 2015 09:37:20 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 101F4123969; Tue, 7 Apr 2015 09:37:19 -0400 (EDT) Date: Tue, 7 Apr 2015 09:37:19 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] xfsprogs: remove unreachable code in libxfs_inode_alloc Message-ID: <20150407133718.GF23208@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: remove unreachable code in libxfs_inode_alloc References: <5522C22E.4000107@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5522C22E.4000107@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428413841 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Apr 06, 2015 at 12:28:14PM -0500, Eric Sandeen wrote: > This code does: > > if (!ialloc_context && !ip) > return; > > // if !ip here, ialloc_context must be true > > if (ialloc_context) { > ... > if (!ip) > error = ENOSPC; > if (error) > return error; > // if !ip in this block we've returned > } > > // so (!ip) cannot be true here > if (!ip) > error = ENOSPC; > > (cherry picked this one out of Coverity reports) > > Signed-off-by: Eric Sandeen > --- Reviewed-by: Brian Foster > > diff --git a/libxfs/util.c b/libxfs/util.c > index 6464a1b..49eb76d 100644 > --- a/libxfs/util.c > +++ b/libxfs/util.c > @@ -700,8 +700,6 @@ libxfs_inode_alloc( > if (error) > return error; > } > - if (!ip) > - error = ENOSPC; > > *ipp = ip; > return error; > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From bfoster@redhat.com Tue Apr 7 08:37:25 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 283557F66 for ; Tue, 7 Apr 2015 08:37:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1793F3041F0 for ; Tue, 7 Apr 2015 06:37:22 -0700 (PDT) X-ASG-Debug-ID: 1428413840-04cb6c1cc9568f0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id aYk3pIL2NHCUd0ox (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 06:37:21 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-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 t37DbGrH003602 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 7 Apr 2015 09:37:17 -0400 Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t37DbFJl017820; Tue, 7 Apr 2015 09:37:16 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id ED4A6123969; Tue, 7 Apr 2015 09:37:14 -0400 (EDT) Date: Tue, 7 Apr 2015 09:37:14 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs-oss , "F. Stoyan" , 782012@bugs.debian.org Subject: Re: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Message-ID: <20150407133714.GE23208@bfoster.bfoster> X-ASG-Orig-Subj: Re: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems References: <5522A0DB.2010309@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5522A0DB.2010309@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428413841 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On Mon, Apr 06, 2015 at 10:06:03AM -0500, Eric Sandeen wrote: > Do not allow xfs_db (or the xfs_admin frontend) to change the UUID > of a V5 filesystem; this will cause UUID mismatches across the > filesystem, and we currently have no mechanism to update them all. > Changing only the superblock UUID makes all other metadata look > invalid, and xfs_repair reacts by junking everything. > > Addresses-Debian-Bug: 782012 > Reported-by: F. Stoyan > Signed-off-by: Eric Sandeen > --- > > diff --git a/db/sb.c b/db/sb.c > index 6cb665d..f31f4a2 100644 > --- a/db/sb.c > +++ b/db/sb.c > @@ -363,6 +363,18 @@ uuid_f( > return 0; > } > > + /* > + * For now, changing the UUID of V5 superblock filesystems is > + * not supported; we do not have the infrastructure to fix all > + * other metadata when a new superblock UUID is generated. > + */ Unaligned start of comment above. :) Otherwise looks fine to me: Reviewed-by: Brian Foster > + if (xfs_sb_version_hascrc(&mp->m_sb) && > + strcasecmp(argv[1], "rewrite")) { > + dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), > + progname); > + return 0; > + } > + > if (!strcasecmp(argv[1], "generate")) { > platform_uuid_generate(&uu); > } else if (!strcasecmp(argv[1], "nil")) { > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From debbugs@buxtehude.debian.org Tue Apr 7 08:39:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B49CD7F67 for ; Tue, 7 Apr 2015 08:39:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 866253041F7 for ; Tue, 7 Apr 2015 06:39:24 -0700 (PDT) X-ASG-Debug-ID: 1428413954-04bdf0632365860001-NocioJ Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id b2j7oSFgWmHxgGlC (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 07 Apr 2015 06:39:14 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1YfTii-000195-06; Tue, 07 Apr 2015 13:39:12 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#782012: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Reply-To: Brian Foster , 782012@bugs.debian.org X-ASG-Orig-Subj: Bug#782012: [PATCH] xfs_db: disallow sb UUID write on v5 filesystems Resent-From: Brian Foster Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: XFS Development Team X-Loop: owner@bugs.debian.org Resent-Date: Tue, 07 Apr 2015 13:39:09 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 782012 X-Debian-PR-Package: xfsprogs X-Debian-PR-Keywords: X-Debian-PR-Source: xfsprogs Received: via spool by 782012-submit@bugs.debian.org id=B782012.14284138403915 (code B ref 782012); Tue, 07 Apr 2015 13:39:09 +0000 Received: (at 782012) by bugs.debian.org; 7 Apr 2015 13:37:20 +0000 Received: from mx1.redhat.com ([209.132.183.28]) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YfTgu-00010a-3B for 782012@bugs.debian.org; Tue, 07 Apr 2015 13:37:20 +0000 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 t37DbGrH003602 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 7 Apr 2015 09:37:17 -0400 Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t37DbFJl017820; Tue, 7 Apr 2015 09:37:16 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id ED4A6123969; Tue, 7 Apr 2015 09:37:14 -0400 (EDT) Date: Tue, 7 Apr 2015 09:37:14 -0400 From: Brian Foster To: Eric Sandeen Cc: xfs-oss , "F. Stoyan" , 782012@bugs.debian.org Message-ID: <20150407133714.GE23208@bfoster.bfoster> References: <5522A0DB.2010309@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5522A0DB.2010309@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1428413954 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17637 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain On Mon, Apr 06, 2015 at 10:06:03AM -0500, Eric Sandeen wrote: > Do not allow xfs_db (or the xfs_admin frontend) to change the UUID > of a V5 filesystem; this will cause UUID mismatches across the > filesystem, and we currently have no mechanism to update them all. > Changing only the superblock UUID makes all other metadata look > invalid, and xfs_repair reacts by junking everything. > > Addresses-Debian-Bug: 782012 > Reported-by: F. Stoyan > Signed-off-by: Eric Sandeen > --- > > diff --git a/db/sb.c b/db/sb.c > index 6cb665d..f31f4a2 100644 > --- a/db/sb.c > +++ b/db/sb.c > @@ -363,6 +363,18 @@ uuid_f( > return 0; > } > > + /* > + * For now, changing the UUID of V5 superblock filesystems is > + * not supported; we do not have the infrastructure to fix all > + * other metadata when a new superblock UUID is generated. > + */ Unaligned start of comment above. :) Otherwise looks fine to me: Reviewed-by: Brian Foster > + if (xfs_sb_version_hascrc(&mp->m_sb) && > + strcasecmp(argv[1], "rewrite")) { > + dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), > + progname); > + return 0; > + } > + > if (!strcasecmp(argv[1], "generate")) { > platform_uuid_generate(&uu); > } else if (!strcasecmp(argv[1], "nil")) { > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Tue Apr 7 08:58:14 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 96EB17F6A for ; Tue, 7 Apr 2015 08:58:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5DC98304039 for ; Tue, 7 Apr 2015 06:58:14 -0700 (PDT) X-ASG-Debug-ID: 1428415087-04bdf0632266100001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id xXstM2E4cGKD5pR2 for ; Tue, 07 Apr 2015 06:58:07 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id D97AB60EB408; Tue, 7 Apr 2015 08:58:06 -0500 (CDT) Message-ID: <5523E26E.8010700@sandeen.net> Date: Tue, 07 Apr 2015 08:58:06 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Eric Sandeen , xfs-oss , "F. Stoyan" Subject: [PATCH V2] xfs_db: disallow sb UUID write on v5 filesystems References: <5522A0DB.2010309@redhat.com> X-ASG-Orig-Subj: [PATCH V2] xfs_db: disallow sb UUID write on v5 filesystems In-Reply-To: <5522A0DB.2010309@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1428415087 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17637 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Do not allow xfs_db (or the xfs_admin frontend) to change the UUID of a V5 filesystem; this will cause UUID mismatches across the filesystem, and we currently have no mechanism to update them all. Changing only the superblock UUID makes all other metadata look invalid, and xfs_repair reacts by junking everything. Addresses-Debian-Bug: 782012 Reported-by: F. Stoyan Signed-off-by: Eric Sandeen Reviewed-by: Brian Foster --- V2, fix up comment whitespace :/ (and add brian's review for dave's convenience) diff --git a/db/sb.c b/db/sb.c index 6cb665d..f31f4a2 100644 --- a/db/sb.c +++ b/db/sb.c @@ -363,6 +363,18 @@ uuid_f( return 0; } + /* + * For now, changing the UUID of V5 superblock filesystems is + * not supported; we do not have the infrastructure to fix all + * other metadata when a new superblock UUID is generated. + */ + if (xfs_sb_version_hascrc(&mp->m_sb) && + strcasecmp(argv[1], "rewrite")) { + dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), + progname); + return 0; + } + if (!strcasecmp(argv[1], "generate")) { platform_uuid_generate(&uu); } else if (!strcasecmp(argv[1], "nil")) { _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs From chaweber@gmail.com Tue Apr 7 10:30:52 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7D9AB7F6D for ; Tue, 7 Apr 2015 10:30:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6D9698F8033 for ; Tue, 7 Apr 2015 08:30:49 -0700 (PDT) X-ASG-Debug-ID: 1428420647-04cbb056b46f0d0001-NocioJ Received: from mail-qc0-f172.google.com (mail-qc0-f172.google.com [209.85.216.172]) by cuda.sgi.com with ESMTP id WxOOSYS665cfj4F5 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 07 Apr 2015 08:30:48 -0700 (PDT) X-Barracuda-Envelope-From: chaweber@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.172 X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.172] Received: by qcgx3 with SMTP id x3so22418456qcg.3 for ; Tue, 07 Apr 2015 08:30:47 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.172] X-Barracuda-IPDD: Level1 [gmail.com/209.85.216.172] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-type:subject:message-id:date:to:mime-version; bh=eVVW1SZDI98nlGm5JL3SPE9F2jZWGKqtHH2V0UGykXo=; b=t36/tgiwxU8VS3V4v4kn1tl55/P70NeevgmnPj3Y5a81X+NIKnYYQVLzwuHOeQ5K79 lkJ3hVZ/IDdp/oOWJuCHAMsjmHe6bG+qIID/cpiyoWbOov38zYmi1lVZrHBmkvHuZeY8 vIO0sVuPZa2i0Z7Y0pxl5e9d6AJ40RBc2jx2gs4MDQqVu0QcW5BXNqRFZd0iEUAYzTCc Yd5sT5FD/WvsUpa0nmSdm2seC5CyA+QzSSazGVgm5tKbqtXnQo18Q5yWlVW3dcKU5SMY NTZEDWC/PKpucvV7rvqwJN4Us/P0EFH+HeNQ3PqeJdlbOrXNNwY1+kZ+7/et8kMfXQ/d LiiA== X-Received: by 10.140.144.11 with SMTP id 11mr24022867qhq.54.1428420647515; Tue, 07 Apr 2015 08:30:47 -0700 (PDT) Received: from [156.40.66.13] ([156.40.66.13]) by mx.google.com with ESMTPSA id 132sm5564523qhf.17.2015.04.07.08.30.45 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 07 Apr 2015 08:30:46 -0700 (PDT) From: Charles Weber Content-Type: multipart/alternative; boundary="Apple-Mail=_BB0CDBE2-B5F6-4E28-8A42-1682D2F0A756" Subject: finest and rhel/centos 7.1 Message-Id: <014A8EAA-D469-49D9-9A80-5C4CC455C74E@gmail.com> X-ASG-Orig-Subj: finest and rhel/centos 7.1 Date: Tue, 7 Apr 2015 11:30:44 -0400 To: xfs@oss.sgi.com Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2070.6\)) X-Mailer: Apple Mail (2.2070.6) X-Barracuda-Connect: mail-qc0-f172.google.com[209.85.216.172] X-Barracuda-Start-Time: 1428420648 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17640 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 --Apple-Mail=_BB0CDBE2-B5F6-4E28-8A42-1682D2F0A756 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi everyone, I am building a large storage server and noticed to my delight that = mkfs.xfs in 7.1 now supports finobts=3D1. But I get mount errors saying = below. Since the FS in question mount fine so long as I don=E2=80=99t = specify finobts=3D1 while formatting, should I assume the rest of 7.1 is = not yet ready for it? Or is there some option I missed? thanks, Chuck xfsprogs-3.2.1-6.el7.x86_64 kernel-3.10.0-229.1.2.el7.x86_64 [75881.037768] SELinux: initialized (dev dm-7, type xfs), uses xattr [75908.498994] XFS (dm-7): Superblock has unknown read-only compatible = features (0x1) enabled. [75908.499035] XFS (dm-7): Attempted to mount read-only compatible = filesystem read-write. Filesystem can only be safely mounted read only. [75908.499058] XFS (dm-7): SB validate failed with error 22. [root@NIAIRPGL1 share]# modinfo xfs filename: = /lib/modules/3.10.0-229.1.2.el7.x86_64/kernel/fs/xfs/xfs.ko license: GPL description: SGI XFS with ACLs, security attributes, large = block/inode numbers, no debug enabled author: Silicon Graphics, Inc. alias: fs-xfs rhelversion: 7.1 srcversion: 3E3940432E169BEE955EDE9 depends: libcrc32c intree: Y vermagic: 3.10.0-229.1.2.el7.x86_64 SMP mod_unload modversions=20 signer: CentOS Linux kernel signing key sig_key: = 34:B5:BC:A2:B7:06:D8:2E:72:A5:BE:3E:E4:09:BE:C7:19:5E:A5:08 sig_hashalgo: sha256 --Apple-Mail=_BB0CDBE2-B5F6-4E28-8A42-1682D2F0A756 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Hi everyone,
I am building a large storage = server and noticed to my delight that mkfs.xfs in 7.1 now supports = finobts=3D1. But I get mount errors saying below. Since the FS in = question mount fine so long as I don=E2=80=99t specify finobts=3D1 while = formatting, should I assume the rest of 7.1 is not yet ready for it? Or = is there some option I missed?

thanks,
Chuck
xfsprogs-3.2.1-6.el7.x86_64
kernel-3.10.0-229.1.2.el7.x86_64
[75881.037768] SELinux: initialized (dev dm-7, type xfs), = uses xattr
[75908.498994] XFS (dm-7): Superblock has unknown read-only = compatible features (0x1) enabled.
[75908.499035] XFS (dm-7): Attempted to mount = read-only compatible filesystem read-write.
Filesystem can only be safely mounted = read only.
[75908.499058] XFS (dm-7): SB validate failed with error = 22.


[root@NIAIRPGL1 share]# modinfo = xfs
filename:     =   = /lib/modules/3.10.0-229.1.2.el7.x86_64/kernel/fs/xfs/xfs.ko
license:        = GPL
description:  =   SGI XFS with ACLs, security attributes, large block/inode = numbers, no debug enabled
author:         Silicon Graphics, = Inc.
alias:    =       fs-xfs
rhelversion:    7.1
srcversion:     = 3E3940432E169BEE955EDE9
depends:        libcrc32c
intree:         = Y
vermagic:     =   3.10.0-229.1.2.el7.x86_64 SMP mod_unload = modversions 
signer: =         CentOS Linux kernel signing key
sig_key:        = 34:B5:BC:A2:B7:06:D8:2E:72:A5:BE:3E:E4:09:BE:C7:19:5E:A5:08
sig_hashalgo:   sha256

= --Apple-Mail=_BB0CDBE2-B5F6-4E28-8A42-1682D2F0A756-- From sandeen@sandeen.net Tue Apr 7 10:34:11 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5B6F87F6D for ; Tue, 7 Apr 2015 10:34:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id DDDD6AC003 for ; Tue, 7 Apr 2015 08:34:07 -0700 (PDT) X-ASG-Debug-ID: 1428420846-04cb6c1cc75d660001-NocioJ Received: from sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id Zaw40kRNNwZxGuQU for ; Tue, 07 Apr 2015 08:34:06 -0700 (PDT) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTPSA id 38DDE60EB408; Tue, 7 Apr 2015 10:34:06 -0500 (CDT) Message-ID: <5523F8ED.1060105@sandeen.net> Date: Tue, 07 Apr 2015 10:34:05 -0500 From: Eric Sandeen MIME-Version: 1.0 To: Charles Weber , xfs@oss.sgi.com Subject: Re: finest and rhel/centos 7.1 References: <014A8EAA-D469-49D9-9A80-5C4CC455C74E@gmail.com> X-ASG-Orig-Subj: Re: finest and rhel/centos 7.1 In-Reply-To: <014A8EAA-D469-49D9-9A80-5C4CC455C74E@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1428420846 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17639 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 4/7/15 10:30 AM, Charles Weber wrote: > Hi everyone, I am building a large storage server and noticed to my > delight that mkfs.xfs in 7.1 now supports finobts=1. But I get mount > errors saying below. Since the FS in question mount fine so long as I > dont specify finobts=1 while formatting, should I assume the rest of > 7.1 is not yet ready for it? Or is there some option I missed? That was a bit of an oversight. finobt will be available kernelside eventually, but userspace jumped the gun. -Eric > thanks, Chuck *xfs*progs-3.2.1-6.el7.x86_64 > kernel-3.10.0-229.1.2.el7.x86_64 [75881.037768] SELinux: initialized > (dev dm-7, type xfs), uses xattr [75908.498994] XFS (dm-7): > Superblock has unknown read-only compatible features (0x1) enabled. > [75908.499035] XFS (dm-7): Attempted to mount read-only compatible > filesystem read-write. Filesystem can only be safely mounted read > only. [75908.499058] XFS (dm-7): SB validate failed with error 22. > > > [root@NIAIRPGL1 share]# modinfo xfs filename: > /lib/modules/3.10.0-229.1.2.el7.x86_64/kernel/fs/xfs/xfs.ko license: > GPL description: SGI XFS with ACLs, security attributes, large > block/inode numbers, no debug enabled author: Silicon > Graphics, Inc. alias: fs-xfs rhelversion: 7.1 srcversion: > 3E3940432E169BEE955EDE9 depends: libcrc32c intree: Y > vermagic: 3.10.0-229.1.2.el7.x86_64 SMP mod_unload modversions > signer: CentOS Linux kernel signing key sig_key: > 34:B5:BC:A2:B7:06:D8:2E:72:A5:BE:3E:E4:09:BE:C7:19:5E:A5:08 > sig_hashalgo: sha256 > > > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs > From BATV+26dcdb29bbb627ef0221+4244+infradead.org+hch@bombadil.srs.infradead.org Tue Apr 7 10:36:29 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D51727F72 for ; Tue, 7 Apr 2015 10:36:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C540B304032 for ; Tue, 7 Apr 2015 08:36:26 -0700 (PDT) X-ASG-Debug-ID: 1428420983-04cb6c1cc95d750001-NocioJ Received: from bombadil.infradead.org ([198.137.202.9]) by cuda.sgi.com with ESMTP id GEMVlul8MJlAit3I (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 08:36:24 -0700 (PDT) X-Barracuda-Envelope-From: BATV+26dcdb29bbb627ef0221+4244+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 198.137.202.9 Received: from [83.175.99.196] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1YfVY7-0004DJ-FR; Tue, 07 Apr 2015 15:36:23 +0000 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org Subject: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Date: Tue, 7 Apr 2015 17:35:44 +0200 X-ASG-Orig-Subj: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Message-Id: <1428420944-20965-1-git-send-email-hch@lst.de> X-Mailer: git-send-email 1.9.1 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: UNKNOWN[198.137.202.9] X-Barracuda-Start-Time: 1428420984 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17639 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 We want to drop all I/O path locks when recalling layouts, and that includes i_mutex for the write path. Without this we get stuck processe when recalls take too long. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_file.c | 4 ++-- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 2 +- fs/xfs/xfs_pnfs.c | 7 ++++++- fs/xfs/xfs_pnfs.h | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index a2e1cb8..963dfb2 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -559,7 +559,7 @@ restart: if (error) return error; - error = xfs_break_layouts(inode, iolock); + error = xfs_break_layouts(inode, iolock, true); if (error) return error; @@ -843,7 +843,7 @@ xfs_file_fallocate( return -EOPNOTSUPP; xfs_ilock(ip, iolock); - error = xfs_break_layouts(inode, &iolock); + error = xfs_break_layouts(inode, &iolock, false); if (error) goto out_unlock; diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index ac4feae..3a21cc7 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -639,7 +639,7 @@ xfs_ioc_space( return error; xfs_ilock(ip, iolock); - error = xfs_break_layouts(inode, &iolock); + error = xfs_break_layouts(inode, &iolock, false); if (error) goto out_unlock; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index e53a903..79520c7 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -975,7 +975,7 @@ xfs_vn_setattr( uint iolock = XFS_IOLOCK_EXCL; xfs_ilock(ip, iolock); - error = xfs_break_layouts(dentry->d_inode, &iolock); + error = xfs_break_layouts(dentry->d_inode, &iolock, true); if (!error) error = xfs_setattr_size(ip, iattr); xfs_iunlock(ip, iolock); diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c index 365dd57..981a657 100644 --- a/fs/xfs/xfs_pnfs.c +++ b/fs/xfs/xfs_pnfs.c @@ -31,7 +31,8 @@ int xfs_break_layouts( struct inode *inode, - uint *iolock) + uint *iolock, + bool with_imutex) { struct xfs_inode *ip = XFS_I(inode); int error; @@ -40,8 +41,12 @@ xfs_break_layouts( while ((error = break_layout(inode, false) == -EWOULDBLOCK)) { xfs_iunlock(ip, *iolock); + if (with_imutex && (*iolock & XFS_IOLOCK_EXCL)) + mutex_unlock(&inode->i_mutex); error = break_layout(inode, true); *iolock = XFS_IOLOCK_EXCL; + if (with_imutex) + mutex_lock(&inode->i_mutex); xfs_ilock(ip, *iolock); } diff --git a/fs/xfs/xfs_pnfs.h b/fs/xfs/xfs_pnfs.h index b7fbfce..f749475 100644 --- a/fs/xfs/xfs_pnfs.h +++ b/fs/xfs/xfs_pnfs.h @@ -8,7 +8,7 @@ int xfs_fs_map_blocks(struct inode *inode, loff_t offset, u64 length, int xfs_fs_commit_blocks(struct inode *inode, struct iomap *maps, int nr_maps, struct iattr *iattr); -int xfs_break_layouts(struct inode *inode, uint *iolock); +int xfs_break_layouts(struct inode *inode, uint *iolock, bool with_imutex); #else static inline int xfs_break_layouts(struct inode *inode, uint *iolock) { -- 1.9.1 From bfoster@redhat.com Tue Apr 7 13:53:39 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D57EF7F76 for ; Tue, 7 Apr 2015 13:53:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 625FEAC007 for ; Tue, 7 Apr 2015 11:53:35 -0700 (PDT) X-ASG-Debug-ID: 1428432813-04cb6c1cc9676c0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id FBhgWPHekFtmA4XI (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 11:53:34 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 940448EA21 for ; Tue, 7 Apr 2015 18:53:33 +0000 (UTC) Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t37IrXmb011609 for ; Tue, 7 Apr 2015 14:53:33 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id BFD47123969; Tue, 7 Apr 2015 14:53:31 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH] xfs: use i_lock to prevent i_size race on dio write completion Date: Tue, 7 Apr 2015 14:53:31 -0400 X-ASG-Orig-Subj: [PATCH] xfs: use i_lock to prevent i_size race on dio write completion Message-Id: <1428432811-58868-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428432814 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 XFS allows O_DIRECT writes to the same file to execute in parallel under the shared iolock. If the write offset is beyond the inode size (not appending), the write path cycles the exclusive iolock to check for previously unexposed blocks that must be zeroed. If I/O is synchronous, this has the side effect of waiting on all in-flight I/O to complete. If writes occur slightly out of order, however, it's possible for even O_SYNC|O_DIRECT writes to race to extend i_size in the end_io completion handler. For example, this can be easily manufactured with an artificial delay in xfs_end_io_direct_write(): if (offset + size > i_size_read(inode)) { mdelay(...); ... } Execute the following commands in order, but in parallel such that they both read the current i_size as 0 and delay to update it: $ xfs_io -f -d -s -c "pwrite 4k 4k" /mnt/file $ xfs_io -f -d -s -c "pwrite 0 4k" /mnt/file Since the write at 4k passes through the delay first, it sets i_size to 8k. Shortly after, the write to 0 sets i_size to 4k: $ ls -al /mnt/file -rw-------. 1 root root 4096 Apr 4 06:48 /mnt/file At this point, any further file extending writes consider the block at EOF (4k) as stale data that must be zeroed: $ xfs_io -f -d -s -c "pwrite 8k 4k" /mnt/file $ ls -al /mnt/file -rw-------. 1 root root 12288 Apr 4 06:51 /mnt/file $ hexdump /mnt/file 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * 0001000 0000 0000 0000 0000 0000 0000 0000 0000 * 0002000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * 0003000 The i_size update in xfs_end_io_direct_write() is a fundamental test/set race. Grab i_lock around the i_size check and update to protect against concurrent extenders and ensure completion sees the latest i_size. Signed-off-by: Brian Foster --- This is a first stab at a fix for the race described above. While we might want to do more here (e.g., maybe hold iolock shared over async dio for explicit truncate protection?), I would like to see this or something like it as a starting point so we have a backportable fix. Thoughts? Brian fs/xfs/xfs_aops.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3a9b7a1..dfc4e94 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -1463,10 +1463,17 @@ xfs_end_io_direct_write( * 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. + * size. To prevent this just update it a little bit earlier here. + * + * Also, grab i_lock to prevent test/set races between extending I/Os. + * This can occur when a non-appending extending (pos > i_size) write is + * submitted out of offset order from an appending (pos == i_size) + * write. */ + spin_lock(&inode->i_lock); if (offset + size > i_size_read(inode)) i_size_write(inode, offset + size); + spin_unlock(&inode->i_lock); /* * For direct I/O we do not know if we need to allocate blocks or not, -- 1.9.3 From jmoyer@redhat.com Tue Apr 7 13:56:38 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=SINGLE_HEADER_2K autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 948737F76 for ; Tue, 7 Apr 2015 13:56:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 751238F8064 for ; Tue, 7 Apr 2015 11:56:35 -0700 (PDT) X-ASG-Debug-ID: 1428432993-04cb6c1cc967940001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id xDdNG42vXjqCcmhr (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 11:56:33 -0700 (PDT) X-Barracuda-Envelope-From: jmoyer@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t37ItMCL016246 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 7 Apr 2015 14:55:22 -0400 Received: from segfault.boston.devel.redhat.com (segfault.boston.devel.redhat.com [10.19.60.26]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t37ItDJH013973 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 7 Apr 2015 14:55:14 -0400 From: Jeff Moyer To: Jens Axboe , Ming Lei Cc: Konrad Rzeszutek Wilk , "Roger Pau Monn\?\?" , Alasdair Kergon , Mike Snitzer , Neil Brown , "Nicholas A. Bellinger" , Alexander Viro , Chris Mason , Josef Bacik , David Sterba , "Theodore Ts'o" , Andreas Dilger , Jaegeuk Kim , Changman Lee , Steven Whitehouse , Mikulas Patocka , Andrew Morton , Rik van Riel , Johannes Weiner , Mel Gorman , Trond Myklebust , Anna Schumaker , Dave Chinner , xfs@oss.sgi.com, Christoph Hellwig , Weston Andros Adamson , "Martin K. Petersen" , Sagi Grimberg , Tejun Heo , Fabian Frederick , Matthew Wilcox , Ming Lei , "Kirill A. Shutemov" , Wang Sheng-Hui , Michal Hocko , Joe Perches , Miklos Szeredi , Namjae Jeon , Mark Rustad , Jianyu Zhan , Fengguang Wu , Vladimir Davydov , Vlastimil Babka , Suleiman Souhlal , linux-kernel@vger.kernel.org, dm-devel@redhat.com, xen-devel@lists.xenproject.org, linux-raid@vger.kernel.org, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 2/2][v2] blk-plug: don't flush nested plug lists References: <1428347694-17704-1-git-send-email-jmoyer@redhat.com> <1428347694-17704-2-git-send-email-jmoyer@redhat.com> X-ASG-Orig-Subj: [PATCH 2/2][v2] blk-plug: don't flush nested plug lists X-PGP-KeyID: 1F78E1B4 X-PGP-CertKey: F6FE 280D 8293 F72C 65FD 5A58 1FF8 A7CA 1F78 E1B4 X-PCLoadLetter: What the f**k does that mean? Date: Tue, 07 Apr 2015 14:55:13 -0400 In-Reply-To: <1428347694-17704-2-git-send-email-jmoyer@redhat.com> (Jeff Moyer's message of "Mon, 6 Apr 2015 15:14:54 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428432993 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 The way the on-stack plugging currently works, each nesting level flushes its own list of I/Os. This can be less than optimal (read awful) for certain workloads. For example, consider an application that issues asynchronous O_DIRECT I/Os. It can send down a bunch of I/Os together in a single io_submit call, only to have each of them dispatched individually down in the bowels of the dirct I/O code. The reason is that there are blk_plug-s instantiated both at the upper call site in do_io_submit and down in do_direct_IO. The latter will submit as little as 1 I/O at a time (if you have a small enough I/O size) instead of performing the batching that the plugging infrastructure is supposed to provide. Now, for the case where there is an elevator involved, this doesn't really matter too much. The elevator will keep the I/O around long enough for it to be merged. However, in cases where there is no elevator (like blk-mq), I/Os are simply dispatched immediately. Try this, for example: fio --rw=read --bs=4k --iodepth=128 --iodepth_batch=16 --iodepth_batch_complete=16 --runtime=10s --direct=1 --filename=/dev/vdd --name=job1 --ioengine=libaio --time_based If you run that on a current kernel, you will get zero merges. Zero! After this patch, you will get many merges (the actual number depends on how fast your storage is, obviously), and much better throughput. Here are results from my test systems: First, I tested in a VM using a virtio-blk device: Unpatched kernel: Throughput: 280,262 KB/s avg latency: 14,587.72 usec Patched kernel: throughput: 832,158 KB/s avg latency: 4,901.95 usec Next, I tesetd using a micron p320h on bare metal: Unpatched kernel: Throughput: 688,967 KB/s avg latency: 5,933.92 usec Patched kernel: Throughput: 1,160.6 MB/s avg latency: 3,437.01 usec As you can see, both throughput and latency improved dramatically. I've included the full fio output below, so you can also see the marked improvement in standard deviation as well. I considered several approaches to solving the problem: 1) get rid of the inner-most plugs 2) handle nesting by using only one on-stack plug 2a) #2, except use a per-cpu blk_plug struct, which may clean up the code a bit at the expense of memory footprint Option 1 will be tricky or impossible to do, since inner most plug lists are sometimes the only plug lists, depending on the call path. Option 2 is what this patch implements. Option 2a may add unneeded complexity. Much of the patch involves modifying call sites to blk_finish_plug, since its signature is changed. The meat of the patch is actually pretty simple and constrained to block/blk-core.c and include/linux/blkdev.h. The only tricky bits were places where plugs were finished and then restarted to flush out I/O. There, I left things as-is. So long as they are the outer-most plugs, they should continue to function as before. NOTE TO SUBSYSTEM MAINTAINERS: Before this patch, blk_finish_plug would always flush the plug list. After this patch, this is only the case for the outer-most plug. If you require the plug list to be flushed, you should be calling blk_flush_plug(current). Btrfs and dm maintainers should take a close look at this patch and ensure they get the right behavior in the end. Signed-off-by: Jeff Moyer --- Changelog: v1->v2: Keep the blk_start_plug interface the same, suggested by Ming Lei. Test results ------------ Virtio-blk: unpatched: job1: (groupid=0, jobs=1): err= 0: pid=8032: Tue Apr 7 13:33:53 2015 read : io=2736.1MB, bw=280262KB/s, iops=70065, runt= 10000msec slat (usec): min=40, max=10472, avg=207.82, stdev=364.02 clat (usec): min=211, max=35883, avg=14379.83, stdev=2213.95 lat (usec): min=862, max=36000, avg=14587.72, stdev=2223.80 clat percentiles (usec): | 1.00th=[11328], 5.00th=[12096], 10.00th=[12480], 20.00th=[12992], | 30.00th=[13376], 40.00th=[13760], 50.00th=[14144], 60.00th=[14400], | 70.00th=[14784], 80.00th=[15168], 90.00th=[15936], 95.00th=[16768], | 99.00th=[24448], 99.50th=[25216], 99.90th=[28544], 99.95th=[35072], | 99.99th=[36096] bw (KB /s): min=265984, max=302720, per=100.00%, avg=280549.84, stdev=10264.36 lat (usec) : 250=0.01%, 1000=0.01% lat (msec) : 2=0.02%, 4=0.02%, 10=0.05%, 20=96.57%, 50=3.34% cpu : usr=7.56%, sys=55.57%, ctx=6174, majf=0, minf=523 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued : total=r=700656/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1024 Run status group 0 (all jobs): READ: io=2736.1MB, aggrb=280262KB/s, minb=280262KB/s, maxb=280262KB/s, mint=10000msec, maxt=10000msec Disk stats (read/write): vdd: ios=695490/0, merge=0/0, ticks=785741/0, in_queue=785442, util=90.69% patched: job1: (groupid=0, jobs=1): err= 0: pid=7743: Tue Apr 7 13:19:07 2015 read : io=8126.6MB, bw=832158KB/s, iops=208039, runt= 10000msec slat (usec): min=20, max=14351, avg=55.08, stdev=143.47 clat (usec): min=283, max=20003, avg=4846.77, stdev=1355.35 lat (usec): min=609, max=20074, avg=4901.95, stdev=1362.40 clat percentiles (usec): | 1.00th=[ 4016], 5.00th=[ 4048], 10.00th=[ 4080], 20.00th=[ 4128], | 30.00th=[ 4192], 40.00th=[ 4192], 50.00th=[ 4256], 60.00th=[ 4512], | 70.00th=[ 4896], 80.00th=[ 5664], 90.00th=[ 5920], 95.00th=[ 6752], | 99.00th=[11968], 99.50th=[13632], 99.90th=[15552], 99.95th=[17024], | 99.99th=[19840] bw (KB /s): min=740992, max=896640, per=100.00%, avg=836978.95, stdev=51034.87 lat (usec) : 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 4=0.50%, 10=97.79%, 20=1.70%, 50=0.01% cpu : usr=20.28%, sys=69.11%, ctx=879, majf=0, minf=522 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued : total=r=2080396/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1024 Run status group 0 (all jobs): READ: io=8126.6MB, aggrb=832158KB/s, minb=832158KB/s, maxb=832158KB/s, mint=10000msec, maxt=10000msec Disk stats (read/write): vdd: ios=127877/0, merge=1918166/0, ticks=23118/0, in_queue=23047, util=94.08% micron p320h: unpatched: job1: (groupid=0, jobs=1): err= 0: pid=3244: Tue Apr 7 13:29:14 2015 read : io=6728.9MB, bw=688968KB/s, iops=172241, runt= 10001msec slat (usec): min=43, max=6273, avg=81.79, stdev=125.96 clat (usec): min=78, max=12485, avg=5852.06, stdev=1154.76 lat (usec): min=146, max=12572, avg=5933.92, stdev=1163.75 clat percentiles (usec): | 1.00th=[ 4192], 5.00th=[ 4384], 10.00th=[ 4576], 20.00th=[ 5600], | 30.00th=[ 5664], 40.00th=[ 5728], 50.00th=[ 5792], 60.00th=[ 5856], | 70.00th=[ 6112], 80.00th=[ 6176], 90.00th=[ 6240], 95.00th=[ 6368], | 99.00th=[11840], 99.50th=[11968], 99.90th=[12096], 99.95th=[12096], | 99.99th=[12224] bw (KB /s): min=648328, max=859264, per=98.80%, avg=680711.16, stdev=62016.70 lat (usec) : 100=0.01%, 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=0.01%, 4=0.04%, 10=97.07%, 20=2.87% cpu : usr=10.28%, sys=73.61%, ctx=104436, majf=0, minf=6217 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued : total=r=1722592/w=0/d=0, short=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1024 Run status group 0 (all jobs): READ: io=6728.9MB, aggrb=688967KB/s, minb=688967KB/s, maxb=688967KB/s, mint=10001msec, maxt=10001msec Disk stats (read/write): rssda: ios=1688772/0, merge=0/0, ticks=188820/0, in_queue=188678, util=96.61% patched: job1: (groupid=0, jobs=1): err= 0: pid=9531: Tue Apr 7 13:22:28 2015 read : io=11607MB, bw=1160.6MB/s, iops=297104, runt= 10001msec slat (usec): min=21, max=6376, avg=43.05, stdev=81.82 clat (usec): min=116, max=9844, avg=3393.90, stdev=752.57 lat (usec): min=167, max=9889, avg=3437.01, stdev=757.02 clat percentiles (usec): | 1.00th=[ 2832], 5.00th=[ 2992], 10.00th=[ 3056], 20.00th=[ 3120], | 30.00th=[ 3152], 40.00th=[ 3248], 50.00th=[ 3280], 60.00th=[ 3344], | 70.00th=[ 3376], 80.00th=[ 3504], 90.00th=[ 3728], 95.00th=[ 3824], | 99.00th=[ 9152], 99.50th=[ 9408], 99.90th=[ 9664], 99.95th=[ 9664], | 99.99th=[ 9792] bw (MB /s): min= 1139, max= 1183, per=100.00%, avg=1161.07, stdev=10.58 lat (usec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=0.01%, 4=98.31%, 10=1.67% cpu : usr=18.59%, sys=66.65%, ctx=55655, majf=0, minf=6218 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued : total=r=2971338/w=0/d=0, short=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1024 Run status group 0 (all jobs): READ: io=11607MB, aggrb=1160.6MB/s, minb=1160.6MB/s, maxb=1160.6MB/s, mint=10001msec, maxt=10001msec Disk stats (read/write): rssda: ios=183005/0, merge=2745105/0, ticks=31972/0, in_queue=31948, util=97.63% --- block/blk-core.c | 29 ++++++++++++++++------------- block/blk-lib.c | 2 +- block/blk-throttle.c | 2 +- drivers/block/xen-blkback/blkback.c | 2 +- drivers/md/dm-bufio.c | 6 +++--- drivers/md/dm-crypt.c | 2 +- drivers/md/dm-kcopyd.c | 2 +- drivers/md/dm-thin.c | 2 +- drivers/md/md.c | 2 +- drivers/md/raid1.c | 2 +- drivers/md/raid10.c | 2 +- drivers/md/raid5.c | 4 ++-- drivers/target/target_core_iblock.c | 2 +- fs/aio.c | 2 +- fs/block_dev.c | 2 +- fs/btrfs/scrub.c | 2 +- fs/btrfs/transaction.c | 2 +- fs/btrfs/tree-log.c | 12 ++++++------ fs/btrfs/volumes.c | 6 +++--- fs/buffer.c | 2 +- fs/direct-io.c | 2 +- fs/ext4/file.c | 2 +- fs/ext4/inode.c | 4 ++-- fs/f2fs/checkpoint.c | 2 +- fs/f2fs/gc.c | 2 +- fs/f2fs/node.c | 2 +- fs/gfs2/log.c | 2 +- fs/hpfs/buffer.c | 2 +- fs/jbd/checkpoint.c | 2 +- fs/jbd/commit.c | 4 ++-- fs/jbd2/checkpoint.c | 2 +- fs/jbd2/commit.c | 2 +- fs/mpage.c | 2 +- fs/nfs/blocklayout/blocklayout.c | 4 ++-- fs/xfs/xfs_buf.c | 4 ++-- fs/xfs/xfs_dir2_readdir.c | 2 +- fs/xfs/xfs_itable.c | 2 +- include/linux/blkdev.h | 5 +++-- mm/madvise.c | 2 +- mm/page-writeback.c | 2 +- mm/readahead.c | 2 +- mm/swap_state.c | 2 +- mm/vmscan.c | 2 +- 43 files changed, 74 insertions(+), 70 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 794c3e7..fcd9c2f 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -3018,21 +3018,21 @@ void blk_start_plug(struct blk_plug *plug) { struct task_struct *tsk = current; + if (tsk->plug) { + tsk->plug->depth++; + return; + } + + plug->depth = 1; INIT_LIST_HEAD(&plug->list); INIT_LIST_HEAD(&plug->mq_list); INIT_LIST_HEAD(&plug->cb_list); /* - * If this is a nested plug, don't actually assign it. It will be - * flushed on its own. + * Store ordering should not be needed here, since a potential + * preempt will imply a full memory barrier */ - if (!tsk->plug) { - /* - * Store ordering should not be needed here, since a potential - * preempt will imply a full memory barrier - */ - tsk->plug = plug; - } + tsk->plug = plug; } EXPORT_SYMBOL(blk_start_plug); @@ -3177,12 +3177,15 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) local_irq_restore(flags); } -void blk_finish_plug(struct blk_plug *plug) +void blk_finish_plug(void) { - blk_flush_plug_list(plug, false); + struct blk_plug *plug = current->plug; - if (plug == current->plug) - current->plug = NULL; + if (--plug->depth > 0) + return; + + blk_flush_plug_list(plug, false); + current->plug = NULL; } EXPORT_SYMBOL(blk_finish_plug); diff --git a/block/blk-lib.c b/block/blk-lib.c index 7688ee3..ac347d3 100644 --- a/block/blk-lib.c +++ b/block/blk-lib.c @@ -128,7 +128,7 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, */ cond_resched(); } - blk_finish_plug(&plug); + blk_finish_plug(); /* Wait for bios in-flight */ if (!atomic_dec_and_test(&bb.done)) diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 5b9c6d5..222a77a 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -1281,7 +1281,7 @@ static void blk_throtl_dispatch_work_fn(struct work_struct *work) blk_start_plug(&plug); while((bio = bio_list_pop(&bio_list_on_stack))) generic_make_request(bio); - blk_finish_plug(&plug); + blk_finish_plug(); } } diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index 2a04d34..74bea21 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c @@ -1374,7 +1374,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif, submit_bio(operation, biolist[i]); /* Let the I/Os go.. */ - blk_finish_plug(&plug); + blk_finish_plug(); if (operation == READ) blkif->st_rd_sect += preq.nr_sects; diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index 86dbbc7..502c63b 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c @@ -715,7 +715,7 @@ static void __flush_write_list(struct list_head *write_list) submit_io(b, WRITE, b->block, write_endio); dm_bufio_cond_resched(); } - blk_finish_plug(&plug); + blk_finish_plug(); } /* @@ -1126,7 +1126,7 @@ void dm_bufio_prefetch(struct dm_bufio_client *c, &write_list); if (unlikely(!list_empty(&write_list))) { dm_bufio_unlock(c); - blk_finish_plug(&plug); + blk_finish_plug(); __flush_write_list(&write_list); blk_start_plug(&plug); dm_bufio_lock(c); @@ -1149,7 +1149,7 @@ void dm_bufio_prefetch(struct dm_bufio_client *c, dm_bufio_unlock(c); flush_plug: - blk_finish_plug(&plug); + blk_finish_plug(); } EXPORT_SYMBOL_GPL(dm_bufio_prefetch); diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 713a962..65d7b72 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c @@ -1224,7 +1224,7 @@ pop_from_list: rb_erase(&io->rb_node, &write_tree); kcryptd_io_write(io); } while (!RB_EMPTY_ROOT(&write_tree)); - blk_finish_plug(&plug); + blk_finish_plug(); } return 0; } diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c index 3a7cade..4a76e42 100644 --- a/drivers/md/dm-kcopyd.c +++ b/drivers/md/dm-kcopyd.c @@ -593,7 +593,7 @@ static void do_work(struct work_struct *work) process_jobs(&kc->complete_jobs, kc, run_complete_job); process_jobs(&kc->pages_jobs, kc, run_pages_job); process_jobs(&kc->io_jobs, kc, run_io_job); - blk_finish_plug(&plug); + blk_finish_plug(); } /* diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index 921aafd..be42bf5 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c @@ -1824,7 +1824,7 @@ static void process_thin_deferred_bios(struct thin_c *tc) dm_pool_issue_prefetches(pool->pmd); } } - blk_finish_plug(&plug); + blk_finish_plug(); } static int cmp_cells(const void *lhs, const void *rhs) diff --git a/drivers/md/md.c b/drivers/md/md.c index 717daad..c4ec179 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -7686,7 +7686,7 @@ void md_do_sync(struct md_thread *thread) /* * this also signals 'finished resyncing' to md_stop */ - blk_finish_plug(&plug); + blk_finish_plug(); wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active)); /* tell personality that we are finished */ diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index d34e238..4f8fad4 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -2441,7 +2441,7 @@ static void raid1d(struct md_thread *thread) if (mddev->flags & ~(1<flags & ~(1<device_lock); - blk_finish_plug(&plug); + blk_finish_plug(); pr_debug("--- raid5worker inactive\n"); } @@ -5352,7 +5352,7 @@ static void raid5d(struct md_thread *thread) spin_unlock_irq(&conf->device_lock); async_tx_issue_pending_all(); - blk_finish_plug(&plug); + blk_finish_plug(); pr_debug("--- raid5d inactive\n"); } diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c index d4a4b0f..17d8730 100644 --- a/drivers/target/target_core_iblock.c +++ b/drivers/target/target_core_iblock.c @@ -367,7 +367,7 @@ static void iblock_submit_bios(struct bio_list *list, int rw) blk_start_plug(&plug); while ((bio = bio_list_pop(list))) submit_bio(rw, bio); - blk_finish_plug(&plug); + blk_finish_plug(); } static void iblock_end_io_flush(struct bio *bio, int err) diff --git a/fs/aio.c b/fs/aio.c index f8e52a1..b873698 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1616,7 +1616,7 @@ long do_io_submit(aio_context_t ctx_id, long nr, if (ret) break; } - blk_finish_plug(&plug); + blk_finish_plug(); percpu_ref_put(&ctx->users); return i ? i : ret; diff --git a/fs/block_dev.c b/fs/block_dev.c index 975266b..f5848de 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1609,7 +1609,7 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) if (err < 0) ret = err; } - blk_finish_plug(&plug); + blk_finish_plug(); return ret; } EXPORT_SYMBOL_GPL(blkdev_write_iter); diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index ec57687..f314cfb8 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -3316,7 +3316,7 @@ out: scrub_wr_submit(sctx); mutex_unlock(&sctx->wr_ctx.wr_lock); - blk_finish_plug(&plug); + blk_finish_plug(); btrfs_free_path(path); btrfs_free_path(ppath); return ret < 0 ? ret : 0; diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 8be4278..fee10af 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -983,7 +983,7 @@ static int btrfs_write_and_wait_marked_extents(struct btrfs_root *root, blk_start_plug(&plug); ret = btrfs_write_marked_extents(root, dirty_pages, mark); - blk_finish_plug(&plug); + blk_finish_plug(); ret2 = btrfs_wait_marked_extents(root, dirty_pages, mark); if (ret) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index c5b8ba3..879c7fd 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -2574,7 +2574,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, blk_start_plug(&plug); ret = btrfs_write_marked_extents(log, &log->dirty_log_pages, mark); if (ret) { - blk_finish_plug(&plug); + blk_finish_plug(); btrfs_abort_transaction(trans, root, ret); btrfs_free_logged_extents(log, log_transid); btrfs_set_log_full_commit(root->fs_info, trans); @@ -2619,7 +2619,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, if (!list_empty(&root_log_ctx.list)) list_del_init(&root_log_ctx.list); - blk_finish_plug(&plug); + blk_finish_plug(); btrfs_set_log_full_commit(root->fs_info, trans); if (ret != -ENOSPC) { @@ -2635,7 +2635,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, } if (log_root_tree->log_transid_committed >= root_log_ctx.log_transid) { - blk_finish_plug(&plug); + blk_finish_plug(); mutex_unlock(&log_root_tree->log_mutex); ret = root_log_ctx.log_ret; goto out; @@ -2643,7 +2643,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, index2 = root_log_ctx.log_transid % 2; if (atomic_read(&log_root_tree->log_commit[index2])) { - blk_finish_plug(&plug); + blk_finish_plug(); ret = btrfs_wait_marked_extents(log, &log->dirty_log_pages, mark); btrfs_wait_logged_extents(trans, log, log_transid); @@ -2669,7 +2669,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, * check the full commit flag again */ if (btrfs_need_log_full_commit(root->fs_info, trans)) { - blk_finish_plug(&plug); + blk_finish_plug(); btrfs_wait_marked_extents(log, &log->dirty_log_pages, mark); btrfs_free_logged_extents(log, log_transid); mutex_unlock(&log_root_tree->log_mutex); @@ -2680,7 +2680,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, ret = btrfs_write_marked_extents(log_root_tree, &log_root_tree->dirty_log_pages, EXTENT_DIRTY | EXTENT_NEW); - blk_finish_plug(&plug); + blk_finish_plug(); if (ret) { btrfs_set_log_full_commit(root->fs_info, trans); btrfs_abort_transaction(trans, root, ret); diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 8222f6f..16db068 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -358,7 +358,7 @@ loop_lock: if (pending_bios == &device->pending_sync_bios) { sync_pending = 1; } else if (sync_pending) { - blk_finish_plug(&plug); + blk_finish_plug(); blk_start_plug(&plug); sync_pending = 0; } @@ -415,7 +415,7 @@ loop_lock: } /* unplug every 64 requests just for good measure */ if (batch_run % 64 == 0) { - blk_finish_plug(&plug); + blk_finish_plug(); blk_start_plug(&plug); sync_pending = 0; } @@ -431,7 +431,7 @@ loop_lock: spin_unlock(&device->io_lock); done: - blk_finish_plug(&plug); + blk_finish_plug(); } static void pending_bios_fn(struct btrfs_work *work) diff --git a/fs/buffer.c b/fs/buffer.c index 20805db..8181c44 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -758,7 +758,7 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list) } spin_unlock(lock); - blk_finish_plug(&plug); + blk_finish_plug(); spin_lock(lock); while (!list_empty(&tmp)) { diff --git a/fs/direct-io.c b/fs/direct-io.c index e181b6b..16f16ed 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -1262,7 +1262,7 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, if (sdio.bio) dio_bio_submit(dio, &sdio); - blk_finish_plug(&plug); + blk_finish_plug(); /* * It is possible that, we return short IO due to end of file. diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 33a09da..3a293eb 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -183,7 +183,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) ret = err; } if (o_direct) - blk_finish_plug(&plug); + blk_finish_plug(); errout: if (aio_mutex) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 5cb9a21..90ce0cb 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -2302,7 +2302,7 @@ static int ext4_writepages(struct address_space *mapping, blk_start_plug(&plug); ret = write_cache_pages(mapping, wbc, __writepage, mapping); - blk_finish_plug(&plug); + blk_finish_plug(); goto out_writepages; } @@ -2438,7 +2438,7 @@ retry: if (ret) break; } - blk_finish_plug(&plug); + blk_finish_plug(); if (!ret && !cycled && wbc->nr_to_write > 0) { cycled = 1; mpd.last_page = writeback_index - 1; diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 7f794b7..86ba453 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -846,7 +846,7 @@ retry_flush_nodes: goto retry_flush_nodes; } out: - blk_finish_plug(&plug); + blk_finish_plug(); return err; } diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 76adbc3..abeef77 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -678,7 +678,7 @@ static void do_garbage_collect(struct f2fs_sb_info *sbi, unsigned int segno, gc_data_segment(sbi, sum->entries, gc_list, segno, gc_type); break; } - blk_finish_plug(&plug); + blk_finish_plug(); stat_inc_seg_count(sbi, GET_SUM_TYPE((&sum->footer))); stat_inc_call_count(sbi->stat_info); diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 97bd9d3..c4aa9e2 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -1098,7 +1098,7 @@ repeat: ra_node_page(sbi, nid); } - blk_finish_plug(&plug); + blk_finish_plug(); lock_page(page); if (unlikely(page->mapping != NODE_MAPPING(sbi))) { diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 536e7a6..06f25d17 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c @@ -159,7 +159,7 @@ restart: goto restart; } spin_unlock(&sdp->sd_ail_lock); - blk_finish_plug(&plug); + blk_finish_plug(); trace_gfs2_ail_flush(sdp, wbc, 0); } diff --git a/fs/hpfs/buffer.c b/fs/hpfs/buffer.c index 8057fe4..138462d 100644 --- a/fs/hpfs/buffer.c +++ b/fs/hpfs/buffer.c @@ -35,7 +35,7 @@ void hpfs_prefetch_sectors(struct super_block *s, unsigned secno, int n) secno++; n--; } - blk_finish_plug(&plug); + blk_finish_plug(); } /* Map a sector into a buffer and return pointers to it and to the buffer. */ diff --git a/fs/jbd/checkpoint.c b/fs/jbd/checkpoint.c index 08c0304..cd6b09f 100644 --- a/fs/jbd/checkpoint.c +++ b/fs/jbd/checkpoint.c @@ -263,7 +263,7 @@ __flush_batch(journal_t *journal, struct buffer_head **bhs, int *batch_count) blk_start_plug(&plug); for (i = 0; i < *batch_count; i++) write_dirty_buffer(bhs[i], WRITE_SYNC); - blk_finish_plug(&plug); + blk_finish_plug(); for (i = 0; i < *batch_count; i++) { struct buffer_head *bh = bhs[i]; diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c index bb217dc..e1046c3 100644 --- a/fs/jbd/commit.c +++ b/fs/jbd/commit.c @@ -447,7 +447,7 @@ void journal_commit_transaction(journal_t *journal) blk_start_plug(&plug); err = journal_submit_data_buffers(journal, commit_transaction, write_op); - blk_finish_plug(&plug); + blk_finish_plug(); /* * Wait for all previously submitted IO to complete. @@ -697,7 +697,7 @@ start_journal_io: } } - blk_finish_plug(&plug); + blk_finish_plug(); /* Lo and behold: we have just managed to send a transaction to the log. Before we can commit it, wait for the IO so far to diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c index 988b32e..6aa0039 100644 --- a/fs/jbd2/checkpoint.c +++ b/fs/jbd2/checkpoint.c @@ -187,7 +187,7 @@ __flush_batch(journal_t *journal, int *batch_count) blk_start_plug(&plug); for (i = 0; i < *batch_count; i++) write_dirty_buffer(journal->j_chkpt_bhs[i], WRITE_SYNC); - blk_finish_plug(&plug); + blk_finish_plug(); for (i = 0; i < *batch_count; i++) { struct buffer_head *bh = journal->j_chkpt_bhs[i]; diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index b73e021..8f532c8 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -805,7 +805,7 @@ start_journal_io: __jbd2_journal_abort_hard(journal); } - blk_finish_plug(&plug); + blk_finish_plug(); /* Lo and behold: we have just managed to send a transaction to the log. Before we can commit it, wait for the IO so far to diff --git a/fs/mpage.c b/fs/mpage.c index 3e79220..bf7d6c3 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -695,7 +695,7 @@ mpage_writepages(struct address_space *mapping, if (mpd.bio) mpage_bio_submit(WRITE, mpd.bio); } - blk_finish_plug(&plug); + blk_finish_plug(); return ret; } EXPORT_SYMBOL(mpage_writepages); diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c index 1cac3c1..e93b6a8 100644 --- a/fs/nfs/blocklayout/blocklayout.c +++ b/fs/nfs/blocklayout/blocklayout.c @@ -311,7 +311,7 @@ bl_read_pagelist(struct nfs_pgio_header *header) } out: bl_submit_bio(READ, bio); - blk_finish_plug(&plug); + blk_finish_plug(); put_parallel(par); return PNFS_ATTEMPTED; } @@ -433,7 +433,7 @@ bl_write_pagelist(struct nfs_pgio_header *header, int sync) header->res.count = header->args.count; out: bl_submit_bio(WRITE, bio); - blk_finish_plug(&plug); + blk_finish_plug(); put_parallel(par); return PNFS_ATTEMPTED; } diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 1790b00..2f89ca2 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1289,7 +1289,7 @@ _xfs_buf_ioapply( if (size <= 0) break; /* all done */ } - blk_finish_plug(&plug); + blk_finish_plug(); } /* @@ -1823,7 +1823,7 @@ __xfs_buf_delwri_submit( xfs_buf_submit(bp); } - blk_finish_plug(&plug); + blk_finish_plug(); return pinned; } diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c index 098cd78..7e8fa3f 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c @@ -455,7 +455,7 @@ xfs_dir2_leaf_readbuf( } } } - blk_finish_plug(&plug); + blk_finish_plug(); out: *bpp = bp; diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index 82e3142..c3ac5ec 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -196,7 +196,7 @@ xfs_bulkstat_ichunk_ra( &xfs_inode_buf_ops); } } - blk_finish_plug(&plug); + blk_finish_plug(); } /* diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 7f9a516..188133f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1091,6 +1091,7 @@ static inline void blk_post_runtime_resume(struct request_queue *q, int err) {} * schedule() where blk_schedule_flush_plug() is called. */ struct blk_plug { + int depth; /* number of nested plugs */ struct list_head list; /* requests */ struct list_head mq_list; /* blk-mq requests */ struct list_head cb_list; /* md requires an unplug callback */ @@ -1107,7 +1108,7 @@ struct blk_plug_cb { extern struct blk_plug_cb *blk_check_plugged(blk_plug_cb_fn unplug, void *data, int size); extern void blk_start_plug(struct blk_plug *); -extern void blk_finish_plug(struct blk_plug *); +extern void blk_finish_plug(void); extern void blk_flush_plug_list(struct blk_plug *, bool); static inline void blk_flush_plug(struct task_struct *tsk) @@ -1646,7 +1647,7 @@ static inline void blk_start_plug(struct blk_plug *plug) { } -static inline void blk_finish_plug(struct blk_plug *plug) +static inline void blk_finish_plug(void) { } diff --git a/mm/madvise.c b/mm/madvise.c index d551475..18a34ee 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -539,7 +539,7 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) vma = find_vma(current->mm, start); } out: - blk_finish_plug(&plug); + blk_finish_plug(); if (write) up_write(¤t->mm->mmap_sem); else diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 644bcb6..4570f6e 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2020,7 +2020,7 @@ int generic_writepages(struct address_space *mapping, blk_start_plug(&plug); ret = write_cache_pages(mapping, wbc, __writepage, mapping); - blk_finish_plug(&plug); + blk_finish_plug(); return ret; } diff --git a/mm/readahead.c b/mm/readahead.c index 9356758..64182a2 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -136,7 +136,7 @@ static int read_pages(struct address_space *mapping, struct file *filp, ret = 0; out: - blk_finish_plug(&plug); + blk_finish_plug(); return ret; } diff --git a/mm/swap_state.c b/mm/swap_state.c index 405923f..5721f64 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -478,7 +478,7 @@ struct page *swapin_readahead(swp_entry_t entry, gfp_t gfp_mask, SetPageReadahead(page); page_cache_release(page); } - blk_finish_plug(&plug); + blk_finish_plug(); lru_add_drain(); /* Push any new pages onto the LRU now */ skip: diff --git a/mm/vmscan.c b/mm/vmscan.c index 5e8eadd..56bb274 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2222,7 +2222,7 @@ static void shrink_lruvec(struct lruvec *lruvec, int swappiness, scan_adjusted = true; } - blk_finish_plug(&plug); + blk_finish_plug(); sc->nr_reclaimed += nr_reclaimed; /* -- 1.8.3.1 From bfields@fieldses.org Tue Apr 7 16:07:57 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2F5BB7F78 for ; Tue, 7 Apr 2015 16:07:57 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0F783304048 for ; Tue, 7 Apr 2015 14:07:53 -0700 (PDT) X-ASG-Debug-ID: 1428440872-04cb6c1cc76bb70001-NocioJ Received: from fieldses.org (fieldses.org [173.255.197.46]) by cuda.sgi.com with ESMTP id s49FTIhC8DTV33EQ for ; Tue, 07 Apr 2015 14:07:52 -0700 (PDT) X-Barracuda-Envelope-From: bfields@fieldses.org X-Barracuda-Apparent-Source-IP: 173.255.197.46 Received: by fieldses.org (Postfix, from userid 2815) id 0062E2F09; Tue, 7 Apr 2015 17:07:47 -0400 (EDT) Date: Tue, 7 Apr 2015 17:07:47 -0400 To: Christoph Hellwig Cc: xfs@oss.sgi.com, viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org Subject: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Message-ID: <20150407210747.GD3363@fieldses.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts References: <1428420944-20965-1-git-send-email-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1428420944-20965-1-git-send-email-hch@lst.de> User-Agent: Mutt/1.5.21 (2010-09-15) From: bfields@fieldses.org (J. Bruce Fields) X-Barracuda-Connect: fieldses.org[173.255.197.46] X-Barracuda-Start-Time: 1428440872 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17648 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Apr 07, 2015 at 05:35:44PM +0200, Christoph Hellwig wrote: > We want to drop all I/O path locks when recalling layouts, and that includes > i_mutex for the write path. Without this we get stuck processe when recalls > take too long. Also if the writer is an nfsd thread than we'd rather just error out than wait. --b. > > Signed-off-by: Christoph Hellwig > --- > fs/xfs/xfs_file.c | 4 ++-- > fs/xfs/xfs_ioctl.c | 2 +- > fs/xfs/xfs_iops.c | 2 +- > fs/xfs/xfs_pnfs.c | 7 ++++++- > fs/xfs/xfs_pnfs.h | 2 +- > 5 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index a2e1cb8..963dfb2 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -559,7 +559,7 @@ restart: > if (error) > return error; > > - error = xfs_break_layouts(inode, iolock); > + error = xfs_break_layouts(inode, iolock, true); > if (error) > return error; > > @@ -843,7 +843,7 @@ xfs_file_fallocate( > return -EOPNOTSUPP; > > xfs_ilock(ip, iolock); > - error = xfs_break_layouts(inode, &iolock); > + error = xfs_break_layouts(inode, &iolock, false); > if (error) > goto out_unlock; > > diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c > index ac4feae..3a21cc7 100644 > --- a/fs/xfs/xfs_ioctl.c > +++ b/fs/xfs/xfs_ioctl.c > @@ -639,7 +639,7 @@ xfs_ioc_space( > return error; > > xfs_ilock(ip, iolock); > - error = xfs_break_layouts(inode, &iolock); > + error = xfs_break_layouts(inode, &iolock, false); > if (error) > goto out_unlock; > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index e53a903..79520c7 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -975,7 +975,7 @@ xfs_vn_setattr( > uint iolock = XFS_IOLOCK_EXCL; > > xfs_ilock(ip, iolock); > - error = xfs_break_layouts(dentry->d_inode, &iolock); > + error = xfs_break_layouts(dentry->d_inode, &iolock, true); > if (!error) > error = xfs_setattr_size(ip, iattr); > xfs_iunlock(ip, iolock); > diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c > index 365dd57..981a657 100644 > --- a/fs/xfs/xfs_pnfs.c > +++ b/fs/xfs/xfs_pnfs.c > @@ -31,7 +31,8 @@ > int > xfs_break_layouts( > struct inode *inode, > - uint *iolock) > + uint *iolock, > + bool with_imutex) > { > struct xfs_inode *ip = XFS_I(inode); > int error; > @@ -40,8 +41,12 @@ xfs_break_layouts( > > while ((error = break_layout(inode, false) == -EWOULDBLOCK)) { > xfs_iunlock(ip, *iolock); > + if (with_imutex && (*iolock & XFS_IOLOCK_EXCL)) > + mutex_unlock(&inode->i_mutex); > error = break_layout(inode, true); > *iolock = XFS_IOLOCK_EXCL; > + if (with_imutex) > + mutex_lock(&inode->i_mutex); > xfs_ilock(ip, *iolock); > } > > diff --git a/fs/xfs/xfs_pnfs.h b/fs/xfs/xfs_pnfs.h > index b7fbfce..f749475 100644 > --- a/fs/xfs/xfs_pnfs.h > +++ b/fs/xfs/xfs_pnfs.h > @@ -8,7 +8,7 @@ int xfs_fs_map_blocks(struct inode *inode, loff_t offset, u64 length, > int xfs_fs_commit_blocks(struct inode *inode, struct iomap *maps, int nr_maps, > struct iattr *iattr); > > -int xfs_break_layouts(struct inode *inode, uint *iolock); > +int xfs_break_layouts(struct inode *inode, uint *iolock, bool with_imutex); > #else > static inline int xfs_break_layouts(struct inode *inode, uint *iolock) > { > -- > 1.9.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html From david@fromorbit.com Tue Apr 7 17:20:13 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 339C27F7C for ; Tue, 7 Apr 2015 17:20:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id B4798AC002 for ; Tue, 7 Apr 2015 15:20:09 -0700 (PDT) X-ASG-Debug-ID: 1428445206-04cb6c1cc96e270001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id gGyJsQheu7BoQBv0 for ; Tue, 07 Apr 2015 15:20:07 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D6BwDMVyRVPM+HLHlcgwiBLoJHg3urXQaZIAICAQECgS9NAQEBAQEBBwEBAQE4O4QfAQUnExwjEAgDDgoJJQ8FJQMHGhOIKcxMAQEBAQYCAR8YhXiFG4R8B4MXgRYBBJp6i1KJCoQjLDGCQwEBAQ Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail05.adl6.internode.on.net with ESMTP; 08 Apr 2015 07:49:28 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YfbqB-0002uE-IJ; Wed, 08 Apr 2015 08:19:27 +1000 Date: Wed, 8 Apr 2015 08:19:27 +1000 From: Dave Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com, linux-nfs@vger.kernel.org, viro@zeniv.linux.org.uk Subject: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Message-ID: <20150407221927.GD15810@dastard> X-ASG-Orig-Subj: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts References: <1428420944-20965-1-git-send-email-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1428420944-20965-1-git-send-email-hch@lst.de> 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: 1428445206 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17651 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Apr 07, 2015 at 05:35:44PM +0200, Christoph Hellwig wrote: > We want to drop all I/O path locks when recalling layouts, and that includes > i_mutex for the write path. Without this we get stuck processe when recalls > take too long. > > Signed-off-by: Christoph Hellwig ..... > xfs_iunlock(ip, iolock); > diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c > index 365dd57..981a657 100644 > --- a/fs/xfs/xfs_pnfs.c > +++ b/fs/xfs/xfs_pnfs.c > @@ -31,7 +31,8 @@ > int > xfs_break_layouts( > struct inode *inode, > - uint *iolock) > + uint *iolock, > + bool with_imutex) > { > struct xfs_inode *ip = XFS_I(inode); > int error; > @@ -40,8 +41,12 @@ xfs_break_layouts( > > while ((error = break_layout(inode, false) == -EWOULDBLOCK)) { > xfs_iunlock(ip, *iolock); > + if (with_imutex && (*iolock & XFS_IOLOCK_EXCL)) > + mutex_unlock(&inode->i_mutex); > error = break_layout(inode, true); > *iolock = XFS_IOLOCK_EXCL; > + if (with_imutex) > + mutex_lock(&inode->i_mutex); > xfs_ilock(ip, *iolock); > } That's kinda nasty, and it has no documentation explaining when or why we'd need to drop the i_mutex. How are we supposed to know if we need to drop the i_mutex or not? What happens if the upper VFS layers change or we have a multiple call paths that have different i_mutex contexts (i.e. one holds, another doesn't)? Which makes me wonder - is this layout breaking stuff at the right layer? Cheers, Dave. -- Dave Chinner david@fromorbit.com From 3zZIkVQoJAzQdkemSYaTUaWcQYb.SecnVieii.iWY.Sec@trix.bounces.google.com Tue Apr 7 21:30:43 2015 Return-Path: <3zZIkVQoJAzQdkemSYaTUaWcQYb.SecnVieii.iWY.Sec@trix.bounces.google.com> X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.7 required=5.0 tests=DEAR_FRIEND,FREEMAIL_FROM, FREEMAIL_REPLY,HTML_MESSAGE,T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 83AEC7F37 for ; Tue, 7 Apr 2015 21:30:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1A43BAC003 for ; Tue, 7 Apr 2015 19:30:39 -0700 (PDT) X-ASG-Debug-ID: 1428460237-04bdf06323a02c0001-NocioJ Received: from mail-ig0-f200.google.com (mail-ig0-f200.google.com [209.85.213.200]) by cuda.sgi.com with ESMTP id kc5Ljn6EJZof8wHi (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Tue, 07 Apr 2015 19:30:37 -0700 (PDT) X-Barracuda-Envelope-From: 3zZIkVQoJAzQdkemSYaTUaWcQYb.SecnVieii.iWY.Sec@trix.bounces.google.com Received: by igbqf9 with SMTP id qf9so59621276igb.0 for ; Tue, 07 Apr 2015 19:30:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:message-id:date:subject:from:to:content-type; bh=4Lte/G5rvnTS9lYiu3zTMXLhwIwJ93W6TxknTqTh/a0=; b=r+vvjF2Gt/w1IrQm4XOZnmU8XygK45vVMUh3aRlPgCV0fcBQDlR0dg0XOi0+80TV22 XV0yTnOVAeFpl4+lS7zWUyk8Fl+V9UMvDdWe0yWMGmFrs5l4gbwD1W6HdjDFASt0M/Xq d16rxhmo0Sg1y6+WDBVWQ1sv9NIVTKP5Nm0cJG1Ki/j42SwjS/vUWNd1iqOA3N2u1pfM wPtxYffSRlSOUPvgYOp/5l69yFCnpYeSCyGVylebO55kaRHn0MJ1kFT5qTK0FrujpcB6 Ivf6DTx8nYUWaNxdA3om5tw4Dz4h5nwQaR0X/rlD+QEpwvBvthVYABi93WV3D+u0xCiI HOCw== MIME-Version: 1.0 X-Received: by 10.50.62.47 with SMTP id v15mt9438078igr.1.1428460237170; Tue, 07 Apr 2015 19:30:37 -0700 (PDT) X-No-Auto-Attachment: 1 Message-ID: <047d7bdc0ff0034fde05132d512c@google.com> Date: Wed, 08 Apr 2015 02:30:37 +0000 Subject: Re: Led lighting for electrical supply From: nuowcikdek@gmail.com X-ASG-Orig-Subj: Re: Led lighting for electrical supply To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=047d7bdc0ff004565c05132d518b X-Barracuda-Connect: mail-ig0-f200.google.com[209.85.213.200] X-Barracuda-Start-Time: 1428460237 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.50 X-Barracuda-Spam-Status: No, SCORE=2.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0587, DEAR_FRIEND, DKIM_SIGNED, DKIM_VERIFIED, HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17659 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 1.00 DEAR_FRIEND BODY: Dear Friend? That's not very dear! 0.00 HTML_MESSAGE BODY: HTML included in message 1.50 BSF_SC0_MV0587 Custom rule MV0587 --047d7bdc0ff004565c05132d518b Content-Type: text/plain; charset=GB2312; format=flowed; delsp=yes Content-Transfer-Encoding: base64 RGVhciBGcmllbmQsDQpXaGF0IGEgc3VycHJpc2UsIEkndmUgZ290IHlvdXIgaW5mb3JtYXRpb24g dGhyb3VnaCB0aGUgSW50ZXJuZXQuDQpUaGlzIGlzIE5pY2sgZnJvbSBHdWFuZ2RvbmcgTGVtZWlq aWEgTGlnaHRpbmcgQ29tcGFueS4gV2hvIGlzIG9uZSBvZg0KdGhlIGJlc3QgY29tcGFuaWVzIGlu IENoaW5lc2UgTEVEIGxpZ2h0aW5nIGluZHVzdHJ5IGJhc2VkIG9uIGhpZ2gNCnF1YWxpdHkgaXRl bXMuDQpQcm9kdWN0cyBtYWlubHkgaW5jbHVkZSCjumlsbHVtaW5hdGlvbiBsaWdodGluZyBmaXh0 dXJlIGFuZCBkZWNvcmF0aW9uDQpsaWdodCBzZXJpZXMuDQpQbHMgZmVlbCBmcmVlIHRvIGNvbnRh Y3Qgd2l0aCBtZSBpZiB5b3Ugd291bGQgbGlrZSB0byBrbm93IG1vcmUgIQ0KQmVzdCBSZWdhcmRz LCBOaWNrDQpHdWFuZ2RvbmcgTGVtZWlqaWEgTGlnaHRpbmcgQ29tcGFueQ0KQWRkcmVzczogTGlh bkZlbmcgVmlsbGFnZSwgWGlhb2xhbiB0b3duLCBaaG9uZ3NoYW4sIEd1YW5nZG9uZywgQ2hpbmEN CkVtYWlsOiBuaWNrbHVvamlrYW5nQGhvdG1haWwuY29tLyBuaWNrbHVvQHpzbG1qLmNvbQ0KVGVs OiAwMDg2LTc2MC0yMzYxNjkxNg0KTW9iaWxlOiAwMDg2LTEzNzI2MTE3NzE3DQoNCg0KDQoNCg0K DQoNCs7S0tHR+8frxPrM7tC0se21pSBSZTogTGVkIGxpZ2h0aW5nIGZvciBlbGVjdHJpY2FsIHN1 cHBseaGjINKqzO7QtLTLse0NCrWlo6zH67fDzsqjug0KaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20v Zm9ybXMvZC8xYmlzQWlDeWJPck1uT3puVGdMTEIxWTNKR1ZwNTBsWWg4clZsdkw2LW5CMC92aWV3 Zm9ybT9jPTAmdz0xJnVzcD1tYWlsX2Zvcm1fbGluaw0K --047d7bdc0ff004565c05132d518b Content-Type: text/html; charset=GB2312 Content-Transfer-Encoding: quoted-printable

Dear Friend,

What a surprise, I= 9;ve got your information through the Internet.

This is Nick from Guangd= ong Lemeijia Lighting Company. Who is one of the best companies in Chinese = LED lighting industry based on high quality items.

Products mainly includ= e =A3=BAillumination lighting fixture and decoration light series.

Pls f= eel free to contact with me if you would like to know more !

Best Regard= s, Nick

Guangdong Lemeijia Lighting Company
Address: LianFeng Village,= Xiaolan town, Zhongshan, Guangdong, China
Email: nicklu= ojikang@hotmail.com/ ni= ckluo@zslmj.com
Tel: 0086-760-23616916
Mobile: 0086-13726117717

=C8=E7=B9=FB=C4=FA=CE=DE=B7=A8=B2=E9=BF=B4=BB=F2=CC=E1=BD=BB=B4=CB=B1=ED=B5= =A5=A3=AC=BF=C9=D2=D4=D4=DA Google =B1=ED=B5=A5=D6=D0=CC=EE=D0=B4=A1=A3

Re: Led lighting f= or electrical supply

= =BC=BC=CA=F5=CC=E1=B9=A9=A3=BA
3D"Google
=
=B4=CB=C4=DA=C8=DD=B2=BB=CA=C7= =D3=C9 Google =CB=F9=B4=B4=BD=A8=A3=ACGoogle =B2=BB=B6=D4=C6=E4=D7=F7=C8=CE= =BA=CE=B5=A3=B1=A3=A1=A3
=BE=D9=B1=A8=C0=C4=D3=C3=D0=D0=CE=AA - =B7=FE=CE=F1=CC= =F5=BF=EE - =C6=E4= =CB=FB=CC=F5=BF=EE

<= /html> --047d7bdc0ff004565c05132d518b-- From eyniy@qq.com Tue Apr 7 23:21:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5F4527F84 for ; Tue, 7 Apr 2015 23:21:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id D27EEAC003 for ; Tue, 7 Apr 2015 21:21:52 -0700 (PDT) X-ASG-Debug-ID: 1428466909-04cb6c1cc78b920001-NocioJ Received: from smtpbg299.qq.com (smtpbg299.qq.com [184.105.67.99]) by cuda.sgi.com with ESMTP id v6kb3i2yzPhIADiI (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 21:21:50 -0700 (PDT) X-Barracuda-Envelope-From: eyniy@qq.com X-Barracuda-Apparent-Source-IP: 184.105.67.99 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201307; t=1428466908; bh=PX3rKi4Jk48uHLP3O0elOzQIwVZIBRYn8NAJVTXTjKE=; h=X-QQ-FEAT:X-QQ-SSF:X-HAS-ATTACH:X-QQ-BUSINESS-ORIGIN: X-Originating-IP:X-QQ-STYLE:X-QQ-mid:From:To:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Date: X-Priority:Message-ID:X-QQ-MIME:X-Mailer:X-QQ-Mailer:X-QQ-SENDSIZE: X-QQ-FName:X-QQ-LocalIP; b=vq0q9ICoV6dVTFC0jMU7fasjoxgsXn7iGkZP6OWun1bgxmjkFVqTtZk5p6PUt8slw ONkvZLw8ffdBNcnEm79B4YYpuzBtizYWVTJWI1/q1ymg1/CzCd8SIX8ikzO+UypcJq t6JGbl35AltBe7ry8Tj097yaiWDFlKdSpPVjETDY= X-QQ-FEAT: SyMJQTyoRVWZLkgBXzWSo0fSCwYqh1PpCvPWSepKfdM1ZG/PJtNlTKBhy7Mif TrwHhOkweMfY9TnLnKzdq4WaR5+vVzfj9rMVjtEjTgjIgwWR4xXCj+rfNsP96Knw3mlUmAR zu8ptX/C0gbV+Q7Eb0V+USuZ026+v5IQ7jsOSAlkCxA9CR+QYDpj7VuN9paqrLKKjQIaWri WnzLG+6whNLS8v/eOSM+K X-QQ-SSF: 000000000000004000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 59.37.0.213 X-QQ-STYLE: X-QQ-mid: webmail661t1428466905t2541141 From: "=?utf-8?B?WWVZaW4=?=" To: "=?utf-8?B?eGZz?=" Subject: XFS direct IO problem Mime-Version: 1.0 X-ASG-Orig-Subj: XFS direct IO problem Content-Type: multipart/alternative; boundary="----=_NextPart_5524ACD9_0A263138_7BE8E110" Content-Transfer-Encoding: 8Bit Date: Wed, 8 Apr 2015 12:21:45 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-SENDSIZE: 520 X-QQ-FName: 2645B388A9E6475DA0EDC165AF1C355B X-QQ-LocalIP: 163.177.66.155 X-Barracuda-Connect: smtpbg299.qq.com[184.105.67.99] X-Barracuda-Start-Time: 1428466909 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.06 X-Barracuda-Spam-Status: No, SCORE=1.06 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17662 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily This is a multi-part message in MIME format. ------=_NextPart_5524ACD9_0A263138_7BE8E110 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQpBYm91dCAyIG1vbnRocyBhZ28sIEkgYXNrZWQgb25lIHByb2JsZW0gaW4gWEZTLCBz ZWUgaGVyZShodHRwOi8vb3NzLnNnaS5jb20vYXJjaGl2ZXMveGZzLzIwMTUtMDIvbXNnMDAx OTcuaHRtbCkuDQoNCg0KQWZ0ZXIgdGhhdCwgSSB1c2UgZGlyZWN0IElPIGluIE15U1FMLCBz ZWUgaGVyZShodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjUvZW4vaW5ub2Ri LXBhcmFtZXRlcnMuaHRtbCNzeXN2YXJfaW5ub2RiX2ZsdXNoX21ldGhvZCku4oCNDQoNCg0K SG93ZXZlciwgSSBmb3VuZCB0aGF0IE15U1FMIHBlcmZvcm1hbmNlIGlzIHN0aWxsIHBvb3Ig c29tZXRpbWVzLiBJIHVzZSBzb21lIHRvb2xzKGh0dHBzOi8vZ2l0aHViLmNvbS9icmVuZGFu Z3JlZ2cvcGVyZi10b29sc+KAjSkgdG8gdHJhY2UgdGhlIGtlcm5lbCwgSSBmb3VuZCBzb21l IHByb2JsZW1zOg0KDQoNCiMgLi9mdW5jY291bnQgLWkgMSAgInhmc19mKiINClRyYWNpbmcg Inhmc19mKiIuLi4gQ3RybC1DIHRvIGVuZC4NCkZVTkMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDT1VOVA0KeGZzX2ZpbGVfYWlvX3JlYWQgICAgICAgICAgICAgICAgIDE1NTkx DQp4ZnNfZmx1c2hpbnZhbF9wYWdlcyAgICAgICAgICAgICAgMTU1OTENCnhmc19maW5kX2Jk ZXZfZm9yX2lub2RlICAgICAgICAgICAzMTE4MuKAjQ0KDQoNCg0KQXMgd2UgY2FuIHNlZSwg eGZzX2ZpbGVfYWlvX3JlYWQgZWFjaCB3aWxsIGNhbGwg4oCNeGZzX2ZsdXNoaW52YWxfcGFn ZXMuIA0KTm90ZSB0aGF0IEkgdXNlZCBkaXJlY3QgSU8hISHigI0NCg0KDQp4ZnNfZmx1c2hp bnZhbF9wYWdlcyB3aWxsIGNhbGwgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UsIGZyb20g aGVyZShodHRwczovL2JpdGJ1Y2tldC5vcmcvaHVzdGNhdC9rZXJuZWwtMi42LjMyL3NyYy8w ZTVkOTBlZDZmM2VmOGEzYjVmZTYyYTA0Y2M2NzY2YTcyMWM3MGY4L2ZzL3hmcy9saW51eC0y LjYveGZzX2ZzX3N1YnIuYz9hdD1tYXN0ZXIjY2wtNTbigI0p4oCN4oCNDQoNCg0KSW5kZWVk IHRoYXQsDQojIC4vZnVuY2NvdW50IC1pIDEgICJ0cnVuY2F0ZV9pbm9kZV9wYWdlKiINClRy YWNpbmcgInRydW5jYXRlX2lub2RlX3BhZ2UqIi4uLiBDdHJsLUMgdG8gZW5kLg0KRlVOQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPVU5UDQp0cnVuY2F0ZV9pbm9kZV9wYWdl ICAgICAgICAgICAgICAgICAgIDQNCnRydW5jYXRlX2lub2RlX3BhZ2VzICAgICAgICAgICAg ICAgIDE3Ng0KdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UgICAgICAgIDE1NDc0DQpGVU5D ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09VTlQNCnRydW5jYXRlX2lub2RlX3Bh Z2UgICAgICAgICAgICAgICAgICAgMQ0KdHJ1bmNhdGVfaW5vZGVfcGFnZXMgICAgICAgICAg ICAgICAgICA1DQp0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSAgICAgICAgMTU1NjbigI0N Cg0KDQoNCkFzIHdlIGNhbiBzZWUsIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlIGNhbGxl ZCB0aW1lcyBhcyBtYW55IGFzIOKAjXhmc19mbHVzaGludmFsX3BhZ2VzLOKAjQ0KSG93ZXZl ciwgSSBmb3VuZCB0aGF0IHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlIGRpZG4ndCBjYWxs IOKAjXRydW5jYXRlX2lub2RlX3BhZ2U64oCNDQoNCg0KIyAuL2Z1bmNncmFwaCB0cnVuY2F0 ZV9pbm9kZV9wYWdlc19yYW5nZQ0KVHJhY2luZyAidHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFu Z2UiLi4uIEN0cmwtQyB0byBlbmQuDQogIDIpICAgMS4wMjAgdXMgICAgfCAgZmluaXNoX3Rh c2tfc3dpdGNoKCk7DQogIDIpICAgICAgICAgICAgICAgfCAgdHJ1bmNhdGVfaW5vZGVfcGFn ZXNfcmFuZ2UoKSB7DQogIDIpICAgICAgICAgICAgICAgfCAgICBwYWdldmVjX2xvb2t1cCgp IHsNCiAgMikgICAwLjQxMyB1cyAgICB8ICAgICAgZmluZF9nZXRfcGFnZXMoKTsNCiAgMikg ICAxLjAzMyB1cyAgICB8ICAgIH0NCiAgMikgICAwLjIzOCB1cyAgICB8ICAgIF9jb25kX3Jl c2NoZWQoKTsNCiAgMikgICAgICAgICAgICAgICB8ICAgIHBhZ2V2ZWNfbG9va3VwKCkgew0K ICAyKSAgIDAuMjM0IHVzICAgIHwgICAgICBmaW5kX2dldF9wYWdlcygpOw0KICAyKSAgIDAu NjkwIHVzICAgIHwgICAgfQ0KICAyKSAgIDMuMzYyIHVzICAgIHwgIH0NCiAgMikgICAgICAg ICAgICAgICB8ICB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSgpIHsNCiAgMikgICAgICAg ICAgICAgICB8ICAgIHBhZ2V2ZWNfbG9va3VwKCkgew0KICAyKSAgIDAuMjY2IHVzICAgIHwg ICAgICBmaW5kX2dldF9wYWdlcygpOw0KICAyKSAgIDAuNzQ1IHVzICAgIHwgICAgfQ0KICAy KSAgIDAuMjM4IHVzICAgIHwgICAgX2NvbmRfcmVzY2hlZCgpOw0KICAyKSAgICAgICAgICAg ICAgIHwgICAgcGFnZXZlY19sb29rdXAoKSB7DQogIDIpICAgMC4yNDggdXMgICAgfCAgICAg IGZpbmRfZ2V0X3BhZ2VzKCk7DQogIDIpICAgMC43MDEgdXMgICAgfCAgICB9DQogIDIpICAg Mi44NDQgdXMgICAgfCAgfQ0KICAyKSAgICAgICAgICAgICAgIHwgIHRydW5jYXRlX2lub2Rl X3BhZ2VzX3JhbmdlKCkgew0KICAyKSAgICAgICAgICAgICAgIHwgICAgcGFnZXZlY19sb29r dXAoKSB7DQogIDIpICAgMC4yNjIgdXMgICAgfCAgICAgIGZpbmRfZ2V0X3BhZ2VzKCk7DQog IDIpICAgMC43NDAgdXMgICAgfCAgICB9DQogIDIpICAgMC4yMzggdXMgICAgfCAgICBfY29u ZF9yZXNjaGVkKCk7DQogIDIpICAgICAgICAgICAgICAgfCAgICBwYWdldmVjX2xvb2t1cCgp IHsNCiAgMikgICAwLjI1MSB1cyAgICB8ICAgICAgZmluZF9nZXRfcGFnZXMoKTsNCiAgMikg ICAwLjcwNSB1cyAgICB8ICAgIH0NCiAgMikgICAyLjc2NyB1cyAgICB8ICB94oCNDQoNCg0K DQpUaGlzIHdpbGwgY2Fuc2UgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyA+IDAgYWx3YXlz LCBhbmQgeGZzX2ZpbGVfYWlvX3JlYWQveGZzX2ZpbGVfZGlvX2Fpb193cml0ZSB3aWxsIGFs d2F5cyBjYWxsIHhmc19mbHVzaGludmFsX3BhZ2VzLiBFdmVuIHdvcnNlLCB4ZnNfZmlsZV9k aW9fYWlvX3dyaXRlIHdpbGwgdXNlIEVYQ0wgbG9jazrigI3igI3igI0NCg0KDQoJaWYgKG1h cHBpbmctPm5ycGFnZXMgJiYgaW9sb2NrID09IFhGU19JT0xPQ0tfU0hBUkVEKSB7IAkJeGZz X3J3X2l1bmxvY2soaXAsIGlvbG9jayk7IAkJaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOyAJ CXhmc19yd19pbG9jayhpcCwgaW9sb2NrKTsgCX0gDQoNCg0Kc2VlIGhlcmUoaHR0cHM6Ly9i aXRidWNrZXQub3JnL2h1c3RjYXQva2VybmVsLTIuNi4zMi9zcmMvMGU1ZDkwZWQ2ZjNlZjhh M2I1ZmU2MmEwNGNjNjc2NmE3MjFjNzBmOC9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmM/ YXQ9bWFzdGVyI2NsLTY1OeKAjSkuDQoNCg0KVGhpcyB3aWxsIGNhdXNlIGJhZCBwZXJmb3Jt YW5jZSwgZXZlbiBkaXJlY3QgSU8uIEkgc3RpbGwgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgbm90 IHRydW5jYXRlX2lub2RlX3BhZ2UgY2FsbGVkP+KAjQ0KDQoNCkV2ZXJ5IHRpbWUsIGFmdGVy IEkgcnVuIHRoaXM6DQplY2hvIDEgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMNCg0KDQpJ bW1lZGlhdGVseSBlbmhhbmNlIHBlcmZvcm1hbmNlLg0KDQoNClllLA0KVGhhbmtzLg== ------=_NextPart_5524ACD9_0A263138_7BE8E110 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGRpdj5IaSw8L2Rpdj48ZGl2PkFib3V0IDIgbW9udGhzIGFnbywgSSBhc2tlZCBvbmUgcHJv YmxlbSBpbiBYRlMsIHNlZSBoZXJlKDxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41OyI+ aHR0cDovL29zcy5zZ2kuY29tL2FyY2hpdmVzL3hmcy8yMDE1LTAyL21zZzAwMTk3Lmh0bWwp Ljwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41OyI+PGJy Pjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41OyI+QWZ0 ZXIgdGhhdCwgSSB1c2UgZGlyZWN0IElPIGluIE15U1FMLCBzZWUgaGVyZSg8L3NwYW4+aHR0 cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2lubm9kYi1wYXJhbWV0ZXJz Lmh0bWwjc3lzdmFyX2lubm9kYl9mbHVzaF9tZXRob2QpLjxzcGFuIGlkPSJfZWRpdG9yX2Jv b2ttYXJrX3N0YXJ0XzIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4 OyI+4oCNPC9zcGFuPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SG93ZXZlciwgSSBmb3Vu ZCB0aGF0IE15U1FMIHBlcmZvcm1hbmNlIGlzIHN0aWxsIHBvb3Igc29tZXRpbWVzLiBJIHVz ZSBzb21lIHRvb2xzKGh0dHBzOi8vZ2l0aHViLmNvbS9icmVuZGFuZ3JlZ2cvcGVyZi10b29s czxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0XzMiIHN0eWxlPSJkaXNwbGF5OiBu b25lOyBsaW5lLWhlaWdodDogMHB4OyI+4oCNPC9zcGFuPikgdG8gdHJhY2UgdGhlIGtlcm5l bCwgSSBmb3VuZCBzb21lIHByb2JsZW1zOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGRp dj4jIC4vZnVuY2NvdW50IC1pIDEgJm5ic3A7Inhmc19mKiI8L2Rpdj48ZGl2PlRyYWNpbmcg Inhmc19mKiIuLi4gQ3RybC1DIHRvIGVuZC48L2Rpdj48ZGl2PkZVTkMgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtDT1VOVDwvZGl2PjxkaXY+ eGZzX2ZpbGVfYWlvX3JlYWQgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAxNTU5MTwvZGl2PjxkaXY+eGZzX2ZsdXNoaW52YWxfcGFn ZXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTU1 OTE8L2Rpdj48ZGl2Pnhmc19maW5kX2JkZXZfZm9yX2lub2RlICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgMzExODI8c3BhbiBpZD0iX2VkaXRvcl9ib29rbWFya19zdGFy dF81IiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBweDsiPuKAjTwvc3Bh bj48L2Rpdj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkFzIHdlIGNhbiBzZWUsJm5ic3A7 PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjU7Ij54ZnNfZmlsZV9haW9fcmVhZCBlYWNo IHdpbGwgY2FsbCZuYnNwOzxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0XzYiIHN0 eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4OyI+4oCNPC9zcGFuPjwvc3Bh bj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPnhmc19mbHVzaGludmFsX3BhZ2Vz LiZuYnNwOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41 OyI+Tm90ZSB0aGF0IEkgdXNlZCBkaXJlY3QgSU8hISE8c3BhbiBpZD0iX2VkaXRvcl9ib29r bWFya19zdGFydF83IiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBweDsi PuKAjTwvc3Bhbj48L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj54ZnNfZmx1c2hp bnZhbF9wYWdlcyB3aWxsIGNhbGwmbmJzcDt0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSwg ZnJvbSBoZXJlKGh0dHBzOi8vYml0YnVja2V0Lm9yZy9odXN0Y2F0L2tlcm5lbC0yLjYuMzIv c3JjLzBlNWQ5MGVkNmYzZWY4YTNiNWZlNjJhMDRjYzY3NjZhNzIxYzcwZjgvZnMveGZzL2xp bnV4LTIuNi94ZnNfZnNfc3Vici5jP2F0PW1hc3RlciNjbC01NjxzcGFuIGlkPSJfZWRpdG9y X2Jvb2ttYXJrX3N0YXJ0XzEwIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6 IDBweDsiPuKAjTwvc3Bhbj4pPHNwYW4gaWQ9Il9lZGl0b3JfYm9va21hcmtfc3RhcnRfOSIg c3R5bGU9ImRpc3BsYXk6IG5vbmU7IGxpbmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PHNw YW4gaWQ9Il9lZGl0b3JfYm9va21hcmtfc3RhcnRfOCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7 IGxpbmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp dj5JbmRlZWQgdGhhdCw8L2Rpdj48ZGl2PjxkaXY+IyAuL2Z1bmNjb3VudCAtaSAxICZuYnNw OyJ0cnVuY2F0ZV9pbm9kZV9wYWdlKiI8L2Rpdj48ZGl2PlRyYWNpbmcgInRydW5jYXRlX2lu b2RlX3BhZ2UqIi4uLiBDdHJsLUMgdG8gZW5kLjwvZGl2PjxkaXY+RlVOQyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0NPVU5UPC9kaXY+PGRp dj50cnVuY2F0ZV9pbm9kZV9wYWdlICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDQ8L2Rpdj48ZGl2PnRydW5jYXRlX2lu b2RlX3BhZ2VzICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxNzY8L2Rpdj48ZGl2PnRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE1NDc0PC9kaXY+PGRpdj5GVU5DICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Q09VTlQ8L2Rpdj48 ZGl2PnRydW5jYXRlX2lub2RlX3BhZ2UgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTwvZGl2PjxkaXY+dHJ1bmNhdGVf aW5vZGVfcGFnZXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDs1PC9kaXY+PGRpdj50cnVuY2F0ZV9pbm9kZV9wYWdlc19y YW5nZSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxNTU2NjxzcGFuIGlkPSJfZWRpdG9y X2Jvb2ttYXJrX3N0YXJ0XzExIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6 IDBweDsiPuKAjTwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkFzIHdl IGNhbiBzZWUsJm5ic3A7PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjU7Ij50cnVuY2F0 ZV9pbm9kZV9wYWdlc19yYW5nZSBjYWxsZWQgdGltZXMgYXMgbWFueSBhcyZuYnNwOzxzcGFu IGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0XzEyIiBzdHlsZT0iZGlzcGxheTogbm9uZTsg bGluZS1oZWlnaHQ6IDBweDsiPuKAjTwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImxpbmUt aGVpZ2h0OiAxLjU7Ij54ZnNfZmx1c2hpbnZhbF9wYWdlcyw8c3BhbiBpZD0iX2VkaXRvcl9i b29rbWFya19zdGFydF8xMyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGxpbmUtaGVpZ2h0OiAw cHg7Ij7igI08L3NwYW4+PC9zcGFuPjwvZGl2PjxkaXY+SG93ZXZlciwgSSBmb3VuZCB0aGF0 Jm5ic3A7PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjU7Ij50cnVuY2F0ZV9pbm9kZV9w YWdlc19yYW5nZSBkaWRuJ3QgY2FsbCZuYnNwOzxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJr X3N0YXJ0XzE1IiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBweDsiPuKA jTwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjU7Ij50cnVuY2F0 ZV9pbm9kZV9wYWdlOjxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0XzE2IiBzdHls ZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBweDsiPuKAjTwvc3Bhbj48L3NwYW4+ PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPjxicj48L3NwYW4+ PC9kaXY+PGRpdj48ZGl2PiMgLi9mdW5jZ3JhcGggdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFu Z2U8L2Rpdj48ZGl2PlRyYWNpbmcgInRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlIi4uLiBD dHJsLUMgdG8gZW5kLjwvZGl2PjxkaXY+Jm5ic3A7IDIpICZuYnNwOyAxLjAyMCB1cyAmbmJz cDsgJm5ic3A7fCAmbmJzcDtmaW5pc2hfdGFza19zd2l0Y2goKTs8L2Rpdj48ZGl2PiZuYnNw OyAyKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg fCAmbmJzcDt0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSgpIHs8L2Rpdj48ZGl2PiZuYnNw OyAyKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg fCAmbmJzcDsgJm5ic3A7cGFnZXZlY19sb29rdXAoKSB7PC9kaXY+PGRpdj4mbmJzcDsgMikg Jm5ic3A7IDAuNDEzIHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7Zmlu ZF9nZXRfcGFnZXMoKTs8L2Rpdj48ZGl2PiZuYnNwOyAyKSAmbmJzcDsgMS4wMzMgdXMgJm5i c3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwO308L2Rpdj48ZGl2PiZuYnNwOyAyKSAmbmJzcDsg MC4yMzggdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwO19jb25kX3Jlc2NoZWQoKTs8 L2Rpdj48ZGl2PiZuYnNwOyAyKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgfCAmbmJzcDsgJm5ic3A7cGFnZXZlY19sb29rdXAoKSB7PC9kaXY+ PGRpdj4mbmJzcDsgMikgJm5ic3A7IDAuMjM0IHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAm bmJzcDsgJm5ic3A7ZmluZF9nZXRfcGFnZXMoKTs8L2Rpdj48ZGl2PiZuYnNwOyAyKSAmbmJz cDsgMC42OTAgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwO308L2Rpdj48ZGl2PiZu YnNwOyAyKSAmbmJzcDsgMy4zNjIgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7fTwvZGl2Pjxk aXY+Jm5ic3A7IDIpICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyB8ICZuYnNwO3RydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKCkgezwvZGl2Pjxk aXY+Jm5ic3A7IDIpICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDtwYWdldmVjX2xvb2t1cCgpIHs8L2Rpdj48ZGl2PiZu YnNwOyAyKSAmbmJzcDsgMC4yNjYgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwOyAm bmJzcDtmaW5kX2dldF9wYWdlcygpOzwvZGl2PjxkaXY+Jm5ic3A7IDIpICZuYnNwOyAwLjc0 NSB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7fTwvZGl2PjxkaXY+Jm5ic3A7IDIp ICZuYnNwOyAwLjIzOCB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7X2NvbmRfcmVz Y2hlZCgpOzwvZGl2PjxkaXY+Jm5ic3A7IDIpICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDtwYWdldmVjX2xvb2t1cCgp IHs8L2Rpdj48ZGl2PiZuYnNwOyAyKSAmbmJzcDsgMC4yNDggdXMgJm5ic3A7ICZuYnNwO3wg Jm5ic3A7ICZuYnNwOyAmbmJzcDtmaW5kX2dldF9wYWdlcygpOzwvZGl2PjxkaXY+Jm5ic3A7 IDIpICZuYnNwOyAwLjcwMSB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7fTwvZGl2 PjxkaXY+Jm5ic3A7IDIpICZuYnNwOyAyLjg0NCB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDt9 PC9kaXY+PGRpdj4mbmJzcDsgMikgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoKSB7 PC9kaXY+PGRpdj4mbmJzcDsgMikgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwO3BhZ2V2ZWNfbG9va3VwKCkgezwvZGl2 PjxkaXY+Jm5ic3A7IDIpICZuYnNwOyAwLjI2MiB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsg Jm5ic3A7ICZuYnNwO2ZpbmRfZ2V0X3BhZ2VzKCk7PC9kaXY+PGRpdj4mbmJzcDsgMikgJm5i c3A7IDAuNzQwIHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDt9PC9kaXY+PGRpdj4m bmJzcDsgMikgJm5ic3A7IDAuMjM4IHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDtf Y29uZF9yZXNjaGVkKCk7PC9kaXY+PGRpdj4mbmJzcDsgMikgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwO3BhZ2V2ZWNf bG9va3VwKCkgezwvZGl2PjxkaXY+Jm5ic3A7IDIpICZuYnNwOyAwLjI1MSB1cyAmbmJzcDsg Jm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbmRfZ2V0X3BhZ2VzKCk7PC9kaXY+PGRp dj4mbmJzcDsgMikgJm5ic3A7IDAuNzA1IHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJz cDt9PC9kaXY+PGRpdj4mbmJzcDsgMikgJm5ic3A7IDIuNzY3IHVzICZuYnNwOyAmbmJzcDt8 ICZuYnNwO308c3BhbiBpZD0iX2VkaXRvcl9ib29rbWFya19zdGFydF8xNyIgc3R5bGU9ImRp c3BsYXk6IG5vbmU7IGxpbmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PC9kaXY+PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj5UaGlzIHdpbGwgY2Fuc2UgaW5vZGUtJmd0O2lfbWFwcGlu Zy0mZ3Q7bnJwYWdlcyAmZ3Q7IDAgYWx3YXlzLCBhbmQgeGZzX2ZpbGVfYWlvX3JlYWQveGZz X2ZpbGVfZGlvX2Fpb193cml0ZSB3aWxsIGFsd2F5cyBjYWxsJm5ic3A7eGZzX2ZsdXNoaW52 YWxfcGFnZXMuIEV2ZW4gd29yc2UsJm5ic3A7PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiAx LjU7Ij54ZnNfZmlsZV9kaW9fYWlvX3dyaXRlIHdpbGwgdXNlIEVYQ0wgbG9jazo8c3BhbiBp ZD0iX2VkaXRvcl9ib29rbWFya19zdGFydF8yMSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGxp bmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PC9zcGFuPjxzcGFuIGlkPSJfZWRpdG9yX2Jv b2ttYXJrX3N0YXJ0XzIwIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBw eDsiPuKAjTwvc3Bhbj48c3BhbiBpZD0iX2VkaXRvcl9ib29rbWFya19zdGFydF8xOSIgc3R5 bGU9ImRpc3BsYXk6IG5vbmU7IGxpbmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PC9kaXY+ PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPjxicj48L3NwYW4+PC9kaXY+ PGRpdj48cHJlIHN0eWxlPSJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDsg cGFkZGluZzogMHB4OyBmb250LWZhbWlseTogQ29uc29sYXMsIE1lbmxvLCAnTGliZXJhdGlv biBNb25vJywgQ291cmllciwgbW9ub3NwYWNlOyBmb250LXNpemU6IDEycHg7IGxpbmUtaGVp Z2h0OiAxLjQ7IGNvbG9yOiByZ2IoNTEsIDUxLCA1MSk7Ij4JPHNwYW4gY2xhc3M9ImsiIHN0 eWxlPSJmb250LXdlaWdodDogYm9sZDsiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0icCI+KDwv c3Bhbj48c3BhbiBjbGFzcz0ibiI+bWFwcGluZzwvc3Bhbj48c3BhbiBjbGFzcz0ibyIgc3R5 bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+LSZndDs8L3NwYW4+PHNwYW4gY2xhc3M9Im4iPm5y cGFnZXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJvIiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7 Ij4mYW1wOyZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0ibiI+aW9sb2NrPC9zcGFuPiA8c3Bh biBjbGFzcz0ibyIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+PT08L3NwYW4+IDxzcGFu IGNsYXNzPSJuIj5YRlNfSU9MT0NLX1NIQVJFRDwvc3Bhbj48c3BhbiBjbGFzcz0icCI+KTwv c3Bhbj4gPHNwYW4gY2xhc3M9InAiPns8L3NwYW4+CjxhIG5hbWU9ImNsLTY1OCIgc3R5bGU9 ImNvbG9yOiByZ2IoNTMsIDExNCwgMTc2KTsiPjwvYT4JCTxzcGFuIGNsYXNzPSJuIj54ZnNf cndfaXVubG9jazwvc3Bhbj48c3BhbiBjbGFzcz0icCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0i biI+aXA8L3NwYW4+PHNwYW4gY2xhc3M9InAiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuIj5p b2xvY2s8L3NwYW4+PHNwYW4gY2xhc3M9InAiPik7PC9zcGFuPgo8YSBuYW1lPSJjbC02NTki IHN0eWxlPSJjb2xvcjogcmdiKDUzLCAxMTQsIDE3Nik7IGRpc3BsYXk6IGJsb2NrOyBwb3Np dGlvbjogYWJzb2x1dGU7IGxlZnQ6IDBweDsgaGVpZ2h0OiAxNnB4OyB3aWR0aDogMTE2N3B4 OyB6LWluZGV4OiAtMTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzNSwgMjQyLCAyNDkpOyI+ PC9hPgkJPHNwYW4gY2xhc3M9Im4iPmlvbG9jazwvc3Bhbj4gPHNwYW4gY2xhc3M9Im8iIHN0 eWxlPSJmb250LXdlaWdodDogYm9sZDsiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJuIj5YRlNf SU9MT0NLX0VYQ0w8L3NwYW4+PHNwYW4gY2xhc3M9InAiPjs8L3NwYW4+CjxhIG5hbWU9ImNs LTY2MCIgc3R5bGU9ImNvbG9yOiByZ2IoNTMsIDExNCwgMTc2KTsiPjwvYT4JCTxzcGFuIGNs YXNzPSJuIj54ZnNfcndfaWxvY2s8L3NwYW4+PHNwYW4gY2xhc3M9InAiPig8L3NwYW4+PHNw YW4gY2xhc3M9Im4iPmlwPC9zcGFuPjxzcGFuIGNsYXNzPSJwIj4sPC9zcGFuPiA8c3BhbiBj bGFzcz0ibiI+aW9sb2NrPC9zcGFuPjxzcGFuIGNsYXNzPSJwIj4pOzwvc3Bhbj4KPGEgbmFt ZT0iY2wtNjYxIiBzdHlsZT0iY29sb3I6IHJnYig1MywgMTE0LCAxNzYpOyI+PC9hPgk8c3Bh biBjbGFzcz0icCI+fTwvc3Bhbj4KPC9wcmU+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5z ZWUgaGVyZShodHRwczovL2JpdGJ1Y2tldC5vcmcvaHVzdGNhdC9rZXJuZWwtMi42LjMyL3Ny Yy8wZTVkOTBlZDZmM2VmOGEzYjVmZTYyYTA0Y2M2NzY2YTcyMWM3MGY4L2ZzL3hmcy9saW51 eC0yLjYveGZzX2ZpbGUuYz9hdD1tYXN0ZXIjY2wtNjU5PHNwYW4gaWQ9Il9lZGl0b3JfYm9v a21hcmtfc3RhcnRfMjMiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4 OyI+4oCNPC9zcGFuPikuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGlzIHdpbGwgY2F1 c2UgYmFkIHBlcmZvcm1hbmNlLCBldmVuIGRpcmVjdCBJTy4gSSBzdGlsbCBkb24ndCB1bmRl cnN0YW5kIHdoeSBub3QmbmJzcDs8c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPnRy dW5jYXRlX2lub2RlX3BhZ2UgY2FsbGVkPzxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0 YXJ0XzI0IiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBweDsiPuKAjTwv c3Bhbj48L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsi Pjxicj48L3NwYW4+PC9kaXY+PGRpdj5FdmVyeSB0aW1lLCBhZnRlciBJIHJ1biB0aGlzOjwv ZGl2PjxkaXY+ZWNobyAxICZndDsgL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzPC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj5JbW1lZGlhdGVseSBlbmhhbmNlIHBlcmZvcm1hbmNlLjwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+WWUsPC9kaXY+PGRpdj5UaGFua3MuPC9kaXY+PGRpdj48 YnI+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPjxicj48L3Nw YW4+PC9kaXY+ ------=_NextPart_5524ACD9_0A263138_7BE8E110-- From haruna@netshuukyaku.com Tue Apr 7 23:26:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 96C1A29DFB for ; Tue, 7 Apr 2015 23:26:33 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 85703304048 for ; Tue, 7 Apr 2015 21:26:30 -0700 (PDT) X-ASG-Debug-ID: 1428467185-04cbb056b4b1f70001-NocioJ Received: from www1923.sakura.ne.jp (www1923.sakura.ne.jp [59.106.27.163]) by cuda.sgi.com with ESMTP id TVm9CdmXA5G6RfRE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 07 Apr 2015 21:26:26 -0700 (PDT) X-Barracuda-Envelope-From: haruna@netshuukyaku.com X-Barracuda-Apparent-Source-IP: 59.106.27.163 Received: from www1923.sakura.ne.jp (localhost [127.0.0.1]) by www1923.sakura.ne.jp (8.14.5/8.14.5) with ESMTP id t384QOAH090735 for ; Wed, 8 Apr 2015 13:26:24 +0900 (JST) (envelope-from haruna@netshuukyaku.com) Received: (from seishin@localhost) by www1923.sakura.ne.jp (8.14.5/8.14.5/Submit) id t384QOTM090733; Wed, 8 Apr 2015 13:26:24 +0900 (JST) (envelope-from haruna@netshuukyaku.com) Date: Wed, 8 Apr 2015 13:26:24 +0900 (JST) Message-Id: <201504080426.t384QOTM090733@www1923.sakura.ne.jp> X-Authentication-Warning: www1923.sakura.ne.jp: seishin set sender to haruna@netshuukyaku.com using -f Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit MIME-Version: 1.0 To: xfs@oss.sgi.com From: =?ISO-2022-JP?B?IhskQjo0RiMhIT1VOlobKEIi?= Subject: =?ISO-2022-JP?B?GyRCJU4hPCUzJTklSCROPCtBM0hvGyhC?= =?ISO-2022-JP?B?GyRCJWolcyUvJEchIjRKQzEhJjBCQTQkSxsoQg==?= SEO =?ISO-2022-JP?B?GyRCQlA6diQsJEckLSRrJTUlJCVIJHI6bhsoQg==?= =?ISO-2022-JP?B?GyRCJGokXiQ3JD8hIzhEP007djZIPGdNTRsoQg==?= =?ISO-2022-JP?B?GyRCJGRDZj4uNGs2SE1NJE4lNSUkJUgkYhsoQg==?= =?ISO-2022-JP?B?GyRCJD8kLyQ1JHM+ZTBMST08KCQ1JGwkRiReJDkhIxsoQg==?= X-Barracuda-Connect: www1923.sakura.ne.jp[59.106.27.163] X-Barracuda-Start-Time: 1428467186 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-ASG-Orig-Subj: =?ISO-2022-JP?B?GyRCJU4hPCUzJTklSCROPCtBM0hvGyhC?= =?ISO-2022-JP?B?GyRCJWolcyUvJEchIjRKQzEhJjBCQTQkSxsoQg==?= SEO =?ISO-2022-JP?B?GyRCQlA6diQsJEckLSRrJTUlJCVIJHI6bhsoQg==?= =?ISO-2022-JP?B?GyRCJGokXiQ3JD8hIzhEP007djZIPGdNTRsoQg==?= =?ISO-2022-JP?B?GyRCJGRDZj4uNGs2SE1NJE4lNSUkJUgkYhsoQg==?= =?ISO-2022-JP?B?GyRCJD8kLyQ1JHM+ZTBMST08KCQ1JGwkRiReJDkhIxsoQg==?= X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HAJIMEMASHITE, ISO2022JP_BODY, ISO2022JP_CHARSET, MATTERU, MURYOU X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17662 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 ISO2022JP_CHARSET ISO-2022-JP message 0.30 MATTERU BODY: matteru -0.10 ISO2022JP_BODY BODY: ISO-2022-JP message 0.40 HAJIMEMASHITE HAJIMEMASHITE 0.50 MURYOU MURYOU $B%&%'%V%5%$%H4IM}.4k6HMM$,!"L5NA$G4JC1$K%d%U!<$d%0!<%0%k$G$N(B $B>e0LI=<($,$G$-$k$h$&$K$9$k$?$a$N!"(B $B!V<+A3$JHo%j%s%/$NA}2C;Y1g%5%$%H!W$rN)$A>e$2$^$7$?!#(B $B%5%$%H!'(BSEO$BBP:v%-%s%0!!(Bhttp://www.seotaisakuking.com $B$D$-$^$7$F$O!"$;$C$+$/:n$j$^$7$?$N$G!"(B $B$?$/$5$s$NJ}$K$4MxMQ$$$?$@$-$?$$$H;W$$!"(B $B=i$a$F$J$,$i%a!<%k$5$;$F$$$?$@$-$^$7$?!#(B $BHqMQ$,$+$+$k$3$H$OA4$/$J$/!"(B $B%+%s%?%s$K!"0lHL$NM%NI%5%$%H$+$i!"(B $B9%$-$J%-!<%o!<%I$G<+A3$JHo%j%s%/$r$b$i$&$3$H$,$G$-$^$9!#(B $B$5$i$K!"Ho%j%s%/$N?t$b!"H>1J5WE*$KA}$(B3$1$k$H$$$&!"(B $B<+J,$G8@$&$N$b2?$G$9$,!"7k9=%9%4%$;EAH$_$G$9!#(B $B$b$A$m$s!"<+A3$JHo%j%s%/$J$N$G!"%Z%J%k%F%#$N?4G[$b$J$/!"0BA4$G$9!#(B $Be0LI=<($,$G$-$k$h$&$K$J$C$?$H8fNi$N%a!<%k$r$?$/$5$sD:$$$F$*$j$^$9!#(B $B8fe$K$*LrN)$FD:$1$l$P!"(B $B$H$F$b4r$7$$$G$9!#(B $B$=$l$G$O!"%5%$%H$G$*BT$A$7$F$*$j$^$9!#(B SEO$BBP:v%-%s%0!!(Bhttp://www.seotaisakuking.com $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B:4F#!!=U:Z(B $B%a!<%k(B: haruna@netshuukyaku.com $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B From david@fromorbit.com Tue Apr 7 23:50:00 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C97567F87 for ; Tue, 7 Apr 2015 23:50:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 43C36AC003 for ; Tue, 7 Apr 2015 21:50:00 -0700 (PDT) X-ASG-Debug-ID: 1428468597-04cbb056b1b27d0001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id DMXBBfBunyoOyogC for ; Tue, 07 Apr 2015 21:49:58 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AjEgDXsiRVPM+HLHlSCoMIUlyCR06uehIGkyuFdQICAQECgS5NAQEBAQEBBwEBAQE4O0ECg1sBAQEDASMPASMjBQsIAxgCAgUhAgIPBSUDBxoTiCIHDrRulmgBAQEBAQUBAQEBAR0YgQmEb4UbgmaBOV0HgmgvgRYFlGyGDpRchCMsMQEBgkEBAQE Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail06.adl6.internode.on.net with ESMTP; 08 Apr 2015 14:19:57 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1Yfhw3-0003as-Lq; Wed, 08 Apr 2015 14:49:55 +1000 Date: Wed, 8 Apr 2015 14:49:55 +1000 From: Dave Chinner To: YeYin Cc: xfs Subject: Re: XFS direct IO problem Message-ID: <20150408044955.GE15810@dastard> X-ASG-Orig-Subj: Re: XFS direct IO problem References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1428468597 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17662 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Apr 08, 2015 at 12:21:45PM +0800, YeYin wrote: > Hi, About 2 months ago, I asked one problem in XFS, see > here(http://oss.sgi.com/archives/xfs/2015-02/msg00197.html). > > > After that, I use direct IO in MySQL, see > here(https://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_flush_method).‍ > > > However, I found that MySQL performance is still poor sometimes. I > use some tools(https://github.com/brendangregg/perf-tools‍) to > trace the kernel, I found some problems: > This will cause bad performance, even direct IO. I still don't > understand why not truncate_inode_page called? Because the cached page must be outside the range of the direct IO that is in progress - direct IO only tries to flush pages over the range it is doing the IO over. > Every time, after I run this: echo 1 > /proc/sys/vm/drop_caches > > Immediately enhance performance. Because that flushes whatever page is in the cache. Can you identify what offset that cached page is at? Tracing the xfs events will tell you what pages that operation invalidates on each inode, and knowing the offset may tell us why that page is not getting flushed. Alternatively, write a simple C program that deomnstrates the same problem so we can reproduce it easily, fix the problem and turn it into a regression test.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From eyniy@qq.com Wed Apr 8 02:06:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, MANY_SPAN_IN_TEXT,T_DKIM_INVALID autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E7A877F61 for ; Wed, 8 Apr 2015 02:06:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id D65318F8084 for ; Wed, 8 Apr 2015 00:06:05 -0700 (PDT) X-ASG-Debug-ID: 1428476762-04cb6c1cc88f0e0001-NocioJ Received: from smtpbg299.qq.com (smtpbg299.qq.com [184.105.67.99]) by cuda.sgi.com with ESMTP id P4Au8YGEJaMzVg6L (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 00:06:03 -0700 (PDT) X-Barracuda-Envelope-From: eyniy@qq.com X-Barracuda-Apparent-Source-IP: 184.105.67.99 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201307; t=1428476760; bh=bWeMS24PMxfNUFeilzYzxXUqcRqJIWO0dH3CLl8uLw8=; h=X-QQ-FEAT:X-QQ-SSF:X-HAS-ATTACH:X-QQ-BUSINESS-ORIGIN: X-Originating-IP:In-Reply-To:References:X-QQ-STYLE:X-QQ-mid:From:To:Cc:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Date: X-Priority:Message-ID:X-QQ-MIME:X-Mailer:X-QQ-Mailer: X-QQ-ReplyHash:X-QQ-SENDSIZE:X-QQ-FName:X-QQ-LocalIP; b=RelbBeFcRwCBwccY0yU+QAdLF3RcfHz7glVSTCsZwypblPS+8QNRchD0MpOEBDsUE ihPYN3muTS6H75X5f9XbB8QLVc8EE2EnldvKTrw84uUFXykxP/yMExxU8qdep5bd7M oT0/8FDco1gdyT6jw99PrBGe0/UBW/cxsMAzsh3A= X-QQ-FEAT: re5661tQpWnxDhmwjZdlPZ8PZlG29kuaQL7Yc0sLBhGmWdZ+HbrYAlLXhsz/a AzC1aV2TxDjlMxEjVPCXKM6klkKPnwgm+WJWlfp+krPuIKTseWgta08TxbL3gGgbizyZCic Xuhy5a6oK0klSKg/yBux+6QYw0mgJEf/Pl2CIcgvqIkYehrsaissYaoBeZaz5BW9vl2cAqN h6lyD3ApJBWc+oHbuMe/HrW3+kCI+ZD8= X-QQ-SSF: 000000000000004000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 59.37.0.213 In-Reply-To: <20150408044955.GE15810@dastard> References: <20150408044955.GE15810@dastard> X-QQ-STYLE: X-QQ-mid: webmail661t1428476757t1624925 From: "=?utf-8?B?WWVZaW4=?=" To: "=?utf-8?B?RGF2ZSBDaGlubmVy?=" Cc: "=?utf-8?B?eGZz?=" Subject: =?utf-8?B?5Zue5aSN77yaIFhGUyBkaXJlY3QgSU8gcHJvYmxl?= =?utf-8?B?bQ==?= Mime-Version: 1.0 X-ASG-Orig-Subj: =?utf-8?B?5Zue5aSN77yaIFhGUyBkaXJlY3QgSU8gcHJvYmxl?= =?utf-8?B?bQ==?= Content-Type: multipart/alternative; boundary="----=_NextPart_5524D355_0987CF90_101DEF71" Content-Transfer-Encoding: 8Bit Date: Wed, 8 Apr 2015 15:05:57 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 474900950 X-QQ-SENDSIZE: 520 X-QQ-FName: C5FC0F0CD74643C68A30BB7A4A25562C X-QQ-LocalIP: 58.250.132.20 X-Barracuda-Connect: smtpbg299.qq.com[184.105.67.99] X-Barracuda-Start-Time: 1428476763 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.81 X-Barracuda-Spam-Status: No, SCORE=1.81 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_RULE_7580G, BSF_SC0_MISMATCH_TO, BSF_SC0_MV0113c, DKIM_SIGNED, DKIM_VERIFIED, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17665 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily 0.75 BSF_RULE_7580G Custom Rule 7580G This is a multi-part message in MIME format. ------=_NextPart_5524D355_0987CF90_101DEF71 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGF2ZSwNClRoYW5rIHlvdSBmb3IgeW91ciBleHBsYW5hdGlvbi4gSSBnb3QgdGhlIHJlYXNv biwgYW5kIEkgd3JpdGUgc29tZSBjb2RlIHRvICBzaW11bGF0ZSB0aGUgTXlTUUwuSXQgd2ls bCByZXByb2R1Y2UgdGhlIHByb2dyZXNzOuKAjQ0KDQoNCm9wZW4gZmlsZSB3aXRob3V0IGRp cmVjdCBmbGFnDQpyZWFkIGZpbGUgICAvL2NhdXNlIGtlcm5lbCByZWFkYWhlYWQgNCBwYWdl cywgYW5kIGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMgPiAwDQpjbG9zZSBmaWxlDQoNCg0K b3BlbiBmaWxlIHdpdGggZGlyZWN0IGZsYWcNCmxzZWVrIDQqNDA5NiAvLyBza2lwIDQgcmVh ZGFoZWFkIHBhZ2VzDQpyZWFkICBmaWxlIC8vY2F1c2UgeGZzX2ZsdXNoaW52YWxfcGFnZXMg dG8gZG8gbm90aGluZw0KLi4uDQoNCg0KSSdkIGxpa2UgdG8gYXNrIFhGUyBob3cgdG8gcmVz b3ZsZSB0aGlzIHByb2JsZW0/DQoNCg0KQXR0YWNoIGNvZGXvvJrigI0NCiANCi8qIGdjYyAt byB0ZXN0X3JlYWQgdGVzdF9yZWFkLmMNCiANCiAqIGRkIGlmPS9kZXYvemVybyBvZj0vZGF0 YTEvZm8uZGF0IGJzPTQwOTYgY291bnQ9MTANCiANCiAqIC4vdGVzdF9yZWFkIC9kYXRhMS9m by5kYXQgMiBkaXJlY3QNCiANCiAqICovDQogDQojZGVmaW5lIF9HTlVfU09VUkNFDQogDQoj aW5jbHVkZSA8c3RkaW8uaD4NCiANCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiANCiNpbmNsdWRl IDxzeXMvdHlwZXMuaD4NCiANCiNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KIA0KI2luY2x1ZGUg PGZjbnRsLmg+DQogDQojaW5jbHVkZSA8ZXJybm8uaD4NCiANCiNpbmNsdWRlIDxzdHJpbmcu aD4NCiANCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiANCg0KDQogDQojZGVmaW5lIEJVRlNJWkUg NDA5Ng0KIA0KDQoNCiANCmludCByZWFkX2NvdW50ID0gMjsNCiANCg0KDQogDQppbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKXsNCiANCglpZihhcmdjIDwgMyl7DQogDQoJCWZw cmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIDxmaWxlPiA8Y291bnQ+IFtidWZmZXJ8ZGlyZWN0 XVxuIiwgYXJndlswXSk7DQogDQoJCWV4aXQoMSk7DQogDQoJfQ0KIA0KCWNoYXIgKmJ1ZiA9 IG1lbWFsaWduKEJVRlNJWkUgLSAxLCBCVUZTSVpFKTsNCiANCgljaGFyICpmaWxlID0gYXJn dlsxXTsNCiANCglyZWFkX2NvdW50ID0gYXRvaShhcmd2WzJdKTsNCiANCglpbnQgcmV0ID0g MCxzdW0gPSAwLCBpID0gMCwgZmQgPSAtMTsNCiANCglpZihhcmdjID09IDQgJiYgc3RybmNt cChhcmd2WzNdLCAiZGlyZWN0Iiw2KSA9PSAwKXsNCiANCgkJLy9mZCA9IG9wZW4oZmlsZSwg T19SRE9OTFl8T19ESVJFQ1QpOw0KIA0KCQlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOw0K IA0KCQlpZihmZCA8IDApew0KIA0KCQkJZnByaW50ZihzdGRlcnIsICJvcGVuIHJlYWQgb25s eSBmaWxlIGZhaWxlZFxuIik7DQogDQoJCQlleGl0KDEpOw0KIA0KCQl9DQogDQoJCXJldCA9 IHJlYWQoZmQsIGJ1ZiwgQlVGU0laRSk7DQogDQoJCWlmKHJldCA8IDApew0KIA0KCQkJZnBy aW50ZihzdGRlcnIsICJidWZmZXIgcmVhZCBlcnJvclxuIik7DQogDQoJCX0NCiANCgkJY2xv c2UoZmQpOw0KIA0KCQlmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTsNCiANCgkJaWYoZmQgPCAw KXsNCiANCgkJCWZwcmludGYoc3RkZXJyLCAib3BlbiByZWFkIG9ubHkgZmlsZSBmYWlsZWRc biIpOw0KIA0KCQkJZXhpdCgxKTsNCiANCgkJfQ0KIA0KDQoNCiANCgkJaWYgKGZjbnRsKGZk LCBGX1NFVEZMLCBPX1JET05MWXxPX0RJUkVDVCkgPT0gLTEpIHsNCiANCgkJCWZwcmludGYo c3RkZXJyLCAic2V0IGRpcmVjdCBlcnJvclxuIik7DQogDQoJCQlleGl0KDEpOw0KIA0KCQl9 DQogDQoNCg0KIA0KCX1lbHNlew0KIA0KCQlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOw0K IA0KCQlpZihmZCA8IDApew0KIA0KCQkJZnByaW50ZihzdGRlcnIsICJvcGVuIGJ1ZiBmaWxl IGZhaWxlZFxuIik7DQogDQoJCQlleGl0KDEpOw0KIA0KCQl9DQogDQoJfQ0KIA0KDQoNCiAN Cgl3aGlsZShpKysgPCByZWFkX2NvdW50KXsNCiANCgkJLy9tZW1zZXQoYnVmLCAwLCBCVUZT SVpFKTsNCiANCgkJaWYoYnVmID09IE5VTEwpew0KIA0KCQkJZnByaW50ZihzdGRlcnIsICJt ZW1vcnkgYWxsb2NhdGUgZmFpbGVkXG4iKTsNCiANCgkJCWV4aXQoMSk7DQogDQoJCX0NCiAN CgkJaWYobHNlZWsoZmQsIDQqNDA5NiwgU0VFS19TRVQpIDwgMCl7DQogDQoJCQlmcHJpbnRm KHN0ZGVyciwgInNlZWsgZXJyb3IhXG4iKTsNCiANCgkJCWJyZWFrOw0KIA0KCQl9DQogDQoJ CXJldCA9IHJlYWQoZmQsIGJ1ZiwgQlVGU0laRSk7DQogDQoJCWlmKHJldCA+IDApew0KIA0K CQkJc3VtICs9IHJldDsNCiANCgkJfWVsc2UgaWYocmV0ID09IDApew0KIA0KCQkJcHJpbnRm KCJyZWFkIGVuZFxuIik7DQogDQoJCQlicmVhazsNCiANCgkJfQ0KIA0KCQllbHNlew0KIA0K CQkJcHJpbnRmKCJlcnJvcjolZFxuIiwgZXJybm8pOw0KIA0KCQkJYnJlYWs7DQogDQoJCX0N CiANCgkJc2xlZXAoMSk7DQogDQoJfQ0KIA0KCXByaW50ZigicmVhZCBzdW06ICVkXG4iLCBz dW0pOw0KIA0KCWNsb3NlKGZkKTsNCiANCglmcmVlKGJ1Zik7DQogDQoJcmV0dXJuIDA7DQog DQp94oCNDQoNCg0KDQoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tIOWOn+Wni+mCruS7tiAtLS0t LS0tLS0tLS0tLS0tLS0NCuWPkeS7tuS6ujogIkRhdmUgQ2hpbm5lciI7PGRhdmlkQGZyb21v cmJpdC5jb20+Ow0K5Y+R6YCB5pe26Ze0OiAyMDE15bm0NOaciDjml6Uo5pif5pyf5LiJKSDk uK3ljYgxMjo0OQ0K5pS25Lu25Lq6OiAiWWVZaW4iPGV5bml5QHFxLmNvbT47IA0K5oqE6YCB OiAieGZzIjx4ZnNAb3NzLnNnaS5jb20+OyANCuS4u+mimDogUmU6IFhGUyBkaXJlY3QgSU8g cHJvYmxlbQ0KDQoNCg0KT24gV2VkLCBBcHIgMDgsIDIwMTUgYXQgMTI6MjE6NDVQTSArMDgw MCwgWWVZaW4gd3JvdGU6DQo+IEhpLCBBYm91dCAyIG1vbnRocyBhZ28sIEkgYXNrZWQgb25l IHByb2JsZW0gaW4gWEZTLCBzZWUNCj4gaGVyZShodHRwOi8vb3NzLnNnaS5jb20vYXJjaGl2 ZXMveGZzLzIwMTUtMDIvbXNnMDAxOTcuaHRtbCkuDQo+IA0KPiANCj4gQWZ0ZXIgdGhhdCwg SSB1c2UgZGlyZWN0IElPIGluIE15U1FMLCBzZWUNCj4gaGVyZShodHRwczovL2Rldi5teXNx bC5jb20vZG9jL3JlZm1hbi81LjUvZW4vaW5ub2RiLXBhcmFtZXRlcnMuaHRtbCNzeXN2YXJf aW5ub2RiX2ZsdXNoX21ldGhvZCku4oCNDQo+IA0KPiANCj4gSG93ZXZlciwgSSBmb3VuZCB0 aGF0IE15U1FMIHBlcmZvcm1hbmNlIGlzIHN0aWxsIHBvb3Igc29tZXRpbWVzLiBJDQo+IHVz ZSBzb21lIHRvb2xzKGh0dHBzOi8vZ2l0aHViLmNvbS9icmVuZGFuZ3JlZ2cvcGVyZi10b29s c+KAjSkgdG8NCj4gdHJhY2UgdGhlIGtlcm5lbCwgSSBmb3VuZCBzb21lIHByb2JsZW1zOg0K DQo8c25pcD4NCg0KPiBUaGlzIHdpbGwgY2F1c2UgYmFkIHBlcmZvcm1hbmNlLCBldmVuIGRp cmVjdCBJTy4gSSBzdGlsbCBkb24ndA0KPiB1bmRlcnN0YW5kIHdoeSBub3QgdHJ1bmNhdGVf aW5vZGVfcGFnZSBjYWxsZWQ/DQoNCkJlY2F1c2UgdGhlIGNhY2hlZCBwYWdlIG11c3QgYmUg b3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBJTw0KdGhhdCBpcyBpbiBwcm9ncmVz cyAtIGRpcmVjdCBJTyBvbmx5IHRyaWVzIHRvIGZsdXNoIHBhZ2VzIG92ZXIgdGhlDQpyYW5n ZSBpdCBpcyBkb2luZyB0aGUgSU8gb3Zlci4NCg0KPiBFdmVyeSB0aW1lLCBhZnRlciBJIHJ1 biB0aGlzOiBlY2hvIDEgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMNCj4gDQo+IEltbWVk aWF0ZWx5IGVuaGFuY2UgcGVyZm9ybWFuY2UuDQoNCkJlY2F1c2UgdGhhdCBmbHVzaGVzIHdo YXRldmVyIHBhZ2UgaXMgaW4gdGhlIGNhY2hlLiBDYW4geW91IGlkZW50aWZ5DQp3aGF0IG9m ZnNldCB0aGF0IGNhY2hlZCBwYWdlIGlzIGF0PyBUcmFjaW5nIHRoZSB4ZnMgZXZlbnRzIHdp bGwgdGVsbA0KeW91IHdoYXQgcGFnZXMgdGhhdCBvcGVyYXRpb24gaW52YWxpZGF0ZXMgb24g ZWFjaCBpbm9kZSwgYW5kIGtub3dpbmcNCnRoZSBvZmZzZXQgbWF5IHRlbGwgdXMgd2h5IHRo YXQgcGFnZSBpcyBub3QgZ2V0dGluZyBmbHVzaGVkLg0KDQpBbHRlcm5hdGl2ZWx5LCB3cml0 ZSBhIHNpbXBsZSBDIHByb2dyYW0gdGhhdCBkZW9tbnN0cmF0ZXMgdGhlIHNhbWUNCnByb2Js ZW0gc28gd2UgY2FuIHJlcHJvZHVjZSBpdCBlYXNpbHksIGZpeCB0aGUgcHJvYmxlbSBhbmQg dHVybiBpdA0KaW50byBhIHJlZ3Jlc3Npb24gdGVzdC4uLi4NCg0KQ2hlZXJzLA0KDQpEYXZl Lg0KLS0gDQpEYXZlIENoaW5uZXINCmRhdmlkQGZyb21vcmJpdC5jb20= ------=_NextPart_5524D355_0987CF90_101DEF71 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGRpdj4mbmJzcDtEYXZlLDwvZGl2PjxkaXY+VGhhbmsgeW91IGZvciB5b3VyJm5ic3A7ZXhw bGFuYXRpb24uIEkgZ290IHRoZSByZWFzb24sIGFuZCBJIHdyaXRlIHNvbWUgY29kZSB0byAm bmJzcDtzaW11bGF0ZSB0aGUgTXlTUUwuSXQgd2lsbCByZXByb2R1Y2UgdGhlIHByb2dyZXNz OjxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0XzI2IiBzdHlsZT0iZGlzcGxheTog bm9uZTsgbGluZS1oZWlnaHQ6IDBweDsiPuKAjTwvc3Bhbj48L2Rpdj48ZGl2Pjxicj48L2Rp dj48ZGl2Pm9wZW4gZmlsZSB3aXRob3V0IGRpcmVjdCBmbGFnPC9kaXY+PGRpdj5yZWFkIGZp bGUgJm5ic3A7IC8vY2F1c2Uga2VybmVsIHJlYWRhaGVhZCA0IHBhZ2VzLCBhbmQgaW5vZGUt Jmd0O2lfbWFwcGluZy0mZ3Q7bnJwYWdlcyAmZ3Q7IDA8L2Rpdj48ZGl2PmNsb3NlIGZpbGU8 L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pm9wZW4gZmlsZSB3aXRoIGRpcmVjdCBmbGFnPC9k aXY+PGRpdj5sc2VlayA0KjQwOTYgLy8gc2tpcCA0IHJlYWRhaGVhZCBwYWdlczwvZGl2Pjxk aXY+cmVhZCAmbmJzcDtmaWxlIC8vY2F1c2UgeGZzX2ZsdXNoaW52YWxfcGFnZXMgdG8gZG8g bm90aGluZzwvZGl2PjxkaXY+Li4uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JJ2QgbGlr ZSB0byBhc2sgWEZTIGhvdyB0byByZXNvdmxlIHRoaXMgcHJvYmxlbT88L2Rpdj48ZGl2Pjxi cj48L2Rpdj48ZGl2PkF0dGFjaCBjb2Rl77yaPHNwYW4gaWQ9Il9lZGl0b3JfYm9va21hcmtf c3RhcnRfMjgiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4OyI+4oCN PC9zcGFuPjwvZGl2PjxkaXY+CgoKCgoKCgo8cCBjbGFzcz0icDEiPi8qIGdjYyAtbyB0ZXN0 X3JlYWQgdGVzdF9yZWFkLmM8L3A+CjxwIGNsYXNzPSJwMSI+Jm5ic3A7KiBkZCBpZj0vZGV2 L3plcm8gb2Y9L2RhdGExL2ZvLmRhdCBicz00MDk2IGNvdW50PTEwPC9wPgo8cCBjbGFzcz0i cDEiPiZuYnNwOyogLi90ZXN0X3JlYWQgL2RhdGExL2ZvLmRhdCAyIGRpcmVjdDwvcD4KPHAg Y2xhc3M9InAxIj4mbmJzcDsqICovPC9wPgo8cCBjbGFzcz0icDIiPiNkZWZpbmUgX0dOVV9T T1VSQ0U8L3A+CjxwIGNsYXNzPSJwMiI+I2luY2x1ZGUgPHNwYW4gY2xhc3M9InMxIj4mbHQ7 c3RkaW8uaCZndDs8L3NwYW4+PC9wPgo8cCBjbGFzcz0icDMiPjxzcGFuIGNsYXNzPSJzMiI+ I2luY2x1ZGUgPC9zcGFuPiZsdDt1bmlzdGQuaCZndDs8L3A+CjxwIGNsYXNzPSJwMyI+PHNw YW4gY2xhc3M9InMyIj4jaW5jbHVkZSA8L3NwYW4+Jmx0O3N5cy90eXBlcy5oJmd0OzwvcD4K PHAgY2xhc3M9InAzIj48c3BhbiBjbGFzcz0iczIiPiNpbmNsdWRlIDwvc3Bhbj4mbHQ7c3lz L3N0YXQuaCZndDs8L3A+CjxwIGNsYXNzPSJwMiI+I2luY2x1ZGUgPHNwYW4gY2xhc3M9InMx Ij4mbHQ7ZmNudGwuaCZndDs8L3NwYW4+PC9wPgo8cCBjbGFzcz0icDIiPiNpbmNsdWRlIDxz cGFuIGNsYXNzPSJzMSI+Jmx0O2Vycm5vLmgmZ3Q7PC9zcGFuPjwvcD4KPHAgY2xhc3M9InAz Ij48c3BhbiBjbGFzcz0iczIiPiNpbmNsdWRlIDwvc3Bhbj4mbHQ7c3RyaW5nLmgmZ3Q7PC9w Pgo8cCBjbGFzcz0icDMiPjxzcGFuIGNsYXNzPSJzMiI+I2luY2x1ZGUgPC9zcGFuPiZsdDtz dGRsaWIuaCZndDs8L3A+CjxwIGNsYXNzPSJwNCI+PGJyPjwvcD4KPHAgY2xhc3M9InAyIj4j ZGVmaW5lIEJVRlNJWkUgPHNwYW4gY2xhc3M9InMzIj40MDk2PC9zcGFuPjwvcD4KPHAgY2xh c3M9InA0Ij48YnI+PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJzNCI+aW50PC9z cGFuPiByZWFkX2NvdW50ID0gPHNwYW4gY2xhc3M9InMzIj4yPC9zcGFuPjs8L3A+CjxwIGNs YXNzPSJwNCI+PGJyPjwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iczQiPmludDwv c3Bhbj4gbWFpbig8c3BhbiBjbGFzcz0iczQiPmludDwvc3Bhbj4gYXJnYywgPHNwYW4gY2xh c3M9InM0Ij5jaGFyPC9zcGFuPiAqYXJndltdKXs8L3A+CjxwIGNsYXNzPSJwNSI+PHNwYW4g Y2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJzNCI+aWY8L3Nw YW4+KGFyZ2MgJmx0OyA8c3BhbiBjbGFzcz0iczMiPjM8L3NwYW4+KXs8L3A+CjxwIGNsYXNz PSJwMyI+PHNwYW4gY2xhc3M9InM1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8 L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPmZwcmludGYoc3Rk ZXJyLCA8L3NwYW4+InVzYWdlOiAlcyAmbHQ7ZmlsZSZndDsgJmx0O2NvdW50Jmd0OyBbYnVm ZmVyfGRpcmVjdF1cbiI8c3BhbiBjbGFzcz0iczUiPiwgYXJndls8L3NwYW4+PHNwYW4gY2xh c3M9InMzIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJzNSI+XSk7PC9zcGFuPjwvcD4KPHAgY2xh c3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xh c3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPmV4aXQoPHNwYW4gY2xhc3M9InMzIj4xPC9z cGFuPik7PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+ CTwvc3Bhbj59PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3Bh biI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iczQiPmNoYXI8L3NwYW4+ICpidWYgPSBtZW1hbGln bihCVUZTSVpFIC0gPHNwYW4gY2xhc3M9InMzIj4xPC9zcGFuPiwgQlVGU0laRSk7PC9wPgo8 cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3Bh biBjbGFzcz0iczQiPmNoYXI8L3NwYW4+ICpmaWxlID0gYXJndls8c3BhbiBjbGFzcz0iczMi PjE8L3NwYW4+XTs8L3A+CjxwIGNsYXNzPSJwNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1z cGFuIj4JPC9zcGFuPnJlYWRfY291bnQgPSBhdG9pKGFyZ3ZbPHNwYW4gY2xhc3M9InMzIj4y PC9zcGFuPl0pOzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNw YW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9InM0Ij5pbnQ8L3NwYW4+IHJldCA9IDxzcGFuIGNs YXNzPSJzMyI+MDwvc3Bhbj4sc3VtID0gPHNwYW4gY2xhc3M9InMzIj4wPC9zcGFuPiwgaSA9 IDxzcGFuIGNsYXNzPSJzMyI+MDwvc3Bhbj4sIGZkID0gLTxzcGFuIGNsYXNzPSJzMyI+MTwv c3Bhbj47PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+ CTwvc3Bhbj48c3BhbiBjbGFzcz0iczQiPmlmPC9zcGFuPihhcmdjID09IDxzcGFuIGNsYXNz PSJzMyI+NDwvc3Bhbj4gJmFtcDsmYW1wOyBzdHJuY21wKGFyZ3ZbPHNwYW4gY2xhc3M9InMz Ij4zPC9zcGFuPl0sIDxzcGFuIGNsYXNzPSJzMSI+ImRpcmVjdCI8L3NwYW4+LDxzcGFuIGNs YXNzPSJzMyI+Njwvc3Bhbj4pID09IDxzcGFuIGNsYXNzPSJzMyI+MDwvc3Bhbj4pezwvcD4K PHAgY2xhc3M9InAxIj48c3BhbiBjbGFzcz0iczUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWIt c3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PC9z cGFuPi8vZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZfE9fRElSRUNUKTs8L3A+CjxwIGNsYXNz PSJwNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNz PSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj5mZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOzwv cD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJzNCI+ aWY8L3NwYW4+KGZkICZsdDsgPHNwYW4gY2xhc3M9InMzIj4wPC9zcGFuPil7PC9wPgo8cCBj bGFzcz0icDMiPjxzcGFuIGNsYXNzPSJzNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFu Ij4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBj bGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ZnByaW50ZihzdGRlcnIsIDwvc3Bhbj4i b3BlbiByZWFkIG9ubHkgZmlsZSBmYWlsZWRcbiI8c3BhbiBjbGFzcz0iczUiPik7PC9zcGFu PjwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3Nw YW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJB cHBsZS10YWItc3BhbiI+CTwvc3Bhbj5leGl0KDxzcGFuIGNsYXNzPSJzMyI+MTwvc3Bhbj4p OzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3Nw YW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPn08L3A+CjxwIGNsYXNz PSJwNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNz PSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj5yZXQgPSByZWFkKGZkLCBidWYsIEJVRlNJWkUp OzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3Nw YW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJz NCI+aWY8L3NwYW4+KHJldCAmbHQ7IDxzcGFuIGNsYXNzPSJzMyI+MDwvc3Bhbj4pezwvcD4K PHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNw YW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10 YWItc3BhbiI+CTwvc3Bhbj5mcHJpbnRmKHN0ZGVyciwgPHNwYW4gY2xhc3M9InMxIj4iYnVm ZmVyIHJlYWQgZXJyb3JcbiI8L3NwYW4+KTs8L3A+CjxwIGNsYXNzPSJwNSI+PHNwYW4gY2xh c3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3Bh biI+CTwvc3Bhbj59PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWIt c3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+Y2xv c2UoZmQpOzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4i Pgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPmZkID0gb3Bl bihmaWxlLCBPX1JEV1IpOzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUt dGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFu PjxzcGFuIGNsYXNzPSJzNCI+aWY8L3NwYW4+KGZkICZsdDsgPHNwYW4gY2xhc3M9InMzIj4w PC9zcGFuPil7PC9wPgo8cCBjbGFzcz0icDMiPjxzcGFuIGNsYXNzPSJzNSI+PHNwYW4gY2xh c3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3Bh biI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ZnByaW50 ZihzdGRlcnIsIDwvc3Bhbj4ib3BlbiByZWFkIG9ubHkgZmlsZSBmYWlsZWRcbiI8c3BhbiBj bGFzcz0iczUiPik7PC9zcGFuPjwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBw bGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9z cGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj5leGl0KDxzcGFuIGNs YXNzPSJzMyI+MTwvc3Bhbj4pOzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBw bGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9z cGFuPn08L3A+CjxwIGNsYXNzPSJwNCI+PGJyPjwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBj bGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1z cGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJzNCI+aWY8L3NwYW4+IChmY250bChmZCwgRl9T RVRGTCwgT19SRE9OTFl8T19ESVJFQ1QpID09IC08c3BhbiBjbGFzcz0iczMiPjE8L3NwYW4+ KSB7PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwv c3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9 IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPmZwcmludGYoc3RkZXJyLCA8c3BhbiBjbGFzcz0i czEiPiJzZXQgZGlyZWN0IGVycm9yXG4iPC9zcGFuPik7PC9wPgo8cCBjbGFzcz0icDUiPjxz cGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUt dGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFu PmV4aXQoPHNwYW4gY2xhc3M9InMzIj4xPC9zcGFuPik7PC9wPgo8cCBjbGFzcz0icDUiPjxz cGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUt dGFiLXNwYW4iPgk8L3NwYW4+fTwvcD4KPHAgY2xhc3M9InA0Ij48YnI+PC9wPgo8cCBjbGFz cz0icDYiPjxzcGFuIGNsYXNzPSJzNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4J PC9zcGFuPn08L3NwYW4+ZWxzZTxzcGFuIGNsYXNzPSJzNSI+ezwvc3Bhbj48L3A+CjxwIGNs YXNzPSJwNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNs YXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj5mZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkp OzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3Nw YW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJz NCI+aWY8L3NwYW4+KGZkICZsdDsgPHNwYW4gY2xhc3M9InMzIj4wPC9zcGFuPil7PC9wPgo8 cCBjbGFzcz0icDMiPjxzcGFuIGNsYXNzPSJzNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1z cGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3Bh biBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ZnByaW50ZihzdGRlcnIsIDwvc3Bh bj4ib3BlbiBidWYgZmlsZSBmYWlsZWRcbiI8c3BhbiBjbGFzcz0iczUiPik7PC9zcGFuPjwv cD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBs ZS10YWItc3BhbiI+CTwvc3Bhbj5leGl0KDxzcGFuIGNsYXNzPSJzMyI+MTwvc3Bhbj4pOzwv cD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPn08L3A+CjxwIGNsYXNzPSJw NSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPn08L3A+CjxwIGNsYXNz PSJwNCI+PGJyPjwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNw YW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9InM0Ij53aGlsZTwvc3Bhbj4oaSsrICZsdDsgcmVh ZF9jb3VudCl7PC9wPgo8cCBjbGFzcz0icDEiPjxzcGFuIGNsYXNzPSJzNSI+PHNwYW4gY2xh c3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3Bh biI+CTwvc3Bhbj48L3NwYW4+Ly9tZW1zZXQoYnVmLCAwLCBCVUZTSVpFKTs8L3A+CjxwIGNs YXNzPSJwNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNs YXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iczQiPmlmPC9zcGFu PihidWYgPT0gPHNwYW4gY2xhc3M9InM0Ij5OVUxMPC9zcGFuPil7PC9wPgo8cCBjbGFzcz0i cDMiPjxzcGFuIGNsYXNzPSJzNSI+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9z cGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0i QXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ZnByaW50ZihzdGRlcnIsIDwvc3Bhbj4ibWVtb3J5 IGFsbG9jYXRlIGZhaWxlZFxuIjxzcGFuIGNsYXNzPSJzNSI+KTs8L3NwYW4+PC9wPgo8cCBj bGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBj bGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1z cGFuIj4JPC9zcGFuPmV4aXQoPHNwYW4gY2xhc3M9InMzIj4xPC9zcGFuPik7PC9wPgo8cCBj bGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBj bGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+fTwvcD4KPHAgY2xhc3M9InA1Ij48c3Bh biBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRh Yi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJzNCI+aWY8L3NwYW4+KGxzZWVrKGZkLCA8 c3BhbiBjbGFzcz0iczMiPjQ8L3NwYW4+KjxzcGFuIGNsYXNzPSJzMyI+NDA5Njwvc3Bhbj4s IFNFRUtfU0VUKSAmbHQ7IDxzcGFuIGNsYXNzPSJzMyI+MDwvc3Bhbj4pezwvcD4KPHAgY2xh c3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xh c3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3Bh biI+CTwvc3Bhbj5mcHJpbnRmKHN0ZGVyciwgPHNwYW4gY2xhc3M9InMxIj4ic2VlayBlcnJv ciFcbiI8L3NwYW4+KTs8L3A+CjxwIGNsYXNzPSJwNiI+PHNwYW4gY2xhc3M9InM1Ij48c3Bh biBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRh Yi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48 L3NwYW4+YnJlYWs8c3BhbiBjbGFzcz0iczUiPjs8L3NwYW4+PC9wPgo8cCBjbGFzcz0icDUi PjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBw bGUtdGFiLXNwYW4iPgk8L3NwYW4+fTwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0i QXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4J PC9zcGFuPnJldCA9IHJlYWQoZmQsIGJ1ZiwgQlVGU0laRSk7PC9wPgo8cCBjbGFzcz0icDUi PjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBw bGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9InM0Ij5pZjwvc3Bhbj4ocmV0ICZn dDsgPHNwYW4gY2xhc3M9InMzIj4wPC9zcGFuPil7PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFu IGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFi LXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPnN1 bSArPSByZXQ7PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3Bh biI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+fTxzcGFu IGNsYXNzPSJzNCI+ZWxzZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InM0Ij5pZjwvc3Bhbj4ocmV0 ID09IDxzcGFuIGNsYXNzPSJzMyI+MDwvc3Bhbj4pezwvcD4KPHAgY2xhc3M9InA1Ij48c3Bh biBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRh Yi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj5w cmludGYoPHNwYW4gY2xhc3M9InMxIj4icmVhZCBlbmRcbiI8L3NwYW4+KTs8L3A+CjxwIGNs YXNzPSJwNiI+PHNwYW4gY2xhc3M9InM1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4i Pgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPjxzcGFuIGNs YXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48L3NwYW4+YnJlYWs8c3BhbiBjbGFzcz0i czUiPjs8L3NwYW4+PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWIt c3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+fTwv cD4KPHAgY2xhc3M9InA2Ij48c3BhbiBjbGFzcz0iczUiPjxzcGFuIGNsYXNzPSJBcHBsZS10 YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+ PC9zcGFuPmVsc2U8c3BhbiBjbGFzcz0iczUiPns8L3NwYW4+PC9wPgo8cCBjbGFzcz0icDUi PjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBw bGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9z cGFuPnByaW50Zig8c3BhbiBjbGFzcz0iczEiPiJlcnJvcjolZFxuIjwvc3Bhbj4sIGVycm5v KTs8L3A+CjxwIGNsYXNzPSJwNiI+PHNwYW4gY2xhc3M9InM1Ij48c3BhbiBjbGFzcz0iQXBw bGUtdGFiLXNwYW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9z cGFuPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48L3NwYW4+YnJlYWs8 c3BhbiBjbGFzcz0iczUiPjs8L3NwYW4+PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNz PSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4i Pgk8L3NwYW4+fTwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNw YW4iPgk8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIj4JPC9zcGFuPnNsZWVw KDxzcGFuIGNsYXNzPSJzMyI+MTwvc3Bhbj4pOzwvcD4KPHAgY2xhc3M9InA1Ij48c3BhbiBj bGFzcz0iQXBwbGUtdGFiLXNwYW4iPgk8L3NwYW4+fTwvcD4KPHAgY2xhc3M9InAzIj48c3Bh biBjbGFzcz0iczUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwvc3Bhbj5wcmlu dGYoPC9zcGFuPiJyZWFkIHN1bTogJWRcbiI8c3BhbiBjbGFzcz0iczUiPiwgc3VtKTs8L3Nw YW4+PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiI+CTwv c3Bhbj5jbG9zZShmZCk7PC9wPgo8cCBjbGFzcz0icDUiPjxzcGFuIGNsYXNzPSJBcHBsZS10 YWItc3BhbiI+CTwvc3Bhbj5mcmVlKGJ1Zik7PC9wPgo8cCBjbGFzcz0icDYiPjxzcGFuIGNs YXNzPSJzNSI+CTwvc3Bhbj5yZXR1cm48c3BhbiBjbGFzcz0iczUiPiA8L3NwYW4+PHNwYW4g Y2xhc3M9InMzIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJzNSI+Ozwvc3Bhbj48L3A+CjxwIGNs YXNzPSJwNSI+fTxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0XzI3IiBzdHlsZT0i ZGlzcGxheTogbm9uZTsgbGluZS1oZWlnaHQ6IDBweDsiPuKAjTwvc3Bhbj48L3A+PC9kaXY+ PGRpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNp emU6IDEycHg7Zm9udC1mYW1pbHk6IEFyaWFsIE5hcnJvdztwYWRkaW5nOjJweCAwIDJweCAw OyI+LS0tLS0tLS0tLS0tLS0tLS0tJm5ic3A75Y6f5aeL6YKu5Lu2Jm5ic3A7LS0tLS0tLS0t LS0tLS0tLS0tPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMnB4O2JhY2tncm91bmQ6 I2VmZWZlZjtwYWRkaW5nOjhweDsiPjxkaXY+PGI+5Y+R5Lu25Lq6OjwvYj4mbmJzcDsiRGF2 ZSBDaGlubmVyIjsmbHQ7ZGF2aWRAZnJvbW9yYml0LmNvbSZndDs7PC9kaXY+PGRpdj48Yj7l j5HpgIHml7bpl7Q6PC9iPiZuYnNwOzIwMTXlubQ05pyIOOaXpSjmmJ/mnJ/kuIkpIOS4reWN iDEyOjQ5PC9kaXY+PGRpdj48Yj7mlLbku7bkuro6PC9iPiZuYnNwOyJZZVlpbiImbHQ7ZXlu aXlAcXEuY29tJmd0OzsgPHdicj48L2Rpdj48ZGl2PjxiPuaKhOmAgTo8L2I+Jm5ic3A7Inhm cyImbHQ7eGZzQG9zcy5zZ2kuY29tJmd0OzsgPHdicj48L2Rpdj48ZGl2PjxiPuS4u+mimDo8 L2I+Jm5ic3A7UmU6IFhGUyBkaXJlY3QgSU8gcHJvYmxlbTwvZGl2PjwvZGl2PjxkaXY+PGJy PjwvZGl2Pk9uIFdlZCwgQXByIDA4LCAyMDE1IGF0IDEyOjIxOjQ1UE0gKzA4MDAsIFllWWlu IHdyb3RlOjxicj4mZ3Q7IEhpLCBBYm91dCAyIG1vbnRocyBhZ28sIEkgYXNrZWQgb25lIHBy b2JsZW0gaW4gWEZTLCBzZWU8YnI+Jmd0OyBoZXJlKGh0dHA6Ly9vc3Muc2dpLmNvbS9hcmNo aXZlcy94ZnMvMjAxNS0wMi9tc2cwMDE5Ny5odG1sKS48YnI+Jmd0OyA8YnI+Jmd0OyA8YnI+ Jmd0OyBBZnRlciB0aGF0LCBJIHVzZSBkaXJlY3QgSU8gaW4gTXlTUUwsIHNlZTxicj4mZ3Q7 IGhlcmUoaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS41L2VuL2lubm9kYi1w YXJhbWV0ZXJzLmh0bWwjc3lzdmFyX2lubm9kYl9mbHVzaF9tZXRob2QpLuKAjTxicj4mZ3Q7 IDxicj4mZ3Q7IDxicj4mZ3Q7IEhvd2V2ZXIsIEkgZm91bmQgdGhhdCBNeVNRTCBwZXJmb3Jt YW5jZSBpcyBzdGlsbCBwb29yIHNvbWV0aW1lcy4gSTxicj4mZ3Q7IHVzZSBzb21lIHRvb2xz KGh0dHBzOi8vZ2l0aHViLmNvbS9icmVuZGFuZ3JlZ2cvcGVyZi10b29sc+KAjSkgdG88YnI+ Jmd0OyB0cmFjZSB0aGUga2VybmVsLCBJIGZvdW5kIHNvbWUgcHJvYmxlbXM6PGJyPjxicj4m bHQ7c25pcCZndDs8YnI+PGJyPiZndDsgVGhpcyB3aWxsIGNhdXNlIGJhZCBwZXJmb3JtYW5j ZSwgZXZlbiBkaXJlY3QgSU8uIEkgc3RpbGwgZG9uJ3Q8YnI+Jmd0OyB1bmRlcnN0YW5kIHdo eSBub3QgdHJ1bmNhdGVfaW5vZGVfcGFnZSBjYWxsZWQ/PGJyPjxicj5CZWNhdXNlIHRoZSBj YWNoZWQgcGFnZSBtdXN0IGJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkaXJlY3QgSU88 YnI+dGhhdCBpcyBpbiBwcm9ncmVzcyAtIGRpcmVjdCBJTyBvbmx5IHRyaWVzIHRvIGZsdXNo IHBhZ2VzIG92ZXIgdGhlPGJyPnJhbmdlIGl0IGlzIGRvaW5nIHRoZSBJTyBvdmVyLjxicj48 YnI+Jmd0OyBFdmVyeSB0aW1lLCBhZnRlciBJIHJ1biB0aGlzOiBlY2hvIDEgJmd0OyAvcHJv Yy9zeXMvdm0vZHJvcF9jYWNoZXM8YnI+Jmd0OyA8YnI+Jmd0OyBJbW1lZGlhdGVseSBlbmhh bmNlIHBlcmZvcm1hbmNlLjxicj48YnI+QmVjYXVzZSB0aGF0IGZsdXNoZXMgd2hhdGV2ZXIg cGFnZSBpcyBpbiB0aGUgY2FjaGUuIENhbiB5b3UgaWRlbnRpZnk8YnI+d2hhdCBvZmZzZXQg dGhhdCBjYWNoZWQgcGFnZSBpcyBhdD8gVHJhY2luZyB0aGUgeGZzIGV2ZW50cyB3aWxsIHRl bGw8YnI+eW91IHdoYXQgcGFnZXMgdGhhdCBvcGVyYXRpb24gaW52YWxpZGF0ZXMgb24gZWFj aCBpbm9kZSwgYW5kIGtub3dpbmc8YnI+dGhlIG9mZnNldCBtYXkgdGVsbCB1cyB3aHkgdGhh dCBwYWdlIGlzIG5vdCBnZXR0aW5nIGZsdXNoZWQuPGJyPjxicj5BbHRlcm5hdGl2ZWx5LCB3 cml0ZSBhIHNpbXBsZSBDIHByb2dyYW0gdGhhdCBkZW9tbnN0cmF0ZXMgdGhlIHNhbWU8YnI+ cHJvYmxlbSBzbyB3ZSBjYW4gcmVwcm9kdWNlIGl0IGVhc2lseSwgZml4IHRoZSBwcm9ibGVt IGFuZCB0dXJuIGl0PGJyPmludG8gYSByZWdyZXNzaW9uIHRlc3QuLi4uPGJyPjxicj5DaGVl cnMsPGJyPjxicj5EYXZlLjxicj4tLSA8YnI+RGF2ZSBDaGlubmVyPGJyPmRhdmlkQGZyb21v cmJpdC5jb208YnI+PC9kaXY+ ------=_NextPart_5524D355_0987CF90_101DEF71-- From abygwhu@kfoh.com Wed Apr 8 04:25:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2F6A07F87 for ; Wed, 8 Apr 2015 04:25:35 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1D89A8F8037 for ; Wed, 8 Apr 2015 02:25:31 -0700 (PDT) X-ASG-Debug-ID: 1428485124-04cbb056b3b9a80001-NocioJ Received: from kfoh.com ([221.225.248.63]) by cuda.sgi.com with ESMTP id 8qXBV087PYXVZPIb for ; Wed, 08 Apr 2015 02:25:25 -0700 (PDT) X-Barracuda-Envelope-From: abygwhu@kfoh.com X-Barracuda-Apparent-Source-IP: 221.225.248.63 Date: Wed, 8 Apr 2015 17:25:14 +0800 From: =?utf-8?B?5qyn6Ziz55Cq6Zuv?= To: Subject: =?utf-8?B?5rGV5aS05biC5Y2H5bmz5Yy656aP5YW05pGp5omY6L2m57u05L+u6YOo?= Message-ID: <20150408172528073755@kfoh.com> X-ASG-Orig-Subj: =?utf-8?B?5rGV5aS05biC5Y2H5bmz5Yy656aP5YW05pGp5omY6L2m57u05L+u6YOo?= X-mailer: Foxmail 5.0 [cn] Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="=====003_Dragon756203531713_=====" X-Barracuda-Connect: UNKNOWN[221.225.248.63] X-Barracuda-Start-Time: 1428485124 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0113c, BSF_SC5_MJ1963, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17669 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This is a multi-part message in MIME format. --=====003_Dragon756203531713_===== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 cGtiaXN6Ym8NCg0KICAgICAgDQogIA0KDQogDQog6ZSALuWUri7kuLsu566hLjIu5aSp5by6LuWM li7orq0u57uDLuiQpQ0KIOOAkOaXtumXtOWcsOeCueOAkSAyMDE15bm0NOaciDE4LTE55YyX5Lqs 44CBNeaciDIzLTI05rex5Zyz44CBNeaciDMwLTMx5LiK5rW3DQog44CQ5Y+C5Yqg5a+56LGh44CR IOWwhuiiq+aPkOWNh+eahOmUgOWUrueyvuiLseOAgemUgOWUruS4u+S7u+OAgemUgOWUrue7j+eQ huOAgeWMuuWfn+e7j+eQhuOAgeS4muWKoee7j+eQhuOAgemUgOWUruaAu+ebkeOAgeaAu+e7j+eQ hg0KIOOAkOaOiOivvuaWueW8j+OAkSDorrLluIjorrLmjoggKyDop4bpopHmvJTnu44gKyDmoYjk vovnoJTorqggK+inkuiJsuaJrua8lCArIOiusuW4iOeCueivhCANCiDjgJDlrabkuaDotLnnlKjj gJEgMzgwMOWFgy8y5aSpLzHkurrvvIjlkKvotYTmlpnotLnjgIHljYjppJDjgIHojLbngrnjgIHl j5HnpajnrYnvvIkNCiDjgJDlgLznj63miYvmnLrjgJEgMDUxMi0tLTY4NzBfMDcxNiAgIO+8iDDv vIkxODBfMTU1OV82Nzk2DQogDQogDQog6K++56iL6IOM5pmv77yaDQog44CA44CA5aSn6YOo5YiG 6ZSA5ZSu5Li7566h6YO95piv5LuO6ZSA5ZSu56ys5LiA57q/6KKr5o+Q5ouU5LiK5p2l77yM5Liq 5Lq655qE6ZSA5ZSu6IO95Yqb6YO95b6I5by644CC5L2G5oiQ5Li65LiA5Liq6ZSA5ZSu5Zui6Zif 55qE5Li7566h5ZCODQog77yM57uP5bi45Ye6546w55qE5LiA5Liq6Zeu6aKY5piv566h55CG6IO9 5Yqb5LiO57uP6aqM5LiN6Laz44CC6ZSA5ZSu566h55CG5bel5L2c5Y2D5aS05LiH57uq77yM6ZSA 5ZSu5Li7566h5q+P5aSp6YO95Zyo5b+Z56KM44CB54Sm6JmR5Lit5bqmDQog6L+H77yM5b6I5bCR 5pyJ5pe26Ze05Y675o+Q5Y2H6Ieq5bex55qE566h55CG5oqA6IO944CC44CK6ZSA5ZSu5Li7566h MuWkqeW8uuWMluiuree7g+iQpeOAi++8jOiuqemUgOWUruS4u+euoeWcqDLlpKnlhoXov5vooYzl vLrljJborq3nu4PvvIwNCiDlrabkuaDlv4XlpIfnmoTnrqHnkIbnn6Xor4bvvIznkIbmuIXln7rm nKznmoTnrqHnkIbmgJ3ot6/vvIzop6PlhrPnrqHnkIbkuK3luLjop4HnmoTpl67popjjgIINCiAx LiDkvZzkuLrplIDllK7kuLvnrqHvvIzku6XliY3msqHlrabkuaDov4fnrqHnkIbnn6Xor4bvvIzk uI3nn6XpgZPlpoLkvZXnrqHkurrvvIzmgI7kuYjlip7vvJ8NCiAyLiDplIDllK7kuLvnrqHlvZPn hLblupTor6XmnInoh6rlt7HnmoTplIDllK7ku7vliqHlkJfvvJ8NCiAzLiDlpoLkvZXkuI7kuIvl sZ7nm7jlpITvvJ/or6XkuKXljonov5jmmK/lrr3lrrnvvJ/mhYjkuI3mjozlhbXov5jmmK/niLHl hbXlpoLlrZDvvJ8NCiA0LiDku4DkuYjmoLfnmoTkurrmiY3pgILlkIjvvJ/lupTor6XlpoLkvZXm jJHpgInplIDllK7kurrlkZjvvJ8NCiA1LiDor5XnlKjmnJ/nn63vvIzpmr7ku6XnnIvliLDmlrDk urrnmoTkuJrnu6nvvIzor5XnlKjmnJ/lhoXlpoLkvZXor4TkvLDogIPlr5/vvJ8NCiA2LiDmnInk urror7TigJzmlZnkvJrlvpLlvJ/vvIzppb/mrbvluIjlgoXigJ3vvIzmgI7kuYjlip7vvJ/ov5jo poHljrvovoXlr7zkuJrliqHlkZjlkJfvvJ8NCiA3LiDplIDllK7kuJrnu6nor6XlpoLkvZXmipM/ IOmUgOWUruS4u+euoeWBmuS6m+S7gOS5iOW3peS9nOaJjeiDveecn+ato+aPkOWNh+S4mue7qe+8 nw0KIDguIOmUgOWUruS6uuWRmOavj+WkqeWHuuWOu+WQju+8jOaYr+WOu+aLnOiuv+WuouaIt++8 jOi/mOaYr+mAm+ihl+OAgeWOu+e9keWQp+eOqea4uOaIj++8n+S4jeWlveeuoeeQhu+8jOaAjuS5 iOWKnu+8nw0KIDkuIOacieayoeacieS4gOenjeaWueazle+8jOS4jemcgOWinuWKoOaKleWFpe+8 jOiAjOWPiOiDvemprOS4iuW4ruWKqeS4muWKoeWRmOaPkOWNh+S4mue7qe+8nw0KIDEwLiDkuJrn u6nnq57otZvlr7nplIDllK7kurrlkZjkvLzkuY7msqHku4DkuYjmlYjmnpzvvIzmgI7kuYjlip7v vJ/lpoLkvZXljrvmv4DlirHplIDllK7kurrlkZjvvJ8NCiDjgIDjgIDku6XkuIrnlpHomZHvvIzl nKjjgIrplIDllK7kuLvnrqEy5aSp5by65YyW6K6t57uD6JCl44CL5bCG5b6X5Yiw6Kej562U77yB DQogDQog5Z+56K6t5pS255uK77yaDQogMS4g5piO56Gu6ZSA5ZSu5Li7566h55qE5bel5L2c5a6a 5L2N77yM55+l6YGT5aaC5L2V5oqK5o+h5bel5L2c6YeN54K577ybDQogMi4g5biu5Yqp6ZSA5ZSu 5Li7566h55CG5riF5oCd6Lev77yM5q2j56Gu5aSE55CG6ZSA5ZSu5Lit55qE5bi46KeB6Zeu6aKY 77ybDQogMy4g5LqG6Kej5aaC5L2V57uE5bu66ZSA5ZSu5Zui6Zif77yM5aaC5L2V6YCJ5Lq644CB 6IKy5Lq644CB55WZ5Lq677ybDQogNC4g5piO55m96ZSA5ZSu6L+H56iL566h55CG55qE5Y6f55CG 5LiO5pa55rOV77ybDQogNS4g5a2m5Lya6ZSA5ZSu5Zui6Zif5Lia57up6ICD5qC45oyH5qCH6K6+ 5a6a55qE5pa55rOV77ybDQogNu+8juS6huino+mUgOWUruS4muWKoeS6uuWRmOWlluaDqeeahOWf uuacrOWOn+eQhu+8mw0KIDfvvI7lrablrozjgIrplIDllK7kuLvnrqEy5aSp5by65YyW6K6t57uD 6JCl44CL5bm25o6M5o+h5omA5a2m5oqA5ben5pa55rOV77yM6IO95pyJ5pWI5o+Q5Y2H6ZSA5ZSu 5Zui6Zif5Lia57up44CCDQogDQog6K++56iL54m56Imy77yaDQogMS4g5b6X5Yiw5biC5Zy66aqM 6K+B55qE6K++56iL5omN5piv5aW96K++56iL77yBDQog4oCU4oCU5L2V54Kc5Lic6ICB5biI55qE 6ZSA5ZSu5Li7566h5by65YyW6K6t57uD6JCl5bey57uP6L+e57utNOW5tOavj+aciOWcqOWMl+S6 rOOAgeS4iua1t+OAgea3seWcs+i9rua1geS4u+WKnuWFrOW8gOivvuOAgg0KIDIuIOW+l+WIsOWt puWRmOiupOWPr+eahOivvueoi+aJjeaYr+Wlveivvueoi++8gQ0KIOKAlOKAlOacrOivvueoi+W3 sue7j+W+l+WIsOaVsOWNg+WQjeadpeiHquWFqOWbveWQhOihjOWQhOS4mueahOmUgOWUruS4u+eu oeWlveivhOingeivgeOAgg0KIDMuIOiHquS4u+eglOWPkeeahOivvueoi+aJjeaYr+Wlveivvueo i++8gQ0KIOKAlOKAlOacrOivvueoi+eUseS9leeCnOS4nOiAgeW4iOiHquS4u+eglOWPke+8jOe7 k+WQiOS6huS9leiAgeW4iOWkmuW5tOmUgOWUrueuoeeQhuWunuaImOe7j+mqjOOAgg0KIDQuIOWO n+eJiOeahOivvueoi+aJjeaYr+Wlveivvueoi++8gQ0KIOKAlOKAlOW4gumdouS4iuW3sue7j+WH uueOsOaKhOiireivvueoi++8jOi/meagt+eahOivvueoi+S9oOaVouS4iuWQl++8n+ivt+iupOWH huS9leeCnOS4nOiAgeW4iOeahOWOn+WIm+e7j+WFuOivvueoi+OAgg0KIDUuIOiDveino+etlOWt puWRmOWunumZhemXrumimOeahOiAgeW4iOaJjeaYr+WlveiAgeW4iO+8gQ0KIOKAlOKAlOS9leiA geW4iOWFt+acieS4sOWvjOeahOWunumZhee7j+mqjOS4jueQhuiuuuWfuuehgO+8jOWPr+WcqOiv vueoi+eOsOWcuuWNs+aXtuino+etlOWtpuWRmOaPkOWHuueahOWunumZheW3peS9nOS4remBh+WI sOeahOmXrumimOOAgg0KIA0KIA0KIA0KIOivvueoi+Wkp+e6su+8mg0KIOesrOS4gOmDqOWIhuOA gemUgOWUruS4u+euoeeahOW3peS9nOS4juinkuiJsuWumuS9jQ0KIOS4gOOAgemUgOWUruS4u+eu oeivpeWBmuS7gOS5iO+8nw0KIDEuIOahiOS+i+WIhuaekO+8mui/meS4quS4u+euoeivpeWmguS9 leWBmu+8nw0KIDIuIOmUgOWUruS4u+euoeS4uuS7gOS5iOi/meS5iOW/me+8n+WmguS9leiDveS4 jei/meS5iOW/me+8nw0KIDMuIOmUgOWUruS4u+euoeeahOW3peS9nOmHjeeCueWcqOWTqumHjO+8 nw0KIOS6jOOAgemUgOWUrueuoeeQhueahOWHoOS4quazqOaEj+eCuQ0KIDEuIOeuoeeQhuimgeaz qOaEj+W6puOAguahiOS+i+WIhuaekO+8mui/meS4quS4u+euoeS4uuS7gOS5iOS8muWksei0pe+8 nyDvvIjnrqHnkIbmlrnms5XkuI3mmK/kuIDmiJDkuI3lj5jnmoTvvIkNCiAyLiDnrqHnkIbml6Dl pKfkuovvvIzkuIDliIflnKjnu4boioLvvIjmipPplIDph4/vvIzkuZ/lvpfku47nu4boioLmipPo tbfvvIkNCiAzLiDpmLLngavph43kuo7mlZHngavvvIjpooTpmLLmm7Tph43opoHvvIkNCiDkuInj gIHplIDllK7kuLvnrqHop5LoibLlrprkvY0NCiAxLiDkuI7lhazlj7jjgIHkuIrlj7jjgIHlkIzk uovnmoTlhbPns7vlrprkvY0NCiAyLiDkuI7kuIvlsZ7nmoTlhbPns7vlrprkvY0NCiDigJTigJTk uLvnrqHkuI7kuIvlsZ7og73lkKbmiJDkuLrnnJ/mraPnmoTmnIvlj4vvvJ8gDQog4oCU4oCU5a+5 5LiL5bGe6K+l5Lil5Y6J6L+Y5piv5a695a6577yfIA0KIA0KIOesrOS6jOmDqOWIhuOAgemUgOWU ruWboumYn+eahOe7hOW7ug0KIOS4gOOAgemUgOWUruS6uuWRmOeahOaMkemAiQ0KIDEuIOmAieS6 uuavlOeUqOS6uuabtOmHjeimge+8jOWTquenjemUgOWUruS6uuWRmOmAguWQiOS9oO+8n+S7gOS5 iOaAp+agvOWlve+8nw0KIDIuIOmdouivlemUgOWUruS6uuWRmOimgeazqOaEj+eahOmXrumimA0K IDMuIOivleeUqOacn+WmguS9leWIpOaWre+8nyDor5XnlKjmnJ/opoHogIPlr5/plIDllK7kurrl kZjnmoQy5aSn54K5DQog5LqM44CB6ZSA5ZSu5Lq65ZGY55qE5Z+56IKyDQogMS4g6ZSA5ZSu5Li7 566h55qE5Li76KaB6IGM6LSj77ya5pWZ5biI6L+Y5piv5pWZ57uD77yfDQogMi4g5Z+56K6t5oiQ 5pys5aSq6auY77yfDQogMy4g5Li65LuA5LmI5Z+56K6t5pWI5p6c5LiN55CG5oOz77yfDQogNC4g 5oyH5a+85LiL5bGe5pe26KaB5rOo5oSP55qE5Yeg5Liq6Zeu6aKYDQog4oCU4oCU5L2g6K+05LqG 5LuW5LiA5a6a5oeC5ZCX77yfDQog4oCU4oCU5LuW5oeC5LqG5LiA5a6a5YGa5ZCX77yfDQogNS4g 6L6F5a+86ZSA5ZSu5Lq65ZGY55qENeenjeS4u+imgeaWueazlQ0KIOS4ieOAgeWmguS9leeVmeS9 j+S8mOengOmUgOWUruS6uuWRmO+8nw0KIDEuIOS4uuS7gOS5iOS8mOengOmUgOWUruS6uuWRmOim gei1sO+8nw0KIDIuIOWmguS9leeVmeS9j+S8mOengOS6uuaJje+8nw0KICANCiDnrKzkuInpg6jl iIbjgIHplIDllK7kurrlkZjnrqHnkIbkuI7plIDllK7kuJrnu6nnrqHnkIYNCiDkuIDjgIHmiJHk u6znmoTlt6XkvZzph43ngrnlupTmlL7lnKjlk6rkupvkurrouqvkuIrvvJ8NCiAxLiDplIDllK7n u4/nkIbnmoTml7bpl7TkuI7nsr7lipvkuI3og73lubPlnYfliIbphY3vvIzlpoLkvZXpgb/lhY3k vJrlk63nmoTlranlrZDmnInlpbblkIPnjrDosaHvvJ8NCiAyLiDplIDllK7kurrlkZjnmoQz5aSn 5YiG57G7DQogMy4g6ZSA5ZSu5Lq65ZGY5YiG57G7566h55CG5Y6f5YiZDQog5LqM44CB6ZSA5ZSu 5Lia57up5aaC5L2V5oqT77yfDQogMS4g5Li65LuA5LmI5oqT5Lia57up77yM5oC75piv5LiN6KeB 5pWI5p6c77yfIA0KIDIuIOaKk+S4mue7qe+8jOimgeS7juS4ieeCueWFpeaJiw0KIOS4ieOAgemU gOWUruS6uuWRmOaXpeW4uOW3peS9nOeuoeeQhg0KIDEuIOmUgOWUruS6uuWRmOWHuuWOu+W5suWY m+S6hu+8jOS9oOefpemBk+WQl++8n+WmguS9leeuoeeQhu+8nw0KIDIuIOmUgOWUruS6uuWRmOaX peW4uOW3peS9nOeuoeeQhuS4ieaLm+OAgg0KIOKAlOKAlOS4jeeUqOWinuWKoOaKleWFpe+8jOiu qeWboumYn+mUgOWUruS4mue7qeaPkOWNh+eahOaWueazlQ0KIOWbm+OAgemUgOWUruebruagh+iu vuWumuS4juWIhuinow0KIDEuIOmUgOWUruebruagh+eahOiuvuWumuWOn+WImQ0KIDIuIOmUgOWU ruS6uuWRmOeahOS4mue7qeaMh+agh+WIhuino+aWueazlQ0KIOS6lOOAgemUgOWUruS4mue7qeiA g+aguA0KIDHjgIHplIDllK7kuK3nmoTlhbPplK7mjIfmoIcNCiDigJTigJTlpoLkvZXogIPmoLjk uIvlsZ7vvJ/lhYjov5vnmoTplIDllK7nrqHnkIbvvIzlv4XpobvlgZrliLDph4/ljJYNCiAyLiDl hbPplK7kuJrnu6nmjIfmoIfigJRLUEnku4vnu40NCiDigJTigJTogIPmoLjplIDllK7kurrlkZjn moTlh6DkuKrlhbPplK7kuJrnu6nmjIfmoIcNCiAzLiDov5DnlKjlhbPplK7kuJrnu6nmjIfmoIfn moTlh6DkuKrms6jmhI/ngrkNCiAgDQog56ys5Zub6YOo5YiG77yM6ZSA5ZSu5Lq65ZGY55qE5r+A 5Yqx5LiO5oOp572aDQog5LiA44CB5b+F6aG75LqG6Kej55qE5Yeg5Liq5r+A5Yqx5Y6f55CGDQog MS4g6ams5pav5rSb6ZyA5rGC5bGC5qyh55CG6K66DQogMi4g5YWs5bmz55CG6K66IC0tIOahiOS+ i+WIhuaekA0KIOS6jOOAgea/gOWKseaWueazlQ0KIDEuIOaIkeS4pOaJi+epuuepuu+8jOaLv+S7 gOS5iOa/gOWKseS4i+Wxnu+8nw0KIOKAlOKAlOWHoOS4quS9juaIkOacrOeahOa/gOWKseaWueaz lQ0KIDIuIOaPkOaLlOS4i+WxnuS4jua/gOWKsQ0KIOKAlOKAlOS4mue7qeWlveWwseW6lOivpeaP kOaLlO+8n+WTquexu+S6uuiDveaPkOaLlO+8n+aJtuS4iumprO+8jOi/mOW+l+mAgeS4gOeoiyAN CiDkuInjgIHkuJrnu6nnq57otZvkuI7mv4DlirENCiAxLiDkuJrnu6nnq57otZvkuIDlrprlkIjp gILlkJfvvJ8g5Lia57up56ue6LWb55qE5Yip5LiO5byKDQogMi4g5aaC5L2V6YG/5YWN5Lia57up 56ue6LWb55qE5byK56uv77yfDQog5Zub44CB6ZSA5ZSu5Lq65ZGY55qE5oOp572aDQogMS4g5pyJ 5LqG6IOh6JCd5Y2c77yM6L+Y6ZyA6KaB5aSn5qOS5ZCX77yf5Y2V6Z2g5r+A5Yqx6KGM5ZCX77yf DQogMi4g5aaC5L2V5om56K+E5LiL5bGe77yf5om56K+E5LiL5bGe55qE5qCH5YeG5Yqo5L2cDQog IA0KIOesrOS6lOmDqOWIhuOAgemUgOWUruS4u+euoeeahOiHquaIkeaPkOWNhw0KIDEuIOaIkeS7 rOS4uuS7gOS5iOS8muiiq+aPkOWNh++8n+aIkeS7rOeahOiDveWKm+aYr+WQpuiDveiDnOS7u+eO sOWcqOeahOW3peS9nO+8nw0KIDIuIOWmguS9leaPkOWNh+iHquW3seeahOeuoeeQhuaKgOiDve+8 nw0KIOKAlOKAlOaPkOmrmOeuoeeQhuaKgOiDveeahDPkuKrpgJTlvoQNCiDigJTigJTnrqHnkIbo gIXnmoTlrabkuaDvvIzmiJHku6zmmK/lkKbnnJ/nmoTmhI/or4bliLDlrabkuaDnmoTph43opoHm gKfvvJ8NCiDigJTigJTnrqHnkIbogIXlpoLkvZXlrabkuaDvvJ/msqHmnInml7bpl7TlrabkuaDm gI7kuYjlip7vvJ8NCiAzLiDplIDllK7kuLvnrqHopoHlvZPlv4PnmoTpmbfpmLEgDQog4oCU4oCU 5qGI5L6L5YiG5p6Q77ya6Lqr57uP55m+5oiY55qE5aW55Li65LuA5LmI5aSx6LSlPw0KIOKAlOKA lOWmguS9leegtOino+mZt+mYse+8nw0KIA0KDQoNCiAgICAgDQogICAgIA0KDQoNCg0KMTc6MjU6 MjQNCjIwMTUvNC84 --=====003_Dragon756203531713_===== Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0 Zi04IiBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZT4NCjxNRVRBIG5hbWU9R0VORVJBVE9SIGNvbnRl bnQ9Ik1TSFRNTCA4LjAwLjc2MDEuMTc1MTQiPjwvSEVBRD4NCjxCT0RZPg0KPFA+PEZPTlQgY29s b3I9d2hpdGU+dWt6bmVvZXA8L0ZPTlQ+PC9QPg0KPFA+PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOzxCUj4mbmJzcDsmbmJzcDs8QlI+PEJSPiZuYnNwOzxCUj4mbmJzcDvp lIAu5ZSuLuS4uy7nrqEuMi7lpKnlvLou5YyWLuiurS7nu4Mu6JClPEJSPiZuYnNwO+OAkOaXtumX tOWcsOeCueOAkSANCjIwMTXlubQ05pyIMTgtMTnljJfkuqzjgIE15pyIMjMtMjTmt7HlnLPjgIE1 5pyIMzAtMzHkuIrmtbc8QlI+Jm5ic3A744CQ5Y+C5Yqg5a+56LGh44CRIA0K5bCG6KKr5o+Q5Y2H 55qE6ZSA5ZSu57K+6Iux44CB6ZSA5ZSu5Li75Lu744CB6ZSA5ZSu57uP55CG44CB5Yy65Z+f57uP 55CG44CB5Lia5Yqh57uP55CG44CB6ZSA5ZSu5oC755uR44CB5oC757uP55CGPEJSPiZuYnNwO+OA kOaOiOivvuaWueW8j+OAkSDorrLluIjorrLmjoggKyDop4bpopHmvJTnu44gKyDmoYjkvovnoJTo rqggK+inkuiJsuaJrua8lCANCisg6K6y5biI54K56K+EIDxCUj4mbmJzcDvjgJDlrabkuaDotLnn lKjjgJEgMzgwMOWFgy8y5aSpLzHkurrvvIjlkKvotYTmlpnotLnjgIHljYjppJDjgIHojLbngrnj gIHlj5HnpajnrYnvvIk8QlI+Jm5ic3A744CQ5YC854+t5omL5py644CRIA0KMDUxMi0tLTY4NzBf MDcxNiZuYnNwOyZuYnNwOyANCu+8iDDvvIkxODBfMTU1OV82Nzk2PEJSPiZuYnNwOzxCUj4mbmJz cDs8QlI+Jm5ic3A76K++56iL6IOM5pmv77yaPEJSPiZuYnNwO+OAgOOAgOWkp+mDqOWIhumUgOWU ruS4u+euoemDveaYr+S7jumUgOWUruesrOS4gOe6v+iiq+aPkOaLlOS4iuadpe+8jOS4quS6uuea hOmUgOWUruiDveWKm+mDveW+iOW8uuOAguS9huaIkOS4uuS4gOS4qumUgOWUruWboumYn+eahOS4 u+euoeWQjjxCUj4mbmJzcDvvvIznu4/luLjlh7rnjrDnmoTkuIDkuKrpl67popjmmK/nrqHnkIbo g73lipvkuI7nu4/pqozkuI3otrPjgILplIDllK7nrqHnkIblt6XkvZzljYPlpLTkuIfnu6rvvIzp lIDllK7kuLvnrqHmr4/lpKnpg73lnKjlv5nnoozjgIHnhKbomZHkuK3luqY8QlI+Jm5ic3A76L+H 77yM5b6I5bCR5pyJ5pe26Ze05Y675o+Q5Y2H6Ieq5bex55qE566h55CG5oqA6IO944CC44CK6ZSA 5ZSu5Li7566hMuWkqeW8uuWMluiuree7g+iQpeOAi++8jOiuqemUgOWUruS4u+euoeWcqDLlpKnl hoXov5vooYzlvLrljJborq3nu4PvvIw8QlI+Jm5ic3A75a2m5Lmg5b+F5aSH55qE566h55CG55+l 6K+G77yM55CG5riF5Z+65pys55qE566h55CG5oCd6Lev77yM6Kej5Yaz566h55CG5Lit5bi46KeB 55qE6Zeu6aKY44CCPEJSPiZuYnNwOzEuIA0K5L2c5Li66ZSA5ZSu5Li7566h77yM5Lul5YmN5rKh 5a2m5Lmg6L+H566h55CG55+l6K+G77yM5LiN55+l6YGT5aaC5L2V566h5Lq677yM5oCO5LmI5Yqe 77yfPEJSPiZuYnNwOzIuIOmUgOWUruS4u+euoeW9k+eEtuW6lOivpeacieiHquW3seeahOmUgOWU ruS7u+WKoeWQl++8nzxCUj4mbmJzcDszLiANCuWmguS9leS4juS4i+WxnuebuOWkhO+8n+ivpeS4 peWOiei/mOaYr+WuveWuue+8n+aFiOS4jeaOjOWFtei/mOaYr+eIseWFteWmguWtkO+8nzxCUj4m bmJzcDs0LiDku4DkuYjmoLfnmoTkurrmiY3pgILlkIjvvJ/lupTor6XlpoLkvZXmjJHpgInplIDl lK7kurrlkZjvvJ88QlI+Jm5ic3A7NS4gDQror5XnlKjmnJ/nn63vvIzpmr7ku6XnnIvliLDmlrDk urrnmoTkuJrnu6nvvIzor5XnlKjmnJ/lhoXlpoLkvZXor4TkvLDogIPlr5/vvJ88QlI+Jm5ic3A7 Ni4g5pyJ5Lq66K+04oCc5pWZ5Lya5b6S5byf77yM6aW/5q275biI5YKF4oCd77yM5oCO5LmI5Yqe 77yf6L+Y6KaB5Y676L6F5a+85Lia5Yqh5ZGY5ZCX77yfPEJSPiZuYnNwOzcuIA0K6ZSA5ZSu5Lia 57up6K+l5aaC5L2V5oqTPyDplIDllK7kuLvnrqHlgZrkupvku4DkuYjlt6XkvZzmiY3og73nnJ/m raPmj5DljYfkuJrnu6nvvJ88QlI+Jm5ic3A7OC4gDQrplIDllK7kurrlkZjmr4/lpKnlh7rljrvl kI7vvIzmmK/ljrvmi5zorr/lrqLmiLfvvIzov5jmmK/pgJvooZfjgIHljrvnvZHlkKfnjqnmuLjm iI/vvJ/kuI3lpb3nrqHnkIbvvIzmgI7kuYjlip7vvJ88QlI+Jm5ic3A7OS4gDQrmnInmsqHmnInk uIDnp43mlrnms5XvvIzkuI3pnIDlop7liqDmipXlhaXvvIzogIzlj4jog73pqazkuIrluK7liqnk uJrliqHlkZjmj5DljYfkuJrnu6nvvJ88QlI+Jm5ic3A7MTAuIA0K5Lia57up56ue6LWb5a+56ZSA 5ZSu5Lq65ZGY5Ly85LmO5rKh5LuA5LmI5pWI5p6c77yM5oCO5LmI5Yqe77yf5aaC5L2V5Y675r+A 5Yqx6ZSA5ZSu5Lq65ZGY77yfPEJSPiZuYnNwO+OAgOOAgOS7peS4iueWkeiZke+8jOWcqOOAiumU gOWUruS4u+euoTLlpKnlvLrljJborq3nu4PokKXjgIvlsIblvpfliLDop6PnrZTvvIE8QlI+Jm5i c3A7PEJSPiZuYnNwO+WfueiureaUtuebiu+8mjxCUj4mbmJzcDsxLiANCuaYjuehrumUgOWUruS4 u+euoeeahOW3peS9nOWumuS9je+8jOefpemBk+WmguS9leaKiuaPoeW3peS9nOmHjeeCue+8mzxC Uj4mbmJzcDsyLiDluK7liqnplIDllK7kuLvnrqHnkIbmuIXmgJ3ot6/vvIzmraPnoa7lpITnkIbp lIDllK7kuK3nmoTluLjop4Hpl67popjvvJs8QlI+Jm5ic3A7My4gDQrkuobop6PlpoLkvZXnu4Tl u7rplIDllK7lm6LpmJ/vvIzlpoLkvZXpgInkurrjgIHogrLkurrjgIHnlZnkurrvvJs8QlI+Jm5i c3A7NC4g5piO55m96ZSA5ZSu6L+H56iL566h55CG55qE5Y6f55CG5LiO5pa55rOV77ybPEJSPiZu YnNwOzUuIA0K5a2m5Lya6ZSA5ZSu5Zui6Zif5Lia57up6ICD5qC45oyH5qCH6K6+5a6a55qE5pa5 5rOV77ybPEJSPiZuYnNwOzbvvI7kuobop6PplIDllK7kuJrliqHkurrlkZjlpZbmg6nnmoTln7rm nKzljp/nkIbvvJs8QlI+Jm5ic3A7N++8juWtpuWujOOAiumUgOWUruS4u+euoTLlpKnlvLrljJbo rq3nu4PokKXjgIvlubbmjozmj6HmiYDlrabmioDlt6fmlrnms5XvvIzog73mnInmlYjmj5DljYfp lIDllK7lm6LpmJ/kuJrnu6njgII8QlI+Jm5ic3A7PEJSPiZuYnNwO+ivvueoi+eJueiJsu+8mjxC Uj4mbmJzcDsxLiANCuW+l+WIsOW4guWcuumqjOivgeeahOivvueoi+aJjeaYr+Wlveivvueoi++8 gTxCUj4mbmJzcDvigJTigJTkvZXngpzkuJzogIHluIjnmoTplIDllK7kuLvnrqHlvLrljJborq3n u4PokKXlt7Lnu4/ov57nu6005bm05q+P5pyI5Zyo5YyX5Lqs44CB5LiK5rW344CB5rex5Zyz6L2u 5rWB5Li75Yqe5YWs5byA6K++44CCPEJSPiZuYnNwOzIuIA0K5b6X5Yiw5a2m5ZGY6K6k5Y+v55qE 6K++56iL5omN5piv5aW96K++56iL77yBPEJSPiZuYnNwO+KAlOKAlOacrOivvueoi+W3sue7j+W+ l+WIsOaVsOWNg+WQjeadpeiHquWFqOWbveWQhOihjOWQhOS4mueahOmUgOWUruS4u+euoeWlveiv hOingeivgeOAgjxCUj4mbmJzcDszLiANCuiHquS4u+eglOWPkeeahOivvueoi+aJjeaYr+Wlveiv vueoi++8gTxCUj4mbmJzcDvigJTigJTmnKzor77nqIvnlLHkvZXngpzkuJzogIHluIjoh6rkuLvn oJTlj5HvvIznu5PlkIjkuobkvZXogIHluIjlpJrlubTplIDllK7nrqHnkIblrp7miJjnu4/pqozj gII8QlI+Jm5ic3A7NC4gDQrljp/niYjnmoTor77nqIvmiY3mmK/lpb3or77nqIvvvIE8QlI+Jm5i c3A74oCU4oCU5biC6Z2i5LiK5bey57uP5Ye6546w5oqE6KKt6K++56iL77yM6L+Z5qC355qE6K++ 56iL5L2g5pWi5LiK5ZCX77yf6K+36K6k5YeG5L2V54Kc5Lic6ICB5biI55qE5Y6f5Yib57uP5YW4 6K++56iL44CCPEJSPiZuYnNwOzUuIA0K6IO96Kej562U5a2m5ZGY5a6e6ZmF6Zeu6aKY55qE6ICB 5biI5omN5piv5aW96ICB5biI77yBPEJSPiZuYnNwO+KAlOKAlOS9leiAgeW4iOWFt+acieS4sOWv jOeahOWunumZhee7j+mqjOS4jueQhuiuuuWfuuehgO+8jOWPr+WcqOivvueoi+eOsOWcuuWNs+aX tuino+etlOWtpuWRmOaPkOWHuueahOWunumZheW3peS9nOS4remBh+WIsOeahOmXrumimOOAgjxC Uj4mbmJzcDs8QlI+Jm5ic3A7PEJSPiZuYnNwOzxCUj4mbmJzcDvor77nqIvlpKfnurLvvJo8QlI+ Jm5ic3A756ys5LiA6YOo5YiG44CB6ZSA5ZSu5Li7566h55qE5bel5L2c5LiO6KeS6Imy5a6a5L2N PEJSPiZuYnNwO+S4gOOAgemUgOWUruS4u+euoeivpeWBmuS7gOS5iO+8nzxCUj4mbmJzcDsxLiAN CuahiOS+i+WIhuaekO+8mui/meS4quS4u+euoeivpeWmguS9leWBmu+8nzxCUj4mbmJzcDsyLiDp lIDllK7kuLvnrqHkuLrku4DkuYjov5nkuYjlv5nvvJ/lpoLkvZXog73kuI3ov5nkuYjlv5nvvJ88 QlI+Jm5ic3A7My4gDQrplIDllK7kuLvnrqHnmoTlt6XkvZzph43ngrnlnKjlk6rph4zvvJ88QlI+ Jm5ic3A75LqM44CB6ZSA5ZSu566h55CG55qE5Yeg5Liq5rOo5oSP54K5PEJSPiZuYnNwOzEuIOeu oeeQhuimgeazqOaEj+W6puOAguahiOS+i+WIhuaekO+8mui/meS4quS4u+euoeS4uuS7gOS5iOS8 muWksei0pe+8nyANCu+8iOeuoeeQhuaWueazleS4jeaYr+S4gOaIkOS4jeWPmOeahO+8iTxCUj4m bmJzcDsyLiDnrqHnkIbml6DlpKfkuovvvIzkuIDliIflnKjnu4boioLvvIjmipPplIDph4/vvIzk uZ/lvpfku47nu4boioLmipPotbfvvIk8QlI+Jm5ic3A7My4gDQrpmLLngavph43kuo7mlZHngavv vIjpooTpmLLmm7Tph43opoHvvIk8QlI+Jm5ic3A75LiJ44CB6ZSA5ZSu5Li7566h6KeS6Imy5a6a 5L2NPEJSPiZuYnNwOzEuIOS4juWFrOWPuOOAgeS4iuWPuOOAgeWQjOS6i+eahOWFs+ezu+WumuS9 jTxCUj4mbmJzcDsyLiANCuS4juS4i+WxnueahOWFs+ezu+WumuS9jTxCUj4mbmJzcDvigJTigJTk uLvnrqHkuI7kuIvlsZ7og73lkKbmiJDkuLrnnJ/mraPnmoTmnIvlj4vvvJ8gPEJSPiZuYnNwO+KA lOKAlOWvueS4i+WxnuivpeS4peWOiei/mOaYr+WuveWuue+8nyANCjxCUj4mbmJzcDs8QlI+Jm5i c3A756ys5LqM6YOo5YiG44CB6ZSA5ZSu5Zui6Zif55qE57uE5bu6PEJSPiZuYnNwO+S4gOOAgemU gOWUruS6uuWRmOeahOaMkemAiTxCUj4mbmJzcDsxLiANCumAieS6uuavlOeUqOS6uuabtOmHjeim ge+8jOWTquenjemUgOWUruS6uuWRmOmAguWQiOS9oO+8n+S7gOS5iOaAp+agvOWlve+8nzxCUj4m bmJzcDsyLiDpnaLor5XplIDllK7kurrlkZjopoHms6jmhI/nmoTpl67popg8QlI+Jm5ic3A7My4g 6K+V55So5pyf5aaC5L2V5Yik5pat77yfIA0K6K+V55So5pyf6KaB6ICD5a+f6ZSA5ZSu5Lq65ZGY 55qEMuWkp+eCuTxCUj4mbmJzcDvkuozjgIHplIDllK7kurrlkZjnmoTln7nogrI8QlI+Jm5ic3A7 MS4g6ZSA5ZSu5Li7566h55qE5Li76KaB6IGM6LSj77ya5pWZ5biI6L+Y5piv5pWZ57uD77yfPEJS PiZuYnNwOzIuIA0K5Z+56K6t5oiQ5pys5aSq6auY77yfPEJSPiZuYnNwOzMuIOS4uuS7gOS5iOWf ueiureaViOaenOS4jeeQhuaDs++8nzxCUj4mbmJzcDs0LiANCuaMh+WvvOS4i+WxnuaXtuimgeaz qOaEj+eahOWHoOS4qumXrumimDxCUj4mbmJzcDvigJTigJTkvaDor7Tkuobku5bkuIDlrprmh4Ll kJfvvJ88QlI+Jm5ic3A74oCU4oCU5LuW5oeC5LqG5LiA5a6a5YGa5ZCX77yfPEJSPiZuYnNwOzUu IA0K6L6F5a+86ZSA5ZSu5Lq65ZGY55qENeenjeS4u+imgeaWueazlTxCUj4mbmJzcDvkuInjgIHl poLkvZXnlZnkvY/kvJjnp4DplIDllK7kurrlkZjvvJ88QlI+Jm5ic3A7MS4g5Li65LuA5LmI5LyY 56eA6ZSA5ZSu5Lq65ZGY6KaB6LWw77yfPEJSPiZuYnNwOzIuIA0K5aaC5L2V55WZ5L2P5LyY56eA 5Lq65omN77yfPEJSPiZuYnNwOyANCjxCUj4mbmJzcDvnrKzkuInpg6jliIbjgIHplIDllK7kurrl kZjnrqHnkIbkuI7plIDllK7kuJrnu6nnrqHnkIY8QlI+Jm5ic3A75LiA44CB5oiR5Lus55qE5bel 5L2c6YeN54K55bqU5pS+5Zyo5ZOq5Lqb5Lq66Lqr5LiK77yfPEJSPiZuYnNwOzEuIA0K6ZSA5ZSu 57uP55CG55qE5pe26Ze05LiO57K+5Yqb5LiN6IO95bmz5Z2H5YiG6YWN77yM5aaC5L2V6YG/5YWN 5Lya5ZOt55qE5a2p5a2Q5pyJ5aW25ZCD546w6LGh77yfPEJSPiZuYnNwOzIuIOmUgOWUruS6uuWR mOeahDPlpKfliIbnsbs8QlI+Jm5ic3A7My4gDQrplIDllK7kurrlkZjliIbnsbvnrqHnkIbljp/l iJk8QlI+Jm5ic3A75LqM44CB6ZSA5ZSu5Lia57up5aaC5L2V5oqT77yfPEJSPiZuYnNwOzEuIOS4 uuS7gOS5iOaKk+S4mue7qe+8jOaAu+aYr+S4jeingeaViOaenO+8nyA8QlI+Jm5ic3A7Mi4gDQrm ipPkuJrnu6nvvIzopoHku47kuInngrnlhaXmiYs8QlI+Jm5ic3A75LiJ44CB6ZSA5ZSu5Lq65ZGY 5pel5bi45bel5L2c566h55CGPEJSPiZuYnNwOzEuIOmUgOWUruS6uuWRmOWHuuWOu+W5suWYm+S6 hu+8jOS9oOefpemBk+WQl++8n+WmguS9leeuoeeQhu+8nzxCUj4mbmJzcDsyLiANCumUgOWUruS6 uuWRmOaXpeW4uOW3peS9nOeuoeeQhuS4ieaLm+OAgjxCUj4mbmJzcDvigJTigJTkuI3nlKjlop7l iqDmipXlhaXvvIzorqnlm6LpmJ/plIDllK7kuJrnu6nmj5DljYfnmoTmlrnms5U8QlI+Jm5ic3A7 5Zub44CB6ZSA5ZSu55uu5qCH6K6+5a6a5LiO5YiG6KejPEJSPiZuYnNwOzEuIA0K6ZSA5ZSu55uu 5qCH55qE6K6+5a6a5Y6f5YiZPEJSPiZuYnNwOzIuIA0K6ZSA5ZSu5Lq65ZGY55qE5Lia57up5oyH 5qCH5YiG6Kej5pa55rOVPEJSPiZuYnNwO+S6lOOAgemUgOWUruS4mue7qeiAg+aguDxCUj4mbmJz cDsx44CB6ZSA5ZSu5Lit55qE5YWz6ZSu5oyH5qCHPEJSPiZuYnNwO+KAlOKAlOWmguS9leiAg+ag uOS4i+Wxnu+8n+WFiOi/m+eahOmUgOWUrueuoeeQhu+8jOW/hemhu+WBmuWIsOmHj+WMljxCUj4m bmJzcDsyLiANCuWFs+mUruS4mue7qeaMh+agh+KAlEtQSeS7i+e7jTxCUj4mbmJzcDvigJTigJTo gIPmoLjplIDllK7kurrlkZjnmoTlh6DkuKrlhbPplK7kuJrnu6nmjIfmoIc8QlI+Jm5ic3A7My4g 6L+Q55So5YWz6ZSu5Lia57up5oyH5qCH55qE5Yeg5Liq5rOo5oSP54K5PEJSPiZuYnNwOyANCjxC Uj4mbmJzcDvnrKzlm5vpg6jliIbvvIzplIDllK7kurrlkZjnmoTmv4DlirHkuI7mg6nnvZo8QlI+ Jm5ic3A75LiA44CB5b+F6aG75LqG6Kej55qE5Yeg5Liq5r+A5Yqx5Y6f55CGPEJSPiZuYnNwOzEu IA0K6ams5pav5rSb6ZyA5rGC5bGC5qyh55CG6K66PEJSPiZuYnNwOzIuIOWFrOW5s+eQhuiuuiAt LSDmoYjkvovliIbmnpA8QlI+Jm5ic3A75LqM44CB5r+A5Yqx5pa55rOVPEJSPiZuYnNwOzEuIA0K 5oiR5Lik5omL56m656m677yM5ou/5LuA5LmI5r+A5Yqx5LiL5bGe77yfPEJSPiZuYnNwO+KAlOKA lOWHoOS4quS9juaIkOacrOeahOa/gOWKseaWueazlTxCUj4mbmJzcDsyLiANCuaPkOaLlOS4i+Wx nuS4jua/gOWKsTxCUj4mbmJzcDvigJTigJTkuJrnu6nlpb3lsLHlupTor6Xmj5Dmi5TvvJ/lk6rn sbvkurrog73mj5Dmi5TvvJ/mibbkuIrpqazvvIzov5jlvpfpgIHkuIDnqIsgPEJSPiZuYnNwO+S4 ieOAgeS4mue7qeernui1m+S4jua/gOWKsTxCUj4mbmJzcDsxLiANCuS4mue7qeernui1m+S4gOWu muWQiOmAguWQl++8nyDkuJrnu6nnq57otZvnmoTliKnkuI7lvIo8QlI+Jm5ic3A7Mi4g5aaC5L2V 6YG/5YWN5Lia57up56ue6LWb55qE5byK56uv77yfPEJSPiZuYnNwO+Wbm+OAgemUgOWUruS6uuWR mOeahOaDqee9mjxCUj4mbmJzcDsxLiANCuacieS6huiDoeiQneWNnO+8jOi/mOmcgOimgeWkp+aj kuWQl++8n+WNlemdoOa/gOWKseihjOWQl++8nzxCUj4mbmJzcDsyLiDlpoLkvZXmibnor4TkuIvl sZ7vvJ/mibnor4TkuIvlsZ7nmoTmoIflh4bliqjkvZw8QlI+Jm5ic3A7IA0KPEJSPiZuYnNwO+es rOS6lOmDqOWIhuOAgemUgOWUruS4u+euoeeahOiHquaIkeaPkOWNhzxCUj4mbmJzcDsxLiDmiJHk u6zkuLrku4DkuYjkvJrooqvmj5DljYfvvJ/miJHku6znmoTog73lipvmmK/lkKbog73og5zku7vn jrDlnKjnmoTlt6XkvZzvvJ88QlI+Jm5ic3A7Mi4gDQrlpoLkvZXmj5DljYfoh6rlt7HnmoTnrqHn kIbmioDog73vvJ88QlI+Jm5ic3A74oCU4oCU5o+Q6auY566h55CG5oqA6IO955qEM+S4qumAlOW+ hDxCUj4mbmJzcDvigJTigJTnrqHnkIbogIXnmoTlrabkuaDvvIzmiJHku6zmmK/lkKbnnJ/nmoTm hI/or4bliLDlrabkuaDnmoTph43opoHmgKfvvJ88QlI+Jm5ic3A74oCU4oCU566h55CG6ICF5aaC 5L2V5a2m5Lmg77yf5rKh5pyJ5pe26Ze05a2m5Lmg5oCO5LmI5Yqe77yfPEJSPiZuYnNwOzMuIA0K 6ZSA5ZSu5Li7566h6KaB5b2T5b+D55qE6Zm36ZixIDxCUj4mbmJzcDvigJTigJTmoYjkvovliIbm npDvvJrouqvnu4/nmb7miJjnmoTlpbnkuLrku4DkuYjlpLHotKU/PEJSPiZuYnNwO+KAlOKAlOWm guS9leegtOino+mZt+mYse+8nzxCUj4mbmJzcDs8QlI+PC9QPg0KPFA+Jm5ic3A7PC9QPg0KPFA+ Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOzxCUj48QlI+PC9QPg0KPFA+Jm5ic3A7PC9QPg0KPFA+PEZPTlQgY29sb3I9d2hpdGU+ MTc6MjU6MjQ8L0ZPTlQ+PC9QPg0KPFA+PEZPTlQgY29sb3I9d2hpdGU+MjAxNS80Lzg8L0ZPTlQ+ PC9QPjwvQk9EWT48L0hUTUw+DQo= --=====003_Dragon756203531713_=====-- From hch@lst.de Wed Apr 8 11:14:02 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=SINGLE_HEADER_2K autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B1CB77F7C for ; Wed, 8 Apr 2015 11:14:02 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A10FC8F8068 for ; Wed, 8 Apr 2015 09:13:59 -0700 (PDT) X-ASG-Debug-ID: 1428509636-04cb6c1ccab5b50001-NocioJ Received: from newverein.lst.de (verein.lst.de [213.95.11.211]) by cuda.sgi.com with ESMTP id E8cJkRi91pvcA291 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 09:13:57 -0700 (PDT) X-Barracuda-Envelope-From: hch@lst.de X-Barracuda-Apparent-Source-IP: 213.95.11.211 Received: by newverein.lst.de (Postfix, from userid 2407) id 66EA968C22; Wed, 8 Apr 2015 18:13:55 +0200 (CEST) Date: Wed, 8 Apr 2015 18:13:55 +0200 From: Christoph Hellwig To: Jeff Moyer Cc: Jens Axboe , Ming Lei , Konrad Rzeszutek Wilk , Roger Pau Monn?? , Alasdair Kergon , Mike Snitzer , Neil Brown , "Nicholas A. Bellinger" , Alexander Viro , Chris Mason , Josef Bacik , David Sterba , Theodore Ts'o , Andreas Dilger , Jaegeuk Kim , Changman Lee , Steven Whitehouse , Mikulas Patocka , Andrew Morton , Rik van Riel , Johannes Weiner , Mel Gorman , Trond Myklebust , Anna Schumaker , Dave Chinner , xfs@oss.sgi.com, Christoph Hellwig , Weston Andros Adamson , "Martin K. Petersen" , Sagi Grimberg , Tejun Heo , Fabian Frederick , Matthew Wilcox , Ming Lei , "Kirill A. Shutemov" , Wang Sheng-Hui , Michal Hocko , Joe Perches , Miklos Szeredi , Namjae Jeon , Mark Rustad , Jianyu Zhan , Fengguang Wu , Vladimir Davydov , Vlastimil Babka , Suleiman Souhlal , linux-kernel@vger.kernel.org, dm-devel@redhat.com, xen-devel@lists.xenproject.org, linux-raid@vger.kernel.org, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 2/2][v2] blk-plug: don't flush nested plug lists Message-ID: <20150408161355.GA16052@lst.de> X-ASG-Orig-Subj: Re: [PATCH 2/2][v2] blk-plug: don't flush nested plug lists References: <1428347694-17704-1-git-send-email-jmoyer@redhat.com> <1428347694-17704-2-git-send-email-jmoyer@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: verein.lst.de[213.95.11.211] X-Barracuda-Start-Time: 1428509637 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17676 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This looks good, but without the blk_finish_plug argument we're bound to grow programming mistakes where people forget it. Any chance we could have annotations similar to say rcu_read_lock/rcu_read_unlock or the spinlocks so that sparse warns about it? From hch@lst.de Wed Apr 8 11:21:07 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F110B7CBF for ; Wed, 8 Apr 2015 11:21:07 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id DAB1D8F8035 for ; Wed, 8 Apr 2015 09:21:07 -0700 (PDT) X-ASG-Debug-ID: 1428510065-04cb6c1cc8b6050001-NocioJ Received: from newverein.lst.de (verein.lst.de [213.95.11.211]) by cuda.sgi.com with ESMTP id FVrlGhN0JJUvi3VK (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 09:21:06 -0700 (PDT) X-Barracuda-Envelope-From: hch@lst.de X-Barracuda-Apparent-Source-IP: 213.95.11.211 Received: by newverein.lst.de (Postfix, from userid 2407) id DD63568C33; Wed, 8 Apr 2015 18:21:04 +0200 (CEST) Date: Wed, 8 Apr 2015 18:21:04 +0200 From: Christoph Hellwig To: "J. Bruce Fields" Cc: Christoph Hellwig , xfs@oss.sgi.com, viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org Subject: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Message-ID: <20150408162104.GC16052@lst.de> X-ASG-Orig-Subj: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts References: <1428420944-20965-1-git-send-email-hch@lst.de> <20150407210747.GD3363@fieldses.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150407210747.GD3363@fieldses.org> User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: verein.lst.de[213.95.11.211] X-Barracuda-Start-Time: 1428510065 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17676 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On Tue, Apr 07, 2015 at 05:07:47PM -0400, J. Bruce Fields wrote: > On Tue, Apr 07, 2015 at 05:35:44PM +0200, Christoph Hellwig wrote: > > We want to drop all I/O path locks when recalling layouts, and that includes > > i_mutex for the write path. Without this we get stuck processe when recalls > > take too long. > > Also if the writer is an nfsd thread than we'd rather just error out > than wait. We have no way to know we are called by nfsd here unfortunately. From hch@lst.de Wed Apr 8 11:24:06 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C4F867F81 for ; Wed, 8 Apr 2015 11:24:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id A10028F8071 for ; Wed, 8 Apr 2015 09:24:06 -0700 (PDT) X-ASG-Debug-ID: 1428510244-04cb6c1cc7b6330001-NocioJ Received: from newverein.lst.de (verein.lst.de [213.95.11.211]) by cuda.sgi.com with ESMTP id FgPadXyO16CljWxb (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 09:24:05 -0700 (PDT) X-Barracuda-Envelope-From: hch@lst.de X-Barracuda-Apparent-Source-IP: 213.95.11.211 Received: by newverein.lst.de (Postfix, from userid 2407) id E109268C22; Wed, 8 Apr 2015 18:24:03 +0200 (CEST) Date: Wed, 8 Apr 2015 18:24:03 +0200 From: Christoph Hellwig To: Dave Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com, linux-nfs@vger.kernel.org, viro@zeniv.linux.org.uk Subject: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Message-ID: <20150408162403.GD16052@lst.de> X-ASG-Orig-Subj: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts References: <1428420944-20965-1-git-send-email-hch@lst.de> <20150407221927.GD15810@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150407221927.GD15810@dastard> User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: verein.lst.de[213.95.11.211] X-Barracuda-Start-Time: 1428510245 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17676 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Apr 08, 2015 at 08:19:27AM +1000, Dave Chinner wrote: > That's kinda nasty, and it has no documentation explaining when or > why we'd need to drop the i_mutex. How are we supposed to know if we > need to drop the i_mutex or not? We need to drop it if we hold it, pretty easy. > What happens if the upper VFS > layers change or we have a multiple call paths that have different > i_mutex contexts (i.e. one holds, another doesn't)? We avoid this in the VFS, as everytime we had it filesystems were getting it wrong. However you have a point in that we should probably have asserts that the right locks are held. > Which makes me wonder - is this layout breaking stuff at the right > layer? We can't do it in the VFS as it needs to be atomic vs the lock that protects write in ->write and ->fallocate, which is only taken in the filesystem. For ->setattr in theory we could do it in the VFS, but if the other callers can't do it in the VFS that will just lead to code duplication. From bfields@fieldses.org Wed Apr 8 13:16:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 07DA47F5A for ; Wed, 8 Apr 2015 13:16:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 88972AC009 for ; Wed, 8 Apr 2015 11:16:54 -0700 (PDT) X-ASG-Debug-ID: 1428517012-04cb6c1cc7be380001-NocioJ Received: from fieldses.org (fieldses.org [173.255.197.46]) by cuda.sgi.com with ESMTP id hfEfZIMmKpAYCN5Z for ; Wed, 08 Apr 2015 11:16:52 -0700 (PDT) X-Barracuda-Envelope-From: bfields@fieldses.org X-Barracuda-Apparent-Source-IP: 173.255.197.46 Received: by fieldses.org (Postfix, from userid 2815) id A369D2F0B; Wed, 8 Apr 2015 14:16:51 -0400 (EDT) Date: Wed, 8 Apr 2015 14:16:51 -0400 From: "J. Bruce Fields" To: Christoph Hellwig Cc: xfs@oss.sgi.com, viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org Subject: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts Message-ID: <20150408181651.GA3916@fieldses.org> X-ASG-Orig-Subj: Re: [PATCH] xfs: unlock i_mutex in xfs_break_layouts References: <1428420944-20965-1-git-send-email-hch@lst.de> <20150407210747.GD3363@fieldses.org> <20150408162104.GC16052@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150408162104.GC16052@lst.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: fieldses.org[173.255.197.46] X-Barracuda-Start-Time: 1428517012 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17678 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Apr 08, 2015 at 06:21:04PM +0200, Christoph Hellwig wrote: > On Tue, Apr 07, 2015 at 05:07:47PM -0400, J. Bruce Fields wrote: > > On Tue, Apr 07, 2015 at 05:35:44PM +0200, Christoph Hellwig wrote: > > > We want to drop all I/O path locks when recalling layouts, and that includes > > > i_mutex for the write path. Without this we get stuck processe when recalls > > > take too long. > > > > Also if the writer is an nfsd thread than we'd rather just error out > > than wait. (To be clear: ACK to this patch as far as I'm concerned, I've got another concern but we need this fix regardless.) > We have no way to know we are called by nfsd here unfortunately. I was imagining the possible deadlock here as mostly theoretical, but now that I think of it it doesn't sound unlikely at all: - file is under heavy write load - conflicting operation breaks layout - nfsd threads all block in writes to that file - no nfsd threads available to service layout return - recall times out, client fenced. Ugh. --b. From alisson@concept87.eu Wed Apr 8 16:11:35 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=HTML_MESSAGE,INVALID_MSGID, T_DKIM_INVALID,T_REMOTE_IMAGE autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id D59AA7F66 for ; Wed, 8 Apr 2015 16:11:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 51A78AC001 for ; Wed, 8 Apr 2015 14:11:31 -0700 (PDT) X-ASG-Debug-ID: 1428527485-04cbb056b2eea90001-NocioJ Received: from vps.spirit970.eu (vps.spirit970.eu [185.13.38.163]) by cuda.sgi.com with ESMTP id KvnBdeuSYAaYlzmf (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 14:11:27 -0700 (PDT) X-Barracuda-Envelope-From: alisson@concept87.eu X-Barracuda-Apparent-Source-IP: 185.13.38.163 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=concept87.eu; s=itek; t=1428527485; bh=nIH5lzbUu/GM/q/CDyrWo5byggFz15ABpxZiwJ0DS7Q=; h=Date:From:To:Reply-to:Subject:From; b=cDcGL+q76dlkHk4HwNnrIkAnbpCO52XEsp8OIvFpXyGR701biESbEJNN8ZRKyqLev RHEh36SLIYuSR9TxG5yMPSUYL5+1PNWiJLatN/Ivnhl60cPpRxjgId7BJMZKFsk2RR gDFjM5WBdfkAIMTcNuJNJX7J2wtjmyGjB5XfKLo8= Date: Wed, 08 Apr 2015 23:11:19 +0000 From: ExpertiseComptable To: xfs@oss.sgi.com Reply-To: ExpertiseComptable Message-ID: <20150408.23111905@concept87.eu>> User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; Microsoft Outlook 15.0.4420) MIME-Version: 1.0 Subject: Comptabilite en ligne : des clients satisfaits Content-Type: multipart/alternative; boundary="------------010607070304080309070303" X-ASG-Orig-Subj: Comptabilite en ligne : des clients satisfaits X-Barracuda-Connect: vps.spirit970.eu[185.13.38.163] X-Barracuda-Start-Time: 1428527487 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.72 X-Barracuda-Spam-Status: No, SCORE=1.72 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, HTML_MESSAGE, INVALID_MSGID, K2_INVALID_MSGID, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17683 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 INVALID_MSGID Message-Id is not valid, according to RFC 2822 1.71 K2_INVALID_MSGID INVALID_MSGID This is a multi-part message in MIME format. --------------010607070304080309070303 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Si vous ne visualisez pas correctement ce message, veuillez suivre ce lien consultez-la en ligne Testez gratuitement 1 mois de compta en ligne ! C'est facile, sans risque et c'est "Satisfait ou Rembours". - Suivez ce lien ! Affichez vos images : Compta Clmentine dmocratise la comptabilit en ligne et vous fait faire de prcieuses conomies. Le cabinet Compta-Clmentine ralise des missions d'expertise-comptable en ligne : Saisie, bilan, dclarations sociales, TVA/CA 12 et conseils. Membre de l'Ordre des Experts Comptables, Compta Clmentine vous fait bnficier de ses innovations technologiques et de son savoir-faire, pour rendre plus abordable et de meilleures qualits ses services de comptabilit en ligne. Grce une optimisation de ses prestations d'Expertise comptable, Compta Clmentine dmocratise la comptabilit en ligne et vous fait faire de prcieuses conomies. Testez gratuitement pendant 1 mois votre Compta en ligne avec : > Les conseils et le suivi d'un collaborateur comptable ddi, tout au long de l'anne > Les outils tableaux de bord pour piloter votre activit > Bnficiez d'une offre satisfait rembours pour tester notre service en toute srnit ..et tout cela, en allgeant votre budget de 30 40%. Pour bnficier d'1 mois gratuit sur votre comptabilit en ligne, Suivez ce lien ! Je veux en savoir plus Si vous ne souhaitez plus recevoir d'informations de notre part, Vous pouvez vous dsinscrire --------------010607070304080309070303 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit
Si vous ne visualisez pas correctement ce message, veuillez suivre ce lien consultez-la en ligne

Testez gratuitement
1 mois de compta en ligne !

C'est facile, sans risque et c'est
"Satisfait ou Rembours".

-

Suivez ce lien !




Affichez vos images : Compta Clmentine dmocratise la comptabilit en ligne et vous fait faire de prcieuses conomies.




Le cabinet Compta-Clmentine ralise des missions d'expertise-comptable en ligne : Saisie, bilan, dclarations sociales, TVA/CA 12 et conseils.

Membre de l'Ordre des Experts Comptables, Compta Clmentine vous fait bnficier de ses innovations technologiques et de son savoir-faire, pour
rendre plus abordable et de meilleures qualits ses services de comptabilit en ligne. Grce une optimisation de ses prestations d'Expertise comptable, Compta Clmentine dmocratise la comptabilit en ligne et vous fait faire de prcieuses conomies.


Testez gratuitement pendant 1 mois votre Compta en ligne avec :

> Les conseils et le suivi d'un collaborateur comptable ddi, tout au long de l'anne

> Les outils tableaux de bord pour piloter votre activit

> Bnficiez d'une offre satisfait rembours pour tester notre service en toute srnit

...et tout cela, en
allgeant votre budget de 30 40%.

Pour bnficier
d'1 mois gratuit
sur votre comptabilit en ligne,

Suivez ce lien !




Je veux en savoir plus
Si vous ne souhaitez plus recevoir d'informations de notre part, Vous pouvez vous dsinscrire
--------------010607070304080309070303-- From david@fromorbit.com Wed Apr 8 16:14:58 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A30357F67 for ; Wed, 8 Apr 2015 16:14:58 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1FB4AAC001 for ; Wed, 8 Apr 2015 14:14:57 -0700 (PDT) X-ASG-Debug-ID: 1428527691-04cb6c1cc7c6730001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 90uYtT8WhnqXidgL for ; Wed, 08 Apr 2015 14:14:52 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BGCAAOmiVV/8+HLHlbAYMIUlyCR06ucQwBAQEBAQEGkyGFfwQCAoEtTQEBAQEBAX6EHwEBAQMBIwQLASMjBQsIAQIYAgIFEAIPAgIPBSUDEBETiCIHmVqdAJZWAQEBBwIBHxiBCYRvhRuEGREBUQcnAYJAL4EWBZRshg6BHjp7ggKCY4lag0oihAEsMYELgTgBAQE Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 09 Apr 2015 06:44:48 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YfxIy-0005QL-2n; Thu, 09 Apr 2015 07:14:36 +1000 Date: Thu, 9 Apr 2015 07:14:36 +1000 From: Dave Chinner To: YeYin Cc: xfs Subject: Re: =?utf-8?B?5Zue5aSN?= =?utf-8?B?77ya?= XFS direct IO problem Message-ID: <20150408211436.GF15810@dastard> X-ASG-Orig-Subj: Re: =?utf-8?B?5Zue5aSN?= =?utf-8?B?77ya?= XFS direct IO problem References: <20150408044955.GE15810@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1428527691 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0113c X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17682 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c On Wed, Apr 08, 2015 at 03:05:57PM +0800, YeYin wrote: > Dave, > Thank you for your explanation. I got the reason, and I write some code to simulate the MySQL.It will reproduce the progress:‍ > > > open file without direct flag > read file //cause kernel readahead 4 pages, and inode->i_mapping->nrpages > 0 > close file > > > open file with direct flag > lseek 4*4096 // skip 4 readahead pages > read file //cause xfs_flushinval_pages to do nothing > ... > Yes, you can cause it that way, but any application mixing buffered IO and direct IO like that is broken. I'll point you at the open(2) man page, in the section about O_DIRECT: "Applications should avoid mixing O_DIRECT and normal I/O to the same file, and especially to overlapping byte regions in the same file. Even when the filesystem correctly handles the coherency issues in this situation, overall I/O throughput is likely to be slower than using either mode alone. Likewise, applications should avoid mixing mmap(2) of files with direct I/O to the same files." IOWs, your test program is behaving as documented for a program that mixes buffered and direct IO.... AFAIK, MySQL does not do mixed buffer/direct IO like this and so this is extremely unlikely to be the source of the problem. I need to understand how MySQL is generating cached pages on it's database files when it is supposed to be using direct IO, and the reproducer program needs to do what MySQL does to generate cached pages. Can you please find the location of the cached pages (as I sugggested via tracing in my last email) in the MySQL files that are causing the problem? > I'd like to ask XFS how to resovle this problem? Applications that need to mix buffered and direct IO can invalidate the cached pages by using POSIX_FADV_DONTNEED before doing direct IO. FWIW, You must be looking at quite old kernel code if xfs_flushinval_pages() exists in your kernel. Does MySQL on a current upstream kernel have the same problem? Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Apr 8 18:02:33 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=SINGLE_HEADER_2K autolearn=no version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2F13C7F72 for ; Wed, 8 Apr 2015 18:02:33 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 90148AC007 for ; Wed, 8 Apr 2015 16:02:29 -0700 (PDT) X-ASG-Debug-ID: 1428534141-04cbb056b1f2620001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id qGjqYOpQ7ubBw98M for ; Wed, 08 Apr 2015 16:02:21 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2BgCAC8siVV/8+HLHlcgwhSXIJHr0sBAQEBAQEGkyWFewICAQECgStNAQEBAQEBfoQfAQEBAwEaAQwTHCMFCwgDDgoJJQ8FJQMhEx6IBAcOzHsBAQEBBgEBAQEaBBiFeIUbgmaCFgeELQWGHohFhgmGDoEehhqJWoNKIoIDHIFiLDGCQwEBAQ Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 09 Apr 2015 08:32:17 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1Yfyyx-0005cV-OM; Thu, 09 Apr 2015 09:02:03 +1000 Date: Thu, 9 Apr 2015 09:02:03 +1000 From: Dave Chinner To: Jeff Moyer Cc: Jens Axboe , Ming Lei , Konrad Rzeszutek Wilk , Roger Pau Monn?? , Alasdair Kergon , Mike Snitzer , Neil Brown , "Nicholas A. Bellinger" , Alexander Viro , Chris Mason , Josef Bacik , David Sterba , Theodore Ts'o , Andreas Dilger , Jaegeuk Kim , Changman Lee , Steven Whitehouse , Mikulas Patocka , Andrew Morton , Rik van Riel , Johannes Weiner , Mel Gorman , Trond Myklebust , Anna Schumaker , xfs@oss.sgi.com, Christoph Hellwig , Weston Andros Adamson , "Martin K. Petersen" , Sagi Grimberg , Tejun Heo , Fabian Frederick , Matthew Wilcox , Ming Lei , "Kirill A. Shutemov" , Wang Sheng-Hui , Michal Hocko , Joe Perches , Miklos Szeredi , Namjae Jeon , Mark Rustad , Jianyu Zhan , Fengguang Wu , Vladimir Davydov , Vlastimil Babka , Suleiman Souhlal , linux-kernel@vger.kernel.org, dm-devel@redhat.com, xen-devel@lists.xenproject.org, linux-raid@vger.kernel.org, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 2/2][v2] blk-plug: don't flush nested plug lists Message-ID: <20150408230203.GG15810@dastard> X-ASG-Orig-Subj: Re: [PATCH 2/2][v2] blk-plug: don't flush nested plug lists References: <1428347694-17704-1-git-send-email-jmoyer@redhat.com> <1428347694-17704-2-git-send-email-jmoyer@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1428534141 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17687 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Tue, Apr 07, 2015 at 02:55:13PM -0400, Jeff Moyer wrote: > The way the on-stack plugging currently works, each nesting level > flushes its own list of I/Os. This can be less than optimal (read > awful) for certain workloads. For example, consider an application > that issues asynchronous O_DIRECT I/Os. It can send down a bunch of > I/Os together in a single io_submit call, only to have each of them > dispatched individually down in the bowels of the dirct I/O code. > The reason is that there are blk_plug-s instantiated both at the upper > call site in do_io_submit and down in do_direct_IO. The latter will > submit as little as 1 I/O at a time (if you have a small enough I/O > size) instead of performing the batching that the plugging > infrastructure is supposed to provide. I'm wondering what impact this will have on filesystem metadata IO that needs to be issued immediately. e.g. we are doing writeback, so there is a high level plug in place and we need to page in btree blocks to do extent allocation. We do readahead at this point, but it looks like this change will prevent the readahead from being issued by the unplug in xfs_buf_iosubmit(). So while I can see how this can make your single microbenchmark better (because it's only doing concurrent direct IO to the block device and hence there are no dependencies between individual IOs), I have significant reservations that it's actually a win for filesystem-based workloads where we need direct control of flushing to minimise IO latency due to IO dependencies... Patches like this one: https://lkml.org/lkml/2015/3/20/442 show similar real-world workload improvements to your patchset by being smarter about using high level plugging to enable cross-file merging of IO, but it still relies on the lower layers of plugging to resolve latency bubbles caused by IO dependencies in the filesystems. > NOTE TO SUBSYSTEM MAINTAINERS: Before this patch, blk_finish_plug > would always flush the plug list. After this patch, this is only the > case for the outer-most plug. If you require the plug list to be > flushed, you should be calling blk_flush_plug(current). Btrfs and dm > maintainers should take a close look at this patch and ensure they get > the right behavior in the end. IOWs, you are saying we need to change all our current unplugs to blk_flush_plug(current) to maintain the same behaviour as we currently have? If that is the case, shouldn't you actually be trying to fix the specific plugging problem you've identified (i.e. do_direct_IO() is flushing far too frequently) rather than making a sweeping generalisation that the IO stack plugging infrastructure needs to be fundamentally changed? Cheers, Dave. > > --- > Changelog: > v1->v2: Keep the blk_start_plug interface the same, suggested by Ming Lei. > > Test results > ------------ > Virtio-blk: > > unpatched: > > job1: (groupid=0, jobs=1): err= 0: pid=8032: Tue Apr 7 13:33:53 2015 > read : io=2736.1MB, bw=280262KB/s, iops=70065, runt= 10000msec > slat (usec): min=40, max=10472, avg=207.82, stdev=364.02 > clat (usec): min=211, max=35883, avg=14379.83, stdev=2213.95 > lat (usec): min=862, max=36000, avg=14587.72, stdev=2223.80 > clat percentiles (usec): > | 1.00th=[11328], 5.00th=[12096], 10.00th=[12480], 20.00th=[12992], > | 30.00th=[13376], 40.00th=[13760], 50.00th=[14144], 60.00th=[14400], > | 70.00th=[14784], 80.00th=[15168], 90.00th=[15936], 95.00th=[16768], > | 99.00th=[24448], 99.50th=[25216], 99.90th=[28544], 99.95th=[35072], > | 99.99th=[36096] > bw (KB /s): min=265984, max=302720, per=100.00%, avg=280549.84, stdev=10264.36 > lat (usec) : 250=0.01%, 1000=0.01% > lat (msec) : 2=0.02%, 4=0.02%, 10=0.05%, 20=96.57%, 50=3.34% > cpu : usr=7.56%, sys=55.57%, ctx=6174, majf=0, minf=523 > IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% > submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% > complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% > issued : total=r=700656/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 > latency : target=0, window=0, percentile=100.00%, depth=1024 > > Run status group 0 (all jobs): > READ: io=2736.1MB, aggrb=280262KB/s, minb=280262KB/s, maxb=280262KB/s, mint=10000msec, maxt=10000msec > > Disk stats (read/write): > vdd: ios=695490/0, merge=0/0, ticks=785741/0, in_queue=785442, util=90.69% > > > patched: > job1: (groupid=0, jobs=1): err= 0: pid=7743: Tue Apr 7 13:19:07 2015 > read : io=8126.6MB, bw=832158KB/s, iops=208039, runt= 10000msec > slat (usec): min=20, max=14351, avg=55.08, stdev=143.47 > clat (usec): min=283, max=20003, avg=4846.77, stdev=1355.35 > lat (usec): min=609, max=20074, avg=4901.95, stdev=1362.40 > clat percentiles (usec): > | 1.00th=[ 4016], 5.00th=[ 4048], 10.00th=[ 4080], 20.00th=[ 4128], > | 30.00th=[ 4192], 40.00th=[ 4192], 50.00th=[ 4256], 60.00th=[ 4512], > | 70.00th=[ 4896], 80.00th=[ 5664], 90.00th=[ 5920], 95.00th=[ 6752], > | 99.00th=[11968], 99.50th=[13632], 99.90th=[15552], 99.95th=[17024], > | 99.99th=[19840] > bw (KB /s): min=740992, max=896640, per=100.00%, avg=836978.95, stdev=51034.87 > lat (usec) : 500=0.01%, 750=0.01%, 1000=0.01% > lat (msec) : 4=0.50%, 10=97.79%, 20=1.70%, 50=0.01% > cpu : usr=20.28%, sys=69.11%, ctx=879, majf=0, minf=522 > IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% > submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% > complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% > issued : total=r=2080396/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 > latency : target=0, window=0, percentile=100.00%, depth=1024 > > Run status group 0 (all jobs): > READ: io=8126.6MB, aggrb=832158KB/s, minb=832158KB/s, maxb=832158KB/s, mint=10000msec, maxt=10000msec > > Disk stats (read/write): > vdd: ios=127877/0, merge=1918166/0, ticks=23118/0, in_queue=23047, util=94.08% > > micron p320h: > > unpatched: > > job1: (groupid=0, jobs=1): err= 0: pid=3244: Tue Apr 7 13:29:14 2015 > read : io=6728.9MB, bw=688968KB/s, iops=172241, runt= 10001msec > slat (usec): min=43, max=6273, avg=81.79, stdev=125.96 > clat (usec): min=78, max=12485, avg=5852.06, stdev=1154.76 > lat (usec): min=146, max=12572, avg=5933.92, stdev=1163.75 > clat percentiles (usec): > | 1.00th=[ 4192], 5.00th=[ 4384], 10.00th=[ 4576], 20.00th=[ 5600], > | 30.00th=[ 5664], 40.00th=[ 5728], 50.00th=[ 5792], 60.00th=[ 5856], > | 70.00th=[ 6112], 80.00th=[ 6176], 90.00th=[ 6240], 95.00th=[ 6368], > | 99.00th=[11840], 99.50th=[11968], 99.90th=[12096], 99.95th=[12096], > | 99.99th=[12224] > bw (KB /s): min=648328, max=859264, per=98.80%, avg=680711.16, stdev=62016.70 > lat (usec) : 100=0.01%, 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01% > lat (msec) : 2=0.01%, 4=0.04%, 10=97.07%, 20=2.87% > cpu : usr=10.28%, sys=73.61%, ctx=104436, majf=0, minf=6217 > IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% > submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% > complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% > issued : total=r=1722592/w=0/d=0, short=r=0/w=0/d=0 > latency : target=0, window=0, percentile=100.00%, depth=1024 > > Run status group 0 (all jobs): > READ: io=6728.9MB, aggrb=688967KB/s, minb=688967KB/s, maxb=688967KB/s, mint=10001msec, maxt=10001msec > > Disk stats (read/write): > rssda: ios=1688772/0, merge=0/0, ticks=188820/0, in_queue=188678, util=96.61% > > patched: > > job1: (groupid=0, jobs=1): err= 0: pid=9531: Tue Apr 7 13:22:28 2015 > read : io=11607MB, bw=1160.6MB/s, iops=297104, runt= 10001msec > slat (usec): min=21, max=6376, avg=43.05, stdev=81.82 > clat (usec): min=116, max=9844, avg=3393.90, stdev=752.57 > lat (usec): min=167, max=9889, avg=3437.01, stdev=757.02 > clat percentiles (usec): > | 1.00th=[ 2832], 5.00th=[ 2992], 10.00th=[ 3056], 20.00th=[ 3120], > | 30.00th=[ 3152], 40.00th=[ 3248], 50.00th=[ 3280], 60.00th=[ 3344], > | 70.00th=[ 3376], 80.00th=[ 3504], 90.00th=[ 3728], 95.00th=[ 3824], > | 99.00th=[ 9152], 99.50th=[ 9408], 99.90th=[ 9664], 99.95th=[ 9664], > | 99.99th=[ 9792] > bw (MB /s): min= 1139, max= 1183, per=100.00%, avg=1161.07, stdev=10.58 > lat (usec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01% > lat (msec) : 2=0.01%, 4=98.31%, 10=1.67% > cpu : usr=18.59%, sys=66.65%, ctx=55655, majf=0, minf=6218 > IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.1%, 32=0.1%, >=64=100.0% > submit : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.0% > complete : 0=0.0%, 4=0.0%, 8=0.0%, 16=100.0%, 32=0.0%, 64=0.0%, >=64=0.1% > issued : total=r=2971338/w=0/d=0, short=r=0/w=0/d=0 > latency : target=0, window=0, percentile=100.00%, depth=1024 > > Run status group 0 (all jobs): > READ: io=11607MB, aggrb=1160.6MB/s, minb=1160.6MB/s, maxb=1160.6MB/s, mint=10001msec, maxt=10001msec > > Disk stats (read/write): > rssda: ios=183005/0, merge=2745105/0, ticks=31972/0, in_queue=31948, util=97.63% > --- > block/blk-core.c | 29 ++++++++++++++++------------- > block/blk-lib.c | 2 +- > block/blk-throttle.c | 2 +- > drivers/block/xen-blkback/blkback.c | 2 +- > drivers/md/dm-bufio.c | 6 +++--- > drivers/md/dm-crypt.c | 2 +- > drivers/md/dm-kcopyd.c | 2 +- > drivers/md/dm-thin.c | 2 +- > drivers/md/md.c | 2 +- > drivers/md/raid1.c | 2 +- > drivers/md/raid10.c | 2 +- > drivers/md/raid5.c | 4 ++-- > drivers/target/target_core_iblock.c | 2 +- > fs/aio.c | 2 +- > fs/block_dev.c | 2 +- > fs/btrfs/scrub.c | 2 +- > fs/btrfs/transaction.c | 2 +- > fs/btrfs/tree-log.c | 12 ++++++------ > fs/btrfs/volumes.c | 6 +++--- > fs/buffer.c | 2 +- > fs/direct-io.c | 2 +- > fs/ext4/file.c | 2 +- > fs/ext4/inode.c | 4 ++-- > fs/f2fs/checkpoint.c | 2 +- > fs/f2fs/gc.c | 2 +- > fs/f2fs/node.c | 2 +- > fs/gfs2/log.c | 2 +- > fs/hpfs/buffer.c | 2 +- > fs/jbd/checkpoint.c | 2 +- > fs/jbd/commit.c | 4 ++-- > fs/jbd2/checkpoint.c | 2 +- > fs/jbd2/commit.c | 2 +- > fs/mpage.c | 2 +- > fs/nfs/blocklayout/blocklayout.c | 4 ++-- > fs/xfs/xfs_buf.c | 4 ++-- > fs/xfs/xfs_dir2_readdir.c | 2 +- > fs/xfs/xfs_itable.c | 2 +- > include/linux/blkdev.h | 5 +++-- > mm/madvise.c | 2 +- > mm/page-writeback.c | 2 +- > mm/readahead.c | 2 +- > mm/swap_state.c | 2 +- > mm/vmscan.c | 2 +- > 43 files changed, 74 insertions(+), 70 deletions(-) > > diff --git a/block/blk-core.c b/block/blk-core.c > index 794c3e7..fcd9c2f 100644 > --- a/block/blk-core.c > +++ b/block/blk-core.c > @@ -3018,21 +3018,21 @@ void blk_start_plug(struct blk_plug *plug) > { > struct task_struct *tsk = current; > > + if (tsk->plug) { > + tsk->plug->depth++; > + return; > + } > + > + plug->depth = 1; > INIT_LIST_HEAD(&plug->list); > INIT_LIST_HEAD(&plug->mq_list); > INIT_LIST_HEAD(&plug->cb_list); > > /* > - * If this is a nested plug, don't actually assign it. It will be > - * flushed on its own. > + * Store ordering should not be needed here, since a potential > + * preempt will imply a full memory barrier > */ > - if (!tsk->plug) { > - /* > - * Store ordering should not be needed here, since a potential > - * preempt will imply a full memory barrier > - */ > - tsk->plug = plug; > - } > + tsk->plug = plug; > } > EXPORT_SYMBOL(blk_start_plug); > > @@ -3177,12 +3177,15 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) > local_irq_restore(flags); > } > > -void blk_finish_plug(struct blk_plug *plug) > +void blk_finish_plug(void) > { > - blk_flush_plug_list(plug, false); > + struct blk_plug *plug = current->plug; > > - if (plug == current->plug) > - current->plug = NULL; > + if (--plug->depth > 0) > + return; > + > + blk_flush_plug_list(plug, false); > + current->plug = NULL; > } > EXPORT_SYMBOL(blk_finish_plug); > > diff --git a/block/blk-lib.c b/block/blk-lib.c > index 7688ee3..ac347d3 100644 > --- a/block/blk-lib.c > +++ b/block/blk-lib.c > @@ -128,7 +128,7 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, > */ > cond_resched(); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > > /* Wait for bios in-flight */ > if (!atomic_dec_and_test(&bb.done)) > diff --git a/block/blk-throttle.c b/block/blk-throttle.c > index 5b9c6d5..222a77a 100644 > --- a/block/blk-throttle.c > +++ b/block/blk-throttle.c > @@ -1281,7 +1281,7 @@ static void blk_throtl_dispatch_work_fn(struct work_struct *work) > blk_start_plug(&plug); > while((bio = bio_list_pop(&bio_list_on_stack))) > generic_make_request(bio); > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > } > > diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c > index 2a04d34..74bea21 100644 > --- a/drivers/block/xen-blkback/blkback.c > +++ b/drivers/block/xen-blkback/blkback.c > @@ -1374,7 +1374,7 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif, > submit_bio(operation, biolist[i]); > > /* Let the I/Os go.. */ > - blk_finish_plug(&plug); > + blk_finish_plug(); > > if (operation == READ) > blkif->st_rd_sect += preq.nr_sects; > diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c > index 86dbbc7..502c63b 100644 > --- a/drivers/md/dm-bufio.c > +++ b/drivers/md/dm-bufio.c > @@ -715,7 +715,7 @@ static void __flush_write_list(struct list_head *write_list) > submit_io(b, WRITE, b->block, write_endio); > dm_bufio_cond_resched(); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > /* > @@ -1126,7 +1126,7 @@ void dm_bufio_prefetch(struct dm_bufio_client *c, > &write_list); > if (unlikely(!list_empty(&write_list))) { > dm_bufio_unlock(c); > - blk_finish_plug(&plug); > + blk_finish_plug(); > __flush_write_list(&write_list); > blk_start_plug(&plug); > dm_bufio_lock(c); > @@ -1149,7 +1149,7 @@ void dm_bufio_prefetch(struct dm_bufio_client *c, > dm_bufio_unlock(c); > > flush_plug: > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > EXPORT_SYMBOL_GPL(dm_bufio_prefetch); > > diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c > index 713a962..65d7b72 100644 > --- a/drivers/md/dm-crypt.c > +++ b/drivers/md/dm-crypt.c > @@ -1224,7 +1224,7 @@ pop_from_list: > rb_erase(&io->rb_node, &write_tree); > kcryptd_io_write(io); > } while (!RB_EMPTY_ROOT(&write_tree)); > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > return 0; > } > diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c > index 3a7cade..4a76e42 100644 > --- a/drivers/md/dm-kcopyd.c > +++ b/drivers/md/dm-kcopyd.c > @@ -593,7 +593,7 @@ static void do_work(struct work_struct *work) > process_jobs(&kc->complete_jobs, kc, run_complete_job); > process_jobs(&kc->pages_jobs, kc, run_pages_job); > process_jobs(&kc->io_jobs, kc, run_io_job); > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > /* > diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c > index 921aafd..be42bf5 100644 > --- a/drivers/md/dm-thin.c > +++ b/drivers/md/dm-thin.c > @@ -1824,7 +1824,7 @@ static void process_thin_deferred_bios(struct thin_c *tc) > dm_pool_issue_prefetches(pool->pmd); > } > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > static int cmp_cells(const void *lhs, const void *rhs) > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 717daad..c4ec179 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -7686,7 +7686,7 @@ void md_do_sync(struct md_thread *thread) > /* > * this also signals 'finished resyncing' to md_stop > */ > - blk_finish_plug(&plug); > + blk_finish_plug(); > wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active)); > > /* tell personality that we are finished */ > diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c > index d34e238..4f8fad4 100644 > --- a/drivers/md/raid1.c > +++ b/drivers/md/raid1.c > @@ -2441,7 +2441,7 @@ static void raid1d(struct md_thread *thread) > if (mddev->flags & ~(1< md_check_recovery(mddev); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > static int init_resync(struct r1conf *conf) > diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c > index a7196c4..92bb5dd 100644 > --- a/drivers/md/raid10.c > +++ b/drivers/md/raid10.c > @@ -2835,7 +2835,7 @@ static void raid10d(struct md_thread *thread) > if (mddev->flags & ~(1< md_check_recovery(mddev); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > static int init_resync(struct r10conf *conf) > diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c > index cd2f96b..695bf0f 100644 > --- a/drivers/md/raid5.c > +++ b/drivers/md/raid5.c > @@ -5281,7 +5281,7 @@ static void raid5_do_work(struct work_struct *work) > pr_debug("%d stripes handled\n", handled); > > spin_unlock_irq(&conf->device_lock); > - blk_finish_plug(&plug); > + blk_finish_plug(); > > pr_debug("--- raid5worker inactive\n"); > } > @@ -5352,7 +5352,7 @@ static void raid5d(struct md_thread *thread) > spin_unlock_irq(&conf->device_lock); > > async_tx_issue_pending_all(); > - blk_finish_plug(&plug); > + blk_finish_plug(); > > pr_debug("--- raid5d inactive\n"); > } > diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c > index d4a4b0f..17d8730 100644 > --- a/drivers/target/target_core_iblock.c > +++ b/drivers/target/target_core_iblock.c > @@ -367,7 +367,7 @@ static void iblock_submit_bios(struct bio_list *list, int rw) > blk_start_plug(&plug); > while ((bio = bio_list_pop(list))) > submit_bio(rw, bio); > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > static void iblock_end_io_flush(struct bio *bio, int err) > diff --git a/fs/aio.c b/fs/aio.c > index f8e52a1..b873698 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -1616,7 +1616,7 @@ long do_io_submit(aio_context_t ctx_id, long nr, > if (ret) > break; > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > > percpu_ref_put(&ctx->users); > return i ? i : ret; > diff --git a/fs/block_dev.c b/fs/block_dev.c > index 975266b..f5848de 100644 > --- a/fs/block_dev.c > +++ b/fs/block_dev.c > @@ -1609,7 +1609,7 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) > if (err < 0) > ret = err; > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > return ret; > } > EXPORT_SYMBOL_GPL(blkdev_write_iter); > diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c > index ec57687..f314cfb8 100644 > --- a/fs/btrfs/scrub.c > +++ b/fs/btrfs/scrub.c > @@ -3316,7 +3316,7 @@ out: > scrub_wr_submit(sctx); > mutex_unlock(&sctx->wr_ctx.wr_lock); > > - blk_finish_plug(&plug); > + blk_finish_plug(); > btrfs_free_path(path); > btrfs_free_path(ppath); > return ret < 0 ? ret : 0; > diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c > index 8be4278..fee10af 100644 > --- a/fs/btrfs/transaction.c > +++ b/fs/btrfs/transaction.c > @@ -983,7 +983,7 @@ static int btrfs_write_and_wait_marked_extents(struct btrfs_root *root, > > blk_start_plug(&plug); > ret = btrfs_write_marked_extents(root, dirty_pages, mark); > - blk_finish_plug(&plug); > + blk_finish_plug(); > ret2 = btrfs_wait_marked_extents(root, dirty_pages, mark); > > if (ret) > diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c > index c5b8ba3..879c7fd 100644 > --- a/fs/btrfs/tree-log.c > +++ b/fs/btrfs/tree-log.c > @@ -2574,7 +2574,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, > blk_start_plug(&plug); > ret = btrfs_write_marked_extents(log, &log->dirty_log_pages, mark); > if (ret) { > - blk_finish_plug(&plug); > + blk_finish_plug(); > btrfs_abort_transaction(trans, root, ret); > btrfs_free_logged_extents(log, log_transid); > btrfs_set_log_full_commit(root->fs_info, trans); > @@ -2619,7 +2619,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, > if (!list_empty(&root_log_ctx.list)) > list_del_init(&root_log_ctx.list); > > - blk_finish_plug(&plug); > + blk_finish_plug(); > btrfs_set_log_full_commit(root->fs_info, trans); > > if (ret != -ENOSPC) { > @@ -2635,7 +2635,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, > } > > if (log_root_tree->log_transid_committed >= root_log_ctx.log_transid) { > - blk_finish_plug(&plug); > + blk_finish_plug(); > mutex_unlock(&log_root_tree->log_mutex); > ret = root_log_ctx.log_ret; > goto out; > @@ -2643,7 +2643,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, > > index2 = root_log_ctx.log_transid % 2; > if (atomic_read(&log_root_tree->log_commit[index2])) { > - blk_finish_plug(&plug); > + blk_finish_plug(); > ret = btrfs_wait_marked_extents(log, &log->dirty_log_pages, > mark); > btrfs_wait_logged_extents(trans, log, log_transid); > @@ -2669,7 +2669,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, > * check the full commit flag again > */ > if (btrfs_need_log_full_commit(root->fs_info, trans)) { > - blk_finish_plug(&plug); > + blk_finish_plug(); > btrfs_wait_marked_extents(log, &log->dirty_log_pages, mark); > btrfs_free_logged_extents(log, log_transid); > mutex_unlock(&log_root_tree->log_mutex); > @@ -2680,7 +2680,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, > ret = btrfs_write_marked_extents(log_root_tree, > &log_root_tree->dirty_log_pages, > EXTENT_DIRTY | EXTENT_NEW); > - blk_finish_plug(&plug); > + blk_finish_plug(); > if (ret) { > btrfs_set_log_full_commit(root->fs_info, trans); > btrfs_abort_transaction(trans, root, ret); > diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c > index 8222f6f..16db068 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -358,7 +358,7 @@ loop_lock: > if (pending_bios == &device->pending_sync_bios) { > sync_pending = 1; > } else if (sync_pending) { > - blk_finish_plug(&plug); > + blk_finish_plug(); > blk_start_plug(&plug); > sync_pending = 0; > } > @@ -415,7 +415,7 @@ loop_lock: > } > /* unplug every 64 requests just for good measure */ > if (batch_run % 64 == 0) { > - blk_finish_plug(&plug); > + blk_finish_plug(); > blk_start_plug(&plug); > sync_pending = 0; > } > @@ -431,7 +431,7 @@ loop_lock: > spin_unlock(&device->io_lock); > > done: > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > static void pending_bios_fn(struct btrfs_work *work) > diff --git a/fs/buffer.c b/fs/buffer.c > index 20805db..8181c44 100644 > --- a/fs/buffer.c > +++ b/fs/buffer.c > @@ -758,7 +758,7 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list) > } > > spin_unlock(lock); > - blk_finish_plug(&plug); > + blk_finish_plug(); > spin_lock(lock); > > while (!list_empty(&tmp)) { > diff --git a/fs/direct-io.c b/fs/direct-io.c > index e181b6b..16f16ed 100644 > --- a/fs/direct-io.c > +++ b/fs/direct-io.c > @@ -1262,7 +1262,7 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, > if (sdio.bio) > dio_bio_submit(dio, &sdio); > > - blk_finish_plug(&plug); > + blk_finish_plug(); > > /* > * It is possible that, we return short IO due to end of file. > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index 33a09da..3a293eb 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -183,7 +183,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) > ret = err; > } > if (o_direct) > - blk_finish_plug(&plug); > + blk_finish_plug(); > > errout: > if (aio_mutex) > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index 5cb9a21..90ce0cb 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -2302,7 +2302,7 @@ static int ext4_writepages(struct address_space *mapping, > > blk_start_plug(&plug); > ret = write_cache_pages(mapping, wbc, __writepage, mapping); > - blk_finish_plug(&plug); > + blk_finish_plug(); > goto out_writepages; > } > > @@ -2438,7 +2438,7 @@ retry: > if (ret) > break; > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > if (!ret && !cycled && wbc->nr_to_write > 0) { > cycled = 1; > mpd.last_page = writeback_index - 1; > diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c > index 7f794b7..86ba453 100644 > --- a/fs/f2fs/checkpoint.c > +++ b/fs/f2fs/checkpoint.c > @@ -846,7 +846,7 @@ retry_flush_nodes: > goto retry_flush_nodes; > } > out: > - blk_finish_plug(&plug); > + blk_finish_plug(); > return err; > } > > diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c > index 76adbc3..abeef77 100644 > --- a/fs/f2fs/gc.c > +++ b/fs/f2fs/gc.c > @@ -678,7 +678,7 @@ static void do_garbage_collect(struct f2fs_sb_info *sbi, unsigned int segno, > gc_data_segment(sbi, sum->entries, gc_list, segno, gc_type); > break; > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > > stat_inc_seg_count(sbi, GET_SUM_TYPE((&sum->footer))); > stat_inc_call_count(sbi->stat_info); > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c > index 97bd9d3..c4aa9e2 100644 > --- a/fs/f2fs/node.c > +++ b/fs/f2fs/node.c > @@ -1098,7 +1098,7 @@ repeat: > ra_node_page(sbi, nid); > } > > - blk_finish_plug(&plug); > + blk_finish_plug(); > > lock_page(page); > if (unlikely(page->mapping != NODE_MAPPING(sbi))) { > diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c > index 536e7a6..06f25d17 100644 > --- a/fs/gfs2/log.c > +++ b/fs/gfs2/log.c > @@ -159,7 +159,7 @@ restart: > goto restart; > } > spin_unlock(&sdp->sd_ail_lock); > - blk_finish_plug(&plug); > + blk_finish_plug(); > trace_gfs2_ail_flush(sdp, wbc, 0); > } > > diff --git a/fs/hpfs/buffer.c b/fs/hpfs/buffer.c > index 8057fe4..138462d 100644 > --- a/fs/hpfs/buffer.c > +++ b/fs/hpfs/buffer.c > @@ -35,7 +35,7 @@ void hpfs_prefetch_sectors(struct super_block *s, unsigned secno, int n) > secno++; > n--; > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > /* Map a sector into a buffer and return pointers to it and to the buffer. */ > diff --git a/fs/jbd/checkpoint.c b/fs/jbd/checkpoint.c > index 08c0304..cd6b09f 100644 > --- a/fs/jbd/checkpoint.c > +++ b/fs/jbd/checkpoint.c > @@ -263,7 +263,7 @@ __flush_batch(journal_t *journal, struct buffer_head **bhs, int *batch_count) > blk_start_plug(&plug); > for (i = 0; i < *batch_count; i++) > write_dirty_buffer(bhs[i], WRITE_SYNC); > - blk_finish_plug(&plug); > + blk_finish_plug(); > > for (i = 0; i < *batch_count; i++) { > struct buffer_head *bh = bhs[i]; > diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c > index bb217dc..e1046c3 100644 > --- a/fs/jbd/commit.c > +++ b/fs/jbd/commit.c > @@ -447,7 +447,7 @@ void journal_commit_transaction(journal_t *journal) > blk_start_plug(&plug); > err = journal_submit_data_buffers(journal, commit_transaction, > write_op); > - blk_finish_plug(&plug); > + blk_finish_plug(); > > /* > * Wait for all previously submitted IO to complete. > @@ -697,7 +697,7 @@ start_journal_io: > } > } > > - blk_finish_plug(&plug); > + blk_finish_plug(); > > /* Lo and behold: we have just managed to send a transaction to > the log. Before we can commit it, wait for the IO so far to > diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c > index 988b32e..6aa0039 100644 > --- a/fs/jbd2/checkpoint.c > +++ b/fs/jbd2/checkpoint.c > @@ -187,7 +187,7 @@ __flush_batch(journal_t *journal, int *batch_count) > blk_start_plug(&plug); > for (i = 0; i < *batch_count; i++) > write_dirty_buffer(journal->j_chkpt_bhs[i], WRITE_SYNC); > - blk_finish_plug(&plug); > + blk_finish_plug(); > > for (i = 0; i < *batch_count; i++) { > struct buffer_head *bh = journal->j_chkpt_bhs[i]; > diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c > index b73e021..8f532c8 100644 > --- a/fs/jbd2/commit.c > +++ b/fs/jbd2/commit.c > @@ -805,7 +805,7 @@ start_journal_io: > __jbd2_journal_abort_hard(journal); > } > > - blk_finish_plug(&plug); > + blk_finish_plug(); > > /* Lo and behold: we have just managed to send a transaction to > the log. Before we can commit it, wait for the IO so far to > diff --git a/fs/mpage.c b/fs/mpage.c > index 3e79220..bf7d6c3 100644 > --- a/fs/mpage.c > +++ b/fs/mpage.c > @@ -695,7 +695,7 @@ mpage_writepages(struct address_space *mapping, > if (mpd.bio) > mpage_bio_submit(WRITE, mpd.bio); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > return ret; > } > EXPORT_SYMBOL(mpage_writepages); > diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c > index 1cac3c1..e93b6a8 100644 > --- a/fs/nfs/blocklayout/blocklayout.c > +++ b/fs/nfs/blocklayout/blocklayout.c > @@ -311,7 +311,7 @@ bl_read_pagelist(struct nfs_pgio_header *header) > } > out: > bl_submit_bio(READ, bio); > - blk_finish_plug(&plug); > + blk_finish_plug(); > put_parallel(par); > return PNFS_ATTEMPTED; > } > @@ -433,7 +433,7 @@ bl_write_pagelist(struct nfs_pgio_header *header, int sync) > header->res.count = header->args.count; > out: > bl_submit_bio(WRITE, bio); > - blk_finish_plug(&plug); > + blk_finish_plug(); > put_parallel(par); > return PNFS_ATTEMPTED; > } > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c > index 1790b00..2f89ca2 100644 > --- a/fs/xfs/xfs_buf.c > +++ b/fs/xfs/xfs_buf.c > @@ -1289,7 +1289,7 @@ _xfs_buf_ioapply( > if (size <= 0) > break; /* all done */ > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > /* > @@ -1823,7 +1823,7 @@ __xfs_buf_delwri_submit( > > xfs_buf_submit(bp); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > > return pinned; > } > diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c > index 098cd78..7e8fa3f 100644 > --- a/fs/xfs/xfs_dir2_readdir.c > +++ b/fs/xfs/xfs_dir2_readdir.c > @@ -455,7 +455,7 @@ xfs_dir2_leaf_readbuf( > } > } > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > > out: > *bpp = bp; > diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c > index 82e3142..c3ac5ec 100644 > --- a/fs/xfs/xfs_itable.c > +++ b/fs/xfs/xfs_itable.c > @@ -196,7 +196,7 @@ xfs_bulkstat_ichunk_ra( > &xfs_inode_buf_ops); > } > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > } > > /* > diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h > index 7f9a516..188133f 100644 > --- a/include/linux/blkdev.h > +++ b/include/linux/blkdev.h > @@ -1091,6 +1091,7 @@ static inline void blk_post_runtime_resume(struct request_queue *q, int err) {} > * schedule() where blk_schedule_flush_plug() is called. > */ > struct blk_plug { > + int depth; /* number of nested plugs */ > struct list_head list; /* requests */ > struct list_head mq_list; /* blk-mq requests */ > struct list_head cb_list; /* md requires an unplug callback */ > @@ -1107,7 +1108,7 @@ struct blk_plug_cb { > extern struct blk_plug_cb *blk_check_plugged(blk_plug_cb_fn unplug, > void *data, int size); > extern void blk_start_plug(struct blk_plug *); > -extern void blk_finish_plug(struct blk_plug *); > +extern void blk_finish_plug(void); > extern void blk_flush_plug_list(struct blk_plug *, bool); > > static inline void blk_flush_plug(struct task_struct *tsk) > @@ -1646,7 +1647,7 @@ static inline void blk_start_plug(struct blk_plug *plug) > { > } > > -static inline void blk_finish_plug(struct blk_plug *plug) > +static inline void blk_finish_plug(void) > { > } > > diff --git a/mm/madvise.c b/mm/madvise.c > index d551475..18a34ee 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -539,7 +539,7 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) > vma = find_vma(current->mm, start); > } > out: > - blk_finish_plug(&plug); > + blk_finish_plug(); > if (write) > up_write(¤t->mm->mmap_sem); > else > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > index 644bcb6..4570f6e 100644 > --- a/mm/page-writeback.c > +++ b/mm/page-writeback.c > @@ -2020,7 +2020,7 @@ int generic_writepages(struct address_space *mapping, > > blk_start_plug(&plug); > ret = write_cache_pages(mapping, wbc, __writepage, mapping); > - blk_finish_plug(&plug); > + blk_finish_plug(); > return ret; > } > > diff --git a/mm/readahead.c b/mm/readahead.c > index 9356758..64182a2 100644 > --- a/mm/readahead.c > +++ b/mm/readahead.c > @@ -136,7 +136,7 @@ static int read_pages(struct address_space *mapping, struct file *filp, > ret = 0; > > out: > - blk_finish_plug(&plug); > + blk_finish_plug(); > > return ret; > } > diff --git a/mm/swap_state.c b/mm/swap_state.c > index 405923f..5721f64 100644 > --- a/mm/swap_state.c > +++ b/mm/swap_state.c > @@ -478,7 +478,7 @@ struct page *swapin_readahead(swp_entry_t entry, gfp_t gfp_mask, > SetPageReadahead(page); > page_cache_release(page); > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > > lru_add_drain(); /* Push any new pages onto the LRU now */ > skip: > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 5e8eadd..56bb274 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -2222,7 +2222,7 @@ static void shrink_lruvec(struct lruvec *lruvec, int swappiness, > > scan_adjusted = true; > } > - blk_finish_plug(&plug); > + blk_finish_plug(); > sc->nr_reclaimed += nr_reclaimed; > > /* > -- > 1.8.3.1 > > -- Dave Chinner david@fromorbit.com From mailinglisten@posteo.de Wed Apr 8 19:53:01 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 850F67F76 for ; Wed, 8 Apr 2015 19:53:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 66A5E8F804B for ; Wed, 8 Apr 2015 17:53:01 -0700 (PDT) X-ASG-Debug-ID: 1428540775-04cbb056b1f7010001-NocioJ Received: from mx02.posteo.de (mx02.posteo.de [89.146.194.165]) by cuda.sgi.com with ESMTP id ErFGYcTCxFSA6ezq (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 17:52:56 -0700 (PDT) X-Barracuda-Envelope-From: mailinglisten@posteo.de X-Barracuda-Apparent-Source-IP: 89.146.194.165 Received: from dovecot03.posteo.de (unknown [185.67.36.28]) by mx02.posteo.de (Postfix) with ESMTPS id 8A68C25A3DEB for ; Thu, 9 Apr 2015 02:52:55 +0200 (CEST) Received: from mail.posteo.de (localhost [127.0.0.1]) by dovecot03.posteo.de (Postfix) with ESMTPSA id 3lMkTz1cGcz5vMs for ; Thu, 9 Apr 2015 02:52:55 +0200 (CEST) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Date: Thu, 09 Apr 2015 02:52:55 +0200 From: Malte Gell To: XFS Subject: hard reboot, no XFS messages Message-ID: <296cad845fb1a5c610adf6d9975d3a95@posteo.de> X-ASG-Orig-Subj: hard reboot, no XFS messages X-Sender: mailinglisten@posteo.de User-Agent: Posteo Webmail X-Barracuda-Connect: mx02.posteo.de[89.146.194.165] X-Barracuda-Start-Time: 1428540776 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi there, I=C2=B4m totally new to XFS. Recently my Linux box was stuck and I had to reboot it hard. After the reboot I was surprised, there were no error messages or=20 corrupt inodes. Usually on my ext4 root partition there are always some damaged inodes=20 that get deleted. But my /home XFS partition seemed to have suffered=20 zero effect from cold reboot. Is this normal for XFS that a cold reboot is handled that smooth? The XFS /home partition was created with Linux kernel 3.16.3. The only messages I saw in /var/log/messages was this: SGI XFS with ACLs, security attributes, realtime, large block/inode=20 numbers, no debug enabled XFS (dm-0): Mounting V4 Filesystem XFS (dm-0): Starting recovery (logdev: internal) XFS (dm-0): Ending recovery (logdev: internal) On the net some people say XFS was very robust, but I did not expect it=20 is that smooth after a cold reset... And other people said they were in=20 hell with XFS... Thanks From david@fromorbit.com Wed Apr 8 21:14:23 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EAB997F7C for ; Wed, 8 Apr 2015 21:14:23 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id CCEC88F8039 for ; Wed, 8 Apr 2015 19:14:23 -0700 (PDT) X-ASG-Debug-ID: 1428545657-04bdf06321129090001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id Ax91bZPzwahguLEY for ; Wed, 08 Apr 2015 19:14:18 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AKCACI3yVV/8+HLHlcgwiBLoJHr2EBAQEBAQEGmRwEBAICgTBNAQEBAQEBfoQgAQEEMgEjIxAIAw4KCSUPBSUDIROIKcx/AQEBBwIBHxiFeIUbhHwHgxeBFgWOY4wXlFwihAEsMYJDAQEB Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail07.adl2.internode.on.net with ESMTP; 09 Apr 2015 11:44:16 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1Yg1yl-0005uB-J2; Thu, 09 Apr 2015 12:14:03 +1000 Date: Thu, 9 Apr 2015 12:14:03 +1000 From: Dave Chinner To: Malte Gell Cc: XFS Subject: Re: hard reboot, no XFS messages Message-ID: <20150409021403.GE13731@dastard> X-ASG-Orig-Subj: Re: hard reboot, no XFS messages References: <296cad845fb1a5c610adf6d9975d3a95@posteo.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <296cad845fb1a5c610adf6d9975d3a95@posteo.de> 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: 1428545657 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17694 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Apr 09, 2015 at 02:52:55AM +0200, Malte Gell wrote: > Hi there, > Im totally new to XFS. > > Recently my Linux box was stuck and I had to reboot it hard. > After the reboot I was surprised, there were no error messages or > corrupt inodes. > > Usually on my ext4 root partition there are always some damaged > inodes that get deleted. But my /home XFS partition seemed to have > suffered zero effect from cold reboot. > > Is this normal for XFS that a cold reboot is handled that smooth? Normal. Cheers, Dave. -- Dave Chinner david@fromorbit.com From eyniy@qq.com Wed Apr 8 21:37:59 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 63CEF7F7C for ; Wed, 8 Apr 2015 21:37:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C8CC9AC002 for ; Wed, 8 Apr 2015 19:37:55 -0700 (PDT) X-ASG-Debug-ID: 1428547072-04cbb056b2130330001-NocioJ Received: from smtpbg299.qq.com (smtpbg299.qq.com [184.105.67.99]) by cuda.sgi.com with ESMTP id XmwDQfGPH0xT8VQ3 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 19:37:53 -0700 (PDT) X-Barracuda-Envelope-From: eyniy@qq.com X-Barracuda-Apparent-Source-IP: 184.105.67.99 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201307; t=1428547070; bh=71gPXH92O2J/GOPbz9DY1lIA077td6mzi1wFkT7aUKg=; h=X-QQ-FEAT:X-QQ-SSF:X-HAS-ATTACH:X-QQ-BUSINESS-ORIGIN: X-Originating-IP:In-Reply-To:References:X-QQ-STYLE:X-QQ-mid:From:To:Cc:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Date: X-Priority:Message-ID:X-QQ-MIME:X-Mailer:X-QQ-Mailer: X-QQ-ReplyHash:X-QQ-SENDSIZE:X-QQ-FName:X-QQ-LocalIP; b=jNThG2OV1dHHPYVyBscdNabNrKNc2RZqdVuYCDBfgSnw7Gq6za3JWnEEDXWSnhnBR 2phpEdVXTJ3Adug1IK2WJU7qms9UBc8GyM8Z3YPNhgo6h58KXDyvD/AWBazvtmRb++ cc/DJTvT1n+KIeARiOUlUrVOU9qRsPmfUhfbDbss= X-QQ-FEAT: j5Y3lWpKjFZVg+sl+YMKWW7ETpUz+1Qw19idnhrITW3YHDT5odcdKU1R+9Vr9 kB2CqJveLZxtAZac7bF9NrLsdXbJL7hUEfxKAhtXDMtef2MKy+t3jt1D66NAj/qcJP7fxAo E6I2fi8ALkSCgzFDBidFz34BVwslldtYhjKZB8D8f3WpVR/sKsLEL9BnnYdOKjo4uHI0guA wfTZDIPf+kduQo5cQzyYTX+K/81CAGDuPqM0xxAuB2g== X-QQ-SSF: 000000000000005000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 59.37.0.213 In-Reply-To: <20150408211436.GF15810@dastard> References: <20150408044955.GE15810@dastard> <20150408211436.GF15810@dastard> X-QQ-STYLE: X-QQ-mid: webmail661t1428547065t4691196 From: "=?utf-8?B?WWVZaW4=?=" To: "=?utf-8?B?RGF2ZSBDaGlubmVy?=" Cc: "=?utf-8?B?eGZz?=" Subject: =?utf-8?B?5Zue5aSN77yaICDlm57lpI3vvJogWEZTIGRpcmVj?= =?utf-8?B?dCBJTyBwcm9ibGVt?= Mime-Version: 1.0 X-ASG-Orig-Subj: =?utf-8?B?5Zue5aSN77yaICDlm57lpI3vvJogWEZTIGRpcmVj?= =?utf-8?B?dCBJTyBwcm9ibGVt?= Content-Type: multipart/alternative; boundary="----=_NextPart_5525E5F9_0974FBA8_25D21C4E" Content-Transfer-Encoding: 8Bit Date: Thu, 9 Apr 2015 10:37:45 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 1294308785 X-QQ-SENDSIZE: 520 X-QQ-FName: CC7A919A7E7542568DEFB241A0F979ED X-QQ-LocalIP: 112.95.241.173 X-Barracuda-Connect: smtpbg299.qq.com[184.105.67.99] X-Barracuda-Start-Time: 1428547072 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.06 X-Barracuda-Spam-Status: No, SCORE=1.06 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_MV0113c, DKIM_SIGNED, DKIM_VERIFIED, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17694 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily This is a multi-part message in MIME format. ------=_NextPart_5525E5F9_0974FBA8_25D21C4E Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSB0cmFjZWQgTXlTUUw6DQoNCg0KW3BpZCAxMzQ3OF0gb3BlbigiLi90ZXN0L2JpZ190Yi5p YmQiLCBPX1JET05MWSkgPSAzNw0KW3BpZCAxMzQ3OF0gcHJlYWQoMzcsICJXXDM0NlwyMDNA XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXHZcMzdjXDIyNVwyNjNcMFwxMFwwXDBc MFwwXDBcMCIuLi4sIDE2Mzg0LCAwKSA9IDE2Mzg0DQpbcGlkIDEzNDc4XSBjbG9zZSgzNykg ICAgICAgICAgICAgICAgICAgPSAwDQpbcGlkIDEzNDc4XSBvcGVuKCIuL3Rlc3QvYmlnX3Ri LmliZCIsIE9fUkRXUikgPSAzNw0KW3BpZCAxMzQ3OF0gZmNudGwoMzcsIEZfU0VURkwsIE9f UkRPTkxZfE9fRElSRUNUKSA9IDANCltwaWQgMTM0NzhdIGZjbnRsKDM3LCBGX1NFVExLLCB7 dHlwZT1GX1dSTENLLCB3aGVuY2U9U0VFS19TRVQsIHN0YXJ0PTAsIGxlbj0wfSkgPSAwDQpb cGlkIDEzNDc4XSBwcmVhZCgzNywgIlwzNTBcMzAxXDI3MFwyNzFcMFwwXDBcM1wzNzdcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXHZcMzdjXDIyNVwyNjNFXDI3N1wwXDBc MFwwXDBcMCIuLi4sIDE2Mzg0LCA0OTE1MikgPSAxNjM4NA0KW3BpZCAxMzQ3OF0gcHJlYWQo MzcsICJlXDI1MXxtXDBcMFwwXDFcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzMVwyNDVc MjQzXDBcNVwwXDBcMFwwXDBcMCIuLi4sIDE2Mzg0LCAxNjM4NCkgPSAxNjM4NOKAjQ0KDQoN Cg0KQXMgd2UgY2FuIHNlZSwgTXlTUUwgd2lsbCBvcGVuIGRhdGEgZmlsZSB0d2ljZSB3aGVu IG9wZW4gdGFibGUuIEFuZCB0aGUgZmlyc3Qgb3BlbiBmaWxlIHdpdGhvdXQgT19ESVJFQ1Qg ZmxhZyB3aWxsIGdlbmVyYXRlIHBhZ2UgY2FjaGUuIEkgdHJhY2VkIGtlcm5lbDoNCg0KDQpU cmFjaW5nICJzeXNfcHJlYWQ2NCIuLi4gQ3RybC1DIHRvIGVuZC4NCiAgMykgICAgICAgICAg ICAgICB8ICBzeXNfcHJlYWQ2NCgpIHsNCiAgMykgICAwLjM2MiB1cyAgICB8ICAgIGZnZXRf bGlnaHQoKTsNCiAgMykgICAgICAgICAgICAgICB8ICAgIHZmc19yZWFkKCkgew0KICAzKSAg ICAgICAgICAgICAgIHwgICAgICByd192ZXJpZnlfYXJlYSgpIHsNCiAgMykgICAgICAgICAg ICAgICB8ICAgICAgICBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24oKSB7DQogIDMpICAgMC4y NTEgdXMgICAgfCAgICAgICAgICBjYXBfZmlsZV9wZXJtaXNzaW9uKCk7DQogIDMpICAgMC44 MTcgdXMgICAgfCAgICAgICAgfQ0KICAzKSAgIDEuMzc3IHVzICAgIHwgICAgICB9DQogIDMp ICAgICAgICAgICAgICAgfCAgICAgIGRvX3N5bmNfcmVhZCgpIHsNCiAgMykgICAgICAgICAg ICAgICB8ICAgICAgICB4ZnNfZmlsZV9haW9fcmVhZCgpIHsNCiAgMykgICAwLjI1OSB1cyAg ICB8ICAgICAgICAgIGdlbmVyaWNfc2VnbWVudF9jaGVja3MoKTsNCiAgMykgICAgICAgICAg ICAgICB8ICAgICAgICAgIHhmc19yd19pbG9jaygpIHsNCiAgMykgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgeGZzX2lsb2NrKCkgew0KICAzKSAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgIGRvd25fcmVhZCgpIHsNCiAgMykgICAwLjIzMyB1cyAgICB8ICAgICAgICAgICAg ICAgIF9jb25kX3Jlc2NoZWQoKTsNCiAgMykgICAwLjcxMyB1cyAgICB8ICAgICAgICAgICAg ICB9DQogIDMpICAgMS40MzMgdXMgICAgfCAgICAgICAgICAgIH0NCiAgMykgICAyLjA5NyB1 cyAgICB8ICAgICAgICAgIH0NCiAgMykgICAgICAgICAgICAgICB8ICAgICAgICAgIGdlbmVy aWNfZmlsZV9haW9fcmVhZCgpIHsNCiAgMykgICAwLjIyOSB1cyAgICB8ICAgICAgICAgICAg Z2VuZXJpY19zZWdtZW50X2NoZWNrcygpOw0KICAzKSAgIDAuMjI3IHVzICAgIHwgICAgICAg ICAgICBfY29uZF9yZXNjaGVkKCk7DQogIDMpICAgMC4yNjEgdXMgICAgfCAgICAgICAgICAg IGZpbmRfZ2V0X3BhZ2UoKTsNCiAgMykgICAgICAgICAgICAgICB8ICAgICAgICAgICAgcGFn ZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHsNCiAgMykgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICBvbmRlbWFuZF9yZWFkYWhlYWQoKSB7DQoNCuKAjS4uLg0KDQoNCkkgcnVuIE15 U1FMIDUuNS4yNCBvbiBDZW50T1M2LjUsIHdpdGgga2VybmVsIDIuNi4zMi00MzEuDQpMYXRl ciBJIHdpbGwgdXNlIHRoZSBuZXdlciBrZXJuZWwgdG8gdGVzdCBpdC7igI0NCg0KDQpUaGFu a3MsDQpZZQ0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLSDljp/lp4vpgq7ku7YgLS0tLS0tLS0t LS0tLS0tLS0tDQrlj5Hku7bkuro6ICJEYXZlIENoaW5uZXIiOzxkYXZpZEBmcm9tb3JiaXQu Y29tPjsNCuWPkemAgeaXtumXtDogMjAxNeW5tDTmnIg55pelKOaYn+acn+Wbmykg5YeM5pmo NToxNA0K5pS25Lu25Lq6OiAiWWVZaW4iPGV5bml5QHFxLmNvbT47IA0K5oqE6YCBOiAieGZz Ijx4ZnNAb3NzLnNnaS5jb20+OyANCuS4u+mimDogUmU6ICDlm57lpI3vvJogWEZTIGRpcmVj dCBJTyBwcm9ibGVtDQoNCg0KDQpPbiBXZWQsIEFwciAwOCwgMjAxNSBhdCAwMzowNTo1N1BN ICswODAwLCBZZVlpbiB3cm90ZToNCj4gRGF2ZSwNCj4gVGhhbmsgeW91IGZvciB5b3VyIGV4 cGxhbmF0aW9uLiBJIGdvdCB0aGUgcmVhc29uLCBhbmQgSSB3cml0ZSBzb21lIGNvZGUgdG8g IHNpbXVsYXRlIHRoZSBNeVNRTC5JdCB3aWxsIHJlcHJvZHVjZSB0aGUgcHJvZ3Jlc3M64oCN DQo+IA0KPiANCj4gb3BlbiBmaWxlIHdpdGhvdXQgZGlyZWN0IGZsYWcNCj4gcmVhZCBmaWxl ICAgLy9jYXVzZSBrZXJuZWwgcmVhZGFoZWFkIDQgcGFnZXMsIGFuZCBpbm9kZS0+aV9tYXBw aW5nLT5ucnBhZ2VzID4gMA0KPiBjbG9zZSBmaWxlDQo+IA0KPiANCj4gb3BlbiBmaWxlIHdp dGggZGlyZWN0IGZsYWcNCj4gbHNlZWsgNCo0MDk2IC8vIHNraXAgNCByZWFkYWhlYWQgcGFn ZXMNCj4gcmVhZCAgZmlsZSAvL2NhdXNlIHhmc19mbHVzaGludmFsX3BhZ2VzIHRvIGRvIG5v dGhpbmcNCj4gLi4uDQo+IA0KDQpZZXMsIHlvdSBjYW4gY2F1c2UgaXQgdGhhdCB3YXksIGJ1 dCBhbnkgYXBwbGljYXRpb24gbWl4aW5nIGJ1ZmZlcmVkDQpJTyBhbmQgZGlyZWN0IElPIGxp a2UgdGhhdCBpcyBicm9rZW4uICBJJ2xsIHBvaW50IHlvdSBhdCB0aGUgb3BlbigyKQ0KbWFu IHBhZ2UsIGluIHRoZSBzZWN0aW9uIGFib3V0IE9fRElSRUNUOg0KDQoJIkFwcGxpY2F0aW9u cyBzaG91bGQgYXZvaWQgbWl4aW5nIE9fRElSRUNUIGFuZCBub3JtYWwgSS9PIHRvDQoJdGhl IHNhbWUgZmlsZSwgYW5kIGVzcGVjaWFsbHkgdG8gb3ZlcmxhcHBpbmcgYnl0ZSByZWdpb25z IGluDQoJdGhlICBzYW1lIGZpbGUuICAgRXZlbiAgd2hlbiAgdGhlIGZpbGVzeXN0ZW0gY29y cmVjdGx5DQoJaGFuZGxlcyB0aGUgY29oZXJlbmN5IGlzc3VlcyBpbiB0aGlzIHNpdHVhdGlv biwgb3ZlcmFsbCBJL08NCgl0aHJvdWdocHV0IGlzIGxpa2VseSB0byBiZSBzbG93ZXIgdGhh biB1c2luZyBlaXRoZXIgbW9kZQ0KCWFsb25lLiAgTGlrZXdpc2UsIGFwcGxpY2F0aW9ucyBz aG91bGQgYXZvaWQgbWl4aW5nIG1tYXAoMikNCglvZiBmaWxlcyB3aXRoIGRpcmVjdCBJL08g dG8gdGhlIHNhbWUgZmlsZXMuIg0KDQpJT1dzLCB5b3VyIHRlc3QgcHJvZ3JhbSBpcyBiZWhh dmluZyBhcyBkb2N1bWVudGVkIGZvciBhIHByb2dyYW0NCnRoYXQgbWl4ZXMgYnVmZmVyZWQg YW5kIGRpcmVjdCBJTy4uLi4NCg0KQUZBSUssIE15U1FMIGRvZXMgbm90IGRvICBtaXhlZCBi dWZmZXIvZGlyZWN0IElPIGxpa2UgdGhpcyBhbmQgc28NCnRoaXMgaXMgZXh0cmVtZWx5IHVu bGlrZWx5IHRvIGJlIHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0uICBJIG5lZWQNCnRvIHVu ZGVyc3RhbmQgaG93IE15U1FMIGlzIGdlbmVyYXRpbmcgY2FjaGVkIHBhZ2VzIG9uIGl0J3Mg ZGF0YWJhc2UNCmZpbGVzIHdoZW4gaXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNpbmcgZGlyZWN0 IElPLCBhbmQgdGhlIHJlcHJvZHVjZXINCnByb2dyYW0gbmVlZHMgdG8gZG8gd2hhdCBNeVNR TCBkb2VzIHRvIGdlbmVyYXRlIGNhY2hlZCBwYWdlcy4NCg0KQ2FuIHlvdSBwbGVhc2UgZmlu ZCB0aGUgbG9jYXRpb24gb2YgdGhlIGNhY2hlZCBwYWdlcyAoYXMgSQ0Kc3VnZ2dlc3RlZCB2 aWEgdHJhY2luZyBpbiBteSBsYXN0IGVtYWlsKSBpbiB0aGUgTXlTUUwgZmlsZXMgdGhhdCBh cmUNCmNhdXNpbmcgdGhlIHByb2JsZW0/DQoNCj4gSSdkIGxpa2UgdG8gYXNrIFhGUyBob3cg dG8gcmVzb3ZsZSB0aGlzIHByb2JsZW0/DQoNCkFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdG8g bWl4IGJ1ZmZlcmVkIGFuZCBkaXJlY3QgSU8gY2FuIGludmFsaWRhdGUNCnRoZSBjYWNoZWQg cGFnZXMgYnkgdXNpbmcgUE9TSVhfRkFEVl9ET05UTkVFRCBiZWZvcmUgZG9pbmcgZGlyZWN0 DQpJTy4NCg0KRldJVywgWW91IG11c3QgYmUgbG9va2luZyBhdCBxdWl0ZSBvbGQga2VybmVs IGNvZGUgaWYNCnhmc19mbHVzaGludmFsX3BhZ2VzKCkgZXhpc3RzIGluIHlvdXIga2VybmVs LiBEb2VzIE15U1FMIG9uIGENCmN1cnJlbnQgdXBzdHJlYW0ga2VybmVsIGhhdmUgdGhlIHNh bWUgcHJvYmxlbT8NCg0KQ2hlZXJzLA0KDQpEYXZlLg0KLS0gDQpEYXZlIENoaW5uZXINCmRh dmlkQGZyb21vcmJpdC5jb20= ------=_NextPart_5525E5F9_0974FBA8_25D21C4E Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGRpdj5JIHRyYWNlZCBNeVNRTDo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PjxkaXY+W3Bp ZCAxMzQ3OF0gb3BlbigiLi90ZXN0L2JpZ190Yi5pYmQiLCBPX1JET05MWSkgPSAzNzwvZGl2 PjxkaXY+W3BpZCAxMzQ3OF0gcHJlYWQoMzcsICJXXDM0NlwyMDNAXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXHZcMzdjXDIyNVwyNjNcMFwxMFwwXDBcMFwwXDBcMCIuLi4sIDE2 Mzg0LCAwKSA9IDE2Mzg0PC9kaXY+PGRpdj5bcGlkIDEzNDc4XSBjbG9zZSgzNykgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgPSAwPC9kaXY+PGRpdj5bcGlkIDEzNDc4XSBvcGVuKCIuL3Rlc3QvYmlnX3RiLmliZCIs IE9fUkRXUikgPSAzNzwvZGl2PjxkaXY+W3BpZCAxMzQ3OF0gZmNudGwoMzcsIEZfU0VURkws IE9fUkRPTkxZfE9fRElSRUNUKSA9IDA8L2Rpdj48ZGl2PltwaWQgMTM0NzhdIGZjbnRsKDM3 LCBGX1NFVExLLCB7dHlwZT1GX1dSTENLLCB3aGVuY2U9U0VFS19TRVQsIHN0YXJ0PTAsIGxl bj0wfSkgPSAwPC9kaXY+PGRpdj5bcGlkIDEzNDc4XSBwcmVhZCgzNywgIlwzNTBcMzAxXDI3 MFwyNzFcMFwwXDBcM1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXHZc MzdjXDIyNVwyNjNFXDI3N1wwXDBcMFwwXDBcMCIuLi4sIDE2Mzg0LCA0OTE1MikgPSAxNjM4 NDwvZGl2PjxkaXY+W3BpZCAxMzQ3OF0gcHJlYWQoMzcsICJlXDI1MXxtXDBcMFwwXDFcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzMVwyNDVcMjQzXDBcNVwwXDBcMFwwXDBcMCIuLi4s IDE2Mzg0LCAxNjM4NCkgPSAxNjM4NDxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0 XzAiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4OyI+4oCNPC9zcGFu PjwvZGl2PjwvZGl2PjxkaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BcyB3ZSBjYW4gc2VlLCBN eVNRTCB3aWxsIG9wZW4gZGF0YSBmaWxlIHR3aWNlIHdoZW4gb3BlbiB0YWJsZS4gQW5kIHRo ZSBmaXJzdCBvcGVuIGZpbGUgd2l0aG91dCBPX0RJUkVDVCBmbGFnIHdpbGwgZ2VuZXJhdGUg cGFnZSBjYWNoZS4gSSB0cmFjZWQga2VybmVsOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+ PGRpdj5UcmFjaW5nICJzeXNfcHJlYWQ2NCIuLi4gQ3RybC1DIHRvIGVuZC48L2Rpdj48ZGl2 PiZuYnNwOyAzKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgfCAmbmJzcDtzeXNfcHJlYWQ2NCgpIHs8L2Rpdj48ZGl2PiZuYnNwOyAzKSAmbmJz cDsgMC4zNjIgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwO2ZnZXRfbGlnaHQoKTs8 L2Rpdj48ZGl2PiZuYnNwOyAzKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgfCAmbmJzcDsgJm5ic3A7dmZzX3JlYWQoKSB7PC9kaXY+PGRpdj4m bmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDtyd192ZXJpZnlfYXJlYSgpIHs8L2Rpdj48ZGl2 PiZuYnNwOyAzKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtzZWN1cml0eV9maWxlX3Blcm1p c3Npb24oKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDAuMjUxIHVzICZuYnNwOyAm bmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtjYXBfZmlsZV9wZXJt aXNzaW9uKCk7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDAuODE3IHVzICZuYnNwOyAm bmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO308L2Rpdj48ZGl2PiZuYnNwOyAz KSAmbmJzcDsgMS4zNzcgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwOyAmbmJzcDt9 PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDtkb19zeW5jX3JlYWQoKSB7 PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7eGZzX2ZpbGVf YWlvX3JlYWQoKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDAuMjU5IHVzICZuYnNw OyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtnZW5lcmljX3Nl Z21lbnRfY2hlY2tzKCk7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwO3hmc19yd19pbG9jaygpIHs8L2Rpdj48ZGl2PiZuYnNwOyAzKSAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfCAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3hmc19pbG9jaygpIHs8L2Rpdj48 ZGl2PiZuYnNwOyAzKSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgfCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDtkb3duX3JlYWQoKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDAuMjMzIHVz ICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDtfY29uZF9yZXNjaGVkKCk7PC9kaXY+PGRpdj4mbmJzcDsgMykg Jm5ic3A7IDAuNzEzIHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO308L2Rpdj48ZGl2PiZuYnNwOyAzKSAmbmJzcDsg MS40MzMgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDt9PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDIuMDk3IHVzICZuYnNw OyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt9PC9kaXY+PGRp dj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2dlbmVyaWNfZmls ZV9haW9fcmVhZCgpIHs8L2Rpdj48ZGl2PiZuYnNwOyAzKSAmbmJzcDsgMC4yMjkgdXMgJm5i c3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtn ZW5lcmljX3NlZ21lbnRfY2hlY2tzKCk7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDAu MjI3IHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7X2NvbmRfcmVzY2hlZCgpOzwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAw LjI2MSB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO2ZpbmRfZ2V0X3BhZ2UoKTs8L2Rpdj48ZGl2PiZuYnNwOyAzKSAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfCAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3BhZ2VfY2FjaGVfc3luY19yZWFkYWhl YWQoKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7b25kZW1hbmRfcmVhZGFoZWFkKCkgezwvZGl2PjwvZGl2Pjxk aXY+PHNwYW4gaWQ9Il9lZGl0b3JfYm9va21hcmtfc3RhcnRfMSIgc3R5bGU9ImRpc3BsYXk6 IG5vbmU7IGxpbmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+Li4uPC9kaXY+PGRpdj48YnI+ PC9kaXY+PGRpdj5JIHJ1biBNeVNRTCA1LjUuMjQgb24gQ2VudE9TNi41LCB3aXRoIGtlcm5l bCAyLjYuMzItNDMxLjwvZGl2PjxkaXY+TGF0ZXIgSSB3aWxsIHVzZSB0aGUgbmV3ZXIga2Vy bmVsIHRvIHRlc3QgaXQuPHNwYW4gaWQ9Il9lZGl0b3JfYm9va21hcmtfc3RhcnRfMiIgc3R5 bGU9ImRpc3BsYXk6IG5vbmU7IGxpbmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj5UaGFua3MsPC9kaXY+PGRpdj5ZZTwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTJweDtmb250LWZhbWlseTogQXJpYWwg TmFycm93O3BhZGRpbmc6MnB4IDAgMnB4IDA7Ij4tLS0tLS0tLS0tLS0tLS0tLS0mbmJzcDvl jp/lp4vpgq7ku7YmbmJzcDstLS0tLS0tLS0tLS0tLS0tLS08L2Rpdj48ZGl2IHN0eWxlPSJm b250LXNpemU6IDEycHg7YmFja2dyb3VuZDojZWZlZmVmO3BhZGRpbmc6OHB4OyI+PGRpdj48 Yj7lj5Hku7bkuro6PC9iPiZuYnNwOyJEYXZlIENoaW5uZXIiOyZsdDtkYXZpZEBmcm9tb3Ji aXQuY29tJmd0Ozs8L2Rpdj48ZGl2PjxiPuWPkemAgeaXtumXtDo8L2I+Jm5ic3A7MjAxNeW5 tDTmnIg55pelKOaYn+acn+Wbmykg5YeM5pmoNToxNDwvZGl2PjxkaXY+PGI+5pS25Lu25Lq6 OjwvYj4mbmJzcDsiWWVZaW4iJmx0O2V5bml5QHFxLmNvbSZndDs7IDx3YnI+PC9kaXY+PGRp dj48Yj7mioTpgIE6PC9iPiZuYnNwOyJ4ZnMiJmx0O3hmc0Bvc3Muc2dpLmNvbSZndDs7IDx3 YnI+PC9kaXY+PGRpdj48Yj7kuLvpopg6PC9iPiZuYnNwO1JlOiAg5Zue5aSN77yaIFhGUyBk aXJlY3QgSU8gcHJvYmxlbTwvZGl2PjwvZGl2PjxkaXY+PGJyPjwvZGl2Pk9uIFdlZCwgQXBy IDA4LCAyMDE1IGF0IDAzOjA1OjU3UE0gKzA4MDAsIFllWWluIHdyb3RlOjxicj4mZ3Q7IERh dmUsPGJyPiZndDsgVGhhbmsgeW91IGZvciB5b3VyIGV4cGxhbmF0aW9uLiBJIGdvdCB0aGUg cmVhc29uLCBhbmQgSSB3cml0ZSBzb21lIGNvZGUgdG8mbmJzcDsgc2ltdWxhdGUgdGhlIE15 U1FMLkl0IHdpbGwgcmVwcm9kdWNlIHRoZSBwcm9ncmVzczrigI08YnI+Jmd0OyA8YnI+Jmd0 OyA8YnI+Jmd0OyBvcGVuIGZpbGUgd2l0aG91dCBkaXJlY3QgZmxhZzxicj4mZ3Q7IHJlYWQg ZmlsZSZuYnNwOyZuYnNwOyAvL2NhdXNlIGtlcm5lbCByZWFkYWhlYWQgNCBwYWdlcywgYW5k IGlub2RlLSZndDtpX21hcHBpbmctJmd0O25ycGFnZXMgJmd0OyAwPGJyPiZndDsgY2xvc2Ug ZmlsZTxicj4mZ3Q7IDxicj4mZ3Q7IDxicj4mZ3Q7IG9wZW4gZmlsZSB3aXRoIGRpcmVjdCBm bGFnPGJyPiZndDsgbHNlZWsgNCo0MDk2IC8vIHNraXAgNCByZWFkYWhlYWQgcGFnZXM8YnI+ Jmd0OyByZWFkJm5ic3A7IGZpbGUgLy9jYXVzZSB4ZnNfZmx1c2hpbnZhbF9wYWdlcyB0byBk byBub3RoaW5nPGJyPiZndDsgLi4uPGJyPiZndDsgPGJyPjxicj5ZZXMsIHlvdSBjYW4gY2F1 c2UgaXQgdGhhdCB3YXksIGJ1dCBhbnkgYXBwbGljYXRpb24gbWl4aW5nIGJ1ZmZlcmVkPGJy PklPIGFuZCBkaXJlY3QgSU8gbGlrZSB0aGF0IGlzIGJyb2tlbi4mbmJzcDsgSSdsbCBwb2lu dCB5b3UgYXQgdGhlIG9wZW4oMik8YnI+bWFuIHBhZ2UsIGluIHRoZSBzZWN0aW9uIGFib3V0 IE9fRElSRUNUOjxicj48YnI+CSJBcHBsaWNhdGlvbnMgc2hvdWxkIGF2b2lkIG1peGluZyBP X0RJUkVDVCBhbmQgbm9ybWFsIEkvTyB0bzxicj4JdGhlIHNhbWUgZmlsZSwgYW5kIGVzcGVj aWFsbHkgdG8gb3ZlcmxhcHBpbmcgYnl0ZSByZWdpb25zIGluPGJyPgl0aGUmbmJzcDsgc2Ft ZSBmaWxlLiZuYnNwOyZuYnNwOyBFdmVuJm5ic3A7IHdoZW4mbmJzcDsgdGhlIGZpbGVzeXN0 ZW0gY29ycmVjdGx5PGJyPgloYW5kbGVzIHRoZSBjb2hlcmVuY3kgaXNzdWVzIGluIHRoaXMg c2l0dWF0aW9uLCBvdmVyYWxsIEkvTzxicj4JdGhyb3VnaHB1dCBpcyBsaWtlbHkgdG8gYmUg c2xvd2VyIHRoYW4gdXNpbmcgZWl0aGVyIG1vZGU8YnI+CWFsb25lLiZuYnNwOyBMaWtld2lz ZSwgYXBwbGljYXRpb25zIHNob3VsZCBhdm9pZCBtaXhpbmcgbW1hcCgyKTxicj4Jb2YgZmls ZXMgd2l0aCBkaXJlY3QgSS9PIHRvIHRoZSBzYW1lIGZpbGVzLiI8YnI+PGJyPklPV3MsIHlv dXIgdGVzdCBwcm9ncmFtIGlzIGJlaGF2aW5nIGFzIGRvY3VtZW50ZWQgZm9yIGEgcHJvZ3Jh bTxicj50aGF0IG1peGVzIGJ1ZmZlcmVkIGFuZCBkaXJlY3QgSU8uLi4uPGJyPjxicj5BRkFJ SywgTXlTUUwgZG9lcyBub3QgZG8mbmJzcDsgbWl4ZWQgYnVmZmVyL2RpcmVjdCBJTyBsaWtl IHRoaXMgYW5kIHNvPGJyPnRoaXMgaXMgZXh0cmVtZWx5IHVubGlrZWx5IHRvIGJlIHRoZSBz b3VyY2Ugb2YgdGhlIHByb2JsZW0uJm5ic3A7IEkgbmVlZDxicj50byB1bmRlcnN0YW5kIGhv dyBNeVNRTCBpcyBnZW5lcmF0aW5nIGNhY2hlZCBwYWdlcyBvbiBpdCdzIGRhdGFiYXNlPGJy PmZpbGVzIHdoZW4gaXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNpbmcgZGlyZWN0IElPLCBhbmQg dGhlIHJlcHJvZHVjZXI8YnI+cHJvZ3JhbSBuZWVkcyB0byBkbyB3aGF0IE15U1FMIGRvZXMg dG8gZ2VuZXJhdGUgY2FjaGVkIHBhZ2VzLjxicj48YnI+Q2FuIHlvdSBwbGVhc2UgZmluZCB0 aGUgbG9jYXRpb24gb2YgdGhlIGNhY2hlZCBwYWdlcyAoYXMgSTxicj5zdWdnZ2VzdGVkIHZp YSB0cmFjaW5nIGluIG15IGxhc3QgZW1haWwpIGluIHRoZSBNeVNRTCBmaWxlcyB0aGF0IGFy ZTxicj5jYXVzaW5nIHRoZSBwcm9ibGVtPzxicj48YnI+Jmd0OyBJJ2QgbGlrZSB0byBhc2sg WEZTIGhvdyB0byByZXNvdmxlIHRoaXMgcHJvYmxlbT88YnI+PGJyPkFwcGxpY2F0aW9ucyB0 aGF0IG5lZWQgdG8gbWl4IGJ1ZmZlcmVkIGFuZCBkaXJlY3QgSU8gY2FuIGludmFsaWRhdGU8 YnI+dGhlIGNhY2hlZCBwYWdlcyBieSB1c2luZyBQT1NJWF9GQURWX0RPTlRORUVEIGJlZm9y ZSBkb2luZyBkaXJlY3Q8YnI+SU8uPGJyPjxicj5GV0lXLCBZb3UgbXVzdCBiZSBsb29raW5n IGF0IHF1aXRlIG9sZCBrZXJuZWwgY29kZSBpZjxicj54ZnNfZmx1c2hpbnZhbF9wYWdlcygp IGV4aXN0cyBpbiB5b3VyIGtlcm5lbC4gRG9lcyBNeVNRTCBvbiBhPGJyPmN1cnJlbnQgdXBz dHJlYW0ga2VybmVsIGhhdmUgdGhlIHNhbWUgcHJvYmxlbT88YnI+PGJyPkNoZWVycyw8YnI+ PGJyPkRhdmUuPGJyPi0tIDxicj5EYXZlIENoaW5uZXI8YnI+ZGF2aWRAZnJvbW9yYml0LmNv bTxicj48L2Rpdj4= ------=_NextPart_5525E5F9_0974FBA8_25D21C4E-- From eyniy@qq.com Wed Apr 8 22:48:36 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 37D6C7F76 for ; Wed, 8 Apr 2015 22:48:36 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D08E3AC002 for ; Wed, 8 Apr 2015 20:48:32 -0700 (PDT) X-ASG-Debug-ID: 1428551307-04bdf0632212d110001-NocioJ Received: from smtpbg341.qq.com (smtpbg341.qq.com [14.17.44.36]) by cuda.sgi.com with ESMTP id VNcLAMWbkImA0Tq2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 08 Apr 2015 20:48:29 -0700 (PDT) X-Barracuda-Envelope-From: eyniy@qq.com X-Barracuda-Apparent-Source-IP: 14.17.44.36 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201307; t=1428551291; bh=/71A9bvGKZtLTn23epXFVGuS5zfBlPsofyq4QyOmBKw=; h=X-QQ-FEAT:X-QQ-SSF:X-HAS-ATTACH:X-QQ-BUSINESS-ORIGIN: X-Originating-IP:In-Reply-To:References:X-QQ-STYLE:X-QQ-mid:From:To:Cc:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Date: X-Priority:Message-ID:X-QQ-MIME:X-Mailer:X-QQ-Mailer: X-QQ-ReplyHash:X-QQ-SENDSIZE; b=fGimXO33W8lhoN8N5soMUZCFh9S6SnRsNJBNUmTdmbPLay1yp0v2tmCVVyVcNQq6b 6w6LaNM3J0qu7U5hKiPcwBAnnpf9qVd9O03sUCpVmehnuDrXiO9TsRqhQzDiu6f4Ee kauEKj8Z1kLjXOOxWxds2iwB4WM1kA23b5KWpHAs= X-QQ-FEAT: i15tayfSwwE36rMP/4CC+f2GyOkb2h1xGpPykW8I+9daqUxMDPSr+9mK+osnw o4K0ufIPBZygLZVhIlCbBzRKQBvJqgVGMM7zMTg1tHqcX+WCKkI80vgEIQzNxdp5wHU6u7u ozurM2/OTMQI7EbXACHiXftM8Isxd5fWJPFn6OsKNM1MkBvVvANI6PFhpboifNrgY6LwHNq 9TINMz3fHfZCHGcyHV1epkvJr2ksQj/QaNC05R6f6jQ== X-QQ-SSF: 000000000000005000000000000000Z X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 X-Originating-IP: 59.37.0.213 In-Reply-To: References: <20150408044955.GE15810@dastard> <20150408211436.GF15810@dastard> X-QQ-STYLE: X-QQ-mid: webmail661t1428551290t665683 From: "=?utf-8?B?WWVZaW4=?=" To: "=?utf-8?B?RGF2ZSBDaGlubmVy?=" Cc: "=?utf-8?B?eGZz?=" Subject: =?utf-8?B?5Zue5aSN77yaICDlm57lpI3vvJogWEZTIGRpcmVj?= =?utf-8?B?dCBJTyBwcm9ibGVt?= Mime-Version: 1.0 X-ASG-Orig-Subj: =?utf-8?B?5Zue5aSN77yaICDlm57lpI3vvJogWEZTIGRpcmVj?= =?utf-8?B?dCBJTyBwcm9ibGVt?= Content-Type: multipart/alternative; boundary="----=_NextPart_5525F67A_0972C000_3DF73E33" Content-Transfer-Encoding: 8Bit Date: Thu, 9 Apr 2015 11:48:10 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 169983419 X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-Barracuda-Connect: smtpbg341.qq.com[14.17.44.36] X-Barracuda-Start-Time: 1428551309 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.06 X-Barracuda-Spam-Status: No, SCORE=1.06 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_MV0113c, DKIM_SIGNED, DKIM_VERIFIED, FROM_EXCESS_BASE64, FROM_EXCESS_BASE64_2, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17696 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MV0113c BSF_SC0_MV0113c 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.00 HTML_MESSAGE BODY: HTML included in message 0.01 FROM_EXCESS_BASE64 From: base64 encoded unnecessarily 1.05 FROM_EXCESS_BASE64_2 From: base64 encoded unnecessarily This is a multi-part message in MIME format. ------=_NextPart_5525F67A_0972C000_3DF73E33 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSBoYXZlIHJlcG9ydGVkIHRoaXMgcHJvYmxlbSB0byBNeVNRTC4gU2VlIGhlcmU6DQpodHRw Oi8vYnVncy5teXNxbC5jb20vYnVnLnBocD9pZD03NjYyN+KAjQ0KDQoNClRoYW5rcywNClll DQotLS0tLS0tLS0tLS0tLS0tLS0g5Y6f5aeL6YKu5Lu2IC0tLS0tLS0tLS0tLS0tLS0tLQ0K 5Y+R5Lu25Lq6OiAiWWVZaW4iOzxleW5peUBxcS5jb20+Ow0K5Y+R6YCB5pe26Ze0OiAyMDE1 5bm0NOaciDnml6Uo5pif5pyf5ZubKSDkuIrljYgxMDozNw0K5pS25Lu25Lq6OiAiRGF2ZSBD aGlubmVyIjxkYXZpZEBmcm9tb3JiaXQuY29tPjsgDQrmioTpgIE6ICJ4ZnMiPHhmc0Bvc3Mu c2dpLmNvbT47IA0K5Li76aKYOiDlm57lpI3vvJogIOWbnuWkje+8miBYRlMgZGlyZWN0IElP IHByb2JsZW0NCg0KDQoNCkkgdHJhY2VkIE15U1FMOg0KDQoNCltwaWQgMTM0NzhdIG9wZW4o Ii4vdGVzdC9iaWdfdGIuaWJkIiwgT19SRE9OTFkpID0gMzcNCltwaWQgMTM0NzhdIHByZWFk KDM3LCAiV1wzNDZcMjAzQFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFx2XDM3Y1wy MjVcMjYzXDBcMTBcMFwwXDBcMFwwXDAiLi4uLCAxNjM4NCwgMCkgPSAxNjM4NA0KW3BpZCAx MzQ3OF0gY2xvc2UoMzcpICAgICAgICAgICAgICAgICAgID0gMA0KW3BpZCAxMzQ3OF0gb3Bl bigiLi90ZXN0L2JpZ190Yi5pYmQiLCBPX1JEV1IpID0gMzcNCltwaWQgMTM0NzhdIGZjbnRs KDM3LCBGX1NFVEZMLCBPX1JET05MWXxPX0RJUkVDVCkgPSAwDQpbcGlkIDEzNDc4XSBmY250 bCgzNywgRl9TRVRMSywge3R5cGU9Rl9XUkxDSywgd2hlbmNlPVNFRUtfU0VULCBzdGFydD0w LCBsZW49MH0pID0gMA0KW3BpZCAxMzQ3OF0gcHJlYWQoMzcsICJcMzUwXDMwMVwyNzBcMjcx XDBcMFwwXDNcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFx2XDM3Y1wy MjVcMjYzRVwyNzdcMFwwXDBcMFwwXDAiLi4uLCAxNjM4NCwgNDkxNTIpID0gMTYzODQNCltw aWQgMTM0NzhdIHByZWFkKDM3LCAiZVwyNTF8bVwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMzFcMjQ1XDI0M1wwXDVcMFwwXDBcMFwwXDAiLi4uLCAxNjM4NCwgMTYzODQp ID0gMTYzODTigI0NCg0KDQoNCkFzIHdlIGNhbiBzZWUsIE15U1FMIHdpbGwgb3BlbiBkYXRh IGZpbGUgdHdpY2Ugd2hlbiBvcGVuIHRhYmxlLiBBbmQgdGhlIGZpcnN0IG9wZW4gZmlsZSB3 aXRob3V0IE9fRElSRUNUIGZsYWcgd2lsbCBnZW5lcmF0ZSBwYWdlIGNhY2hlLiBJIHRyYWNl ZCBrZXJuZWw6DQoNCg0KVHJhY2luZyAic3lzX3ByZWFkNjQiLi4uIEN0cmwtQyB0byBlbmQu DQogIDMpICAgICAgICAgICAgICAgfCAgc3lzX3ByZWFkNjQoKSB7DQogIDMpICAgMC4zNjIg dXMgICAgfCAgICBmZ2V0X2xpZ2h0KCk7DQogIDMpICAgICAgICAgICAgICAgfCAgICB2ZnNf cmVhZCgpIHsNCiAgMykgICAgICAgICAgICAgICB8ICAgICAgcndfdmVyaWZ5X2FyZWEoKSB7 DQogIDMpICAgICAgICAgICAgICAgfCAgICAgICAgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9u KCkgew0KICAzKSAgIDAuMjUxIHVzICAgIHwgICAgICAgICAgY2FwX2ZpbGVfcGVybWlzc2lv bigpOw0KICAzKSAgIDAuODE3IHVzICAgIHwgICAgICAgIH0NCiAgMykgICAxLjM3NyB1cyAg ICB8ICAgICAgfQ0KICAzKSAgICAgICAgICAgICAgIHwgICAgICBkb19zeW5jX3JlYWQoKSB7 DQogIDMpICAgICAgICAgICAgICAgfCAgICAgICAgeGZzX2ZpbGVfYWlvX3JlYWQoKSB7DQog IDMpICAgMC4yNTkgdXMgICAgfCAgICAgICAgICBnZW5lcmljX3NlZ21lbnRfY2hlY2tzKCk7 DQogIDMpICAgICAgICAgICAgICAgfCAgICAgICAgICB4ZnNfcndfaWxvY2soKSB7DQogIDMp ICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHhmc19pbG9jaygpIHsNCiAgMykgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICBkb3duX3JlYWQoKSB7DQogIDMpICAgMC4yMzMgdXMg ICAgfCAgICAgICAgICAgICAgICBfY29uZF9yZXNjaGVkKCk7DQogIDMpICAgMC43MTMgdXMg ICAgfCAgICAgICAgICAgICAgfQ0KICAzKSAgIDEuNDMzIHVzICAgIHwgICAgICAgICAgICB9 DQogIDMpICAgMi4wOTcgdXMgICAgfCAgICAgICAgICB9DQogIDMpICAgICAgICAgICAgICAg fCAgICAgICAgICBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSB7DQogIDMpICAgMC4yMjkgdXMg ICAgfCAgICAgICAgICAgIGdlbmVyaWNfc2VnbWVudF9jaGVja3MoKTsNCiAgMykgICAwLjIy NyB1cyAgICB8ICAgICAgICAgICAgX2NvbmRfcmVzY2hlZCgpOw0KICAzKSAgIDAuMjYxIHVz ICAgIHwgICAgICAgICAgICBmaW5kX2dldF9wYWdlKCk7DQogIDMpICAgICAgICAgICAgICAg fCAgICAgICAgICAgIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB7DQogIDMpICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgb25kZW1hbmRfcmVhZGFoZWFkKCkgew0KDQrigI0u Li4NCg0KDQpJIHJ1biBNeVNRTCA1LjUuMjQgb24gQ2VudE9TNi41LCB3aXRoIGtlcm5lbCAy LjYuMzItNDMxLg0KTGF0ZXIgSSB3aWxsIHVzZSB0aGUgbmV3ZXIga2VybmVsIHRvIHRlc3Qg aXQu4oCNDQoNCg0KVGhhbmtzLA0KWWUNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0g5Y6f5aeL 6YKu5Lu2IC0tLS0tLS0tLS0tLS0tLS0tLQ0K5Y+R5Lu25Lq6OiAiRGF2ZSBDaGlubmVyIjs8 ZGF2aWRAZnJvbW9yYml0LmNvbT47DQrlj5HpgIHml7bpl7Q6IDIwMTXlubQ05pyIOeaXpSjm mJ/mnJ/lm5spIOWHjOaZqDU6MTQNCuaUtuS7tuS6ujogIlllWWluIjxleW5peUBxcS5jb20+ OyANCuaKhOmAgTogInhmcyI8eGZzQG9zcy5zZ2kuY29tPjsgDQrkuLvpopg6IFJlOiAg5Zue 5aSN77yaIFhGUyBkaXJlY3QgSU8gcHJvYmxlbQ0KDQoNCg0KT24gV2VkLCBBcHIgMDgsIDIw MTUgYXQgMDM6MDU6NTdQTSArMDgwMCwgWWVZaW4gd3JvdGU6DQo+IERhdmUsDQo+IFRoYW5r IHlvdSBmb3IgeW91ciBleHBsYW5hdGlvbi4gSSBnb3QgdGhlIHJlYXNvbiwgYW5kIEkgd3Jp dGUgc29tZSBjb2RlIHRvICBzaW11bGF0ZSB0aGUgTXlTUUwuSXQgd2lsbCByZXByb2R1Y2Ug dGhlIHByb2dyZXNzOuKAjQ0KPiANCj4gDQo+IG9wZW4gZmlsZSB3aXRob3V0IGRpcmVjdCBm bGFnDQo+IHJlYWQgZmlsZSAgIC8vY2F1c2Uga2VybmVsIHJlYWRhaGVhZCA0IHBhZ2VzLCBh bmQgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyA+IDANCj4gY2xvc2UgZmlsZQ0KPiANCj4g DQo+IG9wZW4gZmlsZSB3aXRoIGRpcmVjdCBmbGFnDQo+IGxzZWVrIDQqNDA5NiAvLyBza2lw IDQgcmVhZGFoZWFkIHBhZ2VzDQo+IHJlYWQgIGZpbGUgLy9jYXVzZSB4ZnNfZmx1c2hpbnZh bF9wYWdlcyB0byBkbyBub3RoaW5nDQo+IC4uLg0KPiANCg0KWWVzLCB5b3UgY2FuIGNhdXNl IGl0IHRoYXQgd2F5LCBidXQgYW55IGFwcGxpY2F0aW9uIG1peGluZyBidWZmZXJlZA0KSU8g YW5kIGRpcmVjdCBJTyBsaWtlIHRoYXQgaXMgYnJva2VuLiAgSSdsbCBwb2ludCB5b3UgYXQg dGhlIG9wZW4oMikNCm1hbiBwYWdlLCBpbiB0aGUgc2VjdGlvbiBhYm91dCBPX0RJUkVDVDoN Cg0KCSJBcHBsaWNhdGlvbnMgc2hvdWxkIGF2b2lkIG1peGluZyBPX0RJUkVDVCBhbmQgbm9y bWFsIEkvTyB0bw0KCXRoZSBzYW1lIGZpbGUsIGFuZCBlc3BlY2lhbGx5IHRvIG92ZXJsYXBw aW5nIGJ5dGUgcmVnaW9ucyBpbg0KCXRoZSAgc2FtZSBmaWxlLiAgIEV2ZW4gIHdoZW4gIHRo ZSBmaWxlc3lzdGVtIGNvcnJlY3RseQ0KCWhhbmRsZXMgdGhlIGNvaGVyZW5jeSBpc3N1ZXMg aW4gdGhpcyBzaXR1YXRpb24sIG92ZXJhbGwgSS9PDQoJdGhyb3VnaHB1dCBpcyBsaWtlbHkg dG8gYmUgc2xvd2VyIHRoYW4gdXNpbmcgZWl0aGVyIG1vZGUNCglhbG9uZS4gIExpa2V3aXNl LCBhcHBsaWNhdGlvbnMgc2hvdWxkIGF2b2lkIG1peGluZyBtbWFwKDIpDQoJb2YgZmlsZXMg d2l0aCBkaXJlY3QgSS9PIHRvIHRoZSBzYW1lIGZpbGVzLiINCg0KSU9XcywgeW91ciB0ZXN0 IHByb2dyYW0gaXMgYmVoYXZpbmcgYXMgZG9jdW1lbnRlZCBmb3IgYSBwcm9ncmFtDQp0aGF0 IG1peGVzIGJ1ZmZlcmVkIGFuZCBkaXJlY3QgSU8uLi4uDQoNCkFGQUlLLCBNeVNRTCBkb2Vz IG5vdCBkbyAgbWl4ZWQgYnVmZmVyL2RpcmVjdCBJTyBsaWtlIHRoaXMgYW5kIHNvDQp0aGlz IGlzIGV4dHJlbWVseSB1bmxpa2VseSB0byBiZSB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVt LiAgSSBuZWVkDQp0byB1bmRlcnN0YW5kIGhvdyBNeVNRTCBpcyBnZW5lcmF0aW5nIGNhY2hl ZCBwYWdlcyBvbiBpdCdzIGRhdGFiYXNlDQpmaWxlcyB3aGVuIGl0IGlzIHN1cHBvc2VkIHRv IGJlIHVzaW5nIGRpcmVjdCBJTywgYW5kIHRoZSByZXByb2R1Y2VyDQpwcm9ncmFtIG5lZWRz IHRvIGRvIHdoYXQgTXlTUUwgZG9lcyB0byBnZW5lcmF0ZSBjYWNoZWQgcGFnZXMuDQoNCkNh biB5b3UgcGxlYXNlIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWNoZWQgcGFnZXMgKGFz IEkNCnN1Z2dnZXN0ZWQgdmlhIHRyYWNpbmcgaW4gbXkgbGFzdCBlbWFpbCkgaW4gdGhlIE15 U1FMIGZpbGVzIHRoYXQgYXJlDQpjYXVzaW5nIHRoZSBwcm9ibGVtPw0KDQo+IEknZCBsaWtl IHRvIGFzayBYRlMgaG93IHRvIHJlc292bGUgdGhpcyBwcm9ibGVtPw0KDQpBcHBsaWNhdGlv bnMgdGhhdCBuZWVkIHRvIG1peCBidWZmZXJlZCBhbmQgZGlyZWN0IElPIGNhbiBpbnZhbGlk YXRlDQp0aGUgY2FjaGVkIHBhZ2VzIGJ5IHVzaW5nIFBPU0lYX0ZBRFZfRE9OVE5FRUQgYmVm b3JlIGRvaW5nIGRpcmVjdA0KSU8uDQoNCkZXSVcsIFlvdSBtdXN0IGJlIGxvb2tpbmcgYXQg cXVpdGUgb2xkIGtlcm5lbCBjb2RlIGlmDQp4ZnNfZmx1c2hpbnZhbF9wYWdlcygpIGV4aXN0 cyBpbiB5b3VyIGtlcm5lbC4gRG9lcyBNeVNRTCBvbiBhDQpjdXJyZW50IHVwc3RyZWFtIGtl cm5lbCBoYXZlIHRoZSBzYW1lIHByb2JsZW0/DQoNCkNoZWVycywNCg0KRGF2ZS4NCi0tIA0K RGF2ZSBDaGlubmVyDQpkYXZpZEBmcm9tb3JiaXQuY29t ------=_NextPart_5525F67A_0972C000_3DF73E33 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGRpdj5JIGhhdmUgcmVwb3J0ZWQgdGhpcyBwcm9ibGVtIHRvIE15U1FMLiBTZWUgaGVyZTo8 L2Rpdj48ZGl2Pmh0dHA6Ly9idWdzLm15c3FsLmNvbS9idWcucGhwP2lkPTc2NjI3PHNwYW4g aWQ9Il9lZGl0b3JfYm9va21hcmtfc3RhcnRfMCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGxp bmUtaGVpZ2h0OiAwcHg7Ij7igI08L3NwYW4+PC9kaXY+PGRpdj48ZGl2Pjxicj48L2Rpdj48 ZGl2PlRoYW5rcyw8L2Rpdj48ZGl2PlllPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOiAx MnB4O2ZvbnQtZmFtaWx5OiBBcmlhbCBOYXJyb3c7cGFkZGluZzoycHggMCAycHggMDsiPi0t LS0tLS0tLS0tLS0tLS0tLSZuYnNwO+WOn+Wni+mCruS7tiZuYnNwOy0tLS0tLS0tLS0tLS0t LS0tLTwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTJweDtiYWNrZ3JvdW5kOiNlZmVm ZWY7cGFkZGluZzo4cHg7Ij48ZGl2PjxiPuWPkeS7tuS6ujo8L2I+Jm5ic3A7IlllWWluIjsm bHQ7ZXluaXlAcXEuY29tJmd0Ozs8L2Rpdj48ZGl2PjxiPuWPkemAgeaXtumXtDo8L2I+Jm5i c3A7MjAxNeW5tDTmnIg55pelKOaYn+acn+Wbmykg5LiK5Y2IMTA6Mzc8L2Rpdj48ZGl2Pjxi PuaUtuS7tuS6ujo8L2I+Jm5ic3A7IkRhdmUgQ2hpbm5lciImbHQ7ZGF2aWRAZnJvbW9yYml0 LmNvbSZndDs7IDx3YnI+PC9kaXY+PGRpdj48Yj7mioTpgIE6PC9iPiZuYnNwOyJ4ZnMiJmx0 O3hmc0Bvc3Muc2dpLmNvbSZndDs7IDx3YnI+PC9kaXY+PGRpdj48Yj7kuLvpopg6PC9iPiZu YnNwO+WbnuWkje+8miAg5Zue5aSN77yaIFhGUyBkaXJlY3QgSU8gcHJvYmxlbTwvZGl2Pjwv ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSB0cmFjZWQgTXlTUUw6PC9kaXY+PGRpdj48YnI+ PC9kaXY+PGRpdj48ZGl2PltwaWQgMTM0NzhdIG9wZW4oIi4vdGVzdC9iaWdfdGIuaWJkIiwg T19SRE9OTFkpID0gMzc8L2Rpdj48ZGl2PltwaWQgMTM0NzhdIHByZWFkKDM3LCAiV1wzNDZc MjAzQFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFx2XDM3Y1wyMjVcMjYzXDBcMTBc MFwwXDBcMFwwXDAiLi4uLCAxNjM4NCwgMCkgPSAxNjM4NDwvZGl2PjxkaXY+W3BpZCAxMzQ3 OF0gY2xvc2UoMzcpICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ID0gMDwvZGl2PjxkaXY+W3BpZCAxMzQ3OF0gb3Blbigi Li90ZXN0L2JpZ190Yi5pYmQiLCBPX1JEV1IpID0gMzc8L2Rpdj48ZGl2PltwaWQgMTM0Nzhd IGZjbnRsKDM3LCBGX1NFVEZMLCBPX1JET05MWXxPX0RJUkVDVCkgPSAwPC9kaXY+PGRpdj5b cGlkIDEzNDc4XSBmY250bCgzNywgRl9TRVRMSywge3R5cGU9Rl9XUkxDSywgd2hlbmNlPVNF RUtfU0VULCBzdGFydD0wLCBsZW49MH0pID0gMDwvZGl2PjxkaXY+W3BpZCAxMzQ3OF0gcHJl YWQoMzcsICJcMzUwXDMwMVwyNzBcMjcxXDBcMFwwXDNcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3XDM3N1wwXDBcMFx2XDM3Y1wyMjVcMjYzRVwyNzdcMFwwXDBcMFwwXDAiLi4uLCAx NjM4NCwgNDkxNTIpID0gMTYzODQ8L2Rpdj48ZGl2PltwaWQgMTM0NzhdIHByZWFkKDM3LCAi ZVwyNTF8bVwwXDBcMFwxXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzFcMjQ1XDI0M1ww XDVcMFwwXDBcMFwwXDAiLi4uLCAxNjM4NCwgMTYzODQpID0gMTYzODQ8c3BhbiBpZD0iX2Vk aXRvcl9ib29rbWFya19zdGFydF8wIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbGluZS1oZWln aHQ6IDBweDsiPuKAjTwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+QXMgd2UgY2FuIHNlZSwgTXlTUUwgd2lsbCBvcGVuIGRhdGEgZmlsZSB0d2ljZSB3aGVu IG9wZW4gdGFibGUuIEFuZCB0aGUgZmlyc3Qgb3BlbiBmaWxlIHdpdGhvdXQgT19ESVJFQ1Qg ZmxhZyB3aWxsIGdlbmVyYXRlIHBhZ2UgY2FjaGUuIEkgdHJhY2VkIGtlcm5lbDo8L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PjxkaXY+VHJhY2luZyAic3lzX3ByZWFkNjQiLi4uIEN0cmwt QyB0byBlbmQuPC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7c3lzX3ByZWFkNjQoKSB7PC9kaXY+ PGRpdj4mbmJzcDsgMykgJm5ic3A7IDAuMzYyIHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAm bmJzcDtmZ2V0X2xpZ2h0KCk7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwO3Zmc19y ZWFkKCkgezwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7cndfdmVyaWZ5 X2FyZWEoKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 c2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKCkgezwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNw OyAwLjI1MSB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7Y2FwX2ZpbGVfcGVybWlzc2lvbigpOzwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNw OyAwLjgxNyB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt9 PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7IDEuMzc3IHVzICZuYnNwOyAmbmJzcDt8ICZu YnNwOyAmbmJzcDsgJm5ic3A7fTwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDsgJm5i c3A7ZG9fc3luY19yZWFkKCkgezwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO3hmc19maWxlX2Fpb19yZWFkKCkgezwvZGl2PjxkaXY+Jm5ic3A7IDMpICZu YnNwOyAwLjI1OSB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7Z2VuZXJpY19zZWdtZW50X2NoZWNrcygpOzwvZGl2PjxkaXY+Jm5ic3A7IDMp ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt4ZnNfcndfaWxvY2soKSB7PC9kaXY+ PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt4 ZnNfaWxvY2soKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZG93bl9yZWFkKCkgezwvZGl2PjxkaXY+Jm5ic3A7 IDMpICZuYnNwOyAwLjIzMyB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7X2NvbmRfcmVzY2hlZCgpOzwv ZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAwLjcxMyB1cyAmbmJzcDsgJm5ic3A7fCAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt9PC9kaXY+PGRp dj4mbmJzcDsgMykgJm5ic3A7IDEuNDMzIHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7fTwvZGl2PjxkaXY+Jm5ic3A7IDMpICZu YnNwOyAyLjA5NyB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7fTwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDtnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSB7PC9kaXY+PGRpdj4mbmJzcDsgMykg Jm5ic3A7IDAuMjI5IHVzICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7Z2VuZXJpY19zZWdtZW50X2NoZWNrcygpOzwvZGl2PjxkaXY+ Jm5ic3A7IDMpICZuYnNwOyAwLjIyNyB1cyAmbmJzcDsgJm5ic3A7fCAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO19jb25kX3Jlc2NoZWQoKTs8L2Rpdj48ZGl2 PiZuYnNwOyAzKSAmbmJzcDsgMC4yNjEgdXMgJm5ic3A7ICZuYnNwO3wgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtmaW5kX2dldF9wYWdlKCk7PC9kaXY+PGRp dj4mbmJzcDsgMykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7IHwgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtwYWdl X2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgezwvZGl2PjxkaXY+Jm5ic3A7IDMpICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB8ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO29uZGVtYW5kX3JlYWRhaGVh ZCgpIHs8L2Rpdj48L2Rpdj48ZGl2PjxzcGFuIGlkPSJfZWRpdG9yX2Jvb2ttYXJrX3N0YXJ0 XzEiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4OyI+4oCNPC9zcGFu Pi4uLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSBydW4gTXlTUUwgNS41LjI0IG9uIENl bnRPUzYuNSwgd2l0aCBrZXJuZWwgMi42LjMyLTQzMS48L2Rpdj48ZGl2PkxhdGVyIEkgd2ls bCB1c2UgdGhlIG5ld2VyIGtlcm5lbCB0byB0ZXN0IGl0LjxzcGFuIGlkPSJfZWRpdG9yX2Jv b2ttYXJrX3N0YXJ0XzIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBsaW5lLWhlaWdodDogMHB4 OyI+4oCNPC9zcGFuPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmtzLDwvZGl2Pjxk aXY+WWU8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEycHg7 Zm9udC1mYW1pbHk6IEFyaWFsIE5hcnJvdztwYWRkaW5nOjJweCAwIDJweCAwOyI+LS0tLS0t LS0tLS0tLS0tLS0tIOWOn+Wni+mCruS7tiAtLS0tLS0tLS0tLS0tLS0tLS08L2Rpdj48ZGl2 IHN0eWxlPSJmb250LXNpemU6IDEycHg7YmFja2dyb3VuZDojZWZlZmVmO3BhZGRpbmc6OHB4 OyI+PGRpdj48Yj7lj5Hku7bkuro6PC9iPiZuYnNwOyJEYXZlIENoaW5uZXIiOyZsdDtkYXZp ZEBmcm9tb3JiaXQuY29tJmd0Ozs8L2Rpdj48ZGl2PjxiPuWPkemAgeaXtumXtDo8L2I+Jm5i c3A7MjAxNeW5tDTmnIg55pelKOaYn+acn+Wbmykg5YeM5pmoNToxNDwvZGl2PjxkaXY+PGI+ 5pS25Lu25Lq6OjwvYj4mbmJzcDsiWWVZaW4iJmx0O2V5bml5QHFxLmNvbSZndDs7IDx3YnI+ PC9kaXY+PGRpdj48Yj7mioTpgIE6PC9iPiZuYnNwOyJ4ZnMiJmx0O3hmc0Bvc3Muc2dpLmNv bSZndDs7IDx3YnI+PC9kaXY+PGRpdj48Yj7kuLvpopg6PC9iPiZuYnNwO1JlOiAg5Zue5aSN 77yaIFhGUyBkaXJlY3QgSU8gcHJvYmxlbTwvZGl2PjwvZGl2PjxkaXY+PGJyPjwvZGl2Pk9u IFdlZCwgQXByIDA4LCAyMDE1IGF0IDAzOjA1OjU3UE0gKzA4MDAsIFllWWluIHdyb3RlOjxi cj4mZ3Q7IERhdmUsPGJyPiZndDsgVGhhbmsgeW91IGZvciB5b3VyIGV4cGxhbmF0aW9uLiBJ IGdvdCB0aGUgcmVhc29uLCBhbmQgSSB3cml0ZSBzb21lIGNvZGUgdG8mbmJzcDsgc2ltdWxh dGUgdGhlIE15U1FMLkl0IHdpbGwgcmVwcm9kdWNlIHRoZSBwcm9ncmVzczrigI08YnI+Jmd0 OyA8YnI+Jmd0OyA8YnI+Jmd0OyBvcGVuIGZpbGUgd2l0aG91dCBkaXJlY3QgZmxhZzxicj4m Z3Q7IHJlYWQgZmlsZSAmbmJzcDsgLy9jYXVzZSBrZXJuZWwgcmVhZGFoZWFkIDQgcGFnZXMs IGFuZCBpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDtucnBhZ2VzICZndDsgMDxicj4mZ3Q7IGNs b3NlIGZpbGU8YnI+Jmd0OyA8YnI+Jmd0OyA8YnI+Jmd0OyBvcGVuIGZpbGUgd2l0aCBkaXJl Y3QgZmxhZzxicj4mZ3Q7IGxzZWVrIDQqNDA5NiAvLyBza2lwIDQgcmVhZGFoZWFkIHBhZ2Vz PGJyPiZndDsgcmVhZCZuYnNwOyBmaWxlIC8vY2F1c2UgeGZzX2ZsdXNoaW52YWxfcGFnZXMg dG8gZG8gbm90aGluZzxicj4mZ3Q7IC4uLjxicj4mZ3Q7IDxicj48YnI+WWVzLCB5b3UgY2Fu IGNhdXNlIGl0IHRoYXQgd2F5LCBidXQgYW55IGFwcGxpY2F0aW9uIG1peGluZyBidWZmZXJl ZDxicj5JTyBhbmQgZGlyZWN0IElPIGxpa2UgdGhhdCBpcyBicm9rZW4uJm5ic3A7IEknbGwg cG9pbnQgeW91IGF0IHRoZSBvcGVuKDIpPGJyPm1hbiBwYWdlLCBpbiB0aGUgc2VjdGlvbiBh Ym91dCBPX0RJUkVDVDo8YnI+PGJyPgkiQXBwbGljYXRpb25zIHNob3VsZCBhdm9pZCBtaXhp bmcgT19ESVJFQ1QgYW5kIG5vcm1hbCBJL08gdG88YnI+CXRoZSBzYW1lIGZpbGUsIGFuZCBl c3BlY2lhbGx5IHRvIG92ZXJsYXBwaW5nIGJ5dGUgcmVnaW9ucyBpbjxicj4JdGhlJm5ic3A7 IHNhbWUgZmlsZS4gJm5ic3A7IEV2ZW4mbmJzcDsgd2hlbiZuYnNwOyB0aGUgZmlsZXN5c3Rl bSBjb3JyZWN0bHk8YnI+CWhhbmRsZXMgdGhlIGNvaGVyZW5jeSBpc3N1ZXMgaW4gdGhpcyBz aXR1YXRpb24sIG92ZXJhbGwgSS9PPGJyPgl0aHJvdWdocHV0IGlzIGxpa2VseSB0byBiZSBz bG93ZXIgdGhhbiB1c2luZyBlaXRoZXIgbW9kZTxicj4JYWxvbmUuJm5ic3A7IExpa2V3aXNl LCBhcHBsaWNhdGlvbnMgc2hvdWxkIGF2b2lkIG1peGluZyBtbWFwKDIpPGJyPglvZiBmaWxl cyB3aXRoIGRpcmVjdCBJL08gdG8gdGhlIHNhbWUgZmlsZXMuIjxicj48YnI+SU9XcywgeW91 ciB0ZXN0IHByb2dyYW0gaXMgYmVoYXZpbmcgYXMgZG9jdW1lbnRlZCBmb3IgYSBwcm9ncmFt PGJyPnRoYXQgbWl4ZXMgYnVmZmVyZWQgYW5kIGRpcmVjdCBJTy4uLi48YnI+PGJyPkFGQUlL LCBNeVNRTCBkb2VzIG5vdCBkbyZuYnNwOyBtaXhlZCBidWZmZXIvZGlyZWN0IElPIGxpa2Ug dGhpcyBhbmQgc288YnI+dGhpcyBpcyBleHRyZW1lbHkgdW5saWtlbHkgdG8gYmUgdGhlIHNv dXJjZSBvZiB0aGUgcHJvYmxlbS4mbmJzcDsgSSBuZWVkPGJyPnRvIHVuZGVyc3RhbmQgaG93 IE15U1FMIGlzIGdlbmVyYXRpbmcgY2FjaGVkIHBhZ2VzIG9uIGl0J3MgZGF0YWJhc2U8YnI+ ZmlsZXMgd2hlbiBpdCBpcyBzdXBwb3NlZCB0byBiZSB1c2luZyBkaXJlY3QgSU8sIGFuZCB0 aGUgcmVwcm9kdWNlcjxicj5wcm9ncmFtIG5lZWRzIHRvIGRvIHdoYXQgTXlTUUwgZG9lcyB0 byBnZW5lcmF0ZSBjYWNoZWQgcGFnZXMuPGJyPjxicj5DYW4geW91IHBsZWFzZSBmaW5kIHRo ZSBsb2NhdGlvbiBvZiB0aGUgY2FjaGVkIHBhZ2VzIChhcyBJPGJyPnN1Z2dnZXN0ZWQgdmlh IHRyYWNpbmcgaW4gbXkgbGFzdCBlbWFpbCkgaW4gdGhlIE15U1FMIGZpbGVzIHRoYXQgYXJl PGJyPmNhdXNpbmcgdGhlIHByb2JsZW0/PGJyPjxicj4mZ3Q7IEknZCBsaWtlIHRvIGFzayBY RlMgaG93IHRvIHJlc292bGUgdGhpcyBwcm9ibGVtPzxicj48YnI+QXBwbGljYXRpb25zIHRo YXQgbmVlZCB0byBtaXggYnVmZmVyZWQgYW5kIGRpcmVjdCBJTyBjYW4gaW52YWxpZGF0ZTxi cj50aGUgY2FjaGVkIHBhZ2VzIGJ5IHVzaW5nIFBPU0lYX0ZBRFZfRE9OVE5FRUQgYmVmb3Jl IGRvaW5nIGRpcmVjdDxicj5JTy48YnI+PGJyPkZXSVcsIFlvdSBtdXN0IGJlIGxvb2tpbmcg YXQgcXVpdGUgb2xkIGtlcm5lbCBjb2RlIGlmPGJyPnhmc19mbHVzaGludmFsX3BhZ2VzKCkg ZXhpc3RzIGluIHlvdXIga2VybmVsLiBEb2VzIE15U1FMIG9uIGE8YnI+Y3VycmVudCB1cHN0 cmVhbSBrZXJuZWwgaGF2ZSB0aGUgc2FtZSBwcm9ibGVtPzxicj48YnI+Q2hlZXJzLDxicj48 YnI+RGF2ZS48YnI+LS0gPGJyPkRhdmUgQ2hpbm5lcjxicj5kYXZpZEBmcm9tb3JiaXQuY29t PGJyPjwvZGl2PjwvZGl2Pg== ------=_NextPart_5525F67A_0972C000_3DF73E33-- From rgomes@rvx.is Thu Apr 9 05:42:44 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_FRT_BELOW2 autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1A5F87F8C for ; Thu, 9 Apr 2015 05:42:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0F1CA304039 for ; Thu, 9 Apr 2015 03:42:40 -0700 (PDT) X-ASG-Debug-ID: 1428576157-04cb6c1cca130fb0001-NocioJ Received: from mail.rvx.is (mail.rvx.is [178.19.51.189]) by cuda.sgi.com with ESMTP id loZExwxjheLwEJ7P (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Apr 2015 03:42:38 -0700 (PDT) X-Barracuda-Envelope-From: rgomes@rvx.is X-Barracuda-Apparent-Source-IP: 178.19.51.189 Received: from localhost (localhost [127.0.0.1]) by mail.rvx.is (Postfix) with ESMTP id BF38780036A40; Thu, 9 Apr 2015 10:42:35 +0000 (GMT) Received: from mail.rvx.is ([127.0.0.1]) by localhost (mail.rvx.is [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 2JZsFlpu2v9N; Thu, 9 Apr 2015 10:42:35 +0000 (GMT) Received: from localhost (localhost [127.0.0.1]) by mail.rvx.is (Postfix) with ESMTP id 970F780036A43; Thu, 9 Apr 2015 10:42:35 +0000 (GMT) X-Virus-Scanned: amavisd-new at rvx.is Received: from mail.rvx.is ([127.0.0.1]) by localhost (mail.rvx.is [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id w3uWauseZ2PN; Thu, 9 Apr 2015 10:42:35 +0000 (GMT) Received: from mail.rvx.is (mail [178.19.51.189]) by mail.rvx.is (Postfix) with ESMTP id 75E8780036A42; Thu, 9 Apr 2015 10:42:35 +0000 (GMT) Date: Thu, 9 Apr 2015 10:42:35 +0000 (GMT) From: Rui Gomes To: Eric Sandeen Cc: omar , xfs Message-ID: <1560667825.678874.1428576155401.JavaMail.zimbra@rvx.is> In-Reply-To: <1369906732.430278.1426089670705.JavaMail.zimbra@rvx.is> References: <54FDFEDC.5090106@sandeen.net> <1061986380.422955.1426008424991.JavaMail.zimbra@rvx.is> <54FF2BBF.7060404@sandeen.net> <410959445.428221.1426083973347.JavaMail.zimbra@rvx.is> <550054D9.3010602@sandeen.net> <1908077521.428877.1426086242030.JavaMail.zimbra@rvx.is> <5500636A.3020309@sandeen.net> <1369906732.430278.1426089670705.JavaMail.zimbra@rvx.is> Subject: Re: [PATCH] xfs_repair: junk last entry in sf dir if name starts beyond dir size MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [PATCH] xfs_repair: junk last entry in sf dir if name starts beyond dir size Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [178.19.51.186] X-Mailer: Zimbra 8.6.0_GA_1153 (ZimbraWebClient - GC41 (Linux)/8.6.0_GA_1153) Thread-Topic: xfs_repair: junk last entry in sf dir if name starts beyond dir size Thread-Index: f7XveDt1nGLAcGEPxyz9iMthRPE8CLsZmJzD X-Barracuda-Connect: mail.rvx.is[178.19.51.189] X-Barracuda-Start-Time: 1428576157 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17706 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hello Eric, Sorry for the late late reply, I didn't had the time to dig in to this earlier. Actually gdb was lying us, the segfault doesn't happen at: for (i = 0; i < be32_to_cpu(btp->count); i++) but a bit later at: if (be32_to_cpu(lep[i].address) == addr && be32_to_cpu(lep[i].hashval) == hash) And the cause of the segfault is lep[i] So I tried: (gdb) print lep $1 = (xfs_dir2_leaf_entry_t *) 0xfffffffc9ac12788 p lep[0].address Cannot access memory at address 0xfffffffc9ac12794 For what I can see the lep[0] struct doesn't exist! The inode where this happen bellow: [root@icess8a xfsprogs-dev]# xfs_db -c "inode 620507648" -c "p" /dev/sdb1 Metadata corruption detected at block 0x4ffed6d08/0x1000 xfs_db: cannot init perag data (117). Continuing anyway. core.magic = 0x494e core.mode = 040755 core.version = 2 core.format = 2 (extents) core.nlinkv2 = 3 core.onlink = 0 core.projid_lo = 0 core.projid_hi = 0 core.uid = 0 core.gid = 0 core.flushiter = 2 core.atime.sec = Fri May 16 12:21:52 2014 core.atime.nsec = 779442171 core.mtime.sec = Tue Mar 24 12:03:59 2009 core.mtime.nsec = 000000000 core.ctime.sec = Fri Feb 28 19:54:03 2014 core.ctime.nsec = 736630717 core.size = 4096 core.nblocks = 1 core.extsize = 0 core.nextents = 1 core.naextents = 0 core.forkoff = 0 core.aformat = 2 (extents) core.dmevmask = 0 core.dmstate = 0 core.newrtbm = 0 core.prealloc = 0 core.realtime = 0 core.immutable = 0 core.append = 0 core.sync = 0 core.noatime = 0 core.nodump = 0 core.rtinherit = 0 core.projinherit = 0 core.nosymlinks = 0 core.extsz = 0 core.extszinherit = 0 core.nodefrag = 0 core.filestream = 0 core.gen = 3064228498 next_unlinked = null u.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,38781727,1,0] Regards ------------------------------- Rui Gomes CTO RVX - Reykjavik Visual Effects Seljavegur 2, 101 Reykjavik Iceland Tel: + 354 527 3330 Mob: + 354 663 3360 ----- Original Message ----- From: "Rui Gomes" To: "Eric Sandeen" Cc: "omar" , "xfs" Sent: Wednesday, 11 March, 2015 16:01:10 Subject: Re: [PATCH] xfs_repair: junk last entry in sf dir if name starts beyond dir size Hi, Thank you for pointing out where to look, I will try to dissect this a bit further and report back to you. Regards ------------------------------- Rui Gomes CTO RVX - Reykjavik Visual Effects Seljavegur 2, 101 Reykjavik Iceland Tel: + 354 527 3330 Mob: + 354 663 3360 ----- Original Message ----- From: "Eric Sandeen" To: "Rui Gomes" Cc: "omar" , "xfs" Sent: Wednesday, 11 March, 2015 15:46:50 Subject: Re: [PATCH] xfs_repair: junk last entry in sf dir if name starts beyond dir size On 3/11/15 11:04 AM, Rui Gomes wrote: > Program received signal SIGSEGV, Segmentation fault. > 0x000000000044dbcd in __xfs_dir3_data_check (dp=dp@entry=0x0, bp=bp@entry=0x1538e810) at xfs_dir2_data.c:148 > 148 for (i = 0; i < be32_to_cpu(btp->count); i++) { > (gdb) bt > #0 0x000000000044dbcd in __xfs_dir3_data_check (dp=dp@entry=0x0, bp=bp@entry=0x1538e810) at xfs_dir2_data.c:148 > #1 0x000000000044b9ea in xfs_dir3_block_verify (bp=bp@entry=0x1538e810) at xfs_dir2_block.c:62 Can you do a little digging around in gdb to sort out more about why it segfaulted? We got a xfs_dir2_data_hdr_t from the passed-in bp w/ valid magic: hdr = bp->b_addr; and from that got btp: switch (hdr->magic) { case cpu_to_be32(XFS_DIR2_BLOCK_MAGIC): btp = xfs_dir2_block_tail_p(mp, hdr); and this just finds an offset from hdr: ((char *)hdr + mp->m_dirblksize)) - 1; but then apparently blew up when we tried to use btp: for (i = 0; i < be32_to_cpu(btp->count); i++) { I don't see offhand how the hdr is ok, with good magic, but an offset from the hdr (btp) is causing a segfault. Can you dig around a bit more in gdb? -Eric From mark.hills@framestore.com Thu Apr 9 07:53:43 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0FC4B7F8E for ; Thu, 9 Apr 2015 07:53:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 823D3AC001 for ; Thu, 9 Apr 2015 05:53:39 -0700 (PDT) X-ASG-Debug-ID: 1428584015-04cbb056b1167270001-NocioJ Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by cuda.sgi.com with ESMTP id m3kRUoYQEr9ksBEb (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Apr 2015 05:53:36 -0700 (PDT) X-Barracuda-Envelope-From: mark.hills@framestore.com X-Barracuda-Apparent-Source-IP: 209.85.212.182 Received: by wiax7 with SMTP id x7so54679167wia.0 for ; Thu, 09 Apr 2015 05:53:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-type; bh=3cy87R0hb07JI4gRAALOs2E/zFuiUXzT8Y8gZTLd0fY=; b=bv9oDybMSQTr0XJJ3cXdzHkPuG0jvzwN13UC+3GyDqqQVCP6ifbcY9mtD7X6uBvndY +XlVjZokNdR5/AlTypx0KDVGp1XpHiznY9PqxmjJzG6Fgyi6k3mjsA+9UkjlmOoc0TEu GiLHl5eq653vrv7C+gusXVbVvUCD7ovZ0dbp2U811RGe/YJjIL1DJW6SMLob7h3A3SvT WGq5f4PQ2xpIHAXmSyNUJ6OMUl16EI8pK5kzx5AK/Y/2VAd7PW2/nRurcQf3hA5X23j8 xYmJVdmm9qVdXKPVmnDXjLbsEu263dUPy9BCerrP+RqHVk0t1hygE2txr/BSi6mIgkHP Gl9w== X-Gm-Message-State: ALoCoQk2jv5v/+uJNMHX3rfDbY77vKA5nVVUyUcieWLrvTLMu1SpotX5YsnYIr7nKMwS1wxgL6Ol X-Received: by 10.194.90.210 with SMTP id by18mr57765129wjb.80.1428584015599; Thu, 09 Apr 2015 05:53:35 -0700 (PDT) Received: from sys953.ldn.framestore.com (firewall.framestore.com. [193.203.83.19]) by mx.google.com with ESMTPSA id gj7sm7107778wib.4.2015.04.09.05.53.34 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2015 05:53:34 -0700 (PDT) Date: Thu, 9 Apr 2015 13:53:31 +0100 (BST) From: Mark Hills To: xfs@oss.sgi.com Subject: Errors from basic open_by_handle operations Message-ID: <1504091316590.18609@sys953.ldn.framestore.com> X-ASG-Orig-Subj: Errors from basic open_by_handle operations MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Barracuda-Connect: mail-wi0-f182.google.com[209.85.212.182] X-Barracuda-Start-Time: 1428584016 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17710 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- I am having troubles with elementary file handle functions in libhandle. A basic open_by_handle is giving "Bad file descriptor". But I am suspicious of a side effect; using path_to_fshandle earlier in the program changes these errors to "Operation not permitted". Is there a basic mistake in my use of these calls, or a bug/unmaintained code? I am on an XFS filesystem (otherwise the first call fails with 'inappropriate ioctl'). The only documentation I can find is the man page; no mention about initialising the library, and I wasn't able to find any examples. I'm on Scientific Linux 6.6 (like RedHat 6, kernel 2.6.32-504.1.3), and also tried updating to the latest xfsprogs from Git, with the same results. Many thanks -- Mark $ ./test-xfs ~/scratch/tmp/xfs/file.c; echo $? Handle 24 bytes: bd2c94ba959858e0000000870000000 readlink_by_handle: Bad file descriptor open_by_handle: Bad file descriptor 0 $ ./test-xfs ~/scratch/tmp/xfs/file.c; echo $? Handle 8 bytes: bd2c94ba959858 Handle 24 bytes: bd2c94ba959858e0000000870000000 readlink_by_handle: Operation not permitted open_by_handle: Operation not permitted 0 /* * xfs file handle test * * compile with: gcc -o test-xfs test-xfs.c -lhandle -Wall */ #include #include #include #include #include #include #include static void dump(FILE *f, void *m, size_t len) { fprintf(f, "Handle %zu bytes: ", len); while (len--) { fprintf(f, "%hhx", *(unsigned char*)m); m++; } putchar('\n'); } int main(int argc, char *argv[]) { int fd; char *pathname; void *hanp = NULL; size_t hlen; char buf[PATH_MAX]; pathname = argv[1]; #if 0 /* * Switching this section on changes changes the * errors from the later calls */ if (path_to_fshandle(pathname, &hanp, &hlen) == -1) { perror("path_to_fshandle"); return -1; } dump(stderr, hanp, hlen); free_handle(hanp, hlen); #endif if (path_to_handle(pathname, &hanp, &hlen) == -1) { perror("path_to_handle"); return -1; } dump(stderr, hanp, hlen); /* * The above calls were successful, but the next part always * fails */ if (readlink_by_handle(hanp, hlen, buf, sizeof buf) == -1) perror("readlink_by_handle"); else printf("Link: %s\n", buf); fd = open_by_handle(hanp, hlen, O_RDONLY); if (fd == -1) { perror("open_by_handle"); } else { if (close(fd) == -1) abort(); } free_handle(hanp, hlen); return 0; } From roger@filmlight.ltd.uk Thu Apr 9 08:09:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 84BA67F91 for ; Thu, 9 Apr 2015 08:09:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 123BBAC008 for ; Thu, 9 Apr 2015 06:09:26 -0700 (PDT) X-ASG-Debug-ID: 1428584964-04cbb056b1167f50001-NocioJ Received: from c.mx.filmlight.ltd.uk (c.mx.filmlight.ltd.uk [54.76.112.217]) by cuda.sgi.com with ESMTP id JbaHxMdST9qVSvBi for ; Thu, 09 Apr 2015 06:09:25 -0700 (PDT) X-Barracuda-Envelope-From: roger@filmlight.ltd.uk X-Barracuda-Apparent-Source-IP: 54.76.112.217 Received: from [10.44.0.132] (fiero.filmlight.ltd.uk [77.107.81.252]) (Authenticated sender: roger) by omni.filmlight.ltd.uk (Postfix) with ESMTPSA id 26573888020; Thu, 9 Apr 2015 14:09:24 +0100 (BST) Subject: Re: Errors from basic open_by_handle operations From: Roger Willcocks X-ASG-Orig-Subj: Re: Errors from basic open_by_handle operations To: Mark Hills Cc: xfs@oss.sgi.com In-Reply-To: <1504091316590.18609@sys953.ldn.framestore.com> References: <1504091316590.18609@sys953.ldn.framestore.com> Content-Type: text/plain Date: Thu, 09 Apr 2015 14:09:23 +0100 Message-Id: <1428584963.5198.478.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: c.mx.filmlight.ltd.uk[54.76.112.217] X-Barracuda-Start-Time: 1428584964 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17710 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- There's a small gotcha - the filesystem itself has to have been opened: void *xfs_handle = 0; size_t hlen = 0; /* xfs library needs the filesystem to have been opened */ if (path_to_fshandle(mountpoint, &xfs_handle, &hlen) < 0) { /* error */ exit(4); } free(xfs_handle); On Thu, 2015-04-09 at 13:53 +0100, Mark Hills wrote: > I am having troubles with elementary file handle functions in libhandle. > > A basic open_by_handle is giving "Bad file descriptor". > > But I am suspicious of a side effect; using path_to_fshandle earlier in > the program changes these errors to "Operation not permitted". > > Is there a basic mistake in my use of these calls, or a bug/unmaintained > code? > > I am on an XFS filesystem (otherwise the first call fails with > 'inappropriate ioctl'). The only documentation I can find is the man page; > no mention about initialising the library, and I wasn't able to find any > examples. > > I'm on Scientific Linux 6.6 (like RedHat 6, kernel 2.6.32-504.1.3), and > also tried updating to the latest xfsprogs from Git, with the same > results. > > Many thanks > -- Roger Willcocks From david@fromorbit.com Thu Apr 9 08:27:28 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id C40977F93 for ; Thu, 9 Apr 2015 08:27:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id AB4D98F8037 for ; Thu, 9 Apr 2015 06:27:25 -0700 (PDT) X-ASG-Debug-ID: 1428586042-04bdf06322152290001-NocioJ Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id QkSlMB8dIGqMH0o2 for ; Thu, 09 Apr 2015 06:27:23 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CTBwCjfSZVPM+HLHlcgwiBLoZCrCkBAQEGkU4Jh0oEAgKBPTkUAQEBAQEBAQYBAQEBODuEIAEBBDocIxAIAxgJJQ8FJQMHGhOIKc1RAQEBBwIBHxiFeIUbhDVHB4MXgRYFmwSLWokMhCMsMYJDAQEB Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail05.adl6.internode.on.net with ESMTP; 09 Apr 2015 22:57:21 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YgCUK-0007E3-98; Thu, 09 Apr 2015 23:27:20 +1000 Date: Thu, 9 Apr 2015 23:27:20 +1000 From: Dave Chinner To: Mark Hills Cc: xfs@oss.sgi.com Subject: Re: Errors from basic open_by_handle operations Message-ID: <20150409132720.GF13731@dastard> X-ASG-Orig-Subj: Re: Errors from basic open_by_handle operations References: <1504091316590.18609@sys953.ldn.framestore.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1504091316590.18609@sys953.ldn.framestore.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: 1428586042 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Apr 09, 2015 at 01:53:31PM +0100, Mark Hills wrote: > I am having troubles with elementary file handle functions in libhandle. > > A basic open_by_handle is giving "Bad file descriptor". > > But I am suspicious of a side effect; using path_to_fshandle earlier in > the program changes these errors to "Operation not permitted". EPERM. Root permissions are required to convert file handles back to file descriptors, as the handle could have been passed to anyone and open_by_handle has no directory based access/permission checks to determine if the user actually has permission to access the inode behind the filehandle. Cheers, Dave. -- Dave Chinner david@fromorbit.com From tinguely@eagdhcp-232-149.americas.sgi.com Thu Apr 9 08:35:37 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 183387CBE for ; Thu, 9 Apr 2015 08:35:37 -0500 (CDT) Received: from eagdhcp-232-149.americas.sgi.com (eagdhcp-232-149.americas.sgi.com [128.162.232.149]) by relay1.corp.sgi.com (Postfix) with ESMTP id DD0898F804C for ; Thu, 9 Apr 2015 06:35:36 -0700 (PDT) Received: from eagdhcp-232-149.americas.sgi.com (localhost [127.0.0.1]) by eagdhcp-232-149.americas.sgi.com (8.14.5/8.14.5) with ESMTP id t39DZbsv002492 for ; Thu, 9 Apr 2015 08:35:37 -0500 (CDT) (envelope-from tinguely@eagdhcp-232-149.americas.sgi.com) Received: (from tinguely@localhost) by eagdhcp-232-149.americas.sgi.com (8.14.5/8.14.5/Submit) id t39DZbDM002491; Thu, 9 Apr 2015 08:35:37 -0500 (CDT) (envelope-from tinguely) Message-Id: <20150409133213.214186014@sgi.com> User-Agent: quilt/0.51-1 Date: Thu, 09 Apr 2015 08:31:04 -0500 From: tinguely@sgi.com To: xfs@oss.sgi.com Subject: [PATCH] libhandle: document the need for path_to_handle References: <1504091316590.18609@sys953.ldn.framestore.com> Content-Disposition: inline; filename=libhandle-doc-need-for-path_to_handle.patch The handle ioctls require an open file descriptor to the XFS mount directory. This file descriptor is found and supplied in the libhandle code by matching the entry added with a path_to_handle() call. Document the requirement and supply a simple example. Signed-off-by: Mark Tinguely --- man/man3/handle.3 | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) Index: b/man/man3/handle.3 =================================================================== --- a/man/man3/handle.3 +++ b/man/man3/handle.3 @@ -74,6 +74,12 @@ The function returns the handle for the filesystem in which the object given by the .I path argument resides. +.I path +must be the path to the mount point or +.BR open_by_handle () +will return the +.B ENOTDIR +error. .PP The .BR fd_to_handle () @@ -95,7 +101,16 @@ The function opens a file descriptor for the object referenced by a handle. It is analogous and identical to .BR open (2) -with the exception of accepting handles instead of path names. +with the exception of accepting handles instead of path names. The returned +file descriptor is opened to do invisible IO. Internally, +.BR open_by_handle () +uses the mount point file descriptor that was saved by +.BR path_to_fshandle (). +Therefore, +.BR path_to_fshandle (). +must be called before calling +.BR open_by_handle (). +See below for an example. .PP The .BR readlink_by_handle () @@ -192,6 +207,59 @@ does not exist. .TP .B EPERM The caller does not have sufficient privileges. +.SH EXAMPLE +Example of +.BR open_by_handle (). +.PP +.Vb 1 +\& main() +.br +\& { +.br +\& int fd; +.br +\& size_t hlen; +.br +\& void *han; +.br +\& size_t sz_int_used; +.br +\& void *hdl_int_used; +.br +\& char *mount_path = "/mnt/"; +.br +\& char *file = "file_to_open"; +.br +\& if (path_to_handle(file, &han, &hlen) < 0) { +.br +\& perror("path-to-handle"); +.br +\& exit(1); +.br +\& } +.br +\& /* +.br +\& * path_to_fshandle saves an internal copy of the mount point's +.br +\& * (/mnt in this example) file descriptor. The open_by_handle call +.br +\& * looks up this internal file descriptor and uses it in the +.br +\& * xfsctl call to the kernel. Once path_to_fshandle is called, +.br +\& * this internal file descriptor remains open for the remaining +.br +\& * life of the application. +.br +\& */ +.br +\& path_to_fshandle(mount_path, &hdl_int_used, &sz_int_used); +.br +\& fd = open_by_handle(han, hlen, O_RDWR); +.br +\&} +.Ve .SH SEE ALSO .BR open (2), .BR readlink (2), From mark.hills@framestore.com Thu Apr 9 08:37:03 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 3B12C7F67 for ; Thu, 9 Apr 2015 08:37:03 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 212168F8049 for ; Thu, 9 Apr 2015 06:37:02 -0700 (PDT) X-ASG-Debug-ID: 1428586619-04cbb056b1169640001-NocioJ Received: from mail-wg0-f45.google.com (mail-wg0-f45.google.com [74.125.82.45]) by cuda.sgi.com with ESMTP id 5XDEEHfVFyozKkl7 (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Apr 2015 06:37:00 -0700 (PDT) X-Barracuda-Envelope-From: mark.hills@framestore.com X-Barracuda-Apparent-Source-IP: 74.125.82.45 Received: by wgsk9 with SMTP id k9so97958244wgs.3 for ; Thu, 09 Apr 2015 06:36:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:mime-version:content-type; bh=+J9nqgjXe1GV+Ohkof5TU1IWjNyUNseRt9Et4yjfwRQ=; b=d3ObHI7ET3uMMZO+10frvr9GJEIl+Lt+yEuVnTIrTJPLSbVDu12biXuXF5QOXGb56s 8hinsFEFNe5Daj+/AKyLJzFLmnu7xVDiiclGNee+2xTVDwtFqSaUq0Vk0dCGbW2NCJ9o eTMt5I7NGIn6EFsrKWCs8wbxDcZ5XaUs+yH3zANGxR2AYjSusvSiZVAlXe5lRflkzeZo jn4b+rF1wZQAyReHoPYguc11ZvbAnoDLZGQxHYccIF5l/odt0aud7hOUIaHf86EeTbkW SAbM6bcMfhSvnGzqPlSdU5czU/Z27EIri2VcAM8rVtFCnboYjqj5h9ViwwuOZPTf+1ki ZFow== X-Gm-Message-State: ALoCoQntTKBc5lURNOTdGPD0E6WptKkAdkrgFq+m1XLOhKoQohhE3PGIGhpmWsWC569NlR13jNDJ X-Received: by 10.180.97.225 with SMTP id ed1mr6237456wib.17.1428586619649; Thu, 09 Apr 2015 06:36:59 -0700 (PDT) Received: from sys953.ldn.framestore.com (firewall.framestore.com. [193.203.83.19]) by mx.google.com with ESMTPSA id w3sm20238019wiz.5.2015.04.09.06.36.58 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2015 06:36:58 -0700 (PDT) Date: Thu, 9 Apr 2015 14:36:58 +0100 (BST) From: Mark Hills To: Roger Willcocks cc: xfs@oss.sgi.com Subject: Re: Errors from basic open_by_handle operations In-Reply-To: <1428584963.5198.478.camel@montana.filmlight.ltd.uk> X-ASG-Orig-Subj: Re: Errors from basic open_by_handle operations Message-ID: <1504091422580.18609@sys953.ldn.framestore.com> References: <1504091316590.18609@sys953.ldn.framestore.com> <1428584963.5198.478.camel@montana.filmlight.ltd.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Barracuda-Connect: mail-wg0-f45.google.com[74.125.82.45] X-Barracuda-Start-Time: 1428586620 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, 9 Apr 2015, Roger Willcocks wrote: > There's a small gotcha - the filesystem itself has to have been opened: > > void *xfs_handle = 0; > size_t hlen = 0; > > /* xfs library needs the filesystem to have been opened */ > > if (path_to_fshandle(mountpoint, &xfs_handle, &hlen) < 0) { > /* error */ > exit(4); > } > > free(xfs_handle); Thank you Roger, that moves me one step but not to success Now I know "Operation not permitted" is the correct message I assume that use of XFS file handles requires root. But even as root, I cannot open a file with O_RDONLY: $ sudo ./test-xfs ~/scratch/tmp/xfs/file.c ; echo $? Handle 8 bytes: bd2c94ba959858 Handle 24 bytes: bd2c94ba959858e0000000870000000 readlink_by_handle: Not a directory open_by_handle: Not a directory 0 I am able to do open_by_handle(O_RDONLY) on a directory though: $ sudo ./test-xfs ~/scratch/tmp/xfs/directory ; echo $? Handle 8 bytes: bd2c94ba959858 Handle 24 bytes: bd2c94ba959858e0000000880000000 readlink_by_handle: Invalid argument 0 and a readlink_by_handle on a symlink works: $ sudo ./test-xfs ~/scratch/tmp/xfs/link.c ; echo $? Handle 8 bytes: bd2c94ba959858 Handle 24 bytes: bd2c94ba959858e0000000860000000 Link: fortress.c open_by_handle: Operation not permitted 0 Switching to O_RDWR does not succeed in opening a file either, and also stops the directory case. It seems possible flags are getting mangled and are not what I think they mean. The docs state the call as analogous to open(); is the 'oflags' argument actually ready to accept O_RDONLY etc. or some other set of flags? Because it seems like I can't actually open a file here. Many thanks -- Mark From roger@filmlight.ltd.uk Thu Apr 9 09:09:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id BB52B7F9A for ; Thu, 9 Apr 2015 09:09:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B1E13304043 for ; Thu, 9 Apr 2015 07:09:21 -0700 (PDT) X-ASG-Debug-ID: 1428588559-04cbb056b116abe0001-NocioJ Received: from c.mx.filmlight.ltd.uk (c.mx.filmlight.ltd.uk [54.76.112.217]) by cuda.sgi.com with ESMTP id ygpYqYfndskx1Bw7 for ; Thu, 09 Apr 2015 07:09:19 -0700 (PDT) X-Barracuda-Envelope-From: roger@filmlight.ltd.uk X-Barracuda-Apparent-Source-IP: 54.76.112.217 Received: from [10.44.0.132] (fiero.filmlight.ltd.uk [77.107.81.252]) (Authenticated sender: roger) by omni.filmlight.ltd.uk (Postfix) with ESMTPSA id 06263887FA0; Thu, 9 Apr 2015 15:09:19 +0100 (BST) Subject: Re: Errors from basic open_by_handle operations From: Roger Willcocks X-ASG-Orig-Subj: Re: Errors from basic open_by_handle operations To: Mark Hills Cc: xfs@oss.sgi.com In-Reply-To: <1504091316590.18609@sys953.ldn.framestore.com> References: <1504091316590.18609@sys953.ldn.framestore.com> Content-Type: text/plain Date: Thu, 09 Apr 2015 15:09:18 +0100 Message-Id: <1428588558.5198.483.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: c.mx.filmlight.ltd.uk[54.76.112.217] X-Barracuda-Start-Time: 1428588559 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17712 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- The code below works here on a CentOS 6.4 box ('test' is a file at the root of the volume): $ ./a.out hlen = 24 fd = -1 $ sudo ./a.out hlen = 24 fd = 4 /* g++ handle_test.cpp -lhandle */ #include #include #include #include #include int main(int argc, char *argv[]) { void *xfs_handle = 0; size_t hlen = 0; if (path_to_fshandle("/mnt/disk1", &xfs_handle, &hlen) < 0) exit(4); if (path_to_handle("/mnt/disk1/test", &xfs_handle, &hlen) < 0) exit(5); printf("hlen = %d\n", (int)hlen); int fd = open_by_handle(xfs_handle, hlen, O_RDWR); printf("fd = %d\n", fd); return 0; } On Thu, 2015-04-09 at 13:53 +0100, Mark Hills wrote: > I am having troubles with elementary file handle functions in libhandle. > > A basic open_by_handle is giving "Bad file descriptor". > > But I am suspicious of a side effect; using path_to_fshandle earlier in > the program changes these errors to "Operation not permitted". > > Is there a basic mistake in my use of these calls, or a bug/unmaintained > code? > > I am on an XFS filesystem (otherwise the first call fails with > 'inappropriate ioctl'). The only documentation I can find is the man page; > no mention about initialising the library, and I wasn't able to find any > examples. > > I'm on Scientific Linux 6.6 (like RedHat 6, kernel 2.6.32-504.1.3), and > also tried updating to the latest xfsprogs from Git, with the same > results. > > Many thanks > -- Roger Willcocks From mark.hills@framestore.com Thu Apr 9 09:34:30 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 997CF7F8C for ; Thu, 9 Apr 2015 09:34:30 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 907978F8040 for ; Thu, 9 Apr 2015 07:34:27 -0700 (PDT) X-ASG-Debug-ID: 1428590064-04cbb056b316baa0001-NocioJ Received: from mail-wg0-f49.google.com (mail-wg0-f49.google.com [74.125.82.49]) by cuda.sgi.com with ESMTP id Bc8lUGtYcsDRBF5S (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Apr 2015 07:34:25 -0700 (PDT) X-Barracuda-Envelope-From: mark.hills@framestore.com X-Barracuda-Apparent-Source-IP: 74.125.82.49 Received: by wgin8 with SMTP id n8so122321717wgi.0 for ; Thu, 09 Apr 2015 07:34:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:mime-version:content-type; bh=NhWXvgqkofxrEVhcCzUDcZAMdTAWw7/nbhVtig2pyx4=; b=hhzWVZskcvV8tUAq3qTpp4y/azq7MkaVchvKp57cp23ahUefPnsKPiFBSMv0nu7urY Sd9JyARA5yXv2sWX6X+Oo+iM/e9HeTwztRl7ILuODCWXKBykV/BdCTTbdQh2VXYuC9JF P9+B8B/8E1+mxqvA5qW60XJkSSpsqsbtiCVjDpOMUlK0zCwPFy/T1B8PPbS3zpPE2hSq VSYRauN5uvnl9M/uIvvVxolvt0gSTNTfBJeYN6qkFvvcocQCt8pbZiVrkBFaSToFG8q+ KtFDV8M/XN9giggCHOgcWv1bIU4MjVmh5jLGUGTaP/ZgyNo5Yi3caHetPCnZy5a6hFD+ wfCg== X-Gm-Message-State: ALoCoQkQMDglXvOgNk6H4iXKxZC6SejndNoTFi7kyfOdKEHPnn0gFvl5OgnHQbV1ZNyjHc9woyoi X-Received: by 10.194.121.136 with SMTP id lk8mr57927996wjb.49.1428590064447; Thu, 09 Apr 2015 07:34:24 -0700 (PDT) Received: from sys953.ldn.framestore.com (firewall.framestore.com. [193.203.83.19]) by mx.google.com with ESMTPSA id ev7sm20366845wjb.47.2015.04.09.07.34.23 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2015 07:34:23 -0700 (PDT) Date: Thu, 9 Apr 2015 15:34:22 +0100 (BST) From: Mark Hills To: Roger Willcocks cc: xfs@oss.sgi.com Subject: Re: Errors from basic open_by_handle operations In-Reply-To: <1428588558.5198.483.camel@montana.filmlight.ltd.uk> X-ASG-Orig-Subj: Re: Errors from basic open_by_handle operations Message-ID: <1504091515150.18609@sys953.ldn.framestore.com> References: <1504091316590.18609@sys953.ldn.framestore.com> <1428588558.5198.483.camel@montana.filmlight.ltd.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Barracuda-Connect: mail-wg0-f49.google.com[74.125.82.49] X-Barracuda-Start-Time: 1428590065 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17712 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, 9 Apr 2015, Roger Willcocks wrote: > The code below works here on a CentOS 6.4 box ('test' is a file at the > root of the volume): > > $ ./a.out > hlen = 24 > fd = -1 > $ sudo ./a.out > hlen = 24 > fd = 4 Yup, and I can reproduce that here on my system, thanks. It seems the subtlety is rooted here: > if (path_to_fshandle("/mnt/disk1", &xfs_handle, &hlen) < 0) > exit(4); > > if (path_to_handle("/mnt/disk1/test", &xfs_handle, &hlen) < 0) > exit(5); This code is correct, and it looks like it's necessary to do path_to_fshandle on the file system root, otherwise it does not satisfy the precondition of open_by_handle(). So what I was doing: path_to_fshandle("/mnt/disk1/test-file" ... ); ... path_to_handle("/mnt/disk1/test-file" ... ); even though it reports the expected success (and returns the right file handles), is not enough to allow open_by_handle() to work on a file. It does leave me needing to have prior knowledge of the mounted filesystem root (or look it up); handle_to_fshandle() doesn't achieve the same. Definitely some oddities here -- but now I have enough to get me started though I hope. Thanks for all the help, and perhaps I can look at some patches to the man page as I go. Thanks -- Mark From bfoster@redhat.com Thu Apr 9 09:54:32 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B7C3E7F69 for ; Thu, 9 Apr 2015 09:54:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8BEC0304039 for ; Thu, 9 Apr 2015 07:54:32 -0700 (PDT) X-ASG-Debug-ID: 1428591270-04bdf06322155e30001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id p5fhF5fxDe9okXJm (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Apr 2015 07:54:30 -0700 (PDT) X-Barracuda-Envelope-From: bfoster@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t39EsTkk013006 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Thu, 9 Apr 2015 10:54:30 -0400 Received: from bfoster.bfoster (dhcp-41-237.bos.redhat.com [10.18.41.237]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t39EsTom024684 for ; Thu, 9 Apr 2015 10:54:29 -0400 Received: by bfoster.bfoster (Postfix, from userid 1000) id 3C680123969; Thu, 9 Apr 2015 10:54:28 -0400 (EDT) From: Brian Foster To: xfs@oss.sgi.com Subject: [PATCH v2] xfs: use spin lock to prevent i_size race on dio write completion Date: Thu, 9 Apr 2015 10:54:27 -0400 X-ASG-Orig-Subj: [PATCH v2] xfs: use spin lock to prevent i_size race on dio write completion Message-Id: <1428591267-5689-1-git-send-email-bfoster@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1428591270 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 XFS allows O_DIRECT writes to the same file to execute in parallel under the shared iolock. If the write offset is beyond the inode size (not appending), the write path cycles the exclusive iolock to check for previously unexposed blocks that must be zeroed. If I/O is synchronous, this has the side effect of waiting on all in-flight I/O to complete. If writes occur slightly out of order, however, it's possible for even O_SYNC|O_DIRECT writes to race to extend i_size in the end_io completion handler. For example, this can be easily manufactured with an artificial delay in xfs_end_io_direct_write(): if (offset + size > i_size_read(inode)) { mdelay(...); ... } Execute the following commands in order, but in parallel such that they both read the current i_size as 0 and delay to update it: $ xfs_io -f -d -s -c "pwrite 4k 4k" /mnt/file $ xfs_io -f -d -s -c "pwrite 0 4k" /mnt/file Since the write at 4k passes through the delay first, it sets i_size to 8k. Shortly after, the write to 0 sets i_size to 4k: $ ls -al /mnt/file -rw-------. 1 root root 4096 Apr 4 06:48 /mnt/file At this point, any further file extending writes consider the block at EOF (4k) as stale data that must be zeroed: $ xfs_io -f -d -s -c "pwrite 8k 4k" /mnt/file $ ls -al /mnt/file -rw-------. 1 root root 12288 Apr 4 06:51 /mnt/file $ hexdump /mnt/file 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * 0001000 0000 0000 0000 0000 0000 0000 0000 0000 * 0002000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * 0003000 The i_size update in xfs_end_io_direct_write() is a fundamental test/set race across concurrent completions. We cannot use a generic spin lock in this case because completion can run under wq or irq (aio) context and is thus subject to deadlock. Therefore, create a new i_size_lock in the xfs_inode that can be acquired in an irq safe manner. This lock is purely to protect i_size updates under parallel dio, allowed under IOLOCK_SHARED. Acquire the lock on the submission side (xfs_file_aio_write_checks()) to increase the odds that we have the most recent, stable i_size value for the zero eof blocks check. Finally, wait for all dio to drain as part of the zero eof blocks sequence to protect against in-flight aio and ensure we have exclusive access to the inode before we check for blocks to zero. Signed-off-by: Brian Foster --- v2: - Use new, irq safe lock and acquire on submission side checks. - Wait for in-flight aio on xfs_zero_eof() check sequence. v1: http://oss.sgi.com/pipermail/xfs/2015-April/041286.html Hi all, This is v2 of the dio i_size race fix. Dave had discovered that the original version had unsafe locking due to the possible irq context for dio completion. I didn't have the appropriate lock debugging enabled in my initial tests so I didn't detect it. It apparently also pointed out that execution context management for dio completion is busted. E.g., it's possible to run transactions in irq context when we should defer the transaction running cases to workqueue. I believe Dave is working on a fix for that. This patch addresses those problems with v1 (not the end_io ctx bug) and still survives the original reproducer, but additional testing is ongoing... My understanding is the associated rework should render this separate and irq safe lock unnecessary for the race fix. E.g., locking is still required, but that should only be the case in wq completion context. My preference is to have isolated fixes for the race/data corruption and completion context fixes such that we have backportable fixes for stable kernels that might be affected by one or both bugs, or view the priority/reproducibility differently. Whether that manifests as something like this patch followed up by fixes to switch the lock or a careful enough separation of independent fixes in a broader rework series doesn't matter so much to me. Posting this for posterity if nothing else and we'll see what falls out from the broader rework... thanks. Brian fs/xfs/xfs_aops.c | 10 +++++++++- fs/xfs/xfs_file.c | 22 ++++++++++++++++++---- fs/xfs/xfs_inode.h | 1 + fs/xfs/xfs_super.c | 1 + 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3a9b7a1..f15184f 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c @@ -1455,6 +1455,7 @@ xfs_end_io_direct_write( struct inode *inode = file_inode(iocb->ki_filp); struct xfs_inode *ip = XFS_I(inode); struct xfs_mount *mp = ip->i_mount; + unsigned long flags; if (XFS_FORCED_SHUTDOWN(mp)) return; @@ -1463,10 +1464,17 @@ xfs_end_io_direct_write( * 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. + * size. To prevent this just update it a little bit earlier here. + * + * Take the irq-safe i_size_lock to prevent test/set races between + * extending I/Os from either wq or irq context. This race can occur + * when a non-appending extending (pos > i_size) write is submitted out + * of offset order from an appending (pos == i_size) write. */ + spin_lock_irqsave(&ip->i_size_lock, flags); if (offset + size > i_size_read(inode)) i_size_write(inode, offset + size); + spin_unlock_irqrestore(&ip->i_size_lock, flags); /* * For direct I/O we do not know if we need to allocate blocks or not, diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index dc5f609..6c3ff6d 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -553,6 +553,7 @@ xfs_file_aio_write_checks( struct inode *inode = file->f_mapping->host; struct xfs_inode *ip = XFS_I(inode); int error = 0; + unsigned long flags; restart: error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode)); @@ -566,23 +567,36 @@ 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. If zeroing is needed and we are currently holding the - * iolock shared, we need to update it to exclusive which implies - * having to redo all checks before. + * write. That means we need a sane EOF with respect to any number of + * sync or async writes that could be in-flight. + * + * First, grab the i_size_lock to increase the odds that we have the + * latest size from updates on I/O completion side. All sync I/O occurs + * under the shared iolock. Therefore, we cycle to the exclusive iolock + * to wait for those to complete and block out any further I/O + * submission. Async I/O can still be in flight as the iolock only + * covers aio submission. Wait for that explicitly once we've got + * IOLOCK_EXCL. Finally, the unlock/lock cycle means we must redo all of + * the checks above. */ + spin_lock_irqsave(&ip->i_size_lock, flags); if (*pos > i_size_read(inode)) { bool zero = false; + spin_unlock_irqrestore(&ip->i_size_lock, flags); if (*iolock == XFS_IOLOCK_SHARED) { xfs_rw_iunlock(ip, *iolock); *iolock = XFS_IOLOCK_EXCL; xfs_rw_ilock(ip, *iolock); + + inode_dio_wait(inode); goto restart; } error = xfs_zero_eof(ip, *pos, i_size_read(inode), &zero); if (error) return error; - } + } else + spin_unlock_irqrestore(&ip->i_size_lock, flags); /* * Updating the timestamps will grab the ilock again from diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 8f22d20..4bbc757 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -62,6 +62,7 @@ typedef struct xfs_inode { /* Miscellaneous state. */ unsigned long i_flags; /* see defined flags below */ unsigned int i_delayed_blks; /* count of delay alloc blks */ + spinlock_t i_size_lock; /* concurrent dio i_size lock */ xfs_icdinode_t i_d; /* most of ondisk inode */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 8782b36..bcf1279 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -965,6 +965,7 @@ xfs_fs_inode_init_once( /* xfs inode */ atomic_set(&ip->i_pincount, 0); spin_lock_init(&ip->i_flags_lock); + spin_lock_init(&ip->i_size_lock); mrlock_init(&ip->i_mmaplock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER, "xfsino", ip->i_ino); -- 1.9.3 From joe.landman@gmail.com Thu Apr 9 16:02:40 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0CD9B7F76 for ; Thu, 9 Apr 2015 16:02:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7F0CBAC001 for ; Thu, 9 Apr 2015 14:02:36 -0700 (PDT) X-ASG-Debug-ID: 1428613354-04cb6c1cca1577f0001-NocioJ Received: from mail-ie0-f169.google.com (mail-ie0-f169.google.com [209.85.223.169]) by cuda.sgi.com with ESMTP id 1rRBeMAeqnyHr5fM (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Apr 2015 14:02:34 -0700 (PDT) X-Barracuda-Envelope-From: joe.landman@gmail.com Received: by iedfl3 with SMTP id fl3so2865559ied.1 for ; Thu, 09 Apr 2015 14:02:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=pFnw0duUruWY5+GDcB/gm0EmVHb6gGTE/CK1mjAGAlA=; b=GjRg2D+kJhdjqencMI5/33kvMXrCrhCL7wnWAyhyg54+p/8d07ID0eDYMbPuEdOnFN PJL0USxLMAUSKLA89tNjlyiulT8LFXgIPx2qr9WJ+Nc7y2cIeuaxHEzR3354E50IYj4r ecbe1X9E7t2CbvR8Gk7sIaoiouvDU8rub0NJwfyk/1JPWGhVyFhRaznCMJO/Ts7D15cP Dr9qV20Xd5d2uT7D4dIdg75m2y+5pylGpM1z+X8c8ntiYWkvmAxic+XsH0imVNG15Zf9 IOJLbTP9P8lv3QaJ2+gI/HHuRe3kv5+sArIXFY55b0sr1XOqAVnJeLNUVlr5rYZ2Oihh nMxA== X-Received: by 10.42.100.211 with SMTP id b19mr42594637ico.5.1428613354669; Thu, 09 Apr 2015 14:02:34 -0700 (PDT) Received: from [192.168.1.171] (108-224-191-17.lightspeed.livnmi.sbcglobal.net. [108.224.191.17]) by mx.google.com with ESMTPSA id y18sm4042372ioi.18.2015.04.09.14.02.33 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2015 14:02:33 -0700 (PDT) Message-ID: <5526E8E9.3030805@gmail.com> Date: Thu, 09 Apr 2015 17:02:33 -0400 From: Joe Landman User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: xfs , linux-raid Subject: interesting MD-xfs bug Content-Type: text/plain; charset=utf-8; format=flowed X-ASG-Orig-Subj: interesting MD-xfs bug Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ie0-f169.google.com[209.85.223.169] X-Barracuda-Start-Time: 1428613354 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17722 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 If I build an MD raid0 with a non power of 2 chunk size, it appears that I can mkfs.xfs a file system, but it doesn't show up in blkid and is not mountable. Yet, using a power of 2 chunk size, this does work correctly. This is kernel 3.18.9. For example, non-power of 2 chunk: root@unison:~# wipefs -a /dev/sdb 4 bytes were erased at offset 0x1000 (linux_raid_member) they were: fc 4e 2b a9 root@unison:~# wipefs -a /dev/sda 4 bytes were erased at offset 0x1000 (linux_raid_member) they were: fc 4e 2b a9 root@unison:~# mdadm --create /dev/md20 --level=0 --metadata=1.2 --chunk=1152 --auto=yes --raid-disks=2 /dev/sd[ab] mdadm: array /dev/md20 started. root@unison:~# mkfs.xfs /dev/md20 log stripe unit (1179648 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=/dev/md20 isize=256 agcount=50, agsize=268435296 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=13164865984, imaxpct=5 = sunit=288 swidth=576 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=521728, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 root@unison:~# blkid | grep xfs root@unison:~# Same system, with power of 2 chunk size: root@unison:~# mdadm -S /dev/md20 mdadm: stopped /dev/md20 root@unison:~# wipefs -a /dev/sda 4 bytes were erased at offset 0x1000 (linux_raid_member) they were: fc 4e 2b a9 root@unison:~# wipefs -a /dev/sdb 4 bytes were erased at offset 0x1000 (linux_raid_member) they were: fc 4e 2b a9 root@unison:~# mdadm --create /dev/md20 --level=0 --metadata=1.2 --chunk=1024 --auto=yes --raid-disks=2 /dev/sd[ab] mdadm: array /dev/md20 started. root@unison:~# mkfs.xfs /dev/md20 log stripe unit (1048576 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=/dev/md20 isize=256 agcount=50, agsize=268435200 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=13164866048, imaxpct=5 = sunit=256 swidth=512 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=521728, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 root@unison:~# blkid | grep xfs /dev/md20: UUID="5e965ae7-198e-4e58-8920-a65c4b6bbe60" TYPE="xfs" I am not sure which code base might be at "fault" or even if there is a "fault" (beyond simply saying "don't do non-power-of-two chunks"). If its the latter, happy to work on a warning message patch for mdadm if needed. If it should work, then happy to poke around if someone can give me a pointer where something might be relevant. From david@fromorbit.com Thu Apr 9 17:18:56 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 08BB87F69 for ; Thu, 9 Apr 2015 17:18:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 98B56AC002 for ; Thu, 9 Apr 2015 15:18:52 -0700 (PDT) X-ASG-Debug-ID: 1428617929-04cb6c1cc7161c10001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id sokQFHL3Cmk449VV for ; Thu, 09 Apr 2015 15:18:50 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CmCQAc+iZVPM+HLHlcgwSBLoJHg3usLgEBAQEBAQaZJgQCAoFDTQEBAQEBAQcBAQEBODuEIAEBBDocIxAIAxgJJQ8FJQMHGhOIKc5iAQEBBwEBAQEeGIV4hRuELU8HhC0FmwuUY4IiAxyBYiwxgkMBAQE Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail06.adl2.internode.on.net with ESMTP; 10 Apr 2015 07:48:48 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YgKmc-0008Jr-Rb; Fri, 10 Apr 2015 08:18:46 +1000 Date: Fri, 10 Apr 2015 08:18:46 +1000 From: Dave Chinner To: Joe Landman Cc: xfs , linux-raid Subject: Re: interesting MD-xfs bug Message-ID: <20150409221846.GG13731@dastard> X-ASG-Orig-Subj: Re: interesting MD-xfs bug References: <5526E8E9.3030805@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5526E8E9.3030805@gmail.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: 1428617929 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: > If I build an MD raid0 with a non power of 2 chunk size, it appears > that I can mkfs.xfs a file system, but it doesn't show up in blkid > and is not mountable. Yet, using a power of 2 chunk size, this does > work correctly. This is kernel 3.18.9. > > > For example, non-power of 2 chunk: > > root@unison:~# wipefs -a /dev/sdb > 4 bytes were erased at offset 0x1000 (linux_raid_member) > they were: fc 4e 2b a9 > root@unison:~# wipefs -a /dev/sda > 4 bytes were erased at offset 0x1000 (linux_raid_member) > they were: fc 4e 2b a9 > root@unison:~# mdadm --create /dev/md20 --level=0 --metadata=1.2 > --chunk=1152 --auto=yes --raid-disks=2 /dev/sd[ab] > mdadm: array /dev/md20 started. > > root@unison:~# mkfs.xfs /dev/md20 > log stripe unit (1179648 bytes) is too large (maximum is 256KiB) > log stripe unit adjusted to 32KiB > meta-data=/dev/md20 isize=256 agcount=50, > agsize=268435296 blks > = sectsz=512 attr=2, projid32bit=0 > data = bsize=4096 blocks=13164865984, imaxpct=5 > = sunit=288 swidth=576 blks > naming =version 2 bsize=4096 ascii-ci=0 > log =internal log bsize=4096 blocks=521728, version=2 > = sectsz=512 sunit=8 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 > > root@unison:~# blkid | grep xfs That looks more like a blkid or udev problem. try using blkid -p so that it doesn't look up the cache but directly probes devices for the signatures. strace might tell you a bit more, too. And if the filesystem mounts, then it definitely isn't an XFS problem ;) Cheers, Dave. -- Dave Chinner david@fromorbit.com From joe.landman@gmail.com Thu Apr 9 17:20:49 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8F2AE7F60 for ; Thu, 9 Apr 2015 17:20:49 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7B38A8F8039 for ; Thu, 9 Apr 2015 15:20:49 -0700 (PDT) X-ASG-Debug-ID: 1428618048-04cb6c1cc9161dc0001-NocioJ Received: from mail-ig0-f178.google.com (mail-ig0-f178.google.com [209.85.213.178]) by cuda.sgi.com with ESMTP id YQsLHUIDE2jRLbbB (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Apr 2015 15:20:48 -0700 (PDT) X-Barracuda-Envelope-From: joe.landman@gmail.com Received: by igbqf9 with SMTP id qf9so3950489igb.1 for ; Thu, 09 Apr 2015 15:20:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=BgINHynzVuI5u2fDlm36j98HrbiwxfHFQecIqyvlBFE=; b=r6RH40KRRKi2YRaPT37PqLni0FoLTvt7RI+/fBWMUjRcyIZcSeiWDXamjPTbLj3wfI MOOO2pEV9n55Iw4AxWHB6x4bFAEuDyJ4n0B1xG/O8K6wtRQ3JeGhkhSOb5shnEeU4cwo OgvniXOmsFNzs5rEUJdHEgZLiB2X+Z5KGYkKT+Kc6C/aTcwZR21tse9a62wpnnXgTUGQ OiiIZQ5XTuB3HSUAxBQsD0UpGVkMkfH4sTIIgB8dYxtSTOSe7FwvIQB+WfiptvNz0EKA jFtrKi8pmjEr43/x2pw7yZt4qZusU2pOU/Fx5Ll15lym8fmZYKGWGRiQvgnXMHbS0uwO B1wA== X-Received: by 10.42.0.9 with SMTP id 9mr43395739ica.49.1428618039940; Thu, 09 Apr 2015 15:20:39 -0700 (PDT) Received: from [192.168.5.50] ([70.88.96.213]) by mx.google.com with ESMTPSA id y18sm62245ioi.18.2015.04.09.15.20.38 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2015 15:20:38 -0700 (PDT) Message-ID: <5526FB2A.8060704@gmail.com> Date: Thu, 09 Apr 2015 18:20:26 -0400 From: Joe Landman User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Dave Chinner CC: xfs , linux-raid Subject: Re: interesting MD-xfs bug References: <5526E8E9.3030805@gmail.com> <20150409221846.GG13731@dastard> X-ASG-Orig-Subj: Re: interesting MD-xfs bug In-Reply-To: <20150409221846.GG13731@dastard> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-ig0-f178.google.com[209.85.213.178] X-Barracuda-Start-Time: 1428618048 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17724 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 04/09/2015 06:18 PM, Dave Chinner wrote: > On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: >> If I build an MD raid0 with a non power of 2 chunk size, it appears >> that I can mkfs.xfs a file system, but it doesn't show up in blkid >> and is not mountable. Yet, using a power of 2 chunk size, this does >> work correctly. This is kernel 3.18.9. >> [...] > That looks more like a blkid or udev problem. try using blkid -p so > that it doesn't look up the cache but directly probes devices for > the signatures. strace might tell you a bit more, too. And if the > filesystem mounts, then it definitely isn't an XFS problem ;) Thats the thing, it didn't mount, even when I used the device name directly. Good point on stracing though. I'll do that tomorrow and report back. Thanks! Joe > > Cheers, > > Dave. -- Joe Landman e: joe.landman@gmail.com t: @sijoe From david@fromorbit.com Thu Apr 9 17:53:27 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9B12C7F87 for ; Thu, 9 Apr 2015 17:53:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 174A9AC002 for ; Thu, 9 Apr 2015 15:53:27 -0700 (PDT) X-ASG-Debug-ID: 1428620003-04cb6c1cc9162de0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id iq7bBiGU3pET4JCD for ; Thu, 09 Apr 2015 15:53:24 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2CmCQBjAidVPM+HLHlcgwiBLoJHg3usMQEBAQEBAQaZJgQCAoFDTQEBAQEBAQcBAQEBODuEIAEBBDocIxAIAxgJJQ8FJQMHGhOIKc5tAQEBBwIgGIV4hRuELU8HhC0FmwuUY4QjLDGCQwEBAQ Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail06.adl2.internode.on.net with ESMTP; 10 Apr 2015 08:23:23 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YgLK6-0008ND-DK; Fri, 10 Apr 2015 08:53:22 +1000 Date: Fri, 10 Apr 2015 08:53:22 +1000 From: Dave Chinner To: Joe Landman Cc: xfs , linux-raid Subject: Re: interesting MD-xfs bug Message-ID: <20150409225322.GH13731@dastard> X-ASG-Orig-Subj: Re: interesting MD-xfs bug References: <5526E8E9.3030805@gmail.com> <20150409221846.GG13731@dastard> <5526FB2A.8060704@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5526FB2A.8060704@gmail.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: 1428620003 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17725 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Apr 09, 2015 at 06:20:26PM -0400, Joe Landman wrote: > > > On 04/09/2015 06:18 PM, Dave Chinner wrote: > >On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: > >>If I build an MD raid0 with a non power of 2 chunk size, it appears > >>that I can mkfs.xfs a file system, but it doesn't show up in blkid > >>and is not mountable. Yet, using a power of 2 chunk size, this does > >>work correctly. This is kernel 3.18.9. > >> > > [...] > > >That looks more like a blkid or udev problem. try using blkid -p so > >that it doesn't look up the cache but directly probes devices for > >the signatures. strace might tell you a bit more, too. And if the > >filesystem mounts, then it definitely isn't an XFS problem ;) > > Thats the thing, it didn't mount, even when I used the device name > directly. Ok, that's interesting. Let me see if I can reproduce it locally. If you don't hear otherwise, tracing would still be useful. Thanks for the bug report, Joe. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Apr 9 18:10:51 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E05717F80 for ; Thu, 9 Apr 2015 18:10:50 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 88F56AC001 for ; Thu, 9 Apr 2015 16:10:47 -0700 (PDT) X-ASG-Debug-ID: 1428621044-04bdf06323177ad0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id KVE4RSIlGY98QLfX for ; Thu, 09 Apr 2015 16:10:45 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AICgDuBSdVPM+HLHlcgwiBLoJHg3usMQEBAQEBAQaZJgICAQECgUNNAQEBAQEBBwEBAQE4O4QgAQEEOhwjEAgDGAklDwUlAwcaE4gpzmgBAQEHAgEfGIV4hRuELU8HhC0FmwuUY4IiAxyBYiwxgkMBAQE Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail06.adl2.internode.on.net with ESMTP; 10 Apr 2015 08:40:36 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YgLal-0008P8-Bt; Fri, 10 Apr 2015 09:10:35 +1000 Date: Fri, 10 Apr 2015 09:10:35 +1000 From: Dave Chinner To: Joe Landman Cc: linux-raid , xfs Subject: Re: interesting MD-xfs bug Message-ID: <20150409231035.GI13731@dastard> X-ASG-Orig-Subj: Re: interesting MD-xfs bug References: <5526E8E9.3030805@gmail.com> <20150409221846.GG13731@dastard> <5526FB2A.8060704@gmail.com> <20150409225322.GH13731@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150409225322.GH13731@dastard> 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: 1428621044 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17726 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Apr 10, 2015 at 08:53:22AM +1000, Dave Chinner wrote: > On Thu, Apr 09, 2015 at 06:20:26PM -0400, Joe Landman wrote: > > > > > > On 04/09/2015 06:18 PM, Dave Chinner wrote: > > >On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: > > >>If I build an MD raid0 with a non power of 2 chunk size, it appears > > >>that I can mkfs.xfs a file system, but it doesn't show up in blkid > > >>and is not mountable. Yet, using a power of 2 chunk size, this does > > >>work correctly. This is kernel 3.18.9. > > >> > > > > [...] > > > > >That looks more like a blkid or udev problem. try using blkid -p so > > >that it doesn't look up the cache but directly probes devices for > > >the signatures. strace might tell you a bit more, too. And if the > > >filesystem mounts, then it definitely isn't an XFS problem ;) > > > > Thats the thing, it didn't mount, even when I used the device name > > directly. > > Ok, that's interesting. Let me see if I can reproduce it locally. If > you don't hear otherwise, tracing would still be useful. Thanks for > the bug report, Joe. No luck - md doesn't allow the device to be activated on 4.0-rc7: $ sudo mdadm --version mdadm - v3.3.2 - 21st August 2014 $ uname -a Linux test4 4.0.0-rc7-dgc+ #882 SMP Fri Apr 10 08:50:52 AEST 2015 x86_64 GNU/Linux $ sudo wipefs -a /dev/vd[ab] /dev/vda: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9 /dev/vdb: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9 $ sudo mdadm --create /dev/md20 --level=0 --metadata=1.2 --chunk=1152 --auto=yes --raid-disks=2 /dev/vd[ab] mdadm: RUN_ARRAY failed: Invalid argument Problem may be that chunk size is not a power of 2 $ cat /proc/mdstat Personalities : [raid1] [raid10] [raid6] [raid5] [raid4] unused devices: $ So I can't actually reproduce what you are seeing because MD doesn't allow the device to be activated and so mdadm tears it back down. Cheers, Dave. -- Dave Chinner david@fromorbit.com From neilb@suse.de Thu Apr 9 18:37:08 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 1824A7F87 for ; Thu, 9 Apr 2015 18:37:08 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 01B7F304032 for ; Thu, 9 Apr 2015 16:37:04 -0700 (PDT) X-ASG-Debug-ID: 1428622621-04cb6c1cc8163d40001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 0rscFiaOrQQHp49a (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Apr 2015 16:37:02 -0700 (PDT) X-Barracuda-Envelope-From: neilb@suse.de X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 216F1AB5F; Thu, 9 Apr 2015 23:37:00 +0000 (UTC) Date: Fri, 10 Apr 2015 09:36:52 +1000 From: NeilBrown To: Dave Chinner Cc: Joe Landman , linux-raid , xfs Subject: Re: interesting MD-xfs bug Message-ID: <20150410093652.73204748@notabene.brown> X-ASG-Orig-Subj: Re: interesting MD-xfs bug In-Reply-To: <20150409231035.GI13731@dastard> References: <5526E8E9.3030805@gmail.com> <20150409221846.GG13731@dastard> <5526FB2A.8060704@gmail.com> <20150409225322.GH13731@dastard> <20150409231035.GI13731@dastard> X-Mailer: Claws Mail 3.10.1-162-g4d0ed6 (GTK+ 2.24.25; x86_64-suse-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/j+wwvI/G_S+uNcS=ZFU83.E"; protocol="application/pgp-signature" X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1428622622 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17727 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --Sig_/j+wwvI/G_S+uNcS=ZFU83.E Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Fri, 10 Apr 2015 09:10:35 +1000 Dave Chinner wrote: > On Fri, Apr 10, 2015 at 08:53:22AM +1000, Dave Chinner wrote: > > On Thu, Apr 09, 2015 at 06:20:26PM -0400, Joe Landman wrote: > > >=20 > > >=20 > > > On 04/09/2015 06:18 PM, Dave Chinner wrote: > > > >On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: > > > >>If I build an MD raid0 with a non power of 2 chunk size, it appears > > > >>that I can mkfs.xfs a file system, but it doesn't show up in blkid > > > >>and is not mountable. Yet, using a power of 2 chunk size, this does > > > >>work correctly. This is kernel 3.18.9. > > > >> > > >=20 > > > [...] > > >=20 > > > >That looks more like a blkid or udev problem. try using blkid -p so > > > >that it doesn't look up the cache but directly probes devices for > > > >the signatures. strace might tell you a bit more, too. And if the > > > >filesystem mounts, then it definitely isn't an XFS problem ;) > > >=20 > > > Thats the thing, it didn't mount, even when I used the device name > > > directly. > >=20 > > Ok, that's interesting. Let me see if I can reproduce it locally. If > > you don't hear otherwise, tracing would still be useful. Thanks for > > the bug report, Joe. >=20 > No luck - md doesn't allow the device to be activated on 4.0-rc7: >=20 > $ sudo mdadm --version > mdadm - v3.3.2 - 21st August 2014 > $ uname -a > Linux test4 4.0.0-rc7-dgc+ #882 SMP Fri Apr 10 08:50:52 AEST 2015 x86_64 = GNU/Linux > $ sudo wipefs -a /dev/vd[ab] > /dev/vda: 4 bytes were erased at offset 0x00001000 (linux_raid_member): f= c 4e 2b a9 > /dev/vdb: 4 bytes were erased at offset 0x00001000 (linux_raid_member): f= c 4e 2b a9 > $ sudo mdadm --create /dev/md20 --level=3D0 --metadata=3D1.2 --chunk=3D11= 52 --auto=3Dyes --raid-disks=3D2 /dev/vd[ab] Weird. Works for me. Any messages in 'dmesg' ?? How big are /dev/vd[ab]?? NeilBrown > mdadm: RUN_ARRAY failed: Invalid argument > Problem may be that chunk size is not a power of 2 > $ cat /proc/mdstat > Personalities : [raid1] [raid10] [raid6] [raid5] [raid4]=20 > unused devices: > $ >=20 > So I can't actually reproduce what you are seeing because MD doesn't > allow the device to be activated and so mdadm tears it back down. >=20 > Cheers, >=20 > Dave. --Sig_/j+wwvI/G_S+uNcS=ZFU83.E Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIVAwUBVScNFTnsnt1WYoG5AQLKzRAAr89mRPsqZp41aSF64nX7ubGIg2amEbD7 +uLh4iqYTrT0YiT3Pw/5CcW3rs3XYFuW+rWUAnxP90q8gJb6DEwBmJG+8vPsmDxg L0z7PPHXRJauIljdHEgYGiqP6/PhqEeq5PYOka3zAeGxxiUIE7zJAX54g/srwK2O zF6SlBNPQtuXDgkUtKlhZTVRqZXtV3F3aqiFlk306vQuXSAcUkxE7Ymb8qT/WmNc aGcjUs4XE5suUzcQfSBjbgDWCxcPMccnYJ7fyeHpsX6W37OFF068dBe9Ce13t/dH 1GUBO08oeu6QzxpAKEYVc/NZkpVeIsC/4R+0M4ke5Gmx5t57+Eil1+HNb10XhO2i upzLvGstKgD4Zif3uU8oJxoojCUAVO2+HPI1TOMhpd2RSK+1CrQl+mVBnRjo+KNM +R2dUPkqFmASSnoalclthSgpUB34TSJ8bFTroLSPbDVnV5DxEpdUu2vpLd1poYWR 4hQY8Mokszd6JiWpdflizB6fnMQCBs5T9xm0DGb3y0dhbueA5p7XHNmKVE7zEPHB AY67Cl2MCaE4O5rtmmD2gL0A5srkYm46cadne3dV5w58DGxSbF8lhCiNKSRI55HS CZJzzTV9lHWYZF/9sjRhmHOBPJCdEIBcXy0uZ00vzwh0yVLu+8/2MKiNkiGg3TUB aWrP+QHBTwM= =oMF3 -----END PGP SIGNATURE----- --Sig_/j+wwvI/G_S+uNcS=ZFU83.E-- From david@fromorbit.com Thu Apr 9 20:32:05 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C11C17F8E for ; Thu, 9 Apr 2015 20:32:05 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4EB54AC003 for ; Thu, 9 Apr 2015 18:32:02 -0700 (PDT) X-ASG-Debug-ID: 1428629518-04cb6c1cc81678d0001-NocioJ Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id EoOTcMJHNkqD11Qu for ; Thu, 09 Apr 2015 18:31:59 -0700 (PDT) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2AICgC6JidVPM+HLHlcgwiBLoJHg3usMQEBAQEBAQaZJgICAQECgURNAQEBAQEBBwEBAQE4O4QgAQEEOhwjEAgDGAklDwUlAwcaE4gpzmYBAQEHAQEBAR4YhXiFG4QtTweELQWbC5RjgiIDHIFiLDGCQwEBAQ Received: from ppp121-44-135-207.lns20.syd7.internode.on.net (HELO dastard) ([121.44.135.207]) by ipmail06.adl2.internode.on.net with ESMTP; 10 Apr 2015 11:01:58 +0930 Received: from dave by dastard with local (Exim 4.80) (envelope-from ) id 1YgNnZ-0000A2-1l; Fri, 10 Apr 2015 11:31:57 +1000 Date: Fri, 10 Apr 2015 11:31:57 +1000 From: Dave Chinner To: NeilBrown Cc: Joe Landman , linux-raid , xfs Subject: Re: interesting MD-xfs bug Message-ID: <20150410013156.GH15810@dastard> X-ASG-Orig-Subj: Re: interesting MD-xfs bug References: <5526E8E9.3030805@gmail.com> <20150409221846.GG13731@dastard> <5526FB2A.8060704@gmail.com> <20150409225322.GH13731@dastard> <20150409231035.GI13731@dastard> <20150410093652.73204748@notabene.brown> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150410093652.73204748@notabene.brown> 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: 1428629518 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17731 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Fri, Apr 10, 2015 at 09:36:52AM +1000, NeilBrown wrote: > On Fri, 10 Apr 2015 09:10:35 +1000 Dave Chinner wrote: > > > On Fri, Apr 10, 2015 at 08:53:22AM +1000, Dave Chinner wrote: > > > On Thu, Apr 09, 2015 at 06:20:26PM -0400, Joe Landman wrote: > > > > > > > > > > > > On 04/09/2015 06:18 PM, Dave Chinner wrote: > > > > >On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: > > > > >>If I build an MD raid0 with a non power of 2 chunk size, it appears > > > > >>that I can mkfs.xfs a file system, but it doesn't show up in blkid > > > > >>and is not mountable. Yet, using a power of 2 chunk size, this does > > > > >>work correctly. This is kernel 3.18.9. > > > > >> > > > > > > > > [...] > > > > > > > > >That looks more like a blkid or udev problem. try using blkid -p so > > > > >that it doesn't look up the cache but directly probes devices for > > > > >the signatures. strace might tell you a bit more, too. And if the > > > > >filesystem mounts, then it definitely isn't an XFS problem ;) > > > > > > > > Thats the thing, it didn't mount, even when I used the device name > > > > directly. > > > > > > Ok, that's interesting. Let me see if I can reproduce it locally. If > > > you don't hear otherwise, tracing would still be useful. Thanks for > > > the bug report, Joe. > > > > No luck - md doesn't allow the device to be activated on 4.0-rc7: > > > > $ sudo mdadm --version > > mdadm - v3.3.2 - 21st August 2014 > > $ uname -a > > Linux test4 4.0.0-rc7-dgc+ #882 SMP Fri Apr 10 08:50:52 AEST 2015 x86_64 GNU/Linux > > $ sudo wipefs -a /dev/vd[ab] > > /dev/vda: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9 > > /dev/vdb: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9 > > $ sudo mdadm --create /dev/md20 --level=0 --metadata=1.2 --chunk=1152 --auto=yes --raid-disks=2 /dev/vd[ab] > > Weird. Works for me. > Any messages in 'dmesg' ?? > How big are /dev/vd[ab]?? vda is 5GB, vdb is 20GB dmesg: [ 125.131340] md: bind [ 125.134547] md: bind [ 125.139669] md: personality for level 0 is not loaded! [ 125.141302] md: md20 stopped. [ 125.141986] md: unbind [ 125.160100] md: export_rdev(vdb) [ 125.161751] md: unbind [ 125.180126] md: export_rdev(vda) Oh, curious. Going from 4.0-rc4 to 4.0-rc7, and make oldconfig has resulted in: # CONFIG_MD_RAID0 is not set Ok, so with that fixed, it's still horribly broken. RAID 0 on different sized devices should result in a device that is twice the size of the smallest devices: $ sudo mdadm --create /dev/md20 --level=raid0 --metadata=1.2 --chunk=1024 --auto=yes --raid-disks=2 /dev/vd[ab] mdadm: array /dev/md20 started. $ cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md20 : active raid0 vdb[1] vda[0] 26206208 blocks super 1.2 1024k chunks unused devices: $ grep "md\|vd[ab]" /proc/partitions 253 0 5242880 vda 253 16 20971520 vdb 9 20 26206208 md20 $ Oh, "RAID0" is not actually RAID 0 - that's the size I'd expect from a linear mapping. Half way through writing that block device, the IO stats change in an obvious way: Device: r/s w/s rMB/s wMB/s vda 0.00 144.00 0.00 48.00 vdb 0.00 145.20 0.00 48.40 md20 0.00 290.40 0.00 96.80 Device: r/s w/s rMB/s wMB/s vda 0.00 56.40 0.00 18.80 vdb 0.00 229.20 0.00 76.40 md20 0.00 285.20 0.00 95.10 Device: r/s w/s rMB/s wMB/s vda 0.00 0.00 0.00 0.00 vdb 0.00 290.40 0.00 96.80 md20 0.00 290.80 0.00 96.90 So it's actually a stripe for the first 10GB, then some kind of concatenated mapping of the remainder of the single device. That's not what I expected, but it's also clearly not the problem. Anyway, change the stripe size to 1152: sudo mdadm --stop /dev/md20 mdadm: stopped /dev/md20 $ sudo wipefs -a /dev/vd[ab] /dev/vda: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9 /dev/vdb: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9 $ sudo mdadm --create /dev/md20 --level=raid0 --metadata=1.2 --chunk=1152 --auto=yes --raid-disks=2 /dev/vd[ab] mdadm: array /dev/md20 started. $ sudo xfs_io -fd -c "pwrite -b 4m 0 25g" /dev/md20 wrote 26831355904/26843545600 bytes at offset 0 24.989 GiB, 6398 ops; 0:00:16.00 (1.530 GiB/sec and 391.8556 ops/sec) $ Wait, what? Neil, did you put a flux capacitor in MD? :P The underlying drive is only capable of 100MB/s - 25GB of sequential direct IO does not complete in 16 seconds on such a drive. But there's also a 1GB BBWC in front of the physical drives (HW RAID1), but even so, this write rate could only occur if every write is hitting the BBWC. And so it is: $ sudo xfs_io -fd -c "pwrite -b 4m 0 25g" /dev/md20 & iostat -d -m 1 ... Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 4214.00 0.00 1516.99 0 1516 vdb 0.00 0.00 0.00 0 0 md20 4223.00 0.00 1520.00 0 1520 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 2986.00 0.00 1075.01 0 1075 vdb 1174.00 0.00 422.88 0 422 md20 4154.00 0.00 1496.00 0 1496 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 0.00 0.00 0.00 0 0 vdb 4376.00 0.00 1575.12 0 1575 md20 4378.00 0.00 1576.00 0 1576 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 2682.00 0.00 965.74 0 965 vdb 1650.00 0.00 594.00 0 594 md20 4334.00 0.00 1560.00 0 1560 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 4518.00 0.00 1626.26 0 1626 vdb 138.00 0.00 49.50 0 49 md20 4656.00 0.00 1676.00 0 1676 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn vda 0.00 0.00 0.00 0 0 vdb 4214.00 0.00 1517.48 0 1517 md20 4210.00 0.00 1516.00 0 1516 ..... Note how it is cycling from one drive to the other with about a 2s period? Yup, blocktrace on /dev/vda shows it is, indeed, hitting the BBWC because the block mapping is clearly broken: 253,0 4 1 0.000000000 6972 Q WS 8192 + 1008 [xfs_io] 253,0 4 5 0.000068012 6972 Q WS 8192 + 1008 [xfs_io] 253,0 4 9 0.000093266 6972 Q WS 8192 + 288 [xfs_io] 253,0 4 13 0.000129722 6972 Q WS 8193 + 1008 [xfs_io] 253,0 4 17 0.000176872 6972 Q WS 8193 + 1008 [xfs_io] 253,0 4 21 0.000205566 6972 Q WS 8193 + 288 [xfs_io] 253,0 4 25 0.000240846 6972 Q WS 8194 + 1008 [xfs_io] 253,0 4 29 0.000284990 6972 Q WS 8194 + 1008 [xfs_io] 253,0 4 33 0.000313276 6972 Q WS 8194 + 288 [xfs_io] 253,0 4 37 0.000352330 6972 Q WS 8195 + 1008 [xfs_io] 253,0 4 41 0.000374272 6972 Q WS 8195 + 272 [xfs_io] 253,0 4 56 0.001215857 6972 Q WS 8195 + 1008 [xfs_io] 253,0 4 60 0.001252697 6972 Q WS 8195 + 16 [xfs_io] 253,0 4 64 0.001284517 6972 Q WS 8196 + 1008 [xfs_io] 253,0 4 68 0.001326130 6972 Q WS 8196 + 1008 [xfs_io] 253,0 4 72 0.001355050 6972 Q WS 8196 + 288 [xfs_io] 253,0 4 76 0.001393777 6972 Q WS 8197 + 1008 [xfs_io] 253,0 4 80 0.001439547 6972 Q WS 8197 + 1008 [xfs_io] 253,0 4 84 0.001466097 6972 Q WS 8197 + 288 [xfs_io] 253,0 4 88 0.001501267 6972 Q WS 8198 + 1008 [xfs_io] 253,0 4 92 0.001545863 6972 Q WS 8198 + 1008 [xfs_io] 253,0 4 96 0.001571500 6972 Q WS 8198 + 288 [xfs_io] 253,0 4 100 0.001584620 6972 Q WS 8199 + 256 [xfs_io] 253,0 4 116 0.002730034 6972 Q WS 8199 + 1008 [xfs_io] 253,0 4 120 0.002792351 6972 Q WS 8199 + 1008 [xfs_io] 253,0 4 124 0.002810937 6972 Q WS 8199 + 32 [xfs_io] 253,0 4 128 0.002842047 6972 Q WS 8200 + 1008 [xfs_io] 253,0 4 132 0.002889087 6972 Q WS 8200 + 1008 [xfs_io] 253,0 4 136 0.002916894 6972 Q WS 8200 + 288 [xfs_io] 253,0 4 140 0.002952334 6972 Q WS 8201 + 1008 [xfs_io] 253,0 4 144 0.002996101 6972 Q WS 8201 + 1008 [xfs_io] 253,0 4 148 0.003022401 6972 Q WS 8201 + 288 [xfs_io] Multiple IOs to teh same sector, then the sector increments by 1 and we get more IOs to the same sector offset. After about a second the mapping shifts IO to the other block device as it slowly increments the sector, and that's why we see that cycling behaviour. IOWs, something is going wrong with the MD block mapping when the RAID chunk size is not a power of 2.... Over to you, Neil.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From neilb@suse.de Thu Apr 9 22:23:24 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C1C907F78 for ; Thu, 9 Apr 2015 22:23:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3EF5DAC001 for ; Thu, 9 Apr 2015 20:23:20 -0700 (PDT) X-ASG-Debug-ID: 1428636197-04cb6c1cc7169b60001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id kNmPj1p9MCy7yJMR (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 09 Apr 2015 20:23:18 -0700 (PDT) X-Barracuda-Envelope-From: neilb@suse.de X-Barracuda-Apparent-Source-IP: 195.135.220.15 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id B770BAC77; Fri, 10 Apr 2015 03:23:16 +0000 (UTC) Date: Fri, 10 Apr 2015 13:22:53 +1000 From: NeilBrown To: Dave Chinner Cc: Joe Landman , linux-raid , xfs Subject: Re: interesting MD-xfs bug Message-ID: <20150410132253.644e3660@notabene.brown> X-ASG-Orig-Subj: Re: interesting MD-xfs bug In-Reply-To: <20150410013156.GH15810@dastard> References: <5526E8E9.3030805@gmail.com> <20150409221846.GG13731@dastard> <5526FB2A.8060704@gmail.com> <20150409225322.GH13731@dastard> <20150409231035.GI13731@dastard> <20150410093652.73204748@notabene.brown> <20150410013156.GH15810@dastard> X-Mailer: Claws Mail 3.10.1-162-g4d0ed6 (GTK+ 2.24.25; x86_64-suse-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; boundary="Sig_/02vtdpu3HfV619wvKnY.7Pi"; protocol="application/pgp-signature" X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1428636197 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17733 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --Sig_/02vtdpu3HfV619wvKnY.7Pi Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Fri, 10 Apr 2015 11:31:57 +1000 Dave Chinner wrote: > On Fri, Apr 10, 2015 at 09:36:52AM +1000, NeilBrown wrote: > > On Fri, 10 Apr 2015 09:10:35 +1000 Dave Chinner w= rote: > >=20 > > > On Fri, Apr 10, 2015 at 08:53:22AM +1000, Dave Chinner wrote: > > > > On Thu, Apr 09, 2015 at 06:20:26PM -0400, Joe Landman wrote: > > > > >=20 > > > > >=20 > > > > > On 04/09/2015 06:18 PM, Dave Chinner wrote: > > > > > >On Thu, Apr 09, 2015 at 05:02:33PM -0400, Joe Landman wrote: > > > > > >>If I build an MD raid0 with a non power of 2 chunk size, it app= ears > > > > > >>that I can mkfs.xfs a file system, but it doesn't show up in bl= kid > > > > > >>and is not mountable. Yet, using a power of 2 chunk size, this= does > > > > > >>work correctly. This is kernel 3.18.9. > > > > > >> > > > > >=20 > > > > > [...] > > > > >=20 > > > > > >That looks more like a blkid or udev problem. try using blkid -p= so > > > > > >that it doesn't look up the cache but directly probes devices for > > > > > >the signatures. strace might tell you a bit more, too. And if the > > > > > >filesystem mounts, then it definitely isn't an XFS problem ;) > > > > >=20 > > > > > Thats the thing, it didn't mount, even when I used the device name > > > > > directly. > > > >=20 > > > > Ok, that's interesting. Let me see if I can reproduce it locally. If > > > > you don't hear otherwise, tracing would still be useful. Thanks for > > > > the bug report, Joe. > > >=20 > > > No luck - md doesn't allow the device to be activated on 4.0-rc7: > > >=20 > > > $ sudo mdadm --version > > > mdadm - v3.3.2 - 21st August 2014 > > > $ uname -a > > > Linux test4 4.0.0-rc7-dgc+ #882 SMP Fri Apr 10 08:50:52 AEST 2015 x86= _64 GNU/Linux > > > $ sudo wipefs -a /dev/vd[ab] > > > /dev/vda: 4 bytes were erased at offset 0x00001000 (linux_raid_member= ): fc 4e 2b a9 > > > /dev/vdb: 4 bytes were erased at offset 0x00001000 (linux_raid_member= ): fc 4e 2b a9 > > > $ sudo mdadm --create /dev/md20 --level=3D0 --metadata=3D1.2 --chunk= =3D1152 --auto=3Dyes --raid-disks=3D2 /dev/vd[ab] > >=20 > > Weird. Works for me. > > Any messages in 'dmesg' ?? > > How big are /dev/vd[ab]?? >=20 > vda is 5GB, vdb is 20GB >=20 > dmesg: >=20 > [ 125.131340] md: bind > [ 125.134547] md: bind > [ 125.139669] md: personality for level 0 is not loaded! > [ 125.141302] md: md20 stopped. > [ 125.141986] md: unbind > [ 125.160100] md: export_rdev(vdb) > [ 125.161751] md: unbind > [ 125.180126] md: export_rdev(vda) >=20 > Oh, curious. Going from 4.0-rc4 to 4.0-rc7, and make oldconfig > has resulted in: >=20 > # CONFIG_MD_RAID0 is not set >=20 > Ok, so with that fixed, it's still horribly broken. >=20 > RAID 0 on different sized devices should result in a device that is > twice the size of the smallest devices: >=20 > $ sudo mdadm --create /dev/md20 --level=3Draid0 --metadata=3D1.2 --chunk= =3D1024 --auto=3Dyes --raid-disks=3D2 /dev/vd[ab] > mdadm: array /dev/md20 started. > $ cat /proc/mdstat > Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]= =20 > md20 : active raid0 vdb[1] vda[0] > 26206208 blocks super 1.2 1024k chunks > =20 > unused devices: > $ grep "md\|vd[ab]" /proc/partitions=20 > 253 0 5242880 vda > 253 16 20971520 vdb > 9 20 26206208 md20 > $ >=20 > Oh, "RAID0" is not actually RAID 0 - that's the size I'd expect from > a linear mapping. Half way through writing that block device, the IO > stats change in an obvious way: >=20 > Device: r/s w/s rMB/s wMB/s > vda 0.00 144.00 0.00 48.00 > vdb 0.00 145.20 0.00 48.40 > md20 0.00 290.40 0.00 96.80 >=20 > Device: r/s w/s rMB/s wMB/s > vda 0.00 56.40 0.00 18.80 > vdb 0.00 229.20 0.00 76.40 > md20 0.00 285.20 0.00 95.10 >=20 > Device: r/s w/s rMB/s wMB/s > vda 0.00 0.00 0.00 0.00 > vdb 0.00 290.40 0.00 96.80 > md20 0.00 290.80 0.00 96.90 >=20 > So it's actually a stripe for the first 10GB, then some kind of > concatenated mapping of the remainder of the single device. That's > not what I expected, but it's also clearly not the problem. >=20 > Anyway, change the stripe size to 1152: >=20 > sudo mdadm --stop /dev/md20 > mdadm: stopped /dev/md20 > $ sudo wipefs -a /dev/vd[ab] > /dev/vda: 4 bytes were erased at offset 0x00001000 (linux_raid_member): f= c 4e 2b a9 > /dev/vdb: 4 bytes were erased at offset 0x00001000 (linux_raid_member): f= c 4e 2b a9 > $ sudo mdadm --create /dev/md20 --level=3Draid0 --metadata=3D1.2 --chunk= =3D1152 --auto=3Dyes --raid-disks=3D2 /dev/vd[ab] > mdadm: array /dev/md20 started. > $ sudo xfs_io -fd -c "pwrite -b 4m 0 25g" /dev/md20 > wrote 26831355904/26843545600 bytes at offset 0 > 24.989 GiB, 6398 ops; 0:00:16.00 (1.530 GiB/sec and 391.8556 ops/sec) > $ >=20 > Wait, what? Neil, did you put a flux capacitor in MD? :P=20 >=20 > The underlying drive is only capable of 100MB/s - 25GB of sequential > direct IO does not complete in 16 seconds on such a drive. But > there's also a 1GB BBWC in front of the physical drives (HW RAID1), > but even so, this write rate could only occur if every write is > hitting the BBWC. And so it is: >=20 > $ sudo xfs_io -fd -c "pwrite -b 4m 0 25g" /dev/md20 & iostat -d -m 1 > ... > Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn > vda 4214.00 0.00 1516.99 0 1516 > vdb 0.00 0.00 0.00 0 0 > md20 4223.00 0.00 1520.00 0 1520 >=20 > Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn > vda 2986.00 0.00 1075.01 0 1075 > vdb 1174.00 0.00 422.88 0 422 > md20 4154.00 0.00 1496.00 0 1496 >=20 > Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn > vda 0.00 0.00 0.00 0 0 > vdb 4376.00 0.00 1575.12 0 1575 > md20 4378.00 0.00 1576.00 0 1576 >=20 > Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn > vda 2682.00 0.00 965.74 0 965 > vdb 1650.00 0.00 594.00 0 594 > md20 4334.00 0.00 1560.00 0 1560 >=20 > Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn > vda 4518.00 0.00 1626.26 0 1626 > vdb 138.00 0.00 49.50 0 49 > md20 4656.00 0.00 1676.00 0 1676 >=20 > Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn > vda 0.00 0.00 0.00 0 0 > vdb 4214.00 0.00 1517.48 0 1517 > md20 4210.00 0.00 1516.00 0 1516 > ..... >=20 > Note how it is cycling from one drive to the other with about a 2s > period? >=20 > Yup, blocktrace on /dev/vda shows it is, indeed, hitting the BBWC > because the block mapping is clearly broken: >=20 > 253,0 4 1 0.000000000 6972 Q WS 8192 + 1008 [xfs_io] > 253,0 4 5 0.000068012 6972 Q WS 8192 + 1008 [xfs_io] > 253,0 4 9 0.000093266 6972 Q WS 8192 + 288 [xfs_io] > 253,0 4 13 0.000129722 6972 Q WS 8193 + 1008 [xfs_io] > 253,0 4 17 0.000176872 6972 Q WS 8193 + 1008 [xfs_io] > 253,0 4 21 0.000205566 6972 Q WS 8193 + 288 [xfs_io] > 253,0 4 25 0.000240846 6972 Q WS 8194 + 1008 [xfs_io] > 253,0 4 29 0.000284990 6972 Q WS 8194 + 1008 [xfs_io] > 253,0 4 33 0.000313276 6972 Q WS 8194 + 288 [xfs_io] > 253,0 4 37 0.000352330 6972 Q WS 8195 + 1008 [xfs_io] > 253,0 4 41 0.000374272 6972 Q WS 8195 + 272 [xfs_io] > 253,0 4 56 0.001215857 6972 Q WS 8195 + 1008 [xfs_io] > 253,0 4 60 0.001252697 6972 Q WS 8195 + 16 [xfs_io] > 253,0 4 64 0.001284517 6972 Q WS 8196 + 1008 [xfs_io] > 253,0 4 68 0.001326130 6972 Q WS 8196 + 1008 [xfs_io] > 253,0 4 72 0.001355050 6972 Q WS 8196 + 288 [xfs_io] > 253,0 4 76 0.001393777 6972 Q WS 8197 + 1008 [xfs_io] > 253,0 4 80 0.001439547 6972 Q WS 8197 + 1008 [xfs_io] > 253,0 4 84 0.001466097 6972 Q WS 8197 + 288 [xfs_io] > 253,0 4 88 0.001501267 6972 Q WS 8198 + 1008 [xfs_io] > 253,0 4 92 0.001545863 6972 Q WS 8198 + 1008 [xfs_io] > 253,0 4 96 0.001571500 6972 Q WS 8198 + 288 [xfs_io] > 253,0 4 100 0.001584620 6972 Q WS 8199 + 256 [xfs_io] > 253,0 4 116 0.002730034 6972 Q WS 8199 + 1008 [xfs_io] > 253,0 4 120 0.002792351 6972 Q WS 8199 + 1008 [xfs_io] > 253,0 4 124 0.002810937 6972 Q WS 8199 + 32 [xfs_io] > 253,0 4 128 0.002842047 6972 Q WS 8200 + 1008 [xfs_io] > 253,0 4 132 0.002889087 6972 Q WS 8200 + 1008 [xfs_io] > 253,0 4 136 0.002916894 6972 Q WS 8200 + 288 [xfs_io] > 253,0 4 140 0.002952334 6972 Q WS 8201 + 1008 [xfs_io] > 253,0 4 144 0.002996101 6972 Q WS 8201 + 1008 [xfs_io] > 253,0 4 148 0.003022401 6972 Q WS 8201 + 288 [xfs_io] >=20 >=20 > Multiple IOs to teh same sector, then the sector increments by 1 and > we get more IOs to the same sector offset. After about a second the > mapping shifts IO to the other block device as it slowly increments > the sector, and that's why we see that cycling behaviour. >=20 > IOWs, something is going wrong with the MD block mapping when the > RAID chunk size is not a power of 2.... >=20 > Over to you, Neil.... That's .... not good. Not good at all. This should help. It seems that non-power-of-2 chunksizes aren't widely use= d. Thanks, NeilBrown From: NeilBrown Date: Fri, 10 Apr 2015 13:19:04 +1000 Subject: [PATCH] md/raid0: fix bug with chunksize not a power of 2. Since commit 20d0189b1012a37d2533a87fb451f7852f2418d1 in v3.14-rc1 RAID0 has performed incorrect calculations when the chunksize is not a power of 2. This happens because "sector_div()" modifies its first argument, but this wasn't taken into account in the patch. So restore that first arg before re-using the variable. Reported-by: Joe Landman Reported-by: Dave Chinner Fixes: 20d0189b1012a37d2533a87fb451f7852f2418d1 Cc: stable@vger.kernel.org (3.14 and later). Signed-off-by: NeilBrown diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index e074813da6c0..2cb59a641cd2 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c @@ -315,7 +315,7 @@ static struct strip_zone *find_zone(struct r0conf *conf, =20 /* * remaps the bio to the target device. we separate two flows. - * power 2 flow and a general flow for the sake of perfromance + * power 2 flow and a general flow for the sake of performance */ static struct md_rdev *map_sector(struct mddev *mddev, struct strip_zone *= zone, sector_t sector, sector_t *sector_offset) @@ -530,6 +530,7 @@ static void raid0_make_request(struct mddev *mddev, str= uct bio *bio) split =3D bio; } =20 + sector =3D bio->bi_iter.bi_sector; zone =3D find_zone(mddev->private, §or); tmp_dev =3D map_sector(mddev, zone, sector, §or); split->bi_bdev =3D tmp_dev->bdev; --Sig_/02vtdpu3HfV619wvKnY.7Pi Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIVAwUBVSdCEjnsnt1WYoG5AQKT+Q/+PzWsahElSH2BEtSp+Ztqa9S1xzz8R4HO 9Z9pPCd00+tSwUV/Nhmu1dqzsOZGhg2VZ0g4WgCWJDZSEd2s3gjz2bqURYRK8Sci PfitzsoNYt71Ep9eKVG+uLiQKEqVDhXO0qzp9heKThNdCkzNnxCgnEYHtDkAU1H3 SxON3xJ3vBJGNMYjC0NFTbmxasjGXzop2qDGdNHg0fZSVjlceX/NuqBkdrSpLS2r 4cSlG9wS2KTuCXDwmfvd3WmOMJu8JulxoYFX2zTCzKgdJwz2bjesI+Ap8xFk0YSQ zxqrn1mRxJzudIcD5WV3GLrlRppQoSnFLN0T3AEHDsk4Nxiw604kNMol7juhlD/l I2OTMYv5xU3pzODSQ6pyZGegCuinl+mf/jFaiwhEuKS5KNNkV+962/cSj8gaca3e XSmQK36ZTJNIIJfwfUu0wTI7H3p/qBb/wGkHO+gf/TrXIzA+hbKrUjsQvqnIECN6 g/O2+TCXaE3f1NIggmjp63JkL59BHUOwr2PQ9MaD9Il6DhzeH8ssmUWGdLpT5KCU YsQLxHQLv2e64keJDA19fBBo8e5UW70NWUN2/kqydB3A6NZeF0qnRFSCpJlxvBVh dqnCglD13d8TOzyhn54VAmBaqSFK++aIVl0Ql4vumJBwikplKbKlXhTryvnH4yWt ZfqHdKOowp8= =S7VJ -----END PGP SIGNATURE----- --Sig_/02vtdpu3HfV619wvKnY.7Pi-- From shrinand@maginatics.com Thu Apr 9 23:24:04 2015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: xfs@oss.sgi.com Delivered-To: xfs@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F11537F8E for ; Thu, 9 Apr 2015 23:24:03 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id EA4618F8040 for ; Thu, 9 Apr 2015 21:24:00 -0700 (PDT) X-ASG-Debug-ID: 1428639835-04cb6c1cc816ae90001-NocioJ Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com [209.85.212.175]) by cuda.sgi.com with ESMTP id 99lGA9khtWfcF9yG (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 09 Apr 2015 21:23:56 -0700 (PDT) X-Barracuda-Envelope-From: shrinand@maginatics.com X-Barracuda-Apparent-Source-IP: 209.85.212.175 Received: by wiun10 with SMTP id n10so12009737wiu.1 for ; Thu, 09 Apr 2015 21:23:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=XlCyS2foAmrgoCY3IpRTjffo4HKH8a52xrtWAPkX54Y=; b=ZG6//lHtJdYQicx/6S4vIJBu3uS68TAe4BzvhA2xIfsprrXotx91KbCrfH6lL5Ctv7 /r2eey3Bw3bfpSIM8dfkr2snlYGqxEn2EUAFW4uo8KIIWAAv5PTn/17QLsgnsoNbBJD1 a7du4vFfQs3Y52bAv2LyaMz/5xSEdHpTuWHLPaD7tsHneK2xIyvQ58aN9O/LGIBPm7O0 EQvorwF3KUF3xO11/0WRzx3sjER1BJs9ibi+M51v2lsjyaYWz/X8uPnlCFihnyt9gS0i AijpAy2QepaXvp0FgamTv3tQyURvMNJgUT2wogudWrvuy0GnXgeKjaxhTGKVaYGr3ANI 9AfQ== X-Gm-Message-State: ALoCoQkdaJwU94jXeB54+5SISG6JjzX+8o+x0nc7uL0Bzt/fIH7n3EzjPdrPRZLfsQgXmsXkzEL2 MIME-Version: 1.0 X-Received: by 10.194.133.199 with SMTP id pe7mr66942611wjb.120.1428639835258; Thu, 09 Apr 2015 21:23:55 -0700 (PDT) Received: by 10.27.200.136 with HTTP; Thu, 9 Apr 2015 21:23:55 -0700 (PDT) Date: Thu, 9 Apr 2015 21:23:55 -0700 Message-ID: Subject: XFS Syncd From: Shrinand Javadekar X-ASG-Orig-Subj: XFS Syncd To: xfs@oss.sgi.com Content-Type: multipart/mixed; boundary=089e011766dfe61671051357218e X-Barracuda-Connect: mail-wi0-f175.google.com[209.85.212.175] X-Barracuda-Start-Time: 1428639836 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.17735 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- --089e011766dfe61671051357218e Content-Type: text/plain; charset=UTF-8 Hi, I am using the XFS filesystem as the backend for Openstack Swift. On my setup, I have a single server with 8 data disks; each of them is one XFS volume. I am running a workload which does many concurrent writes of 256K files into the XFS volumes. Openstack Swift takes care of evenly distributing the data across all the 8 disks. It also uses extended attributes for each of the files it writes. It also explicitly does a fsync() at the end for each file. I am seeing a behavior where the system pretty much stalls for ~5 seconds after every 30 seconds. I see that the # of ios goes up but the actual write bandwidth during this 5 second period is very low (see attached images). After a fair bit of investigation, we've narrowed down the problem to XFS's syncd (fs.xfs.xfssyncd_centisecs). This runs at a default interval of 30 seconds. I have a couple of questions: 1. If all file writes are done with an fsync() at the end, what is xfssyncd doing for several seconds? 2. How does xfssyncd actually work across several disks? Currently, it seems that when it runs, it pretty much stalls the entire system. 3. I see that fs.xfs.xfssyncd_centisecs is the parameter to tune the interval. But that doesn't give us much. Increasing the interval simply postpones the work. When xfssyncd runs, it takes more time. Are there any other options I can try to make xfssyncd not stall the system when it runs? Thanks in advance. -Shri P.S. I'm not a member of this list. Direct replies appreciated. --089e011766dfe61671051357218e Content-Type: image/png; name="write_throughput6.png" Content-Disposition: attachment; filename="write_throughput6.png" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i8b37wja0 iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXl4VOXZuO/JZDcLEIZ9NbINwSqya1VcwAJBK2pwD9iq 4F5D+H1oxVahmOBXtdW6VfArCKmKlqUWa1kERNKCGwREWQsKk7AEAmR/f3+8c2bLrFkmhHnu68o1 kzNneZezPM95NpNSSiEIgiAIgiAIghAGopq7AYIgCIIgCIIgRA6igAiCIAiCIAiCEDZEAREEQRAE QRAEIWyIAiIIgiAIgiAIQtgQBUQQBEEQBEEQhLAhCoggCIIgCIIgCGFDFBBBEARBEARBEMKGKCCC IAiCIAiCIIQNUUAEQRAEQRAEQQgbooAIgiAIgiAIghA2RAERBEEQBEEQBCFsiAIiCIIgCIIgCELY EAVEEARBEARBEISwIQqIIAiCIAiCIAhhQxQQQRAEQRAEQRDChigggiAIgiAIgiCEDVFABEEQBEEQ BEEIG6KACIIgCIIgCIIQNkQBEQRBEARBEAQhbIgCIgiCIAiCIAhC2BAFRBAEQRAEQRCEsCEKiCAI giAIgiAIYUMUEEEQBEEQBEEQwoYoIIIgCIIgCIIghA1RQARBEARBEARBCBuigAiCIAiCIAiCEDZE AREEQRAEQRAEIWyIAiIIgiAIgiAIQtgQBUQQBEEQBEEQhLAhCoggCIIgCIIgCGFDFBBBEARBEARB EMKGKCCCIAiCIAiCIIQNUUAEQRAEQRAEQQgbooAIgiAIgiAIghA2RAERBEEQBEEQBCFsiAIiCIIg CIIgCELYEAVEEARBEARBEISwIQqIIAiCIAiCIAhhQxQQQRAEQRAEQRDChigggiAIgiAIgiCEDVFA BEEQBEEQBEEIG6KACIIgCIIgCIIQNkQBEQRBEARBEAQhbIgCIgiCIAiCIAhC2BAFRBAEQRAEQRCE sCEKiCAIgiAIgiAIYUMUEEEQBEEQBEEQwoYoIIIgCIIgCIIghA1RQARBEARBEARBCBuigAiCIAiC IAiCEDZEAREEQRAEQRAEIWyIAiIIgiAIgiAIQtgQBUQQBEEQBEEQhLAhCkgDefPNN4mKiiI5ObnO b1u2bOGaa64hOTmZ1q1bM2HCBPbs2dMMrRQEQRAEQRCEswNRQBrAwYMHycnJoVOnTphMJrffduzY wZVXXkl1dTXvvvsub731Fjt37uSnP/0pJSUlzdRiQRAEQRAEQWheTEop1dyNaKlkZmYSHR1Nq1at eO+99zh58qTjt1tuuYW1a9eya9cukpKSANi/fz+9evXiscceY86cOc3VbEEQBEEQBEFoNsQCUk8W LFjAunXrePnll/HU4aqrq1m+fDkTJkxwKB8A3bp1Y+TIkXzwwQfhbq4gCIIgCIIgnBVEN3cDWiKH Dx/m0UcfZc6cOXTq1KnO77t27aK8vJwLL7ywzm8DBgzgn//8J5WVlcTGxjqWl5SUsHLlSnr06EFC QkKTtl8QBEEQhObhzJkz7N27l9GjR9O2bVvH8u+++87Nk0I4t0lOTqZXr17N3YxmQxSQevDAAw9g tVq5//77vf5+5MgRANq0aVPntzZt2qCU4tixY7Rv396xfOXKldxxxx1N02BBEARBEM4qFixYwO23 3w5o5aN3797N3CIh3OzcuTNilRBRQELkvffeY/ny5Xz11VeNut+ePXsC+obUr1+/Rt13S2HcuHEs X768uZvRLERy3yGy+x/JfYfI7n8k9x0it//bt2/njjvucDz3AYfl45lnnnFbLpyb7Nmzh1//+tcR bfESBSQEysrKePDBB3n44Ydp3749x48fB6CyshKA0tJSoqOjSUtLA+Do0aN19nH06FFMJhOtW7d2 Wx4fHw9Av379GDhwYFN246xl0KBB0vcIJZL7H8l9h8jufyT3HaT/xnPflZ49e9K3b99maI0ghBdR QEKgpKQEm83G3LlzmTt3bp3fW7duzQ033MC7775LQkICX3/9dZ11vvnmG3r16uUW/yEIgiAIgiAI kYIoICHQsWNHVq9e7VbzQynFnDlzWLt2Lf/4xz9o27YtZrOZzMxMlixZQl5enlsa3tWrV/P44483 VxcEQRAEQRAEoVkRBSQE4uLiuOKKK+osnzdvHmazmcsvv9yx7De/+Q2DBw9m3Lhx/L//9/84c+YM Tz31FO3atRMFRBCEc4ri4mLycnMpKizEXF1NTXQ01iFDyM3Lw2KxNHfzBEEQhLMMUUAaAZPJVKcS ep8+fVizZg3Tp0/npptuIjo6mquvvpq5c+c6YkQEdw4ePNjcTWg2IrnvENn9b+l9t9lsTBwxgtm7 dpEHmIBaoLCoiKx16yjYuNGvEtLS+98QIrnvIP0PlmPHjrHwxRfZt20b0bW1VEdF0b1/f25/5JE6 8aQt8XhCZCIKSCMwb9485s2bV2f5wIED+ec//9kMLWqZ/O53v2vuJjQbkdx3iOz+t/S+50+fzuxd uxjmsiwKGAbM2rWLvNxc8r3cHw1aev8bQiT3HaT/wXD06FGenjyZ5w8cYChOBX/Tnj3kfPklv5k3 r1GVgnAfT4hcpBK6cNYwatSo5m5CsxHJfYfI7n9L73tRYSFDffw21P67P1p6/xtCJPcdpP/B8M5L LzH3wAGGoZUB0ILbcCD/wAEWvvhiiz6eELmIBUQQBEGoN+bqakw+fouy/y5oJFZGCJV927a5WRdd GQY89cUXJOzY0WjH++8XX/g93pPbtjXasYTIRhQQQRAEod7UREejwKsSUmv/XWh4rIwQmUTX1vpV 8BMPHsR6xx2NdrxEvF/LxvGia2sb7VhCZCNPBuGs4cMPP+SGG25o7mY0C5Hcd4js/rf0vluHDGFT UZHXt6ab7L/7o6X3P1i8xcosBW4guFiZc5FImfuGUB0V5VfBP925M0XPPddoxzs9fTrq4EGfx6uO 8u25/+yzz3LDDTeQkZHBggUL+Oqrr8jPz6empoa77rqLhQsXuq0/e/ZsZsyYwebNm7FYLHTr1s1v 2w4dOsTMmTMB2LFjB3379iUuLo5Ro0Zx+vRpbrnlllC7GzT33XcfL774otfikcGwdu1aLrzwQomf cUFiQAQ3iouLmTZpEmP792d8nz6M7d+faZMmUVxc3OTHXrRoUZMf42wlkvsOkd3/lt733Lw8ZqSn sxEtoGD/3Ag8kZ5Obl6e3+1bev+DxVusjNHzYGJlzkUiZe4bQvf+/fncx2+fA10vvpgzffs22l/X iy/2e7zu/fv7bGtGRgbb7C5aO3fudGQH3bVrF+np6W7rKqWYMWMGAJs3b2b//v0Bx6JDhw689tpr vPbaa3Tv3p3XXnuNl156KeB2SqmA6wRDQ/azevVqjh492ijtOFcQC4jgoLldBAoKCpps32c7kdx3 iOz+t/S+WywWCjZuJC83l2cLCzEXF1NTXIz1ttsoeOGFgPeMlt7/YPEWK2P0PFJjZSJl7hvC7Y88 Qs6XX5JvDwyPQj+XPwemdenCbx555Kw5XkZGBvPnzycrK4vKykq6dOnCoUOH2Lp1KxkZGSxfvpxV q1ZRW1vLrbfeyssvv8wbb7zBsmXLWLVqFatWreKpp54iLy+P3bt3YzabmTlzJu3atQvY7v/85z98 9tlnHDt2jOeff562bdsyYcIE+vTpQ7t27Rg7dixz5swBYMSIEdxzzz28/vrrWK1WLrvsMt5//33i 4uIYN24cc+bMYc+ePWRkZLB161Zee+01AP70pz+xfft2LrjgAqZPn86yZctYs2YN1dXVnDp1ilmz ZtG+fXvuvPNO/vKXvwAwadIkZs2axcaNG9mzZw9Dhw5l6tSpDZylcwOxgAgOXF0EXLNfuKbTFARB 8MRisZA/bx4rtm1j6fTprADyX3pJYhpcMGJlvCGxMoIvWrduzW/mzeONceO4pmdPRnXvzjU9e/LG uHFNkhK3Icc7//zz2b17N0eOHKFt27b079+frVu3snXrVgYMGABAUlISL7zwAkOHantgXFwcmZmZ PPTQQzz11FOsW7eO1NRUXn31VR588EHmz58fsM1KKZKTk3nhhRf4+c9/zr/+9S8ASkpKmDFjBo8+ +iivvPIKv/71r/nzn//MF198wY8//uh1X9u2baOsrIzXXnvN0UaDq666ijfeeIPvvvuOsrIyABIT E3nxxRf55S9/yf/93/8B1KkL16lTJ0aMGMHMmTNF+XBB7niCg6LCQnw5SwwFno1AFwFBEELEeJMf gW/0/dHQWBkhcmndujUPPv30WX+8qKgoUlNTWb9+Pf3796d///4sXryY77//nl69erFr1y76+3Dh Mtybdu/ezerVq9myZQsA7du3D3hck8lE7969Hetv3boVgK5du5KUlATo+iY9evQAoG/fvhw4cKCO ogC6OGa/fv0AsFqtbr/16dMHgHbt2lFWVobJZKJv374A9O/fv06Mi2u/PL8LYgERXJB0moIgNJia Gv0p9ws3GhorIwgtgYyMDP76178yYMAAOnTowM6dO0lISCDabuHzJvRHR0dTY79v9OzZk2uvvdYR 6/HUU08FdVxjv0oph6Af5RIw36ZNG/bu3YtSih07dtClSxdSUlI4fPgwAEVFRQB06dKFb7/9FoDt 27d7PYbrcYx1i4qKHEH0FRUV1NbW8uOPP3L8+HFHH2slg5gbooAIDprbRWDSpElNuv+zDdeA/26p qWEN+D/biLS5d+Wc63uIFpBzrv8+MGJllmRnk2m1Mj4xke5mM0uysyM2BW+kzH0kkZGRwaFDh+jS pQsA8fHxblYPVyHe+D548GAWLlzICy+8wOWXX05paSn3338/999/PytWrPB6HE9FxvjfZDJ5VXKm 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 k5Pt+506dYr8/Hy6dOnicgzNUOnUqRM9evQIhAphz6233iq6RyiRrH8k6w6RrX8k6w6iv/MEJaiT kR07dgyBNIIQXCQJ3UdiYmJISUnhq6++orCw0L79yJEjfPfdd9x33332bUOHDqVevXpkZmY6HCMz MxOTycQ999wTLLEFQRAEQRAEIawQD4iNNWvWcOnSJbvrac+ePSxbtgyA4cOHU79+fWbNmkXPnj25 ++67efbZZykuLubFF1/kmmuu4ZlnnrEfKy4ujhdeeIE//elPNG3alMGDB7N9+3ZmzZrFxIkTZXZD EARBEARBiFjEALHxxBNPcPjwYUBdBX3p0qUsXboUk8lETk4ON9xwAx06dGDDhg1MmzaNkSNHEhMT w6BBg3j99dftOSIazz//PI0aNeLdd9/l9ddf57rrruO5555j+vTpoVBPEARBEARBEMICMUBs5OTk +LRfjx49WL9+vU/7PvXUUzz11FPVESuiOH78eKhFCBmRrDtEtv6RrDtEtv6RrDuI/r5y7tw53vro LfYc3EM55UQRRee2nXl64tP24jc1+XxCZCIGiBA2vPrqq6EWIWREsu4Q2fpHsu4Q2fpHsu4g+vvC 2bNneei/H+JYn2OQApgABXKO5/DTH39iwZsL/GoUBPt8QuQiSehC2DBkyJBQixAyIll3iGz9I1l3 iGz9I1l3EP194e2P31aNgZaoxgC23y3hWO9jvPXRWzX6fELkIh4QQRAEQRCEMGTPwT2qJ8KIlvDj ih/Zd2Gf38734y8/grtCnS1hz6o9br+rLapotVo5fPgwbdu2BeDGG29kzpw5Lvvv37+fI0eOcMcd d3iVa8eOHbz11lt8+umnhp9v27aNjz76iDNnznD11VfTsGFDHn30Ubp3786kSZM4deoUDRs25MqV KwwaNIjHH3+cEydOMGHCBP75z386HKtnz55s3LjRpUzyhx9+SHFxMU8//bR926pVq9i0aROvvfaa oT5jx45lwYIF1KlTh5SUFN566y3atGnDK6+8wt1330337t296m7Ehx9+yEMPPURMjDqM/+CDD2jT pg2DBw+u0vFCgRgggiAIgiAIYUg55RWeCGdMcPzyccZtHOe/E17G4/nKKXf71YULFwJw8uRJxo8f b//fHb/88gubNm3yyQDxxLZt25gxYwZz586la9euABw9epT9+/fb9zGbzfTr14/CwkLGjh1Lly5d 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 NKjqt2/fnnGcwWDA2bNnsXbtWuVYbTo7OzE+Pj5t2CMiotmNV0CI6Lc10y/0/+QtPC4uLigrK4PR aMSXL1+wa9cu6PV69Pf349WrVxgYGEBFRcWM48PDw2E2m5GTk6PUr169itbWVsTFxcHHxwcjIyO4 fv06hBCIiYkBAKSkpODWrVuIi4tDZmYmNmzYAGdnZ/T29sJsNiMpKQk7d+7EH3/8gezsbFy4cAHD w8NISUmBq6sr3r59C4vFgtzcXLi6uuLcuXPIzs6G0WhESkoKLBYL8vLysGDBApw/f/6Xz2F6ejqK i4uRnp6OixcvwmAwoLGxEY8ePVL1dXR04Pjx49i7dy8MBgM0Gg1aWlrw+vVrnDlzRtX7+PFjODs7 TwpEREQ0NzCAENFvSQgx7S/0M637le3/p9TUVPj4+KCoqAhHjx7F0NAQ9Ho91q1bN+mh7qkcO3YM KSkp6OnpwYoVKwD8dWWkqakJubm5+Pz5M1xcXBAQEID6+nolgDg4OKC+vh4lJSWorq5Gfn4+nJyc 4O3tjYiICAQGBir7yMvLg5+fH8rKypCWlgYnJyesXr0aJ0+eVHqysrKg1+tRWlqKmpoaaLVaREZG 4tKlS/D19VUd/1TncGJdq9WipaUFmZmZyMrKghACsbGxuHv3LkJDQ5U+Ly8vGAwGVFRUoKenB0II +Pr64sqVKzhx4oRqH9XV1dizZ49yyxgREc0tQvJJQCKi/5vVakVgYCDi4uKUB9dpsufPnyMsLAwv X75EQEDAvz0dIiL6FzCAEBH9Q8xmM+Lj4/Hu3bsZ31Y1l0VHR2PNmjWqN4EREdHcwgBCRERERER2 w7dgERERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCA EBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBER ERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR3TCAEBERERGR 3TCAEBERERGR3TCAEBERERGR3fwJ4vji9BymjK0AAAAASUVORK5CYII= --089e011766dfe61671051357218e Content-Type: image/png; name="read_write_requests_complete_rate6.png" Content-Disposition: attachment; filename="read_write_requests_complete_rate6.png" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i8b38ryt1 iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl4TGf/P/D3TEYJgiilaklKLInlhwqhj1BfW+h0QVMV JFRpQ+hDQm2haJNQRVBLNZZULF1sqaVUqT6pkFgTJCVpaqk11iRI5vz+ODJ3RmZCKpk5M/N+XVeu zJxzzzn3eY9p55P73OeoJEmSQEREREREZAZqS3eAiIiIiIjsBwsQIiIiIiIyGxYgRERERERkNixA iIiIiIjIbFiAEBERERGR2bAAISIiIiIis2EBQkREREREZsMChIiIiIiIzIYFCBERERERmQ0LECIi IiIiMhsWIEREREREZDYsQIiIiIiIyGxYgBARERERkdmwACEiIiIiIrNhAUJERERERGbDAoSIiIiI iMyGBQgREREREZkNCxAiIiIiIjIbFiBERERERGQ2LECIiIiIiMhsWIAQEREREZHZsAAhIiIiIiKz YQFCRERERERmwwKEiIiIiIjMhgUIERERERGZDQsQIiIiIiIyGxYgRERERERkNixAiIiIiIjIbFiA EBERERGR2bAAISIiIiIis2EBQkREREREZsMChIiIiIiIzIYFCBERERERmQ0LECIiIiIiMhsWIERE REREZDYsQIiIiIiIyGxYgBARERERkdmwACEiIiIiIrNhAUJERERERGbDAoSIiIiIiMyGBQgRERER EZkNCxAiIiIiIjIbFiBERERERGQ2LECIiIiIiMhsWIAQEREREZHZsAAhIiIiIiKzYQFCRERERERm wwKEiIiIiIjMhgUIERERERGZDQsQIiIiIiIyGxYgRERERERkNixAiIiIiIjIbFiAEBERERGR2bAA ISIiIiIis2EBQkREREREZsMCpBTcvXsXbdu2hZOTE5KSkvTL//rrL5QrVw7JyckW7B0RERERkeWw ACkFjo6OiI2NRd++fQ2WR0RE4NVXX4UkSRbqGRERERGRZWks3QFb5ODggGrVqhksS0tLg1qtRp06 dYy+5tq1a9i5cydcXFzg6Ohojm4SERGRDcrOzkZ6ejq6d+9e6PtIamoq7ty5Y6GekRI5OTnBzc3N rPtkAVLKVCoVAHn0Y8KECZg2bZp+WUE7d+6En5+fubtHRERENio6OhoDBgzQP09NTUXDhg0t2CNS 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 rnX79u0AVFdXM2/ePP7zn/9w/vx5